pax_global_header00006660000000000000000000000064151141144600014507gustar00rootroot0000000000000052 comment=09bc14ae424afb1067b7bb2c88681d87c918011e DataLab-1.0.2/000077500000000000000000000000001511411446000127775ustar00rootroot00000000000000DataLab-1.0.2/.coveragerc000066400000000000000000000012531511411446000151210ustar00rootroot00000000000000[run] #--- Ignore this warning because the process isolation feature of DataLab #--- causes coverage to report 0% coverage when no computation is performed #--- in the isolated process during the session. disable_warnings = no-data-collected parallel = True concurrency = multiprocessing,thread omit = */datalab/utils/tests.py */datalab/tests/* */guidata/* */plotpy/* */qwt/* */sigima/* #--- Workaround for certain builds of python-opencv package: ./config-3.9.py ./config-3.py ./config.py #--- [report] exclude_also = def __repr__ if __name__ == .__main__.: if TYPE_CHECKING: if DEBUG[\s]*: if self.__debug[\s]*: DataLab-1.0.2/.env.template000066400000000000000000000000141511411446000153750ustar00rootroot00000000000000PYTHONPATH=.DataLab-1.0.2/.github/000077500000000000000000000000001511411446000143375ustar00rootroot00000000000000DataLab-1.0.2/.github/ISSUE_TEMPLATE/000077500000000000000000000000001511411446000165225ustar00rootroot00000000000000DataLab-1.0.2/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000013341511411446000212150ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Installation information** - DataLab installation type ["Python package" or "stand-alone Windows version"] - Copy/paste here the contents of "About DataLab installation..." window (Menu "?") **Additional context** Add any other context about the problem here. DataLab-1.0.2/.github/ISSUE_TEMPLATE/doc_request.md000066400000000000000000000011411511411446000213560ustar00rootroot00000000000000--- name: Documentation request about: Ask for documentation about a specific topic title: '' labels: documentation assignees: '' --- **Is your documentation request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the topic you would like to be covered** A clear and concise description of what you want to be documented. **Describe the nature of the documentation you would like to see** Tutorial, reference, etc. **Additional context** Add any other context or screenshots about the feature request here. DataLab-1.0.2/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011341511411446000222460ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: enhancement assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. DataLab-1.0.2/.github/ISSUE_TEMPLATE/tutorial_request.md000066400000000000000000000014571511411446000224660ustar00rootroot00000000000000--- name: Tutorial request about: Ask for a tutorial on a specific topic title: '' labels: documentation assignees: '' --- **Describe the context and technical field of the tutorial you would like to see** A clear and concise description of your technical field, and of the specific application. **Describe the topic you would like to be covered** A clear and concise description of what you want to be documented. **Describe the features you would like to see in the tutorial** A clear and concise description of the features you would like to see in the tutorial. **Additional context** Add any other context or screenshots about the feature request here. _Please attach an example data set, if possible. And please confirm that you are willing to share this data set under the terms of DataLab's license._ DataLab-1.0.2/.github/copilot-instructions.md000066400000000000000000000451741511411446000211070ustar00rootroot00000000000000# DataLab AI Coding Agent Instructions This document provides comprehensive guidance for AI coding agents working on the DataLab codebase. It covers architecture patterns, development workflows, and project-specific conventions. ## Project Overview **DataLab** is an open-source platform for scientific and technical data processing with a Qt-based GUI. It processes **signals** (1D curves) and **images** (2D arrays). ### Key Architecture Components 1. **Sigima**: Separate computation library providing all processing algorithms (`sigima.proc`) 2. **DataLab GUI**: Qt application layer built on PlotPyStack (PlotPy + guidata) 3. **Processor Pattern**: Bridge between GUI and computation functions 4. **Action Handler**: Manages menus, toolbars, and GUI actions 5. **Plugin System**: Extensible architecture for third-party features 6. **Macro System**: User-scriptable automation via Python 7. **Remote Control**: XML-RPC API for external applications ### Technology Stack - **Python**: 3.9+ (using `from __future__ import annotations`) - **Core Libraries**: NumPy (≥1.26.4), SciPy (≥1.10.1), scikit-image, OpenCV - **GUI**: Qt via PlotPy (≥2.8.2) and guidata (≥3.13.3) - **Computation**: Sigima (≥1.0.2) - separate package - **Testing**: pytest with coverage - **Linting/Formatting**: Ruff (preferred), Pylint (with specific disables) - **Internationalization**: gettext (.po files), sphinx-intl for docs - **Documentation**: Sphinx with French translations - **Packaging**: PyInstaller (standalone), WiX (MSI installer) ### Workspace Structure ``` DataLab/ ├── datalab/ # Main application code │ ├── gui/ # GUI layer │ │ ├── processor/ # Processor pattern (signal.py, image.py, base.py) │ │ ├── actionhandler.py # Menu/action management │ │ ├── main.py # Main window │ │ └── panel/ # Signal/Image panels │ ├── control/ # Remote control API (proxy.py, remote.py) │ ├── plugins/ # Plugin system │ ├── tests/ # pytest test suite │ ├── locale/ # Translations (.po files) │ └── config.py # Configuration management ├── doc/ # Sphinx documentation │ ├── locale/fr/ # French documentation translations │ └── features/ # Feature documentation (signal/, image/) ├── macros/examples/ # Demo macros ├── scripts/ # Build/development scripts │ └── run_with_env.py # Environment loader (.env support) ├── .env # Local Python path (PYTHONPATH=.;../guidata;../plotpy;../sigima) └── pyproject.toml # Project configuration ``` **Related Projects** (sibling directories in multi-root workspace): - `../Sigima/` - Computation library - `../PlotPy/` - Plotting library - `../guidata/` - GUI toolkit - `../PythonQwt/` - Qwt bindings ## Development Workflows ### Running Commands **ALWAYS use `scripts/run_with_env.py` for Python commands** to load environment from `.env`: ```powershell # ✅ CORRECT - Loads PYTHONPATH from .env python scripts/run_with_env.py python -m pytest # ❌ WRONG - Misses local development packages python -m pytest ``` ### Testing ```powershell # Run all tests python scripts/run_with_env.py python -m pytest --ff # Run specific test python scripts/run_with_env.py python -m pytest datalab/tests/features/signal/ # Coverage python scripts/run_with_env.py python -m coverage run -m pytest datalab python -m coverage html ``` ### Linting and Formatting **Prefer Ruff** (fast, modern): ```powershell # Format code python scripts/run_with_env.py python -m ruff format # Lint with auto-fix python scripts/run_with_env.py python -m ruff check --fix ``` **Pylint** (with extensive disables for code structure): ```powershell python scripts/run_with_env.py python -m pylint datalab \ --disable=duplicate-code,fixme,too-many-arguments,too-many-branches, \ too-many-instance-attributes,too-many-lines,too-many-locals, \ too-many-public-methods,too-many-statements ``` ### Translations **UI Translations** (gettext): ```powershell # Scan and update .po files python scripts/run_with_env.py python -m guidata.utils.translations scan \ --name datalab --directory . --copyright-holder "DataLab Platform Developers" \ --languages fr # Compile .mo files python scripts/run_with_env.py python -m guidata.utils.translations compile \ --name datalab --directory . ``` **Documentation Translations** (sphinx-intl): ```powershell # Extract translatable strings python scripts/run_with_env.py python -m sphinx build doc build/gettext -b gettext -W # Update French .po files python scripts/run_with_env.py python -m sphinx_intl update -d doc/locale -p build/gettext -l fr # Build localized docs python scripts/run_with_env.py python -m sphinx build doc build/doc -b html -D language=fr ``` ## Core Patterns ### 1. Processor Pattern (GUI ↔ Computation Bridge) **Location**: `datalab/gui/processor/` **Key Concept**: Processors bridge GUI panels and Sigima computation functions. They define **generic processing types** based on input/output patterns. #### Generic Processing Types | Method | Pattern | Multi-selection | Use Cases | |--------|---------|----------------|-----------| | `compute_1_to_1` | 1 obj → 1 obj | k → k | Independent transformations (FFT, normalization) | | `compute_1_to_0` | 1 obj → metadata | k → 0 | Analysis producing scalar results (FWHM, centroid) | | `compute_1_to_n` | 1 obj → n objs | k → k·n | ROI extraction, splitting | | `compute_n_to_1` | n objs → 1 obj | n → 1 (or n → n pairwise) | Averaging, summing, concatenation | | `compute_2_to_1` | 1 obj + 1 operand → 1 obj | k + 1 → k (or n + n pairwise) | Binary operations (add, multiply) | **Example: Implementing a New Processing Feature** ```python # 1. Implement computation in Sigima (sigima/proc/signal/processing.py) def my_processing_func(src: SignalObj, param: MyParam) -> SignalObj: """My processing function.""" dst = src.copy() # ... computation logic ... return dst # 2. Register in DataLab processor (datalab/gui/processor/signal.py) def register_processing(self) -> None: self.register_1_to_1( sips.my_processing_func, _("My Processing"), paramclass=MyParam, icon_name="my_icon.svg", ) ``` #### Registration Methods ```python # In SignalProcessor or ImageProcessor class def register_operations(self) -> None: """Register operations (basic math, transformations).""" # 1-to-1: Apply to each selected object independently self.register_1_to_1( sips.normalize, _("Normalize"), paramclass=sigima.params.NormalizeParam, icon_name="normalize.svg", ) # 2-to-1: Binary operation with a second operand self.register_2_to_1( sips.difference, _("Difference"), icon_name="difference.svg", obj2_name=_("signal to subtract"), skip_xarray_compat=False, # Enable X-array compatibility check ) # n-to-1: Aggregate multiple objects self.register_n_to_1( sips.average, _("Average"), icon_name="average.svg", ) ``` ### 2. X-array Compatibility System **Critical Pattern**: For **2-to-1** and **n-to-1** operations on signals, DataLab checks if X arrays match. If not, it **interpolates** the second signal to match the first. **When to Skip**: Use `skip_xarray_compat=True` when operations **intentionally use mismatched X arrays** (e.g., replacing X with Y values from another signal). ```python # ❌ BAD: Will trigger unwanted interpolation self.register_2_to_1( sips.replace_x_by_other_y, _("Replace X by other signal's Y"), ) # ✅ GOOD: Skips compatibility check self.register_2_to_1( sips.replace_x_by_other_y, _("Replace X by other signal's Y"), skip_xarray_compat=True, # Operation uses Y values as X coordinates ) ``` **Code Location**: `datalab/gui/processor/base.py` (lines ~1764, 1886) ### 3. Action Handler Pattern (Menu Management) **Location**: `datalab/gui/actionhandler.py` **Purpose**: Manages all GUI actions (menus, toolbars, context menus). Actions point to processors, panels, or direct operations. **Key Classes**: - `SignalActionHandler`: Signal-specific actions - `ImageActionHandler`: Image-specific actions - `SelectCond`: Conditions for enabling/disabling actions **Example: Adding a Menu Action** ```python # In SignalActionHandler or ImageActionHandler def setup_processing_actions(self) -> None: """Setup processing menu actions.""" # Reference registered processor operation act = self.action_for("my_processing_func") # Add to menu self.processing_menu.addAction(act) ``` **Menu Organization**: Menus are organized by function: - `File` → Import/export, project management - `Edit` → Copy/paste, delete, metadata editing - `Operation` → Basic math (add, multiply, etc.) - `Processing` → Advanced transformations, filters - `Axis transformation` → Calibration, X-Y mode, replace X - `Analysis` → Measurements, ROI extraction - `Computing` → FFT, convolution, fit The complete menu structure is defined in `datalab/gui/actionhandler.py`. A text extract of the menu hiearchy is available in `scripts/datalab_menus.txt` (it is generated with `scripts/print_datalab_menus.py`). ### 4. Plugin System **Location**: `datalab/plugins.py`, `datalab/plugins/` **Key Classes**: - `PluginBase`: Base class for all plugins (uses metaclass `PluginRegistry`) - `PluginInfo`: Plugin metadata (name, version, description, icon) **Example: Creating a Plugin** ```python from datalab.plugins import PluginBase, PluginInfo class MyPlugin(PluginBase): """My custom plugin.""" def __init__(self): super().__init__() self.info = PluginInfo( name="My Plugin", version="1.0.0", description="Does something useful", icon="my_icon.svg", ) def register(self, mainwindow: DLMainWindow) -> None: """Register plugin with main window.""" # Add menu items, actions, etc. pass def unregister(self) -> None: """Unregister plugin.""" pass ``` **Plugin Discovery**: Plugins are loaded from: 1. `datalab/plugins/` (built-in) 2. User-defined paths in `Conf.get_path("plugins")` 3. For frozen apps, from `plugins/` directory next to executable ### 5. Macro System **Location**: `macros/examples/` **Purpose**: User-scriptable automation using Python. Macros use the **Remote Proxy** API to control DataLab. **Example Macro**: ```python from datalab.control.proxy import RemoteProxy import numpy as np proxy = RemoteProxy() # Create signal x = np.linspace(0, 10, 100) y = np.sin(x) proxy.add_signal("My Signal", x, y) # Apply processing proxy.calc("normalize") proxy.calc("moving_average", sigima.params.MovingAverageParam.create(n=5)) ``` **Key API Methods**: - `proxy.add_signal()`, `proxy.add_image()`: Create objects - `proxy.calc()`: Run processor methods - `proxy.get_object()`: Retrieve data - `proxy.delete_object()`: Remove objects ### 6. Remote Control API **Location**: `datalab/control/` **Classes**: - `RemoteProxy`: XML-RPC client for remote DataLab control - `LocalProxy`: Direct access for same-process scripting **Calling Processor Methods**: ```python # Without parameters proxy.calc("average") # With parameters p = sigima.params.MovingAverageParam.create(n=30) proxy.calc("moving_average", p) ``` ## Coding Conventions ### Naming - **Functions**: `snake_case` (e.g., `replace_x_by_other_y`) - **Classes**: `PascalCase` (e.g., `SignalProcessor`) - **Constants**: `UPPER_SNAKE_CASE` (e.g., `PARAM_DEFAULTS`) - **Private methods**: `_snake_case` (single underscore prefix) ### UI Text vs Function Names - **Function name**: Technical, precise (e.g., `replace_x_by_other_y`) - **UI text**: User-friendly, explicit (e.g., _("Replace X by other signal's Y")) - **French translation**: Natural phrasing (e.g., "Remplacer X par le Y d'un autre signal") ### Type Annotations **Always use** `from __future__ import annotations` for forward references: ```python from __future__ import annotations def process_signal(src: SignalObj) -> SignalObj: """Process signal.""" pass ``` ### Docstrings Use **Google-style docstrings** with type hints: ```python def compute_feature(obj: SignalObj, param: MyParam) -> SignalObj: """Compute feature on signal. Args: obj: Input signal object param: Processing parameters Returns: Processed signal object """ ``` For continued lines in enumerations (args, returns), indent subsequent lines by 1 space: ```python def compute_feature(obj: SignalObj, param: MyParam) -> SignalObj: """Compute feature on signal. Args: obj: Input signal object param: Processing parameters, with a very long description that continues on the next line. Returns: Processed signal object """ ``` ### Imports **Order**: Standard library → Third-party → Local ```python from __future__ import annotations import os from typing import TYPE_CHECKING import numpy as np from guidata.qthelpers import create_action from datalab.config import _ from datalab.gui.processor.base import BaseProcessor if TYPE_CHECKING: from sigima.objects import SignalObj ``` ### Internationalization **Always wrap UI strings** with `_()`: ```python from datalab.config import _ # ✅ CORRECT menu_title = _("Processing") action_text = _("Replace X by other signal's Y") # ❌ WRONG menu_title = "Processing" # Not translatable! ``` ## Common Tasks ### Adding a New Signal Processing Feature **Complete workflow**: 1. **Implement computation in Sigima** (`sigima/proc/signal/processing.py`): ```python def my_feature(src: SignalObj, param: MyParam | None = None) -> SignalObj: """My feature.""" dst = src.copy() # ... computation ... return dst ``` 2. **Export from Sigima** (`sigima/proc/signal/__init__.py`): ```python from sigima.proc.signal.processing import my_feature # Import __all__ = [..., "my_feature"] # Export ``` 3. **Register in DataLab processor** (`datalab/gui/processor/signal.py`): ```python def register_processing(self) -> None: self.register_1_to_1( sips.my_feature, _("My Feature"), paramclass=MyParam, icon_name="my_icon.svg", ) ``` 4. **Add menu action** (`datalab/gui/actionhandler.py`): ```python def setup_processing_actions(self) -> None: act = self.action_for("my_feature") self.processing_menu.addAction(act) ``` 5. **Add tests** (`datalab/tests/features/signal/`): ```python def test_my_feature(): obj = SignalObj.create(...) result = sips.my_feature(obj) assert result is not None ``` 6. **Document** (`doc/features/signal/menu_processing.rst`): ````rst My Feature ^^^^^^^^^^ Create a new signal by applying my feature: .. image:: /images/my_feature.png Parameters: - **Parameter 1**: Description ```` 7. **Translate**: ```powershell # UI translation python scripts/run_with_env.py python -m guidata.utils.translations scan ... # Doc translation python scripts/run_with_env.py python -m sphinx_intl update -d doc/locale -p build/gettext -l fr ``` ### Working with X-array Compatibility **Rule of thumb**: - **Most 2-to-1 operations**: Default behavior (auto-interpolation) is correct - **X coordinate manipulation**: Set `skip_xarray_compat=True` **Examples**: - ✅ `difference` (subtract two signals): Compatible X arrays expected → `skip_xarray_compat=False` - ✅ `xy_mode` (swap X and Y): Uses Y as new X → `skip_xarray_compat=True` - ✅ `replace_x_by_other_y`: Takes Y from second signal as X → `skip_xarray_compat=True` ### Debugging Tips 1. **Check processor registration**: Look in `register_operations()` methods 2. **Verify action handler**: Search `actionhandler.py` for `action_for("function_name")` 3. **Test in isolation**: Use pytest with `--ff` flag (fail-fast) 4. **Check translations**: Missing `_()` wrapper causes English-only UI 5. **Verify imports**: Ensure function is in `__all__` export list ## Release Classification **Bug Fix** (patch release: 1.0.x): - Fixes incorrect behavior - Restores expected functionality - Addresses user-reported issues - **Example**: Adding `replace_x_by_other_y` to handle wavelength calibration (was previously impossible) **Feature** (minor release: 1.x.0): - Adds entirely new capability - Extends functionality beyond original scope - Introduces new UI elements or workflows ## VS Code Tasks The workspace includes predefined tasks (`.vscode/tasks.json`). Access via: - `Ctrl+Shift+B` → "🧽🔦 Ruff" (format + lint) - Terminal → "Run Task..." → "🚀 Pytest", "📚 Compile translations", etc. **Key Tasks**: - `🧽🔦 Ruff`: Format and lint code - `🚀 Pytest`: Run tests with `--ff` - `📚 Compile translations`: Build .mo files - `🔎 Scan translations`: Update .po files - `🌐 Build/open HTML doc`: Generate and open Sphinx docs ## Multi-Root Workspace DataLab development uses a **multi-root workspace** (`.code-workspace` file) with sibling projects: - `DataLab/` - Main GUI application - `Sigima/` - Computation library - `PlotPy/` - Plotting library - `guidata/` - GUI toolkit - `PythonQwt/` - Qwt bindings **When working across projects**: 1. Changes in `Sigima` require importing in `DataLab` 2. Use `.env` file to point to local development versions 3. Test changes in both Sigima unit tests AND DataLab integration tests ## Key Files Reference | File | Purpose | |------|---------| | `datalab/gui/processor/signal.py` | Signal processor registration | | `datalab/gui/processor/image.py` | Image processor registration | | `datalab/gui/processor/base.py` | Base processor class (generic methods) | | `datalab/gui/actionhandler.py` | Menu and action management | | `datalab/config.py` | Configuration, `_()` translation function | | `datalab/plugins.py` | Plugin system implementation | | `datalab/control/proxy.py` | Remote control API (RemoteProxy, LocalProxy) | | `sigima/proc/signal/processing.py` | Signal computation functions | | `sigima/proc/image/processing.py` | Image computation functions | | `scripts/run_with_env.py` | Environment loader (loads `.env`) | | `.env` | Local PYTHONPATH for development | ## Getting Help - **Documentation**: https://datalab-platform.com/ - **Issues**: https://github.com/DataLab-Platform/DataLab/issues - **Contributing**: https://datalab-platform.com/en/contributing/index.html - **Support**: p.raybaut@codra.fr --- **Remember**: Always use `scripts/run_with_env.py` for Python commands, wrap UI strings with `_()`, and consider X-array compatibility when adding 2-to-1 signal operations. DataLab-1.0.2/.github/workflows/000077500000000000000000000000001511411446000163745ustar00rootroot00000000000000DataLab-1.0.2/.github/workflows/test_pyqt5.yml000066400000000000000000000112141511411446000212370ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python # Inspired from https://pytest-qt.readthedocs.io/en/latest/troubleshooting.html#github-actions name: Install and Test on Ubuntu (latest) with PyQt5 on: push: branches: [ "main", "develop", "release" ] pull_request: branches: [ "main", "develop", "release" ] jobs: build: env: DISPLAY: ':99.0' runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.9", "3.13"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | sudo apt install libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0 x11-utils /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX python -m pip install --upgrade pip python -m pip install ruff pytest pip install PyQt5 if [ "${{ github.ref_name }}" = "develop" ]; then # Clone and install development versions of key dependencies with editable install cd .. git clone --depth 1 https://github.com/PlotPyStack/PythonQwt.git git clone --depth 1 --branch develop https://github.com/PlotPyStack/guidata.git git clone --depth 1 --branch develop https://github.com/PlotPyStack/plotpy.git git clone --depth 1 --branch develop https://github.com/DataLab-Platform/sigima.git cd DataLab pip install -e ../guidata pip install -e ../PythonQwt pip install -e ../plotpy pip install -e ../sigima # Install tomli for TOML parsing (safe if already present) pip install tomli # Extract dependencies and save to file, then install python -c "import tomli; f=open('pyproject.toml','rb'); data=tomli.load(f); deps=[d for d in data['project']['dependencies'] if not any(p in d for p in ['guidata','PlotPy','Sigima'])]; open('deps.txt','w').write('\n'.join(deps))" pip install -r deps.txt # Install DataLab without dependencies pip install --no-deps . elif [ "${{ github.ref_name }}" = "release" ]; then # Clone dependencies from release branches (with fallback to main/master) cd .. # Try cloning PythonQwt from main or master git clone --depth 1 https://github.com/PlotPyStack/PythonQwt.git || git clone --depth 1 --branch master https://github.com/PlotPyStack/PythonQwt.git # Try cloning guidata from release, fallback to main or master git clone --depth 1 --branch release https://github.com/PlotPyStack/guidata.git || git clone --depth 1 https://github.com/PlotPyStack/guidata.git || git clone --depth 1 --branch master https://github.com/PlotPyStack/guidata.git # Try cloning plotpy from release, fallback to main or master git clone --depth 1 --branch release https://github.com/PlotPyStack/plotpy.git || git clone --depth 1 https://github.com/PlotPyStack/plotpy.git || git clone --depth 1 --branch master https://github.com/PlotPyStack/plotpy.git # Try cloning sigima from release, fallback to main git clone --depth 1 --branch release https://github.com/DataLab-Platform/sigima.git || git clone --depth 1 https://github.com/DataLab-Platform/sigima.git cd DataLab pip install -e ../guidata pip install -e ../PythonQwt pip install -e ../plotpy pip install -e ../sigima # Install tomli for TOML parsing (safe if already present) pip install tomli # Extract dependencies and save to file, then install python -c "import tomli; f=open('pyproject.toml','rb'); data=tomli.load(f); deps=[d for d in data['project']['dependencies'] if not any(p in d for p in ['guidata','PlotPy','Sigima'])]; open('deps.txt','w').write('\n'.join(deps))" pip install -r deps.txt # Install DataLab without dependencies pip install --no-deps . else # Install from PyPI normally for main branch pip install . fi - name: Lint with Ruff run: ruff check --output-format=github datalab - name: Test with pytest run: pytest -v --tb=long DataLab-1.0.2/.gitignore000066400000000000000000000131361511411446000147730ustar00rootroot00000000000000# ---------------------------- Specific to this project -------------------------------- # DataLab project specific resources/*.png doc.zip releases/ /tutorialnotes*.md doc/changelog.md scenario_*.h5 # Windows specific Thumbs.db # Microsoft Visual Studio *.pyproj *.sln # Sphinx documentation doctmp/ .doctrees/ doc/install_requires.txt doc/extras_require-dev.txt doc/extras_require-doc.txt doc/locale/pot/_sphinx_design_static/ doc/_download/ DataLab_*.pdf # Backup files (e.g. created during merge conflicts) *.bak # WiX files .wix/ wix/DataLab-*.wxs wix/bin/ wix/obj/ wix/*.bmp *.wixpdb *.msi # ------------------ Template `Python.gitignore` from gitignore.io --------------------- # Created by https://www.gitignore.io/api/python ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[codz] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest # *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py.cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # UV # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. #uv.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock #poetry.toml # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. # https://pdm-project.org/en/latest/usage/project/#working-with-version-control #pdm.lock #pdm.toml .pdm-python .pdm-build/ # pixi # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control. #pixi.lock # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one # in the .venv directory. It is recommended not to include this directory in version control. .pixi # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .envrc .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ # Abstra # Abstra is an AI-powered process automation framework. # Ignore directories containing user credentials, local state, and settings. # Learn more at https://abstra.io/docs .abstra/ # Visual Studio Code # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore # and can be added to the global gitignore or merged into this file. However, if you prefer, # you could uncomment the following to ignore the entire vscode folder !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json # Workspace files are ignored because they may contain user-specific settings and # committing them could interfere with branch switching for example. A workspace # template file is provided in the repository. *.code-workspace # Ruff stuff: .ruff_cache/ # PyPI configuration file .pypirc # Cursor # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data # refer to https://docs.cursor.com/context/ignore-files .cursorignore .cursorindexingignore # Marimo marimo/_static/ marimo/_lsp/ __marimo__/ DataLab-1.0.2/.pre-commit-config.yaml000066400000000000000000000003251511411446000172600ustar00rootroot00000000000000repos: - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. rev: v0.12.2 hooks: # Run the linter. - id: ruff-check args: [ --fix ] # Run the formatter. - id: ruff-formatDataLab-1.0.2/.pylintrc000066400000000000000000000010601511411446000146410ustar00rootroot00000000000000[FORMAT] # Essential to be able to compare code side-by-side (`black` default setting) # and best compromise to minimize file size max-line-length=88 [TYPECHECK] ignored-modules=qtpy.QtWidgets,qtpy.QtCore,qtpy.QtGui,cv2,plotpy._scaler,skimage.restoration,skimage.feature [MESSAGES CONTROL] disable=wrong-import-order [DESIGN] max-args=10 # default: 5 max-positional-arguments=11 # default: 5 max-attributes=12 # default: 7 max-branches=20 # default: 12 max-locals=20 # default: 15 min-public-methods=0 # default: 2 max-public-methods=25 # default: 20DataLab-1.0.2/.readthedocs.yaml000066400000000000000000000005301511411446000162240ustar00rootroot00000000000000# Read the Docs configuration file for Sphinx projects # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details version: 2 build: os: ubuntu-22.04 tools: python: "3.11" sphinx: configuration: doc/conf.py formats: - pdf python: install: - method: pip path: . extra_requirements: - doc DataLab-1.0.2/.vscode/000077500000000000000000000000001511411446000143405ustar00rootroot00000000000000DataLab-1.0.2/.vscode/launch.json000066400000000000000000000075741511411446000165220ustar00rootroot00000000000000{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Run DataLab", "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/datalab/app.py", "console": "integratedTerminal", "envFile": "${workspaceFolder}/.env", "justMyCode": false, "args": [ // "--reset" // "--h5browser", // "${workspaceFolder}/datalab/data/tests/empty.h5" // "${workspaceFolder}/datalab/data/tests/reordering_test.h5", // "${workspaceFolder}/datalab/data/tests/reordering_test.h5,/DataLab_Sig/g001: /s003: wiener(s002)/xydata", ], "env": { // "DEBUG": "1", // "LANG": "en", // "QT_COLOR_MODE": "light", } }, { "name": "Run current file", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal", "envFile": "${workspaceFolder}/.env", "justMyCode": false, "args": [ // "--h5browser", // "${workspaceFolder}/datalab/data/tests/format_v1.7.h5", // "${workspaceFolder}/datalab/data/tests/format_v1.7.h5,/DataLab_Ima/i002: i002+i004", // "--unattended", // "--screenshot", // "--verbose", // "quiet", // "--delay", // "1000" ], "env": { // "DEBUG": "1", // ☣️ Debug mode will reset .ini settings // "TEST_SEGFAULT_ERROR": "1", "LANG": "en", "QT_COLOR_MODE": "light", } }, { "name": "Run current file (unattended)", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal", "envFile": "${workspaceFolder}/.env", "pythonArgs": [ "-W error::DeprecationWarning", "-W error::RuntimeWarning", ], "justMyCode": false, "args": [ "--unattended", ], "env": { // "DEBUG": "1", // ☣️ Debug mode will reset .ini settings // "QT_QPA_PLATFORM": "offscreen", // The `DATALAB_DATA` environment variable is set here just for checking // that the data path is not added twice to the test data path list: "DATALAB_DATA": "${workspaceFolder}/datalab/data/tests", "LANG": "en", "QT_COLOR_MODE": "light", } }, { "name": "Profile current file", "type": "debugpy", "request": "launch", "module": "cProfile", "console": "integratedTerminal", "envFile": "${workspaceFolder}/.env", "args": [ "-o", "${file}.prof", "${file}" ], }, { "name": "Run H5browser", "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/datalab/tests/features/hdf5/h5browser1_unit.py", "console": "integratedTerminal", "envFile": "${workspaceFolder}/.env", "justMyCode": true, "env": { "DEBUG": "1", // "QT_COLOR_MODE": "light", }, "args": [ // "--unattended", // "--screenshot", ], }, ] }DataLab-1.0.2/.vscode/settings.json000066400000000000000000000015141511411446000170740ustar00rootroot00000000000000{ "[bat]": { "files.encoding": "cp850" }, "[python]": { "editor.defaultFormatter": "charliermarsh.ruff" }, "[restructuredtext]": { "editor.wordWrap": "on" }, "editor.codeActionsOnSave": { "source.organizeImports.ruff": "explicit" }, "editor.formatOnSave": true, "editor.rulers": [ 88 ], "files.exclude": { "**/__pycache__": true, "**/*.pyc": true, "**/*.pyo": true }, "files.trimFinalNewlines": true, "files.trimTrailingWhitespace": true, "python.analysis.autoFormatStrings": true, "python.testing.pytestArgs": [], "python.testing.pytestEnabled": true, "python.testing.pytestPath": "pytest", "python.testing.unittestEnabled": false, "terminal.integrated.tabs.description": "${workspaceFolder}", }DataLab-1.0.2/.vscode/tasks.json000066400000000000000000000715201511411446000163650ustar00rootroot00000000000000{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "🧽 Ruff Formatter", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "ruff", "format", ], "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": true, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, { "label": "🔦 Ruff Linter", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "ruff", "check", "--fix", ], "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": true, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, { "label": "🧽🔦 Ruff", "dependsOrder": "sequence", "dependsOn": [ "🧽 Ruff Formatter", "🔦 Ruff Linter", ], "group": { "kind": "build", "isDefault": false, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, { "label": "🔦 Pylint", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "pylint", "datalab", "--disable=duplicate-code", "--disable=fixme", "--disable=too-many-arguments", "--disable=too-many-branches", "--disable=too-many-instance-attributes", "--disable=too-many-lines", "--disable=too-many-locals", "--disable=too-many-public-methods", "--disable=too-many-statements", ], "options": { "cwd": "${workspaceFolder}", }, "group": { "kind": "build", "isDefault": true, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, { "label": "🚀 Pytest", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "pytest", "--ff", ], "options": { "cwd": "${workspaceFolder}", "env": { // "DEBUG": "1", // ☣️ Debug mode will reset .ini settings "UNATTENDED": "1", }, }, "group": { "kind": "build", "isDefault": true, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "dedicated", "showReuseMessage": true, "clear": true, }, "type": "shell", }, { "label": "sphinx-build", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "sphinx", "build", "doc", "build/gettext", "-b", "gettext", "-W", ], "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": false, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, { "label": "sphinx-intl update", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "sphinx_intl", "update", "-d", "doc/locale", "-p", "build/gettext", "-l", "fr", "--no-obsolete", "-w", "0", ], "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": false, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", "dependsOrder": "sequence", "dependsOn": [ "sphinx-build", ], }, { "label": "sphinx-intl build", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "sphinx_intl", "build", ], "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": false, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, { "label": "🔎 Scan translations", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "guidata.utils.translations", "scan", "--name", "datalab", "--directory", ".", "--copyright-holder", "DataLab Platform Developers", "--languages", "fr", ], "group": { "kind": "build", "isDefault": false, }, "options": { "cwd": "${workspaceFolder}", }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", "dependsOrder": "sequence", "dependsOn": [ "sphinx-intl update", ], }, { "label": "📚 Compile translations", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "guidata.utils.translations", "compile", "--name", "datalab", "--directory", ".", ], "group": { "kind": "build", "isDefault": false, }, "options": { "cwd": "${workspaceFolder}", }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", "dependsOrder": "sequence", "dependsOn": [ "sphinx-intl build", ], }, { "label": "🛠️ Generate doc assets", "command": "${command:python.interpreterPath} scripts/run_with_env.py ${command:python.interpreterPath} -m guidata.utils.genreqs all && ${command:python.interpreterPath} scripts/run_with_env.py ${command:python.interpreterPath} doc/update_validation_status.py", "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": false, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, { "label": "🧪 Coverage tests", "type": "shell", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "coverage", "run", "-m", "pytest", "datalab", ], "options": { "cwd": "${workspaceFolder}", "env": { "COVERAGE_PROCESS_START": "${workspaceFolder}/.coveragerc", }, "statusbar": { "hide": true, }, }, "group": { "kind": "test", "isDefault": true, }, "presentation": { "panel": "dedicated", }, "problemMatcher": [], }, { "label": "📊 Coverage full", "type": "shell", "windows": { "command": "${command:python.interpreterPath} -m coverage combine && ${command:python.interpreterPath} -m coverage html && start htmlcov\\index.html", }, "linux": { "command": "${command:python.interpreterPath} -m coverage combine && ${command:python.interpreterPath} -m coverage html && xdg-open htmlcov/index.html", }, "osx": { "command": "${command:python.interpreterPath} -m coverage combine && ${command:python.interpreterPath} -m coverage html && open htmlcov/index.html", }, "options": { "cwd": "${workspaceFolder}", "env": { "COVERAGE_PROCESS_START": "${workspaceFolder}/.coveragerc", }, }, "presentation": { "panel": "dedicated", }, "problemMatcher": [], "dependsOrder": "sequence", "dependsOn": [ "🧪 Coverage tests", ], }, { "label": "Upgrade Sigima/PlotPyStack", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "pip", "install", "--upgrade", "pip", "PythonQwt", "guidata", "PlotPy", "Sigima", ], "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": true, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": false, }, "type": "shell", }, { "label": "🔁 Reinstall guidata/plotpy/sigima dev", "type": "shell", "windows": { "command": ".venv/scripts/pip uninstall -y guidata plotpy sigima; Remove-Item -Recurse -Force .venv/Lib/site-packages/guidata -ErrorAction SilentlyContinue; Remove-Item -Recurse -Force .venv/Lib/site-packages/plotpy -ErrorAction SilentlyContinue; Remove-Item -Recurse -Force .venv/Lib/site-packages/sigima -ErrorAction SilentlyContinue; .venv/scripts/pip install -e ../guidata; .venv/scripts/pip install -e ../plotpy; .venv/scripts/pip install -e ../sigima", }, "linux": { "command": ".venv/bin/pip uninstall -y guidata plotpy sigima && rm -rf .venv/lib/python*/site-packages/guidata && rm -rf .venv/lib/python*/site-packages/plotpy && rm -rf .venv/lib/python*/site-packages/sigima && .venv/bin/pip install -e ../guidata && .venv/bin/pip install -e ../plotpy && .venv/bin/pip install -e ../sigima", }, "osx": { "command": ".venv/bin/pip uninstall -y guidata plotpy sigima && rm -rf .venv/lib/python*/site-packages/guidata && rm -rf .venv/lib/python*/site-packages/plotpy && rm -rf .venv/lib/python*/site-packages/sigima && .venv/bin/pip install -e ../guidata && .venv/bin/pip install -e ../plotpy && .venv/bin/pip install -e ../sigima", }, "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "presentation": { "panel": "dedicated", "reveal": "always", }, "problemMatcher": [], }, { "label": "🧹 Clean Up", "type": "shell", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "guidata.utils.cleanup", ], "options": { "cwd": "${workspaceFolder}" }, "group": { "kind": "build", "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": false, }, }, { "label": "Create executable", "type": "shell", "command": "cmd", "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", // "RELEASE": "1", "UNATTENDED": "1", }, "statusbar": { "hide": true, }, }, "args": [ "/c", "build_exe.bat", ], "problemMatcher": [], "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "dedicated", "showReuseMessage": true, "clear": true, }, }, { "label": "Create installer", "type": "shell", "command": "cmd", "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", "UNATTENDED": "1", }, "statusbar": { "hide": true, }, }, "args": [ "/c", "build_installer.bat", ], "problemMatcher": [], "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "dedicated", "showReuseMessage": true, "clear": true, }, }, { "label": "Build PDF doc", "type": "shell", "command": "cmd", "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", "QT_COLOR_MODE": "light", // "RELEASE": "1", "UNATTENDED": "1", }, "statusbar": { "hide": true, }, }, "args": [ "/c", "build_doc.bat", ], "problemMatcher": [], "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": true, }, "dependsOrder": "sequence", "dependsOn": [ "🛠️ Generate doc assets", ], }, { "label": "HTML doc: quick preview", "type": "shell", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "sphinx", "build", "doc", "${workspaceFolder}/build/doc", "-b", "html", "-W", ], "options": { "cwd": "${workspaceFolder}", "statusbar": { "hide": true, }, }, "problemMatcher": [], "group": { "kind": "build", "isDefault": true, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": true, }, }, { "label": "🌐 Build/open HTML doc", "type": "shell", "windows": { "command": "start build/doc/index.html", }, "linux": { "command": "xdg-open build/doc/index.html", }, "osx": { "command": "open build/doc/index.html", }, "options": { "cwd": "${workspaceFolder}", }, "problemMatcher": [], "dependsOrder": "sequence", "dependsOn": [ "HTML doc: quick preview", ], }, { "label": "GitHub Pages: build", "type": "shell", "command": "cmd", "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", "QT_COLOR_MODE": "light", "RELEASE": "1", "UNATTENDED": "1", }, "statusbar": { "hide": true, }, }, "args": [ "/c", "build_ghpages.bat", ], "problemMatcher": [], "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": true, }, "dependsOrder": "sequence", "dependsOn": [ "🛠️ Generate doc assets", ], }, { "label": "GitHub Pages: preview", "type": "shell", "command": "cmd", "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", "QT_COLOR_MODE": "light", "RELEASE": "1", "UNATTENDED": "1", }, "statusbar": { "hide": true, }, }, "args": [ "/c", "preview_ghpages.bat", ], "problemMatcher": [], "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": true, }, "dependsOrder": "sequence", "dependsOn": [ "GitHub Pages: build", ], }, { "label": "GitHub Pages: upload", "type": "shell", "command": "cmd", "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", "QT_COLOR_MODE": "light", "UNATTENDED": "1", }, "statusbar": { "hide": true, }, }, "args": [ "/c", "upload_ghpages.bat", ], "problemMatcher": [], "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": true, }, "dependsOrder": "sequence", "dependsOn": [ "GitHub Pages: build", ], }, { "label": "Build Python packages", "type": "shell", "command": "cmd", "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", // "RELEASE": "1", "UNATTENDED": "1", }, "statusbar": { "hide": true, }, }, "args": [ "/c", "build_dist.bat", ], "problemMatcher": [], "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "dedicated", "showReuseMessage": true, "clear": true, }, "dependsOrder": "sequence", "dependsOn": [ "🛠️ Generate doc assets", "Build PDF doc", ], }, { "label": "✨ Release", "type": "shell", "command": "cmd", "args": [ "/c", "release.bat", ], "options": { "cwd": "scripts", "env": { "PYTHON": "${command:python.interpreterPath}", // "RELEASE": "1", "UNATTENDED": "1", }, }, "problemMatcher": [], "group": { "kind": "build", "isDefault": true, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "dedicated", "showReuseMessage": true, "clear": true, }, "dependsOrder": "sequence", "dependsOn": [ "🧹 Clean Up", "Upgrade Sigima/PlotPyStack", "📚 Compile translations", "Build Python packages", "Create executable", "Create installer", ], }, { "label": "Run _tests_.bat", "type": "shell", "command": "cmd", "args": [ "/c", "_tests_.bat", ], "options": { "cwd": "scripts", "env": { "UNATTENDED": "1", "RELEASE": "0", "PYTHON": "${command:python.interpreterPath}", }, "statusbar": { "hide": true, }, }, "group": { "kind": "build", "isDefault": false, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "dedicated", "showReuseMessage": true, "clear": true, }, }, { "label": "❔ Untracked files", "type": "shell", "command": "git ls-files --others | Where-Object { $_ -notmatch '^\\.' -and $_ -notmatch '^(build|dist|releases)/' -and $_ -notmatch '.(pyc|mo)$'}", "options": { "cwd": "${workspaceFolder}", }, "group": { "kind": "build", "isDefault": true, }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "dedicated", "showReuseMessage": true, "clear": true, }, }, { "label": "🖼️ Icon Browser", "command": "${command:python.interpreterPath}", "args": [ "scripts/run_with_env.py", "${command:python.interpreterPath}", "-m", "guidata.widgets.iconbrowser", "${workspaceFolder}/datalab/data/icons", ], "options": { "cwd": "${workspaceFolder}", }, "group": { "kind": "build", "isDefault": true, }, "presentation": { "clear": true, "echo": true, "focus": false, "panel": "dedicated", "reveal": "always", "showReuseMessage": true, }, "type": "shell", }, ], }DataLab-1.0.2/CHANGELOG.md000066400000000000000000003333431511411446000146210ustar00rootroot00000000000000# Release notes # See DataLab [roadmap page](https://datalab-platform.com/en/contributing/roadmap.html) for future and past milestones. ## DataLab Version 1.0.2 (unreleased) ## ### 🛠️ Bug Fixes ### **Signal axis calibration - Replace X by other signal's Y:** * Added new "Replace X by other signal's Y" operation in Processing > Axis transformation menu for signal calibration workflows * Addresses critical missing functionality reported by users who needed to apply wavelength calibration or similar transformations to spectroscopy data * The operation combines two signals: uses Y values from one signal as the new X coordinates for another signal's Y values * Unlike X-Y mode (which resamples and interpolates), this operation directly uses Y arrays without interpolation, preserving exact calibration values * Requires both signals to have the same number of points - raises clear error message if sizes don't match * Automatically transfers metadata: X axis label/unit taken from calibration signal's Y label/unit * Menu location: Processing > Axis transformation > "Replace X by other signal's Y" * This closes [Issue #273](https://github.com/datalab-platform/datalab/issues/273) - Missing signal axis calibration: no way to replace X with Y from another signal **X-Y mode:** * The X-Y mode processing operation for signals has been moved to Processing > Axis transformation > "X-Y mode" for better discoverability * The nuance between X-Y mode (which resamples/interpolates) and the new "Replace X by other signal's Y" operation has been clarified in documentation **Lock LUT setting persistence:** * Fixed "Lock LUT range when updating data" setting not persisting in Settings > Visualization > Images > Default Image visualization settings * The `keep_lut_range` parameter was not being saved to configuration, causing the checkbox to systematically uncheck itself after validation (added missing `ima_def_keep_lut_range` option in configuration) * This closes [Issue #270](https://github.com/datalab-platform/datalab/issues/270) - Lock LUT setting not persisting in image visualization defaults **Custom signal creation:** * Fixed `AttributeError: 'NoneType' object has no attribute 'T'` error when creating a custom signal from the menu * This closes [Issue #269](https://github.com/datalab-platform/datalab/issues/269) - Custom Signal Creation: `AttributeError` when creating signal from menu **Macro execution:** * Fixed `UnicodeEncodeError` when executing macros that print Unicode characters (e.g., arrows `→`) on Windows systems with certain locales, e.g. cp1252 (closes [Issue #263](https://github.com/datalab-platform/datalab/issues/263)) * The macro subprocess now automatically uses UTF-8 encoding for stdout and stderr, eliminating the need to manually add `sys.stdout.reconfigure(encoding='utf-8')` at the beginning of each macro. **ROI coordinate precision:** * ROI coordinates are now automatically rounded to appropriate precision when defining ROIs interactively from geometrical shapes, avoiding excessive decimal places while maintaining reasonable precision relative to data sampling (1/10th of sampling period for signals, 1/10th of pixel spacing for images) * ROI coordinates are also rounded when displaying them in the "Edit numerically" dialog, preventing floating-point arithmetic errors from showing excessive decimal places (e.g., 172.29999999999995 is now displayed as 172.3) * This closes [Issue #266](https://github.com/datalab-platform/datalab/issues/266) - Excessive decimal places in ROI coordinates **Polygonal ROI handling:** * Fixed `ValueError: Buffer has wrong number of dimensions` error when creating masks from polygonal ROIs in the ROI editor * The PolygonalTool was incorrectly initializing ROI coordinates as a nested list instead of a flat list, causing mask computation to fail **HDF5 file opening dialog:** * Fixed bug where user's choice in the "clear workspace" confirmation dialog was ignored when opening HDF5 files * When the user clicked "No" in the dialog, the default configuration setting was applied instead of respecting the user's choice * This closes [Issue #267](https://github.com/datalab-platform/datalab/issues/267) - HDF5 file opening dialog ignores user's choice **Creation tab axis update:** * Fixed plot not updating when modifying only xmin/xmax parameters for distribution signals (Zero, Normal, Poisson, Uniform) in the Creation tab * The issue occurred because the data hash calculation only considered Y values, so changes to X axis bounds were not detected * Plot now properly refreshes when any axis parameter changes, even if Y values remain identical * This closes [Issue #268](https://github.com/datalab-platform/datalab/issues/268) - Creation tab axis not updating for distribution signals **ROI statistics with out-of-bounds ROI:** * Fixed `ValueError: zero-size array to reduction operation minimum which has no identity` error when computing statistics on images with ROI extending beyond canvas boundaries * The issue occurred when a ROI partially or completely extended outside the image bounds, resulting in empty array slices during statistics computation * ROI bounding boxes are now properly clipped to image boundaries, and fully out-of-bounds ROIs return NaN statistics values * This fix is implemented in Sigima library (see [Issue #1](https://github.com/DataLab-Platform/Sigima/issues/1) - `ValueError` when computing statistics on ROI extending beyond image boundaries) **Object property panel tab selection:** * Fixed tab selection behavior in object properties panel to be more predictable and user-friendly * Properties tab is now always shown by default when switching between objects, providing consistent navigation * Creation, Processing, and Analysis tabs now appear automatically only once after their respective triggering events (object creation, 1-to-1 processing, or analysis computation), then revert to Properties tab for subsequent selections * This eliminates the confusing behavior where the tab would arbitrarily persist or change based on previous selections * This closes [Issue #271](https://github.com/datalab-platform/datalab/issues/271) - Improve object property panel tab selection behavior ## DataLab Version 1.0.1 ## This major release represents a significant milestone for DataLab with numerous enhancements across all areas. The changes are organized by category for easier navigation. > **Note**: Version 1.0.1 is a patch release that addresses Windows installer limitations in version 1.0.0, where it was not possible to install DataLab V1.0 alongside earlier major versions (V0.20 and earlier) despite the intended coexistence support. This release contains no new features or functional changes. ### 🎨 User Interface & Workflow ### **Menu reorganization:** * **New "Create" menu**: Separated object creation functionality from the "File" menu, placed between "File" and "Edit" menus for clearer organization * All "File > New [...]" actions moved to "Create" menu * **Migration note**: Find signal/image creation actions in the new "Create" menu * **New "ROI" menu**: Dedicated menu for Region of Interest management, positioned between "Edit" and "Operations" menus * **New "Annotations" submenu**: Consolidated annotation operations in the "Edit" menu * **New "Metadata" submenu**: Grouped all metadata operations in the "Edit" menu **Interactive object editing:** * **Interactive object creation**: Creation parameters can be modified after object creation via new "Creation" tab in properties panel * Apply changes without creating new objects, preserving subsequent processing * Available for parametric generators (Gaussian, sine, etc.) * **Interactive 1-to-1 processing**: Processing parameters can be adjusted and reapplied via new "Processing" tab * Update result objects in-place with modified parameters * Only for parametric operations (filters, morphology, etc.) * **Recompute feature**: New "Recompute" action (Ctrl+R) to quickly reprocess objects with stored parameters * Works with single or multiple objects * Automatically updates results when source data changes * **Automatic ROI analysis update**: Analysis results automatically recalculate when ROI is modified * Works for all analysis operations (statistics, centroid, etc.) * Silent background recomputation for immediate feedback * **Select source objects**: Navigate to source objects used in processing via new "Edit" menu action * Handles all processing patterns (1-to-1, 2-to-1, n-to-1) * Shows informative messages if sources no longer exist * **Processing history**: New "History" tab displays object processing lineage as hierarchical tree * Shows complete processing chain from creation to current state * Selectable text for documentation purposes **Multi-object property editing:** * Apply property changes to multiple selected objects simultaneously * Only modified properties are applied, preserving unchanged individual settings * Typical use case: Adjust LUT boundaries or colormap for multiple images at once **Dialog sizing improvements:** * Processing dialogs now intelligently resize based on main window size * Never exceed main window dimensions for better user experience **Internal console indicator:** * Status bar indicator shows console status when hidden * Turns red on errors/warnings to alert users * Click to open console ### 🎬 New Object Creation Features ### **Parametric signal generators:** * Linear chirp, logistic function, Planck function * Generate signals with Poisson noise **Parametric image generators:** * **Checkerboard**: Calibration pattern with configurable square size and light/dark values * **Sinusoidal grating**: Frequency response testing with independent X/Y spatial frequencies * **Ring pattern**: Concentric circular rings for radial analysis and PSF testing * **Siemens star**: Resolution testing with radial spokes and configurable radius * **2D sinc**: Cardinal sine function for PSF modeling and diffraction simulation * **2D ramp**: New ramp image generator * **Poisson noise**: Generate images with Poisson noise distribution **Signal/image creation from operations:** * Create complex-valued signal/image from real and imaginary parts * Create complex-valued signal/image from magnitude and phase (closes [Issue #216](https://github.com/DataLab-Platform/DataLab/issues/216)) * Extract phase (argument) information from complex signals or images ### 🔬 Data Processing & Analysis ### **Signal processing:** * **Enhanced curve fitting**: Significantly improved parameter estimation for all curve types (Gaussian, Lorentzian, Voigt, exponential, sinusoidal, Planckian, asymmetric peaks, CDF) * Smarter initial parameter guesses for robust convergence * **Locked parameter support**: Lock individual parameters during optimization (requires PlotPy v2.8.0) * **X-array compatibility checking**: Comprehensive validation for multi-signal operations with automatic interpolation options * New configuration setting: Ask user or interpolate automatically * Prevents unexpected results from incompatible signal arrays * **Zero padding enhancements**: Support for prepending and appending zeros, default strategy now "Next power of 2" * **Ideal frequency domain filter**: "Brick wall filter" for signals (closes [Issue #215](https://github.com/DataLab-Platform/DataLab/issues/215)) * **Bandwidth at -3dB**: Enhanced to support passband bandwidth * **Pulse features extraction**: Comprehensive pulse analysis for step and square signals * Automated shape recognition and polarity detection * Measures amplitude, rise/fall time, FWHM, timing parameters, baseline ranges * **Frequency domain filters**: Deconvolution and Gaussian filter (closes [Issue #189](https://github.com/DataLab-Platform/DataLab/issues/189), [Issue #205](https://github.com/DataLab-Platform/DataLab/issues/205)) * **Coordinate transformations**: Convert to Cartesian/polar coordinates * **X-Y mode**: Simulate oscilloscope X-Y mode (plot one signal vs. another) * **Find operations**: First abscissa at y=..., ordinate at x=..., full width at y=... * **`1/x` operation**: Reciprocal operation with NaN handling for zero denominators **Image processing:** * **2D resampling**: Resample images to new coordinate grids with multiple interpolation methods (closes [Issue #208](https://github.com/DataLab-Platform/DataLab/issues/208)) * **Convolution**: 2D convolution operation * **Erase area**: Erase image areas defined by ROI (closes [Issue #204](https://github.com/DataLab-Platform/DataLab/issues/204)) * **Horizontal/vertical projections**: Sum of pixels along axes (closes [Issue #209](https://github.com/DataLab-Platform/DataLab/issues/209)) * **Improved centroid computation**: More accurate in challenging cases (truncated/asymmetric images) (see [Issue #251](https://github.com/DataLab-Platform/DataLab/issues/251)) * **Flip diagonally**: New geometric transformation * **`1/x` operation**: Reciprocal operation for images **Cross-panel operations:** * **Signals to image conversion**: Combine multiple signals into 2D images * Two orientation modes: as rows (spectrograms) or columns (waterfall displays) * Optional normalization (Z-score, Min-Max, Maximum) * Typical use cases: heatmaps, spectrograms, multi-channel data visualization **Common features:** * **Standard deviation**: Calculate across multiple signals/images (closes [Issue #196](https://github.com/DataLab-Platform/DataLab/issues/196)) * **Add noise**: Add Gaussian, Poisson, or uniform noise (closes [Issue #201](https://github.com/DataLab-Platform/DataLab/issues/201)) * **Add metadata**: Add custom metadata with pattern support (`{title}`, `{index}`, etc.) and type conversion ### 📐 ROI & Annotation Management ### **ROI features:** * **ROI clipboard operations**: Copy/paste ROIs between objects * **ROI import/export**: Save/load ROIs as JSON files * **Individual ROI removal**: Remove ROIs selectively via "Remove" submenu * **ROI title editing**: Set titles during interactive creation and in confirmation dialog * **Create ROI grid**: Generate grid of ROIs with configurable rows, columns, and spacing * Import/export grid configurations * Preview before creation * **Inverse ROI logic**: Select area outside defined shapes (images only) * **Coordinate-based ROI creation**: Manual input of coordinates for rectangular and circular ROIs * **Multi-object ROI editing**: Edit ROIs on multiple objects simultaneously **Annotation features:** * **Annotation clipboard**: Copy/paste annotations between objects * **Edit annotations**: Interactive editor dialog with PlotPy tools * **Import/export annotations**: Save/load as .dlabann JSON files with versioning * **Delete annotations**: Remove from single or multiple objects with confirmation * **Annotations independent from ROI**: Can coexist on same object **Detection with ROI creation:** * All 7 detection algorithms now support automatic ROI creation: * Peak detection, contour shape, blob detection (DOG/DOH/LOG/OpenCV), Hough circle * **ROI geometry choice**: Rectangular or circular ROIs * **2D peak detection**: Option to choose ROI geometry (closes related requirements) ### 📊 Visualization & Display ### **Performance & display limits:** * **Configurable result display limits**: Prevent UI freezing with large result sets * `max_shapes_to_draw` (default: 1,000), `max_cells_in_label` (default: 100), `max_cols_in_label` (default: 15) * Settings documented with performance implications * **Faster contour rendering**: Over 5x performance improvement for contour display * **Signal rendering optimization**: Smart linewidth clamping for large datasets * New setting: "Line width performance threshold" (default: 1,000 points) * Prevents 10x slowdown from Qt raster engine limitation **Result visualization:** * **Merged result labels**: All analysis results consolidated in single read-only label * Reduces visual clutter, auto-updates, horizontally divided results * **Result label visibility control**: Toggle visibility via Properties panel checkbox * Default visibility configurable in Settings * **Results group organization**: Plot results automatically organized in dedicated "Results" group * **Comprehensive result titles**: Include source object identifiers (e.g., "FWHM (s001, s002, s003)") * **Individual result deletion**: Remove results selectively via Analysis menu * **Customizable shape/marker styles**: Four new style configuration buttons in Settings * Separate styles for signals and images * Interactive editor with comprehensive options * Persistent configuration with refresh on change **Enhanced profile extraction:** * Click directly on X/Y profile plots to switch extraction direction * No need to open parameters dialog for direction changes * Improves workflow efficiency (closes [Issue #156](https://github.com/DataLab-Platform/DataLab/issues/156)) **DateTime signal support:** * Automatic datetime detection in CSV files * **Datetime axis formatting**: Human-readable timestamps on X-axis * **Configurable formats**: Separate formats for standard and sub-second units * Supports various time units (seconds, milliseconds, microseconds, minutes, hours) * Closes [Issue #258](https://github.com/DataLab-Platform/DataLab/issues/258) **Settings:** * **Autoscale margins**: Configurable margins (0-50%) for signal/image plots * **Lock image aspect ratio**: Option for 1:1 aspect ratio (default: use physical pixel size) (closes [Issue #244](https://github.com/DataLab-Platform/DataLab/issues/244)) * **Show console on error**: Configurable behavior (default: off) **Image extent parameters:** * New "Extent" group box showing computed Xmin, Xmax, Ymin, Ymax * Automatically calculated from origin, pixel spacing, and dimensions ### 📁 Import/Export & File Handling ### **New file format support:** * **FT-Lab signals and images**: CEA binary formats (.sig, .ima) (closes [Issue #211](https://github.com/DataLab-Platform/DataLab/issues/211)) * **Coordinated text files**: Real and complex-valued images with error images (similar to Matris format) * Automatic NaN handling, metadata with units and labels **Enhanced HDF5 support:** * **Custom file extensions**: Intelligent HDF5 detection by content (not just extension) * Extension-based detection for dialogs, content-based for drag-and-drop * "All files (*)" option in file dialogs * **HDF5 Browser improvements**: Default collapsed tree view for better navigation * **Workspace clearing options**: Configurable behavior with "Ignore" option (closes [Issue #146](https://github.com/DataLab-Platform/DataLab/issues/146)) **Text file improvements:** * **CSV delimiter handling**: Better support for various whitespace separators * **Locale decimal separator**: Support for comma as decimal separator (closes [Issue #124](https://github.com/DataLab-Platform/DataLab/issues/124)) * **Encoding error tolerance**: Ignore errors for files with special characters * **Header detection**: Automatic detection and skipping of data headers **Other I/O features:** * **Save to directory**: New feature (closes [Issue #227](https://github.com/DataLab-Platform/DataLab/issues/227)) * **Open from directory**: Recursively open multiple files with folder drag-and-drop support * **File ordering**: Consistent alphabetical sorting across platforms ### 🔧 Advanced Features ### **Non-uniform coordinate support:** * Images now support non-uniform pixel spacing * "Set uniform coordinates" feature for conversion * **Polynomial calibration**: Up to cubic order for X, Y, Z axes * Creates non-uniform coordinates for X/Y, transforms values for Z * HDF5 and text file formats preserve non-uniform information **Group management:** * **Panel-specific short IDs**: `gs` prefix for signals, `gi` prefix for images * Avoids ambiguity in cross-panel operations * Fixed group numbering for new groups **Configuration:** * **Version-specific folders**: Major version coexistence (`.DataLab_v1`, `.DataLab_v2`, etc.) * Allows v0.x and v1.x to run simultaneously **Public API & Remote Control:** * Enhanced metadata handling with function name context * `add_group`, `add_signal`, `add_image` methods with `group_id` and `set_current` arguments * `get_object_uuids` with optional `group` filter * Multiple API improvements for better programmability **Processing infrastructure (for developers):** * New `@computation_function` decorator for computation functions * Renamed computation functions (removed "compute_" prefix) * Refactored `BaseProcessor` methods with clear naming: * `compute_1_to_1`, `compute_1_to_0`, `compute_1_to_n`, `compute_n_to_1`, `compute_2_to_1` * **No backward compatibility maintained** for these internal changes (closes [Issue #180](https://github.com/DataLab-Platform/DataLab/issues/180)) ### 🛠️ Bug Fixes ### **Performance fixes:** * **Switching between images with many results**: Dramatic improvement (66s → <1ms) when navigating images with hundreds of shapes * **Plot cleanup robustness**: Fixed errors when removing analysis results * **Critical fix**: Result labels now properly excluded from cleanup to prevent disappearance **Cross-panel & group handling:** * **Cross-panel computation groups**: Fixed inconsistent group organization for image-to-signal operations * **File import ordering**: Consistent alphabetical sorting across all platforms **Action state updates:** * Fixed action enable states not updating after annotation/metadata operations * UI now immediately reflects current object state **Result management:** * Fixed result label deletion to permanently remove associated metadata * Fixed duplicate results parameter metadata cleanup * **Result coordinate fixes**: Corrected shifted results on images with ROIs and shifted origin ([Issue #106](https://github.com/DataLab-Platform/DataLab/issues/106)) * **Profile extraction indices**: Fixed wrong indices with ROI ([Issue #107](https://github.com/DataLab-Platform/DataLab/issues/107)) **ROI-related fixes:** * Fixed multi-image ROI extraction not saving ROI in first object ([Issue #120](https://github.com/DataLab-Platform/DataLab/issues/120)) * Fixed AttributeError when extracting multiple ROIs on single image with multiple selections ([Issue #121](https://github.com/DataLab-Platform/DataLab/issues/121)) * Fixed mask refresh issues ([Issue #122](https://github.com/DataLab-Platform/DataLab/issues/122), [Issue #123](https://github.com/DataLab-Platform/DataLab/issues/123)) * Fixed ROI editor on multiple signals/images ([Issue #135](https://github.com/DataLab-Platform/DataLab/issues/135)) * Fixed ROI clearing affecting only first image ([Issue #160](https://github.com/DataLab-Platform/DataLab/issues/160)) * Fixed ROI editor showing first instead of last image ([Issue #158](https://github.com/DataLab-Platform/DataLab/issues/158)) **Text Import Wizard:** * Fixed preservation of user-defined titles and units ([Issue #239](https://github.com/DataLab-Platform/DataLab/issues/239)) * Fixed preservation of data types ([Issue #240](https://github.com/DataLab-Platform/DataLab/issues/240)) * Fixed comma decimal separator support ([Issue #186](https://github.com/DataLab-Platform/DataLab/issues/186)) * Fixed trailing delimiter issue ([Issue #238](https://github.com/DataLab-Platform/DataLab/issues/238)) **Curve fitting & analysis:** * Improved initial frequency estimate for sinusoidal fitting * Fixed parameter display formatting for extreme values * Fixed FWHM computation exception handling * Fixed curve marker style changing unexpectedly ([Issue #184](https://github.com/DataLab-Platform/DataLab/issues/184)) * Fixed hard crash on zero signal with curve stats tool ([Issue #233](https://github.com/DataLab-Platform/DataLab/issues/233)) **Image handling:** * Fixed aspect ratio not updating when switching images * Fixed shape unpacking issues ([Issue #246](https://github.com/DataLab-Platform/DataLab/issues/246), [Issue #247](https://github.com/DataLab-Platform/DataLab/issues/247)) * Fixed colormaps not stored in metadata (PlotPy v2.6.3+ issue) ([Issue #138](https://github.com/DataLab-Platform/DataLab/issues/138)) * Fixed amplitude calculation for non-integer data types **Signal processing:** * Fixed ifft1d x-axis computation when shift=False ([Issue #241](https://github.com/DataLab-Platform/DataLab/issues/241)) * Fixed moving median crash on Linux with mirror mode ([Issue #117](https://github.com/DataLab-Platform/DataLab/issues/117)) - SciPy bug * Fixed magnitude spectrum with logarithmic scale ([Issue #169](https://github.com/DataLab-Platform/DataLab/issues/169)) * Fixed pairwise operation mode for asymmetric functions ([Issue #157](https://github.com/DataLab-Platform/DataLab/issues/157)) **Analysis & results:** * Fixed NaN value handling in statistics and normalization ([Issue #141](https://github.com/DataLab-Platform/DataLab/issues/141), [Issue #152](https://github.com/DataLab-Platform/DataLab/issues/152), [Issue #153](https://github.com/DataLab-Platform/DataLab/issues/153)) * Fixed analysis results kept from original after processing ([Issue #136](https://github.com/DataLab-Platform/DataLab/issues/136)) * Fixed duplicate results with no ROI defined * Fixed "One curve per result title" mode ignoring ROIs ([Issue #132](https://github.com/DataLab-Platform/DataLab/issues/132)) * Added result validation for array-like results **Plot & visualization:** * Fixed profile plots not refreshing when moving/resizing ([Issue #172](https://github.com/DataLab-Platform/DataLab/issues/172)) - PlotPy fix * Fixed empty average profile display outside image area ([Issue #168](https://github.com/DataLab-Platform/DataLab/issues/168)) - PlotPy fix * Fixed average profile extraction ValueError with oversized rectangle ([Issue #144](https://github.com/DataLab-Platform/DataLab/issues/144)) * Disabled generic "Axes" tab in parameter dialogs **Other fixes:** * Fixed proxy `add_object` method not supporting metadata ([Issue #111](https://github.com/DataLab-Platform/DataLab/issues/111)) * Fixed RemoteClient method calls without optional arguments ([Issue #113](https://github.com/DataLab-Platform/DataLab/issues/113)) * Fixed KeyError when removing group after opening HDF5 ([Issue #116](https://github.com/DataLab-Platform/DataLab/issues/116)) * Fixed KeyError in "View in new window" with multiple images after HDF5 open ([Issue #159](https://github.com/DataLab-Platform/DataLab/issues/159)) * Fixed long object titles display ([Issue #128](https://github.com/DataLab-Platform/DataLab/issues/128)) * Fixed file name titles showing relative paths ([Issue #165](https://github.com/DataLab-Platform/DataLab/issues/165)) * Fixed unexpected group names in "Open from directory" ([Issue #177](https://github.com/DataLab-Platform/DataLab/issues/177)) * Fixed one group per folder expectation ([Issue #163](https://github.com/DataLab-Platform/DataLab/issues/163)) * Fixed unsupported files in recursive loading ([Issue #164](https://github.com/DataLab-Platform/DataLab/issues/164)) **Removed features:** * Removed "Use reference image LUT range" setting (confusing behavior) * **Migration**: Use multi-selection property editing instead ### 🔒 Security Fixes ### * **CVE-2023-4863**: Fixed vulnerability in opencv-python-headless * Updated minimum requirement from 4.5.4.60 to 4.8.1.78 * See [DataLab security advisory](https://github.com/DataLab-Platform/DataLab/security/dependabot/1) ### ℹ️ Other Changes ### * Bumped minimum `plotpy` requirement to V2.8 * Bumped minimum `guidata` requirement to V3.13 * Using new `guidata` translation utility based on `babel` * Python 3.13 now supported (via scikit-image V0.25) ## DataLab Version 0.20.0 ## 💥 New features and enhancements: * ANDOR SIF Images: * Added support for background images in ANDOR SIF files * This closes [Issue #178](https://github.com/DataLab-Platform/DataLab/issues/178) - Add support for ANDOR SIF files with background image * Array editor (results, signal and image data, ...): * New "Copy all" button in the array editor dialog box, to copy all the data in the clipboard, including row and column headers * New "Export" button in the array editor dialog box, to export the data in a CSV file, including row and column headers * New "Paste" button in the array editor dialog box, to paste the data from the clipboard into the array editor (this feature is not available for read-only data, such as analysis results) * The features above require guidata v3.9.0 or later * This closes [Issue #174](https://github.com/DataLab-Platform/DataLab/issues/174), [Issue #175](https://github.com/DataLab-Platform/DataLab/issues/175) and [Issue #176](https://github.com/DataLab-Platform/DataLab/issues/176) * Fourier analysis features ("Processing" menu): * New "Zero padding" feature * Implementation for signals: * Choose a zero padding strategy (Next power of 2, Double the length, Triple the length, Custom length) * Or manually set the zero padding length (if "Custom length" is selected) * Implementation for images: * Choose a zero padding strategy (Next power of 2, Next multiple of 64, Custom length) * Or manually set the zero padding row and column lengths (if "Custom length" is selected) * Set the position of the zero padding (bottom-right, centered) * This closes [Issue #170](https://github.com/DataLab-Platform/DataLab/issues/170) - Fourier analysis: add zero padding feature for signals and images * Region of Interest (ROI) editor: * This concerns the "Edit Regions of Interest" feature for both signals and images * New behavior: * Signals: the range ROI selection tool is now active by default, and the user can select right away the range of the signal to be used as a ROI * Images: the rectangular ROI selection tool is now active by default, and the user can select right away the rectangular ROI to be used as a ROI * This closes [Issue #154](https://github.com/DataLab-Platform/DataLab/issues/154) - ROI editor: activate ROI selection tool by default, so that the user can select right away the area to be used as a ROI * Added the "Select tool" to editor's toolbar, to allow the user to switch between the "Select" and "Draw" tools easily without having to use the plot toolbar on the top of the window * Signal processing features ("Processing" menu): * New "X-Y mode" feature: this feature simulates the behavior of the X-Y mode of an oscilloscope, i.e. it allows to plot one signal as a function of another signal (e.g. X as a function of Y) * New abscissa and ordinate find features: * "First abscissa at y=..." feature: this feature allows to find the first abscissa value of a signal at a given y value (e.g. the abscissa value of a signal at y=0) * "Ordinate at x=..." feature: this feature allows to find the ordinate value of a signal at a given x value (e.g. the ordinate value of a signal at x=0) * Each feature has its own dialog box, which allows to set the y or x value to be used for the search with a slider or a text box * This closes [Issue #125](https://github.com/DataLab-Platform/DataLab/issues/125) and [Issue #126](https://github.com/DataLab-Platform/DataLab/issues/126) * New full width at given y feature: * The "Full width at y=..." feature allows to find the full width of a signal at a given y value (e.g. the full width of a signal at y=0) * A specific dialog box allows to set the y value to be used for the search with a slider or a text box * This closes [Issue #127](https://github.com/DataLab-Platform/DataLab/issues/127) * Public API (local or remote): * Add `group_id` and `set_current` arguments to `add_signal`, `add_image` and `add_object` methods: * This concerns the `LocalProxy`, `AbstractDLControl`, `RemoteClient`, `RemoteServer` and `DLMainWindow` classes * `group_id` argument allows to specify the group ID where the signal or image should be added (if not specified, the signal or image is added to the current group) * `set_current` argument allows to specify if the signal or image should be set as current after being added (default is `True`) * This closes [Issue #151](https://github.com/DataLab-Platform/DataLab/issues/151) - Public API: add a keyword `group_id` to `add_signal` and `add_image` ## DataLab Version 0.19.2 ## 🛠️ Bug fixes: * Fixed [Issue #172](https://github.com/DataLab-Platform/DataLab/issues/172) - Image profiles: when moving/resizing image, profile plots are not refreshed (fixed in PlotPy v2.7.4) * Fixed [Issue #173](https://github.com/DataLab-Platform/DataLab/issues/173) - Phase spectrum: add unit (degree) and function reference (`numpy.angle`) to the documentation * Fixed [Issue #177](https://github.com/DataLab-Platform/DataLab/issues/177) - "Open from directory" feature: unexpected group name (a group named "." is created instead of the root folder name) * Fixed [Issue #169](https://github.com/DataLab-Platform/DataLab/issues/169) - Signal / Fourier analysis: magnitude spectrum feature does not work as expected with logarithmic scale enabled * Fixed [Issue #168](https://github.com/DataLab-Platform/DataLab/issues/168) - Average profile visualization: empty profile is displayed when the target rectangular area is outside the image area (this has been fixed upstream, in PlotPy v2.7.4, and so requires the latest version of PlotPy) ## DataLab Version 0.19.1 ## 🛠️ Bug fixes: * Pairwise operation mode: * Fixed an unexpected behavior when using the pairwise operation mode with functions that take a single second operand (e.g. for images: difference, division, arithmetic operations, and flatfield correction) * If only one set of operands was selected in a single group, a warning message was displayed "In pairwise mode, you need to select objects in at least two groups.", which is correct for functions that are symmetric (e.g. addition, multiplication, etc.), but not for functions that are not symmetric (e.g. difference, division, etc.). * This is now fixed: the warning message is only displayed for functions that are symmetric (e.g. addition, multiplication, etc.). * This closes [Issue #157](https://github.com/DataLab-Platform/DataLab/issues/157) - Pairwise operation mode: unexpected behavior with functions that take a single second operand * Fixed [Issue #152](https://github.com/DataLab-Platform/DataLab/issues/152) - Ignore `nan` values for image normalization, flatfield correction, offset correction, and centroid computation * Fixed [Issue #153](https://github.com/DataLab-Platform/DataLab/issues/153) - Ignore `nan` values for signal normalization and statistics computations (both analysis result and interactive tool) * Fixed [Issue #158](https://github.com/DataLab-Platform/DataLab/issues/158) - When editing ROI of a list of images, the first image of the selection is shown (instead of the last as in the image panel) * Fixed [Issue #159](https://github.com/DataLab-Platform/DataLab/issues/159) - When selecting multiple images just after opening an HDF5 file, the "View in a new window" feature does not work (`KeyError` exception) * Fixed [Issue #160](https://github.com/DataLab-Platform/DataLab/issues/160) - When selecting multiple images and clearing ROI in ROI editor, only the first image is affected * Fixed [Issue #161](https://github.com/DataLab-Platform/DataLab/issues/161) - Refresh image items only if necessary (when editing ROI, pasting/deleting metadata) * Fixed [Issue #162](https://github.com/DataLab-Platform/DataLab/issues/162) - View in a new window: when displaying multiple images, the item list panel should be visible * Fixed [Issue #163](https://github.com/DataLab-Platform/DataLab/issues/163) - Open from directory: expected one group per folder when loading multiple files * Fixed [Issue #164](https://github.com/DataLab-Platform/DataLab/issues/164) - Open from directory: unsupported files should be ignored when loading files recursively, to avoid warning popup dialog boxes * Fixed [Issue #165](https://github.com/DataLab-Platform/DataLab/issues/165) - When opening a file, the default signal/image title must be set to the file name, instead of the relative path to the file name ## DataLab Version 0.19.0 ## 💥 New features and enhancements: * Image operation features ("Operations" menu): * Renamed "Rotation" submenu to "Flip or rotation" * New "Flip diagonally" feature * Signal processing features ("Processing" menu): * New "Convert to Cartesian coordinates" feature * New "Convert to polar coordinates" feature * Signal analysis features ("Analysis" menu): * Renamed "X values at min/max" to "Abscissa of the minimum and maximum" * New "Abscissa at y=..." feature * New "Open from directory" feature: * This feature allows to open multiple files from a directory at once, recursively (only the files with the supported extensions by the current panel are opened) * Add "Open from directory" action to the "File" menu for both Signal and Image panels * Add support for folders when dropping files in the Signal and Image panels * Add `1/x` operation to the "Operations" menu for both Signal and Image panels: * This feature relies on the `numpy.reciprocal` function, and handles the case where the denominator is zero by catching warnings and replacing the `np.inf` values with `np.nan` values * Add `compute_inverse` method for image and signal processors * This closes [Issue #143](https://github.com/DataLab-Platform/DataLab/issues/143) - New feature: `1/x` for signals and images * Public API (local or remote): * Add `add_group` method with `title` and `select` arguments to create a new group in a data panel (e.g. Signal or Image panel) and eventually select it after creation: * Method was added to the following classes: `AbstractDLControl`, `BaseDataPanel` and `RemoteClient` * This closes the following issues: * [Issue #131](https://github.com/DataLab-Platform/DataLab/issues/131) - `BaseDataPanel.add_group`: add `select` argument * [Issue #47](https://github.com/DataLab-Platform/DataLab/issues/47) - Remote proxy / Public API: add `add_group` method * `AbstractDLControl.get_object_uuids`: add an optional `group` argument (group ID, title or number) to eventually filter the objects by group (this closes [Issue #130](https://github.com/DataLab-Platform/DataLab/issues/130)) * When opening an HDF5 file, the confirmation dialog box asking if current workspace should be cleared has a new possible answer "Ignore": * Choosing "Ignore" will prevent the confirmation dialog box from being displayed again, and will choose the current setting (i.e. clear or not the workspace) for all subsequent file openings * Added a new "Clear workspace before loading HDF5 file" option in the "Settings" dialog box, to allow the user to change the current setting (i.e. clear or not the workspace) for all subsequent file openings * Added a new "Ask before clearing workspace" option in the "Settings" dialog box, to allow the user to disable or re-enable the confirmation dialog box asking if current workspace should be cleared when opening an HDF5 file * This closes [Issue #146](https://github.com/DataLab-Platform/DataLab/issues/146) - Ask before clearing workspace when opening HDF5 file: add "Ignore" option to prevent dialog from being displayed again * Object and group title renaming: * Removed "Rename group" feature from the "Edit" menu and context menu * Added "Rename object" feature to the "Edit" menu and context menu, with F2 shortcut, to rename the title of the selected object or group * This closes [Issue #148](https://github.com/DataLab-Platform/DataLab/issues/148) - Rename signal/image/group title by pressing F2 * Region of Interest editor: * Regrouped the graphical actions (new rectangular ROI, new circular ROI, new polygonal ROI) in a single menu "Graphical ROI" * Added new "Coordinate-based ROI" menu to create a ROI using manual input of the coordinates: * For signals, the ROI is defined by the start and end coordinates * For images: * The rectangular ROI is defined by the top-left and bottom-right coordinates * The circular ROI is defined by the center and radius coordinates * The polygonal ROI is not supported yet * This closes [Issue #145](https://github.com/DataLab-Platform/DataLab/issues/145) - ROI editor: add manual input of the coordinates 🛠️ Bug fixes: * Fixed [Issue #141](https://github.com/DataLab-Platform/DataLab/issues/141) - Image analysis: mask `nan` values when computing statistics, for example * Fixed [Issue #144](https://github.com/DataLab-Platform/DataLab/issues/144) - Average profile extraction: `ValueError` when selection rectangle is larger than the image ## DataLab Version 0.18.2 ## ℹ️ General information: * Python 3.13 is now supported, since the availability of the scikit-image V0.25 (see [Issue #104](https://github.com/DataLab-Platform/DataLab/issues/104) - Python 3.13: `KeyError: 'area_bbox'`) 💥 Enhancements: * Added new "Keep results after computation" option in "Processing" section: * Before this change, when applying a processing feature (e.g. a filter, a threshold, etc.) on a signal or an image, the analysis results were removed from the object * This new option allows to keep the analysis results after applying a processing feature on a signal or an image. Even if the analysis results are not updated, they might be relevant in some use cases (e.g. when using the 2D peak detection feature on an image, and then applying a filter on the image, or summing two images, etc.) 🛠️ Bug fixes: * Fixed [Issue #138](https://github.com/DataLab-Platform/DataLab/issues/138) - Image colormaps were no longer stored in metadata (and serialized in HDF5 files) since PlotPy v2.6.3 (this commit, specifically: [PlotPyStack/PlotPy@a37af8a](https://github.com/PlotPyStack/PlotPy/commit/a37af8ae8392e5e3655e5c34b67a7cd1544ea845)) * Fixed [Issue #137](https://github.com/DataLab-Platform/DataLab/issues/137) - Arithmetic operations and signal interpolation: dialog box with parameters is not displayed * Fixed [Issue #136](https://github.com/DataLab-Platform/DataLab/issues/136) - When processing a signal or an image, the analysis result is kept from original object * Before this fix, when processing a signal or an image (e.g. when applying a filter, a threshold, etc.), the analysis result was kept from the original object, and was not updated with the new data. Thus the analysis result was not meaningful anymore, and was misleading the user. * This is now fixed: the analysis result is now removed when processing a signal or an image. However it is not recalculated automatically, because there is no way to know which analysis result should be recalculated (e.g. if the user has applied a filter, should the FWHM be recalculated?) - besides, the current implementation of the analysis features does not allow to recalculate the analysis results automatically when the data is modified. The user has to recalculate the analysis results manually if needed. * Fixed [Issue #132](https://github.com/DataLab-Platform/DataLab/issues/132) - Plot analysis results: "One curve per result title" mode ignores ROIs * Before this fix, the "One curve per result title" mode was ignoring ROIs, and was plotting the selected result for all objects (signals or images) without taking into account the ROI defined on the objects * This is now fixed: the "One curve per result title" mode now takes into account the ROI defined on the objects, and plots the selected result for each object (signal or image) and for each ROI defined on the object * Fixed [Issue #128](https://github.com/DataLab-Platform/DataLab/issues/128) - Support long object titles in Signal and Image panels * Fixed [Issue #133](https://github.com/DataLab-Platform/DataLab/issues/133) - Remove specific analysis results from metadata clipboard during copy operation * Fixed [Issue #135](https://github.com/DataLab-Platform/DataLab/issues/135) - Allow to edit ROI on multiple signals or images at once * Before this fix, the ROI editor was disabled when multiple signals or images were selected * This is now fixed: the ROI editor is now enabled when multiple signals or images are selected, and the ROI is applied to all selected signals or images (only the ROI of the first selected signal or image is taken into account) * This new behavior is consistent with the ROI extraction feature, which allows to extract the ROI on multiple signals or images at once, based on the ROI defined on the first selected signal or image * Image ROI features: * Fixed [Issue #120](https://github.com/DataLab-Platform/DataLab/issues/120) - ROI extraction on multiple images: defined ROI should not be saved in the first selected object. The design choice is to save the defined ROI neither in the first nor in any of the selected objects: the ROI is only used for the extraction, and is not saved in any object * Fixed [Issue #121](https://github.com/DataLab-Platform/DataLab/issues/121) - `AttributeError` when extracting multiple ROIs on a single image, if more than one image is selected * Fixed [Issue #122](https://github.com/DataLab-Platform/DataLab/issues/122) - Image masks are not refreshed when removing metadata except for the active image * Fixed [Issue #123](https://github.com/DataLab-Platform/DataLab/issues/123) - Image masks are not refreshed when pasting metadata on multiple images, except for the last image * Text and CSV files: * Enhance text file reading by detecting data headers (using a list of typical headers from scientific instruments) and by allowing to skip the header when reading the file * Ignore encoding errors when reading files in both open feature and import wizard, hence allowing to read files with special characters without raising an exception * Fixed [Issue #124](https://github.com/DataLab-Platform/DataLab/issues/124) - Text files: support locale decimal separator (different than `.`) * Signal analysis features: fixed duplicate results when no ROI is defined * Fixed [Issue #113](https://github.com/DataLab-Platform/DataLab/issues/113) - Call to `RemoteClient.open_h5_files` (and `import_h5_file`) fails without passing the optional arguments * Fixed [Issue #116](https://github.com/DataLab-Platform/DataLab/issues/116) - `KeyError` exception when trying to remove a group after opening an HDF5 file ## DataLab Version 0.18.1 ## 💥 Enhancements: * FWHM computation now raises an exception when less than two points are found with zero-crossing method * Improved result validation for array-like results by checking the data type of the result 🛠️ Bug fixes: * Fixed [Issue #106](https://github.com/DataLab-Platform/DataLab/issues/106) - Analysis: coordinate shifted results on images with ROIs and shifted origin * Fixed [Issue #107](https://github.com/DataLab-Platform/DataLab/issues/107) - Wrong indices when extracting a profile from an image with a ROI * Fixed [Issue #111](https://github.com/DataLab-Platform/DataLab/issues/111) - Proxy `add_object` method does not support signal/image metadata (e.g. ROI) * Test data plugin / "Create 2D noisy gauss image": fixed amplitude calculation in `datalab.tests.data.create_2d_random` for non-integer data types 📚 Documentation: * Fixed path separators in plugin directory documentation * Corrected left and right area descriptions in workspace documentation * Updated Google style link in contributing guidelines * Fixed various French translations in the documentation ## DataLab Version 0.18.0 ## ℹ️ General information: * PlotPy v2.7 is required for this release. * Dropped support for Python 3.8. * Python 3.13 is not supported yet, due to the fact that some dependencies are not compatible with this version. 💥 New features and enhancements: * New operation mode feature: * Added "Operation mode" feature to the "Processing" tab in the "Settings" dialog box * This feature allows to choose between "single" and "pairwise" operation modes for all basic operations (addition, subtraction, multiplication, division, etc.): * "Single" mode: single operand mode (default mode: the operation is done on each object independently) * "Pairwise" mode: pairwise operand mode (the operation is done on each pair of objects) * This applies to both signals and images, and to computations taking *N* inputs * Computations taking *N* inputs are the ones where: * *N(>=2)* objects in give *N* objects out * *N(>=1)* object(s) + 1 object in give N objects out * New ROI (Region Of Interest) features: * New polygonal ROI feature * Complete redesign of the ROI editor user interfaces, improving ergonomics and consistency with the rest of the application * Major internal refactoring of the ROI system to make it more robust (more tests) and easier to maintain * Implemented [Issue #102](https://github.com/DataLab-Platform/DataLab/issues/102) - Launch DataLab using `datalab` instead of `datalab`. Note that the `datalab` command is still available for backward compatibility. * Implemented [Issue #101](https://github.com/DataLab-Platform/DataLab/issues/101) - Configuration: set default image interpolation to anti-aliasing (`5` instead of `0` for nearest). This change is motivated by the fact that a performance improvement was made in PlotPy v2.7 on Windows, which allows to use anti-aliasing interpolation by default without a significant performance impact. * Implemented [Issue #100](https://github.com/DataLab-Platform/DataLab/issues/100) - Use the same installer and executable on Windows 7 SP1, 8, 10, 11. Before this change, a specific installer was required for Windows 7 SP1, due to the fact that Python 3.9 and later versions are not supported on this platform. A workaround was implemented to make DataLab work on Windows 7 SP1 with Python 3.9. 🛠️ Bug fixes: * Fixed [Issue #103](https://github.com/DataLab-Platform/DataLab/issues/103) - `proxy.add_annotations_from_items`: circle shape color seems to be ignored. ## DataLab Version 0.17.1 ## ℹ️ PlotPy v2.6.2 is required for this release. 💥 New features and enhancements: * Image View: * Before this release, when selecting a high number of images (e.g. when selecting a group of images), the application was very slow because all the images were displayed in the image view, even if they were all superimposed on the same image * The workaround was to enable the "Show first only" option * Now, to improve performance, if multiple images are selected, only the last image of the selection is displayed in the image view if this last image has no transparency and if the other images are completely covered by this last image * Clarification: action "Show first only" was renamed to "Show first object only", and a new icon was added to the action * API: added `width` and `height` properties to `ImageObj` class (returns the width and height of the image in physical units) * Windows launcher "start.pyw": writing a log file "datalab_error.log" when an exception occurs at startup 🛠️ Bug fixes: * Changing the color theme now correctly updates all DataLab's user interface components without the need to restart the application ℹ️ Other changes: * OpenCV is now an optional dependency: * This change is motivated by the fact that the OpenCV conda package is not maintained on Windows (at least), which leads to an error when installing DataLab with conda * When OpenCV is not installed, only the "OpenCV blob detection" feature won't work, and a warning message will be displayed when trying to use this feature ## DataLab Version 0.17.0 ## ℹ️ PlotPy v2.6 is required for this release. 💥 New features and enhancements: * Menu "Computing" was renamed to "Analysis" for both Signal and Image panels, to better reflect the nature of the features in this menu * Regions Of Interest (ROIs) are now taken into account everywhere in the application where it makes sense, and not only for the old "Computing" menu (now "Analysis") features. This closes [Issue #93](https://github.com/DataLab-Platform/DataLab/issues/93). If a signal or an image has an ROI defined: * Operations are done on the ROI only (except if the operation changes the data shape, or the pixel size for images) * Processing features are done on the ROI only (if the destination object data type is compatible with the source object data type, which excludes thresholding, for instance) * Analysis features are done on the ROI only, like before * As a consequence of previous point, and for clarity: * The "Edit Regions of interest" and "Remove all Regions of interest" features have been moved from the old "Computing" (now "Analysis") menu to the "Edit" menu where all metadata-related features are located * The "Edit Regions of interest" action has been added to both Signal and Image View vertical toolbars (in second position, after the "View in a new window" action) * Following the bug fix on image data type conversion issues with basic operations, a new "Arithmetic operation" feature has been added to the "Operations" menu for both Signal and Image panels. This feature allows to perform linear operations on signals and images, with the following operations: * Addition: ``obj3 = (obj1 + obj2) * a + b`` * Subtraction: ``obj3 = (obj1 - obj2) * a + b`` * Multiplication: ``obj3 = (obj1 * obj2) * a + b`` * Division: ``obj3 = (obj1 / obj2) * a + b`` * Improved "View in a new window" and "ROI editor" dialog boxes size management: default size won't be larger than DataLab's main window size * ROI editor: * Added toolbars for both Signal and Image ROI editors, to allow to zoom in and out, and to reset the zoom level easily * Rearranged the buttons in the ROI editor dialog box for better ergonomics and consistency with the Annotations editor ("View in a new window" dialog box) * Application color theme: * Added support for color theme (auto, light, dark) in the "Settings" dialog box * The color theme is applied without restarting the application 🛠️ Bug fixes: * Intensity profile / Segment profile extraction: * When extracting a profile on an image with a ROI defined, the associated PlotPy feature show a warning message ('UserWarning: Warning: converting a masked element to nan.') but the profile is correctly extracted and displayed, with NaN values where the ROI is not defined. * NaN values are now removed from the profile before plotting it * Simple processing features with a one-to-on mapping with a Python function (e.g. `numpy.absolute`, `numpy.log10`, etc.) and without parameters: fix result object title which was systematically ending with "|" (the character that usually precedes the list of parameters) * Butterworth filter: fix cutoff frequency ratio default value and valid range * Fix actions refresh issue in Image View vertical toolbar: * When starting DataLab with the Signal Panel active, switching to the Image View was showing "View in a new window" or "Edit Regions of interest" actions enabled in the vertical toolbar, even if no image was displayed in the Image View * The Image View vertical toolbar is now correctly updated at startup * View in a new window: cross section tools (intensity profiles) stayed disabled unless the user selected an image through the item list - this is now fixed * Image View: "Show contrast panel" toolbar button was not enabled at startup, and was only enabled when at least one image was displayed in the Image View - it is now always enabled, as expected * Image data type conversion: * Previously, the data type conversion feature was common to signal and image processing features, i.e. a simple conversion of the data type using NumPy's `astype` method * This was not sufficient for image processing features, in particular for integer images, because even if the result was correct from a numerical point of view, underflow or overflow could be legitimately seen as a bug from a mathematical point of view * The image data type conversion feature now relies on the internal `clip_astype` function, which clips the data to the valid range of the target data type before converting it (in the case of integer images) * Image ROI extraction issues: * Multiple regressions were introduced in version 0.16.0: * Single circular ROI extraction was not working as expected (a rectangular ROI was extracted, with unexpected coordinates) * Multiple circular ROI extraction lead to a rectangular ROI extraction * Multiple ROI extraction was no longer cropping the image to the overall bounding box of the ROIs * These issues are now fixed, and unit tests have been added to prevent regressions: * An independent test algorithm has been implemented to check the correctness of the ROI extraction in all cases mentioned above * Tests cover both single and multiple ROI extraction, with circular and rectangular ROIs * Overflow and underflow issues in some operations on integer images: * When processing integer images, some features were causing overflow or underflow issues, leading to unexpected results (correct results from a numerical point of view, but not from a mathematical point of view) * This issue only concerned basic operations (addition, subtraction, multiplication, division, and constant operations) - all the other features were already working as expected * This is now fixed as result output are now floating point images * Unit tests have been added to prevent regressions for all these operations ## DataLab Version 0.16.4 ## This is a minor maintenance release. 🛠️ Bug fixes: * Requires PlotPy v2.4.1 or later to fix the following issues related to the contrast adjustment feature: * A regression was introduced in an earlier version of PlotPy: levels histogram was no longer removed from contrast adjustment panel when the associated image was removed from the plot * This is now fixed: when an image is removed, the histogram is removed as well and the contrast panel is refreshed (which was not the case even before the regression) * Ignore `AssertionError` in *config_unit_test.py* when executing test suite on WSL 📚 Documentation: * Fix class reference in `Wrap11Func` documentation ## DataLab Version 0.16.3 ## 🛠️ Bug fixes: * Fixed [Issue #84](https://github.com/DataLab-Platform/DataLab/issues/84) - Build issues with V0.16.1: `signal` name conflict, ... * This issue was intended to be fixed in version 0.16.2, but the fix was not complete * Thanks to [@rolandmas](https://github.com/rolandmas) for reporting the issue and for the help in investigating the problem and testing the fix * Fixed [Issue #85](https://github.com/DataLab-Platform/DataLab/issues/85) - Test data paths may be added multiple times to `datalab.utils.tests.TST_PATH` * This issue is related to [Issue #84](https://github.com/DataLab-Platform/DataLab/issues/84) * Adding the test data paths multiple times to `datalab.utils.tests.TST_PATH` was causing the test data to be loaded multiple times, which lead to some tests failing (a simple workaround was added to V0.16.2: this issue is now fixed) * Thanks again to [@rolandmas](https://github.com/rolandmas) for reporting the issue in the context of the Debian packaging * Fixed [Issue #86](https://github.com/DataLab-Platform/DataLab/issues/86) - Average of N integer images overflows data type * Fixed [Issue #87](https://github.com/DataLab-Platform/DataLab/issues/87) - Image average profile extraction: `AttributeError` when trying to edit profile parameters * Fixed [Issue #88](https://github.com/DataLab-Platform/DataLab/issues/88) - Image segment profile: point coordinates inversion ## DataLab Version 0.16.2 ## This release requires PlotPy v2.4.0 or later, which brings the following bug fixes and new features: * New constrast adjustment features and bug fixes: * New layout: the vertical toolbar (which was constrained in a small area on the right side of the panel) is now a horizontal toolbar at the top of the panel, beside the title * New "Set range" button: allows the user to set manually the minimum and maximum values of the histogram range * Fixed histogram update issues when no image was currently selected (even if the an image was displayed and was selected before) * Histogram range was not updated when either the minimum or maximum value was set using the "Minimum value" or "Maximum value" buttons (which have been renamed to "Min." and "Max." in this release) * Histogram range was not updated when the "Set full range" button was clicked, or when the LUT range was modified using the "Scales / LUT range" form in "Properties" group box * Image view context menu: new "Reverse X axis" feature ℹ️ Minor new features and enhancements: * Image file types: * Added native support for reading .SPE, .GEL, .NDPI and .REC image files * Added support for any `imageio`-supported file format through configuration file (entry `imageio_formats` may be customized to complement the default list of supported formats: see [documentation](https://datalab-platform.com/en/features/image/menu_file.html#open-image) for more details) 🛠️ Bug fixes: * Image Fourier analysis: * Fixed logarithmic scale for the magnitude spectrum (computing dB instead of natural logarithm) * Fixed PSD computation with logarithmic scale (computing dB instead of natural logarithm) * Updated the documentation to explicitly mention that the logarithmic scale is in dB * Fixed [Issue #82](https://github.com/DataLab-Platform/DataLab/issues/82) - Macros are not renamed in DataLab after exporting them to Python scripts * `ResultProperties` object can now be added to `SignalObj` or `ImageObj` metadata even outside a Qt event loop (because the label item is no longer created right away) * Progress bar is now automatically closed as expected when an error occurrs during a long operation (e.g. when opening a file) * Difference, division...: dialog box for the second operand selection was allowing to select a group (only a signal or an image should be selected) * When doing an operation which involves an object (signal or image) with higher order number than the current object (e.g. when subtracting an image with an image from a group below the current image), the resulting object's title now correctly refers to the order numbers of the objects involved in the operation (e.g., to continue with the subtraction example mentioned above, the resulting object's title was previously referring to the order number before the insertion of the resulting image) * Added support for additional test data folder thanks to the `DATALAB_DATA` environment variable (useful for testing purposes, and especially in the context of Debian packaging) ## DataLab Version 0.16.1 ## Since version 0.16.0, many validation functions have been added to the test suite. The percentage of validated compute functions has increased from 37% to 84% in this release. NumPy 2.0 support has been added with this release. ℹ️ Minor new features and enhancements: * Signal and image moving average and median filters: * Added "Mode" parameter to choose the mode of the filter (e.g. "reflect", "constant", "nearest", "mirror", "wrap") * The default mode is "reflect" for moving average and "nearest" for moving median * This allows to handle edge effects when filtering signals and images 🛠️ Bug fixes: * Fixed Canny edge detection to return binary image as `uint8` instead of `bool` (for consistency with other image processing features) * Fixed Image normalization: lower bound was wrongly set for `maximum` method * Fixed `ValueError` when computing PSD with logarithmic scale * Fixed Signal derivative algorithm: now using `numpy.gradient` instead of a custom implementation * Fixed SciPy's `cumtrapz` deprecation: use `cumulative_trapezoid` instead * Curve selection now shows the individual points of the curve (before, only the curve line width was broadened) * Windows installer: add support for unstable releases (e.g., 0.16.1.dev0), thus allowing to easily install the latest development version of DataLab on Windows * Fixed [Issue #81](https://github.com/DataLab-Platform/DataLab/issues/81) - When opening files, show progress dialog only if necessary * Fixed [Issue #80](https://github.com/DataLab-Platform/DataLab/issues/80) - Plotting results: support for two use cases * The features of the "Analysis" menu produce *results* (scalars): blob detection (circle coordinates), 2D peak detection (point coordinates), etc. Depending on the feature, result tables are displayed in the "Results" dialog box, and the results are also stored in the signal or image metadata: each line of the result table is an individual result, and each column is a property of the result - some results may consist only of a single individual result (e.g., image centroid or curve FHWM), while others may consist of multiple individual results (e.g., blob detection, contour detection, etc.). * Before this change, the "Plot results" feature only supported plotting the first individual result of a result table, as a function of the index (of the signal or image objects) or any of the columns of the result table. This was not sufficient for some use cases, where the user wanted to plot multiple individual results of a result table. * Now, the "Plot results" feature supports two use cases: * "One curve per result title": Plotting the first individual result of a result table, as before * "One curve per object (or ROI) and per result title": Plotting all individual results of a result table, as a function of the index (of the signal or image objects) or any of the columns of the result table * The selection of the use case is done in the "Plot results" dialog box * The default use case is "One curve per result title" if the result table has only one line, and "One curve per object (or ROI) and per result title" otherwise ## DataLab Version 0.16.0 ## 💥 New features and enhancements: * Major user interface overhaul: * The menu bar and toolbars have been reorganized to make the application more intuitive and easier to use * Operations and processing features have been regrouped in submenus * All visualization-related actions are now grouped in the plot view vertical toolbar * Clarified the "Annotations" management (new buttons, toolbar action...) * New validation process for signal and image features: * Before this release, DataLab's validation process was exclusively done from the programmer's point of view, by writing unit tests and integration tests, thus ensuring that the code was working as expected (i.e. that no exception was raised and that the behavior was correct) * With this release, a new validation process has been introduced, from the user's point of view, by adding new validation functions (marked with the `@pytest.mark.validation` decorator) in the test suite * A new "Validation" section in the documentation explains how validation is done and contains a list of all validation functions with the statistics of the validation process (generated from the test suite) * The validation process is a work in progress and will be improved in future versions * "Properties" group box: * Added "Scales" tab, to show and set the plot scales: * X, Y for signals * X, Y, Z (LUT range) for images * View options: * New "Show first only" option in the "View" menu, to show only the first curve (or image) when multiple curves (or images) are displayed in the plot view * New (movable) label for FWHM computations, additional to the existing segment annotation * I/O features: * Added support for reading and writing .MAT files (MATLAB format) * Create a new group when opening a file containing multiple signals or images (e.g. CSV file with multiple curves) * Add support for binary images * Signal ROI extraction: added new dialog box to manually edit the ROI lower and upper bounds after defining the ROI graphically ℹ️ New **Signal** operations, processing and analysis features: | Menu | Submenu |Features | |-------------|--------------|---------------------------------------------------------| | New | New signal | Exponential, pulse, polynomial, custom (manual input) | | Operations | | Exponential, Square root, Power | | Operations | Operations with a constant | +, -, *, / | | Processing | Axis Transformation | Reverse X-axis | | Processing | Level Adjustment | Offset correction | | Processing | Fourier analysis | Power spectrum, Phase spectrum, Magnitude spectrum, Power spectral density | | Processing | Frequency filters | Low-pass, High-pass, Band-pass, Band-stop | | Processing | | Windowing (Hanning, Hamming, Blackman, Blackman-Harris, Nuttall, Flat-top...) | | Processing | Fit | Linear fit, Sinusoidal fit, Exponential fit, CDF fit | | Analysis | | FWHM (Zero-crossing method), X value @ min/max, Sampling period/frequency, Dynamic parameters (ENOB, SNR, SINAD, THD, SFDR), -3dB bandwidth, Contrast | ℹ️ New **Image** operations, processing and analysis features: | Menu | Submenu |Features | |-------------|--------------|---------------------------------------------------------| | Operations | | Exponential | | Operations | Intensity profiles | Profile along a segment | | Operations | Operations with a constant | +, -, *, / | | Processing | Level Adjustment | Normalization, Clipping, Offset correction | | Processing | Fourier analysis | Power spectrum, Phase spectrum, Magnitude spectrum, Power spectral density | | Processing | Thresholding | Parametric, ISODATA, Li, Mean, Minimum, Otsu, Triangle, Yen | 🛠️ Bug fixes: * Fixed a performance issue due to an unnecessary refresh of the plot view when adding a new signal or image * Fixed [Issue #77](https://github.com/DataLab-Platform/DataLab/issues/77) - Intensity profiles: unable to accept dialog the second time * Fixed [Issue #75](https://github.com/DataLab-Platform/DataLab/issues/75) - View in a new window: curve anti-aliasing is not enabled by default * Annotations visibility is now correctly saved and restored: * Before this release, when modifying the annotations visibility in the separate plot view, the visibility was not saved and restored when reopening the plot view * This has been [fixed upstream](https://github.com/PlotPyStack/PlotPy/commit/03faaa42e5d6d4016ea8c99334c29d46a5963467) in PlotPy (v2.3.3) ## DataLab Version 0.15.1 ## 🛠️ Bug fixes: * Fixed [Issue #68](https://github.com/DataLab-Platform/DataLab/issues/68) - Slow loading of even simple plots: * On macOS, the user experience was degraded when handling even simple plots * This was due to the way macOS handles the pop-up windows, e.g. when refreshing the plot view ("Creating plot items" progress bar), hence causing a very annoying flickering effect and a global slowdown of the application * This is now fixed by showing the progress bar only after a short delay (1s), that is when it is really needed (i.e. for long operations) * Thanks to [@marcel-goldschen-ohm](https://github.com/marcel-goldschen-ohm) for the very thorough feedback and the help in testing the fix * Fixed [Issue #69](https://github.com/DataLab-Platform/DataLab/issues/69) - Annotations should be read-only in Signal/Image View * Regarding the annotations, DataLab's current behavior is the following: * Annotations are created only when showing the signal/image in a separate window (double-click on the object, or "View" > "View in a new window") * When displaying the objects in either the "Signal View" or the "Image View", the annotations should be read-only (i.e. not movable, nor resizable or deletable) * However, some annotations were still deletable in the "Signal View" and the "Image View": this is now fixed * Note that the fact that annotations can't be created in the "Signal View" or the "Image View" is a limitation of the current implementation, and may be improved in future versions ## DataLab Version 0.15.0 ## 🎁 New installer for the stand-alone version on Windows: * The stand-alone version on Windows is now distributed as an MSI installer (instead of an EXE installer) * This avoids the false positive detection of the stand-alone version as a potential threat by some antivirus software * The program will install files and shortcuts: * For current user, if the user has no administrator privileges * For all users, if the user has administrator privileges * Installation directory may be customized * MSI installer allows to integrate DataLab's installation seemlessly in an organization's deployment system 💥 New features and enhancements: * Added support for large text/CSV files: * Files over 1 GB (and with reasonable number of lines) can now be imported as signals or images without crashing the application or even slowing it down * The file is read by chunks and, for signals, the data is downsampled to a reasonable number of points for visualization * Large files are supported when opening a file (or dragging and dropping a file in the Signal Panel) and when importing a file in the Text Import Wizard * Auto downsampling feature: * Added "Auto downsampling" feature to signal visualization settings (see "Settings" dialog box) * This feature allows to automatically downsample the signal data for visualization when the number of points is too high and would lead to a slow rendering * The downsampling factor is automatically computed based on the configured maximum number of points to display * This feature is enabled by default and may be disabled in the signal visualization settings * CSV format handling: * Improved support for CSV files with a header row (column names) * Added support for CSV files with empty columns * Open/save file error handling: * Error messages are now more explicit when opening or saving a file fails * Added a link to the folder containing the file in the error message * Added "Plugins and I/O formats" page to the Installation and Configuration Viewer (see "Help" menu) * Reset DataLab configuration: * In some cases, it may be useful to reset the DataLab configuration file to its default values (e.g. when the configuration file is corrupted) * Added new `--reset` command line option to remove the configuration folder * Added new "Reset DataLab" Start Menu shortcut to the Windows installer 🛠️ Bug fixes: * Fixed [Issue #64](https://github.com/DataLab-Platform/DataLab/issues/64) - HDF5 browser does not show datasets with 1x1 size: * HDF5 datasets with a size of 1x1 were not shown in the HDF5 browser * Even if those datasets should not be considered as signals or images, they are now shown in the HDF5 browser (but not checkable, i.e. not importable as signals or images) ## DataLab Version 0.14.2 ## ⚠️ API changes required for fixing support for multiple signals loading feature: * Merged `open_object` and `open_objects` methods to `load_from_files` in proxy classes, main window and data panels * For consistency's sake: merged `save_object` and `save_objects` into `save_to_files` * To sum up, those changes lead to the following situation: * `load_from_files`: load a sequence of objects from multiple files * `save_to_files`: save a sequence of objects to multiple files (at the moment, it only supports saving a single object to a single file, but it may be extended in the future to support saving multiple objects to a single file) 🛠️ Bug fixes: * Fixed [Issue #61](https://github.com/DataLab-Platform/DataLab/issues/61) - Text file import wizard: application crash when importing a multiple curve text file: * This issue concerns a use case where the text file contains multiple curves * This is now fixed and an automatic test has been added to prevent regressions ## DataLab Version 0.14.1 ## 🎉 New domain name: [datalab-platform.com](https://datalab-platform.com) 💥 New features: * Added support for colormap inversion in Image View: * New "Invert colormap" entry in plot context menu, image parameters, and in the default image view settings * This requires `PlotPy` v2.3 or later * HDF5 Browser: * Added "Show array" button at the corner of the "Group" and "Attributes" tabs, to show the array in a separate window (useful for copy/pasting data to other applications, for instance) * Attributes: added support for more scalar data types * Testability and maintainability: * DataLab's unit tests are now using [pytest](https://pytest.org). This has required a lot of work for the transition, especially to readapt the tests so that they may be executed in the same process. For instance, a particular attention has been given to sandboxing the tests, so that they do not interfere with each other. * Added continuous integration (CI) with GitHub Actions * For this release, test coverage is 87% * Text file import assistant: * Drastically improved the performance of the array preview when importing large text files (no more progress bar, and the preview is now displayed almost instantaneously) 🛠️ Bug fixes: * XML-RPC server was not shut down properly when closing DataLab * Fixed test-related issues: some edge cases were hidden by the old test suite, and have been revealed by the transition to `pytest`. This has led to some bug fixes and improvements in the code. * On Linux, when running a computation on a signal or an image, and on rare occasions, the computation was stuck as if it was running indefinitely. Even though the graphical user interface was still responsive, the computation was not progressing and the user had to cancel the operation and restart it. This was due to the start method of the separate process used for the computation (default method was "fork" on Linux). This is now fixed by using the "spawn" method instead, which is the recommended method for latest versions of Python on Linux when multithreading is involved. * Fixed [Issue #60](https://github.com/DataLab-Platform/DataLab/issues/60) - `OSError: Invalid HDF5 file [...]` when trying to open an HDF5 file with an extension other than ".h5" * Image Region of Interest (ROI) extraction: when modifying the image bounds in the confirmation dialog box, the ROI was not updated accordingly until the operation was run again * Deprecation issues: * Fixed `scipy.ndimage.filters` deprecation warning * Fixed `numpy.fromstring` deprecation warning ## DataLab Version 0.14.0 ## 💥 New features: * New "Histogram" feature in "Analysis" menu: * Added histogram computation feature for both signals and images * The histogram is computed on the regions of interest (ROI) if any, or on the whole signal/image if no ROI is defined * Editable parameters: number of bins, lower and upper bounds * HDF5 browser: * Improved tree view layout (more compact and readable) * Multiple files can now be opened at once, using the file selection dialog box * Added tabs with information below the graphical preview: * Group info: path, textual preview, etc. * Attributes info: name, value * Added "Show only supported data" check box: when checked, only supported data (signals and images) are shown in the tree view * Added "Show values" check box, to show/hide the values in the tree view * Macro Panel: * Macro commands are now numbered, starting from 1, like signals and images * Remote control API (`RemoteProxy` and `LocalProxy`): * `get_object_titles` method now accepts "macro" as panel name and returns the list of macro titles * New `run_macro`, `stop_macro` and `import_macro_from_file` methods 🛠️ Bug fixes: * Stand-alone version - Integration in Windows start menu: * Fixed "Uninstall" shortcut (unclickable due to a generic name) * Translated "Browse installation directory" and "Uninstall" shortcuts * Fixed [Issue #55](https://github.com/DataLab-Platform/DataLab/issues/55) - Changing image bounds in Image View has no effect on the associated image object properties * Fixed [Issue #56](https://github.com/DataLab-Platform/DataLab/issues/56) - "Test data" plugin: `AttributeError: 'NoneType' object has no attribute 'data'` when canceling "Create image with peaks" * Fixed [Issue #57](https://github.com/DataLab-Platform/DataLab/issues/57) - Circle and ellipse result shapes are not transformed properly * Curve color and style cycle: * Before this release, this cycle was handled by the same mechanism either for the Signal Panel or the HDF5 Browser, which was not the expected behavior * Now, the cycle is handled separately: the HDF5 Browser or the Text Import Wizard use always the same color and style for curves, and they don't interfere with the Signal Panel cycle ## DataLab Version 0.12.0 ## 🧹 Clarity-Enhanced Interface Update: * The tabs used to switch between the data panels (signals and images) and the visualization components ("Curve panel" and "Image panel") have been renamed to "Signal Panel" and "Image Panel" (instead of "Signals" and "Images") * The visualization components have been renamed to "Signal View" and "Image View" (instead of "Curve panel" and "Image panel") * The data panel toolbar has been renamed to "Signal Toolbar" and "Image Toolbar" (instead of "Signal Processing Toolbar" and "Image Processing Toolbar") * Ergonomics improvements: the "Signal Panel" and "Image Panel" are now displayed on the left side of the main window, and the "Signal View" and "Image View" are displayed on the right side of the main window. This reduces the distance between the list of objects (signals and images) and the associated actions (toolbars and menus), and makes the interface more intuitive and easier to use ✨ New tour and demo feature: * When starting DataLab for the first time, an optional tour is now shown to the user to introduce the main features of the application * The tour can be started again at any time from the "?" menu * Also added a new "Demo" feature to the "?" menu 🚀 New Binder environment to test DataLab online without installing anything 📚 Documentation: * New text tutorials are available: * Measuring Laser Beam Size * DataLab and Spyder: a perfect match * "Getting started" section: added more explanations and links to the tutorials * New "Contributing" section explaining how to contribute to DataLab, whether you are a developer or not * New "Macros" section explaining how to use the macro commands feature * Added "Copy" button to code blocks in the documentation 💥 New features: * New "Text file import assistant" feature: * This feature allows to import text files as signals or images * The user can define the source (clipboard or texte file) * Then, it is possible to define the delimiter, the number of rows to skip, the destination data type, etc. * Added menu on the "Signal Panel" and "Image Panel" tabs corner to quickly access the most used features (e.g. "Add", "Remove", "Duplicate", etc.) * Intensity profile extraction feature: * Added graphical user interface to extract intensity profiles from images, for both line and averaged profiles * Parameters are still directly editable by the user ("Edit profile parameters" button) * Parameters are now stored from one profile extraction to another * Statistics feature: * Added `/σ(y)` to the signal "Statistics" result table (in addition to the mean, median, standard deviation, etc.) * Added `peak-to-peak` to the signal and image "Statistics" result table * Curve fitting feature: fit results are now stored in a dictionary in the signal metadata (instead of being stored individually in the signal metadata) * Window state: * The toolbars and dock widgets state (visibility, position, etc.) are now stored in the configuration file and restored at startup (size and position were already stored and restored) * This implements part of [Issue #30](https://github.com/DataLab-Platform/DataLab/issues/30) - Save/restore main window layout 🛠️ Bug fixes: * Fixed [Issue #41](https://github.com/DataLab-Platform/DataLab/issues/41) - Radial profile extraction: unable to enter user-defined center coordinates * Fixed [Issue #49](https://github.com/DataLab-Platform/DataLab/issues/49) - Error when trying to open a (UTF-8 BOM) text file as an image * Fixed [Issue #51](https://github.com/DataLab-Platform/DataLab/issues/51) - Unexpected dimensions when adding new ROI on an image with X/Y arbitrary units (not pixels) * Improved plot item style serialization management: * Before this release, the plot item style was stored in the signal/image metadata only when saving the workspace to an HDF5 file. So, when modifying the style of a signal/image from the "Parameters" button (view toolbar), the style was not kept in some cases (e.g. when duplicating the signal/image). * Now, the plot item style is stored in the signal/image metadata whenever the style is modified, and is restored when reloading the workspace * Handled `ComplexWarning` cast warning when adding regions of interest (ROI) to a signal with complex data ## DataLab Version 0.11.0 ## 💥 New features: * Signals and images may now be reordered in the tree view: * Using the new "Move up" and "Move down" actions in the "Edit" menu (or using the corresponding toolbar buttons): * This fixes [Issue #22](https://github.com/DataLab-Platform/DataLab/issues/22) - Add "move up/down" actions in "Edit" menu, for signals/images and groups * Signals and images may also be reordered using drag and drop: * Signals and images can be dragged and dropped inside their own panel to change their order * Groups can also be dragged and dropped inside their panel * The feature also supports multi-selection (using the standard Ctrl and Shift modifiers), so that multiple signals/images/groups can be moved at once, not necessarily with contiguous positions * This fixes [Issue #17](https://github.com/DataLab-Platform/DataLab/issues/17) - Add Drag and Drop feature to Signals/Images tree views * New 1D interpolation features: * Added "Interpolation" feature to signal panel's "Processing" menu * Methods available: linear, spline, quadratic, cubic, barycentric and PCHIP * Thanks to [@marcel-goldschen-ohm](https://github.com/marcel-goldschen-ohm) for the contribution to spline interpolation * This fixes [Issue #20](https://github.com/DataLab-Platform/DataLab/issues/20) - Add 1D interpolation features * New 1D resampling feature: * Added "Resampling" feature to signal panel's "Processing" menu * Same interpolation methods as for the "Interpolation" feature * Possibility to specify the resampling step or the number of points * This fixes [Issue #21](https://github.com/DataLab-Platform/DataLab/issues/21) - Add 1D resampling feature * New 1D convolution feature: * Added "Convolution" feature to signal panel's "Operation" menu * This fixes [Issue #23](https://github.com/DataLab-Platform/DataLab/issues/23) - Add 1D convolution feature * New 1D detrending feature: * Added "Detrending" feature to signal panel's "Processing" menu * Methods available: linear or constant * This fixes [Issue #24](https://github.com/DataLab-Platform/DataLab/issues/24) - Add 1D detrending feature * 2D analysis results: * Before this release, 2D analysis results such as contours, blobs, etc. were stored in image metadata dictionary as coordinates (x0, y0, x1, y1, ...) even for circles and ellipses (i.e. the coordinates of the bounding rectangles). * For convenience, the circle and ellipse coordinates are now stored in image metadata dictionary as (x0, y0, radius) and (x0, y0, a, b, theta) respectively. * These results are also shown as such in the "Results" dialog box (either at the end of the computing process or when clicking on the "Show results" button). * This fixes [Issue #32](https://github.com/DataLab-Platform/DataLab/issues/32) - Contour detection: show circle `(x, y, r)` and ellipse `(x, y, a, b, theta)` instead of `(x0, y0, x1, x1, ...)` * 1D and 2D analysis results: * Additionnaly to the previous enhancement, more analysis results are now shown in the "Results" dialog box * This concerns both 1D (FHWM...) and 2D analysis results (contours, blobs...): * Segment results now also show length (L) and center coordinates (Xc, Yc) * Circle and ellipse results now also show area (A) * Added "Plot results" entry in "Analysis" menu: * This feature allows to plot analysis results (1D or 2D) * It creates a new signal with X and Y axes corresponding to user-defined parameters (e.g. X = indices and Y = radius for circle results) * Increased default width of the object selection dialog box: * The object selection dialog box is now wider by default, so that the full signal/image/group titles may be more easily readable * Delete metadata feature: * Before this release, the feature was deleting all metadata, including the Regions Of Interest (ROI) metadata, if any. * Now a confirmation dialog box is shown to the user before deleting all metadata if the signal/image has ROI metadata: this allows to keep the ROI metadata if needed. * Image profile extraction feature: added support for masked images (when defining regions of interest, the areas outside the ROIs are masked, and the profile is extracted only on the unmasked areas, or averaged on the unmasked areas in the case of average profile extraction) * Curve style: added "Reset curve styles" in "View" menu. This feature allows to reset the curve style cycle to its initial state. * Plugin base classe `PluginBase`: * Added `edit_new_signal_parameters` method for showing a dialog box to edit parameters for a new signal * Added `edit_new_image_parameters` method for showing a dialog box to edit parameters for a new image (updated the *datalab_testdata.py* plugin accordingly) * Signal and image computations API (`datalab.computations`): * Added wrappers for signal and image 1 -> 1 computations * These wrappers aim at simplifying the creation of a basic computation function operating on DataLab's native objects (`SignalObj` and `ImageObj`) from a function operating on NumPy arrays * This simplifies DataLab's internals and makes it easier to create new computing features inside plugins * See the *datalab_custom_func.py* example plugin for a practical use case * Added "Radial profile extraction" feature to image panel's "Operation" menu: * This feature allows to extract a radially averaged profile from an image * The profile is extracted around a user-defined center (x0, y0) * The center may also be computed (centroid or image center) * Automated test suite: * Since version 0.10, DataLab's proxy object has a `toggle_auto_refresh` method to toggle the "Auto-refresh" feature. This feature may be useful to improve performance during the execution of test scripts * Test scenarios on signals and images are now using this feature to improve performance * Signal and image metadata: * Added "source" entry to the metadata dictionary, to store the source file path when importing a signal or an image from a file * This field is kept while processing the signal/image, in order to keep track of the source file path 📚 Documentation: * New [Tutorial section](https://datalab-platform.com/en/intro/tutorials/index.html) in the documentation: * This section provides a set of tutorials to learn how to use DataLab * The following video tutorials are available: * Quick demo * Adding your own features * The following text tutorials are available: * Processing a spectrum * Detecting blobs on an image * Measuring Fabry-Perot fringes * Prototyping a custom processing pipeline * New [API section](https://datalab-platform.com/en/api/index.html) in the documentation: * This section explains how to use DataLab as a Python library, by covering the following topics: * How to use DataLab algorithms on NumPy arrays * How to use DataLab computation features on DataLab objects (signals and images) * How to use DataLab I/O features * How to use proxy objects to control DataLab remotely * This section also provides a complete API reference for DataLab objects and features * This fixes [Issue #19](https://github.com/DataLab-Platform/DataLab/issues/19) - Add API documentation (data model, functions on arrays or signal/image objects, ...) 🛠️ Bug fixes: * Fixed [Issue #29](https://github.com/DataLab-Platform/DataLab/issues/29) - Polynomial fit error: `QDialog [...] argument 1 has an unexpected type 'SignalProcessor'` * Image ROI extraction feature: * Before this release, when extracting a single circular ROI from an image with the "Extract all ROIs into a single image object" option enabled, the result was a single image without the ROI mask (the ROI mask was only available when extracting ROI with the option disabled) * This was leading to an unexpected behavior, because one could interpret the result (a square image without the ROI mask) as the result of a single rectangular ROI * Now, when extracting a single circular ROI from an image with the "Extract all ROIs into a single image object" option enabled, the result is a single image with the ROI mask (as if the option was disabled) * This fixes [Issue #31](https://github.com/DataLab-Platform/DataLab/issues/31) - Single circular ROI extraction: automatically switch to `compute_extract_roi` function * Analysis on circular ROI: * Before this release, when running computations on a circular ROI, the results were unexpected in terms of coordinates (results seemed to be computed in a region located above the actual ROI). * This was due to a regression introduced in an earlier release. * Now, when defining a circular ROI and running computations on it, the results are computed on the actual ROI * This fixes [Issue #33](https://github.com/DataLab-Platform/DataLab/issues/33) - Analysis on circular ROI: unexpected results * Contour detection on ROI: * Before this release, when running contour detection on a ROI, some contours were detected outside the ROI (it may be due to a limitation of the scikit-image `find_contours` function). * Now, thanks a workaround, the erroneous contours are filtered out. * A new test module `datalab.tests.features.images.contour_fabryperot_app` has been added to test the contour detection feature on a Fabry-Perot image (thanks to [@emarin2642](https://github.com/emarin2642) for the contribution) * This fixes [Issue #34](https://github.com/DataLab-Platform/DataLab/issues/34) - Contour detection: unexpected results outside ROI * Analysis result merging: * Before this release, when doing a `1->N` computation (sum, average, product) on a group of signals/images, the analysis results associated to each signal/image were merged into a single result, but only the type of result present in the first signal/image was kept. * Now, the analysis results associated to each signal/image are merged into a single result, whatever the type of result is. * Fixed [Issue #36](https://github.com/DataLab-Platform/DataLab/issues/36) - "Delete all" action enable state is sometimes not refreshed * Image X/Y swap: when swapping X and Y axes, the regions of interest (ROI) were not removed and not swapped either (ROI are now removed, until we implement the swap feature, if requested) * "Properties" group box: the "Apply" button was enabled by default, even when no property was modified, which was confusing for the user (the "Apply" button is now disabled by default, and is enabled only when a property is modified) * Fixed proxy `get_object` method when there is no object to return (`None` is returned instead of an exception) * Fixed `IndexError: list index out of range` when performing some operations or computations on groups of signals/images (e.g. "ROI extraction", "Peak detection", "Resize", etc.) * Drag and drop from a file manager: filenames are now sorted alphabetically ## DataLab Version 0.10.1 ## *Note*: V0.10.0 was almost immediately replaced by V0.10.1 due to a last minute bug fix 💥 New features: * Features common to signals and images: * Added "Real part" and "Imaginary part" features to "Operation" menu * Added "Convert data type" feature to "Operation" menu * Features added following user requests (12/18/2023 meetup @ CEA): * Curve and image styles are now saved in the HDF5 file: * Curve style covers the following properties: color, line style, line width, marker style, marker size, marker edge color, marker face color, etc. * Image style covers the following properties: colormap, interpolation, etc. * Those properties were already persistent during the working session, but were lost when saving and reloading the HDF5 file * Now, those properties are saved in the HDF5 file and are restored when reloading the HDF5 file * New profile extraction features for images: * Added "Line profile" to "Operations" menu, to extract a profile from an image along a row or a column * Added "Average profile" to "Operations" menu, to extract the average profile on a rectangular area of an image, along a row or a column * Image LUT range (contrast/brightness settings) is now saved in the HDF5 file: * As for curve and image styles, the LUT range was already persistent during the working session, but was lost when saving and reloading the HDF5 file * Now, the LUT range is saved in the HDF5 file and is restored when reloading it * Added "Auto-refresh" and "Refresh manually" actions in "View" menu (and main toolbar): * When "Auto-refresh" is enabled (default), the plot view is automatically refreshed when a signal/image is modified, added or removed. Even though the refresh is optimized, this may lead to performance issues when working with large datasets. * When disabled, the plot view is not automatically refreshed. The user must manually refresh the plot view by clicking on the "Refresh manually" button in the main toolbar or by pressing the standard refresh key (e.g. "F5"). * Added `toggle_auto_refresh` method to DataLab proxy object: * This method allows to toggle the "Auto-refresh" feature from a macro-command, a plugin or a remote control client. * A context manager `context_no_refresh` is also available to temporarily disable the "Auto-refresh" feature from a macro-command, a plugin or a remote control client. Typical usage: ```python with proxy.context_no_refresh(): # Do something without refreshing the plot view proxy.compute_fft() # (...) ``` * Improved curve readability: * Until this release, the curve style was automatically set by cycling through **PlotPy** predefined styles * However, some styles are not suitable for curve readability (e.g. "cyan" and "yellow" colors are not readable on a white background, especially when combined with a "dashed" line style) * This release introduces a new curve style management with colors which are distinguishable and accessible, even to color vision deficiency people * Added "Curve anti-aliasing" feature to "View" menu (and toolbar): * This feature allows to enable/disable curve anti-aliasing (default: enabled) * When enabled, the curve rendering is smoother but may lead to performance issues when working with large datasets (that's why it can be disabled) * Added `toggle_show_titles` method to DataLab proxy object. This method allows to toggle the "Show graphical object titles" feature from a macro-command, a plugin or a remote control client. * Remote client is now checking the server version and shows a warning message if the server version may not be fully compatible with the client version. 🛠️ Bug fixes: * Image contour detection feature ("Analysis" menu): * The contour detection feature was not taking into account the "shape" parameter (circle, ellipse, polygon) when computing the contours. The parameter was stored but really used only when calling the feature a second time. * This unintentional behavior led to an `AssertionError` when choosing "polygon" as the contour shape and trying to compute the contours for the first time. * This is now fixed (see [Issue #9](https://github.com/DataLab-Platform/DataLab/issues/9) - Image contour detection: `AssertionError` when choosing "polygon" as the contour shape) * Keyboard shortcuts: * The keyboard shortcuts for "New", "Open", "Save", "Duplicate", "Remove", "Delete all" and "Refresh manually" actions were not working properly. * Those shortcuts were specific to each signal/image panel, and were working only when the panel on which the shortcut was pressed for the first time was active (when activated from another panel, the shortcut was not working and a warning message was displayed in the console, e.g. `QAction::event: Ambiguous shortcut overload: Ctrl+C`) * Besides, the shortcuts were not working at startup (when no panel had focus). * This is now fixed: the shortcuts are now working whatever the active panel is, and even at startup (see [Issue #10](https://github.com/DataLab-Platform/DataLab/issues/10) - Keyboard shortcuts not working properly: `QAction::event: Ambiguous shortcut overload: Ctrl+C`) * "Show graphical object titles" and "Auto-refresh" actions were not working properly: * The "Show graphical object titles" and "Auto-refresh" actions were only working on the active signal/image panel, and not on all panels. * This is now fixed (see [Issue #11](https://github.com/DataLab-Platform/DataLab/issues/11) - "Show graphical object titles" and "Auto-refresh" actions were working only on current signal/image panel) * Fixed [Issue #14](https://github.com/DataLab-Platform/DataLab/issues/14) - Saving/Reopening HDF5 project without cleaning-up leads to `ValueError` * Fixed [Issue #15](https://github.com/DataLab-Platform/DataLab/issues/15) - MacOS: 1. `pip install cdl` error - 2. Missing menus: * Part 1: `pip install cdl` error on MacOS was actually an issue from **PlotPy** (see [this issue](https://github.com/PlotPyStack/PlotPy/issues/9)), and has been fixed in PlotPy v2.0.3 with an additional compilation flag indicating to use C++11 standard * Part 2: Missing menus on MacOS was due to a PyQt/MacOS bug regarding dynamic menus * HDF5 file format: when importing an HDF5 dataset as a signal or an image, the dataset attributes were systematically copied to signal/image metadata: we now only copy the attributes which match standard data types (integers, floats, strings) to avoid errors when serializing/deserializing the signal/image object * Installation/configuration viewer: improved readability (removed syntax highlighting) * PyInstaller specification file: added missing `skimage` data files manually in order to continue supporting Python 3.8 (see [Issue #12](https://github.com/DataLab-Platform/DataLab/issues/12) - Stand-alone version on Windows 7: missing `api-ms-win-core-path-l1-1-0.dll`) * Fixed [Issue #13](https://github.com/DataLab-Platform/DataLab/issues/13) - ArchLinux: `qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found` ## DataLab Version 0.9.2 ## 🛠️ Bug fixes: * Region of interest (ROI) extraction feature for images: * ROI extraction was not working properly when the "Extract all ROIs into a single image object" option was enabled if there was only one defined ROI. The result was an image positioned at the origin (0, 0) instead of the expected position (x0, y0) and the ROI rectangle itself was not removed as expected. This is now fixed (see [Issue #6](https://github.com/DataLab-Platform/DataLab/issues/6) - 'Extract multiple ROI' feature: unexpected result for a single ROI) * ROI rectangles with negative coordinates were not properly handled: ROI extraction was raising a `ValueError` exception, and the image mask was not displayed properly. This is now fixed (see [Issue #7](https://github.com/DataLab-Platform/DataLab/issues/7) - Image ROI extraction: `ValueError: zero-size array to reduction operation minimum which has no identity`) * ROI extraction was not taking into account the pixel size (dx, dy) and the origin (x0, y0) of the image. This is now fixed (see [Issue #8](https://github.com/DataLab-Platform/DataLab/issues/8) - Image ROI extraction: take into account pixel size) * Macro-command console is now read-only: * The macro-command panel Python console is currently not supporting standard input stream (`stdin`) and this is intended (at least for now) * Set Python console read-only to avoid confusion ## DataLab Version 0.9.1 ## 🛠️ Bug fixes: * French translation is not available on Windows/Stand alone version: * Locale was not properly detected on Windows for stand-alone version (frozen with `pyinstaller`) due to an issue with `locale.getlocale()` (function returning `None` instead of the expected locale on frozen applications) * This is ultimately a `pyinstaller` issue, but a workaround has been implemented in `guidata` V3.2.2 (see [guidata issue #68](https://github.com/PlotPyStack/guidata/issues/68) - Windows: gettext translation is not working on frozen applications) * [Issue #2](https://github.com/DataLab-Platform/DataLab/issues/2) - French translation is not available on Windows Stand alone version * Saving image to JPEG2000 fails for non integer data: * JPEG2000 encoder does not support non integer data or signed integer data * Before, DataLab was showing an error message when trying to save incompatible data to JPEG2000: this was not a consistent behavior with other standard image formats (e.g. PNG, JPG, etc.) for which DataLab was automatically converting data to the appropriate format (8-bit unsigned integer) * Current behavior is now consistent with other standard image formats: when saving to JPEG2000, DataLab automatically converts data to 8-bit unsigned integer or 16-bit unsigned integer (depending on the original data type) * [Issue #3](https://github.com/DataLab-Platform/DataLab/issues/3) - Save image to JPEG2000: 'OSError: encoder error -2 when writing image file' * Windows stand-alone version shortcuts not showing in current user start menu: * When installing DataLab on Windows from a non-administrator account, the shortcuts were not showing in the current user start menu but in the administrator start menu instead (due to the elevated privileges of the installer and the fact that the installer does not support installing shortcuts for all users) * Now, the installer *does not* ask for elevated privileges anymore, and shortcuts are installed in the current user start menu (this also means that the current user must have write access to the installation directory) * In future releases, the installer will support installing shortcuts for all users if there is a demand for it (see [Issue #5](https://github.com/DataLab-Platform/DataLab/issues/5)) * [Issue #4](https://github.com/DataLab-Platform/DataLab/issues/4) - Windows: stand-alone version shortcuts not showing in current user start menu * Installation and configuration window for stand-alone version: * Do not show ambiguous error message 'Invalid dependencies' anymore * Dependencies are supposed to be checked when building the stand-alone version * Added PDF documentation to stand-alone version: * The PDF documentation was missing in previous release * Now, the PDF documentation (in English and French) is included in the stand-alone version ## DataLab Version 0.9.0 ## New dependencies: * DataLab is now powered by [PlotPyStack](https://github.com/PlotPyStack): * [PythonQwt](https://github.com/PlotPyStack/PythonQwt) * [guidata](https://github.com/PlotPyStack/guidata) * [PlotPy](https://github.com/PlotPyStack/PlotPy) * [opencv-python](https://pypi.org/project/opencv-python/) (algorithms for image processing) New reference platform: * DataLab is validated on Windows 11 with Python 3.11 and PyQt 5.15 * DataLab is also compatible with other OS (Linux, MacOS) and other Python-Qt bindings and versions (Python 3.8-3.12, PyQt6, PySide6) New features: * DataLab is a platform: * Added support for plugins * Custom processing features available in the "Plugins" menu * Custom I/O features: new file formats can be added to the standard I/O features for signals and images * Custom HDF5 features: new HDF5 file formats can be added to the standard HDF5 import feature * More features to come... * Added remote control feature: DataLab can be controlled remotely via a TCP/IP connection (see [Remote control](https://datalab-platform.com/en/remote_control.html)) * Added macro commands: DataLab can be controlled via a macro file (see [Macro commands](https://datalab-platform.com/en/macro_commands.html)) * General features: * Added settings dialog box (see "Settings" entry in "File" menu): * General settings * Visualization settings * Processing settings * Etc. * New default layout: signal/image panels are on the right side of the main window, visualization panels are on the left side with a vertical toolbar * Signal/Image features: * Added process isolation: each signal/image is processed in a separate process, so that DataLab does not freeze anymore when processing large signals/images * Added support for groups: signals and images can be grouped together, and operations can be applied to all objects in a group, or between groups * Added warning and error dialogs with detailed traceback links to the source code (warnings may be optionally ignored) * Drastically improved performance when selecting objects * Optimized performance when showing large images * Added support for dropping files on signal/image panel * Added "Analysis parameters" group box to show last result input parameters * Added "Copy titles to clipboard" feature in "Edit" menu * For every single processing feature (operation, processing and analysis menus), the entered parameters (dialog boxes) are stored in cache to be used as defaults the next time the feature is used * Signal processing: * Added support for optional FFT shift (see Settings dialog box) * Image processing: * Added pixel binning operation (X/Y binning factors, operation: sum, mean...) * Added "Distribute on a grid" and "Reset image positions" in operation menu * Added Butterworth filter * Added exposure processing features: * Gamma correction * Logarithmic correction * Sigmoïd correction * Added restoration processing features: * Total variation denoising filter (TV Chambolle) * Bilateral filter (denoising) * Wavelet denoising filter * White Top-Hat denoising filter * Added morphological transforms (disk footprint): * White Top-Hat * Black Top-Hat * Erosion * Dilation * Opening * Closing * Added edge detection features: * Roberts filter * Prewitt filter (vertical, horizontal, both) * Sobel filter (vertical, horizontal, both) * Scharr filter (vertical, horizontal, both) * Farid filter (vertical, horizontal, both) * Laplace filter * Canny filter * Contour detection: added support for polygonal contours (in addition to circle and ellipse contours) * Added circle Hough transform (circle detection) * Added image intensity levels rescaling * Added histogram equalization * Added adaptative histogram equalization * Added blob detection methods: * Difference of Gaussian * Determinant of Hessian method * Laplacian of Gaussian * Blob detection using OpenCV * Result shapes and annotations are now transformed (instead of removed) when executing one of the following operations: * Rotation (arbitrary angle, +90°, -90°) * Symetry (vertical/horizontal) * Added support for optional FFT shift (see Settings dialog box) * Console: added configurable external editor (default: VSCode) to follow the traceback links to the source code DataLab-1.0.2/CONTRIBUTING.md000066400000000000000000000010121511411446000152220ustar00rootroot00000000000000# Contributing Guidelines DataLab is **your** platform. If you want it to be improved, you **can** contribute to the project, whether you are a developer or not. There are many ways to contribute to DataLab project, depending on how much time you have, your experience with open source projects, and your skills. To get started, please refer to our [contributing documentation](https://datalab-platform.com/en/contributing/index.html) for detailed instructions on how to contribute to the project. Happy contributing! DataLab-1.0.2/DataLab.bat000066400000000000000000000022131511411446000147550ustar00rootroot00000000000000 @echo off setlocal EnableDelayedExpansion REM Store script directory in a variable (outside IF block for batch compatibility) set SCRIPT_DIR=%~dp0 REM Check if a Python executable path is provided as an argument if "%1" == "" ( REM If not, try to use .venv\Scripts\pythonw.exe in the current directory set PYTHON_EXE=!SCRIPT_DIR!.venv\Scripts\pythonw.exe if not exist "!PYTHON_EXE!" ( echo Error: Python executable path must be provided as an argument. echo Usage: DataLab.bat path\to\python.exe exit /b 1 ) ) else ( REM Use the provided Python executable path set PYTHON_EXE=%1 ) REM Validate that the provided Python executable exists if not exist "%PYTHON_EXE%" ( echo Error: The specified Python executable does not exist: %PYTHON_EXE% exit /b 2 ) cd/D %~dp0 set ORIGINAL_PYTHONPATH=%PYTHONPATH% for /F "tokens=*" %%A in (.env) do (set %%A) set PYTHONPATH=%PYTHONPATH%;%ORIGINAL_PYTHONPATH% REM Extract pythonw.exe from the same directory as the provided python.exe for %%a in ("%PYTHON_EXE%") do set "PYTHON_DIR=%%~dpa" start "" "%PYTHON_DIR%pythonw.exe" datalab\start.pyw %2 %3 %4 %5 %6 %7 %8 %9DataLab-1.0.2/DataLab.code-workspace.template000066400000000000000000000004611511411446000207320ustar00rootroot00000000000000{ "folders": [ { "path": "." }, { "path": "../Sigima" }, { "path": "../PlotPy" }, { "path": "../guidata" } ], "settings": { "python.analysis.autoFormatStrings": true } }DataLab-1.0.2/DataLab.desktop000066400000000000000000000003471511411446000156660ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Type=Application Name=datalab GenericName=DataLab Comment=Run DataLab, the Python Signal and image processing software TryExec=datalab Exec=datalab Icon=DataLab.svg Categories=Education;Science;Physics; DataLab-1.0.2/DataLab.spec000066400000000000000000000023501511411446000151430ustar00rootroot00000000000000# -*- mode: python ; coding: utf-8 -*- # Initial command: # pyinstaller -y --clean -n DataLab -i resources\DataLab.ico datalab\start.pyw from PyInstaller.utils.hooks import collect_submodules, collect_data_files, copy_metadata all_hidden_imports = collect_submodules('datalab') datas = collect_data_files('datalab') + [('datalab\\plugins', 'datalab\\plugins')] datas += collect_data_files('guidata') + collect_data_files('plotpy') datas += collect_data_files('sigima') datas += copy_metadata('imageio') a = Analysis( ['datalab\\start.pyw'], pathex=[], binaries=[], datas=datas, hiddenimports=all_hidden_imports, hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, [], exclude_binaries=True, name='DataLab', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon=['resources\\DataLab.ico'], ) coll = COLLECT( exe, a.binaries, a.datas, strip=False, upx=True, upx_exclude=[], name='DataLab', ) DataLab-1.0.2/LICENSE000066400000000000000000000030001511411446000137750ustar00rootroot00000000000000BSD 3-Clause License Copyright (c) 2023, DataLab Platform Developers. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. 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. 3. Neither the name of the copyright holder nor the names of its contributors 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 COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. DataLab-1.0.2/MANIFEST.in000066400000000000000000000002131511411446000145310ustar00rootroot00000000000000graft doc graft resources graft macros graft plugins include conftest.py include CONTRIBUTING.md include requirements.txt include *.desktopDataLab-1.0.2/README.md000066400000000000000000000072331511411446000142630ustar00rootroot00000000000000![DataLab](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/DataLab-banner.png) [![license](https://img.shields.io/pypi/l/datalab-platform.svg)](./LICENSE) [![pypi version](https://img.shields.io/pypi/v/datalab-platform.svg)](https://pypi.org/project/datalab-platform/) [![PyPI status](https://img.shields.io/pypi/status/datalab-platform.svg)](https://github.com/DataLab-Platform/DataLab) [![PyPI pyversions](https://img.shields.io/pypi/pyversions/datalab-platform.svg)](https://pypi.python.org/pypi/datalab-platform/) DataLab is an **open-source platform for scientific and technical data processing and visualization** with unique features designed to meet industrial requirements. See [DataLab website](https://datalab-platform.com/) for more details. > **Note:** This project (DataLab Platform) should not be confused with the [datalab-org](https://datalab-org.io/) project, which is a separate and unrelated initiative focused on materials science databases and computational tools. ℹ️ Created by [CODRA](https://codra.net/)/[Pierre Raybaut](https://github.com/PierreRaybaut) in 2023, developed and maintained by DataLab Platform Developers. ![DataLab](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/shots/i_blob_detection_flower.png) 🧮 DataLab's processing power comes from the advanced algorithms of the object-oriented signal and image processing library [Sigima](https://github.com/DataLab-Platform/Sigima) 🚀 which is part of the DataLab Platform. ![Sigima](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/Sigima-Power.png) ℹ️ DataLab is powered by [PlotPyStack](https://github.com/PlotPyStack) 🚀 for curve plotting and fast image visualization. ![PlotPyStack](https://raw.githubusercontent.com/PlotPyStack/.github/main/data/plotpy-stack-powered.png) ℹ️ DataLab is built on Python and scientific libraries. ![Python](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/Python.png) ![NumPy](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/NumPy.png) ![SciPy](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/SciPy.png) ![scikit-image](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/scikit-image.png) ![OpenCV](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/OpenCV.png) ![PlotPyStack](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/plotpystack.png) ![Sigima](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/Sigima.png) ---- Try DataLab online, without installing anything, using Binder: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/DataLab-Platform/DataLab/binder-environments?urlpath=git-pull%3Frepo%3Dhttps%253A%252F%252Fgithub.com%252FDataLab-Platform%252FDataLab%26urlpath%3Ddesktop%252F%26branch%3Dbinder-environments) ---- ✨ Add features to DataLab by writing your own [plugin](https://datalab-platform.com/en/features/advanced/plugins.html) (see [plugin examples](https://github.com/DataLab-Platform/DataLab/tree/main/plugins/examples)) or macro (see [macro examples](https://github.com/DataLab-Platform/DataLab/tree/main/macros/examples)) ✨ DataLab may be remotely controlled from a third-party application (such as Jupyter, Spyder or any IDE): * Using the integrated [remote control](https://datalab-platform.com/en/features/advanced/remote.html) feature (this requires to install DataLab as a Python package) * Using the lightweight client integrated in [Sigima](https://github.com/DataLab-Platform/Sigima) (`pip install sigima`) DataLab-1.0.2/babel.cfg000066400000000000000000000001321511411446000145210ustar00rootroot00000000000000# This file is used to configure Babel for the project. [python: **.py] encoding = utf-8 DataLab-1.0.2/datalab/000077500000000000000000000000001511411446000143675ustar00rootroot00000000000000DataLab-1.0.2/datalab/__init__.py000066400000000000000000000022721511411446000165030ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab ======= DataLab is a generic signal and image processing software based on Python scientific libraries (such as NumPy, SciPy or scikit-image) and Qt graphical user interfaces (thanks to `PlotPyStack`_ libraries). .. _PlotPyStack: https://github.com/PlotPyStack """ import multiprocessing import os # Set multiprocessing start method to 'spawn' early to avoid fork-related warnings # on Linux systems when using Qt and multithreading. This must be done before # any multiprocessing.Pool is created. try: multiprocessing.set_start_method("spawn") except RuntimeError: # This exception is raised if the method is already set (this may happen because # this module is imported more than once, e.g. when running tests) pass __version__ = "1.0.2" __docurl__ = __homeurl__ = "https://datalab-platform.com/" __supporturl__ = "https://github.com/DataLab-Platform/DataLab/issues/new/choose" os.environ["DATALAB_VERSION"] = __version__ # Dear (Debian, RPM, ...) package makers, please feel free to customize the # following path to module's data (images) and translations: DATAPATH = LOCALEPATH = "" DataLab-1.0.2/datalab/adapters_metadata/000077500000000000000000000000001511411446000200325ustar00rootroot00000000000000DataLab-1.0.2/datalab/adapters_metadata/__init__.py000066400000000000000000000014201511411446000221400ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Adapters for Sigima's TableResult and GeometryResult, providing features for storing and retrieving those objects as metadata for DataLab's signal and image objects. """ from .base_adapter import BaseResultAdapter from .common import ( ResultData, create_resultdata_dict, have_geometry_results, have_results, resultadapter_to_html, show_resultdata, ) from .geometry_adapter import GeometryAdapter from .table_adapter import TableAdapter __all__ = [ "BaseResultAdapter", "GeometryAdapter", "ResultData", "TableAdapter", "create_resultdata_dict", "have_geometry_results", "have_results", "resultadapter_to_html", "show_resultdata", ] DataLab-1.0.2/datalab/adapters_metadata/base_adapter.py000066400000000000000000000227231511411446000230240ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Base adapter class for result objects, providing common functionality for storing and retrieving result objects as metadata for DataLab's signal and image objects. """ from __future__ import annotations from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Any, ClassVar, Generator import guidata.dataset as gds from sigima.objects import ImageObj, SignalObj if TYPE_CHECKING: import pandas as pd from sigima.objects.scalar import GeometryResult, TableResult class BaseResultAdapter(ABC): """Base adapter for result objects. This base class provides common functionality for working with result objects, including metadata storage/retrieval and various data representations. Args: result: Result object to adapt """ # Class constants for metadata storage - to be overridden by subclasses META_PREFIX: ClassVar[str] = "" META_SUFFIX: ClassVar[str] = "_dict" def __init__(self, result: TableResult | GeometryResult) -> None: self.result = result def set_applicative_attr(self, key: str, value: Any) -> None: """Set an applicative attribute for the result. Args: key: Attribute key value: Attribute value """ self.result.attrs[key] = value def get_applicative_attr(self, key: str, default: Any = None) -> Any: """Get an applicative attribute for the result. Args: key: Attribute key default: Default value to return if key not found Returns: Attribute value, or default if not set. If default is not None, assign it to the attribute if it was not already set. """ if key not in self.result.attrs and default is not None: self.result.attrs[key] = default return self.result.attrs.get(key, default) @property def title(self) -> str: """Get the title. Returns: Title """ return self.result.title @property def name(self) -> str: """Get the result kind name. Returns: The string value of the kind attribute (e.g., "segment", "circle", "statistics"). This is NOT unique - multiple results can share the same kind. """ return self.result.name @property def func_name(self) -> str: """Get the computation function name. Returns: The name of the computation function that produced this result. """ return self.result.func_name @property @abstractmethod def headers(self) -> list[str]: """Get column headers. Returns: List of column headers """ @property @abstractmethod def category(self) -> str: """Get the category. Returns: Category """ def get_roi_data(self, roi_index: int) -> "pd.DataFrame": """Get data for a specific ROI index. Args: roi_index: ROI index to filter by Returns: DataFrame containing only data for the specified ROI """ df = self.to_dataframe() if "roi_index" in df.columns: return df[df["roi_index"] == roi_index].drop(columns=["roi_index"]) return df def get_column_values(self, column_name: str, roi_index: int = None) -> list: """Get values for a specific column, optionally filtered by ROI. Args: column_name: Name of the column to retrieve roi_index: Optional ROI index to filter by Returns: List of values for the specified column """ df = self.to_dataframe() if roi_index is not None and "roi_index" in df.columns: df = df[df["roi_index"] == roi_index] return df[column_name].tolist() def get_unique_roi_indices(self) -> list[int]: """Get unique ROI indices present in the data. Returns: List of unique ROI indices """ df = self.to_dataframe() if "roi_index" in df.columns: return sorted(df["roi_index"].unique().tolist()) return [] if len(df) == 0 else [0] # Default ROI index for result data @property def metadata_key(self) -> str: """Get the metadata key used to store this result. Returns: Metadata key based on the result's title """ return f"{self.META_PREFIX}{self.func_name}{self.META_SUFFIX}" def add_to( self, obj: SignalObj | ImageObj, param: gds.DataSet | None = None ) -> None: """Add result to object metadata. Args: obj: Signal or image object param: Optional parameter dataset associated with this result """ assert self.func_name, "func_name must be set before adding to object metadata" # Store parameter in result attrs (will be serialized with result) if param is not None: self.result.attrs["param_json"] = gds.dataset_to_json(param) obj.metadata[self.metadata_key] = self.result.to_dict() def get_param(self) -> gds.DataSet | None: """Get parameter dataset associated with this result. Returns: Parameter dataset if present, None otherwise """ param_json = self.result.attrs.get("param_json") if param_json is not None: return gds.json_to_dataset(param_json) return None def remove_from(self, obj: SignalObj | ImageObj) -> None: """Remove result from object metadata. Args: obj: Signal or image object """ obj.metadata.pop(self.metadata_key, None) @classmethod def remove_all_from(cls, obj: SignalObj | ImageObj) -> None: """Remove all results of this type from object metadata. Args: obj: Signal or image object """ # Find all results in the object and remove them for adapter in list(cls.iterate_from_obj(obj)): adapter.remove_from(obj) @classmethod def match(cls, key: str, _value: Any) -> bool: """Check if the key matches the pattern for this result type. Args: key: Metadata key _value: Metadata value (unused) Returns: True if the key matches the pattern """ return key.startswith(cls.META_PREFIX) and key.endswith(cls.META_SUFFIX) @classmethod @abstractmethod def from_metadata_entry(cls, obj: SignalObj | ImageObj, key: str): """Create a result adapter from a metadata entry. Args: obj: Object containing the metadata key: Metadata key for the result data Returns: Adapter object Raises: ValueError: Invalid metadata entry """ @classmethod def from_obj( cls, obj: SignalObj | ImageObj, func_name: str ) -> BaseResultAdapter | None: """Create a result adapter from an object's metadata entry. Args: obj: Signal or image object func_name: Function name to look for Returns: Adapter object if found, None otherwise """ for adapter in cls.iterate_from_obj(obj): if adapter.func_name == func_name: return adapter return None @classmethod def iterate_from_obj( cls, obj: SignalObj | ImageObj ) -> Generator["BaseResultAdapter", None, None]: """Iterate over results stored in an object's metadata. Args: obj: Signal or image object Yields: Adapter objects """ for key, value in obj.metadata.items(): if cls.match(key, value): try: yield cls.from_metadata_entry(obj, key) except (ValueError, TypeError): # Skip invalid entries pass def to_dataframe(self, visible_only: bool = False): """Convert the result to a pandas DataFrame. Args: visible_only: If True, include only visible headers based on display preferences. Default is False. Returns: DataFrame with an optional 'roi_index' column. If visible_only is True, only columns with visible headers are included. """ return self.result.to_dataframe(visible_only=visible_only) def to_html( self, obj=None, visible_only: bool = True, transpose_single_row: bool = True, **kwargs, ) -> str: """Convert the result to HTML format. Args: obj: Optional SignalObj or ImageObj for ROI title extraction visible_only: If True, include only visible headers based on display preferences. Default is False. transpose_single_row: If True, transpose the table when there's only one row **kwargs: Additional arguments passed to DataFrame.to_html() Returns: HTML representation of the result """ return self.result.to_html( obj=obj, visible_only=visible_only, transpose_single_row=transpose_single_row, **kwargs, ) def get_visible_headers(self) -> list[str]: """Get list of currently visible headers based on display preferences. Returns: List of header names that should be displayed """ return self.result.get_visible_headers() DataLab-1.0.2/datalab/adapters_metadata/common.py000066400000000000000000000351351511411446000217030ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Common functions for metadata adapters. """ from __future__ import annotations import dataclasses import warnings from typing import TYPE_CHECKING import numpy as np import pandas as pd from guidata.qthelpers import exec_dialog from guidata.widgets.dataframeeditor import DataFrameEditor from sigima.objects import ImageObj, SignalObj from datalab.adapters_metadata.base_adapter import BaseResultAdapter from datalab.adapters_metadata.geometry_adapter import GeometryAdapter from datalab.adapters_metadata.table_adapter import TableAdapter from datalab.config import Conf, _ from datalab.objectmodel import get_short_id if TYPE_CHECKING: from qtpy.QtWidgets import QWidget @dataclasses.dataclass class ResultData: """Result data associated to a shapetype""" # We now store adapted objects from the new architecture results: list[BaseResultAdapter] | None = None ylabels: list[str] | None = None short_ids: list[str] | None = None def __bool__(self) -> bool: """Return True if there are results stored""" return bool(self.results) @property def category(self) -> str: """Return category of results""" if not self.results: raise ValueError("No result available") return self.results[0].category @property def headers(self) -> list[str]: """Return headers of results""" if not self.results: raise ValueError("No result available") # Return the intersection of all headers headers = set(self.results[0].headers) if len(self.results) > 1: for adapter in self.results[1:]: headers.intersection_update(adapter.headers) return list(headers) def __post_init__(self): """Check and initialize fields""" if self.results is None: self.results = [] if self.ylabels is None: self.ylabels = [] if self.short_ids is None: self.short_ids = [] def append(self, adapter: BaseResultAdapter, obj: SignalObj | ImageObj) -> None: """Append a result adapter Args: adapter: Adapter to append obj: Object associated to the adapter """ # Check that the adapter is compatible with existing ones if self.results: if adapter.category != self.results[0].category: raise ValueError("Incompatible adapter category") if len(set(self.headers).intersection(set(adapter.headers))) == 0: raise ValueError("Incompatible adapter headers") self.results.append(adapter) df = adapter.to_dataframe() for i_row_res in range(len(df)): sid = get_short_id(obj) ylabel = f"{adapter.func_name}({sid})" if "roi_index" in df.columns: i_roi = int(df.iloc[i_row_res]["roi_index"]) roititle = "" if i_roi >= 0: roititle = obj.roi.get_single_roi_title(i_roi) ylabel += f"|{roititle}" self.ylabels.append(ylabel) self.short_ids.append(sid) def have_results(objs: list[SignalObj | ImageObj]) -> bool: """Return True if any object has results Args: objs: List of objects Returns: True if any object has results, False otherwise """ return any( item for obj in objs for item in GeometryAdapter.iterate_from_obj(obj) ) or any(item for obj in objs for item in TableAdapter.iterate_from_obj(obj)) def have_geometry_results(objs: list[SignalObj | ImageObj]) -> bool: """Return True if any object has geometry results Args: objs: List of objects Returns: True if any object has geometry results, False otherwise """ return any(item for obj in objs for item in GeometryAdapter.iterate_from_obj(obj)) def create_resultdata_dict( objs: list[SignalObj | ImageObj], ) -> dict[str, ResultData]: """Return result data dictionary Args: objs: List of objects Returns: Result data dictionary: keys are result categories, values are ResultData """ rdatadict: dict[str, ResultData] = {} for obj in objs: for adapter in list(GeometryAdapter.iterate_from_obj(obj)) + list( TableAdapter.iterate_from_obj(obj) ): rdata = rdatadict.setdefault(adapter.category, ResultData()) rdata.append(adapter, obj) return rdatadict def show_resultdata(parent: QWidget, rdata: ResultData, object_name: str = "") -> None: """Show result data in a DataFrame editor window Args: parent: Parent widget rdata: Result data to show object_name: Optional object name for the dialog """ with warnings.catch_warnings(): warnings.simplefilter("ignore", RuntimeWarning) # Generate dataframes with visible columns only # Use the object-level visible_only parameter for cleaner implementation dfs = [result.to_dataframe(visible_only=True) for result in rdata.results] # Combine all dataframes df = pd.concat(dfs, ignore_index=True) # Add comparison columns if we have multiple results of the same kind if len(dfs) > 1: df = _add_comparison_columns_to_dataframe(df, rdata) # Remove roi_index column for display (not needed in the GUI) if "roi_index" in df.columns: df = df.drop(columns=["roi_index"]) df.set_index(pd.Index(rdata.ylabels), inplace=True) dlg = DataFrameEditor(parent) dlg.setup_and_check( df, _("Results") + f" ({rdata.category})", readonly=True, add_title_suffix=False, ) if object_name: dlg.setObjectName(object_name) dlg.resize(750, 300) exec_dialog(dlg) def _add_comparison_columns_to_dataframe( df: pd.DataFrame, rdata: ResultData ) -> pd.DataFrame: """Add comparison columns to dataframe with ROI-aware grouping. For each original column, adds one comparison column showing the difference between the current row and the corresponding reference row. Args: df: Combined DataFrame with all results rdata: ResultData containing ylabels and short_ids Returns: DataFrame with comparison columns added (one Δ column per original column) """ # Build signal/image groups: # list of (object_id, start_row, end_row) for each signal/image obj_groups = [] current_obj_id = None group_start = 0 for i, obj_id in enumerate(rdata.short_ids): if obj_id != current_obj_id: # New signal group if current_obj_id is not None: # Close previous group obj_groups.append((current_obj_id, group_start, i - 1)) current_obj_id = obj_id group_start = i # Close the last group if current_obj_id is not None: obj_groups.append((current_obj_id, group_start, len(rdata.ylabels) - 1)) # If we only have one signal group, no need for comparisons if len(obj_groups) <= 1: return df # Use the first signal group as reference reference_group = obj_groups[0] _ref_obj_id, reference_start, reference_end = reference_group # Get columns to compare (exclude roi_index) cols_to_compare = [col for col in df.columns if col != "roi_index"] # Create new dataframe with original columns plus one comparison column per # original column result_df = df.copy() # Add comparison columns - one per original column for col in cols_to_compare: comparison_col_name = f"Δ({col})" comparison_values = [] # For each row in the entire dataframe for row_idx in range(len(df)): # Find which group this row belongs to row_group_idx = None for group_idx, (obj_id, start, end) in enumerate(obj_groups): if start <= row_idx <= end: row_group_idx = group_idx break if row_group_idx == 0: # Reference group - no comparison needed comparison_values.append("") elif row_group_idx is not None: # Non-reference group - calculate comparison with corresponding # reference row group_start = obj_groups[row_group_idx][1] ref_row_idx = reference_start + (row_idx - group_start) if ref_row_idx <= reference_end: ref_val = df.iloc[ref_row_idx][col] curr_val = df.iloc[row_idx][col] comparison_values.append( _compute_comparison_value(ref_val, curr_val) ) else: comparison_values.append("") else: # Should not happen, but handle gracefully comparison_values.append("") # Insert comparison column right after the original column col_idx = result_df.columns.get_loc(col) result_df.insert(col_idx + 1, comparison_col_name, comparison_values) return result_df def _compute_comparison_value(ref_val, curr_val) -> str: """Compute a comparison value between reference and current values. Args: ref_val: Reference value curr_val: Current value to compare Returns: String representation of the comparison """ # Handle different data types if pd.isna(ref_val) or pd.isna(curr_val): return "N/A" if isinstance(ref_val, str) or isinstance(curr_val, str): # String comparison return "=" if str(ref_val) == str(curr_val) else "≠" if isinstance(ref_val, (int, float, np.integer, np.floating)) and isinstance( curr_val, (int, float, np.integer, np.floating) ): # Numeric comparison - show difference diff = curr_val - ref_val # For integers, check exact equality; for floats, use small tolerance if isinstance(ref_val, (int, np.integer)) and isinstance( curr_val, (int, np.integer) ): tolerance = 0 else: tolerance = 1e-10 if abs(diff) <= tolerance: return "=" # Format the difference with appropriate sign sign = "+" if diff > 0 else "" return f"{sign}{diff:.4g}" # Default comparison return "=" if ref_val == curr_val else "≠" def resultadapter_to_html( adapter: BaseResultAdapter | list[BaseResultAdapter], obj: SignalObj | ImageObj, visible_only: bool = True, transpose_single_row: bool = True, max_cells: int | None = None, **kwargs, ) -> str: """Convert a result adapter to HTML format Args: adapter: Adapter to convert, or list of adapters to concatenate obj: Object associated to the adapter visible_only: If True, include only visible headers based on display preferences. Default is False. transpose_single_row: If True, transpose the table when there's only one row max_cells: Maximum number of table cells (rows × columns) to display per result. If None, use the configuration value. If a result has more cells, it will be truncated with a notice. **kwargs: Additional arguments passed to DataFrame.to_html() Returns: HTML representation of the adapter """ if not isinstance(adapter, BaseResultAdapter) and not all( isinstance(adp, BaseResultAdapter) for adp in adapter ): raise ValueError( "Adapter must be a BaseResultAdapter " "or a list of BaseResultAdapter instances" ) # Get max_cells from config if not provided if max_cells is None: max_cells = Conf.view.max_cells_in_label.get(100) if isinstance(adapter, BaseResultAdapter): # Get the dataframe FIRST to check truncation needs df = adapter.to_dataframe(visible_only=visible_only) # Remove roi_index column for display calculations display_df = df.drop(columns=["roi_index"]) if "roi_index" in df.columns else df # For merged labels, limit display columns for readability max_display_cols = Conf.view.max_cols_in_label.get(20) num_cols = len(display_df.columns) cols_truncated = num_cols > max_display_cols if cols_truncated: display_df = display_df.iloc[:, :max_display_cols] num_cols = max_display_cols # Calculate number of cells (rows × columns) num_rows = len(adapter.result) num_cells = num_rows * num_cols # Check if truncation is needed BEFORE calling to_html() if num_cells > max_cells or cols_truncated: # Calculate how many rows we can display given max_cells max_rows = max(1, max_cells // num_cols) if num_cols > 0 else num_rows # Truncate to max_rows and make a copy to avoid SettingWithCopyWarning df_truncated = display_df.head(max_rows).copy() # Generate HTML directly from truncated DataFrame for performance # This is MUCH faster than calling adapter.to_html() on full data html_kwargs = {"border": 0} html_kwargs.update(kwargs) # Format numeric columns efficiently for col in df_truncated.select_dtypes(include=["number"]).columns: df_truncated[col] = df_truncated[col].map( lambda x: f"{x:.3g}" if pd.notna(x) else x ) text = f'{adapter.result.title}:' text += df_truncated.to_html(**html_kwargs) # Add truncation notice omitted_parts = [] if num_rows > max_rows: omitted_parts.append(_("%d more rows") % (num_rows - max_rows)) if cols_truncated: num_omitted_cols = len(df.columns) - max_display_cols omitted_parts.append(_("%d more columns") % num_omitted_cols) if omitted_parts: omitted_str = _("%s omitted") % ", ".join(omitted_parts) text += f"

... ({omitted_str})

" return text # No truncation needed, use the standard adapter.to_html() method return adapter.to_html( obj=obj, visible_only=visible_only, transpose_single_row=transpose_single_row, **kwargs, ) # For lists of adapters, recursively process each one return "
".join( [ resultadapter_to_html( res, obj, visible_only, transpose_single_row, max_cells ) for res in adapter ] ) DataLab-1.0.2/datalab/adapters_metadata/geometry_adapter.py000066400000000000000000000054201511411446000237400ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Adapter for Sigima's GeometryResult, providing features for storing and retrieving those objects as metadata for DataLab's signal and image objects. """ from __future__ import annotations from typing import ClassVar from sigima.objects import GeometryResult, ImageObj, SignalObj from datalab.adapters_metadata.base_adapter import BaseResultAdapter class GeometryAdapter(BaseResultAdapter): """Adapter for GeometryResult objects. This adapter provides a unified interface for working with GeometryResult objects, including metadata storage/retrieval and various data representations. Args: geometry: GeometryResult object to adapt """ # Class constants for metadata storage META_PREFIX: ClassVar[str] = "Geometry_" def __init__(self, geometry: GeometryResult) -> None: super().__init__(geometry) @classmethod def from_geometry_result(cls, geometry: GeometryResult) -> GeometryAdapter: """Create GeometryAdapter from GeometryResult. Args: geometry: GeometryResult object Returns: GeometryAdapter instance """ return cls(geometry) @property def headers(self) -> list[str]: """Get column headers for the coordinates. Returns: List of column headers """ # Get headers directly from the DataFrame df = self.result.to_dataframe() # Return coordinate columns (exclude 'roi_index' if present) return [col for col in df.columns if col != "roi_index"] @property def category(self) -> str: """Get the category. Returns: Category """ return f"shape_{self.result.kind.value}" @staticmethod def add_geometry_result_to_obj( geometry: GeometryResult, obj: SignalObj | ImageObj ) -> None: """Static method to add GeometryResult to object. Args: geometry: GeometryResult object obj: Signal or image object """ # Create adapter and add to object adapter = GeometryAdapter.from_geometry_result(geometry) adapter.add_to(obj) @classmethod def from_metadata_entry(cls, obj: SignalObj | ImageObj, key: str): """Create a geometry result adapter from a metadata entry. Args: obj: Object containing the metadata key: Metadata key for the array data Returns: GeometryAdapter object Raises: ValueError: Invalid metadata entry """ # Load the geometry data from the dictionary geometry_dict = obj.metadata[key] geometry = GeometryResult.from_dict(geometry_dict) return cls(geometry) DataLab-1.0.2/datalab/adapters_metadata/table_adapter.py000066400000000000000000000045441511411446000232020ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Adapter for Sigima's TableResult, providing features for storing and retrieving those objects as metadata for DataLab's signal and image objects. """ from __future__ import annotations from typing import ClassVar, Union from sigima.objects import ImageObj, SignalObj from sigima.objects.scalar import NO_ROI, TableResult from datalab.adapters_metadata.base_adapter import BaseResultAdapter class TableAdapter(BaseResultAdapter): """Adapter for TableResult objects. This adapter provides a unified interface for working with TableResult objects, including metadata storage/retrieval and various data representations. Args: table: TableResult object to adapt """ # Class constants for metadata storage META_PREFIX: ClassVar[str] = "Table_" def __init__(self, table: TableResult) -> None: super().__init__(table) @property def headers(self) -> list[str]: """Get the column headers. Returns: Column headers """ return list(self.result.headers) @property def category(self) -> str: """Get the category. Returns: Category (uses the title for backward compatibility) """ return self.result.title def get_unique_roi_indices(self) -> list[int]: """Get unique ROI indices present in the data. Returns: List of unique ROI indices """ df = self.to_dataframe() if "roi_index" in df.columns: return sorted(df["roi_index"].unique().tolist()) return [NO_ROI] if len(df) > 0 else [] @classmethod def from_metadata_entry(cls, obj: Union[SignalObj, ImageObj], key: str): """Create a table result adapter from a metadata entry. Args: obj: Object containing the metadata key: Metadata key for the table data Returns: TableAdapter object Raises: ValueError: Invalid metadata entry """ if not cls.match(key, obj.metadata[key]): raise ValueError(f"Invalid metadata key for table result: {key}") # Parse the metadata entry as a TableResult dictionary table_dict = obj.metadata[key] table = TableResult.from_dict(table_dict) return cls(table) DataLab-1.0.2/datalab/adapters_plotpy/000077500000000000000000000000001511411446000176015ustar00rootroot00000000000000DataLab-1.0.2/datalab/adapters_plotpy/__init__.py000066400000000000000000000026111511411446000217120ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Adapters for PlotPy =================== The :mod:`datalab.adapters_plotpy` package provides adapters for PlotPy to integrate with DataLab's data model and GUI. """ __all__ = [ "CURVESTYLES", "CircularROIPlotPyAdapter", "GeometryPlotPyAdapter", "ImageObjPlotPyAdapter", "PolygonalROIPlotPyAdapter", "RectangularROIPlotPyAdapter", "SegmentROIPlotPyAdapter", "SignalObjPlotPyAdapter", "SignalROIPlotPyAdapter", "TablePlotPyAdapter", "TypePlotItem", "TypeROIItem", "configure_roi_item", "create_adapter_from_object", "items_to_json", "json_to_items", "plotitem_to_singleroi", "singleroi_to_plotitem", ] from .base import items_to_json, json_to_items from .converters import ( create_adapter_from_object, plotitem_to_singleroi, singleroi_to_plotitem, ) from .objects.base import TypePlotItem from .objects.image import ( ImageObjPlotPyAdapter, ) from .objects.scalar import ( GeometryPlotPyAdapter, TablePlotPyAdapter, ) from .objects.signal import CURVESTYLES, SignalObjPlotPyAdapter from .roi.base import TypeROIItem, configure_roi_item from .roi.image import ( CircularROIPlotPyAdapter, PolygonalROIPlotPyAdapter, RectangularROIPlotPyAdapter, ) from .roi.signal import SegmentROIPlotPyAdapter, SignalROIPlotPyAdapter DataLab-1.0.2/datalab/adapters_plotpy/annotations.py000066400000000000000000000074251511411446000225200ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Annotation Adapter for PlotPy Integration ----------------------------------------- This module bridges Sigima's format-agnostic annotation storage with PlotPy's plot item system. It handles bidirectional conversion between: - Sigima: list[dict] (JSON-serializable) - PlotPy: list[AnnotatedShape] (plot items) """ from __future__ import annotations import json from typing import TYPE_CHECKING from guidata.io import JSONReader, JSONWriter from plotpy.io import load_items, save_items if TYPE_CHECKING: from plotpy.items import AnnotatedShape from sigima.objects.base import BaseObj class PlotPyAnnotationAdapter: """Adapter for converting between Sigima annotations and PlotPy items. This class provides the bridge between Sigima's generic annotation storage (list of dicts) and PlotPy's specific plot item format. Example: >>> from sigima.objects.signal.creation import create_signal >>> obj = create_signal("Test") >>> adapter = PlotPyAnnotationAdapter(obj) >>> >>> # Add PlotPy items >>> from plotpy.items import AnnotatedRectangle >>> rect = AnnotatedRectangle(0, 0, 10, 10) >>> adapter.add_items([rect]) >>> >>> # Retrieve as PlotPy items >>> items = adapter.get_items() >>> len(items) 1 """ def __init__(self, obj: BaseObj): """Initialize adapter with an object. Args: obj: Signal or image object with annotation support """ self.obj = obj def get_items(self) -> list[AnnotatedShape]: """Get annotations as PlotPy items. Returns: List of PlotPy annotation items Notes: This method deserializes the JSON data stored in the object using PlotPy's load_items() function. """ annotations = self.obj.get_annotations() if not annotations: return [] items = [] for ann_dict in annotations: # Each annotation dict should contain PlotPy's JSON serialization if "plotpy_json" in ann_dict: try: json_str = ann_dict["plotpy_json"] for item in load_items(JSONReader(json_str)): items.append(item) except (json.JSONDecodeError, ValueError, KeyError): # Skip invalid items continue return items def set_items(self, items: list[AnnotatedShape]) -> None: """Set annotations from PlotPy items. Args: items: List of PlotPy annotation items Notes: This method serializes PlotPy items to JSON using PlotPy's save_items() function and stores them in the Sigima format. """ if not items: self.obj.clear_annotations() return # Convert PlotPy items to our annotation format annotations = [] for item in items: writer = JSONWriter(None) save_items(writer, [item]) ann_dict = { "type": "plotpy_item", "item_class": item.__class__.__name__, "plotpy_json": writer.get_json(), } annotations.append(ann_dict) self.obj.set_annotations(annotations) def add_items(self, items: list[AnnotatedShape]) -> None: """Add PlotPy items to existing annotations. Args: items: List of PlotPy annotation items to add """ current_items = self.get_items() current_items.extend(items) self.set_items(current_items) def clear(self) -> None: """Clear all annotations.""" self.obj.clear_annotations() DataLab-1.0.2/datalab/adapters_plotpy/base.py000066400000000000000000000053541511411446000210740ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Base Module -------------------------- """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import json from typing import TYPE_CHECKING from guidata.io import JSONReader, JSONWriter from plotpy.io import load_items, save_items from plotpy.items import ( AbstractLabelItem, AnnotatedSegment, AnnotatedShape, ) if TYPE_CHECKING: from plotpy.items import AbstractShape from plotpy.styles import AnnotationParam def config_annotated_shape( item: AnnotatedShape, fmt: str, lbl: bool, section: str | None = None, option: str | None = None, show_computations: bool | None = None, ): """Configurate annotated shape Args: item: Annotated shape item fmt: Format string lbl: Show label section: Shape style section (e.g. "plot") option: Shape style option (e.g. "shape/drag") show_computations: Show computations """ param: AnnotationParam = item.annotationparam param.format = fmt param.show_label = lbl if show_computations is not None: param.show_computations = show_computations if isinstance(item, AnnotatedSegment): item.label.labelparam.anchor = "T" item.label.labelparam.update_item(item.label) param.update_item(item) if section is not None and option is not None: item.set_style(section, option) # TODO: [P3] Move this function as a method of plot items in PlotPy def set_plot_item_editable( item: AbstractShape | AbstractLabelItem | AnnotatedShape, state ): """Set plot item editable state Args: item: Plot item state: State """ item.set_movable(state) item.set_resizable(state and not isinstance(item, AbstractLabelItem)) item.set_rotatable(state and not isinstance(item, AbstractLabelItem)) item.set_readonly(not state) item.set_selectable(state) def items_to_json(items: list) -> str | None: """Convert plot items to JSON string Args: items: list of plot items Returns: JSON string or None if items is empty """ if items: writer = JSONWriter(None) save_items(writer, items) return writer.get_json(indent=4) return None def json_to_items(json_str: str | None) -> list: """Convert JSON string to plot items Args: json_str: JSON string or None Returns: List of plot items """ items = [] if json_str: try: for item in load_items(JSONReader(json_str)): items.append(item) except json.decoder.JSONDecodeError: pass return items DataLab-1.0.2/datalab/adapters_plotpy/converters.py000066400000000000000000000050421511411446000223460ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Converters ------------------------- """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING from plotpy.items import ( AnnotatedCircle, AnnotatedPolygon, AnnotatedRectangle, AnnotatedXRange, ) from sigima.objects import ( CircularROI, PolygonalROI, RectangularROI, SegmentROI, ) from datalab.adapters_plotpy.factories import create_adapter_from_object from datalab.adapters_plotpy.roi.image import ( PolygonalROIPlotPyAdapter, RectangularROIPlotPyAdapter, ) if TYPE_CHECKING: from sigima.objects import ImageObj, SignalObj def plotitem_to_singleroi( plot_item: AnnotatedXRange | AnnotatedRectangle | AnnotatedCircle | AnnotatedPolygon, obj: SignalObj | ImageObj | None = None, ) -> SegmentROI | RectangularROI | CircularROI | PolygonalROI: """Create a single ROI from the given PlotPy item to integrate with DataLab Args: plot_item: The PlotPy item for which to create a single ROI obj: Optional signal or image object for coordinate rounding Returns: A single ROI instance """ # pylint: disable=import-outside-toplevel from datalab.adapters_plotpy.roi.image import ( CircularROIPlotPyAdapter, ) from datalab.adapters_plotpy.roi.signal import ( SegmentROIPlotPyAdapter, ) if isinstance(plot_item, AnnotatedXRange): adapter = SegmentROIPlotPyAdapter elif isinstance(plot_item, AnnotatedRectangle): adapter = RectangularROIPlotPyAdapter elif isinstance(plot_item, AnnotatedCircle): adapter = CircularROIPlotPyAdapter elif isinstance(plot_item, AnnotatedPolygon): adapter = PolygonalROIPlotPyAdapter else: raise TypeError(f"Unsupported PlotPy item type: {type(plot_item)}") return adapter.from_plot_item(plot_item, obj) def singleroi_to_plotitem( roi: SegmentROI | RectangularROI | CircularROI | PolygonalROI, obj: SignalObj | ImageObj, ) -> AnnotatedXRange | AnnotatedRectangle | AnnotatedCircle | AnnotatedPolygon: """Create a PlotPy item from the given single ROI to integrate with DataLab Args: roi: The single ROI for which to create a PlotPy item obj: The object (signal or image) associated with the ROI Returns: A PlotPy item instance """ adapter = create_adapter_from_object(roi) return adapter.to_plot_item(obj) DataLab-1.0.2/datalab/adapters_plotpy/coordutils.py000066400000000000000000000131421511411446000223430ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ ROI Coordinate Utilities ========================= This module provides utility functions for rounding ROI coordinates to appropriate precision based on the sampling characteristics of signals and images. These functions are used when converting interactive PlotPy shapes to ROI objects to ensure coordinates are displayed with reasonable precision. """ from __future__ import annotations import numpy as np from sigima.objects import ImageObj, ROI1DParam, ROI2DParam, SignalObj def round_signal_coords( obj: SignalObj, coords: list[float], precision_factor: float = 0.1 ) -> list[float]: """Round signal coordinates to appropriate precision based on sampling period. Rounds to a fraction of the median sampling period to avoid excessive decimal places while maintaining reasonable precision. Args: obj: signal object coords: coordinates to round precision_factor: fraction of sampling period to use as rounding precision. Default is 0.1 (1/10th of sampling period). Returns: Rounded coordinates """ if len(obj.x) < 2: # Cannot compute sampling period, return coords as-is return coords # Compute median sampling period sampling_period = float(np.median(np.diff(obj.x))) if sampling_period == 0: # Avoid division by zero for constant x arrays return coords # Round to specified fraction of sampling period precision = sampling_period * precision_factor # Determine number of decimal places if precision > 0: decimals = max(0, int(-np.floor(np.log10(precision)))) return [round(c, decimals) for c in coords] return coords def round_image_coords( obj: ImageObj, coords: list[float], precision_factor: float = 0.1 ) -> list[float]: """Round image coordinates to appropriate precision based on pixel spacing. Rounds to a fraction of the pixel spacing to avoid excessive decimal places while maintaining reasonable precision. Uses separate precision for X and Y. Args: obj: image object coords: flat list of coordinates [x0, y0, x1, y1, ...] to round precision_factor: fraction of pixel spacing to use as rounding precision. Default is 0.1 (1/10th of pixel spacing). Returns: Rounded coordinates Raises: ValueError: if coords does not contain an even number of elements """ if len(coords) % 2 != 0: raise ValueError("coords must contain an even number of elements (x, y pairs).") if len(coords) == 0: return coords rounded = list(coords) if obj.is_uniform_coords: # Use dx, dy for uniform coordinates precision_x = abs(obj.dx) * precision_factor precision_y = abs(obj.dy) * precision_factor else: # Compute average spacing for non-uniform coordinates if len(obj.xcoords) > 1: avg_dx = float(np.mean(np.abs(np.diff(obj.xcoords)))) precision_x = avg_dx * precision_factor else: precision_x = 0 if len(obj.ycoords) > 1: avg_dy = float(np.mean(np.abs(np.diff(obj.ycoords)))) precision_y = avg_dy * precision_factor else: precision_y = 0 # Round X coordinates (even indices) if precision_x > 0: decimals_x = max(0, int(-np.floor(np.log10(precision_x)))) for i in range(0, len(rounded), 2): rounded[i] = round(rounded[i], decimals_x) # Round Y coordinates (odd indices) if precision_y > 0: decimals_y = max(0, int(-np.floor(np.log10(precision_y)))) for i in range(1, len(rounded), 2): rounded[i] = round(rounded[i], decimals_y) return rounded def round_signal_roi_param( obj: SignalObj, param: ROI1DParam, precision_factor: float = 0.1 ) -> None: """Round signal ROI parameter coordinates in-place. Args: obj: signal object param: ROI parameter to round (modified in-place) precision_factor: fraction of sampling period to use as rounding precision """ coords = round_signal_coords(obj, [param.xmin, param.xmax], precision_factor) param.xmin, param.xmax = coords def round_image_roi_param( obj: ImageObj, param: ROI2DParam, precision_factor: float = 0.1 ) -> None: """Round image ROI parameter coordinates in-place. Args: obj: image object param: ROI parameter to round (modified in-place) precision_factor: fraction of pixel spacing to use as rounding precision """ if param.geometry == "rectangle": # Round x0, y0, dx, dy x0, y0, x1, y1 = param.x0, param.y0, param.x0 + param.dx, param.y0 + param.dy coords = round_image_coords(obj, [x0, y0, x1, y1], precision_factor) param.x0, param.y0 = coords[0], coords[1] # Round dx and dy to avoid floating-point errors in subtraction dx_dy_rounded = round_image_coords( obj, [coords[2] - coords[0], coords[3] - coords[1]], precision_factor ) param.dx = dx_dy_rounded[0] param.dy = dx_dy_rounded[1] elif param.geometry == "circle": # Round xc, yc, r coords = round_image_coords(obj, [param.xc, param.yc], precision_factor) param.xc, param.yc = coords # Round radius using X precision r_rounded = round_image_coords(obj, [param.r, 0], precision_factor)[0] param.r = r_rounded elif param.geometry == "polygon": # Round polygon points rounded = round_image_coords(obj, param.points.tolist(), precision_factor) param.points = np.array(rounded) DataLab-1.0.2/datalab/adapters_plotpy/factories.py000066400000000000000000000055321511411446000221370ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Factories ------------------------ """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations def create_adapter_from_object(object_to_adapt): """Create an adapter for the given object to integrate with PlotPy Args: object_to_adapt: The object to adapt (signal, image, ROI, or scalar result) Returns: An adapter instance """ # pylint: disable=import-outside-toplevel # Import adapters as needed to avoid circular imports from sigima.objects import ( CircularROI, ImageObj, ImageROI, PolygonalROI, RectangularROI, SegmentROI, SignalObj, SignalROI, ) from datalab.adapters_metadata import GeometryAdapter, TableAdapter if isinstance(object_to_adapt, GeometryAdapter): from datalab.adapters_plotpy.objects.scalar import GeometryPlotPyAdapter adapter = GeometryPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, TableAdapter): from datalab.adapters_plotpy.objects.scalar import TablePlotPyAdapter adapter = TablePlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, SignalObj): from datalab.adapters_plotpy.objects.signal import SignalObjPlotPyAdapter adapter = SignalObjPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, SignalROI): from datalab.adapters_plotpy.roi.signal import SignalROIPlotPyAdapter adapter = SignalROIPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, SegmentROI): from datalab.adapters_plotpy.roi.signal import SegmentROIPlotPyAdapter adapter = SegmentROIPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, ImageObj): from datalab.adapters_plotpy.objects.image import ImageObjPlotPyAdapter adapter = ImageObjPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, RectangularROI): from datalab.adapters_plotpy.roi.image import RectangularROIPlotPyAdapter adapter = RectangularROIPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, CircularROI): from datalab.adapters_plotpy.roi.image import CircularROIPlotPyAdapter adapter = CircularROIPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, PolygonalROI): from datalab.adapters_plotpy.roi.image import PolygonalROIPlotPyAdapter adapter = PolygonalROIPlotPyAdapter(object_to_adapt) elif isinstance(object_to_adapt, ImageROI): from datalab.adapters_plotpy.roi.image import ImageROIPlotPyAdapter adapter = ImageROIPlotPyAdapter(object_to_adapt) else: raise TypeError(f"Unsupported object type: {type(object_to_adapt)}") return adapter DataLab-1.0.2/datalab/adapters_plotpy/objects/000077500000000000000000000000001511411446000212325ustar00rootroot00000000000000DataLab-1.0.2/datalab/adapters_plotpy/objects/__init__.py000066400000000000000000000000001511411446000233310ustar00rootroot00000000000000DataLab-1.0.2/datalab/adapters_plotpy/objects/base.py000066400000000000000000000150751511411446000225260ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Base Object Module --------------------------------- """ from __future__ import annotations import abc from typing import ( TYPE_CHECKING, Any, Generic, TypeVar, ) from guidata.dataset import update_dataset from plotpy.items import ( AnnotatedShape, ) from sigima.objects.base import ( ROI_KEY, TypeObj, ) from datalab.adapters_metadata import GeometryAdapter from datalab.adapters_plotpy.annotations import PlotPyAnnotationAdapter from datalab.adapters_plotpy.base import ( config_annotated_shape, set_plot_item_editable, ) from datalab.adapters_plotpy.objects.scalar import GeometryPlotPyAdapter from datalab.config import Conf if TYPE_CHECKING: from plotpy.items import CurveItem, MaskedXYImageItem TypePlotItem = TypeVar("TypePlotItem", bound="CurveItem | MaskedXYImageItem") class BaseObjPlotPyAdapter(Generic[TypeObj, TypePlotItem]): """Object (signal/image) plot item adapter class""" DEFAULT_FMT = "s" # This is overriden in children classes CONF_FMT = Conf.view.sig_format # This is overriden in children classes def __init__(self, obj: TypeObj) -> None: """Initialize the adapter with the object. Args: obj: object (signal/image) """ self.obj = obj self.__default_options = { "format": "%" + self.CONF_FMT.get(self.DEFAULT_FMT), "showlabel": Conf.view.show_label.get(False), } self.annotation_adapter = PlotPyAnnotationAdapter(obj) def get_obj_option(self, name: str) -> Any: """Get object option value. Args: name: option name Returns: Option value """ default = self.__default_options[name] return self.obj.get_metadata_option(name, default) @abc.abstractmethod def make_item(self, update_from: TypePlotItem | None = None) -> TypePlotItem: """Make plot item from data. Args: update_from: update Returns: Plot item """ @abc.abstractmethod def update_item(self, item: TypePlotItem, data_changed: bool = True) -> None: """Update plot item from data. Args: item: plot item data_changed: if True, data has changed """ def add_annotations_from_items(self, items: list) -> None: """Add object annotations (annotation plot items). Args: items: annotation plot items """ # Use the new annotation adapter self.annotation_adapter.add_items(items) def set_annotations_from_items(self, items: list) -> None: """Set object annotations (annotation plot items), replacing any existing ones. Args: items: annotation plot items """ # Use the new annotation adapter self.annotation_adapter.set_items(items) @abc.abstractmethod def add_label_with_title(self, title: str | None = None) -> None: """Add label with title annotation Args: title: title (if None, use object title) """ def iterate_shape_items(self, editable: bool = False): """Iterate over shape items encoded in metadata (if any). Args: editable: if True, annotations are editable Yields: Plot item """ fmt = self.get_obj_option("format") lbl = self.get_obj_option("showlabel") for key, _value in self.obj.metadata.items(): if key == ROI_KEY: roi = self.obj.roi if roi is not None: # Delayed import to avoid circular dependency # pylint: disable=import-outside-toplevel from datalab.adapters_plotpy.roi.factory import create_roi_adapter adapter = create_roi_adapter(roi) yield from adapter.iterate_roi_items( self.obj, fmt=fmt, lbl=lbl, editable=False ) # Process geometry results from metadata (using GeometryAdapter) elif GeometryAdapter.match(key, _value): try: geomadapter = GeometryAdapter.from_metadata_entry(self.obj, key) plot_adapter = GeometryPlotPyAdapter(geomadapter) yield from plot_adapter.iterate_shape_items( fmt, lbl, self.obj.PREFIX ) except (ValueError, TypeError): # Skip invalid entries pass # Use the new annotation adapter to get items if self.obj.has_annotations(): for item in self.annotation_adapter.get_items(): if isinstance(item, AnnotatedShape): config_annotated_shape(item, fmt, lbl) set_plot_item_editable(item, editable) yield item def update_plot_item_parameters(self, item: TypePlotItem) -> None: """Update plot item parameters from object data/metadata Takes into account a subset of plot item parameters. Those parameters may have been overriden by object metadata entries or other object data. The goal is to update the plot item accordingly. This is *almost* the inverse operation of `update_metadata_from_plot_item`. Args: item: plot item """ def_dict = Conf.view.get_def_dict(self.__class__.__name__[:3].lower()) self.obj.set_metadata_options_defaults(def_dict, overwrite=False) # Subclasses have to override this method to update plot item parameters, # then call this implementation of the method to update plot item. update_dataset(item.param, self.obj.get_metadata_options()) item.param.update_item(item) if item.selected: item.select() def update_metadata_from_plot_item(self, item: TypePlotItem) -> None: """Update metadata from plot item. Takes into account a subset of plot item parameters. Those parameters may have been modified by the user through the plot item GUI. The goal is to update the metadata accordingly. This is *almost* the inverse operation of `update_plot_item_parameters`. Args: item: plot item """ def_dict = Conf.view.get_def_dict(self.__class__.__name__[:3].lower()) for key in def_dict: if hasattr(item.param, key): # In case the PlotPy version is not up-to-date self.obj.set_metadata_option(key, getattr(item.param, key)) DataLab-1.0.2/datalab/adapters_plotpy/objects/image.py000066400000000000000000000124671511411446000227000ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Image Module --------------------------- """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import numpy as np from guidata.dataset import update_dataset from plotpy.builder import make from plotpy.items import MaskedXYImageItem from sigima.objects import ImageObj from datalab.adapters_plotpy.objects.base import ( BaseObjPlotPyAdapter, ) from datalab.config import Conf def get_obj_coords(obj: ImageObj) -> tuple[np.ndarray, np.ndarray]: """Get object coordinates Args: obj: image object Returns: x and y coordinates (pixel centers, not edges) """ if obj.is_uniform_coords: shape = obj.data.shape # Generate coordinates for pixel centers, not edges # For N pixels: centers are at x0, x0+dx, x0+2*dx, ..., x0+(N-1)*dx xcoords = np.linspace(obj.x0, obj.x0 + obj.dx * (shape[1] - 1), shape[1]) ycoords = np.linspace(obj.y0, obj.y0 + obj.dy * (shape[0] - 1), shape[0]) else: xcoords, ycoords = obj.xcoords, obj.ycoords return xcoords, ycoords class ImageObjPlotPyAdapter(BaseObjPlotPyAdapter[ImageObj, MaskedXYImageItem]): """Image object plot item adapter class""" CONF_FMT = Conf.view.ima_format DEFAULT_FMT = ".1f" def update_plot_item_parameters(self, item: MaskedXYImageItem) -> None: """Update plot item parameters from object data/metadata Takes into account a subset of plot item parameters. Those parameters may have been overriden by object metadata entries or other object data. The goal is to update the plot item accordingly. This is *almost* the inverse operation of `update_metadata_from_plot_item`. Args: item: plot item """ o = self.obj for axis in ("x", "y", "z"): unit = getattr(o, axis + "unit") fmt = r"%.1f" if unit: fmt = r"%.1f (" + unit + ")" setattr(item.param, axis + "format", fmt) item.set_xy(*get_obj_coords(o)) zmin, zmax = item.get_lut_range() if o.zscalemin is not None or o.zscalemax is not None: zmin = zmin if o.zscalemin is None else o.zscalemin zmax = zmax if o.zscalemax is None else o.zscalemax item.set_lut_range([zmin, zmax]) super().update_plot_item_parameters(item) def update_metadata_from_plot_item(self, item: MaskedXYImageItem) -> None: """Update metadata from plot item. Takes into account a subset of plot item parameters. Those parameters may have been modified by the user through the plot item GUI. The goal is to update the metadata accordingly. This is *almost* the inverse operation of `update_plot_item_parameters`. Args: item: plot item """ super().update_metadata_from_plot_item(item) o = self.obj # Updating the LUT range: o.zscalemin, o.zscalemax = item.get_lut_range() def __viewable_data(self) -> np.ndarray: """Return viewable data""" data = self.obj.data.real if np.any(np.isnan(data)): data = np.nan_to_num(data, posinf=0, neginf=0) return data def make_item( self, update_from: MaskedXYImageItem | None = None ) -> MaskedXYImageItem: """Make plot item from data. Args: update_from: update from plot item Returns: Plot item """ data = self.__viewable_data() item = make.maskedxyimage( *get_obj_coords(self.obj), data, self.obj.maskdata, title=self.obj.title, colormap="viridis", eliminate_outliers=Conf.view.ima_eliminate_outliers.get(), interpolation="nearest", show_mask=True, ) if update_from is None: self.update_plot_item_parameters(item) else: update_dataset(item.param, update_from.param) item.param.update_item(item) return item def update_item(self, item: MaskedXYImageItem, data_changed: bool = True) -> None: """Update plot item from data. Args: item: plot item data_changed: if True, data has changed """ if data_changed: # When data changes, let set_data() auto-calculate the LUT range from the # new data (by not passing lut_range parameter). The subsequent call to # update_plot_item_parameters() will override it if zscalemin/zscalemax # are explicitly set in the object's metadata. item.set_data(self.__viewable_data()) item.set_mask(self.obj.maskdata) item.param.label = self.obj.title self.update_plot_item_parameters(item) item.plot().update_colormap_axis(item) def add_label_with_title(self, title: str | None = None) -> None: """Add label with title annotation Args: title: title (if None, use image title) """ title = self.obj.title if title is None else title if title: label = make.label(title, (self.obj.x0, self.obj.y0), (10, 10), "TL") self.add_annotations_from_items([label]) DataLab-1.0.2/datalab/adapters_plotpy/objects/scalar.py000066400000000000000000000473021511411446000230570ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Scalar Module ---------------------------- This module contains adapters for scalar results (GeometryResult, TableResult) to avoid circular imports with the base and factories modules. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from collections.abc import Iterable from typing import TYPE_CHECKING, Literal import guidata.dataset as gds import numpy as np from guidata.configtools import get_font from plotpy.builder import make from plotpy.items import ( AnnotatedCircle, AnnotatedEllipse, AnnotatedPoint, AnnotatedRectangle, AnnotatedSegment, AnnotatedShape, LabelItem, Marker, PolygonShape, ) from sigima.objects.base import BaseObj from sigima.objects.scalar import KindShape from sigima.objects.signal import SignalObj from sigima.tools import coordinates from sigima.tools.signal import pulse from datalab.adapters_metadata import ( GeometryAdapter, TableAdapter, resultadapter_to_html, ) from datalab.adapters_plotpy.base import ( config_annotated_shape, items_to_json, json_to_items, set_plot_item_editable, ) from datalab.config import PLOTPY_CONF, Conf, _ if TYPE_CHECKING: from plotpy.styles import ShapeParam class ResultPlotPyAdapter: """Adapter for converting `sigima` table or geometry adapters to PlotPy Args: result: Table or geometry adapter """ def __init__(self, result_adapter: TableAdapter | GeometryAdapter) -> None: self.result_adapter = result_adapter def get_other_items(self, obj: BaseObj) -> list: # pylint: disable=unused-argument """Return other items associated to this result (excluding label item) Those items are not serialized to JSON. Args: obj: object (signal/image) Returns: List of other items """ return [] class GeometryPlotPyAdapter(ResultPlotPyAdapter): """Adapter for converting `sigima` geometry adapters to PlotPy Args: result: Geometry adapter Raises: AssertionError: invalid argument """ def __init__(self, result_adapter: GeometryAdapter) -> None: assert isinstance(result_adapter, GeometryAdapter) super().__init__(result_adapter) def iterate_shape_items( self, fmt: str, lbl: bool, prefix: Literal["s", "i"] ) -> Iterable: """Iterate over metadata shape plot items. Args: fmt: numeric format (e.g. "%.3f") lbl: if True, show shape labels prefix: "s" for signal, "i" for image Yields: Plot item """ max_shapes = Conf.view.max_shapes_to_draw.get(200) total_coords = len(self.result_adapter.result.coords) # Yield shapes up to the maximum limit for idx, coords in enumerate(self.result_adapter.result.coords): if idx >= max_shapes: break yield self.create_shape_item(coords, fmt, lbl, prefix) # If shapes were truncated, create a warning label if total_coords > max_shapes: warning_text = "⚠ " + _("Only %d out of %d shapes are displayed") % ( max_shapes, total_coords, ) warning_label = make.label(warning_text, "BR", (0, 0), "BR") warning_label.labelparam.font.bold = True warning_label.labelparam.font.size = 10 warning_label.labelparam.bgalpha = 0.8 warning_label.labelparam.bgcolor = "#ff9800" # Orange background warning_label.labelparam.textcolor = "#000000" # Black text warning_label.labelparam.update_item(warning_label) warning_label.set_readonly(True) yield warning_label def create_shape_item( self, coords: np.ndarray, fmt: str, lbl: bool, prefix: Literal["s", "i"] ) -> ( AnnotatedPoint | Marker | AnnotatedRectangle | AnnotatedCircle | AnnotatedSegment | AnnotatedEllipse | PolygonShape | None ): """Create individual shape item from coordinates Args: coords: coordinate array fmt: numeric format (e.g. "%.3f") lbl: if True, show shape labels prefix: "s" for signal, "i" for image Returns: Plot item """ if self.result_adapter.result.kind == KindShape.POINT: assert len(coords) == 2, "Coordinates must be a 2-element array" x0, y0 = coords item = AnnotatedPoint(x0, y0) sparam: ShapeParam = item.shape.shapeparam sparam.symbol.marker = "Ellipse" sparam.symbol.size = 6 sparam.sel_symbol.marker = "Ellipse" sparam.sel_symbol.size = 6 aparam = item.annotationparam aparam.title = self.result_adapter.title sparam.update_item(item.shape) aparam.update_item(item) elif self.result_adapter.result.kind == KindShape.MARKER: assert len(coords) == 2, "Coordinates must be a 2-element array" x0, y0 = coords item = self.__make_marker_item(x0, y0, fmt) elif self.result_adapter.result.kind == KindShape.RECTANGLE: assert len(coords) == 4, "Coordinates must be a 4-element array" x0, y0, dx, dy = coords item = make.annotated_rectangle( x0, y0, x0 + dx, y0 + dy, title=self.result_adapter.title ) elif self.result_adapter.result.kind == KindShape.CIRCLE: assert len(coords) == 3, "Coordinates must be a 3-element array" xc, yc, r = coords x0, y0, x1, y1 = coordinates.circle_to_diameter(xc, yc, r) item = make.annotated_circle( x0, y0, x1, y1, title=self.result_adapter.title ) elif self.result_adapter.result.kind == KindShape.SEGMENT: assert len(coords) == 4, "Coordinates must be a 4-element array" x0, y0, x1, y1 = coords item = make.annotated_segment( x0, y0, x1, y1, title=self.result_adapter.title ) elif self.result_adapter.result.kind == KindShape.ELLIPSE: assert len(coords) == 5, "Coordinates must be a 5-element array" xc, yc, a, b, t = coords coords = coordinates.ellipse_to_diameters(xc, yc, a, b, t) x0, y0, x1, y1, x2, y2, x3, y3 = coords item = make.annotated_ellipse( x0, y0, x1, y1, x2, y2, x3, y3, title=self.result_adapter.title ) elif self.result_adapter.result.kind == KindShape.POLYGON: assert len(coords) >= 6, "Coordinates must be at least 6-element array" assert len(coords) % 2 == 0, "Coordinates must be even-length array" x, y = coords[::2], coords[1::2] # Filter out NaN coordinates to avoid performance issues # Polygons are padded with NaNs to create regular arrays, but we only # need to draw the valid coordinates valid_mask = ~(np.isnan(x) | np.isnan(y)) x, y = x[valid_mask], y[valid_mask] item = make.polygon(x, y, title=self.result_adapter.title, closed=False) else: raise NotImplementedError( f"Unsupported shape kind: {self.result_adapter.result.kind}" ) if isinstance(item, AnnotatedShape): config_annotated_shape(item, fmt, lbl, "results", f"{prefix}/annotation") # Apply settings for annotated shapes (except AnnotatedPoint) if not isinstance(item, AnnotatedPoint): if prefix == "s": config_param = Conf.view.sig_shape_param.get() else: config_param = Conf.view.ima_shape_param.get() shape_param: ShapeParam = item.shape.shapeparam gds.update_dataset(shape_param, config_param) shape_param.update_item(item.shape) if isinstance(item, Marker): item.set_style("results", f"{prefix}/marker") # Apply cursor/marker settings from config if prefix == "s": config_param = Conf.view.sig_marker_param.get() else: config_param = Conf.view.ima_marker_param.get() param = item.markerparam gds.update_dataset(param, config_param) param.update_item(item) set_plot_item_editable(item, False) return item def __make_marker_item(self, x0: float, y0: float, fmt: str) -> Marker: """Make marker item Args: x0: x coordinate y0: y coordinate fmt: numeric format (e.g. '%.3f') """ if np.isnan(x0): mstyle = "-" def label(x, y): # pylint: disable=unused-argument return (self.result_adapter.title + ": " + fmt) % y elif np.isnan(y0): mstyle = "|" def label(x, y): # pylint: disable=unused-argument return (self.result_adapter.title + ": " + fmt) % x else: mstyle = "+" txt = self.result_adapter.title + ": (" + fmt + ", " + fmt + ")" def label(x, y): return txt % (x, y) marker = make.marker(position=(x0, y0), markerstyle=mstyle, label_cb=label) return marker def create_pulse_segment( x0: float, y0: float, x1: float, y1: float, label: str ) -> AnnotatedSegment: """Create a signal segment item for pulse visualization. Args: x0: X-coordinate of the start point y0: Y-coordinate of the start point x1: X-coordinate of the end point y1: Y-coordinate of the end point label: Label for the segment Returns: Annotated segment item styled for pulse visualization """ item = make.annotated_segment(x0, y0, x1, y1, label, show_computations=False) # Configure label appearance similar to Sigima's vistools item.label.labelparam.bgalpha = 0.5 item.label.labelparam.anchor = "T" item.label.labelparam.yc = 10 item.label.labelparam.update_item(item.label) # Configure segment appearance param = item.shape.shapeparam param.line.color = "#33ff00" # Green color for baselines/plateaus param.line.width = 5 param.symbol.facecolor = "#26be00" param.symbol.edgecolor = "#33ff00" param.symbol.marker = "Ellipse" param.symbol.size = 11 param.update_item(item.shape) # Make non-interactive item.set_movable(False) item.set_resizable(False) item.set_selectable(False) return item def create_pulse_crossing_marker( orientation: Literal["h", "v"], position: float, label: str ) -> Marker: """Create a crossing marker for pulse visualization. Args: orientation: 'h' for horizontal, 'v' for vertical cursor position: Position of the cursor along the relevant axis label: Label for the cursor Returns: Marker item styled for crossing visualization """ if orientation == "h": cursor = make.hcursor(position, label=label) elif orientation == "v": cursor = make.vcursor(position, label=label) else: raise ValueError("Orientation must be 'h' or 'v'") # Configure appearance similar to Sigima's vistools cursor.set_movable(False) cursor.set_selectable(False) cursor.markerparam.line.color = "#a7ff33" # Light green cursor.markerparam.line.width = 3 cursor.markerparam.symbol.marker = "NoSymbol" cursor.markerparam.text.textcolor = "#ffffff" cursor.markerparam.text.background_color = "#000000" cursor.markerparam.text.background_alpha = 0.5 cursor.markerparam.text.font.bold = True cursor.markerparam.update_item(cursor) return cursor def are_values_valid(values: list[float | None]) -> bool: """Check if all values are valid (not None or nan) Args: values: list of values Returns: True if all values are valid, False otherwise """ for v in values: if v is None or (isinstance(v, float) and np.isnan(v)): return False return True class TablePlotPyAdapter(ResultPlotPyAdapter): """Adapter for converting `sigima` table adapters to PlotPy Args: result: Table adapter Raises: AssertionError: invalid argument """ def __init__(self, result_adapter: TableAdapter) -> None: assert isinstance(result_adapter, TableAdapter) super().__init__(result_adapter) def get_other_items(self, obj: BaseObj) -> list: """Return other items associated to this result (excluding label item) Those items are not serialized to JSON. Args: obj: object (signal/image) Returns: List of other items """ items = [] if self.result_adapter.result.is_pulse_features(): pulse_items = self.create_pulse_visualization_items(obj) items.extend(pulse_items) return items def create_pulse_visualization_items( self, obj: SignalObj ) -> list[AnnotatedSegment | Marker]: """Create pulse visualization items from table data. Args: obj: Signal object containing the pulse data Returns: List of PlotPy items for pulse visualization """ items = [] df = self.result_adapter.to_dataframe() for _index, row in df.iterrows(): # Start baseline xs0, xs1 = row["xstartmin"], row["xstartmax"] ys = pulse.get_range_mean_y(obj.x, obj.y, (xs0, xs1)) if are_values_valid([xs0, xs1, ys]): items.append(create_pulse_segment(xs0, ys, xs1, ys, "Start baseline")) # End baseline xe0, xe1 = row["xendmin"], row["xendmax"] ye = pulse.get_range_mean_y(obj.x, obj.y, (xe0, xe1)) if are_values_valid([xe0, xe1, ye]): items.append(create_pulse_segment(xe0, ye, xe1, ye, "End baseline")) if "xplateaumin" in row and "xplateaumax" in row: xp0, xp1 = row["xplateaumin"], row["xplateaumax"] yp = pulse.get_range_mean_y(obj.x, obj.y, (xp0, xp1)) if are_values_valid([xp0, xp1, yp]): items.append(create_pulse_segment(xp0, yp, xp1, yp, "Plateau")) for metric in ("x0", "x50", "x100"): if metric in row: x = row[metric] metric_str = metric.replace("x", "x|") + "%" if are_values_valid([x]): items.append(create_pulse_crossing_marker("v", x, metric_str)) return items class MergedResultPlotPyAdapter: """Adapter for merging multiple result adapters into a single label. This adapter manages a merged label that displays all results for a given object. Instead of creating individual labels for each result (which causes overlapping), it creates a single label with all results concatenated as HTML. Args: result_adapters: List of result adapters (GeometryAdapter or TableAdapter) obj: Signal or image object associated with the results """ def __init__( self, result_adapters: list[GeometryAdapter | TableAdapter], obj: BaseObj, ) -> None: self.result_adapters = result_adapters self.obj = obj self._cached_label: LabelItem | None = None def get_cached_label(self) -> LabelItem | None: """Get the cached merged label item, if it exists. Returns: Merged label item, or None if not cached """ return self._cached_label def invalidate_cached_label(self) -> None: """Invalidate the cached merged label item.""" self._cached_label = None @property def item_json(self) -> str | None: """JSON representation of the merged label item. The position is stored in all result adapters so they stay in sync. """ if self.result_adapters: return self.result_adapters[0].get_applicative_attr("item_json") return None @item_json.setter def item_json(self, value: str | None) -> None: """Set JSON representation of the merged label item. The position is stored in all result adapters to keep them synchronized. """ for result_adapter in self.result_adapters: result_adapter.set_applicative_attr("item_json", value) def create_merged_label(self) -> LabelItem | None: """Create a single merged label from all result adapters. Returns: Merged label item, or None if no results """ if not self.result_adapters: return None # Create the label with merged content merged_html = resultadapter_to_html(self.result_adapters, self.obj) item = make.label(merged_html, "TL", (0, 0), "TL", title="Results") font = get_font(PLOTPY_CONF, "results", "label/font") item.set_style("results", "label") item.labelparam.font.update_param(font) item.labelparam.update_item(item) # Make label read-only (user cannot delete it to remove individual results) item.set_readonly(True) self._cached_label = item return item def get_merged_label(self) -> LabelItem | None: """Get the merged label, creating it if necessary or updating if it exists. Returns: Merged label item, or None if no results """ if not self.result_adapters: self._cached_label = None return None # Try to restore existing label from stored JSON position if self.item_json and self._cached_label is None: stored_item = json_to_items(self.item_json)[0] if isinstance(stored_item, LabelItem): # Update the stored item with current merged content merged_html = resultadapter_to_html(self.result_adapters, self.obj) stored_item.set_text(merged_html) stored_item.set_readonly(True) self._cached_label = stored_item return stored_item # Update existing cached label if present if self._cached_label is not None: merged_html = resultadapter_to_html(self.result_adapters, self.obj) self._cached_label.set_text(merged_html) return self._cached_label # Create new label return self.create_merged_label() def update_obj_metadata_from_item(self, item: LabelItem) -> None: """Update all result adapters' metadata with the label item position. Args: item: Merged label item (after user moved it) """ if item is not None: self.item_json = items_to_json([item]) # Update all result adapters in the object's metadata for result_adapter in self.result_adapters: result_adapter.add_to(self.obj) def get_other_items(self) -> list: """Return other items from all result adapters (e.g., geometric shapes). Returns: List of all other items from all result adapters """ items = [] for result_adapter in self.result_adapters: if isinstance(result_adapter, GeometryAdapter): plotpy_adapter = GeometryPlotPyAdapter(result_adapter) elif isinstance(result_adapter, TableAdapter): plotpy_adapter = TablePlotPyAdapter(result_adapter) else: raise NotImplementedError( f"Unsupported result adapter type: {type(result_adapter)}" ) items.extend(plotpy_adapter.get_other_items(self.obj)) return items DataLab-1.0.2/datalab/adapters_plotpy/objects/signal.py000066400000000000000000000223401511411446000230620ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Signal Module ---------------------------- """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from contextlib import contextmanager from typing import Generator import numpy as np from guidata.dataset import restore_dataset, update_dataset from plotpy.builder import make from plotpy.items import CurveItem from sigima.objects import SignalObj from datalab.adapters_plotpy.objects.base import ( BaseObjPlotPyAdapter, ) from datalab.config import Conf class CurveStyles: """Object to manage curve styles""" #: Curve colors COLORS = ( "#1f77b4", # muted blue "#ff7f0e", # safety orange "#2ca02c", # cooked asparagus green "#d62728", # brick red "#9467bd", # muted purple "#8c564b", # chestnut brown "#e377c2", # raspberry yogurt pink "#7f7f7f", # gray "#bcbd22", # curry yellow-green "#17becf", # blue-teal ) #: Curve line styles LINESTYLES = ("SolidLine", "DashLine", "DashDotLine", "DashDotDotLine") def __init__(self) -> None: self.__suspend = False self.curve_style = self.style_generator() @staticmethod def style_generator() -> Generator[tuple[str, str], None, None]: """Cycling through curve styles""" while True: for linestyle in CurveStyles.LINESTYLES: for color in CurveStyles.COLORS: yield (color, linestyle) def apply_style(self, item: CurveItem) -> None: """Apply style to curve Args: item: curve item """ if self.__suspend: # Suspend mode: always apply the first style color, linestyle = CurveStyles.COLORS[0], CurveStyles.LINESTYLES[0] else: color, linestyle = next(self.curve_style) item.param.line.color = color item.param.line.style = linestyle item.param.symbol.marker = "NoSymbol" # Note: line width is set separately via apply_line_width() # to ensure it's always recalculated based on current data size and settings def reset_styles(self) -> None: """Reset styles""" self.curve_style = self.style_generator() @contextmanager def alternative( self, other_style_generator: Generator[tuple[str, str], None, None] ) -> Generator[None, None, None]: """Use an alternative style generator""" old_style_generator = self.curve_style self.curve_style = other_style_generator yield self.curve_style = old_style_generator @contextmanager def suspend(self) -> Generator[None, None, None]: """Suspend style generator""" self.__suspend = True yield self.__suspend = False CURVESTYLES = CurveStyles() # This is the unique instance of the CurveStyles class def apply_line_width(item: CurveItem) -> None: """Apply line width to curve item with smart clamping for large datasets Args: item: curve item """ # Get data size data_size = item.get_data()[0].size # Get configured line width line_width = Conf.view.sig_linewidth.get() # For large datasets, clamp linewidth to 1.0 for performance # (thick lines cause ~10x rendering slowdown due to Qt raster engine) threshold = Conf.view.sig_linewidth_perfs_threshold.get() if data_size > threshold and line_width > 1.0: line_width = 1.0 # Apply the line width item.param.line.width = line_width def apply_downsampling(item: CurveItem, do_not_update: bool = False) -> None: """Apply downsampling to curve item Args: item: curve item do_not_update: if True, do not update the item even if the downsampling parameters have changed """ old_use_dsamp = item.param.use_dsamp item.param.use_dsamp = False if Conf.view.sig_autodownsampling.get(): nbpoints = item.get_data()[0].size maxpoints = Conf.view.sig_autodownsampling_maxpoints.get() if nbpoints > 5 * maxpoints: item.param.use_dsamp = True item.param.dsamp_factor = nbpoints // maxpoints if not do_not_update and old_use_dsamp != item.param.use_dsamp: item.update_data() class SignalObjPlotPyAdapter(BaseObjPlotPyAdapter[SignalObj, CurveItem]): """Signal object plot item adapter class""" CONF_FMT = Conf.view.sig_format DEFAULT_FMT = "g" def update_plot_item_parameters(self, item: CurveItem) -> None: """Update plot item parameters from object data/metadata Takes into account a subset of plot item parameters. Those parameters may have been overriden by object metadata entries or other object data. The goal is to update the plot item accordingly. This is *almost* the inverse operation of `update_metadata_from_plot_item`. Args: item: plot item """ update_dataset(item.param.line, self.obj.metadata) update_dataset(item.param.symbol, self.obj.metadata) super().update_plot_item_parameters(item) def update_metadata_from_plot_item(self, item: CurveItem) -> None: """Update metadata from plot item. Takes into account a subset of plot item parameters. Those parameters may have been modified by the user through the plot item GUI. The goal is to update the metadata accordingly. This is *almost* the inverse operation of `update_plot_item_parameters`. Args: item: plot item """ super().update_metadata_from_plot_item(item) restore_dataset(item.param.line, self.obj.metadata) restore_dataset(item.param.symbol, self.obj.metadata) def make_item(self, update_from: CurveItem | None = None) -> CurveItem: """Make plot item from data. Args: update_from: plot item to update from Returns: Plot item """ o = self.obj if len(o.xydata) in (2, 4): assert isinstance(o.xydata, np.ndarray) if len(o.xydata) == 2: # x, y signal x, y = o.xydata item = make.mcurve(x.real, y.real, label=o.title) else: # x, y, dx, dy error bar signal x, y, dx, dy = o.xydata if o.dx is None and o.dy is None: # x, y signal with no error item = make.mcurve(x.real, y.real, label=o.title) elif o.dx is None: # x, y, dy error bar signal with y error item = make.merror(x.real, y.real, dy.real, label=o.title) else: # x, y, dx, dy error bar signal with x error dy = np.zeros_like(y) if dy is None else dy item = make.merror(x.real, y.real, dx.real, dy.real, label=o.title) # Apply style (without linewidth, will be set separately) CURVESTYLES.apply_style(item) apply_downsampling(item, do_not_update=True) # Apply linewidth with smart clamping based on actual data size apply_line_width(item) else: raise RuntimeError("data not supported") if update_from is None: self.update_plot_item_parameters(item) else: update_dataset(item.param, update_from.param) item.update_params() return item def update_item(self, item: CurveItem, data_changed: bool = True) -> None: """Update plot item from data. Args: item: plot item data_changed: if True, data has changed """ o = self.obj if data_changed: assert isinstance(o.xydata, np.ndarray) if len(o.xydata) == 2: # x, y signal x, y = o.xydata assert isinstance(x, np.ndarray) and isinstance(y, np.ndarray) item.set_data(x.real, y.real) elif len(o.xydata) == 3: # x, y, dy error bar signal x, y, dy = o.xydata assert ( isinstance(x, np.ndarray) and isinstance(y, np.ndarray) and isinstance(dy, np.ndarray) ) item.set_data(x.real, y.real, dy=dy.real) elif len(o.xydata) == 4: # x, y, dx, dy error bar signal x, y, dx, dy = o.xydata assert ( isinstance(x, np.ndarray) and isinstance(y, np.ndarray) and isinstance(dx, np.ndarray) and isinstance(dy, np.ndarray) ) item.set_data(x.real, y.real, dx.real, dy.real) item.param.label = o.title apply_downsampling(item) # Reapply linewidth with smart clamping (data size may have changed) apply_line_width(item) self.update_plot_item_parameters(item) def add_label_with_title(self, title: str | None = None) -> None: """Add label with title annotation Args: title: title (if None, use signal title) """ title = self.obj.title if title is None else title if title: label = make.label(title, "TL", (0, 0), "TL") self.add_annotations_from_items([label]) DataLab-1.0.2/datalab/adapters_plotpy/roi/000077500000000000000000000000001511411446000203725ustar00rootroot00000000000000DataLab-1.0.2/datalab/adapters_plotpy/roi/__init__.py000066400000000000000000000000001511411446000224710ustar00rootroot00000000000000DataLab-1.0.2/datalab/adapters_plotpy/roi/base.py000066400000000000000000000074061511411446000216650ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Base ROI Module ------------------------------ """ import abc from typing import TYPE_CHECKING, Generic, Iterator, Literal, TypeVar from plotpy.items import AnnotatedShape from sigima.objects.base import ( BaseROI, TypeObj, TypeROI, TypeROIParam, TypeSingleROI, get_generic_roi_title, ) from datalab.adapters_plotpy.base import config_annotated_shape if TYPE_CHECKING: from plotpy.items import ( AnnotatedCircle, AnnotatedPolygon, AnnotatedRectangle, AnnotatedXRange, ) TypeROIItem = TypeVar( "TypeROIItem", bound="AnnotatedXRange | AnnotatedPolygon | AnnotatedRectangle | AnnotatedCircle", ) class BaseSingleROIPlotPyAdapter(Generic[TypeSingleROI, TypeROIItem], abc.ABC): """Base class for single ROI plot item adapter Args: single_roi: single ROI object """ def __init__(self, single_roi: TypeSingleROI) -> None: self.single_roi = single_roi @abc.abstractmethod def to_plot_item(self, obj: TypeObj) -> TypeROIItem: """Make ROI plot item from ROI. Args: obj: object (signal/image), for physical-indices coordinates conversion Returns: Plot item """ @classmethod @abc.abstractmethod def from_plot_item(cls, item: TypeROIItem) -> TypeSingleROI: """Create single ROI from plot item Args: item: plot item Returns: Single ROI """ def configure_roi_item( item: TypeROIItem, fmt: str, lbl: bool, editable: bool, option: Literal["s", "i"], ): """Configure ROI plot item. Args: item: plot item fmt: numeric format (e.g. "%.3f") lbl: if True, show shape labels editable: if True, make shape editable option: shape style option ("s" for signal, "i" for image) Returns: Plot item """ option += "/" + ("editable" if editable else "readonly") if not editable: if isinstance(item, AnnotatedShape): config_annotated_shape( item, fmt, lbl, "roi", option, show_computations=editable ) item.set_movable(False) item.set_resizable(False) item.set_readonly(True) item.set_style("roi", option) return item class BaseROIPlotPyAdapter(Generic[TypeROI], abc.ABC): """ROI plot item adapter class Args: roi: ROI object """ def __init__(self, roi: BaseROI[TypeObj, TypeSingleROI, TypeROIParam]) -> None: self.roi = roi @abc.abstractmethod def to_plot_item(self, single_roi: TypeSingleROI, obj: TypeObj) -> TypeROIItem: """Make ROI plot item from single ROI Args: single_roi: single ROI object obj: object (signal/image), for physical-indices coordinates conversion Returns: Plot item """ def iterate_roi_items( self, obj: TypeObj, fmt: str, lbl: bool, editable: bool = True ) -> Iterator[TypeROIItem]: """Iterate over ROI plot items associated to each single ROI composing the object. Args: obj: object (signal/image), for physical-indices coordinates conversion fmt: format string lbl: if True, add label editable: if True, ROI is editable Yields: Plot item """ for index, single_roi in enumerate(self.roi.single_rois): roi_item = self.to_plot_item(single_roi, obj) item = configure_roi_item( roi_item, fmt, lbl, editable, option=self.roi.PREFIX ) item.setTitle(single_roi.title or get_generic_roi_title(index)) yield item DataLab-1.0.2/datalab/adapters_plotpy/roi/factory.py000066400000000000000000000053771511411446000224270ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ ROI Adapter Factory ------------------- Factory functions for creating ROI adapters without circular imports. """ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from sigima.objects.base import TypeObj def create_roi_adapter(roi): """Create ROI adapter from ROI object Args: roi: ROI object Returns: ROI adapter instance """ # pylint: disable=import-outside-toplevel from sigima.objects import ( CircularROI, ImageROI, PolygonalROI, RectangularROI, SegmentROI, SignalROI, ) if isinstance(roi, SignalROI): from datalab.adapters_plotpy.roi.signal import SignalROIPlotPyAdapter return SignalROIPlotPyAdapter(roi) if isinstance(roi, RectangularROI): from datalab.adapters_plotpy.roi.image import RectangularROIPlotPyAdapter return RectangularROIPlotPyAdapter(roi) if isinstance(roi, CircularROI): from datalab.adapters_plotpy.roi.image import CircularROIPlotPyAdapter return CircularROIPlotPyAdapter(roi) if isinstance(roi, PolygonalROI): from datalab.adapters_plotpy.roi.image import PolygonalROIPlotPyAdapter return PolygonalROIPlotPyAdapter(roi) if isinstance(roi, ImageROI): from datalab.adapters_plotpy.roi.image import ImageROIPlotPyAdapter return ImageROIPlotPyAdapter(roi) if isinstance(roi, SegmentROI): from datalab.adapters_plotpy.roi.signal import SegmentROIPlotPyAdapter return SegmentROIPlotPyAdapter(roi) raise TypeError(f"Unsupported ROI type: {type(roi)}") def create_single_roi_plot_item(single_roi, obj: TypeObj): """Create plot item from single ROI Args: single_roi: single ROI object obj: object (signal/image), for physical-indices coordinates conversion Returns: Plot item """ # pylint: disable=import-outside-toplevel from sigima.objects import ( CircularROI, PolygonalROI, RectangularROI, ) if isinstance(single_roi, RectangularROI): from datalab.adapters_plotpy.roi.image import RectangularROIPlotPyAdapter return RectangularROIPlotPyAdapter(single_roi).to_plot_item(obj) if isinstance(single_roi, CircularROI): from datalab.adapters_plotpy.roi.image import CircularROIPlotPyAdapter return CircularROIPlotPyAdapter(single_roi).to_plot_item(obj) if isinstance(single_roi, PolygonalROI): from datalab.adapters_plotpy.roi.image import PolygonalROIPlotPyAdapter return PolygonalROIPlotPyAdapter(single_roi).to_plot_item(obj) raise TypeError(f"Unsupported ROI type: {type(single_roi)}") DataLab-1.0.2/datalab/adapters_plotpy/roi/image.py000066400000000000000000000175611511411446000220400ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Image ROI Module ------------------------------- """ from __future__ import annotations import numpy as np from plotpy.builder import make from plotpy.items import AnnotatedCircle, AnnotatedPolygon, AnnotatedRectangle from sigima.objects import CircularROI, ImageObj, ImageROI, PolygonalROI, RectangularROI from sigima.tools import coordinates from datalab.adapters_plotpy.coordutils import round_image_coords from datalab.adapters_plotpy.roi.base import ( BaseROIPlotPyAdapter, BaseSingleROIPlotPyAdapter, ) def _vs(var: str, sub: str = "") -> str: """Return variable name with subscript""" txt = f"{var}" if sub: txt += f"{sub}" return txt class PolygonalROIPlotPyAdapter( BaseSingleROIPlotPyAdapter[PolygonalROI, AnnotatedPolygon] ): """Polygonal ROI plot item adapter Args: single_roi: single ROI object """ def to_plot_item(self, obj: ImageObj) -> AnnotatedPolygon: """Make and return the annnotated polygon associated to ROI Args: obj: object (image), for physical-indices coordinates conversion """ def info_callback(item: AnnotatedPolygon) -> str: """Return info string for circular ROI""" xc, yc = item.get_center() if self.single_roi.indices: xc, yc = obj.physical_to_indices([xc, yc]) return "
".join( [ f"({_vs('x', 'c')}, {_vs('y', 'c')}) = ({xc:g}, {yc:g})", ] ) coords = np.array(self.single_roi.get_physical_coords(obj)) points = coords.reshape(-1, 2) item = AnnotatedPolygon(points) item.set_info_callback(info_callback) item.annotationparam.title = self.single_roi.title item.annotationparam.update_item(item) item.set_style("plot", "shape/drag") return item @classmethod def from_plot_item( cls, item: AnnotatedPolygon, obj: ImageObj | None = None ) -> PolygonalROI: """Create ROI from plot item Args: item: plot item obj: image object for coordinate rounding (optional) """ coords = item.get_points().flatten().tolist() # Round coordinates to appropriate precision if obj is not None: coords = round_image_coords(obj, coords) title = str(item.title().text()) return PolygonalROI(coords, False, title) class RectangularROIPlotPyAdapter( BaseSingleROIPlotPyAdapter[RectangularROI, AnnotatedRectangle] ): """Rectangular ROI plot item adapter Args: single_roi: single ROI object """ def to_plot_item(self, obj: ImageObj) -> AnnotatedRectangle: """Make and return the annnotated rectangle associated to ROI Args: obj: object (image), for physical-indices coordinates conversion """ def info_callback(item: AnnotatedRectangle) -> str: """Return info string for rectangular ROI""" x0, y0, x1, y1 = item.get_rect() if self.single_roi.indices: x0, y0, x1, y1 = obj.physical_to_indices([x0, y0, x1, y1]) x0, y0, dx, dy = self.single_roi.rect_to_coords(x0, y0, x1, y1) return "
".join( [ f"({_vs('x', '0')}, {_vs('y', '0')}) = ({x0:g}, {y0:g})", f"{_vs('Δx')} × {_vs('Δy')} = {dx:g} × {dy:g}", ] ) x0, y0, dx, dy = self.single_roi.get_physical_coords(obj) x1, y1 = x0 + dx, y0 + dy item: AnnotatedRectangle = make.annotated_rectangle( x0, y0, x1, y1, title=self.single_roi.title ) item.set_info_callback(info_callback) param = item.label.labelparam param.anchor = "BL" param.xc, param.yc = 5, -5 param.update_item(item.label) return item @classmethod def from_plot_item( cls, item: AnnotatedRectangle, obj: ImageObj | None = None ) -> RectangularROI: """Create ROI from plot item Args: item: plot item obj: image object for coordinate rounding (optional) """ rect = item.get_rect() coords = RectangularROI.rect_to_coords(*rect) # Round coordinates to appropriate precision if obj is not None: coords = round_image_coords(obj, coords) title = str(item.title().text()) return RectangularROI(coords, False, title) class CircularROIPlotPyAdapter( BaseSingleROIPlotPyAdapter[CircularROI, AnnotatedCircle] ): """Circular ROI plot item adapter Args: single_roi: single ROI object """ def to_plot_item(self, obj: ImageObj) -> AnnotatedCircle: """Make and return the annnotated circle associated to ROI Args: obj: object (image), for physical-indices coordinates conversion """ def info_callback(item: AnnotatedCircle) -> str: """Return info string for circular ROI""" x0, y0, x1, y1 = item.get_rect() if self.single_roi.indices: x0, y0, x1, y1 = obj.physical_to_indices([x0, y0, x1, y1]) xc, yc, r = self.single_roi.rect_to_coords(x0, y0, x1, y1) return "
".join( [ f"({_vs('x', 'c')}, {_vs('y', 'c')}) = ({xc:g}, {yc:g})", f"{_vs('r')} = {r:g}", ] ) xc, yc, r = self.single_roi.get_physical_coords(obj) x0, y0, x1, y1 = coordinates.circle_to_diameter(xc, yc, r) item = AnnotatedCircle(x0, y0, x1, y1) item.set_info_callback(info_callback) item.annotationparam.title = self.single_roi.title item.annotationparam.update_item(item) item.set_style("plot", "shape/drag") return item @classmethod def from_plot_item( cls, item: AnnotatedCircle, obj: ImageObj | None = None ) -> CircularROI: """Create ROI from plot item Args: item: plot item obj: image object for coordinate rounding (optional) """ rect = item.get_rect() coords = CircularROI.rect_to_coords(*rect) # Round coordinates to appropriate precision # For circular ROI: [xc, yc, r] - round center (xc, yc) as pair, then radius if obj is not None: xc, yc, r = coords # Round center coordinates xc_rounded, yc_rounded = round_image_coords(obj, [xc, yc]) # Round radius using average of X and Y precision # For radius, we use the X precision (could also average X and Y) r_rounded = round_image_coords(obj, [r, 0])[0] coords = [xc_rounded, yc_rounded, r_rounded] title = str(item.title().text()) return CircularROI(coords, False, title) class ImageROIPlotPyAdapter(BaseROIPlotPyAdapter[ImageROI]): """Image ROI plot item adapter class Args: roi: ROI object """ def to_plot_item( self, single_roi: PolygonalROI | RectangularROI | CircularROI, obj: ImageObj, ) -> AnnotatedCircle | AnnotatedRectangle | AnnotatedPolygon: """Make ROI plot item from single ROI Args: single_roi: single ROI object obj: object (signal/image), for physical-indices coordinates conversion Returns: Plot item """ if isinstance(single_roi, PolygonalROI): return PolygonalROIPlotPyAdapter(single_roi).to_plot_item(obj) if isinstance(single_roi, RectangularROI): return RectangularROIPlotPyAdapter(single_roi).to_plot_item(obj) if isinstance(single_roi, CircularROI): return CircularROIPlotPyAdapter(single_roi).to_plot_item(obj) raise TypeError(f"Invalid ROI type {type(single_roi)}") DataLab-1.0.2/datalab/adapters_plotpy/roi/signal.py000066400000000000000000000044701511411446000222260ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ PlotPy Adapter Signal ROI Module -------------------------------- """ from __future__ import annotations from plotpy.builder import make from plotpy.items import AnnotatedXRange from sigima.objects import SegmentROI, SignalObj, SignalROI from datalab.adapters_plotpy.coordutils import round_signal_coords from datalab.adapters_plotpy.roi.base import ( BaseROIPlotPyAdapter, BaseSingleROIPlotPyAdapter, ) class SegmentROIPlotPyAdapter(BaseSingleROIPlotPyAdapter[SegmentROI, AnnotatedXRange]): """Segment ROI plot item adapter Args: coords: ROI coordinates (xmin, xmax) title: ROI title """ def to_plot_item(self, obj: SignalObj) -> AnnotatedXRange: """Make and return the annnotated segment associated with the ROI Args: obj: object (signal), for physical-indices coordinates conversion """ xmin, xmax = self.single_roi.get_physical_coords(obj) item = make.annotated_xrange(xmin, xmax, title=self.single_roi.title) return item @classmethod def from_plot_item( cls, item: AnnotatedXRange, obj: SignalObj | None = None ) -> SegmentROI: """Create ROI from plot item Args: item: plot item obj: signal object for coordinate rounding (optional) Returns: ROI """ if not isinstance(item, AnnotatedXRange): raise TypeError("Invalid plot item type") coords = sorted(item.get_range()) # Round coordinates to appropriate precision if obj is not None: coords = round_signal_coords(obj, coords) title = str(item.title().text()) return SegmentROI(coords, False, title) class SignalROIPlotPyAdapter(BaseROIPlotPyAdapter[SignalROI]): """Signal ROI plot item adapter class Args: roi: ROI object """ def to_plot_item(self, single_roi: SegmentROI, obj: SignalObj) -> AnnotatedXRange: """Make ROI plot item from single ROI Args: single_roi: single ROI object obj: object (signal/image), for physical-indices coordinates conversion Returns: Plot item """ return SegmentROIPlotPyAdapter(single_roi).to_plot_item(obj) DataLab-1.0.2/datalab/app.py000066400000000000000000000055321511411446000155260ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab launcher module """ from __future__ import annotations from typing import TYPE_CHECKING from guidata.configtools import get_image_file_path from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from datalab.config import Conf from datalab.env import execenv from datalab.gui.main import DLMainWindow from datalab.utils.qthelpers import datalab_app_context if TYPE_CHECKING: from sigima.objects import ImageObj, SignalObj def create( splash: bool = True, console: bool | None = None, objects: list[ImageObj | SignalObj] | None = None, h5files: list[str] | None = None, size: tuple[int, int] | None = None, ) -> DLMainWindow: """Create DataLab application and return mainwindow instance Args: splash: if True, show splash screen console: if True, show console objects: list of objects to add to the mainwindow h5files: list of h5files to open size: mainwindow size (width, height) Returns: Main window instance """ if splash: # Showing splash screen pixmap = QG.QPixmap(get_image_file_path("DataLab-Splash.png")) splashscreen = QW.QSplashScreen(pixmap, QC.Qt.WindowStaysOnTopHint) splashscreen.show() window = DLMainWindow(console=console) if size is not None: width, height = size window.resize(width, height) if splash: splashscreen.finish(window) if Conf.main.window_maximized.get(None): window.showMaximized() else: window.showNormal() if h5files is not None: window.open_h5_files(h5files, import_all=True) if objects is not None: for obj in objects: window.add_object(obj) if execenv.h5browser_file is not None: window.import_h5_file(execenv.h5browser_file) return window def run( console: bool | None = None, objects: list[ImageObj | SignalObj] | None = None, h5files: list[str] | None = None, size: tuple[int, int] | None = None, ) -> None: """Run the DataLab application Note: this function is an entry point in `setup.py` and therefore may not be moved without modifying the package setup script. Args: console: if True, show console objects: list of objects to add to the mainwindow h5files: list of h5files to open size: mainwindow size (width, height) """ if execenv.h5files: h5files = ([] if h5files is None else h5files) + execenv.h5files with datalab_app_context(exec_loop=True): window = create( splash=True, console=console, objects=objects, h5files=h5files, size=size ) QW.QApplication.processEvents() window.execute_post_show_actions() if __name__ == "__main__": run() DataLab-1.0.2/datalab/config.py000066400000000000000000001014371511411446000162140ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab configuration module ---------------------------- This module handles `DataLab` configuration (options, images and icons). """ from __future__ import annotations import os import os.path as osp import sys from typing import Literal from guidata import configtools from plotpy.config import CONF as PLOTPY_CONF from plotpy.config import MAIN_BG_COLOR, MAIN_FG_COLOR from plotpy.constants import LUTAlpha from plotpy.styles import MarkerParam, ShapeParam from sigima.config import options as sigima_options from sigima.proc.title_formatting import ( PlaceholderTitleFormatter, set_default_title_formatter, ) from datalab import __version__ from datalab.utils import conf # Configure Sigima to use DataLab-compatible placeholder title formatting set_default_title_formatter(PlaceholderTitleFormatter()) CONF_VERSION = "1.0.0" APP_NAME = "DataLab" MOD_NAME = "datalab" def get_config_app_name() -> str: """Get configuration application name with major version suffix. This function returns the application name used for configuration storage. Starting from v1.0, the major version is appended to allow different major versions to coexist on the same machine without interfering with each other. Returns: str: Configuration application name (e.g., "DataLab" for v0.x, "DataLab_v1" for v1.x) Examples: - v0.20.x → "DataLab" (configuration stored in ~/.DataLab) - v1.0.x → "DataLab_v1" (configuration stored in ~/.DataLab_v1) - v2.0.x → "DataLab_v2" (configuration stored in ~/.DataLab_v2) """ major_version = __version__.split(".", maxsplit=1)[0] # Keep v0.x configuration folder unchanged for backward compatibility if major_version == "0": return APP_NAME return f"{APP_NAME}_v{major_version}" _ = configtools.get_translation(MOD_NAME) APP_DESC = _("""DataLab is a generic signal and image processing platform""") APP_PATH = osp.dirname(__file__) DEBUG = os.environ.get("DEBUG", "").lower() in ("1", "true") if DEBUG: print("*** DEBUG mode *** [Reset configuration file, do not redirect std I/O]") TEST_SEGFAULT_ERROR = len(os.environ.get("TEST_SEGFAULT_ERROR", "")) > 0 if TEST_SEGFAULT_ERROR: print('*** TEST_SEGFAULT_ERROR mode *** [Enabling test action in "?" menu]') DATETIME_FORMAT = "%d/%m/%Y - %H:%M:%S" configtools.add_image_module_path(MOD_NAME, osp.join("data", "logo")) configtools.add_image_module_path(MOD_NAME, osp.join("data", "icons")) DATAPATH = configtools.get_module_data_path(MOD_NAME, "data") SHOTPATH = osp.join( configtools.get_module_data_path(MOD_NAME), os.pardir, "doc", "images", "shots" ) OTHER_PLUGINS_PATHLIST = [configtools.get_module_data_path(MOD_NAME, "plugins")] def is_frozen(module_name: str) -> bool: """Test if module has been frozen (py2exe/cx_Freeze/pyinstaller) Args: module_name (str): module name Returns: bool: True if module has been frozen (py2exe/cx_Freeze/pyinstaller) """ datapath = configtools.get_module_path(module_name) parentdir = osp.normpath(osp.join(datapath, osp.pardir)) return not osp.isfile(__file__) or osp.isfile(parentdir) # library.zip IS_FROZEN = is_frozen(MOD_NAME) if IS_FROZEN: OTHER_PLUGINS_PATHLIST.append(osp.join(osp.dirname(sys.executable), "plugins")) try: os.mkdir(OTHER_PLUGINS_PATHLIST[-1]) except OSError: pass def get_mod_source_dir() -> str | None: """Return module source directory Returns: str | None: module source directory, or None if not found """ if IS_FROZEN: devdir = osp.abspath(osp.join(sys.prefix, os.pardir, os.pardir)) else: devdir = osp.abspath(osp.join(osp.dirname(__file__), os.pardir)) if osp.isfile(osp.join(devdir, MOD_NAME, "__init__.py")): return devdir # Unhandled case (this should not happen, but just in case): return None class MainSection(conf.Section, metaclass=conf.SectionMeta): """Class defining the main configuration section structure. Each class attribute is an option (metaclass is automatically affecting option names in .INI file based on class attribute names).""" color_mode = conf.EnumOption(["auto", "dark", "light"], default="auto") process_isolation_enabled = conf.Option() rpc_server_enabled = conf.Option() rpc_server_port = conf.Option() traceback_log_path = conf.ConfigPathOption() traceback_log_available = conf.Option() faulthandler_enabled = conf.Option() faulthandler_log_path = conf.ConfigPathOption() faulthandler_log_available = conf.Option() window_maximized = conf.Option() window_position = conf.Option() window_size = conf.Option() window_state = conf.Option() base_dir = conf.WorkingDirOption() available_memory_threshold = conf.Option() current_tab = conf.Option() plugins_enabled = conf.Option() plugins_path = conf.Option() tour_enabled = conf.Option() v020_plugins_warning_ignore = conf.Option() # True: do not warn, False: warn class ConsoleSection(conf.Section, metaclass=conf.SectionMeta): """Classs defining the console configuration section structure. Each class attribute is an option (metaclass is automatically affecting option names in .INI file based on class attribute names).""" console_enabled = conf.Option() show_console_on_error = conf.Option() max_line_count = conf.Option() external_editor_path = conf.Option() external_editor_args = conf.Option() class IOSection(conf.Section, metaclass=conf.SectionMeta): """Class defining the I/O configuration section structure. Each class attribute is an option (metaclass is automatically affecting option names in .INI file based on class attribute names).""" # HDF5 file format options # ------------------------ # When opening an HDF5 file, ask user for confirmation if the current workspace # has to be cleared before loading the file: h5_clear_workspace = conf.Option() # True: clear workspace, False: do not clear h5_clear_workspace_ask = conf.Option() # True: ask user, False: do not ask # Signal or image title when importing from HDF5 file: # - True: use HDF5 full dataset path in signal or image title # - False: use HDF5 dataset name in signal or image title h5_fullpath_in_title = conf.Option() # Signal or image title when importing from HDF5 file: # - True: add HDF5 file name in signal or image title # - False: do not add HDF5 file name in signal or image title h5_fname_in_title = conf.Option() # ImageIO supported file formats: imageio_formats = conf.Option() # Dialog settings persistence (JSON-serialized datasets): save_to_directory_settings = conf.DataSetOption() add_metadata_settings = conf.DataSetOption() class ProcSection(conf.Section, metaclass=conf.SectionMeta): """Class defining the Processing configuration section structure. Each class attribute is an option (metaclass is automatically affecting option names in .INI file based on class attribute names).""" # Operation mode: # - "single": single operand mode # - "pairwise": pairwise operation mode operation_mode = conf.EnumOption(["single", "pairwise"], default="single") # ROI extraction strategy: # - True: extract all ROIs in a single signal or image # - False: extract each ROI in a separate signal or image extract_roi_singleobj = conf.Option() # Keep analysis results after processing: # - True: keep analysis results (dangerous because results may not be valid anymore) # - False: do not keep analysis results (default) keep_results = conf.Option() # Show systematically result dialog after processing: show_result_dialog = conf.Option() # Use xmin and xmax bounds from current signal when creating a new signal: use_signal_bounds = conf.Option() # Use dimensions from current image when creating a new image: use_image_dims = conf.Option() # FFT shift enabled state for signal/image processing: # - True: FFT shift is enabled (default) # - False: FFT shift is disabled fft_shift_enabled = conf.Option() # Auto-normalize convolution kernel for signal/image processing: # - True: automatically normalize kernel (default) # - False: do not normalize kernel auto_normalize_kernel = conf.Option() # Ignore warnings during computation: # - True: ignore warnings # - False: do not ignore warnings ignore_warnings = conf.Option() # X-array compatibility behavior for multi-signal computations: # - "ask": ask user for confirmation when x-arrays are incompatible (default) # - "interpolate": automatically interpolate when x-arrays are incompatible xarray_compat_behavior = conf.EnumOption(["ask", "interpolate"], default="ask") # History and analysis tabs font small_mono_font = conf.FontOption() class ViewSection(conf.Section, metaclass=conf.SectionMeta): """Class defining the view configuration section structure. Each class attribute is an option (metaclass is automatically affecting option names in .INI file based on class attribute names).""" # Toolbar position: # - "top": top # - "bottom": bottom # - "left": left # - "right": right plot_toolbar_position = conf.Option() # Ignore information message when inserting object title as annotation label: ignore_title_insertion_msg = conf.Option() # String formatting for shape legends sig_format = conf.Option() ima_format = conf.Option() show_label = conf.Option() auto_refresh = conf.Option() show_first_only = conf.Option() # Show only first selected item show_contrast = conf.Option() sig_linewidth = conf.Option() sig_linewidth_perfs_threshold = conf.Option() sig_antialiasing = conf.Option() sig_autodownsampling = conf.Option() sig_autodownsampling_maxpoints = conf.Option() # Autoscale margin settings for plots (percentage values) sig_autoscale_margin_percent = conf.Option() ima_autoscale_margin_percent = conf.Option() # If True, lock aspect ratio of images to 1:1 (ignore physical pixel size) ima_aspect_ratio_1_1 = conf.Option() # Default visualization settings at item creation # (e.g. see adapter's `make_item` methods in datalab/adapters_plotpy/*.py) ima_eliminate_outliers = conf.Option() # Default visualization settings, persisted in object metadata # (e.g. see `BaseDataPanel.update_metadata_view_settings`) sig_def_shade = conf.Option() sig_def_curvestyle = conf.Option() sig_def_baseline = conf.Option() # ⚠️ Do not add "sig_def_use_dsamp" and "sig_def_dsamp_factor" options here # because it would not be compatible with the auto-downsampling feature. # Default visualization settings, persisted in object metadata # (e.g. see `BaseDataPanel.update_metadata_view_settings`) ima_def_colormap = conf.Option() ima_def_invert_colormap = conf.Option() ima_def_interpolation = conf.Option() ima_def_alpha = conf.Option() ima_def_alpha_function = conf.Option() ima_def_keep_lut_range = conf.Option() # Annotated shape and marker visualization settings for signals sig_shape_param = conf.DataSetOption() sig_marker_param = conf.DataSetOption() # Annotated shape and marker visualization settings for images ima_shape_param = conf.DataSetOption() ima_marker_param = conf.DataSetOption() # Datetime axis format strings for different time units # Format strings use Python's strftime format codes sig_datetime_format_s = conf.Option() # Format for s, min, h sig_datetime_format_ms = conf.Option() # Format for ms, us, ns # Maximum number of geometry shapes to draw on plot # Even if more results are stored, only the first N shapes are drawn max_shapes_to_draw = conf.Option() # Maximum number of table cells (rows × columns) to display in merged result # label on plot. If exceeded, rows are truncated to stay within this limit. # This prevents slowdown with results that have many columns (e.g., polygons) max_cells_in_label = conf.Option() # Maximum number of columns to display in merged result label # If exceeded, only the first N columns are shown. This ensures readability # for results with many columns (e.g., polygon coordinates: x0, y0, x1, y1...) max_cols_in_label = conf.Option() # Show merged result label on plot by default show_result_label = conf.Option() @classmethod def get_def_dict(cls, category: Literal["ima", "sig"]) -> dict: """Get default visualization settings as a dictionary Args: category: category ("ima" or "sig", respectively for image and signal) Returns: Default visualization settings as a dictionary """ assert category in ("ima", "sig") prefix = f"{category}_def_" def_dict = {} for attrname in dir(cls): if attrname.startswith(prefix): name = attrname[len(prefix) :] opt = getattr(cls, attrname) defval = opt.get(None) if defval is not None: def_dict[name] = defval return def_dict @classmethod def set_def_dict(cls, category: Literal["ima", "sig"], def_dict: dict) -> None: """Set default visualization settings from a dictionary Args: category: category ("ima" or "sig", respectively for image and signal) def_dict: default visualization settings as a dictionary """ assert category in ("ima", "sig") prefix = f"{category}_def_" for attrname in dir(cls): if attrname.startswith(prefix): name = attrname[len(prefix) :] opt = getattr(cls, attrname) if name in def_dict: opt.set(def_dict[name]) # Usage (example): Conf.console.console_enabled.get(True) class Conf(conf.Configuration, metaclass=conf.ConfMeta): """Class defining DataLab configuration structure. Each class attribute is a section (metaclass is automatically affecting section names in .INI file based on class attribute names).""" main = MainSection() console = ConsoleSection() view = ViewSection() proc = ProcSection() io = IOSection() def get_old_log_fname(fname): """Return old log fname from current log fname""" return osp.splitext(fname)[0] + ".1.log" def initialize(): """Initialize application configuration""" config_app_name = get_config_app_name() Conf.initialize(config_app_name, CONF_VERSION, load=not DEBUG) # Set default values: # ------------------- # (do not use "set" method here to avoid overwriting user settings in .INI file) # Setting here the default values only for the most critical options. The other # options default values are set when used in the application code. # # Main section Conf.main.color_mode.get("auto") Conf.main.process_isolation_enabled.get(True) Conf.main.rpc_server_enabled.get(True) Conf.main.traceback_log_path.get(f".{APP_NAME}_traceback.log") Conf.main.faulthandler_log_path.get(f".{APP_NAME}_faulthandler.log") Conf.main.available_memory_threshold.get(500) Conf.main.plugins_enabled.get(True) Conf.main.plugins_path.get(Conf.get_path("plugins")) Conf.main.tour_enabled.get(True) Conf.main.v020_plugins_warning_ignore.get(False) # Console section Conf.console.console_enabled.get(True) Conf.console.show_console_on_error.get(False) Conf.console.external_editor_path.get("code") Conf.console.external_editor_args.get("-g {path}:{line_number}") # IO section Conf.io.h5_clear_workspace.get(True) # Default to avoid objects UUID reset Conf.io.h5_clear_workspace_ask.get(True) Conf.io.h5_fullpath_in_title.get(False) Conf.io.h5_fname_in_title.get(True) iofmts = Conf.io.imageio_formats.get(()) if len(iofmts) > 0: sigima_options.imageio_formats.set(iofmts) # Sync with sigima config # Proc section Conf.proc.operation_mode.get("single") Conf.proc.use_signal_bounds.get(False) Conf.proc.use_image_dims.get(True) Conf.proc.fft_shift_enabled.get(True) sigima_options.fft_shift_enabled.set(True) # Sync with sigima config Conf.proc.auto_normalize_kernel.get(False) sigima_options.auto_normalize_kernel.set(False) # Sync with sigima config Conf.proc.extract_roi_singleobj.get(False) Conf.proc.keep_results.get(False) Conf.proc.show_result_dialog.get(True) Conf.proc.ignore_warnings.get(False) Conf.proc.xarray_compat_behavior.get("ask") Conf.proc.small_mono_font.get((configtools.MONOSPACE, 8, False)) # View section tb_pos = Conf.view.plot_toolbar_position.get("left") assert tb_pos in ("top", "bottom", "left", "right") Conf.view.ignore_title_insertion_msg.get(False) Conf.view.sig_linewidth.get(1.0) Conf.view.sig_linewidth_perfs_threshold.get(1000) Conf.view.sig_autodownsampling.get(True) Conf.view.sig_autodownsampling_maxpoints.get(100000) Conf.view.sig_autoscale_margin_percent.get(2.0) Conf.view.ima_autoscale_margin_percent.get(1.0) Conf.view.ima_aspect_ratio_1_1.get(False) Conf.view.ima_eliminate_outliers.get(0.1) Conf.view.sig_def_shade.get(0.0) Conf.view.sig_def_curvestyle.get("Lines") Conf.view.sig_def_baseline.get(0.0) Conf.view.ima_def_colormap.get("viridis") Conf.view.ima_def_invert_colormap.get(False) Conf.view.ima_def_interpolation.get(5) Conf.view.ima_def_alpha.get(1.0) Conf.view.ima_def_alpha_function.get(LUTAlpha.NONE.value) Conf.view.ima_def_keep_lut_range.get(False) # Datetime format strings: % must be escaped as %% for ConfigParser Conf.view.sig_datetime_format_s.get("%%H:%%M:%%S") Conf.view.sig_datetime_format_ms.get("%%H:%%M:%%S.%%f") Conf.view.max_shapes_to_draw.get(1000) Conf.view.max_cells_in_label.get(100) Conf.view.max_cols_in_label.get(15) Conf.view.show_result_label.get(True) # Initialize PlotPy configuration with versioned app name PLOTPY_CONF.set_application( osp.join(config_app_name, "plotpy"), CONF_VERSION, load=False ) def reset(): """Reset application configuration""" Conf.reset() initialize() initialize() ROI_LINE_COLOR = "#5555ff" ROI_SEL_LINE_COLOR = "#9393ff" PLOTPY_DEFAULTS = { "plot": { # # XXX: If needed in the future, add here the default settings for PlotPy: # that will override the PlotPy settings. # That is the right way to customize the PlotPy settings for shapes and # annotations when they are added using tools from the DataLab application # (see `BaseDataPanel.ANNOTATION_TOOLS`). # For example, for shapes: # "shape/drag/line/color": "#00ffff", # # Overriding default plot settings from PlotPy "title/font/size": 11, "title/font/bold": False, "selected_curve_symbol/marker": "Ellipse", "selected_curve_symbol/edgecolor": "#a0a0a4", "selected_curve_symbol/facecolor": MAIN_FG_COLOR, "selected_curve_symbol/alpha": 0.3, "selected_curve_symbol/size": 5, "marker/curve/text/textcolor": "black", "marker/cross/text/textcolor": "black", "marker/cross/text/background_alpha": 0.7, # Cursor line and symbol style "marker/cursor/line/style": "SolidLine", "marker/cursor/line/color": "#A11818", "marker/cursor/line/width": 1.0, "marker/cursor/symbol/marker": "NoSymbol", "marker/cursor/symbol/size": 11, "marker/cursor/symbol/edgecolor": MAIN_BG_COLOR, "marker/cursor/symbol/facecolor": "#ff9393", "marker/cursor/symbol/alpha": 1.0, "marker/cursor/sel_line/style": "SolidLine", "marker/cursor/sel_line/color": "#A11818", "marker/cursor/sel_line/width": 2.0, "marker/cursor/sel_symbol/marker": "NoSymbol", "marker/cursor/sel_symbol/size": 11, "marker/cursor/sel_symbol/edgecolor": MAIN_BG_COLOR, "marker/cursor/sel_symbol/facecolor": "#A11818", "marker/cursor/sel_symbol/alpha": 0.8, "marker/cursor/text/font/size": 9, "marker/cursor/text/font/family": "default", "marker/cursor/text/font/bold": False, "marker/cursor/text/font/italic": False, "marker/cursor/text/textcolor": "#440909", "marker/cursor/text/background_color": "#ffffff", "marker/cursor/text/background_alpha": 0.7, "marker/cursor/sel_text/font/size": 9, "marker/cursor/sel_text/font/family": "default", "marker/cursor/sel_text/font/bold": False, "marker/cursor/sel_text/font/italic": False, "marker/cursor/sel_text/textcolor": "#440909", "marker/cursor/sel_text/background_color": "#ffffff", "marker/cursor/sel_text/background_alpha": 0.7, }, "results": { # Annotated shape style for result shapes: # Signals: "s/annotation/line/style": "SolidLine", "s/annotation/line/color": MAIN_FG_COLOR, "s/annotation/line/width": 1, "s/annotation/fill/style": "SolidPattern", "s/annotation/fill/color": MAIN_BG_COLOR, "s/annotation/fill/alpha": 0.1, "s/annotation/symbol/marker": "XCross", "s/annotation/symbol/size": 7, "s/annotation/symbol/edgecolor": MAIN_FG_COLOR, "s/annotation/symbol/facecolor": MAIN_FG_COLOR, "s/annotation/symbol/alpha": 1.0, "s/annotation/sel_line/style": "DashLine", "s/annotation/sel_line/color": "#00ff00", "s/annotation/sel_line/width": 1, "s/annotation/sel_fill/style": "SolidPattern", "s/annotation/sel_fill/color": MAIN_BG_COLOR, "s/annotation/sel_fill/alpha": 0.1, "s/annotation/sel_symbol/marker": "Rect", "s/annotation/sel_symbol/size": 9, "s/annotation/sel_symbol/edgecolor": "#00aa00", "s/annotation/sel_symbol/facecolor": "#00ff00", "s/annotation/sel_symbol/alpha": 0.7, # Images: "i/annotation/line/style": "SolidLine", "i/annotation/line/color": "#ffff00", "i/annotation/line/width": 2, "i/annotation/fill/style": "SolidPattern", "i/annotation/fill/color": MAIN_BG_COLOR, "i/annotation/fill/alpha": 0.1, "i/annotation/symbol/marker": "Rect", "i/annotation/symbol/size": 3, "i/annotation/symbol/edgecolor": "#ffff00", "i/annotation/symbol/facecolor": "#ffff00", "i/annotation/symbol/alpha": 1.0, "i/annotation/sel_line/style": "SolidLine", "i/annotation/sel_line/color": "#00ff00", "i/annotation/sel_line/width": 2, "i/annotation/sel_fill/style": "SolidPattern", "i/annotation/sel_fill/color": MAIN_BG_COLOR, "i/annotation/sel_fill/alpha": 0.1, "i/annotation/sel_symbol/marker": "Rect", "i/annotation/sel_symbol/size": 9, "i/annotation/sel_symbol/edgecolor": "#00aa00", "i/annotation/sel_symbol/facecolor": "#00ff00", "i/annotation/sel_symbol/alpha": 0.7, # Marker styles for results: # Signals: "s/marker/cursor/line/style": "DashLine", "s/marker/cursor/line/color": "#ffff00", "s/marker/cursor/line/width": 1.0, "s/marker/cursor/symbol/marker": "Ellipse", "s/marker/cursor/symbol/size": 11, "s/marker/cursor/symbol/edgecolor": MAIN_BG_COLOR, "s/marker/cursor/symbol/facecolor": "#ffff00", "s/marker/cursor/symbol/alpha": 0.7, "s/marker/cursor/sel_line/style": "DashLine", "s/marker/cursor/sel_line/color": "#ffff00", "s/marker/cursor/sel_line/width": 2.0, "s/marker/cursor/sel_symbol/marker": "Ellipse", "s/marker/cursor/sel_symbol/size": 11, "s/marker/cursor/sel_symbol/edgecolor": "#ffff00", "s/marker/cursor/sel_symbol/facecolor": "#ffff00", "s/marker/cursor/sel_symbol/alpha": 0.7, "s/marker/cursor/text/font/size": 9, "s/marker/cursor/text/font/family": "default", "s/marker/cursor/text/font/bold": False, "s/marker/cursor/text/font/italic": False, "s/marker/cursor/text/textcolor": "#440909", "s/marker/cursor/text/background_color": "#ffffff", "s/marker/cursor/text/background_alpha": 0.7, "s/marker/cursor/sel_text/font/size": 9, "s/marker/cursor/sel_text/font/family": "default", "s/marker/cursor/sel_text/font/bold": False, "s/marker/cursor/sel_text/font/italic": False, "s/marker/cursor/sel_text/textcolor": "#440909", "s/marker/cursor/sel_text/background_color": "#ffffff", "s/marker/cursor/sel_text/background_alpha": 0.7, "s/marker/cursor/markerstyle": "Cross", # Images: "i/marker/cursor/line/style": "DashLine", "i/marker/cursor/line/color": "#ffff00", "i/marker/cursor/line/width": 1.0, "i/marker/cursor/symbol/marker": "Diamond", "i/marker/cursor/symbol/size": 11, "i/marker/cursor/symbol/edgecolor": "#ffff00", "i/marker/cursor/symbol/facecolor": "#ffff00", "i/marker/cursor/symbol/alpha": 0.7, "i/marker/cursor/sel_line/style": "DashLine", "i/marker/cursor/sel_line/color": "#ffff00", "i/marker/cursor/sel_line/width": 2.0, "i/marker/cursor/sel_symbol/marker": "Diamond", "i/marker/cursor/sel_symbol/size": 11, "i/marker/cursor/sel_symbol/edgecolor": "#ffff00", "i/marker/cursor/sel_symbol/facecolor": "#ffff00", "i/marker/cursor/sel_symbol/alpha": 0.7, "i/marker/cursor/text/font/size": 9, "i/marker/cursor/text/font/family": "default", "i/marker/cursor/text/font/bold": False, "i/marker/cursor/text/font/italic": False, "i/marker/cursor/text/textcolor": "#440909", "i/marker/cursor/text/background_color": "#ffffff", "i/marker/cursor/text/background_alpha": 0.7, "i/marker/cursor/sel_text/font/size": 9, "i/marker/cursor/sel_text/font/family": "default", "i/marker/cursor/sel_text/font/bold": False, "i/marker/cursor/sel_text/font/italic": False, "i/marker/cursor/sel_text/textcolor": "#440909", "i/marker/cursor/sel_text/background_color": "#ffffff", "i/marker/cursor/sel_text/background_alpha": 0.7, "i/marker/cursor/markerstyle": "Cross", # Style for labels: "label/symbol/marker": "NoSymbol", "label/symbol/size": 0, "label/symbol/edgecolor": MAIN_BG_COLOR, "label/symbol/facecolor": MAIN_BG_COLOR, "label/border/style": "SolidLine", "label/border/color": "#cbcbcb", "label/border/width": 1, "label/font/size": 8, "label/font/family/nt": ["Cascadia Code", "Consolas", "Courier New"], "label/font/family/posix": "Bitstream Vera Sans Mono", "label/font/family/mac": "Monaco", "label/font/bold": False, "label/font/italic": False, "label/color": MAIN_FG_COLOR, "label/bgcolor": MAIN_BG_COLOR, "label/bgalpha": 0.8, "label/anchor": "TL", "label/xc": 10, "label/yc": 10, "label/abspos": True, "label/absg": "TL", "label/xg": 0.0, "label/yg": 0.0, }, "roi": { # Shape style for ROI # Signals: # - Editable ROI (ROI editor): "s/editable/fill": "#ffff00", "s/editable/shade": 0.10, "s/editable/line/style": "SolidLine", "s/editable/line/color": "#ffff00", "s/editable/line/width": 1, "s/editable/fill/style": "SolidPattern", "s/editable/fill/color": MAIN_BG_COLOR, "s/editable/fill/alpha": 0.1, "s/editable/symbol/marker": "Rect", "s/editable/symbol/size": 3, "s/editable/symbol/edgecolor": "#ffff00", "s/editable/symbol/facecolor": "#ffff00", "s/editable/symbol/alpha": 1.0, "s/editable/sel_line/style": "SolidLine", "s/editable/sel_line/color": "#00ff00", "s/editable/sel_line/width": 1, "s/editable/sel_fill/style": "SolidPattern", "s/editable/sel_fill/color": MAIN_BG_COLOR, "s/editable/sel_fill/alpha": 0.1, "s/editable/sel_symbol/marker": "Rect", "s/editable/sel_symbol/size": 9, "s/editable/sel_symbol/edgecolor": "#00aa00", "s/editable/sel_symbol/facecolor": "#00ff00", "s/editable/sel_symbol/alpha": 0.7, # - Readonly ROI (plot): "s/readonly/line/style": "SolidLine", "s/readonly/line/color": ROI_LINE_COLOR, "s/readonly/line/width": 1, "s/readonly/sel_line/style": "SolidLine", "s/readonly/sel_line/color": ROI_SEL_LINE_COLOR, "s/readonly/sel_line/width": 2, "s/readonly/fill": ROI_LINE_COLOR, "s/readonly/shade": 0.10, "s/readonly/symbol/marker": "Ellipse", "s/readonly/symbol/size": 7, "s/readonly/symbol/edgecolor": MAIN_BG_COLOR, "s/readonly/symbol/facecolor": ROI_LINE_COLOR, "s/readonly/symbol/alpha": 1.0, "s/readonly/sel_symbol/marker": "Ellipse", "s/readonly/sel_symbol/size": 9, "s/readonly/sel_symbol/edgecolor": MAIN_BG_COLOR, "s/readonly/sel_symbol/facecolor": ROI_SEL_LINE_COLOR, "s/readonly/sel_symbol/alpha": 0.9, "s/readonly/multi/color": "#806060", # Images: # - Editable ROI (ROI editor): "i/editable/line/style": "SolidLine", "i/editable/line/color": "#ffff00", "i/editable/line/width": 1, "i/editable/fill/style": "SolidPattern", "i/editable/fill/color": MAIN_BG_COLOR, "i/editable/fill/alpha": 0.1, "i/editable/symbol/marker": "Rect", "i/editable/symbol/size": 3, "i/editable/symbol/edgecolor": "#ffff00", "i/editable/symbol/facecolor": "#ffff00", "i/editable/symbol/alpha": 1.0, "i/editable/sel_line/style": "SolidLine", "i/editable/sel_line/color": "#00ff00", "i/editable/sel_line/width": 1, "i/editable/sel_fill/style": "SolidPattern", "i/editable/sel_fill/color": MAIN_BG_COLOR, "i/editable/sel_fill/alpha": 0.1, "i/editable/sel_symbol/marker": "Rect", "i/editable/sel_symbol/size": 9, "i/editable/sel_symbol/edgecolor": "#00aa00", "i/editable/sel_symbol/facecolor": "#00ff00", "i/editable/sel_symbol/alpha": 0.7, # - Readonly ROI (plot): "i/readonly/line/style": "DotLine", "i/readonly/line/color": ROI_LINE_COLOR, "i/readonly/line/width": 1, "i/readonly/fill/style": "SolidPattern", "i/readonly/fill/color": MAIN_BG_COLOR, "i/readonly/fill/alpha": 0.1, "i/readonly/symbol/marker": "NoSymbol", "i/readonly/symbol/size": 5, "i/readonly/symbol/edgecolor": ROI_LINE_COLOR, "i/readonly/symbol/facecolor": ROI_LINE_COLOR, "i/readonly/symbol/alpha": 0.6, "i/readonly/sel_line/style": "DotLine", "i/readonly/sel_line/color": "#0000ff", "i/readonly/sel_line/width": 1, "i/readonly/sel_fill/style": "SolidPattern", "i/readonly/sel_fill/color": MAIN_BG_COLOR, "i/readonly/sel_fill/alpha": 0.1, "i/readonly/sel_symbol/marker": "Rect", "i/readonly/sel_symbol/size": 8, "i/readonly/sel_symbol/edgecolor": "#0000aa", "i/readonly/sel_symbol/facecolor": "#0000ff", "i/readonly/sel_symbol/alpha": 0.7, }, } # PlotPy configuration will be initialized in initialize() function PLOTPY_CONF.update_defaults(PLOTPY_DEFAULTS) class DataLabShapeParam(ShapeParam): """ShapeParam subclass with internal items hidden from settings dialog""" def __init__(self): super().__init__() # Hide internal items that should not appear in settings dialog for item in self._items: if item._name in ("label", "readonly", "private"): item.set_prop("display", hide=True) def initialize_default_plotpy_instances(): """Initialize default PlotPy instances for DataLab configuration options""" # Initialize default instances for DataSetOptions now that PLOTPY_DEFAULTS exists _sig_shapeparam = DataLabShapeParam() _sig_shapeparam.read_config(PLOTPY_CONF, "results", "s/annotation") Conf.view.sig_shape_param.set_default_instance(_sig_shapeparam) Conf.view.sig_shape_param.get() _sig_markerparam = MarkerParam() _sig_markerparam.read_config(PLOTPY_CONF, "results", "s/marker/cursor") Conf.view.sig_marker_param.set_default_instance(_sig_markerparam) Conf.view.sig_marker_param.get() _ima_shapeparam = DataLabShapeParam() _ima_shapeparam.read_config(PLOTPY_CONF, "results", "i/annotation") Conf.view.ima_shape_param.set_default_instance(_ima_shapeparam) Conf.view.ima_shape_param.get() _ima_markerparam = MarkerParam() _ima_markerparam.read_config(PLOTPY_CONF, "results", "i/marker/cursor") Conf.view.ima_marker_param.set_default_instance(_ima_markerparam) Conf.view.ima_marker_param.get() initialize_default_plotpy_instances() DataLab-1.0.2/datalab/control/000077500000000000000000000000001511411446000160475ustar00rootroot00000000000000DataLab-1.0.2/datalab/control/__init__.py000066400000000000000000000000001511411446000201460ustar00rootroot00000000000000DataLab-1.0.2/datalab/control/baseproxy.py000066400000000000000000000567451511411446000204560ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab base proxy module ------------------------- """ # How to add a new method to the proxy: # ------------------------------------- # # 1. Add the method to the AbstractDLControl class, as an abstract method # # 2a. If the method requires any data conversion to get through the XML-RPC layer, # implement the method in both LocalProxy and RemoteClient classes # # 2b. If the method does not require any data conversion, implement the method # directly in the BaseProxy class, so that it is available to both LocalProxy # and RemoteClient classes without any code duplication # # 3. Implement the method in the DLMainWindow class # # 4. Implement the method in the RemoteServer class (it will be automatically # registered as an XML-RPC method, like all methods of AbstractDLControl) from __future__ import annotations import abc from contextlib import contextmanager from typing import TYPE_CHECKING, Generator import guidata.dataset as gds import numpy as np from sigima import ImageObj, SignalObj if TYPE_CHECKING: from collections.abc import Iterator from datalab.control.remote import ServerProxy from datalab.gui.main import DLMainWindow class AbstractDLControl(abc.ABC): """Abstract base class for controlling DataLab (main window or remote server)""" def __len__(self) -> int: """Return number of objects""" return len(self.get_object_uuids()) def __getitem__(self, nb_id_title: int | str | None = None) -> SignalObj | ImageObj: """Return object""" return self.get_object(nb_id_title) def __iter__(self) -> Iterator[SignalObj | ImageObj]: """Iterate over objects""" uuids = self.get_object_uuids() for uuid in uuids: yield self.get_object(uuid) def __str__(self) -> str: """Return object string representation""" return super().__repr__() def __repr__(self) -> str: """Return object representation""" titles = self.get_object_titles() uuids = self.get_object_uuids() text = f"{str(self)} (DataLab, {len(titles)} items):\n" for uuid, title in zip(uuids, titles): text += f" {uuid}: {title}\n" return text def __bool__(self) -> bool: """Return True if model is not empty""" return bool(self.get_object_uuids()) def __contains__(self, id_title: str) -> bool: """Return True if object (UUID or title) is in model""" return id_title in (self.get_object_titles() + self.get_object_uuids()) @classmethod def get_public_methods(cls) -> list[str]: """Return all public methods of the class, except itself. Returns: List of public methods """ return [ method for method in dir(cls) if not method.startswith(("_", "context_")) and method != "get_public_methods" ] @abc.abstractmethod def get_version(self) -> str: """Return DataLab public version. Returns: DataLab version """ @abc.abstractmethod def close_application(self) -> None: """Close DataLab application""" @abc.abstractmethod def raise_window(self) -> None: """Raise DataLab window""" @abc.abstractmethod def get_current_panel(self) -> str: """Return current panel name. Returns: Panel name (valid values: "signal", "image", "macro")) """ @abc.abstractmethod def set_current_panel(self, panel: str) -> None: """Switch to panel. Args: panel: Panel name (valid values: "signal", "image", "macro")) """ @abc.abstractmethod def reset_all(self) -> None: """Reset all application data""" @abc.abstractmethod def toggle_auto_refresh(self, state: bool) -> None: """Toggle auto refresh state. Args: state: Auto refresh state """ # Returns a context manager to temporarily disable autorefresh @contextmanager def context_no_refresh(self) -> Generator[None, None, None]: """Return a context manager to temporarily disable auto refresh. Returns: Context manager Example: >>> with proxy.context_no_refresh(): ... proxy.add_image("image1", data1) ... proxy.calc("fft") ... proxy.calc("wiener") ... proxy.calc("ifft") ... # Auto refresh is disabled during the above operations """ self.toggle_auto_refresh(False) try: yield finally: self.toggle_auto_refresh(True) @abc.abstractmethod def toggle_show_titles(self, state: bool) -> None: """Toggle show titles state. Args: state: Show titles state """ @abc.abstractmethod def save_to_h5_file(self, filename: str) -> None: """Save to a DataLab HDF5 file. Args: filename: HDF5 file name """ @abc.abstractmethod def open_h5_files( self, h5files: list[str] | None = None, import_all: bool | None = None, reset_all: bool | None = None, ) -> None: """Open a DataLab HDF5 file or import from any other HDF5 file. Args: h5files: List of HDF5 files to open. Defaults to None. import_all: Import all objects from HDF5 files. Defaults to None. reset_all: Reset all application data. Defaults to None. """ @abc.abstractmethod def import_h5_file(self, filename: str, reset_all: bool | None = None) -> None: """Open DataLab HDF5 browser to Import HDF5 file. Args: filename: HDF5 file name reset_all: Reset all application data. Defaults to None. """ @abc.abstractmethod def load_from_files(self, filenames: list[str]) -> None: """Open objects from files in current panel (signals/images). Args: filenames: list of file names """ @abc.abstractmethod def load_from_directory(self, path: str) -> None: """Open objects from directory in current panel (signals/images). Args: path: directory path """ @abc.abstractmethod def add_signal( self, title: str, xdata: np.ndarray, ydata: np.ndarray, xunit: str = "", yunit: str = "", xlabel: str = "", ylabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add signal data to DataLab. Args: title: Signal title xdata: X data ydata: Y data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" group_id: group id in which to add the signal. Defaults to "" set_current: if True, set the added signal as current Returns: True if signal was added successfully, False otherwise Raises: ValueError: Invalid xdata dtype ValueError: Invalid ydata dtype """ @abc.abstractmethod def add_image( self, title: str, data: np.ndarray, xunit: str = "", yunit: str = "", zunit: str = "", xlabel: str = "", ylabel: str = "", zlabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add image data to DataLab. Args: title: Image title data: Image data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" zunit: Z unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" zlabel: Z label. Defaults to "" group_id: group id in which to add the image. Defaults to "" set_current: if True, set the added image as current Returns: True if image was added successfully, False otherwise Raises: ValueError: Invalid data dtype """ @abc.abstractmethod def add_object( self, obj: SignalObj | ImageObj, group_id: str = "", set_current: bool = True ) -> None: """Add object to DataLab. Args: obj: Signal or image object group_id: group id in which to add the object. Defaults to "" set_current: if True, set the added object as current Returns: True if object was added successfully, False otherwise """ @abc.abstractmethod def add_group( self, title: str, panel: str | None = None, select: bool = False ) -> None: """Add group to DataLab. Args: title: Group title panel: Panel name (valid values: "signal", "image"). Defaults to None. select: Select the group after creation. Defaults to False. """ @abc.abstractmethod def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: """Return selected objects uuids. Args: include_groups: If True, also return objects from selected groups. Returns: List of selected objects uuids. """ @abc.abstractmethod def select_objects( self, selection: list[int | str], panel: str | None = None, ) -> None: """Select objects in current panel. Args: selection: List of object numbers (1 to N) or uuids to select panel: panel name (valid values: "signal", "image"). If None, current panel is used. Defaults to None. """ @abc.abstractmethod def select_groups( self, selection: list[int | str] | None = None, panel: str | None = None ) -> None: """Select groups in current panel. Args: selection: List of group numbers (1 to N), or list of group uuids, or None to select all groups. Defaults to None. panel: panel name (valid values: "signal", "image"). If None, current panel is used. Defaults to None. """ @abc.abstractmethod def delete_metadata( self, refresh_plot: bool = True, keep_roi: bool = False ) -> None: """Delete metadata of selected objects Args: refresh_plot: Refresh plot. Defaults to True. keep_roi: Keep ROI. Defaults to False. """ @abc.abstractmethod def get_group_titles_with_object_info( self, ) -> tuple[list[str], list[list[str]], list[list[str]]]: """Return groups titles and lists of inner objects uuids and titles. Returns: Groups titles, lists of inner objects uuids and titles """ @abc.abstractmethod def get_object_titles(self, panel: str | None = None) -> list[str]: """Get object (signal/image) list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name (valid values: "signal", "image", "macro"). If None, current data panel is used (i.e. signal or image panel). Returns: List of object titles Raises: ValueError: if panel not found """ @abc.abstractmethod def get_object( self, nb_id_title: int | str | None = None, panel: str | None = None ) -> SignalObj | ImageObj: """Get object (signal/image) from index. Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: Object Raises: KeyError: if object not found """ @abc.abstractmethod def get_object_uuids( self, panel: str | None = None, group: int | str | None = None ) -> list[str]: """Get object (signal/image) uuid list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name (valid values: "signal", "image"). If None, current panel is used. group: Group number, or group id, or group title. Defaults to None (all groups). Returns: List of object uuids Raises: ValueError: if panel not found """ @abc.abstractmethod def get_object_shapes( self, nb_id_title: int | str | None = None, panel: str | None = None, ) -> list: """Get plot item shapes associated to object (signal/image). Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: List of plot item shapes """ @abc.abstractmethod def add_annotations_from_items( self, items: list, refresh_plot: bool = True, panel: str | None = None ) -> None: """Add object annotations (annotation plot items). Args: items: annotation plot items refresh_plot: refresh plot. Defaults to True. panel: panel name (valid values: "signal", "image"). If None, current panel is used. """ @abc.abstractmethod def add_label_with_title( self, title: str | None = None, panel: str | None = None ) -> None: """Add a label with object title on the associated plot Args: title: Label title. Defaults to None. If None, the title is the object title. panel: panel name (valid values: "signal", "image"). If None, current panel is used. """ @abc.abstractmethod def run_macro(self, number_or_title: int | str | None = None) -> None: """Run macro. Args: number: Number of the macro (starting at 1). Defaults to None (run current macro, or does nothing if there is no macro). """ @abc.abstractmethod def stop_macro(self, number_or_title: int | str | None = None) -> None: """Stop macro. Args: number: Number of the macro (starting at 1). Defaults to None (stop current macro, or does nothing if there is no macro). """ @abc.abstractmethod def import_macro_from_file(self, filename: str) -> None: """Import macro from file Args: filename: Filename. """ @abc.abstractmethod def calc(self, name: str, param: gds.DataSet | None = None) -> gds.DataSet: """Call computation feature ``name`` .. note:: This calls either the processor's ``compute_`` method (if it exists), or the processor's ```` computation feature (if it is registered, using the ``run_feature`` method). It looks for the function in all panels, starting with the current one. Args: name: Compute function name param: Compute function parameter. Defaults to None. Raises: ValueError: unknown function """ class BaseProxy(AbstractDLControl, metaclass=abc.ABCMeta): """Common base class for DataLab proxies Args: datalab: DLMainWindow instance or ServerProxy instance. If None, then the proxy implementation will have to set it later (e.g. see RemoteClient). """ def __init__(self, datalab: DLMainWindow | ServerProxy | None = None) -> None: self._datalab = datalab def get_version(self) -> str: """Return DataLab public version. Returns: DataLab version """ return self._datalab.get_version() def close_application(self) -> None: """Close DataLab application""" self._datalab.close_application() def raise_window(self) -> None: """Raise DataLab window""" self._datalab.raise_window() def get_current_panel(self) -> str: """Return current panel name. Returns: Panel name (valid values: "signal", "image", "macro")) """ return self._datalab.get_current_panel() def set_current_panel(self, panel: str) -> None: """Switch to panel. Args: panel: Panel name (valid values: "signal", "image", "macro")) """ self._datalab.set_current_panel(panel) def reset_all(self) -> None: """Reset all application data""" self._datalab.reset_all() def toggle_auto_refresh(self, state: bool) -> None: """Toggle auto refresh state. Args: state: Auto refresh state """ self._datalab.toggle_auto_refresh(state) def toggle_show_titles(self, state: bool) -> None: """Toggle show titles state. Args: state: Show titles state """ self._datalab.toggle_show_titles(state) def save_to_h5_file(self, filename: str) -> None: """Save to a DataLab HDF5 file. Args: filename: HDF5 file name """ self._datalab.save_to_h5_file(filename) def open_h5_files( self, h5files: list[str] | None = None, import_all: bool | None = None, reset_all: bool | None = None, ) -> None: """Open a DataLab HDF5 file or import from any other HDF5 file. Args: h5files: List of HDF5 files to open. Defaults to None. import_all: Import all objects from HDF5 files. Defaults to None. reset_all: Reset all application data. Defaults to None. """ self._datalab.open_h5_files(h5files, import_all, reset_all) def import_h5_file(self, filename: str, reset_all: bool | None = None) -> None: """Open DataLab HDF5 browser to Import HDF5 file. Args: filename: HDF5 file name reset_all: Reset all application data. Defaults to None. """ self._datalab.import_h5_file(filename, reset_all) def load_from_files(self, filenames: list[str]) -> None: """Open objects from files in current panel (signals/images). Args: filenames: list of file names """ self._datalab.load_from_files(filenames) def load_from_directory(self, path: str) -> None: """Open objects from directory in current panel (signals/images). Args: path: directory path """ self._datalab.load_from_directory(path) def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: """Return selected objects uuids. Args: include_groups: If True, also return objects from selected groups. Returns: List of selected objects uuids. """ return self._datalab.get_sel_object_uuids(include_groups) def add_group( self, title: str, panel: str | None = None, select: bool = False ) -> None: """Add group to DataLab. Args: title: Group title panel: Panel name (valid values: "signal", "image"). Defaults to None. select: Select the group after creation. Defaults to False. """ self._datalab.add_group(title, panel, select) def select_objects( self, selection: list[int | str], panel: str | None = None, ) -> None: """Select objects in current panel. Args: selection: List of object numbers (1 to N) or uuids to select panel: panel name (valid values: "signal", "image"). If None, current panel is used. Defaults to None. """ self._datalab.select_objects(selection, panel) def select_groups( self, selection: list[int | str] | None = None, panel: str | None = None ) -> None: """Select groups in current panel. Args: selection: List of group numbers (1 to N), or list of group uuids, or None to select all groups. Defaults to None. panel: panel name (valid values: "signal", "image"). If None, current panel is used. Defaults to None. """ self._datalab.select_groups(selection, panel) def delete_metadata( self, refresh_plot: bool = True, keep_roi: bool = False ) -> None: """Delete metadata of selected objects Args: refresh_plot: Refresh plot. Defaults to True. keep_roi: Keep ROI. Defaults to False. """ self._datalab.delete_metadata(refresh_plot, keep_roi) def get_group_titles_with_object_info( self, ) -> tuple[list[str], list[list[str]], list[list[str]]]: """Return groups titles and lists of inner objects uuids and titles. Returns: Tuple: groups titles, lists of inner objects uuids and titles """ return self._datalab.get_group_titles_with_object_info() def get_object_titles(self, panel: str | None = None) -> list[str]: """Get object (signal/image) list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name (valid values: "signal", "image", "macro"). If None, current data panel is used (i.e. signal or image panel). Returns: List of object titles Raises: ValueError: if panel not found """ return self._datalab.get_object_titles(panel) def get_object_uuids( self, panel: str | None = None, group: int | str | None = None ) -> list[str]: """Get object (signal/image) uuid list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name (valid values: "signal", "image"). If None, current panel is used. group: Group number, or group id, or group title. Defaults to None (all groups). Returns: List of object uuids Raises: ValueError: if panel not found """ return self._datalab.get_object_uuids(panel, group) def add_label_with_title( self, title: str | None = None, panel: str | None = None ) -> None: """Add a label with object title on the associated plot Args: title: Label title. Defaults to None. If None, the title is the object title. panel: panel name (valid values: "signal", "image"). If None, current panel is used. """ self._datalab.add_label_with_title(title, panel) def run_macro(self, number_or_title: int | str | None = None) -> None: """Run macro. Args: number_or_title: Macro number, or macro title. Defaults to None (current macro). Raises: ValueError: if macro not found """ self._datalab.run_macro(number_or_title) def stop_macro(self, number_or_title: int | str | None = None) -> None: """Stop macro. Args: number_or_title: Macro number, or macro title. Defaults to None (current macro). Raises: ValueError: if macro not found """ self._datalab.stop_macro(number_or_title) def import_macro_from_file(self, filename: str) -> None: """Import macro from file Args: filename: Filename. """ return self._datalab.import_macro_from_file(filename) DataLab-1.0.2/datalab/control/proxy.py000066400000000000000000000245031511411446000176060ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Proxy objects (:mod:`datalab.control.proxy`) -------------------------------------------- The :mod:`datalab.control.proxy` module provides a way to access DataLab features from a proxy class. Remote proxy ^^^^^^^^^^^^ The remote proxy is used when DataLab is started from a different process than the proxy. In this case, the proxy connects to DataLab XML-RPC server. .. autoclass:: RemoteProxy :members: :inherited-members: Local proxy ^^^^^^^^^^^ The local proxy is used when DataLab is started from the same process as the proxy. In this case, the proxy is directly connected to DataLab main window instance. The typical use case is high-level scripting. .. autoclass:: LocalProxy :members: :inherited-members: Proxy context manager ^^^^^^^^^^^^^^^^^^^^^ The proxy context manager is a convenient way to handle proxy creation and destruction. It is used as follows: .. code-block:: python with proxy_context("local") as proxy: proxy.add_signal(...) The proxy type can be "local" or "remote". For remote proxy, the port can be specified as "remote:port". .. note:: The proxy context manager allows to use the proxy in various contexts (Python script, Jupyter notebook, etc.). It also allows to switch seamlessly between local and remote proxy, keeping the same code inside the context. .. autofunction:: proxy_context Calling processor methods using proxy objects ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ All the proxy objects provide access to the DataLab computing methods exposed by the processor classes: - :class:`datalab.gui.processor.signal.SignalProcessor` - :class:`datalab.gui.processor.image.ImageProcessor` To run a computation feature associated to a processor, you can use the :meth:`calc` method of the proxy object: .. code-block:: python # Call a method without parameter proxy.calc("average") # Call a method with parameters p = sigima.params.MovingAverageParam.create(n=30) proxy.calc("moving_average", p) """ from __future__ import annotations from collections.abc import Generator from contextlib import contextmanager import guidata.dataset as gds import numpy as np from sigima import ImageObj, SignalObj from datalab.control.baseproxy import BaseProxy from datalab.control.remote import RemoteClient from datalab.utils import qthelpers as qth class RemoteProxy(RemoteClient): """DataLab remote proxy class. This class provides access to DataLab features from a proxy class. This is the remote version of proxy, which is used when DataLab is started from a different process than the proxy. Args: autoconnect: Automatically connect to DataLab XML-RPC server. Raises: ConnectionRefusedError: Unable to connect to DataLab ValueError: Invalid timeout (must be >= 0.0) ValueError: Invalid number of retries (must be >= 1) Examples: Here is a simple example of how to use RemoteProxy in a Python script or in a Jupyter notebook: >>> from datalab.control.proxy import RemoteProxy >>> proxy = RemoteProxy() Connecting to DataLab XML-RPC server...OK (port: 28867) >>> proxy.get_version() '1.0.0' >>> proxy.add_signal("toto", np.array([1., 2., 3.]), np.array([4., 5., -1.])) True >>> proxy.get_object_titles() ['toto'] >>> proxy["toto"] # from title >>> proxy[1] # from number >>> proxy[1].data array([1., 2., 3.]) >>> proxy.set_current_panel("image") """ def __init__(self, autoconnect: bool = True) -> None: super().__init__() if autoconnect: self.connect() class LocalProxy(BaseProxy): """DataLab local proxy class. This class provides access to DataLab features from a proxy class. This is the local version of proxy, which is used when DataLab is started from the same process as the proxy. Args: datalab (DLMainWindow): DLMainWindow instance. """ def add_signal( self, title: str, xdata: np.ndarray, ydata: np.ndarray, xunit: str = "", yunit: str = "", xlabel: str = "", ylabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add signal data to DataLab. Args: title: Signal title xdata: X data ydata: Y data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" group_id: group id in which to add the signal. Defaults to "" set_current: if True, set the added signal as current Returns: True if signal was added successfully, False otherwise Raises: ValueError: Invalid xdata dtype ValueError: Invalid ydata dtype """ return self._datalab.add_signal( title, xdata, ydata, xunit, yunit, xlabel, ylabel, group_id, set_current ) def add_image( self, title: str, data: np.ndarray, xunit: str = "", yunit: str = "", zunit: str = "", xlabel: str = "", ylabel: str = "", zlabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add image data to DataLab. Args: title: Image title data: Image data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" zunit: Z unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" zlabel: Z label. Defaults to "" group_id: group id in which to add the image. Defaults to "" set_current: if True, set the added image as current Returns: True if image was added successfully, False otherwise Raises: ValueError: Invalid data dtype """ return self._datalab.add_image( title, data, xunit, yunit, zunit, xlabel, ylabel, zlabel, group_id, set_current, ) def add_object( self, obj: SignalObj | ImageObj, group_id: str = "", set_current: bool = True ) -> None: """Add object to DataLab. Args: obj: Signal or image object group_id: group id in which to add the object. Defaults to "" set_current: if True, set the added object as current """ self._datalab.add_object(obj, group_id, set_current) def calc(self, name: str, param: gds.DataSet | None = None) -> None: """Call computation feature ``name`` .. note:: This calls either the processor's ``compute_`` method (if it exists), or the processor's ```` computation feature (if it is registered, using the ``run_feature`` method). It looks for the function in all panels, starting with the current one. Args: name: Compute function name param: Compute function parameter. Defaults to None Raises: ValueError: unknown function """ return self._datalab.calc(name, param) def get_object( self, nb_id_title: int | str | None = None, panel: str | None = None ) -> SignalObj | ImageObj: """Get object (signal/image) from index. Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object) panel: Panel name. Defaults to None (current panel) Returns: Object Raises: KeyError: if object not found """ return self._datalab.get_object(nb_id_title, panel) def get_object_shapes( self, nb_id_title: int | str | None = None, panel: str | None = None, ) -> list: """Get plot item shapes associated to object (signal/image). Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object) panel: Panel name. Defaults to None (current panel) Returns: List of plot item shapes """ return self._datalab.get_object_shapes(nb_id_title, panel) def add_annotations_from_items( self, items: list, refresh_plot: bool = True, panel: str | None = None ) -> None: """Add object annotations (annotation plot items). Args: itemsTrue: annotation plot items refresh_plotTrue: refresh plot. Defaults to True panel: panel name (valid values: "signal", "image"). If None, current panel is used """ self._datalab.add_annotations_from_items(items, refresh_plot, panel) @contextmanager def proxy_context(what: str) -> Generator[LocalProxy | RemoteProxy, None, None]: """Context manager handling DL proxy creation and destruction. Args: what: proxy type ("local" or "remote") For remote proxy, the port can be specified as "remote:port" Yields: proxy LocalProxy if what == "local" RemoteProxy if what == "remote" or "remote:port" Example: with proxy_context("local") as proxy: proxy.add_signal(...) """ assert what == "local" or what.startswith("remote"), "Invalid proxy type" port = None if ":" in what: port = int(what.split(":")[1].strip()) if what == "local": # pylint: disable=import-outside-toplevel, cyclic-import from datalab.gui.main import DLMainWindow with qth.datalab_app_context(exec_loop=True): try: win = DLMainWindow() proxy = LocalProxy(win) win.show() yield proxy finally: pass else: try: proxy = RemoteProxy(autoconnect=False) proxy.connect(port) yield proxy finally: proxy.disconnect() DataLab-1.0.2/datalab/control/remote.py000066400000000000000000001030511511411446000177140ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab remote control ---------------------- This module provides utilities to control DataLab from a Python script (e.g. with Spyder) or from a Jupyter notebook. The :class:`RemoteClient` class provides the main interface to DataLab XML-RPC server. """ from __future__ import annotations import functools import sys import threading import time import warnings from collections.abc import Callable from typing import TYPE_CHECKING from xmlrpc.client import Binary, ServerProxy from xmlrpc.server import SimpleXMLRPCServer import guidata.dataset as gds import numpy as np from packaging.version import Version from qtpy import QtCore as QC from sigima.client import utils from sigima.objects import ImageObj, SignalObj, create_image, create_signal import datalab from datalab.adapters_plotpy import items_to_json, json_to_items from datalab.config import Conf, initialize from datalab.control.baseproxy import AbstractDLControl, BaseProxy from datalab.env import execenv if TYPE_CHECKING: from datalab.gui.main import DLMainWindow # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code def remote_call(func: Callable) -> object: """Decorator for method calling DataLab main window remotely""" @functools.wraps(func) def method_wrapper(*args, **kwargs): """Decorator wrapper function""" self = args[0] # extracting 'self' from method arguments self.is_ready = False output = func(*args, **kwargs) while not self.is_ready: QC.QCoreApplication.processEvents() time.sleep(0.05) return output return method_wrapper # Note: RemoteServer can't inherit from AbstractDLControl because it is a QThread # and most of the methods are not returning expected data types class RemoteServer(QC.QThread): """XML-RPC server QThread""" SIG_SERVER_PORT = QC.Signal(int) SIG_CLOSE_APP = QC.Signal() SIG_RAISE_WINDOW = QC.Signal() SIG_ADD_OBJECT = QC.Signal(object, str, bool) SIG_ADD_GROUP = QC.Signal(str, str, bool) SIG_LOAD_FROM_FILES = QC.Signal(list) SIG_LOAD_FROM_DIRECTORY = QC.Signal(str) SIG_SELECT_OBJECTS = QC.Signal(list, str) SIG_SELECT_GROUPS = QC.Signal(list, str) SIG_SELECT_ALL_GROUPS = QC.Signal(str) SIG_DELETE_METADATA = QC.Signal(bool, bool) SIG_SWITCH_TO_PANEL = QC.Signal(str) SIG_TOGGLE_AUTO_REFRESH = QC.Signal(bool) SIG_TOGGLE_SHOW_TITLES = QC.Signal(bool) SIG_RESET_ALL = QC.Signal() SIG_SAVE_TO_H5 = QC.Signal(str) SIG_OPEN_H5 = QC.Signal(list, bool, bool) SIG_IMPORT_H5 = QC.Signal(str, bool) SIG_CALC = QC.Signal(str, object) SIG_RUN_MACRO = QC.Signal(str) SIG_STOP_MACRO = QC.Signal(str) SIG_IMPORT_MACRO_FROM_FILE = QC.Signal(str) def __init__(self, win: DLMainWindow) -> None: QC.QThread.__init__(self) self.port: int = None self.is_ready = True self.server: SimpleXMLRPCServer | None = None self.win = win win.SIG_READY.connect(self.datalab_is_ready) win.SIG_CLOSING.connect(self.shutdown_server) self.SIG_CLOSE_APP.connect(win.close) self.SIG_RAISE_WINDOW.connect(win.raise_window) self.SIG_ADD_OBJECT.connect(win.add_object) self.SIG_ADD_GROUP.connect(win.add_group) self.SIG_LOAD_FROM_FILES.connect(win.load_from_files) self.SIG_LOAD_FROM_DIRECTORY.connect(win.load_from_directory) self.SIG_SELECT_OBJECTS.connect(win.select_objects) self.SIG_SELECT_GROUPS.connect(win.select_groups) self.SIG_SELECT_ALL_GROUPS.connect(lambda panel: win.select_groups(None, panel)) self.SIG_DELETE_METADATA.connect(win.delete_metadata) self.SIG_SWITCH_TO_PANEL.connect(win.set_current_panel) self.SIG_TOGGLE_AUTO_REFRESH.connect(win.toggle_auto_refresh) self.SIG_TOGGLE_SHOW_TITLES.connect(win.toggle_show_titles) self.SIG_RESET_ALL.connect(win.reset_all) self.SIG_SAVE_TO_H5.connect(win.save_to_h5_file) self.SIG_OPEN_H5.connect(win.open_h5_files) self.SIG_IMPORT_H5.connect(win.import_h5_file) self.SIG_CALC.connect(win.calc) self.SIG_RUN_MACRO.connect(win.run_macro) self.SIG_STOP_MACRO.connect(win.stop_macro) self.SIG_IMPORT_MACRO_FROM_FILE.connect(win.import_macro_from_file) def serve(self) -> None: """Start server and serve forever""" with SimpleXMLRPCServer( ("127.0.0.1", 0), logRequests=False, allow_none=True ) as server: self.server = server server.register_introspection_functions() self.register_functions(server) self.port = server.server_address[1] self.notify_port(self.port) with execenv.context(xmlrpcport=self.port): server.serve_forever() def shutdown_server(self) -> None: """Shutdown server""" if self.server is not None: self.server.shutdown() self.server = None def notify_port(self, port: int) -> None: """Notify automatically attributed port. This method is called after the server port has been automatically attributed. It notifies the port number to the main window. Args: port: Server port number """ self.SIG_SERVER_PORT.emit(port) @classmethod def check_remote_functions(cls) -> None: """Check if all AbstractDLControl methods are implemented in RemoteServer""" mlist = [] for method in AbstractDLControl.get_public_methods(): if not hasattr(cls, method): mlist.append(method) if mlist: raise RuntimeError(f"{cls} is missing some methods: {','.join(mlist)}") def register_functions(self, server: SimpleXMLRPCServer) -> None: """Register functions""" for name in AbstractDLControl.get_public_methods(): server.register_function(getattr(self, name)) def run(self) -> None: """Thread execution method""" if "coverage" in sys.modules: # The following is required to make coverage work with threading # pylint: disable=protected-access sys.settrace(threading._trace_hook) self.serve() def datalab_is_ready(self) -> None: """Called when DataLab is ready to process new requests""" self.is_ready = True @staticmethod def get_version() -> str: """Return DataLab public version""" return datalab.__version__ def close_application(self) -> None: """Close DataLab application""" self.SIG_CLOSE_APP.emit() def raise_window(self) -> None: """Raise DataLab window""" self.SIG_RAISE_WINDOW.emit() @remote_call def get_current_panel(self) -> str: """Return current panel name. Returns: Panel name (valid values: 'signal', 'image', 'macro') """ return self.win.get_current_panel() @remote_call def set_current_panel(self, panel: str) -> None: """Switch to panel. Args: panel: Panel name (valid values: 'signal', 'image', 'macro') """ self.SIG_SWITCH_TO_PANEL.emit(panel) @remote_call def toggle_auto_refresh(self, state: bool) -> None: """Toggle auto refresh state. Args: state: True to enable auto refresh, False to disable it """ self.SIG_TOGGLE_AUTO_REFRESH.emit(state) @remote_call def toggle_show_titles(self, state: bool) -> None: """Toggle show titles state. Args: state: True to enable show titles, False to disable it """ self.SIG_TOGGLE_SHOW_TITLES.emit(state) @remote_call def reset_all(self) -> None: """Reset all application data""" self.SIG_RESET_ALL.emit() @remote_call def save_to_h5_file(self, filename: str) -> None: """Save to a DataLab HDF5 file. Args: filename: HDF5 file name (with extension .h5) """ self.SIG_SAVE_TO_H5.emit(filename) @remote_call def open_h5_files( self, h5files: list[str] | None = None, import_all: bool | None = None, reset_all: bool | None = None, ) -> None: """Open a DataLab HDF5 file or import from any other HDF5 file. Args: h5files: HDF5 file names. Defaults to None. import_all: Import all objects from HDF5 file. Defaults to None. reset_all: Reset all application data. Defaults to None. """ import_all = True if import_all is None else import_all reset_all = False if reset_all is None else reset_all self.SIG_OPEN_H5.emit(h5files, import_all, reset_all) @remote_call def import_h5_file(self, filename: str, reset_all: bool | None = None) -> None: """Open DataLab HDF5 browser to Import HDF5 file. Args: filename: HDF5 file name reset_all: Reset all application data. Defaults to None. """ reset_all = False if reset_all is None else reset_all self.SIG_IMPORT_H5.emit(filename, reset_all) @remote_call def load_from_files(self, filenames: list[str]) -> None: """Open objects from files in current panel (signals/images). Args: filenames: list of file names """ self.SIG_LOAD_FROM_FILES.emit(filenames) @remote_call def load_from_directory(self, path: str) -> None: """Open objects from directory in current panel (signals/images). Args: path: directory path """ self.SIG_LOAD_FROM_DIRECTORY.emit(path) @remote_call def add_signal( self, title: str, xbinary: Binary, ybinary: Binary, xunit: str = "", yunit: str = "", xlabel: str = "", ylabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add signal data to DataLab. Args: title: Signal title xbinary: X data ybinary: Y data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" group_id: group id in which to add the signal. Defaults to "" set_current: if True, set the added signal as current Returns: True if successful """ xdata = utils.rpcbinary_to_array(xbinary) ydata = utils.rpcbinary_to_array(ybinary) signal = create_signal(title, xdata, ydata) signal.xunit = xunit or "" # In case xunit is None signal.yunit = yunit or "" # In case yunit is None signal.xlabel = xlabel or "" # In case xlabel is None signal.ylabel = ylabel or "" # In case ylabel is None self.SIG_ADD_OBJECT.emit(signal, group_id, set_current) return True @remote_call def add_image( self, title: str, zbinary: Binary, xunit: str = "", yunit: str = "", zunit: str = "", xlabel: str = "", ylabel: str = "", zlabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add image data to DataLab. Args: title: Image title zbinary: Z data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" zunit: Z unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" zlabel: Z label. Defaults to "" group_id: group id in which to add the image. Defaults to "" set_current: if True, set the added image as current Returns: True if successful """ data = utils.rpcbinary_to_array(zbinary) image = create_image(title, data) image.xunit = xunit or "" # In case xunit is None image.yunit = yunit or "" # In case yunit is None image.zunit = zunit or "" # In case zunit is None image.xlabel = xlabel or "" # In case xlabel is None image.ylabel = ylabel or "" # In case ylabel is None image.zlabel = zlabel or "" # In case zlabel is None self.SIG_ADD_OBJECT.emit(image, group_id, set_current) return True @remote_call def add_object( self, obj_data: list[str], group_id: str = "", set_current: bool = True ) -> bool: """Add object to DataLab. Args: obj_data: Object data group_id: Group id in which to add the object. Defaults to "" set_current: if True, set the added object as current Returns: True if successful """ obj = utils.rpcjson_to_dataset(obj_data) self.SIG_ADD_OBJECT.emit(obj, group_id, set_current) return True @remote_call def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: """Return selected objects uuids. Args: include_groups: If True, also return objects from selected groups. Returns: List of selected objects uuids. """ return self.win.get_sel_object_uuids(include_groups) @remote_call def add_group( self, title: str, panel: str | None = None, select: bool = False ) -> None: """Add group to DataLab. Args: title: Group title panel: Panel name (valid values: "signal", "image"). Defaults to None. select: Select the group after creation. Defaults to False. """ self.SIG_ADD_GROUP.emit(title, panel, select) @remote_call def select_objects( self, selection: list[int | str], panel: str | None = None, ) -> None: """Select objects in current panel. Args: selection: List of object numbers (1 to N) or uuids to select panel: panel name (valid values: "signal", "image"). If None, current panel is used. Defaults to None. """ self.SIG_SELECT_OBJECTS.emit(selection, panel) @remote_call def select_groups( self, selection: list[int | str] | None = None, panel: str | None = None ) -> None: """Select groups in current panel. Args: selection: List of group numbers (1 to N), or list of group uuids, or None to select all groups. Defaults to None. panel: panel name (valid values: "signal", "image"). If None, current panel is used. Defaults to None. """ if selection is None: self.SIG_SELECT_ALL_GROUPS.emit(panel) else: self.SIG_SELECT_GROUPS.emit(selection, panel) @remote_call def delete_metadata( self, refresh_plot: bool = True, keep_roi: bool = False ) -> None: """Delete metadata of selected objects Args: refresh_plot: Refresh plot. Defaults to True. keep_roi: Keep ROI. Defaults to False. """ self.SIG_DELETE_METADATA.emit(refresh_plot, keep_roi) @remote_call def calc(self, name: str, param_data: list[str] | None = None) -> bool: """Call computation feature ``name`` .. note:: This calls either the processor's ``compute_`` method (if it exists), or the processor's ```` computation feature (if it is registered, using the ``run_feature`` method). It looks for the function in all panels, starting with the current one. Args: name: Compute function name param_data: Compute function parameters. Defaults to None. Returns: True if successful, False otherwise """ if param_data is None: param = None else: param = utils.rpcjson_to_dataset(param_data) self.SIG_CALC.emit(name, param) return True @remote_call def get_group_titles_with_object_info( self, ) -> tuple[list[str], list[list[str]], list[list[str]]]: """Return groups titles and lists of inner objects uuids and titles. Returns: Groups titles, lists of inner objects uuids and titles """ return self.win.get_group_titles_with_object_info() @remote_call def get_object_titles(self, panel: str | None = None) -> list[str]: """Get object (signal/image) list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name (valid values: "signal", "image", "macro"). If None, current data panel is used (i.e. signal or image panel). Returns: List of object titles """ return self.win.get_object_titles(panel) @remote_call def get_object( self, nb_id_title: int | str | None = None, panel: str | None = None, ) -> list[str]: """Get object (signal/image) from index. Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: Object Raises: KeyError: if object not found """ obj = self.win.get_object(nb_id_title, panel) if obj is None: return None return utils.dataset_to_rpcjson(obj) @remote_call def get_object_uuids( self, panel: str | None = None, group: int | str | None = None ) -> list[str]: """Get object (signal/image) uuid list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name (valid values: "signal", "image"). If None, current panel is used. group: Group number, or group id, or group title. Defaults to None (all groups). Returns: Object uuids """ return self.win.get_object_uuids(panel, group) @remote_call def get_object_shapes( self, nb_id_title: int | str | None = None, panel: str | None = None, ) -> list: """Get plot item shapes associated to object (signal/image). Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: List of plot item shapes """ items = self.win.get_object_shapes(nb_id_title, panel) return items_to_json(items) @remote_call def add_annotations_from_items( self, items_json: str, refresh_plot: bool = True, panel: str | None = None ) -> None: """Add object annotations (annotation plot items). Args: items_json: JSON string of annotation items refresh_plot: refresh plot. Defaults to True. panel: panel name (valid values: "signal", "image"). If None, current panel is used. """ items = json_to_items(items_json) if items: self.win.add_annotations_from_items(items, refresh_plot, panel) @remote_call def add_label_with_title( self, title: str | None = None, panel: str | None = None ) -> None: """Add a label with object title on the associated plot Args: title: Label title. Defaults to None. If None, the title is the object title. panel: panel name (valid values: "signal", "image"). If None, current panel is used. """ self.win.add_label_with_title(title, panel) @remote_call def run_macro(self, number_or_title: int | str | None = None) -> None: """Run macro. Args: number: Number of the macro (starting at 1). Defaults to None (run current macro, or does nothing if there is no macro). """ self.SIG_RUN_MACRO.emit(number_or_title) @remote_call def stop_macro(self, number_or_title: int | str | None = None) -> None: """Stop macro. Args: number: Number of the macro (starting at 1). Defaults to None (stop current macro, or does nothing if there is no macro). """ self.SIG_STOP_MACRO.emit(number_or_title) @remote_call def import_macro_from_file(self, filename: str) -> None: """Import macro from file Args: filename: Filename. """ self.SIG_IMPORT_MACRO_FROM_FILE.emit(filename) RemoteServer.check_remote_functions() # === Python 2.7 client side: # # # See doc/remotecontrol_py27.py for an almost complete Python 2.7 # # implementation of RemoteClient class # # import io # from xmlrpclib import ServerProxy, Binary # import numpy as np # def array_to_binary(data): # """Convert NumPy array to XML-RPC Binary object, with shape and dtype""" # dbytes = io.BytesIO() # np.save(dbytes, data, allow_pickle=False) # return Binary(dbytes.getvalue()) # s = ServerProxy("http://127.0.0.1:8000") # data = np.array([[3, 4, 5], [7, 8, 0]], dtype=np.uint16) # s.add_image("toto", array_to_binary(data)) def get_datalab_xmlrpc_port() -> str: """Return DataLab current XML-RPC port Returns: XML-RPC port Raises: ConnectionRefusedError: DataLab has not yet been executed """ # The following is valid only when using Python 3.9+ with DataLab # installed on the client side. In any other situation, please use the # ``get_datalab_xmlrpc_port`` function from doc/remotecontrol_py27.py. initialize() try: return Conf.main.rpc_server_port.get() except RuntimeError as exc: raise ConnectionRefusedError("DataLab has not yet been executed") from exc class RemoteClient(BaseProxy): """Object representing a proxy/client to DataLab XML-RPC server. This object is used to call DataLab functions from a Python script. Examples: Here is a simple example of how to use RemoteClient in a Python script or in a Jupyter notebook: >>> from datalab.remote import RemoteClient >>> proxy = RemoteClient() >>> proxy.connect() Connecting to DataLab XML-RPC server...OK (port: 28867) >>> proxy.get_version() '1.0.0' >>> proxy.add_signal("toto", np.array([1., 2., 3.]), np.array([4., 5., -1.])) True >>> proxy.get_object_titles() ['toto'] >>> proxy["toto"] >>> proxy[1] >>> proxy[1].data array([1., 2., 3.]) """ def __init__(self) -> None: super().__init__() self.port: str | None = None self._datalab: ServerProxy def set_port(self, port: str | None = None) -> None: """Set XML-RPC port to connect to. Args: port: XML-RPC port to connect to. If None, the port is automatically retrieved from DataLab configuration. """ execenv.print(f"Setting XML-RPC port... [input:{port}] ", end="") port_str = "" if port is None: port = execenv.xmlrpcport port_str = f"→[execenv.xmlrpcport:{port}] " if port is None: port = get_datalab_xmlrpc_port() port_str = f"→[Conf.main.rpc_server_port:{port}] " execenv.print(port_str, end="") self.port = port if port is None: execenv.print("KO") raise ConnectionRefusedError("DataLab XML-RPC port is not set") execenv.print("OK") def __connect_to_server(self) -> None: """Connect to DataLab XML-RPC server. Args: port: XML-RPC port to connect to. Raises: ConnectionRefusedError: DataLab is currently not running """ self._datalab = ServerProxy(f"http://127.0.0.1:{self.port}", allow_none=True) try: version = self.get_version() except ConnectionRefusedError as exc: raise ConnectionRefusedError("DataLab is currently not running") from exc # If DataLab version is not compatible with this client, show a warning server_ver = Version(version) client_ver = Version(datalab.__version__) if server_ver < client_ver: warnings.warn( f"DataLab server version ({server_ver}) may not be fully compatible " f"with this DataLab client version ({client_ver}).\n" f"Please upgrade the server to {client_ver} or higher." ) def connect( self, port: str | None = None, timeout: float | None = None, retries: int | None = None, ) -> None: """Try to connect to DataLab XML-RPC server. Args: port: XML-RPC port to connect to. If not specified, the port is automatically retrieved from DataLab configuration. timeout: Maximum time to wait for connection in seconds. Defaults to 5.0. This is the total maximum wait time, not per retry. retries: Number of retries. Defaults to 10. This parameter is deprecated and will be removed in a future version (kept for backward compatibility). Raises: ConnectionRefusedError: Unable to connect to DataLab ValueError: Invalid timeout (must be >= 0.0) ValueError: Invalid number of retries (must be >= 1) """ timeout = 5.0 if timeout is None else timeout retries = 10 if retries is None else retries # Kept for backward compatibility if timeout < 0.0: raise ValueError("timeout must be >= 0.0") if retries < 1: raise ValueError("retries must be >= 1") execenv.print(f"Connecting to DataLab XML-RPC server... [port:{port}] ", end="") # Use exponential backoff for more efficient retrying start_time = time.time() poll_interval = 0.1 # Start with 100ms max_poll_interval = 1.0 # Cap at 1 second while True: try: # Try to set the port - this may fail if DataLab hasn't written its # config file yet, so we retry it in the loop self.set_port(port) self.__connect_to_server() elapsed = time.time() - start_time execenv.print(f"OK (port: {self.port}, connected in {elapsed:.1f}s)") return except (ConnectionRefusedError, OSError) as exc: # Catch both ConnectionRefusedError and OSError (includes socket errors) elapsed = time.time() - start_time if elapsed >= timeout: execenv.print("KO") raise ConnectionRefusedError( f"Unable to connect to DataLab after {elapsed:.1f}s" ) from exc # Wait before next retry with exponential backoff time.sleep(poll_interval) poll_interval = min(poll_interval * 1.5, max_poll_interval) def disconnect(self) -> None: """Disconnect from DataLab XML-RPC server.""" # This is not mandatory with XML-RPC, but if we change protocol in the # future, it may be useful to have a disconnect method. self._datalab = None def is_connected(self) -> bool: """Return True if connected to DataLab XML-RPC server.""" if self._datalab is not None: try: self.get_version() return True except ConnectionRefusedError: self._datalab = None return False def get_method_list(self) -> list[str]: """Return list of available methods.""" return self._datalab.system.listMethods() # === Following methods should match the register functions in XML-RPC server def add_signal( self, title: str, xdata: np.ndarray, ydata: np.ndarray, xunit: str = "", yunit: str = "", xlabel: str = "", ylabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add signal data to DataLab. Args: title: Signal title xdata: X data ydata: Y data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" group_id: group id in which to add the signal. Defaults to "" set_current: if True, set the added signal as current Returns: True if signal was added successfully, False otherwise Raises: ValueError: Invalid xdata dtype ValueError: Invalid ydata dtype """ obj = SignalObj() obj.set_xydata(xdata, ydata) obj.check_data() xbinary = utils.array_to_rpcbinary(xdata) ybinary = utils.array_to_rpcbinary(ydata) return self._datalab.add_signal( title, xbinary, ybinary, xunit, yunit, xlabel, ylabel, group_id, set_current ) def add_image( self, title: str, data: np.ndarray, xunit: str = "", yunit: str = "", zunit: str = "", xlabel: str = "", ylabel: str = "", zlabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add image data to DataLab. Args: title: Image title data: Image data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" zunit: Z unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" zlabel: Z label. Defaults to "" group_id: group id in which to add the image. Defaults to "" set_current: if True, set the added image as current Returns: True if image was added successfully, False otherwise Raises: ValueError: Invalid data dtype """ obj = ImageObj() obj.data = data obj.check_data() zbinary = utils.array_to_rpcbinary(data) return self._datalab.add_image( title, zbinary, xunit, yunit, zunit, xlabel, ylabel, zlabel, group_id, set_current, ) def add_object( self, obj: SignalObj | ImageObj, group_id: str = "", set_current: bool = True, ) -> None: """Add object to DataLab. Args: obj: Signal or image object group_id: group id in which to add the object. Defaults to "" set_current: if True, set the added object as current """ obj_data = utils.dataset_to_rpcjson(obj) self._datalab.add_object(obj_data, group_id, set_current) def calc(self, name: str, param: gds.DataSet | None = None) -> None: """Call computation feature ``name`` .. note:: This calls either the processor's ``compute_`` method (if it exists), or the processor's ```` computation feature (if it is registered, using the ``run_feature`` method). It looks for the function in all panels, starting with the current one. Args: name: Compute function name param: Compute function parameter. Defaults to None. Raises: ValueError: unknown function """ if param is None: return self._datalab.calc(name) return self._datalab.calc(name, utils.dataset_to_rpcjson(param)) def get_object( self, nb_id_title: int | str | None = None, panel: str | None = None, ) -> SignalObj | ImageObj: """Get object (signal/image) from index. Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: Object Raises: KeyError: if object not found """ param_data = self._datalab.get_object(nb_id_title, panel) if param_data is None: return None return utils.rpcjson_to_dataset(param_data) def get_object_shapes( self, nb_id_title: int | str | None = None, panel: str | None = None, ) -> list: """Get plot item shapes associated to object (signal/image). Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: List of plot item shapes """ items_json = self._datalab.get_object_shapes(nb_id_title, panel) return json_to_items(items_json) def add_annotations_from_items( self, items: list, refresh_plot: bool = True, panel: str | None = None ) -> None: """Add object annotations (annotation plot items). Args: items: annotation plot items refresh_plot: refresh plot. Defaults to True. panel: panel name (valid values: "signal", "image"). If None, current panel is used. """ items_json = items_to_json(items) if items_json is not None: self._datalab.add_annotations_from_items(items_json, refresh_plot, panel) DataLab-1.0.2/datalab/data/000077500000000000000000000000001511411446000153005ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/000077500000000000000000000000001511411446000164135ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/analysis.svg000066400000000000000000000145101511411446000207600ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/000077500000000000000000000000001511411446000202365ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/analysis/delete_results.svg000066400000000000000000000122301511411446000240000ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/fw1e2.svg000066400000000000000000000143401511411446000217050ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/fwhm.svg000066400000000000000000000143351511411446000217260ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/histogram.svg000066400000000000000000000041311511411446000227530ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/peak_detect.svg000066400000000000000000000123501511411446000232300ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/plot_results.svg000066400000000000000000000146661511411446000235330ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/show_results.svg000066400000000000000000000106211511411446000235200ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/analysis/stats.svg000066400000000000000000000037361511411446000221260ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/apply.svg000066400000000000000000000007251511411446000202650ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/check_all.svg000066400000000000000000000102201511411446000210340ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/collapse.svg000066400000000000000000000031731511411446000207420ustar00rootroot00000000000000 collapse DataLab-1.0.2/datalab/data/icons/collapse_selection.svg000066400000000000000000000042571511411446000230130ustar00rootroot00000000000000 collapse collapse DataLab-1.0.2/datalab/data/icons/console.svg000066400000000000000000000171311511411446000206010ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/000077500000000000000000000000001511411446000176565ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/create/1d-normal.svg000066400000000000000000000015271511411446000221760ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/1d-poisson.svg000066400000000000000000000012571511411446000224000ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/1d-uniform.svg000066400000000000000000000014751511411446000223670ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/1d-zero.svg000066400000000000000000000033161511411446000216630ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/2d-gaussian.svg000066400000000000000000000016351511411446000225210ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/2d-normal.svg000066400000000000000000000077531511411446000222060ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/2d-poisson.svg000066400000000000000000000075341511411446000224050ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/2d-ramp.svg000066400000000000000000000045301511411446000216430ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/2d-sinc.svg000066400000000000000000000024121511411446000216350ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/2d-uniform.svg000066400000000000000000000150701511411446000223640ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/2d-zero.svg000066400000000000000000000024571511411446000216710ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/checkerboard.svg000066400000000000000000000074071511411446000230230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/cosine.svg000066400000000000000000000031151511411446000216570ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/exponential.svg000066400000000000000000000032171511411446000227300ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/gaussian.svg000066400000000000000000000146541511411446000222230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/grating.svg000066400000000000000000000050531511411446000220350ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/linear_chirp.svg000066400000000000000000000014421511411446000230370ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/logistic.svg000066400000000000000000000013511511411446000222140ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/lorentzian.svg000066400000000000000000000144051511411446000225700ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/planck.svg000066400000000000000000000144001511411446000216460ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/polynomial.svg000066400000000000000000000013071511411446000225630ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/pulse.svg000066400000000000000000000031731511411446000215330ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/ring.svg000066400000000000000000000034721511411446000213440ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/sawtooth.svg000066400000000000000000000012161511411446000222470ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/siemens.svg000066400000000000000000000075201511411446000220460ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/sinc.svg000066400000000000000000000030131511411446000213300ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/sine.svg000066400000000000000000000013341511411446000213360ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/square.svg000066400000000000000000000012631511411446000217010ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/square_pulse.svg000066400000000000000000000012611511411446000231070ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/step.svg000066400000000000000000000011421511411446000213500ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/step_pulse.svg000066400000000000000000000026241511411446000225660ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/triangle.svg000066400000000000000000000012261511411446000222050ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/create/voigt.svg000066400000000000000000000144001511411446000215260ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit.svg000066400000000000000000000115461511411446000200700ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/000077500000000000000000000000001511411446000173405ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/edit/annotations.svg000066400000000000000000000042451511411446000224230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/annotations_copy.svg000066400000000000000000000075541511411446000234630ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/annotations_delete.svg000066400000000000000000000064171511411446000237500ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/annotations_edit.svg000066400000000000000000000055161511411446000234320ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/annotations_export.svg000066400000000000000000000050121511411446000240150ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/annotations_import.svg000066400000000000000000000050051511411446000240100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/annotations_paste.svg000066400000000000000000000071761511411446000236250ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/copy_titles.svg000066400000000000000000000100101511411446000224070ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/delete.svg000066400000000000000000000102511511411446000213220ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/delete_all.svg000066400000000000000000000201631511411446000221550ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/duplicate.svg000066400000000000000000000061111511411446000220320ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/goto_source.svg000066400000000000000000000052661511411446000224220ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/metadata.svg000066400000000000000000000046321511411446000216460ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/metadata_add.svg000066400000000000000000000055761511411446000224660ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/metadata_copy.svg000066400000000000000000000076351511411446000227060ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/metadata_delete.svg000066400000000000000000000064561511411446000231760ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/metadata_export.svg000066400000000000000000000051511511411446000232440ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/metadata_import.svg000066400000000000000000000051471511411446000232420ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/metadata_paste.svg000066400000000000000000000071561511411446000230460ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/move_down.svg000066400000000000000000000043261511411446000220630ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/move_up.svg000066400000000000000000000042541511411446000215400ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/new_group.svg000066400000000000000000000121171511411446000220700ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/recompute.svg000066400000000000000000000067441511411446000220770ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/edit/rename.svg000066400000000000000000000101211511411446000213230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/expand.svg000066400000000000000000000032131511411446000204120ustar00rootroot00000000000000 expand DataLab-1.0.2/datalab/data/icons/expand_selection.svg000066400000000000000000000042751511411446000224700ustar00rootroot00000000000000 expand expand DataLab-1.0.2/datalab/data/icons/fit/000077500000000000000000000000001511411446000171755ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/fit/cdf_fit.svg000066400000000000000000000044151511411446000213200ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/exponential_fit.svg000066400000000000000000000104771511411446000231170ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/gaussian_fit.svg000066400000000000000000000072271511411446000224020ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/interactive_fit.svg000066400000000000000000000104421511411446000230760ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/linear_fit.svg000066400000000000000000000034301511411446000220320ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/lorentzian_fit.svg000066400000000000000000000423561511411446000227570ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/multigaussian_fit.svg000066400000000000000000000203441511411446000234500ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/multilorentzian_fit.svg000066400000000000000000000203441511411446000240230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/piecewiseexponential_fit.svg000066400000000000000000000423561511411446000250160ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/planckian_fit.svg000066400000000000000000000072271511411446000225300ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/polynomial_fit.svg000066400000000000000000000055071511411446000227520ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/sigmoid_fit.svg000066400000000000000000000044151511411446000222170ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/sinusoidal_fit.svg000066400000000000000000000050351511411446000227350ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/twohalfgaussian_fit.svg000066400000000000000000000153531511411446000237660ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/fit/voigt_fit.svg000066400000000000000000000056551511411446000217230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/group.svg000066400000000000000000000111531511411446000202710ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/h5/000077500000000000000000000000001511411446000167275ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/h5/h5array.svg000066400000000000000000000053761511411446000210360ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/h5/h5attrs.svg000066400000000000000000000144021511411446000210430ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/h5/h5browser.svg000066400000000000000000000114651511411446000213770ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/h5/h5file.svg000066400000000000000000000052021511411446000206230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/h5/h5group.svg000066400000000000000000000130611511411446000210420ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/h5/h5scalar.svg000066400000000000000000000011661511411446000211560ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/help_pdf.svg000066400000000000000000000101071511411446000207140ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/history.svg000066400000000000000000000042741511411446000206440ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/image.svg000066400000000000000000000120221511411446000202130ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io.svg000066400000000000000000000056101511411446000175450ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/000077500000000000000000000000001511411446000170225ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/io/fileopen_directory.svg000066400000000000000000000040771511411446000234400ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/fileopen_h5.svg000066400000000000000000000073471511411446000217530ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/fileopen_ima.svg000066400000000000000000000134311511411446000221740ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/fileopen_py.svg000066400000000000000000000126401511411446000220570ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/fileopen_sig.svg000066400000000000000000000106601511411446000222110ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/filesave_h5.svg000066400000000000000000000100151511411446000217320ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/filesave_ima.svg000066400000000000000000000143661511411446000222010ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/filesave_py.svg000066400000000000000000000135641511411446000220620ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/filesave_sig.svg000066400000000000000000000116011511411446000222020ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/import_text.svg000066400000000000000000000352321511411446000221260ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/io/save_to_directory.svg000066400000000000000000000130061511411446000232670ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/libre-camera-flash-off.svg000066400000000000000000000005771511411446000233330ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-camera-flash-on.svg000066400000000000000000000002661511411446000231700ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-about.svg000066400000000000000000000005411511411446000221230ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-action-delete.svg000066400000000000000000000006731511411446000235340ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-add.svg000066400000000000000000000004641511411446000215450ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-arrow-down.svg000066400000000000000000000003131511411446000231050ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-arrow-left.svg000066400000000000000000000003161511411446000230730ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-arrow-right.svg000066400000000000000000000003141511411446000232540ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-arrow-up.svg000066400000000000000000000002771511411446000225730ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-close.svg000066400000000000000000000032741511411446000221240ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/libre-gui-cogs.svg000066400000000000000000000065711511411446000217550ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-globe.svg000066400000000000000000000120461511411446000221040ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-help.svg000066400000000000000000000023611511411446000217430ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-link.svg000066400000000000000000000011731511411446000217500ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-menu.svg000066400000000000000000000004261511411446000217570ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-pencil.svg000066400000000000000000000014001511411446000222560ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-plugin.svg000066400000000000000000000016401511411446000223100ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-questions.svg000066400000000000000000000010271511411446000230430ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-settings.svg000066400000000000000000000044671511411446000226640ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-gui-unlink.svg000066400000000000000000000013331511411446000223110ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-tech-ram.svg000066400000000000000000000022611511411446000217300ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/libre-toolbox.svg000066400000000000000000000015011511411446000217120ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/logs.svg000066400000000000000000000014411511411446000201000ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/markers.svg000066400000000000000000000045411511411446000206040ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/menu.svg000066400000000000000000000053641511411446000201100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/new_ima.svg000066400000000000000000000127171511411446000205630ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/new_sig.svg000066400000000000000000000077431511411446000206020ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/000077500000000000000000000000001511411446000205765ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/operations/abs.svg000066400000000000000000000067301511411446000220720ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/arithmetic.svg000066400000000000000000000105061511411446000234520ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/average.svg000066400000000000000000000100071511411446000227270ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/complex_from_magnitude_phase.svg000066400000000000000000000067301511411446000272340ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/complex_from_real_imag.svg000066400000000000000000000100071511411446000260070ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/constant.svg000066400000000000000000000067271511411446000231640ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/constant_add.svg000066400000000000000000000064751511411446000237740ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/constant_divide.svg000066400000000000000000000065021511411446000244770ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/constant_multiply.svg000066400000000000000000000065031511411446000251130ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/constant_subtract.svg000066400000000000000000000065011511411446000250610ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/convert_dtype.svg000066400000000000000000000264501511411446000242130ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/convolution.svg000066400000000000000000000051771511411446000237100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/deconvolution.svg000066400000000000000000000061321511411446000242110ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/derivative.svg000066400000000000000000000165731511411446000234750ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/difference.svg000066400000000000000000000035451511411446000234200ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/division.svg000066400000000000000000000106101511411446000231410ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/exp.svg000066400000000000000000000067151511411446000221240ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/flip_horizontally.svg000066400000000000000000000044041511411446000250710ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/flip_vertically.svg000066400000000000000000000046071511411446000245160ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/im.svg000066400000000000000000000100071511411446000217220ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/integral.svg000066400000000000000000000035231511411446000231270ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/inverse.svg000066400000000000000000000113251511411446000227740ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/log10.svg000066400000000000000000000064631511411446000222520ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/phase.svg000066400000000000000000000067301511411446000224250ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/power.svg000066400000000000000000000112671511411446000224620ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/product.svg000066400000000000000000000100141511411446000227730ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/profile.svg000066400000000000000000000270251511411446000227650ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/profile_average.svg000066400000000000000000000274261511411446000244640ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/profile_radial.svg000066400000000000000000000173031511411446000242770ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/profile_segment.svg000066400000000000000000000173201511411446000245040ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/quadratic_difference.svg000066400000000000000000000060121511411446000254450ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/re.svg000066400000000000000000000100051511411446000217210ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/rotate_left.svg000066400000000000000000000050441511411446000236320ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/rotate_right.svg000066400000000000000000000050441511411446000240150ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/signals_to_image.svg000066400000000000000000000326331511411446000246320ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/sqrt.svg000066400000000000000000000063441511411446000223170ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/std.svg000066400000000000000000000077701511411446000221240ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/operations/sum.svg000066400000000000000000000065271511411446000221350ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/play_demo.svg000066400000000000000000000021461511411446000211100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/000077500000000000000000000000001511411446000205675ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/processing/axis_transform.svg000066400000000000000000000044601511411446000243530ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/bandpass.svg000066400000000000000000000060441511411446000231070ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/bandstop.svg000066400000000000000000000055261511411446000231320ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/binning.svg000066400000000000000000000077011511411446000227410ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/clip.svg000066400000000000000000000145461511411446000222510ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/detrending.svg000066400000000000000000000142261511411446000234400ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/distribute_on_grid.svg000066400000000000000000000631701511411446000251760ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/edge_detection.svg000066400000000000000000000074151511411446000242610ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/erase.svg000066400000000000000000000022031511411446000224040ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/processing/exposure.svg000066400000000000000000000206751511411446000231740ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/fourier.svg000066400000000000000000000116631511411446000227720ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/highpass.svg000066400000000000000000000047311511411446000231230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/interpolation.svg000066400000000000000000000046151511411446000242050ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/level_adjustment.svg000066400000000000000000000055301511411446000246600ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/lowpass.svg000066400000000000000000000050201511411446000227750ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/morphology.svg000066400000000000000000000105501511411446000235100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/noise_addition.svg000066400000000000000000000076631511411446000243140ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/noise_reduction.svg000066400000000000000000000202111511411446000244750ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/normalize.svg000066400000000000000000000132021511411446000233060ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/offset_correction.svg000066400000000000000000000123471511411446000250340ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/resampling1d.svg000066400000000000000000000062641511411446000237060ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/resampling2d.svg000066400000000000000000000200041511411446000236730ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/reset_positions.svg000066400000000000000000000164731511411446000245540ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/resize.svg000066400000000000000000000033441511411446000226150ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/reverse_signal_x.svg000066400000000000000000000120511511411446000246460ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/stability.svg000066400000000000000000000010221511411446000233070ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/swap_x_y.svg000066400000000000000000000050461511411446000231460ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/thresholding.svg000066400000000000000000000066751511411446000240200ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/processing/windowing.svg000066400000000000000000000156411511411446000233240ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/properties.svg000066400000000000000000000215321511411446000213330ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/reset.svg000066400000000000000000000031001511411446000202500ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/restore.svg000066400000000000000000000024611511411446000206220ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/000077500000000000000000000000001511411446000172045ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/roi/roi.svg000066400000000000000000000103231511411446000205150ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_coordinate.svg000066400000000000000000000146741511411446000227410ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_copy.svg000066400000000000000000000133761511411446000215620ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_delete.svg000066400000000000000000000063101511411446000220400ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_export.svg000066400000000000000000000110231511411446000221140ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_graphical.svg000066400000000000000000000121401511411446000225260ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_grid.svg000066400000000000000000000200661511411446000215270ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_ima.svg000066400000000000000000000164431511411446000213540ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_import.svg000066400000000000000000000110131511411446000221040ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_new.svg000066400000000000000000000111611511411446000213670ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_new_circle.svg000066400000000000000000000116741511411446000227210ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_new_polygon.svg000066400000000000000000000123211511411446000231350ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_new_rectangle.svg000066400000000000000000000075001511411446000234150ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_paste.svg000066400000000000000000000130221511411446000217100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/roi/roi_sig.svg000066400000000000000000000105171511411446000213640ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/shapes.svg000066400000000000000000000101611511411446000204160ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/signal.svg000066400000000000000000000070021511411446000204100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/table.svg000066400000000000000000000107231511411446000202260ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/table_unavailable.svg000066400000000000000000000130631511411446000225710ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/to_signal.svg000066400000000000000000000074201511411446000211160ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/tour/000077500000000000000000000000001511411446000174045ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/tour/next.svg000066400000000000000000000033031511411446000211020ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/tour/previous.svg000066400000000000000000000032661511411446000220100ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/tour/rewind.svg000066400000000000000000000045741511411446000214270ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/tour/stop.svg000066400000000000000000000022451511411446000211150ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/tour/tour.svg000066400000000000000000000065031511411446000211220ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/uncheck_all.svg000066400000000000000000000117401511411446000214070ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/view/000077500000000000000000000000001511411446000173655ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/icons/view/curve_antialiasing.svg000066400000000000000000000031311511411446000237530ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/view/new_window.svg000066400000000000000000000064631511411446000222770ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/view/refresh-auto.svg000066400000000000000000000056711511411446000225230ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/view/refresh-manual.svg000066400000000000000000000053211511411446000230200ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/view/reset_curve_styles.svg000066400000000000000000000072311511411446000240420ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/view/show_first.svg000066400000000000000000000040271511411446000223000ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/view/show_titles.svg000066400000000000000000000033221511411446000224520ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/icons/visualization.svg000066400000000000000000000030451511411446000220370ustar00rootroot00000000000000 DataLab-1.0.2/datalab/data/logo/000077500000000000000000000000001511411446000162405ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/logo/DataLab-Banner-150.png000066400000000000000000000132651511411446000217530ustar00rootroot00000000000000PNG  IHDR,PA pHYsI-VtEXtSoftwarewww.inkscape.org<BIDATxy\SWI a}WYw׺b־Z}gji;8V#} kž$E3:/=<zOETvqIe33 &zX>?_ol:vo[HUpWVxoڦL48Żt:iN6!wWɇSj8hjAG*_)n4OھS\я-p~jsI$-^.väS>>{U@t3O]=g'֢i zb)__~q{]J![zlBqO  w"Ev ٌ*p ~2Mi@']CAxJKi*htgG!! 3g+4hXJvʌ|v>R ss.L&th4JRjjʵ~ùcdh@k4O 4tS*}\~P)D ss/^M55³utt^O\qMDv!q?-,\6g>tĥU CYilD'0(.*kknufԦaSEF^}ф D^ '\E-'~3a`yJVFw`iƬ5o2Tq4ʙ *l  8_G{ǿ&oVȄO9/|[36g/1ڶ65bDŽ5HRk4hb6[a2 cr42OAHz} f_ҮJaqDlq9fAAUۚϴɟi ր5w2K{m >GDITԀQ7QD,*o]{N0q[wf~'s 8A.W+ZP(?*g''DeU5tz`\] o=>k|>n(+yJ QWfma~0ďWTN 3H[5&U,& ٣>3XsuZ;% k:ADbW!l;R^+etZټK7k\D"Xr1%&"3~}P򱤣^ټ̫@Ԉ:2ZA^P'DiΤlrEF~%5m+6ݙQKn\5{.LάݟUzJc}]P,OU':T(P(7h俗^vUKkWf5z$߬-oy>* <~is?ΧK,Y:N B&fEkk{ 1)fk~Y_iUqPYm4Zb3QHJEW3פޮt,xKKrl_ohzY>:@[+œl&%RIӶb/Csu0*p2&#ac\R̙' q8r 뜙ޖ̳?mHvekdm:|૷7ee`Tj^1 |6o\Y!n]%YqVn]rVQoRɋBKtL&l6yQggK&K3V@(  VHƹ^Cmckk|B+C׹YY}38u$q9#mqEDyT+fX=DRiInq#rm,8)뇟RDx9H'tjJFݾVˍ=ξ4,CSfjvUa|MÃj8kEl10 dGk[Fp `Usƫc'S8X OwwW#t$%_Fcc=?7J*}\ DPFs˰^6D""Z2JyD|,i][Rnez[8ru0BG6>msTj =|l;-p&v24߲z, jUsƫDt4k97PJ}(Ü˕M1LDAPUEPQ(T֥uq ]>ޏ 03a>iCmS qwGr:aomY:5*$kn疊ݵѷt鳽D;bφn&J4لU='vhv#HT'r_L*?;7 \ 1G-esW6hc7h"up5,$΂2.dmP:{`f)ph6zQcWXmf )`Ȧf)T˓oդ:_ɏqc)ɒL煫ՃG[ H* >V^JFX ƑcY5A^N&ˆ/w5K$m/kexbEMHS!e >KzF^G=.nL:Eua5~X 珥I?Tz,Mόuz *xus÷U#$q!"{nf֥051Ïpן^o*ٶ6p!1Fq"4Z赫L =f;?ӕ+.ڰ@quۚWN$%^u6jiDr)_Iĉf/hRFjydH$M.:t/ f1iOTK,^{JaFivmHO-;.8LoJ% 5 \ώ,Ys2`y"6Eǫ7:~#*Um(jc?rLm}lώ1}iF;,kaн7/RШ$@ =|PRـmiugPIӊ9F{=%6[;N&u-"Ϥ4׷)ns3~1Eڲ3VFi.lJnvʌUݧ4-l+oYS"v۱>̚Qg$:]^VT,#x)s7_%eT4u.nq4j;]s[" HD A>suh~7xX<9T^p5̰4c6BiTRa搵lm˘C%ithp Qw6c7d]#$4v~7"zİz>#idqp?k3ֵH?Bx"N@!G̊$g˚' QPN#k܈siM ,ض6`(UTZSi:P5p7n}ߒ2kF *# X4\fܬGt60Oάy @NEOT 3nY`joZ* 7kSUkmZut\7b"AѵU? e@ "* ?AC%M!/D9, %#PIjsV/I8Zth=lr"q{ Pz:ע.Pǥ5[9WܐӾacj6(i:z,=JA|_66HN"囖yv)й׻{cp_۳Feg.Ky*d-t0x.ܳ;̔S|罕G/EH:,9Y+_+o 앛QIS#(LK/uשU 7E:"q{2/c4t2>z-/#Ty-kT ʚ^ K'3I$0ӇӉՋҫ}]O$kz7"̞a6Ю^˶?LoyO?Sa63d,n}IF +5[TԺƌ0_KTwo {F!!5nfS_~?ҥq6݇q&4S֛+~q֯e.RH_3l&J!CrGJ gpւ٤Z5ͿqXCP)96'm } ݄RkWтn|5\#RiRk wQ}gsW~-X5+5J @/;kNu[eseY\J>Cԑ:F[mIv\-z=T w{cŎ3|>9p(R)ɎKń;wq13DG6F;m cDnEgʌUrvOAy+ j:$a1lL3Tmn1J|;7Š~7"ݽ  l5_yGClk珣~{nqya]:C9t F:ݭy%R񢰩ӕF#9Wka w8ab^) pHYsyy ,tEXtSoftwarewww.inkscape.org< IDATxgxUǿS2)^!$$I",ʺmQW`WWz3!{m&m2$/"63 r/ss%t:1cftf!J@%lfŃVŷZ޻pzrNYZ{Ti ,ŸfMNss,3FAx@{6ٗ~s#Bz͘$"OĪ\k>a̘1+V{Lj\1a} tO?9Mn eƌRAD-oxՁ  œagNj%1̲ٱpO1cW~ E䵊N x8ѧ4:n@̲>U3j'`ivJ0ixjq!H8x?1s?܏dxϵ[uhpip`ǕZoZZRQ|x3JCy]WX[obf/A\ΦUezڻa'`b o;)9y^Q[Wu=ALn8j¹J1czwf,yHR[F$-& Rُ?̐HD"1Q2O5ZW:ړ2[>Co&c5KQ"E}K:⓿'.pT5cPQv8W<͵SV [Ϟ'@@&$8nF^y<\'[2; 3`iy򗷇3G.}-KoZ(DHhp9H݌ҶiCV/S˹y)%;wyo/ϕ㖖S24*3C]-Z@@Rr|}Qq Q@>K%,TP--jJVj'dZfV p9){&3Fc86Kd`өWKj[ PK$hhl$" *łBb8?,\&3 S+ 74PmX drFWY4;S'.@mrѰ`׮H &;f > ܝԷ#/y.ֳP(˯pڐqw:9ghB`-<6]Ҩ4KIhfV ΅؝7d_ƕ'^pR˙8!^ӽ^-܆E-l;vӯ9 "qh Rw__B1~`"H,0p1i(F,~aS BC&d_@ikՔb fPwύu6# d205&!AAPվ# X0/ CةߨzxH~A @oUH[pM٩1VE3~XemSDH O65:9:(2V`SPeI==tjk\Uڭ٩MT?0D *!呅 ^͜yE}?,Y0ne-;thnclX'S*=xi#Bҍ^(Ljjf Ƀ@$W?ݷ!4@a\],楌HJg 9⽤N" \WTV"0:qM.;Y>% 3R䔪5)m'CS-TZ;9RFs~xe]Xc2R U /asЊsE-܆өU\*>C8C/c*;\R`jf}>/8rlnm,9x9ZsؔV:/+:~3k?[\T-Aٯ}Ad"|scـB Q[OB+F%u=KZo5Z:7#}%F:5t>F; }\y$畋q!ѩAGKJh1scą: sztJ[k{7]U3yT\U̲voZ߭wvIy(믏5ښSw\lR_!9r_{"zXյ۝^K~$">w;i#Ԉ67j?hΊeJh})>s~ wAF:la2G$$wUPBG.vlh}0oE,:UʪS#\78 #B8;/g7oq'Vâ62dNI/]0M]0&pIodDxOC+ |CR¥˴ X,T(V nN2E-N/ܨBs7n(oϵѿ{oeڛ5Z=cpqK UQg<"@6Z]WkFen^nL}`}"Ӻ/G8P~gU.r䫣yQYtl .1oݜXy O6}FGOggᾶ1vޗłH;ٲQ؍O~}# qF;ǡa<KGGEfcVR"qT2Z~9'RV^Ʀ;bI%@֧\#V4ZbۦG{Npd0ykXt.!uԷm\+cX׶6kjN4Xyk4wm;]X932Ib$6K.2 _aO߀]6ǀ&߫y}*wo;OSrW`So}m fpiA&D&5Dd4M okz!F9$L{( H!N{ iǙ6%*(/`0¼gy٤u~t n0+&?&US)$mmKUtTd0ܨE$;͙YYKZ_M$Q (8aYlznihCDcYJM#%XN r5j!twbh{&bg[^o8Z?qx3X OoN%[r5aw466X8pTUW#;' #ݲWvIXwKe VD jLLbl`3)FgMtK 3~5D6,k? WYj3Z%)G\E!v߾;‚ofq"BHpOŴo/ VVUbbY&ݻc2[3+_"{4rh4Zk9?'2ݢƒe@c#iB @LAU|ZM\ P,_ګdGĩD b=y{]p͠b:WP(8rjF4nimx_[!sYsI*q0icv@\a,>; L E6#ڈ. ^ϪC*w2tHOWD/7T\d͜զq"J)p{/ n>Na8 9alcyۜ prFd2CM$ֆO/ۅ-a%cj4,#^J5f>q&kuP 3Vee[gQFD( 0=}Oŝ͒ZG^0k8k?{}ƄHݪN)H4CY3OT5v]`e\Qk}*⫛MDsbN 6:w.*Rfsq5z{S<]FPR,n~ِM ?eEJƅ:@jvcCJVIz9ߨJNxÐfUuV<2`MoOF%S+>~SP!lcL"šGȆ ozۃmmh'5wϒmHFxz#,,;` %eߟ) %EqӜG w>U0u\߭Yl '#->i'L7ckF~C{N|vfΉ5ΥU˨h#VS*Qɶ3 *79Y)UK.\cűLt0Qk9Z"6رyzqHW]kh,Efa3<? H\g?w19O回ҿ@eĄx:MƟ_;NgkIv:|4@!Җ%_~'(GLiVc9|VGSVg f78^Ğ H9 (Cx:d9Gs=RqZ*8w|qe[]r *狫$YǮmHFyc|-k:rfݓ=VvԴs\jQW;ˑq 2R*W2kq%mg 岙N?h)&#CJ ՑXR`v_Hd(,Y@*ԯT4+i`%,.=}`Oci 'ߦ?SŤ*%#y0"!%~gW700AlY4ې63\~ |z0kCa)'M;|@9 dϼUb`߲Oo֤W[D6wq^6H=+vioO}~0;bLi.99r(z ̆ey⇎\,R(ՄOE)m H6G3O.hNhuSμ2e6W /p ImcGY]WLnykRrjet[eQ5W?C ~㏓vWi T-3*PK.$Woh}tG[rʭZwzmb[:]wn32t4- ~H Bw`#WjcZ{xU ty ,:EnEĥ(^/>rMT R%ou$7DwGN܎i"%>qaNwap8!;ϙ`bagm8; Z#}y4'Jf˕ڵ"5vBY-n袨Z8ٱV/8O7[6 OuXaI!X^"mXy[gC)ǝ _wtՂ Kc.1_v)־{<'vo7> ꚇ+.iŊWmyqFP>0fHahur&"s Gzd8زO6*j +ocgppц\6C<>-`[l͉)TIw+ϝo{֥7sJ[m+ *$"`3E^^WFm4%7.ܹN%-{SڸpgilF.tqqrYpF.jc[pH۞I";=Gƅ;9 "|ztܖO'*CEI"9emsd6KI4"L?IuzLGai^xd7L$qLlݐcKq YzIP0YJ"OڵKC'zyu݋:{tZz&~OU~9#>(*4D^'YcѺlՁ޶0|T [kHY^}AVkjz"J[㻻"֬7V;O _Κ+0|O,j!UX)dOk t:bAoX}AW_8L[ӉF "NfI/2򛐖׈1"*f)>?7 ]wA 1[^E4cP ]_Uj+Paၪ"& e)}gR*'US:~\شv*j|':03͒^Vv457$mf)o+3`:^]u7H aêH 6WLN }<Uc0'c@Thu:$FC1^qs3df1WYTsyo{/oIpq@&Q\ݎ>$EÒBCYt;zsM,,K 4-œ,n-I5ʌ1h~E}ׅu[·4 ;WFo`D"b{u^+/[t#&# # 4߶t10cf"Ho1EqLiJ~ۧĥ5  xШ(nvH8NCAiJvI+ZKCU܊{PCc@=fdqgԊEɩU M4*>ZG! {8;TJ6;9cњg>O >=L;u%~'b̽BA?=\/u IҀä*Vnɷ1b6v˙%5pckV- xB"I{dG *nE]BBO3# SCpȊM;MBh?^kwks(^ȱ3_hX$q=){5+'dG2)&bF&ZfsG{\T\V Щ\ŕYap=sgC}âq !}fی߷P]eS0(x/+%@;;U_HB&!o;QEcwO 5E,I#Y {l\J3 560u=O|z d`R8'9r,W\.KMQ* ޡ~Kb!C9eKq1PT9220e|[ jGȀay @`SSSls .kq{{c~~>-O1 */'=% WN`ު43gw޹?ƪPV b+x#,ø_qj3D}`V{kJdbcLtǡKO,kZr)KjS+emj/ٹzn,qbCnzAcYD\PjgL)aYDeT?UqΜ' C]vw`mYzbO~{IT}3`!?QȹMÌJcBT5e,q|u5ڿվX0W}R0 ͮq֝ŵjo[FttA@Gg'[ZԄCk8in|ױݛpitxnOIs=֥v''`ʘ7/c ]|o[|[J=4d|靟G]~wG}: ; "UI9#>R[tm/􆵹n$.(j}zԧL¶Džk~73*wboSX|߻G9BʙU_.=~9=cu'C;_TrӰ֘ôjŸ׺[FDk>{mjepEFř̪7n-"JeDttJ%jjjOMMM_;bOɥA=jT[)wл~*~ծq8y˦=1 +Wߑh HEkn%kǒ+rbڗ-HxFAny'ƒݞܘ3?fm~j|RB~?}Μl2L`tdZo$c'M/p2H8}Ʃ Tݛb]+"C47kɖ]vOnbd?'4*Dsq\QOzZrP-Fe_E>mII]K3gmsAgr'OF}}Ch_/Y x H2 WvjK0 .!5`KKKSNkE*JO#!8x*HG#ޗ>}洀S Ch455+[Z[P}IQRZegD@m hMWmJiˈ͝dmf},h4q,et{ŨVÝ ة8b&NO"2u} -MlPRB(:#uG8G>jK˛󗥅chhq 3JLOj|l .I/<ʥUV-MW6QwjƄ Ғ;1zÃG}C `4@qǪ͛ܓ*,,d4%okߌP}B)8cEQp[{Uh0x7*4k$pD/ىQUB68{Ϫx0+<{ݝYmRo/Ή҇WiAU}_`sUEhw (}oϹA9`RvV9i{}d3ZKwE.%5-V>YGm$]ّkXwnH$4D(]D;7/ 6\2 ΐbRX rב2Rt9̃R.T'B9!9FgUJHB4zAWL֤E1o/ʈjݶ*LUu}w޻(nmg^d8x'q_%7~QTTuB)cB}罙slaZfS)d^r||h„U߫\qB熆vSjhzdqu>ى3Fyw?~<\C8NCPtu?}a_N5<`vj|*2gp-$+;#}tox;!tX}ϙJkrȓ4mY j{:>R`sK쒄H]MZBP/d|d)7Ο -]8c T+|o|R9lUƹRЁi_Mn׀U[ RqC!JAijj(((a0yOE0BhohBNz8+[rqmݑ'NpXR8Nt:-!DK)%Xz(CǹARf. m2 )Ur 14bO{aBҽbgr 8SJ%ܕ(ygY eYVN)er<"a(6 Btիq j0XAREQ`4\P /8T_IENDB`DataLab-1.0.2/datalab/data/logo/DataLab-Splash.png000066400000000000000000000457501511411446000215010ustar00rootroot00000000000000PNG  IHDR^snjF pHYs!! tEXtSoftwarewww.inkscape.org< IDATxw|?w[I;{'dvt-в $l((M =8{ʒ=Nw?Ȗ5,rV~{tNa\LTTT\(!A| Eq/B\.b.%f\ flj5M0Aq "pY,a΅^P!. ab:?sL^poEE$XJ !Bp8=,799rq={J2pē$:"D0 _t?y6-=dN"E鶞 PE(> "DQ@$eZ;&L`\ ޺HÑrCq)@b55KS9."Dq~`M{ 64MO !B\$)#I6̹񶵵 fp%<ⲁbiv{Enn-Y655-K"qTJJTr$IRv6GCQTb9hXV{"D .*5ck UYYJD,$pbqXDDr_y -jjL՘" H<'(09;3'1,i`p^1k7A80VkV'(!??u,J𶴴(l6[EQ\<Ow\jg[?y1"ܸ"/AL2aᨡi^?[ hj Xa2$-7>>~1/ՒW?9 .,>WM@* eaڭVF?(ab\.=55v4$x(Jͅ#111.{P:f db~wCn^6+!Ba(*jTQ atdggz߂*@rR)OHg3ðs1%WyCqLK>}:zYg6w+FXtr Raƴw۫DWd\( ~3VXWfsA*6$)e!o!CXL\4 QMBVRKxLiZ1aDD"@I'GCA,bL|e>R.+L+Ϝw[.$~:P=HӓC&!BxZ677;W4(ĉ#)x") t "UPeZp#m8rmEU)ݓݾYG'kOUo^HMZ|;UB?8޾d2\$Ig}vb>oyyT%"H^uGߟ&] #1 <Ia>mz% CiHF8|G:\H}!BoBtsoo&`j) ޚB|/N*⤋9EӒHZ)f yp-O]./97X" hz{{VRcF㩢"Y`fq^E*FGFF*_Of~|dmmm7mĉ%غm;l?2]_g!.bPDDD$H>D"ڰaWQ=[f?Wp8DJJ}PpjxxKrnG񑣨seKJ6[(ueBzBl*ɯ̷IQu`,.*f;lAr{@<(oP9pxU0 ~`(ˋzo5< ޲6s+OFbek!u:l۾:9r ˖-X4`fv I4%W".J[\+db $)eu)\.zRyle]]]KzzKxBDӴGMx8"n9F!k';_S;wl6r4زu;4--Z*3TZ3>W~6Tul=/CT*}X$mt8$0n nbI@$ 9u%)N%9cjG|{b҄ e'vuR][1`3@Q4V;TZ3zFft 5JZ+'U"D}gCC0L={Z,XԨ/0~Ri|}oyl\(5WP>գ ΆR< 05߿c@gd`4٠ҚQV׃wT!0OczMD"]ifFp ^$8bqʑcVMw196bA$9f;xV:(BKK+ZZZrxDGEB"D}`8'`vA<]~|_lt-QG{O¤hB!B\, ⷽw{M1%xCb)}>ǬvhZB$'%"&&aaHz1Pk4UM-o0{|DA*!,L̀? wĐ =َ_=>~j s.ϰ!.EH̋):)ӧOdX,eK[` (gp+^SS3!66MM0LiE lp9p\p8pB*]"" 4FTU@Vh@RbE+x㰐7^owW빭uHp6!B"_ @ pM,&!Bd0{/X;0nGKkEJJENvr۫B]}86&L5/ ?[H vgIKuO/Q "I)}}}~5d&gGĉ~IBѻc~%90,_ϑ!%3= \>ݎ5CqJKӴ x*}$0 ;,kDmrEbz2n^O69?!LΎA|tj#TFt nCSZ|Qa"LȈDBbĄx.|2/qVZ{p[?I\S:\.uCSѫGW]:T4ޣ\C\鑈 &R(ܙ\si=igD{ hb scbFb$PF&m7N +bczr%[;ԣl9u{5~WMha]Wo/Upl+׷ipS~t: 7=úPoᎧ6vqrJ Z|W(9E E9!Il_ߕb>yn-.@z(1Yh7;*-#'/JBr-}HF "5 0E`l.'⣥x9Ë0$LAt~}Fl/nċ%xaQlK9>Z_W#1f04; GoAgSd 0Цk9pQ>#>HE<\.\wjs8Vo]-;*HTuPs 6 &#B>( lkѢYp Oݒ7cz+J~5鉊~WbxnKwCa 0 %xg:/A&(%AG@no]m<~DRK`WmBR |il+Ǜ\ f+#g:p_{1"EK p`4ۡW`K;f~xtF]mlvJq[E@F(HB,l?}9T#6[(卽WԀoɴl"C"A3OiNNt=) EaٓG5A _Kt_9a .׽QaBܺnzؖCS-Bf \&Lƒ000[՘P۬_}VFʈ?<1WiY͝As;Di_6CɆa[V[MxЈyyrXQvL6tq |[_-]:bx+G;ݚFk&#-Ad^mh,Iw'*;/K}'ZqS?᭿@2Rc{f w#pĄ\CoFG;4oN9mۊGneA"|!I2Y(JL&SĞR-FYZB ֳ6C |125չh~{]!|8RѠ¯eȭ10! Qa"EbVA2!l>⣥(̉zg(C-.vƮ͸.pgrS#&㻝ayctf*6AM߆XfܶaںHÌq!2L&@Lp>9mC4g;Ks ㏐d&?lM9}tʂ,$ ٣cj܈ ]c{Z?mhM͆M.B75N/z [&9iuI`Pm\D(.mw\==c= ]Ox9i*}bS>Zց6~ . +d?ϯÜ 'HRp5 [Pԇ>=_NYp׳[B7;9_t5VQEHOP{w1=A:}\.7߱E ^ F FQvFzuշ:$~Q;2Vj$f<~c"+6)qr[`wpU?Z?o(8,)HY_Il>X?:m.or"eGi2aHLUgt:׾Q -ۊpzhHWڟ na&^^ىVX X n7,,l3'{[+n4!  \?mcqJڜ„x%);:#9.4:/}| t\ܸ<70!#o>i_X޷/L;>ždiEfr8zt8gCBD}9v{:©IӜ /}|ī_HAMFGGIkh69lx`F!qzП׀yK/jh)Q'2-9>.N\6 sbЭ6xخ 6,xf B<{ w޷(;!BFb؞ͨk}+ =Dp8ZOLJS2 ^)8QپpJ iSq+qӍ7`).~|~U)W59yё[M l\=uGp9,,|I͠4s\Eb8q9 {6:L'roKE@$*=pPvu+f9PzF&&&3gLǍ7\+!;+j[n_|Gǔv:(}f˱[;cXI[f^H{.njyi"<6Jn9.s6vP]$R!÷o'pu]D&eo4Y2 fniEBA -5yf#//_{5VX,5 ݷeR|w!g3EsS#\̂MB}!hֹ8vrPM:UMWk&C<ɃRA* [ V.t x [ I/rrssmV/shԒp|~Ϧ5B c))0cTf>rlݎںzːlvWaTiLp vӊqm p _xEq^"B3u-yzp1LN<&!&b|k^%Z3mf߆dŻn=vm0`nU*Pqd >Ki3+*a2SAmX81 VL 6ʁkT'B.LkS5g-6%3SF83'ŏnB.OUwF..;\7??_Hvj144L0hk,\'KP[[ѯ< 'gx)34<b?>g{.}<[/PLf;z8be֮ܶ݁sL<~;K$9Ke4 ]yӓ՟hYs W'`24p9b;E!~s➇^w@9h<ҕHp.R Axg-r1ٙ,vҤwo_A9!VENS(hcUpvφ̇;e \*e$Ai:(#^sxEL|&Aa`^ vtPoWRE8>u|k{Z9~'ɰp|[b~U_n]:S|wRwwب#a\O:bI0r.XZV԰AkԎ f0`?U222᧭Z[[bvjWvIxCSB*D=k&ZqJ9z ]8v咽6_nt9na$lS)ѣEׁ"r;خs?4sA`S#;zFJ5-qo$H!9AMNp8:ShZx_ys/8ys縙D"!fLk W|Jװ-.璧]-C ,$RHfI IDAT]M2CPօ iC,6ʥ8x`9p6ed34MЩC nN`Ҙ\vbG]8*Pҫ: ѨjyWrS3viW;Dήn|q#*⮵=z u!/&^qۮ*@bЭqlS3nK{`;tqs5ؖi,tqitѭY 814$G6Jl'y|%;}()EHMI5QT8:lݶ[mqmrp K۰l40PoŜtx{q&څ *KѢ`ڭÞc#gb.6=nLec(ke%Uhvm=񼱭q>.>8ۤ(3A{˼c+sa}݁$Iby 8T|}R**A_rU$ r쥏U7P4ōAqe?_5[,(.mwkq xA7D*k¶qh~ ^h{ShjCi>bGoGqw>zr;kڈ[or:?L& IG8baɟ\Bj2] .ǿ,%N3u=5BY?;9G IX57!%Hy ڂ;ijx 8j^{( *mCFNǂ0Դh׏,u 3k1T\\,(jϓbbԵjf&,v)0<{b1V\˖Cnd.U &;G6l6E@dbuK\؇UޣǃuQmS"k؋ K{6x+C V s8h镝A}pT67msl=؀v- G_C"]55D*$ǔer<ҙXZӃ{_;E#)1ӦqY,IbB~^w%"#RcYrhhw \I"/-^fRTkOmki |%MbݢL$8QхW}=ct 3·}AMKƤh籺V ֿ*3I۟#ɤ(ŏþ:c{\S_՚ @P/5O⾿nA#?/9+bJ\v Mݎ{a-X,8SVK9hAڄ5=xCXwߗnkdIx0 ~Ta.<.-ƴ0^ 7?+:GX4q׳[@s|/EsO]RW7߃ F+vm/qD5p⬠y {8}@[߿Q̚,v*m͏ltFͬ\S0™#֯A 1}}$GsiU}(. %ކǤꖖf#I2ߤ$&gskͲ{= 0c4zL$bԩHIIM3(+ɒ[!9>C79rаiXl&z5&%sf(|.o< cǔ_&s.ĝOoF+n~d#kg")V:b D/?т>*v 0oeL+/;%|l%n[i+?PҊ-k> 6r!Bc~} 9/6m<$1\įWZݍ s.Bh6c𭳰kH$h! 7-O1-oNaۡzZ> Y V㎧~r-k&#?= )"< v `EGVG\4➟Ms̡ot2B^<{BF̕m&hΦv]Tq(̎ALl7Zgķ;Ӂ:{٬T5݇E }l`t䤆#1Fh F닰hj}Naf? 92d$៏xbl+fw7!-^v'ǫ,Ƒ b!RQ !>rVoAC> l, -A0,j|c6?kg#+9F[F>T>?b$zQ$ ˝-8p6TcU~mjÞki%qqӊ<::UT72ntTq XGEGt`fgs30;g3YhǶ|ڧecXlyՉ0z aPQQF3Y.*堑\ .iǦl\„w<뮻Jjk?t|`mQ-k ;%r YJǮM_Ҋ%np0y :-L2"ąa{__߂7>iXsx_G`PX2#> ln]_rcOO/ZZZa6X9jE}MMU*㹧/wwwC:?ϑ+1hmmCgg6+|>bT*jq; $qv|DEEyv[{;2hPWs9khhmXgjJ2\i]hkkb@ @BB<}& (X-bd2睷+=0̈d2Yl4uh=lOڭÒ)nq:] c$)گ6[5@5a椸1uؼe+jDGEA.`0ȑcX,=T\ ^FZ444 -5 q!FPv;&? ncO*NGd ?rDbd X,lDEFfPAeݎ={ QZzmHHHSWWU_b]޽q#UN.C{G (/@JJ28_ ؼe+;:0 74">>㹍M$ Ba`Q4ǎJE U5HKK(\=@|~|SM?mANNOaR * r80HLHpcnд6cb=~^;vBCC"nɓ%ABBuUUנ*ERR0ZP(^[ 6^01-ۗud wXy'^BOKZ o}څAgY=wϷTde|d9GQujamC^nx:0qB>؅'J0eJ9;1 7Fddx'#&fh@#G! ]wew!g>p8\}:2qB>*Ǝ;rr[@CZZ r޳͆["-5]1qB>JJN31}k)153\$dge"%%z۶A~^^P?s6 5:.11 @ɩӘ={ױ@pw^sn( ,]EN8{={d (̕8/Qݝ8G'Ϯœ__9Yѣj_ +;lv*}|K)΂^މ?|j@cZn؄O6&j8B hmfCgg[Z'T}*ttt8uvvyys`~ _##=?n mۨ ^p$I"+3-5ЫRqqǴ";{|Fwᳶ?v}eHKMEbb)2/twsCijlFVvם BFF_ZFyE,f3ԩR&-(4:,a77x#參sə[d+,>SVxNj$)Az -3a4qLjÎ#֢]w_yOBz ݻpc:'OsZwws H*g;w$ p0eJ!D"!~',?o~ш8? `೩쟇ÁD"FNNR=5#~SzʔBDnovfOAI)p8DB"Nx TiSLYrrl76PO{bKt,bQ@iS#;+;wƲeK:99ِH$ؽg/-]1f贘-{RĹ2mԠ9j}'Ąx͝b U;~y-f2m ]'NCSd>:A`Ҥ(9UE l \vcx9Y,Ch[Vr_xbѦ.0PsU%fg5NTta8}nK[݁^ۍ`vo|~[:XMM^p8Ҋ m”)E 8pPP拏In[sgCü|6\H5B3gNZAUuqX%}RpS7i9Ym,w/4#.6p8(-pT9fiШ5h(++GvV&8B!fwނN6eߜ-W|[\5yZ1qp尰va&yZ|Z,2&}F`;ɳk74]yEPoIq}gqDG#,,]F˼srb d)XŰ<\22ѯӡƳ𫭭FAfByB}} 6bsS+-@II T*yEWg;ywO=RBJJ0Y 99BcSǿD\$ ,X055~xϝ3iD=v . X߇?֯_jvniZ ӻTƈFߞrpcEx΂M`0q|\8{aydp#- rqFf:֌ۯ)@K o9i2v`(twblV,\8߫1#nQ[[7 lVVNAIHJJDSS3©RDCȑcDd΅$Ib՚j%%ò QX C,`0CHNJj;nmm@GdDx<dR84Py< v>$PQ^D ]IDATN ==ݣXR,]hZ5465A!{NCC#(漮X,rh={1}4D fPSSTo^ndz kJ bUb߾y`*U?V,]|y:>plDFFbϞ}^5/8u42]|mJ^GcBjXXXDxgJ[r 1<68lZ:Y,g⾛/|Xf0H᫗A'~DyÁEx ͮBf n Wv)HOi*+/G|| 9SeCr=:hz=(1IH ***PX3[,8u]]] I7@$"&fXUU S2DWW7 b1 Յ㹹~ PkZ VVVA=,Lj.kjЀiGÔB mm=q j0HLH@NN.--^_qTZz.vDEEs E2bl=4bA6:Ն~?#+NA9.9D,9"x <<\R$FQ=j0[NI.UߦE{ک7 f;j@iM7v2n]WَF_F%ݸnId̚owUr nَ&5wQWhCVRȈ "eM r{>R)e&îh%gnX>!sRVmz|!r:HAW͝pV"LʊFLӃv.1bGd̯-g9bl/1oFo~~j`0:u:IM7,OX<#%cKeͯ;nGw/yX85* MZ%|,9I '`b8Qхn]~{՚ #4B?߂aްay 7Ͻꅈ TfϩoF)@y}/Vѧ5y5p$D!&\115OHd*s܅mwjZg9wb~Skw^Z ď~O[)>"DaW9S𞅨%I2(!e2YT*-p8il6; _lSU߹v]?1nee&SL`|`&>@1F&(!*<` O%L| Ŀ$fM; c][nucܗv;~q+ JT@, ah&ux<> O! 3f <:)ڛk#=N q O}st  /|d@`3clXF,qnWȲltaDleoRF3̩/{x)8gf\q>yYSw* Bha J2 Ӓ$t`R"&ٛ&uye{GOTg`zxښj`]T/{mhlƣSfγCB%!!P( 4AY,nz>83zWa.ߜBhg&.<B)-L"D"7o:qxkOsn-H!k766B.1M4UU?GΞ?uiXkrMπ#Go86BΓBb|XybKdxxz8y{/{ZVJYv^[E\y=%f8)TQQ^ .PUUAM\ O?t=:own^̝Z}t]VU?]{O116 c!+ErjN^jP\=!>x|Klo[}3c>[ᄎlZ;Gk^OӦ87 ^xP(T-IR5!9ϝ!g|sYm. 6[IXkNhk֋20\;rB J~B2ƘwZWWo>,Y9儐y`a+RJ7B,$|Lu%hUr]^;EQ`uɲL ØZ|bb`e(i~JsttFZc1{eY o!)!x !T,K,ͯ|N˔0cleA,!D(qbSӴ͒$BIdo{{{ ]Ü $.1BhY1!$to P,I&" A>Ƙz-{(L&SKY/ Z8!BgdЖ|" VR*J 0Bh!nu_M7QUaF%]C~n.ާbN)]9BYcBu#%$L>֖s,q$IENDB`DataLab-1.0.2/datalab/data/logo/DataLab-watermark.png000066400000000000000000000465741511411446000222510ustar00rootroot00000000000000PNG  IHDR pHYsgtEXtSoftwarewww.inkscape.org< IDATx{T[[B!e˘11=vvӴMiM;mt:9t:YYN&iN$Mvq\q`102`0B~"YK ~GWw^~e &q``01Dh`0ɘ'{C#˲8ɇH4 tEiqC7I󁹀H! p8(J|i:`@`hws gC.huDXmV3;KݔyXTj1aEQ:&C,3M@ дggSQ[x)$!r&p;,L/S]ߖEV.ElYGExأ(J(%CLrϷ X'Pݐ]|_9["o{ƭSacpe|[c:η&"7_{p%k|8QSEA\! 94?{'xXlno}z E~'@( 2C,=@AuC??E؝%|3,:]tMئYK4-go0Nn BH5^QIִ8 r:ñऎME(o^C`]:^@=[Qqbz'{ S Y=/= ͗&{X̛c3MivW+[<4i$I%I$IjSU§S,fI6jw۾o{wO̦lƋDc)V >iS^q锫AH/fg̰,VJ4CUU;S6(XY32`%s<CsKdm.rߝ%l^fMV׷qKf=txOA߲V.!)8g؜f",@(!~cSA*I8JGR:vӏ͢B7H_T*-=}~o6}{c61EQNtpC# jNj#wdY|eݥd,Q]EQz,Xɞ)}v|c+?k^8NKb,wolҁgE9MC Yg0@;7 ٹc}!v . F}@Wܷ`qDpp9ml^l+ѨFK{SmA{skݥ:=EQR 10D8,{5TyenV.;a5EQOB5w$I[5cCc{S)dB~[Vv~ƈ,#v޺~ VxQQ}$xhf7nk,$|ޥmnz<pԜ?%qd0JDOW'[}Q ME}XfJxc8 3IdY6tG?_t`tiYVzwaI3,$D"鯿'Юsǩ;kKΚ/IR: #IQg,6%.݁I/:cJ{ˬN1Qw򣇷aC‚dYٻo?ЦX,Ʈݻٸa"scl+)t9l|݄#zX"} q9ltGcEhn ShsGc|뛱y# x"lfX~(|} vCɶ'_yyvw>n{-_CWMV6Ze X !\s !0K&HTXC ǟ94j[7.G(J)Mf:r!۸A"nJ DQ[EQvʲy?ܝ"xl4nQs=ٮ|ODb+hwh:Eˈߌu"L-?Ŕ㍣jc|>)/Yy]%8cǏlf YY_Q?)ai>>VY:UY-3f8BkAbӛ1i/B';6mV3DK2cǎY}466/yF,"O%߽6I'`0LGG,œy/,˫U;~, f9bF/\kF,_FQbZX,F$=" ^h:jjECχr:Nl^ׅ,A0 /" Pn{Q#aDz@͆tp8p:+D6$|-S$! ZZZgeMhll1 ".˅].f{̢l({8},Bg,8Z^a]Y>iEQ^&677Ӓ IΦ|cK @&_?l6-8HԴ'FKz//5M#l!.(Y"Ie(w4M"t"# Ѝ3 PQUUdnchF$!GtGEcĴKdg61ffՖaY3V+})r,i$Bgfq f(Mfi ƙ,`3v>74`٨Hw$!, :QāK#6Ȳʲ,_4g2񊃤˗RTXP101E6 & lv(Ҟ%I ٌ烄pK.)ʲg`(~BoFqq10F b:0c!PZs4 Sܟ%ynv{YE%Q }a0>Lgyv3$47OLAA4cn(JkY—L RIoq '}njs0br ႖Rod"*$1CFܚ;_-ɢ0u\}F)ƴarYegL&y6Q"t:=7!LRI6Vh0Q"t8] &,nz`O2볝eCׯ\j ϛL>Y^5ņ$~3"p(#b[wf0Lg{v# pd#,HL1/"^wo&‰ YJ湆}C2]|FGNHҘ Bd:`AE,ݷ֦ `˜"Lf,-@zv\1Kƽ3 gڊ0ə%<9w9E4;{d'rif8ՙ"Y- w6 E8f};%f{gtaˁCRUַ=%Qn!Y9xыf#܍j ?Vpi1섣DQn-#;p;uS 4wiY]n Ô]s箔 I8 ܝ Cc@Qz9ס=Fi (~ 64 Fc7PQQ Pe҉A0cDU $]tdYl\>Wx`+ikbӊY$R٫c(466ŸOqfy̜/IR1t UUKԑm]l@]=W*j/k. QǓ uhxqcE˖qmpnIwQ8@4ͅɐ'#MM!4][Ѻ2:&23Z 盝Lsu6QP.;;/(ޤ M!j$I\9JDt|DZx\\9fY$BU'@5HUU[$I:Vc|Ѫf.\5^=PK|sgHp0t!" .`qW,=~>x膅hBtA&jR`D"gΤ[´uA4]-iV-gP(6(eF$ $2UTTg _f(0]]ϙ 8%I:FYj$I'̢$+h" *>XGN|fy 瓑$}Ng --Xӭ܀jj3RC]$UPi\L o{?B_azlV3{ 0*iZֲg5~\w.YY~tr1D8$(f/YSsHxb[=1,@ =zuN=ǂΒ?GZ %I˜'CLL(wzVzyH=]ݗN6sK}966kE,t=N!++k^p R!I@UU]U*I\y[o+:~˧'jm` ?ii&sDgg$cbsN҉$j$IfӋj3:F͙Vc17?a睹(l٭XQ IR$I Ӊ$ R3Ҏۋ[/qtk92lܰmQy=9V0OSF`H"˲D&$ҳB(Н|(cJ+r6 _?c}kKdV"/);Rƺ5.?;soTO .ZQY ɴa^ /3t L0 p^Qaɲ:XǷCdMށi# TG,,(`X8r;l*; FQI`LCʲ<h 4 ~Pq5v݊aői%e'ߓxx! YAQ!/YE`;&~y>RZx IDAT|O6PD"C bfJ /4p=n~6\[ (ى6"e9D["1^Woph'3NJ湸MI"s0ϓEZ 7޵@sHwA6NQvtzٰnv7uvn*j=jm4A{ᵓ4\gY\Fpgf 4z4vUKko3$ e$:ꟂLuBw[Pϴp15VX\c3Tia]/#b.KzMO10E IY.W_sEP7|β2iX/~5;+Tշi aN{ :V/-Μ >8=ta7pk+&{8㎦~#ذ,s:՜nf뛹Eԙ:=) 8>i dkigF3 ޱ,qe2wV6Vttb0w &Vŕccɂ<s'K{Ս\ꌦկ7!"r%Z>fJ!r1A^#|>b7YXL#! Q]*k[oaIf5W6"KD՗W'5E.~ )Ӷ|YaaQS2E7pwޝ_5.Ǿ=F>M*w\([?,w#;x~O5?xP'tg5J"T};y0-D ˲%\Zai|GZPxU4^7DǏފj= quy=:<ݸiEQ͔?$IgEnc=\HSKO]J%鴶wQU#gxf{O'89:Bݔ.cIQ޼m-~kBlsϱeSTp7׳y >5̓#]_çIq[{c9l*LV6ٿrd5D_OؑuپN; gI Ve7p+GRo^F3;hˮ!A٬f~6Bn؞/om,$: LUUUU=>IZ[ϴQU?:O7ۗ3oCw;mmִ Sk7NUUk%IzYZ>}l.pq:=|mk1n宵9}"5giry|9R{Yw`QU5LKD?>9!{(~od"Q.I[$͖$/IR1(#QId<l+aBjC۸#deZs<[. -u4;6eeoP@~ 맄[wN=Mxs,|lk1~ Nշq4his{u?54ߩ;l{ީKQ@yn(6K$Iǧ{۴^Y?zvg%d_ʎV6 fQb1l$Xa]/߿bјƯ^*ǿ;Fh3.ķw`6h+f5wShch|~GEy)u-|LIj s<.;{ԧ('Rͭ ^{Ȁ[]O$lznOj} ]lZcw-'Fq_ DOo/k |‘(VD?~{Ntc\'sr<$f CITUES5{2u \W+Ú%c<>v>MB)_3)߉ s #|3epE Io])uuxD{\[<<)g;ł Z3o. ހ>$I'A*7uօLGu.rsr󙶶w=Uwbgvw\LsǨp1ͺ2rvEQvKlwּ͡A"1] ]J{au$PUumL"&FTU}OjK)lAOʋ|(N#ADMf*?v33c$n\O[GMcIRm$/e}92_MnO]fMJ4n_L9s!jXU$(|m,2ݿYLzq'ACtشb.V3ӳ}}yJ?n/HYqW*#Im!8ǎ ,*7Ǿ5Vp^U{d UU/Z%I!ݖdA^7/3Z҅ffaM尒f|hS_y`9ۺQ.EQNIt \9oޱtșnP^+_77+SUU$B[zcu'WQoMVAj0R,$D'fh1&&%L|1h4aÓc#ivx6ND5߁gCW'OeBY|038X8r+\n;_r>`({{=;W[?$^]U5Eѣ(J8O&ry@ϓd1tab ɯ-@(EdY,|+v"w_HH36c8/ʏ>?hin u)1D8N(瓏~dY6!_žLe]@/\J>:E0w7Rsb).p]JEQɲóx{!B<M!Ce?FbVEc88cܻmk yi 4Vu7)4#~Ƚ*-rܞSN=|5ޅcsΰz&q>X H-푌<1KQ̛ɪųxS99u#7!L8 Q%*oUkwq:F'f1slEZbMW+xꑻ)wP0:R0lXrLCEE9_z10q4QQž zphc{!4R"(r,_ލm}#%6,>o&L]C(~ ]^⍿xp"w);^k߼!kKn (4n4/}g,<#i?p'F}b Ei~ .+rG{yKp9cn[#Y-7JJ,/(ʔ˼f\CҖ_fm% wl(6Ǔpv ez"<H8.=4W7] \rMDpa~&uMӣq!-jb kZWuvtt\\`-umpb'=8~i&'O>x~#rfX9+_em)$#[,?8FLe &4H͍ºA/@[@Lhdȡ9ة45t K]=f`[6@AmEQ'dY6wi_SƞCnw ܰ.[JiUVwhxGcfQvOP)(*ʲRF~bX<Z f] |Ne#M=d ;u|_5/755n֬YS.TEQp8"r \EЁp5}/Fhwc1888(;Y];9^UrrĒ娢(_jkk3q}u]OG0}ܹ ͞Pm|(K"B`bpl]Sd뚂" $rjKmB{,~T-@FehMMMYfd\,B"9Hb$b&#š:f'TEzs9sb>Bv knn< EQz.`=fΝ{1,u]뺸m2e`0Q3>/t<#{&e< hhhp[,EA A0%j`+WZZw6@ooZlz{FF{s.de~S2rrr {5H1A:&-MPWjkkv쾟{{{|M~۷o~_xu.:(hBn^FO|kҶYiii}[Kc?fl3u1>]tnEAu:uN= )Dh ?  #뛀_`oҸlֈ'H~I$͍[jG_z`L誸.0YbW{ p(:pGekk#=kFβI@Gׅ;I&u= W‘K.~h?Gzz3 f<~QIqϞЅJGt]@F)-}kfAv#M&˖|]**z=ݻ9#3DG3]'ơEX?_g*_~Qqҗɱۏ/& 477g Ç[Ϸko|G^k)MM6l߾aRӾJIn34O6fk~|kߑ8/@tTeBU/ [ GɟsA7L! C&䆎پyumU/EUsA5Q$S9Bt=/6쩧,x{{ii.E' mz\gO۷ ?}M`Z%m9$p+dsu]g55755obhhmu{1yA"zu\כ̚nLvM't=Mй1txcÇş=v]cـ?LAiZsizMl{EL%8sοnhhu~~3T"ǻ+D.F("  {gt]-7WX1k`-Z!Q<* #W~X;!B]wO7lh?}-h^Z~2jkk33טEmYF4Dtn蟦& C\6K%ag{vAwjZrg :Mׄ9s;4M_(joݹW&q8 Z8 -۴[)PSSOg͚57r4 \Nޡ4ҬJ HOYo !@nw7+K $5V"2d(y k~E1z~sO<7:Iߒ^K0@ I(//v~&~gn]0ݩ {C9  #=8p9nw}VVO]8ߞ@jkkG2N`jw HP=G4lu]VT  \ j1/ukY/납kۖu$ܔ"|ly,6 IDAT5SC[ ߎ~UͽcW7п=47'0,XyV# nDgeeebŊQEG̚:4p f?%{Gu3xm'q;~!C>~*HR?Ts AFUU6]V*)I6άw vؙs1kIK'dsskL]%x8:iɳ֎?Z[aw>QF'񷉠R.xOOǿUw.$V*βADFvOo܊-FD ͼAK]]]gؘxXt&>eyVҵ6'6ZEn_yw/-3d2f#¡k>&[x< JaF /,,zԱ-C(T1uu{a냰~?p3rIQ2x|zxLb|FJ`ڹKj5BT /Qkk׮*-COўxC"ca u>%zM;^mo@{je@,G`$i~Ѷ XVE޼mϯ} ʵp)ljk܆i~[BD߹\K<\a8H9(mBY3Ϭ^Ģ@Uܐh]oh4꿘 ^(W5+~s%"Ͱ|Syض ‚!AS -? 8,neYS#ٳgpU ! I:FD q"R&ۅpnnVceVbۿD C7UQ/^\('(rНBQ-c,rf,G:WOˡ xl2XGjEJχDоzuK!o(TQf>M`.J {Ǜ7{hMPl}҉@0Ur7 /߿jP$[#LƕCP&Gd2"BV=p2"j q6{Y[MM}Mni㷇d2i2FfzIhX6WRK۵y7Xp=(p5 m .45bU 6FJ"`e5,,,XЃn;w8&Fd24DC%(s둑/5f`h ʑL&owWNN0ͶZ[..Z",QpOΠ@yl{?PqҲT^k:z/~mNMMu7wX|[=cxxwsLD]VL&)"GeqRyc!L&  d ijU(at.@kon|Al|&#O2s]:p2[f5Pٚ{(GxED ɸo9q+cԩSCB<\`s׵C"SS3lJy;:MO `;DD:;FBkS#V^.t!,BBM[BZ/_%@d_ON|6~xY;4}}"C'@ikZ~4 4'duOB:)|ʢy]VS2Q_&| @l3Frx,]m㫥$.p_p=Ҩ=LN^}-A{}CDz+xӈLB6#02d†ts^JE$<'ajۉu7a; 'xd2;= ,ˢ=[{V =2=~WT.HO0L(w/fffdYP[%bkvQ0yI =!2}gOZqej*Ax DXW qR<ϽB@]vq-+ Z܂@pTZB7Ox*9::*m;<Nޭ궊'|.h@<n[] `:fۗ;::'Vr'"Q;"0q3".K>c^|gT:] mhAFi"\KAF9ht v\m+5>Jmw+NCaB *eP)4J!T0 Ri2LCaB *eP)4J!T0 Ri2LCaB *eP)4J!T0 Ri2LCaB *eP)4J!T0 Ri2LCaB *eP)4J!T0 Ri2LCaB *eP)4J!T0 Ri2LCaB *eP)4J!T0 Ri2LCaB *eP)4J!T0 Ri2LCaB *eP) u_IENDB`DataLab-1.0.2/datalab/data/logo/DataLab.svg000066400000000000000000001111001511411446000202430ustar00rootroot00000000000000 image/svg+xml DataLab-1.0.2/datalab/data/tests/000077500000000000000000000000001511411446000164425ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/tests/empty.h5000066400000000000000000000014401511411446000200350ustar00rootroot00000000000000HDF   `TREEHEAPXPDataLab-1.0.2/datalab/data/tests/reordering_test.h5000066400000000000000000003411501511411446000221030ustar00rootroot00000000000000HDF  h`TREE0HEAPX(DataLab_VersionDataLab_Sig0SNODx TREE (h`GCOL1.0.0a1 lorentz(a=1,sigma=1,mu=0,ymin=0)$879dd279-5c97-4cc3-8c6a-4a183773e72bLines%g derivative(s001)$51839830-bb97-46b9-b96a-8ed0def5a2c5Lines%g wiener(s002)$4f496e98-c8dd-40f8-a75b-bf08628b0235Lines %g!"#$%&'()*derivative(g001)+derivative(s001),$1cd96fc0-3053-4a52-bc27-c8325fa02651-Lines.%g/012345678derivative(s002)9$642cb4c3-7c77-4ce4-a7b1-6e2bc82ec40b:Lines;%g<=>?@ABCDEderivative(s003)F$748934e3-8398-42de-a0dc-98f30008ea14GLinesH%gIJKLMNOPQRmagnitude_spectrum(g002)Smagnitude_spectrum(s004)T$25dd7970-e2ca-4c9e-adab-1a0dee022e44ULinesV%gWX FrequencyYZ[\]^_`magnitude_spectrum(s005)a$1d83959d-57d0-44d9-be4a-2218eae8b227bLinesc%gde Frequencyfghijklmmagnitude_spectrum(s006)n$13d2e5d7-8802-47d4-a3c1-5d745105e85aoLinesp%gqr FrequencystuvwxyPHEAPXH0g001: g002: derivative(g001)g003: magnitude_spectrum(g002)TREE@HEAPXs001: lorentz(a1sigma1mu0ymin0)s002: derivative(s001)s003: wiener(s002)SNOD8(46 @title `TREEAHEAPX 0xydatametadata8SNOD(KKM@Pyxy{G @title ( ?@4 4@"@x$hz#Q9#9o#s#I e#s߄#JZp#BE[#߄OG#!2#;ؾD#[ #P9"4͕"!2/"ϩ"-l$"[ "}Ļz"&-Ce"ΕQ"v}<"g("ϩ~"o8T!s! !hr+i!ۗ!Ce^!`ك! So!}!R {!wM3 s KZp( l$ +i De^ ay e^d =Z5P 6W҂; So& 5P x R \ϩUŀ&|:WNtt.mf@l_"=X\Qya2In8B d҂;DY#T4~Nt%-C%8k,.Bef#j< W MtKH"R#5:o§ϩ~ۗU,i,|:W ݫˁnw?l_Qya6`"V Kŀ'AQya6gr+i8k @C d\I U4~NOGr @1I&8k w1ǔ*߿f#h7S|S ǔ*Z|:MttLi^]"T4=\I dԖ>53/ )ؾDgЩ~>!{qL,fcpGcT4~Nwo§Fhzya6QJZp(8S|KqپDg)=X\za6Q[2/F2(< k @1z& x]I e(<aO_ۗ@1InكEѽdJ_cJx4CH2jK[ wM3L*? ̼0ɨ l_"V  w PGr` ^] G 4/F2j ѽ vt. s ! X\ u} gr+ ݫQyVŀ'%8kU:k @1)U`q*8Tu70ɨ-v}@Rŀ'AEhPHn8TR {Z5P $hX*߿o§{x`wM3?l_"OG 2/FhTuJZ`?lHFm#` =] =pJr`p&|:Kq激)z7㿀'APῐݫ@p+i@9o@0VH@V @ef@Lns%-@ˁB @)=X\@hm@U@(AR@m@@DYH@@@`q*?@/@,.BE@|@~ؾDg@. )@53@dԖ>@<\I @"T4@^]@Ji@Mtt@|:@Z@ ǔ*@S@h7S|@f#@Ɣ*߿@v1@$8k @ @1I@OGr@4~N@U@\I @@ d@8k @@gr+i@Pya6@ŀ'A@K@`"V @Qya6@?l_@lw@ݫˁ@ @|:W@,i,@ܗU@ϩ~@8o§@#5@R@H"@K@Mt@T @< @j@df#@,.B@%8k@t%-C@$T4~N@Ђ;DY@B d@0In8@Qya@=X\@@l_"@f@m@Ltt.@&|:W@Uŀ@\ϩ@ @R@4P x @So& @6W҂; @!@Ov1!@XHF!@}q?gq?r=ϐq?q4sq?pq?8B r?퇽;r?gr?ݔr?=fbr?lWr?=ds?o#/Ns?s?v1s?!7s?a{t?ul#Gt?o{t?x\t?ht?y[u?>kQoRu?8%Zu?J.F!u?nߤu?1]U7v?rv?U0v?wRv?n\c*w?|q(jw?d \ zw?[w?P/>.x?7뻻qx? cSx?k x? 66By?|)y?ѩ6y?1z??{mjz?SMsz?kn {?PvU{?|x{?sBQ{?ꗣL|?O'=>|?H|?KQ}?6}?.k%~?hjid~?U _~?s$?*sh? ?~(?pKdž\?Q]!3?5؞ǀ?Ƃ?26?_Ko?(.?@n?G7"?f`?\ ? XU߂? ?Q~uc?> ! ?ځ?@n4?m:y}?RDŽ?god?49`?:?WB6U?nR?Z?8? v<U?y7E?#W ?',h?AɈ?SWy+?@2*?+?ێ`?y;̊?B ?:?D ?l?΀?qLK?X茍?@ʟ ?vԌ? _?|t?E@T?^?݂Kg?eT`?C?]?k?~;?Z-,?H{3;?)QMH?U?%3G$R?4vl?04Ӕ?=?t޿?F? ǭݎ? ??T?/bP?!; ?ff~?a(`#?vd?d 9P??[('W&?9?4E?e j?pO=?JL? .Z?%/f=;?iG?K)??ѥ1n7?aUhSj?7ѐU?s ?cy?He?\>%?}?K?T? Ox?{-a?wR?!(%K? h(J? ·O?/w;X?e?& Yt?"=?;uEgH?ׂm9^?:$N?ߊ$#?(k@?&?~Ke?3wm?K?|#P?9Y+?94hL?Vw]?Vw]?:4hL?9Y+?|#P?K?3wm?~Ke?&?(k@?$#?:$N?ׂm9^?BuEgH?"=?& Yt?e?=w;X? ·O? h(J?.(%K?%wR?{-a? Ox?T?)K?}?\>%?He?cy?s ??ѐU?pUhSj?ѥ1n7??Z)?uG?%/f=;? .Z?UL?pO=?e j?6>4E??2ǒ+?J~eH}?\ֲ?747?~ ?\ ?3#?ZȟF?/|nR?J׌#?ER?H_ ! ?T~uc? ? XU߂?] ?f`?J7"?An?(.?bKo?26?Ƃ?5؞ǀ?Q]!3?pKdž\?~(? ?*sh?s$?U _~?hjid~?.k%~?3}?KQ}?H|?T'=>|?헣L|?sBQ{?|x{?PvU{?kn {?SMsz??{mjz?3z?ѩ6y?|)y? 66By?k x?cSx?7뻻qx?P/>.x?[w?d \ zw?|q(jw?m\c*w?zRv?U0v?rv?3]U7v?nߤu?J.F!u?6%Zu?@kQoRu?y[u?ht?x\t?o{t?ul#Gt?a{t?!7s?v1s?s?q#/Ns?=ds?lWr?=fbr?ݔr?"gr?퇽;r?:B r?pq?q4sq?r=ϐq?gq? >q?6q?bp?kp?vqWlp?dRNa{p?0Up?Jl0p?4u!R {!wM3 s KZp( l$ +i De^ ay e^d =Z5P 6W҂; So& 5P x R \ϩUŀ&|:WNtt.mf@l_"=X\Qya2In8B d҂;DY#T4~Nt%-C%8k,.Bef#j< W MtKH"R#5:o§ϩ~ۗU,i,|:W ݫˁnw?l_Qya6`"V Kŀ'AQya6gr+i8k @C d\I U4~NOGr @1I&8k w1ǔ*߿f#h7S|S ǔ*Z|:MttLi^]"T4=\I dԖ>53/ )ؾDgЩ~>!{qL,fcpGcT4~Nwo§Fhzya6QJZp(8S|KqپDg)=X\za6Q[2/F2(< k @1z& x]I e(<aO_ۗ@1InكEѽdJ_cJx4CH2jK[ wM3L*? ̼0ɨ l_"V  w PGr` ^] G 4/F2j ѽ vt. s ! X\ u} gr+ ݫQyVŀ'%8kU:k @1)U`q*8Tu70ɨ-v}@Rŀ'AEhPHn8TR {Z5P $hX*߿o§{x`wM3?l_"OG 2/FhTuJZ`?lHFm#` =] =pJr`p&|:Kq激)z7㿀'APῐݫ@p+i@9o@0VH@V @ef@Lns%-@ˁB @)=X\@hm@U@(AR@m@@DYH@@@`q*?@/@,.BE@|@~ؾDg@. )@53@dԖ>@<\I @"T4@^]@Ji@Mtt@|:@Z@ ǔ*@S@h7S|@f#@Ɣ*߿@v1@$8k @ @1I@OGr@4~N@U@\I @@ d@8k @@gr+i@Pya6@ŀ'A@K@`"V @Qya6@?l_@lw@ݫˁ@ @|:W@,i,@ܗU@ϩ~@8o§@#5@R@H"@K@Mt@T @< @j@df#@,.B@%8k@t%-C@$T4~N@Ђ;DY@B d@0In8@Qya@=X\@@l_"@f@m@Ltt.@&|:W@Uŀ@\ϩ@ @R@4P x @So& @6W҂; @!@Ov1!@XHF!@}P?\]ZQ?=>?Q?ܣ~Q?*Q?"KQ? A=_BR?kR?MLR?ś{S?3˕7YS?ҶI[S?S?E8T?TnMT? T??2wa&U?;u6xU?SǵU?9e/k"V?AyV?yd$V?k~?.W?Q?W?ҋ/W?_!6KX?zhX?U(+Y?-X,ezY?Y?iOZ? PwZ?.[?qx[?fT\?HX\?Ӎ2 ]?1zs]?-^?NNԉ^?]x_?B_?fG`?uԁZ`?Ʀ`?v6`?brM. Ian?&EZ_ro?L:p?) Ujp?8p? Jp%q?Mmчq?Vtq?sTr?¡ar?jF-s?y s?Gt?T#t?JVu?[H,u?Ado v?tLv?ag"w? w?:L%Jx? x?>4y?*z?B׍[z?Q2{?O4<|?g!N|?}7:}?$]t~? ]X? F?;SW숀?3$?Nlu?^?Ķs?ǥ?H ?;7? ut?CpG?Q.Y?d?AJ+???$C:?}vu?`A?@3?:c(?QX ڌ?‰<ʍ?)>șĎ?x"Yɏ?#3Yl??qBQ?5͎'*?˒?pt?%?IWZ#?Ro3`?t)?%R+?@?5?| ұ?Eh ?M?WD?S|?3ګ?kȝ?( ¸?n2?_5?󵄼?3m?M&梵K?(va?ds#?)r?uqo?6(?bT?樭_%?Ҁg?Y?!/?75?uX?l? O^?g_i;?dCpll?+^!|p?u@?Ħv?t@,?9i i;?? ?'x?V ҇??.Y*?eѸ?8.@?B{Ʃ?h*?g*@{Ʃ(9.@eѸ.Y*V ҇ÿp'xſ? ǿhi i;ȿt@,ɿvɿu@ʿ>^!|pʿdCpllʿQ_i;ʿ:O^ɿlɿuXȿ75ȿ'/ǿYƿgſ樭_%ſbTĿ6(ÿuqo¿6)rds#(vaf&梵K3m὿󵄼<52 ¸kȝ3ګS|WDaEh | ұ5@$R+)Ro3`3IWZ#:Ls?w٨}޽ʧɦ8}ե l }si@t$=ziOC ;_^2/xC\YBr!HctaLG+=җt`'|=i |hORޔ%[tÅ˒A͎'*BQ#3Yl"Yɏ)>șω<ʍeX ڌ9c(_3`A}vu,C:􇿝AJ+?!dP.Y腿CpG ut<7H Ķs^Nlu3$:SW숀:F ]X-]t~}7:}g!N|O4<|Q2{T׍[z*z>4y& xK:L%Jx wg"wbLvAdo vH,uJVuq#tGty sjF-sarQsTrJtq1MmчqJp%q8p' UjpL:pV&EZ_roIan(8}#nf=mHolˠVNl?kѼ*k\kܞjJvjGirHiErGh9Dh[gn`oU+g NfJfIueAueFGdeGֻd*uyHd Jyc]Юc%1cE bZ4rzbK]-b1ia G'̊abrM. ?Q\]ZQv>P|Pa1PP0P湶O C*OOyN>RTxNd7N QMy_/DMk2L~h~L[LPjKVfeKȥ K]yJf\YJ-|J(P[I?T[I{Tx\ IXøHniH OnH G*"Gg+!X9G!cFG(ZF*6bF<FP-E2KES ԷREfMwE@+uDYDYDSNODhpprN (sXTREEHEAPXrPpr @__uuid$ @ __baseline ?@4 4 H __curvestyle 8__shade ?@4 4 H __format P &__showlabelFALSETRUE 8 __number  0 __dict KM H annotations @xlabel @xunit @ylabel @yunit P &autoscaleFALSETRUE P &xscalelogFALSETRUE H xscalemin H xscalemax P &yscalelogFALSETRUE H yscalemin H yscalemax|`TREEHEAPX {xydatametadata8  @title ( ?@4 4}@x$hz#Q9#9o#s#I e#s߄#JZp#BE[#߄OG#!2#;ؾD#[ #P9"4͕"!2/"ϩ"-l$"[ "}Ļz"&-Ce"ΕQ"v}<"g("ϩ~"o8T!s! !hr+i!ۗ!Ce^!`ك! So!}!R {!wM3 s KZp( l$ +i De^ ay e^d =Z5P 6W҂; So& 5P x R \ϩUŀ&|:WNtt.mf@l_"=X\Qya2In8B d҂;DY#T4~Nt%-C%8k,.Bef#j< W MtKH"R#5:o§ϩ~ۗU,i,|:W ݫˁnw?l_Qya6`"V Kŀ'AQya6gr+i8k @C d\I U4~NOGr @1I&8k w1ǔ*߿f#h7S|S ǔ*Z|:MttLi^]"T4=\I dԖ>53/ )ؾDgЩ~>!{qL,fcpGcT4~Nwo§Fhzya6QJZp(8S|KqپDg)=X\za6Q[2/F2(< k @1z& x]I e(<aO_ۗ@1InكEѽdJ_cJx4CH2jK[ wM3L*? ̼0ɨ l_"V  w PGr` ^] G 4/F2j ѽ vt. s ! X\ u} gr+ ݫQyVŀ'%8kU:k @1)U`q*8Tu70ɨ-v}@Rŀ'AEhPHn8TR {Z5P $hX*߿o§{x`wM3?l_"OG 2/FhTuJZ`?lHFm#` =] =pJr`p&|:Kq激)z7㿀'APῐݫ@p+i@9o@0VH@V @ef@Lns%-@ˁB @)=X\@hm@U@(AR@m@@DYH@@@`q*?@/@,.BE@|@~ؾDg@. )@53@dԖ>@<\I @"T4@^]@Ji@Mtt@|:@Z@ ǔ*@S@h7S|@f#@Ɣ*߿@v1@$8k @ @1I@OGr@4~N@U@\I @@ d@8k @@gr+i@Pya6@ŀ'A@K@`"V @Qya6@?l_@lw@ݫˁ@ @|:W@,i,@ܗU@ϩ~@8o§@#5@R@H"@K@Mt@T @< @j@df#@,.B@%8k@t%-C@$T4~N@Ђ;DY@B d@0In8@Qya@=X\@@l_"@f@m@Ltt.@&|:W@Uŀ@\ϩ@ @R@4P x @So& @6W҂; @!@Ov1!@XHF!@}Pl?}^V"l?`m?K$n?QQ&n?ȭeso?gRWp?}3kp?xٳp?&q?պIxȈq?1Vpq?`}Ur?bgQur?c .s?}4s?Msh;t?Iݍt?22? u?P u?;ѐv?|?7/|?X*~}?dЉ~?k8[?7 Z?WǐC?gb72?Ow?R4?%.r[u?}E?~߆?O[7`?<]?.:8I?7? LXڒ?n1xA?)&@?Ҹ?⋫x?~pD?H??ԔC݌?Xs͍?e)Ȏ?"f͏?n?E?d:?ot,?lPΒ?tw?:C(?!%)?R?1m?9i@??/r?k-?O<=?͓? ?dMWDG?5OLF}?aeua?Ռ ?P0e?O}?v#kD?V*L??ش?\f٥?oP{Φ?HZSϧ?2Oި?gY?9(?,vbe?j+-?8<?IW~C?{?z0Wձ?DLl ߮?Y5?p{? )?? T?=(7Ƹ?$r(?}9??p+y[?^INN?]B0b?/$?~?'I?A߲?t?˧T?PΌ#%?r?ǂ+?/.|?(8ޣ1?H ?@Ud?Yqسj?/>D.?3C(p]?~?_?Qb-?N?nw!?ۙö5?Qs? 6u?SS?Cݜ~? =(?YVϸ?1 5?_)ũ?y?kR$G<')ũl 5ZVϸ=(mCݜ~PSÿ6uſQsƿö5ȿnw!ɿوNɿOb-ʿ~?_ʿ1C(p]ʿ0>D.ʿ[qسjɿ@UdɿE ȿ48ޣ1ȿ/.|ǿ̂+ƿrſSΌ#%ſȧTĿ>߲?tÿ I¿/$]B0brINNv+y[使y}98r(=(7Ƹ T )x{Y5KLl ߮{0WձIW~CD<j+-3vbe9(mY2OިHZSϧxP{Φ\f٥?ش񤿨V*Lv#kDO}D0eՌ deua?OLF}MWDG' ݓa<=k-/r;i@1m$R(%)ᔿ:C(tw lPΒ-ot,l:Jn"f͏g)ȎPs͍ԔC݌S~pD⋫xҸ-&@)n1xA LXڒ5ꅿ):8IC]O[7`~߆E4.r[uQ4󁿣OwWb72WǐC8 Z8[]Љ~X*~}7/|7>|'!\1{ ,ozep,zuy]*x$""Kx%wkc:$wPlqX3kK <,k1skjd|j/˒iLfiZl\h )4yhma~xghQ,gSܩfWKfgevee;dWIdkbc/?Kc1C;o2c(ľb+(b.b]a^kae-.!R {!wM3 s KZp( l$ +i De^ ay e^d =Z5P 6W҂; So& 5P x R \ϩUŀ&|:WNtt.mf@l_"=X\Qya2In8B d҂;DY#T4~Nt%-C%8k,.Bef#j< W MtKH"R#5:o§ϩ~ۗU,i,|:W ݫˁnw?l_Qya6`"V Kŀ'AQya6gr+i8k @C d\I U4~NOGr @1I&8k w1ǔ*߿f#h7S|S ǔ*Z|:MttLi^]"T4=\I dԖ>53/ )ؾDgЩ~>!{qL,fcpGcT4~Nwo§Fhzya6QJZp(8S|KqپDg)=X\za6Q[2/F2(< k @1z& x]I e(<aO_ۗ@1InكEѽdJ_cJx4CH2jK[ wM3L*? ̼0ɨ l_"V  w PGr` ^] G 4/F2j ѽ vt. s ! X\ u} gr+ ݫQyVŀ'%8kU:k @1)U`q*8Tu70ɨ-v}@Rŀ'AEhPHn8TR {Z5P $hX*߿o§{x`wM3?l_"OG 2/FhTuJZ`?lHFm#` =] =pJr`p&|:Kq激)z7㿀'APῐݫ@p+i@9o@0VH@V @ef@Lns%-@ˁB @)=X\@hm@U@(AR@m@@DYH@@@`q*?@/@,.BE@|@~ؾDg@. )@53@dԖ>@<\I @"T4@^]@Ji@Mtt@|:@Z@ ǔ*@S@h7S|@f#@Ɣ*߿@v1@$8k @ @1I@OGr@4~N@U@\I @@ d@8k @@gr+i@Pya6@ŀ'A@K@`"V @Qya6@?l_@lw@ݫˁ@ @|:W@,i,@ܗU@ϩ~@8o§@#5@R@H"@K@Mt@T @< @j@df#@,.B@%8k@t%-C@$T4~N@Ђ;DY@B d@0In8@Qya@=X\@@l_"@f@m@Ltt.@&|:W@Uŀ@\ϩ@ @R@4P x @So& @6W҂; @!@Ov1!@XHF!@}P?\]ZQ?=>?Q?ܣ~Q?*Q?"KQ? A=_BR?kR?MLR?ś{S?3˕7YS?ҶI[S?S?E8T?TnMT? T??2wa&U?;u6xU?SǵU?9e/k"V?AyV?yd$V?k~?.W?Q?W?ҋ/W?_!6KX?zhX?U(+Y?-X,ezY?Y?iOZ? PwZ?.[?qx[?fT\?HX\?Ӎ2 ]?1zs]?-^?NNԉ^?]x_?B_?fG`?uԁZ`?Ʀ`?v6`?brM. Ian?&EZ_ro?L:p?) Ujp?8p? Jp%q?Mmчq?Vtq?sTr?¡ar?jF-s?y s?Gt?T#t?JVu?[H,u?Ado v?tLv?ag"w? w?:L%Jx? x?>4y?*z?B׍[z?Q2{?O4<|?g!N|?}7:}?$]t~? ]X? F?;SW숀?3$?Nlu?^?Ķs?ǥ?H ?;7? ut?CpG?Q.Y?d?AJ+???$C:?}vu?`A?@3?:c(?QX ڌ?‰<ʍ?)>șĎ?x"Yɏ?#3Yl??qBQ?5͎'*?˒?pt?%?IWZ#?Ro3`?t)?%R+?@?5?| ұ?Eh ?M?WD?S|?3ګ?kȝ?( ¸?n2?_5?󵄼?3m?M&梵K?(va?ds#?)r?uqo?6(?bT?樭_%?Ҁg?Y?!/?75?uX?l? O^?g_i;?dCpll?+^!|p?u@?Ħv?t@,?9i i;?? ?'x?V ҇??.Y*?eѸ?8.@?B{Ʃ?h*?g*@{Ʃ(9.@eѸ.Y*V ҇ÿp'xſ? ǿhi i;ȿt@,ɿvɿu@ʿ>^!|pʿdCpllʿQ_i;ʿ:O^ɿlɿuXȿ75ȿ'/ǿYƿgſ樭_%ſbTĿ6(ÿuqo¿6)rds#(vaf&梵K3m὿󵄼<52 ¸kȝ3ګS|WDaEh | ұ5@$R+)Ro3`3IWZ#:Ls?w٨}޽ʧɦ8}ե l }si@t$=ziOC ;_^2/xC\YBr!HctaLG+=җt`'|=i |hORޔ%[tÅ˒A͎'*BQ#3Yl"Yɏ)>șω<ʍeX ڌ9c(_3`A}vu,C:􇿝AJ+?!dP.Y腿CpG ut<7H Ķs^Nlu3$:SW숀:F ]X-]t~}7:}g!N|O4<|Q2{T׍[z*z>4y& xK:L%Jx wg"wbLvAdo vH,uJVuq#tGty sjF-sarQsTrJtq1MmчqJp%q8p' UjpL:pV&EZ_roIan(8}#nf=mHolˠVNl?kѼ*k\kܞjJvjGirHiErGh9Dh[gn`oU+g NfJfIueAueFGdeGֻd*uyHd Jyc]Юc%1cE bZ4rzbK]-b1ia G'̊abrM. ?Q\]ZQv>P|Pa1PP0P湶O C*OOyN>RTxNd7N QMy_/DMk2L~h~L[LPjKVfeKȥ K]yJf\YJ-|J(P[I?T[I{Tx\ IXøHniH OnH G*"Gg+!X9G!cFG(ZF*6bF<FP-E2KES ԷREfMwE@+uDYDYDSNOD8Xx XTREEHEAPXxP8X @__uuid$, @ __baseline ?@4 4 H __curvestyle- 8__shade ?@4 4 H __format. P &__showlabelFALSETRUE 8 __number  0 __dict 8X H annotations/ @xlabel0 @xunit1 @ylabel2 @yunit3 P &autoscaleFALSETRUE P &xscalelogFALSETRUE H xscalemin4 H xscalemax5 P &yscalelogFALSETRUE H yscalemin6 H yscalemax7`TREEhHEAPX `xydatametadata8 @title8( ?@4 4(@x$hz#Q9#9o#s#I e#s߄#JZp#BE[#߄OG#!2#;ؾD#[ #P9"4͕"!2/"ϩ"-l$"[ "}Ļz"&-Ce"ΕQ"v}<"g("ϩ~"o8T!s! !hr+i!ۗ!Ce^!`ك! So!}!R {!wM3 s KZp( l$ +i De^ ay e^d =Z5P 6W҂; So& 5P x R \ϩUŀ&|:WNtt.mf@l_"=X\Qya2In8B d҂;DY#T4~Nt%-C%8k,.Bef#j< W MtKH"R#5:o§ϩ~ۗU,i,|:W ݫˁnw?l_Qya6`"V Kŀ'AQya6gr+i8k @C d\I U4~NOGr @1I&8k w1ǔ*߿f#h7S|S ǔ*Z|:MttLi^]"T4=\I dԖ>53/ )ؾDgЩ~>!{qL,fcpGcT4~Nwo§Fhzya6QJZp(8S|KqپDg)=X\za6Q[2/F2(< k @1z& x]I e(<aO_ۗ@1InكEѽdJ_cJx4CH2jK[ wM3L*? ̼0ɨ l_"V  w PGr` ^] G 4/F2j ѽ vt. s ! X\ u} gr+ ݫQyVŀ'%8kU:k @1)U`q*8Tu70ɨ-v}@Rŀ'AEhPHn8TR {Z5P $hX*߿o§{x`wM3?l_"OG 2/FhTuJZ`?lHFm#` =] =pJr`p&|:Kq激)z7㿀'APῐݫ@p+i@9o@0VH@V @ef@Lns%-@ˁB @)=X\@hm@U@(AR@m@@DYH@@@`q*?@/@,.BE@|@~ؾDg@. )@53@dԖ>@<\I @"T4@^]@Ji@Mtt@|:@Z@ ǔ*@S@h7S|@f#@Ɣ*߿@v1@$8k @ @1I@OGr@4~N@U@\I @@ d@8k @@gr+i@Pya6@ŀ'A@K@`"V @Qya6@?l_@lw@ݫˁ@ @|:W@,i,@ܗU@ϩ~@8o§@#5@R@H"@K@Mt@T @< @j@df#@,.B@%8k@t%-C@$T4~N@Ђ;DY@B d@0In8@Qya@=X\@@l_"@f@m@Ltt.@&|:W@Uŀ@\ϩ@ @R@4P x @So& @6W҂; @!@Ov1!@XHF!@}(?;,~xe)?ĉ9)?䏩v9*?#ˤ*?i\+?Xvކ+?YNt+?olp,?<`,?vud-?2~q-?3b.?.?Du k/?&%=/? ԍ6?0?-mW"0?[^0?MZi@1?22f1?-aʳ1?(,2?uT2?g2?)2? aqR3?=n3?St4?Aa4??tĿ4?j 5?D5?O_5?aO6?Ĕ򪛹6?[* %7?dJ餔7?eKB8?z8?#>8?졷]j9?z9?6|Ef:?n1:?ǟkn;?rDN;?𤇃??䮿>?x!*v??OyF @?m_@?ˌ/ܴ@?:` A?V fA?r³.A?mJ B?~B?J-@B?L2\JC?1C?0D?^t}gD?A.D?1sE?lvE?={+eF?S9F?:藽dG?G?G%rH?Ld|2H?OFI?-}FU$J?%J?)6ԎPZK? K?C$NL?:xrMM?M?ٲN?6}wmO?,P?ҙk^yP?ڦ=-P? xꀗHQ?!Q?b+$R?c}R?g S?Q5vS?yST?2\_#T?^IM U?'V#3U?i %V?WVV?zPW?SW?4(X?2 6Y?5 Y?0YZ?}LN[?F \?|\?}v]?r7зr^?>E`tL_?b$T3`?8 #`?tO2a?ȓia?|db?b?h\Hc?{c?g~hہ+?/:K$?5ީ׻?c0uv?c='?c?#%[H?/?tq/?ֺ?x pႡ?;`i?G (^?lT`?F?5r? h?p ǧ?pC?K)?y/A?YS'P?tD?6q?ѱH? ?$cc?U?(?%?T? J]U?V9}?wK?9\%7r?yL?BP0?bX?ˁB?8?l8?JUi?`f2|qvт;Casǿ\̲οHcӿ{;(|ֿ-{l$ڿqM(޿u|qGyQa%7k/,RJ,RJk/DQa%Gy.|qM(޿.{l$ڿw;(|ֿIcӿr̲ο$7Casǿsтw|``f\Ui?Ql8?}/?݆B?eX?&P0?yL?\%7r?K?9}?E J]U?T?@%?$?v$cc??ѱH?6q?D?U'P?G/A?\ K)?ţ,>C?T3?MI??P5o?X7D?~%?Ӕ4$E?{ ?$sLT?L'?PK2F?"fZS?(OVL?d#Lͫ?;b?%r'?R'uv?Bީ׻?,4K$?>+?:.),?^lGq?|#֒?d?$67?rpx?Rֳ?,aFW.?1`?Ka/Ұ?DY?Eq? pf?:+h?k w?i?v:ˑ?x?ˈN?5O ?-&b? Q=??LM[]?m3:Ӂ?i KV~?gy,8}?&|?Hrp!{?׎'z?S98y?6OSx?Jxw?hv?b(u?{ku?x&ft?rʁs?= s? jir?lq?8q?8RWzp?/wp?I4o?Y`5n?@m?{MUl?sk?AF(Tj?Bi?]%Lh?kf={+eF?vE?u1sE?A.D?ǫt}gD?0D?ʟ1C?\JC?9@B?~B?mJ B?!.A?V fA?:` A?Ռ/ܴ@?_@?yF @?^z*v??㮿>?/=>?%]=?.=?񤇃8?|z8?arB8?J餔7?ٜ* %7?Ĕ򪛹6?aO6?"O_5?7D5?̂j 5?:tĿ4?՝Aa4?St4?=n3?aqR3?e2?h2?atT2?B,2?%aʳ1?22f1?MZi@1?A^0?W"0?Ӎ6?0?۳=/?fu k/?.?3b.?~q-?;2wud-?X`,?olp,?jNt+?Xvކ+?i\+?a*?让v9*?9)??~xe)?H|>(?x*(?SNOD pXTREEHEAPXP @__uuid$9 @ __baseline ?@4 4 H __curvestyle: 8__shade ?@4 4 H __format; P &__showlabelFALSETRUE 8 __number  0 __dict  @ H annotations< @xlabel= @xunit> @ylabel? @yunit@ P &autoscaleFALSETRUE P &xscalelogFALSETRUE H xscaleminA H xscalemaxB P &yscalelogFALSETRUE H yscaleminC H yscalemaxD `TREE*HEAPX xydatametadata8s004: derivative(s001)s005: derivative(s002)s006: derivative(s003)`0 @titleE( ?@4 4x @x$hz#Q9#9o#s#I e#s߄#JZp#BE[#߄OG#!2#;ؾD#[ #P9"4͕"!2/"ϩ"-l$"[ "}Ļz"&-Ce"ΕQ"v}<"g("ϩ~"o8T!s! !hr+i!ۗ!Ce^!`ك! So!}!R {!wM3 s KZp( l$ +i De^ ay e^d =Z5P 6W҂; So& 5P x R \ϩUŀ&|:WNtt.mf@l_"=X\Qya2In8B d҂;DY#T4~Nt%-C%8k,.Bef#j< W MtKH"R#5:o§ϩ~ۗU,i,|:W ݫˁnw?l_Qya6`"V Kŀ'AQya6gr+i8k @C d\I U4~NOGr @1I&8k w1ǔ*߿f#h7S|S ǔ*Z|:MttLi^]"T4=\I dԖ>53/ )ؾDgЩ~>!{qL,fcpGcT4~Nwo§Fhzya6QJZp(8S|KqپDg)=X\za6Q[2/F2(< k @1z& x]I e(<aO_ۗ@1InكEѽdJ_cJx4CH2jK[ wM3L*? ̼0ɨ l_"V  w PGr` ^] G 4/F2j ѽ vt. s ! X\ u} gr+ ݫQyVŀ'%8kU:k @1)U`q*8Tu70ɨ-v}@Rŀ'AEhPHn8TR {Z5P $hX*߿o§{x`wM3?l_"OG 2/FhTuJZ`?lHFm#` =] =pJr`p&|:Kq激)z7㿀'APῐݫ@p+i@9o@0VH@V @ef@Lns%-@ˁB @)=X\@hm@U@(AR@m@@DYH@@@`q*?@/@,.BE@|@~ؾDg@. )@53@dԖ>@<\I @"T4@^]@Ji@Mtt@|:@Z@ ǔ*@S@h7S|@f#@Ɣ*߿@v1@$8k @ @1I@OGr@4~N@U@\I @@ d@8k @@gr+i@Pya6@ŀ'A@K@`"V @Qya6@?l_@lw@ݫˁ@ @|:W@,i,@ܗU@ϩ~@8o§@#5@R@H"@K@Mt@T @< @j@df#@,.B@%8k@t%-C@$T4~N@Ђ;DY@B d@0In8@Qya@=X\@@l_"@f@m@Ltt.@&|:W@Uŀ@\ϩ@ @R@4P x @So& @6W҂; @!@Ov1!@XHF!@}=?Ro>>?(>?~nz]}w??a @?U7`@?sq`@?9A A?A6NfA?aurA?qKn!B?N/bVB?+g5B?QKC?,$ᡈC?V> D?@h3cD?mgD?tT tE?!C>nE?BVLIfF?k`F?9teG?cG?JsH?I?.I?7%J?2J?М[K?1{K?oL?OM?( JM?uN?NoO?PP?p'zP?]=1P?ƦIQ?ԵQ?;fN%R?Cu2R?n=S?*)S?YT?0ՀT?a$uU?ꅫU?0VJ'V?bV?pn#uRW?\W?eX?Zt=8Y?`pY?-XZ?h®Q[?t \?&H\?}g]?`|ڊt^?b8N_?tӫ`? `?Ea?dE*K a?ܝ.b?Ձb?c?,HS肨c?{Z>d?Qᘺd?Eze?j"f?̷Wf?O sg?4c~D>h?i?Ӏi?1fj?AKDuk?@OXl?@-Cm?G8n?Aۻ}7o?%W p?ҡ`p?+o:q?!q?iK/kr?Nls?\os?Mht?{X!u?u?\v?DW||w?a Wx?P;y?Xxs.+z?vA%{?S*|?Ϲi<}?5Z~?싊?Mx=`?.?Q8?q}!e?me8"#?e52?C2z?]t?kk{?m?0Gj?LM'u?C?}L?Ŗ?Es#4?!imڌ?giM|?##>-j;?!H.5?#Z ڒ?+Yaw?8ґ?k;á?.?Hk?? y?4ki? '4Ŝ?i6?XGw?)?)n ?T#Dn?mSb?xxHe?w?xt?6̧?O?ei?Di&ԫ?, sS?˰[?گ J?$F+?\g?$"?zr?Bh)?NH?&s? ?JD?l'6?*(?bL8 ۽?׏9?ˆL?^ 6?N? D?Ք ?jl^?3?\j?.oL?/ L?郣T?xe=E?6V?(?+,?NȻ?^߶?,?'^<>?V?M&Zp'SQBE<2|Lƿ3+&`xο ӿ ֿ&"ڿ*#޿'@o,  wl_c$!{G`SI俆G`SI{㿟n_c$㿺+  s'@٧#޿b'"ڿ ֿ ӿk-&`xο~|LƿE?,?^߶?NȻ?Y+,?g(?V?dwe=E?AT? L?.oL?\j?3?յjl^?Ք ?$ D?N?G^ 6?ˆL?揥9? K8 ۽?*(?rl'6?ߔJD?C ?&s?NH?qBh)?5zr?"?*\g?$F+?+ J?[?. sS?i&ԫ?fi?O?6̧?wt?w?ByHe?gmSb?5$Dn?)n ?)?.Fw?i6?)4Ŝ?f4ki? y??-k?0?-;á?l9ґ?JXaw?i#Z ڒ?H.5?v#>-j;?iM|?imڌ?8s#4?Ɩ?бL?C?M'u?0Gj?m?k{?at?XD2z?52?me8"#?}!e?8?Y?h? sg?Wf?"f?Dze?Qᘺd?Z>d?KS肨c?.c?Dׁb?۝.b?H*K a?:Ea? `?sӫ`?b8N_?}ڊt^?g]?&H\? \?5U®Q[?rXZ?pY?#ht=8Y?leX?|\W? n#uRW?ybV?VVJ'V?‡ꅫU?_$uU? 0ՀT? YT?0)S?AS?=Du2R?8;fN%R?~ԵQ?ƦIQ?P?1P??m'zP?P?NoO?N?;( JM?OM?=hL?i{K?[K?2J?7%J?}.I?lI?sH?cG?9teG?`F?VLIfF?O>nE?T tE?gD?(d3cD?> D?a ᡈC?TQKC?e5B?/bVB?mKn!B?trA??*o>>?xB=?\=?jY(6[@(A&(zB (oʡE'dy)'YQI'N^)'B:M'7s',PkZ'!Έ@'`TR'' 8 'bX9&=٬&[ &ݓ&o_&ȭGzt&cZ&eaA&Af'&H&~j%V/%z.n%o%diq%YEt%N!uq[%BeA%7=yX(%,%!|?$m$ I&$%u$M $$u$޸[$Ӕ hB$p($L O$(\#46# ###ztv#oPkw\#d,CB#Y^)#N#BʡE"7#",xz,"!TR'"0*" +v"٬\"ñ.nC"韉)"{a2U"W9!36W[ -ܵ}k5YA&oʡEYQIB:M,PkZ`TR'bX9[ o_cZAf'~jz.ndiqN!uq[7=yX(!|? I&M ޸[p((\ oPkw\Y^)BʡE,xz,0*٬\韉)W9鷯ǘH}]z7d*dKNW27_!^ f* -}k9#d]K7ͪV = ף ެiq ?$ ( YW ,l Fx K F%  z+eX N ! $(~ z/L& 6ZB>YoʡEB:M`TR'[ cZ~jdiq7=yX( I&޸[(\Y^),xz,٬\W9ǘz7d*NW2!^ -9#7ͪVެiq( ,lK F%z+eX! $(~6oʡE`TR'cZdiq I&(\Y^)٬\ǘNW2 -7ͪV( K F%! $(~oʡE翽cZ I&Y^)㿧ǘ -߿( ܿ! $(~ٿcZֿY^)ӿ -Ͽ! $(~ɿY^)ÿ! $(~! $(~! $(~?! $(~?Y^)?! $(~? -?Y^)?cZ?! $(~?( ? -?ǘ?Y^)? I&?cZ?oʡE?! $(~?K F%?( ?7ͪV? -?NW2?ǘ?٬\?Y^)?(\? I&?diq?cZ?`TR'?oʡE?6?! $(~?z+eX?K F%?,l?( ?ެiq?7ͪV?9#? -?!^@NW2@z7d*@ǘ@W9@٬\@,xz,@Y^)@@(\@޸[@ I&@7=yX(@diq@~j@cZ@[ @`TR'@B:M@oʡE@ZB>Y@6@z/L& @! $(~ @N @z+eX @ @K F% @Fx @,l @YW @( @?$ @ެiq @ = ף @7ͪV@d]K@9#@}k@ -@ f*@!^@7_@NW2@dK@z7d*@H}]@ǘ@鷯@W9@韉)@٬\@0*@,xz,@BʡE@Y^)@oPkw\@@ @(\@p(@޸[@M @ I&@!|?@7=yX(@N!uq[@diq@z.n@~j@Af'@cZ@o_@[ @bX9@`TR'@,PkZ@B:M@YQI@oʡE@A&@ZB>Y@:@6@2333@z/L&@ +eY@! $(~@7St$@N @d%@z+eX@s@@V-@K F%@_X@Fx@$@,l@B7$@YW@oD@( @x&@?$@dXW@ެiq@ڊ@ = ף@!ZӼ#@7ͪV@M@d]K@z @9#@5W[ @ f* @StD @!^ @,;Ow @7_ @C/L @NW2 @YH @dK @oD!@z7d*!@[ AC!@H}]!@p= w!@ǘ!@9#!@鷯!@36Y(@~jts(@:(@ƺ(@6(@ (@YD?t\sD?D?'S{CD?tD?@1|D?l4D? SD?OrnژD?AD?54zD?1D?ƖD?D?~2tOD?#J[FD?:hrD?bӯD?;jD?Q/7D?V9D?rD?D?ߍFD?ibD?duD?lWD?{VBD?cD?pg.D?ND?=|D?)*D?E? E?5-%OIE?JC8FE?oP E?fۉ(E?T0E?159E?`AE?y{QJE?&=SE?6j]E?..(gE?_+pE?"${E?)E?\SS7E?>#E?8hQE?Y{i±E?y wE?K4BqE?v%"E?3E?ZE?ZtE?. k F?}F?$F?B?23F?+AF?=$!PF?{_F? M{ oF? ~F?t(ΎF?)F?֯F?WVZF?TF,F?gߺF?ZF?q0G?ܚG?-G?WAG?/UG?_J@iG?i+}G?F=ާG?fG?1G?R_G?#G?ͿH?OH?60H?9L-HH? Æ`H?YyH? &GH?R8H?{3H?68w݃H?ttH?},I?PG6I?YLRI?lapI?>MI?ĬI?:fI?ZI?~ J?ǤC8,J?1V;MJ?/voJ?Hz>J?a9,J?"J?tJ?%"K?BjHK?dnK?چ*K?S}K?d6MK?ˬIL?T:L?bJeL?gL?G'L?ߛL?I6M? 2dJIM?E|yM?GM?@#.M?5JN?%iCN?!xN?՚N?NN?GO?!jXO?ujm!O?mMO?T P?`$P?SDP?vJX?w0 X?r4^^]?@Č?^?aLI^?lC_?cэ._?4ӻg~`?t_?L@ha?tvG`?Mٚb?ٲT`?u%Dd?jc[_?; f?T0ɁK]?O(j?*{fW?xhp?ۯ4 K?u?{6P?1M~?˳k?i?^L1??T?\q?} `ʞ?:m4?g':?=Щ?bʸ?=|?oD|y?st?gNg?J?8C"¹|?3?̳M?{)?.Up1 ? 6{?k\@"(@@@ @I,Q@f3lR@fӗ:r@!dU& @ˣb Y @u,R!@1a"@a/ @8T!@YD?8T!@a/ @1a"@u,R!@ˣb Y @!dU& @eӗ:r@f3lR@I,Q@@ @"(@@k\@ 6{?0Up1 ?})?̳M?3?6C"¹|?J?gNg?wt?mD|y?=|?bʸ?=Щ?g':?:m4?} `ʞ?q?T??^L1??9k?M~?4P?u?l4 K?xhp?*{fW?(j?/ɁK]? f?c[_?r%Dd?ٲT`?HMٚb?uvG`?4^^]? }l%]?9w\?(\?g [?A8@[?"Z?%ikZ??dY?ecuY?hCY?X?.@W?҅MۯW?K4(MW?`[5XW?X4V?ބwpV?.t5+V?CU?沈ޥU?bm۱eU?8'U?; \T?b՛T?B6LvT?=T?/T?]GS?("kS?GkKjS?8S?@jS?1tR?I xܪR?@LEx}R? QR?iz&R?֠UQ?!d&#Q?ڪQ?)&uQ? \Q?Y87Q? tUQ?3J?voJ?&V;MJ?oC8,J?~ J?VZI?fI?|ĬI?>MI?رapI?ZLRI?OG6I?},I?ntH?7w݃H?-{3H?R8H? &GH?†yH?̆`H?9L-HH?50H?OH?ٿH?#G?hG?1G?fG?#=ާG? +}G?΄J@iG?0UG?WAG?-G?ͣG?\q0G?fF?`ߺF?WF,F?TUZF?%֯F?l)F?`(ΎF? ~F? X{ oF?{_F?<9$!PF?(+AF?~?23F?$F?F?5 k F?qE?{E?3E?9"E?O4BqE?YwE?mi±E?^QE?>#E?SS7E?=k)E?"${E?"]+pE?#/(gE?,&j]E?GSE?jQJE?9`AE?159E?ΨT0E?eۉ(E?5lP E?78FE?9%OIE? E?vE?*D?ǰ=|D?ND?ig.D?iD?JuVBD?kWD?muD?BibD?VFD?RD?rD?V9D?jX/7D?jD?ӯD?Z;hrD?J[FD?D"tOD?D?D?T1D?54zD?*AD?qnژD?vSD?))D?/*|D?tD?VS{CD?ED?dsD?SNOD]]` < x`XTREEHEAPX `P]` @__uuid$T @ __baseline ?@4 4 H __curvestyleU 8__shade ?@4 4 H __formatV P &__showlabelFALSETRUE 8 __number  0 __dict 7: H annotationsW @xlabel X @xunitY @ylabelZ @yunit[ P &autoscaleFALSETRUE P &xscalelogFALSETRUE H xscalemin\ H xscalemax] P &yscalelogFALSETRUE H yscalemin^ H yscalemax_`i`TREEHEAPX ixydatametadata8p @title`( ?@4 4j@x2333( (6(ƺ(:(~jts(ZB>Y(6[@(A&(zB (oʡE'dy)'YQI'N^)'B:M'7s',PkZ'!Έ@'`TR'' 8 'bX9&=٬&[ &ݓ&o_&ȭGzt&cZ&eaA&Af'&H&~j%V/%z.n%o%diq%YEt%N!uq[%BeA%7=yX(%,%!|?$m$ I&$%u$M $$u$޸[$Ӕ hB$p($L O$(\#46# ###ztv#oPkw\#d,CB#Y^)#N#BʡE"7#",xz,"!TR'"0*" +v"٬\"ñ.nC"韉)"{a2U"W9!36W[ -ܵ}k5YA&oʡEYQIB:M,PkZ`TR'bX9[ o_cZAf'~jz.ndiqN!uq[7=yX(!|? I&M ޸[p((\ oPkw\Y^)BʡE,xz,0*٬\韉)W9鷯ǘH}]z7d*dKNW27_!^ f* -}k9#d]K7ͪV = ף ެiq ?$ ( YW ,l Fx K F%  z+eX N ! $(~ z/L& 6ZB>YoʡEB:M`TR'[ cZ~jdiq7=yX( I&޸[(\Y^),xz,٬\W9ǘz7d*NW2!^ -9#7ͪVެiq( ,lK F%z+eX! $(~6oʡE`TR'cZdiq I&(\Y^)٬\ǘNW2 -7ͪV( K F%! $(~oʡE翽cZ I&Y^)㿧ǘ -߿( ܿ! $(~ٿcZֿY^)ӿ -Ͽ! $(~ɿY^)ÿ! $(~! $(~! $(~?! $(~?Y^)?! $(~? -?Y^)?cZ?! $(~?( ? -?ǘ?Y^)? I&?cZ?oʡE?! $(~?K F%?( ?7ͪV? -?NW2?ǘ?٬\?Y^)?(\? I&?diq?cZ?`TR'?oʡE?6?! $(~?z+eX?K F%?,l?( ?ެiq?7ͪV?9#? -?!^@NW2@z7d*@ǘ@W9@٬\@,xz,@Y^)@@(\@޸[@ I&@7=yX(@diq@~j@cZ@[ @`TR'@B:M@oʡE@ZB>Y@6@z/L& @! $(~ @N @z+eX @ @K F% @Fx @,l @YW @( @?$ @ެiq @ = ף @7ͪV@d]K@9#@}k@ -@ f*@!^@7_@NW2@dK@z7d*@H}]@ǘ@鷯@W9@韉)@٬\@0*@,xz,@BʡE@Y^)@oPkw\@@ @(\@p(@޸[@M @ I&@!|?@7=yX(@N!uq[@diq@z.n@~j@Af'@cZ@o_@[ @bX9@`TR'@,PkZ@B:M@YQI@oʡE@A&@ZB>Y@:@6@2333@z/L&@ +eY@! $(~@7St$@N @d%@z+eX@s@@V-@K F%@_X@Fx@$@,l@B7$@YW@oD@( @x&@?$@dXW@ެiq@ڊ@ = ף@!ZӼ#@7ͪV@M@d]K@z @9#@5W[ @ f* @StD @!^ @,;Ow @7_ @C/L @NW2 @YH @dK @oD!@z7d*!@[ AC!@H}]!@p= w!@ǘ!@9#!@鷯!@36Y(@~jts(@:(@ƺ(@6(@ (@3W=D1C>X15+>pS>UȌ>-E՝o>v5R>A>K#=>k>Ot l>uÝ >N%M><Ǽ>?>\_M?o?K6B?_옙>?OK*?3= `?ږ ?jUJ ?c ? 18 ?jm?l~U?Dxk?jf?YJ?)(?D )?OO)?B)?0Xh)?ל*?X uBZ*?iMN*?f怍*?+?B7I`+?wD+?``(+?#,?Tc,?X&5C,?R,?-?P-?ްwA .?s[.?3 .?[.?Zk8/?+P/?UY/?Z/?( Y0?:5( 0?B =0??S[0?x0?u0?W.0?` 0?o C0?g,% 1?TK%1?A1?Y Ky]1?Ry1?> 1?qV?6+?8?%l??_?Pl?<@7-9j@z[ @ ?nj@1y@4,N@YQ!@SRj` @A*"@:&.M%@34'@њ )@ *@@Gl~X*@!)@^Bd&@P9!@ܧ:@ ,!aow?2q ? ,!aow?ܧ:@P9!@^Bd&@!)@?Gl~X*@ *@њ )@34'@:&.M%@A*"@SRj` @[Q!@3,N@1y@ ?nj@z[ @8-9j@<@Pl?_??~%l?8?6+?h>qV?ݩ?裻?DS?y~mA<?=e?Ϧ(&?n?WA߰?Ed?#@?8ޭG?2Ө6?}?]Bd\? τ?;|N?nuU?:՟6?YQM??-ME?P2T ?)zEvxA?|T\w-?47aW=?ts7L2?R!:?gkE4?om} !9?sT5?*28?-~_5?P8`7?b6,6?1C6?dy*0,6?PCJ6?߮*$6?s*X6?XH 6?R^"6?ya5?5S3v5?򩾻s5?8$A5?p-٤5?@}5?w.V|5?% Hk5?R5?DWa$?5?񦟱'5?*F 5?6]4?WƎ84?񊱵4?T4?ʠ4?r4?_Ju4?eYg^4?ѬF4?S/4?5<.4?̲4?X&_3? }u3?3ocԷ3?v3?3?H9n3?0 ZU3?s8 jT<3?O"#3?U| 3?7fC2?n2?p]O2?2?w2?7n2?\S2?kK92?";2?D ?2?ͬ1?h1?PQ1?G 1?Ry1?dKy]1?fǍA1? UK%1?k,% 1?B0?d 0?T.0?0?x0?|S[0?_ =0?ԧ5( 0?$ Y0?Z/?@Y/?V+P/??k8/?+[.?Z .?oy[.?ywA .?2P-?%_>-?Ooja-?XO"-?N[,?5C,?;Tc,?*#,?`(+?D+?1I`+?+?*?iMN*?euBZ*?ל*?Xh)?^AB)??O)?%D )?>(?0(?@(? E'?m7'?x&s'?:o̦.'?g&?{P&?Jj^&?b%&?8RǍ%?M%?6?6B?oHo?X_M?,c?<Ǽ>M%M> >=t l>!uk>쪝#=>ΧA>v5R>W՝o>UȌ>axS>5+>V5C>SNODXi XTREEHEAPXP @__uuid$a @ __baseline ?@4 4 H __curvestyleb 8__shade ?@4 4 H __formatc P &__showlabelFALSETRUE 8 __number  0 __dict fh H annotationsd @xlabel e @xunitf @ylabelg @yunith P &autoscaleFALSETRUE P &xscalelogFALSETRUE H xscalemini H xscalemaxj P &yscalelogFALSETRUE H yscalemink H yscalemaxl`TREE`HEAPX xydatametadata8s007: magnitude_spectrum(s004)s008: magnitude_spectrum(s005)s009: magnitude_spectrum(s006)H @titlem( ?@4 4 @x2333( (6(ƺ(:(~jts(ZB>Y(6[@(A&(zB (oʡE'dy)'YQI'N^)'B:M'7s',PkZ'!Έ@'`TR'' 8 'bX9&=٬&[ &ݓ&o_&ȭGzt&cZ&eaA&Af'&H&~j%V/%z.n%o%diq%YEt%N!uq[%BeA%7=yX(%,%!|?$m$ I&$%u$M $$u$޸[$Ӕ hB$p($L O$(\#46# ###ztv#oPkw\#d,CB#Y^)#N#BʡE"7#",xz,"!TR'"0*" +v"٬\"ñ.nC"韉)"{a2U"W9!36W[ -ܵ}k5YA&oʡEYQIB:M,PkZ`TR'bX9[ o_cZAf'~jz.ndiqN!uq[7=yX(!|? I&M ޸[p((\ oPkw\Y^)BʡE,xz,0*٬\韉)W9鷯ǘH}]z7d*dKNW27_!^ f* -}k9#d]K7ͪV = ף ެiq ?$ ( YW ,l Fx K F%  z+eX N ! $(~ z/L& 6ZB>YoʡEB:M`TR'[ cZ~jdiq7=yX( I&޸[(\Y^),xz,٬\W9ǘz7d*NW2!^ -9#7ͪVެiq( ,lK F%z+eX! $(~6oʡE`TR'cZdiq I&(\Y^)٬\ǘNW2 -7ͪV( K F%! $(~oʡE翽cZ I&Y^)㿧ǘ -߿( ܿ! $(~ٿcZֿY^)ӿ -Ͽ! $(~ɿY^)ÿ! $(~! $(~! $(~?! $(~?Y^)?! $(~? -?Y^)?cZ?! $(~?( ? -?ǘ?Y^)? I&?cZ?oʡE?! $(~?K F%?( ?7ͪV? -?NW2?ǘ?٬\?Y^)?(\? I&?diq?cZ?`TR'?oʡE?6?! $(~?z+eX?K F%?,l?( ?ެiq?7ͪV?9#? -?!^@NW2@z7d*@ǘ@W9@٬\@,xz,@Y^)@@(\@޸[@ I&@7=yX(@diq@~j@cZ@[ @`TR'@B:M@oʡE@ZB>Y@6@z/L& @! $(~ @N @z+eX @ @K F% @Fx @,l @YW @( @?$ @ެiq @ = ף @7ͪV@d]K@9#@}k@ -@ f*@!^@7_@NW2@dK@z7d*@H}]@ǘ@鷯@W9@韉)@٬\@0*@,xz,@BʡE@Y^)@oPkw\@@ @(\@p(@޸[@M @ I&@!|?@7=yX(@N!uq[@diq@z.n@~j@Af'@cZ@o_@[ @bX9@`TR'@,PkZ@B:M@YQI@oʡE@A&@ZB>Y@:@6@2333@z/L&@ +eY@! $(~@7St$@N @d%@z+eX@s@@V-@K F%@_X@Fx@$@,l@B7$@YW@oD@( @x&@?$@dXW@ެiq@ڊ@ = ף@!ZӼ#@7ͪV@M@d]K@z @9#@5W[ @ f* @StD @!^ @,;Ow @7_ @C/L @NW2 @YH @dK @oD!@z7d*!@[ AC!@H}]!@p= w!@ǘ!@9#!@鷯!@36Y(@~jts(@:(@ƺ(@6(@ (@0[Abu?[v?F[{? ]"? >L?#Cfk?id1V?~%\k?%MYF?S?l?ΜC?F?|L??2t?("Kv?su?y$~Zt?>u?OIO9|?C_}?b ; ?ȅ?\?nFv?m­`?Xx}? |~?߇s?vds?ovin?`נm?3k?u?ZIst?xN?Bh}?LA` ^?WN?(Qҧ?j9??-ץ?Wbދ?PzyƇ?3tz9}?tP=?w?J5?_?{FKu?xt?2`? k?)nn?Ih|?Y}??︜˄?"rrL?4 B?hG.?\8ٍ?{I?v?m?Ū#??eV>?~u?s]?B"w?@ECm?i?lT?v|:lT?/0(k?C|Z%x?6$.~?vM]f?p F??iA?Dw?(ച?M8Dt?tI6㷔?%}~?mr9S?.$v]?yI?[G?jT-y?z6K=?> _4s?o)q?0$伀?Rš?8/l?\hT?t׊P?΃m?ị?# :?YT}?J|g?0qs?H'?IEM?v /l?JӾe?f,˝tu?Fe#q?LAC?rӠ;?~?&`.?H}?Tp?#{ N?QL?ϊ?oHj?Do?D#J?q9?xmT?x;`?m fm@^@;PP@馺Qu @Oc~@@nӨ@g @TڐJ @t m;"@6%@Vޙ˖'@ /t)@Z*@M*@&)@T?1.?1BH Ş?g$^ZT?h]8Kf,?_xs?)#?uÆ?³Q?]u?؜?I"Jy?cG? -xv?d(刏?Mj,?/ J֯?8_ ?VNRv?ݫ,+@?9np|?zo?T{}?)O?fCF?N~},*?-d;?d\XG?ʉ-ь? [v? nn?Z<ޖ?߹98f|?r?İt?t'fJ? C [?0٥w?04Y?Sbv?)M??*?|K?~w?xY? ;H?Mk?KQ~Ж?lԻ?ڗo?!<)?ѽP ?w?9?@}p? +O< ?$vAu?2 ~*r?ŭ?.@/p?%3?!W`iz?j?h~C@?^f?ix?P?3/k*O?abr?q0?iURlM?P1s?Ȩs?[u Z?&0dž?%m{w?>޶?.Mh?ϿIYp? fg?'|qb?79f5z?%!w?Wr ?|̓?X5%rx?uu2?cyE?)YL?}z?Ol?8J?ukj+9?W?p F?tM]f?e4$.~?T{Z%x?Б0(k?;|:lT?5?lT?`HCm?"w?]?E~u?dV>?~?ީ#?m??~I?\8ٍ?lG.?s4 B?qrL??︜˄?Y}?sIh|?(nn?%k?$L< >2`??ݻ; ?C?,\ϡ?!?;? X Y?v$?E g?-c u?ny$~Zt?Zsu?_<("Kv?ɑ~?i+ᓀ?.*L[?dL? ]"?kD[{?[v?SNOD7ȻTREEHEAPXPȻ @__uuid$n @ __baseline ?@4 4 H __curvestyleo 8__shade ?@4 4 H __formatp P &__showlabelFALSETRUE 8 __number  0 __dict h H annotationsq @xlabel r @xunits @ylabelt @yunitu P &autoscaleFALSETRUE P &xscalelogFALSETRUE H xscaleminv H xscalemaxw P &yscalelogFALSETRUE H yscaleminx H yscalemaxyDataLab-1.0.2/datalab/data/tutorials/000077500000000000000000000000001511411446000173265ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/tutorials/fabry_perot/000077500000000000000000000000001511411446000216425ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/tutorials/fabry_perot/fabry-perot1.jpg000066400000000000000000001035241511411446000246640ustar00rootroot00000000000000JFIFHH ,http://ns.adobe.com/xap/1.0/ C    $.' ",#(7),01444'9=82<.342  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?f(S8 ը$քWS(:Κ>RNOsU^B{E0!>4QFh)iiE(iP5b8Iq}BGsSONGΚg#Q=7Pxu\Q4uOQO7y}i7ZM֍֓qw&z7Z7Qgލ֌њ2}hɣ'֍Ɨwqqw.Fz]֍֗.KӄӄӄħcR,u*7Rxu*7ROK$2/=WxVxWxBiaIIE%QEQFh.}C{ZzR;ը#jH' 3DjEW`j3HiRQFh.iA{ԩ!SSl}Ձ!=LpXu5QERJ< EMhA]U )ITީ.{g|DsIBi)(()hS3S$Ub83ڭmVTX uz ?@{m/FdI3ILњ3I3Fh4f3KE-4fњ\њ3K3K\J$*R*R*Rd0 1P9AUbd"J(J)hZp4i2In9zsVQOPER$x5]"i(( Lv'X":(QOU1EЂ S$)fRI]-M&J)(()h8 pZRH1[ )`*&UzZ_zQ-HM74f4f4fQ3EQFh((4Q3E.h4f4f4f4CSSOzeV_zf_zdz>{ɚVxj⫴x*2)((3KPiԊ*?ZZe_5'QQIEQ$xj2)(ZZPjEj7Wc|1ERҁNUZ,ք*$SMך$4iQEQE-Rp)jT5b8Iq[YXӋ`;y'?Wyޢ2{ SKRn&i3I3Fi3E4((((((Z3K3K3KP Y*UIeަY*PiHhi!@ɊE4JJJ)((PiAOVrU(:HJhjeȦJJ(Z(R+UX4QKJ)Tf(ZWUvd`U9eRIU2isIE%QEQKE--()jEJfEor+z-FҁޫI?Uy}jޢi)酩 &h&i3EQIEQEQEQEQEQEQERER3K3K\u858==^Y*UާI}tY3R+!j5VHjUvJE6J((\҃NS#ոIe["5ZhYE7\aQE-LOQSF5vEhH́Ueި%UwDM0i4RQEQE- x"LE{UmWӋ*cSz$]Y酩fLњJ((((((((()h((Z(4Ӂԫ%L{/XI*uz6iO5jU9!BQM"IE%QEQE.isNVVޮ&j¶iYr*g54x5UM()< HcUyd2UYM()h)TŚ ~1(XUqQL4RQE-JV5XC *dz,M550ni)((ZP)SQ*qfC_ EC$wRU$=ɚޣ-L&4RQEQIEQEQEQEQEQEQEQEQE%QEQEREfKFisFiA 85=ZWJ՘悹^,IaTY"E%%%QEQKE(4jEjȥɑSDȪ3Y& WaL"i(ZLVbLЂ*(JY}ꔏQM&J()h P*EZ5j(rzU`X(MTު<]fM&LIE%QE%QEREQEQEQEQEQEQEQEQEQE%QEQKEQKE4N O R+%XI=IV`٠j'5RXjUWLTL)QEQE-iԊf91WbޮFԽEC,yTdLT )RRRQEr4ɫEҴ#P+*d4i)((ZpOU3V5~* QҕU%I7Uy3ޠgSI4QIERQEQEQEQE-QEQEQEQEQEQIEQEQIKIE-%QEf斗4iEjG'YZTF隩,5JX*Za)))((ZQJ 8E%]Jq4yM֡"i))(a5` ,FY=꫽BM4i(Z)iœ=VD[І cS^@7R_z{ ji4fLIERQEQKEQEQE-QEREQEQ(()((((((4J 8pjZWJj9=ulӺ2*UbXSJJ)((zn)*RdU9"Og*-DE4QIEC*,j@L&i((QN)j@sMuT*,XStBQM4QEQE-iԨj'Wᒮ#dRȪsǑYGUTdS %JW a4J)((=EN Y5 8lL 4JI3Uja4i3IE%QIEQEQEQKEb.pZ]i)vR|_.ˣˣˣˣˣˤԞM'Ha*ic)) SJJb%&)(((()h.iAO R+T%ZOze"2*uUqQL4JJ((p5"O^JTEA2dVl⨺"i)+NW4i)(()*d\ըc5y(LFi}ꌲgUwBL&M&i(J(((ZZ)qK\RN#AH> S4;ɥBʣʣˣʣʤ T*iaia1S Uc"LRbJ)(J(((iԊ:IVޮG'ZF❌DȪSETeU֢"i))((N8ҮdSdUY& VaQi a4IE%QE-)Tj(kBzViR4FY*jja4i)(J(()hZ\RJ8 pZpZxJxXEXjUڥX}EڤӄB#l()vъ1E!bbR`PTRl) t4Q6h&h30QM"%RQE%QEQEQKKPiӔԪb7ZOze["FEA*qTfȘM(Z)iAW!_LJsQșqgȸ5)*v54h(SUjIЂъ=́U&5BY=꛽BQM&4QIEQERERK\R pJcV*aVjaVbvӱE&7Rnu&7RowRu.3KE&(MM)Quh6Z*TeiiSH"RQIEQEQEQKKPiTb9*Rެ+qJFEV< )]0a(Z)E8ZFz:Uڥ<hT*)()hNSRUB=6E#EgGYҮ* am%QERp:.j1d҂, >QPK&3T&=ꔏ֫f&M6J((Z(QK\S*UHt$>2RO )sIޚ^d=Ozaޚe}jQUL̞EqRKJ)T*)i}WR54IE%QERE--(< V*QsWbbNDUfj"iJ(Z(SHAVbZ VIҧ ێNWR=UvXd IIJJ)(((((((((((()h҃N HVѪoӚՔjtV:HYB˜iQIERE J֍8"aT.Sdμ4IIIEQKKJ)*Eb%洭ӥiF0j#sUd %%RQERKE8RxTrZ cUz+֪H]cL&M!%%RQEQEQEQEQEQEQEQIEQEQEQEREQKER҃Nx5"F*mW#na[Z֩ʕBT-@¢"iQE%QE)jmW~Ej@*9Zu5pk>AP5Fi(SEeTdY#L4IIE%QKEQKN婐ZҴ\ǹ^Mf9Qm%%QE-Nrȭ[uU՝3U75S %%%QE-RҊpAV9TT j"iM%%%RQEQIE-QEQEQEQEQEQEQEQEQEQEQEQEQE-Rp x5*D蚭<:jam%RQKEQE-( [ZӚԈQ0k"rk.QɪQiQERՔEj8ہT51j#L4E%QE-RӅ8T*x]kJU)JU@ƣ&iJ())i)h(((((((((((((ZZQJ)jM^f*9PVtíTq@iJ((R)1kJ٫Z⥓ֲfmQE-[Uqҵ!k:SUFiRQIERE-( x* iB0*A)FCU$ 0JJJ()((()i((((((((J(()hZZZpR)ըڮ*GVM~Je閩H9*#M4JJ)()iiEHb3h["ۊFEg]-c95ML4(kFt8 PN*?4iJ)()iiE8S֥AVnTU53U) WcQL4M)()((((((((ZJ(((J(((Z)iiE(x5*U4*³j8M0M%%QKEQK@ zjZNJ9Zt3XT^5)jCҷ+I>E)Z/5Q))(Z)iE( jdnZ0╏NfY!D !QIE%QIEREQEQEQEQEQERREQE%QEQEQIEQEQKERKE8Rp4jE5b3Vj UJWV|g*i)(()REkZv\ b܎Mg9iQEJ-A1Z! 6)()iE(jx\r+JSdd](檽DiIEQ[EjTj泥QiIE%QKE-)ž*Tq Ѐt#t1Nj0M%%RQERQKEQEQKERQKIKEQEQEQE-%QEQE%QEQE%QERERӅ8S֤ZW"< W5!Uf͜uj-L4JJ)((TV#cȭck*uyW0RRQEoV=J*gJyQiIIERE(OZ*=kFtxSϔ74M4QIERQEREQKEQE%REQEQEQIKE%QEQIEQEQIEQEQE-SZ Tfi)()hZQJ*E5nylxmeݎ7STޢ4Hi)(ڷՇI'JϟgKU4IIEQKESH2Uz֕jЏt3wM4M!J(((Z(((()h(J((((()hZZQNR-Nj#Z5?j5gOYWZiJ((S=jxVթWOܬ?ZJJJ(Ջ:N9YJ)(Z( jtp;~z>IT&T%5Q4M%%%RQEQKEQERREREQEQKEQEQE%QEQE%QEQE%QKEQKE--( pVCV5~Ҵ" Vl>^Qa()h xW";Uk6b7M4i)(ܷ+V.t|jTfi)()hSH:UkJJlFn-T~ Tfi %%%RQE%QE-QEQKIE-QIKEQEQKEQEQE%QEQE%QEQEQE-QE----8SH:U=B*:T2lQiJ)(Z(NkگY}~IL4QEn[ݥgO޳U4IIEQE-*Eӭ]iAگ'Jl*BZS 0RRRQIERQEREQERERREQEQKEQEQEQEQIEQEQIKIERERҊp jdQU+F*:TR6^Q4i()hZ8S֦JQ[6ZuzşRzM6(~")dY5/SU4IIE%QKE*E㫰(;UMPT%UjaJJJJ)(J(Z(((ZJZJZ(((()((J(((Z(ZZZQNR-Lj*jІ ^q޳eUjM6J(()S%^Nգ5w,MRzM6(~"K'CYjTfi)()hRpJQZPvқ%PKUjaCIIIEQE%QKEQERQE-%REQEREQEQE%QEQIEQEQIEQE-RKJ)E8SH2UEhCVJnn+6^Q4i()hZ)ž2U~m: ̻XOPiJJ(-"aK'JϟgUZ4IIE%QE-*EҮCZPvҒJ7z-Tz3L4J((((Z(JZ((Z((((J(()()hZ)iiE8SH2UF:Tt:SUj !()h zEmZvk2cO֩=BiRQEoڵaOg޳U4JJ(Z(*EҭzVQPTz3L4J(((()h()i)h()((J(()((Z)iE-8SH2UUJыXPLxT/ZTfiJ)(J(((ZJ((((J(((()((Z)iiE8SH:UBҴb1Ug=k.sֳU^jM%%QE-QKKJ*EZEm]YcLyQa+bҵ`< UZΚ=DiJ()h)ž*T5j#Z0nRaYU7QaCIE%QE%QKEQERE%-%QEQEQEQEQEQEQIEQEQE%QEQE-)¥Z*]kBҴ"Tҩx59T%5Yi)h)iE(-ܴ*ԧkɬ5Q#M4(h"ݪSٺGM4MRQE-RJ)ž*d1V' ΘU)*TFiJ)(J()h(ZJ)i()h(((((J((((Z()ž*EGJрtӛQ&Hyj#L4JJ)((S=jul9j8Q֪H* 4RQIE%RQEREQEQEQEQEQERQKEQIE-%QEQERQEQERERӅ(jtr!ȫ/JшtJ;qYsZϔW5 S 0J)(Z(NR[r+bx TøQU4JJ(Z(OCV5t()UYZϘU)WaQam%RQEQE-QEQEQEQEQEQEQERQEQEQEQE%QEQE-QKKKJ)E8SJb1W!сzUk2v4M)h)h xR9f:VDXMQsPiRQEn3_nEk@xJ8G5U3L4RQIERE--8SJFy5i@*PJBeaQi)()h((((((((((((()hNR9Я"*z|ֳfnFCP14i)()hZZQOZ1^ܴ^^sXMSsQa)jVnJqֳf4MJ()iE8SH[ҁUTXMRsPaJJ(jx_nEj+ϸk:QUXTFiRQIERE--(R)ը`ndT2*PjUTDS 6)(((((((J((((((()hRӅ8ST*x\kFW8NwYZ+Ug5 am%QEQE-("ъж^Em'pxyyUXD %%%QKEwfJFj2iM%%QE-QE-( jCӵ^En[.\6ߓeyj3M4)(ZZQRP"޴jZ͝z 5 aRQE%QKE)Ԋjtj tU9J9S 4JJ)()(Z(((()((((((((Z)hN*E:r%JщqRU6w[cQM4RQE-QE*DnZȭ]+5!cQm%%QE--(kFHE͝k>QUڢ4IIE%QERҊpPը@ *9 2UV: )i 6JJ)()()h(((J((((((((ZZZQN*E* R!Nq$T'z͝ꔍUD JJ)(Z()iž2 +j>R/5;rjjiIIEQKK@<ַlS7+TgZΘUG mRQERKE(OSOU_^FȥaTJ2U9aQL4MJ((((((((((((Z()ih pR(jIү*K>gO'gJQڡcQL4RQEQE)*cжNEn&Yvk"f1&i))(Z)i hA'hF^TQ:"UgZFE4iJ(J((((((((((Z(p)*eZUS_>uM%gO'&J5UڡcQM4IIEREQE-8SJD5i"\.j+0 a>Iƣ&iRQERpE8Ty5n+N&ȢUȬֳZ£4MJ()h <ZFv:V2g[SCjT%J"T )IIIE%QE%QEQEQEQEQEQIKE%QKEQEQEQKE-NJSոCJ`T*^瓯5+IHM6J((ZQJ)*tvgJYuY$'5 aRQERҊQQ҃OCW`~EjdNtY-SqPL4RQEQKE- 8MLV~z$hE'XDR:*rjBQL"i)))((((((((((()hZ)iE8SR(jiWaD*Ҍ kR_zΚJ#gjFM4JJJ(Z()iE8T*KZv۶LObɬ[&M%%%QE--( pR)Q7"ߧ5#G2Vl֨H]Fi)((p4jU5:5[N~=oR$yJX):,*2)SM%%%%RQE%QE-QEQEQEQEQEQEQEQEQE-RӀ*EZF*QVqq8Vi1޳5FWUvY2iI((pR"-"ZэTb\ɒycQM4QERҊz4Rp45TjDE0RRQE%QEQKKJ (4iUj91ޭ.;&EK5ZHUY#-FVE4LRbJ)(((((((ZZ)E()SjTJ՘qV CQUc)6SvRmFMmm&]mmiv J#*ER>*S,U2ŊRd^lUi'Uozg@{,jaja4i3ILIERQEQERE-R(L"ZGU2isUPɤ6J()iiE8T*)Zp+aDXɒyn\JJ(Z)iӁQRci[ӚЍ lY֨JM)((Z(48pjpj^Y*dެ$=jsՔެ$ޟcEQ4>CQ45CQ*ict'FMle(F]];˥T 4IS| !R:]p) Qyޠyޠi}&/L-L-M&iRQE%QEQEQKE8 p*-Z<֌UEE,k>iTd|vji4IIEQE-HB",Zy?^ki2MTf"E%%%QESOV|5 j 4Y5I i((Z(4f4J 85<5=^Y*dYާItzfAQi@i:azSL4 !iգ 8 ҁY͜T$5Y&M&i)((ZpLoOJڵh E[O5,=j5FM4JJ+FPT推ȕ]FE4h(ZZPiԊ2>*3c֔+iF P,UYҡeL"J((()h)h4f4QK3K3FisFisFh4n4fњ3Fh&h44f4fQ(((()h)jeJYІ QPM0f?^k>I3ޫ3TD &J()h*TZY"- i "Vm^kyrz7ja4Q] ["3TeJ" )SM%QERKJ 8ZGpF9']G )$"P,vJM4RQEQEQEQE-QER(.h44fњ\њ3Fh4ffњ3Fi3ERQ(4QIEQEQEQEQKKN=VD1Ś 8a* *:l %VgM&J()h*EZy"-`+Z$\fn&<{MBƘM4QE 5 js ,uFXꫮ*)()h =[2=\lV#i)汮2zlYM74QE[W޴""ˑU&IUuCIIEQERp4jj)޴ _Pi̡T ,8TJI Ƣ$M6J((iqN'@Z֍*;N>u)<OZj"M0h(DataLab-1.0.2/datalab/data/tutorials/fabry_perot/fabry-perot2.jpg000066400000000000000000001167131511411446000246710ustar00rootroot00000000000000JFIFHH ,http://ns.adobe.com/xap/1.0/ C    $.' ",#(7),01444'9=82<.342  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?B֚M.hԊ Z \HjmR?VyOOsRޭFՀH:kJ@i'??Tb{Πi˟ZacIIFi3F}sGKҌӅ8R*Gެdw5:wiOLi#MpZcFfB{Κ\MѓKϭ(ŸSR*F}MJ}MHΞM;$w?ai9:OsQ:ZSP:dSi}i)3Fi3F}sKJ81SS,֬$Մxu2H'魟Z}MBHYextt'W TB;gM4&Ԩ֬G)VΧY :V$jH=MHGsYQNEY:x.p*7zQ@3Rdը Ly1ު/Uy3ޠfSI%QE-(SjU5:CV,`SZcIZZъP"R5*RO )x,4L2 S /0M2L'4IRye7oF7}.<]e/N{҉)Jxޜ$ )OzxHVRh61 IJ 85<=<=H c&jUGFE4JJJ(p4j^I=ISS#.je 8T 4PIj2dRRQE(4jTlդzF\銏(*E\՘]< 껽DO4fD[e"J P< IL-MN O RU2CS,U @)x0L2m7Fe̾-4L2SL nu&Mnu&7QnuwQuwR}8=(zP%8IOSĔ'QLwVy=>j2i)@&TX*MgWyqU_z2i3ILњJ((Z()qEbQ1KLQ1F(&((()sFiAN N OWUeY*Uz5?4fd@Qr)AUz5HiȨ*U]&ja4IE-( zLVKTN%@QOULueT R I1Uޫ=FZM4nh%%QEQKERъ\R PiBl K%/Kt]]]]]]'GIlHRR&nMi1F)1IJ1IEQEQE(4iEj^I*eWCRt9սUozZ ) EU:P2QEԊ2=YUz]r*PUlT2qZXꌩ£"EQJ5f$*0)IUjLRQKKJ=ELV⊮KTO&*T )깩㏚u:-VZQ3eI%(Z(.)@ N N N N Nӄt8ENS^/KQRTyTyTyTUU'Hb1SLT4M1 tҔҔҔii1ILRbJ(J)h4ӁT2IS#*;!\N]Ң"i*JRJG ET:銅FE%%%-ӁtzՔzcUCOF0Mךf=TwQCIIE-8 p2-Z*IdzPm9FjiqSD$UޠfɦM%%QER p"JS$ua":(^2S2ԛ3Fi3FhQEQEREQK3KPiwRKGZiZc%B/B,Za)(\ӁOVU=YGѪPxaҫ:DbjEjSJEA"UI# aZp5"6q=ZFSE0iyUY*Yڢ&M%%JVcJ| 8UjfiTѦM[*|UI$Uja4(ZZP)SU*e$u:GS*bҐS 6z004!jLgޓ4f)hhF(F(F(&(&(3FisJ (jvpjxjxzpzxzxjpj\M+Q2T/@,-00i(4T:=YG٩#*Uj.qRT.xa$yr%VumQJ <n7*ʜFVEOC{Հx:U$U]4iQE-(U&[AH튫#vjP*dZUn*UITDI撒(Z)iS*eJ" NR\Zi=&Q&i3Eb.]iBRKe(F6Rle& Jmm!ZLRbJ(;4҆{ԁAZxJeM"i)()h8p5"JV=XF:x%We2FѪAȦUYcR%WaQMZPijtj"*)5Q8525YF^dg]FM4QEOQS"ոF=Vv*-Z*.)Y*UIYڢ&M74(QN=EJSub8GS*SR&z/L-L-ILњ((ZpZpZpJpJpJP](J](F6Qe)6Rl)MIRR4!QIK3J 85<5<58=Hޤ N NW5%@@QȦM4RQERӁR+Tb7Vujj֫H])枦Fո,uQ֠aL4QKp5*XOVJ"JXR1XSHXn 4iQE(RըDTC#Yc6VbJ`TUi$rVvKS IIEQE-P)SjeJ#)XDJ('~*zgS7Rf4b p8GOӂSRm(Z1K1&)HomHR4040444LRR (4 zzH -!Tl U:Q2dS"IE%QKE8p5"NVczSS5 Uj0hVѪu9#"ʙ2UumQNFQ=]pr*)H5J61jn54QJ)@U֮•mF5VGU5r$ GjUGjFM74QIKE-< VDVR:Rt&z/L-M&4RSSSR(44g7Q3I3K(R`Rm+L)M)L)L)L)L+M+IJ3FiӃSS@ jxjp41t:PDSHM( JS#ըެ5U]q9MLV`sLuȪGTLUvQE(OSV#jմlӘdUiVSVcji)œLW!JTqUzQ@*.jIVT`S]*u5FƚM4QEQKE.)SjtJuj8®;1 =BQ3esIE.)@*@"O R7RnIޓwIowR@j\њ1F)S b3N O O R+T j~iM0j'JwJ"E0JJ)(ZZPj@jTjVcz㊭"Uf*Ejެ+fTR.EQ:7^jIIE JVnjoVTr.ESpj.QshZp"U蓊TR=UT3VbJVl ,jUݪ"iRRQIKE< WJ긥$ c=@PLi3IKJ8-<-HRT<%?m.)h&Bԅ woGIKoK}(zpz]ԻCR)VWc%FR)L+L";њPi@"HR+THD隯"UwJaL"i(SԨf7QXVڢuRUjM+ 2U S¢"i(MOsW"zf"ʵU *V 8STj)ҮPVGsQӔT5r4 GSꫵBL&IIEQE-(OU*qդQ3. =DL&M%S*UX@ғ4/M/L/M/M/M/M/H^}!zMo}}wѿޗ}.pzvPԠ1M+M+QTe*6J4mfjZV@i3Q:T%Vtj&IIE%QKJ <MLVzSȥ#"ȵUJrRcER*P0ȤQOFQ=]9T\ujŢ)E8Tj$^p*s$zP@*-[*Ҍ dT~QڡfɦIJ()iE8 zVDQVJ)Kbwoz0i4QNTU*e O N&i7S K KKKwIu&7Qnu.7҇NJޜvii1HV+Ld*&ZaZiNVP")ԄTNYҫ:T  aIIE%R)oVzL 1jUb)a)<*T%J"cLWɧKJ*E5U檸6)E< [MV:=jh]*cUm=[jڌ lTzPɦ撒(JjIW#ZDU5Dƚi)žU*¯(TL @Q3Ljaja4sILQE%RRQEQEQEQEQKEQK)sFiisJ 8pjxjzHR*LRKM"ejZe/zp5"LS#TҚ֪ȕRE*&M4RQKE(RnjOW#jr*9Ƚj LVj:TREgNIBE0RQJ)¤SV"j tr+"jKWZ8U$j*h֮ĵ1Uy^YBM4m%QE-(R(jIW"Z)VvX *XD0wz-L&M74f4RQEQEQEQEQEQEQKER)sFi٥p4j@"JS+*<wZk ֠uj2)ӁdjZA"UIR:,*2)RQE--(՘i8SqeHFi2*Y WaQm%Zk*j+WZ !ɪy*KW`PNFj2iQE-( " W"Nm8ګ;T 4Zp*NVQj`1JO5Bϊޠf2i 744RQIEQEQEQEQEQEQEfKFh4f4 8x4"LS+T2<TN]֡aQJPj@jdjSNLqUdZ"g ShQOSS*-WcjC*TZSSn3Su^egL7RQK@Rp"!n-OBu5VCUELDcdj+UW5 4M4QEN"5ĕr5v]&)T*t\Մ^jŠjvDQL&M&i3IIEQEQEQEQEQEQEQEQEQKE(p4iԊ"LST2<1@Uj&Jp5*#Tj5RU-@£"i %%RPj@jd5j&5YSH"JQ 4TjmVLqYZ JJ)i¤SV"jЁV*Y* TiTUF0)p*TjƢ&i)(ZQN*Tf5%ZQy;T iRzVQqRt3T.WfY2i ILf4QIEQEQEQEQEQEQIE-QEQK(4(4iӃT*LS#T*4qQ: m(Uuoz[ޤMq"98XS 0QIKEiԪjmW"jp*CҪʽj=iy15[COnERk:U*3MSzr)qUj棩U(HJVnj54IEQKNR(n%MT25Vm*UaRDUݪjcLcL&M&i3IIE%QEQEQEQEQEQIE-%QEQEQKFiisKKPiT25XFժ@i WuTdRSѪtjM)dZ*WZ£4IIE%-)jt5n&7JEE R5\OsVjUy͙y5MDi)E< \bBqF#! 1ȫ*~FVj4iQE--8ST*k]jҌ U4S=EXjkVbTn]ګT i4i((((((()i((Z)is@4iAOVQ5LSTT]֡aM4ԪjtjMIXUYVHUD£4IE%- Jz&hxETjiT5n&KȦʼVt֨H*JJ)E8TjMG½*T24b!Wc8NVRƣ&i)(ZQO"\zUؗ7JڪYFM6SU֬iVv54iI&i((((((((J)h(KE.h(4ӁR)Uej#TQ:wZ"J*E52NSJjRjFiJZ)E8MXMWcD8*#IJ H!(jQMaUZ*W S 4))hOSS!_#UFQ@iVjFnFu⳥U3MSCcWg4"jB UBƘiQE-( jtn% ɺV|Uh@zU7=.nU#M4Rڒ?ZhR֮SZSTeQaZZpNnXPT֣4SJ[NҠU$PDii)))()hZ(Z)iiihZ(J))(J)(((SH*Vc5n3VUI*TfpS!QU)ҪMިKUjM%%-RӅHf#_RKҳjSEMڮ SYSuQm%%V~֦]=*FZJJ( zVtTUI*TfrVIҞzTU9* Qam%RQERE-RKE---RKEQERRRRRRRQIE%%RQEQEQKKKKN֥Z*un:IUۭDi)Nj*UfzGZ4IE%-R-XڴD+:~QjX5~x}ڥs޲jTfi(*u4}j]*cҪҨU4IIE)S\ES$rUvQN^2UU5*Y0M6J)()h)hZZZQKKE--QKE%RRRRRRRQIIE%RQEQEQKKKJ)ž*VcqՕJj*Y#INZ:ոt7J5PBJJ(R-XڴK'JΟSnR֯;7ZJ)EmIU*hتcҪTeQiZZpNr*J%rUvQN^ҪҳoPFiZ)i¤Z_iE҉zV|jSGZ>~ߵ^vTjTFi(*u4}j]*cҪTeQaZQNj]*~NJ9jdqUO<trUgP5FM4)()h)hZQE------RKE%RR))) %%RQIE%QEQES~D+:~7ZmKZoگT{TjFi(*>v.1Uf0RQE(OZ*5~.?jJ%Vje婒EVӥ<UI* Qam%RQERE-RKE-(ZZ)h(JJJJ)))(J(()iiE( xVJ\-8J%Wj p['Jstϖ=BJ))hR-XڴD+:c֪54TNLǚm%UzhWaJ-Q=Di)iiž2U_V;T2U9*Tf*USA%T=Wj 4i(((Z)ihRKFhJ(%%%RRQIE%QEQERҊpJ:UuazPƠI֫5Fi)§Vӥ+tV|UzIE%-R-Xh[( IzVlu,}kBߵ]rk*nU#M4RܕY郭KZOګҨUZ4IIEZ*FҬdUf%8TVqjrW4M(()ihZ)h(RRRQIIE%%QIEQEQKE-(O*VVֆUI VcL4qUJ*ƨJj-L4JJ)h j}kBߵiGҙ7J͘UZTօj5B\jTFE%(**X5vV;UyzU jFi)(pLj#W5htTQJpRDjfQITU^ji %%%QEQE-QKKE--RK(J(%%JJ)(((ZQNOZ*un>n:R5VI WjeS֪DMu8TV"~եJcfy5Y4]kFߵ\?vOZ˗Vji(*u"u:T iZ)ž*TQj&*=Di)¤CYǪ 'ZiCIIE%QEQKERKE--RE-f)(JJ)()(()hN"Ԫ*}jc[MsUd5RC@J)SW"izSd,fDjj(2m%RҊpP՘^r)[UUG Rz3V5iҠUIUqPiIEQE-QEQE-RFihE-4QFh)()(((QJ)œ)QSQn1VV*Hjj"i)EHf!Wb`T2ϙ10JJ)h p9 qҴ͘UOZKV\ZʘUXfE%-(A Qwq*9BaUT&iRQKE8SH[^TWUIWaLS!1[RUIUqP0Tfi(Z()hZ(Z((QE%QIERQERQKEQKKE8S8T*Ub1V*b"j-VJQ4MZ)E8Tjt5n&5X*Tjj3M"jxZʚqPH*Uj aM4RQEQKEQEREQEQE-%QEQE%QEQEQERN)*U: ո֬(*HYBM6OQS*KWR՟+f 4hp EYsZVҴPNج[XTkFzUk>.VV5RQKJ)an*jAU$=jF!AQU7S 4RQE-(NCVj U9UYVM6CVcjKlUiȵ]B˜E0i %%%QE%QEQEQEQEQEQEQEQEQE%-QERQJ)žHAV#ZդZqMfVUdREYUȗVG*TdjƢcL4IE2 VV TgjϐQb!iێM!]g5!iIE-(jzU9STy5v3H"̵JAUڢ4IIES8TjmWajqRUZ *3INSV#jU4T-Uj@£"E0JmQEQEQEQKIERRRQEQEQE%QE-QE-N*Uj5QYQN@껽WwY2iJ)Tb4qN)VY*u檻T,4i))()iEP2TLµZiZibRQ(()hbRJ8 pZxZxZRXTDUj@1NL-JޡfɦR*ՈҬƝ*®)⠒J,RGɪ4ifJ)hNAVLЂ>y2WY>MTfSD"`Lb9ڵs/^k2Wɪj2iJ)E8S֧sZ6XԪ2qY6McQKNFثп\CI"ʵY4ޔjlr*TZ£"iRQE =MLVcE'm=dT.Ε]֡"E6p5*L{%NR-4DT-BMDRVVVLRbb(bRRR P)BӂӂӂT*JJRcfgz%@QMSjtJt(GSJ#vj0i4J)(STj1֔)R`U)26jH*TGZ6y0:TdZ0m%H¹5kJjuˉ9Ly)iARsVzu"JREѶ*OVFeJ*UG\T,*2)(PiԊةrUȤ*PUiEiRQ\ӁԪa$J_x9D-DM00044!ZM&(&(bQ\Q\QP(.pZPJRXUTib4FP< ?BQIJp*EZ"U\ ~qPU$;TL4iRQEQJ)žLVNEh]QT>;|ƛNQVbL֌)h+6Wɪj2iZQOQSƵ~9 \waz\PIE-8S5v*RUU`)jOҮ# 2U¢"iRQEf (4jEjG'Je[43PUgL)))sNRԫ%NT NiM(*&h61f:aJiJiZiZMi6mh.1F)vѶm(ZPH#:R RK-c=DT-'BQ3eQJ8-HSUҧU?8LUI%IUja4i Z)E(R_:Љ0)d| 4I=, &@*Ue&MSvcQIIE-(* ֥}*;RdTLi( JVb~ V:Er.*)JVzLr*r-WaQM4J(Z3Nx5"NVcG'JR3PUwJQMiAԫ'52S,*HRbRRh3Fc:iJiJnM)6mmhF6m.vPMW&SU&aL tuۉ}>Gɪj2iJ)iE< n"L <3j9( %%]JdRȪUuT ]QPJFT m%%QE--(4iԊ:=YOz9*c"tWdj2)QKP"JT%L{ԡsF)i):acc:oILt](GF6RDt:pGOӄtQ5L,kYFE% J^J"jPMbWc|{ ,uFDUj")IIEQKKJ 8p5"NVcޭG-YGOlTWdY*2)(pjxjzJ{ԫ-J{ԂAR("SJfR]4Hc<<< t]]8GJ#ӄt)i)2)0FTm%D{e2i3IKP)Sʕ:GV: PN*'RIj{v|L4i)h)Tb4%\ACɁT嗯5Q54E\laEA4k:i2O5MڡcL&IEJV$Vxejtg<&94ږ5ɭxU`Y2hjU\b"i)( 8Z=j2U9"H])5n)=ҶE#ES:"bdSQIEQKE.iAN OVeާI}MSS.F-Dc*2Ҵ)1I((44fn.i3Fh&hQE-.)BTJJ< RcH*]J-L-M&4)()iE(NU*qդLSTzNrj1I֨M.sT|]M4mRӀ1&MhEҴPmZ<k:GɨsNQVLZ1ժ2uɭ3UJ"⫰0QE.iAR`ըIT2%T0j1L)|UȤ*r)rU9)RQERK\҃NR,2IVoz{&j@—TmBTf:QILRbQ((((RRS҅EXET0*&ޠy}ޠi*zFZM4Lf4f(u(*EZG[j AVL֩M/RLvji4QKNLW`$V |VldF942kF*ijU̹=k>Fl)ȤuʕQ֡aL4J(8z%^@jR2*GJRSS&*RUr)NX"E4QIEQE- 8pj^Y*eާItާYHi\ uEQ30L)M)M+Im&(&(bQ1F(iv҅ N OӄtH"u  pQSKD--@ -DTE酩f4RQERҊP)T:%Z*x/T2>*UfldSjiWbLT*dzQL&)iE8 D"⫙ڵJZQyVךʕjּoS"UWZiPiԊݧғ`уIF 4QG4sEEsK/4sG4sKQFM4d4dd'4Q'4sG4sIsG4`QF . 4>JPҜTHCS$$n5j;v)J j}곳Ƣ9=&ކX5b8 q)qQT>JG'֫L9據NhҌRSJPU'[)ptTjd)=J#W`c'2pd`\I5Uɨi44 DataLab-1.0.2/datalab/data/tutorials/laser_beam/000077500000000000000000000000001511411446000214205ustar00rootroot00000000000000DataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_13.jpg000066400000000000000000001572071511411446000235570ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?IEvRw1PhҊCɠERRGt43E裥-{њN(H84QE-'z(hQ;QIKI`xGQ@GzZOE)Q!E/AIGJ\zti)sIGfA;QFhRPiEQEJ:(KRpizQEP:GJ(-%QA-'gSM%(*(F9ތRRRG44(KGQQԝE%(b@b(4 ^zA(JwIۥ/Iӵ-8uQEvFsڊ;ў((ך3IJ);Ki? Z(4Q1EhPE%-QZ(Eh::~41=84{Q;4GJ3)- QFqGz:QJ9QgOŽOŽi3@KڌQ(z;Rwځgڔ`R ))x8R)AҌsғIޗv N8RQr)((њ)(>ԣhARwE<hъ4 ZCG%-'zZ;RuRt:@ZNE/J(QKF(Rc=ǽQ4QIKEr :֔Rw:P~u'z0hvPh4Q:P:Jx4P(d:(F){RQGJ(4H3ޗ(Rb`Ps@I^)p3E'4Q(J=1&)h9u94w%ii ~4QF(QEPh=)i)yJJ1i;Q}(E ;ގE4Q\sIAF( ԼސyG&I(4(EZ PhRAu4(i({ 1J=i){}h8bIE/&h&8Q(uRRrE/8Z;yH3KG'J1(KhzQA9KA֒qF8E =hZJ\fQޓ4KF(Q1G9Q:1ZN(f;Q@J9QցI@QIEJ8z9fւ QQ;E'zSғEu4Rw*Z=1F(KEFhGցEEGA@EPEQG/wARE'@(SAR`PhK;P:zQGRcSG^h4QZ:ci-\RQ҃ץu#^;Q֌sGnG4 LIޗQփғh)s^ԟZp A⏥/Z)3AŒ (<Ҟi(QGnԝGzZJ1A֗#H:ќh4vq@4 ZNҊ uޗAGj(⒔P=i斊J\ҐS/z(QGtJ)Ev8 4R JQGQGJ(G)Hs(ӊ? Z&yɣ84vvu/jJZ3/I@⓽(E &It4RJ^zQҊ;g?QF9F);tLޗ4b֗4/SIޏ(Ji)M 4PyQ:tԇ)i8Q}h%.9/AIڊ^`P)qG4 :);:RF=)q7F8>)("'z\v)4QJ)94tv{tGjhNi@(4b84qKޒ P> fJ1I)q֖}EQGz?(@sҊ^&i})vE~4~4bǚ(H 4QڎhKڒ'zERIҚ;Rt/SFhF(҃Ҋ;KIGnPM-%GjN4i1)tKHNI& j_bQ(F(i(iIZ^◵ԇPfKIGZ1Gz:wϭQ;/@ 4cP)(FyRsKҎw@E'z^u֗ҌR`◵%NphKRfIޔQGj;QIJ4QE(h4{Rf hԔ=<ҜvKGzJ3Fsڌ{REj3E.yғQҌMgj3Iߚ1Ew))sFqE%: >RvQJQҊ3E('.i? \QI> (΁GZ;QGҗ(hh4 ?))siJ(>ihҊ:s@(E .h4sQIEO4t bih4Q(A9Goz3_ƐP(h)=s%)IFE/'N(P:Q֊Aҏ(4sIޗJ^fI'z\t8QJ1LQd֓/9uցIKހh=)J(=)9/j4`zRfu8ǽS '4Q:E 3)H⒖uQIQF9:Q@:Rh(IGE/Gz)iZCEJ)OJ@{@ގhh>`RvF(Ҋ:QKޓҀ(ǥQGEKҌ m; bq֓4AQ֐QP(G=(Qފ: ) /QGz1JE'J_ƓKEb!JzRRG);wJZ3IKH2sF)hrh<Z:);vJ:Rғ.(QJ8QGj;;ERu(G_'zZ1KZ(RR(J(4wE'/j>Q(vGzQ֒ӥ /z&OJ(9ǵ/l(4E΃E;QR;4RQqKFi3){Rt4hIށZ)2(=8@%(4Q%-%QҀ 製ڊ((ҁGj1E~ ZNf:Ҏ~fOJ^GjNGZRyRQKރ(E; 3I-b4Gj}^fʌQړ(})KhEPz@E4RF))hRR撗Q(Q)P84cҞ);ўxsI^c'rii9ڌqE3@=GjCE:t/jJ=Aj (4Fhg=)I=Ҏh撁FrzRGj?4нiMJOҔ()(NԽ{Pz;IE-%.y4(ϭ(J/8Qڒ3KފJPhE'ZB)M'CKEJOz) 1'CN({P4GJ:Ҋ(ҏz>v4bhh4h@GFqGZ(i9h4P:hRs@RJNԼ4R`E(RsԹ9QA\qIKHGZ(:sGZ %(!4sڃ(@4Q:xHhERނ9=:7/Q&){fRuqGjAfjQ׵LfPx 9hFi9QG"F8PzbP(F(!ihssER :F(@>sF8IE'GzQh<ғ֎iqALJ8Rbފ1F8{֎褥4RRh=)1.: :vQM)GzZ8q%/zJ;QEZ(JNbP((KCGc4Z)OJފNRF(!u#Ҋ(4Q(/Is@>tKhQ@uh))Gj0)1ފ1KQP:F8h=h(`KI)(QɠⓊZCJRR 8hH9P)i;EQ@A84:QzJ=sA RځӭQފ)8)48(EΎ'4Z_&h]fGJ((- 9 OƌKAi3Kތ4 u-4KQj)3J\QE J (ӺI֔Rw$b3J4RJ9Rq\Fh4@Gz: E4sEfG֎g3ږ9c֌␞iA89(P=@P4FE QGJ(f4fLtRg;QGZCF}t"fHO->v%gJZ(E;Q(FhG{ѓJO4Q&h;RLsF}4g(21HO.sIޖ9"4FhGNR=hR ъZJQM4ii){҃()(񢎇oN{Ҍh(ϭuvKAގ}(GҎRi){ސQ9%/PE PAQҎ3E :4b1E#ڏz;Q8H(Pi'JS(((:Rcڃc֗ 7-fGt%Pz@F0x(QE'ҖE裷Z &: QGҊ(sA1IE/JJ֊J)NqIڔ ZN F9PGz(QڏEE3LdCZNJZ?;яzKڀ8Ғ^ԂsF9Ԡz(F(QKIKޒ N( QE'KEњ;RZZAKړ񥤢-c1E QKJJ^d 3A4~ROΗ(KA@4QGGz1IKڊ Pz=i:ю(Z9%;C֊=H){ޓ{QHiiGjLҎփGn}iO'J:sA4QIKړڌA x{QFi3ER4;R{qFzCJ(hi u4QzCK(r  w4sFh(izRi){g((G&isINϵ'CҖfJ\QRRQqKF(4MsKIQ@}K;ҐZN(.yA'QIޗK(GsF9RRQLҗ@ȢL-%Z^4z掴;EOZ?'h'R):j ۥ(@AKRb=:ӥ.i(PZNԤI@b9ғ>Rh֓ފZNhPhuGz(Q֊J(4gAGcIJ:sGZ;thE'ҔhNrEf};RQsKZOj:ҚJZ(Ҋ;Q(=8RwE"'AK(F(€94F8J;qFht4s(4 z=hi;R3ARR{sE@4( J^P)hԘ/=/zJZLޔSA斊1GQE/bsF}QҊb9撊;Q(ϵ(֗JA֔u׊ `;bAG4whuPF(QGjj(-hQڒ(tvQւ1F8Q1E=xEM((Iҗ!)hZ^wJhAKRRK=Qފ0qKRw);Q@;GcEE;ZN 1ڗRQߚ4ԝ~((!{~w%Z^pE((EvGj:ޗ!R}h<яZ^(Ҋ)GZ1&: ;ގsG!F(ǭ%9掴J1Ӛ3Kڒi)zI@PGjN :Ҋ8Gz(i(;QJP:z(bN P)i;RF=Gj;ъ)hE 1QEQF(KHQK!@F(ǥ R(h C֎ԽsN(E.9QF3G@h<>cQ8#CAF3Gz1F( ("\FP(zQhQJ6PG4bq)ȥ&)qIh# ^ԞQ}1֔(g QGz;w斃Iڎuc('z1KڌQ4c))hsF(ԘIRj/4QKI(Q\hvbsKIZB(s;ڀ>Z@)q))ԝhH:Җ:uz>RccJ;K֒RƒҀhGGj\ў(sKGu=i}(cP)}GdIL׭E}iG֐x4~4h֏lRFE'KސR(h=hCA4QAϵ;&h掔v4 vNvqFy(HhPh&}izQ֐}hh(=); 3)ⓠgM&h(i2{QH(Q&0h(RfҒZ(E&h=4R((—'z1'zZBO=(PMQڊ 8IRR>v\fRR)1{b8=裸AƊZ3GQKP(cɠ{ti{QKF3IKފ:zRq@44/j)i1Px83^i֊Z) {:њ;iLi(ǽRR~ -@Qڗ)sIGjJR2:RI^t4Rڊ(GҖIڀ=i:-%4%EhRQ=hP(3EsIޖRPzP(F(E4}h4J:E'Z_jN4bfF;(&)(ZLRE~&}ih%:RR⎔usIފZ?Z:ҊNwQ)h'(ȣ4u4ffbAQEQFh4vqA(⎢f{Rc4%/Z8JQޒ^1ҐfSE%)қޗGlL}(ɠҜb4}(IE>:(挌P(pR{fҏz9ѓNQQ@gۚ33ސQF1AQGz)hhQ\A۵yPFi{RQF;vz1A/j(b)>3A(EZ;HF(ҖMQ׵R9:R:jBi{Q:P Jh4J;1FiZ:RF}4QҐih4 C@EE(4ҌKj)zњ)RR\tIց?/zLҌJ\sK@i;QzR4QGqKޒ)i▌~4fRF(ht-QqH3KIJ0E0h#ΌQ(4g)zF);hQt (?Z:юiO(ӭ/jJ8:CҖbsGLI8rOZR9ts@hҞyK;QGz^ wG4Z;)zQF("GjZ))xG4PyQRwOZ3F /jLP(H}i{94 13A()i;яJ(8~4GnsI߯Q߭@wqIJE%(I@=h){RQ@xh%-%/zh9=ERqZ(=hE-QKIҞgEj94QޔLҎAP(t;tGJ;E-%hKڎb g=i:QISZ( ڐQ(!(K6Ex"sGzSE%-E.'4tNHzӽ)(4-RR f)OZ11Gj(G|Qޔh-$R9:(h=(wIҔzh<ъ(4qߊ%(hzR)1/jZ)(9QF %(EP:i(旵E&1E) Lg֝Qii14u1AsKRbf;`4QGjZC֗R:4R(Z11E(hȠu08R)(Gb(==(Q֓h4^ԇK֏%(R 1J1%/ZNg4\ڌP:PGhph J^;CFh()i1Iڊ^(4uQڔRcJLdRE.xcNiiIvj? ((hs)zPyF('1GSGIR)zHG84.9~(Rъ1Q((J1Ҋ(4Ph9◥:RKGj(QF GJ=&y/A@@H4u4 ({QE(QLsGJJQH((E&3ɠhKQF9=x@JJP(h4 :Q1A!KQ;Rc1@AIKHh-'ZQGIE%)M;QKހ2h֌P(>f ){T1wKI@hӥ/8(/Z=(Z⏥$Q⓿4vKGZ:Q:ANI( :QQ(t)@H3K9hKQgҌqI\Lwh=z㸣9=(&(48'4KI)1ޗOE g7`qGA@cAցGZZNd֏Ž◵'j9;QR _“{uuv`IڔR'^)p)OQޗǥRGjZq@Q- IzPi%(usHM/4sGZ:ڊ?(KځEtgSJ\fƎ}hG8szEҒƌI=q@RZNg(i4{Qۊ;ўxJ:s_ŒGbFizPhwf())z>()94Fy: @ti?fցGCA$QiO%h4vg&hGjAK)9$ 2E$PhZPyi3Z3EڃI(QG֌Pi=Fi;(4GjJ;zEsj;RgQ֎FhRE!ii9gҔQb;ѓڗ=i;▐{K?1ERRsE91.=( NiE J0Mv-&)1K(E{((ǭɥǥv@RE'zR3KҐ RwiLQ=?ʔ~cҌbԧHhAbԽZ(iri1Ki;LsKZMsI\qIF{Q~hRQȥ4'&3GJ=F(IG'zwjNҏ))p@QE'zZN3Ip 袊1IK{R&F(E)ZJCK(qKGzB){ӱM(9^F)G'z^QKsI@= \fEh:(F;EhF}hAi:wF=1K@Ph/z)1J94iyRsP8JP;h49ъ>GzZ;RPsSGA֒(Q@tQKH:Fx)zRt@8斎gҎ⃜Gj)zLs. '-&:*J(u.xs&isϱ(EwHzъ^J;=s@qIJz)1-& )zuyqڌqI.y);LE/&Ni@}):GQ@tRIE-'J g\Q:ҎR(4gLsF (ȣ8N)1ȥ8w;1֏G^hF3@s9⓵(JB=HRsQH94NMuM/lP &9EzRg(4fQh9FO}izQQ֐h旞ԜўzvsQ4'~)sI(KIў(/>;g=sE4 ?q֔QqJZ=h#4t49AZZL=(4CҀhM)=44sIҎi'4挓FiE) fz9#"t9u4M9Fh='~M%>֗NiqAH:Qގi:()sE'zPyz:=hH3Fy' 4(J>%ҔRQڏƌRg=h4@99ҁFh:OE4uA1I֖/Ewj);E4i4:@襣ZLўhzQҐџh)iJQ@|gEњ)AQGqGC3ⓩ⑽(Ҏ(>RAHhړ'v8*3EIJ}Ag44(ۃL⌎ZR1ޓonԼJH:ҰSq1hSGz]i攟AIG֌u qE (ځE&M %-(gRz(֌GQH)OE!Gj:{ў(hϽ%<j(/&}(sޔ{P8t<ѓIJZ3E9=褠q.(E:(R'F)y)s ^ii84h\RtE- RQ@ɠp((hiphhJ_Zo"?::RtGZ1J9iE<ў(/z;Pнx1GR);׊0q@($RFޗm ^4ғtyF87$Q31QA8ZNsQh3K(gdӾ:ׯZ&9AҏjZp=;v(֜ ݓpϭ.)lb?4 HzRJ C` T1)2});("q@nRAA4g:Rd֒Z *z] .3<⟰ӭ&ܜRcJn.ڐO4¿Za ކPí3iXsN+3 M VSHqPbّ8#4.@^i.)3Jy4I;u4!2{DH0S:g|{F('4)z:QA֊@pzsF0sA'E&=#sIړ(4 Nsڔt()qAP袁Fy8GzڌQGRuJZ1ERNqExǥj(H){z) 4QhJ=i1S%Qi{RqIޖќF{њ3G\RLҞ9hQ(ȤiqE K֓1K2sGJJZJPhO4\(4t4KR{Qڔq@Kڎ(8@)>f4R`)9)NJi<Ҋw'zz\8zҨ^&pE&*Utri>GR894JkBw{Ll{R*yPm3QK8 5& P)elI!!zR 3ޣt♒Oڽi) 5:f(>@'zv)Ғ&y擽&03Gj4 jN((A9g4f4RvFp(RtQIE/JJ^sIҎތ:sKڎvZ>s;Hh(3Gl@4RfRt4Mfsڊ3(4'^QKEԽ1Gz^R`өqNPq@hNUR3 TzUUlqQ$#E1~4ebќrj>niΠPi!4F1F3ڂ8 Pq֐9Q/j;RfRc4QQ8G4gQi)i){RQE4`Pj^Ԕp1I֊03G4QF1Gz(GQGAE(zJSH(^)(4qڊ-!ҁE/ғE-:qEERGZ01f?旵'(GGz(Z(G?Fh4Qڗfwsҗ!𢏥探Q֜) G c8dRz^KQuh841T`R94GSM=h Jh ڌ֐Ɨ@4%);&)Zh(wg\ERRQis-!=A&Lњ=)GZ%J^vc)h;@@uQz1.(ޓhQގ(> ;? 1F)yJJ1KҎM.0(%IKE'iݩ;ҁF=i(J8K: QARiGGv@ڤ^j@) 57LӒ>sVq֐ǎAɭ`y =V*ROv2Hnvv)1Cyt𤣨QNRt4QI҂(ǥQRP>9M9(})h(y'J((RQE/jNF@ 3H3KIޓ{Q;RRqޖ=Ewu4gҊ:4h(I#@8;~vgw⌚ZL/J))hҎ⓽/8Q_zOE.yFzRcGJNKڎ(=(8):Rޗ ~)98\Ny~*tx'sRLIVcUbv4cXDZ>jQWcbTRy@v`R`tQK Jb9cJUd^2ֳ~*qU#c0Ȧ4A޲eRӊT4l)VO4dT@c&N:Qм 8LPi҃֓hhGJCJ84tE'Zb;rhwnqK\G|})((N(vA!QAEth/jAZ1@8ɠъ=hvڎt4w ZLQӽ (Tt/E%-IKG"%u Nt4i{Q֓;Pz@=@=h8xbRv4fRuޗ'E)Ggh})GriOhN֐=@J;7qTVT>i#" USn8F;ք1 ե W֧DiyLǵ.J(UjUsGM@ qQuyZ`qP]Gb= ˼F LT.SURcY*=*_L7jMSMMbwCҊJ\sQ3IJ9F(z(?J?3H8t-Q(i)sFhAJ &y惓ҌڌKE8F}(fG=hI\FizIFy 斃׊P):RRiGdR S^~ Zo| ^߽HG$槉pj\⧍9(J>=jtjd\fA5^H*eNjEqSHԫNjd?)J"W94z?jeɓSsϽ3]r*2j p+.U`rGZϹEn1f@ԁw֬S.qPRنQ 82Uq &:1J9HO^Gj3ҏ'^QAJxڊ\њNE) /i{gwQIKfҐZ) R8Rs(A(8t&h(Fh@Hx4($Ph\QFhKI(z4bSҒqGE.!{QӚ=REGJ:v1;>4QfzӺQKH~R14 qIKڗ8)⛎jAAZZziRsSӚTjcoSR Ocq;՘Ԓ8hC֮ĽJх09*XEVS*a_/NIzSZ PR{G< w&m'Y`ơHZrZ&sU5c^@ѹ;|Ae7zmMrУC He;f {r;QI4sK׭'A4(?'҃I(((Ai1R4w(4*:s&8=ihъNQE'/ҁҌP ԔPPi;ѓ1IEh)h4tP){R})i){zEZ=@QJS8Ph.)(AF=F(izq)Et>J)hqGzOŽq{QڔiM4{sK:Rv4 )i (ROQJS=*R&F \֟@rOW9Wޯ5r^A =jiTҬƙڬjeR*UUҔF ?^`ɦI4"xq֘b"| *Av}J k6c>Y\U9cTnQ}j¡83dRcޣcc4֣A!#/QI4\š}(QGAIڔdAF=}J3H)OOj);)p!QȤGZ;sFih4 GRRI: 'jZ=Iޓ9jZ>&9vJ);Kڒ/CA /`4fFJLsJ8NR)KڔipqOQPFMH*ejh<҂sUp u(֭D=+NҎcyԝhqJ=(=(I.0hJ;f֓u8ڊ;P(:QF(8)E&9hcqF)h8F;Q84w斓z\qE}hcRJi(ޔHG4b{Qڒ4◁GRvn)G>ts֌R4ր94UzԊ8掽)b5V#_njni@ɫV|Uq{tt'*&ӥY>v8ڧ*t(8a-:tՈR-4!sPN}'P&ǭ1xOڡ2MЂjQB%:y&Π ޱn~W$*Kqri:iyRSGjJ Q(;}hr(▐ S֊▓Z3IQ8:RRbQE-%/J94i{R)z:Q4gNu4 SҁҔ{vqjU^;@3ڧX'"ա zVyl1JՌ=j]8iW U\bՈqS 榍yYE>xb*AOPO&LuJ8A_֨LI~,'' U)`UlO=jU&><'~}9kL+1K$C'zM=h'&'4^ԝR Rd\搞?)sHsARu4G֎g.ri QIJsGJ hGg^%րNhGj(h');RAZ8R(R-Z(hQKGAIqI){Ph<џZ(A撁Ҋ2zbZ?)94i{ J^ZNbhz)qނh(Gq@t斁AQ)Á&y):priI"q07P5N|9=*f|ƣLvnAu cxz)i:R>uAQAzPiOz:PA)zu'&hI/JL;gR}(GnuH){PzQ'zh(uQڀ(((G4w%!/Ҁ((.):;bў();QGjZQߥ/ZLR(ޖFxi/zZhhKIҏz)%%.3EQHy⏥}:Q@>M(?-'9KNiG&wzRޔ}isi.r1N8)Fjt9ҧNM=YJ҈ j[>pkjbbFոޯB<Qf1V8ČcޞO 9$d'>xQ3v48x19ˇFfj $j5EYusU.#+6u ˑAcTnl# _zA隅8DGT,pO( RsA`Ri)=sJ) 8⌌( )=(R(yOZvr1Zc+Z.FZ zUrG^=j2{\񚴌28qS9f6ZRR5.Gj =ꤣP|jL䊧*u㚣2yUI,I5p1dK;7jIU7 U0TrPm1ޘ~ZaZBOJi3.sIךCv/jOZ;ҚLPh<5sF=hh1IҎ %E&)sA4QގbhE&)?SҐp)GғZZL@i(ǽ&9b(ր(斌{c(1KIGKEQZvI^>dQGZ(–j_z QIގZZ;ъ)HQQ{QKI)@=hE'qNF;E?r(▊LN٣R^5 ԊFzÁ&gpyYNNEigJ |յl(`)#&DH8xf6z&MXY5*9ɫ/2L}XYN2jCqZF)(ќ ۚ3֎g(gԝZSFh4AҐRwEEh} E'֗K;Rڔhǥ4s&KރҌ`R}4#dU*x5iFHsS*qKFq!< 9P*ғީOz$jDT~MSy1<񬋖=+cҞԜRhEtI;RKڌ/NR wQF):q6 4Q<K@N JzQSiv6*dTa+rB YSմ+VPjZI!90y5~ =WY\V280SJƠvNsQj9J'ҫN85.sU֘R䑆k>yzj1֩K&9%j彪%fY*dDh&2sHO4ZN3h=}(p J*?Z(4 IG\IK;Syڊ9)&8Pzњ;(4t旌RR~T(RQ^QGwQE.) R RGJ=hF3Fh-'~( ┊8ӭ 1GzZAGj-u4t旭(\qIҏƖ zwjR1Gb>s\pi3ƗJ8hIK09/׊ 9NMGZPsOZ052դncnAUj z}+R´gZA T \CUԗ81I\I1OGNqS-zвSy8j[QL}jT%*a U$^sUXg5ZOU)` jFUPz'=jAPrj2=iA tsMtb)擡^IQ4sRwތRw(=(4ޔQғq׽RGSE4&EhG@4 ;c /j';8E)=Qii:iRvZN~bҌQGRR(4'4P> ( Ҋ1IZ(@h/jSқڔg((44zOcK~9*t?LW`c[z֍kI`wO"d欤du52J_<B=jUsQ1*"pM3ޣaQz:iIMGSNT;E{RsF;ғ7ZPHɣH4c'Kߵ҃IރhH(4RQڏzNQ@)=ybR~4bH(AKړg\qIҔJwzJ=i1;Q(R&h4PO4qFh4RJ);ъQ֓I(b^ԙ 84RZJ^3KIޗ;ߊ^bKqJOjZ8NhG󢓏Ɲڐ㹥 IJ=i=x"R4g'.3IЊOҔӔTy;٩ZW^qI>W`(nF=sVV^aZzq֦Yddӄ'%AO򧬄iKZWSlPq֩xP7T.JϘ RwZVFIE$\frNi8)7 '4ub!9u=8h8 ii;QҌK{3M( :(֏@ A֎3KӡM.(8/GZJ^h^);QQ֓sҏ!g(vE9gC֊ QE'QKz)3Z(׊1Qږ3{O.xqNY1ߚy5^KM5 ɁUj:{ULɪRqU\Z(})I\`fM"}zR 4Rf4њ:QߚhI1OŽأ.9E'@QߑK'lP#p5j2pGz6Wa~+R fwjPå=N*E RHG9S@;yM3i;=i nM!9co'4ǜyuIuUžMPwCI2YULG#=*xsyR`Ґ M4ڛG$IJ1ފi J\bqIAtcރh@3F fNԝzތfzLzQKIKGJ:LGQڎP(i xQ9g41IZAKG(AHE&(Fh3=qҊJB jSF) 8d'ni LR 'CE{u&}{QJJQGJ)Z\M!/9G@8RI-⎴:R{Qɠu=(Gj: 4zRڎԧ6?22)~ץR$h'(ҎsGNuy֎OzR=;N1JI*6g5:>8O@bbB񚴧jn٭m1H3W5f;Oanԫp30#w?y ?TU,<'5 1Ҩ)UK{PpqlTOy桐JxR3ړ)) (9Ҏ;R)qsIqҊP;w.8vQRsJ8<#}zRIt:74`JԀSR j`})0Wc=5Y~8ޥYAe8KVR=MhRxGJ>YLfӔLcU4/LAL雉Խ4qFxǭ K(R/liG=M<4lTqpP4ܐ§LjBucޜ>VXNmXd *O\PQM;%M2i<f ˻@4FzY{1Lg8^BLf*0MDzR( DF3Kݩ:S[@sGJ=1h'z qI(F2)N)G)iOM9 }iNJLcҗw8i:J\q1&8Hh&);٢Rj1(sAIG4⓵( (3Hi{RcғSIEc4tQK֓b;(4ϵtsEQޖdE'zZ)3^gAǭR(I(ihhQA8Ecь})M KJG'NAϭ*qKIޔu)HJiH[Nɩ@qC=bYxz%=e;h4 RdbRv(H)xE.x>ԠE' ~3K p'N E&hݓޕIGҬFTz9H>#0"XifzTdgGy+Ҵæj"C#JGҫ4I *6snw1" 4hzpiI)0 BFyO”JNgN P:QIGQQ֗҃EAR~4QҎ(GzAK%CҊPqړPH"ϭhzQI њLq@hJ(EQ(E'(=hdR )h)3N:QGEv;Ҋ^J^uڗJ'AKIޖ(tKڎq׽(RS{Qߥ ڊ_JJ^Rww( ZJj9(Qz1-/_7:4!ŽbOԁRO(4w Zr@ < z`sO vygxJ_'iAM]=i9UJzisN,2j=(zKb[&8(3ON)sړ?7ў()ŒRRKIӥA4zt3IךJ_ƃ&3F>փvh :QړJ_Žt!&wQKhIގE}htގ(EqH)ix 8u(ڌH)~w(QAKIޗv)iOZJP}IGZ3'zZJQF(\QKۥJ=;zњ3FMv֊3KۚLK4Qڒ)24ғڊ\GPqGEiZ:(4Ӹ8:P;v8QځɢږZ^Ԕt3FhIAKڊ(GʓQ(h%r(w/ZJ3F3Fi{P1E=((8)x4J)h)@GJ '֊P^(@E(, Sړ#4p"!<('Rv4B{QӥQ\hގR1&yRK{qJ1q\ 3MGJQzzIߚN)F();փ@)(@))xG^ԝGZ(փA GcGj1P4AH /zN)33KFhIҎRIE/j1Gz;QE'-ΐFix'z -=;Z_%;RSQ: /zQGzZJ^ԔcQڐsKފ8&iEfIKh;юzwG8tu Q׿494utN\rE.ysKR:NbtQN83ӳӚi4u0ƂN)AjPMKo4p( сIs\B3ގgw#t=h4/4PzRwiҊOjS@"OKHM(LS Z C֗ޓi)h@RP -&h4J\qEQڎQIh4);J;QEiF)(JhtJ:c4v(G֏J9wR-P(Gӥ#ҌsKF(F(Kڌ9\QFi)@F'z^4Ғi=sFqF{҂ .A8IZ43KAZvq֚OJ8zRt.iSҐw惊Nuޓ-IPii/JozZJ)?!ќRii(h4zRQw=9zQHyԸysKMԝGZ=iiҁB9EE dRQɥ/CGEpE(ɣE/Qi~Rc u%@KFM;QCKFHKLK4`”S!"֎1JT9KvG)~VIފP1ZNzR}izzќ^())AHHQڀ1Fh> 1GqAE&2hi:QE'4zNRJ^Qآ1Ҍ QIE;Kڐ()OjNR/jJZG~qLqF(ќvtRbb9RⓡQߥAA :ցԚ3PydG=(J;QG4Qii("җ@@֔zFE\~4ԴQIv@f4tތhizQ@;Ҏ=hGz 4s$tҎ)CB8惚(z=3J)'9-Ǝԝ1NMJ8掦CI(G'zQGZC@֌bJ?&3KߥR@㨤=^Z4~wq@FxIRwF3IQA<(Gz)M6\sGQ(Iځ֐旵3KH::tQIڔ='4c"RPi -' ihA:RI֖IK'=i~RHhKIKފ;hZP'.3I4)(KIjvF);w4JJQH:sKKړqE/4bQ4v (RQhH:c&@hIJGRwJ:ў1A)9- =s pRtJ:Qh=)(ix'&H4QuA4(iyJJ(>tu3K~QJ;R`ъNԹ(4IRzf_Ǝ8ŒҁGz)) ;fqGz;#'jJQEQJ:;Q8vgҗ@Kގvw)ϵ/zNi{Ph4fZ^ԔtR›ih{\ҐfKb.1ғJxȥ \QhuҊ\hԢQҒ9fI4w"AKG9b1J)1G=yڃҌvF9њ?G;4gr=(Z?Zv81@#Ki0ysGS@&=ҏƌg_Œ N{Qh/N=)=h1E C9Gj1 Q}(F;@Qi;J>R-qEzQLRLڊZ:QjCץLb KIKIKi: ^Ԝg49 bbEMQEғRӭ/zLsREQf1E/cފ1/Ҋ;4d(hQE%-Rgwj1)Z(=3J:RQJii;^=(AҎb!{AGCK3FqփRA"(w=iB>QA>#ғR w3M?{vqF(du:zQAKj@hI4 = JERP 9h (IhhG)Ig4AfԞ{x֌P(E%)֓;;G)GI֎{ցғ1cځA(E4 ;A>/4أ4c%(Ji:QGG=sKъ>1E.((%-~T.(4tF(;RuddZPy;Q;#=)z JQGJ((4i8P{QZ;H =izLR(':Ҟ &sJG攑ښ{ƔQ֊;4qI߭.'84A4P~RsR4w%.xiHzRғH:P1ڊ9֊4Qp(=):QFxJN8҂i9>PzGnh4 %C@ix(4QE&hGz(h4u3(>d~4RsQ() (E%/z:Ph4w֓Z:F("h u& ;RZ;1Kz:h J)}:=Jh^RR/'ցJ((3G@4t=r1I@j:RQ=)G=8u/j((4Rnhi{z"PN:RuFFh4=i1xqJh?:&1Jzڏj8q@sJy^QGut_sH)MsҐjJp8tgw9zN(4phǽsAGz;{IҌ⎴!Q4w4ww㩠yI(K'ҌGzڒqKhb`Rw=(ރ'az8KP ȤiEi}3Fhi)hiZ .^JhQQFh҃/zLKRRFM֓EE9ړ)Ei{Syϵ(<ўԴ :fQG@ZLџќZJ9j -Rw:уQ.i99 ;4fq(&{33I{RϽ/z:uESJz CF}i{sLsvw=1KӚ ɣ&isaIޔtwGzhN~sAG4ғI(h9@Qގ u'SEN '~i{QRGz3EP(E&ph'4vvPOfrhHzE%R瑊Nޗ9:њ>u斎Gz:ڎI@=KZ):P -&ii){ցA RuK(ϭRu4r~ԢFzK4KNwzZ3֏j1/jo8J~Qҟ֓փ%җ.xu!ץ&0iz aF)lRNzi;iݲi(hz:vG4b/GGZ33(ҎEZ_ǥ&iE})zRj3IFyqFr=49Z3Z(>u/8)A{PsԔϥE%:QFp)){RMhQjFhsG4h9IPqMQN \ў(߽('4Fh}h:Rzs@z'4QQߌъ)hF)ZZсE"Rc Ըbh(GCI1/jNȠtڗt9z:QbԼfR}(4 sڊ)};h1yvAҗ}qi "zqR@Iޖ?Z1I4qьP1S40)=qHG4F98hZQғ<Ͼh4R%!(Q&McAF9#@RzRvhQF揥Z(h(F(RqH/nP1:(=(g(ғjQIޗ'SO袎҃A4P ZJ^Ҕh4d;Q֗探@9g0r9E);K ҁޗhsMR8JN{RSJC:SOZ\Qړ(QRvhQIE/IE/jNvFy(IE-&h<4Iih>.;O9ғG4wE{GguIKIK@Q);ϥxcF94c1FMF)iRg#4.r(wғځ4Q@ϵ/zRb('/9PhiOJA֖3QI4@"IqќPhg4NNh \sIގ҂sF(i:J^~v3ExNJ&h:ZNv>vd} )((NRKҊ:%/M:Nw֌ގ(<:sHxE AG4M'z;R9J2sKKHF ZSIhGj3Fh^z Z:IKA4d)M%-M'| 4Ƞ24Qih4uQњZ}hcҗғ/jN{PGzNqKEhǽ. }qA(4bQGlM4Z:M-駭;'@u'n3}) qў=h4Լzw)9(IKE 9dqAG%/ni;(G43ځގ{QZ(Iڗ2rhFi h(GZ:}(4Q@GZ(49H(1h4sFhsK& -i9E0h:^R: (4zP(ԴFhKE'zQGj: Gz)EQFhG搜IsKEEf֗4:RwG))FAA&ҁҎh◵)9Z^gAތtzь^Gs &Qw4<ҌRi2sFrh4RzR:RG(KSN)3ޔg4iGr(?ZLK擿&bc sAEvhOZQI9IP:QRfLJ^t斃IJ)44c4P J)=y⏥zKړcJ)i(>ԙ;:ތIւ(hvޓړ.qAii=hE-^h:QF;E(控\qHi~/F %-)R4c-hu=hQ1INE/j(M֌g.=鴽i){QQ0)i1FNqڗz1E'4 @(&1J($)3@cJ\R~4q@Þ 8GZNs)M(K:掦KI^sցIqEQz@K1F%/z;qGzLF=(Qށ(R}(@'z1Z(֎hRQi{ӽ1cރIEKڌQ(i:SE7ih4vi3J:GJ(h4c{RtqKڐ QGZ(EޖzQEJ8hԽ{RQZJZ;QuQKGj;R 1h>h4QZAJON(.}hiqGɣ:RҎt>sc&(3K>RRuEZ03E)1F9A48'QJhi KQRfQҌ #R@tGz:@>q )i;zRu=(: -% ;袎Ph 'KHzGz))hK&h/%擭 KIKZ))zRZ:)iqGIPhڃڊ4(E/J:ZJZ(RwEGnhǿv^4I-GqR;fP(3(4vbGJ:i{Qڌ Z@(ך\QQւ8ZLRt=)1(=h"A LsJiEҒ:ҜR~/NhcN)8)~Ni{QIGG9AbۚAڏZ){R֔`}h4qu(Aj='|RsIEp(<ҏʖJ\IRGsHzPqNGj38Gn(IA⌜QAP:E})ZS֏N)3K1Hh(EwPhIފ^R u@hEvqGJLzQK%.1J RRw(4uG֖();h1vR1Gj4Q(=E2MJZLڐZZ֓c&ږ(qGӥ-.1Hh(IJq@IJ0(KHG>1K𦞴Gtg2(bRb{Q /&Aɢ€9FiM4QZQ)hQKh't(N3K4cҊLR<яzO %KI@$cg`PzAG~whi:RI\с֊J9f%('|QI@ڗSIFxGRԙCA(AJ}h(GRi;@G"ZNq@hZ\RfwEz@hQ1-!;Qߨ\94/M/b K(J3(tsI81J_Ži !-.i=i)zq-qIAfGҔQߊ \QIތQJZ;Q(IiOZ):Rc!tIޔ`:)3E)=)(IJޗIJJ:sJ@G4Q҂}(Z14i{QEqA)wԝsIQ₣4s@&J:QF8(Gj%/8{Rc3F1֊0("(.);3Ҋ(((E%QzN~(4P(RtNuh qQڐJ(hiҏqEAK1I\whA)? Z;ъ:zҒ(E(/J RڔR~4Ph(Ph@!>g4IA4qE){њCf^QށޖԂފ)i-ZNc^QE旷&zR3ZAsA֏ƊQiOҒ}hA#֓8.yr} R &iÊC 8PO./j:1H~iN3IQqFyt4s()i{R{E'|Rǵ(1Ih))i=hR^qF8IҌJ֎ގz(IF1A>i}sM(t)J(4qF=iZ(hIEEEfq(QzRQEy 9JSH:RT裥IK{QQҖF=h~ub(QKRt ZJ;_j=4Ҏ=iMGJ)җsGҏJNiyt揠<q(E1 :Q`c1Q֗.iJ1ڊ1bsIh -Iޗw:v ҎOQj?*C֎q@QJ2;Q֊8}(4P=i>i=hi~w(ڃF))@9"(Q:P)i9&ҏ’g/9#Q;rhJ8%-!RIE'=qF8qIތQ\qE%.('z(Gz:(H斊^)1Qފ:RIGJ(QEJ3/jNR4 Rڊ(ցҐ@94vF/NfBqFE.2(t⏧G`g(EQގ)z4g.i)}qA4fZ3KI(GjQA?ZLџZ.}hKގwڃ'S.)03G:GZ8vQފ8'j;q^g֓GzL^xcPz@t((G8ɣ4r(u'9!S(4i@Q֎ԔER4sցF(4R1IE){bGz1GNQGhGPzP)x4{RfZ@i}hIQȤJ{Q)z O~: f4(wZN ^g4QIށKҊZ:B=9֒v'z\ c"sIvA4wIKb=(9h>ԝix>Ǝ{wIގ(4g '4;Ҟy&){RQEQ@G>ԞŠ(Hh3@GJ:Riq 1GlQ( 'Z\RwQɣF84!){RbP>v!1ړ/z;ފ;tL@9:GJ;ގ3IKڊ)(@旭b9c4ZZLsKFh#_z(@Ni{RRsHzKފ:RN)rixhhQG&Cҗ`sIHh(&)A-'jNs@KG4hQh?Z;Q.9I) iҏj(ih4 ^ԝuE⏩֊;Rd- ((4(4ғwRRڒfg4w3GzSGGJ3Hzt(4u=A(=AKLTsK@GqEGEA8/zJ Q&})z@<Bh'Kғ9x@PH4t?J;Ph?'jZ)A3(G~ P0is7ԜzRFi'j^hi;R8M(HE'AE-Rc=hQERs(4F3GLQGw);R@99h@'jZOZZ)xfZJ3/~Pxu}i()riII'/'i3M("(4K:ۯ4df%R4sAvfQ)=hTQQFh'8Q)~RsA>ԇGQ@1FNi{QtҒRҒE(AN4ŒIۊ9=h4whړ'3v'Z;ޏZ8EfP1OJ8q('3IGJ4*3Ph'Aҗ9Aҗڎ)(j(sF=GJ^p)(F)GNJZJ)xvhH _jJ;RN(KGnM'Z^sF9((hhP(RRJz(>ԟ.?&?TfQHhKPEvE4({:R撔}8֗{P~w(A:GKғ𢗌j;O9j^}((Gz9;bJZCKGz:b\f(␚:ރF}{PIKEJC(h^(sKߥu&h(cQsEtnh&g31E(֗4Fh4z33E.x"hGH)h@4掴g &rsFxE(4gzc4fA&('4Q\3Ag3KGN&)G&h4KG=i:њ)sHzQ(&ihfsGi}i3J P8A<ў &}KF~isRQ3w4Q@(94QI֗=8hGҁGciG'H={O%4('"z3@ۚC{QGz?ތEQ(-!QG^ZCGj=i .8QQE/AIEt4-֓ ^(ɢQ;P:?&p(ރGG>dc1!Gz9)h4qEZZNԀbZ)1@(GZ;i1KIE.)1KځANbZZNf(׭i)iJ\q֊?;w4Q1bQъJ\F);REh'җ&REyc(?vu/dJZ;Q֊J)hҊ3GSERQKF}84J) ;CE R :ӊN3QAǭɥi֒)i(4ds@KQAQ Gz:GFxjNbAZQIi%QތRJ;4Q4G4sIZ('Z):Pi)i>4ڒ>Q^⓽f^Et!RNQGj)hwJ (GlF2)hϵ`P(RGjn94ҊN/^h1KzRQ'zZ1ERb3ER⒎w4R)3撔thǽ-(AtRc4 ?qڔԘiyF=(QF)i ѓKIQG9~4ǭ(SHhQ@QF=)i)ydQh)1q%}hGZ^ԝhM(w旌R`њ;ҏzJ0hF=(sHzPE'>)z ɤQiiҊZ >ub'z(揭hҎt1Gz֎Qx&P:-%-%-4QE9;QE4RGz(RR;ъii;юhz8E-PsG8Kފ !s:Rw ' iyqF3F)94Rw/z:R{RRR5!-!Kʓ\QG&fh Z('~gizQIE-4fQG4g p}z4&{RRFhhJ8J(4QF  ԔRRIF3GlPhɠtZ^ԔsE RPs@Rw%/j0hi1ޔQihG4RwQhG %-'j)hsI;AKF))i9u(.8:1Gz(RvKG֓(IKA⒔uޓ斒;PyQҀ}(GJJ^s@){Q@RRgފZ(4RRgs/zJSIKCԴQHh.i;RFh<ќQGz;ғځ1Fh)9/$QRsI(;qF{P(hE.);QFii1JAP)xP}R=hѻy◵hAz;{ڊ;QE(AtZ^g֌'4hON)^hQIҔRRhўƊ3FrzQzRv'z(Q~J4֖bMOZhF)!&E(#ڊ(Aҗv<}(JNgRSN fCI13ڌQE֊:J^R QIE)JwҞ{R~bPh94bO/jJ(SE'j1^i){RP(KE)}(J?Z9'J\qH)i9" Ɗ\uIJ!wsj^Z9ihϵ&(E 4SIڗ.z(>w)zK;P(ɤϽ-dGCEJ\G~ii ֎ŽQQҎi;4bڔ Q֐R3IQKG'Aގ>dE&(ԴPsJ;GJ(EzJJփh"f.zC֌>w'Z)i 'z^-%F(;P:Qފ(ގԜPhwRP>R)=hE&y |Qڒ;ڊ:(SIKQ@h.hh()G%){QEqJi0h ;Q;ьIGR(i=ԄbhQҎxM%4ޓ裎~4wIG4ԴGzZCFrh=QE%)Gnb(ϭwFN(hcރzPzIE(яz(Q('ZSEi \Qhwq!v֛ޗ^s@&i{f9(4wGGz(Iږ1KI旡4uQތRg4QKEhIh4Q4Qz_z:Q旵%F3AGQE-Δb R`i-^(Q((<ў(TsIޗ8uJ:џ'z_z3EtR`(RQKH;E4Qht⓹/KqAEJZA\ g(qF() bJLRь(%M!ւqE-QEg=(QڌE:Fh^qIFp(Kx$P(IERq?RRz(<Z)hi)s3A"1GJC/j -'Ҏ@4⒌=Hs4GFz`Ag{HO4C@'җ44M/F8 G8;H(4R4g?J\d`tu`H=y`4uq1F)}01GsbfMR%.ъA/zB c@H{юE's1E.8~T (ivMZ\qIRt&(#J1@sGKN%{Zv4JLzP~F)~tO/9H8)j;旨'ց^Z?:OZ^4bc4qG4}v }QG~EAi9J\v(hG(:bdfԹN)8OƗ!ȤɥZA֜3Cך@F}ONRq׵z3P ⓽-Ru4p>t9𣡢4bu))G=x){Qނi8 8й4 :P9=4=Q&c&iLӳ)3Kڎg"H擓җ恜Ƞ}h>(9^Ԡ@$)qǵ9 Q׊?N4s@擩P?*;RPF;qH&ڌ_jLfg:v◂'cGK٤< \'NbLQJx9 R1< =P0s@j;c4i((nR):3FAQQu(hGz控hv )A44gNӱIKQӓEAA3sK(hJzRcҗ;t4 i q@g?:;qF=9SM;ϡ#4R{I1AcҐZq)ݩ/1H8Bi{zю)PNMCJx>vRrsL8qKi?~guA(=M'"~4Ԣiq(4ޓߊ\3ڌtdt>G~PFh}h@(qNRPsF(; 攞vgt=րz {Oҗdg9j>w<#ғҗS(~?*FIJ\ ^? 8Ӛ;bhA8ƎJpz)~c:QK׊AG׊8)4({8=iZ1GAG|R#=h=qJA֓\ѓG#ގPi@4;RS4G~(uIKI4cސpqޗsGNc9>"SI={h>J1Z@Nii1J8GQ@NqZCҏKIKHqG==1H:4\`{gҊQA9riO^)3`x=)zcLqH)GA>Qzу>zRw/cFqF1ސڝsړf@{PzҊ8fs旌Ҏ٣RhK^`w'){tt4R4AAZQipwRR)x'N(hϭu={RhIzt4h>Qߥ/4=(=h#4tGK1GQȤ'AEZ\sIsG'hǽ9=p8qӚ;N(FqFIzqF2(AKsIQGZCK84ƎKRgړv\wg&%/Z;ڐ(zRsQ֌zR)Q"Ґrh=(֊? :ь ў:w'z^܊Q֓<փ҅G4RN}i{Qߊ) /_sGsI-~;ҁǡ֗QhsKێc&zҎ֛fOZ8>Q^gN)3(LuҀISdRFM%)qIGqA<:QךZN HxZR9 ץ~4JA֔Pz~hs;LsJ88֎3֓/ltɤ=(=sK7آhN:}(Iz\fF)?:v2}1IQg9-'GI(IK@4{Q֎~h=h=Fi1 gz0:I{i{Hpivⓚ;Rߊ@h){ctu3@Ɨ֐Uq@N(=zqJ~J 无#!(q j(@y8Ґ R4wJ3P4Qi{RQRj1IQsGQҞRIR".1ގRr;@ޓ)Fi}:ҜzS{/J:P9A(/I_z@qK:P84@=( t84g*s^yj4s SHzcގZ֊=(g4QqF?::F2zҞG=:RsK>c'48Z;ԃzINPzqGƒ)?Z;փsIJQ4g't$ti4=sQ8ڌKh=hzN:џZ)44uF׭wRshhE'A4c>Ԕ>Q1GZ@ /~{P:.=)xϵ((<8I;ю3GCKZCu҃F1AN&=q'nh=JhKI/AI@뎔u&84F(Hrxv4~4u?֖@)GJ3G^c:v))qAR44KړҗZN/'liqhb/ҏ4uA=(ךJx c4cAKIRZ;P (;@})O?Q@vhh47j~)zg=/B R::P}'Ju=Mϵ.i3G^ti;юh֗҃ɤGJ^t=h:GE֐th4=(GAށȣ>Rg=A91Iځ)^ؤ Qڗ 84.?IɣT)ڊ94w"!<4cIZLI:RM.?:AsG@M& pj8ҏޓFrhԙ9/ZL~39A>(ҌcOjځ)LQҌsAiqI/ғSA&<Ҏؠ;юy1Ij_Q9bR)0r(hz\8HiG4\R"9Kz9}h◠s)p3I^i3ciGJ:Rqځފ JOڐE;ҐiC@4p(^hK=Q4PsځJw !%IixjJ;PNhۃ׊Lw44'AK@h8Q1ߵ2 2)>q@6hǽސȥ8'F?:N1E t#4qGq߽Z=hG^i4cڗ)J)OJ)KRu=((*; R?J0h8Ͻ'`QΏ⎔'oJ^)9=iZ\A/lR@ҐIގ4wzZ(ӊOj֔ /&qڎi;`ғ(Z^PyNsKGzRi$}h=◶h8(thEg)rwv 1KRh qځQ@أhI)G@IRiz- ph<Ny.h@zȣGNvqIGlNԠRQIN)ޔQ׿4vGAQG9f4 9֌3EKzRhEc=1ڌT(曒x ;qIKNh#4@ځF9zC֗zQҐGq/^IҗӚCGҗQӽQf@uhjL֎GJ\ZBF1sv;Ҏh4)ZF1IjQG4F)(4w4<@Rc^tA')h~48c.1Iߥ.3IKI4ځKIE(uGNQGF^ԇ /jJQNKH2E."1Iv@Z)J&GJ34Gփ(}iy ^C֎3AG&O.G8h1KiRcLڔcu#4v=)3)ORcZo){۶i:G9qGN)9:sGz>i@FrxG_'z\8(?JOQڎqQ֎h4<KސtȣuҎ)3ߥ@Ng)4(} w>tRw/CHE(?/P(4 џhꦎ߅&9):qF)}PRtKu9t9$dZQ@4wѓKRv:hIG'ړ=h>=)ݩ=J0(>ƒ^{Rp?!v((4M:2;hhKQGz:ҏLRޛzw9!}QGn(AѓR:Pq@擿((94OZ` u)h >IKzQ(J:Qhiڔ>ӜҞ1AhQڒgi9##"gLёA랔ti{bKڐ >&y~(R9hi{юMt?I(x֏~fFM&G)RQJsIӭGғRh{g 1Gj3֓֌qE/z1F3FxF{◎g=RLqKIKi;R(9&(8sK{֌PRwGAGAJ@4 Sȣ:iqhj@9;wiOGJQ~.h4wJx4tP@AF=gҔ(ZR8M)zJ(c?=uɠr8K)1h=qE@F)OR~fFs@sG҃@?'|QN)O J= 8 f@)z=ncҗ4{sIGSӊ1^ԝ:Q@RzCgqڎF(;P:})>uK֏z;RqG_zZNތw 4F@8%:})zRf"w`:;'@j(@i3֐u)h=iO'FG!)1NA8H9(=)9҃!P@vbzNO4RZ 4AiLb\PG4`\EQJ94wJ1(wFE(8vڎԃKsKH4fqڎr984u4Q@Q J{wȣz1.xA=hPyNҜRғ\҃K!P4 OjQ/={R\3:P3G|Rrjp}q@ #cG4NݨG@9j\H)?_Aj jSGzLړҁɥ9@b3zbsGnM(o֓Kj@2sA('9R*C@p3J947L`@9&Oy=hh wF}h#ϭAiI֐fA␊֌|<AҌv)JNҐ`\uq֌sF:(?Z:v@c@Ҝ8+H:Q &)ri=F=@QM/ojh9Ah0<}qLsK^g{qGJ3.QLQ(zCJ&ƀh'(8Œ;PqOf 8G҃Nh(RӚ0zAJ( N3G9/:RcRғތg(9){Rb~4Kښ3J:h<84}M 01J1&3F0)ϵ/rh#<#ARю(GjBri)=nzғ(4J3Q3I4h◶E&~_ʓތP~)9;b u? hiE&))Ը:ҞM4t'o3ȢG_Š#(QH)FZC)rOPy4Q&)zbA:9=h8}?Z^ F{v}zN.8.E&;x8G~(֗4ךCZ_z;~4sҎi>&~n.i{;ҊNKGCך1Z1cZ8J:A\яzJN3Kq9bz ў-Ƞ◌FqMfr1H ;=i^h@>olK>I ;h}h"#ךQI3ږ<{ьf?/ZLIG/H"(ގ⓿Z:ёPE)֓H 2:QJ(֊94v`KJ; 3$RGRqQFp( ^POoH1/A@A<>c"t:4ziAȢ)3ڗxq;cю:ړҗsIJ^)HqҐb)zGh#@1֔@94KtݹzR{I(8H} ip1J=y֓s֜:qHFOK('~Q4㠠 ㎝ix!ހFzQڗRqGP9hz@8ZJAފR(ړqAF 'Oj_ZNϭ/dq43ҁ9CFsKZh cN? 84J3ޔ}1N9FZ=GL@i? 1Ii84Lby⃚(h44`R4g((3M'ޝIh4hs39i:=yu@usGK4uQj;Rڀ@4vϥiGKނ))OQ@PI=)qz9J^ LgZLspK9Kޓ;j1F9RQҔgsK@MrqIP=h<A)ҎhGjLPs9lRǥ >~t@1=3H.94u;PF;Ri1b4cF=hGz?:(HO CҜpE!LҚBTuJORg \qN3Z3AsIF("Rґ!{R8/4:(PqJ_|Rhi{sNIIF=(KޓԸ<1Qށc'49)xIQF(uIQzE\p(J>'&ihҌs (#hi1@R``'G"FzsFyGҁޗqIg4~8F1A{fqJsړ'=)SG~ގأڐ4c=@ ZChZޗE ȠP3F;ю8֏ƔqIԹ֒׊ .sIڎ=8hiأ`Qv$LRsGN&9E-IGi1iF}i1KE'ҔzJy#NaMi{c84~hԘ>c\wi =Oh`4bRҐ/֗ь}:M'G4~TPyQzQޓQߊK:ړ^'" )9)soS\`1斓4u(=h=hh$dPp9;Rёus&ZZ9@=h{PxA4CF8G'j3Z3ԠHr;R(8u֔ڎғHF[=# ^LӸHx掴g#cNҏK1҃{[:Rnh ( !=H)r(48vҔ{߮i޽Zwii;P}88~JNI֌z^Ԝ>Qhhhh8 j1Z:P0 Q}:F3^N9u'Sց9ϵ%sF}G:Q@'/Nh@QyK4{Qv#&;StR8. s֗!ḣZJ:h.9}9A _jLRtҊ\⎦юsJ=zPsԙzъQA<ۊ:R4'җ(G >P8@99b֐QQKhGL҂JJA=zu^i147J_“4p)8ZB3B~4MzQҌ)M7۵)p1Ac@:@'֗<֗48:POZ^;Z.2~9gNh#wz1҃!RE/QIIߑEc4⏥.2i:ړ9⎣; 3(wʓQKҚ0(sGҌdsڎ'| !JyGAA!(F9$N:f֗H@94ڐgӚ_“RRhQZL^􆓵/'h=h;fqix9(Z4&h1G^; 1Ɣ)1Gך 1 ^ 1(9Jwⓓǥ)4$P<֏`h9~giN(y4A)ړ֗A3GzLJ_G9q@28QJ9qA4~z.1I@h=3KG~>ښ:R"nhIZ@zzҁ^887`g|~ޓҐ.=ԃHzR;uԘR4c)I>F h4 'IހqKCގ($8t'3q RAҊ: 3𣞴uG88Gz JzqG^L{E/AғuZ8t;rh=IfG=E&qJzP:R!QJ{ђEJSH8/zC֗<(h(1ցԹhxg4utz\R{w>ԔOJ\fNH8G~4izRg\E8qG4@'!#H J(cIA-'J)9iOlPI}isFx)NzqG#MHIOoΔH;qAh\qGj2i1O(>sI>vF:1-:9ǽ^ԜuiqiHNgKޏKR14O4&}rsG=FO=Z13K~;RFsqJ0HҏJQsI8J:(tNi}1ڐZ .0h#.i(# }hȤ /b҂qGc4v=)֏ΗP8j(=s:944 RԿZC֌֗'z3ڌjڣpx 0zS4HJ\v:oJ\(9~s@t撁K^hPPpN('ҎZBxu hhwIhE/ PG1IGiqFR8u֊;QGz(G('ޝNF9KFh␞ 8-'j\bsG#!/ipzHZ8sKH{G~)z{4Oҁ1KHA>w<(ZNs)hړZP}h qF8=)s(C@('9j֖dPN):EQwuH}- !NF (MJ6b';q:掝=hizh1i;ր1ҐҮ}9ah/NzE(ӻsMNR4sF:jLu99i(49҂8} 擊4Q)1G()=) LQLR1қ4c'&h'=)Fsғw-'SJ3GQғ)qGnv4QZ1@KGjP(#"@RzQJQhiqOJvQ'ցR(:QQF=)h$ ^c?F8(9-&=hFx^0HhTzюP{3 ^G'y◌q:ю9|)fyڎj@$(h"&x7Q88sJ9oJ:—Ng&3NcQ'/(ȣ8J\v# ɥG8xq)3ڔghҚNԞ.zh94p)9z: @4vz;Q!H>nf37RQ{gz^JPqNOF:Q׭/yLqAךSP>fRnJ\ qA4–(ϭp)4=M4sOJ4g4w(9z N9 L.ORzKҔr);RshJ)IIӨttCt89(iz'lsFFh8&Q֎ǭ9E)zsHiyGjLsQށ^M 9&cb{ҟҏK@/1M=xi F2i{v&{Q9׎(.}21LKZG^8)pqҎi;ތtEi3ZN~@4zP1((8)>M- >cR RqIM.>p8F9擧ZwJi}h=>chA8==i23@( 3Ev9#gގ($dQKGj;sG#&2(dnN❃4ӊB})94NϽ=qAA 9u9ьJA@t>sPF Rݰ(=.Fhx8/C\Ru< ^9ئޟxFOJLק*Lя^`cړ?*ZA4gϭKAt_҃qc8FrGc=ϵ1_j;uiz1IQ)8{ )8A1G(8G4Gi8(IctR.y @98h4◭Ms'4x1^M!3J^!P=iOj_&y"/玴z\ nRuzRjC.89 Q(#ގ=@:RqK۶h)xxE(#9(Pz{ҏz: :wf9JPyPzw :юi1G⒗4RsKGozs9vN;P3Pz֚2OΜ; LPsj\3E/(+ѴG(q֐E3F:;㌚O#gwZ\w(4`4v40MsG~J_LCj!jPh& v:t"vu9v?Z'ӊ0~ʊNy#uIsw~lbPzK~4g֓L9KlҏjL{֌F}y.:CFx/N((KIЊ=gz{K:Rf(=<ҁZ\@h8br(J\I߽ތќ㞴mSҚ)sAJ^riE!9cҗ4)}ȠA'JA)wQCKځ`q;R=@4}M&2;zS dKNz;Q88ޛ3җ '94pq@zѻ#(Pz@i9●J>v&GJ^'^3K'4@iGC@'SҊ1@9 fzRg4g gz0{R4{{Q}E/J:Rw9֌J^:A)j@zK)2Ej9PE'J: ޓ<}iGzLqJLA' ޖGցG'"3F9biO'ސ::RJ3EgH)R (4qޓ9=:QSoj=)G&9G~Ը!<4tPi()3J>&zќc4< 2@J44恏ZIQ44⓭8⎂)ԧHOH:P84{J9K߁hGҗER(FF8t,tu=( ~Ow4KqڀNhHNE/4x=)s)/$P=GLPxihj\c4h.N~r):^ujO\z ^i)qIKڌs@GF=3NI$ #ޗ9 u@iO=)i})3RGNisGOzL㩤ڗ4i=RysAZP0 Lۚ\R F}i9(sAQ@cvZ\R``R)OlRt)v/ni09=9o4I3ځ4Ҁpi  сF9I>&y擞NGh (4csJz}qIɣs&*;R R(QG҆''zQ84trycG"R :)P:fAKJLQ1!ޔt=x>Ԥ.hZ:;t89zvJc.=Kޓ)Eh?Δ{ccьzRG >gڎ)>)u ;zQΏJ0rh8t(1KyHE.2((J9'FϯZ;FhPiO4Is0G.1ސAQK/lAOZ1@zQ&QۜaNh/!)2zRHsj}(Iha@@ϥ'9h&(h.8!(=8t Ct/JhRMRb|Ҍސ L^ԝ/^{R)sz=hҁK^wu)ZosG'4cvGjAԴ3qzApޔSi)=dqKޗ_Ɛ{LIߚ8ȠRv8J  GIڜ8xsKzQΎ:LKhϵG)?A9~zRq bKH:M9 .; NsR1Kh8qI@44A@8& )z ьd(LP2^(#w=zAޜ)=z8(j:('8 .94c11zw0{;ҁQIl Rv;{} cޔ94i84gz hǧJ:p(Gl1M=0{SLN1KE!{<1@hQ֓_CGlRc(< Rvx'Q:vc?ΎpA:AzЌOcKAJ?JI;4tjC֊FGGzR1{R})G>cފJ1IZ:Q׭ڎޔҔg?&lQvǥ.M'֎< Ԧsӭ&1@Gz=(ΗގsNi3F~j8/@?֎3Kq@/C҃1/z/^?Z>E!ҁG"u?/l֗=4iBsQ׊ ڗJ\Tsyr /zLюhF1)@)OZ)FI1N5&/)1yǭ< RnivzR)y);/b=19)c1zLI##oo@4f1E&Ai3hsKIA'zi}ѷ=izn):sAIZO{yF)zJJ8AJ^zPy4~0 4cƌ (?*ҏlQҎP>ݳA''jAGLuǵuIF(FG~g/8LӾ(<~s(():J9g(~4tGJ ㎝O j\ғ?7LӳJC“8Jvp)O&3G)4zR:9uiAO'|uIRHN(M/CԿJA)O4cƓ(zP;f4 ~4==3KP1NE8M)@QG/QҜ@ c 9< ҁ1ҝG֞qO JxN2)S8)7Ni. 9PsߊUҗi ))SHlS6sFvi*==Ggғ7 8;ڌ) J1HOI҃i3\Z;>=E}iclޔҒ֌HqGAZLJ1HZOjLs!y(hB{Gҗ'~h(('/ZoJRxsќuJ!)8\i;KsIҎ/N3H1^3HphG(9 hQ(t= G&GsKR~TG8QQ-s֌g4&HzKրq.;w4hhF)GIթqAvtPO/j:9ޗ{qK(ǽRE')x җFhP4rE&;RJGLt8Gz1Kc4”_z;҃Z3!ϭ/8j^(9sK(Ru99cǟjLJv01v8c bts*UK*Af"!_(ԞO#C"HМ8EژbTAN}\cQ*2◪)g$Sd9'Ky76o^P:RASO׽/֓#S>ԞҎF8HF)2A89$R f=z'ZOj1InIҏaKJA(qHsF1AG yԄ9PxfJ=8\Rv<})x# _lP)3E)=hxz=(n'A(ȥFqڐ zўhgLڗ4JnOZx& R*\EF3H uKJ u/Nҏ(uhfך^4z;q3ڜ9sNH(=tQ*.W֥T AJ#sJ:S'AojvsOP3;Oh;=:=j!H#>2F}8UlJ9#ÏZ4$GMxz~4ғh)L n3ޚPzM *#T^^r*)">'&ܭWdHT4й4RtM,u4c"z:Mw4ҾK'!pE-'A9)z~8'~hRp\=)N(>Ԙ . 7Rb—RdzQ#qGR(N{I\q=?j03Hx=h;P:s@v䌁I:Rғ~1FFhsHzt\R (i=)s)֏9΁֔Q4{RZy 3s-'=i?'z:uM8( sJz掸t@"Qڌ`yK&{P:KJ9=ZN9GZ\fuZ^1AJ\P=sF3ڗ K4)}ȣG@ NLvGZSGQ^Լ&?*^# w8rN'Jg֤)OlJ}G@ !Ԃ Մ'O[|&9 P-}h{\mPݜPГ* Xi9D53UZiJn8zk Rq4i4uZwoz!m=)90z)=9r=Hr zB2sF0q&2z ^ I(\{Iޔ:;S{RtvLF(OZ4OZOh4Oq = tۥ-R:=iy3MҞjAZ1{r(=zQ(ZR94AE'Ґ20}(}E/R;Rx{R^t`RvN hأqi('"ϱ\RZZ1 F3J:ցGd~48('Z9 Py@fx/Z1׭җ8I4`g)OҀx=Zsp8lvIA@&wQxfu?ӥ<ڔEJ}?:5稫Q1TRM6WU{\Z+檛`ʒK|@G5CȪ0)qPɨRFED@*4c43qyG|R`gtmAt_jC(%4.{RqH('ڊ9⃎i1F9擵LzCFr@~(hQ֎vj0x(i:8{vtɣFrqG QH:chzPq{ړK֓>-H}{Tzڐ{1ɥjAI&Ƥ֤*SyV"U&N*u*!9e#8a =GJ!5DjizUVdHAR U0H*qUofqPy_!(ux>o_ZUjfIȦ0#|hu4ޣaHNM!9w4ߥޏJ $9M'Qzb`w/n~?n;\`R)9ȤpFGRp 'CKRRq4Ҏ'CFzKNu4cQj8'Q@SEE%!>J1G4:9ǽp qzsKhz3HczьџƎ(ϭ;QRdzQڗ)>4KԘbGRttn)q҃Qޔd3ڎ QGj^1IҗKڂzP>q;)x40)z7ZNRsK4rsKG_/nԄsJ84g4:PF~)@9< \dP>P PGJ_F(4cҗ/!\ϵ(sF3Gjzj@S‘S(@J>ed`U9U欤=UG<[gamEN"i:T_Rچ ޚT;vxjpsQ0JUiB@ɜ)U@8R["ST:qCB3Ƞ(QBzvAȤ4AKzi9h=h'&qHyG'\bڀ(4c= Z@{PZ8{ߥ}E&9%Z@ L A$R4gP~g(jڏJ8"x%$h&hJ1ZNi{{9–8҃4=lc 4vCKڃ4zN(FZ:w4~4c3K(яCE)xKփsGQJ4&2i@QG~)@=ךGh4RzBpyAlv:dRh})N.84c"J^ځ>t.x(⁌qކȠr)F(11ȠQj֎ RqR}<jD6sS9UXNzUj(3W0\.xv(p9Qǀ*eN8EAONفB8CҚЀi. Db<\*«5Zus+RN* A9⩺PȸBy9"~faÚ:aS1~i={ϥ!(zAӞRczRg4sAw4g#ҎqLc)>qhPOqG8I\f:c=iG_Z;ggבAp4c&?ʎZ)3ϭҎQ@ރC@^%⁜Qt}14`sޓ={Q9z{'sE/c4鞔(h?ʓ4f(h<юis8::3` Q3G^m=)IxRKG8(Z;NJ^(4u@4hGj8@8FxGhsJzץ/Z2sGNhPF(ޗ@$dP9r{Ӡ]*ۚGj (8 zSAO)(AM*3(0j&񍿅W1{t/s\Az qsPԴwAҌzQGl)K&\qޏJ=s@ރ֗'8Z\qH"FM:=izPsKFyARHVtɂIP8x2aʢ>?ªPHp:RG=sQ߮)#qޙ'Ҏⓜ4E&{*98z>^)(4z; :)'@KH'(I$QHsGԤ?:22) PG;P '/^Rv4g)sF2}(J=hZ:zPOKJ8&QGA4v CP((4g4iO= zR8"Q(i:v▀h$Iҁ 0(旷ZQR)zLю/cGPIiqG)p:R:=I=7Rn ^G@FM"q1Ԃ#қ߽)FN)1}$l)0sFhZL:sK&1ӭ'֏;ъLьEA9ΎAci9iRxx(PzџҎԣ֌vZ;P?)p)@>R%(Rx4ԾO\RHJqV#Q =UڮCt(85`ZX=jaӎ0QR"٩dqR"d_\yx3ޡxy<Ҙ@-LtjNy%^URj\T9PHi zu7| Vc7vV:C"=q' zsHqgL֐{@=iJCxh=)@RzQN$hҗ(4uR QޏJ3RJN0((}irցA){dLdgF(iM(hKhsJNxM9JdRNs~4s(cK(=>PFG/=)98)hFy /"I~ui"1KރF@t9TvsAqIAҌj9'}(v挜@&(i;ӳԄSGj;HzӔ4g H4w4v4=)qHydқ֔Qۭz8p94bsޔ NRhy{B裊\cC(qJNJ1w{c'җZ\zRw.1M(h#sԼbҎQOZ=ZC?(0)Fhɧ 杜z}iz(=iG=h{\c4g@G/҂sGAGz6s@Ӈh'sp"JS*^qV\cVF3ڮ@hBLVPsVOZt5eEXNztaY^}xչJp:h#'G03L)"銯*=*Z* */Z"U""ΨDBgUA 'j 09W=PHO'sM=qIɤ 4◌JL֚zR9$ h2h&)ZCP8֌ғ(LsG4IRsڗ(GZAށGz:Gh4sJi3փ3I4LU!KqIFqIڗE.pM R;fGOƃH:# gGjJCG4vR 8c)sڏҗJ={u3FhJZ1A4c }hh '{J8iAZ_ƒ0is8' ӽz1ʔr)1p1ӱR*@x ZQҗuJ1M$*:F8h uxJMS:Ԫ( ՈjCjcUք1V?Z`zU\VNz~n$JS H:8c#q&8rA'p)95y@_'$?UUY[$U i21P?CT'^qYYoj*TUW\r:TsңD㿽FqLڙOjNzRt494I;R`֔yPO4w Ӏ9$ϵ9i9J:i1Jp qғ` _z:ir))@s9=qKr')s)ϠMފ^F2?8p)8(q_s䌏JL:Ԫ6J8ҷdV'֯ b2>r3VNV=f;^N*T.휎VSUٹYsUۧ NqSzbn3Mxǽ qK}EI4});u)A.:fF?Z:Q tw9)c Rc; Pz)3֔(i 9qHG4czQGzqERQE)I=h ROK);tK`w})Fsғw9hJ2O4dhԾؤK(A4 1KG8GP;Py1AP1ⓨ◎)GAKvt2izj\p3K11@$у{ҚQҁ/a@~ԹA֓"”8t4Ґ&1Fr8ir)pqԼ⏠sACG~:R=~qF3i;ӱIփqKۭ((fVLL 5f>qV@Ӏ V#ӯZPOQSZAVf XAȩGL:ɞ*\bҔN}i p:6I:sU@y<75RSjU%U߁T%j2= QqҪL橺c5VU5 blx?j3%4I?ƌa 9ϵv;Gс8JN)sM J:QⓟLRQn2sޗߊN)=;h=(=LR`&)2sK Z;RMg#8 .3ޓ4gKvz :h qKs4ZwlqH 80I41M'=;Qiqq1A8:R/Jzu&(ixNirq@h攌P)r1ғޝ҃i@)OƦNTOQȪjEBqPL'Q`yM}i֐vzi9=i{u4~i('g}(&NiOךOqFriqA8?.H [Px@9.M&{QJGZZCE:QGgzǥ8ZNKڃ(=9 LMP2zuRM{Phޔ=hZ:s@ B9֗$ Nӳ&FqNb,ǭ/N\~PR(vF)H<84uR;(Z1/j\qP9>iRN^8WJy RaOU´`kNZ1UUXN?§C*t$V9*TzwCqS,{QzZR^3g&fTRK\V|UlUXUi9jfʹSY/=*Z"Lb&OzUw$a'=j=ؤIyi0!<F )Ih4Ӏ)Z1R='Ni:^}(<g79N)&sJRw4s;ьG @<KӚCB{ߎgjN &p@@4MJzRv@9F9g֎i3K)1K@Z>xIKZ\g#ҁ֎(&8A8Iߦ(ZPsFhKؚ(/ϽuP(1Jh⎹9{_JF4Qtҏj_z:tZ0=hIցcNbqHrIzc4?Z^A)yb{t)xގzSZC֗)zZ)~{SU9@S+st>,kFqVDҬ*ʜ f!aH52r8~u*8략 H=99Jc2)#ޣ2QF8)~}M9@JL~4g(@Jtߥ"`guKږ>Ը$)@jP4Qs֗Qxiأ/'9h3J:{Qߏ֗)4$R:cu/zSR@ɠuv=#3=H"SަRzRf398&fG'jJ1VNEYI{vVAT/&GUqԠ?{4SA0q֠'~U*`Uw']ץB ֣fQ[ k`L L84y>~I|Rd'4ƗtJ3h>wzHR}8 !ԘӺzc ~tQRG'2JP=.y)4w惚:@>إh=GҏΝ?ZP94t8GNݽ*;”~)NST50S/AMF3ޮEsZ+F"HVTF" TJ%sOLIb *A08R48iP jnjsUH7JϘc&HjV@MWVccL-ژ=O5rz7q֌)M'SQ%/֓摈稣?zn)1Jr@IR`Q A@hu{$Q4}h旜QL⒗3ށך):N({tx$6qGh4q{JCǭ*AfQߥRqKFj^hi3׽* Ҍ`is׭!ǽ)u">R($PO44g&GZQ랴q9⎠`csq(h92)G>J9掴("3vQڗ9)2sK('Q4pOh==)AqG(?xP4)1463N-(^8{z⦍:Gjd󊲆FGqҭtqH +J*S`O {wJ:uBqp 7b3Ӽ9G@'s֚f9cMQ?|5c*CUdpETvWҫHFMU\5SOQF?Zn5x~jQg/^:qҏExQ'=ri=`җpO^ړz8ZNIFrɣw84A֐qAFsb?'oz:QHE׵zR R)(֌vF0:GJOz1H3$d =ǥR4tGzc9 @'4dgڔs֏J23FI<ng&iq4QKf(IFiIj;KRtzf/&p܊\duE/wF(usK@h9'KR ўzQN>ggY-7=)$UN9֫gMMlQ#)8q7IҚF 'j(B9M!go&F1FOQJ3i98RQדQE'Nht)3cAdҜsKzLqFsGj:zfŒvI<{vޏ—SO3A'j){qQHsGnRtP9' .sMME():&zhJP?ɠ(sHN /_j9ɠJ):(}h8KߊCӚw&994usEގ`֓R((J1AQ":wzwrh&>:Қ4`ԜcUPiy)@w3KbhGJQz_zO>;ӆKqH2֧CxҧG= ZSZNGV|G'5*R zԉ/5 J$=iLԂAkH3֙"i;TdycFNI*ǃTd=:)U5?7Sc2*n:T 3)Ia88O~GRh'RwjF4Γ&1Hޙ ~4@df& @M4=i1^84c4Mq\(!ړh.:Ԟ٣'~)HqI"s֐4RtGSIԽG!Gj"ёbs֌_ƚ8^cڔ2 /JoG/zN3GJjSFsMFsJ984t>#?FqG^EQIԚj\ JF(8^i dAPOs\Qqj\҃ތ~t(v/_3ڀ}JZ;QqAp)G<'A.r:R98(GZQj -)qN"PiGގiz`短;!u/7M9})3P9>ԣړ(IiҎ3GSI(Gގ):{2NH⍸4{тGҏzCӯ"NhsIRc-Kޓ'q?:^xK"RQGzSZRFhj9Z^3.9>!8斂hizs@zF9)GHN)ʓRsbQE9Gz\M)^qQ4`hڗ8J33ހO8iiqI/;уKϯJ@9֎;R߭җ~2:fB:iNNj/04qQ<qNA@UW9=j9MsDdA5 ITL49)MunrrzSM ⓏƓy=qFO' ϥⓏjC҃hRZOҊ)KҐTy?S{88)9iE!49Ic:Q֌GCA RbCAؠ1Gnhhh>)3(HzqEp(AC-џlqIh#ӭ'?{f;J:S9)Z\Rwv>4w1ڀ9AރsIiF(48 _G$ ޗzҎh^8 旱R);zPs֊SQG^HqސuN);~4zuuR$4uOz>8=isyB8㨥)h{Sɢ=)FsK(4^*Dnq¤FR+=_9r*tS$ڧ_~j)V0 8'952 }]`[H.}#L:fNqk0zdzK1Q3`5 GNZF䊬W}$;TdȨXܑ֣,j2<qzSs&ƍp=i9i>4Üy4:Q9i1FE7PRw(R.xzNp0h>> J^G"z3MiFqIZ9:zw)>Ȥ4wI^Ԕq2 Q@9擎ԼGzN4G掽zsғsIwNFi:(=sG8@=zP:tIޔQj:1K߽Rǿ.xZN1 `:(99=(ڗP Q9&xE r 8֗z0h(Jj^)dd 1Z(p<{R)ONҗ@Gz9z3Kh8E(jNs'8tӉ'"Hr:Sng4ԁOV5269"+zf[2ǽJ#7bjxJ_J_0Mg 3'zS~юǜkMSL `̘${T.ڠ/)3@cHHS45qƌO= Z3j^HN֐9 qGqAuhy(X׭0i(4G8})? SI98/=qMniH >qAG^htܚ:{Ґx>c4) }Il:): ?AbQ'(8RdQA2h<0zugփ@#'4N(":^}i ((8s@M;Q3Gz)8R4ΏZJAqԠzq:ўqғŒJPi:fpސ`sKߵ'-4٧u/S֌zQ/AIך;Z_Ž8Z;^{sGozAjpzNPM-1Nz3K;9~4cw=( ;ގ)GNO4u#4g)91I_JRr:8JN=8֜ #i.iNR+sj?OZp8<1QHZd'R8 & x=h I֢fM.3dRgJSL'#34ȡ)M74RzzMsHx)1G&svR8H\RgNAh֓(>1H:sHzR t8'ZCQAր{RcF:s)91G3Iڎ)M瞞d9Iۚ:u4q){4uKRj3&Nh'J\ڐҏ֓>(Q)@)FM(SqJFGf΁#QҎ1I(=(#?JQHzRjNҚQך^i: LR sҎ@KAKRp4J1 (>dfzL稧uFE <⒌KsGyiFrҔNKҍK)3E.Nq@=EFy<яZSR1z :tqNȥ &F(=Jx8^*c40M/nx/LԁlԊpy(,qHXgޓZ<ÎsQrM1ѻ h<n~4O) ui==s!pHcޛx9=hv'8ݚ3'j)р掃IOJ;Ҏ1GQMMFyHii▓8h4ڐUQ3L8IJzq;R "\zR:;IRzsA֓—G8&;b4Rt= 9iå9nSCN'N8=Awsx杻A4C.٤q#du&Qn)Fy掣'4ӜI{FM`sL(9Hz4d!<@i1j4Z=hϽ7ғ"!(=)(jNu9)OK 3GNqAIҎ=h=3Fxړj^ JzR:Q8}iOZ٣( 8'MA<]hⓜf)9=iz A()h4dG(=)zLޔ ^)Nq&y)L Qj?J=Z_ŒP{R0~{8h\ciGe(7sKiFG):{փҔH=}i\֎hK'9jP8Iڗ4G@=1RcG;83G_JN3֔pd@=sN(nhqJ2Opx@?ӹ&'ڌJxO4) &pO4ԽJs``O>ޔ~$ڀqڂpx41n9@1 =8!iJQڃM'c= ?'~ޗ?&ON01M99=)?u!=Tx'4RguK)3xIsJs7t3G&7jL01$ iCƓqGnQQ(A3KSsGQʂ}A4J@xiӲ<RtQ.F~lQIQF()ڎNx9pOz=(4{hj F{Psڔuۚ\b/qH٣ }=(4◚Cڐڎކ)sIPF'?:^qȦKמQGlRc^Q@xFqF2t/)O&0>QiZR)zL;ϭ!K((@{9I#g)g:Rv:sI/hڎhjQA9{twJ:s֐qڗN(>Q֗Z;qI|P)NvsGNwJ\G|1F21ڗ B}4zށ֌=Lfʗ=4wt4Z Fh(9g"4i'A8q/Ku݌ \ⓡy ^4gRcdԧ4POLzr}E/& y)`('b:q zB= 'c9p()'3֗<J:AփZ3Frix9)s@AьRt9*LRL|)zqIs\QA()?RcҎNxQޗLizZ=zP9斐ޔ99i=F)q 9Iޗ/JBxKߚAK֗i:^=)Glt#cڌQc4=)Gԇ'^Q&}(>nsIۊ^(9Mz1G8sP:掾wg9)K'1G7Q>ԧH?Z;0Gr)1ߊ@(hg#ގG=zsڀ}ixqIӨwȤ'2):IzSHyizRwtsB:SȤ1R})uwhI:4vt8F}u=i g93J8=iZ:R/jJ\i1ѓߥ%SO=ǚ9E8=i1S;q֔QߓFZ:^{zP94{1hu"qH~zBqڝ֌Q3K9ҎG~(cOj2hn):zҎGj1zw)xhȥю=iqҐizu/QN(q֌ ҎҗG\qAG  4 ├(K֓<}hN@' юqH=.0sI'җ?-'Q@@OzL/GIJ !/|P::HO?J:)'{icIG9n)(#ҌsE)0}y֎Rvth484J11ǵ/~oCKFE'zB(QIQҔQǭ.}i;POJ3J^ý~pH}4qZJM"}F)2?]٥wG$dg=)@="` 14(t=(8$~4{ Lu#&Hxh G4$ޛ-% 4t4c"/4ސ 1A=xIZ^QPqMSrF)z}M!vF=i@)yfrI(8iLP&9i:  у)H4G=)(>gR֔Iiz #4w^):RQ((#җ}Z ⌃G@(ьi~c:~4zQڂ;揨i -;d iZwg)Fqף“>w.}q@hN1@.Oz^ gȥ4uHj^1H:&dwJGR8hǠ !J# >tsFz`u9'ȥF@g4sJ8 J"g\s֌:Rqך2GJNph#PHϭ)OoJ^wtKh={QL( Ay旷#I~(83F7ۜRG )&q)ސRcGzQRt4c)8Z3GQG#N94=@:ъ9ґIڂ(`b:(uڊ02x┎)8 Ehh=1搀i旽dP:OŽuJB1ӭ8@xRu8/j98&O#(4j\t日h:(F)h( > /QH8◓A<P:J0xwⓦi@)xǥHϵKFyi2AM/A'ҌgF;u^Q;=h89:y8sAi8J &xIINh((ڎMڐJ;tN}h=8vh4`j旽'b9s@ 3Fi8g){ s4GZ y׽/=/Iޔ}hG^ɣ9FqG/)1G (4.~nQ4(9JzrhG zќ1F}(g^sFsFx=Q((Ͼ)sր{1xހ8#j9f'4&@ɥќ'sJ=(~tI E'~;SIӚ\sփJ rhOh=8v}xZ:(J(34wcIRhK҃GZ3N=)=K!Oz8z3@$s@>ԹsJ(h'Rx(ڃ ҃i{ьF1@qKL4x.xQA8'(h֌qGt^3Kbh#3GQG֌Ɨ4OLp)2=xRKԜ C\IʏlP@t@sސKҐ =JOA@NxJ4:擯ZQ(Z) .p=:QFi@<ю;f"PO?ҐE֎R;}iO&}(&2h8ȤϧJQNNԆw@}iF=)()ԟÊ3(J8=(i3AAzRJ_qE'Kڐ(TJ1A:vz0:sG(J:)Kh^ӜzѓG֔GzA)zu#ir(3Fy3P9ҎsG=<\qIz◧pyhxQ}(h( '9N"q; JzgM;tKIМi)>g(ߥ!K@4{Q!㷽/=Gz9Ҍ(I){Q(8h934R"}ǽ/{юzړx)4GvP:t$uKZ^qGnh <(A(Ҍj(8)4uhǽ J8iZC?w9'P8 C3Fp(#"wphgcA/h"iy4g4ёEQ:JAZ(4ڌьf/LQhG~(i1Iy)H2it=h<RJR9NK'QJ:ў1@G94g4?ZCqKj^ E'OK.g){QzL GQF@gۭR;.2)1J:HN:ҞV*#(8 giqr8.}3:QzySϰ1Gx8@(/b8AZLRAG#OZ$g4t/^MP=OJO—HzP3փ9>ԝNi~9ɥ)qގ٤'CG֗'^?⌁F{Ii~)KާIqIJ(hɣ4dg9JLG&4wc֓n){QyhGSH9gZ^9p~ ԀRu=xT ȥA#8'.p(@`ޔIގ/j:8##IQ߮}sHN4hM⁜uOjL/:{9uh4`u@`㞴c%)bקf=(֎:fizsMh8cRu:{g#ҏJh҃&rzx=#=:GA֐u/j;%^(֏ƏZ;z@G`x984fԜH}^F8g!=9Ԝ=ZN)x֌)MR֗4Gҝ%u3JywQRg'ޗN)x=hqGN (G fǚ3E.:0z1ZN;`֎Ҟ`Qi9P{QZ=/j={PhRǵgbAcj()?(/zRdw gh9/')z1h$vzPG^wI4B2)y)u=h!h{QIq@ziF?L{юJ:QtҔt8RGzZ1iqސbLQ:{P#)!9)'lFqAI>P=h 1GJ?Gj)yҞM=i{` pi;R> bҎwE=2hQy4&'N J8^'J1:g )9K^qҌ|`zsG }Gh:R:(s;>'(dph# >4AsH@3jwn*Iq;qHxuhȣu~(tIK9sJ~gcь1GlQz8i;tҞ)= qJGR\ќM'^iN 'AF9)9gӵ(>f>=))qJ>p1Fy⎜Oz(4c΃Ҏ4ސ=)4 Q!dct=yQF84vғҗIߚ3SH)}3A^hIh\P=i1GOj\R`G(Z9qF1F;撀=i1.@84uf1FZ'@i_F4ьy<@>Η&'j(=;99 Jv=? 1I)i:whzg)QhqFyS(iMf(=~G׭(c/j=q@c9M.z:)=KҏzPi{Q߿4^x#4=(4N(ꦗ1֗8рhF)^iGN('QM4 9?K\zRsR@PEbƓJ@ht) N A8s4FqIӨ=E;ƖdQf /NQ/jB0(R{PON()JQ@!4s9@ނ{RgEph9zp(1ڎJNԘ)q֌?Z:tFx:@揭/Ny=zQ84zLs֔i- h4EM Goz ^c&0Iޓ├)=◌(;?&33KތAp0)E&phMzsE/9{J(ސ\xȤ:qޔԄ~tv(8ցƗރHO4E'CN:Rv():掼fRpz֓<юh&zQw'zRh) ;(@BMhI4ރ֊? ⓓii1(u(N1H:R{Q (Kך?*8J0{=1F{f ȣ ;qK֌Ez@KZN)r1@=sH;zN3Q8&wJN(iq֓8|ۏց9Ί)(hϷ4sHq^&&FqG94g"Rށ4vQpҌJ"tKRt4g98yKڐ9=i6G4w4tFE ֗Qښd>ԙ8} 8EwQAAIҏOցqGR):Rnjw g4g" gRtBrh8G֔ʌsc֖#\iGۚ&x4w4RwGE4^uQIAךhZ\gGcҐ014ǥi0)GsEJ;ތs!u:Rf4Gў(ߚ?` N ^٤/sGz3GzJ:яr)ifA8_9qG֏aF(@=^RѓG٤G3P}HzR@4JNp)zh{ dQtK{֗ўsAIp)@c({'w^R#4 RH9F1PG3^=h͊1G^);)IRƎ(GqAZ:(3Ji

ڂ9GzNuRGRv.{cL|Ԃ1G){sM#:s'ҔtؤA#(dwI@֌}=)OOjNhnhG|gh4 3&NyA)^(.8IQ߭ԙ}hIjNqI3@#1@@R3I4Rdf{gH884)i{fP={RzRtFGz(>ԝO4x@i1J{Q 9gzZ:?Z^AA"٧Rs@F4yiIx'G8ZJ攎:R`)h?(G1@u}(~i}:qA4uZ^ԝAINJSGZu/=hIzcr)A)ɥ~4gRtiO&Px>ݨ#ތ4*JSG9=h҂(җh);AJA=h֌c/;;N8 RuR3IyG^ qF(9p1A'(  (<ъ9qF3ښ1ޗ}i$9G9xz{O"znhi{g1E H:RNgQсړ4IbiA)3NQt^Rc# ;QԘ"LR@(@4ӥ=9Ӛ3&?:Z:):R)H"/AH94&OJ?ZQ֎p) ;(җNi4M.9sGGisP1hR4޴#P:}(ڝFGHqRKGҏN8Rvt#R94OcFx4qI^4R}z҃.yɠuh2hK@@\n㎔GZ3')JHZN\A8i9yN)O^qI#o9/^?ZQAFx{){{Rdth =iGLw<1GQG@ԃ:@:u4.0i\zhRcOj1IԽ3Kڀ;9KR;}J3Iގ)^4v%g#:NFzRڒ٤Gj\RH:GҀi;㜚Ⓦ=x(⓽Ҍ/|{4E'Ҏ@y9E)=($g(ފZRh=ڗ#J09J:bcNAZ\ <@ ◌sH}4:c֎җhG44p(qH~t=8) KzRJwGR@ sӚ(:RMAJ;PGcץҌK:3&yҗ yJ{()Z3JqIIÊRx恌fS"R:N1Kڏ:QփN3'%)s1ғך88'>qJL/&٤4QR/Fhz@?:SHE)ڗFh#"Ȥ=8" NhyP:P}GRJ0;s@)G4fR}i1)=py<ўiGJ3Ic&ȤfK^1ޓ#8bfJ:Qڎ٥iFHs4@4ddRsJNp)1Q֎G)z)0wv}J8IdgK9nO\RǡQ3K}=33Gh(JZ;O Q)(03KJNiq&ҌPp3(4Rq@4f=)8ɣFxs@=is߽4sQ&)Hr3֐xGP)xIڎ3Ҏ(&FF:SZLQfGZ$R{^3G'G'b3Ҕ@sEΌOj;PO旚Cȣz8"qGl:Q!>Gj:P1hi=#8x)?Nt^ڃҎhɣރ֎1:h`/o 9▀9Gz9c֐S;Ҋ^qIGw◜rGG89旷jNP=֗jsA8H=)OpMRh"׊ZAJN)4~4v(1A($g^OZ:ǥ ?J^3i3&㎴tȣ(Rg8Ͻ/jC֎s۵ ;^)JhGZj3 j3&.G֓縥ڌ= &J4/RKK):ҏJo4z@Z: GAHx}(s(h'(#SG;@'4w8<ўԀF)9IޖFrh&㷭/NG&AaNsG~uA?J9QJN޴ggQz(qIK@Rh=sJ}1J=sKړgԽ3ǥ}{R4KG44FyJhIQ&}F3Aފ:}Mi:izv;RA&):cҗKL ӏ^M/|f@8Z:QތGz9"NZo4P~g(<gڎZOҁ(=}{QLўx'| qG`f ^vz:O9qGH(ѓ3c4v)u9߭z\)OiA((9c=xl94hp;搞إgJ;FiqIҎ3B= F}KڏJ>(h=z4h 14v#KڏzAGV9Fh'G&IA& LQ)3G\PwIIJ})AsIJyCғzRM<6=ipsQJ8 C\t=yE8Gc?JS4AisG4Hpy F(F)1=gt4ZH'Ji:ҁGsIxR*^:GZS'|Qu!(ϧ4}s3@:U4u^9<){u4{ъAҗ GR38Iӡg\R? RiH %(掜vqjZOz\q'j(<;f{u=)}KQ猊?*(-۽)w GAB;ix4qQRRg}hǽ.hR(F擦8I(hj1Nh}h摨Py4dJ?Oj1^'2:IsK:vSI 'N (j@1Kz(JM: (Q⒏Iiz}(#=ZOj1@ ֔thh'z^R{Kހ?9E%/i(q@ҌFxAӭ/_ƌvG9=i{SOJSҒJ;O4EKFp8=/S\uF?*R});QR)ȧtRs@IK=(#41Qގ})Gjqy`m/J:4b;QAZP8i~}LQJ:JSHI)F{QI8s ExPO>JCA)G4֌EP8zRH:ڐ斗4gIޔhtZ?h'֐{ҟjJ?Z3=^(CA-'QIP84ւ3HqҗRfғ֎޴ތs)4h v/~i9RuR9R;4ҏw擿J\֏֐)3^q֔q~vJQ: Lp8sRIPsޖ^(h^w@< QIKIizvQAԣQE&FNhҜ}At.qҗ1IPzuNiGJByg9<p)H1G4NR(׭)׊;r(#4vg&'8G#{z3GjZ(8RgZPsځ 9ZLt(zњ 'A(9׊Oj3J1?AOJZ? L$)8i?9gG4dAu&ȣ?J84:A i/LGGҌIQ8=h@I(sJzQ)Q\ޓF:QRuh=E #RzR4g=('h!<;84G4JLJ_8ɣޖ4g I1)s!Fh"cKޓZLzj(wr9)h{RsK}(tϽ)4g(ҌKڀ}h84Fxڗ֏z\ JJ1@1G/R)JAN(iA}h4u{F8SGCҎM'_—!is_J^RQ)qw4Qь(<0;JN;f9AKJ1Gz(hӥzџNRF((H4ғ4Py⎞yc4A#(/4~4 c4g(<4&bg=;旷JAJ98I@/M&iqB((g8&Fh(ǥsKQz(ZCQ֐I4ҌRQ(أԼt&(i:ۚ1җh48}; 4fdz!(;9 擯J0EҁIJ9==M&8#PM7jPhHzu! &◿JA4)G(\);qEt4uqGNh{sKғsҌKIǽ时hzPGnޓ>ԽR)21Kў ;ށPO4qގtgi3Fy}(i?.0? Ps23IG{=R3Kh4FGJ=i9Q(<@4O=(!: ^qIGAjOAR9(1KڐuQE'4vA?Q((bFy"y擌Gnӵ/ZJҗތ@r(:qMT4L^fA4Nh4S@4w(zAGcFxғ<(riAvL\P:ޔ@4wFq3ihA)8ўi):&(4(Ic4ۊ@)xi3/(OZJ(=yϭ'NiytQ֗\qzьR=揭F 4瞔qAAFx ޗ8h9GlQ)=< NNzCޓ{Si֗Z'Z:ڊ^fQKRJ1h'4ގ4vqځ֌w4v_!yIsKۊO4SHϭ/ӥ'~4J:L{Ғ 'NvZC@48uNZ;攚A@~ 9Px@Ri=94ci }?OGZ\ǽ0i<ސ 'RjA<- Q۵ Q׎}(h)y'S׊^)cKIQ Q߭})OJNأ`P:P}'czL ('Py=)%Iӽ)ϧ⎄uKƐ8'9FN}sNsS@{d99Kq'/A@{ 4TJ1(G;RJ/:x4RgZ9~t4>ߝ.}hg()=H(h)G ?&9ފ hN){rp(ϵwgvԧ 擯CIG80iG4vG$֎Ԁ{iyғ9&qtӀQPFGRҗ Rw& =qKRsKi?\QޓhqLFyMx֗҃4( ܞ€1J84K@9`u)?NҒG\QJ #)z})qQi1G4r RsGnizcsF1IGRBpiGzZoB}ii v=4 ڌA<;F)1ޗ=AA/{b"sJxt&FH<)y&h-'4c=3F9bIsAJ:Rt4N(kDataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_23.jpg000066400000000000000000002345461511411446000235620ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?1 14GqIJNi Ǿh)G=8#QIޗ=8Γh=~O=rc4Ŋ^h('gJ){RJ1ךN^{R~4sր2)GLqG~13Iޝۚ)?REfOƔQۚOz)qHp?\Qޔc4ޗGLf)wJ:RR)g(s/~~tzR iy;ъQFGj8 LzOP{Qގ4nh @#=(jSQI@iAsA?'9Kގi3J9O48ZN)~c)23@9ŒQڌzP884}hM/G4(t ޓc4phAyGj.1HO4:\Q(>ԇh'COZ)ǎE <9R#J@R(=8{RSG4v挂F)ziR(yP=:\P4vz h=zGI܊\h~4g>u9&&/CIJH4c/aF8FG攜ѶFGGJ:g.y<tzSOԝ:8sPO|KZM/P0;\JLQԹiJMGJ:E&sGM.F}(=33AR )8K⃀GA8w9ҔCQ֓h)٣?J4{ۭ(N(R҃ "— AiyR P;9c“4w/LQr{H=(֎ PsȠphM$u94tǚ^&;PzAL-!=ҏjOuҎi1փF9F)(z^IzRc旿4vEZ@8(ZP}i4wG#Rg9ȠdRb4vI(֗'Ҁ fg*HZJ1? NvRxRf:8qAך(ց\яҏƊ^? ɣQ(PN(hh48挏”RsR (OZP)=h⏭!}hҜg (җҀ:c\zю):QyQ (EA(84QzR8G"Q@zP.xc dzь=)IzNx-Ad(>c4t}hJhIZS%.sG't㿵 :GQQHGj0 ? 3Ҏ(POGEj@(8/Ҁ9ⓁGJO^>c⃌H{bG<('{QuJ=ZG^w┐&F3GZ_Ru&zQIJ>P0(zQA=is:RwԚ>IKڌsGJB"duR籣IJ Nyzz:J1ڎIEgRN3N#ޒP}zR@E⁃҃RƔPz; ;)qH N=3H?ɥ&AQӞ4ɥ)8 sIڗ'Nq֊ փGn(}4QEyȥ1ތs.xb =:RIŽϽ/cctӥ'^1J=(&!JhGC;4SփL(K֏zQI=R '|-sG|z'iNp;O1HF9}){vhKA#F{bsKIsK@0:(gޗ9?Η}isKۥ1h4M(G~hg'oJq;RsFqځ\RERҎJGAI@84L}(ъ/9>Rht);ph ɤ R '!ȥtNZLR)i2h u4c&qғ@cAߚQ֐sZSIG4EցhqGSAFE.)>4cӊ\zg=94ry.=g9{NAtP8y9}(/ZJ:R(%ԧi;t84q@h#/AɤJi1F;h)Fiq߸Gl AӚv8iy=(>ԸNQ8֌JFp(jhpM/J;r(#Z1Z=ր1GCKښ4I4`Q_Ɗ)"RQ8)8Q@hFiz{qɠhҌ֎fOAG~{QzbOn~Kh=i94v9 q@/M7!݃"挌h8tt Gj4{P2h}ISrsA/SOKJKQߵҙQKIJ;~^=9GxѓP0)~.H4=ݩ1M*?>()@iNxHl/ҌP=x@4 ԇNi=GҏƔ *(G^gP:R0(&;֓J}4gڐizǥP1x9&rz&ri{Rc=){R:v4R(Z\RQgP:9=iHzQIьJ^q s֌wF=8ɣ==9x=sG4ciEgJ> O=(GP9ϭGl{P .;IF=G4qwjh9'4wItqG;zQޒL<ޗ҃g>c&xZ:P(Br{ҁ:J8#.hZLcx'$P(?B(8K1ړ)})Gփ֒sKڛޗޏJ@sAJZ Jyёj:H:ړ9҃@KzNԹ#)8GcA^(L)wg)9sFG/ȥE42JLQs@Q}(v)4q(QF=0(8RA<>FGAAs3ҔuA)AsGz8` Z\qEg'.(GQH@.1!\ԼI4F=i:u4vG׵'~y/G9h=)==GLQhPGhKp֔)01Gz^G4HRtKv LGQA<J:CdsF9pM/^ 'AKӑ u@փ4gچ9@fGz^)i C4;P4zҁFhH:ғ8xbR:b揭/lsGJ)S斌Q^3/^hx<Ҟ掼GQG~qA랔uQ z}=:sG4J1:QК1?J3Gnh'GIGsKG'CQ֗JCҗ<ޔbޔJ1Z1ךC~u=3H}3GNԣHҐKSRRmǭ&94Eq)\g\Qhw'4sޔ!KZAяj(w3F{0hN)Ht Qڗ׽&xsӚ_cFhzIߊ^)xҊCQAJ;):1z81IAΓR4vIIڌR`ӑQAGZP}'|P})z AzPq֗=Zni^(}(>⁒=)@sQsF)OG^)@iZ9SҐ2)G^(R uJ9GqHx4ǥ& qA&O4F1Fszޜ=)Kۊ8ցҌciqAlRRihցqG҃RGz^{RSҎ"G'hgۊ:9==(Ȥ>wҔqIK$ A{)3M(qIތRQ()rsJCGLߚ2Oj3֔r0)(h(aߊ1-&}h(hNIJ~H=h<uGE .h搎(i/Cg=(=rzQc&0sE/^)9KQIG?'jF)sސRt>ԾԝzQK֓wҎԇs@zҏJS֓=hGg?!&g(){%ъ\qIRqi{OJCAh(;=ќQ:Ҏ3F4t()uKF0(h֎ԧ;cCӥ/jLfbs(ZZ1!h  QӨh#4R8(iAtZ&:bANi}FOONg9QFi:g1J4Qڎ~z:RC~=Fizvx4u4QGNF3:Zh#4`-!ug&Q}'9.)q77:fȠ:qZ:RC){q֓ڀsGix&1Gz("P:Q=h((y`A:zQ:}Q< =>94ɢhbi8'vJhPy<AI旯4=hJG⎔}Ez4zh'@3K94G==hqAQ);Q'J_i14s)17Q(P@Z2:POJ3@.{b㞴ԝiz{яJc^y})HZ;Pz8ғ=x"cJ:JC_Z1@ސ=.p)1ZPF1qQHx@J'4tFxGўcGi1NMOʁQb1Gc:sQǽ4ޖfi{RQڃ@1ސ!7)(9<9L sJhFq֊2dE-/QIF\ftu==(:wg'GZASӞii1_΁|QڏNJ^IgEG~h=x'h(wQRH8(}JGcbv=(`s}F1@{RN))“JryF9xt=8=(E PG#($ߚ;){R RgR'gZ1<==P(PxڐP@G2z 'AJ@)0iON});f):){9Kh<((/^dRcjQM'ҏj EsA:ڗ()441'h44`cތujh#(F84"h֚GqKۭt/NJ:Q(Gҗ8cڏZAzGj\dcZOJAPsցҎ֌\c84'/JCڔ=E'^xJ^E'G$sH4)x/z QH}}iz4(<@sKM8;R`&=hRJj#gQGJ3?&}izw)hϭ }(ҌsKIh4#hZ=ɣ4b z4 /JNc89(4 z擾h/zC;RFzR(F0r(4g'=F(Ҏ=('=1(81׽ގ;R;u@'m4sڌsGҗ{t J\qN◃INQڗzB=np(@AJ\4Q܊1ir=(>>qG8:GҔ҆8Ҟqw҂):旐z8ю94\sKKLsG_4){QGjON999`b;:@ށҎP} =8`RE73P3@' ނqF^NO4z)z NΊ3Fyd3H>Zu% !'Ԡd~4 Ҋ=x KH8&Fq4 NR3^~ҁJ}փߚi;N#ޏK)=w3 ;vAcKс֓ҀyA1@ȠiO~g3hNhgQJCK84_Au=(ytu)s1Ip}hҏp1AhF2~KRz;Hz֎ԝ ==hG84R~0h<׵;掀P9 (KqGZZAAb848Ȥ 5/(ց֊@`NJ^zOn3Nj@y惌֎J^vQG4cP~q\G@3G|S78/ցPiqzQi{Ry84G(>cj3◞R)HGSךEB);㩥ڐ1Q׎iJJP1GQ@׭F(ր9N)sڎZ=i>\P &rI擠т(ɥE FqGriWw?tuҗv֓㹣ތAE玔pr2(/wӽ'sG~EH)@#Kh==ց(&ۊ:u4{sI>`iIlGjNZ\H}Ah QЊ8H4PO|R҂y{R (c);Ct? 1ϵ/JC߭EQQ@<тzR})z}h~)"֛ڔҎԀqGJ\Ύc;ڃ֓4nh'C@QZ;t&8֖}(HN>)84sڎ(@⃚8!ⓑތg^(=iցZ1Np(֗='KIK8sAAIN R>``FZ4Qf}('&1qA4(94lގ(i{c3(8uҗGCӚS҂8);Ru9}}NsKؤӧj;Aj\dbҔ dQZ\Q⓿IKj)s4RҐ9њ^)h9$N) ;9֊3)@ 'NzR/Z8Qǥ!qG>\{Rg)zRf9)=(֓QߑA<sv4{ # b( L.q3GzNqK֏֐ǥ&x4JJ1i>hсh9'4qK h&0(:JA֎M&7ⓜҔ{R);zQhQ9gLw}984֎4|z`RsJN("8斐uE2(ɤdN1h4t4"Rd1KzNJ?Z #gM- hZ_NJCu=)GZqI0c֌qKHE.s~h<ڌc(^яZ;w=iy(&(=hZ8s'Q4ZN4 zPy0/4wIQ'ڌqK84}zu=hZSւ9ށA$vZ;fҎzҊ)ҌsKz;Ru~€)OJ@3ߊ\wt=hҌQj:'Z^i8qG\`uҌs4:P()gۚj0(9>G\qGAH8di'48т(GڎZLc.8HqMI;4qRRF)3AZ1hxҏzLcގ:b`}E&yftQ֏oz:''q1&:ҐN .;h^u#PGH8ҎO&1JQz~4uvqKLd`ёCݨ 1ciOZ=&=/HA=(LPi:{њZZSށ@p()QQϥ'Z^EuN3ri)z:=(ڎ:bgG9”ւsIQRnvH>cJ:is1H@G="}( ASni/9RaJj)M%ib٤riI98'\P{f/AI@$tjL9i}⌜<8h<;ף|QKT@('hE֎JBiGLR8iN19(Gnrh~3J Rg-ҞhCG|:N(z n3N='dgh&}8w馌hsHzii?(pq␞Oz^E7SG=iy'Q(=֐his. F@ړ$J>p'Zg<: )Z;Խ裸GҎ_A4j).=8Tޣ^إ'A֎? FNhH;qJ(Ad' K֊1A)/Nԙ8Z8?QE sR8- =hԹ4Fq7KGP)zQچ֓ғSKG9Q3=;?*QF};S)A@RR(<z :Qi;F:RRRsRbQ"IM&0=944d(?})4M.OzZ1tۃ.}9ќ944sڌQў:K=h4^sIJ:qGQKG9 4@zhF(8KӧjN8}y2:2zӚ;u~JG'GC=1J1ϭQzK3I@JsB0x◧AHFEbgҗhd(hۭ((փE;;R R2hj1ۚ:R4tu.3F8PqF;SysJyuђ)H= ך^h(;bZ3OƌqI^f>1@p.1Q4J}i{qI\񞴇JoSJ2N)zhz'.i8 =q;>tbғʌ zPx G&҃^AH)~):ԧJ?9R^n9iǵ LuP1@w'z?J;GhI`/lRc=FFy(4Q@w@3HO<)0=)G҂pJ @IR .i8ޏSGҀ=)G&1tEp(8&B(@(֗#FiIށIQJ:{Kғ{G/~q  9*3c.xG8&<ю8E=)GzqJ^icPO'84{fqF1I׭(z:Q Q\qgiz=OjAh<.qIF}@>gvޖIE.(ɤh=qIN=h#AIZ^ڎ>ph#gQIFi:{ h<0ɤNZ\ i(cފ)8KLph<OjJP1FyJN=(qG ui:Q@'=)3GzRqM'jSA=g?v⁐i;t(9֐ZLzw!.qH;KQzLbK^j?&0iGh9H;'AGhHq(4.{@f;84giA>&ys@j9h4P8~w!)IF@>`h'4/R3Ҏ(댌RcӚ\R֐RN)A֌}h9c\ѻN;gKڀx Lq8LsJs@G&Fiz{ R)1擯M&sPi^)4ӚC ;QP=㠡G|Rg7u4s(&:QӞ8u`/rOPsFh8< :fԝӁ@9{ьўƐtix/8sKړgҎ#ގZNsKy<׌h4Z=:3ގh'9AqFhE'cKZ01K(RRdqGz.=)=֛Kh據3K))O3';1šzg=)ئ4'=)ǥ'~pqb=(4Rr 4N>: Rw/QΎ2}OҎ{ъC^ԔzZQ֐ztgchqx.;dfZ;9.)1M/Z)qN(1F'J^^4Ԣs@/jNSFcKڎQ擟Z\:K}h{utF=M(='SGSGAE/җyޓowq4R8CGQ@Pzw3M>t%EqCJzQ`5{PzZ\ȤJ((4⏥J)qi/=sNց(=M&>g^!c=wngb”h<JC(ɣz>4sAIp:ր){`ь ۥ{^;Rppi}HvxG&g('hn(#֍ڂ{fbIn(I)t4t/qM)Q@}/lQ8< 8M>4qJBAONi@/z:(w֌ {Rhݞ)F;Fi1ҌsFs;(v(GR}4uv^=#4J3I4)OOj1:t :q@A4E//0(qSr? S1G\wJ@4v P02(84g/h`Qq((QG8FzQSȤ֌tJ1J3uKGӯz\Q)O~Tgh8jy!iz㎴zKԝ3F:;Py:fRv֔R1s(v!ס=i:f49R~4т: o;N8L҆IP1A=i@tbhIЊS{sKGN(y'~j^h(GjCMj;JLiⓜy< R'i}<:QN(JA'J;=zQg;~g< Q<)'J\.yR qIKNP:RsF;yI?q@cK߯G|1}ǽ'j^֓R`r=3R"'=)#Jp4qCޏLҊNs=)^ޝzByG4FI=h9n(/H =zP !?*A1ޔFy␚\1ւ{h84gGҌI@/s=1@=y Iizw43A⌜֓$ ^@zRIΔ98Z G?'^ԼbǥSI#{SIiNJOƐӊ\8Od)9ϭ!<{}iFh=4qQ&imu#)zPzf8tǨ{9Ki9?J^Iޔ`u=\~~ќޕp0iyu9K_sIIޗzJQA RQH:zҎ /~{QEgh8cq bx9i@C@iGQhqFZusJ9(lR1H1ڃJQҀFzsC)rr1AM⁜Oj=(i{я/HO8ހxi8(^J;RwdSGzF֓EgE3 :}(Rzҏz\qHNh8@֜F( &99hJ_֗F9uHr(fj֎RsvGb 0zPz֐zP;fs1GzZ\qhԿJ^(Nh'N`zьQ׵/B(%-: 9t}{ ;=)i03ڌds@u2(4 {j;o4)zF9;qIKڎzPz-A4hGNhz hcGc)#4h0ܚ8=})JWzց\|yqig1ZOz^)G9F)'|uJq#iޓJP2hhϽM4tA4ڎ1Ҁ(#9)qIܚ9j1Jr1Lt4$*M ސzQZZ==(ǽ֏ILRHs94ʐh#/CNh$z3ɣ9JQ֗qIfi3Z\z(ȣhޗ9ъ:-@(<ьh#h^hZ_H> .}=hm@qIy4ؠAds'z:t9(힔Gl4=)G)JLhҎ=(RRR}E < Z1G~FE qьP>Z4qI^Ԁ#4Rhi:H PҔGz19h> RtҗH){Lrhގ?K֛(Rh zۃ&~uɥ&N1қހ0)Iғޏz9>v4%;4 4Gz@<㸣Q A(#s)$C`lP;RF1ڀ;w=qG֎܊\94SP4QQ99#4cGZ:ށ4z?*h)EGS֓攊=揭֕N?Ɠis1 sAE7%qJ14:QG8 Q>֎G')p(tҗIKM'LNHs(<ҏɢFsj:RL^iM%G:ў9֓ 8A8JIE4H3Iȥ'K}3Nǽvipy9F8t~4qތgiRs֜: R? 9Nrsҗ(F3҂xC'S)i2 RgqGR)1Kz}i"@(MoJ\8iGZ3G&=KN(8.pqF 49&1Ki<(Lg4p)u&z挜RLtyMў ? (8ހM8@OqFq($4=~i9M(<(i:iy4G'\KI-hzR`c<JH#i}=h'ztPz'u4 SҐ~A):ҁڊ;bڗ&9K &ywgw۽(j=r(@⎃M.xƎRC0ihRQߚ^P8^i{cpz:'qKZSAFzQGZ\Rw{QR:H}@"'<ҟ\Q)E<(Jh=&rMvOF)@F3֌)/ր1B?*: ='8KNs)9Gj)8#p8#i@:^ؤȠEh4qFxQ#h=8){dO⣹ӻsH=qIzь=LE!#ڎP4N;Qҙg9&1ҔtGz1Q)֔ǽ/h%S}lt3B8Nx={R֗(QNiJSJqHG(:014ގ HϡKiM"ZRfAS<A搃I(I~3i;RqF1@8֐Ɣb x緥\:IⓒiN')O1Rgj^s֓ny44#&9ߍRh3I3F1G'֓QKA4})=JLKF=(t@zn 4ԄzQ֓)@:f~KQIz\qGc9J~fIy%JNR֎ԣsHxZgJ\`f0(rM'w(H$Ku4ih#ގ9E>iG=i}=&OJ^E#t ?(4H@GJ\֌zi@8J91()c'ȥt)G&{旧isӥ`P:udz94g$>vҗ֎٤4vRFsӚ1K֓FNx/^M)K(QʏJ1y8i.3MFўh硣1H9>sIJO?@RuA8@tu ўE!#"r(=9:֏cH-ץP0 qK4џj3&yN1I y&\w8ARwɣ>~~4Rރ֏zQsIۥ/I@f<x=i=hQi8G^t4rhJ@4sAM8I78Qz@rzR/zҔuKv'4 RvZ1)M.=i$g(zQ)@=ZLgޏh@Ϡ!8z~41F1҃K GQAj3;sF;Iߎ㠣޴4ړixph뜊Nvm@zюiGғ4's(`>H>w֗<.9u'`@qA=G4}z 8IJO^)v1{RF=iGHQׯJB0N(M~>.ri{P1A :Q㎴uߞ@i1(G$2;RRQр}h`i1^ܚ;c4cqIޗ9擾rhgЊ&42(q7֗$P}MzPA RC@⎂)i;zґAA>.x4GN(F=8fr9=Kב׽94Qۥ`P:R)RG^)r@((F9OZBxu~RvLҎ{Qށz4tPGQڔ @fך0(h'4^֎c>Ԋ{v)3K:QKG^QLsKѐM.H9FGGJ:# E.)?P;R8◧Rc>)3ZvsI.29u4ќ wG\sKI"6 JQ!9vR'сiF;qG=bF)qHz^PrE)sӯ/jSցK8)d;8S99ڜ)ʸ84lj]=i gL2)HR:&54xJFP'3曷#4(zPG4w搊NH@FIGz8siOJE^8ԴSH9h4J;4(?Jy' g'zQϠg4q:юA$8:84qGQF0(~4gҗrE:;4v@K0Fh)QIJJ\uF88=9;P1R(#ϯJ))p:q0:9=@KMxJzҀ3JA$q8tȧx\Hȩ@OTR1G1=Rdԋ{x➨{PƟS< #1!'IQ/haAL*N(QޘԴw{׭&@uZNLqKKѓGz:3):wM b=iIjBG@N;oCKRsɥJ):K΃GaAEGb#}4ץ&xROa()=ގԸȣ4QA4"{G8 ?*FL8\J97 n yhbqQG G,x9QGCQ:`vqOZv2)r3A晌 (OzP QIqGz0 G~sH1ўNhA4cޓ5'p .zԘiq ׊N):Rt4h1IҜPO/ozNQ1IqF{RB1@qG< c{t@4cIQA8(R4E)# ך;RwQJ;Q)CE֗=:=:ցZC׏֝=i2t;Pz(Fh)ARF:h)}QސRsFzJii0h/&)swqތ4NݩqH;K1C`cҎK0zpG&Si֗'dZ\ΗZCFih+x`Ӈ&0O$S TxJ<cާHENS,\bJ"57>bbg>RR`ғH /I0a@fz# sKcGj#4dsKp)@ޔڀ23N۸SHHr*.x2YHxMYXTp=jGV<:*ASGaҥ:RyJO#8F9iP# [l `9p܎ƃ)ҩ4N5TGcC2z`dbqңJ QQ78'Jg'ƌg>M44rz<4;3(#hqHyR:=)Qvi◌( L@ #4}'sG43GERJ^ :'&RQJ?7Rj:i:qG4r:Q)0ҐfRu:ҁ:RwJhǭ9tz!46Z0CPqz1FzNc494^RNԸ4q@4q3ΌP:џjSցJ1ϵ)}izt4gbK4"'J(@p 'F1qKΎ){␎Q?qK'lb ^ҎJ=?toh3;҂{Qz>.2ix(;Ґҝ{z`u9ڔ.9<=iH#x2/=dSb4I10qS98Q*xY[~sZTV52;gTP?ZR 8ÞjMjXBRu :U_/h TNJjmyS]O΢E٣q@Ah(G/GAHF\sH)z}h=֓J\F{{Qڗގ4ғiI&uҗ({ڎ19A4/jJ:8h8r:bsF2sG_jR:Qϵ((4ޗ{Up n8S$xSTW"P#҃i?:F㞴2S i9LdsU]*ɃTeVJ]u8Ү}TODJ7qQNxq`@?#5Aw@QIϥ.8J()( =M<' c<?Z^h9R=)8)9 1 LdR4c 3F>l#\qҁ֎hGҁ&99 QӚ\K:=F){P0>G~:QbqGnzR:(ڌg9=@=zP1/Kh& t)=8c4ҁNHTʼW*h95iT1lVNjj=h3Wc;USLz5*Lr*@)6`Ӽ).zPS2HM9#Ə#Wj \T $9W1lVu$p*֡`qP3g*69c#4g2Mh4/jAKg <ځFI'$R{O4g<>4QOƗs39;R{Rc֗(4zg9v4:c4񎧚V^t" j0@*i3VLqڮƼr9V#NyZe:=jdSSl*E\qRm㚐 zЫNeԅ2=6ҘxTe2:T T@'NsT>}$wj*ب dn08Py)›֚y9x4֓ސ8֌4GqA?/I9~IރGR"dJHIڐiH4无H8oAPH3K^#p{RHZQPqҐzh=)Aj3ڛ/ҌF{P>Qisx!Rޓ棜փF}i=ўy}ǽ4')4r>gPy_’CKLH~^(sFsҕ SvF\ 11Q0/5Q"0q֣~5Y8^\nEShB֨\>j2sD g^HUFxv"#98=i3EZ=JAhғJAݨ:Ps)⓯QQ߽"C;h !K(>~QI{P}q;QךOj(G(0~`9(>Rs)OFphhǥ!Rph֊:ƓR ^;ޓמ)gA4AJNM/QA9z^i;@J:1G@?J3?uΎzށ;=Q qKjSIޗ%((H-4Cɣsiq= <P9=@gږ()ON qNAd)9fڌ{RRu4zӇJxTT`tAV#Z-ȫh#ք+*I8&0qW"P1VQxVQsVQF1V2*qS\`҈jCI|4`qL6H88B2BE7;j&2@{Ub>nj98V Zb\:f'ϥScSp fqJNUV4QGzN恜ҞiN "3@9&\ nr3Gj\/L ;(tz<=xJj8֎ޗ)A3( "{: N3ޗڗ>ԃ.(>Q֔t:мtjNsǹKߟҌޔ`F2hhF}~qZ:bq'^)GG~g=h.AǿJNG9(JSҎøi0G8W5"cF;ULjaH=x'5~zЊ1/JUstG'͌TCT8v҅C})N)t4N{fqP A\g\S 7z˖P*. WJ1RqӚcUnA2|LA 8zt#< IG4*a0df4j1VV#T{TU>nN9"!U䋞TMT/HMiUYIZ*&0?P$1r:U''5^F;zsUUUbI50Lbzf>M4Q&ގ)i4t4`h#);攷&4t=hH:qGJ:)"Qtޗ'M<8@'|ҁAFO~gҎi4ڌN)qғj^3&NizQJ(΀yR'8GQ@4c1!H:G988ϥb:zPzKI{'ڌf`P=)&)z3 RI8ڌfRF(^)0 >iGZqM94ӭ&?C(#HZ>qNZu~u*RZr-ޔzќ\JV0yd*3U@sU8(U>9Sœ*a2sUOGj0>Y '\cTDq֢n 4 {SZB:cIdv޼Z^'($v#)ɤ4g֎G#?&xF}i;QG֎qA`3(Rp)1ќs^4Ҁzя6#==(4c40E4Ǧ(#/CRbTzҎG8 SL{(=);zR@F3GŃрp9Ҵ"&1VҮDUӵ]j/~j(Vy*TjE1*jsC) ֘ d`qP9j2h=껾Idaګ3dUy5Q9Uxwi52*ZAsUMC"{tB{TN͵aL )cAh )1oz:Q`cZ1Iߚ_oLfg=ԝh)9vj8P )Mюh N:I>P2Gi@sIt4z=ޘIRFONn;JO4GzQudҜR31Fzf:QHOt8/JZ9u_'/z:u4t8.0 !_Ɠ<8ȠdԽ /&;r=&=)3FpisU;N(Z\Rqۭ/oZ==F:P9QJ8"^h8=)@\zS05"AzgN8Q_p*8hB+B%YEڭ9q *]Gq: bF+qR)J fwqPIڡpzUW\0sT2jTuNTe̤*Z̑rڪM⨓y[v8jl~̌䚍jaTD隌|SқރM'ҁׂ8f3ii}3I{qAF㞴!Ҍ{փ@8j@uGniqPE;QjKG Q!\qF=K p_K8hN(NR3Fy◽/^t4֗sW#nv2\[fG1ڦB: N2)ؤ=**=zTREPqU O V~*  Uw=괏5Yf$J$)˓Ueps㏭VzF׵C2j6Fqc"<iRg8'7ΝFhϵ'Z(Q9Oޤ)C(j_oIu֗FFqGSҐRQ4f cހ=vGy4 ^sP:sFK\>v֌ 1Kьu83@ҁ(1/n;Rcn3WkBFcьVv9[cZ[H: Ք=Մ9 rN^jA!)|HqJyޝM5eiCi8$t8Q5]֫ +UȪҜIU&#QJaLW*ZOT0}*g㊯('QsQ7fS vh78=i~c!ɣ gތ(4҃@}(?'\=)s)9QL)IH}((AG~)}){QߑқF)GNzfcKɤ8t;gҐ3ޗ#3RbI)sFxⓎ3ڗhP:sIKy>LsMsFxhO@`bN2)#^v&qǽ{`sn(RK҂}M{RBiiG4zҚ14` S@zRgM(_zLqJ1֗ tGQ֌z{RyϥAԞ٣J3Ssڒ/ dG/$bҌRw/JiRzt.3INhޔuIߵ/:c4cޏlQڔFM9(4c4▀89)GG4t&H9Kj:t'=8h’R’旽'z0:⌐(J(ϥ&ryHIKupqKJ?JC_sA: 1I߽w& /qA#>=h:fdP9N(=)GQҤtW#2TIոfDzc&B@jOZojb92jr皷VcjK5:=*e=dԂE8w$ct0~j3: ZFsU\c=* jq/CUUyXjpy#"I/~UWB 5 QHP@J*7<9OJq4sPi#=1H:sփ&(T4J:hғhRڀ=(=JL`Qړ&8M=M 944t4gqIʎw/CHi31F{p1M#?J\Pg O~G4:p3֗9z4Kޓ>{Rv4҂})1G{Q~Q:RIޏZhђ{RҎwQIN" R4Խ`G05Y*9UFe}+2pw`9WRz;櫶GP1䊉M0)|l*BGxP:S{餎I=i?qF(&yl2( z~4ќR8RsڌyQ~:LPsP{ў(4CSGq ֌JN9=(GI99]QJ1J瞔FJ{PxP)9J"#1t(<!ZTwȥM# Rtt=NڛȥF0hȥ'4;G{ўiFs׊)i6\ufui1iRQ/v.):4hudA'RzRqtuiyᏠ"x!){Rrx#֏sڌc)^hO<):sg9iG4uR1r ryN=*t>eoU8Sq6O5z7Wbn^_*tl(ݱXG8Fy*eSϵHԃ)Aki09=/)a!C1皌4Ƹ8ZO?y(栒^=ɑUe`IeHT`GҪϵWjcҠ~3@F3qL 54izIiF?Tuր01HqK ?C'jQ)׊9/4ؤg&F#dt擧j=E8搌QQyQm/J:( }9;/qAI׷4dԠIGCzPqLQȣ=8Cq`4Ro΁4 #iܚ2A⎦:tR 1ji!(8@ӎph>p2hiL@8 :wN 4x^wi{ǭ4vozL$P=@(ҁMM.4r1F2(hubhry84h(=i1֎wAwN=içv~ lqR TzՄ|犰jrjr!L15n9{f+*852R'J Ȥ)Jfj"yjc?C$GWs $9_ƪwT>G_Ƣ3~LIl:v~jnj2Fqa?&3ڏ^h9Qy<斀!JLN'AԤ*B2 b)G8H8gh(Fp>zv/jOʎvAGjɣjRg(cGt(ҎJN) =1A@sFi;RCC78~L.s qKA֗P:F}(;Қ@s@>NR֗ԔS@& Zz\RizQ3I/lRPM⎠@Ҍr()zj3<{fiݳIN)OQ:Lg^֐qsQG#F2NhR@hϥ.3@b(KNN}sN3R!T4oǯ5:9<՘V㓧?Yc5j9Z~=jW{U>X`0nAV@{Ԣ\tx@)7OҚ_?Ja|S5ZVVGQϿ5^F9{PǦF*'ץ@IYG44ܒ1H=M-4 R=i^ !HxъLZ;~8#qb9Fz})KO\PMt}M I;M4Q֗8$Q}4sA(4:LuqG :sGl'GR&h=hu(?ʎH)yhցsץ'Q;FZN);sK֌wQ׽7 =:R`sJ=h4s/Z)8Z9K^#Kރ Gz\9N-}G=H}Jȥ-'?J#4;JN{{(){p);iNsiGH:/_ŒF8 _K)ހxM 4 qddPiѐF})Ҕz xZvh1A=iSIhR{L͚9&3y{~*\ ?JQ<\M>{FQpz,56I$AQJi<֚y4ƚ@) &Fi9&硦h zc98<)AJ:wN֜=T H[<Ԫ⧍񞂦ZS=jefR yR"͓Ks_4R8n9Yn:DXϵBXQ*=sL.NOL.}j'0@4;OJhoQ֐M&#!<)9)t旨4z@=O4g&Ҟ׊)qi})6Rc{RޏcҌ|—׎ԃgiqN8r{QIӭ)GIG#ўM֔ҎԼpiҟx<>qzO|Ru4dPzudc"zQvځ(@=43Iz2z(#p1ڗ oj\L`Q^;Р o<u7"JsR cR,S~G".zӅ=h@4}*6gFuAzEzlFBXL$j,j6nxlz{ 'IiJNqM' ~TڔM479=KRg E)ZL8; 2zюi8GQIӞip(M NhRQJS{vzOaҗRQM&iHi1Q8 c Rf挊_1)8qKFqךLb=p);J=4b֔Nq8Fpi;E/֌{?ƃ“.xzLȣJIj.xHE)>((gsNE Fy4b)q`>JpHs֗Z\Q(=(Ҕ(ێsN((Nhѓ(JRy4cZ;@ph4Ґq֝:JREȣ'u(>iE~TތG4R;w^iN)j@izbSR+sT7^;T@N<>IyN` ]8qJf!i&eL3dO0N30:epiaqaq#&)HOziy&xF(t4JA \c(#4_z3龀Ӻ*3)?JHAǽ)/lfŽs׊NJj>!Ƞ?@qKMQQƎQ? \x?J8Ru ZNցߚ Fx'oZRhz~9yu#wM$=hRg44})9KP(qI4;4Pގ{яʁӥ.=)(4惚(gJ('ozuHQvfiEZS4'.z: NE'^ .GLdR}FqGN( 7$4 ֓qJZC>GJ=N {RI掽hNN~`ޝA&=IpsޞjE~:1ĀIE8>yڜPFiwךBRno97@RoFi:sZ]SI}iz:RbG\44␒N01Iׯ:t4viǽt4;gF 4{RzрZ>ZQuI>`z{QM(QJ8ǥ$cn3r(iHAIǭ'NE҃IZSӑ ٣(=;1IZ iy#zLE5.2=RNƓJ3@#^УbHN){h'#)=ތr)I*;yQ^Ծ>ÀiG F{P:POE&IޗKPA\PZPxiy ֗9ўqKƐSwSR` q֍yFz SJ:RP)9=(4c';ҊZp8<pF)&i8>$ԛ8Hzd zɁ֜z7ڗi\_3҂p<"q~p(#@!8=iG'z H8#M&3KHI(i{w8!<Ǝ)sMڃARG<= Z)>M';Hi&}$"۞ih)1 N /J3{ў:{sJvp)E'/n):E(擟Ɨ4g1iGJiJ^;:FyA&   }3G|RFi@bғQ/8): vxZLR'^Ɠ(9tz\@E8c4=H&y#ўixbzy9J^qAG.=sъ8)4 )ArOxӃ`Ғ23Pbr)۩})rFy'89(,r};҇Lv@}GƔ>L, Ji39I2AA3S ғ߽@$R44 B*F֐Iӊ2LbM>8w4@)KLʐNԙi~ўqޏI9GrzR=i)֌^c:i FsGZQsIM!j\sҐQLsҎ9>'׭&3K{ь;(OR{R ;xh8'cFI▌R}(ތQRdSri{zRc\3IsKҁ=("ϵ.M sߥc9&F 4c9f`9&ҀqJO\RZQ(掜R֐4friiy"4Jx9>uqC3;RZB>^:үsu9?J1 ց`_QJGhjCJ>f`F 1IRi;;Aץ!:RȤ4@Kzn GҎ{Q9֔zQxE'4Q(z1(p AKGpis=R} `тEzsK;t89iRڎGn(IށR\wF8/JJPhZtiԠ֌ޝ@9$j3(=;=:PpHJBy4Ⓜ0hԙKy(i>Igr(:vw'=3A<A ~TǠl4cۊN٥"H8ւp4isNh'(gJNh:Ry'>wHÎ 4穥_z\py=)F);R4PqA>i? 9):)s(9I4#QEڒZ9Fxv)'4{SJ3IM4?:ZJNi})y=:POJ_ޖ֎E'<֗8H:.8ZҖKH}(=3N;rMS(.}Eh_j:~IKI0sK;QG/4/|Q:dK('sKE})W֐KہIqEhyހr8}zZ\qI1F1Kғ Ž_z9ɥ@#9掝 iAS(ZPOZ^3F P-4_.x4~Rg;Pi1Gj9R❜`qҐ#gbAǿ4IqIzRI=j_^) Cx&3L`M9i@( Q(<)9$Lz;ў'ڐq֎FC(Q4r(s@z1Khɠg׽/pi{Aϭ'BhL \\@$ԠќK2p3JH#Fzs J;qI}hiqG4v>2 zv?F2})O'Sֆi1i)< vGc'R8֒g"`t'U=)3LJ ߭QSOIG_j9;Q擯Ҕh=i9(M(Isސsz#4wRM'=;> zPsFhޏƗ R֐.) p9:@A)=&iGFqG8$v⎢921H:r1KAZN)FqIih:@>QsFiIFyQP((J2NiA{bҗxځ=z4h▀19Gl:P9=fq_|{QҌRR(d 3^iy"/^1@8F:Cҗ^ gqG;irz4g< P{R*NڐzךrO4ϥ#ޗ$~#/QMKӚ3ޓ(NisA'4zP8)'ғ P{=(M'J&yQɠ{'9 ғFxǦi֌稥dwFNM K 39r)2h=RqJ9RtN{ܜq@49'SJ:R:QץH[EG4Rq4 &?\LRf3FqFz挎Ps֐((zPpNqJ4ci 9(HɥfJL)A8JZ '9=1K:zQR"R / QzCQ(J2qKrh#J^v֌siO^hɠǹ<(qPўqA4cZo\RG9SMJOn3s=HA(8LGaGN{PH)01KÊB#8"4#(֐qڏNyIRc4FiON:4R:bhсIQG~hA(ϭ#14)sP@A# LzZhvyAt8 Ndvvh{S֛JFGJ2 ֗;f׽yԠ撎.h=)2zRJ3@'/C)sHy#)sڐ\(qPh=(&æiIH~w4_F;ԓ@=zPOJw~3fԹ&i :E;&Iis23FsCнI9L߽; )sKRdNsҗS{RJz3Iʀyp9*3P(Fs:4~9"L/ Q)=$4'ӟZOƐppix<'4Kސў8@Gt)>Ԁ\ҏz^ ҁA)ZS֎);bAJ94sh҂y#CHE!F:RҀ(ך:(>9i~h.=KPrh<1҃{qGC@z?K4Ž)MKڌ.8 gڎztKzފ~4wJ^~yuJ3OLwQ8g'uGGJJA(iAh8zfڐ*9Z);R)sH}1֗(GoJ1:^d~tv8u9"ixHN{QZ;3פg9x\RgRj;4z^—8H' )Z9"N9PO4cJN֓<)A֎)z3!`q;9:zSsNisFHҗOB)z@qF8(Ͻ;Mޜ0Eh=p:3@94Qڊ2R ;ўhG^ 7sFii14q?;8q@"J):ii=Jwhi1/lS{.;(8&wJE'ZAӊw-&)9ܜKڒKqhR:Pr)r ?Z^zQ稥8⒗Z^'ʔtqKIq֎;ڐd($Ҍ ?{u9>IAڔ NA랾ԝMA(G|bg4@<ށғ !ic)1t#/j^P&y 'z擿֗#4vGSK0(֎{vPy"=h=3;ZO^h<b8Lޔuf䞴tޔiHRc:ځ@R`vF9'4z\h'=iIށ:R=M(J) = rAցҔcgIߩ^hz #I(9$dGwɠs3GI4zPr(# !ғ<)r3I("FE $~d掴P /ϥ 4v<ޓ>g=8>bfF?:CCGC@(G(=1GzNvu^Ɛg4L}hs@=ti{p{4g#/wǵ&Mh&y◿z_qGNi܊CRޛ;*3Q9gR㩣#:Ҟ Qߊ)sM Q)? 9ӳMh;SZ>٤RR3IN z~i:`}(R)3ޔQHFGZLb3Gt<^ Lv`t^izG;xbIKIAg>ғ'<sMd1AIRH9A)i;ѷH4f@{N)zvz?F0y4}iOi1)i:p(ڊF9⏭-sIJRhEIѷ# '2Z3@QJh<\P0~v֌cz=i@4FhiON)($Ӈ'B)r &H=y$A׭/&sA#9֓J\})8 =qKIGSK:4g&(zqGj3Hzc'visڌ֎=):})xv@')3F9KޓFHc4sɤc"H ?&y)q.=&OfsIj^Ԁ1G23H}M.i3xӊ\IGJ94׭zP;uPE`c;^);z`.rx=h=}q ӊ^ \p(ғ8iz_78=)R֐Px>~g9E((GZL? RF:QJxGgڃ@9ёGj\RԹIzZ44ё:4:њJP:^?tt擩(րOJ^( n^3ғJ_LQ{ҒsRwG'4}x5Oz2)I@>s@8(ϥ/C=ў4t>4sҔd :9w掿OjwSҐqJđP .i CRx)z Rg<\qIQhS;I()3GQGnhy ќ)2iz(Z3FsۊB}(zR8"Nr3FHhA?QGZOnhG=M'S)Ԁ擒h4h摏OZSFNE'SGoz?Ij\IqF:VԜfQw{Kt =1JzR SJi1JIإ;:Qў 1'7):J\Ru"ғpisQbu9=-Ҕhҗh3ցӞh/֎(%/uړi:s@;J?(@4ԧIQ8zGڗ 9@ 8zѓG\玴E!j^woJA4;F8i{qJ;HH}(#4u(=84N2hԄ=#"sgL`ҞTRf %M&:3I֗!ёA@CЁޕOoJ&أJJ=1F8<ZL^ԃ?(Qړ<)c4cގ47y pi8=zC֗ ;O.)09Qړ74q1z:vҎ:bp=yQ҃KF3Jc}(9A9fQM.xL(N1)=iN^~qڎ{R( }?h (9dtZNE.h=(4J<ю4i=}Q@U~(#sҗ 'H\P3KӨ}'9R2 @颔qFFi3ڃA8;Qڔ N.p);R$Q8ɣP)z~4q֊;Rv8(׊;iOZ(RQڏÚ3J9ƁќGaJ:sG8<n)q?J;utJ9KB}9)r1A;:Si8$JہIޔqւ:Jh? K.F)4NzR9GOZicӁHHNԽ~Ҕ{bj3(P1qJqH)y'Q{ђq֐})Iȣ9p1֗8C KR(8#>z=< =4'zJL`⁂8/NE=?n/Izu@)FxKR)~C<\~tP?KۊC◰$斎 x{j:P ?AGJ:Rs@gڏLьwcgG qq֗sցFF8z\cw4b~}ii=){u<(ǿ7J{& `KӮ)N(J;(.rؤ8)GlCz*N3I4}3†#sCs4ɤ# (9h<;uQisIiE!=)rzbc;PG9z^{@KA(POzQނyɣ>ҌF8hڂ>bhC@}8IixϽOZC@#49&Ґ)3>pí֓ qGI9=Kސ(ҁhh8(9GnhƓ-&4Rg"Όr=)Or(qGS3G=iZN~JH3@s^h~pzRg\gfP}h> 1s@9`QzR##K;RwAAh#9 <}O֎ ( S֓Qߊ\ޗJOsNސ◜GZ\QQ{sKCJzqK!gRfR׊{OZ9<Ҏ) \wrZ6Ͼ)rh~u?җ#()G"ޗ 9/֐PzAjQ(ǿ4ғԔGzR):1bx@dQ'&QB uJ3HI{Qɠ)G#H~h*2?$G/|KM`Gs֔旧Ҏ'C֎q!ޗG&xIޜ!>^(ZL{xG~FNi9'җb=v}(斒3E 8R@}Ҏ84@fҔғ39RiqJ14t(qH94HsKB}?(SQ94A92hq4M'^)Frh<>ԘQ߭'ZLiPG"JOۧ{ޒy=/jBsҁIZ;?'Lځԝ /I<Ҋ9G$u4~Rrx9ڝHh=>)tɧqMzm/~MO4c?“:ҏC@^)3qNsқӥ)} ?)'=EҌFv)OIG4g#(8G)xǭɥ84Ahw(jAɥ>ȣ4KI%;ɤ{t@⎝psHrO^)ߏ4F(tZLRE)'4uJ =G҃Gj0{Lc=qi~'tG4J^֗H84yQӽ5OvZ dzv :v.2}6穠c@h?J3ڎz=Fh=)3E'N;юh NFhҔԝNhI]gڐJ)zS׌RZ\掣GJ1߽#4i?3L ȣ=( Pii-0u>/S҃ڐ(isj^ 8J9RԸ=;8(4d4}h>GZ=!(E.I@ŒN:sNzc3IG(@ҐҟzNQ8۞i@AJx >qNڗ擓c◭%p:)})2)2;PO~QE/(EKhisAn9{KߊLRސ\qI)FhGP}@4Z@yJHhh)֗4(}{ѓP8IӳJ:t▐9{R9Խ:P:QҌ/nQFp;үJB9R8?Z1^(&G&iF)Nh"Qy>PMOJQɤyњ34.zzP@);zRQCZ^:cR֐@I4h ڌGNINiz:1H3zR?* 8t򣜟J\{vIsEc-)3@bۚNw3I8''$Kԝ{v ?j^֚:GN҃E3Qߥ4&j;PO($Q8Qi0R!9֗Ɛ\FqIN!>f҃ɣvt3Z^(3qGSZ;dQ:Rh㞴(i:^(Q:Gz=3)A=Oz;R擽)>4riA3)\B3ҌҞFhIޖdKFphL< A֔J&ƒJ: ׽JO'❏JB81P= v^x4Ͻ I=iG1An'_ϭ-!E׊ZB Q?&pqF:ҒzNHR):qJIg#N=gz{pxqAg(ZC4PF(Hy#z3ۚiO搎iA^ԝѓ(L;rO4w=hG#ҌZLJ;yiyȥI9'4Q3F}旿G$ўqޓ:_ >’`RjNKӓ ڗ"$GQH}GNzўsFy=(hK8@<@Ԅ<Ҏ}iKK:>})?1Җ J=GR Rϭ/jo^RQaFyRZQjC֎挜Qڌ<{ю')41H2(=~'| Px֗ sKwqG=)OhGZBsAGۚ^xI۵.z /)=hPr)OΔdH)94{$9HzZA- F9 ph ;Rc'Gh9r(Ӂ@Cץ.ri$Q׽L`is~\Q\QI$R9(ފ> ӿ4cs:G(`Q .hR@<Դњ_GZ:hяڌh=sZO4b3ӊQh(Z:8zP)i Kך9(h hwR3j@=~c8GLx=GJ?_^s֗(N)Hf@y';#֎)>)p8)ތG&Oz^h"שxg={P1֗h$&yK֔u'~i7QK)} ^( ~]i03J1җ펴K#1'<}iJ^3HNHz zzRb94 fБIԎ((QƓ&th(fiy擐ihRgcLQ@hғ'@0O~(z;i:PNJ^4r~#8=hKސKi3=2{LKl!0(zg*`_SJE'#F:)#4vڏz\{{N9H)sIQ^4Ǝ8J\@#&)yR}){t# qJOZ9@GGIҊ\3sIJ1Z>}hf$)sҐQQZJNqGH8&E'1ړGJ8hi;>4)=QbK׊^sӊ !zJL񎴾g֓)u#)(R P:ڔtރjLv(Bis84n8'n9#(=(94 AsG~sFxwEFiI;RZ3Ҏ}zQޔ{~Q&ry~'4~tGZB:x(yuHO4dRP8GOj4'w={P9(/l9=hFx":: R9=1ҏg99}i =;{Ry;I}h9bsFNOΌPOzL(8I)I'ғf3ގ=8iJ3) cq9h3A֐׌P~iޗ78r39t~4Gђ)H`(h?JbhRQvQd{:bGzzRsj>^)3q@)3G֏H~1ڀAɣ3ށJ^@A:vNR8F{RwKH);c(K֐dG9Q:12=G0HgqFE)8҃J /KF{;vz:!qG89.{bHA<J}%)h"xG'Ҍғ)z'94(&y92{ўh'Jgh(9ґMt/_cF}zRfz=h掼~d^␎(KG4J\t&3R@ 3J=HzQF9cF:@掔gƎ=x>#y>gw*htށփފ: Z0A~~t +(39"=h=h? LQNԹ4d &J uQGCړ4w(ԧ v{R=h9<{PzZJ;ii2OisHhHGϵ'aA撎QJM (s;{ёh4u=iIsK1J0~Qғ93b)1-j\ѻ N8cGb#(/z8/2Twt=9<;*^icJ^i"bqSA3ځGn ◩gQcސR(FN)9sKNEKKG_jO~u){ɣKi)=) R4<ќҏŽ#4uP8g֗9FqG~hhʗ)ьJ\IJ}瞟Z^'Ҕ)1KIhG9tcJ8G^i=y)cg梃oŽhҌ֎qN)Z1Rcڌ`gQh'C@~Q;F;ZL ^M9J?IJNԼ&sKt4)94c4QsF;P8w=iGZH)@<ьPFJ9P:gQRQ9#ޔGH:c2ip1I:9@=37p ZL zLGҊ:'Ҕ)9Fzhhs:нGCF N8iz{;g4LߊSA4 &y &^( =iHcޔҖ<҂(i:{׵ϥf?.GZLQϭ)4 OKxȠwdRN8Fx&FF1G{Pxtzќz(w!>zуi}) iҊ3J?\OPq@;=G|)9Ͻ旎ԜNԼggҎ}(yF4GQ)3sFp)ArhIڔbP0i~TQ@Ԡ/){^ Lcw\QJ:R~tKځ߶ib qF E)A\Q3(#8挑֗(9擿jN)8gwJ(ڎRr:w4P[489t(J:GzC4RRQ@zRt=(()huvz?<O()::ޗJLGasJy>ԝi){N1Jy3&@(9րiNsIEz8hsKۥ/n9Kh4ni{ )(E擊QaIi{Ev~vJ=h#{Qғz:)g8QG!=i9F9{uҗN=ht'Z8b9Lъ(ǽ/=QG^(ϵ'^Ҁ;i(/|Q'^h(K4v G^`1IJzQjNI ~OQL۵1@ۥ۾i}(>j$h')sHGJ(4p RjAu@z E4Sc֌֗z3Ӛ;zsQ91t4IhiOjF8#A4qA;QIJ;LONi3){tގ_(E&p}GL)3ќKցZ\)0qhqG pi1NOZ@8JzSiI8Ը~bؚ>q/AF9qw&ޔf8Iz^&x/C!G˚3֏hHփ"(qF:RMYvG~({ќ`qE@=hdQH;Qߚ(84wt??֗@֗&;GlJ?NԀF8)}I/lq(ڎFyM =(<4F@uGҗ'hLSzgvRKNuiqF1פ9ȥwP:ߥ/!SiyFAҏjRGj14RҎ( ֎(P1gP&sA1Kۭ4HsZ>{p(qAڗP8ɠTSRsM/<юyhj1K~4P(KbP81GlP=((G~rq)IRt3c)qERu<@%.h&~j=H84v8t9;KʂxizwҨ4JQ}(q7Rⓥ=h @Fx94ъ z;g4f=ϵ.)F{\gғQڃsH 3ړўqw⎔1ޏҔqc֊"G1F94H>(FhPG4qAKcZQEZ:P9FMc3{Q{h(@ ɥ$H2:2yK)GN7hg9^=yQIjRz`c׵&:sKHxQ֗4dڐ 9 ^أ%)/nF)4w早掜Q2sGNPF(QG&sK\g'?cC^u>(Z4}i .(4qE{:Ҟ{PI&EރF(G'0('#4tJ1\RZ1֎hJ_'b("JyGc4t .s֐QގMњ4f#$sKJusAIњSҐ*1GlRcޓ'vA$} Ҕt֓:J=(!h<;҃EG4/luJ^z)x8`J^zO(G9?ǮhjҊ:=N('(Iޗ=>v3@"49֛b KN):R}iy4$Ґq.y~ (H~0sF9jP1ҐsI((h`'z>z n8Rv/N)3bu{P)9fJ;ߊ8֊99Fy8#:֎sAh=h'Lg`◵.qRuj9.8ғGj\9J 擥.xxtduu=F)3uihϥ(&RjQI3c8Qғusӥ)A-q'Z?QKr)2:Pg#!JOJ\)1E(F;)sHzRu4wRh#=sj^@{ќ/4 KoJ^4c4cނ09I_ƃHbx49 N( :֓QތcNu@2(('i}9ќ L?J;Hȣ&1sёE#z^;߃F)=@@M4PP(h't3PF(4;RAQ1ȣ&h)1/Ph@iiq4(?&+DataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_30.jpg000066400000000000000000002402451511411446000235510ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?1I(cAiW~M?zKғhbFzRu{RQgj8x%/^3;z=)@⒎3KҏqIh>c.8#";~w4Z9rhzRM'/j8Lu`bz;q@玔8H3J:FG4sC)GJ(ޒԚAA{RjOJP(=Turhs21:0qZ&qGz39Z #4u}sG|"fh#izqIKɤ(){Qɤt(ggz 4zǭ%.84ڃJLJE%3G$c8pEbO^)@)y֐ɣQ;RtJ):QږIIғ4JGsE'CGnqg2O ڌJJ: ьF{u4{ҟHIz㎔sJi9Z9Ȥ#dԸ"LFxԣNތњ?'|ғQKE&iM(4{R; h#4d!(>tMHqҌt.i4 MIKu PH0hj_jF ȣ4 S4dPM 483G|QKj Hi $)9N)sϭqJ:RzbKGjNRZih(=y(z($@/֎J:QE 8/SAT9"˚Rx=/KAGցr(EIE(Q !J;4PA4Oz^chqAE/Ni^hҐ8ڌw bOF=3@ wގޏQ@n:R M⒐9R;RRKڌb2q@yҐhQAGNg=('1:Rp:SIRu'JP1H~<#$Qw{QΐdjNsɥ4 z;ΐ!wQt'&њ:'7K4w.(֎(Qfis`u8_ŽzQҏʌ{ҌڏbiJ3!4IpiOIڃ֗0rh)ތG4t'=)3h=0~4 ڗ8`сҗzP@`cczQG<(u Z^!n”ގR8)⎂֗Jz3i}hZCz\:zBq4A QALуRg\Gl ў1@)Np94HcusG'hݓ^t8<({8u 4Goz^xGn(s3;Py4ޔ(Z01G<)x~ri{t=)h&IQOc/QcGa)r((Mǵ/zB8.@>iG((⎼ny/98uRJNG^MtRR3G'?c ֎4t OZL|?wj:(,ur(׭.8sAȣ@4vcI*_ϵ/AF:sGPGz3qFpy:N ^:Q)8#>c)?^hJ RttI ($P2i@9=(484RQ@ȥF4҅'"9KQh`GQLF9i=)I-'zSIh=xJp} AҔ:җ4ڔrE'9<;ZLc')4Oj_nqȠGnڃׁHqg^"Kǭ/JN(RQi3(P:Rg.qA4 &s֔PEqj)3۽;oJ4ސ\ӷsI(ۥ/'~g.G LQڃ׊Q\)=hJ^zN3@)~փ@~tJzRJ^iz( g4b G|G|sIiE qK(=8JF?LsJ;8ғ.}A}P}c׭Av=(hj=h=x44ғ<:ZN;zNy9H1ڗJ'c4tGjP>J;hT}({u~T@G 8G?1GCڌP?*1sKBqGhq|Rg׽Ҝ֛׊;4x QP I}x⊌c4Z0sGZ3IS4RRGz?S)穥hPy4{(v3Ҕ< IցsKZ^g`J ^34g=)(9:1KP"y?xfhI߽(G~M!M(ړ֗>v<v1ҁHxP1Kϥ|P}M `(ڊ9# c:t? NgizZN .0s֎hbfҔg_zHysJE3G掦81?J=}RcރғCJGI9;ъ(ҞG'oZQF44vFzQ`Rޔu}ړ8dvK␜;ރQ Px=(<җ 4 &=:8@4ripsIAAGl CaK:E'NO/lRdqAJz9L )GwjA/& (J'AgZ%)4 }(ޗB3Җ4ɤCKjBq4#tIE)@9JtKۭ Fh4qAG!#4z?Z@rbґ0isA@(NأrzzQ9J3Hz;ցAIڌJ\qIQɣuQp(\RwERу1JQǽތwi ڏ0s'#?҃q@ɥ$qJ{ctJ?:Qڂ RIڗZ?;qG<Z_Ɛ1J>Rsc9<ґ{ўqI)sF?* ^1Ȥ攓hɥ4t?Z\{@!4Q:;*\zR8'j3I9ތsF /׵q94 ARQ))H"\яj◯p8&8N3Ru4~J;d^94ؤyzҎy=Gz1bQtGz1Ӛ\F(HG("]A4~p:Qʏ⣷4(?1=IySy搎E掽(##ΎNr))::0G4q(GKК)1sNF;Aӥ(F 4`JGG'CyFzzQɤ?49掦sH8JShA8f83H1P}hA!G(:\F9F} )R4)=~42h1=hhҁ/n)3KGAҐ{E-(Ɗ=x  Qۚ1Fh (3KRqGғs)84s=9)MX=xh':}iz ;sKqI惞=)yz(RzQr)p:Lp((I8Q@MON)O@9J9zR})}dQT 1?w JG/!I(>cq40iOQI;QGAҐwKtqFN(9r)qRgziq:J1RR搊RqKHx84w74^z:RR)H=ڌGzQsZ;zҁ4nK9AAqI@ۊOQ֔{RM{Q:Qړ;) QS@8}q@03czxގ@ޓJ?:C c)sI֐tZ\Rj@2= )F3ɤhۊ1F14p} Ґy5^ sF9JQIZQE`HA){恓G(@RRwizsKޓ(GA֊:QہA9Fqiz@۱(Rqހ0sCZ^qւp(SA⓹4(4! A98Rwt9aGZN'9;&qK/^G sG?"qȣ)z{/~ Qx<bt( @ւIf'z^أ=(KH};Gj1A$s=h&9PJ01Kӥ'\Qu((= (b{R㎔s׃KN8c: ?z׊>CIP|qAr \`{gvJ֗jOʗ߱J9F)1^:9I\R4Fp0(G})1qw)qғJ\qo@8)sh=*=>Gz1~4=(4E)Qw#ޅq('4`IR=ih'SJ24t=>u⃜Q1 y搜FiE440NI:R`iOZ3J1B);JwF)s֓qH}zRcZP9Q;ڏj1\ёz01@G^wRҐ.qGA֎ Ґ i:J;Fp)$ޔg1MqKϭc4J^sI8df=h'"HqQю1@1J{Ӯ)9#(iOs(q\y8'H9sRz3(Ͻ(u#4vhϡF9P>dfuytRsJ<ґIޔ=(qIR@>4G(4Γ4IN8)#4ZOcJzRƁ׭<z\ӚsGBi;RO@)AN:RvuJi34qG@@hi9K);:Py>=? Aڔ{hߓF;Rh(=7Qץ/ @ vPG88n8sҎG4'n((iW &Fy8=}x4a(JN>ၜRzy@3ɥ?J3FҐcPE'=iGwQtɥ#R'~uRcۜ88(8h8AZ9zR@'J(zӊ4sJiփ4)(9H?ZN:Py=h'P ֎4Gz;N`PGzOR:GNh(P9)0z\zt8#RdԃjR #?J:tإϭ&311E(H:QN֗HNiI֓RCdQڌSGU-&(ߚ{c;z 'AKz{::uu4џΗGSKuHs}(9@Ȥ"RcҎ֊N){4GJ\cҎ=)F9)3A8@m}i zqZCzс_aI1׽vQzc=8g<ҚC)x83t4t&#RzRQAhqGJ3yށڗ)GFuI"T@8F=i24qGj^OZN~tw/^zP) R@zzvqSP(sh:Q@4KzNt8)y"A);QKs(=9 gj@("94sKړ/HNI{h>vF)(j=^dA9=)sHyOԣi: \֓'"ڗҎi=^SWK?Nx)`{ҏ֐ RJr(9iy>S;'_jZ^sH;/ni0zF~"9u=G8h=h#r&rԧ{RvIiyH?\RZjZ^N(ȣu3J{`R`ҏzR:zzRGQA8֐(4LBx4rE&889)(=zwQ&zR.=?:;R);RߵF 3M'ZS}z҃ޖi3Js Rg{/#988&{Cҗuw[Ri;gQa@ :4rii2sCu9J3QIcJy>Լi >Qi?:3ASC@R(E4ZҌ/掜g?_j^9< LF:3h.xH:`23Jp)֓?ΗGӵ&OJN(:ߚMtE.NG7$u.y$QM!=8qǽ=iAⓡ(8>#z:P94LdQ(&3ցp) =){Q֐g4i:GCJzNxG4sҔf攜&JG^)3GCރ4uLh@AJ=3ތi8="ZN}(xhǭ8G҂ 4{RsIF;u>LQG'NϿ捴bJNK Rc`ft⓵tQ:PG< t41;g"dA9擁KϭZ= h֎Iޔ)҃Q@8G.sҎ ){c4` :~T48֔tL9=@QN>ԧړ'8hcҁJ='\cyўc.8(H03KRcM}(/H~4wFxwޗiN:R ^ ԽHO4.H;P0 h⒗H9$!'< / 㞴ӜiAzKxh9hzRF(>!$RS{񞔽HAR>i: 3NҎqz@r1iGLsAG@ZLcKqI)ZSZ9>gh<RqG|sj\c!RgdRghQ:P88ȥsJ RJJB}zнz}: 3&EGSJ\(ItΌҗ=:OJ)&3ށҌGnh(G>Ԅqz1Egږh$K(J1^zFy^P{bxSKރA(E/ZN`֗Aҗ4 Pxih99N(M 8&ҞhϧQHyvA4r 4q@ =q(<2;у4w8S S8dp:P\dǽ fQ :6piI$I@J;сu8SAH:J=Z A֗dq4QJ?9'&dR|Zs1Kh;: 9ь 9Pf֗yϵct!4^4OzCҁ cҗ sF3ސuAsK)Ni}RZ^i;AdF 4h^sJsR 4`Pz`bsQޓ99zPFhOc4bʐ1^(Z^(j2F ڃFG\R⎝9( _ΐc Sޓz:sGP}GAG>t9'4Hq{>q^)QAtxz1FF0 KzB=('^4 By`CJ'ړ94*O_ZP=&1߭)GzNwti8)s<^4<4w擁ך=1HM.N/^(ӊ8'Qx1FxQhAH{Q8SH:88=)8sړ})5Gzw);`RIҞ RhݜqN=i9) :(g=iOzQӊ7v@8R搚NԸ9Gni0y(9R⒁4})G!:u:тi1GRI@<уARy9◀:PFH::F8Ͻ'"ANJsJG44`>csF Rv4J1I /#:֌Q֓( @1A9==p)@#9FMQހi9Gh} ϭ:hKHzRv'4(??Ž#(h):9$qK}h)qZCA旞iAq8ɣ/' KQfdRc@sA1Gz:{uZA< @I4JQߞhj)11KӊCJ3s֏j:tFpF)ry4:SJRJ3?'B(ԇsߥtEb>/qGZLR4ug3IiqhF1?sGJ^3Hz{RQ8GAg&Ks}h14q;G=:sIIiz)8K׊:{Qޏƣ9(E(ޓށӯZQdfGZN{b PGh~gb(Z^RKRn'1NITsփ(4iGAKA旨'4:1-zʐ(/QKH}E/aLf0E F) )iip:gJp;w.z)OR1AғIڐ◌RzoSHipG&A# csҀ)O4ڎ}^ZAf}h=(.s4oz=i9GJN)@RzQ'"=Q8ȥ}(GR^vF0M&OJZ)3@q^AӧZ)sړ8ϭ/qZ^)3JN)M%R`yړ8gڏCޗғ<sJhzќq_֓4sAMj1JFEvgwڎ(0q:FqFxތ{Pz9'qG(y5֗8>c8R"E-'^.x@(Tu҃Hzc4Ҏ{w(sGJC(#=@:fړ(hiH(=8# R֌Gn(֏GZLbXvPx4C(>J4掴~ O4SJp{QތzёI(:(^F3HVR;qE.hFz ҂p(RRcQO?jq<pzӳM';\('i? SvcRM!845@ힴxu=h nsIQ=irz);џJ9)1;bґ4vNy`t<уQzSŽ1N vҊ(( 0N):u>h'#HzPxQRGS֎I;m6q@FOR(9.hoƃzP;C9d R ȤNbQ 1wA(~ҞE'j3GniqGҔtⓡ@=Z(vɣjLq@⓷v$zRgڗ)#={tP}wSA>vߊ:KJ@8ɠ{;zB1J=GҀ—PpG4jc9G8ⓐiN=)zzsNZANǵ&xi>phؚLQJ9qAIPN0::R;H֓ZA4c=xG4cu /~g=i;wK;4}hQx#\qG Z\R H=MΌzььu4JS`` R`QjLs:cҌhI`\pzP6u򣡤J:Rt'(◿&A֜:RqA}hǽZ4c'ރӊ1$(i9J).iQ AA?8 S4)  旭&1)8qIZZ(z\qI:}i{ 19bRTd})sLqJ=Gc=)sQ1>quGs^:RsKi8#4qGiޔ9QL}pOJ\jL/&? ARQR/H}9t搏z_ƒNhsK>G8y1AJ^܊N'#y9Ƞ֒LR(1H>9cG^)4&(8"p('3A9FyHy&3@((z=N(9&u&PZNh2) .y9L bZOcJ8=iqьqI@`sF{zq;}i9bpqNMQߦh4'_ڂ;JӚNȣj8{)xLӥG#~ܞ3ixZGփ. Fx94qGbPq 8OZxZCZ8(҂{~tznqH8<ӹ4tN fd;Jxd֏jLw&OJ AbR4~4qJ1p81 K@0=}IE('ӧ4E)4P=y4Rd='j:FyiE'AӚN3N&A4~cPiÊCJG8A8Gz\88h3AI:"u~ sc4R@I.0xii;┊ KқKAGQhKARu'P{PZP9Hzh KCۚS;dR F9AJ ъҌGirI9Rr 4LɣP9#<Рg>`fzP4i0 (ގOz(J9Gt('4M@uNIphҎbc<tj?N(4zRF!)i9GO{Q斃ڏj1GN.Ax4ʓҁ)vI:A>s@=AŠx<sQ< 1KPhRc^Ԙ)Œd␏ΗP;GOΏ=F=(惑Ҁ{RR)GJA=!P8)84Ivh=R}{g2sҗ"tpiv-!G4qF)GSG9␎ޔJNуtQMh !;G? 8iA8挌duރ)޴H}Fiz֓<(s@)ڎRx␌ڂ(4΁IZ9"ތP=(8iGN00Ny>bƒGCHy9J?Ri=iZ\qIҜ{`J1֔ LqMzR=(`3L.Fyi1Fh4v (N6Gz0(xcryی8K(㞽(8 Rs3@ɣG^9(tnNEGZ3r($bztg !_Ǝ(Ͻ(:udFiyG^)9J:fRr4r /Z@.8(~ ^);KbqKPz B ǥ;ގhǽ8$R(P:)s8'c.9ȣIj; ^s34Ax:R4ځKGCGNԜ~>Ԥ:sI`h8iN(#HJ_^)1h䞃S֔J:Hsz;RHs-'NQGj:qEw9ph>ԹIQA" @9=)OҐz{pq@NhPzgQGSF8 SCA=i1ry"'  p(Koƒ3JNJ}:hJQZLqM9'JH'+8}LRIN#ғ<ZN :pҌzQuA'#/'FqGAIRsFF3J(hfӭ'Z^)z1(hPEAF(?JOz;hRIF9J^p:Rv(җ4=hҁȠ}y((ϭ/9JB~cA"JuKH:`ƌz`ҁ(IXA" (8(P)x֐qւzRu1ƔpqAKyHG\ZN4v&h=)y=I8=sGn4y4sPyE(u\uis{ьEv4#@GqZ03@/ix?Zhi~xǥ(ȣ9  ry?J\CQ֐u)z1R=9`ѝ3Kɤ㠣ԧ? LqJ8ȤhRڐK Cڐj BFO@)y9hRg'J8鎴$ގ۽'L ^1OЊ\gA)Gj0zcy4rCF"3Ij^@֒iǠ4 /򢓚ex4Q K֖ 4[zR Pr( QҔPxZCsKP<_KړZ^QץirCF@G=)gQQFpsG(h?ZCqKJLqޔg4sJ%dҀh$ .i&J}ijZ@AҔ)1gq:}h9Ki:});ORf1/M=K:QM9F}(Q֔I׏Mi9fہH3#)JI@})j Iz2sƒԇf>3iH掃"(j3Q^1L}sHM((<ނhҊ4\ўP1ӊLThN Pz4uhz^c'nR{ڎ((4.Fz*^3@S4҂q wҎxuԹ" {ўsG99^hzҁMzR94P8IAj֗\QL4 RpxGlJ@қҎ}9Jp=(8={sF@Q94F3IP'$җ<)zйGn(v8#@yny)}1SsA98hIv'ޗ1G8QރԝJy8E֎4gi2@{B):rh^c=z<ѓ@'ΐPNGKM)sM.:dJ4g<縤91A<ҞM(#8qAdq֌s9qAQh8#փ^JzP?3K=.(qяz: R)~c43@Kuiҗc(=1ҎؤKߊgRqQǽ'ӭ;})>0 ֓9ǭzRg'җqJOaczN=hyP~(i;(=8#ZL3QIސʗ9J1K)1֔~B=h:ьP3/=i3sF1G3Iڗ>dv9;Z^tqKq^Rڐhy(#+GҎgvi8iM4v)G"=M. ɠizz9(zuA;:QJ2?:Z3K4#!J:QҔ?A;}IxSHx PyA>4#{bZzϽ/^):(<JJ"_ʌ:t4Z=F:Rc ;TJG|`}){sF~mSvZ;#GZLdr? 0 rsGAӊ⎧ڃюzc(v㎔sAގM֌ qh'G9F9=h=8G:Nأ=^:NJ & v=:PsE(?Zcp)z84moF+ޔtLzґ@9aqJR{8h8ⓨ'SHsw)<'zCN(iy֑_j9 ޗ}(w 9QIۊ^٠6&y @4Q:Rd2/jNir1Oz\H =sAϯ4cǵփ):J:O4tc֌ucgZCך^t(( 6tқyqGQI)t~g'֙'94u4;R)yQHFNizzK(<?3FhqPs4:@/izF8@/CHzF2){Pz #@q(擕4g/cH8 Q!(){{&xdў9j L JB;Ҏ)E4p1@!QRQ}wZ\f{r:94'JAG4F)GLҊ\fZ\dўx84$J<)ir( OjC&S#lǕЦ'cHE XqHFh\R0Hzbx'#Fx@9ʌ`I 3I 4wF8i;R}2iscޖ4#ցG~giZSڐ9w!QҎ{{ztɣut4\Rq֗APy4w򢌏Ɨ'8ԋRqG$)@8=p/Z1@N=>Qhiq(=p(P:PhϽ/L旱=#wHN4ғ=.{P(> sR |ѓ !9Ӳ09g=8ȤFy& )GL8j t( ZLs;(=:R)H@ih AiO28pqJO=83G^iIf(tI4JN;ؚQ=G42)N i'9WO 0)W;a5 @JQ8)R.SzP"=Zy99)Ȧm884udLh3JAR4ZPsNcQ׊=)旽-!Sޔ C/_ʐdzSc=i{R Ga/N(=@&cF .8%/wPyQF1KMOR@^{RIfQךLzR4i{*~u1&iOLǵ.0:`3K}i::\:1ϭ*qKy?RORG?o~ޞ=HU}T\1O ԡs֜#D6慏-Sakϵ cڑzTrE)r:T.[)1玕21L*)GnҸy֌|49gzQӵ ER4zѓ߭ )qxȢqK .)<┞yzR@4)1ҊLF;JNǽE۵u1ց=QCsJsG4Z@HKނ 3 &d n(h)O(<G~qGZ_Z=i;߭)ъ?*()'4Ӝf񎆌Qޖ@yփҙ'Z\ɤN(zQ@J9.:џN4'Qd:99)=4nqӭViANG"G)8| Cz~!$v'GԿAFy@O9(dsJ={P:PsKM)sA?LP8=I IipqB(G4OR0)Z8tA@(=xK(HHR{tK})y4iN){Ҏ*OԊJ1x_zWڦTHJ.zT RUSy9|qzwE@s=zӊbW5=*3<9>qPC"cҫ2`5)3MQs)0Mi1'y&9A'RqG~hۓڗcinrE )}IshE'C#Z'4wb4KړޗRqRON1M94a掣րsI旨E/QFq?98){S['N1@(=G!KJ\MQ}ϥך0s֌wu)4>ui;}H"i)zh4Ԡs(:ӅHž&PI .xX`sҡd4µo3o*?1y`_J;b88G&~܌⓷!1;旷4 B9&JBQ@94PAғ@pi*@'^<(@rG~c8{th4At@<sKsCɣ1Z\qy84ȥǵ(=x(Rߵ.8JGQRt>~XzsI4w&jN4G> Q8Ґ.}yJ=(.(=(sK);SJ^Ec1)CҔ1(R4^)9?JQЎ(=(#֏(sI(J\M!9;gڔzQfǥNJn)xRE89i3Kc;4 ұz;hsPK0Jx)@>qڤ۞{T{r+njPȸ>aXEE8ij=* X:R`NhbЂz _(cBm<UV-3!*jŕ|2qQHFq@Pp=j)Zac})0}M3J0(ϱ֗IԜp9إ8 f!FZ^R{QMwJ^惀c 1A#dg(` IQ0h'z>ASO֗4t4v曟ޗFGZNG)3BKLZ\ :RqGj^=0 7=iGȠt})F3֓h#\J^OE g^=h|RwJi)A=;QҎ(*;ьv掴fj\QQҔ擿J;xiG4G(3RA'J:Q('<сڗP4sJqSH8Rqz^6 9G~wF3Kӭ01F?*3t<4~4{ьwq3Z2xu= Rq@ӚҌz~i*FOΤEϵL8*TA,@b(F*BAX{f2¬$R?8wIdu6R杴ԡ}i1ҕJn)1JL0W#8A4#Ux9=ҩ`Q QIߒ){sҐA4c<>٣A#J !֎dQR) L;9ǥ'4`sF2}<zf2(bLQӿQGIJi$GH< ~irqI84H)zv)yNA4v''Q֖ubҊJ>j=ɦufZ? ]nԧG/oj)1OK)xHqڐqt>c&w&җ(upsINAF2hxH)vi>)MQڊN$ǥ֗J^Qߨ4g&JqNu{Ӻ ⁎s@x遊:T` _n1F:qN8u(c&8*dROJK|ՕR;T*jM\yѨ%[P`TȼTPTT2i1 csҏ+"1ǎ)QoU'3T^#ќҩ e#9֠=H_ }i<)SXF8'Q (:QGjSi2(ǭ("'9PqzcF2}iqI@ޗQK48:?OFqZZSHx/j:zѻ=iz掽(u)zR@4`} )ғ$Jx8?Z?*FzR֓i3sK89sN3BOа=EA<_'5L8V r8켓S õB㚈cққޓ8c>cړ)"}(HFq0:p83:\4yJ;ҌRgڂyx9=(#"dFLGLS'4ny2'R]9Dy)LTV;S,6ڗ P>q5,Xr=*6 n#ZuU(ۜ Oҹ*ZaG={RqG9&y)>QIFJR`h/>c&?Jz bs8=JN})}M4 ޔ擽:HM:hqA\ڐZNiE:uڐrq@qF3G'4)s0pqRғJ83G9)FN=YjIXH/DXHB9P权63HMBqc8?ZNpMA(砨HUsn0G5Ufܠ)Ȭ׏TnP٪f0G5NhYx{S$c*.t4Z{oy489{#iǥ)4E@M94Mg'jwOZJ\sGHx㠥);tڔfLF;w4w"F8&dc}ސTg.8ihzQIhJ3I/4ԃ#4֐9J:QzRR{RcGbsG֐撗4~E4zvgڃCH* duJ]GqAI!R:`rM)(49u=zg_j2?L֗QK}RQڗAK=@(iqZ:~4z:J^vIԼv ZZ1ϭ%)R>ԽKրy'S֝ǭ'psGSKݩqA@xh(=iGz98ǧ;bQ< tAK@=*uP*tPGk*kr Wڴ OZ@1=Vq5n>jpYj 5i84y?ʗg 8`/5U5XJ4GP8U9]89*D@&9 gȧwz8lU%Uvuk0j7Lvn1);I8)>aץ1N@#)M.s&px<^ԝ'I3AE!ތzQAȤZ8i:h>)yiqJ '"FsH9x4ԇdZO(F1FZO”Gxҏ'~iApvw.@u)4qG4^R.wKf{R`-L \gLzѓ:tC֊\zO”sv8SƌRRHOJHjLfZCփ(rE.޴qɥ@Z1֌Rqz9r1K K941 ӱIӇ8oJQ@cތzQ{SF=zьQF{ җʗNJNiGqN ԀۊsS&zӎ* tfZ=(?Zm/h<}G&RGN{qK(8xH:Py87hRg.}zP8h`S(?:QABɓ)GMA,\UdqU挃U;ȧ_UE'⪳`2#"\1IRNMVrH5Ujc Jr*?\\?NILBqwSzi ^“3 @0y&Qړ#8G=4{Q4 PiɠFF8OZS("_*CQKN As>FhփEA4JGN(>zz84{QjOŽ)A$iq@1E.8\cLxIRq;ttE(HG(aQJ{&x֎sKJAy4xh=(4 H8KKړ83G8N{RdEqF;ў2E$Gz^{RpZh=hg9m0FE"3h)}'ғ>Թў= hNg8wQ(b4@#4:RgSE=H=ELuTj3V\zqWQִ 7jЎnԧ> (I@?;\fyJ 4 ch#?Jn3JQzS- OAz? ;/@q@bKӽ/&9KGSNG;9v)"TSNa =*}U؎1W8HZUqzU^Zr=jYA*iVV>:S0H8Hr3I9zߎz o!f/I3PgWaT C!㊨UU$=+>ASLUW\fXpx? cj7?Jh zalR׽!搑iZ^)֌`sG^}) \ⓒ3N Ah=;2~QHOj2@ vKH\P)@9z\qA4Rc\j s9u  ғ&sޏz8ҐR3H:sҌbuH (ڂsIMqK({P8(ut/CGI)ȣt}%.J?G(uI#ڜ0hzёۓF2s4zfRJ: 3@8gz\dRG_Ҕ8ұAGgJ9^)xIןҔc=.py~4AFEjB j;f2 1A/qKz21J);iqޜ)ǥ?ҤAR=t^8f0A[ƯByXZQ}jgjnq9']*O9q[{ՈiH)&(#.M!^*\w䏌*!ɨeV+U8TOCP!9皪EDUA#*3Iۊ+dw>Uێ#FEg9Lc ASxlz>Ru#F):R@3HhҐ)I(qI "`/s QւMh9JqJgzOLu}i旓'^~r)>KԁGr){F)GPO8RqK֌g=iy?Z9Pyt8Ǩ⁌qA "CcA#JQ{BzsGnhNz◨v8=jT"USp8 cVPxq.5z g~5"F9(;UxH:ոZrb'jISڥ R(g.*#w=5~UZb05ZQګU^OWp1U]0sU{UFUy~P<3MqTd'ך#Vn1T$Td*"@aH'0xIߥ0J~3M&!):z89=(<} Z`QގQjngҏŽRqF=u4gdJP9&~lb&)N)9փcH:QRZO|q@$:S4c={R`(:њ\QsI PO~Թi;QAxO&{Q~GJN>ڗjhӚ^Nvɥ:\֎֐j;QҎ3.F>`ьRq$'.rr(d/Z1 N4JQwo;i@֜JpsS/ V;*L2sZ0Zc ՘ GZj1S(8S$:6JGz9ޘ$`q=8N^j6F0Bd!הơ2sP;9 gVMB#U|f@SU:U 3r5AJnaU_G'?C3ޘIT`GjM'㯩'MR#$RAhz-RŒI5/&y(ӠqKښGiqK(9(G iy^PM/|I<ϸaڨ&NSsP185XsZT|$b`{b<Ȥ8!) b?!4dюsIyKCwl4:H8iq@ җI{⎇GqA'):zR(ϥ IކqGqG`yFN1J?4{RwRdjZF8ؤ:N 94уCMgZn=yۥ8 $zR&yZ^{TdtɤZ^}hcZb :Խ4Ґ c^֝HM9(E(Q^ӆq9?R HTˑfN٩wXNjtqVjxUG5~uVVc~*H@ϭY^*KV0YYxH=EIzSċzH=6jDg$gҡaU'ץBcI皯#u튩pYҾ'P( ui@Rg/'ڊ_oJCҝMKRG֓'4zҗiN /'~4dgLr)sϽ(9z=Ҏf8t‘I.y@ӱE(8R/Nd¦\ԓӥL:1ڬDݳՔ|u<_<_QZ}*0犲:TVLzS)GɥqwJ=)6Po=JJ9ғ^AA4 ){}џΗ~N(Qx4 (=9wQi. :R?8piF9;G5YN}jaT,{SX5t+L9rsڐXMF(4Lz控&xKCcL{PpN{ёҐ3ҏz1IR֓QA砠>iy9F}ڃ؊:8@ڂRulsF1^ޗ#8&hZCڗ#R6JzSOZp9)1ڃד@Q(_&E(4}(ҌsKtRҗp3I/$QH:?h4zќQn'98gR=84uzњ8'szBFzSQG(j1?J:R&)s4 Q1A9^yQf3$Qҁ8);R\^J^zFFh<LKE4q?h =ݜP?O)aXD d#J'R,)mTaߊ<឴yy4֐u3}F`s֢c =99\{va*ǃgJI5JSU78>Z^ğqQ>O9siZ?:k7M|qښԦF@RN)RI44۹QG\QE43;sڌHJ;qGz3۽&);={GF}3Ҏ(J1I*0)1Rt=$Fќ zSȢh9=h(F{c23F>j3/֎)i3&s:jhG֎4}h=ɤF9&.FqIёywݩ{{RPzRۭ◜c4iF8u(hK('ך^3֎R~t֎v8t掾zNH|ɣ=JqAޓ< P}ю(ץiqЃK搐8sPqOZp.0r:RN8OS׀*EaS{TS֬G. ZR}S` <㹫i*5:8=eq*x5 aԀ:vi7dFyg4pQ`f[Q1P9KUyU$8=*Hh@<׵FHRpiIjPrw4 R)r1֌qGM8FsR 8=OH:tS) N*T9jAV#b:QNzոG1'n90O5a&ԢNxH$74^3KsI掔G<L5OF瞵 0U%#֪Hj;UIUW<ҠrO~ ӊFڢ'ץ4)4OsxN4 y掇cH8OZN@q 8Ruj^zs@8p(hQךJN`LPAP~sސpiXQҌRu҂[@$Q#9#JJ^!Fzb)O((t=h֎:H}:(փ8"KIId\{x4g3Rԃc.?:>R03GOqH~(юKzIi}.3GhG494Fڌc>c8gQ g:wSpAc?ZB9F:R='')4HO^Ƞ1JjPybFG @_ZQsIӚ^c4#i/qK;8G@gzx=0*@Z7jen2LXFD#zUcҬ!YFަSZH@9<9'R)|1֐|dwyLij6 zsP4&*\dQړzQZ:!=zьJhjN)sRsH;▌Ri}~b LqJ9ޗ ⃒yF=(}hth>R)s QhڎA;)Ҍڎq8uuKJyҗ H[Ԋ?Z[TƦI8$uV@=rzgդG5adH=x)r(FQzk53iNMF*8JG'@s׭A$y&VyN9LZCCQ7q9♐O^h1Fh#Ӡtӥ.FzQ'AC=iA۽.{b)2iOR):RzPOZ1})9◧Ҏ ;R QE(' xIFӓzKގs29xKNAuqJ00()֗J ⎜PZ:QJ9֓sGKץ'J3ޗŽG(kz犈3byҠi528 rI5n84ӃӊcsMN⛏zfNizSGQI}p3INIw8M 8=81HxNi sA94NK Nԣ8~NIbOj1R6(4mu(isIޔ`E.8Mx>:w)JN4(ڗ߮)qҌgޔ;Qi1N8ϠҀ1SKZN4Gn()AGl "N)8ZvAF9=1@!ΝIh4 Zv?:;bLvFE/z(斓GE֐t旊:g FEQǸ(phx ֔u'\sJOj\RNh=y3Ҏ֔srzR&t?6?\sE-. —\P=GҎ'Lu=(ii; ^4Hs(NFh''8(A9=i{R~SJG43GG9qJ:~4ZA{y4J3GbwH^{R)8()sZ;u8sGz4җix֐wKۀE4w&OzP~`R֗Z=2(ޗ4['ty==hFxunsZQG)=q֏L8J&b֔I)QzZ)҂8ߵ;IKH:班SJ)1QAvڎ14gjQȤ$/R:b8y(ZASJ:fKh'sA:(;EŒc{0OJ^ {N)y"wRޔqr4鎴4=jAԊf{g89)&^"=ih;ӼڔM)3zqޓ$S zS7Qٽ6~)ZilM gÃFr9sMݑȤ$␞)!}1IۊAKސOJLsI4O4iAΐ9M 0y8◞jcr ~(h9t@RJ~>j20E/)8)3=w4})91h4qGJ4)N{;b#Qi;G/Iތip: n4*C'-&h=2(!w{1sE sI-SK=*#֗'z^gގ(J3gRRczZ: ;dsE.xߥ t:zqK#8GAQ=qI@\R=Q@_Q&KҌ^Ԃ֎3(=h&9(/j;dQhy9)qbҎh^ix(Tjq  wi ǽ)3ڔv LNќtg3N);p֝c=zu+񞔠q8[Q֓=O3g L3֐jo=):f8&}zIMBi1M< N)9#F~^iZ\*2@#C94r):z4{G={R4b1Hph=y_ʗo!xz`iZ=猚3߭zu=8#aG98i; 1EB8ɥE!KLZ\'( NGA)xw()A3 f8IM'z<wni3S=(v#5zQF(cs׊#`s@<)i7sZ4g֎@^){RuJ:#ғF)z})Z\&{O`;8vRPz}9Ah< 1M>`uяt繠zҀvOl4{QM@^vA4p{P ;ҞhhqG3ҎNQ׎8f|Ӂ=xɩbnzӷiU)'Ҕ8}vw47ւ}|E0BsMis4&[i7gSr3Z7qHN)3␞!7Oc9F=OG! :wAK4tKIy4yvG4u Lci{'gۥJzP1 HH4dtqNqRKHA)9GӚ:c8ƃMA(4pE ((NgRѓC'b=Qws@4w "s@J=Eqڌ擵4sғҞ);u{Rc ((qKiNE/Qh4֎RҐc8=sA擧Z zP8G sN⎝hϭ78K߁G󢗭&E/JNhiqҌ`;g8ւ2irH3cQ4F tJsA_zpM)qԀE)88) ^ 8 Q҃Jwr *;œ)#&8878gހO|SސI;Ri09w)jC⛕'!JhqH~!!MIH֔3Fr0A84 u֌g<CqޓIg/;fqIRLԊ3F1A֗Iڌri8hǽs_zRqJAcK;SsڔS"g:ъJ^&4'8Lhϧz(Gt(=( QߚNRGJCiA~4qP;w4hG iOO/JNJQ84ʗފL?2:fT֒hqAq?:JZAf.;&=8_Nԇ9 .}qH8Խ(4ǽ;֑rO/! (籥J1w8t J1Z^cA8u.0)>c#sGlgCƗҐHsڗ8&izQ@~t\RZ\s(>җ4gP(shGJ:ьc4u.p;h(hրh84tG=4G~izaF2sH0)GNi:thѐ /Rp~FxA"@g/oz: R?㏭A!Q=hKcAɣK1NLp GCK{J}zQ)Kt'ލ$Rz٥hJN4 8P{}zQ:sHrƒGL֌ds֓(NgGQ(Iߚ;9I8J1ҐIs>Q RdR(';R3ӭ'C֎IҎv6䜚3Ґ_&yIJG4HE 4P9949.;gB—3GjA3)gNZhQN('JZ:KԘ=h)zqAhMgZC4cSIz;RT ьt6ɥ<ɥu9o )F08qހy}hҎ}ihF?T}($zH=)=R/J3iz(9.=M⎝ڎP1c&@&Sɣ98)r hy҂sҎIJ߽Þg Rn&<'88 tnr1IP1҂9旌z>(xCGE&'S׊\cZn9)tcޏ)1O4@=yϵ.:qK޴GlgJ@h=x֊1s&=}J Q@`fCM'zRM>hCI94c҃I<ѓG4duiIJ23G8Ҍ=8'4HyGlQ8:уG_ŽKƓ7<ޗ'4g :у@>uqi'KGjLK(I֖ZLg(挚:sG҃x=:Ҍ◚ 'hFy^)8^2hhM&8J2)sIӟʗOlQzhғғtAG('4“4y> c=hv둊oҎ 'gRƎGZNqCr83֐@b@P:\R֌gzqF=.}hq@< њE᳚S^1@@8hǹ)GE(Q)=h=GN(@<ڌ{Rz3(*\: gS'/:P8ҎGz?SAKց}MyKғ旨(g4riri JIF3Fq4AA#)(F0y9JM284P0\gFi;Ҏ4pwgw3sH9'sF@٤.3'A#8jEAIQҀh'ۊ3E>t9j =z\q(擽('>`Rt '#ԹJ@O4uZhq)ǯ4(O4Rց^iOAҎ1A4wȢҀyRq^⏩Ҟ&(=ʊ9J_Me.9zL`یA4)i;KN; V b֐^hK Php{2qւI4PN)sHh@g4r(m.y@>ԹQ)3ޗ8)sI}xHO/\@}Kӵۭq֔ 9sGCIs_z2ONsJ1Qɣ(&h)8::&=hgsތ\cs@==)x'֔=1@2)yH;bz^OQIFx(cҁR!sGzCJ: NOSFq<OɥiGj(秭:PO4RvGNcރ*?R)/~i:sHs?z^vcҗjN=h uH3RH9=(< 挚\c֜:Rc&K&9qAsKKARb:JqsGA)H9< P0(>u\R׽s{S{vA){ў}((^u'K҃8s:sKjO/J3ؠ{4R?A2qIcKsI֎HyiۨN1I84g4{(jN8zRw◐xg4xރi?RƂ ގ'dt"\J3IBN{RRs{HG=);bҎicSڌ(IA84v=(Z_jOZN/ah;ъ19⎆#җԄfRg^ƀOPq&G J@/>T|4 (;Q3)x#)QJ:iGh=OȤp8t擓Sp{qFph\1׽z}isHxz@Qwux}'9␀KAMgqGsKGj1Fr=>"Ύg&x◸`qޔGoF8#:Rj);Ӳ3LjLduvH84E:Pz v 瞔g$sK<(G)3uzRi1O1A8t( ^8cI2N9օ ))ndf=iy3i:ъ1:QNE֊^g榓3ZRr)3RF('89rG.=i)1(x3Kқhޔ>np=hɣ?7) 84—؊N;QIKדIJ=h tOJNȣ4v(?jL`=h GAI߭-w%/@i=Z(qLvJ\QRbJg){QF841G":LS(4hH0(>J0h◵GC&)z)HcPi3s@@=4~})zHiEc]9ސԴchq@ޗ}iq@8848! 4IPZ;ўg)$QG"ޗ4׎tQh֎P:&҃M!4sGh'9RQJQ9=.rsړwۊڗ@Z34^hgFhK>()G_j HOAڔQ'Z\q@GzCKQKA\cbG4:~/J)^E; 7{Ri:)i3^w/IKҎ( Qɠz:т=(z3I< ^旯R{-:qڗ֓ɥ QItjNBUԔsc8I)qAM)>`c@ JCӁր1zQcA)zF=J:{ QҌ {R 5<P8z^ZLgPiZP=sҀ8hRcR'=qA4gi}r)GҐK=i8攜 ⌊oo—FzNFhcӊhQ(ɥ9-!c/b)2p)x94sE(`gyu֓4 rNihs֝4SJ)J0(\M.xQF8)3JMOҊZNsJ2E';4d҂{Q—ъAQ? ;R&'CKA=ǽP=p(4}h^sHAgq@P:iI&1^Q#qF~qM}iϵ"9IJ$QҎ~G\GQZ9ҀNiy?j8OZ BǃAK(tFxGHq(sҗ&( PI?ZNf4;sK3h'?JzzѓBr?Δ{Rc?QFr=(1A=)Z3GQzS<((ԿOZSғM@q@Ky4{QӧJZhRNsKZZ48EzRfRd\c(9J1Hx?/hAAxH#!_ƀp3AzRt) )J:f8⓱?΁֏Z8 B~?PxړRg *ZNԹz\HsZ0E3ڑfM#ހE(Onh#K(.;⎴c J3!)7:wKʂGғ8MRZ_šx;v8zRu#KG4)9):})xǩ~w>ԠsҊ>wrhhj3A<=җ =szr0h׽/i:ipqIAϥ-& /֐qz^qҗqGz1RGJLNh4;Ҋ3ހAb(G c֓8); 9&(:4 ړJ3hf4}iFt= %&:bƗғ8Ru4izsGN h@(.;ьRv c&(@HE#^Z>֌qA.i1^ԔҎ_|Hrzu* ɥhOQ4u9.zsGIE(^zs:hFJ8ڌ:ӇJ sIfJP) Lz :Z1.8G#ނ=(49Z4A=1Z^zOt(( H) =hH:џRci瓚;K֌PscQ4tȤz/4uH}sF0hFq@}h#=}hQr9#w(#I) 4`3})Ϯ(@ьHh'Qrh@})1/NM.}?Z^t:c?ZCEO^)Ói F{Pzߥ!@@ޓ'EE&8GZҁQ9'l:ih"3֝ғzvJ0sڌRp8M=2)G?z1J8zRKsG /4QӞt&֌Q(փ=ghzJ{RM/z:ZBryۭ(IKZⓥOZ;J(/_jZE 4Rdw8瞔ўRt4J(=ZOPizZQ:P:ⓑҏ(qK:21IKz󢓽-F1h4zь14qFN8P:s@RFh=qGҁGozN('~/$zQh8&sJ8أ?5/Z2:w3G4y44=);+t(QQ4 &:Q9h#;҃u'ҁ:KҏhtEtQ1hR ! rx7zRq23G4w2x{R@hC׭-!I9">tcE!F8◵&(bRO|qG G!"2! AFzRQ4zwp):8t94x:Q/81GFFzRXJz^=;Z:}h g4~Tg֚:zQڎ3L4ގ:ҞN;9擭旧ғ>)sAڎ1NzSOZSui^=i9~4w A=)y=is@Hnt4҃@uc"({>dҗGaGG8ZNOҗ/&CA֎Ҏ#SM&}K3IKRZnH<ӻzRwƖ? sK 9<sKsQNԹh=zb 8RqIwGJ^:LtIQi@>P>3ރF2)9Ҝ8'J )GIF84cJCAtZ=QFGNd==((;юhKjL=;OhQJ:LA(#ڌ 3ɣ9h4{R~jSGZCNi1J8u 1G&pzRғ>f}>cOҐ{Py4g sHzQ(K֐^qFsJLsKHOAJM&i€Š)()⏭8& R҃Z: 1i֗j:N.Nx!@ JyH#ޛZ\}1GjNփҗԜt)OJAj^Q4%tFHS(ϨHHuC@K)23JzRtJ:(iO*i(4w(qPS:9 ##c'=h?J2E s>и8JA4u")ޔ(u?җ=s84wyw8dF=&Fh΂:8G:Pzpy1׊LuK=;t҃CF9EOj1'\qGMqEHɣ>dP3֎ A@'$RJtI{f~4tiHt;R}҂ E(#&u=)z4;} 5~(:QKNj^ :F@oZ=> t9&9'?Ғ>c1@Q\ȤJ^(}hgK\Ri;Ҍ4Aɣ(~41KKь);tǯZN((f @GZOΗhcq@K4piGA4J9ќ \9JN14 >'cA>ԠOGZ\ ǥ&y'p(isړ=iGq@98Pzq֓:t)QzP2zj\JCR:z@>g4GC҃z3G3@i=h>4 =3KNyF{POj=gus֎Rfփ4uҌwޓ=2)҂M/jC@>إM4Q߭?&~jq LgP94N&tRFE4vR($G&QF}ހy#=zGM=ztH'Ҟw?֎xfz=hS(փGQBZ^9PM.zP(ݞ~IGa8Z(E)Ibbi ⃒)sJ=i2PzuZ34霚Aǥ?_í`zCJP~sK@=sE ӜPJ21IzZ>^P3Iۭ|u(=x!z@HaE(掟J(Az;QKZ=Q}(i{QS 'ץ8bp.9AtIFG~dfHF;ҌIH@Rޗރ(S&G;Rc֎w挟ZC׭/lRuҌ֌RvRiw`P hMbҗN3F8J !?\qx@xP3/zNc4tJz/jN;g.N(Kz^Ú@N(<JzR ҏj^қKs !29=1GKc_@֎s҅hQҏE!)M&>\/LsG9G_=qJZNiH@}=3@#Kuӵ#`RAϵ-l4ў(P999:z_H"Eh#4`3JFx4}h4tRJL|isv!Z0:LHǯ!A/zn8iCGzNi@I׎ԜQKޓ(f"J9qHsF;>Qh\t @hޏ~M(NQM- c<q;(IMQH3@;RZ^u()4J3LKgzQ!^ݨ֓F8KނI€G)#%ffG_s@Gd`ќQГKRԀZ|)GAG|GH /q'~fh4“(8#)x?J:ZLsRc֎y:x΁Kӵ'> S9?:\F(1AsK!qF8F0(=i1^޴s/I9G旨ѷQ҃'^r)iOZx4 K ◟4g9t=&1ҁɤ(Q&bj34u4ހrO ގ/Q֓#8/Gt4qv&:Qۚ3ӵZ\擒z~qt֐cޏ"'z=xbGɣ4i3_\Rth.zb'niGGQqIZ=AE&0iq)r;dc΃t(rxKғZNQI4 q@M8^iOJBxKv?x3@ԟCK4֐t$;RF)cZLsF8>GGSH:Q}hF0sGZ9tڏcIFiIjsMCANi &j3ǥ1JNxzP?”RcSCK֗р(=)#=G&h"t/j9P)qޓFEF?T}zR)ӊ:fdihsthA&/qEҎf'4J9Z_IzRz\G%)(8'җv9ќzQ3ZMҌҎz9Z:})HJ8ZihRg=E/ji=)GJN?:4sH /l4qGj4(⒎RPhqJzRJch3AуR31@0z&=6:/\vryJ?:O8=PqJ3RR N:(hhMQ@4<ҞhHhjQA/o€GQGhQԀsN4v4 ^ނ8s@烌Ӻc4pE1z1P8tFs)E 攎uc~3G=O"ME.(4v P9@{Pq;u=h+'^hҔg!G֝qF4G|w{J0 K֐u`;})G&8ց'$^I=)hP@4NsGz9h“=hpy94z“F)OcR3߱z; )H}ix\Q:RƗ8 4Q Z: :$qڎZ'QF1Ҏ8~C(&PhAЁ>`fCKތR4/8Ҏ;QҌ24@>cўwzQchGj;rqA8I?={x9x88(Q4Izӿd)1zR)1BҏcI֎GAG~g8ۚ:M)rMڎg@Q:#4wayF'֌ќbbHG4gJ3)qғxGQ9掣jA::<94ڗu4wKޏҎ;Ҟ&q@9U- }( / -4sN)ԇ/Ґ)G< =L_Z;{RgiI$(S LsKiq'is;ь"F3H9_AGOZLw<1R ׽Z4֎4sFri*ARc@&t=Ozz13 >t<\Z=h(Oz8@8=iGF?Z2Rhf1N. 7thSIQRJ94{R.yޓ'>{c/ZNhh֌dqHy;v9f?(< n1Gz9֔ N3GOƁwQKi2sM.=)Z\:ʗҞȤҒԙ>x8^ܚ9d@9K(lqHizRP:#AҊQғKۃF9@$]qF8.yqK'׊2q<`4Q4g4CIJ{ :qJ;>d&hsA=1KGAF}Oxt88h{N ?:u/A֔) 8x '~sGaE.rp(#ސIi}F1A;QAu3KސS4=(RfFzR(ExJ(#&rA/GKB);QۚZ^:frh'җBx4 CJpMIFAvPzȣ֊0 @ftQڎ(s֏JNg=ԣIѳK #GJNь}(3M.2h!<g E3G恌bhZ2HGQAsI֎◊CF=)8hg!=xwNz_@ȣ4f ɥ;Iq(4Kd;;ސ)8Ni@(=E&23K(hjJn9ƌzQڌ)J;R'LќtNփQȥICKŽޔzсG8>r)1\cJCJ~4o旭R ◵4{斃{Q);C^(0h&B9J'Nz_)sڎyILz Qi$dRJr1K׎qޓQ<3L>GҒh(N3F:KG~~v}h>(ɢ>ޗZJNr;gipOJ;QR Z03ʐZSj3iҊ1ӽ.>I/oZAFvi:i}GzNڌ{J1@K4ΌqA<(4qKғI1K:ќqEҌc8 QPzQAJP}Fi3@挟Zq@JZ@23Kޚy}(PO4s=( ^Nt43@3uF;wFhF;J4 Q>ԧtq֎9ў“qKӚg/ҏʐƒ(sKNqZ18Ͻu&yMd@3M ך1IxM⓮h})O=G֊\Q4qh4M9ix4qڐZ@2}O]qG_“8ǭJ^JHKҁӓG֌Qߚ^`g=3J}(ǡ$ Q?“<\zwLR~1R}hR擊4sPьP{ ?'^v3ԿΒQF8j?1G~Œw&qҐ :h ҎzLQGJ(:>Ɨ#)3J^hhL4qE&?*=hH4sIԚ=i2: LR:qG=ޗʐqj?){4` :F(GHR~8'4A斎 t9F}A#>t9)z:Q)9KRu׽.{fGZSҊ)?R1gI{vьcʗqI?ҎHڎj;RcZLiyJZ_Ǝ)3֔j\4)i=8H=ihfhZZNh@4*_U7#?֏֎4dϵ.i֗'qI8"A9ӵ&h\0ifu{s(8v⓮2)1ii8}(=x KѸ(x֌{Q(&2jQiւsF;FG@Eb֔Rgɥjn){KjN{QR)3ҁ44{z3Fh㧵-&=zR4?^q>M/=sȤ$wGN(RtjQA<GJ0=iN(!>uQP@ Qc#1E)3ړR80(4LQ(H:u#Nhh84t)Irh#4zqGQIi}b)d@q֗3FsGJ=hZRg"ޗ'^c4gQҞ(9@uғ\wGj3֓$SځҒrhGќ1;?S#ғI/Z1A>gڌQ@i0s>bh[ր}=xN);:GJ;vu+g8GSGLwQ␌A8)h8ǽ 9Hy=3.pyš:S)>@4֎pGQޓ.1FȢ@"Ҋ@/lQ-Ҏtw4:3*9J 'AG bԝ84(ǽ&h 4yG^QLu{R{QI9@!Ҍ(9&(8vu擜pN=)Oҗ┌=Kh Kj8J0qGnG~Q(ޅKI1i JA4g4(xGH/^ &py'"~(Mfi@ⓒpixA֔t492(<u4gGJAڗ'J;P9)O4=)1MڃRF Py(t9ڐhƔ(7$RgP8ޗސtCA$4t<{QƌSHry=(/_cGl:{}izAdc@@TIґ9F<ƌΫFxҚ@җz='${Qړ=yqKŒ0z)hAzBiGJ1Z3Iǭ.N33h4@4)? ^ގ3@4u< 1z1F}JS> ^ގ4i{htp(;PM/A-'|R=zRsJ:P8sI ҞCӽ@4}):{LRwQ;fqi sJ(=i;Ҏixh&()zI'ԝ(('KGQǭ֐sN9IAG/SI /94fڗc(4g/ғ'EFyjLKAҝ~)4ۚ_qKJ3g4Q1\ws)>i8┏JLsK@zߚ1Z:Q߭'h/JE R瞜 8@ԝ)i(4^}N(^0O~(44 ^N#sHIҊ\ci~zLc_ʓ8'=I3Kߞh(ϵ&}(;GGSG:(ӊ:(I/zNsFIN4(=)E/niyP}(4zQڎ`ǁI@=!җ8@>R /|PwS F)JFi4$G)8 @;ހOIiIIۥE' u9 g)sIzu'CJzui3\cLҞ(NpzRv(4'0rqF9zO|P~Խ=(ϥ.OLRRȥt4^1IޏJ_ FA4S@9'<tQAPҌb: @J=y?z^RJ^4'ZR()3I8Qړ<杓Ah@(h((HQG|R(}i? yG}h9'zJAJ4Z^# 3/SIޏ/'n:f$RPy?'lǽڎdG()1A=-P:{Ⓩ#zH13ҎsGKu:R`").y␎sxǽiLqҔP:9 ) ɤ=yJ\QJhihQb@QތJMGyN GP(8R=3)Nh#SZCh`Q{ciq:RxގJFtwdfz;ޗқ=ii撝HxiÚL :h{1ւF{PFE (GCHJ_zt׊8(ju/AsPh#/ScIJ)3тh>)GLzRgQ 1iz9<>r9.xKn  ~4h3ސ/zP:I!#O4ޘqH1h 9=)E!zu&(RqҌ"ݱG/n:P8<۽>humqތb0(94NN(=xǥ) sGi&)3G4t3 ɥ c! {RH'4撌zy^擌<)?.x7Ԝt4g=y4~43G⎘ҞIq֗q1ךN}hRZCF99wFsJ=Rs RF8tɥAGj13ϥ/ьRu4ޓގM-}is:挞ԣZB;f'Q/JNv`LR?,ю9R NhO=I=~c= ҂0GZ:x")֓HG4cg'zz:SJO!ݩ{QIStC.}i8Rc<ҎA֗b(4dcށקғKQҌ{PIӚ>`(FbFvǥ0(֌{R _Z ޓǥ'ZLssFA:R`}hC4JLs@hE擠9R"H8"IZ=)sG%)4QA7 GLҏzC\ךNƊ(/nzO9aPO4sG 8Z4)22jvsL 8#(KۧJN|惃9ԧ4pEȥHxpM'9<)r CקZQQޓZ\Rx.9oJ\dsJ8~yҁA'\RJ3?hs:QzPFzRzQ3K搟J\t(9&;3PO4b=E&O\)2 ;ZAdq@8ڔ:^g=h(vgJL`fr(8H:tB;џj3;xIОz҃֓9\ џJ)ڃ1GB)ϵP=i8?Rz@GnM(FphjP@ Q))3KGQG|NuqNzGSGwHs֏ƌך:z3J~RIK9piOLQ1Koz^֔AKӜRbq8K@ތs'A:RڌcK֐84ғюHu t)8"tҌzӚ4t(`vɥhJ='Jj9)_ΐR:u wǧZ8)y?C@qKМRPFy{Fh()zqG~(9? @OKۊL?AM8&3Kۥ'sKۚL}h9FԹIK=_v4`ZOtlb3JFFsH28@Z? )I/Q@<4i@)1ڎu c8j}h\J(z'E("w4gqG&3AKN)zL4"qL֑}~Tg֌c$i@^ B3KsJ(ϵ&hǭ/>(u!Z#4ZZCGQ ◡4u4vf1E.GF8<44u4⃐h'3g4F*;u8 9ׁG4f4vӚ94q 4g(urh'(Uƃ9iqI֔{R R Ij(4F}zR;NhuRJLR$QNr9<Խ=(94$Rc.xRL⎀xKRKӧ4-"L:~~u4.8(◎ilQKzRHLQPxьu4^A@׃KAF}'#('I8(; `hLv49Z~)I8HI'$Q)sqA>+ғ&3 '@{P>zsH Cg4v#(9G#4zP9~ZCҎ}hJG4:Qў=ҎuNJG4sFA>ߚ;P=#8֔(M.1A(dc3ȤisFHq@RGa'KgGj1ϵ4gAR:Qю)H' J9<<֌(M/{R /ZCtgRqHxM/~vFO4G(s@ 旐:1GiqAⓧ>gjLsҎhNis^i@M9y@KJyi20(Z0yI\q"z(=9@:=\Iɥ_Bi٧xF9-&< J\(cPF:u&q`4c4Or '?)(IK׭ ҁHFOJ\ҁ@A擐(HAhJIG'J;iÚ EGJ^4uRQ(O(P9w:~)8(ќqFyyF(wE&vtތRb(M(IMޣ9{A(>iqAރh/|b/Q&={⓿.1ӽh&~= RI{PyHzuHF{PE/CK֓8Qӊ3J?:@zKLzQw@#9掇3/8PG2zP8֗&hJ?9fg>cQ}Rxɧ&(K'4<ѷt.1&;RPFsIi@np{џʗcҞ)QyH>JwnzSg>`q9Rv~h=x<A'=:IJ֎{c&3`&qR9t4u4=c'ڔړh|G84PFh4dTu?ރ'nihP0 K'M#:j\gF8G~JNsKG$~4Z\{wgJ0G4Խ:Rf(291G> 3zQF=zPF:\u;g9=q(dc.@OJ94%fAN}1;RfwQ_J@}E)CךsAʓriy NH9)@jNNr)::PFE h;9t ?/QҊ1}h}(}I=(jo;iOOj'nrhh1HjS蠞\bcQA$4hGҞxҎAhwHG~)'/֓RIz^Jj1&yA=J94`}=2wK@掇4HKNJsS@izf:A&u<:p(G?0i{cހ3s=iJAAs@L=)8ϵJE&8Z)zRg?!@.J" \Qߊ(8'ϭ(PxGzJB~Aiis=):KޛJ͊RM ң<#ތIQȣ恓֏ƌsA.=1Gc Qߌs@C.0)(GC4Gԃ4zK((fRs@u1J=8 \{q3c(AKғGϥqɤy'n=h`ip{xQϠPG^zJzPAyh֔Z9ҐZ_’df=cPGC^g)ȣj@ ;~擜4( h\Rڃ֐t{Q;Qގz{_409KsO%'.ɣ4cuZoM.0@.hN2i;4rzzg֌tڐN{Qq׵ڎ8ʁւ=:Nz34ԝ;8aF:s9KZ>R}J3~t掼ғ֎4h/84^i22:u1E%'4&T 9Ґ QvɣPs*L g5*2qIdhϥ(Rw֌gԜғhgKۥ 9gsiy4t'йA"R8Fy>d(w&N9vs֗?ϥG^2)ndJ =(1J$L@A')})=p)F9Qh@sFH8

=h83AaIߵ)=8җNi4t@dJc#'KMKG9Խ3ڎZ\RIZ3aG'J:ϥ$Ki> `Fi>tRqA=E'9ށ@J^1ɡFlPx B9uA*I߁@⁃F(Ҟ ZS1I϶(lu.=Gz;IIzv~ޟz1K= #B…(=(' P=):◌RqCKސ~4ph ㎴KhzB~`y4sIj^zcPzh(?2vM4v9iizgs:( 4};4cjAJ9=zP:ўi{w~h$/c7<=3^@I4ԙ&֐ԦN룜 r:SIqOZ9#ҔpzF'"q֖ץ4xfNqFhKs@K4tJ<i#9i:)HނQ׊\):zsڅ㌚3iO?Z:h=(!i@1Iގ){Ru4f4jNҗuGNs@z^{RqK1@I&}8F~{{RsF'RxJ1KǭRcӥ8:{Rf!=(zRڗƊ:QRg.ph4@4qFx9A'B?-I҂zQGSI=zc{g-Kj${P&4׃J8CA!<cGK۵ ӽ)8ǽGl>`;џJ;zR ^6z zR)GZZR2=hQ)x29/SHz/=(yI{Z4MM:QEJx"3GZLz攌 ~gގ f9#("Ҍ`J=hK׭&I=1@RiG9w8v򣿶iĎϯJ_a֓.q !<Ҏi::Q/'SQJ\FqZ8ϭځ^s֎2MI^{zҀGҐO7Ҝ Qь44zA@F@҃Z('Hr:Ғ1ӟjJNAGz1gr8/Rg(Glq'.xG?Z;jJ\Q1&1P;R(NFZ`PxRgzGN  8 K֎E)?6?Z zEc< ǥځ"JqN~(={<&=hiGIQՇ)SxoќҐ)3Q֓G^wK1IތQڗQE.x4?SӊN){ta@hw^)9wzJBsҌ砣 gғdQSJ}=y>R:zv.;RƒE(GJ3֎@:z;)iKsڌ}3F;=zю9G><89Iޗ&N8J=(g'dsF3;RR{QۓMpҎ?#Gz? 1&9&;r0hTF(N(ޝ9ȣMR RN(׊1KE4.1w'4iG)(֌sKސ34 g=RhEOz ڔg2){Iǵ&8օ9=(&ր:i1h=isR}M.qAq@旎ӈ҃Ƞd)A@Kvy/N(=G>ܜ\ڃA? ^s(tvFH/S8IɤN;RM3٠gҌ~TFxҕ =9Hqi{bRqF1֍ߍ.OZLڔ >J3phq@'8FA=);t=⎣4t>Ԙ4 4lP ڌҁ>89{q'j;Ҏ?B (4֐ QӨ4{ќRs׵(sv;{Rtg g4188\QԚQhzR6֌nPNCJ0'` K1֌PzI:Ҍ?6;Qޗ(4rFMҁAzRc^HԃQ})p@4bGCGSӟjChcG#8QK AƁڃK۵'@c=(JΡr~g8@ғ٣y@r(h8G?CAɥ'NԾNh>wiL(^h9Ku @ҏ㱥3Is()rhy zt掿ZLwK{Fp~g#;RsAK84`x#/Z3Q44iǥ'AԹi:}iN;zA=}!< : ? ڏA#=E(ғsKG֓))zRt4A:hRwJ9GG4qF/|s@֒s֌hiOq &pqN< qր=i:/jPGaHqь\{cK@ N18Өzu?ʌd/i挌R:o8ɥt^i(s4c=r1ȢnzZJ);(ir3Gtq'hZ03IyJ =ipM(=9GgNGqA zSAZ֌>ԝizt'"iAh>wuEzQ.)?(cށRzqG}i{SHJPrN)(Ru:sGNKIs_ҕz4sI׊:KA9`׵&Fh4{QGls:j8?Z:iAv@4RG4zzzP1K:#'^zJ9)2Jf4g~wtzsKϽ!4)>Ԥs@h<c2hv4M8ڔt4(=8O4qJ}z ><sKIZQ1K߁IօF3'K4vRG4zRg4b&(ǽ'4J9ZP8r)Ӈj9?JP)1KMwGLр&RNiz0G'(9x7qj( FQɠniyI9яIތсu:bdP=}Qi{4x=()O֎3ލI^iH(;PI⓷=h1 OZ:w:Ғ{P<}Ƿ4'|Rg$qKM(J=iJ89N)}(ȠP2yIz֐g8z\c GL֗=ycj='lqzg#"`fth'SAю188G֔nJNOnz94%(FhfҐ@◚J@ =iy)NxG?Z)jQF9ؠJ44vsۭ. %hڎ G|ޔsA/^!g'gƁ>ԝsFzbG4֌qZҔcbAg<\fpxh#:\/==Jyb4)vс;c4т:P=qΗ&ƁzLzҞ~cNs9#ڊ\LhIx=)Hށz1sHG|@{Q1AF=*P};ZShZLQJF~!Pi@ RJ8@OaGj jR(ҁڃ=(=ғzf4=A4?_E/ ^s|t@JIqK4wROwR{gP:8<$^G4zR ޔi9v9(=lRt8QzQ@(KsGGCҌړ4wEixIJ}GOJCF=Fyu'P? =qGHNp=hCJҗQڎԝ:Rގsڗ!R)^hu&G#IAϩJ:bCh$Q(9ӁHr~c=iqg>ؤPq֗ސA.8ONJQޔh>`47~(ю=)y4cLsIߥ/֎Z@1ڂzbu擜vyPz QJ9Pz R:(=8t:ڐhn{Q3F3g u*A֎Iht`vsF2zJGjCқޝGcނ;=!Z^ztgfAi:c;!JgAM8{SFxG\fяƏJ:E&x(qJxrz^9$J:-#dҞzQҁFh&SAKHF;:9ץ(HNM/9'JCҌ 8sH=9 ju&35>qF:)G&}(:Qߎ(Ҟ4&>Z08I4qҁj84g]RRRr(@9GZ_t(=  z21=sK9'=H/n:PGQ֐hTQ"= =){uϮizz; {h4~TKpi3J3u旷8p}i;ьwNfϽ&HҗbӑJ 4I8Kқ1Q@hq֓## Qۊ:h#=h3ڌ4>3_(g֐`/)Ҕ`Rtw(cN{Ҏyu)HzGz1HNx:Qrx#('/^֌qG8!4)Gnv9=hq^):g41V/OqGj8y"h'.8ғ')p9x&F1G9dsF3RG\ \fPrpizg=A $ Lt;փ=:7h=ix#?f cqJ: Nz@&J=8 #Lf9惌dJ !9׊^I'(sւwQE): w8v8JP8'ZAJpGZPh;R0qQ;R:(/jCҎt&'Rzu3KڌqJN:s3iJ3)<Ѻi=ޗuG~g֏j^E'qi֗$zRc9)䎔;%#hK =( L3SQ=(z9i}4}擧z_zQG~vF)p}i8K{R89.p:jLu49ϭ)E.&xR1IO7◥w(=hg=p)ztѓbZ:ґi9@ڗ#bt{ъ2@RG_7:ғNi{cI@J'iq"F48c4#^z=F4vvr1AsGs(A` _JONJ Q\ 498⒜N8('S֔Z2)9PGjL3ڃ4J3NԀqƗoh=4f)zsځ)Fyсڗ֓4z9 SSO(==J )hF;ьs.sE!?ҖHNi84֓/lQz\Ir8xⓡ`(>ߚ;ь{Qߎhނ9pq;P=hIʔd:Rrp(Ґ1I_aMtZSRHznpO4`cI$J1ߥ!zt/OƐKΚ@OzH9c#(t#p8҅gx,s@n;RB)xǽ&3ސuh'Rg-c3(g4``8@i8/QM:KN)8ރi;/`D>dc/ё<3C`ړ(>s)AP=)Aӥ$4cڔt'IǥK /sdcZS@ތҜʔ~t@4)1iAA֌Qҗ֎PO&1/z;ri??HdPG4֎(x!4i^yiE&1Izq(3G4{ѻfu׭&=8ۚNNzfԸSIn(RFA@^A#x?Z#sGoJCp^y=)[ #qӚ9@S⓶sւ:`i@ZNiҎ(Ҏcj\sI:h<:Qۥ&0(.3OǚI{RG>{s)GJCJ'(֓}i~TK7;RP.1Ni{udu@"J4c03H*^?Iڂ1Ґp.zJi:@#K2J8F3jAJO4t\ Ozp&y<R):RZ93\A=Qh(zZ}:'ҔcR zSZoAKEz^FrhG׽'*yA4ipq4cޗց4"9{h=hݚ^RsFOʗhzQAp4u ZFZwzCzPzu4֑G/a\d M.)2qF;ю8<ґIڗьzg/=h=@cގ֗N;R*\g^sI҂1<ړ'g:^(KڛK(ځsF("PyA9'J^sA;K '4$RsBs9d{z擶(9#AƝIJPJ8GIPp}i< ^ "4`'ցgR@J2}ڌNI)\ހy}hۓqG_җ$tz@&=8Sv@Kޏ‚}hE'Siނ3(M8HO('R(Rc8Fʅנ{ўE.E֐Q(>P>}3KGn8(!ph8"P[EE ml P3:R ґ\b ((9ǽ.88y{Ru/jAGNhzAבSi? ҂y$d=F?9G8^ 4 j\b 894d=i0sN'$ qAf=iҏSڎ7ޗ$q^is@x= yEj9ԧ' Prj;u'қi{RlG2(9H9iy&OaA)3'ZSH8AJ1ך1J1j:Nh":9◿J4qA4 '~z{RdqO'E4r3L~QOj4KڐsFx"R(/AxϽ 9h43)p3Oƃ@QMF?ɤߍ|b iph(t BHP3g)|RfQ8JN3QNsKQzZ1ONqhKL (ɤg@/J1E8R`uGqGuSNzRHx((ON0{t8'ZLrh=)yhG{Q;t QA4\`uc'=x⁎QE'&iN})9ځK҃ CHx^c"&Rw4)^ri+E(AAP=]R;Rz@3+)JA9 I:(isQR{3QQ8t֗4sRr`Ҏgzځ #=/#$ ~INc? 4uM *zJSG)0Ni9/J{:zA ;RڛKAh(8փ׭r)q 'C.F?JzzҒ:b:;P=GP:z瞟ȠMҌRΗ&O~ўR1H8gz\RGu4((:Jc==(ihR\{Q)G4sJ=h>杷N F)j1OJ011h'^Ԅ`ь`) ҌRizhךOF8f~vGqh&GHxF1?J^Ly=({Rf$0sgғ8G`IzQh'iGK=O!a;Hhɤ=zQQ␒y4`fF8Ps{ў0hTg8h+Iq.82i88hў((`q\sϽƓ B_z\9Ԁs=i:PqKL*"p{Ҍ44ԾR'AEjSIG|wZB2yK )\wlR&q3Jy4iqKۚOaJ?'Cޗri}ss@FqրEzR_ғ{RsKi)@))1~01H>pO4bB90x&4)J:E.1&~'ҐucZ(ZLsF?T=;R>y Q~4~cPr;:gh'zғi148" f(E' q@/J D2{tqGj18"RZ9qGAKשj>JN )@KxZ\cgvu8w9ǵMҞ :bacFr)sޓ wQqKh"=M.8 r8HG9sך9挌q@ݩNq/J^(nc\~4v#tgӚ^hJtvSs\9棡⟀iB2) .)xJ#;e*=:6S4':QJBtdϯ(#HZ6M+G&0i1zRzSO_ji2;Ru4Rb=84t'A By4 c֗1IҗL4v(q1(s TIF{G|Pzu@){ Ⓦ4E'f48t=(ړ8qI4Ҏ3֔SHRHqڃڌc޴^hrsE'sJ:4Au4)N@zhHx$ƏA@Ҋ~i8hzQEAF(@Fxⓥ:q 3G9٣#("sҔw◩i8sK ҜuR-7R~ЌQ@# Q8z{t '4ӥ {Ҏiʎ֎M8GJ9L_jC֗=`wLQ\Qzd^ZZC@&)Nx掴v4):hǥ;4}{)zsGQ}ix{@҃cⓡR sZ\P94zPF>cR8T {3qQG֐:Q:A!㸥)=sN; ҜSy<GJr>&юQ9p(OӼzuU zUsԥ8ր)J`ێԅr9TcqҢ+h`ңLlFS]pr)6QȦzgIB=zPF(>› ; sMh84ړڗgjZ^(9QNgJA_&3GN($3ǵ!iAr) 9NqOj9$"@8Z;ғLP{RtϥzRz@84tsJ4x<`vތ9QR)ɥ/$R=qIzisGO=y>٠w izAȣ8'$9m<Nю4=<&u'${J: 4^ԀGS@Jx}hZzTVR"S4I1@+yg␦3n@87SsL)rr8֙i69$`0Ozh!b}J;4sF #u4(⒀sF0i.)#ߚR9GҐpy{R) '`b2yz2;NԹy$I4vyKIܜQڃ9 t LcPGCIR>)0sJ1ړ4ʀNh#=h٨(=q@&N}hݞ1zsJh ^J)sځӊN-JݨZ;G_Gz^1ސr=((9AE/=9(<@F2yt34֏Z^M8\Qޗ&}KtirsG'8Nϥ.G=>g4t▗qL 9ALRP{QF(sJO .rFix'ڔg8)qP;o9UzRtTgx8 SRޜI6jhzӊ=jEZ|Ԇ1dqDLX䇚QPy`z$Uq)D:QHH{8?Z:I>## 8=M4g:?f&zQў:Rdpi38Jy@ўŒH94 :z~f9 984N3=AKߥ RsR z1j7sF:Nڔu&yKPy)9b94}j.h84)c^iI3I/^`ќRc^1Rih @(ߦiå'Cԧ7$)Gz")HȤ=8 88ȡGi{S@iI3GךQAwǽ-Q|>/KNǜR^)9Fp(tqAb9␌:c4cP)< S@/=Qތv=(E)րqQ恃֗x旮N{QiH ӎ:RcP8QGFrqG֔M#R)}(cGzF=3K4w);tww&GZ\p3J-)Rc&ҝ'Srj@*I5jUSSNVdw#_VJ ; qV#`ZS-Y0B3ҤxrjB=({p@z-ӏJ> ;UF4/Ub1QMşA*LdNj)DFG=*R0Px֣HM zRjc.MN3I/"#փC)3i{}h')qM旌sGcLch)pzF=)OB3(*h u4E~&03@;)8G8P{zG#<揥48(s : 9⎘1z] ~TZ攊1%=b(HFs=h QhF:ZNNi~dJZo4ciOn@iHڐJ4 v)F9A?JpR/#*@94*qc1Sr{*DYUZ(ng u54qEXs*h@<.HR*!h^)sLtth2HUAPJ"Oly+Q^*FUrMFѐ*"Td?Dõ4ZiSH!n i1GZ: nIGn)9 x{ 1Kǭ%8?ŚNhTdIy4iI~4`:qRzRނ{ҏGcΓ=J8z=)Z}O=H8hSJ9$P(8f}ҎhzR>Q2x44'94)h=(֗#i0(ɥ.;S QҞ5 뚝z{ѓ\Հ:jCN[ WڥqbM <_gr:T6=z dڂ=g޴@?:4=iGҐ}Ry"Ru籥(z@֐=<}3Hrx4F0F:R44 is)A$SAIߊL u<9KMKqH qI{R`SH=/ԌRj;J:ސ}iqE y>掆8chOZ Խ1yގ{Eҗ9 CA ҚP}CP?*N1Q0oҫJc| T[GfP U}< 2 $+Qdf@ET)PJҫjy89ȦM'aAJpM94J`uqc"8MRB^994u/SHF 01Is /J2 :j: LRqGQ3@Kޓ(d10(=hN( { o5mc*{TVV,4qzTY>KUB;o$4()MNRI48桐rs06˃LuUb< QJ#֡? UIcU9UixmVu5]]ޡ#ޢa084=) {S1kK4pގFy)~)N(Kۭ&s8(h1Ii(#h:RŽ=hhP1u44֗8u$Qj4j29挌 iF)z1zRb_ʎjB1ӭ; q)OJ^P0?.ⓥsE 3ގsIcG3Q=((qM4S}J4:Qӵ>Q1J8ŒbcGJ9җR~h'ӽ(^:CA)٠c zB28qɦw'CG9/ր0qF1R G4G8Kc&@)HgH:KqGz?ΗNр_‚hx4cޗ˞=i@ 8yP2 9Tsȫ *C'ޮ銻^thیjҎjh1׊5'4KYjxȩDX>:E8sRM4Cԣ$tGZgZ9dfdsjҁǥ'8Ϯ)A9n4I.G&110I4Afґh4dJ)zJzH3)) u4r(H1Jp ⎇g"'~Թ8# ߍ.>Z1 4cigRqڐs֗g9IE(;Ҕu PIhI .0hϥ((qF}hG4"sC׃GQI֔!擊Qv{cNҀ33ץ9I#ސu Sޙ׎œqH4KHz>J=JLxNb(c9E_ZLRQi8JGi P8)x֎)1ғFAPy"`uhcސH)Hȣғw@OG_—Qђ(i{Q9ryu4g'.8:{y4s@G>{4isOHGJZRxi݀g#4 8/֓=)z(=h/zLc:nNzR;rGOzSԃJqSҧN*\Uz5[Z1Z tU1'5iSӥX?j#=)\ Қi8~v4)<уPrqAvp)A.zSEQ8H83h֗f4`+RA/Nh֎)9)@h')O&1J92Z)ޛRցҎ'^qhcғFI9Q9qڜނz3isy$"tqIv>tj0s֗j 4})q֎4N(Kӭ/iA9 < fUSKpMLbDKj5玝@UvЏZUnE[V"#=jmXb25>сVQF1ssSynEڡX5PylWD gQ=zLC.FsPzC5 *=y5JL׊>NyTXUf9x4R/|{QӑHO):R(?14Nj<҃@4OӃGIjJLN?&1G~)ۭ4zSރKHsޗh''ށ#jPsG~q֣/J2$gx('jsA }hF(=c^Ì{sKR(- #җ:)IZfv{ 9pj9Xcs&UȨH9BcJ*ž}*.}; *@ÞMB?F{S 0jF^9j:SON҃>㠠 iW'^s@)q^GRRbp)HڎMx4KҚ{ ^bi G֌ʃF((ޜb6q@ރQ@5=_—)3ґ@J&rh)GB@K֛ޜ9cj1K:SqR1JF{Rxɠq֎ҏz/JNsKQց9R2)A<~Hp;G_j80 Vf9SPJFjvBXBޢsT~zU+:N{G U0jבL2*6M9u4sNq֛OZFK4HzMRM)>hjM)'>)8:^h4ތCsގv"/L4ҐRIi~JsIߚC(8bw1ޏz:挏OΎ1F3H:sKڌq=Γ&A394gҔ` =?j.zPFƏz?iARϯG8F@Px8҃( x4Ζ4$RIך:izt(@Kփ=ցJzQLc/|Q߸-(?GA4Z\>zRsRh4p98J:Q}(T:bu#+zTJ&|DҪȣ#E㊮TjUr T/Q7]8C!;HJFTooN*Sgr:g9j6:sQ7 Li=# sMy>(=HHA>擭/NuT0Ru( Z^{RgҎrx4>4җ=J )zuI>^)>HI@Ҏ{4qF)1@4GlQ=8ph@z^@҂}GԠrx,QF;vAis!J>JH(g>r(F?*:Q &is4s)Gi3O(=r)OL۞1@4()sJL{т~c4)}g&8$Fpi'Kgc!'曎4Aw(:Z GGҌh'/~ё(&:LsSҐQ@94gsqIH9ь8s(H RGQVc=OAqn'քN@օqWCZj`[R0*}ҭ.:ՈzGL81ϵJߍ)\7Z{-5r4y,sڣ=j2o5 i!UOo/ Y9MWvڢfz!@j<}*U}?*֣?tgϽ'MZNE1#'qGҚsGHO4ϭN)1{RJ:.3/n'sJyMӹ`IJ;tEҌPIgq8)@J3onONsNҐ>cuaJ0;fd:sڗFxqF)z@'Czץ/$NZ\IE/AI J:qDݨhKQ4vG׭#'4/J3AGAFj3G#GZwHF9z=h);Pxt"i@ȠrOzR9󞸥ǵR)GLJ:(ϥ'hKǧ>vI^4cO&Rzci1i÷z3dcQ0 Pzbh)G^iyJ39Ny➸@:Ғ:Rt4y9r;z:\}i:}(?:1K{SӔzԋOԪAJ6AQZ`֮@^IڦPjuѶ3VN1Shc I52͜z4LINyC&ZkD_ٸQ>1UQI_:UyZpFyg֪N*x眜Gnz,ƫ`QrxjBZo|c'M'KM<4 HyьvvjS8989ё҂yd(4/8hOZ8I SvsGG48hF޴d8E(74"8=)çOA){ڎ2ARnȦI9JA=i:u N\ⓌGGEg4b3EԘLiO{Ғ3J94G@'8"} riAɩMc?`VW#qǭ]Z?e갧VutS58/GdI֎Z:sA/Zh)xRKtzR3ւ)q)7~`3J:RcO/JxaJ)w8oZctQ֢=}j7'PLǩQFGҢ,yDO(5JIsyrVWMSw1PHG֫9N*'P^ÞsI:sM8q=E!9NGn:QI}89sp{PFh F=84qIx{9ȤZS֎r(=F)h?ΌZ =4tnQqF0OLyJ3HqQ9"xZ;q(>){R`fփҁy)JO?9i{fh{QK);ӽ&Nbǽ')GҖ5ޔZi?Zpݩ랹RjT=;Մ9fCM,\TmvQZ/֢$.:!FsT-ӵVZ#U$ I:1둚\Qp="s?4gBxzԄq!4>9&N&0x9.GP)9ryю:ҌHI'K)sA=F?Ƃ~Q>g=)GB(:hџΎ ׯZCn(JOi8Q׵&rzPz{R)fMT@ɠj?'$v- Z=F /֎(( Nu \hxP A Q=(A8Esր=)F@sҎcށΌc1KG&ܞzRTɠ{P1PHzGS14GS~iqN@=(=zpiAg#8Qǥ/ҁ֔u>G"8Ҏt=xTߝ=HTõL3y֬Î?:*njL֮*g=qVWOL{THTcޥSqO Aߍ)ryϽփG\RS\i0 (4 xҎ(S&3jxr1*3'4Q9Bc-qUd*j$޿U^85Y뚮(Ri1KӓI(Ԅr(01Mb>\QhNh}1Ahhih9ZL} /=JAI㩥'i3QȥI>Z1CPsCp3F8HO΂)}(OaҗNI:bj4֓) hԆLddo3sQ}1PjUgpGUfUY檻qUDǜ,NI5Q4M#4bZi9h$:ni} 4I8#SdRqP_jOK#zNphtG48Pq(֓٣9Rz=:{zbPG '҃(22(#'~ CKރzъBzQ֐z>JxIъCj1ʌgx(djL`⓽/Cրg=I~t>J^ب:rii:{QǽzO/~xGJ\PGh(G>iwt<#FN2)z@y(ނqG^3H(4J`QFqF3GzwIHG4gF߽1N`b}hȣ4sR}(!<ҁgF8Sv i((hj4֔qH9uތqKHFqQFi@'ڐL)xhR< PGE(#Ґx7\;֌1׭ڗ:SrqzK)Vփތ~R`zK 8t9)G9Q'N4Qړ/>_ZNJ!֗F;Gn< NQ>iG@>旧jCzF11FNGqFIHzP=IK \sIK(JL{P3KhfiNzRgFH})~g8sEJzv@hphJO83G~:LsڌKQ( tsKOƎNԼӽ҃NH4njP*0jEn٩UjtldT:Ԫx0a44sE<1Jp';=Ly8H``~M1MFgyLi8Z_ۊ֢y20*"aQsQ&cCSqH4JBRzހzrF(FiBhiz.i=!uBI43֗'IPz)? \s<wRKA9G4J9ǭ4u9IzsJ0sڀ?I.xgӱړ4Jsv=h8A$;Piz&s֌'4}h(4ڀOjn9.Z!Q3H1GғqFqFsGisHz3J &GS d ;sFy}@qF{G9G8ތ`zӇ)3ɤ䎴w8@>Ԁ҃3 .}@ޣ&N1!HH&9$n>sIJ G pyH0zG|#׊CsK&FhF9Kh ;i9x_ΌgQQ:ўGZ3ǵcpir4wf$b84 Nw?@yԽ;(E#9'o(sS4Iњ9?SI)si;M48>2փ(QLh#*8b(>~4w/.1z98qGZSIc9SGqJzQ@\ ^~4֎ w(#>ip )qH(.2)g/jsFNh<ѻ'◧J=;8@&I}1NRm旚:lzRSqJ ;P9=Ӂjp#ӳp riڞE=M=[ԡ985"˃֞<Ԃ^zԂa7Ӽ Ӽ=D?/yM> 1~*&aS3Qzi֢bAȦyJi'm4ޛRg9t9!擧ҎI4q dF=9 _'AP=zҚ&4sEƓP0)}8.r '^^)@i[ҎFy搊;GASHOt1ARGlf(8Mh8FOjRu_֎; oK1F9?63G&Nis/Q'zLҜ LNisHzGcZ\`h҂jLҏGGZ){RdtۭϥpMZLqޗ))AhQQ4Ophn:Sץ'H?; {иih^h#ȥqF;掔wHJw@}&yS4r}ÓNRA&֗߃T~ߕ4y'0~t<`8)ҚI49Ƞg.ti,}(g&Qۚn1H ~4 9(4FO(<)w82IztJ23ҐsqNstj'jElw~)9GhMqN=BqHOG@&4@4`'j( FOj=҃!<CJ:`<: SȤJ3(=xҐ{J:RGGZ(ڌ~GZ^ߍ c4g&tHrM/ZByqFpqSրsAtq=&}R(8<曟JQ@<ҌcQP;g Rh=OJNzRg4҃֌4vQ;I^hzFQǵ.}sIJ?ZC.xiH; .iS!;>`Fh(8ri)zP9{RKJzӸR`1ʞ:qK)A8JP)ygҀiQ83֔7z~^:R3w&N)L\S4i7fi >):q@HuA=iTFGzNi1&4֓4H(QR~ M'SZS=i?}9I"f8R)i3F:bR`JI8);R .3`٠sGCKiE-'JQzP8<ѓڂNzA&tOJnM݃ڗ?h֐?!>fx擎sIKMK): 1FOL R}dԔgsE&''<{Ldg^sHz"P}i:ZAK;i2E8ҔZ=A's֓(Ϯh=hsA9F1ޓz1 qځgҔu<QxcבKZ?hz3FOJE/@xJ(Ҍ~t/<({:QŒ<=hJ^1IƅJqKׯj3▌G/|*Q7gp8җp))riwsJO(o|RJw?J7q֓q֔1QȤ1i8ɤb>yjCӽ)84֌Hz}( HFFi:/OqIϵ:ZBGZ:\t9AE&h9GAHp@IKJ qHҔO٣' QҎ8E( !@>dG|IJQRqd=H/ACIx(aGNџJ18h=)2{ ^~cAKRc4r2h<g4ރ)&3F1IfA8H*1sGSQ3JzьGj\bh(84sR—!9&9u=z{bґތw94 RJO\GJ )}zRuwi~—Row{Q&qKҌRAߊS֓RRg@^PzPRFr=)qގFgJ0sF?:P(ۥj3Nb֎;9R@$⁞sNc3:PēJPzsAnx}(݁FFGJN)8~Hw`i#ΌzP}=/Q })OJ1FyFp=hR``RIJ:!z PIIӌiRQIIG>أuRz4QhK:g4f֔tO_ŒrMv␊;z:t4sތH39:R4M(ARSӓMO4df8t ғ҃ץ/JA`~Tz\ ;91M)4qZ _A=)0=NiHdP)NA{RtҎtZӺ1FK.yyARҐiq.@M$KhT~sJ=(4׊]߅E;uz^җ~t(ȥ;Z_掾=馜<⌃99iAQғh@y)lwEgڌ׿JLqɤvFyLRy 84擱ⓑz:r:P;RJ8&3ZQs֝'jS/~rx=Gq֎bߕ(- n:w<()#JN uF3NqKΌzx)\Ӊ Gj>qN4(gzQ \3M.p:qFhqI◊23I>Ғ֗tJ٠()q J0E'hi{P(rGZw {CAڎ23KA(Qڐ8F1E/RR3GA_zZ 9 JF:R wjNzRtڌ_ƔgQ@9Fy"u)\<xhԤMϠi{uל}ΔNtzRqR@nqҐOhJ;=;P}):KߚFqFy4?&iFqM KRj0;RsL}hGn0@ڎsG?Ɛ{tҗ4u=i9#>ha=(sۭ'JSi14ڜ ut9ZZOjNI>(ьR=sGZNKGSulI~dg'pzQF);R㱥bxK>wI֔8ڗRqS :sB}I?(RG/ џ΃ɠuNix&IF8ZB}){g^hъ1p ) O^Z8/lwz:NqAKΓɣ<2zq.?0>dgF2y)HP~Z' 4w旽֗JC=:sF}ڐbŒRќ@84iAbҔ3q3JO;)r3Hp=.1ޓKސ4~sǥIҁ;ZAxx<(n :@Qx8'֐)֐=.2:8#g"Ӛ1<c}h43֐Gnڂ{PsF9ϽqGdI9◀:zAbqqF1%)>bp)=(!#'j: :tvz:х88)@M&qKΒKO4ӌӇlx:qڎz_7}hRigbxi>tRt=x<8>ސњ^Qސ8`#w.1ғG#;Q4;Lҏ/N(J^>9K~q;Nh9I QwN:S`IK9֗"(R=h wJG)'\`R:R}iq&qZޥr8diG9QZNz>9⁜sG?Z_Γ1'oz^(qF܊L`zuJ(z>^)9j;Rc^&;g:py94r9H8"c9}xhс'8ERʎ)h=E'$LKhzR#&!('IК^:PN(1I=zbgގ^FFqG\);<њ\)9rpu!=?J:QFx$9▏“җ4(bj:risғ8J:ni3ߥ/`Jy@GNh4bi(ȣ^u斌Q)~>g<IKi<Ҋ\G(c@sFy>s^6ONciOZL`Ҟ})IO.9(9r1Jx @#H/z 'vN/sށsޔӆ:KRr(8=:vd23~& ?JNqJ3h=h==1sG!O֓o=iq`RPQ9Ⓜ:Pj3;Px8Bu8G9I=:s)Ai NgROjn q(曜JqsG8pI94:=ю):9K4zӊQ"=Oz88(9FiqH:Ҋ^SqAsڀF(OI4{Pi});)zAAH8KiAJ>c(>)hH3M/AZ3%/4t(ߊV֌S(474s9#h A:,wJ _ʁ(qhriyKI)qIhqHHO1K)^((FGF)zJ9xz_OZNI@>޴A4'G(ʎ?Lv(Ǿ)x)iW9"Iփȥ\zo9 GSGOJ9N=h=})JZOzL@'hԽzQG֗֊;|zgK)1(AqRhh::uZG8tǭ`┌LZ=x8aGR)pzO/Ҍq@ǵ)җLsJh4iq=(8L~tSF{. &y)9@#=)OLfցh4cG $q);sJ284 J;$f :^?*:=Rgh$RQ: ^(:GԇzSқxGCKR9ځRLҊZB掝zPOg*A:uhɤ#Gj\f81!0);<ʐzPsϮ(3ȤQۥ?ڂ;7 J{Fr(=(hw)2}֐:uHHǽ/{q@4(GozZ 8c'!ݩF1G~qRr1P2>z֏&;bq.2hu'Ž` "yϵ3Š 1I.;уj8F9wsKE&JzRԣIi@)sԇJ;t𢖂h( &=){RSzi 84w◷JoV-.>ZA9qFz(9 =\R Q&0iGhڀ=<9<^4yҎ'C֌4}h0ȠGJ^*Qu C(1G旁ڎ2z :Rbuiz=qGU◜Rg)18?$ Ҏ挒:Qޓ<ҏSEF1h早i: qF}0('uI׽/ɤ )ғȥj2):ў^=QסbH}1FhJsE&pizԜ◌ ;>g֌ Q19A#3JSM֗4Z@yg4ځ E)4gg)psINiZ^Aړ4Qϥ.:sG=)zgސdZ\ցwc4 b)?QizNG^hȠd@i3Zp!wlRi:Z^i.xSG=Z^ZA(4g#Ia!v?&iNqA8)84${P=}h^:Oj;u4ƓbQJ0y4`9FNhi=GҊ^)ǽFGzARIإz^vu'\ R4tڏj8=(CRQ: =9"uv8G/nci@>ړKڔ`s:rzPAրh;J>oRtK ۚ)x);җzQ(>J8zњ2qGA:(zR;RvcE-=JZN3x=yfހ1A@ԋC{;h9bp(ϥF1h4Qq04z3ҌP~QyR;҃tqGr;K-&}(ǽ(QuQJ:QsA Qhq*3; 8&?.xt4ϥ0h'/֐s(JqfУ;sQ)qK=cu;t=)LRJN8Ni iF&I) =OjNԧRgH :J2{Ri? \#4:QbԹ֓94j,ZPxcށJz`1Aڗvuhޔ{QǸ/ؤhE@h4֗Rs@ZP(砤 P8 ?qGF  Rv挒irsAZR~hhQ4(8 GУKъ@yԇۥ Ji1N?`PA}z<Ҏ '9J 'AI\f299"4gRbRz:4cڗ֏ 1A4fR( {Qi1$R`J33JqjNʔR ҏ(֔)9/9I{Q)qNMޔ Qߵ:Kۊ;qG4v( ё4?.8!R֓4R搌R@IJ:VI;.)JiO" c4RҔvRg'SKRc;㎴p;t$qB1GR#N`uڗ4M;(< g4@9K )s)yKvi9IךqR{(EIJQ-&Ҕr)Ҕ`R۽'N9#ޔp?(=q!&G֗zt cMҎ9J9P}@=qJ(Q QNsK)x#ړzQJSӎRI֗h= NzQҚ>}(()L84ޗ/(>LQJZJCRGzA֔ t2=8^(ZV3-Z  wsv:RH3KҎxM/J@(hJ9#4gRS=(){ڎ&F}hFxI:\cGnh?B=( vAt~ =Q֐ZR;rzRsQzqKufI֓u=ii?Z18)Oh9J3Kғ-q@8v⒗Kڏ4w( ќ%朽) h)y84j1\RQ(9#u4u=('z^hҐw(҃w4tRr:t :Z֔ c#֔`&GdI;i2OnhO֗uG_u<z2sOZSɣQRuzґZNHKSG$g(ⓌfgR!==&9f4t=q@4RqJM02\gH};Ҟt^qA$cLNb1 x4)3A8րA4J:SRdg4A> : 8:RR@4q֓uGRR4g)0?G4KG ;g9;:jh= 0hM7J\4P3(hqF(9KQ#4f (ZOjCK):j 'S8j1Ӛ>q@(қsS8~G^أNbLsH /49'^EZE(4isz=HzҀ940isZ)O\94q@ȠgҖ.3IAKKӽ'zQӭ'\ft(qIӌҊ^H= )9QqF8sAJ ;sF=(ޓ3hE Ҏإ@4'4i@9H}Q҃RsFOKNxKIq=M'jQК::֏lP:R:R?QҐA4 zъ\LPpFh(/Z?.iOZpǡ'sK)qRҞE=hM1c:Q ^4~4ϭ/x4=iO@t#HOaJ0>Q@(J8z@;>ؤFr0M'Cɣ(s(Q:QғKw4hM/z4( w.E!4Qނs)9q(4)xhMǷ4s.1)PqF? : /LQhqځI4) )M!J:1F0:ӞԀd4pN)q)=v2HqZ3 &3h@ zȣw&3J1L:Ҟ)RьRt4t 4Rz&/L{PA!JM#&Ú ==yJRxfl@sӵKۥ(ɤ8 z8یQ9JNҊ:(FM)(J RN }@=4uhH3Q֗Kގ֎=i=);QJ* E/{f})s h'z(R'piIIyKGgJɤ8RGb;izwCҊ2(֐qKzLN(( qHGzQiKRc (9F9N(8?j? _Nhwi^MKAH:f4 H>j)}&iG#)=Mqץ 4 ){w&rN9qڌҎ=hzގ'CZ\`挃9gzo~dɤ4F3hG Rthn֎gғ/jh^izg4t")3ё@8ޗ gIR8}y4g41IK}h'4gڎ3FsHzҞzP1ӽ'p)84zPޙRzz{Nzړ/JL^ݩ1^}юEfi;tGu4J?QyIJpZ(3(?PzҞ3q88`R3IB}~g:tGNr}8psGqFq!<38=Rp: /oJNʌ<сAH q-g4zR`{u.yHyJ(旯֓4~1Z1R :(i;юOJ3h~J^c֐Q ֎ԃޔJJ?L ; gh4*PyTg/ZL{sI8R*^җIOցPz(J):GKQގv.Fi#TzRt=iGAh9F8KKޟ4c9/~*7v}iO`F)}isJ9ZړiyR K( GF(◓iZ^@'$ 9R2sAF{@ƂfqHI(ќҟRE'z\K~4g4=zJOjhZ^ԜC4J=)9F?/J9PO͎P#ю)#3)tuɤ'$vi^I֐^ԜRc4uZyIi 9(oz;P8I18g4OZAR{Rbb3&shbMQҎGғE;# N٣>b{rOJy4cz:^c֎c)('>u: \zc)z@2h>׽)A4 ;Fh4c'^)O!ғuGJ^JIޔtiA撗H&.{bRsH9/{Ԟi{sIޗ9'ҜR~\{Rw#֗4fӚ#OƎiAדJ (#03֚E;< C֗RGNiɥg;dfF:Qۥ7c_AAfpi;i2q@4~(>s֏z^t)v4phw2i&iӻ!RQNzQӚnc棊=*(#J^Ԙ{8ǥڏa F:G tv#i:gځւxKv('/\f&isA# ?AISxҞg4ɥ49t"2qAR( &q@wHx@F6H(=(HzGAɠt<;Rt.s֓⎽猊^z t .yϰ ?{IZ\v(8Ij3B{b4Z3J9i3K;RqRM4=(<~nI ԽE!JG4~(J1HG(ipiN)NhƐf4q.x&M.x=EҌIwQKi:?ƂRyNs;RGҎ J^P:Qƀ;:NƎ)sJ3ю9J2sFhx`dw=w&qڗ𣱤ZQA#Aȥuiހ}LsތڗޓFsFryv4cqA< =iOG_“qK@p)3:E&9''ޓ4})sFoZ3Q4qJ^1 8(LҒ;P;ю(IP8Gr1z8bp)>R3iz N1GNi:ix1KzSO΁`I:qGʊQI R.8HGARy>qK? O4t4 r(zPxIRMJquGQF= Qץ/3Iߊ^KߥgEIG?.AfGi1F{PFz Z1GlR w=:P~sߊ}i&u=()9t4`w3K4(ᾔc AR{cF)3z}h4&0.i3-u8'=)Fq)1J;qF{PGbyc=i=isF2~)MҎczQߊ\qH?Z3HM(fZ: )ORF(=h7y1 2)G4RhG^cӞQQx{Rc掦M)AHpzQzSbԆ3z&׭֎PJ^Qސn()sK0isA=hT|Q4;QҏƌJ1KџwuR.qGwKϵ-}h?{Q~4NGJ:MN{R wQ(3KzqNi9401&(@4^vQ@ځӎgdޗ7'm;j;RzL=;RuRtHOPp 4gތќZAրGB((Խh:bGJBHGzZ:(Z(4g#^fԸh t?'"HP1ړpihKM֗ZO(ҊLKN.3F9?(9A~TsCFi} =J21ךB:R89:R3IK(=hI Q&𣅤?(8)PN qKJ_Κ9N"x:GJ^^iK)4}qAJ) Qڎvh4 8IփKPO?JR҂(4u4}.Fph>ԙF8ގRRӀ"4v@P:F{T4J0)3\ԝ3/h)0;Qҗ=MK#P;t4Ҍқ)))1Kߥ&xKGJ\P;擯C@ih:Q׵&1KQiMq!Fs (w(=)@4u(=)Z=zRS:b \t9^i=GSEsGZ(JPsɤip((84}hlNLҁގ)@&=:ҏsK֓>7PMGwh8ʗQ@&(KQQӭv3ގ⎇1ړSJAAROJ^Q'piszOj;R^)Ocp8I׭i3Rr=4QE/w<) z4`1u8ɠt>{F8=(=8c=($RF2yIR(ǧ҃hGAH>ьzPrh9m4~):{9ɥH&j(jsAR\ Z;dfqAJ_zN@}(JC(瞴fu9?Ҏ玔4fRގԹMN(9M >J;Qך (JzR4*Lr=}szKϥ'9zRhz1Z9>t 9(=覎9J4 IΝi)~^wiq1@4v㯽~RGAi14(sғ$J(!f@3F;dRiiiM 3Lp(ڐ)zPqE!^ (QIԎ(ϥqG׵/~zR΀=zQځN)qɤcȣLuq'=ip3GsLHhQ҃((Gj\RbQ4Fq:sG^“ޔQ{␏z9Ҍ)MJ^~t3E44gzLR)3Z^JS'- .8Cҗv(944hAќ ^ԟisF{Rbj;⓿#zP1֌RM)y1G@hʃ׊A/控;{Q 0}EdP lьRcE/!?/jNp /Q!>zuh1IzbtKQz;Rペ^b:A4|sJ3HG4u)q␎}QޗM S<4)ZZLsփh'$tFr:Qwip &KGj=i;Ҏ{Rp(hr3K?*zCJ:pE.i{RbPh.p('4bwuhޝjLZ1Azю;KZB3zcg>()IƐ\{w Ґ^JB2Ԡb&O"cZZ;b{QQGz64ΔzԸ4E/'^(j3җR(Ls֗ڐ)y'ڎ3F3H:)O=(#::Qӑ֎Ǝ)AF)?:Oj(<sF=iɤz1Q׾h4c=ON)4ⓩT{NPxw/Z;qh:ґZ=zQsd44KސZfÜRwpG8~gw!旨=:QI ⍽)Pj^}((@JzR`FAϭ t8G>ԧz0Ny9'4^R8۽8t(z —H9lPgw⎢I▍fJcAr=~=I94ZL=i{R3@PO=h݃ӭ8"iOPNi h)ACv)Ȥ^y)yG~PPy1FhOjZ}i)G^s@P8'"w據\=)3)H4z;zQ8_ƎQGj:sGQG֔QN4G/QIߊ\=ߚ4`9wi (掽)sIiyJLrzAZړo~uIR:RO4&2h=0 8~(>h֐yԽ &Mߊ H3By8QKi()ȣRtf&qK G {QGCҁw 'ZRz@4t&z^&dԧIqGҎRJ ⏭j;J=h/d={R=iNi=y=);P}03N0)3/J3EўGjN8J3G?!ҝڐڃ8?} j Qނ(/I;(pyA/AGjCgw=yPyE(I{Q(p1@4(8җhA=84s@GhQO.:⎆瞔qIRڎOhj^&h/IP{RJ\APy#җ3@:))q\'֎R^ԽN):Sϱisғ<QGqIK i ȥTF2zь~f^w'\wq@s֎i1\))8h#O.}8Q'ug@R >ԤP1(K3փhAȣxMz;RXJ})G.sIG|⎿Z^1Ǯ(f┞Iؤ'< \dg)$h=zP}n):j@3ޗ֔:qA8@杌}4֗E旷QRw;ь~48◯Q'~gڃQҞ;JL JzRj\fcFy֏|R4L)r=(?*PH␏J1iGJLqA4vу\gF(9c(<zwKߥ!4)j^ R 3y9"4Ix M$Q&sғ܁K֎wKސHE)Icg>tPӭ-!@֓(RZ_Z3Hx)AhZZLQ֎q֔u'~hEJJJG"Whi3NE'~u\)3S@8)sCPi3FH9QPZsJ ZG=~P8'Z? Z0Eڗ?CIN^g=NȤSHNihLr){bL1A>=0iK4{QGj3F)1Jy("(b1ҌgJ^֌zu9/{ўԃ NҗwHsڗ^hNq֝4`c3^qQFq҃ӭ.;QHxQ"I#KڐqGziqIG< \Bf RPn}hhAA#ޗ)i:Q 0s(҃h( /Z?h"FxPhPzb=)xsH?:R(NMg2{izuh IɢyrixH8KҎZ^p{Qzѐ){RR!^H⏭'NԽE!(N'qKߊj^(;Rw>QRzR R{P?Z1Glќ{sJ:qȥ1H~1@Ac/z4QIۧ4g⎼A94{~&IƗJ3(A>tKӊ cQRN*oNJJ@pqGn{hv@s9(4CGj?ZOj3@=zzs@fҌsҏz<<ғRgڗ'ץ.:bH)s4wJ"(/Ҕoz):f~sPiz⓵Fh< w:O֎qJ:wfiI1Kڎ ~u=(8I=Arx.2i95.@xJ1Ύ3֓1ޣM4j\Fs9)3K׽=hJqFƓ&xʃ&px @:9'ڗJ;ftKړ){b/O'9)q@4яZ(EgPN0yތbz990q/^(ړ>i2@p4t#8\ ֗(J34cM/xԜ Z8tt4g#)13.GnԝisGAIҟjAz3OΑHg4=)1GbsGOiqϵG&GZw|g(HE.tdbsGn(g^r(~4tdw9(9=hAI@Ec4iqIޔtq'/n zނ(9JN3Gr1Kߥ!Oj\qH9◽/Qқj}.xPyF \( zw9j\|f.= &h<)Ҍti;vcLOҔ@ރҊ:t)p{RQJ:y=p:bPF ѐq@OS@:I(Ri= BMԼ:Rcޔoz=q1KzQ4RNGjQҌK8sI&J1L 8${hϧZڌP?ZNҌgt=(yRucAF9I/FxF"/ץ&3ޔAQphtQ֎;IHzRGCF: Kړ 4t?/q1ⓜQts@/h(i8KJ1IoƏj(zqG_aKf;wIxhQx(:QJ:>ю1G;r8ހ0iyJ81RڛKP9Z(i=iyGO4KRQQ8֓4u9=sG^cP= !yGj=( /j;wF4tG8"R4zRъOʔrhsGS qڎj3KړZ(JGAf.{PxG=A(:Edڗu揯JJ Z@y^M&w稥yv>g2(98:#CKd iKZ1 Q9(9֔t88ǵE/cS/lR*PFhRt=4P8'CI4qKuAJ2;Qi3J:A9҃ӃHFAqA9qKJ9ҌsRw)20qI(0O9җҗo|zGZ9b~4sG~h*SIN(49Q(hߥzO4sN=8ʎ3/Ih=iJQAɤHsޔN9n'j;Tgv>wQ.8>߃EԴuIPqMg/R~4t=h1MԘƆhǵ(@J40qɣߞbghϵ/ld{ќ01A;R=JZ^)zQ'8vMҗRu4ގCӽ(Q֐ ;'lsGG|QɣR㎴8Ҏ`ހ{ZOJ:4{ .})'gPN)xH302=zrW3J1QzjjR{u(qR=(x 'Cqiniz8GAHn(׭)tSqz\(s֏z((EJQ(ɤ4uOhAgMڊLcLvKP8(4'ҎqHzނ('K{PxKG4}sI3KIJI8bR=Fst'?Ҕ`u4A99⓶hJRyh֣)?(z=sHOqGRIڔc%)Gޣڒ=yhXhߥ4Jqޓ4 :J4sI4Qڎzu)(P94ci=8qHF @OKҎNhQh=(9KJ?Ni}Q;qK AɥM \I(ӊ=)zI׵%Zy>d iyz)Inq(ϵi{JLJp$b(cg)zށFqFy8J=^;u<GzLJQҐP:t4=':@:w=)qqG@(})OJ@; SblRqHE(=ip:Rc=h#(8MGdzzg"3N@iG?ZN`{Rz3H9 fs(PGs@Ƞxv{Rry◁z97s@{4J_zNZ^4s@Qɠc/A4cځZ09g8Rhӿt'Z^֎{~tǵtrwcK(z?::QhǶ(> 1((>aFsIޔsGnu@H:zKЁi;vlR:O—J? NҌ探LяS.=) &=@iG>3IqZZ8IA8Qя^{zڎqMyB(zzgh)1:Q׏J3I@vJ1Z0(47Lڗ44K N){qIך:R掜f$KӎM#f9=q#֔vIcu@&9?(.Z4 .1 8;c /w'PsKۃ'41уIqKH3^ќҎF);AG(tR#4dc;{PFh< C38x'4S@9Iu?.p1NfJ^ f֗<);n94az2h@z;zRc^N)bhizRqFzQ\JfsNwAGZ1Z}FyGCߚ3s֓I(K9<ɤҎJ95()1ut<ю8-'R;PGcu 'G=(џz.87LJ\Ҍ^ԙZQr*LҊSޒqF1RJ3E'iF3GZh 'LR)qHy?JwZAy"FsFNhPpGMjL4Rw)GMj Qdf1@j4zsփfsKӠ⏭&8=(4ԣP8<o\F0)I4zќQK(9 3/>y4G?));ڗ'=(Gn:у=1ғZC֗ؠsڌs@r;QڃҒh.x>(ޖ?:(֢r&yGց֏Ž=h(4v4 RbRP=}):=(8#ǥIv8Hiz㞔w~}(J}O8 Q4zצi(F=:RS}{hRьKRFsI/^ғ#A}4CQގxڗZw)A K#:@2iǩ8'qF3G"?:\{QX/|P!$R.) .;JOւ8Rcd֗wGM(h#i1ڗQۭ'zw8):Z^ցsK֐⎴ ;HyI}yڎ RxJQ֎RsK@)3׊:d4c(ϵғ9;=i h֓Q\vJ{bQ}8)=)yiG>qEG4R:PqLdg4zc4n"٠QۊC֔b\Cڃtv(N4rh9'9PpphiG^{ qڗ=iu(/n4!ir1Kb/A8:A8Phqҗӊ?3Qށ\NM4vآׯ4 :'ݩqҏ&2y4O&⓿4փیhȠ=ҔGA@Q(ԝh^>gcRcҢ8G'KIڗq~T{QF9IE)94c֗z=()O4B=)pEhgPFhs::wڀ9@x8?I9iX(Ԥwޔvq(F;xu4уALqG8'jw^Rw&G:q9$ #4J1h:ZB3KH'OR)z4 J;M(⑺RdJ9R֎mʎ~hc֌)$i9<_掝:H7J=zp'j8=hGAJzLs^“jq@j:i0*\`M ڔst:⃊>R@4qxs7j1C֌P9>Ԥ`44PqJ@=I@=i@wzR`{◥ J9#1@;1HzKb8=1F1A3F1ց-J}{QQEv}y\RcGB/@"QP=t!A4ciGJ;P(IP=`AQQI9.3ۊAO1GzR3J^i"?:4QQzhqKc OZ\ 3Z=4 A1A/@j8=龼ӱI@is@(< 2€1֔!B$A=M/"H8Ji8KړҔqh:Qh=1C)NAINE/=h9{yƓԃRd2A#wf 1Hy=b9!FxQJ8#'Rдw\CHzR2s$ aGqFy…<qҀ3KӽޏHWzQ=)AiZSҎ8?ʌ`u@@8jvi:sGi>ڃE)^8?4U}:z3\6{f8ȥo=};hj1(!dR44Թ!#Hqz\q;Q0q<8#)GJONu=$zIڃqJ1qM<^z(@q擱9ON 0)3GEtwAQh &Ew=zcQӽ/QAB{\)zZBTւ}E&)qRzZJQFG4 :R擷`h<(JjC44JR9ɤ R4 =&sR=(chǽc'Bi@sF}9ԣg&/=i0=9{P:zAԊ0hFqF(zq4sɥڎ / QԄԸ\Q Ns֗ƃA&{RRuց9ґI (ǵ'.⎣p^w P94z02yӊ9FyG}QGE=)}<ҕsN)0r1֔h)hG8IH.:=@{PzFOj^Ph4ƎF}i0O40CJ{PZ\⎣=!Ҏ}"f(.8tL4{'N};ғԤN(j0␟z:QAiq 4(8Kގj);sڔ u>j\cy47Z3ߥ=izFE'ozSڒ4t~Z9 /=P94qh''^Qޅu֒Z;SSx?Zqq@ҁgQߊJ?/Cך_n}c9v('֎'\ 14gqw9wh=x4wOw<9P9=)vJzuԞF):})=i:?/ъN⓯x4)IRgAiqFdgӡ*?*QB98LP=hϵ%)1F8 4F9@y攎{`QҊ:Pˎ8F9<?QgO/zMҔHxҌvQȠzɣwG&ғ'84c9 3ҔSyNI8Jx)I9n;RzNޓLG␁Kh~(?JQ&=isHH 1z^R>jސ \RwKQ"1E.xzҵ&8 ^hs@4g=:)Ԝu&}c4HqGfsJ&(!ǥ(8{QG{R⁚@{ў⎜b<('R /s:v}9IxڗJ:EPx>j@y3GIG^TvGlG4R)ruAM)4h:ގFy/G^Ԅ~tUPzc҂s3֓<&99$P2F)1hh*1ҏj_jNqA) R0ZFŽh0)I擡ցќv4wh=uh(ǵQqI1KۊLԠyRc9⎔g'J q֎PRRc03Q:^أF1G҂pN):w48旜A9GRؠty()N?*0(֔IP:8恏JA^C3i:QG.1I(KBs(A4pNqIޔcj;GzL.:N4z^v⎢c?֐Z~4Ҍp(qF;h/ZN;=;)i zK ">RN{RdG^:rHj ގʁJ9"8J3H3487n)qJRh 9K$R ?8ރڐv)RRAAӺbLrGjLҞO\!҅< Z qJ{zr/jOjPG49GqގzQ)3/9G"9(Iiޔphހ Ȥ{>)3KB08Q=M(֔g<GwIӭ%KӚCIҎ;ށǭ_SiܓF;u"Z ޗ u#K4R.H4)I1AךNJ8&8JERtF{KnhJ=hbsGLz1GLɣ<{18vsH #":^Խ~sޓ9旜QɣJ(}i14cޔ8ʃsFxPO!=E)8((GZL) ]ԙɥO99~jNcߊ^y4;uGC4g'Pz sFOA@Rz:@ȣKM4Ќ҃旵!ϷJ8JylSy){Z;q@u搎IGt֏sҀ@'=:x()=zqIN9Ⓨw)G$4sKHGz 4@i 98^x!)~n(4qA4Q_F3Rt4QF(G8@4P9i1<ҚJ1ڌP1QI#b/ni{{\~b)sNҐȠށד)qZ1' 4t44c=Gz\Z=Its8K֓u9s@Tqڀ2}c>u=h4 4.81KznM;ZZ?dh(zd)2(” zC׃Kz\sHqc 8iF{iI\g( ֎1F9z1i:i*3j=IN( &S&(8Z0IIKގ4c׽ -'zMq94 !Rփ9Gz2S.F(YTv7=@u4PN;R(j6h q)/l8`g&Nփ)qG_}(QIҗv/oz1I׌R:=;\ތq_3ړ>4`wcrh:Qߚ^;R\t4zGؠch>4bRg4p;'~.1ߚAӊSuA9 `fƐR);Rh<}8'LP1GӊLq(9''|fqIҗhZ^٠=0n;Pqړނ8F9'9.0:ёڐ=:PHOlv7=(G| q4zсրsI@\jL簤<ӭ(hP9􆁓=i`d҃@AFz4gQF;Z# ڎsFhHix) y=OJ<߭d8攜ь _KONiyɤ9 Z C’v]GJ:'Z^q<<ҎO^E1JF9zLQQץ/=14gw4G@ҌgGHyJG҂9OJN&Η F1zL;@F?IڗROc (zރG88ԄwdbA֗4GA@ҁɣ8b҃Ϧ(hǠvPF?ŽFxAGZ8Iޟ9sJ qFF8dqIR4s:}hRH/z FќJ >u=iqKhJJ1!3Kӊ=t9c4`&4uK)1CM@Ҏ Lu"h)1@A4Rt8ǧҌLvh9)3pM/⃟z\GzҐZjR?Z@2(8ԣ4}:1룵ރQF((sNϵZ^ԂsKړ 6zRJLQv PM'Z^>Rc){g&} .p:P3Q=9)@M88Jq&y=<>QtGlsޗh$F3H})@4KڐE49i9=ht/?P=9⁜ҟCGQȦu(?FqPjR{bzIE/j3G^h4u9sCFNh2hHp>zўy@u@9'Ҋ94ө/LqGu&p:P2)=NZQvxh8(phpizQ@h;3\ȣ9ԟҜ:Laϥ*LsPsK8=(4q(zѻ4f֓w3@#hF /' s3zr=i1)8'h\{EKFȤ8">GzzJ_֓)3''Px8's:QE.qғft/Z^R◜E (4}izI88#4P}wjQIzGQQw{wj1:9Ҍϭ(8GJ38b8|ff4wNIJQϥ'nyx4ub:s)ސ)1h(c)L ^K:RQ1);M֗F@I@IJ)qǭ'җ'R#(!:uzҟփzNG'jLP@qA#4u4s1:tGnqGH9⌁-ҷoZCJG=4N?ԟΗRp1֗h7z9t!(R)qIЀiGZ9hHP)xJCbv)p3@'4I΂sIz\fJh#J3;zZ&yh=zK҂I((H=xi?T1@94vtϭ:O&(P8)=3GaF9ۥA  p){fZR;dg/SH2y8R QKۊN1P{zЊ^CG|R{^@Iќ掄d^q֓/z^4dpyzSNJN4buSN) zz C׽((a@h&/ h(4zHM-'Sґ(::8N)zsh RT@Ni>dp hz &ƔFzfhKi 8{Qz{QiN{sH\1Lg8׭%=I; N;QK3F>ZSҐQ۞q(hJ1ރh? ҏn)1^aZ^p(=)(攜P(=21@sFhQJy'|RhIiKHqڌAJ8HQGv◩␎/nwΊ: iZR1IF){掦4)ⓧ9GjC)z>Ӻ(=h(Iޔ7{џΗڔRLJyM ړ8>sz1(R')(w)p::R֓֗QЊCu989'=x:Q4t#(Q֓9KMҐ1ȣq3!.Ei\JqusIԊ;d׵ҎZ i 4g? LҌ=8:w(M!F=3Fx((Q@ɥ >~T:^:\Rt !=h})qg4ҔlP2((h4 2@֗o#ڗtGZ#hG4czQ(i8( 3N ' H<ґZO/zQxI8 QxZZLsKN(4g0isӎړn}(4ޙy#88 Rsx0 t^/E&1ȣ94zQ׵  “:N4gzRzip?3i:䓚p(#46 :NuA#Ҏ ɠI/Gԇdtӡ`qGz6sGp EQ^z#J(hiON zs&N'т::sKF(?Z:Q:~TRuKIJ09fqހGNu^ARg:Q۞ Rr=)Ӻ NiFiCKȠE-)!wn@I֌g='iMGFGH>{ǵ/)TsFx ƓJwNm?J\R`(zizHsHIsM9_ƐG4F֏3I 'g4>{PsH:tH$iu(sCi1E=␃/FE @9FOzRxR8I.qP3F(!>K&<:wZ1(9=3v4<QyKd O4uI8QK#A(( LsJ}@>t44FSI8J:(1ސ(u;f{`3\OQJOJ=(GRJ}x( gގJ;Phcw)y?4h#Ӛ^GAG Fh#I8H (luJZ:ڗ֓3G{;Ssɥ(Rў9z:ўGz?9^iF)z7ԼJCGRx1hhOZ֔IRюh#IFi{u;Khr1H޴Kv)@sF8 (3h8#!IKsڃ@#c)@ q9Gjǵb9֎GQA@;u(ڌgQj\ "1h=iHғcӚ8}hh8@4 )y9M4ch3KR{Q}۞g)Q(\tғ{Rt'"G#IPy=)1qKi=:Sp>c)3J8J94{{RsҔ?xсG ђ(=zRLhь&4J#Z9^hw^bqȠsIN8".sA;'sK#i0sK{RzԴfsO-!j>~AZ!bis@sH;ӱǭ AI8Kwt_Ni;?_֓8'Sњvi1߽8x(<)9fAF2?:R>4i /GE@G 2hGjR1Ҏ;ҁ)J8ϭ&})u F(h 8<'.x)W4ʂ:N9  iyAhɥ#dGjwjEhR(094F2i@;i;(qF2:b@u47Agi)Ǧ)s֔jCZ_֓#KQG&}(ߚ:ds;c4zNQցғ<{R?:N j4rOZN ciG'QKEG8M94(9=QS'QHAp:Ҏvb=Z0FhAڐu)Ji8NLR^4s < QQA2)(ɡzQ:Ӏ"JT8~4;sB)}9'.)1A4[KN^i~4()1^?*L{R_j0sҁJ3R擯Ls\c 8.xҎJ9I'򠌜R=(>֓9uR@8$dRt>c=)HH(PxQۭgK o'z3Z^?:A֗$}hxO~ QHFzs@p#:ъLK)1;qF8 i>(94ڗ)tczR#\Iޗ?uړA^*pxI^P(Ҁrir3tiI>Ԕ=sҗu?G`sA$Ru/lQFGjSKHt' ^FjNҌQus@{R1N(}Ҏ.( KxaZRGnw9NirizwAMɥ9( J^܌P \d^:M'~z RIQ@:L1K\0iqJ1~4.84m>ߑ@&9jҀ:s})=i♏ҔSy/֓v(i^J>wFh⃜b>sg9ɣ Nzc4gqKӯ4A$4riy&Fz~֌4y⓿Z qh@J@ҁ'{=KKh=G=h#>Ə@6M! QPr)3KNWf4c^GғȠRsIJ}1ޓrh h<8=))O"=R4Gz1K=)ӁI9vb)Oj:vh.i0:\gԙ^O{QI{SF894vȥ:q;{Sp(8ZQH=)GZ?֔o~4: : LJq—(ϭ;t?; \g(~j8vۓҀю}}q \Q=h# `0(cюi>z1.)RN ҜFuڂy1AGAGlPLQԚOΗw4v9"wwt= (KߊL '4gvi@Hs1^)q^js\sG@4hr:R z(Tg:z=h">S(4gғΗ= ⌌`f(/jpB3߭(ڔ:F8/j3JlQ=iShhۮ(qAzތcԸ.hhҝRF;~tb{)mځwc4Jv1J)1R.2h+ cP?&:zS6҆) rh#M0u>)AF0IܞcʃFq׭'sA i;Ii;OG<\яSQR1GCG8:~NOƌd8C҂xzRF1J:RaIߚqړ߿(iq)8(JL)M4ずQA'jNE4g (O@xMA94x01GjLqAqrz掟Ҏ=18s9ƌ bdi@ȥhGIȤ;4hތK߭~#KF>jS@Rv{u 3Nڎ@iO\ 1 \wzLiOK&RQ֏J>P RKPzRёdqJqA@bqך9#4#RhN)Tw/&z\ _N4$SNF޴m4=hU?; M&ޘN MÚUiGAF0iJB2) `RZ6f搊B8M=h#(Jiw`}(ǽ)I}: Py4@hA(|PzcG}9gj\ziF;g9Hs(9EZ3FZ8$Qihh#KړNGnH:c4qRwԇҗ2($cH8tM.MރCiAFrpi;Rhh){Qڌ(Gj#ځGz^(֓(ɠʌKsJFqK\ihuh#tR't.G4/'F:`~1(I攑ғ4i1Bsv9;*Ҁ8ȧS(SޔƜ1R2Þ)ا1ڜڗonhlJES@bP4ҜJW5z(+:h0R/8MLL`L {N?5SAx oIZ;tzPrx&iO^iz^P@.zɣɤH ?J 4ގrOz d4Q ҁsږ@RzNhsJ'4 Rt4yIߑGns֔GQQp)4QRhqE@#O>?{Qތ@J^L֎g<ѐis1Kjh8RI“i_!>vIf>}i{=>挎zdsK8QsHzt0)9 PO3)I Bh*JRiZ;`a@i:)ågJ4c=;R ֓ t遚3~4Q/n?4 wpi9;SLRӗRƤB)qҝqN_JP9Se(ivz {ڍ'f?LsC))A怽MFAJɕ>>c#ޓc\`A сڊZL84ڐ);84s@sAQh3H@ Pp>SJ3'O@94 @q֗ p*zv:{OLR\Rv:R8=)ʄG4*ا?CNU>R#q\ƐqK99ғ`W4'u`^yZ@ZaO=cx7!bšN{Rc<Ҝ&0hB2;Pp;Rg 4d{PRCC0)1ގJR()_Z(CH{擜@?;'Қ{t`JIbI'RF\P=hyRiҔ BqA"q@I<ҟAHxIIFt׵(/N< 瞴bi֐wKv}(㩥'&IۭEǵ%)4}izGҏj<)1H FqG&iy u)3җ =h}nwt.29(4cҎh ? њSRiy?4qKftiҗ>g4JsF84)dǥ@;֗ѻZRGZ_Hsj_'FAPOzSҌ'$);S$riGޣ4ӊp=< S{SSxx\8-;gCiS}Y"G 8{S?SHb@~3aLy*5< qMZc)A.qQɤe8`La4)E0)g)^*1=h'Ҁv֕L3ց8PcR)ti;Ӈ\HsIz^(.yCAڃ׽'CK)}i{P:?&IqGHs:REj^H49SJ{hR(ь{R~i=.pyE'9H ɠ QۥQCGN3F}Z\J(4G$u<)!h=1GI>Թ=:zѓR4/!8N< pԀqZp^BN ɩ8✫T${SssSSFqޥ02*H?QO+ti?*P4,yXIwF*#)Q=+cULxld`gHGj3A9IϥQzE(FscvȠh9@ڌw`(㑚8Z\ch8R#GKRdpsI@&hZB1ڌt Ӈ \ӇjxNf*P2)=UH8RTHJ2G<ǂ L)SyX<I٧\h\q4g $lAǥ~^ 8@'j@ǞPjNr)^֡ӧF~*=Tn43sAw3C:Sx!␏Z搎I/&)x-&;(494s@}h4;SZABQF*B3/QAA&OҔq)84 )4(IׯJf)NE Q18qzRRt8Ojny(4^;N0h#B1N6ԢIZN=h4RO4uZRE*Nu@u9H{8)s049)1ҔҎh=)2JP{c֖<): C1A)~j1Aʚiy;POl=;P>^Ԫ-1Kȥ3isOsNO"[𩇵HcG9TӚ{zʾT1 !Sy#SSNi֒KcNQqsҒX8>5ѐzS|j.GRV#>j >^D

F=h'9Pq@HhIޖRd ?gǥ7=A1Iyz杏ZJ<}*EqR*RӟzAEަTqS$g*Ő==*h;T\ sVԋ#"^$Qm)Ԉ4NyJUqAiuQ¢*'NRH>?ªx9Ux'*S=q]ۊc _ r*w'|(=33zL()N(Gqփ֓9K9?3H4rGZǹ8{b3 @9 Q~})0@掽&0hyKG'@>~Tc(Q׊OqH)x@Z)qG&qJ8aG~Mw4f擵.1H:Ҏg#:.xIp;(z:usҁ>Kۭҗ?!tRy.sF:掘֐t (xG$Fs@'8F;1R‚pzPI4(Rzv`visڃNs.s sK;ZSFy4fpxh\vE֗F=h#: :q(8`RQ84ޔ@:ASjqS3ɫ1U^Ʈć*h=Vp"/J*@1R*vb';h;T^]#JGQI4͟)5VX~adxT|15|Pz@=j 8W9Q6՘ڭ=*PjD8*帩RgISN:~t`I֝p aQ0xmq֢up*?74NY4(֗'CӚ^S@ǧ4.1@hHFiqҏ^`cH3_/~iryHOZ^ސKڊN֖bnz(N)Mގ@t9>R4cۜӀS){Nvr?IjtTpjt?֭Ơո8㊶\M&y4}E/SF8x- qAA9Q9> җ' Eu9)F7}iݩ@IHU^jTD늳UcJn {tq^յ*tje#*tPqS&ELzԉpi0HOX9LxYZ-WWQ5T2GL):gR8'P{UaV sPbJĜTL8CTOڣ~9p*6j-0Sh=)=qx'Ij84N'Sҗ4u{Q^9ҀHP1}i{qIޕ'isqH1Px=J3ʎAIGF{R81Gzi)F 3IҎF}(84tRt(=)GJNrzbp:T=JzgbAG(}yh'ʓ^ʒ(jQG~N”chߜߊ^u('Q=zOjQ~(ގzRv=h4v/SJ=sAsGq &j_j8!)s7RqJݱҊv0)="~T)cps8*@8UxS"|zU^xjiڬr(QUq[.Vu2'NbEԨҬl{TNJz柎 x^wL |" ֣8=9|u PUAG5G=*&L2sSS PJ@۱rr5Tj:{G=D>8?֣ߵFh8~dRAIޗI})җzҎtAch/@iʔI{Q0zhh?ʗzҞ/$J01@4 Ͻ!bzRҐ;ҞhҐ P:c@р3b8t}1F>n)u"qMg94g<=䎼4gjqA Fq8QEq/P(JA֗gZQFxA=aKQ8@t`1ME/Fpy);bF}4j;z\R`Rgz\Nq֐uAAԸ4isҌ掋֐t')sɥb89SzǦ*EZ=ju==jpAV#[g5n5Nj ȫc*xןjb8NjGJ#zf.Fj_/T 5HOQ L`z**3Zj6o\yZ1G֌zђ{bOZC s}h(=g֌Q֏nԜtKzR z9c"j;f86;?LiXgGoz^Z3M94iq֣֎GJSJJ^tpU5Uz8PAqj'Hק"QH2 &9J?G@7{AHhGNE&xF=h>R 料tHqצ(z\Ҟi:hZL€.qڐ(҃ @{PC9sA)>b-qHO4ⓦ)ܒh4ߵҏ֚G4QK1IҎ;Q1)8j9Q;:N}Jy8h'&Ij14cqF 4~/Z1u=(sK@<ҁHE/&)&hc< {PGz:R!r1J8'=E(1M=1i܎Rzv 㯽h)wzJy'G֎ަc8JFqr[Ҟ8KN@8S(MSVbLVR8JR< D<U;Q9Q$'1NfcEniؒ3QSr)O4t97c擦xڌ џcI(8#zbpsR=idPc;di0;v2i1)=3}ihHR Bs\`fi:Ҏ33@h=37R\u$҃)"ғ#E(<ў84ځRsJ^H{R R(9ތA<{^x!S҃H:J2z'(/&p}EgJOnt'lzbEy9ǭ'8tGl8ўؤڃڗA׭)q֐ gM\|}(x8SqK@y'':CsKhҗtѷ<Ӏ/f0jJ29B~$U\S**¦jiqS,y9ZH=jdT2*h56ÂMI d/SrCu6qnsMw=2Q^jz|Ur*'/JC"t1QJ㚯#s>U;8PRg' A&܊6P9< TNjt UG5j%kv%V\ө(aPըJm#3W#b*g犲b6_JqN qOc5֔ڡ)TR+Ҡ* X+銧,_7 GTt!C*dUb9fG)x4` &M@Z0 &Iө9Fh=3MFxƓqiM'iMǭ#:F(84`bg֎ғR▃Gn4gF3/Z9Iߊ;QۭOZQJyN֗.=0)IGAq$hZ ( >Ԕs@H(@Hpq^sF(?/h=zNE/=OO_\ޥ_ʬ(LVd3V*`qޯDUbyT`cL*FU<ը֧Ezե\ \$^*"NBx>ZD1Y) xUiT`ysUK8YwP3)ޚ>cu4!i8PN;Sy>q2rF!zw=}ܑ<SxƒzOjhN3M9E/E'zOy)GCF}hph'z^CڔsցF=yqފ#hzPON`g<њN*NA)=裡4 _4dRg=9("$PN1/LcCJNy4'9)r@Zq@QFqKށ}qJ94KttqGJSE9A=)jB9)擓KQQhݑG^ԸC4J0{R ($'N(iߍ zQNiG4){w9OH89}eVr=*x~i8Z*KWa\W"@p{^*t\e5aVyH*t*gȫ V"~)aՄq=^}AGza+)6Fz\_J N-TqҠAX8PHɪF=꼊s*6Np{ )8gNMVMR,Gjwr1I\у# 0h׌рO(qF3ށ&q$z=i{fdu79#ގ}*LR4~hB93Lf(784tuaA44\4 'SK>4HO4Q@֎Ը)#QKzJ:RւsEzсނ0( P~\ѓg}E/Aр@lrsIJH(ƀ9hҔi@8ӚL~tSϭSJsڌA49؊^3֌;Sڜ:ҁ;Sׁ*TǭJѪx۶*6pJaOX{U#*02jʌ/j1(UQqUTvNi(l֞ Lg9⑤bQ4$$s֢N;2KQ4J~UɑU| Wfj}*}3QKWj0Ttg̿1&ʝMQuZP@U'Ҡ|Qzx8$jUdP}j_2PȾUfC("> frq֨M#9Ulɪ9rjTi= Wxܞj zMڢ4ޚzIIבҐI)NORccvi0:dp(#׵Aϭ.<ݽ(f94Lch9?J:u4(AQϭ g(ޏ\:Q4җ@=i)14A'-4rN)qF'j;u)A/Z{}h4 t'zPr8Iץ'${g91Hh&CFI)GOJN=(G`qFN)8NE/zL'z9Pz;RHr(^9Fi3^{9j:)OA= ($'ԴiH84@4Qފ_ÊCJZ@ )Z?Zp=(A4:SH:֎'ۥ&}h4GZ\֐F1Kԙɤ9i=(r)߅ F{◒FzFr9FxL1N@&8'N(\ҁ}98ɥjx)9 LjE@TǷZjf+;Uz9W|OZ~aYSV#&F(ջ^yޥCsO·sOcHG?җ/ZךGqQ * 犍\wdZgDzO PQ;sPU95VFQRjj٪V D^ ~B=)I3(i:QjAIނFqHN)@ȣҀ=qG_‚1H:攎i1zў(9׭ sF?9hM !#FSUVIH^ SV7jsj֫ ~tiG9g4 2K(Q{QғiIh: Bxw)3Aցpi=Hgcs^4z):;buJ2 hh#=O4gӭ.8MΏ IqKR)1ޔO4Qq֔{NFq@!&ғ:sJ99.s;bp11L(4t> QE&0:x:F:RI:78JO4SA1'oZAZ]ZNgzQ3Py&H4ni23ޗ4KFx{P?J;t?uAgzZHzґ"RvsJ_|Qzbp9G^ixQi8烚;RMO֗=}hҁȤGSi{t?"Jj1'Kdњ;zQK)i01^i-ޔ1Nց;vyҞ:TjE;@2N UrըMj2pj?=juaJ[52KV` SԂqS;ԋڔzS(ϥ)$.)44?i!FiZ9΁bnyqAZ3ZAP:QڔsHIsQHM-%)K֌tKsFMdw=E)sQ>FOJ_Q~}8QdGSG^E)99@Rt=i;)qATu4g;ޚih9=8x.r{сH'(Qz3Px(RtK߁NStjEJtsOPy=jT yMA1=*lNjn@ئE5*7<~UGDA#Ңcz= 5 9A,43Vn qLOjIsߥUiy]gD5oQpj3֘x<i&sNMi2Ah&=N(Ґ(G=hA8E'NNGj^z4Fr'^)Ã):ր0>w ()8F8@O fHiOJ=?'z^)3Nv'4sOJs֌RyI3Fp(uZ:M擶M.:Q@,cQHAiZd`}M!?7/Iъ;tҔ})p)U({׵ 4rs1A/n)?9Eriz5^R֏KQuc>$Ҋ3G94<94)I@4QғހN=sJxqGP .iGQ@Ҝ)x9S)T֥R1֥V2>⧌}t'81Vc9f.⭨jg{Ԡ=jUl*¤OR&8}i?ZqfKIM/1iLjF5|Lvxu=Jcp:-֠#9ɪHT֪OTs#Ww>Y*lP*2Iܓ֐ўRrqHqҐcN2: ItvhN}9)FOc7`F9h~Z:LJ$9j1=iy#> 901/GUH:{FxH}J^ڐ9pӊ:qN)31GSu(K~d`Nzx)?)9Oۭ$sISӑA4{ҌSq/֎֌JAJqɠ4)3ۥd@ځx OZ^(c7(F2hKQԝO4('~4K~K(HGGch(Ӛ_J>=i9QZ\qGz^Kj01Z3uGZ;PI=Hsހ1@(h=88(.`׭&ix#ޒM'ӏ֓=h=~hAut9sDzgg4gҌZ:ќ\\POA#.qۚ2֎ގ^sAQҁփ((J^M> P3ҏJ]c挞84c֌Cg8 89u?zRpp:\h?Ǝ;Q1(>u{J(rG^)W3QNǽ8x=@qOS{ԪҥVL'X27SF#uN򩕸Ҭ+Z_$ԢN➲r 8❿+/iDˁizю}i9sJN)~(ޓ41Gzw֐qQzcGсHGsx=*@xsO8RqR3S,R֬$ulRxq(ԫ8隐\c5'7=E)4£fTl fvBzu N*#cFg8Q3Tl/&gFңqL~ʓ8)!'h{}i8 !AҌs֌q֚zQŽSG&{~~8 0P~F4RHx4/CI{KܚAlF03h9⃞(٠q RtMp>A/Q!JݣGncގz@2i{O΀I4 ZLҞ98>GA=hǡqGQך1 I\:E.?J:Q׽y3&;R4`cG!KM~(R8<4'N`4׽HsE.8y{R9j9:4)8J=9N&3ޏj^RqҞG4t^:P9-'ӭ'88z(ގ/AIG})x9ϭb1SpEO_zvpijE$zTqROxl{Ԡwp:LRG|ԁjO0Tbž&sKN%z)~ӑ(F֓=yes֘eJ:O =) &gD`j=QHsPP~xA񊌱`qL- zLNqA49sG֐O? ^=9Q94_—#ǭ:c't8р:9'zҌg&9j3i9Q ]h1裣Qh&y=I^g4 J:bKރP /cRҎi{:f 4ҌRr)hA$w/֌Q֗ҞM)H?:^(4 P;:&p}M⎃='Nsސ}ʜ:fdt:ނh;RQӎԄtTb{װ Qi{RK(4v4y?3◷jAҔR{RtcZ> $ќiH~w&QޓsGoZQ֌s'|Rg<28(}(◓Rgҗ'4u ZwO ;1ǽ<\ȧcӁ8c4s)c~nqN )O<9 ozp~0zMĴ. ;ɥOZQ'hLMfnx0ϭ3ޘ'ޘ[a<~riH@Lc)曊^8ҎqHzqҐ~4T8'ӥisMKקi zRcQi31Kʓc׊)Fx;R֢ڗi:v׊^:ьw/Iirhhp)qbx/S@8g>ԿJ0@@{R(t9M;K;J33G 1G9֗'49=((R: R2)9(b8GN1׌84>t(xɣ1F1jPp)݉3h )F zjPH=*Un7O2;Z~pqKN:p=hKA/h~^O4yIsS!9nɦdRg$v=HGK4"#JZGN(R &9J?:(jLf8Q^fh(4<sZBv֓PF@HisG844tӽ {ӌ#Gz2{QڔFI4 ғF(ǡSN4/Fs'JZRh=)OZP=HzQ ӎqHH@:ҊNIF1RqF}y)8(hP:)I$QFr08v^)=yh SGօEǡQQHy֎ݩ1G""GM(;0:uZ^Ԝz攨#ޔdS^hڌ旌҃9Jpn:ՇA9N杸mNF2?*xq҆p~yz2 (l2qH8>gB߭4Jk) qc'alw?J@w>qLf8?4y搟^&dez3ҐZ3AȠ֎޽Rw4qԇڏ({Qۭ'|R' /)=GR^џZNztww QۭQӚ:h?<9ΗQF3hю)9ZSdPy?^( H4F3GJz(#ڎh#&b Lj14)ؠрy4Ec4ґARA:Ҋ\Is\c)3(uR :)O~:h9 Qz׾'A"ӥ'n:u4H:KxL 0Դc:R`Q18#Iޗg)r0}i/JAҜ~gF0x@4dюsG4x9G'◧h(=zJ0(t>AwZC惜ڌ)r?' 8M!ҟuFz9vwcH88@h=(N1Fhǽ'N(vc<~tt4O/l nI44 qJpM'|Qs҃E#4Fy7 ^G4M8 ~4? 8/ZNJpOJHxPqKHFri3KJQht>gsϥ!ґR1"jM(@89bh'''Z=A8GLAj a}(iq3KQ\OZ\qKק#'>ԙ^M'j0zPshE&9N>ӞsIGnԹP.};qGS֊= I#;zQ0M4gqG<8}EFz1q(֗$@Ky4sF:ьF(h&{◟Z=3KF)9v8֐r)Rcޖ{b8xiy'ڗ }hgځZ\:P@ǭ(Ss/j֗&1ގ8v1IG~i{4t.xzLcG~@FF(>JNudh#֓Pyiz Lg\R—&M~`qⓡsA hځi{g4Rp)P;f'֗ Hz?)9(8'=(<^޴}3ZGZNqRt掼r(94.Ag#}ii1(<{IJ@ށғi}ߊBA8(h3Hz4nzzQړs9:g4 1'A彨P@gGh4.3ޓ8rhҎt֐z)z"jBhzQ=? #3I'9fQgfP94iӎCM3Ku'>P'wp &sGZR8ɦvAQIP;';NJiAQ}i1)qT3ցHF*wJZm($JLc֗bKEj:}hȣQߊ^E'Z)~SךNGOjJ34 Gj13@JG&<=i{b֗788Z?/8E'>Qސcg?u#xƌޓ8)s' 9(!=G)("RJ_=):QG'ތcAi>N{Q(c^xR']c4֔ np= /Ai;hGI(th$҃ڃך\tN -)r9hFqڊZ?L(vA&OJ_~ R=iJ1OCF;x(ڊ\tM&ys&xZL`Ru9hGJ.{Rxg"ޗ1N{р)J?*BFOJ8JrzRL{R?Z4vF0(RhrMǭ4dKqH$uAKi=Ni\tG ⌞h#)XH9is! :~TR`p)z 8J20h$џZ9QsAA9xQIҌɠFs'|SE8ivK`QzRR`qI֗pqKQ4~cb&11sGOZ1GJZ=)1GҌh'3HN0(<Ҏ !4c"P(Rt(iH␃LtyQGF 4P{1Sy'8'^ZQy$;E7)JN(4t9 g4'4(~'Kߎhh8'آ֐q֎AMu(=iy?Z;::~tތy#F(JM/IcQQZsHO<>j;}i3ۚRA'j_'8`}h ;E/lP=EJNg%GJ:RfAњQ88z /8⃜v9zr98{џjRzRd-(:f(1IA4sEw#/SFc@P/|ў掣^)x >9c>Թ稤c'bsI:PM'zZ\JA"тj\'SJ:cў)(sGi:Rgڐr=)x(dџʔqI*vxRR ґH844#׃)sA;iL 'I:ќvqޗёQdF8ȣ:Ը'p:zsNϡFyP\hҀr(9c= %/ʓ iO=(=z:qF1Ҏ!<tgO=i{JzLzzi2@p9K4sG.s1s>vi9@>qƒ POJCQ@cPsN /֐юx◯4{b89&z2(M/4qRNJ;g=hA=>i 88)vyIށIѓJy9wqIގ=i3h3H4hԝOOzCڝ'j;Ҏҗ7tgL@s@擌j3/ցҐ ^܊Nq(s֎q۽-z:P}hϵ/z3Խh=?'8ÊS҃^zRPzP;RwcAs@dKLiҐ҃coZ3J={zt=}h'i ⌊N ^q&G9GO!擯/z3MXѴLf9iq"uRMlqA/j@NJz}(9)~R Ҕ(JA҃M&hKqME/QIqG~c*E!G斓JLN1FxK@"< >&IRg֗L{zRh4뚌(fKߥQ(J1Z1Q斔)zPE!4viHڗ9􇧥dx=iH4 (ޗM 41ڐҗ);ryh^P:fz L|SysޗQc4POjwjCNhրM4&qK׿{c4>ZNE/QA4u4wKҎiG&s^;QbޔRcGj^gBNq)`ۭ-})GN1sKz )E:piFqK)M#Ꮄw'A4Z‘F8zL9#(PA?*1sFqr('8߭/AI.G'$₿J=(֓~sRdMzcGH4`RbqF(=EZR c◑Ґ84zs@⎣ANn9Gh4h#&=QFzP=ю1EZL{ҊB9sJzќt{G(~4g=(h4`zb {h֗g4zNx@ך^޴tj3(h vb=s/zLqցAEO\R;fqA'/P=( P/9>㨥(i$:2i4:FxiO֎F)348ԙ4pi8qGFFGA&r3HQ3IRP89{ҁ^Rd*ю(qGSQюc^M&O}($(یqF9K;Jv@?,RgsHxJs@F=8ϥP

ўyh<1Fq)}M/89>zמ1֒9A@Q{tQ@)Hɤ{Ӂh.in`.=(:R^Gri2O֜OIIj\{Rri{Ҕ}qR4z Pyt}Ehڔ@=(9=)I9<9JzN&)z@Ij b=x.x193`@\iz 94 ԇ3G$r(M旯z;p(<0iq"1IG(RJ:d4;R@i~gri23֎qH{iOg}i{R`~(I(

gڃ4uQh=8ށKI׊1Ͻ.)= LќQ@y/9. җ4~vwǽ Aւ3ހ(ڌҞ~;Rv|LudKwsGzPy>҃GgAKRԢ< Q{{bџaN"ߞ)=MP~ 2Iڃɣ4zc4sy@֔G.01IPG? H9ナ\83t99Fh({G4ti9◨擯~(RRnMJ;>QdP0;p4PRQ(NZ;P^p):4?(ғz/|g)FMisqڔ LAsI4=iR>Rڌ}1ZR:Qhǭg9>q f&AQHz1GluB3ZA=J8`z4z F$(J14z3⓷#\p(J\Px&3FrqK8ǡr)8)sK=EtRsڎGqK u:P9hQߎqFyAR1 ;|Q#h*i3Jx=ix#Qy擁HG{u@Z_7KFiڗu=(hzA:)^)x$zzRcB)p dqKhT.(F9QzR`QA/8'ZZC֗8&q֗֓(N1@R 'oJzCIԣu4 JKGHGNiA(/$bԇoj\fKǥ'Z8Ԃm qE\QH"jҊ8?gޗӊ1'ZLsւ0iG⑺R$wɤޔgҜc&@49 SI:R:ގi;P3 8@:Qސc֌9掆s4b:@w)OjȤ=)IIqGK֓փ)Z_1q'9@3GJ_ZAj;~t3HJF;qI(3@ZPi=h=1E/Q8xqSGCրyjC?JKގ֐Q\p1I׽4t>(: N4t$C?J1 GZ~4 F:ќhs(~Rޓ/KAE!<?.p(i(>sN:}(hz1ڌdR&3ރ 9P= /jJZA-)?/j(s҂=h/CIA(i=M.s@@<֒4Iޗ@A})>Ԟ@4I=(( 3Kc=(uiH:fzq>ޓJ)u&{u(}Gq׊woIfs&8'ڎi})1AF@"h;`w@`KjGJ3/lzw gJ8=isEI=1I旊AgZ3GSIq8}i01ԊwAZ@9Ґ) J u&Mڗ9q@aix⛜R&c))jC@{zRF(zHI?Δ{zgpx%.y(E%(JCҐw9Ӈj03'QҐ'!(fzQIK{T](Ҁ8tq`4QQzZڌџ΀G"ҏ&iHK!8"@u/jLvbizcNsGNM(tzя—1I_zJrsRўuQ94q&~ZI{Ҟ?:v{zґAގƁ/ZLcF0)HIK0i3Z^HJN)1@vo~tg QZ'4ҐqIti?/JBr}uޗ'<ґNcA׵LR=ztlfH:P~`Iz6hQ֎iA49{Q{ќc4bycZ:cLc1QƎizLG֗=i)GҚNh4v8c4(H4r3Ҏ'AJ(֐Qޓ83@92qҀ8@R=xJ\wii8Z_ⓚ gqE* =MO.{bd`Q4 /zR9M$'zP);c4)@ZLGj8Ҏ\LҚ)O\RqޔӚ\dњ>Ͻ+@4sH4_uipi? :J֎ 8@j ({4xbR4&:ю:KAzz:JBy4LҔB;cJ}({RuK_ZNM!ғ>BFFh?*;۵(ԼF)?ZPO4Zv9@/Lz ;tRFx91ށh'ތ4vҌьP<ҊC.21KsA)(<'4Gz1R;QG旞cތzEJh fJL ޔwɤ(H;Ҟ(*;d4/n=i=x1ǥ'SZ=xR(u4QjPzF3Kc ސr1;J9'E.Gh){PPx)IP? f:pFh.F)^&/z^s'@tQҎ9g4~)3Kޓ^(sAvJ(RfGQ}hF)s4zҞ;R33i==I4NiE/n(&A8 4I҃L9qIK߷҆i@M(i)KN3AH(3iG4>рH>ԽM!< -tM'02)x8>~iN{Rdg/jNq g:QsE()1KPq@4qPzsEs@?J '4vEP~g׊q) 斓ޏZ1z;Q9h;cؚ^JGzj^h=x})hsڌ`gi`RKu(Z?1E&{Rc`҃Kۊ)fJ;sIތzG#K1Q&){F.A{Kۯ4}h(Iiqc w9ӑIE)!ɣs3!דK&9)(ȤOƗ>Q.(GU/J(#OJ0ZL1 IP &sJi3ڗqSFnc3Rt?/E=i@?'~ix?ZZN1GA b()11@9束7.yKGCҎtb1F;Z: T—QEcڎ3A8uu=zO&yuxHy})z@tQARf~{с:ќ{Gnh"c^Z@qG>N=i?Fx.3E'zRgڎFp;zRu'ҁA'>z҃H>Nx{zS:^hN&9~Ҕu(')'^x884dRvZ^x:^أ4P?J? 1J9)_QEtM/lfu94擡v$w#8H:?v y\F(bQzPzG6izE! PO.xx(>zv2);POzP @db'z:/ozLҌ@FI4Q4O~h힂(xҌRuqI揯ZSI~4phJV(Kg4)sE/G8"`P?\硠uT挂irzN'zP:0)x׵&hGJ^$=1Ku:P;׽'E)I߭/zN杞1oy<)sp)Ni1KގP0Fh2ޓ9 "QȤ@$_å&{ќ4zQӭ)($F}NOJ\wP)9)s& 4t4Z;qRt@994g&:t'&qJ(PM.i8&|旂i:Q:N \qQhё@Q(cIޗFhh&RZ3@>޴v8zQғ3Iw'4 ;ێRw4(>)7cR٣mȣZ_ A)QFy97RҁrҁuIҎџ”8u4 f҃@1GZA֝:RtE.~}(%^!(9GOJtwriGcI`G(GiG:Z:zQQҎI h$(#{Q=i:ӳI7v>db G=J^LӀ2))~RTz֌u㱠uPGz_\RgQގF3A8i3(#փ@9"''JzNǜQ֌Qҏ@hqzQҐPOrhϥ斊8)3(Ҏ9zPJ^NԔ"FPi0)O^:R}F)y"sH= .zRqߚ^)t=MsG^;cuA=NQ8sԧF()J1яZ\Szvyci Z^qARvKA@JF(ތԢړJP:ќQZ=Qz3K׷4qNA G_Z_j^sAG8)4KށQ=(zь_Ɛ#<;tv (j:^c^Qҁ@uJ:Fi4AsIأ6bE'n<h=:тFhG~?'&x:)q@FM/ZLphNh8d=龴ڃ"ɥZhKq@qҗdўQ()O)2:KקRsҎ;9Γ\ҏ)G Kb98Gz8hNi;R4wEʓzzў(i: 3A4uG4sҎCF(QFiE(<~i;QƔQ1hGz>“Ҏ 9旷!>mJ>&pisGsҌG}9#Z1h$ڐt֜/&i1KgI\RrG\RwsGN)A4I2hҌJ) )G!z\ӊSցƗ挓iS~֌9 zq\P:j@(8N1@֓;@(J>g= P&F{;擑Ҕ*s8)zJA}h=sGAF1 !J9=)<QPhx82t#@8g4f};()ph=iqȤ=hzP:P:юhP8?6)OuH(FM'Z)GqZ?<ѓFIA18)iSAq!i9#Kۥ'#JF~/4{ъ^I\Rt(ў t(4wNtcG ъ3Kӊ@O)aGL4wvM֎ci3Ҕd{RڐсHE(9(h?zCQ)qA&3ץ/oҐczq@8Z1Ԋ14֓SKߎNOJ\h4=;ރEތq= oJL`sFN=qRg('aAt@ғ9{KANc4E AA9▓Q0qh/IhɠzRisF}h/A'Fy"qEJ2v斏ʐҎZ\J9ƃ@8.yQ֔(_SHI(S03NƎsHyڔԃ9E(Z;dQގ{f(ьh>Ԡq'z=j`Mu8((#up &0z8#'&` 81(Q:tsu1AQPy9iyҞsI^F?*27QG@MKPpiOQ9v)z1zLNϵ&s@$GJ:{w?7?;ʃfr;bG/#@GRr)@ QGP t.=駮()OLAގ /n~4t|ҎF)1'NQfAAG=/%ZҏZR`ў9)9vpF;Ҟ~4w#&. /(&K(@98r9Hq֓\ &z\sB{wv=h䞴wv9F0hQrhGRԜҎ# JOjnNi{4q;:AiGR~4h 4QJ:)G~(cނ9=A< QJ9cSǽ4zRu ȣ9t4GϭF)qhڏLQy94sFMLs—'=@{R֌sE1Kښ 4I qIi{RrZ@;P)Hj9hBp 1(){@rhqhJqIh)s۵zQGҐғA@<8'<3KhޓƔguh"Ҁ8=:RiG^(t@Pi9j3җ .)ȤK99c9<Җq@'4'.;Qi3ӊ_/AF(G8SJy Q:P/OJLqK Gj^ԙ i@)QҐc4֎Q(^RuJ88 L`gzuizRRz^ @9dDataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_45.jpg000066400000000000000000002606671511411446000235710ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?F( `4gփҎڔ@HIyhZ8j^ړ##ޔg8i:izZZ?/ҐG4}(Խ~iGjh⃃I3K{Q!#O-)s\q֎Ny!8wGQ֗@{>ԅsӵ(4tz:IގPך3AA Ҍ;bE{QcFrHچi98>`z89Ah^i 8:Pqz;q֎:Avo~)ƎP~4z҂}9GLs@'=8rsi:ޔ֊Qz A(siAqNEwjLsKAPGGi8Oʔi>O4{Ҟ)zIbhǨ搞sKcg\H84 @sHyJxaG^tv Z?})9(4ҎRutx4'G^◮>zRw*9ԴRRzRFi;2h=E҃;{z3@##d ^Zi=sgsڏ␞3/9vxHIʎ2)9Kg4/zoZ9ڗ ZS֒8JQ4H'R1ځAA(FO#fw9 R44Km֐uch=)1q.: RJOҎԼP)ўߕ/aJ):c9\zQ@G&4th9&bKrEINFyGގp;h9 E/lL4{(=xpiq9ZN'R;8H2:vi8(8xKA9GNhE/l;1v'PEDszQ9=hp(hwIҔ?(7OjȠzޏN#8 !ZHSK(JHE 4 K9zS7#p9`zQh=(.08)3ރywbsN3Җ4 8/'i;s)yK'rz{QP:Rތ'iG'Fz1@砧S@=iOj1=i: .1!Z1ҎJ_ʐs@8@@ZB94cS\z(@(q c3gi{dHz(zQJRsAғGȤ:-'9ҕz@@MJQNc&)1ZR)2{@9'<⁀3ޗu49 q)ϥ&}{P@4>tIiAricKKnsAROlQdZp4~c##B(jwzOQH iG=h';cR"s'n(#:^A#&qAޔHSށ2i @?ʗ=pF R)3Gn(iOz14Hy4ZP8449qJzQqяʌȠ~4E(JL\u8AI==?JQȣ ^(G=){zRC)A&f{q@4tw cE.yJ/lI)ss@t>IG4LqGqFhs 9掹Q{y)yc@ .qޓ'=Þi:\J2E{R ^sgM/Jh李#Ը;Qޓ<҃J|qH'Խ:hhl\sҌg<юx)2sGn{bc{0A #\"p:q @r:&RiZ3IޗJ:Rs:Q)q֎إ֓sI߭.:d=R?JLs$w{uh=zR:м4Z3E4t4/Ru旭3C4ҎNJ;s/Q~4惃(qAG4i d&}Pz{R~h8Cu8)3 8ޔցszԽ) 관qAJ8hxu֔“ތҌ J u sKϭ@ha{cKGHy֎:^ܜӸa@.:Ф҃uqr .0i{@/zCɥ1֎)})=i{ 3ךLJ: s@ȥSRg J{ Cӭ.s@=zR:iA4JG='CG!8 LGғ9Q#'R3vўpi?}i6/&4zA'?8t#ތё%iON8J0G&AG=(z}7qӟj\bh4^JNxi KA`\AqHxwzތ&HSҐ(=x)GjiҊ3Kӽ)֕A5P3ڐ`u:i}G \G>cPyhԽFJw!1Fy֎ G⎃h~c Fqץ/SI#)'QGE'>R@::31ր8 iHdbxK4F@4Jhǽhh'#֏LqGO/(g >hJ?* ◾;PM3G(=( ;r;Ҟz {bA$tG4c$Qc&21KqI}hiz:s@=(:HI)NJ@qA(ӊ88i9dv#N zPzsڗqM;4QAt4`uڗ_'4`4Ez8o(zqCсz1EqڏszLqG8qHy9iKӉ#1օZP9?J:h=1HrhQ3^(=(HGh/)q4c$Rq"SA94fAjPE'zPr?Ɛ=h+ZZAޖԘ=:=ӁK9'ҊQ{ќPG4g2xz3؊;Rg+c4ZiG)أ=iJ3ރ~)8){=(Glց֐.xȠ`яJ8VN8ȣj^`מ(4ޝр)ONJ zт{RP8{zPE瞔(r=)}~isKޝiqK\{xs@Nڗh>qփA@) zA!ԇRz=lRޗ8z !@9ڎ=(rpx=zP?JP);MzP1K^cH1K4c=zvE!DZuޗ91GZ@>cR8(iqH )OZA:wN#堌QGO})?ڃC8`FsJAU0#td1hj9'GGCޔ{BITF9':\qIzS҃ғzPAJ?.i ) Қ8qHFAf9ǥ)HsEKN)O_!=)qZUA'>q`1IrQ҂{Qϭ.>@ArhGzL)ҁMܞԘ9GQGS"v1GRcRIRdgځFBh1G?A{~>t>iGZqGpM.F2($fqNs֝A)sK h"P}֗4>h4v=i1KFx&xFEdiq֐ {QсiGJ@2zGr(gEP2(G擜ўsPs◧4${ґRt _F9NK&8ђsF:1@ҁFq4tLT4:RdQi'=Ґp( .IP03i:iA s3@='K)zCҀIҗ@i;S4ʗZ: Plc J94)q4(1ړJp;Qhj!ҁ֌f~hG恞2xI@4J_@iǭ71JiLbAGSKHyon 4ڌ)y 9J}}8Hs(9")9(:q /N(!}i?J:RҐ/GEP(9E/aIK}IcGZ3:Ҏ}hɨzs@sFܚ1ϵ/);}EҐ0} ')8NMJO?JBNzMOu{RzfNN( ԿZ;Qu9>`PA23G~ )qzRG($4w4 ўpNh89QsNҐ(G#ARZ:2=QԚNE{FsҎ9ߊ1KH ;҃hȤ J@җzRg=7 9hh=x&CJ c`GIN)@IGaތu'P8"78N(^9(&IޜjL(:Rⓧ/CړӞh >lQ/Sܜ ┎s;?Jtr;QGN)0sޗQӵ'94M}(JS8Nis'( Hw4^tHp>ў88ZLsSK:A}'x揼)O1H( CiqIiGLRzyȧt' u┏\Rr CzRqK448=i0pbwg<4)1)}((֎u'NJ}F(֐Ҏ` QK)03t)9⁑֎'J1G(9&K8)GHs)4R(#L—1mPqhKN1F2 /NdycގqGo :j^cԤdsHsۊ^΁ӊ*;Qۿ֓RAA.}qHOqJy-ӱIqGcsGj\dsJ Pq i>o—:w8җ4g4 Z)1(ؠw=JOJN 4c/CGAҐڔ٢iFyF0(Z3Zv88!ь(㨤OB)ցҔwuiHtR@G99"qIxrqPG8ځ9?ZQNҐph9($ z\ F} !.9N)Aw掝Ҟ}(2M.Q֌H9@1ӇNM&xtϥJyߊ0}hoNvGqGC (?ʗӵ'NRtϽR ;zǦhc/=M Jy=zLg4&`i8q@JqCyiޗcgJ:)@zCiO֐RH SItz4nFsҔJC^i3Z19(ڎz.1vQJ{zQ88ўi{R{A')z^;PsAqJ J^8fցzRBqF9zQ9((9;8F:^ғ>Խi34P3Z=}h );җ=y1@ZJ &x3@@y$)ppzRA旿J ))GEhϧJ:hH@4(4J}i`PR4~T ~(<GN} (=8g: 0h\ xF{ړ9Quz ؠ9qHx4)H@-Ԫ~RE/8g9 \qKϨsJ8f{Ҍs;؃H@&:zNzqGޠG)IG|P8 RJN/j'=9җ9q:c#3҃΃<x~){R:h($4dTu /~ڀ;ʎwIREցz1t==)h<`uʐAJ>E&HA=^4 zQŠNO"ڗM/jh84{01=:ߚ@0hihԧ R)SHzҞP:d(@1Ab8HGqҔtގsҎsGFyAQ ӧZ3ߎ(ZN{h1ғzPjKޓ:bZLJ4v4 ^)QRZ\ޗ$'y'=sIQC QڌߊC:tRd PO^(8F20sJhϵ'=h QGO/B M S3mK玴sJ3jB~b8.9R08h8җ#d:yy}sG%ybwciq;@z^y4&Oj ҎzF<)Gҗ4{ў=i#4 "uހ?J_ŽOJBp)F 揥 h<=E/Ǝs3Oh1Jr8ނ8 qi9J3A<:jSMKj8@zҎrHscZ^s@ڐ8J1E9qI֔ғz 3IJ3QQH Jv}0qG~v@9֗SHj1(M)8@#tNi1hEIߚR:bsKIN:g`֔psڏŽ=ygڗHrGڂ>sK4\^Ҁ9ҁFZZC('1NiG6P8&Ҏ4 )ь2cߚQ׭ZN88)GN8nh=1_zOJ;h4g'^GN!uGri3QRAtOjLs\F)A3J9hhApA#Rtq@#49:zIAN!OF.;94K4c&2yzfRJ)O)81ϽGGR"N')H4E;ƔuCsHy旞cp N1ZS׊uNqF3@).Ni ֐c:wN&NqKޗgxƃ QSF8ǽ{ Q4;'@##9/搌F8Iq419'/)1ցdџ\P<3 (?HsҀ֐ izIѴv4q:R);{9MQ9= /j@Aӹҗi0}E`P1A<@Ct"NqKh wL~83G98(&4`}(GSGB{=}z1E'h9I?֗G=)/$r)N{SpsKc2gJPpE;RqK 39(<ڐ}(49R~4CA8#=({i3J\׊?tu Q9OJqfvsisKP=isNhu4gJN4>84fz^Nh\Aϵ"qҎ3crEJp{PsGcѷ#֐dd1;у;Rc={I9zIp:Qʎ;I4r@A8:AKL{R4`ԝ? 3@JA9I{sQЊ2 R{Gzi֜3C֌Ԋ9"֓;G)֐Ki9֔֗9RdԿ49j^zSz4ӊ@ ɠ PxJy푚:bGBd?PirA&3@Ng Hr1})}=(F(=GO)1h Bh>})y֐:SH\z9H4}iGӊ:p9&sGўrGJAJzGoz1?Z?2h1J~qKjAR8OzRhс@cIcNH3Z\g=hƎ)s&0xh4w>fPx4pPG=))}=iOJSE8'i@i8?Px~Tcgɧr)9=@H֗Ȥ<QPFh 44cyJ)1GJ_AKҐR zץ=(b3u^xƂ҂8$AG۟֔r3CE)^ H:#(!A>`u)[?OZ:g{R`8 AsGpN(GJ89Ȥ9@㎴ɤs@'҃(h1JNwJqIwҜx8j\tKߜQRwG~x# {QqA<Z^Q)sI=ƒH@$q=)@=Q~Z^8( K23ӥ;ځni飌ǯZQǥ4(wHA\ӁZBy"z^#'8)Gh\psKMOON(OZqp2)0G49Rc|P:qGjNA◯JQR ^uN1F}i{ъ\Rfrr)vF14Iz4{QpAK(=sE!Phth9)yZ8s҂zF88Q۽)S{{:39 ( qڗA9GN~zGoZ@qsԛz#s/qK8$&J~g}ii(<"">@QތRhdd~JGу֝zPΐK֎=JyHqގKzsqi֐wҚ8N)ܓGtH {R  zRJOGB1N4PNZ9v8!r94QKQ׎ԃ=S杞0{SJE'zFS/#qSy'4NE449(\fSG4c9)~9.OZ1ڃ⎽(9AB9/Z\psBFIJ^ 4@?ZQi}Q$C֜0I@Q:ҁ$gIϭ(Fx/^MxюP?Q֓\CR眞RqK }hPN?JJCԑJb`ƂqQ?(R0)i/4`w~u4g҂x) Rhi9#Kۭ&0 팊3J=is&qޗcw=G!h&y'cv8H n:RO—'' `c'i Z=;buN70M:ތs-'>$ &1NJNsΐRQJ9)z89sZ:QhҗC(KQԊ@Iǥ[ޔ>P:QZ^sN=4ѓ3J^h#;``t#qjJ? zRvcށ֗&KڌssHyH38GJ^OQIփzR` (>ŽJNv/\H@(OjE 'GGQIv:3KH3N(qޓޗ94< CJ"Hz ~\bG'F>jSg֓=qA8A&Q{Hp^1:'i>QԚH~8GQhgzzњ^&6 ~Z1NE)?.i+KҎ΂:= !M49r=)I)SqKҏn2qRjҍ÷Z Ƞzc\`tu'Q4GzR&sJGzzRRGSI”`h^=iHќRFqL4jG=:w RqITQKzݩz}(43ъN4{QJ2>uH3J848#/Z\7t9A8=3F)zf~RH~hOcK{;Et;b◿4F8\83җJJ(#җ(<0;P=Z?)pQ8F=zьɠgZdh 3; _֗JL F@;y֐ZQ9P}jh84u8i:{QNh)RR8Z^POAAsރsGA֌ރ}Qڐ_Z3{4i0q@KΓZ# Jwc@qMҎFMGьb:;9ϵ'Nx4qA8}4J:ߥ}u⁌Rv/z;Q~4co4848'\q =($ui()H9sP{sKLQE)FiݨJCg1BuԙK44Rf=yɤ<)'Nh< !qۭ x JQ \bvizRdZ*vsLҝgޑGҐq@Pz4wϰNh')pzRϵ cўGchzQR~Z_z1LzGcGjN9@IԒ îh< ^4 !9Ґ`5h C:ס9I?\gR~=s@# Niqh@G#cq1֓nJ4ԠK AZA(#P1; 4SH~P:tK\:Z=qJ1:G^z֗'oZ\h>(ӊB3jP848Gc8E)r1&r:ti1G&uG|QP>.9'.;>tKJsM})x8sG◶(G< (Oz)@9&2}z(@={؊pz\Rc`: '*3Fp3Kԇɣi S!1AZ6#*Lc/MQhoRm);@2=s!RIрG48(<{тyEIJzdqG^}h9=(h<ϭ!ޔt QL^1F1@zN:P= )qEѷ+KL!""tG4"R :@~ƔMeʓH:Jъ@OJSF)9G){P8"3I^):Kc I)T~<џcH9gE u0E)ӵ'/&Nz~4HpiGM&s(9#vF@((@ӚJOb\R玴}h')aI{bNvxuuwJ4q3ɥbtqp )s֌~TAG|RҎԀsS֏Γ=NIzSdGJ)2sJA9#)I/zB9`ui)OaG84 2RRQԥ}@Siq iiqϽ#{S>sG^PqL"si^1@=l.r9Eh49JQ&֚sJx44(<8jB{R;RuJQȤLGҎpOJL{P1dRphON(Gn ގ6Gjh gIڔu8 nq7 ;`҃2(4}8sFIZC1Kz8(=(< NKӂz;@'-ziSKȣi}xiw1G3␚\cHڃHOsKȣttg4ڔyA 0sKYƃiA/sG'\Ls KR^IZLR`Fi=ÊB8P{FPOԸv ^;R~{R:A')8sR`g/N(Nh=);1jsA QۚHSKp)1ǽ;IN:Qמdf;`.=l~4//.~z^F} j9jSIGlvޗ8⌚\^izR4w)sNsAҁg3F;ށ4ړ=E)sK<Ԙ}(hZ3 )pq@R҂IQ@ցg^s 4cj\Q4cHOZA89ъ@;砠4gKg҂y #01K:br(#4E/׭'S4q/AJ\`ґiTqK{x`:1Ӆ.ӏjx\( N)sҝP{gCqҝ\R"sn'`zP֛Ɯ)|R2M}81߱rO4c)<{P8iZPACti8'y⏭Q8jLPyo9P1i8=hiqRA@C)8IK')qRѓAi:Qւ~ZIRr>(jNQ(sHx93i3JG8hޏCKCbh?R`u([$ý'oz^4g#u?Z^zLQѨN /&r(9AQ҃= KoSA(=>M/SF8ӊ'.(FNydF2};qN:u^@摲F-(hւyg8_{RftcJ4RN8? m;}yϥ) 9>ԍ:sEA'&SҔ:'x<Gniiz@h3M9JZ:w=y(4ҞtdgҜLERF)٥i9pzQJpG1^I\d;)AA^*uM")FqGKގA>ԀT):c4wGZpqA1@ҌbyA Nj^4pxb CK۹:с֐ riAzҖI#/8ޜhsI9 +a,Q9+)J.{SX1Lǩ9S1E''`@9 MpG5_I i3=GI9JGri:ӭ! 2CI1H3J3 4=/>R(Iu{(Sӵ9hz9 f$cҐ9Ƞ1AҐsJ^Rd OnKjKӎڃƓ)ONi28EFh)3sNi>;RM){E)hH1jQAi9Q~@ړuޡǵ&;~td8^}izڌt4hߎ M/HFG|P8P1Z8c/Q:sJ4>ԣ} `ӂޝS;zSx&P@*Ԡ8T{TgL WN8ʣ*ecv*UOlԫN/ H44,>׷Q)*@CS8<'nH>9A40#Y#9W*G_Z6;A;Ң )*0zSzSGmT,0NE㞦u28zO=h֎nH:F9RJNF2(=(z3@EP:C揥!j^3ԙAQ^QzRfyz;9E@s4s4zRssڍ_–ނ~_Q{=(')O8@>(Gx硠{g$Qڔsߊ A3Ni:w9T!s@P (:ѓ@=ђ(}M3G^uiGzCczsA4G^ȥF9ⓜu .{⓭h<Qp8KiN@wxZ5(OXR *aGKg:AS"gڥX܊#*H1K߭zOš4Qҗ>Z\RiZ9)qN>n })@N)F=iI>g#);'4IHN;ҁ^(F@(Q֛}iOAJ1v4Կ֎w'):^~QhN @J zzґRqh/z3AKA8F1ڎ/AA/nhIi`sIJQ)3ۑGZ_4c((F(=@yzSLx4QQ"L i5WPA§n{i>L$WpO~ZFOUMG0* z2M+bbGW61銈/? 3rIG Lq@Aёסԇ9QF3ҀqI;&@i#4(_JS'Nwځ=hҌ㨣?.99GAIZ1֗=M9"KPy4c}i=Mz S{рWE(#i0("hQA#H=ipr )RpO4T9sQRc(1#Si:J@?1p1҂qvpSrM.r1I@h$b93F=.#P`Qg C)s94MьG֝Zm4riF199L Hxc(1i'=/)(p8G>'Ҍը9`Rdv3L'=)@$Qi2{Ӏ&ړqތԘAӧJGRz<(&>ʄ✠SKjCۊv)~1Q05QQHHBHyeyxP_-U<w^EcP$8J8q@zC3M4~(ϵG'JNi4LS揯4gҔgsAwQ)2zvw4by)nhPyҎq)0x9JoCJ}}sQzA@2{t{ڂM(qHzҒ}?n:2i@9!~M/88s3(Bю3Fsނ{8j2zb9zBzqJ81_)OӚ9( bqy'$)qQPq@Ng&2zSԃ4ך^<ϭ'$QQ4r}O 39/| CisK(=3GךQRO'N@5 ^=G=*@*TJIaTV  [{~uj5UPڮ"bETz S*GJN`Ԃ,NX9(ѐi|)2:c;rj0֑8m$ofydwuAh!҂;QqKjON)1ZByztZ0zcddKJ"HNyI׌bt4>Խh3QN3A֏_jNҒ/lNPAqI)y F8gM!ah)9s(xւGҐRhj^޸ޔ49Fh)?z60yF:@9N{48h `J^Oڀ)N=A)9uʎyTq֞1Ipjxjt\ZDeڭ[/®E@ȫLJ#v*!1RjeSzT&9T)Oi}ib@]F*"MaT[>*-fgZ#MJ8sA8(<NqKӚ'< ӽhQ֝g;ʜ֞1OR("~a*"F1Ҡp3FW&JUncjcT0sU~c2Eyp?6EFF7Қ:SIO{g'4gӥ Jy4rZ$P͎~擧KH/JAҗ8֎iq=)c t8:RwGCF1ֆ99)=E.:tLdsJ:zQ׎{t4Z;:=:_7"K߯Hzʍ~4>@9?@Rgh@xFr9ns@88'4zRgsFOj=G 4gs/Qښpi${1G ғvPN4֗ќ:R sIj::P94{P( );dQ#;GOS@''zP}:JNyK$ҟѴQ֔w^^)CPO()Oi8;N)—4cKqNHJ}0jP0zuQxq*.:&HV^qҬƤW^ݪ#* 3SV{TqS:B*uRTFi)#iD\sH dcmD`;4d1Py\4b,T9QJjNwUyӚ|l1sQ5j3pETfNqwVNr1Ȩҩȿ7)tMҠ&iLaO4 g'=ǯQI֐)FON}R@4vr0zi1O/Lq֔ G4I(;sǭ ɤJ= 6{izi9hi GPҔu(cʎgL(uwtڗ<9iyhp:R 斚G9旞j:(ⓩ#3G^:Q;9s74J;qM gwP)sN4ҏQ.@pM'ьwҔ&ܜztPz{Ri3KrF Go@>9GQI?;SA知; 8)8JJyҗ(=s'jwI==i{IׯJ3bh1\tu4H8J9h4g{R—3H2_U|c5 _zNzc ZNM\zҞi<s !9(A4ސ`6Iw>`R''K'(=Jx=xsJ1A (~jAG߽.3Ҍ`R})H@JFqɠt=\up3@!p8<9'(48 Oz^):dR&hg9&)~SGoP=h&oh׃R;fINI?^vp:tԼ0){PF2j@;NsR=MJ}je\֦A(:qW"ڮD:qWjtV&ǁVTVL$*HX'zF1JaX!ZDC{Q"|ZE8CɨfبjWf55\r>c5ޜTsTSs{F1TlbeMStMG"J8H8{TN6GL9jBs؜cI֓irhz~4ݼZ\PyQ֏uqNtHA8Si@fL‚@8g4 )A}J9''4 f @Nix-$zR&: R3@By=ȥ)N=2;d<҂ 1RHy'A('SNI^qKJx/'.8 Ӕ`sNQx uԊ3R:sR54`U^޵a:t18!ļ:U׊W?ZWVSڦPs>ԃl\b~4qAځbuqh=9>Q}iNRJ3ARЊ2ON@控qOGIގT{F=GKMRrEIM=is4ޤS83Q(#=R IP !ǭ/^g<*L0x<҂;j:Oa')qGɤ i/E!1Ҍ~r9q?(hOty4t{SO)8JPsFFi )cA'}(II{㡥<ьp AIӚ03@A C\ރ֔8&f2=}i3uh94('3Ƞr ?wgzLw1FH'qQyA 9GJ=i9J>()(AAPM'^iZ3Ϯh'=(8zv@tiA8ޓޗJ1ס@fw>٧v(Ԍ zv8 :Ԩ5f>3\Uquv"?z$ ⬯XӥX\`gXNj5e<2 ʣGZANHNӄgn=NzӶ4KTr1T&f֫*"]sQ3Pg"~j {TO p*83(P8\c5I-j$*\u5  mczv=0t'F21֓N 8'Q LJ=?Z) (9;wϵ)99&yr& $N9(ӊ1Igc4s(<'HR(FGj:QAI(cQA`i9ݨs y(ϥ&qJwlݎ(ۭNRqڌ`iO@OcqBz#&FyF l9Ҏg \`f#) ɠ4=sNqF0G4gҔu9y:x885(OySLQ(8uj5ը Uמ*Ke:q֬'=*xǭXCVP՘5ipEN`6qҬ!>R:Ɍf@4ࣰPTm Giqj8稪.Iɨ0_jNnJT.H*':UY=:v"ɂI5]sި*ǟF֪#jrj&M= Q֐Q7sJ<h9J:N80M&n(1rqFA~jMpMJxi jP}8&:u4< $Q J1ގ s)G8&1iJh;Q JLG4`)qMޓS3KӦqI(})GNi_ǩZ\{T `H'3Pzi;Nh3H&.>q3.y2)H NJLҁ%/L֌{Ҋ1:r9';R3( !FyqAdh=i3ɥ> g"HqڔqRgR u/j9pqȥ8Q9)F3NғG=J1?;QRQK .p:Q ^hi@1ҝRN9J{fLf^VcZTR.EV+TR TE.Zwc5rsPUc U׵A!TMӞ qM覣=)1ғN2 !Q &H#"R1^أ;ў{Sx&ҏj>< \O4ӊ\ BMGuƏ€E=3M8RgPx1J1'|`g4(;9N3ҀZnpqڔⓠɠHI3:Z4`c())Fry9Ԅ`ҁR@ @z 8wz^qTeAP88S#j8\TtOsQsL8LM'ZLu9=E!}1Iߥ!iڎq҆1<($h({!N:Q 82){tRs(< h8Ixg#җ>G^;I'GR i;TZ^ԝZBKI)WzKH{փ)8J:Ru4F0i: ڂsn9AqFx J1(Ix1ރJGjH{ґFp}ڃI=9\ҁZLK@#Ⓜ>un)O< nyG#3GN恞ym4isvgPs(;*ޙ %jAP:YHH5lUwcDp*~Fz9݁Ȩw vj"U9Uه5NB2jSo:TOUX|ZAP߁P~i8늏4v#9)3G4i; Oz:jLRzRӚ@p0iH{}@(!֔;ސ;Ҁ3 Aך^~Rvh(@I\s֓<J:Q3Ez1hZO_Oz3J)rF1G8)HGN)3?(tu&QKޓ㯭J9Z0( AF3J&w<2M*1G|bbҀ`O4 w4gZ3ǭh}(.p()y4uh p{c4}iҗҞR)'5"zqS Vc3PyWa^Ձ2 A?j:`ՅF21YWpr*tsS52Hqnԫ.OԂysbI4z)AڗhM}3 /N9QzRʌlL4vK׊Z_iN89&A9;K?&h'#R?QcҐgus :J}!b/CGCZNSCGÚi#){s֌Ziђ(8ǽ&ysR$t=(#HNiZLz\sH(ϥ.FEhϵ>nN(SP)})9␚:Kڌ`R1NAK`'h"g":0ZAr(40:QRFq)#xPxi~`gi3\ Z 9b P;Ҏ6qފ1h.B3Ͻ!q@sIҟh9)ZCNhI3NyJOҞ3ҟcH5"֦N* *x5e;V6q@?Nj?LF(G֧VUaSJךzcxڥO A^L`I Q`iN3܁BsQ59@d0)o^*b=f>qW#cV9T}*e8*tn*dj|.jdzަS,R皑\Aȧni۳LCfϽ1֢p9OCsPP7D'j3P֪! P;Z$Y-֡w=곶* F @OjNTeFzi88i?RsI_ZL~(M'"wRc> q~4u ?J19}?(f:RpO^cqI/nԃڌqAAR) =9E&2G4<.1=(4gpA4G$Qrnj3M84c?=E(N(rEGqh 2q\:@?(Ȥ^)1ZGҔKמCAx֝ʍ#sAR㎙$fsR(9!x"(^i?1Z9FiO u;R#)q4ߑIKӽKQRA<4ZpR}i8ZA^iN"Z#eD\GEJSvZHZXbO5 ^:Ӽ&z'1 & ƙOMw5Gңi:Kj'P?Қϑ֢gQ3drqQnsQRgUQS8Ϋ?$Ug> ȨMD cQ^s)?\ьv(:QjCzC9ⓌqAZ#'L~4;R3Qzi=)ݩ1EZLqKqIގ{3JHN(ZNu9iI8룷u "=sփԑ?39cN(qiN(@ۥ Z3ߚ^H q9A9~TwoqPAҊ: < R9>4< H=Z H2xtNxSr*zՔ$r6sV ZF3S#fWNǵJ LLjPק'*@/(`:RZi#=y#Zn9?Jo9ct9IqDjPS\E3P/J$P4;穨Z#9 r}*8DTLr9>FFGzC䞜QG3cҎsHz4dtiLQ1ނ9ϵ>&pqH[=)qG;xۚr('~4?Z2OqF0ԙ=uP '3KIQӽ/IzPri{Rri:~&q JpƌQi8ҍr)9tKғJ^:tRoB~q@h9JAA;RzBHP.@)? c@'4'#KܟZ\c49Ҏ?Z9ݞ1KCN JVRR:Rw F9R@chF=i\;&Fz@揭vZ04ڗ=ƃ<:ҁސ~XRGj;E;ހy▃Ž0sG֎cv)@GsI99=idґ(rO4c4ӎ?JOZH\u52LT#qU>j93VedަV?z8je~OVjEl})I9MNϵ7)lNx}6cLg5~Ɠzyj5T 'zy*j5 6j&#> 1$Q5œS #9tIsړ4O4dz inA ('$s(">٤F 4yz^})㠥(ғR"GO/vM9;{R:LfƂqӥ&J^AR{RRsgIK:3v(8أ!J:QvhQGqCw4qFp(Мp9>hC5*9QhG~:qsR >~h>w!R`Iǽ`֝& RNh'wdך_R48pE!lP;Ҝ1h i}i84qhfqޔ {{ JQҗ}}Ê39i=Aڌƌ/8UbiOFEΗ)zRM ӹ'<'IzzzzdԋS#` jec5"6MYBjx5"n=iK)Dd4fOzC/LoLdژX2rAFd`5XPMB:g@ǎ^CP_*8Zj5gL'i?/ZMW7ץ4oCFsրzIJN1@ 2> Rn ގ;ԹPh$@hg֗4тsNIւ1'Oz;0(9ۊ>@@4ZN3h:}h3GbzH9hhF(oΗ ?61KzUhݑҔ0(PpZ@?qc4w3ގ:zQ@8:vPy<@r)r3Z1qގZQFG^$bZ9"j~F8F:fsNK<y"&b ɩU(|c5*=juqZ$S"Yp}I 5:JzZ\Ԍug87֌֐ғ֘ϊoj׃ڣyLvMFT/)AOSQ>~IQ<=j&p~ ;LdflfXv<ӭ5TmM ۭ!&2zG=i1p:zq4q@ZLF{ft"4 RxhR`3S)&qH=H}z^{GߍrOz8>c(ь^֌:3qIRh @ϥ>33H:Gn(9 J4hQ'OKB9!ь=N('K g'Zp?Z\挜tc4Jixh}~4M(ҐQހ{ \)'JA׽/j:Z@bؠ4}E*:Rz^OE\g)Aށϵ;4:Kڔu㚐R֜R9OJ fBzujeLԨ2HҦIK֧I9VlqT0c3F1IϽ㨤')x8ڌ408{vG#A8яZ;sHr[:(Q F(JyJ i:vF3ץԼ CF=M.qޔ(z@A zRIҎҐxIJLsFr9:ph&0:RG/(qPgsIs.;dIל 'RhH$Rtގ)@挀Hq;3A'4v89F(4gQfzc&Qތ@O^h?)8Hy`&qJ} yGA(~e A9gӖv v~?Fgq4Ƙn854*2 >l'9 TD"~'Ds^ߥN7ޠuA4)20)s8F ԇ?*L`uҔ 03Eg҃g}('ȤJ -J)>)F){Q`gуJ&c҃(䑊u;<iAOM<05"HԁjE|wUԊp92:Ԋ=@*0#zv:]zR#_0zP_7瞴-0HN:Ҝc81yMFҌL a& &:g&`I'4S 0ߵ4i;R)"{Rgg<)A 9MǧJCJ?JNIӚ@I#RsHc=scA8GIړ翵;Zo#(b{Gz=48zQюXv44MҔ{F=8gR1M$>`ڃ:`Rړ9 ;dPN8Jz\4~4cOZ^31;旽!GJCz:ZSx⓶MBi=sG:3qޓ ~"S8GzLg9uc))Hyh玔@Ns/E34c:QE R sR8>ԣA⃑KFqIGNh3F{bɧsG@ (Lwi)ݩ&JF/jCJZQFhyKڜ/8qޝ׌M; x9OWjUINy?=dH3xKqҞ҇uIi*`cBQze<ُ~FL8Q Tlcޚ_ޣgL,93P:QP?*CQhގ1GzCJAFNzv1ޗssFs)8Ith(9M҃CE/^ zрGhh'iN0y{Rgޖ;gA掼֔ J^3ށ:Rh g= =};F:z;8sϭ(Jz}i2q)H2:׷NA&j#8FsڌQZ\A? (E)#\G.})=IN掼fҌhځgqގݩ Ӆ& ;)bGnhڗ۽!^~t␞("сGSJs'ƔjQi#ޗ)z ^pp}(>cy4c>N<$OS{g*E4vqx#9X9Ӂޤ J^iɧP[49.E/Fz<ϗMu/M2d~:M/ԃ5؎iJfi޿Ni^r3H[Ȩzs&qGzi8PIzO֔iOCM^d03@q&EfO4SFzH~n(O'KIьz2sڗ'ZXS}CiCHX =!4ܑ֓xvF{Rf0')x/yw>3~)K ڛ''3:v4igҙצH4^n$=hqAҝZL`s&yJ? ҚB ZLq4`Hǽ^):z dI1Ӛ:w=z\ZC9@8riq c'94Qr3ڗȤ4QJ# xA.9' hqGZhtGp)_Z)I `b8HҞ<ƒ=z4R ֗9J^8q҃;Qh<3ӧgzQQIޗFzd c4zuր8Lfp3G4Z>b(E/;O&OJ@s֞NE-c:ʝ\SRJu ֗><ѿ';~L9G>*7֓G4 I_Swv'NG&xIi<SKdS};BONq zҐhH0(:Rݨ>FG4g4x旯4I)Rr{vQ)Ox4HTciF⛓HLRt{up9◮)n>1LRN;RpE/AI~44g8^tdc)sJ9h'#8:Ҏ8/lqK('J}8RGn?:;guRt/|Gn(=Jqޔ֐c=bsь(#җQ֌c9h֔u4z`PA8$zSǹQǽrq^)r1h/nG4(RcSQI\Ӻ L砥s4v<sH\Pz{N9F0)sA1JN4c)r)0Nԣ!9)0֗vގs҂RtiF1ހMqJ^Q{QϧZ^:snRq@u iIIizu4ɥsSH3 RipG.?:3Gx0zR֎(McS؊u.}h^)2ԿZ==hisҐJ^q@8◃G8ޔ@QӾh1xT1җ^h QӞdS4u?J}hȠ}J^pirxP4N݃K'@aޔ6G.qRѸԄўqHX4j oCzf''OZ;Rp1AI=;R (zP:N.s);7g.;&qHM;yG֐Jxzs1ǽn3J0(⎇M.1֌s@K)1ZQR(iGך:{Ҋp/&sӵ;8֓ҀIX#z'֍qڐF) # {IGCҐ@4GSh8=:?;ZLdtr):4~wȠP=9#ۑAOFO=) ;xGvۊ:t֎;@AIzRw@i:/q@94{xHzRsKGR L'C=i{h <р;?N94f@IA.)qNs\r:Q(ltv)t;h u4qQKߚ hIG'i8wp)GgIԣ);!>@R JNtG#:gSzLq(QHHϭ)GZ1@G4QҌў(z^:@i{Rc/o8?Ɛg#Fxg)z۽ " =2;{с qKPxKߊ;@4F PyFA^h Z8MFxGw4 PqN(玔JQڌusښc*ќ}(qG&$ti94㩤ѓџʐEPqH iR gJJzSzs9恜|fR#49<IZ@:`iߖi1撌FZS8⁌c44w=8KۊL?8Stϵ O=)iGNh=(hƌrz֓bsϥFr84)A8i@9AN1Js@=1Jph#֔gցӭ4qHO4bpqj3ޜzbRqRAӭ/SK٤c#!P:zR1ךLr3K;cEЊ^RsGNi\~}9zy4xH8i;94bEZ\ސ9{?z ʝ_ʐTt8J:zsڔR#Izg)'J^M&N{R sL/9Gn:=qIKߥ?ZS)zQ4F{RIS hJssF})yϵ/l'ђOQK($֗h9SƓߥ'nsPsRb3.14`p:f҃RqI.JiJO@LJzQQ&s89`&Gq@9PX9┌qJFI.(ny30A})sh"hǵczBx4P1^>ҎOI.{Hx @(擜N qA?x;sGph4uRczN֗={(攒z(J=3G֑4zvu)z( 4`jLqɨ14@0ixghzPx4{J3R0 Ҝ֓$zbt \3Jx0H'=Rw.:8'Ҍ KސҒQ =~E8q '`P=z !ў:ў1(Frp;Q֗8IGҔ@4>? \ HI1GSx>uR֚XnҖ9&{G.@}FEi{Qi@掼gS4gҝ21BG8tKf8$qIRsK?&sP:G|8=h4ԃ4c:R3 sEMFEq@19 .=4?<Њ#(<.8I>ԣI44z ΖE)ItJ}'Nԣ9==)z9/OJ8F@B)8?NP9084Ԅv R(#Z#KKZA&>1q:Rǭ.94ގxG\Qϥ44c4~Rڐw#4u4`qx"@<g4vI8E+pҔx}}'y#4Ɛtu_Sy9x=9 NM1FO&1ڒHG|4pNE &9无K=}P@>`(GntZLc$s:ѐ޴i:T i=֏cHG>`3Jp{sZ3tNtZFSFi{`QZzCH.y=?p֓J;RR'R`'Am?擵ht4\H1/lZ;:iRcOƎqך M*^iC Qzgj9 Jy4c>b:{Gnx'uR`Z@})(㓚AG\qFh9 (8h29p)yiTRlQ =GsGRzюxs.*K!K+)uI◾}(ZL^icҔ擠@qގqNf')sڎ?*_ƚ3RޗIQNw!Q M9G^iFq8p3&9Hh:R/8QRS7;ޛ[ dzRg'.8{)Ҏ})g9ڐb>h})9ȠQRHFz8䞴gic;p=98&I% "Hi9Ȥڗz1I/4gq84psJh@֌lRRi?h#n?*֔Pz2iҌzsKz$\Ҝ4sU){sKC)}Q(ӜPi3R=ǽ/|>3FC@(-!zRF8 r8.)MR4sP2}:zQӑ@9@.qIn@qFyi8tFM*c&ތך_)y=(zv};RR(4f 斏)ȥ'iGJ@Ҁ{Q)>c}08 ` LrqKb}ݹӳzQsG'$) u$;JR8M0M)?^ړ N<&F)\E.02)3Fri=H/=;RM Ҏ=h'4x)J\~tIF.}?JQ Z3Ҏ{ޏ ^LQhƎQi3iFqҁ3J ɣ4gb@niOPq@$ўK4up!8(#v!R`Q1A#҂qFjSq: '8dϨ94@֐KI֔(9?7)Aތ)=qK“IA>( s׶i?'C┚;u(ҎQutޔA84gJ1qz1F8Ts:ByJsN(&)9'ixғ?4PGJ^Fh9:Kh'Nh@ӹIҀFxKFp1:P=(?:1җg(E=җғӜҊF;yPzёIN)z /j:bu#\q4cI 3ҔH}qKJgi9n٥#Z8䎴iFjL{y'n?J;< ߚϵ8/Rьⓧ(2O#.Fh7ΗJL sA?Z3P84zR`Izch˚Lfq1i@v^␎iq s;H&}M.OQGc4HzNf:sNhhҎP8i:sFi{JHI9QtRJK}(#)@I@Gix9L:9AZQҐxKs;~cNi@#hR&O9J)G)xi#Np1֔F@99$JrWZ8tFpixG~i1K 3{4gސzRJ:0<ޓiGސQp9{Rӊ\P}3J'NJhҐKQH8JxPs;R(I&ҏZP;POFF}8j1ޔ889"8GN:Foʎ'S4~tv:in2(ǭAAצ)sO~qKLgQրOJ9(ch ;Sqяƃϵ&2hvy 1ROz:uM!<ҒgQdjCbr &9旡=3i>  ;iHi=ޗ&3ڂy"f^8<ҁIyH4q/Nw ;dqI8NsF3izcJPp(98.SFsJ814A g\dQisp znrO9(Qӵ;ӺR^hߥ)8掝F)sqғ"z@1җE ڗOH{>qzP3=ix'"v4ޜьK !A=ҔdjȥTךN)G'LqJ>֎?^ϯ{qIRA84tF(日ZA\RRsG>sSzӹBN"c;^c4$gJw^9<ќQF}cғ@<MF8.8玴"i){u'sGJ.rxARi /\zd3FOi)"G|z`t#:ߍ'ӊ\H84qBiGaA1(#h=3֐4ⓞ)GK׽ 8G"`Q:P8Qyڗ~ԝJ2W ;{ P4(A4 IߧxwFփ].23c'֔ќ@n4J3I.9mIz'ށ)).==3/<( @$z\zgJ9'PQI(44{q Qw~?)#1:AN:Q('('i2yRz:~sJ>g#<J6Go=iszfc'7?^)A#Bpx旜}hia ^Z;bzA<8Q=ўʔǩⓩ)0Np8=MjRzRgE(1i8s@=9!●ʀpy=h4ZSsғiO&iH#&y#4d( b9JsOvIA<⎽8 (3oE֔)JNi93^=q1Iq0p &I) :P?Z;w4hU(ZJOރނ(8i>(<ҌtJ;qFph(KHZ9c;ьysJ1\pEҝiKGPON);p8<4IJJ1$Si8'&JC\΀0sKo#=)i3FzPx4gڗ4x8i0WNOJvsH:hq#8&sE&j^xix8 8)8)3R4}^)18$9j^ށ=(2E/^hp(y' .  q@ 1qܚ(4q֌zL\q@z1uҌN?Rx擭.0zRKqP}{;ui')HNuchA>4}\{j$u9<9\3;} Z\`{Ri )ER`>c'ގ{/joP9t8Qy(q.1IP$&)N w_74}iOҎqFh>qIhiOp);i}3֗!Ȥќӻ{c䯽EFH.qA.F4.=sMsp(ϭ8{xiޛ}Ԅҁ /A4:ҁ—$tIv惌bi}IH>)p(89ޔw 4=)=rh#!yAF8P89ϵ'8^KL~iF1@Fy/GNhQ8!'Ӳ3&yRPNJ8$pIxWhlnP8'Bqގҏ֌ьz3NhqR8sFH}iNzےi@sMJ dbRԄgץҗ ʓ$zPsϥ'(sځ=3KA>` N(֝>i^b0i})zR֎3ӚoNhx=9w'?=3zriO):åsҝ7^)GN!Sь#ԃg'ތB9z\c&΁ǥ(8q4LdQ҃_)Gc4g?*L~{Qz=x9?=r?AH3JN;u9?{/~H=C{ʗM&:>eEF)G׽;b`*^ 4(>`(=h'ր{SNOyJ;PHeϥG4/Z=MRcz?\Ч9(ΗhMIJy4c''QP擷Qir3׊=(#?RAu"hdvǽ/l4:waHzq@4dړM.x<ў)i)s.Ȥ`f3/\QFqJ@44M?J3/68FqҌ' w;E/N)SJ4xh94:ӭ'Rf)N1RRF{$Ґ$Gϥ8s4HyR9J; LsJx\go^Px&8({}O4Q@"#"J1!P(^4ZG_JQfs)0 ь4!Kz{Q9>g1@LsHOZAz}h)H{p}>Ԙ9_z3J=;Q֎ sKCȤzќ}hE(JړKsڌz3֠i=)x){w8'GVn1Ԋzi{h{QKԘJsH:uw}('֐\qך'K >cEF9Fx{2}@4}8zf;4biHRJbғC^H84zf^(qގ1A=:\SIhsG99fi2@;u4d894coz3яΏƓ~r8K'F{RgґZNqF{4=:s)O=> Ns׵:o4s>'`ZLgb(yhPGc@^89I({bIh)z!(<{vK3HI(>j/4hǯC}i3 89Z\r9Rgmri@ҎONzlQȥ =9NI掔c'j1GqKLQ$))y)sh_sAiz旃Z ҁJ^s҂9h=84v`;PNr)H9'K::\zuҌvRcPx_ʂ? 2qK߭i1N)1sK'_j@1ޔcK C@4)2sG^1KG4@'=isFZvއҐF=@)(Rxh'}A pht {PRA)H4Ҕs&9qFy((ךSMsփ׭ (&)3FjL>Px 4Z3ⓚ;sP:gƁh~==$M (9:^M&{ ^ic:Ary;9Z`u'm`PyaI֗{w9)?/4g=8т=@>ғt<4gigKzN8H;RIɣCZ0 z2h)1RŒgAOqA>c}hKڐ{vHQq{z);Qߚ? Lԧ3FZ1j1i8NҎ~t\s^n)߅P=E')Ǝ٣tȥ7P_zRpxFr(OCH))2zQRzQZQ87?.=sGh9'~JN{;RҁI4gnzRtcKt8bIiy b'SJ(_J0Fp(^iI8Pzbx Ez~4NE/j^4hS@Ҏ:Z\zRJ(29Ҍc"A 3K)F8isAcуIR掹 tE)@Ҏғ8)si ix P8h8IҌq;E/^$J8y=)q&“4쎹曂^F:IaK=Rsڎc`RrM&}^ԟ΁җ4cALP@Ҏv<֗})=(cҏŽ8gE{)1)IM֓M)9Ҏ8N)NZn3Qpzu?JNsԽz9h4mCG`Iӊi f3A==(Ezh#F=Oz@((Rz3b8qKQJBpOҌ('GqE- z2j擨Qǥ OOZ3ZOz2:^sGs&x4JO#4cN}{R 4 c (PF(<(E/nԃ~w R;ylRt1!FF(g.FA=h<ƒ;Q;c4ѓJ1A>)1=(QA@Oi9^(R@h(joA@͎px>t4wiMP:bG|40@)?ڗ#ҏ hEbsvN}A$#4dqGQQ)p@s҂zKi;QJ\4qGQG?JQzIy4:14Rq ӊ^;P34I48s֔t擡F=F=irsKuy@9tsF{cJqM֗ӥs@P p:Rێ)zQМ=?h>ƎъϵiGAhj O48;')x?)8H3=! ^4#H2xh=<:)tnsZ@ySъ1_›gҌqA<)s֌g((=i;R}&ԸハjQqK(@)9ҔcGdR_ғJ;&t!zZNFsR'NRnQ߮i}}3 \sA<;gh{iy&'сG^ !9KӜ48ރ3i g&qG $1I&⑁wnO ө94ȣ=1KIAFFh&p)x=qIҎ&tdcJ{Qt"=i?{sA֎G{P3ǵ8N98Gnh'Aך7{t$G~*I;=0q@=E}h=P8^yRF}_Ғ z~4r(#2NiAR{Q @ ^i14(PE(&02h>ʀqǽ&1)@8g{RvF(z)z}sGqJA dڃf3փӓK9@:4.sF3ɣ:R>i)TG?9AJ}q@vȥQ!ZNu4tQ'8QJQ):qAxus2ph=FZQi;iM'^t4~@{ґj21sJ8 i4c #'4GFy~g?KH1ۥ)< P1G^:qI~u8HHZ\4g)G!=x_j61JE ޜr!8H\qH29ih3@AڀIcRsI:)iΏj#s@{Rc sJsMrh ZA4MɥhIHҐth8*;R׽A֐jLu(Ai}'Az4Ҏ>EB?]phc4ߚQ޴r=)It(@h4@ w4ތ 䎔!b)1ZQ>w!.='A;RtK϶)O#׽~Tj;T)0OqF4ARE=qA>┌QמŽP !9zQsqK{cw^ԽHO?J=S"8rx8H ({ S#&1Kނ 3`zf8i0xqI>ԝx>$1A'fxg}iOjNh9Tch##Ҍ.xxqizQ< QsIJ4c^Ԙ&)i:)x=i?H8ojpF3ސt) \ R R'! p(qA=Ҝ8<~4oZ=KB@'8#v'Ni߭ RR4v 'hG4cNלRR`sH9Kh9&qjg8#ERcE)}wdsIڗb4׽.x%1ǭ.;ѻLd=8` 4c#F}hzsFyأ8t1HstGSF)9Ey&r2)pOmZ= ;QځOZ^4sGt4}(◿9v=h1A֖JbM|=h3ސp(ZG^`dցxԽsHsgU)@4x*\I{}iG#ރ׾h#A !J:th94v@TniqHy1Cj r=3G-sIޓڔLgJN;Q?Ƃ23ME&I@=IRߚ;\Rv8Z ' ޏƌ("8(>޴{Rc=)@~T/jB8/R;ΓJ\q)3F}J;{P9ӵ O.qAQ9ɧcH8IԐGJ:8IJ1q@)I h~93 *(Ix4&1Jx4_j8!KLA9"iiAɥnF1;t 94qHx)1h>JLw#4yTnqGJ_֎;u Guw)h<^i3K;R3u=1ftc9'gOf`:Q(u=))r: 9R{ўsڃ99HOZ0O揭&s׌Rgџ^wќ'sGaGAzP:qFHi1J:сҎG_Jiq!4Q9G9Ҕ'jN(^)GizwL9h'#81уё(9=:R.}9KE.~aqLP|PFxJ>/A'^fRt RGhԇ)I/'r{QA⎋i1w_ < 9S:Rp8qA<(& :y ӊ^}iI8jsH1ҜZnisN=(ҔuHx)x'SJF@4b(4wGA:ttyvx>Ԟb`‚0 :N(^uހi~:4J2'jiG9nKz68s֌ Nzu'Fhs@r3tj0A9 \vQސPϭzv)9dgL惑B?ȥg4iN1H=sGZ:}(Rq#Ҕq:rGP=sIQ۽.q@i-'r;QKv^힔ipLqEތc^&{ⓚwM;њ7R)1PMqI鎔c^Rv@tg ^{@J~Nh9G_Ag3KP }v(IHpxsF2{Qޔ`ќ@#h8jAjv} T=sI1Gցux'~~gt /44R1ȣ&1zRs߭E=)NԧړրxiG4<`Qg?guhv)[zA2)F Cڜ9&vǭ Ҏzғ9OnG4v(39.xKhqARcqGt4OZ^O8ⓧ~t('9#);qKzCG^ Aɥ$뎔Zތ^hNOIPO C@RI擧5^=iI1MN Giu=(9qJ0I(ގhzg((J:ZL>c;x4`@fi:q:f@攁i^i{уvzR 3HOϭɣ;@҃֐ҞQw"K֚z֔=hzR1A?&A8H?\!Z_J01NJ9iNq@p0hԄc8p98GOsP?*\i3ϵ-!Z")F1ҎP^ 3&9GqK=yR4'g941J94qFhi Q9i=J^Ԙ.xA<Aɣg&Ԡ֓izrZ;R``ҎюzC@?:y</AARNԼIڗ Lgޔ⓹Zv)<#Qq R:Px@JzbtiF0}qF0:sIRҌqQߧ4cґOl>ugJ\cQs@!4b)INyz=?;ryyO(M40)1Fjj\v>v& (G(##҃4mN):8oJ>01An) 99G=)OQuFN>Fhڎwɤ iG\PG) 㟭xr(ݓI(4O=);R($w(=sSiO#}iOO\Rizu{ѓF2h@'(<8KG4sH2}3GֆۃFz={Og =i;i;9=x=i{x֌ihiy4g=(R?J=#h{Pz\qLA惎(&9(QԼtu/_3SF{P}Qь)23JxG!ZS֎xK޴d}i N &ҏS4:Py4'M/_”Hx4g!яKIFy:ӊ:zPr9ⓚQ@Mu)sJM }((>1J;tCy PHQR RhZAE9ڌ)ONQ7.00hcޗ <⃓RdG\)y#Ґ1G\ւqHrzbPHsFzFrqKIJ8c$P@#Ը <8):I7Rw"җ3HO.i::c9Ai:`”ZQqGnhcP84K@=AϵRw~T`2/Rҗ'?PErhێ(uzLt!9ޗ!iMԚ80FhɠSG"ZNOZQM4Hΐzu994Δh`ut/AHM4(S7֝ށvf(':c0(@uH.hF qG| &sҗڎi=K“Azр/L=:RPN:Plbԇ=^(=z'<ќv8hPJByJ3JI1^{Ґ_JNԣ(E(vK ixɥJ;!8QZ22M8tJ @ )(hH8qG|gI44>sF(=(;R ɤ Kގԙ)=Kc#A:QzR1qIJ@ /P8(yp`fqhCphc(4)9F1\t{t֗c;t(4qғ=JyjB@4(8掦ҁI"isJ^(ۥHzQ( ;Rjh篥x N(ւ9ȥ#=9:PG(4=izџ@>c4`҃:RGOʔAu֎h>zNs@>Լq`nzGJ?J0(H}3/SIcx恞r:O8JLvZ_jh9Rペ8"?)I_aFOMN>j^֐)Nx4>IF@(z1h=hqJNhI9wlI4z\b9E(㨤cP&Hz L◠@4LdnZ849-bsHywϥƃb֓Jz{Qx٧s 44iE/n)'Ҍu3I4sRB4z 4n4F0N{ҎJJ z4zoz^)}GNyO/)4҃Kz9RZQGu'81H9J\'AzRG4G!h4(ZLzRg@S\Ҕ)2zF}iA9bJ:{')䏥wuzF? b)3KQ0:98ch=)yu⎢P:&3GKi0Kӊ\sH?J\MqHhRj(4uQHE.=v⌒x(hG<^q~TP3KRRN㎴y)r2)q9)z;PFG"zOGSԧ;L RRw#4cF8 dюM/B1ސJ 2>G^O_j49gP~z^6(I8}:R҃=p=(ߕ旷%.擶hR){ 'RA<њ^hRȣQuPGQǥɣ҃@NiG.{dfqF::҃j 3wAA23HO<҃HA8IA#4hz;>ڐsȠcץ 恞1I8ڔj;<{=ގI;R@ A@⁓FNqKR֌0(94`RbG=Qށi{f9)x'S G4whqg(4dԹ֓RdڕO^sؤ#tu)HJ )IRG9⎂ҐQAKZ^AϷ֏ʀqzLA.wsϥc&u2E.x>zbQ4\<;}9gp<4OZP8=.0(I\hS4p(8HOZ^844ғ.ŒqH8Rأ4A zP=E'|x4u8\ry|RӲ)=#n`_zLu B ^q擞=(w4AJ:I:84 3(Q: SҚN:Rh!9h֓ޗ9{ўzis)P94sGj2K <OZ3GFrF(BHZ\tAsI=@(sK@FyOJ11IʗJ{QJNd ▛Qޗq֢4s@ \g8$ fqKӵ 4?)QH: ю&;RAAF3׭!(4zb}hA@$=iN3K3H2 /|F3H@֓9A&zKE>FN:Rd`ҌsAP(zҊ:7gz 99'ҀR“֗9'I(T⎣ލ{wKAA'.zR{K4vG8ŽQztw~R8z;R Z=#ޏ‚::}(<=ގq(҃ӭ!?/NRuփvshFquypG ^J](!?(8z3hyNiO\ہ!Ty┒1IHϱ/J =h=?:RIޗ9|~TuG֗y4(=isڌA= '(HpxF})y#NPqzARqԃ(=K 44ŽGJ\`N K C(=x133JNqM.p:f{1E/.GzCRJRy:u=3 p=:h=y<.xGJ^tҔr84@NE'u&x8"ARjLQg%8.@N9?J:֗H}K93GGzG} M(yiy)KQJlRwqi4i@{擽.y9яJ>vq(p)8K#;;R{ ґړƌ=?:PN@ԇqGA8sҌ s23HyKi?j_J@>j\{QH2 jA)Ip9nzviy8Ix4G^@4;RcҌQE!'Kj=1FK8J^ (8=hj҂=su"dQ}i3Niy=i343J0 'piNi:ތr1F(FE qKR9!t9Fy1viO"ԝ){t'GLR@q@҃@'h4{@4 x.8ɥA&&3JyRҏlQ79j_qA88֎zG94R@> RA:xzf "8R&{ґ3H4AH<^iZ=1G8)8<tҌ=(9zRg2:@r) ⌊&r1Jx:Ҟ);@jSڐhARyc'=(@H}{QHR4׊NszRr-4FF9ԠwGNiGLZ;h<@y9)2{Q҃bjN){`0;Q\R~K:h4J8hGANx=)Oj9}iޔQh'=)})(;RcM/j#Q׽/Nx(iiǹ "c@8! ?R2zюŠZO|Qzɣu@@pi49Z1(ך:}~tKNA9S n(QuR)^b9'i}zT{PqQ99(=>uF2shhKRn4)P(9&^)6M/ly~4g4)88Qץ)8ȣ֔!#qI߭(4Nh<{uhZPyLs@4R8O4c.xFHONdH2 &Q/&qIi;qӿ Rh{Ҟp;R: )1KQz3J:gKۊi֜Ӳ1J8t=s@qҐ3wӭ9 юE_B:Qq4G48IӞiǽ/cI?*:JAh'<N4gqJ:P~ҌqڌtPp}&?:0^R~21i{:9'qGojSHx8 ;֗=(~Ij\{(=xɥ8~ .y (ⓧj=r=(<$F(:ޗSyN 4gzpG4/ZG :A=)GGj^8ۃF1ސR@Z_ʌ}s"1@#4p)> b9\SQڊNIJ\ gMSڐǯZ1P:u9IKϭCRg^֓,qK/&=2r.KqI~lRqI߭/nh;Ȥ$KsP:ҌfcQ҃@ҌqryHs 02(ќRK)9dx日MۑKS4pFr) 繣qף) 9iGh(& :ol:t;Q1vP= iO8F֓<(ރ@4^i9&P1t7j3Gn)(=#֐RC׊Q98Kc$hI(Rw◁Ҍ 88&q@sHGSۧZ:(⌁Fph9lQ4fir3Fh#zԣ(ւ8:wwJ;g/QH)s`f}(fF1Bu?J=4v>GojQ(zQu4dQqC@Gj8~(1AKΎ?ZQN;zi3/PhGQKAS8'j82Gy.y1)G4uƁQj1⃞h9KA8LpiztH: }Q{ь'r1IqKǦh)(җԇ8p{QPhǥzҎisR3ӊ3r)z@LsGAGnf3(:&i{ 8I0hx9sH{ѓQfi~Qޔp{b(=M9JzQ0M=OH3ރԃɥӊ;Py'q#4G8bRr2)N}( !~jZBOΗ'|gqE.A;PN:>ޔtA4gh=1\ fr(-@u┌cQ84ސaҕs!J3ϵzj٤s)BғI@JzRciG=}|Q4$z1@FGZ2:Rv1I;qI)Ǧi;ҟLE&(834q҃֎A~PFFN)4`ZsGnҞE '(QRCF{H~cN4E'JQ:h9zsI~)q42A c&p:P4>F3K'Nc^IF(^E/Oz3IDAFGҐsA>zK4xIȠur;4RqRBsK@tzHK Ncts^zRQۥ8HM?R`HO4uN)zoj):QsK(鞴R?:QAip)擜RsuQ:уJ:Iۥ/؊ 9g4r> v4>zZtc'/NcFGZ8 $NQ<ў~)ڀrsGJ_΁d()qi@ hQzA>OҞ4p(qހ}3Ax@ǥ(GAGsH8━Ґc)O4=1KRGLg4v4):K֌PhA֌j8f1F;QJhҎg4A$ցb/ځL{Tc b}i3ҁRv&p=h?CK R`huRzҎzJQj84xuRs:MRR9u^sJE&F88pqKZiރ4yHrh4rzgc qGoy>w֔9>yAGAFN(w)3FOF}O&9 cAHO.2Aցh'Z\s֓-RҌz1Q^GAIQ@FyfnI2:qNi@>JCu`KRGA=h?Ҏiq)3: 4ڌ1֗s@>J;fG4qJ{s!?P1@4cF{8At/JBv^(G=I}h^A" )4w?/)۵(ɠA'(8KڛҌdR{h֎ ;RHOj9)1ZRzKڛ))MxH=TwQ Psʗړcޓ8=E'ޏRw'9zZGQJP49H~z} _M瞢4=ZA=t8svp)G4s=0GzL^)p}hizё4Ґ.=wGz8IE u3K=M4v⎴ߝҗP\ph hi;Q#`b"h9J1(c4>zulzd4GO.yd 03A@u(KRzҊ8t'4ޔ~g&0=GlьvF3ȣhOK>4uQQFiMsc4gtқJH(֎9F2rhtS1P3׵-@zt>tSƀI fJ@BZs@/4jPz/^3Hh1KM8P9&r8!#j^gNi RsQwc8ZNOZ\8Ssi@)y=qI\rh GJN<xKRg&2iqIҎ 玔A3AڗItM'8ߊ3xPN(4v.i3KM!;Ҍ⓷=ip:h((!Oy ҅9<:PO!dT;RbLJ'ihtz擌ߚɠI>JRáqE/~“B:sGu(&~niO4Ҍ}(>4QQץFx҂94ӊ\tZ)F3 >AQF?Jq(gJy A/j;4g#4:x$JB)?KҐP'8֗֓8=xNj^ƁƐ)qricA'GO. CJ0q@z9)@"=h9iz4t>ɤLRKsGH[87˚LђH8qcFy(AA()H19)s^Rt׽#4r1qڏCP(s֌ttI<ʝ8IڌzJGaڐg8rrM.83F9x1)OLr931@njS8Q):8'S҂c=i1ɣǭRtf '$K׃ڂnt9A)qh{Rp840sJ(4):NtzQqڃ(sF?*\Hhړis:QCv(9 \ߊ^4cƀIUZ0GA_z_LPzttZ$QpAҔ v'AGs3& 'O)ځ4(vIi GJ\J/`M?Z1RAwޓ9ҁs.)ցZs\JZ_=G&9K^RB=E!㱧cJCցQIrzP9;O ڔGzF3ZJ@9@'҃(GsARڌy\f֗y;SOZ\zRQARzRmӊO)0})HQbSAlv.x" -'OƂ( :8hqF0sҔsw4ғߜRdJpG(^1LяzNڃ0:ў ߞiIR h9pb@u4cQR/~TcGZ3GNcҗҐF(Ґ9KtޗҌҎҚo;AIP0W0 i#)G?;›P84NG.}:yҌ\sH:AcIȥ(c ֌tv_қ ~4dQ@f>{Qiz w4cގ{R)@4\urh# <ڐɥh? 8(8(sA;upqG>8+hϽ3G)G9:sPOG'A)IQuZ=h'ސ 旵%/ rE!ɣ)yH=1KyJO8GCAF{Ph=G.2zz(O4qHt#);┎)ڗ~1hLKR;J0{sI܃@9 A{wMr3F9'z84i 8<i;8;r)zz(8ތg\f3*| ғzўduҐiiqqG뎴1@pJ3Hqz8qIґ)sIF9BO簣/A@1HXg|f)ؠ0i)F)8Rڌp(9=?Z6R'(ۜǥR \1Mz3֗9){`3H9ԍڗ('փ4gj8 2(zN/$b1Capz1OJ21)0Ɛ~ 7(F.;L\L)ݰy\8ҔvqJH4P9 Q\sRqq@8tҏs<K8Ҝ3҃֌s@ך1g4Qړ_ʗGNKMF)9ǶzR4gך>t4 N1ɣ߭=(jNRqA9'KcSNsw󥦂{Rh>ԽHzjCɧB(#''c4t@PA?)֐u/|qZ9&8dphE)A)TI})x' ~@8å1KގqHG٥=O4dw&ސH9jv8i{KC/oj3GqKMKGJ1F QӚ1֌QޗN=3FI׷J1Kh99 3A;旰8`֐=QQԚnhq֗}ltH8=h1K)Ncޗ)h=h< NRzQԝzRRsH=)qf')ݨ3G8ԆJAȣ4MzsփQץ4AP{P~8G9)sӟ‚Fz@{4>񦁎)rC@44m=h#ފB@FG#=GNGK>ԄF8я9q=hNǽ&3J Z9Gn9IIJq4T.;b)GKN1K h?>JOG\z13P})zfF('l握)Nh=FM.=ߚOΗ=>q@sJA#QqGюGP8Fy/'`G9.1ƌN^84! ьbʗj;QKjnN8٤<4无z8}(ʌ&94d_j=y&N=')O=i8=GJ3Iߚ8iHpisLw=zRF1֎揺E(?֓'ғ A8ǵA`hKiyN"^iǽ.F z Cϥ8h=x1ތs^PqKREB@?J\i})}98G R~A\iO1Cj^=Qp)xN21HrN)Z\h#ڂ1)OOz0=i0&擏Ɣ@<1E.z ўHKw4 AJA4qۭHyI q/sI>iGoKמdm}POJOƗb>h#/s@~`fJl&q):K"4hKRgRd瑊;R掿'Sҁg ;RsF=zQfc֐ԃӻs@9iON?:=CH@~xܚ^ހF9ȥHVSH4;fxgҞE1F3c(ǭ 0=izڌsE:qI(<Z\QgԣRt4 OǚN .p)O$`w4wIKӎ==Ki9P3^@9SNPpixzCK翥!9Bzt4PzJCA(9ⓟŽ~4sl;pqJy9zRRi0G~ qHr8 ZA\sFq#=x>iZo9sJ:cLg4փA{RF?:@@hh'i?JI$b@ 843gZ28ޔڃQ(@4c"?68'ғKrFhzwN?A{“dь8hȥ<~sڃҎǥ)M'zS#>=1N)zPzԝƃ)Rs=y#( )IKߧ4wGsڔhzRR#^RQhHIj^'1Ҋ_aFy&RcQh 0AjSҁϦi13@4u#ʓJx4('hr;c\HM\dRzR)z#) 8zKzRjN{S򞔜g9);q@K=i.1M=;u9߭I3ȣ =O\b M~=ӱ@4{N٣<8NM'C׵ x.2h"1t|( &R BO@rE&'=)zt# hF\R9_x4ԤIhsJr '^h=(@<ўsu1KInc=)3ty 4)@3Gnp(=8cG_@u4;gpzRHPps R3RvKRR HG Aϭ'@擜RNsP{֎Rǥh=E/91Aɤ ^N)qM#RJ8G4b> )s}8\KwdQ}lKg1֌qyZ0:OqҌ9/lL<^Q 8sGj;ގڌ⎇0rHǸ9.O($w|RR)ǭ&g4nZ\ځ4f҂9&3I3Kۧ<旊1ړK}HI9JtFF8qK擁ۥ'Ph-&shJ ǽ'h8g c="`z98isրK!֎Gn)1h!$ghץHҎ2(zQ4pM&iʗg3F1,P1ȣғ3AGc@(=M'9Iցקq@y8)@9g; B98A):qHzґސ)zsڏz@=zsؚ@ 3w(F(I׊8&(둊LsKӭ&?Tw 9jLdQh4s@y'={sɤ9Nb:q9Ҏ٥ ۞i;JiQ)cJAFz⌜ y@њOj\:r>u4;RAuA> Gz#RGOΐr1ҔҌz}(^ԟ4G'ʀ:R@ 9;Hz8!pGzp@ҎOaH:IGZZA@.3FG ^`8qR98($ ==}#&9q*>`"n(Fsf9'(;tPNFqA$tGLP9#Brs\f~wzR/:QGw7<ӁHj\LdGQh(ފ1ϵK}(=h'"RQIž)A8h4W9掤JN)8ǽ&y@KjLsG/9zSA2>c4N)Gi>qIsKڌ fQj*p8 dh@r( y P ␜vⓜҎGUў:u?Z\zG ю>@(EFyF}:ѐs҃Ҁ;R`= R'G48lAA4ڔZO֌~t/jFbƁZ\g44'Np9c9ӆ<ғv:RqIǥ.yRizQHz= (0{t▀=i^)1h4)qA&}?S=h RCޗgߵ!A◯G|fJC=qG$zzF (i:sKuqGlOLP9>t)8( g!8J0488Ah QЏJR)2AjP8ɠGnh1=h41A8)[4<:;ION֐M/= A3KQ48N?ʛNySn:?.J2~J99䞴sLQדK>G/('c<:P8hKރ s@NN=1Hh#sPG4dNr4c~$(izўcޗcҔ cޓs@Qh ׭.=qF8%JF@zcҔE'(Ezр)8<`d҃F:Rv44=9Kހh<җ`{Qg<5)>cQ֐J&0i~ bƗpO'#֗Z@p129Kc&1@/MP}uRc$)ǡ Rzr(KjA׭/9JA8==:~4Z3RGҟN(sF:"9Iԟ/jNz$E(?ZIJ'|RM'(zۊOni~hz^qKF 9b'hzRp(ޗi9N8Z;#`AJ Nhҁך\s+zi})J@89cNZ)aZ8zQ4#qM/F2(/""$4`1sj8`RK1֔vB(

lQqIQ4g842=hF9"'4Ҍ`Z3Ҕ)zSqIz9J/i88ɤ8 Gr>cށz^1E8.;Sx` uҀ?Z;8j:sN ֐h8:RpqAGzQz1^d{:RvKޗց ֎=)hڌ~xzgޖ=)H!҂3֓FA# 8(GaK֗n}_jRGJ11F Zv8(sJ 3P˞)@ 84y@#.;SH)6}6Rm#F0(Mӊ攎 &Rtspx#M)ԔuzAE JZ0}p(i1)qǽ!9_ZR8h^Gh׭&p)? 1ixqޏ @=$QөM/ZObiFpqI1ނ?:BisQG>8.{(gP84E&7zP=.8Rw#`zN)3c<ރPxc֎ qΎݨ^}h#{SvR㎴sB=ǽ&M P9E#< Ҏ Ґi: Aɠ֔JB={I4) ;nizьu&ޜ8=i=})qH9`dh.|v'OG84=!F9);qiN)h9@'RxA M>($J1@48K N=QhzciqIۚ\gd{ N}:ǥF9yvGz<^: C\93@14|ތ܊SԊ@Oi{&@K7j4P3ExQ9Z8'4 8iJL:NQҐth4H:24c=iN'QG_4c8Z_CK84R€8@"1AGKNg&81F=F9yKғMsOz^):RڎOZw1J9cϵ;s(ϥ/Py(0ӀN(4/ N+mZ]@L nyF"sSp3F=89qJW#›qڌ 022iqF8ICHqG#ZL;tvJE!K)=h3 3Fr}$ztoj_'”)FqG$P>sqFqJއ`sFFqIɤ9N=) $s2@G!B sK߭ ҏz9HG<1n(43$uFҏ($H8?Ҏ?Q@LJ( :Ad :Qړ#4 P2h>փIPNizRF)F!cHTPlXN#<҂)G!4{t4izwN~4M<`iq:Rr=iqGzCт4ޗZaI}KK֎z~]hz~T#Z3Rx<j1ߥ)"q֗p)4?&8j3FI'w){c*ȥz*S◜;m*qNJv3QZv)@RUȤ?vMMqڂ)*t#'9 k/481)h+M#ڃšy4t@h( wH1׵ N٣Խ@=z:w C)q8HNON(u9=1@99z?LQǽ)Rwڗz8SNsIӞԇ'֏p("iqGԚ2K΃ތ>tz:;PNxš3N':P:IJ43qF&1$yR?F:gNs4M ֓4xIO4Frq.i8=`wGz1Z9)A=4=' \=z*^hC0p(+NhQ3ތgI_ҔwK(i '8J3qց@׊^{ΌѓKۧ"jQڊw=@"v2(8~4z\ pq@LSxKP"Filѷ4=)1iJLSY984Ҹzv<): c.:sKcM` ]=igO|Qih8 N)9Sӊ^44s֐iRu&E(n< 9x9^鼌 ^pM&~qGZ:fzRNԀR!#Ըւ3I@t'4qq37Q&q@=hH~x4p#iG'$v/#(AF~QȤ,MaCzHHx42ڎAK 4cU|\yҎqڀ;QGFA␐1J=*ZLds@|h<Ғ0i{3I7c=ipz});vxQQF(<1G'KFz1ڔGJ@}s@擯?x堎:ӳ֛GJPJSt=𢁎z@#tȣuwA4 Թ@9dӲOZB2{҂hӵ?(G^9N)sӥ()N K֞r)sZPqK<ӂdPc(?Jj'#11ҚP{ i? kIS Ґǭ7pԄc'qLM# a\!L>atR>f`fтސ(qzPsw9рNII{R=Fg8NsA$/Rg;2:PqҁA'9f Qi zR4cҎ9(#'=JG w(E4sK؞uE)ɥ 'oz?=hZ^Œuh=s@JF:N٠\0GR* zҌ4dތRzS14SORcP:0zzҐ1HqjSsRqJ9(x=:ۧғihȣ)RQ(Tt9't4 ^)3})F}izqGr8@簥8JHwu4 gGJ? Lb9?֚3NHF)SGOIG.}hF)qsJ:h=x)ʗqõ8 Rӑ8.riʼc4֞~:] ԁӂ❳M Q߭ ?QEZ})◵޴cH3GzC֗1IJqdu84~hݓJđM@<g8A&\sIp:<*:K(I1F1J:qG^i9.N)>gO샊1҂q&F3Kʃ׊\x8A}sN& (8PxIt4{Rc)K1җAzA qGq֐{/ށr1F:bRu(4 掸ziN3F\J֓֗NhwAz1QF8ɥd/zQޔg(HG9F1K֌`R3җr(ހy?N^8Ԙpi=@ pNj@wH4ǵ¼)<ў4O֛: S֎w!db3HO@ G~RdRh>rRg=(P0W 'n84gu/⓶zLR󞴸#Hyccc㯽K3K>ގGLQ=h;v?Zv4KqI)(ϭ'NA4r~Z?:{qHGKc@9(c03֎:Qt7)Jdh1?^qK(f9.i]zӇZx\"5 Q>֤ ȧf H( K|&<#$t84W9ʎ) G4 d g4 c L8L֛ 4DT\Z/ӥ0I360)iJL)ԇ^R);Ⅰ(()1^PgiG/nzs2Mp4SKۑGlRҎўq(рph#ފ֗xQ4(N>P}ȧcӺzjz5 TҤ 5":~ǃ4Őj-QL?4zaM#"cM#0idg·N1SG#i1'4:N3FOZ8JIHx?/qւ:sf! p1I ҁ^i:ў;v('(<$ (ǥF3Η(.2084?8 (vhhRzsIך;ғvsF}hRwRt9iz)>nqG\PxJ9sH:Rނ?:җ)83) &sqJzJ(dgu@# RpN) /=q!RR/?{PN;Px8ztI4r:R~4#8L●ʎ<ҩIRN=Ҕi})x)9Z3hӚ^֐h9 dR=) N֐)幣bhJ;S3E:~4Azu qLsKS&P8!`NF=(=h#>Rc `R)穥H1FKvz;)N3Rb1K qz{Z94Ҍp)1gKʌ~zRs:RZ=EGN94tJ9)2yK8^iҞ8=i}()>9?&p)z PFEҌь҃H}JsLr2izr?Z sF9fH #J*En8L b8'9a'sOOlZ6Qq֙gx>ͽ#JhIj=* bUd0,@R'jf1PIznӎWQM+a A4i P9zI.9LqJ1htJp!4zQjCތHs R3Z3G&Fh1I39֗IZ;{=x Rg3@4Hqt'Cקӭ&yfSs<A#=9dw(>t控9@ǥz֎2htJLah#4z u=*)q?:NqGN}#'QKJ &pp(>$RJFF94r1IPGLRAGb;3Qϡp(ZL /^M'RN)q:Q9QGNq:RRw"x>`J()sӊL9 ֎z~֖8&f֔4 sJ9=iݺR?Zxǥ;zqOU8Ԫ9qO *PHN?_JWXP=3S"1S$~7 T Sy@*Nhڜv1KdS 5.).:S^.=0*)iDTQ\,@4GҐ.-5rGN֛fH=~4sIsM4٣g(#?ZN9r)GJNh)(ۃ;(_@ fxH)i9(^8d`Syip8o<;QZ\LIQAcFGz/(HqbhAJH1HN;b<ғGB=zT=yw'8>r;RAhɥ)=.9\'VJyZGQ4'^=(z\AzҀzGJNO4y9J1ړ:P>8ך9gI> iq֊LNh48zv:sG 3FqJi?PI=)03K:h●'!i:>.t.:֜OҟޞyZs֥E=*US"sST3jhNu*tCb4VR<ޜ#rTgڔ@Z ݝxt$p)8Fy4YTrCULxyQIcCRߵFAT'sQ5֣=zT^MJsJzQ9/ 9曁zQR<}GZ^9"~sKy.;wZҔG9@㨤 旊0ڐ(( Ҟ))v\hJR;qi0sJzh4z1ҀL@KM&9?jqԧ(13h/ZC Nc9g֐sGsF=)GNhLqJ1zq@Q8izQx v8*ޜT<4NTL؃S"STșlUTcAAS$^"ϵ?a8-;g4y;iqL.GZhZk⛎1Q czB1W c5^xpy\DBU }j"^'8FM0JaҚǏjigI!=(?wiޔ}ӑMRsL @.8#4#.)8 .98{^ԇڌ1KL`Q !Rc;QtzCJ1)y4Gw)OjN;utsҐzQI^iN}\sԝ);O~*2ަQjdǽH"P1Ҝ#( PF)9ShsKe}*2SWGSd2*-ǎS#Bri )qI=:g"j^1FLRGg"fҗ)Fs!tQ׊LsKGCAP8uRtc{Ӷ)qҗGNUR{ԀbQߵKj!Nsҭ"g[<㏞u!U ;T~Oza5"'r*@)j@RcۚU? i_.ѷޙn|Bg9Lx͝*4` Ȩ<.j^Rx9ZqU9b$1Pd/Z"QCQǵDI1Q7iN}6=΂hS1ҔSp`Iz(<ъCA8 $zюPb\K: сH8P?*Cڀ'V<{Rt?/;;zN? (9d~($cޅi)yҏƐFz7i:\IތQɣI :czNAtE'sF~ѻ@)ރOjN:4z'\`F9=zPz` zSR`sFp:R3A O`iFH4挌8֜}{f{th3Jc2sGl擁@Qތ(h8Ƞ;K ;H8ۊ?.3()z48FSE!?Z杜vNfuN85*H#JJFNVPqҬƙ#V}iLդ^G\*T^TʿHSJJpҦX刞+,}N1@bNƝɦ'8Jn2i af05"ێUcU'*$D*"xQjnEB{Tmn:yOZcvⓠSsRcOA#vKF{IMFiOi~4`RwIApiڂF~Px4ɣҎCQӵ'l\qNv>v8◭'"}izQ4c}:4(Q֌\.sߚL FphǽA^h&3KڃӮhH==3K9Iߎ$f;Rmv8ǭ%4OJ^=.8gޜ8A#v=zS\_LL@jusVb\դJ jGWcBNSR"?J֧UB8HzG󩱐0E9:<@e0xdGj!iF6 GݨTMVh<F t까t*IqPʦU%\ګ8{t}BW$GwrEDj'a֙=0݊NSH擯)Q}?'z hM(AA>wAANi=AJzF=:w?Fx4Si{j3F9ȣK Chzx9ғ8 џR)G^QG(#+{PJ:JZAAh/>i: ByJQɤ֏4$fsHs(K>? oKytÁFqPO@2)zv}.zRgs@b҂8=x&yҁK=;Q֓8iO@)0 8z*(:<ғ$~g)P19ϥ'@<)R1JQւ@qAhԘ׊^ hz P38I{PidQSHOKڎix֓n3ȥϭ84 q3SRxK~zݩå;&r}jAsRU*uS =XEjnj \NNeG_Ʀ\US zT㊚0;TsUH')Ԧ:tqdNhy,9Tm JЍ[GiN1E=0i֙֫3llޙP?FPfgT'E jcF2*msUv 5 W+ޡ`T,XsޘAi'9ϵ;zqFqEJ99wK4jOŽh$z~4gKx4~))gڌ sI:QygR֓ҎO֏Hzj^(+ӥ (|QE8}i3ցd tIM/rh=A)g(h/Z9hfu!Z>Qޗ8'QQJ:4gOQތvVAZ^:探ьf2ʦZ>j`cU`9/dV@3S*dT辢SFT 5e#8=cہKҞ$}EcFG4/5~x*1 ljPLZY A^GAEG$cXڡ9 ^HlT/Q2*qU5 9cz,zdQ7\g4cQJz9pANxsvgր;Gh 3M/Lu@)8'QqSAO4JxT@:jjsVVcE]z"5a2׊:Ո#^aTXU➨3P#9c!tp})Z;QI֗ۊ8֔c!c(&9ҁ(y`ǵ&x? ^|bA4z P8Ϸ>܎.Gw1N֜O>wn@#iz 4czJB3ҁ_Ҋڠ<҃NҌiHNE8~4zҐg;E4g<ӺRs?JE'8 Kȥw'C?,Ppf9F3֌@.9 Q⓶xׁAqGrO\R(*^Gn(>I=RgPzKڜ:c4ޤR@z@=sK"7RA9J34 i:S{`TTc5a@21jմAVQ隻ո XJ::jœG`tW9my>Pڜ0r)<6qN1 1A|ԒC'=eP\jbe5]8pҫsSzDs֢qPTljwA#{U&ME+#桗U&B@qɨq:Q"F;Rr3MJ;qH8RqIɣߊ3I{Z'@)^GZCҎHNpq@C@ސRB*iF=i?/j\H}A{Gz ')0x"I NOhv44H2hSޝkuMM)L84ߊN◚O:#-֔dsPu$Rqh$p3QzJ^;Q“u#9E$(FF;b`I=8t֔㰤|RH0:4Ooj\HFzuz:1hKҁⓂ:. qJy$QỌwJWQ;'֪yjX8\A"`zB\qT'$ !15 Nyy<26x5|Pb'Ңv8{{Sr;Td4wRpII:IhcޔrxJ҂1ȣ:RzN'^֔?o\r)zQZ3֓dьџZN:҃KM,:K!KHA=(<4/zi4;AH} :P2O~3I\zќzF&0(R>z9:P(?'gR{SORu4x)40zR`cڝR'zQh#gF1ץ/JQ)Nt@ ёz3FNi8'h(lqRZ;RԽ}(&=2zzRQGҌ)@});Rw"c4s֎QڎgI4wKMޝGsOJ\qIN(F)zI0^qHF=3N#@sNJ3NpTn"uN: Ne UCU1WPs[NqR `TYCZ VUVQu{TaNE>>H>A(e;`ӜR{3Lۭ(ތu)" h֌x ^:u,(;qރ7#qz֒ӧZ^>rO?8&9i)#ޟN^Fj`1ҥZ3Sy次(5r&q2: 5eWjd*uQSƟ50P L*/=7Lq4{Pyƒ z>ܒpi[<ydx&9HzҒ@韭'_J^{Qуn 0iO餞`KRg$ } MOŽzQrhz3ސrO8p3K2z8QCN0zg/֓8K(9bryR⁝qF)₧њ;ь1FH{tqJ:K`u9P}Kp")21Fp2)rqJ:uOJ8~8&s=hjCvA⏠hvI4djFz3sI}$gA'Qh(G|v€xgF?t;Qu=)x&Q!8'O֌h^ހ9K)pniKeG\ҩt=y=yH0x4RLՅ CVcҮBU}hFMt< w({sG=i3K/I3Nr{ {S_j Jp@'

ܚ^hn(Z>i\㱥`HVXӜJP94㸥ȦԹLpJ9iG)gQ=ACgQހNip[ړ M ;TN~*Q"P1Kޓ>тqK={r:@Թ朼 E#@3@'9 /&}3z^P}qIҎH:.sKߎ}y8(7Lt?J(#"'ڗA@8I\1#>ԽG_zC–qAP8R4v'z\њN=)x旷RsJsF 'Ӝzӆqtzpќƞ8rM.5"֤J8:\T}*tctZW!Z֮DVUntqѰ+rjd֦P jPNDNe_nh`GSQ99c QfoaH\~iLl֣`sQ<'a"i~~*'#I:%PMD[8_F+Td_ȼtn5^TXuZLH8@Q$zSޘNy61Hܑ('4擡Rii:т1Hzۭcԇӵ;44.;&pxΔ>uHx.NsIS^F01ڃJ89>9)q֌`4~\s@lg4v)jғ9ϵa.2Ԅiå7isJQ‚OOZ@vqN< ۶i/#f)3iOK:ҁ^TNE8uy=霜ԃcUxS Ӄ*tNaYM[yq6qz27"+9r:fY1ץXQS,YIx*Ep{Uadg=D|TQzӔ@ԧ) :FAPMetBS=R3PqdD=j'isPFQLqTnO'Q3ޠj7cU'5P=F A6LSOx|Ssi}8)3ғ8I})6i{phE!})8F8QޓAzQE6GI@9?ZP0h8@8ǽ-&z_4*^1A擷/AiK}i:R$bsh1@LQ;Qց9{b3Ghbq})i`PN9zPIsڔ4GZLZ9SӁI&8~J^fcߊ q)Ls֌c(83JqFIϥ!f^{Ѹc{t4{wҗ"^GjњLKyʗ׵ ϵ/QAҌPy /JN҃F@.i{G'ҊɧRA}iy4֞8RպKOn:d}*`f `uQɫIUJjUxPTqR =TS) qS=sS+ͣHpjW)@5 *HRyZ*٨# *`1UD@WA TL*'u5 wMWw`*C#j?Dr85 g=j&cF["'95yɦSO\q$яQGlv {gE9O&1sIJ83h &')?za:G38>md3!zPr:RO\Rڐpy4A À;SIҌ ^4G=A8jN)Pr0(8JCҀyGc@BhcF}@F ьR(9?OzR{Q?t #ގԹ99(~4qKۊAc4ؤ*3q\p(4qǥ.yOƗqJy'b(㩡q^=iJ^E;ЏʔdO_ZP2=R.#x=*O2LjeqXsSqV'ڭFNާ5aJOTwR,JjUja0R 5"LRG4&{y8xPnTl23jSqQpjj&j#֣`}yHWqP#$P+c#5]$5ǽ@|nqP3"wL$gBϵ1>idb:sפ?Z:PyIҌ1qA8 iZLҐǀi}0}h84cS%!$)sphG@#ZAz9( 80G9q8vjAIGPi@M"ӧJp$T{J JjU?J2Z$jʰsV_zVG/a$*R皐R+it8>w&){Q)RdӊfA|֐~aSM2iCcI^)L)h~O^* %ZUOr11F?*NaQJgךa9M'dH@IQt48F&zqK3Iފ1IKۊNOZq4rii1qځt -4 c.}:QHNF)9)y<ޓ4qIJ\gAҔ)?JBy)8:qJݟZ;Iu8:QzQ4L֛Ngir1H:ҞG^҃[ڣg5 >1Q1^܎niz6{Rv&Ґc$}zQc)Az\b{w4u:9y`ⓚNc4M7擩Kh :MJ E攎h(#֐旜R 4qւxARtɥ:QG#ZvsӚLʌ BF=i{Q3#Zt4qfq⁂x5җғ(+KԜu+hPO?J>>J^A=9Nix8ɥ4dhޗۓGFsOLu=iF֐Rǧ)RuGs_nCQҐ68 J?*>9@#(Ҏx=zRw RG_j(=F8qA{CqKA)x)9=h=cFp9'84i2qZ_I(<(|F89I;Ӆ6qLҌ@F8Iɣh=3IP3qAqH1g)GO'sE i1)z/I#qM N(N(8}}isP?Z:SzQs?Z\ S$w~AF8P(A݌v )=?:\Fr8(8i JQ4zQASڌOKۓGCKIyޢ8;N}OZ0)GQI֔>gP? :})Oi E(0hF}E'9<=GN=y׭/JHOSRcNn<3@Axb1OI0pjd}J>1z?52?XY=jtqVyS֧VaHRn9wv U4sӁQ3QZn4M2ޚz|eqZGLSp3P<MPpjoz BPB=_tu?1'1y9ov{GCc4sRJZҎ(?4Ҁ;RAsK/"c{'4^)^3Nu<с~T#J\AJGqFpq^rxHNh!ȥ#=4fT$>I= (41Hxiq(R97=ӳ9c4ziF@RN ֏hҗJ2F8ɧԜJ3׵~^tZ;RR4/HH/_\ZphsGdRޔqQI}=K`RsGSGJ\):i{sG~;Qh{K1AKK(׊_J(#Ҕ?88 S5"R+*ޥ 5 gLEN(8c@&(ZE8=}'FA`}iryhA8Ԁs֔N=(A4 1IQܚ3=(#!4 !iFphGNi-A$ t83G&z\co\S NA@9h4qI.H簤@FARqKJSqEJN\ю('= 8z =SG|0Gh遊\N)NzRr;҃ )GpҌ Q?֐^gcN=z1uJ'Z^JQ)G{PA"p);}h(ϯ@R!KKh ֔H9=!GJ2);dӇ"sN)s&=q?4{KZ@Fi͂ 4qJ8JK(^1JxoZvy4(i٥ 29:SiA9N;Rzѻ'nQ=) 8iLa?*ii9i\ iڣ2FeC)z0zc?5 Oy4z waLb;*6<1nMN/AFxv#4d⎿Zbc=i:=8ǧ4g4.9!Fryp٥t`dN)i2?t=֗)/4 ʖjCq0y?(4 ׊ZLds@JNzSW#A('8ŽԟP{vq҂Oqǵ;sG_.>9׵9)Oڜ21O?=N)ҝp> S| 8>9?s~1/A<ӄZqޗ$vS/bx{&qSKdTlEFjuRd8'I@1Ҍh@GL9'9SRH<sȣIFsڀ9$cF'm41)J֔1H9g:)xu;vH94&h(OF2i9J;J3NIzROGz=9G;:})qJMiOg=yhsғiA94~c9#'Zic3IlJpi2JsPx=!8=(:Rg8q)H9sQإ'ց@#8P3ނqhQ;;qRRh#h'ގ9)<:c4[Ns׊\zQ”{44}{RL◶i=ю8w};ѓ^;1Qpiz94K 9OnݩڜKvq(ni➭sR+c<҆=[p>w8ni Msi8ޘ< ii.N!~:LM2 })`úךfc֚ZkOFtoLSH=FxMϱJq8ҏZE"/JAsޗC8d`tRɣ<+ c'4K8f眊QHivУOOLjQAҏq'^ԄsKQHOJ\N:8t;Sџ``' /GjO(gi#hǵ֊: t4=p1N}i98dԙ9)zz^q ;uq.qjPN9҃R֜8֜A4'`})۹SӃЊ~b0&Ќ[9JLi7 ҘHRq7>O=i7OH?LbIi=~>o#'4ixǭ'N:si8" *H҃ӭ!I۟֔\P:bw7֏(IMRt>ԘKi;{ߵ3I#ԃ=){{^Ij? 1ߞiAȣ =(SJ;8 8\P ɣbN .?:AQzRd>);q_Rc4?:NsA{ҎzL◠⃒(h'4G4—= 3ґN=h4،RQ`ڏPsO@ǽ֗?h=(٤=sZBp)sgI߽();S3iqi9ipt'4O^)2qN1KysNsSNsJ)gzFNi})y)8v* x%G֜s(#gx)DӚ{ѿץr  q♚ 7x4p>njn}M'3S{M8wzPO{Qi1旿_Œ)F;F{SJn}9?jB~oJR>Jzu .GZU4d׭'@1KN 7=p)Gbx4FsA4 Jy{ҁg>أޗ'iޓF}x4w/lg<Ӻi:uiG&A~4^ǭG=);AbaGlRv.sҎJN{z^Z;ϧJ;ڠ`Ώ31Z:$}iqҁGSȠюqў8(g =x^Pzu=h$wJG\~LтP;KGץp):AP/JC1Kx4c4r(v bJNJ\d1ȥFH==x?R&CH@sKN1^:f@㌚QLQ8isZ\ёM=&q:Ҕ2*q83@R4sޗ4x.sS|4_zP"9.g҆9x!h &''҂yBxAlT4"'44M'On-ϭ4޼'LI`ޓɣqKIN)AKsPA?!zQ1h9޿AGB3K(ނ288R{Q׀i^hM.3Rgo})GE(~u=E.=)'|?ZGҐp)yӜQJ2=9<Ғ: AQ~i26P}ڗ=/>}i&sךRG&@@ɠx wIiy ;Q߭&y#z0 o9ɧMj1(4K@ lL.^ւ\A֌bqIץPAIր(.擨oN?hs@g'1Nց&Fy& Qu'zP9(4`u(dzQ_'oJ98sҔzP:Sr})h;/zQG8@M.qr)}RAG~ .~Ҍ=/$Sq@cPM\RFNրzsA<ݞz7 fNhIizSsI׷4֐ u4F8i0sAs '8 S!=xd֎gIAHr:R֔p:Ph94gRcfh=@Kxϥ'=O^ 94)2rGANhF8i3g^1E'J$sJz\CFxc(48A9yF2)q'|Ju' u(s)hԽi:.8FF=J0(IK) fr{RgJ9Gj^hǦ1Kہ 4sJ0AG@q88^($KH~E&>j\ΌdbO)?Z\whɥ=:Q)G44ddsJH^gȠR1w{~4Ν:Fzg\21GsHxK$('3IqMfi֛.3#Cs@ LdRA^)3)gۭJLqK8QN)s3Kf):F0zQc4phԼtuq֎)㖣z `R$PzP30Ӛ3F1f G|Q9u/Ngr:b q'ړj\`}4y!?ZP q9gAAʗϭ.)ҊA;Pp9!PFh0sQ@Ҏ(jNgi9b9r3Q#֗9u2('ځ=AJA!9SK@Ay rhPqN8<SRiy3H)K=(Z\c>g )=/SJ8~TcSL9A>z8Ip94t݊3ڀpq=h i3ғGZIb7iNq֓#9qjQ׵'&إ=(9#Nϭ&sJ1Ӛ8;@~lɤJxcRCA?;=)GҗzZ1'F(9'΁I:Qߊ^(E9GJNG 4Q){b>''@:(INc~Nh4c?I4 sAIҔ`G|R`=ixG`t!KҌqNƁ}<;9IҔiJ}sA#j;Q8qFp=5qP8旽& 944}4:sGRN3J__JC֗'L┌GN(T{zRR4c'u4 =:\AΔH9`RRcKni?Zsǥ:&yS1 9z\􆓷risQǦ)@&Fh)NR(֓c#>t:u'y19)W)I1ތȠt=sJ:gQ֗x9"mRuQ^h=hizJN)NE @)ǧAGsҐt擡/):ў#z?)z/C1)34ր~J Ҕ'ץ(_7z8zf8PzP9w!J23.tZBғ0(($t!(_zL:Rwǽ1G^=cGQy=iAP}{9NEQtzQx.Qڌ(ǵh1I$Ri>9`Qzhizwc֔!{ѓߊ Խ99#jS⃌ug gh97~R{HFhK(=)3HqA$R㞴wA3J͑֓=M8p9IyGhQE4dP84vm&i{z}E4=@A`iAғ$JCN0NhC:9hc<н('iÊCiZ^IKz^z cJ\}~֎h݊  2(?J]ߍ}($:`));zR)⒁4Դc3њQj_Ɣzۭʗ#E8#Ҁy&ڃG_81Ґ`ciA&)H4{@@sj@}(:QɥQu4R֔7JQ(~4zP@=izfҁt~c;c}M&v]٠df&y=({S8R :(׊CўQҐ($sH~yqK3L0:RG?FxFx8vAA(֐("&h'ގ{ќRtޗ=:t玔^)1hg7vr()3E(I8֗`PxG?K08Z3 OޑNO&~gڌ QG&9Kۭ!=iq gzQjfROJv8897#ސvi=r):sڗڂ8⏧z8 ;Qۭ3J:hގK $=)x4PZ9RNh/zOŽ \Q8GJ nNH9rO iqi3J8E&gKL@PsԪ~^hGF:ЧsJOL94wZ1i~g?J21G4(7uȥ"gSfIѷ(@"CKۚ4`⃀:s:cK֓8 o!֌硠u Ii2_”uz0y1J) =$4:_7iG4g/>/q!ѓAqLsKaHGRh=s1KJ:7#'.恁H2y!鑊UyM4gғx4c>GQ@u? _jS dnh(^&3JOьiGNh8!ȥz:Lփ@z?'ZR014==2EsF1ߊ:qڐvh=y.N9G#zP0y?'NM914QғR(@9=AiҁR[u4J=(qפ sROi1J1h @B3R(SJy4c&юzK4c/^(E.ph>I4iI9p84s.@PzF=:=`u.qIK={cjSzQ߮h {4Pz8\{K>/—'&MJ;3Iь'GK>47i^ g0 }O%sށhG@hx~Y}i3Krh" 8(3G=y4ҌAt==iq=(#)?Q4֎Ruӏ{RA44v8h$8{bzю=>g? ^PO4'HF=G LLSJI'w搞E;4={KsHy>czJ^sN AnRAnqA8@;dJ=)1Ib qGn>Œgi~ҔPpE@sR9#zw(9sފPOJLR[82y;gR:3G Qg=z \ctZLأb# ZRF1NJ\g{ўzFѓKf9KӞgtJN1F@F9GsNHE;R'bzsRQi:rzRuҐ`ӻހ=8iz#J FqHI֔g4~*Aޔzހ3:bA>'cGQJ8 A=/jOΔJ64ǽ ǡ>< '(:Pz\N^= ўyR}i):Q/҂xRw{1 ý?M)#=hڂH)8{Q(QqHpqޝ=O^)sisRgҐS^sAqI:s@R`i[:gҐ1FxќGjNv8=gӵ'/QIGzSFG !z`RE/P:dҏjB9&Œv(=>FiJPh='9Zw'< &J;{ޜN@<JwiHiB)sJ\IsK0Mڎp9:dR|RhGn~ x搌.24/4H{SJiRLqIN#=)H㎴\>fgxJwZBz:wjJN;֛hiw)2sKQs@=GNԠ{ќIA));fɥu8iqGp t 3) (9_lRp#ҐC@w4J9K@9QHx A/=}=i3ȧt)FxA>vHq /!I

@v4cAQ'fAA lOʂ?v搓c9=))@GcސќqFiFOAHx旟JA=<(ޓ'o$Ruj^)K:x44▌Ko<8})q4O4⁊0:ў($zQЌ QIqIޗiҁǽ $uy8xc4g-!'s8c G\czQs&1K( :;Py4J\Rgny7j3R4cvhfF(= tGN^?4`旐xI(ZZASFjS֚)“j14(>z:Rx4J=hPN0)qIy =}s4҃PxELw)N ='NfhOg\qҏ΂@n(sKI~t)A?8ڐ<K@3/J3GNx`!;R֛ߥ)^`҃Q >h<0})A"{N;PHQNMiGJ)^z3(Ҍ"h8I)^ԄP>ҚOޗ߽x}(8^9>`փg!iEM\Zg3KZnp('h'&y4w84h#3FyT<юzzQӭ)8fѐhv⁐s;`s94wJ2iO&=i=xHzH1Ӿ(sIdKi00hx.;3GNh(' ɧdI⎣{zPyߥړ#4: ȥ8xp94408zQg֎ B:5Gބ-t KrM;RqA'\r2?JZ:p3 R`v(9CoƓڔsўR^ޔ<2:qAl@w4`4uJ}=J4@sPN: 3C(AA.su84KxCi1;ރьiiG׊OK)qڌc:BFh˚:){Rn4 9ɣ4t84RO(4{RttҎxw94s8q> ɣ f8j4c4w}guI4v'4vI)s@'9#oj^1G8i;ё.xO4}h8N!J99sFp(>^zRu"z riXqI=#F@nirzϷ4i!E.x~tE4F( S2?J3JL}i@h)O f 4~)NJN1AqGQ(sFILnQKߧM9'U3Rz\?9O8擷_Žq)zup0{(1ҏH cH=)4{Rc'R惌w 8&ӌғIސ(4soJ:΀N1ގg8=3Pvi}h4ZLfM}E)ȢƀNI⏮8"Rq@zNvr0h Hqh8$c/K֓=KHxԧcdn4p{QF{: bc4Q `SԊLi9(;Rݨ?*>!Ɨފ@OfN3/QF1ڏփv=ґ֌ƐpiGq@8u4Ps8ǽ(<{RڌלR<=RZOJ Rs{RFh4gڂ=i:R"^N)zvzR$n@qN>n(v"AZ(?SK Pzt3RzQv()1Z_L(M8(^ih3JRuKgo⃎sF0GA/NsAJO .p(:Py: 3)Ni=y(<Ғi=zP;P34#4uu?;ьu2{Q&49oJ_n&ќQ@=)?*Lz}) Q8)@qKǭ&y)yA)ON)1qJ}iցGjO Ryh9(~t׊=I8ZAzpNh}8ޖyR)1ҊsFy)8 8iG֏J0:Tc?ENP9'4“AGjJzp3GN (Q=(9@? NdQh($FG^)~I*KۃIFpypqKurzH1KޜHi64wFAA cvAniMZ=Nh4u4:wu)r8N3ޗړ549@h=(>g4t9jP=(IJL~TcA O4:vdёKҎ Q($zN)^dt(cQQN:3ϵLɤ@Ꮷ.sAԃS A4 ttvc9Kޅ9қRzwqӥ/zL{рn(nҁHZ0h<Qh#48qGҚOS-%.8#$:qFNiqȠQ})69t riGGZhiq888iO!Jdړ)9"=is)#Nv}4uuR N旧^)3?:^ԝ>)F( Ɛ`sGC@Ҍ4QGB)O@P9ڗԀ߭ޗg\LdzRh(#PF;:LsKyړ@3Hq:tvz(sAw=iHL11;1ILKsNRc)ץ)1Q~(FGZ1/'IJ 4sJ 󞔙J:G4 PjOSRxGJ;旷=SR((=qEȤl6RFi(izbi)}GChis=)N)1Ҍ9hhAh?ҁޓ9:Ҏu4@4Fxb>FzQN(=zqF94 Ҟx搊P94 ҀN})N.88Phc"֗=9i{P2iOJAӚ^ON("03(Ry" =)s(IQӚLF84I4oLKӞ=ތsǭ?JLJS׊Aå }(sF=xd~4)q^)(AjAv?I4v 3A4gwҎ:c;R;#g4_j8qH@"N(&Ҏ 88zpzQiOJLqjR3sK23FqdG|{Q ֔}i=0ixݑ֎sIS9Fq`uM/^Ԙ#((})⏼= 4Ҕp~t=84Z;u⎇E&Ҏ9.yI$P0Gz\~)wj;ACs@B)ALR:w֗zwQP9A$S=)zHH(Ҁ F}(pi@RgB*_Ɨ8('z CK׵ӵ&NGPr)9=Zn)qx(4Mxzu<◵'z^Ɠ'8c$c=h '4q֗{Q)OJP3G?'AURrS8<p(<sGQqHM&@8€) ;`g:Z\dwɣEKG! .8 ^٤8dchz:Sh=h94iSiOjS8ڃh*NvGsAюqGz04ӊSi:?4 KޓhwhA [4}(8'|@ҏJ_y⎔zhqAnqE)8GR9{S[zRzrp ғ84ԝ{sJI;R`g >֜QGn)z) 8d8FAIqKE'K=('I$SRJ1@dtƔzSsJ1u'0xRgPO)I)ph٤<w< h'C=FFyAւŒzQh=hm\= '=}:4sHFE`R`}('SJ9&=})x _Ɛڀ;?/!$N.xFF`9rZ(ݜA'QQԹqҍ3Fr~KHsҀ)3N IzPjuҗIh GnGF i1Z cw<4$Fx稥֎1zv9A'SJ8dJ:r99>ȥL랴9*sK)2N@g8.r@NisҏnhOjzќJ3J} vJLKiGaKzѻ4guZLӳJJ@iGL99hޔ91(=h$c8ɣ(ybqAސcNs)14ZFix҃GCzv@'҃<hҎh&$Px<${QF(Ry@G)9@/F3Iێڎ sHG4cht3%◵=H/=ipq1IydwIҌguH4RM-'4֏N8w&sIKק֎0hޓ=1z_d4j38@掃Q:Qz{Rw@Ӹ'֎psI84O4?JA8E!@98}sF9KOJSIG\ Rz?wҁqFrdzR&}Ocӽ(Aڃ@40hN'J:Rs)&0M֌gAKZ !4f-)O;4NtS֓nF3ցӻb{рyp(czR2})?/QF9Iށ1:fҗqG8>!<ҔRc@izSGQE~4i 'E)}ip:ri:SiO8xAGQ R8A9jh{ISqȨpqH֎=hҁAwR?J94J~qґy{ъ?iyAi2 t.(4wȤ'=ARG|uw'zo~zќvxA)1h ~tz @s\>wh8Fi *F)G#gG\R9H9Zh'FI҂OjU=ZN=h;I;^ɣ~:!4t4JLsQ:)G|LcR IӊЃJAP9KLs׊=1A?.@=x#(~Ȥ'u@h!P8GcP8Kރ4i8F}EQނy?J1@8<^i9'Et旯Rr:^hqA<{w 94:P1 )c4h=8i8ϭN;R{)4㨥()r4h bKь8i4g)2N~GE/n)1f֎GޓҌE.0i֎i8y!w\IQ3M=)4i;R?T}( R t3(SNJx@۷ڂ@q۽8CrhIґأ8w4}h'K&sGSAv()@N(җ!nqA9Iڔu4Jx:R ֎:g4Q(.;dNi9h /hizqG_/J:L9 H9Nbz1Q#hZQ{2qG {sJ/Z2?iGJ3ϵץ#4gJ\qMGjw)3xRh^h'g"Q▁Њ1. ~T1H3KH9掂374ɤzڔ}zLn;:s8h>z PxI89hNi>pG^ϵO>vr8ڃ"QJh^iJ8Iz31KȠ=h8ӥFiMȣ:>4EtG9=( OjQߌRzzPp'"J_)~T(=zќfuqH>S <  4QRҎPM`ddb}h3ޓ?/ih9擿=Td{{I98◜P8jAҔqڀFId҃iF t: ]dHz3J:K9z`RJOAI/NE!lv9F3֌g֏Z: (c"sN7E~'|R:Q:(cю(:Z0MJ}i1Py JyR&})H⛞€sHy#篵Jj\&*j@)Gp3юiH @@4`zS4y=h q@Ҏ搁{RL:ӇL`)@zQ(>{FZM>dRc#Z^z=OisJyO4$sK1ϵs zAu 9i}@`g==T`{ъ03II┃<1J8AIZ? LR(ÊL('=h>QLR.;cޔ4PFx : 힔) J1 (yv~tghɧuF9'q4`(}( \uA(>wGoA@FFMק4===)3ԧqFGҎi83FhGnZN—9 Ip4~?%g֓Jp:N(9KR~4qjNQ”zQb)@ǡKӥ8(<.)9RKߊLsJ8IhQ@sGLW>掴=9<()O\LcQw"A)?RAOJ;(ǵҗ)9;i?^=:bqGJ2):ӭu6 hvxqPzPF{S1F)曒2 8ut8s: 4)OқߏƗ'i{zRI4~tڎ f{R`n`JR*P}h9揯4czbs/)J:tcإq4`;Pz)h'49G'/4I4G(N(9"9.xz8#=ihڗ&qGo۞(=)9=:Rr4g)s);( A:R)psLsKF8恜b)A#cEFi0=z{qKօp(ݑ4qHG>P:zޓڃ:~`4vqA9Խ~qP){cюis3q (xzsF@4ix<րF 4ǽڗ'^gHGjvi('^(Ij;FihKIԚ;Qg'NKqsڗbQ׽{bOntf|)R:Sǽ!'J3ғ})^pM&:b Z1&1AP/Ґu3pqڗ4QzQ)4`R8w9sh23cJ9GIsG|u8?ZNsj^3AJG"KOJhsAE.9GAA84w?Z9'Z(qG҂9'.@2{) {ۧ7@QzA)w>v ׭.4Orizis@(J 4f!IC֗gփJ1i0(#z^MQg=h=h;QA`/ך3׵(IG^hyJ8g4t4('' ڗgP:sJI4=sKہRZhn93`tc>Ҏ(@ dQ׵=4(^F(JCҎŒsIӂy/=G}Ҍ p{㞼X"}9)3\h&Fhϭg%ɣ=Rv9(:R;t'>'~19sFy`{fhփӊ13K:rylt=h<҃iJj" R֔@ 5DataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_55.jpg000066400000000000000000002407711511411446000235640ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?ғivj\AQIv: -c(>)JA4 AFsA?JQғ4wȤ4:Ki;}is'=OGJLrhth$֗1F(4z`FIu-'֎ ;H:EȠ N2N)pqAOj &}if;FQx8ԴiG"Ri:QӚ3Q׊ 4sIΗ4gg3Pq@|Qz4vRҌIQQFxA3@E=(OcA;R ;@);:b}(ǽ9@ 'zFS֝ڐ\v)=iE Sӎ3H)O4J=i1:R :PA'(4:swGNhh8ɥi1F?JCR(hLRf&zGҁJ}ih"Rt8𣧭#z1ӚBqww`Ҟ=3Gw4{i/QFjQփAҗJ8jR2)QKE')FzPzRc")9'Q:sFyޗ(җ4F9#f▓.=F3A8((ii1=GQތ֌cތ::KE&1JFHcCzRqJ{;u&y=iF(n(4v>OLqIڎ=():ҁ'j\sE!'\`b:`8iq.2sA(9(ڎ(9ҝIiBi1@A'4{^uҎ}(#c֊A无b€=':ӥ JA^h恎h! /Z1riJ\Ȥ⃊):RьnuR1hKA<⎝F~^isA4`Qӭ'4qwdIg" 9Hp(^3HzKG~)ZQLzғGZ(U):hpiZSi{PyZSҚ/ך;1ڌq/lSih33@'RqGC\Q:pO'sJSށ֏\R}iF2IF (=hF:ўiAڐ 8c^ؤ8(=8tsFHPGsPT`4ԄtgzRRws֔ PHz}hwɣw4`fCJ8G_jB;RB8F=h8֏ӚV`ўh?9"⓶sAzQ3@;E֊8 2Gތ4i ɤ )HHCKF1 q3Kڊ:uRFGZ)9&sKRG<hiAj)}x{t4thi94qA(sI})hphfqF2}4`JғMOx##ҌGlZNARRyR Kۮ(c)듏(GNvR)xP;yQʔdRv#/ACKځN(=1/jNJ=cރaG" &GAfx;"1LR(N{A֜}#" 9җ⓿/ȨҀ2(h4wџj\9h<-ҏȣRfIRъ8ޓ8s)@^z? 1:Z^A֌d`QשKNhHsE)\RuQ=4ӱFrqKI; (J\IwH9NFRg^QE&)21ABNO/j84td^4tR)>4Fhi@<'NhMK4h>E1(=)2Oʗ߭i|ҌPzP( q֗8>(_ŒsPyh^u4sF(ϩߵ!ԿΌcރG!ds@iz>tΏnw @}E.(IKOJ0I7=9G$gR A(nh=hǭ(<=j:9҃֌GF“/NE΂()@#ғi::p Q߭(G5<(Ɛt8掴 9;_jLZ3/HyA$qKGbRSvH1A/P:PGKړ=E.@('ފC8/z^RR9)F=iyJ1GKɣӚ ֐"G8h( G4RF}H(8j8擡M=A4M8G€3ߵ/JɠrsFy!@iG94pv1FOsff&=)CQIi}hRS֎┎҂i9h' {AMGNqA=ȣbdph?:@@>A{g48HhKz(9IǥKZLsGҎކzvŒ`9&'< Lc.0IE&:sA4zP9} )qց:) 2iq4M(@xpE!IB֌!jZ3wjNsڃnc&uɤJsցI}iy8"f(0(=)ގP=FG\R#4q/AH9'=s ;I֜2:SOOzǽ>8Ecz(GҔJj;cF(yԟ/B2:A֑ hi;;@288'@҂1 Lg-&)qj9&JAP=zxqA?ҁE'>rsKxF)xJ@AȣN'9&Hc4vK)8)xځ=LizQ4di1)9Lc8=:sFqҎ1@4t<Z:ߊ8I9i9){P1\=(ϵj^Q1hR;P:Oʗ=#qAQHh8:i)Z\qRE1ގ#4uhh>wtuJ84p:QINnv4sԔ٤ގԽE=sG/Z1ր=qA(J1ihǭ'րsGh֗ڐp:sA{Q߭Gњ\zҞ)9z@4g'hh߽s/4gޓi{RgP{N?Pw LsFE/GCFh)J3&>sԚ7E`A<4sGR@Z:PGsA^(^i *Ȥ(GF2zR揠4d{)?GsցAڔtyF)>(EcǭMhG(8`sHK@4\QirOҐޖ3F((x<џ 3{Q׿4vsIQ֔dަ1֌֎襤4z:RƖL4c4;84;og(<ݱCKF3F9K@Ǡ^84xd 3/Ґ{Ҟ:cR(sЊ9T)1< 4(>i'GFs(t)撏j1'ҏU&)G#ރӥbC"◵-!J;QמԝNipqJN):Q#z;P){~{f=)Nx4(2iOj@0:RⓑҔ ".OZ 4_Zzc=iNp8 :s\8Kx{ތT8G9GPA$zRc?Z:}}(@8sA9zҎ4h# A)Gr)ғ!时7RyRc1JE'isPG9! JpⓜK)3҃KRntF{Q߭.}zRcG4SIAPOJ({h(uސNɠAg&P_J=i: Nhd4MR8g(/NiGzN3GJL)x4/Z: gP:{Pqځӥ/ғN)qGҊCJ#ސwȠQQ:SGz3@w9ȥϮ(=x@(8ւsQޓ<9s33٥(is(<֔Sx;4g\RrEКE}OҌ֊Q!Q:PH&qI}(nhsJzgCJN(FZ1IJ1E&yJ:Rg):}h4v'Όt.)sIFzF8G@=h^A 4; 3KJ3 1)=z ҃4}hRhjZRy}(;(=i3Fx8u֎uƓ)8ۚNNP)GJGёۭ )s).h}i h1IQҌIE/ i -hx4Pshސӳ'48:F{3E.hhɠuJ]`P)sIK!ȠMi{RdhMBKށFE}h<ёH:R=zQ(h qE/sIy/֌Hs;qKڎii2zbPzRg9҃Z ph'G?ZOzRȣj_֗4ޔvN:RtGZ@;{ҜwtG 9tFhh)3Ah:s@34 \G;PiOz^;׵/R:Sx&ph(⓶qE.x3G\Rސ⎀P:Ri{Ғq@&E@h ɤhwxd)NsiM3'hx3A&NRI)A)y(Iߊ"⌜F1KRҌR%.F:ьd`cҌQɣQsI܁֎w:R(E!(*;ڗ"旽?vQގu<{J恚( 1ƃZ9(zӥQ:}ix#9Iڗr)^EZv@F&8i>QJ3F1KQQAdҟր9(i21K(I@h/>8 ~{H8'4z:GzSϵ'JSڐrhLsI)z:s׽/~itvG8<ҌuJi;P1.9Jy()QAFsF8E"PjLґ'8I{Ҏ(ғҌz1G^IޗGjcGO8ff:GJ:c4c"Kʏڀ!rh(z:vQƗIڌpxjwPAHzSiޔc@QQ;@9K׭^ZN{у1;SHqF(ڃQ8u?;Fiy4w/SӊL 1AJZOÊȥGbAA1Gt 40 h\/|ך{RKۊ1֌@⃖E1F0(~^O'zF=GZ88GL_Aڃ֐ʎPzIE G֌QQqE/$oCF3KPFEQ4t5-/$RJQRuAx _ ^GjO.(:^5JGhE'4IךQCF{uqڂyȥfq'@\3ڎAPO;AusF;R}iGz7r3Jq@9fs Z_JSځќRCA1G\sQށ֏_Z1LQ֓KM'sN(Qސ==qIҗ()=n=Gc@SҐuh_zLf7J)ORz1R(}h4P@J=(<ўأ)M'^t#}h)N)s{ӇғZP94N ( PyRs֗JZ:J:})IZLA'|Ҟy#G gQhFhcփϵQMsKNiNA玔}hiz hJz^3R@isϨ'qFA=)x#'9(i@1F1/GJB\Үq N=i~)8b*L(#)C(vz3ҊN :\ʀF)Q8}MJjLRn8#u4hy K bKP# xb2{SRg ^"MIPx4gQhKIɣPx@'xr:RI)8K=>cz0sF0}3KOj39ARcQғ<GNq1Aj\)3FsG~hy4E78 w~ҟʌ@ >"~Q1G Q=3Rt;ڀ(=(8H~pxsQ4G"@ӊ9y 8G^JG8{SI1Qւ9Gց׭I/QFPhZ;r(hKNzQ){hEF}iqɥsz=(ZBN9҂:⎔1J:J\pyR)i:vGAԘ4dQ(E7 /$tۏqzR`Ǝ(>( R4Q)yMւ0 Fyp=zu=i9\ڗ(ǭ{R <`L \R`QJ)Ҏ1J:ghJ(> 4 KfP}}hҁ&=: Rb_ΓG^h1ցGҔRAGJ =#94sIʃJsF1rp(=zQ2xKA^ǥ:@=h)s'QҏCARi>QL;⃌i@4qJpE' ނ8(Ryi{r)9<KRQqKv<uz1ڗ(4^4mך^rqi}h<=4ڏSK(>|dzR4=hAs>"RRg/CGV1R9ȣNhM/|9v)3AzQސI“=Hgz;ihGj9Z;}(9ȣ5'/ZJo';{QѱHGP*>E)#mfIҗ!= .yqGJ"GM9)qIJ33Iۥ(\QRqGzSIJOQtph(=fڌ)x=:F wMRpG9}AzbRgPE)AjCڌN}E)FqI(GZ_JSN'ozph>4 ;Q( ъLr=iZ4hzRhaKbg \sIGhzLgu4t};P3@}wq@Ҏu94}s/#Z3Fp1Ҏ4O&Q׭IҊ;Q;R8␞(/@) KQP3P4@ސg>cu<#A@s(=@iG\Pph@(KގԔAE w4d҃A$Q44K4tj^AR.zQփA>h4ҁ'iڛҩ484c:Qރ>qփE{LRRszPs֓$RJqSʓԽiAIҀ3JQ4.H{:?Z=h($p? $AA9GAғc> )q4֗=pizuzGj0Ah$'zCSJ?:=sFh֌{pGRԴv4v$RPRGQH3}NzL){'^)sIހqr~q7s~Efn)q(qA8(Lzv'SKӶh@ts~ wozNNJ@r3JsG4KҌ)F1qH @84:\ Pzh4ۊnp(=1h8iɥNM4cGGQџJNiMGN )=8#@A~4fi:A#{џZ\t9HIfh=949'ۚ>s q8I(R%qGj\Iޗ1֗#4$(=( Ny<;RSL^14sKAҀq׽1M=qNINMhqH3NI9"9(4=N`I;ќ #cKCG{PzzRSqN :ƀyQ)3{R@ (Ȥ8)O?Z1H3$us =iy$I%)IF}/nކ>tI(G=$R;ю/$d9 \ғ&hph izR84QgG={Rs3.riz1 g4 z34db9qHI(#=<њ3IJ:Qю('qG'clҁ4bsIޏ.zP9h ֌PqM4L4R9Jy:ьIׁҔuG֎ÚRx >iH0)O=iH sM Qނ3Gj(9Ȥ>=t.?:=(8fKPy){}hK)Hg;R4`Rg;֐c4{@M{`cKAMԊ\юGJJQu9t4sP:֌sIQALQRKڃNc9M(9юs֎gZ:{P84tRJNOQIÓKizPMN@旯ni4m|RsI4֐qKE }(0}'ڗ(u=AȠi:RJNi}Hzi:KK۵ GAug;Gtǭ7KHzq.h=h=yRҎqJLu⎼@ߵ/qI8ǽ/SFxE9xFqҗқ}iOZȤ{Q (#?ў3L)z Lxhhސ֗vxM8MʐҁqGL9(I)WNxOJJzy< :(yn'FM=M%; =qdP!Kgրqg(cGqGt<3\Hxj^3@#=)q&RgIArhcvH 'Phg.Ny%Iҏz;⎴d :;GNgQރ^٤tc'nM(x8#04gh( њLFqG|֊;Ru1JiE!<ӳ=E z\(j sJN G4vQQӵ/C);x~֗ =֌◭!<@掟ѓZ:NCt)ynRz@@h֔{RvAh⃊7t)quftJyE RFp('ҁG9[qKx4ւyZOJ>v9v 'z9(9tv'|ӳ1I#<QցisFr8Gs@(u.E79=/^w/QIhaJN)NhE=F9iAi=h<8>i{⏯JOKFGJPF)3FzR4P94t=⃜fg>qJzR~4'ӭ/j:tJ3zOΔ9:QGN4RuKGFNytҔ:uZLM}h N3N=R"jPK>1֎ܚP=)zP|Fi}:G 4CG#'GA@9>g\'~&y旡qKH2h'=ڂ)9){sG~h{:ъAs^PZ@NrqKF!h=1E 9KsFri9Cғ$Rgڐc'sH}y&Qph''CK"}( 2qFr(=^gҏz3Rc'`Q'PɥҀ(=hh#Ҕ t2E p@q/3֗яQGj@y()hJWdc4`tRtx4L )z {y1F(98/84cҏ“R\{֎p9<ъC◵dt8RjL{y#CFۚ=xZ^3F0M'Ggӥg?QGNHO#"hfi^ɥGlR{F02hw⎃ނ8`48h`==z( RSMcE'ҔPztH@4uJG4^7nx8c3ҁIQA4vK=:RqKӽ&spE/^/Z)'ZLPy!>&sQւ4ށQiN=h>JOz1Juy&@z(z1hfZA4cvfy(.3K=hך#ރ&\ctm瞴|PҔd}(ARJLw'9.8Nz Lj^1ғ8tw"dp);I:R@HEcQ~4'N)~֗ސғ(Cq@>t҃h4֌e})O 擜RuN3ךq)1֓փK(G4})֗^z8<ތ|擩џZ ҃'9~h hzP1Auڔu`r)zVB秽9UsO1M4zЀҰ if)h :ю9/CM@Ҙ&4Fh##:ӈ_H@R8i34rsGOJBMA'_”擧Nxސ#t?4cj0qFpEFx'=(G~4vJq)x49'tJn<289㱠ь{^Iz7sڌh9Qh:qAp(;A>pM4qM/n(IiGZj(<(zQ֓>3K '4}(I)EtR}iGoj33'F/|Cӭ/4qQ);qKڎŽrKgH9K('ځ\Nԣړc#>gȥR ׊:(=qK(;{R})Tb98Pzu5'iڜ߽*:zT8G4g48eEU4`ip)vFSFr(*3I4Mg&@h#!9!:Rn)8d)#Ҝ{S}(O3ގXڌ"soJwR='vGA(F3J1=iPrhG@ϥF3hKhsޖ@0zm/iA7cCu@9sL{vԘqG(HGAG:QqJqIpiAIߥ/Gj&OJ^qIR) ^8E4v^ciHIJ999ԝiyv)N{R8zu< p;@֌b~/j9h;#>>ǵ4 woJH3\w=)~SXcgJA׽֑@@&*\'N4gw:RsGsF3׃A @9R:OZL}iri=H@f۵'Gn1F2=OH3FwȤ8OEAҐ;R{Q;9F/z9Ͻ&܎H=}() 8y#QZ\~4g(/J;QGnh܊:P:zPq} QG(RG#4cKIRu/Rg0 (Ph=8z:CJ^s@y)8$֔1:GqGNƎ:Qs֌zCA"Rh<@AAސGN'Z;ґ!Q:G>`s>ԙ4zHqK10 wv8tuׅx+/8\:*`zSU~~+/"E9"Fi~n*mLtcg#&(X}h)3ҰzT{piYx(` H49$LSE#v#)(8ɤ>^h8) d)HrsH8Rv;&qץRrh (<:gcҁ 0xh)s۵&y/֐d (:9fy&H)O ғ=@4!88(3@@ϠIA>sIFj1)G=Z8QƎ?*1NiG\J1O_J;T<(n֦T7c9OScNsR|(H :S*C͊! Q51cLU*ǁK c~ޕ5HwDgSq Q+0 H“q&F3IF;Lh8POz{)3tizH8zQh#(#=G.i3ڐtAzLt挎ƓwHGւ{ ҏzLtw4vBތZ3IK}(=QG`/\f@GN J=izRd=94Q1Gj◨dcDJ^F94bsKڌ3F8@QsN)8<^(FEiN(K٣}({QGRhQi &{P94r ʝ8z JZLT})@ :Rj9#Ҁ}h Ps(;`KJH'AJ^ڎIJ}{PZQF:sKўA>ԫqJxҨSu@R1H:z r?HˑNZ|&P@VvAۊd =;UTmRD⦎v(i3@j3gEJ8JL48gByPh`(ю;hqGZ)sIz^OzN33ҁHN?ғGJ8^:QF:hINh(/ji'<Ҕ~4fs^NAw-&z@ɥ#ю)KޏAҀj.>KHQԚ8iM/$ISIGNh&^qJ1A#=)3JqFyc>c:wΌf~48c3֓8Q{R \b^FM:xюqCԹҕA#==#LRt&CF1ɣA)g?N'|f@Z42)8 gJ#4c,J 5)^)ѥ8r9֦D0X қtXuȥS i|u=K2qHPL9ɧn^*ONds*$gY>#Za^MdI*6\c|T{~c\ғ)Қ{qL"3M=( w;Rc'R4Aghߚ0s)h9<ў1ғ8/@jSh<:{_jC׊::PH" =?\d Lf#KҎ QQPzҗ(ϭp~tuGϥ22)ri:GJJSQ1IR(HOAtqFh ' RE/Iގi7Q(K߮hǽ(M&y/@;sڗ9ҔڃڐQ'1ghi{QP1^ 8h֔iy*sW }jd? >V C׵L2xL+&b8CE/3V#q6(rTGSڥ,'zc!-ՀoN}j$LHjY6!̤>^*~MH*xW :S@@5'Pc4qHPC'5-E$6gJa_Zia^֓)ԇ;SBRN{I֎SH#4n$j1Liq^IJpޗh8ڐzPy3֚A8J;z㹠R֗Z;{sGA:ޔfyIQʎp/Z:A:gCG4v2(E)Ai ~4(ȠhۃG"{RizQӧ4gފ3Iɣ9=)Gh8P94f8!.x&h8&xF}zRw.rh&ސJsIA攓=qҀsGf23GH9RC9& &::19(>xxIԠѓQLzi{P:s@g4Q@c;'c@8(4ۑ(&x4G^*?Z=HPGqGZP}1LRA(qړdR'Aȥؚ0JCҗAr(3)=y :i; Q΃0)sH(hzGⓧJ?:RsvA= !=)ztKjN҃J?\ԭ0sGsG^)x);sJj3ARb~4N0)qJ1IO28"x(N[ޞF;S{R1IcaX;SHF:Ԑ!ڤt;p8⛂dj3qqޭ2=IhrA \GP \x9.!hGJhF3N[p#^*ARXA bJ$aAګ`;8 S\dfD TDb0)ZF\{SGOsM#48Av*CGF81NyF ;%'J;R1Eɤ'^z03):sA w{ўx􃎔q&yQw'֐g=:PO4`b Nyb@9┮cR<:Fh##ޓP}i:t8? <ҚN=dJ.i:zQ)3җI>׽- >h!/Z3fRwi2i;Ӻwڎt֧? ޴8jHxQI^d{Rӌդ\EZ)#'JsNx~a\G|㚵@ő4tyҖhn'T{q)? 6J>^@;gPNqR^1U9]3EUDifmP횂XlTf8Ui"3LxvUsv~u}1Uge֢sQ?4zl9FN)# J8licQ)SrEJW3SJD7Zl[p=*IMu+T,%1c1R_-FsK$ siޣx| DwҔ!sP(OqQ3MSA8Q95V7OZdv g p?:"Q2ҫ G"q9Uj7N*"ul8#LlgڛښFs!0yɠ{Rcz(>1I׎(1J0;tKuJpZ4'~CFhǥ'4'4gOÊ_޼/Gc@:Ax;H\wv~b{GQ3sIlv!hҝq۵Qc}h)E&)@Q)}N@qI:IPqރץ4w㎴t44Q1i@q֗chhjP8恏J3:p(#wQҁj:N#8Ҏ(J?J^3Iץ3hF8ɣ>RClQ׾)O p9ZUSsӊpҝީqR@NjfP=3ڜc^ icy\Ԗ6V;իH&qR48<դS|u5gtB>oRT- ÊrN5;8ZtKr*7o4/ _1Ҡ 6H~⡒3ҙ '35PwZU$*qQM5X9NqQ3|}isȨ1Aۡ5tj3ӥ'08)221KJ_΂8j '֔) 4 p(I\P G'sKۥ@9ȥ(TqJzp)鞾Դ=((\I GCB9.I-ʁbTNƔPx)ץ r(8#=:R1M9injQ=i>iG<Ni{ :zR@84ΔsN4$JLPiz*N├qE4lbJ=ϵKQ)p3Fq֌ڊ){RsFi;R=Q#H:/>`($gRӭ!s(4joQKbڀ?*Lh_—0)Ï˽M;vxҜNbsRJ)W;rjK~<W-ZӏWҖCOִdOVeqVam`.89*. "EXhE>H1REqC!*ph!*cbAsRx6B3Oup9PȜ4UvBO4OY=*)T5ZX*`vFwUr犮 #T$0*&#q7S4L=qM4) xG4`Rtx@=sG4=(8J;掣ҎAjBxQ֌ c23Ih8gKP(P2yc=i8JpqHO4x擽39u< oRэRgRڌץ(>(&GqKhڔ!/lf&:v;޹8gʓFxKh=wp{Rc&ց<>br:4uNixhsFFqJ})3ږ)=vQf(ICNր1SciBv&@)+N)Qrd0E,Xe869jCv5L8zRI9J8ڏ'A`gڔu4c83Hrx QRߚB} zҌRu/:P#h' 1h 3E#(qF{4}(I=izt}Խ@Ӄ. wJN)G u .9=R~4}EjP1H qPH ;玴8/<4yӨƌc/SIX4wKU8gsJzqQy֜ @9>|c` >Q֖07Ւ(Kn'֦uҮ[Õ\q޴bt@Lբѐ5%dz&B2WH\s[95bސ վ< 7ެHAM2i& rD6Uy":ҘڇgG$d T-#URxa=E@T iCi,3U#[wߞjy8bmQHҠaJENMDFj&^sQ߽3sMMޔfghzhQߥ&1=i{u)}h|G'/c֓|Q׽R㏭Gi3ϥ/ZN} ;RQ\qIӌSJ8Q'izڌCt KڒG4g cߵ.x9#3I`LFxEZ_֎qwFGFGz()x@sڎ~4摍(uJ:(p{њQ^ԀF3A`FHJO4wE;4NqA<P1F:QsҔg=sH{R4 g/ \zb sN(?QMK:Q@H1ȣڂzsFNsFKIQiOKߊNI4Ҁh=JxzRv9JzPZ\qNESI"8XUzsJCUes U9WO/֌*ՇkALzCs4E-V8O#p⦎ /Ƈ#c!@Q'w$9L٧TV&f*%a֨elsUjlm*'TRj5xx5BX0ju9W15X$N*&\*"1n9DښLnȦ Ni9擶1Gӥ/8&sQΏǚQQ֓G=( SҚyzxϽ&3Jxq4GAGS(=88ўipHh )As zK=);юjN$ft=>A):ҏCHs4g8 OlRd{H3i@8?nԃ4c⃃F;9IIiOz^tqHFO(L:ҏG8(qF1֌=}Ҏ'lRK)4WGQҔԝ99N0}:QG/8R4RiH8IҗۊZNu(yJip>1օw䎣zdyQ\eҨ4V|5]Չ"W-;3O|ZqyXN\I+A**h85+upGjP8))1-V#hMjxjIjnѸfA K,Y^zbc4٠)zKr[Aێ_dT2OJdQ`桔?-@ǚk6GZH E' Y9]0n>*j(鞵* JE׽Dba" Ȩʞj2)siwݹ}zMۓJ=):'CAz1sIip:򴠞=)Nإƀ8r}(qJZoc4( 9^h9 )G=i1F(~vh#8gҏ^nR#cNi8<恀1ɥ84.{R`.:RJQMJi($~b q@<}i3hɠt:`qJNݩ旂13J:A=is ځҚOJzt' ֮eEXaVhZ0ON*D|KN>Yny*͸#xq dJ<ʸmKY9UajH"4#;h!xMhyՓ)vji M4[)ѹqRyC/J`{T(8j9?Q.ڂR 8QΣ5ہVd `UrC"1Tj21T1$^̵yɨ DT-DTmL0iM'Z'SIKqCǽ')>w֐qɠ>()sIf^hӚ ȣ֎&h:u>—Q4ӎ)y䎔c)0i~<?4GSJ9Rd(tQ=~.{ N>(⒌K$ VqS۶ELٚzM]>݁nq~-5+ĀZgy@֣H'8$2(?Zd ҠhlR-W .q;~XҢPH4C'"#*lEG#T9Pjjæ:UyTsUU7]UST:"jQ=*&㊌u4QHr:GA)3794{r??~QޗސAI{{p8N)O^RuOK=((J:>gJC/F?J3GNc#hǹM7o4 ?Fr8(⓷Ҕ}M!4–8ɠ{ c@OEw j)I}hK;҂sI@JIj3ڏH:QG9KL bsڃGJh1&yJ1ך>r;SN{RLR~gڔr)KךN1hzRM4JzR(/^h(8S K?ZCz;ynTL 1r* D䑎$p*99:i_T~ @1TczUw9cT$EBt5Z=jm5qM:ьydPJ39@~h{x֚G(#RJ: RqM~㏥ {t9F1I488Qr);^:c4:}h)┏ZNSy֖֓?ZwaF?&xPO/l=IA~4 󞔹AI(-4sG`{P&.:LJ 'sE qҐzZ7w' M8 AK֓E!K)󣎔s@hx@'4\g(44({Niy'^3K;r*;ўhH9>>Oڟsh­3a;f<*6*H欜*x89 Z\ U/";9a=K dS0lb-!곸jy=JYd=OSB*i]wSڠۜUiWT/MUhdQT2'BSjZ"U'n2*pj w`U.׽DU4?P`zTGMFy4ÁL'M=)GnqI<0} ;{fh?{h4:cf1N3c@F)A'9֓>Gj1hށ֎<њN{Q9gI3(J}cPNJ3iyҚN('4H(o^R1GsI8);{sGZ @ uڎF~^g4g;Ɨ>{HRw^O^Tue>ZmXhozTEh*Np*;԰8SɫP1iIWÏ/:'b\'@`^yc7{Ԓ;R";Sd_J/81HA4Y?QI@#"yA! Qqޫ NUrj7%&|dpEWNFUgaUnw|sUʌA"U 9P0CQOƢ?J:XTdPNs4>gҁדGLќA4u'#P '"׽QGz=P3h8Ȥgڔgڂvҏ~(|R|QhKہHxgQ}h4FiwqGZ1@FE)ў;Q FxE&M)G4EN6@hiH8/l LQj\8=1NxIJ>I(֎Լ֎zGz:RrӺ) _Ҏi94szR)֗94Iڗ8:RFh4/F?j9}iAҗ9z8*H܎"8jh S{U'aVnف5o hSG21OdՂR~5jT*O ֬⥷$#ҭB' jؗ ʗ;bxhFizi֗GCzL^٠@>d sIޗ(j\g'. 恃ȥj3@L⎔sKڗG=(Z3A)I8Ps(h<ю/ZҌ}sKn(u=(&2'#Z3?J;s@Ijczz8I xz՛tɩp@ L9ARE٫ ҬB6RC/Ɨ&xN;Q}iqZNFqhj:QךN4h)s4v89b.8tG G-p)zvU$fIj8C/*hlnc8i@nEJ]ԑ,*vZ%<1&wsVi 3V]ߊj'&g=)c9$ uD'98P1FWPO,A,u1ڪȜj&^9U]y5 tA< HdoPRIFj $=ɃA$<jI۵W*aT}_j*DN)iސcIΌh4hҎu=)1ށOZ1@sRvǵHAj◐8&9i恜ъ(Z6q@с1AgE(csAu/jLQ8<УތrxяJ14d1="Iȥh9ghI1Psz;zҟn)2{Ӏ'CKj1E4{~ARhIQ:Hy&Z)O1@'84pNh#ߊj;Py׭&}GFi:)huQHzⓡE8^҃ڗ89E-(ƞFG^iSi~bG4?[zzY v6_ƭVmUaZPIjx-WqةclS?*50=j qfmiѧ͑Sg&1) |TA.s"I4,AS<%1Y~^j#0݌ӌ_j$p'T2IQ]{Ui5f1⠐gGPT 3 "ޫHuH*&֡v$ 8Pu74G3)c4pp}(aIр:'&\Rs:ޓ^qIh(GbQ=i;{R팚^֓fE-&9ҁK:uC3GsK{P84J2(3i{}( u4!4C(ҁ4 ;fi2}hǽ/p(=i;r)z{qފ=qϵ&qKA)?9#sKց֊RPGK(>c4i~N){br(>3B?t8f)IiyG~hQi{Ҏ)GJZpx)÷=~<H4u]3VNt#Z [*$ж$ǽi zɫ;OS'K7\eqS@~e":f-jt_M Qڤh~\'-Ox϶i<nh\,h9 [0c4)F)?jR83K:AF{Qߦ(4bQhRp3GPsюg9qFy(@94}h HiI9LsJGJ4)EzQԙҔ{:RAғ.N)94u4cJzdPxdRgJ 94=i{Q 8i”z98~"8(<cOSՁ.H9xX@80]2*h}SbSS榏#yF~\cjǵK<`S)jC?=jsYrcPK0i)i qPC&EWeҢ?ʫ9Ȩ^0*AP>sQ795Q3cE2IP<UG B{GjGʜ[P99>*ǭB=*&Q018#񦓁Ii:Q)4g4dg8fN(=3gQQNa@2irќ 4`LqF;⌜bӵc8$wN9sIҏQK4QK9a.8c҂4t)Җc4Q9)0{R ={QӵZN:P:`Ri1=h98'qڂƀrh;QcA3C(u ~u4sRw=)3K(=8@s@ E(iiqu)1ޗ4g=J9)sGg4((d \qҎhcLiF*'b1Q的8Q<= vr/'*]9͞A[u&cҢ<|TmDsSsJkuF8HI8' VD>9V ,R!nSJUpHLXMVJ1S@)F*&SWOcJ3 .=j6r9F_j6*#!'*7MDҎ*e q֫I&sUUvlPnj$jQ: 5"nH~43֘ɤ&ŒqMϵJSrhIhҔoZsJsڛsڔwRs=>yZLv(gn)Lr(94)B;8J[&:KךO`hi1:RF3A4vl@\S2 N3;RJx2HGJwS,-9%R ?9L١g/xFy`W #=iޣ8'9d*21Wsڣaҡa*7D3U?ʫ!ҫg5]5 Hzv'"2w^L{6l''dLsi~ÍOړh94vOOZCӓF}GZBi388):){g4=QH &HizZNQӌQsMǭ\4'0J:R)i`K׵784L>=(==Q֎~Gc֓#ʌQ׷4Rҁ (I)F4<ӆ(4P<493KHzҀ13֏^hQ^R1E4g:Qg旑ڔsJJp)yv9NRKT,mT۹O`㚵o#`֮mYnQ5b68).sGj@G.8u=)Rz 0:sK9Pq=(=:sJrxQ:L{wh=iE&pHz;Rwdf٥A4uihzy4,;f␎#h>8Occ8px(aQg/8Qj{u8piN֐Z:^)J'4I֔QqGF28{Rv(F9w(vz_z1z_j=v=9(sG4z)Nq)ϥ/LQA'9$cޏN/:RSJ1NR`ƜdJ=Fy֥Lj2*1jx8i_fB\qV㚰&ՅuN) SoRz=iA~P)IJh1TL}3ڣ]Li=E4ɊҀ:(yxUZPOWEBޫHx@́@sҡ~jQQ?F֣c88jCq h<4rM/CZB1KNJZ;Bq(w4v "hv4qސF`A:dғsN4t( =sKF99r(4.{w ^tRqQۑGzZ;}qG@\r}hǭ(֜:R~4qC44^r <ў)> ёΎsRFi2(\AOz^揥/!&ȥ(֎qGJ!旌bԀ^vږtSI9\MwJ@:(L|g4iԘ/<ҏsG8vHKx_Z Vg8=j9N jDC`w=<|F*T8KSS,.8OSRxB3Ry zѿހQ;DJ5g(?\Nh$bۥ&p? ?ZvAzg<@9qޗtzOZ\gޓ8ץ`jP=>88A}ixwcG#i;ьKbڎs҃ӭ(R{ѓ1^QMH(=izbOjB: 8iHw=)p8z:Qۥ'ҀAGjSҐG8G'R@(Rh P2E/;h \)=hyQQy i{iWҗK+N:R HJWϽJ⦍*&`TI튴֦*qj`{SNJ*Zr❒ 9X.qxs@r ; r)VZ 4`4˃֗Jg׊C £5sM1Q3 lrJ%8#Wp*G@5T,OQP1{Tlp*,j'7j"y1FNOSA{T@tRc9HzғOqAR`ҀOwb\ҌgI׵7o8RqzӺRGz'(n4h -hGQh3A=zsF{v#c;&pE;ђ=)F2h)c)5 a֜ SoZNI> =PsOOVI>)nM8=:Մ֤cҭoZ9}jǚ:枒Ƥs)_zP#P,3֍IsL&zà79xC!8I?Jg=s@^3P#M.3QI/*"d);?"HF1ԆST7֕eɩ<(Ni|AFi|MAqL.3iM D*@뚆L5 7TD18z 4ZaK4.pEڎOj?J8hJ1wiOJU_Ɲ})اJOWQ*dT˓S4rYyYAlޝjaOҥV.,҂r)H?ΞqM"@4.9/piyHg4pFy7n{~y<֘g9iFgD '9N]}*2r*#מ{ڣcD[MFN)?'Ln4HNsڂE!)=y4i}h)=gF3֎7')1֔p2(GLsKȦdcj>GCKM<:RQFph(8IfAќ^ԟ.'֗N)84P JRM4LQ)'9(9&xqKc$j^(J:}hqQ04O#M>`Mwj@y~TMNNix1Fr9:Ҟ)8&h({f(:RByԇ<ZnN)s@RwF})rh{S;fߚ;AKZ:ZZMރ8'#igMFhqPOJ24/QFh8FsEQKh)8Px(RR)q84zh4 :QJ1h- q֔FI')҂IƤƕxgNQ;;ғ/JN.9'(ɤ3^^Rc(4vӳv/i: N@=G=h G@4E/_JCK}(9ϵ/'c.p('z<^"O=h)=:Rh4(t4P4u"4w'旡}(J_K}E'ng4u(ɥ(ɤy9<' z ZL`{ӇRd:җiIQڗ=hyu;wq)8hS7<7~j@a n `M8jeaE<WiḧsN]q~)wt8>G4吊 >v=Oc4q@JGJAhzQގ瞔u#{RKޔqޓG$bҏG^ \ZS_Ύ۽KڐP1zSIH=ri8'ڗ }gQzQ!ɥ"KIۊKҀ/zRP:rh:isJPp2?^P:{Tb8n9ҥW ʞ>2')&{Tf:sNz}@ICNۭ80 Nݜq(8R94) S8K10\ g@8yM#HGқ=*ɃJiiߚiZ5n)x3)'903F4ΧA4wtIJ^hI^֌KQǧ4J3ߥc21)(:Ӹ=Oȥ8fNSiÃӃOsOVJpcSĸLz\8H S#ҔJwcj)x?> uA.)=8)撔``IϮ)zOZ\q@K(cьZ:u4g)R:Rg)ݨ=sHy1JAqOZLӻcbZP0ƀx٠ӇqN44r ;?O1OSZq9E<Rw{SisS98GqNN8h2摜c7dfѽM1L$0''G܃M'SYa44E4i#i!!ҐzH8恏LѐOJOQKq@~tt"$("i} L`Gcր84I9x88A9 P=!(8┎hB9qGqIޗQQ1ތ)#c4;(w<J:Z\`PxsPq4bAL 1qP9qG֗֐s֘9>KE/n )ҐGsKZ;P;ړhK/Q?z P{cޗz://s)4;sь/zm:ҁҁRcҔLSO\ьbGRu"҂)1:ъ;s g}?Z>jnpzRHsҗ8Ҕ{IKIAҎ`g9GzMҖ3^IG={4O4HyқJ0{9PHQ_S@``Q( ) PO> )O4旽=Hhߞ`Qbs'KGnh9ZZCK׊A׭/(qFGj\qHO֗ 8hzSK)qN :p֜Ji۱Jz杻z|+d*vx4u&pZ2L4F@֎>R9ws\sFsF(}GZ3qH)܎֎ ȥ&tRv=@N~4"&9?ќ ^ wdю@ ֒)@'ԽoZLR:ߚ DGirhx(tI9PAAc94 (hƐZ^(z?dMJH&y44Ss&x=}i'4ҒiqCh{{R돭/ށ֎E.s҃ӊJ=:uޗj6֓KǵFq@4t9G9?Z: =h)(M/N3KΗ=jvxJOz)TOKpb8';90hV@ozytp=h'i4"ic4>9FiFM7<`SO'Ni{PiqHH:Rng4F( ǭԙϭ A `%{zJNOz"}i3֔)34~t'KAisA hA'4q) 1\P:Rd)i3&z)sSpOZ H:R9KhH旁ɠ\ސRzGzƓIϥ3``Ҏ1)i=3K>gރҗ2y=)( C{f$`Q>(֎JN{zZ\u4phgZ94vhRJzu>FNzF};zRƌ}(<}(@挟JP?:C^szLgP){QqLgڗ|sK@AJE&xJOhr:z}xtt@KsIni{Hx# M4@Rh=h'dNp)y$QCҐOaJ:Qz!4u":S4}?*8< LcK9sF)p qA!=(4ZBʗ'1HxpizPxQ81(girs&xG~;Oz1c'Ҕt0 &x<{Fzސb)IގZ21G`Gqڊq!yӥ.})>Pr{84ɠ1H1K֊Z94}h/zOq@sG:QK(hR ԴF1K)hzj.H֎3 Kރz ֎旞i1Kߐ):\1ҏ43QQ4֏zPx8g.N) 2h$xǡNsHrNEҗ{ 1{c MΊ p(#r1C穣=Q8:zhdFsKH2ixNsFxwqM'c}^hc!gZByu?惓ҌB^RsӜQӥyG={QӊCu҂9ɣ =@>()0"zAOҐzQ{ .9>oʎR.}qGNqь:)3_ J&3x4~sJx'!sFr=(xPIA(Z;uQ)=(&){R@g/QHqP>8}iJ>r 8Rizwi='qwRN htRsM.y4QLRbi?€h}i@9Rc(i{b99I(i{s^i9=)}£瞔drh)4Kztu(d^=E/J^1 ь)GJC)sFM.ssKA4ҟjS=ix^ԙi=JA8`JO=)3NP1Qi ~ܞҎ@4;ғn{ _P4uq`ⓜbڔf(01Ґw ;֌F:t KR:3FhMRRt@PO&q֊01K?ZNGz9\?QHFqFF11C@GJ>:Q;zPHFM;dRgwLRRZL N41⌊2(sGQ@F@N8ɥ'Aڃ֗.xϵ2:Lu4qhJ(z:R@>9  ɠ=zqZhM/ZLRGz^1IG^hG&rh擟]4Pq@:Lw旚GLQ@'Ɲh .hF(<Z3€hގ(<}iEғ94sAփzGq֗#&1)G9(z |sKƎ&8.=ix?Z3GK:P{g\udg(n.hZ QҐ:Cގ{Fi 9)sfri:4g48I QߥG4fsG 1JGh)9'@&I9gџ4/Z ܊Q zsց探9Ҏ:R ހ} P:GJL~Tn9Z\84y(=4Q$}($`њ8=E)9"4Ai'Ҏ)xfRRE)=(''ҌFhIiOΊ?/S֐u/~4j7shO44dzQ֗r)J):=)Gi;pz҃(9Iⓚ3uKQۊ;RsM/=J3GC'/A3'cKQRsE҃G?Z'**Cc4R|PF(杁I/HsځKڀh>'0ʌE(P:d4掴pG_RGz:gd~4N4(ғ(J\bfњ?g~4i Rڗ?jAA<ў>Qږ\cy4qz_&8ޓۭǠ4>ulPx)0 qQێ)s3IקZ1"QZ(?֗CF==FxZCӊn)IAғz3jӁ@'iAތ&q(?iIސwE'N <\xRrx`KIg $fLIiAZN3 ~4E(={ўԦ~Q1Q߭3('@)yFFyA4I^܊NgQJ1ڌE'GAviO4w=)3J8HH (qKIizRw:QإRw4C Q:Q)֗)G^\8gh$4`uqF~ PsA4f ɣ!hZ"ti◭&0;RN8='hցzў)}gK:nh֗J SFxZNyGn)3 .8(JL))hh3A┎i1HHEQۊZCix擠(I(:ZC23IJ:f=1FFh(N)1֗tqE/sHO8@@G4A8=Rh$JJSҐsҎ8zE6$Ni4E/|v=h:zN (Nh>) JLќ\4Z:\i<=G=(SHN?;ތ9փt^(zђ(;Qɤj,PxxҜ4shgJJ:GiSxi2)siq ڎHG=(9L"@84/|q /43Oz1⓭K裚(s1-&(8K'z)##Ґ R bQ@4f wG$hJ֎ /h KHNzR4~J2sAz::RfZ1){ӱiA)g.})8'hi w4zPh砠3KG^NqG8'>gizQhcҐhړ>d("g1OzS2  u֍8.=)=h=}(uuE&iGOE3 zюxIG#Sz_AG(tփ҂) ◵IJSGOJZ1wI 'w*Qߊ3A4c֗Q):ZNs֗њ)iOCKAzϥ(1=.(H&9ǽ ǭ8Ҏx4sGnhj:3I҃E.8=(Np') qGz_~1Qڌ "ގ'9QNciHRb{}(Qj֒>J@)p3GI(~(Mt;RJ1ǥ)dR4c=84bQځRgޓKh(F=i?z}h>gG4/jNԧ8(#擥JZ0qAH9'_C@ɣfȣ9=ii=q@&0)G8Fi1A9#R8(E&(iq郎Ԙ)&14QGl&9c=(1K֓=~4c<瞔>H?)(#<~4biqLqjSv)u4iOLюR.(Z1G|׭}h&8j1Ȥ ◵!\RS~)'ǥf'-Nh>ԟJ;R^(owƂ"QbΓ9ю4M<㞝iqr zRczNE(4QNQAoZ1Z:4c֎qiA҅qѷ$RcJ\w\c7 Ki1.4sJ;ڐ4c4);J89'ڎ ҊF Ґ4OzB9yJzRbR֐:jP9ZL;ъ9ϽgI֗ѶIxA3KC׽9 6sH)~M(hҗ;aGI@1P:tLS}x 44}({sH>H3KғGN'=掴vJ:pzv03JGZ6-ьGJh<^i9iOҌsHFzRIRqI^PF(Z1(4QEJiRԘ":F2xZBҜ Q)q4`8:RAK9R9v9 xbڛzs&p(#>Ɛ•M 0)@4`ƒbҌ@M/j? @Ls֖ʏtf$F9ڎƔⓧ~ . dьڌQLGz\qGZZ@j^hh(4bzAI>R)y$tQsN4d(`ޗJ9ipp;P1R#.qCGzB(9j_dd 09s2i}(#yfGnG<H Jxh҃җh08;JR?*Q%ԸQP9B~>q޴v◜sIڗ恐sڊ֎ w28v掾Ԅ{.qGzBy&`i9Mړ0=)q6:Q'9{Rc){qяZPHsP=ALsfR҂9A#ڊ'Ҟ>q3Ҏ):~TiG<1ڎ'4 9- Ҍ$iO G=GR;у4{R:8HE(i)sߚNs(;88J^qJ}hF(#/)=P<().2)4@h=x⃚^1Iҗp(F .:sIKAGQNҐ{Rc?1z1.3H3JA4GK#Ǝ?__Žޔ >M9/ \x4!tw 0 1&2((4מgҎ!RؤGGJAzRP3IZ {vT ;dF4PsBRz^1@ IQu):}(0qIߞri3G<ގ _z3G4OzAKjCyp=i{=)iq4:⃜{Qڌ{"<4d}(Q&9A8(9{`Ҏ*1@qҌPi~1ށҐqA'h^(4h)zj^i:pIRRrNiGCIޓ#)_|Rb@8c=iqQ4v}iG(i3^F0}QH~)3Ҕs@J0i;Pz 84zRGNcdHzR(8b =y>z)rhv-&ZP9Hx4=M'IG gA`h֏zC1J9t4SHusZOz=I :q:A(Rvy/&y! ;qIQFqҌq׎t ;ftwz(MKys@Kǭ!M%;Rg^*!܊3G&Q@G9!J\(֗s;H1K4zQi9 P@Ҏg=hȠuhJ3I\ⓥ(9Q!4{K94c';9@hjQF}:rydڃQtzJ(ɣGҜt('&hF}җ ;bP~sGnhǭOZRO^1H:fjnzuiqғriOQHs48@M砠ҌJHh1Z1;(#8G9Fx}ޝh/zBH4\(# 硤go&sFxh =i9Ӟt'>&OaKZ ?OPrF):A9?J9uh (4~4F?*7R ց!IۓGa/Az?:A='@{G8ړ9ǭJOz:rht@)FsGz:POJAҎM'AA)IE.sHh g1I;RR=s=M>cQ A(Fx`Pi9Kg"?4g^3;Q 3G~g= i҂qz:AFh"u▎:Qۚ3q@G~P:u' NzQRJ3R}h.;ќHss@Py4;Kސ}(Ji"ZCs֓z2FGG J94(8N/^vԠ~TcL GKLu8>(AE/Z:RPqN @Ong^(C@/"4jQӵh@GSғJ^ԝ:1hM.{3Hz;QԄwdӲiGK8IJpyu jv1ғE ?(3KZ)Oz\q -%hс֏KRRquI֗4u 4KNOJ\NQiq:Q߭J_'J}i{RRҎZ:wZL ;Q\֊SH1;ߚ\ gތt4 R):8'/"֎{(tߎqKq 4h|ќu( qFpyqyF{:bIۭ(Fq֔>SJq1H{i{Q{@9S)Q: ZRd^;yA>}(vyF1EQ>A9#GSKғ)3Kz;▛{J(=(J8>QۥR-&y4fџZ(g1ڌcёҎiO" ^( tJx_zzӚ3Lg^P;c=M( (t >ci{c&8<:u @9&I܊Z03ϥ}J;q''N9⓭hJ2(<(ގ4;Fy0R{SH#ݨc{RcҗM?L;ddRփ{P:f 7#i{QIF??Z^zR/Aj4J8&{LwKJh8ϧҐzJHA8(ii>H )Iރځǽcz=qFy(=3@ 4$Pc@xK>KGךiPO4gڎqIqKsK;h's(>Z0=hRE&8\Pӥ&ќi=1ҔFi{fOZݤ)q@Rc= ;ޔE&9sKؚ$fM!4:ю '4٣?h c{}SNGC /N(j1G=h9Q2~t:z;Rc?6)NwF18ȣPaFzzJSN:IiqGZ3R曌RHh-&H2isIGC;zqG99qJxi9qG&}qHrfҎ?.9zCGJ (u 4i2G◌P>3=”qKIގ=sI43KzRCFp(GQ@=sJ 884&#GPh(Cri%8`QJ0hFxZN)x֓Z_z;Ri;u(4wtZLNhz^zz^xeJ3h99.F2iO=)2;=(^9c)r1OJ^(HO;ҁO8Tҗ8=E'إ9NOJS{i٣' =8K8(i3ϵ/'( H9<f@GcAFx(#Q٣9{Ph/PiG=Gri:c1GKAs@=3N3A}>)44h҃4{JN)!QdcފS'):PF:Rp2sRӚNEAiIR Ax撏&֛yAKFyN'HOJq֎)sH2OA2h9=E ) N֓#4qG>Rs ($qGlGGK4J>4u 4g LiF:bbIڎz1QFhu'zZ@◌ь'8掝9y('4wړS3ړb):z^v48N=qKIj;jZ_J=8J^GJLKց4&P:tށ9iA&9=QfQiEc1֓Gph}h=zPy==  #4r}(=hɣ4t9"jLdH}sKEQ{ќQړ)G|gҗbIRF{uGё掼Rc4`G{O4Ҍ4wdR4qA M@44:8"ҁފB)z3֌֓ԙ挊3GJ\ތԠi3ϵ/’4ҌRR}hF(A{8P⌌{8#'z2sA搎y҂E?.qӚNi}3E.(''w4g4)8Pr>ݨAFѓ@qKuLq0(#ގŽsG"(94AvQRz0h)stI=(2Eg9(4gQ3@ޔK#h4wR;MKiJ9$ҊJ(}) 挞j8~~i:RRNgE'j:({Rc4{ zRFy')&۽.)1zP3Ni3: Iߚ^ԇ4~4cOf<▓5)@qZSH(isR Hr) A@4)psAуzN3J9qF8(g#"(#4c=(>QKIQւ(Gz$8&i:~4sK=1Es4=iO#((⎆iqRQzS{;⏥ i}(փ֌ _7db{Hh)“Δ'izr(}(Ih/Ziޗ8J@sN&J9֗◜u4яz8Ldq/҃J3֗ޒh>@=zMcڔAc4t{ZRIFhtu(ޝM>j:ڊJ\zR4Ҋ;uKH}ipzARy4i')I{QGL?vKHZȢq@^@K;uKbI#GOƆ(!&=y/Rg)G4Hh(֗rhzqGӭցsGs@FyduJ840><)<\x4cA4sIM;g@IQ;P:搎(w)R4zO^Cڎ:ҊLϵёG("j_փt~p1\v(1ޓ~iyNMzR0@zQ1Q:ҁԃAR`R^ғs?Jb i@4vE'Z\h#"ڔ=h9oN'Z84}))xNzGnyJ= 7Z0Gi3qLN}@ӵ)⎟Z1<)x'Pm?ڀ;"Q)=i{qF3At:4sAqG? (G'4J0qIu94=ր8⏭'z8F&  )ϥ.r)(wGJ(4{\u" L`RAc8=!~4zPzڊLt4ѓP(Ҕ~4ǧ~P>;zP'Lbg9)?8:Q&=M4@.zd\qH)xphŒRw㱠utZOlQ(J;Q֐bNu4Aקj\RԙF;RMz8Gx@GNi8=x4-!IހqVR{POAu&zA4փ.Ni9ih4cN()X{R`яJ0}iG^bޔs'\R tAI_Ό/8)4GsEP:qFH4g.8\:84g"ǽځPG4c֌3( ր8"֓; fgJ^h?8(@Fh4v8R9qAIh(=ցF(RR@sGJEGzLc)qIQ9E.;(GAE`qJE'CG={tGQJ~Rc4qut/ @s֎wQށA=(4MҀ84g ~v(IAzwE(@=)i8JiqhIǥ.q@uI׽/M((=G~Iڊw<Ⓚ?zQHN:JA)撎zҁ~Qh4)O8Qރ4rƀFsHiEҌF;z ^@OK)?J_ZLGUMŽ)zRf{Rj=zQiG9<(ԟsF){tONJZ;йɠ#bv)}3JG'B(z?`zҜG;x8AHJs@E.9tR4$pisM҃(1A!8})G֓=G\c.{qIϥ掄R:zQדFO8ii==z3(qIʌ~TLgJ}hj:RHMRҎ/J=sIJ3ڂ&}ii:q !jPGJA )Z1 &=)zzL0)܁H 9Lҟ ~Tpҁx\RrsKފ_jo|sJzt=@IFyfhG`:ߦh}(ϧJ\{i2xvp)Z=(ϮhҌg^sӊNI$R@AQ׽dQ< i8r=ҜJjLsGC\(ړsKJ #'$ws)~@Gn3w֛RIZ;RJ;җJ1֓h@>9z_j8'aJH4Q4 zbiŠ:c(Qgph #=)r3H3ۥ/OZ9ڃɣ8gE(` 1GQ4Z֓GNc'1KHr9`Q0=Mu=("9翥&2r)ݱIߵ"sڔ4gRp; 3E(Gc4g֌i:ZJZ1!)ⓩ&0Z;NzN?TRc4g)O—9Q^1JOƔr1IiO @֔{Rt`t4O9!(ގt>ќ߽&zbJ:b84tޓ9&&~u)zGjNsGw}(恊tKҎh ph# b/'שRgGcҁi3ZLg^/JnNxuGQ:AA21KGCI)z`O4Frzyu9: sҎE/Z='!?QE.qA掴ΔSGzLG 3ތzqG9I֌҃J p)ZZz;QsM֗9ϨQJ^qhJLcԃOtcGJ:zdsH4HFG_z_z@*S tq;P}1GAҌN=iZROIAIڗsF}/nHisjCӦ)p1@'R){&{QA>)FF8g'AFiq─)gNsKғNi(#J3ҊA9(揥GA)GR)8b΃\'!^hҌSI⁚^Ը&@sh< C֌~(9? z $fRs::g"( :惒h=)9ڔQޓ/z@pqޗ= sK֐Iޗ<1G9# ctP@byc=(8cryRh#ҐsKPA.:R'I}Ah4`g3A44R?C8g wRRJDataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_60.jpg000066400000000000000000002541071511411446000235560ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?*LqF=x>QԚRp=ך 3A~TqGץ.F)=hG={Q qJN?8ў23BzR)sjOzQ;QߚN9❐G43\Aixaץvt?cޖ4w4`Qs!9@ץ8t ;3@rFiǓԘ9?(3ڐu=J=(^ԃ4~T)=G4vdƎ(ўhGlf_ag})zx4qA( ߯g=I8ϥ'A)$i3K<1\0@8G>sAjp~R)1J>GQӊ8J@CցҁHGAq@ PGsJzhP0Z^ƛ2)xf{Iߥ.G4u8Gyd瞔gPJ03֏9 GK۽'EJ;Q{Q (J?)F3Hx_ .r=NsJAF2zx8AօH1 //AI`?ZڀGG9Qi847;sMҎhZ;RB?ƔCҌZ1cҔgQJBE.v>r9pM F>Z)@惞tzF2₣9@'=.31 ACK=(4u@ր(,Go@F=ZNsG4G&2yK΀zsI:QRIR1MKߊNy=)1dKc#1;RўGJLK@>Ixҗ80is<ю@8< LgԸHG48z4 ҌqMǮiH{RGnM .yh&8#LZCE/~h hQ֔g>ԝ\sKڛ`?:zM 21qьRO@}s@tA(&ތ{H: A&y)ۜc4fu)zOZ1(4ӭ&;h g2(ސF8Ӱ1zCvFriI9ޔ L&sHsG<⎙)?ƗQ =(jFp)qȣ#{A}hr(wM'!x4I(4`~4!Gl 0OnzG `Rz 4v'=f >cQ@h9q֌gi8hJ\ Rm=&1ڗ{ҁOj08` ޓ 4A:KGZ3OJEQhrM!Դ Px=GZ^cK1G/qʓ0޴ҔciNьRK(=)>izҝcց``{RixHF8g1:=MbGb Rތq'Ci9)GjAE/HzNip: ^384G^){Rc)4PpAZN)x >pOqAIɥ֏zARM >cڎH<}O4uipA{N`i'NiH4c){tp(i~TxM)i?ތ?ZC;uPhzҞiFyG((AN94g#(9٥<֝})z}hIҁ-!;RF1GqIуqG^=(1GF1֌cJg/"NԤzShxGHpzJ1'lL֔Ǝ:sH ڗP*C4 Rvt=h#A)=)3)zqHxJLӭchqQZLdFq; \zZ\RqFph'RH~uёf$4=(>ҁ_LGjOCQQސ0(n9G#c .9RAM0x;~4׊:TG=(zPx4w8Z\h(^'#ގG&}E%)⃎f{~4ggjӎ1A(ڊ2)Rc9Oҗ}M4?H:ќ9CKsIxގPp@".z4`hrhJH 4cJO9у4Ps ⓾1)J1POsրj^yN >u9hhM/aL^H}A9r8#ҁ4{џAFNr(=h4'_QIҗ!=KR r3KH J=qI4g )J=M&? \֐=hA< P1jSR}irz^v<4)03h8w#'NGZA֗ZJ8Q) cOzn2)I@2iM'j^1۞)F=iz LqIޗ;i('Olҁ&zKRdf`P}(MɥMZC98viNOZNQGQCb4~xM!98Q=(u/zGI֗@8NjZLs4dgJ{cO>LҞ#&&=!tw4)}9擜)zhF28F3#(N>h{=i)q'NcR}sHiqsEtQh$Rў٠A@@1ZNiFFhǯ&4s)qNZ\Gg#Ґ⏭)>$RZ1s 4:d 3F})ZocJ?Z;sK(Rc1(>֗ޗI@vZ)1h(909 Nz\Ru<=);^g F8KcZ4 ѓ҂=<SF{сG9h:4ϵ>cJ^r94vA'iG<(8JxKъ9HzQ^)2qJ\Z;`Ҕ穤=”r3IK3҃;B:`I4Ҏ)&8J3^r=<09QZR@&I2hw&1҃ӊ3Ҏ;:):z1ҁڏZH9ޗ>c=h:Rb;P2xG'i;qJ#R#ҁ;R}:Q ; p::sN{R֓ў(4c'z0q֌PzQ 0OҏjL҃KhɠvGJ3ґ 8i31)RsQ{N? 9"ҁsHy(=y8=zҏcA)W'K 'N(R=)94jipp(\zsJNԴ&>glRcќRw(>=>ؤ<K1 ipqGQQɥǩZQȠN)ZRsHzR֓/8j9h?9R8Q? N4:Q1ҌS'|QZRq(h[ 3Jy::RgӊqjLc(v&q֗4 恟֗hԝhg.}3N~ ^G9|~lR:>zAqO/"{bpiZ:Aɠ{ҚOi{A'4<2:ܜs^IQs&9`IIߚ_lwz  vu@3izi:ހ9@ӱGqGӥ.cpڕ Ay=){Ҏ9(׭Ng4d_ c@y#E!֗z{_“c14w*B3@sϽ)z2r;QIvuiz{LuJS(#H=(1\ROqGZQ֌h(Sړ4 sGjAF1A hgK;qHG"9/cnzQތs֗""փf(=9qҌsKIڗ&M(ځҍcށc2/&:RI(9h)H&x@⎝is@Qԇ(ȣ۵'Jy9ځ:ќg4Q8{RQ ^0(1&N){MjQ֗QErh4PhG8P)qF9⒌Q׶((ފ@IKZ1׎iGh(ǭRs(Fsj^cRu)Oo҂?9F9϶): \QяZ@=(~t4`RuK0s@8G~J^qIAڗⓟJ:Py4z r)@^(ϨqKґ 23HNHҐs: :RzSj;ь ךSRc1)zPqH:Rϥ4qރF=1<4֓2i^);IIўhM/$Q֎֓SCH"GAKǭ ׭/jN@ъS(|1^(8mtڏ֗4?1ѝxhO/i3Kq֓#Ȥ4z vO47#(&H &ri~֗4QQϾ)x/AG֗'JR(#<:ҁ/Rw>cqJ2OJx.zI)@ 1Kqg zSҌR4Gj^:Q׃F0@h~Ԝ⎽bM{Rtzqt8@=iq9( ғxJp{j1(qڐ QȤ(8)O#I8)xF8(jSړPAϵc\dR`v1ҎF1ސAEҗ#J^P:yR=MРQKIpiH$9擦:8(4gBюi1֔F́Ҏ4lS)1:Q984w4&2Gj0(*I4Sɨ^h}h:Ri@i9ARi9'/!⎂M(4hK8F~j3.zNJ8gvIFiz)I8P#J:tړ񠃎{GNuΐr9iߥ(QGI=@()qڐwґ4d׭.q b٥ǭzۥ'SENhzbIsF84 )hh8G:F2~c4`t4gNzqNiiy+sAqL{קJ?ZғGS李h(Fx)OZ:M.84tޗ旿4~Fj\N}hZN4ZN@⁐~tץ'(wsߥ/jLcz:R)@⎙ m.@h#hF;u uzRdJSFޓJA@I={PGQێg'CџJ1hZ_LR}irJL) #-HsK);RqFERINz:()?4P) >qK8J~PGsAԜQzPcq Q>OsPH3(h=h4R=(Q3Ҍ;PM'jP8I ԿΌy QrsI҂@IiHN'Oj )@HqNs@Zw\7u8ZLd:0:Q?t (FE֌tc39'9с:zj ('@4shсhތdTޗi惓)ޛ.( AIZ8qI)EIh4uR9 8*0⁌p) jS@2}ޗKNGZ1@84cRc('uh'hc4= ֔ F3Ei1/OIߚP8P}F <4/08K1֌tFyI+~4pqFxt$AA\t47&y:Kۭ&9w4`cI4uڎԸ`8Q=֔9\gj6֎)(֌pxqGj:ARcҗy4C{Piz L|G43)4ɣR##RzQbF1@F1ށ=H#sKEҎc4g^:@1t#Onv8J;H}z_J9'&wу&`ьJ^j^cQ@"ӳߵ!@ qI4@ӭ h9x4ch=t.8ɤQiqJCӭH2G=E KIKR8)) )"Z=ENw#4`sGҔr(>ܚ>)cҗhMǵ$PN(;OzSRҚNҗ9:Qރ⌍֗N99}/I~tzRR\4׽'n`KNO4t(=yfҌhGbxb;qH=*!JE!ɥ 1hGZ\p3K铊Bi;u=(8:K@qJp/l~Tޔ@⛏OҎ/J0M'~is(p>q׽&34ތKғq=E{N֗8q&ӥΌG~1N9;P4sx(})xwOJOOJSNzPcJC"t`ZLqF@R֐z җMhux@(CAN<GAJ1IS9M4qRN:S֐Q 9JN`zt3'9tҐ{ \ސg$f\җ{ҏNi{␓ӎc(}ǓH?B3KjP01AKy9֌;q(ў:`dn)9MP)O_zLO4A׌ьtzLPO֏~iGiiGLRsց0i;/H ɥMLz \3AyK<h&xZLvp)FH擷n48c!0)qKRuQޔ֛◑ǽތɠzߞq߭'zqJz@{PFGZP=3O{zR&x PqI @8isFICڃ.9q^xcAFp}>rzPy9'qJ:Fy'R Ӻu<(uR3I-&)rONԝy RI('ץx99ғHiҗ擽.sړ=2xsK=i}A8w4M UHI4tKRqќ"O(AH8@旨pyAQGF('m"F) ?)8j3Iz?QCRt3֊db9JPEJQM!i= .A8ɣi>P3Ύ*3'i Gօ$zғgq{Rgސu9:Q֌GCLt4OjLӳ)3EⓧFh:I(zCh('҃Ƞ&xNzC@p?ƌHZqJ{gL{44'ғ?(h9g(z2GqFx2)A"Z^8H2jwփgi{)zRFr:RBsގ1ށLґwGBi3ڌ9U9ў4RRQp34 JNqH(9447rh.yAP{Q֌`@/Z>pGZ9'Kg=zv&<K(֌4N4gGZP@yz8:iI!hQF@RΓZ3J9'(r9A<⏽) :сQiiz'C֐wPs'lR\>('z?::sK~JN{Px>u<^(3@9fqK}iG1ސzy@t@Iۚ:y3ϰJ2qGrzFB{K&>Ɠh=?*QAў)1G“wڗ֗?%/\u4M'{Rj3Z=ސRҌb{ LB9Ҏ(sFƐ9>'h3ځqA>db֓ьרc"qڛ1ӵ(`wRP8sFsփBzRґҗ8uю(N;њ g(iCɣ/:u?N(3Kҁ֓(h(FGq4iGKsIFh9G4 4_! Q֓iǶ({)HA ҎRt'\!qKA8hlw)?*ь=Iޔ}i:t &FE/zNԿ''> hF}K}4(s.y;G$(?:P8@8<z\҂xQ_N<ь N=(ޗnMiyx4( 3=){P𣎔Rp4P{13G9#IޔuHisFx=F}E{Ni8ϭ.Ocsր9zc-旵%(<(ޗbJ^ԃ\qF=(HsQތ@JZLs@G֌t4dsHs /ҐT:<ѓړ~ʌ)O?J84{R⓯zSbqG̀h9$Qӱ{Rt斐gڀ1ӭ.r:i:w٥vGqsIߚ?_zJ1/JiL`c;ǭ'N)A4qGQ@w<((1@ .{RO! F <Sڎ/IϭK 4ԝ1E!F:Fh9sA(s@AJ zѓҁ0OG=hҀ{Px8'^)A@94g`>֗~40OGBy擣dёJ:Ԅpp(\RKtF8dpiq)1h=/^u3F9tw(9@(/S@> Aךu #)T`d`P==qG\Լ N:G4Hi?JSPq))GRߊN?*S=(90=(4 RZ◊AԀdJ\4}h =F;sGQH:4Rxd*1P:惟ʔ~hh#FrE(/ndgE {QGqAƗюƓ>g)@=>`A'ړP/s4F1ސ)H4;4!zRIדKӞ 9FOFxFM&N (^q@z9/ьKFNqF?*(!(2x^fuƒsA8ڔgzR)֓'4 3v^ԧ'z_ LҝcsKސ /4sQG^QړJ}hqR(At=sIь}:Q҆ѓ)y4z^F(zRx?*1QI}h=~IM/QH '^3s֐)M'9( Jր\ўI'@N)M&4zQКA)H4g9N$NzЧE'GAɤcN٥҃I߁JM4R3){ 8ڌqH>FEc9&)@"ޗҗx=?qN7 \ ֓=GNz(큊BM&0bi8sK @Nqڃd:Rr=)ƓրEztu9 ܊3$H4w(i:M&=ONj;Cv GuR4cڊ1(@z\9р!8=ޔw#)pihKӊL :u)AHG=)ByKF9펴Hy^Rz vGAsi#&'Ҍrh:ۮ(ށ8ԙҌG^EьvIc/!4)@ALrNsu=(hړ҂q9>`RJ\qM#i_ړci3Z^6w)O9qA('ހ1ǭ/ bQ>ԸȤ⃏Nh ֗MyKނ1B=zP:guK֎wsI:\bJ8ȥ4:}SF8{Z^iXr1F9{Q{v 48⎦dqJA#Ҏw/^/^ipq@4bPzRwyJwaIjSғRtǥ/nh@/dhqbހ84`tAsIz擓җF=9m"qH=iz9nqA>q4g@J=9㞔F Ӻz?Z^Z1ߵ42)x<=(9q֐`ҎށҁG98N"}Qh=2(`9;◽'z_GO.>ޓ1IKZwӭ&gҎjQޓqG$p(h8 8txqҐzp?*8#zяJ=9擜SցΌ94\v4RbJ3@"3ҙ)JQr0iz9ցt#IҀ}? ()1 N4}:Q9F{wbOjRsրsA4c4PG{ڎC`џ΀q1!ǭgԫAx^&9<`GNj:3߽'ZniOá)F=ihQ@K)J^b@J~:Rc :fTcF8=!'4s:PFhҎ`֎fiz@nPziJ1֌qך1:Q8xt`j1G vPxhKڎq@g4wҁyCF2}(c֌vӐqH2yҗG<<xsKi(G1H4iyjLwRRrNZ@qKA@Ə^hfޗԸq8Rץ⎣G󠎞6G9.}4{fCGQ_#`сj H.91^'ҁ}(<('H~zvJAqCRcNh4@8"Q8A8c=( ҏZ7JB(:Rz})G; ;=(={QGaKIqJ1Z\c֐t& s/^i11Sڎ)(yғ~Tuڗ A#8 8))1G|R 0 .>(&1( ъQތ{={1@!-fJv:{R@h縤zR@ \t֗1Fri8:QփN^ǥ <ڔw'izOZ:%/lA; >'QFy׵/\sG|ߥ( FzSs8JOGSQx}H84QӞj_&9篵/&~lR&iyyR}(4J\RҌdN8'4٠旦;ю9zRwz^(֗ϭ/J@}G\g Rw&2ih94 \ڍA943KIsiZBx4t;8LE.zcS4ђsڗސ!”q;RizRb8u4;Px4F}{9ZV1N)Ӕ|>=):Jy.3H9=iJP"HPzh)hn9 h=zҎ;S#o#Aӯ4^\Pz}i9!֗ڝ`~7GjA(&K֏֓:P8'ғ֓94uKsIq:PqgKLdzBIA\Ǝi9=);c9=1G^(ԃz\GJ)s)8sF~n:Ph/_jSzM9(J9Rz׭ ќ3u&hj3:Rc')1\NsKQ(?5(Ϧ(?{ڗ'Z8(ғH3_Jpҁ3AҀvHs t暣zӑxa;NӞjsGҸ.1֘qqn:ʐz40ړRq|Rw)^ynGZ3!ȠR GA&A4fzRȣhE€rh{sNޏå(nN;= (iy4ޗ '('\`ӌGjA@'֐8SIҎh$'CKPzќRgj@sA~7Gt=i:҃(<9"89hFy2z#ړ;(ڗx LҒtZ;)Z\) rBӆqқiqbuqQ*cg)e}|1ڑg҅!Ac4MA N:)=OZ(9(sM'A(G$IKgڌփ4>ӥ搓j\QI/SG4@ROns^ԇs4ރg7qAў(r(J^s֓9@0{Qir:sIKғM&x&@G_q@֎OzLFp8h)x8=iGZCF}8(QQڗ })z␌ZRy@GRg18KCIh 3ۚ: NsQ֓M;wIZ^?9Ҁ9I֔)A)zӳw S4gڊ^)4)14ǎcA挑J2Fh"sҌ' t{PG?.=;(8P=4A)W$11NsJsgR+piyT=iD|@T8⛴柌^y=ǥ5Si1HF9S RLsJHVsP8Rcfq(?/ZPxM#ړ Q}=i^QEzђ?dҜR'('|RɤM1KҐghr {QqGOphҜC}JG4q҂JNz ~4я34hdRɥ<}i ތ4w&pqF(FE&Nc huh/NR~ސ`Ҏzь)FNi94tp(Rg=zK)(9t9SxozPNh8KG!2)zE:֗&p?Ɨ&))&q2F(>tR\qH=/CG_Z x>_AGd)zR`h)1_K:=('cK:):6)wQ1J2=|җJqZO>)?iG<c"u=1<:q)G"Jqҷ=0:piFRLa)#^9ӣ i8R%x'u844_S Ta2ǭ.ޘOJuU(xEԄsG#aoN)GgҐ &8OzM/JNG=A(>Ҍt)'Aȣ9QF{P0Mg4g4玞s2hSZ\HENJg{ڊ8($/J3fIyRRiM qP9ڎqiG1@= o|$ SȠ()?q&Idgz0iq@4ߥqI&1/"t4=!cHAސ>)1ڂsIӷ␍Jf}ьz:@t(zCҔ < 9<#QB}RE"'c(GjLH~Ru LҚ1GG? N3F=(Gy:wأ4G|f )r IJJ;9)}iq9qAGZ^OjLҗ 'cgg&4qIקj\:Z37RҔg\vA9Fhhfi8@h#Q=#җ>K֎ϥ!)4gڀF:Ri)I)K3hF:P:bz\u(^OJǥ.GG4ۊ\R@sK:RsFiA㠥>ԃ8!={рy4;Qڗuq@ASS/曂NGSc^p}jG4Ln":sFӚ~ͫ`{?li,$_.iӱ=F+s)u?:Y0{R($c (=F(aE0 FyI0ތg!^zE'<ѷ^c<ԇIZ^ z!$4c99>g8:9$у׊ZBH1K R A.F8ґ4MF;RqA!@(t_jCGP8P:҃|P1=948v@z~1I3ցޗ@ɠZ^q4Q:Rv@N:RҁJB=*!izG&y4;Qђ{ }1z;wjh旷)g=4jp#Gԝh9=/&2=-'4ugڗ'S(vϵZ~"PzҞ 4JN{P9=hR!c )@ڐh9A㹥?!cŒ~NiCc֜1HcSqgJs֖1HW 8Ɯdu`=*HЅǹTA)*g_(>qN:dT)c!*}N*jyTRA#a* DF_OezTIb\rE5S$:c84p3Њ6zT{yHpIك4=)q 4q^'^1ڎi;tFzw9!2r2i:s)@=(=M PZ3ǭҚN:ҜZ֐cG=}=1֏M`ю8Iy4I1GZXs0 &:T`ba]q|^3R[ >*.be:ځKi斓4#ޔzRb|1ъB0i{PG4vz֎g/j;Z;Q#cր)4`)(#9t`JNZQ#Қs((9hO)#1Gq@qE (#^QFF8BR(x 3HFiMށޔqLz@/zP/ڂ=(#ޔsHzA鑜S09?*#15SU\Q2#R/&E2D|aPm bH}<O£p3Mjw43ץVe,*CPg'5ГLي Sq6NE0i1M#4}靰i1NOQ҂8&A'==h'<ьS{юqKLRu4=z҅ךqJLsj)sQGnzN8i0/H)HvQt8fh8iq8H—.3<:RgAQ)q@P{ =GZii{:Rft?ZJҔQ;={g&8>t=)O 81/z\Q“zRzbANG9ZQ3IьG4(m'N)G+ Rhv z(ph=h$K(4;<{R{~>fJ?@yuj1.xP>`g4tGzP3ZP}:R{Ҏԛrx1 ڜ84GtȔU\gQnqյL 8HhDŽI9#I)@:,+O ǁP?{歘wTljycE%ڙ:sSFjˉ*i1Uxڝ2qG9Q݂(d“Uo,.i3Ԋ$1QT.ÎE50xIёL?C~M!ҚHLv G"99ўiz!8481\QځڛOLNriLRwG&  :w<`PIюyhZJPshG}1PGў>.I4ڗpizPu&x gZ:G\R (9ʐ@Q׊;FO9#H(=1QGZ֒'JugA@iG&=i:( cցGC@R[)qA 1ތs׊_Ahh8@'AAh9R!^?Ύ(<4֔)xg8&.M F9G(z>tǥ=hq҃u֞c'=*@rTsSFB)OW |eҧ_\Iȫ1~@y犿*EROo)V,G <50zN LqI׊\Fx$P9/SqiFG{uA t;~4ړPrF@=(PsK}2(z8ۊ:`b䟥i2{ZB91ߊQdq&֚x4P=qG$p('?Z\(91:80h}{*Lg4w4^})iG`㡣4–&y֗HzqNǾi/^uPhZ=is)=<{hhj}AɠgԼf Fy =h*^ғ8\Z3۽(Q0(gq)#Ά qG)sF:KR\*:Nwt})OZ94Q@8E8z_nF)EJz4RM4p3KRM.1FzPM ڛQFhیQ41P}Q2)@ȣv)4?8\r߽z?(硣GP)~pz;RqGL(h|A{Q)xIځ&F1AJGi /i=iF “sKufjjP2h1K4Aނ?:җ4].(#-ޗ&=HSJ:Q)rzfd( 枠HS)a5>UM%x ]Uy椶\*ijݼ%+GZ"@ WLXMR[CM ɻax8~QLpM>Aǭ,w5ir8N`qF3ӊlHmef c5U5jłHO+sP4X0߅BcPȘ?L)sҠe$0=3n)p3&G?JCڙi;NsHz:fHE&("wJ^(搏ƌ1OIR\сKBw#'Lfts {PsFޔcF4~Tc)q@ZNGh>ؤ("CKF^ 9M}@ 84*N/~)i(4ќPF9(>)s\KIKTcއ)F8F^qށGzSR)'.F=)0qGCGj^Aҏ~qI#4>`(=h=N(</ϷJ^1LdP)1F.J1^=ӸLJs?:sڌGO=){*1cZ@99<o?Sc,*Cu_N)]pҭ¹2/=)C/:ڭZ =b\Xu̸'گ: 3R:R~La/=j r*AtǏ I3Q:ڢ)~t:Fï8inM'1H8dR 'C"Gji{Rt'C\>JR;߭擜=89tc#}=80ȣFMZ:oZ=M ҊQ4 7žG=ަmґs>V!AR~n5ڜ(1U("VsVl!9)dⴢ_Q@gZ.S[lT9SD>Nqtbq.’D,@Y9\i\_Nj 1F˓*6^ب#4On0)OZCHyGjPs֓Q^~dCcgt$Nz`SⓂ1GҔ=QQ=i=Tg (F0=i}4#JzR~4c/"O&uNf(`4h?CA<1GS\sIQG^4p81/z6hRi{qHIc)0AR.jSM (4Qө#&sփy۞ԝZ3R@x)(9rG4R2ҨZ9Nv;Y#奃TjJҁNjs԰.1W0'5fTUhd Dy .(=*I#|(vGjuJbjwnzat"aԅ~_¢UZs&3QglЃ*'OMN&M18UfQKUGUB:*UiWڢe8Ȫ? cLa5=F}ҘyݪƔ恜P3ހ9 qHy'4>c'4 $(3@tjj4rx=)qPHҔH93MqF}hzqN>P1'T@~t81) R/J@7dg4`cj_Ȩ UvӧU?ڠh5VHnŎr~YDUrGF*"Q㊍zkʙޙIǥ4i=i0;`fOZAhsM_DMpqiQ:j:C+ڪJ5B='́T!5 B5Q֙rj&Pǥ0HFޚßJa㨦>ӜRgh4&ۃ/z\fIө4dh֌'HIMɥ4FO⎔u' ACށG~{Rh):I@88=(9N((FiLhKޓ'Q84zzh$'4ALF#⡕l*[F2(Fv^u UTObryo5\qP N\ |d`Tm׿Q8=׹18ozCNzIK8$)=ɥ}E hҁ9 &9$QN:QzhHipq&0E\lўԜiOoj;{N88.xN)I='ڐt)9ݑҀќ(4KqH:֗4Qקg:)7wN@Ҕ~IPx8KNi3KEiI4Z qJ3BM.q&G4w)yuOJO|P/SH@1B {)?q_Ng0ՙˀ*Ke榕NE]ϗ(^%sKfٗҘm\Zjfȫ1ɚ8aFޔZd |=Ӟ4Q1i.1֧5!Di"B9,ɒ)яdp*&>*`2@NSd4pr*0*>Z£uv桕V`G֡gAqQ"0j})ϡ'Ml֣#֑M>ShI)=' 4u>gƌRG4)w9MݓF:7sS֐SI?yրO4tQIzZAGZCG;R9K=)sg”Aӭ1M{qqIN$R(B"KzyFsҎ Kc4ӚOz^J ^nyH0))q<*9)S 4`NuX_Q{ն'cOLGҭ'ҝ~cֵӵ63{fO݊zyJI⓵&43N v<L҃I=GJ:AaGZ:O4Z8#rh8dֆŽ8ޗRCJ: ^1H(>ԇҗ(JQGOJ:sHOgpG8 RqF8Jy=ii\g4uҌzLKۧ4R:sޝ!sQGsG$#ܚRyF3ޔLR3'q 旵cAJ:s;ҏ&s.GQz8Ͻ/~Mӈ ;Sa@\b=$ ֝[U~R@|U3S9!F>Nic]լ@sRZ*vSR[jrzP 5o` (?|/J|>u4QƓ$vuyc&OAKhj?4ZA|cPT29VA*y=$uYמ1P8|=j6^*ZM<ZNI›ގ擓 4GZN٣R֗?nI({ќv 0p})21ڂ3֗m&0q M iFyF2(9Z;R'ҌR})3RFsڕx}8Z^4b5?ZB3'}z=M ◽'Aɥh(4d(3@z1RwR'?:r('ڊ=Fp)Gu ⁒yiݳG֌?i&qG'^ƐM 玔w/^ҐKGl;sn U/Czԃ<(=ϽX|҄񊷰l"e=3ެڮ1R1%ig>"Vz1ԐNNJlr*Ln3tk~R@jyO Ӛ,>f4jʰbdS#5,qIbTM=GˎjjK)dHxF7vFj?Xjxaڠqz T ;n5U>Uձҫ895 ,j65  mӚp7#ޚL=h!ڃHǑGnhw<7$S}zPsHJ?L1@4ҌA=s@K3@CMӸ:P8׵cޏP:r=:J1is;cPlA?~)rcA)9)Fz36LsRsAރҌF(G#җN(s^8:Ҝߍ9sRzߵ9=95"ΞyaHq-&8vdsV׭I2pt_hj[+NvO"SA4wZ"1WBv3R9"n nԊ~LT[~nH:M?B=?JdDq3PVlup0* ɨd^; ?ZL~5 P'@OZ*UlY#&$Կ9z;qHzQۚPhǭ'ڗAc4c/<@{i9) ֔`1;Qޗ{Qӵ.})ps 9;F@=Ď)x=AiW5!i/R2֬F0ҪJnwzի?ާb|Z6"NZzԶO;0<\TsV|o5o.*HSjf@GJZR7Jcf1 NьSbE8ȥ1H-Ҟ ?FwHJ;T)&(=%av`fXi)< M7/֌ŒBHxqF;(⎴M/8v9 ;!gޗ"z9Q@g@hۊA}>ԽGHV=Qv)0OLRh=hdRjq4*NH)zN:bx)F9sюwҐ{^xNG>sIpiΓ4(H)zQץ RQ8QKjBO3Kׯ.>O<(rsAGsR)P幩zjH^&f06fU\8WY8bN}v2t+u?dutD7N*zJz|9m3֬AZq񚶃*=hP7jrnZj! r&)FzbIjWȤ9@"L#c. dOZ"qϸY8Oz>^UꬫT֫H9j P:㊁Z>zqQ>j#דLnFzch4zCy N9Hy@y3Iy4QQG9 RItNi?JQ9'AIAO:C(O!sN}3ڔczt(1F09тE'z8KFGF9⎙q֚1SI֔w)s8{t=i2h=)I2(S۽bG=ui9N8&sIҔv QAbR=)zhzRt:)?ɥ&n3KqH3-/4AiN:R8:}(ўhf?AF2 H09ϭ=M/c'C֗ v#P8u):stc"߭=y^sRBƦ?J#9mS=~Z*3Ү[vY2Vyt?"NSՆ\!L8ոB w>sY81=)]G=N)\N@I֤f9E#M8t$₣mDқ*} ^DFW:b`EV\Ur9]Psޣfϵ@֣b1z+sW?7J#69W3UsȨXJGBɨD}9TD0S=Ni(3M#<ޚNyNhzҜL`u h':N K)!'8Ӛ>֓x# 9@8␚JQ0iN␜ڌAsK4`bsJCB4w<qJFE!F1u'!w0{PzсKRgS!3ڔ{uғ\gp(('Ҁ}KgҗAJ1^uIޗӊZLcJM'4JQތj /QҐb'~vGR){qH9/C03&3('.(pyA=i@P}1I>qAjiOSG@E)=) qȥn1B R8ԥ:Au]㚒َlqڮ8SZpbԱ6_$ M&$*#V})2 B9*v\TЮ8&" !*d艆pRHHtnqnD57^i TJnO6V8sPzݪTN85Y> 櫰Uߎ1P0PH3*P7=9qҪJx7=8pzTj'<'EDTL2s6 iӞÁf SzLqNJ89'uIix8'.OQ;Rv:R#J9.9Rg)Rc;ҌF9Eޏ֐zf!H)x&FҞ1KJJN)rq@ x 4RLx8RjQsҎg8KΒqr:)IQǽ&0iN >RhznqI^Z 8i;֐x>mjLdhn~ʗ=Z1sGAR>)Gc=h&)r:wZ8ʎsҎhwgiN3ixiJہRRC ҥF3֟}_s|dyqS9 j>Zhf޴`SR*8XpiNWTpSUJ3VKeyS[͌c,7մar>p_V = $hs#8ArƞMoR&*d@ dPc9'5H,}* KqߧZ֣bYB̓P9U%=MWlzIWp>^J=*5F5wQQsқ)RyN1INԙKړǭ6?.1֚'qA8r81&N:sKQڌ4}E7Qӵ 4΁Ǝ:S{E.yR <&z1sւSGA4G?'Nv(KRpxt;"F(ϭ&{ׁߵqP(׊9K(49c4GPaKGSGSF='|fAgZFI(t Qs@ϭ;'j:iqc\iǥ(9֔iR |CjB9ԙs\c>ԽzvqڐOLiqwsҖA#ю(/Ҏ'94ӲqRR`u H擿)4cJH@Ҕs):F;(P3FqIǵ(cFr٧p1ސHۚPx)|ӭ?<оR'\y*H) A b䚵9 #5iUrJ sZQ1 4j?/\зSV"#zԁzմaZtdnk9RF}r{wbWypQS;@%N@tCM|+asTel\Gc4 C#Z NT,<95^Lg֡aT/JPH#?Tu#&ɐzy8\V\qUz$cj'9*6lq4~ȦhM'qt}hϭRtqў(NzRt3N I#RG튔uѾ^NC[ R֭õY{g0_|RD1-^ԑsS7@zT=LՕrT{TZ-ҥsS3V`oʾ>+dE=g4H>Ԩ3)vQɤ~= G%Gud'5<ޠcDy ?Zܑ{R78{UvlcDH!ҪT;V|GjT P78ۿ@TmTg1L&)RRƛԧ;QsIKj3۽RZRxcG?Ϛ3^i} C@/$Ry)HLRc&Z^KzRt9#4wIP8NQF{֓3Im(Bz3FqG|n1N Py?.h i21.F'(JCJG9?GPjL9uI($j:\IڌjZq'ڧCIsV65, 3ޭn90XV_\T[I3SpMMyNiуrE>jF$*Mӄ5e\n?2icN)Ao?E- t3LA'\Q]Uw$=~rMBXDcP;9N Ty֫HP3UܟQ܃b bc֠f5 z5E4񦓟“u)8&cwzL2KsxQSM.hI109&񎔹' n=2s\3GC֗0irH8 P'RO=y'l "E&r})sA#4#v1Vp*H-VX[sTaگE'jx$5*3R2jm?OqO&)ƒOC_OR*\`ԑvT(nj^6B7JM=sґ&L2إix`ciH8f?*-Q;sQ;qP1QHj .yf~2sQ VVs9pjU'Q9f56:T.Ğc1Qۦ Dzynxyt7=JL`uPz:RdPN?€}(Kс۵&8Iigzuh:fCސΗE"ig?Zo~sIx1M){dbϥ/#Gz^8J3)3F)@ Ci~0rsK&J}xjE'9F2yt4wu4iBzK"M-')G\b(=:i1K׽ϮE玔 '3ɣ֏z\R {R>g4#4:h=h4gMhKCSځӷs@旷=)A84_ZN{wSx=1~*D> zN0Gz!VOPY"?|F޵,,C㊿sަ=X'5" */Z|o!^MIK5L(9a5!'oFpiX=)c8ipy)j2}f5I'қ#bifSnwjn{EZߒj2TNjn:TVCjUg#=x`wUd⡐n*<PqTlMFN;ږGzsE ֗!qړ\ўGJ\t^٣4h$3H /GJ3J:Q!F3֗)r)Mc&y)AhяZ:sKߵ%);@ :Rԟ)yӉ N^ ?'&ju?.i=zՀy4MO#ZLjgi݊$ حT0x"sSǽOf$(&OKXޞcJrH0i K"3C6jfy9^jL'#~ 8Ps֡n0Dz.UI$9$z\fv5YDϑ!cB_{TLrFiLSi@7Lsޏ_ZNq֎ԝx##pqI~4ssCg<3K&sR478=)O:u3(= )R؊U⎤擑@94~4G<("4}.{8RQ1.p=i⏡'Fqȣ#9>Q(NԠ~u8%ӭ/QށJ@Oz>@PMdMzҗ=:Gz)G=)9<^}hx#OҐfJ?ZGR玔 ^hqF)Z3J1i{Rg;@ގsJ;h9J^ wPjTb.մ?("U!*gա $j>HϭN6=nq׊$Mp}3/^(94=41GJ3'R1J8=MF^:޴u@(&RM=Iu(`F*h󁊞#*P )IlT𞆬XASǽ81T?LK 'sRڕ_s@6GzBԥ9$fc:g68IdޣffQQ3ST/'8C$I*#3djq6OZ¡sM@O\\늍J0izG'Ґri#C؊BA'9N4( MҐOGq:~hߥ7g9 )Ӹ#4(9J~3M$ғ)W)\QAh4(K(vK\R`ڏj@r8NN{ bxsގQI4M/ғKx)>}h(izzLg4vz Pxu Kޓ^tK!44qIzҎN1F3G{0qG8Gj^Rw(8})@/ڗ#sKi2q\qցi:\Լ`c NO\JOz;挚NG_ΌߚQQ*:^(w۵(tKF9ȣ99I{&%h{};iz=BJ:sI}iG?&0({R(s@<4@RGS֌gA=2R7z; 8ҏ=s `!RR:On~q(Fqގii0qEg;Qq)}xATeQP]jwafcP'*> ڢcQ9'?ti2G~gޣ= 'n}h=i"R8@4i84Zz@p(.GMsHiA4dqG4iR4ZJJ84`c4K@fxG(QJoLӸ?JCA3wAHZ;u89pF1Kz=AIuZю()1=(?ZZA`q.zIzRqKIߊ?Nc4usގRA!>ԧc(9J8KRgRp>`2 :9/QҀ8r}( &694=x(F9xKڃj8O.0{PAڃA u18J)OOZrOӔȧpMHr)¥-H9R=zLCN8b Nb6IAVRW*H;X>" 87֥F|SsON 9ySҀJ&6 !o΍SKf@McfE013 LP wj#'j˜,b2n&w9FsPDܚj6=H4'ӊl!<`1ғ>Ԙޚ)=FsښzQ(h9-iG"s◞(r9:3(-G+HO<*A?/cG4zZNE!u`I3Nϵ&zמƌ`R82Fx4QҊO4qZ>dFxZN{}h &)OJ>cހ{GJ:>`Ҏ 9@"E/ju(G6 B_G5 Pdfg# 0bG5oZQڣ'L'4izyp9Mnyi14qӚ 4ƃ֎y9RgJwn 8 @J$iҏC֐:P9LR'h:u8hiH֎1JQ])(88'(HzK9uQA4v'CE4ӁM(1GZ^0qG~i2;QԾўy4hh4cҎh~4vQ=>=))8#1F8сKEҒtQz҂ri1^q<3ޔgh ҁJ^sNϥN;qKqO] p))IxDzT%3QBTngM4Dscrr FGlny<NI>ך:7'\:v/4}h<lRь`(QGJBF})H'& Q⌁4 n^ CHyڐJ9=3I֔ A#Ўhɣyތ`ct1i1KA@IJ)8A#.9#=:g֢vP=;(9# ;QKNwZC!ޜ:qHsӵh?J1@^/^zRsvK K֓ޝs1hN(Kt:b F0xhǯs\c/\f҂)1N)1@nhNڗryQҌɥZ~x:U T84pޞR'8uL֞ jE'8R=OFjtlt5"~EH*M>9R9''ޟÚOzϚJfeHZъ\P});8G9.9GZ^ؤ^hIqIi:c@qAulsP);tR3E'LuN(#'jR K9Rc /NQ1Av4R@;<ҌbsGhg('o4Q޴zwNs֖}p(QzQ稥E(ө{8/fORj@G4HSwR枭֥W5"ԡҦGSC"ԅ>Zz>8}hH$tgHzJ)7sނ00);Gҗ.zc'J4;K Aɥ R^HF8u‚?F? Aj1) ޴ҎE9JsLg֗ NҚ@;Ҍޓ$sފ9)OoJLsGCKGj9=hiO'9Hsڔp3'z^ƓA)q4$qJZCKHAϹ N p)N}(3JF~4M&3K~$NԼK&4;Rh4sڃF?*:qGJN /\q/zAӲis֌sKڔsҔs.NZv0x4ҔPqz4gAQړ&9ȣ#='3zV3IQ2zT`r;Iӊ:\)RpzӻRgc= K84p)q4 qc0? A SsOR!iةwsr1IY8s֤f$#R qޕ$$ҝ惞i@1.s*qSL7^(ȦʂSwץ1=)S*2yLS֣.NLf9;z YiߠqɦfB<4ry4cS3_“< '֗sC }hyӡ=N)z3J:u1 Rfr !isހ:搎(Rs .x&pzQގsG(g'8Ӹ4H3ϵ.{H`=i{sH9= 0CsFsKqQB0 9Z^CJ2hy\q(OJ4RrGuRzsxsHO>)GC)90 \ pirEM#NZ^iMԝ){~4z8;Q=(o9)1ǥ(@4sA@')h K`vJ^( Rth'M)֓=huj3:G/B;s r{Qg8 tў8A$N@RR?#M?v)bsNRiԛ1NF"b[?Zplu#F}iCB;vzqIt/҇8MP_uɎ i2:35d*2x9qؚfSsM, 3sϵ'_joM71ME#:zQǭ&1R{zCPI84!E= c#s9:F; oӽ=i;r(◂qIi3Jqڎ03Ҍ1E'@ҁIP9Z_Ú;4(P0?^E&r8$ѓG$8Zo#8ϵS֓4.ri:Lv7Z&N3\/jB:bhP3y9gQs#}'R2)dڗ=OHr:wF= jvy U\ȠwiA杞>g#\RJq֜;c/4)xvOH˚Uldӷ dozvSN*.i@2 Ni `94=iJF[Ԝt`R;qG׊ ڂzqFI48IŽ4Lc8f(F9)'8ёirzIh'PO擯QK9F)H{Oj0=q@1҃Ҁ1G"4*^=hi 84'ڎ3KwC~;\gJ;c֐{٥>RuNi^(==J\搚A>q@QRg>PN;QGn8);ҖB}M/J s@NHz~GJ^z('Z]Ҏ.yӃt^ӃsJX>)t+g'gZ9bC?ʝQ xmïJPFN&8J\v曻ߚ<2h=h.H$R4nҘX`HN7;j0=AO4/lbҀA搃OGCFrztFH8#8ϭ)\9F}{P-Fs@Oph=1Oޔ);{P~Z21Z3OFp94 2s⌌t FsڀsҗQ:3hy4q =)p=i:v4)z(O)ގIJ\(Oz9N)ؤl:dP=;FFh#8((:sE{ҔtEGj;R:uixތIGKюqKzLFisITg"FiN(uJ8'^(#?Z)q9攌HFFGz1ԚPx!?:I^w'ڔ&)z3.Hf}/iA4Jvsҗ&7'v=i۹ozSsڗvpsFw>+r47MRgw$Rbp4ISCgHN8&8#Iڐ8iuOR⛞HzH9=hG} Mғt4d1R) KӚBy-s1A4qRq׽dii 'J#4zzRʃI֗POl␌ 9){RsHG4(8Iץ'SxA(I)Ns֚ɣ })rr1ڃӵނqM'=)qQ@<i{b֎9?_֗{яʌdzR( '!O=h(ց >qޜ@^)1&4dt=(<0)N1֒hG~~9Թ<сҌ◀=(Ei3K4q'!9# &:^ޔq(\ w<\|Թ zNEM1J~ԣ=hG O_Z2KR4Q:wzq:0y֜:qJ;>)ϭ◁Fݕ Ӛ]1Frz҇{Җx4 Ԁ`R&/j ⛒?*LO9 S3@=i}xtZBzKIHxMFE&;Թr;Sr bhGNyg<::8JAEIװ#O4i)H&q֐z1Eϭ.=颗I1KȠџJ2i K:JQF{Q83K׽8i8 M#HsNޗ>Pphbɥ^Ê2:I4 u4 2y?Jvs4 Hz)MSۚ\nSM\Ґ($c>n'PzQ84):/SGnyKy(>Ԟ۽Z@p9&G9GޜR9ɤғGn!?j\G489sx@g#ni:ZNZ\uŽ(hǿ4QI"RyR4␐E'җ(E3搏C:ҜGA&@@qޔtHNzR ґIIz=hNzRg#vA c(}(uBF){{NPsA<qIQݨA#q.x犌`IץpJSɣG4Nh4 3 &@Rޓ>(RQA'<SFF(4hFqN(p(ϩ~Tw^u'C@=@Nr94{RwJC@'&Hiq)H=iF;fI=iG9p)AFԸwJZ)sOjC`RixJ>;RjCQׯJ\pN)sFjL`{J x(cяJm.ށތ|٤'v 8@Aɣ9Q֐q֊R>^=hԾԀRg=M(!@ޔ4u Q &9HH*hSQO4sJA@9g+Ƞrh4zRR#ґR)Ph ֊P1N1I=HNҌ&rJQ ^hQޓڎQt vG &8uё (Iގs(( q;uThR)=#<ў)z)(Kڏltނ()iI!Z;ҁ4Kz294diԝ֔1NhhKϵ/F9Gs.r3Mz\)O#4R 2qLR҂N:Qڔt!'ҎE/Gj#y=((>ځHߥ8s@'"b=(AbJ_nh)3GJ1ɥ3usQ4ɣ=)@=}dP>QFZ^OAI4>)!G>u'ۚBF}<)sށ:dt4Lh-'^~zC)qF('I1HOlJ014)4SGz0($Ԥg uJ *_:q@NvcFN9<1K8Ґc)jA8g"ggM'\SpsF(lQhz08q)*C&p39IѾSA>PF;vޔs)1H>u۟j8^ ҃n)8=(1ޗ91ǭ.sR`PJ;P@ҌPN}9(рs;Rӵ!hןj(R⎦w4's@KփIIO.hP(_“i9iqߵ'B)yIxd@恚ph=)wf<KO@8}h$8ʎIɤR=9PRu8rsQQIhF1: LR g:G;p(HG 8zj>Q(ɣQKގIރ){qғK3C}#ڀ=E@^ygP9>{QGz)GGhQ4wh0(G:L u!t:PxaAj^ wiݺRczўԸ@)1gQҞ1 <(8';cʔdz\RS"ϭqJF9!=?“ȤqKZ:Q}18㩤8R޴RҐ` R<8RtFJps֌OQK!ϭ!$ _j 斌I)8)sǥsޓ:P94gNJ8&Ӟ4hH8G=9($Ahiqi=(hJ?y47$GIS Rts@F9@Kz*#INMx4{g=(j^sG^ttp}ix'LQswK);R4@#8'iGZ0:Qc1Ȥ&yJ})K߽b#Rq׽!@@A'QJ:Q'^K>Z_Ɨ#ҏƔ:hR:1Hʂ2EOH9j0A<=(@=hmwv8fPp}8ڎڀ3HFӚQҚGz<Ҏh=hH~tFph8fjA \3ޗ'`?* s4ю0;Q׎PS)䞴u$u)zj\M, v s4wQHs/jn=F(r;N4ڌu1R!ǥRGP@JLwZ3Qj884sLw"c!G.3'KN@(tgiOMҗ8Gu8/l~ʓwhG4)1Z9uJ0q=87$sN`}iJ8vTzQӑڌhۦMGN)? zz('(Ϡ( QҐ@BM(9J3/$3AR8)=.8ќQ9g!P 4ސs@ f8h'($';sQɥzNztqK(ϥz;穣Qb: ^Lh sGSA(454 @ڔ(* 494wiy'}i{RR49GM ߟj=)Fx挞v◟ƀy9ڎԘKڌsJNzL`Rzӱi2sKj;u◠sOJ=y4`ђ֌{Ru 'N /)s'Kj98wA)/_JQzL@M<*@14~zRM/8nOJRJKIҎ٠׽Jߍ'8Q1NZ^zCqȣ=I.xjLc.(<:isF?*(7<^Rq@M ◠K=):KמhhhҎ(==h8&'<ѓ:zu'nyK@sҗҌ1jN:4qIRzf 3GA֍ĚZڌxE'-ғ&:ўqJy:dў;2 /Z3JO&}(Gnc.Nؤ4d99)1wgI2h294( ?~tQj(GGQGz;1ޗ83A@94uZ4Q(#ҁץ/s@qFGjZNsJҀH<ѓI( H)A'^_\n8R3FpI9ws.(8z3hSIjBqNH}qAE&yr(QO)%9/J8y4) /lRwJ9GQʎhڔȣƌQFphϵ(n:R (.{R.9jZ14Jތ"ޔ3IQFN=r攓3: Nh.i1ZAS3M1K>dsFHgiy'ڎ(4N&Oj]ǽ'CKr 4 f֌FhތQ.~^hh(\ԁ;<@i8hqSPxsNzi<sڗ>t4Ҕc3ϵ!<Z2{Q 1A9RFAN1Fq/nsv$ 4g.8yϨI~CJJRM'N} (9K=4A8HzJpGZB{ s1H (<`Prh49&ph:Q@ǥ8FH AҁלgڔA9($h h=KڑN2j>&8AA#')fJ3cwFy'J;RwF@vғJxJA;9A34 -!zQ;8K /zZLd b񎔀~TRfh@ԇ^OzZPsFG4JzRbi3c4RGNqG.;`J{Rg cKhRqёc)t擯?'Q4g1j7sގZ^ؤF;Z8>€s@qr{z_~I)8FI)qIӨzM/n84ri3 (ui; J3JOZi&'@9QjP{Lw)qKɤv4visA< O^r9'^@LtZ iGbi IRGZ88r3P G|fyc:Q8΂H㯽C('ҏŽ){wPAxw01FygץE?)fإ?JCJ^sA֓g0u;NR`1c :zҚ:Qsց(A旷Rs4wNsIr3FNqKM!(c(RR@>dޏ”ߊ=u>p;R J;R bƁAA/|f}i{Hq)AޔQ;AGFq\qIɥw~4Ҕ9?Z=-)HIHy0zќ/N1IbsҌ~F)2{R~揯Z8H;P8gZZLףZBy|sgފL01i9Ȥ'ױy=)ERrNsG&Ө!擵N3@^3HI3'1Ahtu<zRڎݨyz =Rf۽.yh/?zqG#An3@ 8uwJ8Puh*wqKӿ4 }iNHGc=)y<cϽ&H=iy<<sA);JA4ҞуAsҐ t$3AC4IϿzQq⓾sK&g)Iw=2)R<@֌ 7c<89<{;Rqz ^fJ('1A#z&z8Ҏ~T8Si{ AIPiOI9~i 1KGNAь/|R"R(18ԿQsHGJZ)1?/i;J^E{fNGNR~{SȤ?&y֓$fP )vяʁQqGn)E 'җ_Žҁъ: ;^zQoʔ` oK= s@Ϧ3K@L^ԤgLcьCAIR8P{ўqG$px)LtAj8ךLdSu4zsF3ɣR"vfzfRdR}( &9I=yJ:J^7.8 }})qր=ЊLQ54gI8?J\ ^ sG4`)h'4?8p9g&Q0sފ?bzbғw~RcEI:揭AFxxh,1ъ8=㠤9AJ4w4sǥ gҎHqG)GZ;y9:R;P:t IR)JZc4qGҌg1.zLzj9hhҌr1Gi_ZQ)1\AZ֗>&: 1{R)}(ށ惌IRA(4^QғNhhiFAzt9".&01K:*.qұIځ֎ROʎi Rc攊CP1KJAӭ.{Qi1AK)=/Cq@ht(i{ѓғq:4sG'.8P4EEҔ(>ԤP(4vg(Z0siq3AhyҌr=zi>8KPq uϽph4)shSE=RJ^4cރJ9Rh=^܎h$QҎ3AڎRfq֗zLuCK)8 н(JLJ\ztюA@{߭(צ(ьRzQG4{fҐ_ʎAQ 8#֗\bgtqF8iA=h'~M(JLK;g'9ךS p:KGM=OzR9&AJ;sF;4$ғK!ќi1yx9((=iF1I{g#)(i:Q .p9'KȠޔ O€qZAq?Q=LK@Q G|џ]⎀8z⎧:1QQ~4qKǭ!;Ɗ'ޔ9Ҋ^R}(#=(AGj=ip;NE(QөN1/tct:4G1I&ր84bN(2i@J K>mh'ڗi i0(ף81hh8&җ۵ 9@J:sI\Ǯ(9Z;'J\79Zw4^h' ~tF){3I}/4dbJ /aFA֐`EZ_J )/)=:&=9?(4őA90:TюP8fN)ݠqʗb bijLy99֓ b&izu铞)JQF(nc)~O=9=i>K&8?3ڔ'ZJ3JGqN4atc#AizQg4|i 4Ҋ3֡QFy8Q''J1GNsFs֐}SF0{Ruh>Դc;=G=&(y8"; 1h'#:w44SGQIϭ)uJ;QG~Tf@HFM(Pi:j_R)ڌqJ>g)9iAQH8'ڎQ:RL4w.qy(  =N{ѻZ3֗9ӚC׮(tx)h!ϭ-@9'ҁ掦hg)9J>'=;SA7/~#83Rup(E9gҗ? iO )'9 cA31F8#(KG))=iAnwPJ3ۚ^M.ZLIQڔўqތcJrzRfNHvG\9/Z:ғ8R~4R֔ԭr8ӊ;8ZvO\Rw'!$c4 .qz^)QCz^ҌF(@"IFsKǽHr9J$<}(ր})3NR H:f 3QGQU.zRg&HNM(&*= &R玝iڏz4~_AI8G#K:Ғ@&qI)F{g?:2vJ?'`Qޗ4 =sJ}(֔CҞi44 8ѻNѓ.x%/ riKq@=1M#ӥ;isJGQQ/֌(=;fFxg4Q؀(^hhTp(($Ȥ:hH{Ҟ&I&N) .h2);g4 ^yRg֎((=I9(43ϨKԊ^;rqA'4ڗ$vH Qך\JAE(iyhsMϷGQQF2h.I FNy'4zqo{:Qb.yhd8K'AQsߵ.MGj֓J 'ڎw=h=94Pxz9qғQҗwE!' 8*)4~BFwb9Ԡ= GJ8'֊SӌQ^ȣ8ȥNi4fKJ9i 4ڌ\v֓u=i~֌r 4pO4fQތ(Z3M94gr9v('4q{P3K?d8gE'z^0O'1ގE/AQ&I44ҝ 1֌'t1H>p8'IQ~d>ڀMqץ)u' 3A(9JNZ\G44dRqK֓I<9<K4(/9HNxtqހyF3@:RqjNt8`w~T)1Ri3J9Zvr:q&hƃڌ4dfҜց~)_jQIFN'>M' :)=}iGrhJ3!<}h SGJS Iߧ4nӻI9NH)s o=4h19.qړ$_(IRht$ѓ01K}@4:){QӥTzGЊ@h' 1@K}Gn b ?'(LFp94KތsMϯ4RQA CQZPyGS9G|Fpiy"/hKߵyQ@RHFZ\h'"?)O')sAqO4sڎqGϭ;H0G4gR'8G<:Rd4{RRs1A? ֗Ҋ;P=:R{IђƗ<:x) LqKFy$QNi{␐t٣JLw`QipinqK9FJQH(#җ(^i 4t>:{PG>ԇiqǽqF{P=h\x9o&qOҗ M/"tJ\Ҝ hqȠqh@PGI1SӚ=1J4c>gE8iRK4=i34pN;Q QhG׵;qփȤ4ZM4dQӌ94g\dsڔ})^h8 ֐A9RoRG)#/ZLq8 b4sFzPG4A.8h_DataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_65.jpg000066400000000000000000002323671511411446000235670ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?юj? ?EKARR(dQҎ)\~Qڃgr;fzz?*=ijGJ_擾)zqF8&hi iQҗbGA(9<߯Z^)9F?:98N◜R`RҌQۚ8ϥw`AsKT1NPI֔bQ; _ʓR)})=9LhԹ'{01Ob@h{REyxn4J)I֏AFizwhhH/H8ѐ- (?AA(4RfiIG4fI4R{349җ#R{R;ѐ(-zt(I>Ԥ%)s34~4gRKA('=֗c4 cKSKL PqGZN b}EA#>):Rj&x4R~(hvcɥ@>h@ǭ ?%wJZJ:v$Q@zLݩN}(;K? L(փҔCG^hh)GZoz\QF(h)i杁I.sMN4qԣ&GZLҗizg/ju}'sQҌwNu@)zusKڎRis(ZB斊N:E.=i2sqFp=zЊ FIi:Rg\Jy@!Fpz{ޗg3:QtGj1h(8=<h|Qր ׊ZNisJ(!񠑟zNiA= LqG4>;Q^q'N`{>p~SK֎hh#4}h - iy&8<(J: 3QלюF=4(h4R#Cގ1@Fxy(3ѓϥ/ JOgёA9>g8A13fR#ItZ s@"3HOl^);P9Ki8E(ɥ'rFhqE8GNg>qNq֌ғ'C֌@9849G⒁ph4ޛߚ\ќ)xўi}3Kס()&}8= h(Qғ<ќP98)GfqڃHzs>gIڃF(ϵf(Rӽ ֔'4)H8 }i(ۥZv}iSZCJKqM'ө ")L4J\&Z3EQ\A'&}h֔u!z\F}) Z^Ú ǭA'zwQv'z3ڔIh.sEZhgӭs8֌G\Qi3Ɨz掸( A^_zLѓKH:bގNt=h=(FqE!Fhփҗ&xQތG\3g }sGJ3@%.{3(џZ2(4g)QRgҌgRv:(ѐGNwQHzH:ߥ-% R\QE'^):u4 FsANIތGNGzԜis=iAb8&{҃4i}M&iw'ZvsHOg\sisރɠc}h()F(TڔN1IGJh ?& GzJ\dRci{ќtphKړ84G\zPx&0>tGҎ{("=3GlQʁJ3^&:ёҌҊNM.xZAփZ\uh&(3KRtʃGҐ}(O4R(wp3Eԝ{Qڌ4Gnh8u){qA4Q(c:Qҁڃ-QGZ94cށ֌⏭Ru׽ 8<סc)@' :Q);$R9Ni3ɥ(8J3GJAހȣQGj}iGJB9zҊ)}E G4: IKIҜނgԃ)ɠzzQ^SA;G|dRwsF;Qԙzvg)3t҃=<֌c)#4ўԽ4Γ֎zc'9qQҗpi ◊>GRvKLzfғ/?bG9`A8}x`ڊ1(۵R}>4HNإǭzb8`Q߁G?u)9IQHz\sI–N; :j\RvcN.ytJ:Ph#~T)zbޔR4JO^((A>߮((#H={Qh>)3G^=){zcb1KJ;I _1J1GJ1QށGzFhҁGj))H"gHyiOG F}tGRw4})~ 1hځր8>:qG'8/QG3F2):F9/P3۵#::c֗N)~'Ҍw>t(?J^j1GCڌPzS{◧}E?B1G⎣I984 Q֛J^.1Iz.1ɣc0r9Z:u/zޓ94ނ9`̜AGQKA'J?#KzNԿ4Z}))sۏƓ)zҀ(@=z4ԜtzK9NԽG^i1Kۯ4ޝIҁށ׭蠌P~{ב@xIޓJ9J4 sI@)~44NsFh'h(4)sK'N=)#JJ\gZ1ȣH(҂;84QH;ў:RҐizw94c=hg'z\QcG&Q`sAq;Qv(Q~4t:v$}hQ߭ Kڎך^ю)9 ):@<^ށϵIu◧"Z;u'K=G( }9Q( ㎴ZL`G'b@#&Cڌފ^cJNFE'=hM^GjN$RhxFi;sI–&}h#?Z)=KޚsL RRNƔRpO=)HCF= ގ(籣})qڎ8 R)(?h#׊C4@})Z^(44cIΌjB2E8ʃCҎ~(h#=1EQ;◃Ah/z(O~*1F1K4掂KsGSQ=H7 J(I Q߽:8&(4LrxE ԸE!9o9RZ@>Լc"dQC@@@?LzRi>'(#=i.0zqF8/IycҎ~JE'z^Gz P;JLcRc֗ځɣcP3ޗRc яz1=F)▀?ƌdt 03KLxh&)M'RhGN`RϽ.(Az\dtMF;:Qhaϭ)(#4AQGҏ 1NʘqE-'ҁփ%)⓸)?^i}y4RQҌ{}i;F(ցL1FG@(?JQjCKH}GJ(H}J3H:zR֌1=9A^RIhKzCӥ( K?Žg@<?JQzPzQ:CށҌRJNRbNHKhihi{Rh4s֤ъ1җRc1K@qI^J_Z)^31ޗ"9⍤zю9ю}h}h 4)zQ)GQF >ҌzuԹ@9qHx<G>qփ֎Η'@ޏZi@ 494~qiz旁JSA8=wGр:fH=<@'Ny(3FpHt>“KdtRb/Z1F0E/Ҏ0h4Qh4tF=hҁlR~4rh4QڌRgJH> 1Ҍb(P:fGRqFqA硥ьtc<ҁcSGZ>~fFxM8i Γ@i:RbvI89`CsҐNqJ=1Gq^:RL .G(")p6P:RH=sEuqF(8'{qFjKߜތc<@4c棂h=i1 hK`@<\p9)H?J\ޓ◿IzN)0iOZ<}!߭(FKӊCϥ!t)GGj;1F QK:sL4ڌ};Ҏ}(?J)qIߎs4u QށڗqIӾiH4!K:(x(IG(ғ/JRz8h>Nh) \҃.y4zP{ߥzZ_ J=h4ߚOuq/#(A CҔ}ysKSFqGjLҎ4G4OZ ߌRbJ:4wQGJ\qFqځюztր=(MCȣF)MښN=i{ZN)z~)?/^tK&(G~J:>gڎ4gE/lZ◷v8xw}(ɣP};QG.9ɣԠs֓Q@43G|␊(>hRth{i(IFhE'Lғړ֗y)&4;р94cHy/j;Q8 AR4dSNqCAьbg}i;h/'qڔ9HG4~4Q)y{Qx_(=EƏƎ<Ҏ#4(=(h>(xR:1G? @ix z84t4R(㸣p((G84Psi:GbsGj>QK'CKȥ?.Ai9'^ߍ&9Aft43JFSȤ= `wގ 4zP挌uޗZc4A sIփڎqz2=)AHhgg4ғz^Iu掔frhG֖sڊQhE!}0(4J(ҁړ~9(QK(sGSIzCځڗJ1JNzRz׭F:N`g0((#?*3ڌdR)si&4Q^Ԙ{QZN&)yQG'(=(q:PM'ץ.9u'0)zQAKHyNqH9?QۭⓦGz\(Ɛ{QSփ8ڎsJ(ҁN;Ru)I/j=h3@K擧=CӑK֗ǥ/ZhȨ\Py4i&{S*hzh>v:sփތG#h8Q/AHIF}hC—4h8җ(ʁFhҐۚRH!FZ3֎Ɠ=iÎgi3⌏Z17{RZLKLtcJ\p(=)=) 9JM'NixϽIZ^g壯zL8FE'.GҌIiá')@IuKu'sHaNs9!84(I:f9j2sHKfё3LR4dw)34}h϶h҂:3zC.F3IiG֍RqKړ8J9J8 \֎zӁ@Fy"FqF@4zAGA@L=(9.xzF;\A'3J2HTKgi(K3SIԢ>hhrh'њZ@ir=)Z^48j3HdQFz8ZLcQ?xRP=()(&zҚ:sGRiǥ%s;RϽ'KwAGݎg/jCJ0)23K zRQ I8 (i2;(.y"EhȠ~tg=({wsKFx8iWތRc{R)3-8џz\qKIw@7ugJsNfё@4gR})9E#AHXfKh=))sAKGҗwusQҀqڎz҃E&{Qc}(?{ڔLHݩs&8q4A'4EqGSFx2hGIA׊Z3?PsRt&y#֎}GA\ҏ“< =y挜yszJ\`ў(#)s;Qi:K4R)jL=( QM&nGRs@@<$Gp(ɠH4uc&A ~t3GzQ֓9ɠ\f1INIZ2 'J(J;Hr(P:`qGS~43ޕzf#c?zIҗurzHqQE'4c旁^KNG_\Qԃ9I/H:uPqz3ץMqH{&AbgӧZ^x;dR%K Nf:R@4is Aך8<8&{ьw̚ҒwQQG_j^Fy'i9К\bZ3A<Ҁ:=(;ޖ?ŽZ Z:cҎ)2sڎRzJh&dqK٣8Qӌc&HZKHzfQJLQ=hIP杊=h^i;; 3օ)8=sG|Q=h&BqFi{{4c!ڐdь{KNsҔv I◞RQNi@>N88IҌpNh \s@x)z ^Pxg)/|R`3)O^h(u&xKfq֎ }ER1G=sIRh ){P>ihu>/EڃQ)@44яJ:QA3:vAFx|Լ4ri2})}GGIF(- _'J3$88ќNq@ڐp(\bz0qGc\њ)ri'^h< .p:QI1s׊;Q&=R);R&yQւi9Ah< i9#4`s@yޏ~z^qH3Jz0=;cF QIGzSGJ3(1s0h9 bQEQ> ֎)~ =zR;R9'A0FzQJI=Q(===3KӚ9ǽq4^){Rޗ'&8 sҎ89ڗ'<юG4`4c4@=h9sڃFipO.xcNIzSO?)4 ;~sE=zўGcKԟZ0hQbpipq֏LN@ҊsJ:H9֓;)()1J:v=xw PqF2($◜RcAIc=?*S 9֎sF( gAR"3Ij^)j  ;RR1ޓ(<\Q^٣9SF}J?*旵'AF{Ҏ􇯭(4) )r(ӵ⓿/~g֎)qIߥZ)M& gQ֊^1Fx;QRtLKGjO|Rڐb _IЊR{9i~'4uъLRPz)N0y_!y4zb)0{QQޒ?.E'Ar0(#ނ)xzNS'9ގPI ?ڌ▒ZCҝIHGaKQLzǯJ^ZP}=#RR␟)Q{◶3@㠥M/ (>ҏ%gR4csK'#ڏhh?JN{ZAG"g:)0z◨'ҔsGAǽQJ1KIȤ'sJ3KI\M9v/?L֗J^M0 Hh-QQۭEKA )q'zSȣqwd֗׊0AA4:uuGQJs(IGiG4s@isJj34t@:@dA4'U4{GsKH>`Ri=h4 Pɣc1ڔqH{ROjB=(J^Rc=1GQLz;ۯ4w_r((F94wy旵 =dzRtKGғy֐zRwRqGj^@u҃wu): 0i{r? 3AGl⎘zR wbg4Z28ڌcJ1Qs?*h9E=iG=E 3Gz9G"(Nh<9惊6q@c4ctQG=E/&֎@<⓿J9Ԙ(99Z3Ҕ`c4zGցJQZ{P= sHsQ:uqHG R4Gn(I/QJ(8Ru◥&;=Kړg4t#''ڗ)IqF2zRwGG(4zC}s@Q}9;p):Su4 ␃Jhi旞(=F)NiMJ?Z^;R=fqGJOh)Ivgx4Z1֓ґpyw'_J\qh4dfw)qhZ^Q~<2O4'Hzj:z0:P0(=(@(t֔iOMSjLfsK)8>JIvF9&z^ sA GҗhG\g8@):ch(4u4tJzQ֐uA@8#” b( 08 hF;撗`?Z'4t{ ^oF h(NhR?J1KGzNJȠzvj\fqhQQ{Q{j0Iϵg\dP)1.8)1AQ(1Jx@KRQF8@QA?ZP)1J9ڎHzQbɣI֗ɤ4)JiJ^ԘK֔ w'9яz(>c)qIӑ@z9hG>c#4ǭ9IҁJ:9Hr3iE!{}QQKc'NGji`c${i4qߊP(qҙoʂ)OMKތf1J:u)qOA'֗OҒ"rh4QzRzRwҊ JL zJ>I; R~4b>qKNi@ uIۃF)@sJ^t}c=q>q'oj::P89?)tr(j;tҁA'4tF;( 9&sG~hJyW/4h9)KHF}rN(#֔qJi(J>Qhqi}ǥ)bsGlw9QB:zlqGP:ю(Ҍ9JZ?bRt:Q(8ZNG@9;QE))3ڐP31\R`OGɥA=9=i)GփGz^vwv9u (tcSғvN;Pi1AG_Z^q@ h4hxLRڗ=OH}3K~cbzQ4gjLc^A Qbc{QF0)s~4&-.!JBP@hKI(hǽ.=:`GsKސFGihbu(J3Ki:\sHG8 P9RŒ 1RczSHG9IF1ס#$ҌQI4cJ\c9bR{P=iqZn>jwsF1zB;1A:ь 9*s@4qҎ hjiZ;(JP?*LP9G4CGnz8ǭ7^tǿP4GBi3GN'q):/SAsҗJLR#ޓ:H:sKށGsiqKF2O"1Hx4&:w }/n~4z;vށA1IJ9#޴b8w)GҎ4*R:SG.zPzh=)GJ:c=(F9Ryi)ߊ:Q֌z8'cC)APxҍ08jt .Iځ@ȣh):h҂3҂8HA J0Mǽ"QhA^Jpix=?Z; ^ !>t^I=zPGjJ/QvJ3ӵ֏ƐsH)yۃ 4)g4h4x/M wJLd҃ӌSziF)0A<8gQ֌zQZNM.P8=)< NqFj\4}1F1Gz=iIR/LR~4Kנ?Z1ǭ3ni9ޔzRsޗp(sGzOΌ~QRJA AA&xQyր9Ύ)ON zP3ph14uюc$Qi3;ҊBcG=) F(h48@Kǡ4bcJ:})1Jh zsJ2j IgҗiM!JE(iO֌RۭcC4R1IgҔ:uҊ<($ ׊\QJ_jR=):Qތ@9KGN(ޔΎ;d~t4cdj( =(QwϨQӥ&ss@Rփ(ϯ4@)HF9rhipsQG_/4c?֓"`KF}( җi?(#I Ϲixh4ݹ9AQ'S֓{i8#i= vQKc9cݩ/JA֊QGZ(ԝH\`Rԣtwq.= /(҃4s^0IA$t<'(4t>{ґGJ3=(#&IK($Gv@4g)<JAғ)zQA3FQGU (ރJ0E!K4Hn1֛4=Pr{Rvny4QǭސzQ@&t9FqGQA>G^Rߥ )'SF{Rc/AFh9ɥ3L`'Ҏ1GZ;Qr(()x4Px/~(4u(4R}@&ɤQ4Q֐P{Rg1R)(#'3K4dR !)G'zQ9Kۭ =}('QڊLJRh< LӺsGIGj2=(-(4(4 S1J(zQNM-sҎ4^'(:RwAzP) %w)q=)8ҎށތQKi )=)FGҌ1G~3Iփpi^v&3Ks֎4ɠ:PzRzRIǭ4Nh=8Iz^>ԾѺR IiszrZ\hϭ';FhKړ?}(z#֚}){hǯ4C(P8K2x4~1GA=`bOj3)(h4tiG(GGwRK4(8@3@& Qz}i3Թ}h?{tQFF{f('ފt/Pht G~fiOn—׊1A>3@"qJ(+&Ѷ2zRdS}GixϽ ֖Ӟ(J=}i>JN9 qI'PzA܀}4i0)M'NQiEc<яJ)RHΌџʗ'b)֔p:QQZChJ^4u4r '}O@@<Ҝg): 3Kӥ 5=x'CFx/E!&8RzZ31ԝҀs =?J\GZi8Fy{3֗ZB}(\:R_aK֓t{t(.((/^{Ҁ##H $ґҚG84$s7) Gn);'N?Z3A'u'QG9RsAE KFyzҞ)h(>t=@<=H P3֔33F ZL\ѐ84gg4g4gҗi2ih=3Gj)^1FsK@z4'.y94>qќLx4uPh'R.iKG''O/j3::HI?J3A4(4)Z(%((:=/_GJq֜ QqJ)zZ\d}(+h yxA R“֗B::I@ȣq1(943IF3;MdzRq()>89>ƀ}gFx撗vў(3qJ)1Py=(44uh?JNZ\⓱{ӳFpsM=;:Rufg4uփ!4G4җ =ONԜsGԹSO4(:v9GS\GN;ќQؚ2=)94:R 杚JN/lQtF=h9=E(zB2( 4zp4sҊ\'KI3ўhҎHr1)i ֔cޓ){R RhFh4`<ҌbtcJ/= (0:ph7֔dj\dҁ@qJ֍8RJB9r)R P403ޓiJ1HE7PAzQ֐sAIHi8٣iqA4Z3F3AA?JQG~1F9 }hA>i1ϵ/҂P 'tޓ::{ѓяz\p)1ϥ^Ծ{(w@қ}ӆ3&E=&بɥhc(lP)hHRi;RASAށ4uj^)1IM~&t揯Jc<94(ǧZ13ҁ94vubF( uG>AF9AH:PzqFNhRJ\uuq9t=(^()zEhRsKӗ/-lғi0GZCAI zRqiqM#ڐqc4FxzkrGʓfҌzPO9J:ҁ74AIڗ'җQNԹ⓯'Np0)֗(ъ21EJGsȤ@\fqHqҘTsAr)搌M?Κx$9NzHGhR}HzG!xRJ3hM/Q@#89(=;Q@/jLezRփFzڂ29()GJ:Q@x#RStKGJ8&Ihցӊ֌fq@pzh^Nq$QK֐h=h'>:Ru!R H.?*(#`>⎧):R҃G8Qڏj^ZN49bjN}>GjNԣG@985jJS⓯֗8u9Sҗ1J1NԄzRzQsMw;oΎ掂^(:Q9 PzR`gڗ1(qz1~?.=hJGLNsKf@/4;$tڜ)yS Ӏ0r9*giL|"^^)1NhڕP<5?fE0)<VP?t&9)JL8E3Mru򡗎0sMx1HQsISqF\vHi{}(4i3Ai h'z4 b1ZNږ8\Fh&KQH=)G4{Gz1N)1RHiiZ;QFE穠Q('Gz);SJiAJ>(Iip1H^wuKۊonzPiG'ڎ);3vтMP;Q&yz4g8f*1)z8}h9J^u@zPhEփޗғ4r1Gz^ԙRqR҂y&p:Qu{Դ{E{QP~3J4w (.x掘"O)zR3J:2EZOz^cJZiJ=Ը⓮)}(F~liqJ((@(7i? oz:x֏j:p/^h=;ZOCƖ@#4J:c^C\N:v杚Cץ sG8/NqKzRuҎzRpOqN8)d8 riBzӑH8Rljr.N1Oێ*@ Rmw(5&rz)qB jv̜p:sHS'';gLVsI$Y9 gޜj,*%^OSHW+$L0yc4ÂiSG|{SqIZiM+4n9#z1٠M1Ғ8t(E'Q; Q ?O^49=3F3@4njPE&iG46}q{i0)xJZ3Z( b4gwZ^xc :QގF)(ޗ"jp=8cO_<{Ԋ:u(Pr8JF8G=fH9&JGDNsR<$,i4ǭ9.XqM fJj &)8SzuA曊=4QZn1ތfҌvG'C`11֏&9ǵ&00h~QZCN)qތJ? _^)^q)qG֓ۥ'`vޓAH҃B;ڐӊZ\cғ68ϭITd#_jy@zbX,7Jy$cwCRI?,qgҚjO')Ң|8<1#$RIS@LQTJ940޽irOWMG10izF\86r()T!N!L})`Jc PW#FG4ST2: pJGOD'TYz4O*e\✣$S=iʹ ަ3iʪ;f(>('C jDL1GaT S"tЌ ңXr=9 ҬYR*ޝ$_/⫬|$<⣑y0"`riژpzTmw};7Lz1FFri6ITHT1J B4Rc gqF8!)z@z>qhip1 /Iގ)qG9(w : :Z_'(N/֛=)qIqG; 'SGL9Iޔ&4\{Ppϭ(␎Z^{RJ^ MQzRt4 i֗{Ҟh(枃JgJr,MXTr)>7jH=u3J"T"qڄ1RdivS"fIMJ.1S se`y4Iaґcp*|84@UhrtcL G?rlR2XS[zxIiȦ1!oBiⓌf 8ϥ''biAJE'zLsGJ:F94QփJBsNRc3'>䓊\t &0(i}'\uQAF(RbzgGj(A >/J;R)@zCϵҐ)1F0Mz(8N`jQRy`WMS8EeFjO$ˢ bGZY-3 *N8*7k8LKy=;sңH')^*) ql2}*"PHTj#hL6v1ʃPlx4¡ CQiBFsQ(+Dqwa3oZCצ)r)14tRglQۊo8h*Uޕ4JG9 1Vb_J~3UҪ`#4tQHȥcfsŕ$X4EIx"zwVh4K ӊ'8G"梐j<:sQI~nzT?JcqIx5 A'znߗP2Iڙw߯~th> :)qQz0z⓽ȥv4t(hw9Q1GGJ^>tzrs)߅qڌqҏ֗/=1֝Rjq-H8ǭ=Fy Hj|*h'&SVc+9cE[xȧE͏֬N:Tq<Æ ۞PqVDd.})H4=:qc4=zsښ:!4E8Hԁx:Mi^ S,52Ut֫Cҙ8U!:UYri)sQ0"#ڢnVۚij[i9i搏ʓ:qi94sڏ irx9A=1KhёS{Kt< )Iө(<4h\ZNzAG=zu)99ќ B})MF)1Psh\LRi;Q)yv9QӚCdQ:ZJ=3J=i{Rtg^(ɤǥ֊9ϵ/? :c4)9'iIKRfNh8 ZBp3JAA$R03IMz^4gNi{tE/Iހ}Igږsޖҁ4~4gߚ9KfhюH8)֔tvӰ)OZ}@#=@qJj`28<*eɫQsRqV>_Z5t01SA>+C*tǵ /JENO!)Qr(hȧ*qI杳йl)01ޚWB R4N{P@s3I"Q*+*RxN|_7LTrF6>p:TSF}:!8"px=s֗њ\q sޔ:Sw(48`R(#?Jӊx^}sR*XӜR{rjxԕT9VcB*hmwҦsrjxN5?SRc<Ӏ qS^@d54珞:z'4 R-?*s5G懏Տc)(840Gi`Bq)_zCڛ֐Iғ>}i~"{ќh<Nhڃۚ3JO iI4G/qM47gtd})i⎔`QJ3JN 2@Ng^hp—ғh?/>QIE/|b1G4zzQSHztRdހx(Ixq'|Ӂ=FF޽)3KQ)psi;w4fwQ=F)s@G474;}PI4⌟JSȤ\/IJNFsOJ:jN:ўr=)A&{ɤ==)1iߍ'4`s֓wjPxɥKM.yr{ԃ?S &QVx5$i=*a$f8Hy\\⥂,X⧉9T`SԠqSA0$} 5*Pvmi/n4J DOjHI卹J|ԏ5ҙ,^iT2)3'LuUNQJ*)G֡9dG*`c5M5DWN)0F9 } Gޛ֐Rc'3Fy<)Itdu4'ALj)FO@ QKӽ;PNqHzt4)3JI=Q=(ӵJCO֔u'7u(zRgOJP}:ڌGHisLQڐ)GҐ):vsG\J:fQ:=2h8sKZ\NhqAS'G*rsL0}*Ќ*9!8Sfa9桙㊀)J FzjqLlL<cu^j?›~Ӝoғ>ۃIփ֌w\I4fi3AN cތhzѐ1Gӭ&M:HlO(R撌ޗBq9ϭ=99ќhJ8)A4 3Hz@?J8is(?LTy&QޓH8qi E)OΌFzPzIӥ( f{Kj2Qj_G/(r)) ӇJx枣R*SsTgc\ՠ(VbazsWa$/5ѶJ3KY⇏ RQyR^*14#Th# *qQ1Q3J#@SȤ?5[L`ix5QG,yL`f61AQMFN= 4SO֚zM=8Hi3i4g&Rcޏ—8&8=xJOzQGJO&i:JdRz3J8C׵9ւ@ў)K 3JN:xIx4Swd)sڍhtc\֔n~j\g"ZA=)A:i"J /aGJNz_LڎvqIKE/Nc!/z((4QqGJ\&h|SE/џzN)3^:SNh~gҊ;њ>hyԙI\Hzub)i=>`\sGCKRS4)îi9z&TRޤ*Rƃ5` J$ XXέCa*e U*h85l c_AKTE<zG9~5dtX[3tsK KM)Tڄ'O0W2$iEBG%Kej<|dqF*9TQ**'>P)v/ךC*vsW`*rEWp*U1r̟5E"nj2*"0*23zu9Jiɤ4c{Z88LG^)E&qFy{gS'SA9'/sG>gR'&z;w/lQR3KR{qA4qF0IKz@֌`ҁG84<҂ wRdQRqz◮9#N޴H4zIӱ}sG}(Gj;Ҍ994Tc֌ ^u=3R֎zGj; ^='Q@\I)N{RK)i4uEJ_Iך^h<'AiH(du֌J/z=<@/j;:JU1(柌{TJ*qV=EO'ҬOJ#\_X t"TZ|IHcbc$b%( ?BRƼԎ8S!| HN9E4t梕rO4]C6*\7N)&N3c㚊h6|]MtʜSQ·nGJqI\ZC'UL$cU؂1Qr=ixi)dNhi8 hƔuќsH9G4'z;ю)3Gnzv~4Դg1%~4^qҌdOPr&M7'j3:QނxRJNԦJyө1֗!4w nqNUtPqKI8ۥI9OiT{Th2$Qi/9('$@K1U _U9", X*6|9R:}9:t 98U8Uf>j#pFjlUwuB1JȨdfQQFF{ a5za⛁h?JNJN3EP3jQjJ1F0h4bG^@A揯4w>4iiG^h(sN)sO =A)2sS*HJrqjx@1V]SWZ8HV9"jGzqNy+JJb'֤x)Dԭʄ&sQwT|L椐qM=qI)iRZw{Ur>cDUTT*j=ZEdSZ>2:SG"}ZxjȪ&J e'͞sڢ=@2}*70ץDG$1SJiQM'SI+c5~;T2&UF)pX$U|zTrXW2q8%7L.9T#j9Q?J5 {SOL'ښOMiS@&9HzqH)F3H~vQ:B=M/&:}(4iOlR{QŽh)@GNu49ގ/C)0y1hh>C8E8t9K 4 Žǭ>j?/$sE'J 4wҎZ:r1Fyi3KGLsizw0i1^أI/ZLzsKL(:Rc'֔R{BzbvzF3ғzt(=h(GAF9E.=ǿv)1xRaG'ޏ‚>ZJw@G8?Ls@rh^`1z\wF21@8攜Q1It `{R;PhRFj֔g=4җ`h'jw>)sK:xv*P5"*`8ެ'9\jD*@vȫV aq<$,H=*b ˃)?,_/ SxQN3RtO+ L9Svd)!u)ݏ։"C&7J9R*\?JITm"*׊# v̜)U>lb=)T*0RpCrj/5NBKMКZC@NO^j)2cP?\*2*lGndFjd9eWtiLUZ!!{ԛDN:#V\nF=*XXOj<R2P,nEj)c!U!ŅSLW fޠڠS2@7Mr6U4jj9?Z8Uf  >qPMRqj"mPj qPQ\5QzczSNOM׊C@QJ:{Rghh>ԝ.h9Hr;QqGz;QҎǜKAIh] 15_T98*P1z#]㊪E#*j);n'baQ:awJisI4>g4)p})r?NcJ^xⓟjR)=9>(g9G_J9;tr:Ӱqh")J;Rt ҊL@QH8ڃG^z _'vs=(4Ɨ$(ޔьhGn);q{sҏZFM'4 }M&1K3Bp> (=HJZ(LwғRxgzdM ~8~}L$qW"F85s~WN>aǵ>/VPz WL7TcS "s'4ЄsU]NҕeWO5GZ\`P8|UnajTE) cVU0j8d.ld;xUHɨd^xT?FF:Q7Zc9Mc1L< n)RwHx9h&r}Ry/z:R}Br(OIގҎJ?:FzRq:Qߚ;{Jڂ)H3@g:RRQI)siIRxJpE)31ԘZ\btҌR.sڌ~t}(Ϯ(݁֎h4Tw1IR!50&{Vc81 \VzV{Tg9T|iT >4*rjh*R"F&,;U\S8AV;O542TI&zUSAoMK@~jVǭ2P3H+U_+'!6TZ9E:w8튫*5RVpsG&@?G!@MG#qɨKqUfi:H~lTH0WVfT2GZqQI G~ D=*&jߍ J\߃I(ތ1GCڂqJNKhgPM&zө:ѓzg4=:(={Q/Žqɣ4g#Rrs@Ҍ掝MQ)OJQ4RqڎRފ8KIu($ NNiMis;ќ(^i1Gj_L@\L^)å8:T2?8} JELLUV#r68cVcXX Թ5iOB7p9\SEנjyˁޭ"|ϊcXR4{zr{ԑ7z"mf`}8)b4Đ9Oip=Ll c&m*N.UIe$6Ur )8ǵWJ^qUdwCyTR:U|2,NۊPF*n}jl {R7ayvDǟjޙc֚pE0tMn:u!#qISE9#jR1NJ;^? v')h>)>))s(Z8RgRI8R{gzNuRw=hc)◥thjAHO4 K߭'- y&FsJ9=hGEF1Kߊ:sIzPxhMŽԹқixZ3G4uA>h@'~zRc@RN2)4(< #ڃ(ڎu((^Ht4sSғKڏj2} .OZ\H3ќtzRSi{ /Zpzz8}{1N^OLgNV#_Sl@皲ث1);N0}* sVx'ޥRs֬zTZONjN6D}]G 9F?5k#o> 3tH(egHgOdj4LKFzL)!y⫾K$CUپlLd@? 3q*"x5#4# nr3HO4ӊF qM'p 3h<!E-'Q):i{R>◊%/^ԙ4 Qړ<ڌczҞAGz q֓ӳGlJ;vgD()wQbIQ֔&xҎhϥ)'jSZBE/cIiFJ(E&izr(#?j4hё@9FpOI֓wZ\/oZ3ϥDNh$Rvt4"ւN9EN<Cn/=j9:TC.j=j]sUޕ9皪d='JX5PEDNsQ)Qjn{S3S;M!4&{w(IO4Q׭KGjLҞi:O QcJ:dRc:u4fE @4phgJ~AFph8J7ȥϨKނyJLёKnqzPrizA8O-b9qFs(Gz(sE{掴?8ƀz \c&=hip3ڌsKRwS׭&{RcJ==hh<&^ӺNF(ҏ`RRsQӚQ^h9KsJ2qN֜jbjzA98SS">*XDCS iFJzjZ 9欣*UoՕ`GZ9j|sS 'S֬BM{UAOjt{*}cڥu(ۚFL \GL`H,B lj$!*74I`֣OLbW5 ޕ2Cf9nj)*T.F*>^Ju=};Ug\*Q0Q Aq֠,NjGDQ#5 u4c~{ N1@4c ^P(*;⌌RwIGAH"v֌9*: KjN:IMqbgފ)!u持is@#4Gzp)z?c'qi:`RI^?0( 9(֎q(&NN})@Ҕt(TnԠ3RTSxVcSZE*#jVaLzU*E7"\:IќT*nq֥sI/3R$zU/>)FyrjXdpxgUL2sҤlɨeO4GxT:U7gޫH=#)V`Iޫwo_ʢ߅dcQ#uMvoj#vN:TR&@T?7ϥE ʜTC j.~lQ61Dz߃ӌTLln; 'ґ'ozZi@GƏ:E}iNixiyE.}i84ZQ)>(py4w/jL`ъSI=(Q&M/|Ҝ-'CFx"utF*lg5ZgҫoOUjIޫH֡w9&y_FϹyO_j{~U9ߚa:To"pF8s&'L sGvI@@F{R}8G(A@T'Ҏ(F9F)1J<(w/Z@AP{ҏEs@#wj "}hҌbZ\1sG^(88ǭ/PsH8S;GQ(G^;\ sj(ގQQ1Eij;Qҁ.M'J^Q֌ G4~4{:fҗ&2(R4uȠxzQH:/zLs֗)A)0}(GqKڗ.yɥx?8r:4:zc>9=):fT8 u:jt3VUPOj皶=*/>b;War˞2YGR<'gSŌdqV@P3*mޝ)dc>4B |ԥO֣W=i"$I $dzPA>$"2dr8QnZBQ=jl\jŒ`uNazTMT5⪱#a֠/1Q`DqQsQ֘ǑM)}锄9Mh) ^4Ph Rc=;zzRtу {у4ҐtsJ=1GzOj\b4=OJQ}ރ(֎HQKZ3GIQ/N@FNi3ZNjzQt@ZB3ޚF:Pr%3Fyϭ֐8R Ҍғ4Egҗ>dJPi)zQ8j;Ph4z;)3KZ=84"4ځҎGjNGJ0zҁ8KhJQKȠw8ǧ4SyOSҥSR)TLxTdՔ*eGBU>j&F*QENHC{U1ɫKǭJsV\H ?&ZzT3R 4)XqLQ>Rj5\{$qT/ׯ87})/5ZܜQo"y9&djza~87S$aޠ/ҫFb*?UYXsPJUq{'-2`j* )jcg4)&4ӊm#Q(qړriGB(ѓڎ:0:qA/S'ޔxy8)Jw#Oí (!@4#&t<ѐE^9Ph)tqGC8ގA/^ؤ #4GAHE 3O8<htqFSF}9}:ҜP0M.2yQR;Rр;wi4Cюh~gQ4qRqKH1)}(})@9Jz:QҎԧCA(g tgiN:R Ns('/JNԸ:Q;z1h=)3׭8cRcޞ;iӁ&N@Jqz8RJQ=*e^zfz3jd<#5b#ך 9Vc䎿=\dfTa犔H :)=izc8-NGni", W)߆Q3C#?yw&sEu4[2 DMgP3jdyU*WUVg=*0Ojmڢj2HxJii)>JNiE-'\Qg4R`R44`v):Q@#zs9|Rq(f(( gbw9:BIGK1@&;R&9◊N(=(Kߨ攎x)HR(88Fi(=(?Z1P/_joJ/AG~{R` : RJL thҚO|QZ]RM.0iG ◽^z18QKӻӇ>=GHjzT֦G^jeaSH5eP:LsR 2sR:OIqޥF)/N2} I|Ci\L#M~i*''4-BE1Q?ZfsQQ8wzcIU^\d2ːjhW\Urj"U݁~ D9$vcFqQ7CQigF™zoJn=yCc&)1=hI_F)8ʃҁc4b擿-&s1@# !z 1ސsN0iqxJ:Q{F9 F3FRc4zR恚ZOz^3I(F`Qr(i1`֌QZ;QKJo~)qHF)yKI(<{@Ͻ{ ;Kb юi9)4җN( ?'.oƃJ;`QJ?CҖKzqM4)ph=Qpi@҃ϯS8`;ҁNQ3O^S:ԫ4jtlTG⧍@edߵXOz [AV#o5icJԣT֟G*\`Tq4=jLҩOf84o)sNY8> OHe%.GŔ+IM< 8yɨuL TMȨpz2sU7$?=*rFA8NsUns튀9Ȩ]55*&rDDA1Mc*31B*o!4PE!Ҁ;֎sG_i1.HH2zӊS(4Z@oz:J}h%sKi})~:uIRcCRh9i:F(JLiH4⃜f=h1G~QL=hF(qK߽'Z1/_A<1M%)#J1Rq44wZ]F9qF(g<0hph*@ -&yK;R`㎴v9@Rc)pzьQphy)}F?:1֗QzSQRO8RR/'xtRqR(HFFrjURGLV *HjRqךSrzJxiq4 0ڢhir2i' 0Bz #U$tpp*c5P?CP8Zj.T|O\lHgIIڙތ“tAI΂9qK)K8AIqG!wCJ%%rOJrRdҫ;nœ#)#97 bǭ4`s4="y5Nx4njP8UQ &IPs*'wjg5 ֢,1Pza5LhhIR)HCI.qH}ڂM()րx/CJy4Z9b4(◵K4{(ނz`sAi=xN'N()G&1Ҍ:P8<8qG@bO9:f})qE<iAw?jp$tEHRTƤY9IRn*mL0jXǯzTV .ހ{ԫS"WJUݜTN~i)NzR xh47# sJdSF858֣-ښبHLfJN^ScsKu4(')F)hEQ(Rx4 yRd}iASN4?>5֣''1MnO&OiTݸ7wғޓ ΊOlR/:Q(hފCގ4gR)}) Z8RzC(ғKjJ;R'8c =JxҌ ⒔擿"!t;Fx qڔ=hQ(gzw)ցJ^4O|RL_ʀ1HO4ȣҎn@)zOsGj^~4ҏzQ9u'lKߚN)iO@鎔9.xdӆpHjr?ZI=OjzB8 [֞J֥^Z`*E*e>"g<RjP*ZLr9|M>9{Ծh*ˑN/iaq߯4R43qҍ4J7QgC)㊃v:nۇ?W' O5sz,`e{,݁zƐ E^ˀ Fϒi{-ڣ'$⛞&i;=颔c &p QbP(F;v;K:=i/֎֎i3RF~w4fORt=3GNiG?ZN}iG4v4H:J:Q҃֓$Җdr3&z)hE!qԋ90֦IsR$\Ę5/=柼~t84gN@ݓFG^zT{=g=j`cHu:4)3QvHf)cڢy0sޙsQj6Tm.HQ̃>>{lG׵1(J^:B2}hځ֌GN(=)Z3(I@#3(@8z3@9GjAҌ Ҏ/ZC)Agץ!&q֔(>;gZQr)q4KnG?n4Ӄęӕ:ԋ'8֞HqR  p|w+g-h;{RRsCHzd7Jd8ˑi*4N3ғy7=g/C95rI\Hdژ3ޚ_׭F01L 3LcL{7sҐnJiLԄT瞔hI<)(OqF;р qG.7h44g\ I849֔&Fxc1I(OZ^1GN挌GqGE'HFO_—=ҏ/Hz QASP9Ji);P9)hM)í `ޔoL'LR*91dAQ&QOz\ qF1;GP88Ͻ⓿z=EJi M/'!zRќR村hNLQiO@pF)@M.rA/ǽ9OOV^iYlSws(fu ֌iPRis&y4Tr4nx4ܜS iKiIژO'i9?JLS:fGZBqHIHzw4G'4Qڃ4y4iHj;{QR NJzRc):\ 94;P(=M'-!(Gnh= 9&J3'tcN9٥Z\ӹ)s"]"ޔ85&))NڞN'ӥ.Ꮵ(4(l”Nd҃ϥy a<$'Goh27$is˓ژdz47@vibOa<M'zO4Hy4Hr1M'ݩrxG9#'>R(jSJ=OjhKHx(:QGZ9- '=(=#N)𣰣P)O_IGAGQhJ;R N23Abd Q!piq(qڌ2Q}zPh"u~z^sF3IG(@=(ciHqi3i$qIN3Mi=␜班4Ii >Ԃhғ9擩ҎG'zQyKRsKL◮(GR֗ts@AQ':'^)i>F?:\G9vIJI('qҞ(уoKQR/nhQގ8"9qJ1ޓ4AҙȠP(KGJ>}(9/Ju7җ('99?iM㎴~4SA. LRGSFzQh҃@G'nc<h8sGJ(#hځF9惌);RQ)1iO'AKpz(h`1Gg^;AxR㞘8G}(=)=/4R 1H=htȣ 1Kړ}(R@QK֌AQҌqGz9GҊ斓4ƎqG|rHJ(<=i3Cg4=֌bw4JizRv8-&>v ޗ8/:bqH:攒FhEF@i)Ž@JRGj9)=4isR^h)y!89<\tO9N49p'9b)ڌFi(cZJ;zh' NAIߊyQݨrxh'PqM9ԜEڎأzCL2s\t)F :qIFqGz^{R时:ڎ(tCތZ;P9!9=(>{RNԇցZ1&(簠N)s@ۧ4tޒG4tFh"LwKf(Iޗv>ԾxAqJ (T^N9cҎ{NOJ"Rwz\N7qqIJ"J^y"4擷4ۥh; ~TfsG(IK=):S'I֔h'L4uJ:hA(Ix'z1:SF;f6ڗ&)8ґGsGaGґ{.1K֓4vKPxcL9$Aޗ4QӚ3Ͻ.p) H"1GJ\H})}_z8ɢ}ixvG=( ;9Iҝ 4E(Z=(" sHh/upqE)9QZ<~(aJ 8; \P>^sIz\{4N9" ?-=h)J3AJ3㞴g"ӊ IAQ(*1KӁIɣ4y"'^cތюi;ҟf4dHO4hu4Nbސc'48?:PzJPh'Ԟ{RG"9Ҕsړ$A4ϧZ1NG^PzFI'8F9uɥhҎցFi=i(IF(94?AFh'◥ }ҊBy<8J:Rs掽 NhE.sI4)yP9(h84`3ǥ(NsFM&r9&ր9As.MJ&risGQA<:G#&8:ўiZS 4J;Ph(=i;斀xFqGp&"&'Z88R)33 ќ )AIs=r(֓8@Ȥ/\ ?'<4ItsޔPF)3dzKIGw֎g'Qҗ)Py惎1Gc@\uGlfQGR(9Fih"@;ug4ށEZ24v'ڂhǽP .2h;ӸJLB;џʔrsA E.{LHx_LQ҂zJdf3RR֓—<fJMќgTuis%L3p=>!;84Z9{RACKGj@A'ߊ:P~@GzNEޓ<}((ނqKH8@RךhiZ^(J2 ޗg4G^iџ^@G(oZ=yA8Rz  H~1@g8zfN34H9&vQHiEJtH~w(IJ&sIf;ьsJzRc?rqJxRڗ%('4t.s֗IJI4qѓIZ3I^({ϵ~wP ߚ3QE h^3֐9G8u>6(1GAG9@9K@'A@џ)sڒ=xh'IIE3AP gQҀh*ڏŒ(?ʁӧ4Kj3A3ڎMgh4wRhi;g&׭&}SL"<џj\dP49(4G=}TvlRzhM4;Rh4F~uKI&sJ(94`H8ёJ('R{"@@GփӎԀK׭&i:4QҌJ:sG'L4u<ҞxޒE.}sFr)9dҐtwF}3FM⃌p1@ϭSsړ@48җ&~'QRJi{c&ywqEi 8G$t9⌟J2=(3E&yRQځAh4cރ֎vGz qJ)_J^RdRך=(ǵSȤPxϽ!qRvҌQzLR&G9.?Ԟh#^1HG~( )?ZJ^2(sZ^Qޗ44EGAF=:.=p(z|߱*::QbҀ3Rc_jGюh;㎴q@JLg/דAқQ( %ǽE){q֓Q8H4Aɣ11K@2J\?hҌ}):GCJ(A/H)1K3F;N4PxF9QN;֗\Cւ0i1Jy{f==hL—IEQҗpO\Q(4vQKA4h~T\R~`sREP:{QP8AюqF9Gi@y8HG(9ZLKh#8r(=xRw▊;PG(1ށȣ$E&0>g&)yyCt(#8d=ڎAf;Z3AKށjNA⎧4R#))\zLъ1A`1ރ@isғFx (ƃ@<^ڑzR &;юA ֌{RS{БHQG'Q@IsG~c;PG'brqJE=}hzR4OSM=J.9cZoI^sց\)z_zCR֎wA'4`ގv(w◿҃ڌ uMF=:zҏ&8zpR hKi84NڎGfGQҌt c R׭.(?g:Q@ƒҌRcۚE%(Qg;'{JFGGJ8j;RGF2{QҊ;ZiRi=xwuAQ Gc:;"QR3GZ1IЊP? ڃIQ_ʌ`t tJL` %.=i1֌bF;Q0)"\vyc1RRc0) .i:J dJ:{P1GJChQ4vs@E&)q@0(P{zRpxGҌv=iy4Fю:vK/M4cZAך:zRw^)i8^dW)1KE=Ei;~KRv4)8ɧ`Rڔgh'R:@sҀh}iha@ AJqK֓PxcփqKRpM/NqFx'M-n2x)1K Ҏ1җցq֐b1ic/ZN3Kϥ==EqGqF=h{Rcg)?/JP3I4i Ӛ(Rbc"8R4GSzz);P(qEi03Q={Q!◂( N? ^i^@Ǡt~q1IsJ93y3ފN0(K@=IAt;Rb4cAKd?tf(4G яN(`1Gj\ޗ)1QHy9Qht:1J8MJ;Py@2}(ь֓R~c4twgJL \PZ134/ց@<с>x(Iޗ1Ih#=4vsZ)1F:J;vR<сKH?*h&Oz_ŒfږsNQ4~uP8I@Qc ɥ٣h?ҎviR Av"R)1Ki3=){A8ZJ01J:R{w}x9bsF0h4 K'Z3҃u)R^N)Hf84zQQI)}}h&4wzsh)M/AG4/^Egށj;Ii{ьNP:RLڌcJ>Ԕ)3KE.xSsK> IۥҌќg4wH4{wސя'/^xP:CFpsKך?1GA擯zR)-%(sM>JNғKF;)){▙ɥHxE揥ifq@2OJzt);f€}h=)r(=?'J?^qFxQzrEʓ<3KH^}h|RqK߃IKHFxg4{fzb֔Q֖<◁gڀy4@h''K斃Z֔ 恌{P:z>OR( 旽 Fi3Gݠ)h/lg?Z9s9='8?<Z(:Qװ4'((j^z18h(Q=ht@4֌P;RPr:RF)hތAQڎ8C.p9ƐpisZJ3tƊ>w41KA@F8@G4g'AG|4{P*\OAG\v惎gsKqIqEK8tugځրhgIK2i3\`I<(ȥ^i214f1GFZi3Q֌_Aޗ#ϥDN0}izJ6(4擩`{=F{b2qۚ:zQiZ34`)H1F>cKOi}ϥ'|Pq(>ԹOJ\LўyR})H P>u<E8w2)zcQKj4IFI4{RE=zFh҃)GJNsAhAFGZ\AK1F1@qZJ9#{Qi{t:'Pj;A4PM84gFxtv(i3Ky4dQI8S{ix9NCFGQNh֓48xҌ9:KsG|֓>(ޗ'(}(~4i3FNzsKNQތbߊSGɣތ*u #wg=qHO# -&yuG ){ё@< Pz挂8793FEQ;sI֔RJBisPhΏzN2(4q@F3.8cdfP 4v4;QގI)IקJ_j":QP9Խ(4fr4H=ߵ/!i{i?3Gt4f\ނM4)!R $zPMudрy@;Ґ_!u}NsHsR(KI94tzd;zъ^֎Nf֗^v(Q4wgRcJ^F #Q Lc4$ ^sbG4{F){i;P(E(֎(8JQJOOKךC(tJQuɣS@J^hAJOwJQIFsKIsRɠsA4tQуۥ.1IM/AFx(i {R:;P=>Aӊ\|sRԣ4~4d@qFhGJ^9RNh"GCސ( yqғ)FzLQh@ɣ(<4g4E)j;ҚI )ý'z_&qK@AIhi3iMsKjN8z1\4RќbhIGNhucKG &EhE:>ڏj1dQҁ}(~g8nzRLQQF~Jc<{$A㡤;<Kޓ4f_s@'4gS֓h#?*LRf#ߊ:d;'(~tPhi{Fy){RdAFGqG>ԜFE/h9֌Z(ɠ}hH~c'J^ ڎ3I/j xGNh($QךRh4Sӵ'Kڌ3ړh Qh=))hրF)>{sG~hF8 ^Ԅq֗'9{MF)r(R(g(=)zg9iz Nzѐz3Fqz2}(R=bҌ֗9iފJcL&qIs6(hhzR~K%})}8R◧Ը1AIRP~Q4 裵F}i{gҌRy$GQGN=)qGnwt%Pz9=)1jIqKׯZ3~4◂:RrizRt`Ph(ϵ'9Q&J)qΊ:zQF8F(b=GH}8KA'SF8uKGNߝ!.}9A;sF(QKzQJ2xF;ӭ/78H8<4zQ4zc.99Pzu3G|Pg( 3Ki?ڎ(Ƞsڏz3~qN IHix(F('ҎցSARd<~4j;sMޝ@(zPF@qGz1N3K4GJQFp24Fh҂{ :  ~x򤣞i3&/1P@A9Q=ht4SqKR(zR(4qFyяҀ1Fi:8uCKۥqF4H=hJL 9 tJzEIx))4֗AHz⎘POc4z^Fsڎ3JizfڃK@ xDataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_70.jpg000066400000000000000000002332301511411446000235510ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?IZ?PsP(:Qp9(&py&G^RqAԢcvzRZN^ԣRJ >h޴dR#L◌RqޗZ8^hI:)E!bdFx;xf֔sҗƁ?RJ^chM.84r>rqKhZ3@(FZ?ɣQ]tsAIҗhҌg'sFs:QEI4t$qKҒ9<֗ZJNҌRI)zwʎ);NGZ3K׽c<(F ("28ޗ"R (h?ڔsJq tiq):CIGz84Kޗ})(ɣ4G^#A=1F@@9<ҜdQHO9J2:&AF쑊8IiAj01GqFx4g fҞIqGGC4gJ3Qގў@t=ir:RPz{vQ:$q@isG|!=h|JE'N@OJ(9>c҃8'sAN֗'֐\'QZ2i/ncgҎM/Iz^s֗=#(hwqGќ@sFx4~4sh$@)4(.i3Iҗ)i3ޓZPsHN)ў@揥:sE◵ZS&yE?h9QތE!=)L(8ghx4F=i=I A'>tqJOGIGN8xNi3)ғ=Iڎ<: FqGz2) (qANIآLR8JKM=)E (88G `JC֗=(2(9IzLQۊJ\:PHtޗgwQԏZ E(=(cu'CK' zQRғ8㹣AczёFh9tqZ:#usJ&{PM<{ҏΏҗRw)GCG҃P(hǽ-&i@y{~T41ӚN(Ҁri3Gq=<ޓ$$vQ֗4dzg u(;QIڗ~{ 3Fi8(;NO44NuE#(9z'z 4g4qz@G-'"!Rdf٥ڐ:h.ғ.qH(2q)z4=rO"nRJ(E!$ )IƓQQ3JO?ZK@ngfjgڂNhϨ wzQA>hzў3(QP3(xr(Fp(8hɢO'~ @ Qj9$H4M(E⌚ )4Η&Nۚ^qK9A4gtޗ =~3'$O8hJ  GM4z\&}"@<`PzQ҃8CGjAN9E"GzR}=KtOzQӞ 1ҎgGvHPz֓u4Z9'Q(4w#\ҎƎwAɠ84'׭(Iz?tϽ/jOz8h)}hzzL֏KR(i;A8c QӃG4`Rp:Q׽ԠbZ03֐/U!@9Z4ӜGsQx@(GZ:RC@hހ8h#ތbx42M!zQȤъ^(9&{Ҏ})0zv(z: ҁ1Gl4:GA4GAG=pN'){P )1J;rh(Opi{?'=Rh?rhۊq@ȥ(9&93J=i; 11AJ^&i?*S9znNi%F0i{g4q@ќ? zQG֓d旜Gni3Җ{QzNh=)"֎s/z&>rO8RgK3Iuޔ1I@(jQҗ4c=(LҎŽdf?.;{Q8A'$Rhp(wF9(9ǽ7 яZ(qJ)J(ҖH/nhCRH8gi9J^ԝEԇ&)Lwt~fMqb9?{i֎‚sK);9~t擞G;qA4ڔzIۧJN{(тOZP{wڊ0h}(z1F2hMH?Z4c&F*9(qKғNzRhp9Kۥ&tHI旞h ֌w44GҎ4`@IҗPZ:QڎZL}}Hy: =:Aϥ)ޗ&z*\ڐ{R(N{QxRg8RQ;( =:Qڀ)}) j(ҎGSIh=ҒEI߭/9t@(8'\c⃒sG`(ҏ֎f9GB)ΓG j8!ޔh3Gʓ=84ގhx%/KӚ0 c):KG"R{1K4flR{Rs^ /Z? 2q@#ҐiOҗP3ךQzqAbN(.A4i1HN4qH(ր){F=?J1G!@QiE&3i‚sKړ.=(Gz: ֓=4斐-i0i1i 8=9R R&9Azizt={ҏғގ(4IփK8Go@A֗=6)?Z(=:P9ךfʒ:qIR P94Zo^HIތbt9<ipsIhsHyȣt`GEQpi~izdҐӊ9J\!iq>Q@SqwfsR)qӭ/jLzQ9OZ: :=hqI\s#rzbz8hԸ둊1AcԝT z;zҁސQ=901J(G|i$Ҁ14c# O—c!G94:R␊0{1Q2M◷JN1Pqҗ}(hڔG&/&>s֎{R#ҎGzNqKފ~8h1F9%/R)4 1@旿ZCh4LzF8@b:Hp)G \Ҝ@)93J=i1KSIޗsI֗`Iz\gtsъ:RGqIA:у->sGSF)iM&1AҐ ֝@;QqQږ~3K)sJ=hzgvh A'Ȥgci~viqۚL3F9PGq@(Q=hǽ &sF3Kq@Pqɤ:E'~(clF1Gi(9(sF{QsKs@I3@9FM;P2zHG/NhhF:F=(t4 c_~ԂiqF=qHG/8xғ֊ ixIA83Gj+J6(" _ŒzK(s:c8HJ\(H==wQ^( ֗&֗~i~v)9K׵`G~ԹiqQsGҌQsIyF)qJp;sH}A `t)@s:uRfS3/|R R)(RҎc^'$ M!{vd/^ip z_'H:RyK94mҗZ!'ҁҌbAzьZOl׊;Rh=)1N'⁞=i9/Nޣ9ў).s0(8#ь @/(F(Niqt9d1@㡥8)1SJ(Z;RA}i~T'!׊^qI֌h4dv 84◨c`c4sI@!bz@2=J}4^4()x֔HHi£uL \3ڌPhAҌb?ւ=ehZ O48A;.(PO8cF{ (EG֗ - wRz8Idf&Hcތs/Fhcj/QH~shA^g$R;FqsJ@H `R8j:J8BirJ;QvZ:Lz' G=3ւrx<1KNGjHzQE/'J8dfzQ3K4=hh4ggdJ &`њ(FyG|QҎ(RLuѓI~})sM8g ҊNO4ƁҊ) v=3H0Oz?.F4qKޓ>c#/8'~wZ;bKf4ڗ4g4"yb1{K=G~(4=RzQr)i )M ={ۭRwKJOChz_Hng;4J GZ_Ɛ^h=ҁKEfQiǭ^Mt79N'&c)zH ɠ3@ry.x4އ]H 43@8ގ(8Kހq4O ֗ P3Q߃RC;z PqǯJ3AH@=OJ)#4"sJO9^4JJ2:bJ2s@4gg_zJLJE%.y=8g4g&s/ Թ掼Rz֗?ΗJLGN g(h?(;842(E9'U$u/9Z\Rwtړ#Mh(gG9#8NKҁȠqJ;uFy@Gj;f9%@s/PF(J;40))h#?c&hRHҁҗ'\QҎg4~gF)xGw )I׵(J2})x{by◥AGZ)3)xhs^߯J3J?Z2zbGAL=)hҎ{Q(E揥(4fvF)8&ҞأEi::i{p(R3G=q.q@Kȣ=.9=)hI8bGzZ:}hJ::sqI~4(z Z3g4 hҁiOJN4ph?7$u4".y&piE7(3@#4:RtGzn);:Ҋ:fgQ{Rd~4FhE:Q߭!GQ@4t&⓽(4IsGjSڐt4c֔pz \bOzQN{FR&(4}E'N}iqEԘfGAK(E&>Py JLg4=h(hE(>ҒtR4): }Gt9@ҏN8ڌsɠZAޏK@81֗hA瞔<юzҁF93AZ1I4ށҁ掴GҎQGJN3@ȥ=xtڌzP=);tJNPϥiʌRP3ҁ@ (@Qޓ4`SqJzb=?Z\PZ?/O&yP:ӽJF 4ch4)0=zEuH2FiOZ\bsRv(qIRz('ӹPs֎٣<r /9K4)Q8!4g)Fs֌R Ehz:hsA8?Z1A{Qyw!R4iA8$t ҁ9ϽqIiNqRi?җ!iq1Hyҗi)s`Pz ҁKۊCz\I4QGNc_I{Q23@?^h=IqKތfsFI1F;fv><ҞM z\zs)(4sG֓^(P3ҎҎO?:4% 9)FsԘ4q< qKRtF=?*wft֎.})sAKҎh=xh4I!qKҎ:R 9=i MF;:}{QIR3KiZ~tsAF)i~3ҌRRI=)1A)~ڔZ&—qGQ1)GJMZAAȧvJ.8)A)tڃׁ1@Z(&>ʗдJr4c#ފL◐):9/LAFysGZ^QI(ҏZ '?\{Qy".zqAQ1J:1JyH}s!G>GcRqhzߥ(s)0{4gҌQcҗҗGAKFQAGz? =(w4ݩ1—JNh"ipsIK)ZqGSF{Qӭi1sFQہH89GK &:A)tw("zR!@b(h4R J1 ^q1sIv0;RbtRQҁf{QCF8t֗ъ^ړ8yQzF=0qF9族Z8{Efh#p(dQ~(#i{Qi1/vpiqN KQG')p1i4`Rʓ4Rh⎧8A8ۑIךB=)h~b掆RcbE!h\`PF(Q֐\KIsߥ1ޗFZ(qt-h4E.)8(ʓ=l;R?C۵(J1ZQH@=(NhNh4c@P88>QF31C bdc)pIޗQH (<IH=A_( aHO.0(Fh:R&FhFq?sTqGz9dhJxi;)q)N/9◽>c4;Qj^tr(HG9=h){sH8JڗvAAJ=u _z:SGJ4v(8(#vґF1IZ;Q(FZ(Ji0z/^zQ1Kӽ!֊^9iEhiv⓭(#8ސ8(=iHtZ(4z"c#QڌZ;(0ip~`ct#pE>hq@RrpqKߚ1\Rp2(I;'49杞(Q~4(h%RiO8h )0iP)4҂3Gz@P1A\鎴֏ŽRsKIF2)q)?JQӎH:REǥ.)Nc4F i:Qփ׭/nccю)&/@i=Qy(>(>qǽ'~h# p99`QGbҟCGQ1(h4RJzPi )c1IP1KZLp}h.8LsFhhZ1.1F9cސ/򢓎 #Rch^I3J&>qj"dQRR(xGj;`4$R֏)Ԡg4GGQNzR@#ZL`0zRQhғ RɤȥGz(H}Ebc#KE'4:3@c"sF8)p)>0h(җRF)ZCޗ=)qJ=hq҃ҏF=h@QKJ;M#4sR QŽtF;)zhuG9F;(瑊1EZj?i=#(sA掜jOޏ֓(}(F=#9&ݨ4#P4v4(=hSZSҌRE(sF?ZJGp NsF8.8!ۜRc h9w4qR֗擭z)q֓ҔQhJ? P穣9QތN=)4v9 =uZZ1rhOCKКLsK;PFxF3ǥ/C<{KʓgSZ;fJR';F9dяCKڏjAcގvӊ1Z4F)8Kf1:SF>JF:t(i1J}(?ғ@K)hHr)ԝڊ1֔ o4с\`ri:ɠz;QIގP2F3{Q4M qߵFh)9#4q֌s֗sGcHF(,R:#ޓiGCG|FO.8H}iqi:GR:_j;Qz;FQ-&=4&;v8ɤ#(sފC/lRP=i&zp:яʌF8!iM'SKF8ғFM(ǽ('юzё^?IR!i}(G^hHzRdQzK!4(J9'zќvNzP(ɣҌQG ^ܑIۃG$Q<=((/^s:(M)!84tҁIҎ(֌ 3G;яShΐIu(ގp(֓l=OA4u/GފLgiqޓKAG^ {Rџʎԇ$ZQמ !94Iyh/Ph RgZ\JCy F9R{RIA@Z0}hc;( RcG^;Rp8g)s(R\bsJq4 M(4 ɣ~tJw==Kv:pG4bG^*3Fhdu8#J8#&vȥ~{g4brh}(K)z{('K4zphAw&;#փNvGZ:;{ќj3ϵzZh ӜP 8uǭGj^ؤ nKNsKڎbLqJ:P2isQץIz҃FE/jN:RwҔu'O)w`PsGhHx)N;hfg8&0E!:NsIyzFNhn(A(LqךB9w<&yqGwix'Z\qA9u43M=h;408J:Q( :iqzRczPxF)G\PM K~=繣8Pi;bPF0isҏ\u3RgԿw@>)qқ(=g&J? 8";N(=!J=)<ۊJ8?Z: J3 )3Gn:R3G4Q{c9QM7&4(ǽ:3^I&(M.}MS{b4ZCJ ~#p>i iyf8#Fr{Ҟ;Z3M'Z^LҞK)E&qGKHJMH/n?ZOƗގ&z ┑M挜AHI4֓}hSA4n \sIIۚQZ QFI4G:P i.Oj :Ri;4qyF9IԴ (/◭'jS1E日RH:Qڗ'zQ֎sJ(8Q` RL 4Qy~T >}ix#)3@ ɣ֐4tޓ8擥h'QS:L`Qtj;dii3\sMޖA<("{bh>'HzҁPz9iZS֌)A}i;A*S)3֎3)EQHix);QRR")~(IFxFE&E.GyNM\bi34v4J3-&@(4A984J:Gc:9> Eh(RRiֆ(')ӥ4u>ԤbڏƁץ.8fZBH=Ai7c Q֌IFh3K@z*1A*N(IFyҎsjLKތE1@֐>wɣJ(<:Iގw=8Z? NqG֎ǡ((ttiqu4u<(;i4y rMz\c4h.=hs=(4wqF=h:SׁHGҎܚLzPAJ0ii94 @i{1Oj1uy !qG4g=yoZ3HisIhg)2;Rގs(9ǽ99&8P8Z^I(&:Lw(/jCҌKSZ=NhCF9HOQKތPzQFrxGF!G Q9 zS?N{QP?JCGZ_H>xۭ(3I4g掔Jh:J'N0)hғsڎ=GA4(#)zz1hihvGQGj|sKۥN4}GOzp&}#4G4sGsIȥ&rihց4sG&O.iz;ь}hF K9׭!:@#4c>dg֎Rc?JҊ^Q\q=EhJ^u `3IK(>gsGZ?7<((=:P:bxJ;֌s@GLQ(;r(G')1"E'jUԃ<3E)p(i=R瞔c"3R1Ih4p{;QtE#J\~Qh ҎKfx)p3GwF=;sށK3ǭҀ1֐٥:ьsZniz4fϭg4P*iG_(9tGhKސcގ(֖zڔ.)zQH}iHۧ4'9.3GJB;v٤G=1Lp(I4J1i0I@>FxJ3IiyF^ZN)F(I1GG8z(Kӭ!/g'Z9=iqIɣJFi: 9c֖i{Ⓝ4@riJ3M@jSJ=)4pzCӯJ\ZNgRM<#uJ1ю Hs@◡F3ތTZ_F&qҗu4`g֗&N;8҃H;ҞRd瞔8Q2h IK!#4G^QⅣ {ўhzQ K҃pFi:\{R3EKր)?Ɨ~;8◚LcSRmZ:ugތ`ҏΌw p":t 1?.3R1p= h+4RK(#"1< B}ǭh<1ӚN9Ҏ)=׽`Rii;Qh!)OqGAޔH}(phhTqڎt4n;Kޓ>c#"vAF(=(I\Qߊ /Qi4zJBȥMn.}i;hhvwȣڗ) !ԃv ъ^):GQҗ(穣&q/("n:QRS~R4`3Fh~?J:QקZ\wuzQGJSHF2hi~ҎQiqAJ)}qcNҔ3 b4c ]N#" 9 fwGZB1HˎE$c4Hd}@:ҚF:SM(# RcoQiF+c#sBiqGQIGӭ/);{bfi@&; ;Kъ)Lu3H8w4LzR"GI3@.=&8F3Ii@/jNhiyϵ&(cLRւ):j(4 3A8E4vIHzSڌ M$P8 ZLQҏ֎9硥%/L 2GcG^)Nri1x!fR4t<ΌPMGrsA<.=)M.12hxwJFaGьwސf:~4sK@sh)q9Gz:v)p1K.◡;o+JE&>j\1<ѷ@4m=})sNy>_MM 0E&R`zP\c 014AqHA׊B N01IӑHGz1I֓'4uh#b>pI):ҚNOҗ8;IIcIсG|яZZփҏ'~GzBOaKPs_)GJ>=iz3A(w sAf0{P3HxҐ(4g.)3/&;ڎ'F/AqKLh# q֗#4;pI)OAg%8 JLs/sGl8x&G)zўis8RA9ԤG~w⁎(8h/LsN4qP=Bp)v)=(>zӀ ]sJ ⍣9UPTJ`Lc93f0ԥr}Bn9F?Jo@iq)“P@#4bzRZ8i'ɤ 29nH֓czNct'j1N8I9>QсJyi?J3J 8i33R9> 1LQKt֎RHh8ތ):QZj1zb}ixqKIҏ 9ތg&8Q(^hqG&y/8Rb(ǽZ(K@@q1(#c{Iix9oKIg}hҀ9/Ri1R֓'\dh(8A(.8&(F:&dG\~4~^)qM<jLRc׊n9iIHԇ>{1F h攏zCu:Q Q)6 R)h4)?\RwF?:\`Sq߽.3F1):R={tǽ.)K'Z'ӥ(֌sii@KҊo4\F(QRc@m9Q Fh4ZqF8A"F9Z){ NpGNi;f):1^h p( R8Ȥ.8A@`u掿ΎsARҗM8 b{~4LԟIҗQ۽)`  -LsF)}@GzK^F(t81RzS8Δ.NH*sӊ1J=*qN `*USN1Щ}h })8#NH*iroݹ4^=:i)141HуN) HSjB4֛B;cBqh)1c#k84${֓O!H1JGyQڎ~PGsҌ(4QQjB(8J4!03K)_—usJE&:P{ҁRvAqA4wuqK#ߊCǹQ)'󢗃F0h0 с@41FfQHoj\sGQB)qRx9(<)A8ց8攁qA޼SqA>h>Š旵&控){RiN(ړ4Q–z:i #K4}(\qGz;zw'- N3R0=KҐ{zfJO"hZAڔC}(43@{٣hsKbb u?J):Pϵ)499Q;HR>SqJ18G;N< ϵ.LS}@sN j@tx.' ҅N)9HS#;xhNNzs@@˜S␂zgf3MÐ{1kRʚFH9H@Zn;RmqF3M#<B;L~tJ9(g h'=Pq~ M9Ki)99F;Rh/^si#cގhAi/ғv})FqF 9d')y(4ur(?Z;ffJ:qM=:( -!ǭ-!'jLҎ(hQ4b^(EKIKIF8zAF8tKRztLJ1AA^qAwsJxIjJNzR.sEE&qҎR/J &1Ҕr99@A(ڃ(=8w9⓱uJ_J1g /z>(Gz^8'zM"(8┚L@-''ҝi P?J_jCҎCךSxtV PH< P 8x9=)D| aCQV5>nؤ?/vsӊn7rzt#&;4ӂx9m;8F@Tdd]-F0)F)ޒO)iF 4sIOz\w4'4ӺC Qhc(Z;ю(֏4vg;р(h(P= 9cސwph4u"84ⓌsH)~P3GSGZ1Gng"<@#\w4Zgf3ڊ2Fy9'Z^ yjJq.F)~)c>QzpA!9⁞=}()=hހhyuP{zRv4v.G~pGZNGџjOz\gPq@RcۊwzCFE/8KI43F8⒗?iE.QQiR;RZv=j@Ⅷ>;iR*ԀbA#qI\ڃΎcq8hIN()I)GA ◩H=J8<⎣KȣփڝjC֓;'~:Q\RG$EwJ@҃Ҁ1K{g.^QqG~tv2)Gw4uzJ1GOz(ҖPIc9 PzҎ:~Twqg/J;R f٦R{Ғ)9J^AZL:tJ;E4^\➃F*E.2}D^sR2zc)g")Cu<;LHy1@=?U`S'֠K5GL2)qT,6 .JR?ʤ$gpO5zXt='ǭ3}'; B2E{ F_j:pqښ0w'_›qi4IQ LRqxGCKڌ@=){Bh=4 3=hMR挊J?^7'4=y@Rs#3QiA4u׊3ȠH}Ag)A(4ڐ}(Qhh(rhGҗ97r)yjQIۥ(" )M}(RҜ w4qڃҀxL_zsAրyǵ-ۚ98QhZ^:utG-'8֐()3ۓKץiF;=1JhQ=GJ1t=J:探w⒗/9c3NqNHHKdtBqiǓ'7w3GS,y)蜜tdg?IgRLd:Rj\m✫MHFGj~oZVPOLRb ҈\T^OsK$9O\UuZIm E=A АsSWxvkvt5qQEFz ӊiS:*Hz`} Ȩ' 9dSyM!1Sқ7Mq'N~=i cҗ8ґҏ@i9dGfz2sGj:R SE4ihJJ^QӠsi(J !?4P}(Ҍb_FN(=(F~QFpzqGzRqM.*Oz3ӊ:Rfw4u /jN~tu4LqHM(:JI8zPOc=~搎(b94gg3ڐq\wFM.{fQw8@e#} $_5X^ҥh=*H0zUOsވӮ)ΜRqC/#֜=駯N}i͹R FZlIEt xj "qHɕ,?4ɣʑTJ/jcS/ *qMu9Ȧ`cf략ySXzqڛ׽Zo$`Ni4I:tM#4()&1FrxzAFH=(89?(3\揧J(})2qJIސzf? 3x4cހ}4'o@z2OZ|gAdQ 8OŒ҃GIތuP:Fyt4zPrsZ01ނyM'qFNzМH(CGZ\ ?ۑ֚q94c&җюwhq(&A(:Q^Rt$QGPzg֊? ^IRbfiFs@ Qx%.O)I? ^IJ=()3ڗ^t(cQq֗KK)Fzҁ)ˀijU}*UsR('Ws=d>k{TF1g"™xU+NЂ=OhzF.ЫӁO+٥Q)H4t zf8"GFhey Q0,x !?$/sT101U#^xqGUxcMh:qUc`i3P֣=iFizCMN:SN4 uc1 B9IG֎g ;tތcғތьhƓ8t@^A'Ҏh8'/4J^RtGnh4syԘ:҃掃uԂPpG.hi;8J3ڗ{R4F1֊Z)=OGz1@y(=J((ϭy֗{Pz!98K>f4n3ޏj1F2zJzNzRaKbnԼw/jv)xOQ;=W9W(Pq5*QONQ U9b sVXvY zUTqHȩ*/HWz'dɩ' >5#QޚO%qH=i(@Lw4riir{Ru&8^H94)O1I@{Q@cIh)r:fw4~TK4 7w tPx&i: ^IJQH3ҏ)4Ru4޴RQxGJ=2iO^(A(8RсJ0=hw4(< Z@1.0;ў9ǭ/|hr(q;QH)ݸFp:Qރ׎qց&;Z\f掣!"8:т擾s'R'\s@PGzp旎 p03OӀjEtSRvåMpRr@XX54QjΜb>aPI򃊙<յi3RTQR/QhۖB(NxOs8F b1+cx>ċiG"Wpq U)j%Trҡ5OUMBhҫ%Q+VuϹہ$\Ge*2)aژWoHðS0piFx4t&3IBiON3E KI4u=)}yMΓ#?ZEGs19K@$! Px8#ؠt/sGz^ 4gbqF))yhM(RwЊ0y )h\ Q(=.(8ތqKQE3u`RSKpHTc<2HS'*V`qSt)Sĸ8yyb9##[!z3N:TihiG4&LҊ 4ZLJ\F)Hт(14R⓾ (M?J1m&NzqJs1E'z\qG!sGzRHgqc==i:sJG'j_Ɛ)QI-&(F8IJs`Z1EG^{P8dQG֌RрE'N(A|R=Ҏ1Gj\zR` J}h!)2zӻZJ)qJ=F9:R9{H:R42qKQڎ{R &qNqץ\ ^3J18 Gzz0jPqN jeLjDO֥zzUӏSR}y(ہV.bVBqVUt)9jpjX=x=T_zv=LT)BGJDnxcE1;xrJŇ/D)i=7R xNsF\Q=:?.():KH9= CI4 F9ږ.=i1#QҚs(:ь3t:qG}3Aݎ)1K8J(SJ8KF0sHpNi{{ьJ&9/r)4dRgQʗ{F8 4P?Z^(ғ(h4KI"y=iH_IE;uc)A(Ӆ;V"_zG5j4H}*ڬCV(R}8 56̮;ӕ0j]@MIEJ J5:yМx4GC)8r\bHHn*9cV1$1a?c8EGEG'_£#"puoTLUR)皆Eɤ+]Fj_4cB~u ~5N=ꔱ)Dv*Q=1u+xA/sϥFx#Wa1F?}*6<ښxi0)F4wsA␎ &8&(h=(By(RsIp)h9RNh<J^Ԝ(/Rqь~Lю?'ր<яƊ8ϭubRhRN(xpqF99>{GG9M!SK\ @(>(·Ҍ NzqޗNF=)sIޗQӵcc(F38(cގgi1GZJ@8i@iO=JOj\PhF(qKҌw`Rj K(sKNޗ3OҞ?iJpjeP@jTL*s TLZHO}ULUW{늙2;T:{T֬=579bjSR1vϛN#pEFjgm>F)R!?F)2S$T[ o+B*B=%R3\h*9< BH&9j!=,u]Fd:qYp;r *WIYS={T{8VvOZa\f#c 09t&zg>8:qZJAӥ'(J7Z^#'bޜz`Rp84K:Rq/jB>u)p1ғ PhJR;bԸ@4pi)HF}h 4&q㎔旌s!)RI1I!F@ތrhIڌz(4 LqN'֐(zQp)GR'SK"?J\P y~tc=qJ='8P2 4wuJG&0zո)qߊ2ip3GCG Rcz\RG# =(/z\dH84'A/AK?(8{Ӡ f}*AJgޥLVgRx?VAOWDX\>2'Ȟ8j`{A\vɣiJ^()4SqJHޔiOM=Wޞ*TDj4}zՀp*GYN*ddqVPr8ʼS ަ €rO| @Nj/'jSjX㧴x5"GJPHQ*SR*{S)aQRqQ)j(&2ӭ4(UAPZgIҀ):^4RJ: ^F{0;QF1JF=i2sҎQڏj:h@G^)9)4 >Q9h;Ru uGJNqJ8;Afh+fҚNإ'N('# !sE\J8ސjvsHhր*8h}'ڔ()ɣqG\v/OzsIHjQA!JGCE"ԣAh(ҌϽh4ڔ)N; gi841&riG^zt}JQ(>SҟO#֞jMS Qj`*dZ VM[qZs]V#n85*sۥLNjdT#+=>" JJ4h18MXcL Q$dv,Y.*O,+}*%pi$8ǥ1)MVj*qC5YH ǭ2S֢"sQ@&f<6qPFsCW2*Vtj"=6j#ӃQsL&'SGAMfM3pr)nyϠ=:RHFxLQOQߧ4RԽ9@hўiN4߭R<HN) 3QڌRgڔug1GCGn{P{PHt@lq j\i RdJ=(yA9<Ӛ/JB})93G^hO.=&hNJNڗ i-ǽ'@4w (E/'Ҋ\FNxќqKۥOjPsvpx쑌SNzS펕*{ԋS'J:OcXxը#W2F*q*j;qRv.1RԊՄRHy xMw S{Ӳ +)g:RBzSPM:87{ C3"S?#IzT)G*`q*)HrVg4 )zX`j'nNi9Xj֣P8u?JUi?A"H8g֓҃cLTwc BAќ9#(j29()s) u(͎֒dzRQK֊֔E/CҗԽO; Rzf/5 :U`'}jve`*p)goҪ9yeoTZw|rA#j &9Τ&8484 =) Zo^i}(!4($(AH(&I߽Z#ҌP=i4i3F3 ?/lwAQQރfQm%⌎vii24dȥA9PHbFh"}iIuQC҃hjSΌH}iEgixʃQ&I>}i=iF3H:Aހ:bހrh4)>)s߅'h9)NEM'< /~)ǥ4}(ҏ~gҌ\Z2(NG9N1G^JzZxN<qR)2je4cVf}jŽUsVUv&#VbcV`bzOsҦ*g J{/# sBEcm'|sD;ӕr3M$S qQn,=)/|z$)&~i8RdsJ sL[VPԑۓQ g82ɌFrv8HA<|C5RDSZ"T)ۊRdTd񚁏4}nqg8⩙05TIɨ&nE@XbQr*Q#8Q5LnE0dⓠ1(l4ӊC3ǽRd⌞~n(4dz(&A4A8is4 Bs@@8␚NqKz3L◿J)JPqץ*Lw@py'98A? F9N(f?\zM(4dt9!>uGg'oƗ4tH O4FqFIE$ux{PN2B5皑9A"%䚊RuUe3UXr8J)5T-E:(ۊ*Qm;zUg\7_6~j9ٜTy$i\?5c*f8ȨLf`TS#dbnޝ)@7Hx=i 'z@{t@fRh(H}Gz3K&M/H:&}GH Ҍztb4g.zRN)O4]gjeAf@r*[G=J#֫8C:n-5^3@T~CUuez2ƨsLcn=6=01LbqJBxi48g&9J:f:RPG''(Ig&PZNhA>M:"=d'&+Jc?mAӥ [4ٓDX>ÃUOX)&JkUrj9N*,ihh9&9'vqI ur(G`֗"(iA{RM.8"3ސc{LH=x*N H0;ґH3GFF(@NƎޔu}h8Kړzv=zQ@ix&QL~G(99) qA&}(cR)}L(){Qc4>s'J?/ZRxGC҃JJp⎧)8/;9b)OR@2x K9⧌Z g5v&YFWlЌSEO3SF*PՄPE9T` RE LSKd{ӂ|܊`:Q$S"M9O_SZQ#ĠzT&Q9PPcv)zgqUe7F*PX^*j 5Μy Q1UN}> Fj SWb0 WQƢ/}EWv?FWf9r5ϥ1*`J0uoJi))8'J:%-3IZLsP9sjLKގQ:QIp78< ^qIҎюiQHAz>c8LvҔ`ьJ? QFy'4c$_vXJV#A(Q0A9ҢuUgP9'O Uk"Ue\*"351 TjygZ*=iq0i◜N);Ru{IךGJ!tfIJ4f9 Δ43H8}NcLS!88qJ:RKFsGAր9=sF)OJ? 4NiOlbǽ!(4uKҎ"P8ӻA9ӊOz:u8i0H?ZsGri}J); sN&?*R22)z 8jh'5,`SF|J#{sSyc8Zr3uMwiH|)Cpr~$8F;T>M4U)p_R}j$553Dr jS 5^qU"MTLz{WI5 Jc6EBFO^*3Q 曞sL8&E6SHsz(#ǿ~(=h"/A@N 3F){fF;Q(sGCFhh3IR:wҜch84vbGю9utx旷ҁJ=яzO(4`Rtr:G)h@bZOc }h4ccڌCKҎ4QJ:RGg4/P9ڛjS@R03F1Z'H/CGsғz?sA:Rdw >cZ3:~(A(F8z^3^iG(9Ҟ)OVz{`TxP3VS P X{ʸ5e*`p}x=U ;2sS#Cr1VU5"͟VDqԱZ*h6ڦGӷsSLgʥlm4:iU2*7_Ӽc8 |Ԯ-W#\E!=7yyLSj#'ڔr))p:RcR3It34IKҀ1Ҏނ8Gj>cޔQEI')g^ǭ!84uMvNsKhQQM K)~{f=x'nh3J)?hiq;QƎwKNpsҌgڌdQ Nfz&;ѷH=ZQj 9%>`{R(H /JH)M/lbJNr1H3җB0hc.2i1()}iqFzCJ;Rڊ1F(q~T{phǵ)289GCIKғҎQ)N{ 3G&֌qGڒюh"ހ}pM!Sq4}):@ڔR \JqKތzR 1ϽzGLh◿c_&9\ZBqKFp=i::R1F)1KGz1Qi:q@M/jNq旌w=)E!AK)E ?֔Rc4uҗhh(4`)ԝpϥ=zӁ=*E;ElRH6jj[ߩғZBs)1F)Avi I<()xҊLRJNsF)hiN4sG@#v(Ls=h挚23KނyGNu9ڌQv qHyF0M*3֎{RtGRc|QSƓ4ug֒Kz8P:P~)h#"/AqI=sqF08RcN{Rg'ցG^IюsPs%/8(яSK8wҁN">S"3J8S!z:6*՘ߊtqO֮q֧G*\ԪsޟS(ߵnz\|FߊP*TUv$ ⡕ϭB_<ڢQ~*~zHP3sɨCM1)i&1ҐI/^Ԙ4wA?:>Z8&QA Ph4cƓEҌqތ{z)Hh G4R/n(zN;~4w攁M( R~( уhcQK} sQ/~xRsG9g'IR@@4FhҎإJ=Gj&1ӊ1ޝؤph'ڎ;P2(zNԃ4cEHsڏRq\t(jwn)&9A;%8c=)}GJrU >)G j@zTE<JxW8GL TU~:՘9I7qKXWTSc"8^j`/>l05!`Ҝg"‘W98$Jkp)@8'4'֔Zf㞴܊H F4՗JgO.H1Ңi~n֓#ޡ/csQJrjFqڎݨHx>ƎZ s\4 NsԹ⎽() ":HzTrG5:q֥^jxJF*t(J T) OZS$ (sޞ4RdT'Jx ׭I#J8$_7ЯRu["i1F4cj09t0 T[NsL|bTNy'rUL=}9<;:dsF#DynzTLzdQ٦0{O&i2s1A?&{R8 izQI"9AIߊ3Z>'֌G|:wLPEJ^=hbz'^Ԡ Q(}4PphdzQ𥣯ZC_(QތbF1zzQ֔s9S;v3XdcRzjDcS+gpjp*t 5b26хXVj2168E隔s ҄ R(ڧӁҞ2(JU1Ӄ4g4哞*O3f;9fc!ޞ$}@M)`j=$ZG8Ȩq֢cMG7=i5?O5w56zb34ӂx=i 4(ޒ^iȠti3֝{SON)O֣h֓ߵ/(=sڏ9ɥ=GҐt=(>~{JOjCy>wҗ4BshhcFxH;PF(~4dќfP=iOZLs9Iڗ4utGRQЊ\挌{Ӂ:S ^;::P}=:RfKIzzҌw8#QߥGz3(4ZSj4*9GҌRۚ3Aޗԣ&y9(8<Ҋh<:\@KM'9y.y*Q*@OLzTEJ:ǥMF޽*X8.x ͚@Ԝ9wUsR OrjA&;BRy_YsJd35E)})ӓfAQ`*74*'?J^2j]AjG~HAWS3Qri*&Q3ޙ$9iݺ TlĞ;SzKSTd\Iqӽ'zBOIO“zu < u7w.OZ@r9I4<3FO4gL=GPO9#'ցh4sF(ϵ'9ɣ֐њ3G84ZJ@Oj^ϥ7'&Rvi:QR58}Z^3Q 斃}(4ggj3G`h= Q9Ji~㎴>AH(ݎgJzIҗ&Nh,{Qϵ&z;3KڌFh϶hA縠vʌ84hќzҎiz Q:QJx QOȧ)[5&sO xoJ[5 r1S+sR0IXYF1S(ĠXjenLr )Ɣf4 g4+߭;qZPRJO00NM)n4jq3do3 ӭWrSTڣPKӥByPKPPg&&{yFfQ'acL߃Jksi7})AcZi9cIQFiGJ(Rr (7K(\Rg_zti2yZp<})3:QFx4J'J1N=K֓uiz)I€}Eќќg/uqA&sK}ix!)<'AqQރC@GjZLR8ړ4qKF(ϭRr{)qIҎ?^ё@9'ڌFp9u⎜Rs\Iz^n(^)3KzRt9.hj@~j1M/QGj^ԝ4-/J1F9<`QNM($1Ny~4EH:Zzyю?Z$`2L3LyUߔm Upj)#8j$Q<@u'Ft"y=)[Gܓړ4iNJ: RZh?ҌQ2(ސg(-ӊ^ii:RtGOZL 8g=3K)Ӛ(>=hGQIsGhK>zOqKqG qG^G֑Q鞴v41IM.z*8F@hҊ@@LqE'I@$_/S֐hڎ:RIK)=zwGQZ ގ uIHhZ_֎ :{K⒔~(2&{S(KҊ)sL8Kޖҗ }iwvisO\O 8?<HJ@ǭ?3R9&[JTRVYL{TҝTBOz9 9oDϜL21ʢkIٱ1M3L&}qM#iL9Hi 'JC'~b=zH;R<}hix&^))i?/Z2(z3'LZ?8J);;9h@htwcvzMZ1z^({ўc99QP1Jic:gޓsE|QyF({Pz9F3A"ML*`ST5(<צzԊ'40n1ҜgQJJPjO89gɥyNxs;i uhsqIj^dA) PzzR~h Q84t^ԇ).):Ҟ A>vx8IK׊0GZLd/IN(}ZQHyG~zbwRqIҔd)5Ni?'䃃F<(BO>fi)ׯ5aDǞ9qQ>֡`97JCڙƘi>I7>{􆐑I xV|HXzk@4nS4MD.i+Ą2Bp~`bNsM2PiSx9IϽ!#l6Aϭ0b0qMGB3H\ڢ&v^p*sDšB?-1N0*694FĆji93{S]S7gȤ< qM-IMbڔRcۊ掤=M&qAzN}Eqϵp)0@Jxu:NgځR)8S'CG3K8 8RJ3)::ӆ1A⒗zފ#4(B8/AH=M/~4qK!#>8hv(җL{Q҃۞h4c\G$z_RNqS9!L:x'*A +ڜO !$,k8 fd883rO= u09z4iig<}iM(9.s/JAqRƀ{P w& zU9)Ҕ8(E81ɧqɧ+֝ӕȧyi)i!N,ڜ&ӄ㸠OJq<ܓ'AC0SCzi*x f 07pQ=_Za4nS[SKgތL$SCGzi9&,3H#4i8Nv&(9j:4-P9FAQv֌QbvQ^>$u gڐsE9 (:^v)q!9ҜIJi@4E.0=(Iۚ^^RIE LsKށ^ԝhF;bs@A4b4F3Gpi1;'Oz>Rwh#ړ8Fs(攌IP);dqN=(@ !KAG8Z\R`Rcґ\qR4AҐP;ǭ Jv)>ь1FRҊP8ǥ49N8|җqҜv4SR=y}O ;SbwNSZPx4c&u Kn &q(uҎ38L=)49zZ=h4wJ0hǵA旧zB8N4t&QRh!3@sQgE&3ьRtȧt4*4qH 3QA;IsAxz1G֖ьG=:RF0hFEhG81@Rbf)ZLS=iGS֌ӀzRIA9[ 8>{R?8N8''9֔99N)w| (.1FG^n77v:R!F9744M֚I{NGJ֚M7u4s†=R9}EhF1hGlуz1;Ph N; ȠI&8#hn` g4ө;QҐJ0hi (?ZSۦ)/QHyJy R28Q4KOƀq4{ӭ/qHzP)O'G֗gޗzByKPqJޔA&}hF@(g3ϵ(cFy@GNgڏj 4u4fGni2=Ғ1F~E/_J)4>EqG3ԙ◐(<(H9vx/jN3Fi{g#H0f)H94◽"2(=zsA5$Rd҃GLⓁӺIך_!KE'j4f1֌ތ{ތi2}sKڏG)h=(I\A>Ӛޏ\Kڊ13JؤIސ:sJ[Ȧ8fq B;s>ɤ'NҌdCqA98HMA-֓4h('Lh9恊Qi?J3ڗg/jLA Qތ )Qޗ'\Ij1JxG fў9뎔hq@Go(g擨'ȣNɥǽ1J:Rq֗`Q(ۊ=/֎▓/A4J;Pyii;PF(F)IAG44)qϥZ4LJ0xG4ҌRޓu8z1Gj9Ԋ@G/jLqF )8Lc(r GӥMIǭ)iH4('9ϵR ⃒h;ю=N=z(ɤ4RR@Azw& t34 h4R;yi3)s/(ғڎ1ҎERۥ JOFw^F ґҊ)84t)sN2)=hz1I}8 ^;vZ3izё@o\R⓵/j9)Iҗ)0( fGQSR*8'Ȥxi{R3JOZN .A(E)P9㨠uyh8)x/lƃ@Hxߑ)ҁҔ擿zRini{J:{Rh~4֐f8Nx&G))EJ>Q$hRE(rs^:R{w҂@⒗4hi9<ъ;4!I4:G(QEƒ@KF8JP))=xzRd“-8/O/4◎h=G֓џZ:hE!O#&8- q@Nv=EPx>AK؁@{PAIj1ѓ@ih &>nqhRсGHzR┏^i8>vRdg 9GcH/A (H8z҂)1ɣH8ހ0zR㞔(i@掔uEKNQJ:њC/> RqGZ0E)x"i:94SzqAJ9Ii;ҊO֔tEtH:RC`/jAҁKzs@9AftIPG|Kԃ/&8h4PzQI#ғaF:z4hP9):RA 9zrhv!4 S1@-&E')sҔڛwsGK֎isC@9qAҗߥ'qK@<{(G4jSE)r;}&}"gt>׊QJNzv4iZ8JxjNisLw=RJQ9fҎi9JZN'&^qGZފ3{;NQJCAJ_zC@$u84d{ARsҎ3G@E!F{NJqIǽ۞E/`Hz?ڔړ.1y(@RQhF QGN(84Rz}");zHz┎:R zҞF=i@Nc^Rw֓S4F?OQҔvG}(@ьuFrMPE&;@Gj:߽f4ӻ{s^)1J?Z8h)0j^ԃ@iH'@1;ъQP8QhQG^Q4w94c:dQ)8#KӭK)P !Ҟix$ѐqFFqILҐ1@rEP\ 01Hyу\N4Q~p?8)c'A`fŽE( @ 0cIh.h#'4cIQN4`ю)q!w)10&3NIQ8Lz(:PҊ;I\t(QIuK+\wIJ^٤)h@ 9z'?Z:qG|bnvi94c G8_hgGGg)@u d1GQHWҎ.8F=h4PzRJ3Irh u⍽94S׎i1K#.{H /9{QsK֓4M`u;bG_ƒր4P@h(J:Rs@0M/z(F8}h=s@P:IE&1Ah(vz1Z\ :RHbOҗހh=E;2=hQގ bu=(}9JZ;x(RsNڃJ;sKoN?\Q(GjJ3Gh(d1izj3J:pE/{}iG'~⎝hсFyKڎ^ԝ ZB2:QږPsB={t#4r)q4sހr(K&}p3HHt.3AI/z;hcEtj\f"qGjSG4掙=8 ?1㎾4w旌Hz^O"Iy8w 3/qH});RցҁӚ:2q1I֗WNi1('ۊN3JGlv'4c֎ҊNzRI3@s@c0h=8R>)}8R[ނ1J3)xMPzhڗ>ԜJIqK@@@Z?Ƞv4vqҐqތғ4faGA)GqHE9KސJ0F)3PG)h9KړhR4 8yKI:('/4QGFS ќ:E.qLzZ: Q2Eh>RvFp}) OjN2i{џZ\R^G9)N !J3 QғJ4dg;E'LGz ⏭ER)=sANʔux#?/Oi'hƂqK)2 Px揥ޓg7iQ֐@<RG4g4vҎsKRN攟jCE֗R*Qd(;u);Rc:ϵj1) 9'.)zuZ:v㹣|{M)>wccG4t9Gn(9zy8 R:gRŽi1)pF0:ތFGq␞i(G4u R}<)yu1KޓܚSӚN)iR(=)x"Z3hNHygNMҔ Biz NsGSKq֗{ў8G'N{ۚ;Q -FqRz^J:9bFh/i1(4dLQF}@i3h#4PIdE'#ތ_AJO>nGgEGQ4gQZ(iM&hGCG4ixK:QZ"ޔZJNA@Nh=1AwQzLrzqKGZ^{S=i8ɣJ#>tR!1G$RgؠzSA?=jQ4g<ҁ=&3KA{QF 3.s4J3fTq^7=iii;QF>lrNhHi}>ԙu49R=Ȥ=:ߓEqI;uG~Etyy$ќ%y.x>i 8N4Қ?ɣ!<◿J2=(JxqFx=i3҃is'z^1ILҗ4qރ \F{ % ]ߍ'Cz ^ԙ zPi94ȣ┞i3G)sIrh֎(4ځ.E&qhR:CFxZ:j\L0@{viiA94rA=hzF97sҗ9IK{fF{n(?Z;u3(PhN1F{Q(8(sA.G'# Əz \`Q!/$PxIZ9c>u}(@='J;4d1@ҎPOsA<:s;t@Hs4q))GJOj◵fnʏ.H@zKNh8hM pZ:3!K) .yg&ѓ@Ҍ?G@4sf~4j▐Q4}iGL}(AGB{zRF}(4I(}yFq&x)GLhǵ4xQ/4R Rf4#@h"sKQ49\:4zPrx@4v"E4uڀhK@r(4w5{494bt &x9v 9ǽ.hC3K(҃Rd89旵H:ў֎Q3G|Q(wGjR):tRsK Rg'2h4{QR':(PzqAp)zgFqK֓T'Qߥ'Kڎ{i9g=89JLsvOLRu :\qғяz3ȥ=(Q);H:Қ:zҎ/OJO/=tb9֎gǽ- ӵ)i3=i)O ֗h4Q:惟j@;f('8<iGJ;p)3ZR=@Z9r3Sړc߭.8h'қӇԹQGZ($qH:{Pz^tt>F p/=Q4tI(gJ2{џ΃ȣ4QQӊ94N`Rw#=t ҊJ9ci ֓<֓<sGL@(h8'hh4~4:{RjQ'J_7=iq cƎњ0sINأt8hǡ)=JxF{sjZG8Ȥ4ԝ-~(<cQt9%.('R:;h)OMhRqI9Rg4cނ9/\Rc`t(r9E h=&1JO 11IGJ:F>jN3A8y()G֓ޔbcGCIhhqTcJ掭KR(~rxc@ǥ&;֎cך^4*89z֌{Q9Q@(ȣNhM/~i^AE)O4g^M'cKh&FRvhQI4u8EQIi}=)3J14tFqi21@旨PhzNNxQhh4nh+(=@җGJ @hJxi;QҌi=hhϥiݹF4I4thȣRMg@('qK'z;('cA4ΗI⌜QϽ(<MGLQ84B0r(E'~hz\sq@h hH;vw=s@sG84A8\S)z}(0sFkDataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_75.jpg000066400000000000000000002367401511411446000235670ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?I{h֌}h#'\⎔iA}h/\I@:!ǥ)(QHxb:ڃp8i1(8h􇑁4}(rM09^v(x4w- ӭQ4 0)p=zP4>Ըz;ҏz3A&֝H= (֎1GNvڔ L u#:/ZCt& :G9◷!GCQޏOJ1t9֊\qIz:sF9R΁EqAȥ 擷t4(ZSi(^y4c'њ1д hFixH0sF9zۊ=hGS@G\␌㞴q @3F(LR1Iޏ)ȥǽI)qQۚAJC@4iO4Qސ=4q.Gǥ()3/QGCނFhq8=8tq֐r}?:2A=( z^s@F:PG c\q֎i1Rhz< h9J)(J:RGqGj;恜v掃OJ^(sG4uZNsK)>t9I0iGZ\PM&8 4zR98sGҊq=G40 (=hu1@Gz hhZN@vރsKE&)G|Est֔Q֓8z? ^)9(ցqAZ)G~#ҌPqh!sKE@<(}O=7/aIP8FARg ;AGA74c?:;sځ֌wqvu*\bw-KځG^&q!h4E/jN~&1ߚ:t'z&;яZL֜3AIip);޴QzҎ=? Ioj 1ϵ.;}hۚ1FO'/Jv4Q=I҃ҖF84c'J=);❏JNŽucF(qKIt(ORiz?J.3IJwjCEzu.2sHy9⎴u(qހxsRJ:юqI}9ю:RJLh @8=9p1ޓ4` ZCғj^٤4RQw)u"9cFhuGZ=)F(PFh/Z:Rw8 1(hI2sJ=MyяzKI1z3ڌfrz IޏƎъLRc4pEڔڐ`hcJ\ QIG4R4bE&:9GҊ:dB9})qzNZPE!(whGGP=hh1K1 Q~ʔz(4c`QҌff(=1K(is;A׭;);ނ0=@&8Ҝi: (`p>b LQE.884b@Rw5/)x#QA"Ii{t4c^`u QڏŒ`z1Ҕu:擸ь z =xIz\|c& (4/Ni}9Rw-&9@Q)Hh#ގԠqғ:butǥ'GNΐsA#җ'Q֔})/A4Fici9FA):F(8E'z8sIԒE({\bh4&2iy1AG9)14iԿ^h{fqJ@&=ut#Kg#(bu揨t8GbQޗEqAHE.)ъ_-%'s:w-!jQHG'QLŽv9Iڂ=(@J;sEaAތg搜;sE>w4`whϵ'<њQIځ/8Qh4PEJ(.qқzQsRj9Ri8z1G^wd38K) Q){sM攞8q('wJ\c(ޏ.9'S(7􃠣A(GJP)=y4cF(Rs^:Q}(t u>uq:vQKh#@1JzRR4s㎴&r9izjOizGI֔ c4p:LRsRNsK۠b)p)4S F2-&iGzL掽8)IL\23I|\u4QvR8g.3H84њҁQ!(iri44#dR4QQ~>wR{ьQvKIQKLK@<{H\Gniɤ4} ▐dzQzQIAzIތ'ixh'(.4E&M/N\c'9/j>ђNh@Gj2GzP2yI$g{vQh=(ڎ(Gғ> =ӱIQE>{yi{L()z})23Kޒj\%xց@AIR#'4\控&tr8Fzi“&ך; ^1HE/jLs.;P:ёCҌuzPzPOr(>E`yҔcғ'/Cӽz">zJ^)8J94I֗gץ!AK/}h@GZ\⒗8F9IҎ4qIQߊ^M3Ҕ揥?Z_:4cQJ31&Ԟ (&ր2isH:EKE~qKHzP0E/NzB:INRI\Q81GҗM֗<ҀqIK;R~wڎG^QK)0O?Η҃ r&3KhϽ&h'ޗfҐ) /QA/ RvŽ⓯AFM.yԽ)3֎HqF1ӭ)iNGz3Ҍf/Z8z (9(Gj_JIԘsFrzґC3K:FiG_jLuΌqԘN֎N)Z)y'j=x&)GaLcғ'w)qgJ9{Nh1J: b &2}zN/\R8.hgi"4wnn}(dZ jcJ:QAzP1ǭ!=iG;Q@=i::i3 KތA'֗ўqF8N&RH)sFM'z_Fy&Fr(s izڐ3ӵ744QK:^dAAFx4Qȣ>w dғJ(:PZ=H J?/A4⌏Ɣz}sIsڏZ@F)~hGQ@ނMK3I}@IG|{P1bM-IҖ&xvu&&N}G4b4gA#4u4֐y#8pxKN)Z34.IH=(=At}h4h 9IҏCGKLќE&s/JLN4wAg9^)sڎRsFsA8ڎtFysHc)<ў; R8ifZy#&h (g.M&zI2iG>Z3(PjLO)<(3FhsG֌R'ҁv9'LҟbӥȤ&iO#E.h42})&'GNy'ږԠOƂsޏJ8ќќTdR?ZQ׊ 9>(~dIKFx((@FsGni1gLQj8(ތ\RFqAt=isM!Fp8$cRgZ;)Z@{QڔޛK j3Gj(GJ\Ih(s998Z挊J2sEj)sJ3'nh,tfލ((֗4gրAsރh"(=(h/v֎(QރFAARN1KIF~Rh4GZNg)sI}-R”R3A)GgQ.8GJ2)3.8ڔ4ph硣Z9Թ'(hޓ4q֌=i2=is;Q3GJL ; @N֊ 3GAG֗4~tw4(hFy8429֎c򢗿8yh#ގQ}xR}(sJ~QߚLsGS;PMԿJCKڐ@$ڔsۥփHF@)zsK94KLJy^i!R)xQ)(i)q&{ 9Ƞ4ǽ (;Ҝ3ӽ-'4{ўq\f^fރJ)qK4w#4R(ϵ)֐(4 ^(P8ȣ?A<ъB1N)x}h9zGAzOKӭPFE(J:QڛJsgRⓜIKӥ=ix&xg&I.)8ހyBI{QQ@&xGP8@/3G4 w8I}4>&1ҐKzQzwOK#򥣰Aj9M/j):vzޓzPF()2qJ=i(4(#ҌQ&;Rޚ)~t`@ԧ&RGS\RpE!1jN\ftPx4cLdRQIR!_ŽE.}(qH}4i9):KZ8@9JO $ڀ:E4c3@(isJ1!tgڃP1fsG9RԄwG=hJE&;Ҏj^PsG;ь =(NF1NsF8}(sZdRGQG^ sGjZ;q@zQh?O%/zCF2x:(w"(Z3ڊLbGlhޒ)@J1 &rzQZ(IF8c֌fsH:?ZL:ޓ((={Q4ڌRhQP?J$␁Aڌt掇(E/I4IKsJ:At1qځvg!5.)H#hǽqi3j\dzAPx(@sGzB3Iڗ ӀMz C':t>E Kj1 SNC@ҎhҌ 8<֌})qr)9J4ch'Nۥ&1N!Gj=){PFi1K8c4riqŒcq'.3uKތ(RJ:4 p3R`z@Pr((v#)*3֐)q1h=x4t(!4bc:g4uh}޴d('`0AGCHIߥΎK@Ҁ4uz֌旓H:J3ڎsҔfh8RI:gQQ҂8G"{яJN?^ui?/QF=# =xϸcqޓZ^E'hS{'ړ=控 OJ?旌r)(ZNNiqI<~ts(t@f {9֔zґIR sRSH.8RqGbi:t)hm~4M=⎔RcQӚҌd>蠁JNcҀ:CKK:P"=)hHJ^h) ^``t4Lw? 1F()iڗAip)2Fi}0i@`Rc)u)8K)1/f:R4})8A/zLzڊB)HJjp:zRtzH Ծ)}覟ZQ KޗiH'AGCAƎJoz\ 1g(@b8⎴c1Mq|AFyMsɠP:P{Q4uG@=h1҃)s(dzOP9@Ҕ)3 zPz1I8qF8ƏŒvҁZAK}23Ag(=xHM('8F8F~cңhJ1פ< Rh _  '֖:Qb=8hӽc=p;P>ZP1ҔZN C׊PɤAJ}%;H8n84 _zCҌc9:8.p}h9E(zc-4g4@<4RiKGj#G@=)H1Ih'/ZC=(#8bw4Rg=)sI\qQ{N}(@ 4 }iFy;ӏGlZ:{Rc(&2sKInHy(bsFrHG^)\QAG^)ҌJ2z⃁AN):.O=J_Q@jO8)xE!RdytiG&oZ\twނ(ϵ=OZBry{Qӎ)3r `(s_v{Ҟ})3Q}MNsF02h> @ץ!fցڌ֎iE4w=M/ҎM i:QsҌdqH1KFOqGnQ/R{IKQhGA J(#vAIR<zP:bRi/j^{Pp[){b8&Fix4wӏjoj8=Ҏ8◯88r:`/CKIQ(^b8<#1_74wt)>Ɨ&8⓽;#qiG/jAEff I)x/Ch8)8.A ?(ڗH?J\Rfi 惊Q~4u@^ԝ4`r /Jn>fԧH(Qȥ=F4—&8ntG}/z)0{jisq@hqGPz 3 &9ҎyuAyph(8/F3IE/tI1(&KRQ !4gn0x4v?*4;P&pM&O:4ASj({yTG_.O~y/\Q;!S3IG~h4h)zo֌z/^h<(zu9G>xd^(=(>h:iiⓊvx!=Pp04gfɤg8Gӥ=iQRyInQiq^)3ڊ(J)}ڗ!v( SF(F9(=A\bQJNAAq@t4P{o^ * ^i03AGh=h9=hiIH:\3֓=ԼFh}EGR4z^'K;sKڐP){Lq3KI^GҊ;t9RRFsGKNc< &84gQIߥ/.F(=hyKIZ\ӭc(?Όc(֗&8:T zuҗZ);ޔ}hϽ(GԌъS)33ڔNqҐ4M&0r(Nǥ&}=Qӥv@iG<@f\v9nڌzsA@⎽>Ɠp{qGlGLJs(GZOc7֗NzJ;9rhEzOcGJ;i3K֓8vM.y'cJ4Fhf4{g 9P3Jr{i:G9~4 x=Ec>PGz0s֐IߞE }(sHxi39<3E(984u<LZ3@=i#KM*?ƒ9'n ێ)=Fh=(KuO^iG&8'Q@>Qڀx#4{G4bg4h4`@>Ҍќ:c4Fhx!gF(4sK1ך_2}hAG_ǵ!8?J]&#"Ҏg4zQ).yq֗'"8xQ(8R(-.x(<ҞsK>~s(.=@Q^;Q׭@4Rg/lP birqIӜQdfpqGZZ7 \RRϵ)>JZ8"w8RFqJ|Ru9M/#҂qڏ($z\=)2I(^gBA88&1IN8!i3ށ׊^M!88#'#4dG4◊NZ_ZOJC֗ux=ɠs֝_ʌ3($ 'Q挃Z2s 84;P ;(vqFy4&yzޗ=\h"u<*^) <~cJғ<GғIisHzcSA):ӏjOŠ31F1K8!h(;ъZ1hH>t)qM4('4&) (ҁF;94vڗ8I_JJ_: G~h'tv9Jzw^)=/N/N'F)Ԋ3(ӱbg>b8#?*1AiZp0uhԼbSXp:1IKj@(>ԀsKOjAގRu1Hz=F4ch&})F3HzҨzҞ=9wHGsF8旽'1RsK@{яJ6ގqZB2zRҌ֓-JBrz◯x SJC֔y?J1Ph :0 2xȤ4(R| ( tך;u4c<(EqKFjNRc<ъ1}izqGCҎ1'J:QsGCAҎ:)0RTc#U u4Ҏ€84'z#'—v`с4bupFhǽblRzAKj);c4R1N\wKEJy"Z\qHM/ZP8u \s((=i{I Q`ґiNh8:ʚcK`izz\dRr3Jzn1F=xa(iюi_jR8J: L i? 4c4q⓭dQ=iJ1G'S1F8QZ1{:q֓# 1P8{R֎PG8s"Q4 Jj\ sMڗPG?֔/9!fhp3ښ&JLdE7o4:n֗iNqښ1j:i1ǥ ghH=zҚi4h)xQ҃{P8 ^4ьҎ.1i=yuqGLQۧJAҁG/JOz1K4}>փҔt4~F9zsQҀ}{d~TjNRci_Lzњ3JLR}xcIJgJRNyN9QzQIЌJ^ƒӞ 4PsGE"1v⁜=}&3F0qޓ.9F9cG@z&<KJy^(#h?))@ԴAҔ(>dZ? :A Ri:c4zъv9ҎGNҁ4x(b;Rr 4uR҆SBPG*t2(\iz Ѷ04и<q9 @ 7c3ucZjMc҅Hg;R`Qu\sHSR8Aqh=)3F2}){ҐQϭdE}(bbQ3Ӛ;Qҗ4OR&N(K;`4=8AQN>ȤMPs@i@q֎'tduNP= )ݺK(:r Hx#4;ךsW9h#4_jPݹ4.;jAHTd"CMar R8@=)`q(96iz+&FzR1M^8>߭!C@֓G&1;*niĒG;RqG)8ޏG|c>G{ғKڛތu8J^sHi~ƐQP8;r(3F83KS'{R/8Ԝڌ:֐ Q֎c1Iɣ4)@Ⓨy4 mU(Q&N)AJR6w`6Q0i2GډW>^>8Q<R>Z`^=OijQӁM<{Ҏg`qIJ}9M&r=8vh(@yP4vsڐ{zt> ((4ڐsKϭ'Z)xG'N((z\(Ƞ7ZZCJZJ==)z(!:PsJWIIiG\fZґF1@F)=;RIҝ*Ol==(z\45"zr .{t*A\v4&:ӊgM N1 ₼fP֘ޟ3L ңSRqԉh>ZO# XqLP :Vi8/9 aP8Jg^h ~4w(HփK{uF1Jsڂ;xPNqF9/غRI֕1}0\ / Xҁ8ր)hTxt i^j"vE9T[pZs;jp;Ѓ $峊x wN29):3HEH(#4h=)? 3zьjxz"#cҔh<ғvh=iHⓐ=^iGQQi:F:Qz' р[!斐@xK sG^(4;P:IߏΗ&('sGF8֎`RԝN'-'Nт(֌sE9i;b:8sҒqw߭.8JZ=s֌׽%҃JQQ3KAJO)z_^ L=4\ΎأuZ=Gs4{Z;x⁜9KRxsɠƜ:ҌqNtNN/R3O9:cӞ*@*>Ɵ&W9)?QKCyxnE5Ht")%S @>=*YTqQGt*b9L6iȿ-@yO5_֜QQ"☫\SpOzxMtPN\ҞAg=aL4N(Hõ $~TK'CAGZ9=)q'g#/ގixGN'j0A=y=1}( }(=iZQI}pE!9)O#ҏqG^>N`c_ƓGRs)Gs^}zRtNG& Q^ PhG@җڌ`fsP@sG$Q=:џZZLfӊ\2:GZn8{ѓK@RsKߓI)ڐh9? _N(Fx \⒝ךAך94Q@)qJ9GNq@Fp9A~4u";b۵(QIӯJ\q`S֗.8ӱ/qNSڕT.)UyEHyJҔxB89'۵I)3JVOO&qRM "hbFsY"Ixϵ 8DŽYw jwqK:1ޙ ,g娜aOgUR>6Nbe#4"ӂMBGq֔LCjOZ)8P02)&Mb}pҚ:^:bsAIA~R ^ bގAKԃ}߭/aA8@Aރ:сR`:}hǽ(IZ(NhT=ip)JQ@=}GJ;I^ؤw&=y:4J85\QF@}gҁ9斀i"Riz('4t4⓾G=z֎ 2;ގ٤z_z;P8ix9(NzRR8{S8qJHsNۜOU4Xޤaey>ZdGڙ7jXTO9S){ړwJy\ўƌ: 4dP?R揥tIӵ Qȥސuw|ўԇ۵Z^ @QJOaAtg'?I28(KҁWޗhQӹ98 R;SNONEH)S TNyQFG"ȩNqڥ1j?ڥ1}(Xz Vzh# L5265;J8.G皖>Vajb?w@enjI dDبgP[S!哌*ڞW̝;ԒGsU>~Nڊ4LR Ȩ8"^ 14xMS$sڀxcցt?tc& zy>Ԕcހ{QfqE- ֌{яjLQ(3GQ_zCIץ.h3K4NqGZ\ R ?%(nԘ─(=):C1GS K֓(==h8w v9ցҗSA4Rғ$^3օgގt⎔FF(đҊ3ҔpfҊ\֌wisI3/oZ9#Ԙi={{cގʗ"dQ/֊ HyQSKh8q֌Qh1ԅ@)裮3JS8Tt1<4Մ/qXGB9 棞#!1H|!UeStS.ޟt>^GEs zUZ3S<*榘|9҉9Q3LpsM ǵC"帧jz\NS\_#SW҆}ߥ48sL=xԙhy4}(@/ZLр:Q߭&Hњ>:R֗4wA|~pA~cKWozUR7 Q'-#ҘFǭ5Bj>zGN=8KI@lB4qGgџ֗"q4J3@:RғR"g9њA׵)9dRP!K=( '|\ўzQJBpiAhAbJLFh'QIA8dQߊ9⌜њ;z2E(#( (8#"Pi3ҖҊ\JL⁎h#0E=>֏i9'QuQҎqFs׊3=irM揥)n*^'RIAZ ?4cҎhh$f4RHx4Eߚp▜>S)ˌt3)T8R"}*lr*E\ ^d]ة7\Ԣ<"9TPGH{tp+tSGxQn>^h"|M=)ztjd*c϶js 5;ġӚN^604ؓ8Qi, Q2όjVl U/+qO6⩢)+⠉pzTw Nӊ0A*+oBCNӮSPi֜>1L09cAlBEIөHztLQޗ Cփך;ҏJ:gzBy.r(ȣ)G֓aG~Hiiz&OҎ9P1җ$HT0*PT=Œzu=*vUI`8OH sǖ*Tַf/gwSKfE:x>^8C 5Gp"?UaFǑ/*kW_C;[qӚsĤTd8/qOe;8櫨ĄTtP i$5lS_jWNqUm;R]qLj35>W<՟.0*sYO-Y,hQ⠹J|c1`<©b*87#StU$IAJcrh OQާTc98^*24㍿Dt" "uW2*6GZXcNBx?{sS4_֋R!s֨2t⋴;*+Cv9ޖ-_Z(ΥR#4銫;&qI)M'G'ZpTL2O:b֛Ssғќ $g4{gMu?tv(ғ/F 8{F8u4`Lphȣ4ggҁK“9ޣ)TRd(8I&&9AJZZ1Q^sSEt=izhj8)Oy փF84cNqJIKzRi~pP}h>u(3F>Ҋ(#ғu1K=JR:qIяZ1Ґ)bqrsAqKցP~cZJ^hҎ1.8zRx;g4\db&c֤UfQҥPz Aأz^h0J^:RNyKғ=(g ;ޔ*L#?J;f0)y)P2i:R;4r){P;S׎qR9`fxZSJF 4<$hAy⦎2*Pv29Tm#=Ҏ1RyV:Ss4=~N)@|)ԛsTNh~ԏҼxHe1< O1 ϥ,˕J%#m|i LtS8*̸9f|j{YFۖp: ^ U_֖$L1̆>B*2֡E2QizTrЊJ=)Nv>ʘ:`tw"{RyjP9HHIqJ>9: ޓiy)ғ=11'KHqG'z$@th擭.2)=iFi?SfZCJ39Jڏj6'QӞ@(e'8q֗4q=R^1KIJ3Nc/nz<Kϥ.;;&2=1tڃzQqZ8@JR;ь(#"Ǝ;wqKڌRJozT8LDڞqDcIF8+QRjGzTQ:ӦQ98cI.N)pRHI9?g< TQ~ yDqVwױIdFA5Btuf9541Zć!k8|yI*f3TcOuUNzr9D?C*ǚTi &ӊbuAЊi'йsG~Q(>R`iA=<v9=h>h9Ǝh)9ҎޔyHy8(IxzQњE.i3F9"(?7҂E/~Rg篭&})Rw;sK)@Zxɣ=)it}(PޗJJ\K֐pzqKԃ4dt(zqAQ)pi{s֏J:Q۽1A<ҏւ(@ip3G h4qK/;Z\ޔ zR/4"1ޤQSjtSTx2e#",cnv*&,u/N.:qJTx$`ӎJ98?()bp$c-R?)$qND*'@OR":~uHэUthP$YȦN/iDŽ$5(P2*W'5J0|z+BȦߞsP1e^SReaS}+7?֦b>F5Kp\PB(qG֐?'9:u'֓JZғ03Z^i})zhg4/J^hEΊ^HIZ^)3)<4ߕ.9z;/RbGv撁Ӛ3۽(9Kh)z~44dqJIAH}qEւhHq9 1JxIG\҃ڗ.ri( NsG~;P}=(ZN_J;z5 S !)}(Gz1IK4ړ/QF8GZ9֏j3(ɤ旽sARp@ǥZQH:Qڗ:Qڔg“RsG4tfzьh4JNIKQҔёG.G|RJ=iF惁N=A?}=:Ԁ~T*MR* RTeO*ULsVcLX0j #J R=E銜R'5!"-IT"qH"WbhrqQG$䄑M1I,g#:8^ MUCS8"2j4 A6v81%|T]TlґNp;qT*D1PƞɎ=qzrLrDDj{tGB3ǭF͓ȩN UpzA{7Ṛn*ҙp9c*ԭ v{hoJ~J|UCϑӵdJH,s3ԗ'Rޛt~\b֣^)954 0i3@)旜fJQr*)::Q@)s);P3As8⎞CRҎ 3FhCA9)9=s@9I֗Z;>`Gz? :ўzQތҁ:}iKGzP{wO\RF9 }j3%{g\AEKҌ}GQӶix&sE{RsAFhOz;gR=1H4}Mw⎔(4d OcJ(4Ê4u<ӑHN)*LKx=)gRҫc;Ӈ?# ;@8}*U_U52)PjuZǽNf#V@ZXS'5(#(F꘮i&PvӯW=*O+M}jcSFwt$gJHeC֟;*&Tǔ/5,@-K3qL G9FSUNjܹ"uzUhדQ&WMT7C ʹ R9JlԳVtIKx Uk_ң?6i!9NV^$3UX3R8UaÚs*5883) ~惎i?:^i9^ԝhq'z\bq֐Ӳ:GZSׯgҗ!Zf(<(Gz;Rzߡpyi)sތ2Fh!(8S'\c3N)Oj?IAxgd R9ϵ(;d@❃ ;N;PyڌdPOj9A߅fi@iFNhIx3ڀ}=xR搜R})E >ȣtO Zp4;)IޔsQPx/4dz13;AKI)y2sKрs⓶iA'Z^{Q$AGzS)M'ӥ(#ҔQ(=)@ (sN=j@3tOJZx?Ҧ<ёju=j`vHy"5mVQN*UQx_j`Ԋ)ȜԢ3)1Sڟ*;ԜT'509Tof)b`O^)0ӣ# Ȩrԁq?Zb̞$UU҉qQvGsL>NxpO|RH%RUR9!q)]Ib,ǹb.Z$ǵf'>1T 9]*^FYh֫>lR?xy~n9F"iցR(MlcҔ:Rc: R4rzғ=y848@vpS{8&(9ZCߚ^ԄQ(@hx#tFx>:}x(eFi;c.9(@4wwRj3{PNh1Hx◧JPy=qE(9hsFis&~j^ZN;RrI/qKҗ<إhqA惒2h1)ELSzRNi٧/_jwsNwHJ/AJZ֥Eg5"AS(AR"^=ّڟy9Ha3OH1GM}jgCivKt<;Se$ 娙TwPi&*&#*O4޵ZeKR i)΃H ߜQ> zUx񨮗 p.zz:$&. qoޤϖ}*Do%jI.ڈ~᪲gi /ZbQJNϽ'GJ(4 搞(A9>~^h~q3J(ϭ?ΌqGZ;ѐ):tc4PNzfri<9=(vF~_j3)Oj^)Y8z31F(IJ4xނ}qFs@(h^I&Ԙ@j1Ic49aD2hlCo5]!m1J|OZ Kqj8n#ZG̙???'nP:S8J|NN*c&LAV]Ƅ\&3ʹ5!_ܐGjdOOؓIx%U' ҝȁjJj#rj>Jl?ZDHsh'5Ҏ8-KqF2iZqF:PzQZZOj\P}i2Iw{ f-Q^(ہF{bF};=:P: S!&Q Frh8Q9=(yQ3ӽ'4Ry94j3@)F⎇.{(>"J^sJ'8}Ry(4tR/=Tt8JӚ S$d*ts֧j6QNn7WQבS'RMLWN֤H3ODJ t08jTLJ@6jphҦbBv4sB dD$jb«RS݀ޡL&9*(g43U&O8GUyҺ/Kg҉䪱'GttȪw<4Fa+*n.R}>-Oʨ@yTB!=z⣌?ƫLyNٌVzs`/U\Ӥ b\6:RM=yqҚM4@)3M.yFh GJ>{tJNh)sJ0 ʒ}ƏJ:g'{b? @yPg.zH"QIGR=)Aڊ@;:Z)3Ҕ14f#M'FxAqhGSG^;J^HdI{у1֗dP(Qޏ|4N:ўMzR'~ƃӊ3R~4:: 2qr3vi:zRPJ\p=1Ӹ4HxCjX^68SBW5 d#=jVwmvXGPIQ5i?N|M/~Z͞K1:棹{zp" q˹|'5#? hr$9rV2<[_|UW$I=^:|+*%{RH@/sHRLl(H}x!sGQ֓z^xZLgҗ4gt4sAϥ))(<KҐhϽ)IQPzZ?:'z8(EIހ=4vi3i@Z A8T;:UU =i@:R} iz g<=)} wA@.hpE4}K;߽.=1J1ssKdcJ/zQ҃v1RtQOLy*TSHVUj2HD܏Zdոe{sJT׽LuD QNp{zr}j`g|jR$j@Q})TSdqT~jfl.Iǵ,O4Ztrd FqT|.3Q3Ny*K:Ɲj@FGNOT'ZIpj;> T'R1Y'5,+,7ﱚu>Wgu6PD&?5G6*ǽ.@?|U J篭BhQg49>Ԙ߭/jNu1KIޓ'JQQ֓Qڌ 8zj~tRt4xC- FF(4ڃړ/ybpizy(&&QF{csFI(qH1!=iq)hϷ4zL(IF2sFqך9 qG4c>HO~G4 #Ҏ)qM) JF(1Kw.qIQJE'J\GZ:֗ڎҖJ:Rqс֥jҁKRE(=)^;Ԋ3R {ԸxԉjU^OLzW<*;eTUZ# jvT5:(na0z*DҬp*DBjTNHPn"œJ#T2b32cjj K2M@Bf'ީS;951zىN;T"C~T$88cD Tq 桕 96A#n*SgT32jҫ\c:\LQcfK1GqK׊2})iG'4 r3Nz`b3Ӛ{Pns֤xrz# )( ’4qL3vU#)?vM:QdS88PrzIُZ+;0jsK# UW Lc0~* N[AV}̔$沈ZY1bSItgST\vQ]/Dz*p0Z|ZA:qN`*0xJG=(FR0SXsc 4qڝt4(RcڃR ^98J9E%KNiqIg9G^EG(j;fRbҔ \z)9*;;qBy)zwch#ށۊ1(/SQQRIR)2sF1GQ#)R2i\zQc֊S4i{H:tdZ !>ҝޓj8Ej^Q@=ha^h@SJq2}ǥ;Q/t@=))I=*DR 㚕F*DަC?Jڬ#gU wYPOZ}xqέnjڬ/@1R.I@xPB8NjUBEI֦ z1RFMIS#N N4Ɋs•$㟭9ѶFi=Jm;}P_։+T 'LoZ4n#昉ҪNoƂ>J縷||#GE=1 U @s+:iE= >#Qs9MaV#5rbM>Oª>lR`*zR;zT `ևQLP˜S@?ȣSNA ( GZޥvbьP掦qȣ -.}1HJN`v)WqI^/Ng"OJ=?(EvIގڀ8 ^:v֗}iK)~Zv=I9)sMKZQzS!@4( I^Ըuyi>iO8 wZLZ=x#Z?4c)J=!ɠ8< =:1ҏj)ƐA'zZ?00EqF1GZB8-!Z23~=hJG'Ҍz1HGԼntt1@9@Eؤ~HJ^`Q4c<юs٣֌dg"Gj 8RPGvuM#Gnc#;&jGZP)8( #4҂x '=JGv*x ՜DNjCr>yUijQY;?.* An6㚌@~r)<~4}!=>=қ֗A?“`QڎE/ғ:wԜu =isIQ(3;ѶKCւ03@4g@-ӊLяR=(ԜQ-'#\48.81K]:Ө֓Aϥ&sN}q4t$>ƎgSjB?:Qu=(QAΗRփڔ=9)AF{?^ךN?Z;ɢ)ǯ4w(EJ\});sA֔Q֗Q掦9ZwK?)t4ӭ9zTzӳTJTyjt9:qU>aOUaV#ZEޕ$S֒T U>sM>Z.OT9ȦU6cf_UAlρ[9`ޫN4JΙɔҳ3J$y7p{U?1Zm@UQ\@U@I(aGRtsIԎ(sKZ?L@sIi =(JO!h1F1ߚ\cF3F;Qӊ^NR ӚQI/lQ֓/=h@ɠhM#.>)i3uI?QQdJ}=i1GփaIR(i9ہN{4/NM_Hr)~h~~T izwzsGG|q֎u 4EGaFzKf '&קZzZQʁsJ98g(iܨO"W)R5(sR2gj1:1VQNJ UsJ1R:TTS)J`zT6{TSڤQP~\gz*Byg9,ΘdN.1׊xJ uy^(ߏ b}h@JxGh(IE?/F&?).=:sޗ>/JNqҗ0Fr)?֝h4wr(ڂ99ޒ). @xJx#4:1@c&(p)y4J9N)إI {RҖJQK(?$Zr8zc4Ԣ^sRa(T0ju^SU*c)XF=ErL׽JsSULRT2R"`O dT.ߛK6^: UBޘp׊AP!i˜{ԊI✤ 6GHRjE2׭JJ:*daUlUnaV|v1͌VvzwR(jPjU֤_H9)9ΦR(jE㞼Ԁԙ!G49%敤>֐jpM2|4 0 .xA/9Fs J(ڪUeqP.wTs9PZt$'5rWJ+~4˪,FE| $dstaQ5S9 u/HӥGiza$tPzhi  i9#gק4czQ(9c?7sAKӚ^1MK):p9<{R)TsҎϯҀ{9}ރlQڔ u4ݤvN(<9'=){R /^i Q)ҌKރG4Pzu<KJ; Z:i: c4?J%8RnsN{ў= /~h}h@݊){F R^iA8wRR:SǠR(.GҥR=3R zsR(Rڥ@ON\TV'Nڭ!zQ3ڗG)IqE(Z?ZNpF AGPOdAG8h4PjGҌ李h48hhI^qIڔ~t/ғ\{bKGҔ _Ԥ^4{oZv@j\twt5"*EN2j@szI)SJ3)RSjRA\^qC1Pgޛ& ֢QQJ9<Jqҫ9=iT{ [Cp_?Tr|ɪrC'ɏΪ5[x5*?x& ҔpiF1JHд@S5E(NisC^3{{yNɌM2||C ׊k#@)9'W 9Ӟj.s1Uaaj{RI-@8D2M2N4x5i %ܜR;UbwE4\TIQO/5 ? ,5\i|bwU2OZl1֡$950xTLqI:ߧjC֚:}M'!>fր}) SZAQJ\_ғ)I'gz;掣sHXPy@O< 94ޓ| ^⎂ԇځӚLFsގs= !֗fP0掄&ih$tgE- wM/JCA(RrM/Ps'4Z JOE?J;R ʗgQh{Rtɥ@Kۥ'z;Gҗ8#җRy'<ЦKiFԀNێ"Fr3NOJzTIjpǥLF*¾*XߎzՄV#VNEYNޕ<9qSSwqRS.sdjTS+zTđVCsSL|jHN7T(L#,> ~1HN<?,G4GҌヂ(R3N'vxsJ[`4Mg84㰨/֠3ץ5ɪaȨI99u+j dy@'u8h` :z1M{ "Ӛ8#\{S~dOj J1)qJP1҃S:wӥ(ҝS"i O RGH=Th&OjF<ޑg=5L cjnp4}*9ׯ6GU7%֫>l:iD}* Zyd|S3IXX8<* d?˜:SM}ziM9hl9'JNO>sڐu94.)9zњ:GGlR}(>֌q;ZQGSI:qZ;RҁG=hzP2q^s!4j9#ތs9G=q'=REZ1cK)3(ǩ>v(4lҞ֗qiq(RE. !_AȣQzH9Ζ<㡥R(A=h(8g<▐j`(px&zԠL}xZ(ƌz8@9)—Ӛ<i9sO^ԃSS9H3js<ԫ֤SyYJOzd#S 8S*uSJqSyRON\OqJs\ R*) QnyjRo0Rޔ4zO3MF*zfv}i"T|rr_ E)Pv£fw-&AQG44/L)IqGjnhh3H:4uԀ^Oj3w-A9n(EA4w ccڔG g=iqPS@ Ɨ9M<p$N2 H < 9J@I"QKI\bR3A<}i;Gz9r=0hGQJ)(ڗ.4`1qQޓ({Q@b3ӵgc9QK ю9qFs&9qތRH1G)t4`guPAK(I@K(4`uF=hcKӞvg/A=hnh&9(~`m—ސ㡣J1)qҌ`w`R44@s(R~8}iG&qӥ.Ozd҂OzzXԡ:Tr}qS!9gRaFzTA8CxV^qRȧZI$ԨnjT%Ojzpv?J})'=d44N4oJZ]w441sH21PҚqPj58 *&bEWf;ISJcx<%˜Q;&&H3spxc3#8=i @0i1I#10:`4tQG$Q:QQJ !)@?B;:=\ 1A&9&QfqҎ'/))N 14h'\duc(< }i?R)q&?QjLc4MiO:u◷Z:@rh~T4fy~x3Lx<)qK;wќ)Hɣ'Jz00h#ҌџΌzE.9AzQ>㡠c(~yT,LfRgAގiz= P=3N<)A4z^(HO>3(H8 R` CփҎأQ:.@FM'h-!zJ:p{҂1~tF(GzoCdi csH@^r )N9F:A_ja)=/?F?*8Sp8AF֛)P?Jasޢ/֑ޢz sMs֣v4j6nɦ)gBG4qH i$ئN?g7E4hKN)\qEizR fqށJ8xbN=){fڅ4Z~{S?qSjEo|SRJS| a1OS<04)`村֞N4I Q'BM+HhHhiDEC AN鳭5$[M3ƐƐsґFsF]E4{Tg58 gLp F)Ȩg8)޽֝3Fq)ޕyRKQޝ;SN㊑[ xa+1G5 oC=\ÐjEx| pjA 5 )C4d׊~@l})ލ'=y"n9f6ުi0'uiCjk?lfLi4qQu3`QyHXcITN93@zfJMǡ49M4qIh941挜Rg}h'HN9& rzQA=);xs@(G?JNgLӿ:A@(4uҔr !z>cvҊCF)x⎴h'ӊL=G@ !J4Idh֎sF}h3G R~Tm/ҁҎ@GQ3Q!>Ծ=ȥ(Nh)wjI4)Mwdў:R9h=qH:QJ=z^I4xӥ9u!FhR(LQ-!KxȢ9AK)W2zvh֗9iۏzpn)ws94zS^ZpRzG|Ӳ39>q4O88=piiL=iDqNSNfO3w)1J@sQ:PqڎO9 sH3iAcy8=i:88i Gdu~4g(Iފ0)yfxhZFtNzRhiIޗޔPZP޽UM)|{҆#)҉=4H$&ғie4CI fm曻1M-ZB&zu4xNs(#o<ҍu旷@PQ@@h>zA{Qޗ҃'8tEj0Q@)2=is֓FyG<^٣4g43Ҕ`=hg.M8&N3Nx)A^޽)A҃KNӁ0)&w=)v~)OWzR뎴9ui(/J$ȧ߃ւQzi 7qH[ݳF晻RjfڕsQ#HE7'i $u-qMqiojMJi4I~ǽz i<ⓌqA'7JLގ|HJ:(ڀN2h<8H8gixGiSF8GPx(gMFph'sP:P1i\RgA$y4RZP2(qJ &iqI\cQZO.ASE/^QJ3ih(=9&ҔdR~4j>JQR~4v nsG"(i;QӯJQ:j:J3 }){^g4g4gByy: &E&=3KfE 7KޔdRg v(=A;?.his֔ir=.ir{t7iKtu~hg,iw{ ޗ9)'!l u;ǽ4҃&E޿Z vgh l{ёiA4yIZZ?*9{uis֓94f㎴g"^ԃ!"9u)&vNh&vFA&pMȦ}h;Rn?Z ڙ)r1֓i #:RuZL␚;i:wKR{Q$PrzPzFތzR?=@~FyuJNE恎Z@zҊQޔR֐csK׭.sJOjg92=r( g=F4g~s@>(d{g4A=')II!#.N:wiI=iRi3Z3%!ni9=}0);qJzsM'w=N '?J3Ƞ:8qKփӨGqG=(''gz^ZAy=i:ZZB;=i 8hI4QM ? QIqGqF>g:i:jR:9Fq'.hP=3I2)GLQh'Q8ҖII8$⎣'Z\PZN0h3GR/O hGSҌ`Px.8JN(G_!QGOƀ(#G#4h( (hadqB (9)x3@ 3jZ;⏭/z\֓^QKFy8t4rzҒH(HP@=xJPi)ҔH<<du9sINCJGJiQړԝ)x)ZoC:)#҂rph ?AqGUȠu"hRfKۚJLR)>IJ8z=1GQӚsFp8旯4QzQRu4(>ԙ/zQAQNxihϵ&8\M K;IږN9LfҀ둊^NqL^JJ9R ;4t'z@sKގ:֌s(h(>g#tn(#֌shڌG8KޓRcޔ})M'^RJ1J:(4ސuA(8NҌsH=hAhIj;RIRs)qKiFJ/^')8{R\FIRz( 4Ԫ)ssKӟZg$H@◚Lu4~4ўԸ"sJG9ӎ(͊9&s#iⓊ\ R`tsGs=h#ߥ/Nhԃ.ƚN;qJi9)8h4JqA7Z^qHyAiݨcNwqJFic/ni;Ҏ:Oƌ}ih霊OZZOƁ.3GQǥzҌRf~G4KE 3G(AtIɥ)&:R` ZJ:Ҏ)9)/'j\RRgz 1IqIx'4wAF#'җh#gRJNRǯJJgn{ץ&8F3ڂ(9F:f!8< 4sA(ҁ&I.sGRNPx)@hC@ǵM4sc4"Z@LR) QQGz3u֚E)R@Kj1 bG~sG(t=zh҂1GҐҗZ1&(Ҍ{=h>Œ`}h#ގRb(#LbqGQF is0q@҃ />=iNh⁊1:QihdڌPEi:SsGQKc# 4R8`i)݅%ғ4vGҗ}((Z^)=s`f?J)sG^ )JCZ\g 4G\QNiI%)sGJAKQ҃I8cR3@;1@qF:) G)ғ)S􃯵. >f.6=1sg:3@hGzhi ZSҌdsIޓiMŒb.Nh&ҚNq)8j_.:ANGsP3GN H=9"QF(\b8Z8P9b:ۥ'/S~);Q=(g9#c8GF)N0(E֌(Z:^3֌w4t8u9(#_⎦)Oҁ` LQ}h)s});{ҎF3F9=)s8֏Ɗ;u'QK==:QFޔtI? ZN"%4cZZi֊3A9gw(<_~P1z9tvu9J_JJ:(=qցFGHx>h iJ)E.p(<c4F8ZN:юsQ׃IGNh.(zOF=)HrphhM``'nh(')FsA<>cSIqKޢizIH=}RHFG/ZLfdPF(@}(Q=ZL{уJ4}hssG^3KIhKFx!\(4A9&;Q׽'zp&iGF9@>”(j:vҎ1G~h=@KރA}x:GNR98hJRzR:P(4⎽֓E7s҃z=h {}zRdG9z9▂39A<4p1GQAHsK'=Z_lI4sҔIȥM.hF)9)jJ01EH8sFxHxKڐ});\gLPx47J29FyQAJ2h~4gNJOƁƌIҁ9yh4Lu=i;c4>ޔ{gz0sE!8ԣԠ;gx4 Nh@֔֎&y4 ԣ=0;_΅x8p3H}I4v~c\RzR"ǥ⒊4#'QGj=9◌{֔cM SN)(G4d{J>4s@s֎0}( \P 4 LGjA\cGN)){RIށZf7j84gސҔ=Gz3IqG$Q␏j.ry ƌ f Oҗ>/3J9isHqFzP:c4u׭)&;zQFOjN :c\A8"ʗcގڐ֎(tG#29);4cQzR}h(z'gqF1)IJ9CK#v4Z;uw'~:Ғ=i (>Ԃ:Pq΀(J\c4JiךPhhZ(E&34wdRI)/⓿^h#P9H=9;'ڎy;K&{ @(Gz{ў(is@#>g>'SKqF;Fpz;QF9Ij\qNq֗J9(G=:@A ;^4z=sGs8PyAG֌4gi{PG ?(4 ^1@'^* ?'4Ii9&h֗=ZJQ@(<н})OZLP{H:9=:Piqhi3/z\P}!h(8ǭ&qKy8d}(sH3M)G4qցA=sA&sڃڗ88Ԙ:@Ͻ4ցH#!RO_Z1Ih4u#p(9日&xM(py(awwGNq֐җi3J21Z2AޜzQߟ(Qޔi(((ӥ.0'4җbqpsJMF):R@O9Fix(9(&J;}E.qHO֎}c?D=?Z>ԧ9=i{J@iFM}:RcfP 'j\;qG8:R'n(=:QQF=y(<ўd҃HhGj1ihA=(4P3G=(J IKzL{S'֎qI/Z==(zx" /G8 `w9ER9RN(Fx&N)GJ:E NjLh&9)A>}MSAڏZ?^:Q!QރSIڎPzsBQqFxh<}iGQގsI\c/x4<8M/N(ۭ(#Lqiq҃RM;/8&qQNG~ԝtKI׵/Sғ QE i N):ȣ'?&}:Z>;փAL2 2z҃Fi:v9Gl-z `:H:u=RgP){M#v)3G=F4(ϭ(} / S8'/(ց@9Ҁ}(4}sKCҌ/^sE E9GQ֗zqIރix;Q{8>҂ryZ\њPr(2{HIڜ:PhϦ(R~4fh{Qړ>fZ8wK҂xE!ڜ9x#I撁)Gi3G֔p)>):<Z"g'uI9⎃K499ӽ(u)KsGqOJPM!h3Frh-'nMJ:wFGZۭ/8h=:q@⎔M)sȤ.1GNx#JL?MFi?QZ@q&iG=qH)M((9? J\i9Jڌ{8QQ('" 4 :K`Pz gsN'>c5(ȣsҌH=֐ڔgQނ):҃j3ގ܎h)A8uKڏLvgҁ֎)LRQh=Eh);:8+4qP9d@hM掴R:> :QGz8PiA(E} J^~wץ@GJ>g3A<ցȣhB ~g" h R~Tg֐MJ;Ri zLGLcސA(B߅sFphϥw:L}:^4 RF)IG(=NsGݎ<њ '< 8ϽiA'R:R^- ѐ9Bү֗Ssڗ#dg9g"21Fp=(!)A}PZ^ԄtnyIփU(qKIzR1FqGZJ;fFhgqAFqFy֓9=)E&h'ހH=E=JGsҔbx4{bҐ)4ZZN 1KEց֌G_Q'x=(ZQڔQQߥ!;P1FN1ڏƎzRA֓<z:ԔRu=4=:Rs49GJLpiO43Fj;P8iqϭ=8^8!Ԡޓ=zQ;(t)Iɣ9(IKރ׊n(4:њvO  =.q֊3Œ=h_Z#ΓR'4D-'|ҜIFiF֎i88G"IڝIGhw<3zRwGojN;Rހx$ѐzR4ަ\{ӜGZށ掾ugi}$)Lў{Rw4t`;Q/H};RGJA֗=3@N}IdQh)sQ4$19EΎu<ޗړ<ך)9.=h4vdiA8q֓)ҎhO.xhZ^) (G8>ғs4vǭږҊ>ڐKӵ&;RhAQގ4)3p:}@gPiz)ϵ{9=xΔ{4z_z\RIE!׭)NRyQރ@8POFqG> vr=)GސQ׵x?'vt \~t'@sIR'z^ސg?z1ւ(N:掝zҎ' g/~h&H}ihf.qIтRsނ8sIN&GҐ_ƃQ␓^- =hEM9){P@i=zqNg掃(P:h#LqJzt<(4Q֌hƗҐxlҁ^h揥.8IJ@)vF9K\ Nu E.) (>)'NuiqI߁A'ҏƎ(cu=)?Rh>:3J1KߑF8֔~t=:g=A;fьZi:RQ)3ڗ=(8擒ii?/"i=ZQҊR8v旞=)9Pr}8cGZS֏G=hIފ\GzNqF3ޏoJSQnh 9)G=O?-J9tr:Qގc"hKۊo^iN@jAK@z:1GRⓌ c&@"Rc(? &(#E.)184.>i6v9v>K&){PyhgwzQ֛J;\sG(E(<ZNG:Qx`F3F)=i{hȣ=sP84`y4>Z=)I{Q~4ڗ$g^:QAJ:ю>Z;擭Ni{bF8Q?J^)>:ripA&2=FxR4ъ1F 8w=F?*CҁGSZ39s4^Ir(8!ɥj0:QaJ}(4(瑚@=P ֌QE@sAvfj qK֐Z1Ej" ds.8hhbRPx>“rh:PA&9qG|QIsGR֔tMzpzQӊ1)pzRE/'3JOJ1ސɣG4Fq@'bERci~J9(JNԼt4Qތ ^v4gsKRc9:R9t\Z"zRyڂ8 LQB14 ;sKN$ҒJC׊\{ӊO_J;Q4Z\sџ^zPIȥIΔP:Ҟr)LG=hlRb=4ugҎ-;Hyqh3I89RQi~ygjN?u%'l(=:ӺRFq@F(4\`f/Mp)M&=)qъL143ړZqcr))E}#j4c#^})1h<ҜIҊ0O΂{I)))y);Nv9'^qJzxHiquuǥzusI])sG\?z;#4Ru<)ў)0z*R?O—jriqG1Ҍ=r=i#4gRR=h;(<#t4Kۭ҃&)h8P=0zKhy)\@ʌ4c.aJIGj:wQӊCǭ@ҏJp9E(<4QR'4Kځϥ'/j=9gqIɥ RcRd:s@r9@Gz2M&=ANF=iqs@}h'_”N@>wGLu4cџj){FҐG֊=tONQR M SLRځ&ERAAמc=\})=9ڌQځӒ({1/jZ3Z<Ⓛ(p =hgix4RdK):)h494/=(LsKH8=sI׊\ 8GKG~qK{QPGz\SrzKڏz&ւ999 f(PpM'җJNsGAKLJ:v8w/~)F;0:sHOdP4uuўxu:wIt;){c@F@8w(KڌJ::{:QҌM8-(HGsK AGAI׌SHzʗN??4FzQ֌q@;P:QۥGz03֎izRt4<(#=GCҊN(2i3G^~I;qJyh"Qt)'lҞȤ=iyN{Ҟ;\Q8qI1ɥc)ZR(zLKRc'^Ԝ. F8pE\ cҐRzJ0hh/^h9982qGz(9ڌtyG~c#Qi9"MgQiN:vizH(ތRрNh _ri:ь^Q]GaGCGKړ!"NzG/f)3KsG~q\QсR'~\sIGzfZ3B>Q4)sAKF8GpqAIKGQϨҌft@up(0(ix >`$8M/ǥ={(1Qu)E&G#F;{QF3֔;1;){g=qGCE&AڔE'NbʌJp4g.x9)<yJF9MJNEz@ /~/Nh<E 8lc; 0IsJ9ⓀqK:uџʗҎ`x֏Ǝ(F:QlP)F2hӨR)23 _n(:@~Z (E ?1BZRyF)@4Q=i: QG^zP=1.8'ғޖQJ8=hh);KsFIG~ r}issMA4IpFzP0sNZv) юhI2(҂j0q_DataLab-1.0.2/datalab/data/tutorials/laser_beam/TEM00_z_80.jpg000066400000000000000000002351201511411446000235520ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 @ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz? ҁIӿ>ԤZAKG~sH[j`֊CgҎz@xZQJM LdzԠK:rh)238yZOK((4u4)zuP99uJ:QCKN4Q&_JNZ^b篵qFɥwq@=M <҃ތic4Qޔ}QSE!<`h:ڎ8'Z\ OzɥLќu'.x<($gL4@4g/nx4w GSj;uE"=('Hx:8J\~4vA#җ=-(=zQZJizqbKތ֏u\vvqڔ $@)84J8{qFy}&{PN)G&)ix23RO4{=K=({сKz1֎sFh?ZQIA9>bJAHwAI?BhSJG=h(zQ"ӵJRxoM/Q31H}J1Ҋ:QI{iNhb=i8gSӊAK3Gȥt@#q wў(qGёրyQON/j^AuJAK׵%{t94Z:{PyڎZ^ڐjPr1F*94r9K4Aӿ&yIPO)On(EI jZSc4RҏqKւ:H8(⎿Z: 3j3`>ch@o_F t=(wp(j? (Qړޒ.yKHG`(' Kh(=(ђ"ڐp)n)sEN)}M&{RҔvO?JJ 4g: ;Ov(=MAEzL FE~MiO^i3(▐x'.r):1@4OjJ3ڔ٦Rc֔r(zSIӊSҐR:QΌ⎃M)4bGP:c4}gLv'NԽZ4Z3'J^ړfAu. xA&A<ɠ PM&hHz 34Izȣ?-.x<^shQh94c4i3;@4Z94gFq!piA<84 >b&}iEd1R3 Γq@zNOZ\֎hg4RK֓y\v~:^xsF9L$uiG?z(F(JxhP:ѓ2h< Z搞hi\ӽh'IƎg)I@ȣZLџZ\I'K(>gғM)ǑךAA84(Q(>L@KIz֌GzZ;IJ_ŒKۭ3HO=(.EEdPzKځғ9FyRn4M}iA#)zf)sQ8 @Թ=h揥7Qރ.iځGZ(8G8P Ppttƌ=蠞((hɤ:q)@4 Zo_jSځZ .xǭ&@cfFqN9@&QҌRRtuњ3H94v=收)<bqFh:QLFq/J3KIҊ3Fh)3J)8Rg43K1֐ўi{P&!8@&yFhPp .p9GcH:R'4Q=(֎v=(h8c>(s(Z^w.h:v^y4ΗCvѓz(IRdiw H;Qҗޓn)x!@=h<<K(ǽhǭfzRIi&x(:gA8qA):ӻR 8=AqڂZ_jN?t;KC .s@<fKIR~4)p1'N 4w'~dփH:Ҟzў(ڊ4`Q(84QJ;ўhfS8ԽҌN٥GJ:LvRIzQڗ4Ύ`:ҌzPO@=LR;P4c tjL;=)xz028=(RץG_}h=i4>Rސu/JP:&8%!/u8)18(AF9>c4lQ 3Fy=Zh;fcZ;qIG@n1AzZLwy4tRڃ({@ҚA⎴~tŽ(=Gz_Ɠ4g!h4MQ@h i8c:уKq@'4gR:1I(j0?y4c<8&zяzR8&3ڌvu'>ԸG^w~T dюԤg)q􇧥zPr(>H=)Iix4AF)hJhzbQלPG QQG~AGCEr1F8Gh(v 4Z8 b(&)OJ@J:QJ9/c=4\ю):RS{Q?ƃz14I яJ1(98)tii1K}h=(sK :B{sF=MQF9 @0I&)OJNh`wqKs&; GQ:c4~"{F:QK;PxFi旞41(M9(֗3A9KJ1E%.)iqGzNiWIJGz1ǵsHG4:QKIߚ:Gz1GQF_&4tP? 0;ސrih?J::SKH:1F9u(搎(h"sK:Ҁ=(;F1j(h4oz1‚)h`Qؤj1K@1GAGCF:t9cރzR:9QF):)q۵|s'Qӽ(&2pi@4 6Gz14{RIނ;4Qւb)yqҌ`EuHH{P4(\ۥ!Qփtǥ7P}ю<ъ.8@4}iycҔqGj;b֊;Rszөր3J(4ך: Q(?;QKRwz_ÚCӎ ZC/zQO4҂1Gҁ((F1ґ)1@4b1E(1ғ6i)4shǶs@b8<Jqސ(fzxRF;@9(=8AJ91)y!);M/ZLbxP4c4HFsAǽ&01֔QxKE󣿵)0s֔uϵQJ);sK'J:c4`RJP:R1ϵɤsɣs(RcӥEq'|PzFy((S⎦ۜc m(ihҌNn0O4 IcҌ((9ԟʗz*?Z_zf{QG\{z=;PGwtyzGl(QNhRsRR " ^i`Qo"8'ҌMҗړ4sҐR4 )h4ҞGޔ 9H" /& 'NFEs;4qhi9=1GsإF:LqK4wRtJqqAƎԃތR ԘރғLz`cfMh֌d@@J3IA֌t&0=h)1GJ_QށJ9S&yR7/KGz#4i2r2:ҞO4p2zۧ4tR(I@ttq(Qރڊ^i8/(})x4R/nM 攎h'cA< 3Ehx)G\q:i9/:?Z;ڔ);Sҟ~r}(z? CzQ? >Jq֓#9֔M=zQFhh>;N;0M/z.Ni0(瞔g'QIJE!?g”u8Z^ŒsNhbs0 z NR)9p1Gր0sAɣ4Pzu'QKڐRsI׽E ǥ8 :;Pi3E7v /NcڃRc֗砥ޓ/j19攏ZNqG&sG|QKڌԀ` /lLqG@)~sJN{\`qIh#is)2=iq}p1F=*9F(ƏF:Q=qъ: 0hvZ=(z3xsG R'(;R/&sǥ!9KFxhz (Py`4cgF0:tIb`(׵%.9RZ^=IKӌRLPBdRh8)vSF!K(p(QPE RzڎssAǵ!s4g/^r9'f=Ԙ^cڐugsAZ)zKHhu9){RR$G4}(?_z^٤!Q=)zsڎzN)zP1G4u}) /Fxzj94)9ҎG4q@q) >IJr:P=(4ަAF8');ޔ:сIJ^ʎFNxzўg)i;Qۭ(PE8RL~TtE fA()Cqғ8(<ҟi4J;Q:(Z=RqH8)='EJ8:=E'\QA=h)=N;RgR8pF{ьf.TJ1x'n(A:Py>$sGqGќRQHzӳ3HZQz҂NyRRP84NQQ~Ɗ(|QרcG4h=Eގh9R): \qHN(ڏJLQ4sv 'P:ڃփqڗR`G)⛃ڗ1^:RZR})>f<GF=^:wҗ!{SGƓKO.y◵4iy(֌v=h'wIt"{юh)AH)H>4Ԕvh=h#j\qAZ?):w@#9&xKsNzN3Ҏ (Qhsցz'.8CG9A?CKփ@'Hi@zA4wJNJ;RcKR R qG&uRu0R `{1HH=p=9})? ^Qڎ(NMGҊ:h@P1֓” N(@KG.SGQhȤ!4uZG^ii8ڌ}iN)pzwԹ$JzҐ@ƀ})1֌zҎ}i(_lQJ1֎آ}hKސʂrzGN)ڂy3֌QўqGlQ0(Pyc3Q9t#'oz^i2x&J 4wu=2h4uRъLRC4Z3((4uKJA84ҀGJ\R Ҋ(8:Rޗڗ&y'(IΔLdҁI߭.yR):֓N8#8␊3Ҏ)xuJRpA &1J=$uT=Z 4vP HI()sOʓt LgKI@/sF@ގ qE/ZCڊ='*;zup:qAGJ8=1FE.qNv;JL旂9JLQҌ Prgi iAJ4ޏ^)s4.qLc^bԜ:zQSi(p(cBғޒF9&ZSRJN1K(Z旵'n^~yi9;RIj^~4q)I}yԘ?;r)3;ۭp8PK E(4Q"M)4U>gC(֌N{tyhϹZ:4}iJ4rAΎGn (P(9g@4g3G8IhQd~w@)2ihڎx=3ў)x$҃ǥ'֔`tK8֌BzP*^RƌsړZZN2)O\fSL L^)y4fԼ(ݎԹx'RvN MiGOj3GqHIڐ)EⓩN}iqޔs)sHz\QQך?.xis҃׊AyN4y()OZN .9I=i3N#H}(43G&xcRh4K8⁜sIRb}&I=(#ҀqJ>c@ؠ)Eh4<ǭztȣn(jSx}x'!\=hѓJ !ITzb)1JzQIȥ#^9QHhAK3G"Ҏ(1GOz9&1sH=isZ>`QҔӭ'4qHRd8JS)3(QځhZ:Qڎ{P92iqIzRҎߍc(ޏ\Pqg'?ǥ (9ϥ&x>{R*^Kɤ4PiN4h^ 4w&h=)hҊ8ϸGJ2hs)IEў4?>gJq@HzRNJ\QJy$P9cӽbyhi)x& S-8IKK%AzғZ@N({ўM)8QfLiII(4;8shGFx)8bK֓isI)GLPhI)@s(h /jNQO(挊LJ.zQG֎ҎhgJ>'4ɥH}:QI)@$p)1\P)s4JQ'Nq@g<њ0;RsJMM(h^Nriz?N&F(J3KE&q((G@sG(ȥt2ph;Rg@#ўz 4"u (qGZ:QisH{g_I( /zў(A&~rhZq@ pGZLc8R{R{9hJ:挊 L4dtޗi9FsI;v@hZ3GZLR㑊0 'җCqE.)9qEJ3ރQh? JȤǥ( BQC@4R9/F;P3ޏނ88IޏŒ`qGJ=0(G4i;RKޛ4#_n(PN)/Z1J=ߕ=:QFi9;RbAޖӭ=i iG4 1A:Pѱ'N;P(9=) ^@iyLzҌ`GOƔJLߊ_xGJ:!?7t.h"E4g;xRq/nP){fzRKG~hOJHzRwǵ4@sQȢ;⓵.ig$QHz4EGJ4g4sAhM})O?ZN`sGQG_.)4gQɤ'ڌq%.9F9<RR~zQފ2sғ.;QڌP8uIKۥ9zbR=xϥ)?Γ8ғ4Qڀ?ZJ^b/A))NA4R;QGZ(iqi)GRڌS9c;ubSA' i1pqKSx 9=4:ړ"RzR==hGM)q4ci[&8'zu&8Kӥ(H84Z3)9EF(.=(ǭ/lc1J:R`c&qJG)^iOzOKގCށ)9.1JzsHAEHF)};rh< QȠhr(=hQރZ=(=1F3ip3!4`PM(AfP(E֖{sR=iAr(9(cJ1uq=2(sJ(h9jN{PAcZPNih֏ƌd惚1ڐz9Q()1A~TҌr)H Ebb@GC):v4b&1GN=hG4sF0rhϭ7#8s`Fy1H)Nr(}3FwF0zPqzNڎ Rɣ#`\Rz\Q~vMJ1@Ji^M(ё98u/擽h';})Ebw=iN?Z时)!ǥ(RsjAKZ;sҀA(?QAZL~T843jZLv< 1@Q1@sj14cERsPsIzw%94cQɠ u%ǵC⎴1F;Lwۭ-4cNizRvhfӀ)zqIޔ89v"(|ь"QvRSzQׁGGn(ǭP3\40) -i:tJ9F;֔(8Q@@84QҐтEQߥ)RŽg_ZiI30z<u R9F1L{ҁAҗ9擜ӱIڊ( E—'jJG4IڌqF9JonuR{bQi{RG~4ERE!izz;t:tjA(ZSF1֓ ڊ\ 'CGOzFiqpiؤ &)Oj;早(4`gނ(j:R=jR0>@JCڗ8'n:@t\cAQZ;M{wi} fhJ0I)PzR'z Lڗ :L~Tj^A`Rz1J}i(QKRR8(Rc#3`RqIhڂy)J9ҎF1֓4{Rx KG1EZ1ڎғ8xGzCKu8NfM4~h_—HIޗf*1sF I4h9KqA ht4qь4K:Q)1Ҍzc4RzsN!B ^ŒQߵzRZ\g&|;wG4w񥢗>#bǽɥjLgvJ=h y1HGZ9H9{֣t("P89fQJ4(f#i/旨HZ:uڙӵchI^Np(HM&:ӏNi0(:c旂)9֗-'NإjC;KI^zdqGҌQǭ 4~h R;zR?7Aގ(ޏOZɠph#(v'3G4?)qF=(⓽.rHsAF}:QR=&=:j;)h )sH:Rރ4}h9'^bnh dsG~4p )xc#/! K7NE.QIzӻIޓ<ғ:Lڗ6RsPxQF})1G8@R^=(=(P(iN'^ؠ`f) A~(>3IQE)):sA4xǽQҗJ2M  h9G&=G={P)?_AMb294G)'@4.GqP dviGɣQސsJ}{sK(.H qE9>ǚN֔ސ4*Psғ$)G!'=)xKIУQӊ;41ހy ڗQ^ʒFqGZ;(Q3KRw JҎ~t uGj1Ec:bbw ^`c&3F0h<`QރK AӊޗސqKI1J\J2(ʌH::u3q1AKQ4ZK4 .; EGAAz)š dc&3HN:t49!A=ǯZLwg3H}AF(fi*;ތqGNPzzQKH?ɠ(IKhg?ZP3(#lfJ=F? 9J3/lRzzREҞ)(Ҏ:┊:QP}0iAҔb:~4`u)&NsE(O)Z\zqHzƗ4{@F2:Q(#^QHO((^Z3Gnh});N;?┌p(9FsG)1G >ԽG&Sh}iGJJ)q#RIך_nJ\ZLsւ8bx4 cQN8( {&gM#{f)NOJ^ғ'i{}iAZCzsh=(A\b;JzGNhK3'^i1JsK!z4Δ= /$fvr(4`sIt9qH:G8┌b3HE(HzQKޏZLcތ fR4惞sGhqA1gޗ1FlQggK=)"擜֗ZR =(ъPx(qE'NisȠ9惏ҌspisA揭qJ89QҊ3K4Iҗzќ;RҎI@buJҎif&0sp@%;)$ҜQPҐ/&R3HzRHyq#/NԇZJJ;?*3N1I 4qzC4qJ9)OsA1I4Gp>F/4iQ)Z==h}i@yH0)ߥ ;?Z!9;8ϭ.1ސsh uCKאhzv9gy:Z@Niz:t4c';qQ4ӿ֏Ɠ#8qJOLR`Pi3NL=8>{Py?Җ gҎ3RIOjS&)}JAɥEΗwhAA?izJtdRnR(hϵ.i89\A@ԹiZ3/ndh=:Q4J(iAI(=y@4dGNsKsA=z({@4f>ԴKr}FqFp(:RgRFN3KHq$=}iA^(ɣRwџZL^uqAhhGj8G|i(ɣ&O=)zQhhϥ8ғ.hsRpO"}ŽH;ҁP(y4q;AFpzsIҌQ(&h9ށ g&yE&{b=hR)Z?!'/^FF}y⁃Ivvڐ?֌.xɣތN)1(ǭ 89A4gqj\N(束ʚiAQg4-(IFs/L⏭)^isA4T(.iH2;QҌ-G/;3;40 pisBphzP8K)qc<(#g=i})4tJ1֚G)@>ޔ RcL}hIrEz Ҍ`fӚB;)( =($>)=Ғ})4h&y'|3ހyڌA旊3j^sHx@)3J94z4`R4g4} tQIiIhPO/ &I)3\H3׿/l;R.#Ҍwis{'44})Og/揥c/aIz9Z3ޔ!=ցIJM)cI.y~"4uhN(:ZP3N(J=)@)ޔ`NUF(AK~"&y( AGϭ 883={ҜM43ӵS{9q)c2( &31S~=)Fi`ќd4 u?ΐΎ4c3F=i Q)ihhGA@s/4)hGj_jCȠg߭ #ҖI?:R)Z : 2{Mt4xt9i:~&F){RA4֎cړF0xi~h')z)O#'N̎iOR}E1KIIߑ)H(QKiGQHs`Q׊LQZ^=hrsJ &=GRwJP=hZLq99})qw=(4tP(=җ`ڊ{!Kۡ GJ( 4z t)O+QI1)qޗ{QGғ)> :zy8I(֐;:tGCI@4pi{R}(=}֗'~hdv ӭ掴I>(=isGF3Ew=)i0=(h4qŒ`f&9z^1H/^*QJ(K=)qJ8j\gҜ8=z p_j)p)@Jp]3AS;Bv ( R8ހ0zQ8i6JSnhe⛳"xbMqH)94¼}MǵRu))IN7I(ӊSG03ך2MOҎsQR`zQ1J3ސsQގ*AG|֐ސ1hA>Խ) E%(=K);Rsږi ;sHO3@iM1;={(:R PG9IOJ>hǡsIN3F8RI=ҔiACK!F)49&r:RuJ~R`)_z(F3ށӓKcJ>Z0(x#Q7z \ Qh(>gwixsIإtIT>c;^p0E.)Ì \sx1J:S{ӂE*i;hi);f}xZ]P#Ҕ@R@#4fN`jjCuH{J#cT7JSFG8*2sLe␎9x*iB0)if4cwZB(SEqHz\qZLqA:h##ʓgu=AIߚSQcjLWⓒ?c;юhJ6M3֎3IR3HNcz1IAF(lR( Z1&1ך0?84wޗ}{Qz\QRc1AF(OCޗ'~)“G֓> &qJG4cg<ѝ)(=^x/JG(g~`^hҀ:Ҏ9ڎ(sK҃RƎRH:RsAg JJ RZ/@QB9J1K .8^h:ґNucҜ&t)ycO׭(O\\s~3RvlqҝN 6!LJS"JBH1Qnͼ w4ݾ/ cqҔ}gzx)҂4 \iRZ6ʙO+yaF ޔ@ czP):sA 4zJ4t!RPzр:Rb==h9GN(GjS֐Q))8◌QP0E4<:h QP1(ip1I):R)q4K:Ѵt:ьxRB3F(8J_!8bo|=h# \dw}{Qi@.E!"H4G9u6Gz1KF;Rb(^E(ROJ9ڌb NZ:KLP-i:掝Fb=(=)1J1I'-iF10E(Rw4ǩ(./'.pӀoΝ*bOjpZvÜOH'Rl4@"x\Rޜ"))Bl 2(曳"#hh:SgFT~P(d=7f 5ӟ.1cIja0P=E9Jh^sMaduqI=iE c4y qI :v(4;qH8ҍZ:q@ i0E))4s\9J\RE'z^;RRb\{QҀ)8)HGcF:R'j1Ki=('ڀ8Rv.(=("u 9qE!QRcH߽`Ҍ')N(TE)ps1!cKNԿM49t Ru84{ 1) (j^z3җdfF9x`◷'~izF0i;rF)zc) 119(@.= \w Z@9c#IAQށK1APz1QP";jv9DZsNۓi ֞zx\z=b8篩펴+$gvÃҞ#=zѳ9S4=zR iN8/"S)T;z8=)?˓fߚ#FzR:z}i')8ǑQ#4"LSvz9ȠHWZh# p{P>4`y4`Cڛ9hƚ:Gv1L'8;uG|fgqH)9<㹥y&8(9FzROю)hi}i~Rr{tb;ҜRZ9b{я^~TdҌ(ǵN 8( (4 Rg#=(~JQ #8h4Ԙ\P:2?:\wF)i;ԓMhR*Z8@◩!I:Q~4xIKӥ4QIzRMp:1uȥO4sFM!< \ .sKi(4h< B9cbߥ))G(ґhK-/|SZU1ҟSo8ޔ8 ^}{R}*Epy }jMl r5 Ly6EXPc`S 8FWqJ#8)9Уu5@MsQF2qQA\31LqL֚ٓWZa\A ^E4aȦjkjCIi0ACޛx'Hx<ڎJ8uH=h#'4>=(>h@s֗n&M.iqRu84dG\ќu=J:I^3փRQhc);.1) =1KZ #4}((Gt4wIsK 犏\t P8IGJ9zN/zL:{IJNi?\ۭ&8ȣ34dRZ:y(KfIׯZ_^h'hR;Q(ix f84Rdtr;}@ނ8rhC^d 旌{:Ӱ:1֝֔)p=)ÜS81O8SSzryT3xN9'"!֜?o=Hu#(H)T`末;o=hX(1ցIz i'#ڑ  ޚќb4Z`Lk9q*28a59L8i3HG7N33HFi 4ҌpE7 GϽ;֔8=)dF /zC?*zN:QH)4IP;hGҎFhQǽh uJJPE⎸P9laN3pph:^t/z4 xE'guf3Gn>F9ڌi{dt?'JQI߭1Cv*1K 8\u'wҊ1A>cޗ421҃Rdڗ&qۓKӚ\Rs R)J}vF1F==hGz&:AiE'zNz3KсGZ^i(RM&*1G@4QӟNԘւx?-KGn.њ}8iqJ1N)Bҁ;nO_< p"x\Ԫ;ujMRp3RȩzjEJ8iAB S\ x#'O zwy?_zw0hg4#J"8)=*3rSJ)JGtJGcMXm8ɣlcHc8-Q֘񝹨gc=j*6\zL1"W#i SsMac֛73oJ^07c4"JGR٤֚zғJ=MP;QN{Q8ǭJf= J1Ǹ9'L p):cp9zR}F);'#8&1ށڐ`xO=()H1z ;4Z^ICKތ{?:Z\}(ʁҎJ1iN/SHFi{Qڔ Lt?J\{QI_CAhړJqQȤ(@h'JxK(⎴cPzQۜb8; A- Z\q\)x;fҔ)◽ԽGփRuҞh)1QF8&:sN)G4QGjLdbHxt<(lQށIzg83֐g91I^Rd>4z4bIQQ@E< ps(A .r9RI^r>sq(9(qH:֗:~4`)t4oǽ(;Ҏ֤^Hϵ=@vJ:(FhKh=){RRs ֐()x:RiH1{ҎZLt4 1i{PQ iiqZN{RQG_4>yLd 4=h^h9i:RTrzҌdu'%g?Z1Ӻv Nh?߃GFsGjf(i3G=PIJ49zQғ=)x(/q@4qIg\TRf}9h'\J94qKҔ`w)zҟ084|^}UNRJ8R*U#*)#Ԫ NALT8ewArE ^zS389;#:Tc4Ҁ8HޔGPh3AKѩ\qHzRdP(ϵQJ^~3#/Ҍ3AhR~iE!4uQ0GzRgw曑\GZ u 3MG^4RO=ixϥ&~Z c .hƖ9@c8 RKzs <iQTj@#HIRS* T=je@:ՄJvd(8xe@t T2'^ L5F♎j7zi3i 旷'FgzL:sHI8(֗Iޗ9(tv)┟AFqHzRgMh@"@ӭ&x/j u'sIQ׃ /zzGZ3IӂE99ڛ籣'ǭA:ӱIڗFi:{R((sRcM/ڏ΂~1֗ڌ<(rhO|ފҗ9SO_nizvtizh94җ4硥(ssA4((t‼4x3N})å8 sxN^84zH}E3R3S(H& N1S( S~u*2&?V,zTaSgdPcH@RԹ h4g:Qu :HH(4Z\h,{MsF^܊AK֎ԙGzNԽis⁜ ;q@=3A@KڌBjSHNhtrGlQ/=$zsJ>(qKҖۥ88sN(Nǥ8i1i ٧9#ڤjUjeAMN2.Nje81*p*kV#Nj'Joz-8.}j@O}:R NN qJS~1^zR\b1MzwUg!I )9viw G֦1~M<5YgAf\=*:8j**'@*l6*2)a4 i3z_Τ@OƧQ3S35:qVPdgb1V2X@3VU@1R5 \x\usRZxN21R'ԊӂZ9WqN^ߊxGJx ҚJWTo?ƘSr*-!c?4:F4NHzьsG֐)3JM4j\zP<\RvGCAG&8R}x&}(H Ct=(#N)ъ\sҌڌQ({Qlьctނj0hPc}G4QAIzR0iy)@^hzp</QP:=I"S{ԀdiRGRjUgJs'NUuǑҧHՄBy*㊝Z y@IR(U#ԪH:ԃ1O;ni^JvN ӥ!Z_(y}MHb$S6L+L )Ҙ~qktFM19Ff#1sQ9ecΫ5QԂpTҪ{Oj#5XH:T8 ګ#SXd:cqڣ#=iyiTdwAP)3HAⓐqAcڀ2)jL`gcQ@bqcۃIۥ(>_“{bfG ҜG8h EJqF1ғGɥGGAҏu֌{RdԴ(t⒊\PyGқH@ K(AZ@ў)z=3AG֓RAN )=iFi9Kxt=/sG Gz\f3;QQsE(▓RPsڌz(2:iOJ\qޓZ\i@Z@9ӱ^( @┌P41N R}j\p ^=A¥U=s֧^LN=zU5ib5*ij4P*P0\S~\ԡ8O ޤۑOU=JҤQH3Ԋ2iO N$r:Nb{ѷ=:Rm1Mǵ4Y<]FbFpF*32:Q'Qc/ j#ڣcM'Q#UVP#㸨ܜgP E" V ZD?C ™Lc.G YI}i4I) &h){dP{N8=izWO*@ JvO5(/Nԡ JTȾ0^LU^=XN1/Z*gb< T㿥JJ&jT*U_JWzxOjF1ӚGڞԁ=i0{R>Zvi)JAi@{RSڗq"5IqH޽)2GsH@Q7֣`1FPTNTE2*6N1Q(Ğj">LuQqޡe?Ur~UY W>_rjaT%&gzcEA; `r*&9=) zTDs4}sӥGڐFi ␊LzSqIA҃RFri6Ҏzu@┞i1۵)OO Ruߊ(/^(4w()9sA1ъ9ȠphŠ(%-9`1JiSQq44gQi(gA:3G~9Z^p(&)wZSHc4G=h zQ8KIPOJ~/;IK9=j&3UcDTqPTl8Eڣc銈8g֘uj7) g ɠJCԄRqw)h#4c BOR)F1@8*t8(ɥ4wQ҃IFh=(<RRFii4ޗך\s1K8GlQۚ8## >4f}(CQ/~tE&9);:uABԝZwIG(}h;R8?J\zQ4`F8GJ3ӟΌP:RP{Rъ&qG?( /'4=izhpE/K)W9N(+(ǧZpJp\^:S9*ARnjU'8ר{_N'l*¨뚴9⬪FaP~5"5.T1R*` qOqRU(Sȧ xZ z8zV"#ҤH0@=zSAPJB48Hbiu4;ToZ&C1ҡad{ 6>بg4,93Tl}6 TeUdeNҧITR(= ̿6e@sUPJ5SS qtHb鑟J<.qQ=hi'RI׃֘@Fz{R`1IiNqI::QA>րy!֗gxҁf}M/zCpGjKړ>h?{sN)Nh(i穣M@P:'$Rњ^wA8 4w9>)GK03@Kۥ&s)-qւ(8E(93GQ@}8G>Ê= ѻ(<.sIץ&qތw^w(Q֜$ =)~SNP1Ӛ^SHFH֦US($vN)U" jdgYV@TTqU*@ԋ`Sy'P8ECOjp7L z9=M)lud '#Þ)qH};SH0~1Q /nZ(2}j6jL0}^zqQelD{qQ8g*q*U95^F]Z u$٦KsPgMC&4̀8J4ޢqi~8yh֎Z/Q58zPh d8ǭsA'~)i({f=ȣ֓cQsސK3);v@4t4tϭ!'v'M/X<}(:SD)|:ѰrG47N*@4>zwSKHM4Te/ZӚf iEB\UTnYqҠu*R89.=%/9#ށѓ0yGz1F3x>zA=)O"u@AZ? 8;P{Q4g-:搁0$9=E; Kڐ 3RdRrOG⎴FzPME/'){\T{ѐ (?Oʗ"p1FyZ;tFr{8FAK/ҎRbϭG84hh(hh44჊wAOSOZxT~`jt9SL#]I搒OJisf^Rg^4w;s@⛜qK.x/u49c#)v=:GjN* 8D9YOCN>l-jFsQ151c@vu^G#8FNG=*#׽E/NqP m$^y7#>nW+摔5ip'gӭ5=M4y!Ӛ?A4K}({QIӏƎ~&E'O4 N⎜Rw19hx փGJLRQցRu4=i;=)zGoz 4bx&<&{}1Fr .GJN1GgSAG#(8zQ:QE&qރ=G8LӚ:KH4sG^3GJC߭(I-/(Aڔ}Q:JwҀ9R@8<xnyjLҞ'JgR@Z2x9F}jt5:(UQ*I1XTVbL UՄZ-J=R ¥^2wP}X:J>EJj`x*e#֤-ץHMR*u2HO,q7"OƏqIҢ(NOqLe9Ҭ~ۇZ3d`$Lg#Jڣw^vz D[j7 w8C #ޫH=*P`tjX0:Bw#Ze 90OJQzeDMGL=sH_Td!9Ҙxқ@@㡦$PFy(E&xc>i}( bM>I#ҏ~hhi4ZRc( K@FMZ>3Kގ9hz)ix4#>($OƔQF{)1(>}M@4ch==h"q;GӭF}h8ϵ(TKjԊ3 z;sGj^)?җ'ӥAڂ})y4gҎ9J]܎"/=R;4KޟpzjNirH$4gҗQM&ҌFy)sIӭ/֌<ўhQPǁIJwQޔP:R@'~})ENxc<zSq֟Ԫ*T1Rl*UoʥVLx!CLZ{zԪjdQөԪ*=c#9OԣnZ BGz^s@Z[>2gL2*e|֧TEJaG@yLxyRjߚ@T 2EC2b1PHpiIIޚ;*1QHiHN7?!g&sӵ 3Hy@=(8=i=zvqKRsCKQ\N)%.h<(:F;78"NMџʌ֐zSI: jQG4tⓧ4` L) h҃'QGJ^)-/S Hy'Fiz AJy{Ҝq82A8)sQ=z\h=ғ;J>gրp0h~ʎy'Կ.x$RS^3JZp vi0jUsަCu*1sVҬuQyZJI5mHԪ@TáS(ZVQS(TG~ELR>"9sO\qHAOZd g9{ўMiOJL Q@֌њOZLqA)A;Rdf=i 4 \f#F{wgQ:ތ9 I=(1K旵'E(F '^qJ:sG њ =)9^)~*1@)HOt旭'JQAғ/j> :ҜI׵zQ=zzQ8(Q4`u惌QJ9 g .)@◱dbr)ÓOS۵8tR/jGPTڥAZ+Rr*®01S*1Vr NQ`Օc#J2*e$dsLN3SFԫpiH=iAj`9)vQNsӊ6#`P[!sޑ M M2p9'CQ)`5:QuFH=lbnsQ8P`~ Q5jL9S&cPJ21ګ6sE!;~`j C#wJC3<`TL<qP)*38j ~j3ӊ֐sM4ii#@}{RGJ^):( H}iy(3H>`GZ_qIɣ"v;Qҏ⢓Jҗ&xh9QތAюsG:Rsih{}S^9Z1@hKߚ3'9zQtqI֔ҎzP14ʃߩ=('Fs֌K֎ J |ӵ/QGis@@}A<`43H3gyў.8c"C돭NcڦCNVP}H5f1֬"208 TꝪ@:T*D$L*O*?L L5(IxS,5*ԪR<0HfOzF)~TҙsLh:DWң*qQ>A51GDNyiy<2sQ;T[qQ;j2bUI0A$#oR$E"*e8ey֫GNjQ@BS;2:/'sQ4SQ)R1H '_ƓqF{Rzh'N)zރH3ڎ(Kۯ4'G>sj94h𣿽fdRg g=_HztgM)>O^Ըi#ڝ֏ΎZCP:ќޗғ=)~jZi{RcQ1Iڏƀ:Rz8'v◵ P:юsA&ތ1})zi;J48 zڎ4g&3Ը)qGRE Jy4c-.)Aڒۊ^qN;ȧc)JsҜsR*N*Tcjj?Ne$Vc~s~5n7ZBfҥ\T5H,1VǵHqOUǽJH SR"(9nyM玢Y8Cܑ{ԋ>Zڜ&<ӌdP3.񞹥߽FXE5Zڡ*1QBA ?Z@֣(j5F*=j)385TdQK&:uLUY%䚅ߌRWRzcҩ3~;UԂI5Fj @MD1 F z| dS:R@}:~ZCZ@(R8qtG84tKhҁ sQJ(Iw)qإRIߎvJ8@sAOך '4I@Gj1F(QA#E`f}EqGn~Qi{p)>(h>ؠ ^)瞴'ӭ/q֓J^1R89{fޔbuc-!_J9qԸ^&z\ph(RA۽8b9ch`S8tJx9#ޞSNyQR RH WҦ@qSa8(pF*nn)ZY?*[J520jd`:*UpMLVt(\T<(는(<%9Pg1c6*2|gޣ85Qu rMD&e$qQq*T$ &O&b@5Rf;FqU'<RGZ8J-D ܂9 6Aڢ~taAt֢?Ji f9ҐQZ1F= :G?J)8sH:R=qI)@;4c'J23@=юh:uґ:h4=1s֗<֗LQڌQ(I=hf⣽~c!?JP{RsQGJ(gR~4c'9h84ޏKE'wQڎz^\Qӊ\擨xޔtԤ4Z1SFqJO^)bS{ҚA>GJJR<)4d֓>xvڎii(i{֌) 8#v((#?Ҏ-h4uAPA旜pE.@t9M<LRtRʝ8NӔJ[?ZN1R{TY1jIVRLVRA Yގ:P}4J>i)q /|4FsG|H~>dcv@"=i_|R44g%9qF}i@ړz:R 瞔@9Nx`&qGa $)}(֓⏭'Ҕ J:4sJ3I88B~l;Aj8 s33Iv {{֓3Ȥ֌ QA&Nc984v4Rh=iONy)i1K'iF:qIޔw RAhOJ1)z ))ht>'Rg)pzG v4J:b 9]@H'-'Q(=h4s4gt'K}iOi9@Ҟg8x@9\~TL⌎ 玔Q 3ց֓?74`QHM/G4уڔҁKKҕOZ:ӁqN=zRǥ<)i׊zi=EH:`Tm*ޤڥ^*EjQ522LH:HA S Hv sԁ>~=AEI(1GךB P3!>ޝǎM4 BOz#IL2kIKbc7uu5qUj9dj#ZpA)Bzsɨzf`7sQ~j' Toc=5u)) 'L43MN9'^&RguN3Ah'4Q=(9GzNJ\K Aю:RdNsJFsE&Niq֌>QKy4'ҐM.yj1h'9/zRE )3(4is!G)/lth)3׌tҏJJQH:׊3KL2֗b@8Z_IKM984 Z?@)h9({"b Qޔt;QQK( j_'ҧVsZRz`S1RLTˁޥL*1ޤ\TUMwF9'nsG^ix)1(tg:P=n(@zQ3 /FxFsJ 8$>)?Qրy'@.zQg&FhN@' zP;无⃃ץ'Q)Ì4c҃ZNw);F@8(hlP:LPh֐{R9ۡ &u()sHsM)H>)G!Gҏ΁Kړ/L Ƞ@t.M'8fJ3ޔ{ߊp; (aT^)N(jASq*P>\(5 OԪTߥJDS,XI*Ozn5agl*YAx1֜&)sKR8HpzRt9&9Z2}i!'aw4(ޑ㊏SZȦ4}EB^j3(5~O5 0G98ϷE&@xi$ SO+P7)9Qm7Қ)HNM!Z7Gn94u8g)I@qFsEQCAZ3G~h >RvZ4R3F0E.8qA^Խ NOQҎu4sH)sGjBsҗ=8K$?Nb=yȨAE'lE'4J\GS@hFsQӚ=*i;qANE.yϵ/3ڃARh.xhi;M/^ }(>zc)9fҎؠwzNhg3JS;֗?8sO)sJ8{SZplSRqԡjE=}NޤQO^{b\Rx*U`TMH21Hj@:!5"ˌR5:\6pjE9(ZpHSr?:Mޣt)1HzS&xY?^bҡf ֢w<'֣Cfz 'Ҙ5dP3ށA4)0zE&}㹠t>df9izR8:惀:Rg9P>&~(݃ҔPsq^֜1)?>#Ҟ9\ӻ ӹIϥ9y=NN*@a> sJƤ׊Mp<~2MR R,ӄ֟q׊rc[֐OZ9t'SI# 9Zc܃ޙLǓ֘Ԫ1R)s8~NwQ֜'&uy4u=['&qx+pAi14jLzu) ʞœ{׎))Lӄ=F)^r3NzN֔9x-4M-H:vDL^j&♃{`'8463(?CLNF:R&:Qӵ!K3Iڎw=h9R}(zRZ_zOJ\P3F(?ƒ.)(h@b!(!QE)IGҗ.2i=AqG=c'ގ1y /)Jgn{Qsڂ(ڎQ=h9Ri0h^ 9@4z( :RtJ2}ێsH)H 9K=82xցԸ4g8/jNqQɤKF){4R=(֔ڗ;h/ҔdqJ"9{qOϽHޞG^9RSqO sRtHTgp$ <@yt$88֗LJn82mi4SHe JҗsҐR@uNMz:@Rc&:RdPFx7F(K8=>(9g\QAKۿ4C@IiE.9c8;&1@GJ)p3/j\`߃OZ2Agޝ*iˌzӳ880dSp=yOҒ1)y{ӳ=ۈ9OiNqR iD s~E;Ӽ14c 9|Mo&4nFO4ҙSi#}QH}j6JCpj3qHX⛻Mf?inM#1alqM{&7jB{SrjkciӊBHzczZLq4-&s@#F9p(GZ^sIqHFM/_ZA fRcctI/F8ޗJGJLR⓵`fq &փȣt=8u N9sJqJoaK\Q߽Ԙ)st9LRc1Z8ȧ}iFF}h8_ZQHy/=8FxsځGJ4{g^`FEMQړ(f?Ɨ'J_3;Hx q E72SK4n8nP(8&q@h@KKHHpzqKo_+qsAqF>_ƎiR旯4|1Jisc'AjCz:w2pt h=i1K4sҗ4cnM(?F1ށ֔dKgNcJ:QҔzRR(KHRӁJ'S Zx~ݩ'4ʔ7sON)C❸pap#(, JHi擡4 ӎy4Q{P} )qޓ I\t{Nޔ43A􀜑K֓n; ^0(J=1Gh~){Q)0sKHWFJh fc4g34cҔfӊ(<(J9ךu掃FG'Oz_ƃK?\Q֗ހ &Kjq4g9Q}i@!:#N>)A(ϭ8ZQӳ'3Ni7dѻ4fh'@9M8A!ҖCK1I׽){Z PN1Fܚ9=Rs8ҁGZN/4I4⓯isJ'p֛EG'JQzLzRr)O'A ^))9A@9'ҐG Rb}(1@NE'p)i:G)GҐiAɠQF(4w)q'֗)sIΗzRg?Z\RqG^i{;8RJN Ҟ1@iwd4(4zRhG~MҌ~Tg&Ҏg^LF}GԣP9iA8~)A.h'#&8ҩ4( =O'4݁IiĂ,7SȦJOJXv=EށLAӚ^qM!nO<qMsH )7g 9?NIq Nh'!8&2qI9z:zz^4 ==)2GRNh"zM&}izP874sޓ' 4 ZNڗ=)r3Ґ"zRgF>qy "iAQޓww sE^)1FyxH0.(ޏAF? ڙғ=)y0iN{ۊNhJ\J))OqG^{џΗ'N 4CR"/IiEI)qsF}iqzAbwqEG=(sIK$ь:)1ti}('SJ)i99Gz֗&? 0AK48sցސQ]wK9wjHN !#p?)2(zR&LHG9B}(^dc'qKIގLg:8Pzu=.OGQ֓9ғ#bޓ R48ԔMѻ=zҔsLGwhH/&:=ǹ9^sHj{;u'$\ўԜ(8((O'E<џ^zTYȤ&=88$JBxK&y9:RړJ:сIɥҏLP9&);PzFF1QIK}h&Qڌ;Ҏ?!鞔Rg^ԃ4JCǾ(#?FEf`Kڂx4F;@ 9uxG_”'NF3֔t{Ru.JL\A2svt7P=sA#@zR) _J M$gsޓvx( h8HF{Pr!8Lќh$4I)z L4)('<f8' JNP &yOZ9JRyh'SgGrh4(E/s@8A9KH1KGz!#րs֓izt4ȥNAKq9J^4Rs—Fh4i(AG ҃GF:QD4;Qޓ(ǥZ1ޏʃP:Rڗ&:vKZ3Iڗ擽)>v'g'hiz߯u KGC@<{>@8qJ)I^ @x&JxE3FrisQۊڂh)AQPxvPh'A ^1HNzQQ旭'$RIPOJ298\dgJ0GcIAFh'ߚ3J:RzR f4<{I@?J3@ ўg?v(4~g9JL҃҃yR tfQގ܊1'hJ1GF9t4s\fz@ARsڌPsK1֎Q)=Rf@hϷH@Nҁ@<ⓡF){sҎhhKVp8sA~@"R}}E^()GNzRgJ}EP=@Pp(g(9=)A8)84~(=hc(h<ԜwqIKZzZZ9tv=?{H9.)qbQtJ})1)oaIҎSАhKڊ1h<ьRxut9IQ@{QhȥPzP旚Nԣ4fGlI~:lIi>) cvzAJzRvR8փҎ4x)8t֎sx4cJ8A84h9 /&=( dJLr(~& F9"dG)A94ʗj)){ў5ȥx>uziJ=yhFi1J4Ғ(#=)OJڔwt>N3KyP2'=O#NΓE֌b4AAFip1AhH8&48A).2=(GJ@{~i{RRuQ9v8f}q.E'A@'9Kڃ9z\qG@A NiH=q? :N/4tIӞhsFh4~1\RsFEJi ڔlQG=1F ޏqH)qҎhZ;q3Ӛ1ϽPAJ1. B1ڀ?:Lǧ4HF8K)S_c0(PGG4{4r(Pyc֔q׊1ɠgcz1Ap(ϭ=sGcR\QڐsA9AF){tG'AюqF4&=iy@bq֔ F3J8ȣԂi;4c4v8"Q^=3A F=֌Qъ8' NihOʔJ\(R>F)1ґHE/C'j\`Pzdv4F2}惞擽)4b0sGҎ(4~qR"tP;F9(t8{;RҎ Z@1KO4fsZLr -&1zGQm&9KsM<⁌)8^bGLRp3/l(=(94qF? ?J@0xf҆c'z:ӱޒsGCOj=}cޔ`A#8J0iq:@0iz(h?'9i@RcqIZ1E/AIG9Q\R'Z\Rc#J\ q4H?:( xc(xsF(sF2hŒvF(#Z\Rb>K1RcJI\q@qARmԝ^jLfbi:Mc LM /J?JLތg=Tr3KJL{/j?b=sK!G#^)A#LAڎhϧ4ubj(Rg4@zNhǵg/RR3j:PIҗjC^G֗CI=8Rw'ށ4g(.hIj0zR!p(#=M}hGz'&t\@Z23Gz;RtMH9(RfxޓN"~tRJc4ҏb?3Gz3A#cZ旌OlR&x4wQfI=izPN1S7iy$PyP;ϭ!:R`Qj:KL`@RwFg iOj3@sEZ)p( Rf}{y/lQڗjҎ ;uJ3H9iOIޗZLSҌbgHx8GNԧץ/'rh?-&:QF(G?Z@(>z_h=(u4{PF)@G G(#ތ(ZLdsKr)(ǭqKIA1\Nq c&EhQ׭j;rO((ҁ^ǽ֎qhԞqF1E&1^!Mi KۥHHR*:z=QzR%tɣbfA@֎KRORv.hNvQяΔHf Px;f g'OPh3Js)P8GniG׊CGAEy4:Qތs@vh;Z 9j9^('x?Z;s@H=xҎ'dQ]iqҐQށJFhQAQKzCzP1RIsJz:)Nsޓ^'aK))z=)r3'9&M&yizRcќ~4> Qȣ(1@4gP1/' AAGQIM:Q֎h(ϵ&yGJw$qMZ;Z3sALccj2 \E'/n)3\w<u7bQj8ړޗ'Q2J:GGj(   (G8$g89Ҟ:w);84gFx" QԊSN wzRhiG\t R4.3*=(4g4u旎%is A;t.9>Ӟ44(Ki1E:FE'R){GQJ:cG~E/4bj\!8ڐ4z\8r}=փ⏭ʁ('c(Phc3Gj_ӵќR⎇zPG/ZBiM?*QӵvwJ:?*G\f(#'41'/}E A"ȣJ3 s֎=F:zPG4/z)3v; P(Ҕ='Rht8⃐i{bh@}8ގŒQh{hlh.=ih'3w.qރG֓@C֗(j\RsKHO8@$P}Mǥ&9R4vKhҌ 1GCޔ3I (J;Rt3K\ցKޓ{P{KI^'4IPFO=hEҎdP3Az?N:Q {RwI)}齩{u$)ҌsQ4gNԤ}y␞tތg1f{Rtfq4 Twc4i?8x/:R;Tg?/l84t@=ю(9z9'N /84sQۃAfP3zуKۭ1-sK8Rc){uӃKױ?PzL!J:sA>s() R(hRsKۊ^E'~sQPKA4vZ3ZOΓR@ڔҜIJ IҌh=iyJњ34ќSsK}T֠;ށ3G^^#ތ{qZLTԝЧ() 擩;=FF3@9zG8ɣ擜K—4h=8HP:&`GAJy4~4 \ 9(ǽ)}})4iy(=hsG#IKގ ZFNh4LfHM֔Q׊=hg4) qjStQFs@99A^h'3GjKI('gZCJ)(zC28&1җGAsG~JSץ&;g4{ 88@⎦qF4Fx惜Q@ M(JAuG^ߝ(gt9'ё)='&rx4h?dvڏ'8((8!sޝNup֎wGJ3KLsJzSHh=(IK$sK:҃ԅhis4Rb(s4qќQ۠'ўޔt9Ahϭ)3zq֔tG4qڏ=z}(9Ҏ(z9htJ;wsKځɣvvE.pqGRW(= ?zFM/=9ǩFqHzGz_lEhRъ3Fqɣ8>=E/j@izG&xSNqy5N1ڗ'nsF(=Ig@QNM/9-'cHNN1J9ڌ{I\4ր}P giACsH~R€zQMތ48Gj\J-4_@ҞҌќEJ1Fx/掔Z;fu`Z2s@;dL_ʁ҃I88>f裑҃Ƞ{qAHjSϵhLA΂{ NRA?^vC.9)`PzR׵7'G( b@rh$~4FMg=(=h;Rhi;w)֗98~4c&q44?RzQQӭcP=(</ZȢ09}3GSKRbQ҃SRpx`fIQFph}(G|PzsGj1KJ8) :R/JRM9֓$z)I"N8@9hQQŒJ2 iIZN\bwњN:RINM;&Au ixgdsE/jCޏƂp98Iӵ@zڊ:b8ѐ:早'Pp(x4ZLFxdK;sHN>E(MZ^G8- izRhJyE;Ҏ'LR旜i ((JQ@&9)4Z(98斎Ii:;Q׿4NhIA4@J}<:}(hy掞uz3sMKڎ}(KގԄ玴 ;Qy4i)yx)`c@Fx4g֗QڔR} wɠz>c$g.(ON}):Ri3Z8q@⎜җޒcTQRR8hdZL ~T$ozP)zҎy4pGCJO I)sv&qFr((j;'sڃ;tGQڗ}z(Mix?!Ȣ֊;E!z8KۭE&:9&Hyn)GJ⃎){Q&x>g3E(R`M(uQK֓җgۊ\JOL9 3@֊OZ:}ix֣^:Qǥ/RRG=izi1AN1G9)}))xuzGQEzR`QPFE㠥Ǿi1Kڒ KG^I)MF8qIiy:ߊ\&;ҁG|P~qK(<`P=EJLgQzbv8G@jZAҗ4c=)h=(KF)1ߵK1GSҎs&3ҔcGz94mRi}: Lf( ъJ14){I(IsSғq^Ը&28KE ^`ь? NځARwN 惎KCFF)1KQʃF3HEށ94ȤKQQ)$ғN>J;IP3_jL :wIEQ~{ 8=MG=(htʌP94=ip"1 NxFw'4\qFEt\P9PG4bq(Q*> )6ڌm &r2)~ ? 9 @=zRQ4;Qp(&Z0GւF>j:cIqN1P1yւ)'Ҏw;4ccԤv֓?*0)p >>JZ()4wQRpGJ_OJ9^)J\{ъ\By)z-юh=9#/p(ڃ:KK):PGzAvsy3vhRғ Optional[str]: # """ # Get the value of the attribute. # # Args: # instance: The instance of the class. # owner: The class that owns the attribute. # # Returns: # The value of the attribute. # """ # if instance is None: # return self # value = os.environ.get(self.name) # if value is None: # return self.default # return self._envvar_to_value(value) # # def __set__(self, instance: object, value: Optional[str]) -> None: # """ # Set the value of the attribute. # # Args: # instance: The instance of the class. # value: The value to be set. # """ # if value is not None: # os.environ[self.name] = self._value_to_envvar(value) # elif self.name in os.environ: # os.environ.pop(self.name) # # def __delete__(self, instance: object) -> None: # """ # Delete the attribute and remove the associated environment variable. # # Args: # instance: The instance of the class. # """ # os.environ.pop(self.name, None) # # def add_argument(self, parser: argparse.ArgumentParser) -> None: # """ # Add the command-line argument to the given ArgumentParser. # # Args: # parser: The ArgumentParser to add the argument to. # """ # parser.add_argument( # f"--{self.argname}", # default=self.default, # help=f"{self.argname} (environment variable: {self.name})", # ) # # def _envvar_to_value(self, value: str) -> str: # """ # Convert the environment variable value to the attribute value. # This method must be implemented by subclasses. # """ # return value # # def _value_to_envvar(self, value: str) -> str: # """ # Convert the attribute value to the environment variable value. # This method must be implemented by subclasses. # """ # return value # class DLExecEnv: """Object representing DataLab test environment""" UNATTENDED_ARG = "unattended" ACCEPT_DIALOGS_ARG = "accept_dialogs" VERBOSE_ARG = "verbose" SCREENSHOT_ARG = "screenshot" SCREENSHOT_PATH_ARG = "screenshot_path" DELAY_ARG = "delay" XMLRPCPORT_ARG = "xmlrpcport" DO_NOT_QUIT_ENV = "DATALAB_DO_NOT_QUIT" UNATTENDED_ENV = GuiDataExecEnv.UNATTENDED_ENV ACCEPT_DIALOGS_ENV = GuiDataExecEnv.ACCEPT_DIALOGS_ENV VERBOSE_ENV = GuiDataExecEnv.VERBOSE_ENV SCREENSHOT_ENV = GuiDataExecEnv.SCREENSHOT_ENV SCREENSHOT_PATH_ENV = GuiDataExecEnv.SCREENSHOT_PATH_ENV DELAY_ENV = GuiDataExecEnv.DELAY_ENV XMLRPCPORT_ENV = "DATALAB_XMLRPCPORT" CATCHER_TEST_ENV = "DATALAB_CATCHER_TEST" def __init__(self): self.h5files = None self.h5browser_file = None self.demo_mode = False # Check if "pytest" is in the command line arguments: if "pytest" not in sys.argv[0]: # Do not parse command line arguments when running tests with pytest # (otherwise, pytest arguments are parsed as DataLab arguments) self.parse_args() if self.unattended: # Do not run this code in production # Check that calling `to_dict` do not raise any exception self.to_dict() def iterate_over_attrs_envvars(self) -> Generator[tuple[str, str], None, None]: """Iterate over DataLab environment variables Yields: A tuple (attribute name, environment variable name) """ for name in dir(self): if name.endswith("_ENV"): envvar: str = getattr(self, name) attrname = "_".join(name.split("_")[:-1]).lower() yield attrname, envvar def to_dict(self): """Return a dictionary representation of the object""" # The list of properties match the list of environment variable attribute names, # modulo the "_ENV" suffix: props = [attrname for attrname, _envvar in self.iterate_over_attrs_envvars()] # Check that all properties are defined in the class and that they are # really properties: for prop in props: assert hasattr(self, prop), ( f"Property {prop} is not defined in class {self.__class__.__name__}" ) assert isinstance(getattr(self.__class__, prop), property), ( f"Attribute {prop} is not a property in class {self.__class__.__name__}" ) # Add complementary properties: props += [ "h5files", "h5browser_file", "demo_mode", ] # Return a dictionary with the properties as keys and their values as values: return {p: getattr(self, p) for p in props} def __str__(self): """Return a string representation of the object""" return pprint.pformat(self.to_dict()) def enable_demo_mode(self, delay: int): """Enable demo mode Args: delay: Delay (ms) before quitting application in unattended mode """ self.demo_mode = True self.unattended = True self.delay = delay def disable_demo_mode(self): """Disable demo mode""" self.demo_mode = False self.unattended = False self.delay = 0 @staticmethod def __get_mode(env): """Get mode value""" env_val = os.environ.get(env) if env_val is None: return False return env_val.lower() in ("1", "true", "yes", "on", "enable", "enabled") @staticmethod def __set_mode(env, value): """Set mode value""" if env in os.environ: os.environ.pop(env) if value: os.environ[env] = "1" @property def do_not_quit(self): """Keep QApplication running (and widgets opened) after test execution, even in unattended mode (e.g. useful for testing the remote client API: we need to run DataLab in unattended mode [to avoid any user interaction during the test] but we also need to keep the QApplication running to be able to send commands to the remote client API). """ return self.__get_mode(self.DO_NOT_QUIT_ENV) @do_not_quit.setter def do_not_quit(self, value): """Set do_not_quit value""" self.__set_mode(self.DO_NOT_QUIT_ENV, value) @property def unattended(self): """Get unattended value""" return self.__get_mode(self.UNATTENDED_ENV) @unattended.setter def unattended(self, value): """Set unattended value""" self.__set_mode(self.UNATTENDED_ENV, value) @property def accept_dialogs(self): """Whether to accept dialogs in unattended mode""" return self.__get_mode(self.ACCEPT_DIALOGS_ENV) @accept_dialogs.setter def accept_dialogs(self, value): """Set whether to accept dialogs in unattended mode""" self.__set_mode(self.ACCEPT_DIALOGS_ENV, value) @property def catcher_test(self): """Get catcher_test value""" return self.__get_mode(self.CATCHER_TEST_ENV) @catcher_test.setter def catcher_test(self, value): """Set catcher_test value""" self.__set_mode(self.CATCHER_TEST_ENV, value) @property def screenshot(self): """Get screenshot value""" return self.__get_mode(self.SCREENSHOT_ENV) @screenshot.setter def screenshot(self, value): """Set screenshot value""" self.__set_mode(self.SCREENSHOT_ENV, value) @property def screenshot_path(self): """Get screenshot path""" return os.environ.get(self.SCREENSHOT_PATH_ENV, "") @screenshot_path.setter def screenshot_path(self, value): """Set screenshot path""" if value: os.environ[self.SCREENSHOT_PATH_ENV] = str(value) elif self.SCREENSHOT_PATH_ENV in os.environ: os.environ.pop(self.SCREENSHOT_PATH_ENV) @property def verbose(self): """Get verbosity level""" env_val = os.environ.get(self.VERBOSE_ENV) if env_val in (None, ""): return VerbosityLevels.NORMAL.value return env_val.lower() @verbose.setter def verbose(self, value): """Set verbosity level""" os.environ[self.VERBOSE_ENV] = value @property def delay(self): """Delay (ms) before quitting application in unattended mode""" try: return int(os.environ.get(self.DELAY_ENV)) except (TypeError, ValueError): return 0 @delay.setter def delay(self, value: int): """Set delay (ms) before quitting application in unattended mode""" os.environ[self.DELAY_ENV] = str(value) @property def xmlrpcport(self): """XML-RPC port number""" try: return int(os.environ.get(self.XMLRPCPORT_ENV)) except (TypeError, ValueError): return None @xmlrpcport.setter def xmlrpcport(self, value: int): """Set XML-RPC port number""" os.environ[self.XMLRPCPORT_ENV] = str(value) def parse_args(self): """Parse command line arguments""" # WARNING # Do not add an option '-c' to avoid any conflict with macro command # execution mecanism used with DataLab standalone version (see start.pyw) parser = argparse.ArgumentParser(description="Run DataLab") parser.add_argument( "h5", nargs="?", type=str, help="HDF5 file names (separated by ';'), " "optionally with dataset name (separated by ',')", ) parser.add_argument( "-b", "--h5browser", required=False, type=str, metavar="path", help="path to open with HDF5 browser", ) parser.add_argument( "-v", "--version", action="store_true", help="show DataLab version" ) parser.add_argument( "--reset", action="store_true", help="reset DataLab configuration" ) parser.add_argument( "--" + self.UNATTENDED_ARG, action="store_true", help="non-interactive mode", default=None, ) parser.add_argument( "--" + self.ACCEPT_DIALOGS_ARG, action="store_true", help="accept dialogs in unattended mode", default=None, ) parser.add_argument( "--" + self.SCREENSHOT_ARG, action="store_true", help="automatic screenshots", default=None, ) parser.add_argument( "--" + self.SCREENSHOT_PATH_ARG, type=str, help="path to save screenshots", default=None, ) parser.add_argument( "--" + self.DELAY_ARG, type=int, default=None, help="delay (ms) before quitting application in unattended mode", ) parser.add_argument( "--" + self.XMLRPCPORT_ARG, type=int, default=None, help="XML-RPC port number", ) parser.add_argument( "--" + self.VERBOSE_ARG, choices=[lvl.value for lvl in VerbosityLevels], required=False, default=None, help="verbosity level: for debugging/testing purpose", ) args, _unknown = parser.parse_known_args() if args.h5: self.h5files = args.h5.split(";") if args.h5browser: self.h5browser_file = args.h5browser if args.version: version = os.environ["DATALAB_VERSION"] print(f"DataLab {version} on {platform.system()}") sys.exit() if args.reset: # Remove ".DataLab" configuration directory # pylint: disable=import-outside-toplevel from datalab.config import Conf print("Resetting DataLab configuration...", end=" ") try: Conf.reset() except Exception: # pylint: disable=broad-except print("Failed.") traceback.print_exc() finally: print("Done.") sys.exit() self.set_env_from_args(args) def set_env_from_args(self, args): """Set appropriate environment variables""" for argname in ( self.UNATTENDED_ARG, self.ACCEPT_DIALOGS_ARG, self.SCREENSHOT_ARG, self.SCREENSHOT_PATH_ARG, self.VERBOSE_ARG, self.DELAY_ARG, self.XMLRPCPORT_ARG, ): argvalue = getattr(args, argname) if argvalue is not None: setattr(self, argname, argvalue) def log(self, source: Any, *objects: Any) -> None: """Log text on screen Args: source: object from which the log is issued *objects: objects to log """ if DEBUG or self.verbose == VerbosityLevels.DEBUG.value: print(str(source) + ":", *objects) # TODO: [P4] Eventually, log in a file (optionally) def print(self, *objects, sep=" ", end="\n", file=sys.stdout, flush=False): """Print in file, depending on verbosity level""" if self.verbose != VerbosityLevels.QUIET.value or DEBUG: print(*objects, sep=sep, end=end, file=file, flush=flush) def pprint( self, obj, stream=None, indent=1, width=80, depth=None, compact=False, sort_dicts=True, ): """Pretty-print in stream, depending on verbosity level""" if self.verbose != VerbosityLevels.QUIET.value or DEBUG: pprint.pprint( obj, stream=stream, indent=indent, width=width, depth=depth, compact=compact, sort_dicts=sort_dicts, ) @contextmanager def context( self, unattended=None, accept_dialogs=None, screenshot=None, delay=None, verbose=None, xmlrpcport=None, catcher_test=None, ) -> Generator[None, None, None]: """Return a context manager that sets some execenv properties at enter, and restores them at exit. This is useful to run some code in a controlled environment, for example to accept dialogs in unattended mode, and restore the previous value at exit. Args: unattended: whether to run in unattended mode accept_dialogs: whether to accept dialogs in unattended mode screenshot: whether to take screenshots delay: delay (ms) before quitting application in unattended mode verbose: verbosity level xmlrpcport: XML-RPC port number catcher_test: whether to run catcher test .. note:: If a passed value is None, the corresponding property is not changed. """ old_values = self.to_dict() new_values = { "unattended": unattended, "accept_dialogs": accept_dialogs, "screenshot": screenshot, "delay": delay, "verbose": verbose, "xmlrpcport": xmlrpcport, "catcher_test": catcher_test, } for key, value in new_values.items(): if value is not None: setattr(self, key, value) try: yield finally: for key, value in old_values.items(): setattr(self, key, value) execenv = DLExecEnv() DataLab-1.0.2/datalab/gui/000077500000000000000000000000001511411446000151535ustar00rootroot00000000000000DataLab-1.0.2/datalab/gui/__init__.py000066400000000000000000000054221511411446000172670ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ GUI === The :mod:`datalab.gui` package contains functionnalities related to the graphical user interface (GUI) of the DataLab project. Those features are mostly specific to DataLab and are not intended to be used independently. The purpose of this section of the documentation is to provide an overview of the DataLab GUI architecture and to describe the main features of the modules contained in this package. It is not intended to provide a detailed description of the GUI features, but rather to provide a starting point for the reader who wants to understand the DataLab internal architecture. DataLab's main window is composed of several parts, each of them being handled by a specific module of this package: - **Signal and image panels**: those panels are used to display signals and images and to provide a set of tools to manipulate them. Each data panel relies on a set of modules to handle the GUI features (:mod:`datalab.gui.actionhandler` and :mod:`datalab.gui.objectview`), the data model (:mod:`datalab.gui.objectmodel`), the data visualization (:mod:`datalab.gui.plothandler`), and the data processing (:mod:`datalab.gui.processor`). - **Macro panel**: this panel is used to display and run macros. It relies on the :mod:`datalab.gui.macroeditor` module to handle the macro edition and execution. - **Specialized widgets**: those widgets are used to handle specific features such as ROI edition (:mod:`datalab.gui.roieditor`), Intensity profile edition (:mod:`datalab.gui.profiledialog`), etc. .. list-table:: :header-rows: 1 :align: left * - Submodule - Purpose * - :mod:`datalab.gui.main` - DataLab main window and application * - :mod:`datalab.gui.panel` - Signal, image and macro panels * - :mod:`datalab.gui.actionhandler` - Application actions (menus, toolbars, context menu) * - :mod:`datalab.gui.objectview` - Widgets to display object (signal/image) trees * - :mod:`datalab.gui.plothandler` - `PlotPy` plot items for representing signals and images * - :mod:`datalab.gui.roieditor` - ROI editor * - :mod:`datalab.gui.processor` - Processor * - :mod:`datalab.gui.docks` - Dock widgets * - :mod:`datalab.gui.h5io` - HDF5 input/output """ import abc from guidata.io import BaseIOHandler class ObjItf(abc.ABC): """Interface for objects handled by panels""" @property @abc.abstractmethod def title(self) -> str: """Object title""" @abc.abstractmethod def serialize(self, writer: BaseIOHandler): """Serialize this object""" @abc.abstractmethod def deserialize(self, reader: BaseIOHandler): """Deserialize this object""" DataLab-1.0.2/datalab/gui/actionhandler.py000066400000000000000000002131161511411446000203440ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Action handler ============== The :mod:`datalab.gui.actionhandler` module handles all application actions (menus, toolbars, context menu). These actions point to DataLab panels, processors, objecthandler, ... Utility classes --------------- .. autoclass:: SelectCond :members: .. autoclass:: ActionCategory :members: Handler classes --------------- .. autoclass:: SignalActionHandler :members: :inherited-members: .. autoclass:: ImageActionHandler :members: :inherited-members: """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import abc import enum from collections.abc import Callable, Generator from contextlib import contextmanager from functools import partial from typing import TYPE_CHECKING import sigima.objects as sio from guidata.configtools import get_icon from guidata.qthelpers import add_actions, create_action from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from datalab.adapters_metadata import GeometryAdapter, TableAdapter, have_results from datalab.config import Conf, _ from datalab.gui import newobject from datalab.widgets import fitdialog if TYPE_CHECKING: from sigima.objects import ImageObj, SignalObj from datalab.gui.panel.image import ImagePanel from datalab.gui.panel.signal import SignalPanel from datalab.objectmodel import ObjectGroup class SelectCond: """Signal or image select conditions""" @staticmethod def __compat_groups(selected_groups: list[ObjectGroup], min_len: int = 1) -> bool: """Check if groups are compatible""" return ( len(selected_groups) >= min_len and all(len(group) == len(selected_groups[0]) for group in selected_groups) and all(len(group) > 0 for group in selected_groups) ) @staticmethod # pylint: disable=unused-argument def always( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Always true""" return True @staticmethod def exactly_one( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Exactly one signal or image is selected""" return len(selected_groups) == 0 and len(selected_objects) == 1 @staticmethod # pylint: disable=unused-argument def exactly_one_group( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Exactly one group is selected""" return len(selected_groups) == 1 @staticmethod def exactly_one_group_or_one_object( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Exactly one group or one signal or image is selected""" return len(selected_groups) == 1 or len(selected_objects) == 1 @staticmethod # pylint: disable=unused-argument def at_least_one_group_or_one_object( sel_groups: list[ObjectGroup], sel_objects: list[SignalObj | ImageObj], ) -> bool: """At least one group or one signal or image is selected""" return len(sel_objects) >= 1 or len(sel_groups) >= 1 @staticmethod # pylint: disable=unused-argument def at_least_one( sel_groups: list[ObjectGroup], sel_objects: list[SignalObj | ImageObj], ) -> bool: """At least one signal or image is selected""" return len(sel_objects) >= 1 or SelectCond.__compat_groups(sel_groups, 1) @staticmethod def at_least_two( sel_groups: list[ObjectGroup], sel_objects: list[SignalObj | ImageObj], ) -> bool: """At least two signals or images are selected""" return len(sel_objects) >= 2 or SelectCond.__compat_groups(sel_groups, 2) @staticmethod # pylint: disable=unused-argument def with_roi( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """At least one signal or image has a ROI""" return any(obj.roi is not None for obj in selected_objects) @staticmethod # pylint: disable=unused-argument def exactly_one_with_roi( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Exactly one signal or image has a ROI""" return ( len(selected_groups) == 0 and len(selected_objects) == 1 and selected_objects[0].roi is not None ) @staticmethod # pylint: disable=unused-argument def exactly_one_with_annotations( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Exactly one signal or image has annotations""" return ( len(selected_groups) == 0 and len(selected_objects) == 1 and selected_objects[0].has_annotations() ) @staticmethod # pylint: disable=unused-argument def with_annotations( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """At least one signal or image has annotations""" return any(obj.has_annotations() for obj in selected_objects) @staticmethod # pylint: disable=unused-argument def with_results( selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """At least one signal or image has results""" return have_results(selected_objects) class ActionCategory(enum.Enum): """Action categories""" FILE = enum.auto() CREATE = enum.auto() EDIT = enum.auto() VIEW = enum.auto() ROI = enum.auto() OPERATION = enum.auto() PROCESSING = enum.auto() ANALYSIS = enum.auto() CONTEXT_MENU = enum.auto() PANEL_TOOLBAR = enum.auto() VIEW_TOOLBAR = enum.auto() SUBMENU = enum.auto() # temporary PLUGINS = enum.auto() # for plugins actions class BaseActionHandler(metaclass=abc.ABCMeta): """Object handling panel GUI interactions: actions, menus, ... Args: panel: Panel to handle panel_toolbar: Panel toolbar (actions related to the panel objects management) view_toolbar: View toolbar (actions related to the panel view, i.e. plot) """ OBJECT_STR = "" # e.g. "signal" OBJECT_STR_PLURAL = "" # e.g. "signals" def __init__( self, panel: SignalPanel | ImagePanel, panel_toolbar: QW.QToolBar, view_toolbar: QW.QToolBar, ): self.panel = panel self.panel_toolbar = panel_toolbar self.view_toolbar = view_toolbar self.feature_actions = {} self.operation_end_actions = None self.__category_in_progress: ActionCategory = None self.__submenu_in_progress = False self.__submenu_stack: list[dict[str, any]] = [] # Stack for nested submenus self.__actions: dict[Callable, list[QW.QAction]] = {} self.__submenus: dict[str, QW.QMenu] = {} # Store reference to ROI remove submenu self.roi_remove_submenu: QW.QMenu | None = None # Store reference to results delete submenu self.results_delete_submenu: QW.QMenu | None = None # Store reference to metadata and annotations submenus (for screenshots) self.metadata_submenu: QW.QMenu | None = None self.annotations_submenu: QW.QMenu | None = None # Store reference to show label action (for settings dialog) self.show_label_action: QW.QAction | None = None @property def object_suffix(self) -> str: """Object suffix (e.g. "sig" for signal, "ima" for image)""" return self.__class__.__name__[:3].lower() def populate_roi_remove_submenu(self) -> None: """Populate the ROI Remove submenu dynamically based on current selection""" submenu = self.roi_remove_submenu if submenu is None: return # Clear existing actions submenu.clear() # Get current selected object selected_objects = self.panel.objview.get_sel_objects() if not selected_objects: return obj = selected_objects[0] if obj.roi is None or obj.roi.is_empty(): return # Add individual ROI removal actions for i in range(len(obj.roi.single_rois)): roi_title = obj.roi.get_single_roi_title(i) action = QW.QAction(roi_title, submenu) # Use partial to avoid lambda closure issues action.triggered.connect(partial(self._remove_single_roi_by_index, i)) submenu.addAction(action) # Add separator and "Remove all" action if len(obj.roi.single_rois) > 0: submenu.addSeparator() remove_all_action = QW.QAction(_("Remove all"), submenu) remove_all_action.triggered.connect( self.panel.processor.delete_regions_of_interest ) submenu.addAction(remove_all_action) def _remove_single_roi_by_index(self, roi_index: int) -> None: """Helper method to remove a single ROI by index""" self.panel.processor.delete_single_roi(roi_index) def has_metadata_in_clipboard( self, selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Check if metadata clipboard is not empty""" # pylint: disable=unused-argument return bool(self.panel.metadata_clipboard) def has_annotations_in_clipboard( self, selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> bool: """Check if annotations clipboard is not empty""" # pylint: disable=unused-argument return bool(self.panel.annotations_clipboard) def populate_results_delete_submenu(self) -> None: """Populate the Results Delete submenu dynamically based on current selection""" submenu = self.results_delete_submenu if submenu is None: return # Clear existing actions submenu.clear() # Get current selected objects (including groups) objs = self.panel.objview.get_sel_objects(include_groups=True) if not objs: submenu.setEnabled(False) return # Collect all results with their metadata keys and titles result_items = [] # List of (metadata_key, title, obj, adapter) for obj in objs: # Get all adapters for this object for adapter in list(GeometryAdapter.iterate_from_obj(obj)) + list( TableAdapter.iterate_from_obj(obj) ): metadata_key = adapter.metadata_key title = adapter.title result_items.append((metadata_key, title, obj, adapter)) if not result_items: submenu.setEnabled(False) return # Enable submenu since we have results submenu.setEnabled(True) # Add individual result deletion actions for metadata_key, title, obj, adapter in result_items: action = QW.QAction(title, submenu) # Use partial to avoid lambda closure issues action.triggered.connect(partial(self._delete_single_result, obj, adapter)) submenu.addAction(action) # Add separator and "Delete all results..." action if result_items: submenu.addSeparator() delete_all_action = QW.QAction(_("Delete all results") + "...", submenu) delete_all_action.triggered.connect(self.panel.delete_results) submenu.addAction(delete_all_action) def _delete_single_result( self, obj: SignalObj | ImageObj, adapter: GeometryAdapter | TableAdapter ) -> None: """Helper method to delete a single result Args: obj: Object containing the result adapter: Adapter for the result to delete """ adapter.remove_from(obj) # Update properties panel to reflect the removal if obj is self.panel.objview.get_current_object(): self.panel.objprop.update_properties_from(obj) # Update action states to reflect the removal selected_groups = self.panel.objview.get_sel_groups() selected_objects = self.panel.objview.get_sel_objects(include_groups=True) self.selected_objects_changed(selected_groups, selected_objects) # Refresh the plot to update the display # Use the same refresh pattern as delete_results() method self.panel.refresh_plot("selected", True, False) @contextmanager def new_category(self, category: ActionCategory) -> Generator[None, None, None]: """Context manager for creating a new menu. Args: category: Action category Yields: None """ self.__category_in_progress = category try: yield finally: self.__category_in_progress = None @contextmanager def new_menu( self, title: str, icon_name: str | None = None, store_ref: str | None = None, ) -> Generator[None, None, None]: """Context manager for creating a new menu. Args: title: Menu title icon_name: Menu icon name. Defaults to None. store_ref: Optional attribute name to store menu reference. Defaults to None. Yields: None """ # Create a unique key for this submenu level parent_key = "" if self.__submenu_stack: parent_key = self.__submenu_stack[-1]["key"] + "/" elif self.__category_in_progress: parent_key = self.__category_in_progress.name + "/" key = parent_key + title is_new = key not in self.__submenus if is_new: self.__submenus[key] = menu = QW.QMenu(title) if icon_name: menu.setIcon(get_icon(icon_name)) # Store reference to menu if requested if store_ref is not None: setattr(self, store_ref, menu) else: menu = self.__submenus[key] # Save current submenu state and push new submenu onto stack submenu_state = { "key": key, "menu": menu, "is_new": is_new, "actions": [], # Actions for this submenu level } self.__submenu_stack.append(submenu_state) self.__submenu_in_progress = True try: yield finally: # Pop the current submenu from stack current_submenu = self.__submenu_stack.pop() # Get actions for this specific submenu level submenu_actions = current_submenu.get("actions", []) # Also get any actions that were added to the generic SUBMENU category # while this submenu was the active one generic_submenu_actions = self.feature_actions.pop( ActionCategory.SUBMENU, [] ) submenu_actions.extend(generic_submenu_actions) add_actions(current_submenu["menu"], submenu_actions) # Update submenu in progress status BEFORE adding to parent self.__submenu_in_progress = len(self.__submenu_stack) > 0 if current_submenu["is_new"]: # Add this submenu to its parent (either category or parent submenu) if self.__submenu_stack: # We're in a nested submenu, add to parent submenu's actions parent_submenu = self.__submenu_stack[-1] parent_submenu["actions"].append(current_submenu["menu"]) else: # We're at the top level, add to category actions # Force using the current category, not SUBMENU self.add_to_action_list( current_submenu["menu"], category=self.__category_in_progress ) # pylint: disable=too-many-positional-arguments def new_action( self, title: str, position: int | None = None, separator: bool = False, triggered: Callable | None = None, toggled: Callable | None = None, shortcut: QW.QShortcut | None = None, icon_name: str | None = None, tip: str | None = None, select_condition: Callable | str | None = None, context_menu_pos: int | None = None, context_menu_sep: bool = False, toolbar_pos: int | None = None, toolbar_sep: bool = False, toolbar_category: ActionCategory | None = None, ) -> QW.QAction: """Create new action and add it to list of actions. Args: title: action title position: add action to menu at this position. Defaults to None. separator: add separator before action in menu (or after if pos is positive). Defaults to False. triggered: triggered callback. Defaults to None. toggled: toggled callback. Defaults to None. shortcut: shortcut. Defaults to None. icon_name: icon name. Defaults to None. tip: tooltip. Defaults to None. select_condition: selection condition. Defaults to None. If str, must be the name of a method of SelectCond, i.e. one of "always", "exactly_one", "exactly_one_group", "at_least_one_group_or_one_object", "at_least_one", "at_least_two", "with_roi". context_menu_pos: add action to context menu at this position. Defaults to None. context_menu_sep: add separator before action in context menu (or after if context_menu_pos is positive). Defaults to False. toolbar_pos: add action to toolbar at this position. Defaults to None. toolbar_sep: add separator before action in toolbar (or after if toolbar_pos is positive). Defaults to False. toolbar_category: toolbar category. Defaults to None. If toolbar_pos is not None, this specifies the category of the toolbar. If None, defaults to ActionCategory.VIEW_TOOLBAR if the current category is ActionCategory.VIEW, else to ActionCategory.PANEL_TOOLBAR. Returns: New action """ if isinstance(select_condition, str): assert select_condition in SelectCond.__dict__ select_condition = getattr(SelectCond, select_condition) action = create_action( parent=self.panel, title=title, triggered=triggered, toggled=toggled, shortcut=shortcut, icon=get_icon(icon_name) if icon_name else None, tip=tip, context=QC.Qt.WidgetWithChildrenShortcut, # [1] ) self.panel.addAction(action) # [1] # [1] This is needed to make actions work with shortcuts for active panel, # because some of the shortcuts are using the same keybindings for both panels. # (Fixes #10) self.add_action(action, select_condition) self.add_to_action_list(action, None, position, separator) if context_menu_pos is not None: self.add_to_action_list( action, ActionCategory.CONTEXT_MENU, context_menu_pos, context_menu_sep ) if toolbar_pos is not None: if toolbar_category is None: if self.__category_in_progress is ActionCategory.VIEW: toolbar_category = ActionCategory.VIEW_TOOLBAR else: toolbar_category = ActionCategory.PANEL_TOOLBAR self.add_to_action_list(action, toolbar_category, toolbar_pos, toolbar_sep) return action def action_for( self, function_or_name: Callable | str, position: int | None = None, separator: bool = False, context_menu_pos: int | None = None, context_menu_sep: bool = False, toolbar_pos: int | None = None, toolbar_sep: bool = False, toolbar_category: ActionCategory | None = None, ) -> QW.QAction: """Create action for a feature. Args: function_or_name: function or name of the feature position: add action to menu at this position. Defaults to None. separator: add separator before action in menu context_menu_pos: add action to context menu at this position. context_menu_pos: add action to context menu at this position. Defaults to None. context_menu_sep: add separator before action in context menu (or after if context_menu_pos is positive). Defaults to False. toolbar_pos: add action to toolbar at this position. Defaults to None. toolbar_sep: add separator before action in toolbar (or after if toolbar_pos is positive). Defaults to False. toolbar_category: toolbar category. Defaults to None. If toolbar_pos is not None, this specifies the category of the toolbar. If None, defaults to ActionCategory.VIEW_TOOLBAR if the current category is ActionCategory.VIEW, else to ActionCategory.PANEL_TOOLBAR. Returns: New action """ feature = self.panel.processor.get_feature(function_or_name) if feature.pattern == "n_to_1": condition = SelectCond.at_least_two else: condition = SelectCond.at_least_one return self.new_action( feature.action_title, position=position, separator=separator, triggered=lambda: self.panel.processor.run_feature(feature.function), select_condition=condition, icon_name=feature.icon_name, tip=feature.comment, context_menu_pos=context_menu_pos, context_menu_sep=context_menu_sep, toolbar_pos=toolbar_pos, toolbar_sep=toolbar_sep, toolbar_category=toolbar_category, ) def add_to_action_list( self, action: QW.QAction, category: ActionCategory | None = None, pos: int | None = None, sep: bool = False, ) -> None: """Add action to list of actions. Args: action: action to add category: action category. Defaults to None. If None, action is added to the current category. pos: add action to menu at this position. Defaults to None. If None, action is added at the end of the list. sep: add separator before action in menu (or after if pos is positive). Defaults to False. """ if category is None: if self.__submenu_in_progress and self.__submenu_stack: # Add directly to the current submenu's action list current_submenu = self.__submenu_stack[-1] actionlist = current_submenu["actions"] if pos is None: pos = -1 add_separator_after = pos >= 0 if pos < 0: pos = len(actionlist) + pos + 1 actionlist.insert(pos, action) if sep: if add_separator_after: pos += 1 actionlist.insert(pos, None) return if self.__category_in_progress is not None: category = self.__category_in_progress else: raise ValueError("No category specified") if pos is None: pos = -1 actionlist = self.feature_actions.setdefault(category, []) add_separator_after = pos >= 0 if pos < 0: pos = len(actionlist) + pos + 1 actionlist.insert(pos, action) if sep: if add_separator_after: pos += 1 actionlist.insert(pos, None) def add_action( self, action: QW.QAction, select_condition: Callable | None = None ) -> None: """Add action to list of actions. Args: action: action to add select_condition: condition to enable action. Defaults to None. If None, action is enabled if at least one object is selected. """ if select_condition is None: select_condition = SelectCond.at_least_one self.__actions.setdefault(select_condition, []).append(action) def selected_objects_changed( self, selected_groups: list[ObjectGroup], selected_objects: list[SignalObj | ImageObj], ) -> None: """Update actions based on selected objects. Args: selected_groups: selected groups selected_objects: selected objects """ for cond, actlist in self.__actions.items(): if cond is not None: for act in actlist: act.setEnabled(cond(selected_groups, selected_objects)) def create_all_actions(self): """Create all actions""" self.create_first_actions() self.create_last_actions() # Connect ROI remove submenu signal after all actions are created if self.roi_remove_submenu is not None: self.roi_remove_submenu.aboutToShow.connect( self.populate_roi_remove_submenu ) # Add the submenu to the action management system with ROI condition self.add_action(self.roi_remove_submenu, SelectCond.with_roi) # Connect results delete submenu signal after all actions are created if self.results_delete_submenu is not None: self.results_delete_submenu.aboutToShow.connect( self.populate_results_delete_submenu ) # Add the submenu to the action management system self.add_action( self.results_delete_submenu, SelectCond.at_least_one_group_or_one_object, ) add_actions( self.panel_toolbar, self.feature_actions.pop(ActionCategory.PANEL_TOOLBAR) ) # For the view toolbar, we add the actions to the beginning of the toolbar: before = self.view_toolbar.actions()[0] for action in self.feature_actions.pop(ActionCategory.VIEW_TOOLBAR): if action is None: self.view_toolbar.insertSeparator(before) else: self.view_toolbar.insertAction(before, action) self.view_toolbar.insertSeparator(before) def create_first_actions(self): """Create actions that are added to the menus in the first place""" # MARK: FILE with self.new_category(ActionCategory.FILE): self.new_action( _("Open %s...") % self.OBJECT_STR, # Icon name is 'fileopen_sig.svg' or 'fileopen_ima.svg': icon_name=f"fileopen_{self.object_suffix}.svg", tip=_("Open one or more %s files") % self.OBJECT_STR, triggered=self.panel.load_from_files, shortcut=QG.QKeySequence(QG.QKeySequence.Open), select_condition=SelectCond.always, toolbar_pos=-1, ) self.new_action( _("Open from directory..."), icon_name="fileopen_directory.svg", tip=_("Open all %s files from directory") % self.OBJECT_STR, triggered=self.panel.load_from_directory, select_condition=SelectCond.always, toolbar_pos=-1, ) self.new_action( _("Save %s...") % self.OBJECT_STR, # Icon name is 'filesave_sig.svg' or 'filesave_ima.svg' icon_name=f"filesave_{self.object_suffix}.svg", tip=_("Save selected %s") % self.OBJECT_STR_PLURAL, triggered=self.panel.save_to_files, shortcut=QG.QKeySequence(QG.QKeySequence.Save), select_condition=SelectCond.at_least_one, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Save to directory..."), icon_name="save_to_directory.svg", tip=_("Save selected %s using a filename pattern") % self.OBJECT_STR_PLURAL, triggered=self.panel.save_to_directory, select_condition=SelectCond.at_least_two, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Import text file..."), icon_name="import_text.svg", triggered=self.panel.exec_import_wizard, select_condition=SelectCond.always, ) # MARK: EDIT with self.new_category(ActionCategory.EDIT): self.new_action( _("Recompute"), icon_name="recompute.svg", shortcut="Ctrl+R", tip=_("Recompute selected %s with its processing parameters") % self.OBJECT_STR, triggered=self.panel.recompute_processing, select_condition=SelectCond.at_least_one_group_or_one_object, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Select source objects"), icon_name="goto_source.svg", tip=_("Select source object(s) used to create the selected %s") % self.OBJECT_STR, triggered=self.panel.select_source_objects, select_condition=SelectCond.exactly_one, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Rename"), icon_name="rename.svg", shortcut="F2", tip=_("Edit title of selected %s or group") % self.OBJECT_STR, triggered=self.panel.rename_selected_object_or_group, select_condition=SelectCond.exactly_one_group_or_one_object, context_menu_pos=-1, separator=True, ) self.new_action( _("New group..."), icon_name="new_group.svg", tip=_("Create a new group"), triggered=self.panel.new_group, select_condition=SelectCond.always, context_menu_pos=-1, ) self.new_action( _("Move up"), icon_name="move_up.svg", tip=_("Move up selection (groups or objects)"), triggered=self.panel.objview.move_up, select_condition=SelectCond.at_least_one_group_or_one_object, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Move down"), icon_name="move_down.svg", tip=_("Move down selection (groups or objects)"), triggered=self.panel.objview.move_down, select_condition=SelectCond.at_least_one_group_or_one_object, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Duplicate"), icon_name="duplicate.svg", tip=_("Duplicate selected %s") % self.OBJECT_STR, separator=True, triggered=self.panel.duplicate_object, shortcut=QG.QKeySequence(QG.QKeySequence.Copy), select_condition=SelectCond.at_least_one_group_or_one_object, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Remove"), icon_name="delete.svg", tip=_("Remove selected %s") % self.OBJECT_STR, triggered=self.panel.remove_object, shortcut=QG.QKeySequence(QG.QKeySequence.Delete), select_condition=SelectCond.at_least_one_group_or_one_object, context_menu_pos=-1, toolbar_pos=-1, ) self.new_action( _("Delete all"), select_condition=SelectCond.always, shortcut="Shift+Ctrl+Suppr", tip=_("Delete all groups and objects"), icon_name="delete_all.svg", triggered=self.panel.delete_all_objects, toolbar_pos=-1, ) with self.new_menu( _("Metadata"), icon_name="metadata.svg", store_ref="metadata_submenu" ): self.new_action( _("Copy metadata"), icon_name="metadata_copy.svg", tip=_("Copy metadata from selected %s") % self.OBJECT_STR, triggered=self.panel.copy_metadata, select_condition=SelectCond.exactly_one, toolbar_pos=-1, ) self.new_action( _("Paste metadata"), icon_name="metadata_paste.svg", tip=_("Paste metadata into selected %s") % self.OBJECT_STR, triggered=self.panel.paste_metadata, select_condition=self.has_metadata_in_clipboard, toolbar_pos=-1, ) self.new_action( _("Add metadata") + "...", separator=True, icon_name="metadata_add.svg", tip=_("Add a metadata item to selected %s") % self.OBJECT_STR, triggered=self.panel.add_metadata, select_condition=SelectCond.at_least_one, toolbar_pos=-1, ) self.new_action( _("Import metadata") + "...", icon_name="metadata_import.svg", tip=_("Import metadata into %s") % self.OBJECT_STR, triggered=self.panel.import_metadata_from_file, select_condition=SelectCond.exactly_one, toolbar_pos=-1, ) self.new_action( _("Export metadata") + "...", icon_name="metadata_export.svg", tip=_("Export selected %s metadata") % self.OBJECT_STR, triggered=self.panel.export_metadata_from_file, select_condition=SelectCond.exactly_one, toolbar_pos=-1, ) self.new_action( _("Delete object metadata"), separator=True, icon_name="metadata_delete.svg", tip=_("Delete all that is contained in object metadata"), triggered=self.panel.delete_metadata, toolbar_pos=-1, ) with self.new_menu( _("Annotations"), icon_name="annotations.svg", store_ref="annotations_submenu", ): self.new_action( _("Copy annotations"), icon_name="annotations_copy.svg", tip=_("Copy annotations from selected %s") % self.OBJECT_STR, triggered=self.panel.copy_annotations, select_condition=SelectCond.exactly_one_with_annotations, ) self.new_action( _("Paste annotations"), icon_name="annotations_paste.svg", tip=_("Paste annotations into selected %s") % self.OBJECT_STR, triggered=self.panel.paste_annotations, select_condition=self.has_annotations_in_clipboard, ) self.new_action( _("Edit annotations") + "...", separator=True, icon_name="annotations_edit.svg", tip=_("Edit annotations of selected %s") % self.OBJECT_STR, triggered=lambda: self.panel.open_separate_view( edit_annotations=True ), select_condition=SelectCond.exactly_one, ) self.new_action( _("Import annotations") + "...", icon_name="annotations_import.svg", tip=_("Import annotations into %s") % self.OBJECT_STR, triggered=self.panel.import_annotations_from_file, select_condition=SelectCond.exactly_one, ) self.new_action( _("Export annotations") + "...", icon_name="annotations_export.svg", tip=_("Export selected %s annotations") % self.OBJECT_STR, triggered=self.panel.export_annotations_from_file, select_condition=SelectCond.exactly_one_with_annotations, ) self.new_action( _("Delete annotations"), separator=True, icon_name="annotations_delete.svg", tip=_("Delete all annotations from selected %s") % self.OBJECT_STR, triggered=self.panel.delete_annotations, select_condition=SelectCond.with_annotations, ) self.new_action( _("Insert object title as annotation label"), separator=True, triggered=lambda: self.panel.add_label_with_title(ignore_msg=False), tip=_( "Add the selected object's title as a label to the plot annotations" ), ) self.new_action( _("Copy titles to clipboard"), icon_name="copy_titles.svg", tip=_("Copy titles of selected objects to clipboard"), triggered=self.panel.copy_titles_to_clipboard, ) # MARK: ROI with self.new_category(ActionCategory.ROI): self.new_action( _("Edit graphically") + "...", triggered=self.panel.processor.edit_roi_graphically, icon_name="roi.svg", context_menu_pos=-1, context_menu_sep=True, toolbar_pos=-1, toolbar_category=ActionCategory.VIEW_TOOLBAR, tip=_("Edit regions of interest graphically"), ) self.new_action( _("Edit numerically") + "...", triggered=self.panel.processor.edit_roi_numerically, select_condition=SelectCond.exactly_one_with_roi, tip=_("Edit regions of interest numerically"), ) # MARK: VIEW with self.new_category(ActionCategory.VIEW): self.new_action( _("View in a new window") + "...", icon_name="new_window.svg", tip=_("View selected %s in a new window") % self.OBJECT_STR, triggered=self.panel.open_separate_view, context_menu_pos=0, context_menu_sep=True, toolbar_pos=0, ) # MARK: OPERATION with self.new_category(ActionCategory.OPERATION): self.action_for("arithmetic") with self.new_menu(_("Constant Operations"), icon_name="constant.svg"): self.action_for("addition_constant") self.action_for("difference_constant") self.action_for("product_constant") self.action_for("division_constant") self.action_for("addition") self.action_for("difference") self.action_for("product") self.action_for("division") self.action_for("inverse", separator=True) self.action_for("exp") self.action_for("log10") # MARK: PROCESSING with self.new_category(ActionCategory.PROCESSING): with self.new_menu( _("Axis transformation"), icon_name="axis_transform.svg" ): self.action_for("calibration") with self.new_menu(_("Level adjustment"), icon_name="level_adjustment.svg"): self.action_for("normalize") self.action_for("clip") self.new_action( _("Offset correction"), triggered=self.panel.processor.compute_offset_correction, icon_name="offset_correction.svg", tip=_("Evaluate and subtract the offset value from the data"), ) with self.new_menu(_("Noise addition"), icon_name="noise_addition.svg"): self.action_for("add_gaussian_noise") self.action_for("add_poisson_noise") self.action_for("add_uniform_noise") with self.new_menu(_("Noise reduction"), icon_name="noise_reduction.svg"): self.action_for("gaussian_filter") self.action_for("moving_average") self.action_for("moving_median") self.action_for("wiener") with self.new_menu(_("Fourier analysis"), icon_name="fourier.svg"): self.action_for("zero_padding") self.action_for("fft") self.action_for("ifft") self.action_for("magnitude_spectrum") self.action_for("phase_spectrum") self.action_for("psd") # MARK: ANALYSIS with self.new_category(ActionCategory.ANALYSIS): self.action_for("stats", context_menu_pos=-1, context_menu_sep=True) self.action_for("histogram", context_menu_pos=-1) def create_last_actions(self): """Create actions that are added to the menus in the end""" # MARK: ROI with self.new_category(ActionCategory.ROI): self.new_action( _("Extract") + "...", triggered=self.panel.processor.compute_roi_extraction, # Icon name is 'roi_sig.svg' or 'roi_ima.svg': icon_name=f"roi_{self.object_suffix}.svg", separator=True, ) self.new_action( _("Copy"), separator=True, icon_name="roi_copy.svg", tip=_("Copy regions of interest from selected %s") % self.OBJECT_STR, triggered=self.panel.copy_roi, select_condition=SelectCond.exactly_one_with_roi, toolbar_pos=-1, ) self.new_action( _("Paste"), icon_name="roi_paste.svg", tip=_("Paste regions of interest into selected %s") % self.OBJECT_STR, triggered=self.panel.paste_roi, toolbar_pos=-1, ) self.new_action( _("Import") + "...", icon_name="roi_import.svg", tip=_("Import regions of interest into %s") % self.OBJECT_STR, triggered=self.panel.import_roi_from_file, select_condition=SelectCond.exactly_one, toolbar_pos=-1, ) self.new_action( _("Export") + "...", icon_name="roi_export.svg", tip=_("Export selected %s regions of interest") % self.OBJECT_STR, triggered=self.panel.export_roi_to_file, select_condition=SelectCond.exactly_one_with_roi, toolbar_pos=-1, ) # Create dynamic "Remove" submenu with self.new_menu(_("Remove"), icon_name="roi_delete.svg"): # Store reference to the submenu for dynamic population if self.__submenu_stack: current_submenu = self.__submenu_stack[-1] self.roi_remove_submenu = current_submenu["menu"] # MARK: OPERATION with self.new_category(ActionCategory.OPERATION): self.action_for("absolute", separator=True) self.action_for("phase") self.action_for("complex_from_magnitude_phase") self.action_for("real", separator=True) self.action_for("imag") self.action_for("complex_from_real_imag") self.action_for("astype", separator=True) self.action_for("average", separator=True) self.action_for("standard_deviation") self.action_for("quadratic_difference") self.action_for("convolution", separator=True) self.action_for("deconvolution") # MARK: ANALYSIS with self.new_category(ActionCategory.ANALYSIS): self.new_action( _("Show results") + "...", triggered=self.panel.show_results, icon_name="show_results.svg", separator=True, select_condition=SelectCond.at_least_one_group_or_one_object, ) self.show_label_action = self.new_action( _("Results label"), toggled=self.panel.toggle_result_label_visibility, tip=_("Show or hide the merged result label on the plot"), select_condition=SelectCond.with_results, ) self.show_label_action.setCheckable(True) self.show_label_action.setChecked(Conf.view.show_result_label.get()) self.new_action( _("Plot results") + "...", triggered=self.panel.plot_results, icon_name="plot_results.svg", select_condition=SelectCond.at_least_one_group_or_one_object, ) # Create dynamic "Delete results" submenu with self.new_menu(_("Delete results"), icon_name="delete_results.svg"): # Store reference to the submenu for dynamic population if self.__submenu_stack: current_submenu = self.__submenu_stack[-1] self.results_delete_submenu = current_submenu["menu"] # MARK: VIEW with self.new_category(ActionCategory.VIEW): self.new_action( _("Edit annotations") + "...", icon_name="annotations.svg", tip=_("Edit annotations of selected %s") % self.OBJECT_STR, triggered=lambda: self.panel.open_separate_view(edit_annotations=True), context_menu_pos=1, toolbar_pos=-1, ) main = self.panel.mainwindow for cat in (ActionCategory.VIEW, ActionCategory.VIEW_TOOLBAR): for act in (main.autorefresh_action, main.showfirstonly_action): self.add_to_action_list(act, cat, -1) self.new_action( _("Refresh manually"), icon_name="refresh-manual.svg", tip=_("Refresh plot, even if auto-refresh is enabled"), shortcut=QG.QKeySequence(QG.QKeySequence.Refresh), triggered=self.panel.manual_refresh, select_condition=SelectCond.always, toolbar_pos=-1, ) for cat in (ActionCategory.VIEW, ActionCategory.VIEW_TOOLBAR): self.add_to_action_list(main.showlabel_action, cat, -1) class SignalActionHandler(BaseActionHandler): """Object handling signal panel GUI interactions: actions, menus, ...""" OBJECT_STR = _("signal") OBJECT_STR_PLURAL = _("signals") def create_first_actions(self): """Create actions that are added to the menus in the first place""" super().create_first_actions() # MARK: CREATE with self.new_category(ActionCategory.CREATE): for label, pclass, icon_name, separator in ( (_("Zero"), sio.ZeroParam, "1d-zero.svg", False), ( _("Normal distribution"), sio.NormalDistribution1DParam, "1d-normal.svg", False, ), ( _("Poisson distribution"), sio.PoissonDistribution1DParam, "1d-poisson.svg", False, ), ( _("Uniform distribution"), sio.UniformDistribution1DParam, "1d-uniform.svg", False, ), (_("Gaussian"), sio.GaussParam, "gaussian.svg", True), (_("Lorentzian"), sio.LorentzParam, "lorentzian.svg", False), (_("Voigt"), sio.VoigtParam, "voigt.svg", False), (_("Blackbody (Planck's law)"), sio.PlanckParam, "planck.svg", False), (_("Sine"), sio.SineParam, "sine.svg", True), (_("Cosine"), sio.CosineParam, "cosine.svg", False), (_("Sawtooth"), sio.SawtoothParam, "sawtooth.svg", False), (_("Triangle"), sio.TriangleParam, "triangle.svg", False), (_("Square"), sio.SquareParam, "square.svg", False), (_("Cardinal sine"), sio.SincParam, "sinc.svg", False), (_("Linear chirp"), sio.LinearChirpParam, "linear_chirp.svg", False), (_("Step"), sio.StepParam, "step.svg", True), (_("Exponential"), sio.ExponentialParam, "exponential.svg", False), (_("Logistic"), sio.LogisticParam, "logistic.svg", False), (_("Pulse"), sio.PulseParam, "pulse.svg", False), (_("Step pulse"), sio.StepPulseParam, "step_pulse.svg", False), (_("Square pulse"), sio.SquarePulseParam, "square_pulse.svg", False), (_("Polynomial"), sio.PolyParam, "polynomial.svg", True), (_("Custom"), newobject.CustomSignalParam, None, False), ): self.new_action( label, tip=_("Create new %s") % label, triggered=lambda pclass=pclass: self.panel.new_object(pclass()), icon_name=icon_name, select_condition=SelectCond.always, separator=separator, ) # MARK: OPERATION with self.new_category(ActionCategory.OPERATION): self.action_for("power", separator=True) self.action_for("sqrt") def cra_fit(title, fitdlgfunc, tip: str | None = None): """Create curve fitting action""" return self.new_action( title, triggered=lambda: self.panel.processor.compute_fit(title, fitdlgfunc), icon_name=fitdlgfunc.__name__ + ".svg", tip=tip, ) # MARK: PROCESSING with self.new_category(ActionCategory.PROCESSING): with self.new_menu(_("Axis transformation")): self.action_for("transpose") self.action_for("reverse_x") self.action_for("replace_x_by_other_y") self.action_for("xy_mode") self.action_for("to_cartesian", separator=True) self.action_for("to_polar") with self.new_menu(_("Frequency filters"), icon_name="highpass.svg"): self.action_for("lowpass") self.action_for("highpass") self.action_for("bandpass") self.action_for("bandstop") with self.new_menu(_("Fitting"), icon_name="exponential_fit.svg"): with self.new_menu( _("Interactive fitting"), icon_name="interactive_fit.svg" ): cra_fit(_("Linear fit"), fitdialog.linear_fit) self.new_action( _("Polynomial fit"), triggered=self.panel.processor.compute_polyfit, icon_name="polynomial_fit.svg", ) cra_fit(_("Gaussian fit"), fitdialog.gaussian_fit) cra_fit(_("Lorentzian fit"), fitdialog.lorentzian_fit) cra_fit(_("Voigt fit"), fitdialog.voigt_fit) self.new_action( _("Multi-Gaussian fit"), triggered=self.panel.processor.compute_multigaussianfit, icon_name="multigaussian_fit.svg", ) self.new_action( _("Multi-Lorentzian fit"), triggered=self.panel.processor.compute_multilorentzianfit, icon_name="multilorentzian_fit.svg", ) cra_fit( _("Planckian fit"), fitdialog.planckian_fit, tip=_("Planckian (blackbody radiation) fitting"), ) cra_fit( _("Two half-Gaussian fit"), fitdialog.twohalfgaussian_fit, tip=_("Asymmetric peak fitting with two half-Gaussians"), ) cra_fit( _("Piecewise exponential (raise-decay) fit"), fitdialog.piecewiseexponential_fit, tip=_( "Piecewise exponential fitting with raise and decay " "components" ), ) cra_fit(_("Exponential fit"), fitdialog.exponential_fit) cra_fit(_("Sinusoidal fit"), fitdialog.sinusoidal_fit) cra_fit( _("CDF fit"), fitdialog.cdf_fit, tip=_( "Cumulative distribution function fit, " "related to Error function (erf)" ), ) separator_needed = True for fit_name in ( "linear_fit", "polynomial_fit", "gaussian_fit", "lorentzian_fit", "voigt_fit", "planckian_fit", "twohalfgaussian_fit", "piecewiseexponential_fit", "exponential_fit", "sinusoidal_fit", "cdf_fit", "sigmoid_fit", ): self.action_for(fit_name, separator=separator_needed) separator_needed = False self.action_for("evaluate_fit", separator=True) self.action_for("derivative", separator=True) self.action_for("integral") self.action_for("apply_window", separator=True) self.action_for("detrending") self.action_for("interpolate") self.action_for("resampling") with self.new_menu(_("Stability analysis"), icon_name="stability.svg"): self.action_for("allan_variance") self.action_for("allan_deviation") self.action_for("modified_allan_variance") self.action_for("hadamard_variance") self.action_for("total_variance") self.action_for("time_deviation") self.new_action( _("All stability features") + "...", triggered=self.panel.processor.compute_all_stability, separator=True, tip=_("Compute all stability features"), ) # MARK: ANALYSIS with self.new_category(ActionCategory.ANALYSIS): self.action_for("fwhm") self.action_for("fw1e2") self.new_action( _("Full width at y=..."), triggered=self.panel.processor.compute_full_width_at_y, tip=_("Compute the full width at a given y value"), ) self.action_for("x_at_minmax") self.new_action( _("First abscissa at y=..."), triggered=self.panel.processor.compute_x_at_y, tip=_( "Compute the first abscissa at a given y value " "(linear interpolation)" ), ) self.new_action( _("Ordinate at x=..."), triggered=self.panel.processor.compute_y_at_x, tip=_("Compute the ordinate at a given x value (linear interpolation)"), ) self.action_for("extract_pulse_features") self.new_action( _("Peak detection"), separator=True, triggered=self.panel.processor.compute_peak_detection, icon_name="peak_detect.svg", ) self.action_for("sampling_rate_period", separator=True) self.action_for("dynamic_parameters", context_menu_pos=-1) self.action_for("bandwidth_3db", context_menu_pos=-1) self.action_for("contrast") def create_last_actions(self): """Create actions that are added to the menus in the end""" super().create_last_actions() with self.new_category(ActionCategory.OPERATION): self.action_for("signals_to_image", separator=True) with self.new_category(ActionCategory.VIEW): antialiasing_action = self.new_action( _("Curve anti-aliasing"), icon_name="curve_antialiasing.svg", toggled=self.panel.toggle_anti_aliasing, tip=_("Toggle curve anti-aliasing on/off (may slow down plotting)"), toolbar_pos=-1, ) antialiasing_action.setChecked(Conf.view.sig_antialiasing.get(True)) self.new_action( _("Reset curve styles"), select_condition=SelectCond.always, icon_name="reset_curve_styles.svg", triggered=self.panel.reset_curve_styles, tip=_( "Curve styles are looped over a list of predefined styles.\n" "This action resets the list to its initial state." ), toolbar_pos=-1, ) class ImageActionHandler(BaseActionHandler): """Object handling image panel GUI interactions: actions, menus, ...""" OBJECT_STR = _("image") OBJECT_STR_PLURAL = _("images") def create_first_actions(self): """Create actions that are added to the menus in the first place""" # MARK: PROCESSING (1/2) with self.new_category(ActionCategory.PROCESSING): with self.new_menu(_("Geometry"), icon_name="rotate_right.svg"): self.action_for("fliph", context_menu_pos=-1, context_menu_sep=True) self.action_for("transpose", context_menu_pos=-1) self.action_for("flipv", context_menu_pos=-1) self.action_for("rotate270", context_menu_pos=-1) self.action_for("rotate90", context_menu_pos=-1) self.action_for("rotate") self.new_action( _("Distribute on a grid..."), triggered=self.panel.processor.distribute_on_grid, icon_name="distribute_on_grid.svg", select_condition=SelectCond.at_least_two, separator=True, ) self.new_action( _("Reset image positions"), triggered=self.panel.processor.reset_positions, icon_name="reset_positions.svg", select_condition=SelectCond.at_least_two, ) with self.new_menu( _("Axis transformation"), icon_name="axis_transform.svg" ): self.action_for("set_uniform_coords") super().create_first_actions() # MARK: CREATE with self.new_category(ActionCategory.CREATE): for label, pclass, icon_name, separator in ( (_("Zero"), sio.Zero2DParam, "2d-zero.svg", False), ( _("Normal distribution"), sio.NormalDistribution2DParam, "2d-normal.svg", False, ), ( _("Poisson distribution"), sio.PoissonDistribution2DParam, "2d-poisson.svg", False, ), ( _("Uniform distribution"), sio.UniformDistribution2DParam, "2d-uniform.svg", False, ), (_("Gaussian"), sio.Gauss2DParam, "2d-gaussian.svg", True), (_("2D sinc"), sio.Sinc2DParam, "2d-sinc.svg", False), (_("Ring pattern"), sio.Ring2DParam, "ring.svg", True), (_("Ramp"), sio.Ramp2DParam, "2d-ramp.svg", False), (_("Checkerboard"), sio.Checkerboard2DParam, "checkerboard.svg", False), ( _("Sinusoidal grating"), sio.SinusoidalGrating2DParam, "grating.svg", False, ), (_("Siemens star"), sio.SiemensStar2DParam, "siemens.svg", False), ): self.new_action( label, tip=_("Create new %s") % label, triggered=lambda pclass=pclass: self.panel.new_object(pclass()), icon_name=icon_name, select_condition=SelectCond.always, separator=separator, ) # MARK: ROI with self.new_category(ActionCategory.ROI): self.new_action( _("Create ROI grid") + "...", triggered=self.panel.processor.create_roi_grid, icon_name="roi_grid.svg", tip=_("Create a grid of regions of interest"), ) # MARK: OPERATION with self.new_category(ActionCategory.OPERATION): self.action_for("log10_z_plus_n") # MARK: PROCESSING (2/2) with self.new_category(ActionCategory.PROCESSING): with self.new_menu(_("Frequency filters"), icon_name="noise_reduction.svg"): self.action_for("butterworth") self.action_for("gaussian_freq_filter") with self.new_menu(_("Thresholding"), icon_name="thresholding.svg"): self.action_for("threshold") self.action_for("threshold_isodata") self.action_for("threshold_li") self.action_for("threshold_mean") self.action_for("threshold_minimum") self.action_for("threshold_otsu") self.action_for("threshold_triangle") self.action_for("threshold_yen") self.new_action( _("All thresholding methods") + "...", triggered=self.panel.processor.compute_all_threshold, separator=True, tip=_("Apply all thresholding methods"), ) with self.new_menu(_("Exposure"), icon_name="exposure.svg"): self.action_for("adjust_gamma") self.action_for("adjust_log") self.action_for("adjust_sigmoid") self.action_for("equalize_hist") self.action_for("equalize_adapthist") self.action_for("rescale_intensity") with self.new_menu(_("Restoration"), icon_name="noise_reduction.svg"): self.action_for("denoise_tv") self.action_for("denoise_bilateral") self.action_for("denoise_wavelet") self.action_for("denoise_tophat") self.new_action( _("All denoising methods") + "...", triggered=self.panel.processor.compute_all_denoise, separator=True, tip=_("Apply all denoising methods"), ) with self.new_menu(_("Morphology"), icon_name="morphology.svg"): self.action_for("white_tophat") self.action_for("black_tophat") self.action_for("erosion") self.action_for("dilation") self.action_for("opening") self.action_for("closing") self.new_action( _("All morphological operations") + "...", triggered=self.panel.processor.compute_all_morphology, separator=True, tip=_("Apply all morphological operations"), ) with self.new_menu(_("Edge detection"), icon_name="edge_detection.svg"): self.action_for("canny") self.action_for("farid", separator=True) self.action_for("farid_h") self.action_for("farid_v") self.action_for("laplace", separator=True) self.action_for("prewitt", separator=True) self.action_for("prewitt_h") self.action_for("prewitt_v") self.action_for("roberts", separator=True) self.action_for("scharr", separator=True) self.action_for("scharr_h") self.action_for("scharr_v") self.action_for("sobel", separator=True) self.action_for("sobel_h") self.action_for("sobel_v") self.new_action( _("All edge detection filters..."), triggered=self.panel.processor.compute_all_edges, separator=True, tip=_("Compute all edge detection filters"), ) self.new_action( _("Erase area") + "...", triggered=self.panel.processor.compute_erase, icon_name="erase.svg", separator=True, tip=_("Erase area in the image as defined by a region of interest"), ) # MARK: ANALYSIS with self.new_category(ActionCategory.ANALYSIS): with self.new_menu(_("Intensity profiles"), icon_name="profile.svg"): self.new_action( _("Line profile..."), triggered=self.panel.processor.compute_line_profile, icon_name="profile.svg", tip=_("Extract horizontal or vertical profile"), context_menu_pos=-1, context_menu_sep=True, ) self.new_action( _("Segment profile..."), triggered=self.panel.processor.compute_segment_profile, icon_name="profile_segment.svg", tip=_("Extract profile along a segment"), context_menu_pos=-1, ) self.new_action( _("Average profile..."), triggered=self.panel.processor.compute_average_profile, icon_name="profile_average.svg", tip=_("Extract average horizontal or vertical profile"), context_menu_pos=-1, ) self.new_action( _("Radial profile extraction..."), triggered=self.panel.processor.compute_radial_profile, icon_name="profile_radial.svg", tip=_("Radial profile extraction around image centroid"), ) self.action_for("horizontal_projection", separator=True) self.action_for("vertical_projection") self.action_for("centroid", separator=True) self.action_for("enclosing_circle") self.new_action( _("2D peak detection"), separator=True, triggered=self.panel.processor.compute_peak_detection, tip=_("Compute automatic 2D peak detection"), ) self.action_for("contour_shape") self.action_for("hough_circle_peaks") with self.new_menu(_("Blob detection")): self.action_for("blob_dog") self.action_for("blob_doh") self.action_for("blob_log") self.action_for("blob_opencv") def create_last_actions(self): """Create actions that are added to the menus in the end""" # MARK: PROCESSING with self.new_category(ActionCategory.PROCESSING): self.new_action( _("Resize") + "...", triggered=self.panel.processor.compute_resize, icon_name="resize.svg", separator=True, ) self.new_action( _("Pixel binning") + "...", triggered=self.panel.processor.compute_binning, icon_name="binning.svg", ) self.action_for("resampling") # MARK: VIEW with self.new_category(ActionCategory.VIEW): self.new_action( _("View images side-by-side") + "...", icon_name="new_window.svg", tip=_("View selected images side-by-side in a new window"), triggered=self.panel.view_images_side_by_side, select_condition=SelectCond.at_least_two, context_menu_pos=-1, ) super().create_last_actions() # MARK: OPERATION with self.new_category(ActionCategory.OPERATION): self.action_for("flatfield", separator=True) # MARK: VIEW with self.new_category(ActionCategory.VIEW): showcontrast_action = self.new_action( _("Show contrast panel"), icon_name="contrast.png", tip=_("Show or hide contrast adjustment panel"), select_condition=SelectCond.always, toggled=self.panel.toggle_show_contrast, toolbar_pos=-1, ) showcontrast_action.setChecked(Conf.view.show_contrast.get(True)) DataLab-1.0.2/datalab/gui/docks.py000066400000000000000000000404631511411446000166370ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Docks ===== The :mod:`datalab.gui.docks` module provides the dockable widgets for the DataLab main window. Plot widget ----------- .. autoclass:: DataLabPlotWidget Dockable plot widget -------------------- .. autoclass:: DockablePlotWidget """ from __future__ import annotations import warnings from typing import TYPE_CHECKING import numpy as np import scipy.integrate as spt from guidata.configtools import get_icon, get_image_file_path from guidata.qthelpers import create_action, is_dark_theme from guidata.widgets.dockable import DockableWidget from plotpy.constants import PlotType from plotpy.items import CurveItem from plotpy.panels import XCrossSection, YCrossSection from plotpy.plot import PlotOptions, PlotWidget from plotpy.tools import ( BasePlotMenuTool, CurveStatsTool, DeleteItemTool, DisplayCoordsTool, DoAutoscaleTool, EditItemDataTool, ExportItemDataTool, ImageStatsTool, ItemCenterTool, RectangularSelectionTool, RectZoomTool, SelectTool, YRangeCursorTool, ) from plotpy.tools.image import get_stats as get_image_stats from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from qtpy.QtWidgets import QApplication, QMainWindow from sigima.objects import create_signal from sigima.tools.signal import pulse from skimage import measure from datalab.config import APP_NAME, Conf, _ if TYPE_CHECKING: from plotpy.items.image.base import BaseImageItem from plotpy.plot import BasePlot from plotpy.styles import BaseImageParam class CurveStatsToolFunctions: """Statistical functions for `CurveStatsTool` and `YRangeCursorTool`""" @classmethod def set_labelfuncs(cls, statstool: CurveStatsTool) -> None: """Set label functions for the statistics tool""" if isinstance(statstool, CurveStatsTool): labelfuncs = ( ("%g < x < %g", lambda *args: cls.nan_min_max(args[0])), ("%g < y < %g", lambda *args: cls.nan_min_max(args[1])), ("∆x=%g", lambda *args: cls.nan_delta(args[0])), ("∆y=%g", lambda *args: cls.nan_delta(args[1])), ("<y>=%g", lambda *args: cls.nan_mean(args[1])), ("σ(y)=%g", lambda *args: cls.nan_std(args[1])), ("∑(y)=%g", lambda *args: spt.trapezoid(args[1])), ("∫ydx=%g
", lambda *args: spt.trapezoid(args[1], args[0])), ("FWHM=%s", cls.fwhm_info), ("∆xRISE 10-90=%s", cls.rise_time_info), ( "∆xRISE 20-80=%s", lambda x, y: cls.rise_time_info(x, y, 0.2, 0.8), ), ("∆xFALL 90-10=%s", cls.fall_time_info), ( "∆xFALL 80-20=%s", lambda x, y: cls.fall_time_info(x, y, 0.8, 0.2), ), ) else: # YRangeCursorTool labelfuncs = ( ("%g < y < %g", lambda ymin, ymax: (ymin, ymax)), ("∆y=%g", lambda ymin, ymax: ymax - ymin), ) statstool.set_labelfuncs(labelfuncs) @staticmethod def nan_min_max(arr: np.ndarray) -> tuple[float, float]: """Return min/max tuple""" with warnings.catch_warnings(): warnings.simplefilter("ignore", RuntimeWarning) min_val = np.nanmin(arr) max_val = np.nanmax(arr) return (min_val, max_val) @staticmethod def nan_delta(arr: np.ndarray) -> float: """Return delta value, ignoring NaNs""" with warnings.catch_warnings(): warnings.simplefilter("ignore", RuntimeWarning) delta_val = np.nanmax(arr) - np.nanmin(arr) return delta_val @staticmethod def nan_mean(arr: np.ndarray) -> float: """Return mean value, ignoring NaNs""" with warnings.catch_warnings(): warnings.simplefilter("ignore", RuntimeWarning) mean_val = np.nanmean(arr) return mean_val @staticmethod def nan_std(arr: np.ndarray) -> float: """Return standard deviation, ignoring NaNs""" with warnings.catch_warnings(): warnings.simplefilter("ignore", RuntimeWarning) std_val = np.nanstd(arr) return std_val @staticmethod def fwhm_info(x, y): """Return FWHM information string""" try: with warnings.catch_warnings(record=True) as w: x0, _y0, x1, _y1 = pulse.fwhm(x, y, "zero-crossing") wstr = " ⚠️" if w else "" except (ValueError, ZeroDivisionError, pulse.InvalidSignalError): return "🛑" return f"{x1 - x0:g}{wstr}" @staticmethod def rise_time_info(x, y, start_ratio=0.1, end_ratio=0.9): """Return rise time information string""" try: with warnings.catch_warnings(record=True) as w: dt = pulse.get_rise_time(x, y, start_ratio, end_ratio) wstr = " ⚠️" if w else "" if dt is None: return "🛑" except (ValueError, ZeroDivisionError, pulse.InvalidSignalError): return "🛑" return f"{dt:g}{wstr}" @staticmethod def fall_time_info(x, y, start_ratio=0.9, end_ratio=0.1): """Return fall time information string""" try: with warnings.catch_warnings(record=True) as w: dt = pulse.get_fall_time(x, y, start_ratio, end_ratio) wstr = " ⚠️" if w else "" if dt is None: return "🛑" except (ValueError, ZeroDivisionError, pulse.InvalidSignalError): return "🛑" return f"{dt:g}{wstr}" def get_more_image_stats( item: BaseImageItem, x0: float, y0: float, x1: float, y1: float, ) -> str: """Return formatted string with stats on image rectangular area (output should be compatible with AnnotatedShape.get_info) Args: item: image item x0: X0 y0: Y0 x1: X1 y1: Y1 """ with warnings.catch_warnings(): warnings.simplefilter("ignore", UserWarning) info = get_image_stats(item, x0, y0, x1, y1) ix0, iy0, ix1, iy1 = item.get_closest_index_rect(x0, y0, x1, y1) data = item.data[iy0:iy1, ix0:ix1] p: BaseImageParam = item.param xunit, yunit, zunit = p.get_units() integral = np.nansum(data) integral_fmt = r"%.3e " + zunit info += f"
∑ = {integral_fmt % integral}" if xunit == yunit: surfacefmt = p.xformat.split()[0] + " " + xunit if xunit != "": surfacefmt = surfacefmt + "²" surface = abs((x1 - x0) * (y1 - y0)) info += f"
A = {surfacefmt % surface}" if xunit is not None and zunit is not None: if surface != 0: density = integral / surface densityfmt = r"%.3e" if xunit and zunit: densityfmt += " " + zunit + "/" + xunit + "²" info = info + f"
ρ = {densityfmt % density}" c_i, c_j = measure.centroid(data) c_x, c_y = item.get_plot_coordinates(c_j + ix0, c_i + iy0) info += "
" + "
".join( [ "C|x = " + p.xformat % c_x, "C|y = " + p.yformat % c_y, ] ) return info def profile_to_signal(plot: BasePlot, panel: XCrossSection | YCrossSection) -> None: """Send cross section curve to DataLab's signal list Args: panel: Cross section panel """ win = None for win in QApplication.topLevelWidgets(): if isinstance(win, QMainWindow): break if win is None or win.objectName() != APP_NAME: # pylint: disable=import-outside-toplevel # pylint: disable=cyclic-import from datalab.gui import main # Note : this is the only way to retrieve the DataLab main window instance # when the CrossSectionItem object is embedded into an image widget # parented to another main window. win = main.DLMainWindow.get_instance() assert win is not None # Should never happen for item in panel.cs_plot.get_items(): if not isinstance(item, CurveItem): continue x, y, _dx, _dy = item.get_data() if x is None or y is None or x.size == 0 or y.size == 0: continue signal = create_signal(item.param.label) if isinstance(panel, YCrossSection): signal.set_xydata(y, x) xaxis_name = "left" xunit = plot.get_axis_unit("bottom") if xunit: signal.title += " " + xunit else: signal.set_xydata(x, y) xaxis_name = "bottom" yunit = plot.get_axis_unit("left") if yunit: signal.title += " " + yunit signal.ylabel = plot.get_axis_title("right") signal.yunit = plot.get_axis_unit("right") signal.xlabel = plot.get_axis_title(xaxis_name) signal.xunit = plot.get_axis_unit(xaxis_name) win.signalpanel.add_object(signal) # Show DataLab main window on top, if not already visible win.show() win.raise_() class DataLabPlotWidget(PlotWidget): """DataLab PlotWidget This class is a subclass of `plotpy.plot.PlotWidget` that provides a customized widget for DataLab, with a specific set of tools and a customized appearance. Args: plot_type: Plot type """ def __init__(self, plot_type: PlotType) -> None: # Get autoscale margin from configuration based on plot type if plot_type == PlotType.CURVE: autoscale_margin = Conf.view.sig_autoscale_margin_percent.get() elif plot_type == PlotType.IMAGE: autoscale_margin = Conf.view.ima_autoscale_margin_percent.get() else: # For AUTO or MANUAL types, use signal margin as default autoscale_margin = Conf.view.sig_autoscale_margin_percent.get() super().__init__( options=PlotOptions( type=plot_type, show_axes_tab=False, autoscale_margin_percent=autoscale_margin, ), toolbar=True, ) def __register_standard_tools(self) -> None: """Register standard tools The only differences with the `manager.register_standard_tools` method are the following: 1. We don't register the `BasePlotMenuTool, "axes"` tool, because it is not compatible with DataLab's approach to axes management. 2. We don't register the `ItemListPanelTool` tool (this intends to prevent the user from accessing the item list panel, and thus, the parameters of all the items - some of them are read-only and should not be modified, like the annotations for example). """ mgr = self.manager select_tool = mgr.add_tool(SelectTool) mgr.set_default_tool(select_tool) mgr.add_tool(RectangularSelectionTool, intersect=False) mgr.add_tool(RectZoomTool) mgr.add_tool(DoAutoscaleTool) mgr.add_tool(BasePlotMenuTool, "item") mgr.add_tool(ExportItemDataTool) mgr.add_tool(EditItemDataTool) mgr.add_tool(ItemCenterTool) mgr.add_tool(DeleteItemTool) mgr.add_separator_tool() mgr.add_tool(BasePlotMenuTool, "grid") mgr.add_tool(DisplayCoordsTool) def __register_other_tools(self) -> None: """Register other tools""" mgr = self.manager mgr.add_separator_tool() if self.options.type == PlotType.CURVE: mgr.register_curve_tools() xstatstool = mgr.get_tool(CurveStatsTool) CurveStatsToolFunctions.set_labelfuncs(xstatstool) ystatstool = mgr.get_tool(YRangeCursorTool) CurveStatsToolFunctions.set_labelfuncs(ystatstool) else: mgr.register_image_tools() # Customizing the ImageStatsTool statstool = mgr.get_tool(ImageStatsTool) statstool.set_stats_func(get_more_image_stats, replace=True) # Customizing the X and Y cross section panels plot = mgr.get_plot() for panel in (mgr.get_xcs_panel(), mgr.get_ycs_panel()): to_signal_action = create_action( panel, _("Process signal"), icon=get_icon("to_signal.svg"), triggered=lambda panel=panel: profile_to_signal(plot, panel), ) tb = panel.toolbar tb.insertSeparator(tb.actions()[0]) tb.insertAction(tb.actions()[0], to_signal_action) mgr.add_separator_tool() mgr.register_other_tools() mgr.add_separator_tool() mgr.update_tools_status() mgr.get_default_tool().activate() def register_tools(self) -> None: """Register the plotting tools according to the plot type""" self.__register_standard_tools() self.__register_other_tools() class DockablePlotWidget(DockableWidget): """Docked plotting widget Args: parent: Parent widget plot_type: Plot type """ LOCATION = QC.Qt.RightDockWidgetArea def __init__( self, parent: QW.QWidget, plot_type: PlotType, ) -> None: super().__init__(parent) self.plotwidget = DataLabPlotWidget(plot_type) self.toolbar = self.plotwidget.get_toolbar() self.watermark = QW.QLabel() original_image = QG.QPixmap(get_image_file_path("DataLab-watermark.png")) self.watermark.setPixmap(original_image) self.setup_layout() self.setup_plotwidget() def __get_toolbar_row_col(self) -> tuple[int, int]: """Return toolbar row and column""" tb_pos = Conf.view.plot_toolbar_position.get() tb_col, tb_row = 1, 1 if tb_pos in ("left", "right"): self.toolbar.setOrientation(QC.Qt.Vertical) tb_col = 0 if tb_pos == "left" else 2 else: self.toolbar.setOrientation(QC.Qt.Horizontal) tb_row = 0 if tb_pos == "top" else 2 return tb_row, tb_col def setup_layout(self) -> None: """Setup layout""" tb_row, tb_col = self.__get_toolbar_row_col() layout = QW.QGridLayout() layout.addWidget(self.toolbar, tb_row, tb_col) layout.addWidget(self.plotwidget, 1, 1) layout.addWidget(self.watermark, 1, 1, QC.Qt.AlignCenter) self.setLayout(layout) def update_toolbar_position(self) -> None: """Update toolbar position""" tb_row, tb_col = self.__get_toolbar_row_col() layout = self.layout() layout.removeWidget(self.toolbar) layout.addWidget(self.toolbar, tb_row, tb_col) def setup_plotwidget(self) -> None: """Setup plotting widget""" title = self.toolbar.windowTitle() self.plotwidget.get_manager().add_toolbar(self.toolbar, title) # Customizing widget appearances self.update_color_mode() plot = self.plotwidget.get_plot() canvas = plot.canvas() canvas.setFrameStyle(canvas.Plain | canvas.NoFrame) plot.SIG_ITEMS_CHANGED.connect(self.update_watermark) def update_color_mode(self) -> None: """Update plot widget styles according to application color mode""" if is_dark_theme(): palette = QApplication.instance().palette() else: palette = QG.QPalette(QC.Qt.white) for widget in (self.plotwidget, self.plotwidget.get_plot(), self): widget.setBackgroundRole(QG.QPalette.Window) widget.setAutoFillBackground(True) widget.setPalette(palette) def get_plot(self) -> BasePlot: """Return plot instance""" return self.plotwidget.get_plot() def update_watermark(self, plot: BasePlot) -> None: """Update watermark visibility""" items = plot.get_items() if self.plotwidget.options.type == PlotType.IMAGE: enabled = len(items) <= 1 else: enabled = len(items) <= 2 self.watermark.setVisible(enabled) # ------DockableWidget API def visibility_changed(self, enable: bool) -> None: """DockWidget visibility has changed""" DockableWidget.visibility_changed(self, enable) self.toolbar.setVisible(enable) DataLab-1.0.2/datalab/gui/h5io.py000066400000000000000000000127511511411446000163770ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ HDF5 I/O ======== The :mod:`datalab.gui.h5io` module provides the HDF5 file open/save into/from DataLab data model/main window. .. autoclass:: H5InputOutput """ from __future__ import annotations import os.path as osp from typing import TYPE_CHECKING from guidata.qthelpers import exec_dialog from qtpy import QtWidgets as QW from sigima.objects import SignalObj from datalab.config import _ from datalab.env import execenv from datalab.h5 import H5Importer from datalab.h5.native import NativeH5Reader, NativeH5Writer from datalab.utils.qthelpers import create_progress_bar, qt_try_loadsave_file from datalab.widgets.h5browser import H5BrowserDialog if TYPE_CHECKING: from datalab.gui.main import DLMainWindow from datalab.h5.common import BaseNode class H5InputOutput: """Object handling HDF5 file open/save into/from DataLab data model/main window Args: mainwindow: Main window """ def __init__(self, mainwindow: DLMainWindow) -> None: self.mainwindow = mainwindow self.uint32_wng: bool = None @staticmethod def __progbartitle(fname: str) -> str: """Return progress bar title""" return _("Loading data from %s...") % osp.basename(fname) def save_file(self, filename: str) -> None: """Save all signals and images from DataLab model into a HDF5 file""" writer = NativeH5Writer(filename) for panel in self.mainwindow.panels: panel.serialize_to_hdf5(writer) writer.close() def open_file(self, filename: str, import_all: bool, reset_all: bool) -> None: """Open HDF5 file""" progress = None try: reader = NativeH5Reader(filename) if reset_all: self.mainwindow.reset_all() with create_progress_bar( self.mainwindow, self.__progbartitle(filename), 2 ) as progress: for idx, panel in enumerate(self.mainwindow.panels): progress.setValue(idx + 1) QW.QApplication.processEvents() panel.deserialize_from_hdf5(reader, reset_all) if progress.wasCanceled(): break reader.close() except KeyError: if progress is not None: # KeyError was encoutered when deserializing datasets (DataLab data # model is not compatible with this version) progress.close() self.import_files([filename], import_all, reset_all) def __add_object_from_node(self, node: BaseNode) -> None: """Add DataLab object from h5 node""" obj = node.get_native_object() if obj is None: return self.uint32_wng = self.uint32_wng or node.uint32_wng if isinstance(obj, SignalObj): self.mainwindow.signalpanel.add_object(obj) else: self.mainwindow.imagepanel.add_object(obj) def __eventually_show_warnings(self) -> None: """Eventually show warnings after everything is imported""" if self.uint32_wng: QW.QMessageBox.warning( self.mainwindow, _("Warning"), _("Clipping uint32 data to int32.") ) def import_files( self, filenames: list[str], import_all: bool, reset_all: bool ) -> None: """Import HDF5 files""" h5browser = H5BrowserDialog(self.mainwindow) for filename in filenames: with qt_try_loadsave_file(self.mainwindow, filename, "load"): h5browser.open_file(filename) if h5browser.is_empty(): h5browser.cleanup() if not execenv.unattended: QW.QMessageBox.warning( self.mainwindow, _("Warning"), _("No supported data available in HDF5 file(s)."), ) return if execenv.unattended: # Unattended mode: import all datasets (for testing) import_all = True if import_all or exec_dialog(h5browser): if import_all: nodes = h5browser.get_all_nodes() else: nodes = h5browser.get_nodes() if nodes is not None: if reset_all: self.mainwindow.reset_all() with qt_try_loadsave_file(self.mainwindow, "*.h5", "load"): with create_progress_bar(self.mainwindow, "", len(nodes)) as prog: self.uint32_wng = False for idx, node in enumerate(nodes): prog.setLabelText(self.__progbartitle(node.h5file.filename)) prog.setValue(idx + 1) QW.QApplication.processEvents() if prog.wasCanceled(): break self.__add_object_from_node(node) self.__eventually_show_warnings() h5browser.cleanup() def import_dataset_from_file(self, filename: str, dsetname: str) -> None: """Import dataset from HDF5 file""" h5importer = H5Importer(filename) try: node = h5importer.get(dsetname) self.uint32_wng = False self.__add_object_from_node(node) self.__eventually_show_warnings() except KeyError as exc: raise KeyError(f"Dataset not found: {dsetname}") from exc h5importer.close() DataLab-1.0.2/datalab/gui/macroeditor.py000066400000000000000000000231111511411446000200330ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Macro editor ============ The :mod:`datalab.gui.macroeditor` module provides the macro editor widget for DataLab. .. autoclass:: Macro """ from __future__ import annotations import abc import os import os.path as osp import re import sys import time from guidata.io import BaseIOHandler from guidata.utils.misc import to_string from guidata.widgets.codeeditor import CodeEditor from guidata.widgets.console.shell import PythonShellWidget from qtpy import QtCore as QC from qtpy import QtWidgets as QW import datalab from datalab.config import _ from datalab.env import execenv from datalab.gui import ObjItf UNTITLED_NB = 0 class MacroMeta(type(QC.QObject), abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class Macro(QC.QObject, ObjItf, metaclass=MacroMeta): """Object representing a macro: editor, path, open/save actions, etc. Args: console: Python shell widget name: Macro name. Defaults to None. """ PREFIX = "m" STARTED = QC.Signal() FINISHED = QC.Signal() MODIFIED = QC.Signal() FILE_HEADER = os.linesep.join( [ "# -*- coding: utf-8 -*-", "", '''""" DataLab Macro: "%s" ------------- This file is a DataLab macro. It can be executed from DataLab's Macro Panel, or from any Python environment, provided that the ``datalab`` package is installed. Please do not modify this file header. It is used to identify the file as a DataLab macro, and to store the macro's title. """''', "", "", ] ) MACRO_TITLE = _("Macro simple example") MACRO_SAMPLE = f"""# {MACRO_TITLE} import numpy as np from datalab.control.proxy import RemoteProxy proxy = RemoteProxy() z = np.random.rand(20, 20) proxy.add_image("toto", z) proxy.calc("fft") print("All done!") """ def __init__(self, console: PythonShellWidget, title: str | None = None) -> None: super().__init__() self.console = console self.title = self.get_untitled_title() if title is None else title self.editor = CodeEditor(language="python") self.editor.setLineWrapMode(QW.QPlainTextEdit.NoWrap) self.set_code(self.MACRO_SAMPLE) self.editor.modificationChanged.connect(self.modification_changed) self.process = None self.__last_exit_code = None @property def title(self) -> str: """Return object title""" return self.objectName() @title.setter def title(self, title: str) -> None: """Set object title""" self.setObjectName(title) def get_code(self) -> str: """Return code to be executed""" text = self.editor.toPlainText() return os.linesep.join(text.splitlines(False)) def set_code(self, code: str) -> None: """Set code to be executed Args: code: Code to be executed """ self.editor.setPlainText(code) def serialize(self, writer: BaseIOHandler) -> None: """Serialize this macro Args: writer: Writer """ with writer.group("title"): writer.write(self.title) with writer.group("contents"): writer.write(self.get_code()) def deserialize(self, reader: BaseIOHandler) -> None: """Deserialize this macro Args: reader: Reader """ with reader.group("title"): self.title = reader.read_any() with reader.group("contents"): self.set_code(reader.read_any()) def to_file(self, filename: str) -> None: """Save macro to file Args: filename: File name """ code = self.FILE_HEADER % self.title + self.get_code() with open(filename, "wb") as fdesc: fdesc.write(code.encode("utf-8")) def from_file(self, filename: str) -> None: """Load macro from file Args: filename: File name """ with open(filename, "rb") as fdesc: code = to_string(fdesc.read()).strip() # Retrieve title from header: lines = code.splitlines() for line in lines: # Match a line exactly like 'DataLab Macro: "Macro title"': if re.match(r"DataLab Macro: \".*\"", line): self.title = line.split('"')[1] break else: self.title = osp.basename(filename) # Remove header: header = (self.FILE_HEADER % self.title).strip() if code.startswith(header): code = code[len(header) :].strip() # Set code: self.set_code(code) @staticmethod def get_untitled_title() -> str: """Increment untitled number and return untitled macro title Returns: Untitled macro title """ global UNTITLED_NB # pylint: disable=global-statement UNTITLED_NB += 1 untitled = _("Untitled") return f"{untitled} {UNTITLED_NB:02d}" def modification_changed(self, state: bool) -> None: """Method called when macro's editor modification state changed Args: state: Modification state """ if state: self.MODIFIED.emit() @staticmethod def transcode(bytearr: QC.QByteArray) -> str: """Transcode bytes to locale str Args: bytearr: Byte array Returns: Locale str """ locale_codec = QC.QTextCodec.codecForLocale() return locale_codec.toUnicode(bytearr.data()) def get_stdout(self) -> str: """Return standard output str Returns: Standard output str """ self.process.setReadChannel(QC.QProcess.StandardOutput) bytearr = QC.QByteArray() while self.process.bytesAvailable(): bytearr += self.process.readAllStandardOutput() return self.transcode(bytearr) def get_stderr(self) -> str: """Return standard error str Returns: Standard error str """ self.process.setReadChannel(QC.QProcess.StandardError) bytearr = QC.QByteArray() while self.process.bytesAvailable(): bytearr += self.process.readAllStandardError() return self.transcode(bytearr) def write_output(self) -> None: """Write text as standard output""" self.console.write(self.get_stdout()) def write_error(self) -> None: """Write text as standard error""" self.console.write_error(self.get_stderr()) def print(self, text, error=False, eol_before=True) -> None: """Print text in console, with line separator Args: text: Text to be printed error: Print as error. Defaults to False. """ msg = f"---({time.ctime()})---[{text}]{os.linesep}" if eol_before: msg = os.linesep + msg self.console.write(msg, error=error, prompt=not error) def run(self) -> None: """Run macro""" self.process = QC.QProcess() code = self.get_code().replace('"', "'") datalab_path = osp.abspath(osp.join(osp.dirname(datalab.__file__), os.pardir)) # Reconfigure stdout/stderr to use UTF-8 encoding to avoid UnicodeEncodeError # on Windows with locales that don't support all Unicode characters # (e.g., cp1252) code = ( f"import sys; sys.path.append(r'{datalab_path}'); " f"sys.stdout.reconfigure(encoding='utf-8'); " f"sys.stderr.reconfigure(encoding='utf-8'){os.linesep}{code}" ) env = QC.QProcessEnvironment() env.insert(execenv.XMLRPCPORT_ENV, str(execenv.xmlrpcport)) sysenv = env.systemEnvironment() for key in sysenv.keys(): env.insert(key, sysenv.value(key)) self.process.readyReadStandardOutput.connect(self.write_output) self.process.readyReadStandardError.connect(self.write_error) self.process.finished.connect(self.finished) self.process.setProcessEnvironment(env) args = ["-c", code] self.process.start(sys.executable, args) running = self.process.waitForStarted(3000) if not running: self.print(_("# ==> Unable to run '%s' macro") % self.title, error=True) QW.QMessageBox.critical( self, _("Error"), _("Macro Python interpreter failed to start!") ) else: self.print(_("# ==> Running '%s' macro...") % self.title) self.STARTED.emit() def is_running(self) -> bool: """Is macro running? Returns: True if macro is running """ if self.process is not None: return self.process.state() == QC.QProcess.Running return False def kill(self) -> None: """Kill process associated to macro""" if self.process is not None: self.print(_("Terminating '%s' macro") % self.title, error=True) self.process.kill() # pylint: disable=unused-argument def finished(self, exit_code: int, exit_status: QC.QProcess.ExitStatus) -> None: """Process has finished Args: exit_code: Exit code exit_status: Exit status """ self.__last_exit_code = exit_code self.print(_("# <== '%s' macro has finished") % self.title, eol_before=False) self.FINISHED.emit() self.process = None def get_exit_code(self) -> int | None: """Return last exit code of the macro process Returns: Last exit code or None if process has not finished yet """ return self.__last_exit_code DataLab-1.0.2/datalab/gui/main.py000066400000000000000000002341411511411446000164560ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Main window =========== The :mod:`datalab.gui.main` module provides the main window of the DataLab project. .. autoclass:: DLMainWindow """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import abc import base64 import functools import os import os.path as osp import sys import time import webbrowser from typing import TYPE_CHECKING import guidata.dataset as gds import numpy as np import scipy.ndimage as spi import scipy.signal as sps from guidata import qthelpers as guidata_qth from guidata.configtools import get_icon from guidata.qthelpers import add_actions, create_action from guidata.widgets.console import DockableConsole from plotpy import config as plotpy_config from plotpy.builder import make from plotpy.constants import PlotType from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from qtpy.compat import getopenfilenames, getsavefilename from sigima.config import options as sigima_options from sigima.objects import ImageObj, SignalObj, create_image, create_signal import datalab from datalab import __docurl__, __homeurl__, __supporturl__, env from datalab.adapters_metadata.common import have_geometry_results from datalab.adapters_plotpy import create_adapter_from_object from datalab.config import ( APP_DESC, APP_NAME, DATAPATH, DEBUG, TEST_SEGFAULT_ERROR, Conf, _, ) from datalab.control.baseproxy import AbstractDLControl from datalab.control.remote import RemoteServer from datalab.env import execenv from datalab.gui.actionhandler import ActionCategory from datalab.gui.docks import DockablePlotWidget from datalab.gui.h5io import H5InputOutput from datalab.gui.panel import base, image, macro, signal from datalab.gui.settings import edit_settings from datalab.objectmodel import ObjectGroup from datalab.plugins import PluginRegistry, discover_plugins, discover_v020_plugins from datalab.utils import qthelpers as qth from datalab.utils.qthelpers import ( add_corner_menu, bring_to_front, configure_menu_about_to_show, ) from datalab.widgets import instconfviewer, logviewer, status from datalab.widgets.warningerror import go_to_error if TYPE_CHECKING: from typing import Literal from datalab.gui.panel.base import AbstractPanel, BaseDataPanel from datalab.gui.panel.image import ImagePanel from datalab.gui.panel.macro import MacroPanel from datalab.gui.panel.signal import SignalPanel from datalab.plugins import PluginBase def remote_controlled(func): """Decorator for remote-controlled methods""" @functools.wraps(func) def method_wrapper(*args, **kwargs): """Decorator wrapper function""" win = args[0] # extracting 'self' from method arguments already_busy = not win.ready_flag win.ready_flag = False try: output = func(*args, **kwargs) finally: if not already_busy: win.SIG_READY.emit() win.ready_flag = True QW.QApplication.processEvents() return output return method_wrapper class DLMainWindowMeta(type(QW.QMainWindow), abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class DLMainWindow(QW.QMainWindow, AbstractDLControl, metaclass=DLMainWindowMeta): """DataLab main window Args: console: enable internal console hide_on_close: True to hide window on close """ __instance = None SIG_READY = QC.Signal() SIG_SEND_OBJECT = QC.Signal(object) SIG_SEND_OBJECTLIST = QC.Signal(object) SIG_CLOSING = QC.Signal() @staticmethod def get_instance(console=None, hide_on_close=False): """Return singleton instance""" if DLMainWindow.__instance is None: return DLMainWindow(console, hide_on_close) return DLMainWindow.__instance def __init__(self, console=None, hide_on_close=False): """Initialize main window""" DLMainWindow.__instance = self super().__init__() self.setObjectName(APP_NAME) self.setWindowIcon(get_icon("DataLab.svg")) execenv.log(self, "Starting initialization") self.ready_flag = True self.hide_on_close = hide_on_close self.__old_size: tuple[int, int] | None = None self.__memory_warning = False self.memorystatus: status.MemoryStatus | None = None self.consolestatus: status.ConsoleStatus | None = None self.console: DockableConsole | None = None self.macropanel: MacroPanel | None = None self.main_toolbar: QW.QToolBar | None = None self.signalpanel_toolbar: QW.QToolBar | None = None self.imagepanel_toolbar: QW.QToolBar | None = None self.signalpanel: SignalPanel | None = None self.imagepanel: ImagePanel | None = None self.signalview: DockablePlotWidget | None = None self.imageview: DockablePlotWidget | None = None self.tabwidget: QW.QTabWidget | None = None self.tabmenu: QW.QMenu | None = None self.docks: dict[AbstractPanel | DockableConsole, QW.QDockWidget] | None = None self.h5inputoutput = H5InputOutput(self) self.openh5_action: QW.QAction | None = None self.saveh5_action: QW.QAction | None = None self.browseh5_action: QW.QAction | None = None self.settings_action: QW.QAction | None = None self.quit_action: QW.QAction | None = None self.autorefresh_action: QW.QAction | None = None self.showfirstonly_action: QW.QAction | None = None self.showlabel_action: QW.QAction | None = None self.file_menu: QW.QMenu | None = None self.create_menu: QW.QMenu | None = None self.edit_menu: QW.QMenu | None = None self.roi_menu: QW.QMenu | None = None self.operation_menu: QW.QMenu | None = None self.processing_menu: QW.QMenu | None = None self.analysis_menu: QW.QMenu | None = None self.plugins_menu: QW.QMenu | None = None self.view_menu: QW.QMenu | None = None self.help_menu: QW.QMenu | None = None self.__update_color_mode(startup=True) self.__is_modified = False self.set_modified(False) # Starting XML-RPC server thread self.remote_server = RemoteServer(self) if Conf.main.rpc_server_enabled.get(): self.remote_server.SIG_SERVER_PORT.connect(self.xmlrpc_server_started) self.remote_server.start() # Setup actions and menus if console is None: console = Conf.console.console_enabled.get() self.setup(console) self.__restore_pos_and_size() execenv.log(self, "Initialization done") # ------API related to XML-RPC remote control @staticmethod def xmlrpc_server_started(port): """XML-RPC server has started, writing comm port in configuration file""" Conf.main.rpc_server_port.set(port) def __get_current_basedatapanel(self) -> BaseDataPanel: """Return the current BaseDataPanel, or the signal panel if macro panel is active Returns: BaseDataPanel: current panel """ panel = self.tabwidget.currentWidget() if not isinstance(panel, base.BaseDataPanel): panel = self.signalpanel return panel def __get_datapanel( self, panel: Literal["signal", "image"] | None ) -> BaseDataPanel: """Return a specific BaseDataPanel. Args: panel: panel name. If None, current panel is used. Returns: Panel widget Raises: ValueError: if panel is unknown """ if not panel: return self.__get_current_basedatapanel() if panel == "signal": return self.signalpanel if panel == "image": return self.imagepanel raise ValueError(f"Unknown panel: {panel}") @remote_controlled def get_group_titles_with_object_info( self, ) -> tuple[list[str], list[list[str]], list[list[str]]]: """Return groups titles and lists of inner objects uuids and titles. Returns: Groups titles, lists of inner objects uuids and titles """ panel = self.__get_current_basedatapanel() return panel.objmodel.get_group_titles_with_object_info() @remote_controlled def get_object_titles( self, panel: Literal["signal", "image", "macro"] | None = None ) -> list[str]: """Get object (signal/image) list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name. If None, current data panel is used (i.e. signal or image panel). Returns: List of object titles Raises: ValueError: if panel is unknown """ if not panel or panel in ("signal", "image"): return self.__get_datapanel(panel).objmodel.get_object_titles() if panel == "macro": return self.macropanel.get_macro_titles() raise ValueError(f"Unknown panel: {panel}") @remote_controlled def get_object( self, nb_id_title: int | str | None = None, panel: Literal["signal", "image"] | None = None, ) -> SignalObj | ImageObj: """Get object (signal/image) from index. Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: Object Raises: KeyError: if object not found TypeError: if index_id_title type is invalid """ panelw = self.__get_datapanel(panel) if nb_id_title is None: return panelw.objview.get_current_object() if isinstance(nb_id_title, int): return panelw.objmodel.get_object_from_number(nb_id_title) if isinstance(nb_id_title, str): try: return panelw.objmodel[nb_id_title] except KeyError: try: return panelw.objmodel.get_object_from_title(nb_id_title) except KeyError as exc: raise KeyError( f"Invalid object index, id or title: {nb_id_title}" ) from exc raise TypeError(f"Invalid index_id_title type: {type(nb_id_title)}") def find_object_by_uuid( self, uuid: str ) -> SignalObj | ImageObj | ObjectGroup | None: """Find an object by UUID, searching across all panels. This method searches for an object in both signal and image panels, making it suitable for cross-panel operations (e.g., radial profile that takes an ImageObj and produces a SignalObj). Difference from get_object(): - get_object() requires specifying a panel and accepts number/id/title - find_object_by_uuid() searches all panels automatically using only UUID Args: uuid: UUID of the object to find Returns: The object if found in any panel, None otherwise """ for panel in (self.signalpanel, self.imagepanel): if panel is not None: try: return panel.objmodel[uuid] except KeyError: continue return None @remote_controlled def get_object_uuids( self, panel: Literal["signal", "image"] | None = None, group: int | str | None = None, ) -> list[str]: """Get object (signal/image) uuid list for current panel. Objects are sorted by group number and object index in group. Args: panel: panel name. If None, current panel is used. group: Group number, or group id, or group title. Defaults to None (all groups). Returns: List of object uuids Raises: ValueError: if panel is unknown """ objmodel = self.__get_datapanel(panel).objmodel if group is None: return objmodel.get_object_ids() if isinstance(group, int): grp = objmodel.get_group_from_number(group) else: try: grp = objmodel.get_group(group) except KeyError: grp = objmodel.get_group_from_title(group) if grp is None: raise KeyError(f"Invalid group index, id or title: {group}") return grp.get_object_ids() @remote_controlled def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: """Return selected objects uuids. Args: include_groups: If True, also return objects from selected groups. Returns: List of selected objects uuids. """ panel = self.__get_current_basedatapanel() return panel.objview.get_sel_object_uuids(include_groups) @remote_controlled def add_group( self, title: str, panel: Literal["signal", "image"] | None = None, select: bool = False, ) -> None: """Add group to DataLab. Args: title: Group title panel: Panel name. Defaults to None. select: Select the group after creation. Defaults to False. """ self.__get_datapanel(panel).add_group(title, select) @remote_controlled def select_objects( self, selection: list[int | str], panel: Literal["signal", "image"] | None = None, ) -> None: """Select objects in current panel. Args: selection: List of object numbers (1 to N) or uuids to select panel: panel name. If None, current panel is used. Defaults to None. """ panel = self.__get_datapanel(panel) panel.objview.select_objects(selection) @remote_controlled def select_groups( self, selection: list[int | str] | None = None, panel: Literal["signal", "image"] | None = None, ) -> None: """Select groups in current panel. Args: selection: List of group numbers (1 to N), or list of group uuids, or None to select all groups. Defaults to None. panel: panel name. If None, current panel is used. Defaults to None. """ panel = self.__get_datapanel(panel) panel.objview.select_groups(selection) @remote_controlled def delete_metadata( self, refresh_plot: bool = True, keep_roi: bool = False ) -> None: """Delete metadata of selected objects Args: refresh_plot: Refresh plot. Defaults to True. keep_roi: Keep ROI. Defaults to False. """ panel = self.__get_current_basedatapanel() panel.delete_metadata(refresh_plot, keep_roi) @remote_controlled def get_object_shapes( self, nb_id_title: int | str | None = None, panel: Literal["signal", "image"] | None = None, ) -> list: """Get plot item shapes associated to object (signal/image). Args: nb_id_title: Object number, or object id, or object title. Defaults to None (current object). panel: Panel name. Defaults to None (current panel). Returns: List of plot item shapes """ obj = self.get_object(nb_id_title, panel) return list(create_adapter_from_object(obj).iterate_shape_items(editable=False)) @remote_controlled def add_annotations_from_items( self, items: list, refresh_plot: bool = True, panel: Literal["signal", "image"] | None = None, ) -> None: """Add object annotations (annotation plot items). Args: items: annotation plot items refresh_plot: refresh plot. Defaults to True. panel: panel name. If None, current panel is used. """ panel = self.__get_datapanel(panel) panel.add_annotations_from_items(items, refresh_plot) @remote_controlled def add_label_with_title( self, title: str | None = None, panel: Literal["signal", "image"] | None = None ) -> None: """Add a label with object title on the associated plot Args: title: Label title. Defaults to None. If None, the title is the object title. panel: panel name. If None, current panel is used. """ self.__get_datapanel(panel).add_label_with_title(title) @remote_controlled def run_macro(self, number_or_title: int | str | None = None) -> None: """Run macro. Args: number: Number of the macro (starting at 1). Defaults to None (run current macro, or does nothing if there is no macro). """ self.macropanel.run_macro(number_or_title) @remote_controlled def stop_macro(self, number_or_title: int | str | None = None) -> None: """Stop macro. Args: number: Number of the macro (starting at 1). Defaults to None (stop current macro, or does nothing if there is no macro). """ self.macropanel.stop_macro(number_or_title) @remote_controlled def import_macro_from_file(self, filename: str) -> None: """Import macro from file Args: filename: Filename. """ self.macropanel.import_macro_from_file(filename) # ------Misc. @property def panels(self) -> tuple[AbstractPanel, ...]: """Return the tuple of implemented panels (signal, image) Returns: Tuple of panels """ return (self.signalpanel, self.imagepanel, self.macropanel) def __set_low_memory_state(self, state: bool) -> None: """Set memory warning state""" self.__memory_warning = state def confirm_memory_state(self) -> bool: # pragma: no cover """Check memory warning state and eventually show a warning dialog Returns: True if memory state is ok """ if not env.execenv.unattended and self.__memory_warning: threshold = Conf.main.available_memory_threshold.get() answer = QW.QMessageBox.critical( self, _("Warning"), _("Available memory is below %d MB.

Do you want to continue?") % threshold, QW.QMessageBox.Yes | QW.QMessageBox.No, ) return answer == QW.QMessageBox.Yes return True def check_stable_release(self) -> None: # pragma: no cover """Check if this is a stable release""" if datalab.__version__.replace(".", "").isdigit(): # This is a stable release return if "b" in datalab.__version__: # This is a beta release rel = _( "This software is in the beta stage of its release cycle. " "The focus of beta testing is providing a feature complete " "software for users interested in trying new features before " "the final release. However, beta software may not behave as " "expected and will probably have more bugs or performance issues " "than completed software." ) else: # This is an alpha release rel = _( "This software is in the alpha stage of its release cycle. " "The focus of alpha testing is providing an incomplete software " "for early testing of specific features by users. " "Please note that alpha software was not thoroughly tested " "by the developer before it is released." ) txtlist = [ f"{APP_NAME} v{datalab.__version__}:", "", _("This is not a stable release."), "", rel, ] if not env.execenv.unattended: QW.QMessageBox.warning( self, APP_NAME, "
".join(txtlist), QW.QMessageBox.Ok ) def check_for_previous_crash(self) -> None: # pragma: no cover """Check for previous crash""" if execenv.unattended and not execenv.do_not_quit: # Showing the log viewer for testing purpose (unattended mode) but only # if option 'do_not_quit' is not set, to avoid blocking the test suite self.__show_logviewer() elif Conf.main.faulthandler_log_available.get( False ) or Conf.main.traceback_log_available.get(False): txt = "
".join( [ logviewer.get_log_prompt_message(), "", _("Do you want to see available log files?"), ] ) btns = QW.QMessageBox.StandardButton.Yes | QW.QMessageBox.StandardButton.No choice = QW.QMessageBox.warning(self, APP_NAME, txt, btns) if choice == QW.QMessageBox.StandardButton.Yes: self.__show_logviewer() def check_for_v020_plugins(self) -> None: # pragma: no cover """Check for v0.20 plugins and warn user if any are found""" if Conf.main.v020_plugins_warning_ignore.get(False): return v020_plugins = discover_v020_plugins() if execenv.unattended or not v020_plugins: return # Build plugin list with clickable directory paths plugin_items = [] for name, directory_path in v020_plugins: if directory_path: # Create clickable file:// link to directory dir_url = QC.QUrl.fromLocalFile(directory_path).toString() plugin_items.append( f'

' ) else: plugin_items.append(f"
  • {name}
  • ") plugin_list = "
      " + "".join(plugin_items) + "
    " txtlist = [ "" + _("DataLab v0.20 plugins detected") + "", "", _("The following plugins are using the old DataLab v0.20 format:"), plugin_list, _( "These plugins will not be loaded in DataLab v1.0 because " "they are not compatible with the new architecture." ), "", _( "To use these plugins with DataLab v1.0, you need to update them. " "Please refer to the migration guide on the DataLab website " ) + '(Migration guide)' + _(" or in the PDF documentation."), "", _("Choosing to ignore this message will prevent it from appearing again."), ] answer = QW.QMessageBox.question( self, APP_NAME, "
    ".join(txtlist), QW.QMessageBox.Ok | QW.QMessageBox.Ignore, ) if answer == QW.QMessageBox.Ignore: Conf.main.v020_plugins_warning_ignore.set(True) def execute_post_show_actions(self) -> None: """Execute post-show actions""" self.check_stable_release() self.check_for_previous_crash() self.check_for_v020_plugins() tour = Conf.main.tour_enabled.get() if tour: Conf.main.tour_enabled.set(False) self.show_tour() def take_screenshot(self, name: str) -> None: # pragma: no cover """Take main window screenshot""" # For esthetic reasons, we set the central widget width to a lower value: old_width = self.tabwidget.maximumWidth() self.tabwidget.setMaximumWidth(500) # To avoid having screenshot depending on memory status, we set demo mode ON: self.memorystatus.set_demo_mode(True) qth.grab_save_window(self, f"{name}") # Restore previous state: self.memorystatus.set_demo_mode(False) self.tabwidget.setMaximumWidth(old_width) def take_menu_screenshots(self) -> None: # pragma: no cover """Take menu screenshots""" for panel in self.panels: if isinstance(panel, base.BaseDataPanel): self.tabwidget.setCurrentWidget(panel) for name in ( "file", "create", "edit", "roi", "view", "operation", "processing", "analysis", "help", ): menu = getattr(self, f"{name}_menu") menu.popup(self.pos()) qth.grab_save_window(menu, f"{panel.objectName()}_{name}") menu.close() if panel in (self.signalpanel, self.imagepanel): panel: BaseDataPanel # Take screenshots of Edit menu submenus (Metadata and Annotations) for submenu, suffix in ( (panel.acthandler.metadata_submenu, "_edit_metadata"), (panel.acthandler.annotations_submenu, "_edit_annotations"), ): submenu.popup(self.pos()) qth.grab_save_window(submenu, f"{panel.objectName()}{suffix}") submenu.close() # ------GUI setup def __restore_pos_and_size(self) -> None: """Restore main window position and size from configuration""" pos = Conf.main.window_position.get(None) if pos is not None: posx, posy = pos self.move(QC.QPoint(posx, posy)) size = Conf.main.window_size.get(None) if size is None: sgeo = self.screen().availableGeometry() sw, sh = sgeo.width(), sgeo.height() w = max(1200, min(1800, int(sw * 0.8))) h = max(700, min(1100, int(sh * 0.8))) size = (w, h) if pos is None: cx = sgeo.x() + (sw - w) // 2 cy = sgeo.y() + (sh - h) // 2 self.move(QC.QPoint(cx, cy)) width, height = size self.resize(QC.QSize(width, height)) if pos is not None and size is not None: sgeo = self.screen().availableGeometry() out_inf = posx < -int(0.9 * width) or posy < -int(0.9 * height) out_sup = posx > int(0.9 * sgeo.width()) or posy > int(0.9 * sgeo.height()) if len(QW.QApplication.screens()) == 1 and (out_inf or out_sup): # Main window is offscreen posx = min(max(posx, 0), sgeo.width() - width) posy = min(max(posy, 0), sgeo.height() - height) self.move(QC.QPoint(posx, posy)) def __restore_state(self) -> None: """Restore main window state from configuration""" state = Conf.main.window_state.get(None) if state is not None: state = base64.b64decode(state) self.restoreState(QC.QByteArray(state)) for widget in self.children(): if isinstance(widget, QW.QDockWidget): self.restoreDockWidget(widget) def __save_pos_size_and_state(self) -> None: """Save main window position, size and state to configuration""" is_maximized = self.windowState() == QC.Qt.WindowMaximized Conf.main.window_maximized.set(is_maximized) if not is_maximized: size = self.size() Conf.main.window_size.set((size.width(), size.height())) pos = self.pos() Conf.main.window_position.set((pos.x(), pos.y())) # Encoding window state into base64 string to avoid sending binary data # to the configuration file: state = base64.b64encode(self.saveState().data()).decode("ascii") Conf.main.window_state.set(state) def setup(self, console: bool = False) -> None: """Setup main window Args: console: True to setup console """ self.__register_plugins() self.__configure_statusbar(console) self.__setup_global_actions() self.__add_signal_image_panels() self.__create_plugins_actions() self.__setup_central_widget() self.__add_menus() if console: self.__setup_console() self.__update_actions(update_other_data_panel=True) self.__add_macro_panel() self.__configure_panels() # Now that everything is set up, we can restore the window state: self.__restore_state() def __register_plugins(self) -> None: """Register plugins""" with qth.try_or_log_error("Discovering plugins"): # Discovering plugins plugin_nb = len(discover_plugins()) execenv.log(self, f"{plugin_nb} plugin(s) found") for plugin_class in PluginRegistry.get_plugin_classes(): with qth.try_or_log_error(f"Instantiating plugin {plugin_class.__name__}"): # Instantiating plugin plugin: PluginBase = plugin_class() with qth.try_or_log_error(f"Registering plugin {plugin.info.name}"): # Registering plugin plugin.register(self) def __create_plugins_actions(self) -> None: """Create plugins actions""" with self.signalpanel.acthandler.new_category(ActionCategory.PLUGINS): with self.imagepanel.acthandler.new_category(ActionCategory.PLUGINS): for plugin in PluginRegistry.get_plugins(): with qth.try_or_log_error(f"Create actions for {plugin.info.name}"): plugin.create_actions() @staticmethod def __unregister_plugins() -> None: """Unregister plugins""" with qth.try_or_log_error("Unregistering plugins"): PluginRegistry.unregister_all_plugins() def __configure_statusbar(self, console: bool) -> None: """Configure status bar Args: console: True if console is enabled """ self.statusBar().showMessage(_("Welcome to %s!") % APP_NAME, 5000) if console: # Console status self.consolestatus = status.ConsoleStatus() self.statusBar().addPermanentWidget(self.consolestatus) # Plugin status pluginstatus = status.PluginStatus() self.statusBar().addPermanentWidget(pluginstatus) # XML-RPC server status xmlrpcstatus = status.XMLRPCStatus() xmlrpcstatus.set_port(self.remote_server.port) self.statusBar().addPermanentWidget(xmlrpcstatus) # Memory status threshold = Conf.main.available_memory_threshold.get() self.memorystatus = status.MemoryStatus(threshold) self.memorystatus.SIG_MEMORY_ALARM.connect(self.__set_low_memory_state) self.statusBar().addPermanentWidget(self.memorystatus) def __add_toolbar( self, title: str, position: Literal["top", "bottom", "left", "right"], name: str ) -> QW.QToolBar: """Add toolbar to main window Args: title: toolbar title position: toolbar position name: toolbar name (Qt object name) """ toolbar = QW.QToolBar(title, self) toolbar.setObjectName(name) area = getattr(QC.Qt, f"{position.capitalize()}ToolBarArea") self.addToolBar(area, toolbar) return toolbar def __setup_global_actions(self) -> None: """Setup global actions""" self.openh5_action = create_action( self, _("Open HDF5 files..."), icon=get_icon("fileopen_h5.svg"), tip=_("Open one or more HDF5 files"), triggered=lambda checked=False: self.open_h5_files(import_all=True), ) self.saveh5_action = create_action( self, _("Save to HDF5 file..."), icon=get_icon("filesave_h5.svg"), tip=_("Save to HDF5 file"), triggered=self.save_to_h5_file, ) self.browseh5_action = create_action( self, _("Browse HDF5 file..."), icon=get_icon("h5browser.svg"), tip=_("Browse an HDF5 file"), triggered=lambda checked=False: self.open_h5_files(import_all=None), ) self.settings_action = create_action( self, _("Settings..."), icon=get_icon("libre-gui-settings.svg"), tip=_("Open settings dialog"), triggered=self.__edit_settings, ) self.main_toolbar = self.__add_toolbar( _("Main Toolbar"), "left", "main_toolbar" ) add_actions( self.main_toolbar, [ self.openh5_action, self.saveh5_action, self.browseh5_action, None, self.settings_action, ], ) # Quit action for "File menu" (added when populating menu on demand) if self.hide_on_close: quit_text = _("Hide window") quit_tip = _("Hide DataLab window") else: quit_text = _("Quit") quit_tip = _("Quit application") if sys.platform != "darwin": # On macOS, the "Quit" action is automatically added to the application menu self.quit_action = create_action( self, quit_text, shortcut=QG.QKeySequence(QG.QKeySequence.Quit), icon=get_icon("libre-gui-close.svg"), tip=quit_tip, triggered=self.close, ) # View menu actions self.autorefresh_action = create_action( self, _("Auto-refresh"), icon=get_icon("refresh-auto.svg"), tip=_("Auto-refresh plot when object is modified, added or removed"), toggled=self.handle_autorefresh_action, ) self.showfirstonly_action = create_action( self, _("Show first object only"), icon=get_icon("show_first.svg"), tip=_("Show only the first selected object (signal or image)"), toggled=self.toggle_show_first_only, ) self.showlabel_action = create_action( self, _("Show graphical object titles"), icon=get_icon("show_titles.svg"), tip=_("Show or hide ROI and other graphical object titles or subtitles"), toggled=self.toggle_show_titles, ) def __add_signal_panel(self) -> None: """Setup signal toolbar, widgets and panel""" self.signalpanel_toolbar = self.__add_toolbar( _("Signal Panel Toolbar"), "left", "signalpanel_toolbar" ) dpw = DockablePlotWidget(self, PlotType.CURVE) self.signalpanel = signal.SignalPanel(self, dpw, self.signalpanel_toolbar) self.signalpanel.SIG_STATUS_MESSAGE.connect(self.statusBar().showMessage) plot = dpw.get_plot() plot.add_item(make.legend("TR")) plot.SIG_ITEM_PARAMETERS_CHANGED.connect( self.signalpanel.plot_item_parameters_changed ) plot.SIG_ITEM_MOVED.connect(self.signalpanel.plot_item_moved) return dpw def __add_image_panel(self) -> None: """Setup image toolbar, widgets and panel""" self.imagepanel_toolbar = self.__add_toolbar( _("Image Panel Toolbar"), "left", "imagepanel_toolbar" ) dpw = DockablePlotWidget(self, PlotType.IMAGE) self.imagepanel = image.ImagePanel(self, dpw, self.imagepanel_toolbar) # ----------------------------------------------------------------------------- # # Before eventually disabling the "peritem" mode by default, wait for the # # plotpy bug to be fixed (peritem mode is not compatible with multiple image # # items): # for cspanel in ( # self.imagepanel.plotwidget.get_xcs_panel(), # self.imagepanel.plotwidget.get_ycs_panel(), # ): # cspanel.peritem_ac.setChecked(False) # ----------------------------------------------------------------------------- self.imagepanel.SIG_STATUS_MESSAGE.connect(self.statusBar().showMessage) plot = dpw.get_plot() plot.SIG_ITEM_PARAMETERS_CHANGED.connect( self.imagepanel.plot_item_parameters_changed ) plot.SIG_ITEM_MOVED.connect(self.imagepanel.plot_item_moved) plot.SIG_LUT_CHANGED.connect(self.imagepanel.plot_lut_changed) return dpw def __update_tab_menu(self) -> None: """Update tab menu""" current_panel: BaseDataPanel = self.tabwidget.currentWidget() add_actions(self.tabmenu, current_panel.get_context_menu().actions()) def __add_signal_image_panels(self) -> None: """Add signal and image panels""" self.tabwidget = QW.QTabWidget() self.tabmenu = add_corner_menu(self.tabwidget) configure_menu_about_to_show(self.tabmenu, self.__update_tab_menu) self.signalview = self.__add_signal_panel() self.imageview = self.__add_image_panel() sdock = self.__add_dockwidget(self.signalview, title=_("Signal View")) idock = self.__add_dockwidget(self.imageview, title=_("Image View")) self.tabifyDockWidget(sdock, idock) self.docks = {self.signalpanel: sdock, self.imagepanel: idock} self.tabwidget.currentChanged.connect(self.__tab_index_changed) self.signalpanel.SIG_OBJECT_ADDED.connect( lambda: self.set_current_panel("signal") ) self.imagepanel.SIG_OBJECT_ADDED.connect( lambda: self.set_current_panel("image") ) for panel in (self.signalpanel, self.imagepanel): panel.setup_panel() def __setup_central_widget(self) -> None: """Setup central widget (main panel)""" self.tabwidget.setMaximumWidth(600) s_idx = self.tabwidget.addTab( self.signalpanel, get_icon("signal.svg"), _("Signal Panel") ) i_idx = self.tabwidget.addTab( self.imagepanel, get_icon("image.svg"), _("Image Panel") ) self.tabwidget.setTabToolTip( s_idx, _("1D Signals: Manage and process one-dimensional data") ) self.tabwidget.setTabToolTip( i_idx, _("2D Images: Manage and process two-dimensional data") ) # Apply enhanced tab bar styling tab_bar = self.tabwidget.tabBar() font = tab_bar.font() font.setPointSize(10) tab_bar.setFont(font) # Use QTimer to ensure tab bar is properly sized first QC.QTimer.singleShot(0, self.__update_tab_icon_size) self.setCentralWidget(self.tabwidget) def __update_tab_icon_size(self) -> None: """Update tab icon size based on tab bar height""" tab_bar = self.tabwidget.tabBar() if tab_bar.height() > 0: # Use approximately 80% of tab height for icon size icon_size = int(tab_bar.height() * 0.8) self.tabwidget.setIconSize(QC.QSize(icon_size, icon_size)) @staticmethod def __get_local_doc_path() -> str | None: """Return local documentation path, if it exists""" locale = QC.QLocale.system().name() for suffix in ("_" + locale[:2], "_en"): path = osp.join(DATAPATH, "doc", f"{APP_NAME}{suffix}.pdf") if osp.isfile(path): return path return None def __add_menus(self) -> None: """Adding menus""" self.file_menu = self.menuBar().addMenu(_("&File")) configure_menu_about_to_show(self.file_menu, self.__update_file_menu) self.create_menu = self.menuBar().addMenu(_("&Create")) self.edit_menu = self.menuBar().addMenu(_("&Edit")) self.roi_menu = self.menuBar().addMenu(_("ROI")) self.operation_menu = self.menuBar().addMenu(_("Operations")) self.processing_menu = self.menuBar().addMenu(_("Processing")) self.analysis_menu = self.menuBar().addMenu(_("Analysis")) self.plugins_menu = self.menuBar().addMenu(_("Plugins")) self.view_menu = self.menuBar().addMenu(_("&View")) configure_menu_about_to_show(self.view_menu, self.__update_view_menu) self.help_menu = self.menuBar().addMenu("?") for menu in ( self.create_menu, self.edit_menu, self.roi_menu, self.operation_menu, self.processing_menu, self.analysis_menu, self.plugins_menu, ): configure_menu_about_to_show(menu, self.__update_generic_menu) help_menu_actions = [ create_action( self, _("Online documentation"), icon=get_icon("libre-gui-help.svg"), triggered=lambda: webbrowser.open(__docurl__), ), ] localdocpath = self.__get_local_doc_path() if localdocpath is not None: help_menu_actions += [ create_action( self, _("PDF documentation"), icon=get_icon("help_pdf.svg"), triggered=lambda: webbrowser.open(localdocpath), ), ] help_menu_actions += [ create_action( self, _("Tour") + "...", icon=get_icon("tour.svg"), triggered=self.show_tour, ), create_action( self, _("Demo") + "...", icon=get_icon("play_demo.svg"), triggered=self.play_demo, ), None, ] if TEST_SEGFAULT_ERROR: help_menu_actions += [ create_action( self, _("Test segfault/Python error"), triggered=self.test_segfault_error, ) ] help_menu_actions += [ create_action( self, _("Log files") + "...", icon=get_icon("logs.svg"), triggered=self.__show_logviewer, ), create_action( self, _("Installation and configuration") + "...", icon=get_icon("libre-toolbox.svg"), triggered=lambda: instconfviewer.exec_datalab_installconfig_dialog( self ), ), None, create_action( self, _("Project home page"), icon=get_icon("libre-gui-globe.svg"), triggered=lambda: webbrowser.open(__homeurl__), ), create_action( self, _("Bug report or feature request"), icon=get_icon("libre-gui-globe.svg"), triggered=lambda: webbrowser.open(__supporturl__), ), create_action( self, _("About..."), icon=get_icon("libre-gui-about.svg"), triggered=self.__about, ), ] add_actions(self.help_menu, help_menu_actions) def __update_console_show_mode(self) -> None: """Update console show mode from configuration option Console show mode is whether the console is shown or not when an error occurs. """ if self.console is not None: state = Conf.console.show_console_on_error.get() cdock = self.docks[self.console] if not state and cdock.isVisible(): cdock.hide() if state: self.console.exception_occurred.connect(self.console.show_console) else: self.console.exception_occurred.disconnect(self.console.show_console) def __setup_console(self) -> None: """Add an internal console""" ns = { "dl": self, "np": np, "sps": sps, "spi": spi, "os": os, "sys": sys, "osp": osp, "time": time, } msg = _( "Welcome to DataLab console!\n" "---------------------------\n" "You can access the main window with the 'dl' variable.\n" "Example:\n" " o = dl.get_object() # returns currently selected object\n" " o = dl[1] # returns object number 1\n" " o = dl['My image'] # returns object which title is 'My image'\n" " o.data # returns object data\n" "Modules imported at startup: " "os, sys, os.path as osp, time, " "numpy as np, scipy.signal as sps, scipy.ndimage as spi" ) self.console = DockableConsole(self, namespace=ns, message=msg, debug=DEBUG) self.console.setMaximumBlockCount(Conf.console.max_line_count.get(5000)) self.console.go_to_error.connect(go_to_error) cdock = self.__add_dockwidget(self.console, _("Console")) self.docks[self.console] = cdock cdock.hide() self.console.interpreter.widget_proxy.sig_new_prompt.connect( lambda txt: self.repopulate_panel_trees() ) self.__update_console_show_mode() self.console.exception_occurred.connect(self.consolestatus.exception_occurred) cdock.visibilityChanged.connect(self.consolestatus.console_visibility_changed) self.consolestatus.SIG_SHOW_CONSOLE.connect(self.console.show_console) def __add_macro_panel(self) -> None: """Add macro panel""" self.macropanel = macro.MacroPanel(self) mdock = self.__add_dockwidget(self.macropanel, _("Macro Panel")) self.docks[self.macropanel] = mdock self.tabifyDockWidget(self.docks[self.imagepanel], mdock) self.docks[self.signalpanel].raise_() def __configure_panels(self) -> None: """Configure panels""" # Connectings signals for panel in self.panels: panel.SIG_OBJECT_ADDED.connect(self.set_modified) panel.SIG_OBJECT_REMOVED.connect(self.set_modified) self.macropanel.SIG_OBJECT_MODIFIED.connect(self.set_modified) # Initializing common panel actions self.autorefresh_action.setChecked(Conf.view.auto_refresh.get(True)) self.showfirstonly_action.setChecked(Conf.view.show_first_only.get(False)) self.showlabel_action.setChecked(Conf.view.show_label.get(False)) # Restoring current tab from last session tab_idx = Conf.main.current_tab.get(None) if tab_idx is not None: self.tabwidget.setCurrentIndex(tab_idx) # Set focus on current panel, so that keyboard shortcuts work (Fixes #10) self.tabwidget.currentWidget().setFocus() def set_process_isolation_enabled(self, state: bool) -> None: """Enable/disable process isolation Args: state: True to enable process isolation """ for processor in (self.imagepanel.processor, self.signalpanel.processor): processor.set_process_isolation_enabled(state) # ------Remote control @remote_controlled def get_current_panel(self) -> str: """Return current panel name Returns: Panel name (valid values: "signal", "image", "macro") """ panel = self.tabwidget.currentWidget() dock = self.docks[panel] if panel is self.signalpanel and dock.isVisible(): return "signal" if panel is self.imagepanel and dock.isVisible(): return "image" return "macro" @remote_controlled def set_current_panel( self, panel: Literal["signal", "image", "macro"] | BaseDataPanel ) -> None: """Switch to panel. Args: panel: panel name or panel instance Raises: ValueError: unknown panel """ if not isinstance(panel, str): if panel not in self.panels: raise ValueError(f"Unknown panel {panel}") panel = ( "signal" if panel is self.signalpanel else "image" if panel is self.imagepanel else "macro" ) if self.get_current_panel() == panel: if panel in ("signal", "image"): # Force tab index changed event to be sure that the dock associated # to the current panel is raised self.__tab_index_changed(self.tabwidget.currentIndex()) return if panel == "signal": self.tabwidget.setCurrentWidget(self.signalpanel) elif panel == "image": self.tabwidget.setCurrentWidget(self.imagepanel) elif panel == "macro": self.docks[self.macropanel].raise_() else: raise ValueError(f"Unknown panel {panel}") @remote_controlled def calc(self, name: str, param: gds.DataSet | None = None) -> None: """Call computation feature ``name`` .. note:: This calls either the processor's ``compute_`` method (if it exists), or the processor's ```` computation feature (if it is registered, using the ``run_feature`` method). It looks for the function in all panels, starting with the current one. Args: name: Compute function name param: Compute function parameter. Defaults to None. Raises: ValueError: unknown function """ panels = [self.tabwidget.currentWidget()] panels.extend(self.panels) for panel in panels: if isinstance(panel, base.BaseDataPanel): name = name.removeprefix("compute_") panel: base.BaseDataPanel # Some computation features are wrapped in a method with a # "compute_" prefix, so we check for this first: func = getattr(panel.processor, f"compute_{name}", None) if func is not None: if param is None: func() else: func(param) return # If the function is not wrapped, we check if it is a # registered feature: try: feature = panel.processor.get_feature(name) panel.processor.run_feature(feature, param) return except ValueError: continue raise ValueError(f"Unknown computation function {name}") # ------GUI refresh def has_objects(self) -> bool: """Return True if sig/ima panels have any object""" return sum(len(panel) for panel in self.panels) > 0 def set_modified(self, state: bool = True) -> None: """Set mainwindow modified state""" state = state and self.has_objects() self.__is_modified = state title = APP_NAME + ("*" if state else "") if not datalab.__version__.replace(".", "").isdigit(): title += f" [{datalab.__version__}]" self.setWindowTitle(title) def __add_dockwidget(self, child, title: str) -> QW.QDockWidget: """Add QDockWidget and toggleViewAction""" dockwidget, location = child.create_dockwidget(title) dockwidget.setObjectName(title) self.addDockWidget(location, dockwidget) return dockwidget def repopulate_panel_trees(self) -> None: """Repopulate all panel trees""" for panel in self.panels: if isinstance(panel, base.BaseDataPanel): panel.objview.populate_tree() def __update_actions(self, update_other_data_panel: bool = False) -> None: """Update selection dependent actions Args: update_other_data_panel: True to update other data panel actions (i.e. if the current panel is the signal panel, also update the image panel actions, and vice-versa) """ is_signal = self.tabwidget.currentWidget() is self.signalpanel panel = self.signalpanel if is_signal else self.imagepanel other_panel = self.imagepanel if is_signal else self.signalpanel if update_other_data_panel: other_panel.selection_changed() panel.selection_changed() self.signalpanel_toolbar.setVisible(is_signal) self.imagepanel_toolbar.setVisible(not is_signal) if self.plugins_menu is not None: plugin_actions = panel.get_category_actions(ActionCategory.PLUGINS) self.plugins_menu.setEnabled(len(plugin_actions) > 0) def __tab_index_changed(self, index: int) -> None: """Switch from signal to image mode, or vice-versa""" dock = self.docks[self.tabwidget.widget(index)] dock.raise_() self.__update_actions() def __update_generic_menu(self, menu: QW.QMenu | None = None) -> None: """Update menu before showing up -- Generic method""" if menu is None: menu = self.sender() menu.clear() panel = self.tabwidget.currentWidget() category = { self.file_menu: ActionCategory.FILE, self.create_menu: ActionCategory.CREATE, self.edit_menu: ActionCategory.EDIT, self.roi_menu: ActionCategory.ROI, self.view_menu: ActionCategory.VIEW, self.operation_menu: ActionCategory.OPERATION, self.processing_menu: ActionCategory.PROCESSING, self.analysis_menu: ActionCategory.ANALYSIS, self.plugins_menu: ActionCategory.PLUGINS, }[menu] actions = panel.get_category_actions(category) add_actions(menu, actions) def __update_file_menu(self) -> None: """Update file menu before showing up""" self.saveh5_action.setEnabled(self.has_objects()) self.__update_generic_menu(self.file_menu) add_actions( self.file_menu, [ None, self.openh5_action, self.saveh5_action, self.browseh5_action, None, self.settings_action, ], ) if self.quit_action is not None: add_actions(self.file_menu, [self.quit_action]) def __update_view_menu(self) -> None: """Update view menu before showing up""" self.__update_generic_menu(self.view_menu) add_actions(self.view_menu, [None] + self.createPopupMenu().actions()) @remote_controlled def toggle_show_titles(self, state: bool) -> None: """Toggle show annotations option Args: state: state """ Conf.view.show_label.set(state) for datapanel in (self.signalpanel, self.imagepanel): for obj in datapanel.objmodel: obj.set_metadata_option("showlabel", state) datapanel.refresh_plot("selected", True, False) def handle_autorefresh_action(self, state: bool) -> None: """Handle auto-refresh action from UI (with confirmation dialog) Args: state: desired state """ # If disabling auto-refresh, show confirmation dialog if not state: txtlist = [ "" + _("Disable auto-refresh?") + "", "", _( "When auto-refresh is disabled, the plot view will not " "automatically update when objects are modified, added or removed." ), "", _( "You will need to manually click the refresh button to update " "the view." ), "", _("Are you sure you want to disable auto-refresh?"), ] answer = QW.QMessageBox.question( self, APP_NAME, "
    ".join(txtlist), QW.QMessageBox.Yes | QW.QMessageBox.No, QW.QMessageBox.No, ) if answer == QW.QMessageBox.No: # User cancelled, restore the action's checked state self.autorefresh_action.blockSignals(True) self.autorefresh_action.setChecked(True) self.autorefresh_action.blockSignals(False) return # Apply the change self.toggle_auto_refresh(state) @remote_controlled def toggle_auto_refresh(self, state: bool) -> None: """Toggle auto refresh option Args: state: state """ Conf.view.auto_refresh.set(state) for datapanel in (self.signalpanel, self.imagepanel): datapanel.plothandler.set_auto_refresh(state) @remote_controlled def toggle_show_first_only(self, state: bool) -> None: """Toggle show first only option Args: state: state """ Conf.view.show_first_only.set(state) for datapanel in (self.signalpanel, self.imagepanel): datapanel.plothandler.set_show_first_only(state) # ------Common features @remote_controlled def reset_all(self) -> None: """Reset all application data""" for panel in self.panels: if panel is not None: panel.remove_all_objects() @staticmethod def __check_h5file(filename: str, operation: str) -> str: """Check HDF5 filename""" filename = osp.abspath(osp.normpath(filename)) bname = osp.basename(filename) if operation == "load" and not osp.isfile(filename): raise IOError(f'File not found "{bname}"') Conf.main.base_dir.set(filename) return filename @remote_controlled def save_to_h5_file(self, filename=None) -> None: """Save to a DataLab HDF5 file Args: filename: HDF5 filename. If None, a file dialog is opened. Raises: IOError: if filename is invalid or file cannot be saved. """ if filename is None: basedir = Conf.main.base_dir.get() with qth.save_restore_stds(): filename, _fl = getsavefilename( self, _("Save"), basedir, "HDF5 (*.h5 *.hdf5 *.hdf *.he5);;All files (*)", ) if not filename: return with qth.qt_try_loadsave_file(self, filename, "save"): filename = self.__check_h5file(filename, "save") self.h5inputoutput.save_file(filename) self.set_modified(False) @remote_controlled def open_h5_files( self, h5files: list[str] | None = None, import_all: bool | None = None, reset_all: bool | None = None, ) -> None: """Open a DataLab HDF5 file or import from any other HDF5 file. Args: h5files: HDF5 filenames (optionally with dataset name, separated by ":") import_all: Import all datasets from HDF5 files reset_all: Reset all application data before importing """ if not self.confirm_memory_state(): return if reset_all is None: # When workspace is empty, always preserve UUIDs (reset_all=True) # since there's no risk of conflicts if not self.has_objects(): reset_all = True else: reset_all = Conf.io.h5_clear_workspace.get() if Conf.io.h5_clear_workspace_ask.get(): # Build message with optional note for native workspace import msg = _( "Do you want to clear current workspace " "(signals and images) before importing data from " "HDF5 files?" ) # Only show the UUID conflict note when importing native DataLab # workspace files (import_all=True), not when using HDF5 browser if import_all: msg += "

    " + _( "Note: If you choose No, when importing " "DataLab workspace files, objects with conflicting " "identifiers will have their processing history lost " "(features like 'Show source' and 'Recompute' will not " "work for those objects). Non-conflicting objects will " "preserve their processing history." ) msg += "

    " + _( "Choosing to ignore this message will prevent it " "from being displayed again, and will use the " "current setting (%s)." ) % (_("Yes") if reset_all else _("No")) answer = QW.QMessageBox.question( self, _("Warning"), msg, QW.QMessageBox.Yes | QW.QMessageBox.No | QW.QMessageBox.Ignore, ) if answer == QW.QMessageBox.Yes: reset_all = True elif answer == QW.QMessageBox.No: reset_all = False elif answer == QW.QMessageBox.Ignore: Conf.io.h5_clear_workspace_ask.set(False) if h5files is None: basedir = Conf.main.base_dir.get() with qth.save_restore_stds(): h5files, _fl = getopenfilenames( self, _("Open"), basedir, _("HDF5 files (*.h5 *.hdf5 *.hdf *.he5);;All files (*)"), ) if not h5files: return filenames, dsetnames = [], [] for fname_with_dset in h5files: if "," in fname_with_dset: filename, dsetname = fname_with_dset.split(",") dsetnames.append(dsetname) else: filename = fname_with_dset dsetnames.append(None) filenames.append(filename) if import_all is None and all(dsetname is None for dsetname in dsetnames): self.browse_h5_files(filenames, reset_all) return for filename, dsetname in zip(filenames, dsetnames): if import_all is None and dsetname is None: self.import_h5_file(filename, reset_all) else: with qth.qt_try_loadsave_file(self, filename, "load"): filename = self.__check_h5file(filename, "load") if dsetname is None: self.h5inputoutput.open_file(filename, import_all, reset_all) else: self.h5inputoutput.import_dataset_from_file(filename, dsetname) reset_all = False def browse_h5_files(self, filenames: list[str], reset_all: bool) -> None: """Browse HDF5 files Args: filenames: HDF5 filenames reset_all: Reset all application data before importing """ for filename in filenames: self.__check_h5file(filename, "load") self.h5inputoutput.import_files(filenames, False, reset_all) @remote_controlled def import_h5_file(self, filename: str, reset_all: bool | None = None) -> None: """Import HDF5 file into DataLab Args: filename: HDF5 filename (optionally with dataset name, separated by ":") reset_all: Delete all DataLab signals/images before importing data """ with qth.qt_try_loadsave_file(self, filename, "load"): filename = self.__check_h5file(filename, "load") self.h5inputoutput.import_files([filename], False, reset_all) # This method is intentionally *not* remote controlled # (see TODO regarding RemoteClient.add_object method) # @remote_controlled def add_object( self, obj: SignalObj | ImageObj, group_id: str = "", set_current=True ) -> None: """Add object - signal or image Args: obj: object to add (signal or image) group_id: group ID (optional) set_current: True to set the object as current object """ if self.confirm_memory_state(): if isinstance(obj, SignalObj): self.signalpanel.add_object(obj, group_id, set_current) elif isinstance(obj, ImageObj): self.imagepanel.add_object(obj, group_id, set_current) else: raise TypeError(f"Unsupported object type {type(obj)}") @remote_controlled def load_from_files(self, filenames: list[str]) -> None: """Open objects from files in current panel (signals/images) Args: filenames: list of filenames """ panel = self.__get_current_basedatapanel() panel.load_from_files(filenames) @remote_controlled def load_from_directory(self, path: str) -> None: """Open objects from directory in current panel (signals/images). Args: path: directory path """ panel = self.__get_current_basedatapanel() panel.load_from_directory(path) # ------Other methods related to AbstractDLControl interface def get_version(self) -> str: """Return DataLab public version. Returns: DataLab version """ return datalab.__version__ def close_application(self) -> None: # Implementing AbstractDLControl interface """Close DataLab application""" self.close() def raise_window(self) -> None: # Implementing AbstractDLControl interface """Raise DataLab window""" bring_to_front(self) def add_signal( self, title: str, xdata: np.ndarray, ydata: np.ndarray, xunit: str = "", yunit: str = "", xlabel: str = "", ylabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add signal data to DataLab. Args: title: Signal title xdata: X data ydata: Y data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" group_id: group id in which to add the signal. Defaults to "" set_current: if True, set the added signal as current Returns: True if signal was added successfully, False otherwise Raises: ValueError: Invalid xdata dtype ValueError: Invalid ydata dtype """ obj = create_signal( title, xdata, ydata, units=(xunit, yunit), labels=(xlabel, ylabel), ) self.add_object(obj, group_id, set_current) return True def add_image( self, title: str, data: np.ndarray, xunit: str = "", yunit: str = "", zunit: str = "", xlabel: str = "", ylabel: str = "", zlabel: str = "", group_id: str = "", set_current: bool = True, ) -> bool: # pylint: disable=too-many-arguments """Add image data to DataLab. Args: title: Image title data: Image data xunit: X unit. Defaults to "" yunit: Y unit. Defaults to "" zunit: Z unit. Defaults to "" xlabel: X label. Defaults to "" ylabel: Y label. Defaults to "" zlabel: Z label. Defaults to "" group_id: group id in which to add the image. Defaults to "" set_current: if True, set the added image as current Returns: True if image was added successfully, False otherwise Raises: ValueError: Invalid data dtype """ obj = create_image( title, data, units=(xunit, yunit, zunit), labels=(xlabel, ylabel, zlabel), ) self.add_object(obj, group_id, set_current) return True # ------? def __about(self) -> None: # pragma: no cover """About dialog box""" self.check_stable_release() if self.remote_server.port is None: xrpcstate = '' + _("not started") + "" else: xrpcstate = _("started (port %s)") % self.remote_server.port xrpcstate = f"{xrpcstate}" if Conf.main.process_isolation_enabled.get(): pistate = "" + _("enabled") + "" else: pistate = "" + _("disabled") + "" adv_conf = "
    ".join( [ "" + _("Advanced configuration:") + "", "• " + _("XML-RPC server:") + " " + xrpcstate, "• " + _("Process isolation:") + " " + pistate, ] ) created_by = _("Created by") dev_by = _("Developed and maintained by %s open-source project team") % APP_NAME cprght = "2023 DataLab Platform Developers" QW.QMessageBox.about( self, _("About") + " " + APP_NAME, f"""{APP_NAME} v{datalab.__version__}
    {APP_DESC}

    {created_by} Pierre Raybaut
    {dev_by}
    Copyright © {cprght}

    {adv_conf}""", ) def __update_color_mode(self, startup: bool = False) -> None: """Update color mode Args: startup: True if method is called during application startup (in that case, color theme is applied only if mode != "auto") """ mode = Conf.main.color_mode.get() if startup and mode == "auto": guidata_qth.win32_fix_title_bar_background(self) return # Prevent Qt from refreshing the window when changing the color mode: self.setUpdatesEnabled(False) plotpy_config.set_plotpy_color_mode(mode) if self.console is not None: self.console.update_color_mode() if self.macropanel is not None: self.macropanel.update_color_mode() if self.docks is not None: for dock in self.docks.values(): widget = dock.widget() if isinstance(widget, DockablePlotWidget): widget.update_color_mode() # Allow Qt to refresh the window: self.setUpdatesEnabled(True) def __edit_settings(self) -> None: """Edit settings""" changed_options = edit_settings(self) sigima_options.fft_shift_enabled.set(Conf.proc.fft_shift_enabled.get()) sigima_options.auto_normalize_kernel.set(Conf.proc.auto_normalize_kernel.get()) refresh_signal_panel = refresh_image_panel = False # Handling changes to shape/marker parameters s_view_result_param = ( "sig_shape_param" in changed_options or "sig_marker_param" in changed_options ) and have_geometry_results(self.signalpanel.objview.get_sel_objects(True)) i_view_result_param = ( "ima_shape_param" in changed_options or "ima_marker_param" in changed_options ) and have_geometry_results(self.imagepanel.objview.get_sel_objects(True)) if (s_view_result_param or i_view_result_param) and ( QW.QMessageBox.question( self, _("Apply settings to existing results?"), _( "Visualization settings for annotated shapes and " "markers have been modified.\n\n" "Do you want to apply these settings to existing results " "in the workspace?" ), QW.QMessageBox.Yes | QW.QMessageBox.No, QW.QMessageBox.No, ) == QW.QMessageBox.Yes ): if s_view_result_param: self.signalpanel.plothandler.refresh_all_shape_items() if i_view_result_param: self.imagepanel.plothandler.refresh_all_shape_items() for option in changed_options: if option in ( "max_shapes_to_draw", "max_cells_in_label", "max_cols_in_label", ): refresh_signal_panel = refresh_image_panel = True if option == "show_result_label": for panel in (self.signalpanel, self.imagepanel): panel.acthandler.show_label_action.setChecked( Conf.view.show_result_label.get() ) if option == "color_mode": self.__update_color_mode() if option == "show_console_on_error": self.__update_console_show_mode() if option == "plot_toolbar_position": for dock in self.docks.values(): widget = dock.widget() if isinstance(widget, DockablePlotWidget): widget.update_toolbar_position() if option.startswith(("sig_autodownsampling", "sig_linewidth")): refresh_signal_panel = True if option == "sig_autoscale_margin_percent": # Update signal plot widget autoscale margin sig_margin = Conf.view.sig_autoscale_margin_percent.get() for dock in self.docks.values(): widget: DockablePlotWidget | QW.QWidget = dock.widget() if isinstance(widget, DockablePlotWidget): plot = widget.get_plot() if ( hasattr(plot, "options") and plot.options.type == PlotType.CURVE ): plot.set_autoscale_margin_percent(sig_margin) if option == "ima_autoscale_margin_percent": # Update image plot widget autoscale margin ima_margin = Conf.view.ima_autoscale_margin_percent.get() for dock in self.docks.values(): widget: DockablePlotWidget | QW.QWidget = dock.widget() if isinstance(widget, DockablePlotWidget): plot = widget.get_plot() if ( hasattr(plot, "options") and plot.options.type == PlotType.IMAGE ): plot.set_autoscale_margin_percent(ima_margin) if option == "ima_defaults" and len(self.imagepanel) > 0: answer = QW.QMessageBox.question( self, _("Visualization settings"), _( "Default visualization settings have changed.

    " "Do you want to update all active %s objects?" ) % _("image"), QW.QMessageBox.Yes | QW.QMessageBox.No, ) if answer == QW.QMessageBox.Yes: self.imagepanel.update_metadata_view_settings() if option == "ima_aspect_ratio_1_1": refresh_image_panel = True if refresh_signal_panel: self.signalpanel.manual_refresh() if refresh_image_panel: self.imagepanel.manual_refresh() def __show_logviewer(self) -> None: """Show error logs""" logviewer.exec_datalab_logviewer_dialog(self) def play_demo(self) -> None: """Play demo""" # pylint: disable=import-outside-toplevel # pylint: disable=cyclic-import from datalab.tests.scenarios import demo demo.play_demo(self) def show_tour(self) -> None: """Show tour""" # pylint: disable=import-outside-toplevel # pylint: disable=cyclic-import from datalab.gui import tour tour.start(self) @staticmethod def test_segfault_error() -> None: """Generate errors (both fault and traceback)""" import ctypes # pylint: disable=import-outside-toplevel ctypes.string_at(0) raise RuntimeError("!!! Testing RuntimeError !!!") def show(self) -> None: """Reimplement QMainWindow method""" super().show() if self.__old_size is not None: self.resize(self.__old_size) # ------Close window def close_properly(self) -> bool: """Close properly Returns: True if closed properly, False otherwise """ if not env.execenv.unattended and self.__is_modified: answer = QW.QMessageBox.warning( self, _("Quit"), _( "Do you want to save all signals and images " "to an HDF5 file before quitting DataLab?" ), QW.QMessageBox.Yes | QW.QMessageBox.No | QW.QMessageBox.Cancel, ) if answer == QW.QMessageBox.Yes: self.save_to_h5_file() if self.__is_modified: return False elif answer == QW.QMessageBox.Cancel: return False self.hide() # Avoid showing individual widgets closing one after the other for panel in self.panels: if panel is not None: panel.close() if self.console is not None: try: self.console.close() except RuntimeError: # TODO: [P3] Investigate further why the following error occurs when # restarting the mainwindow (this is *not* a production case): # "RuntimeError: wrapped C/C++ object of type DockableConsole # has been deleted". # Another solution to avoid this error would be to really restart # the application (run each unit test in a separate process), but # it would represent too much effort for an error occuring in test # configurations only. pass self.reset_all() self.__save_pos_size_and_state() self.__unregister_plugins() # Saving current tab for next session Conf.main.current_tab.set(self.tabwidget.currentIndex()) execenv.log(self, "closed properly") return True def closeEvent(self, event: QG.QCloseEvent) -> None: """Reimplement QMainWindow method""" if self.hide_on_close: self.__old_size = self.size() self.hide() else: if self.close_properly(): self.SIG_CLOSING.emit() event.accept() else: event.ignore() DataLab-1.0.2/datalab/gui/newobject.py000066400000000000000000000163511511411446000175130ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ New object creation GUI ======================= This module provides a graphical user interface (GUI) for creating new objects in the DataLab environment. It allows users to create new signals and images interactively. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import guidata.dataset as gds import numpy as np from guidata.qthelpers import exec_dialog from plotpy.builder import make from plotpy.plot import PlotDialog from plotpy.tools import EditPointTool from qtpy import QtWidgets as QW from sigima.objects import CustomSignalParam as OrigCustomSignalParam from sigima.objects import ( Gauss2DParam, ImageDatatypes, ImageObj, NewImageParam, NewSignalParam, SignalObj, create_signal, ) from sigima.objects import create_image_from_param as create_image_headless from sigima.objects import create_signal_from_param as create_signal_headless from sigima.objects.base import BaseProcParam from sigima.objects.signal import DEFAULT_TITLE as SIGNAL_DEFAULT_TITLE from datalab.config import _ CREATION_PARAMETERS_OPTION = "creation_param_json" def insert_creation_parameters(obj: SignalObj | ImageObj, param: gds.DataSet) -> None: """Insert creation parameters into object metadata. Args: param: creation parameters """ obj.set_metadata_option(CREATION_PARAMETERS_OPTION, gds.dataset_to_json(param)) def extract_creation_parameters(obj: SignalObj | ImageObj) -> gds.DataSet | None: """Extract creation parameters from object metadata. Returns: Creation parameters or None if not found """ try: param_json = obj.get_metadata_option(CREATION_PARAMETERS_OPTION) except ValueError: return None return gds.json_to_dataset(param_json) class CustomSignalParam(OrigCustomSignalParam): """Parameters for custom signal (e.g. manually defined experimental data)""" def edit_curve(self, *args) -> None: # pylint: disable=unused-argument """Edit custom curve""" win: PlotDialog = make.dialog( wintitle=_("Select one point then press OK to accept"), edit=True, type="curve", ) edit_tool = win.manager.add_tool( EditPointTool, title=_("Edit curve interactively") ) edit_tool.activate() plot = win.manager.get_plot() x, y = self.xyarray[:, 0], self.xyarray[:, 1] curve = make.mcurve(x, y, "-+") plot.add_item(curve) plot.set_active_item(curve) insert_btn = QW.QPushButton(_("Insert point"), win) insert_btn.clicked.connect(edit_tool.trigger_insert_point_at_selection) win.button_layout.insertWidget(0, insert_btn) exec_dialog(win) new_x, new_y = curve.get_data() self.xmax = new_x.max() self.xmin = new_x.min() self.size = new_x.size self.xyarray = np.vstack((new_x, new_y)).T btn_curve_edit = gds.ButtonItem( "Edit curve", callback=edit_curve, icon="signal.svg" ) def create_signal_gui( param: NewSignalParam | None = None, edit: bool = False, parent: QW.QWidget | None = None, ) -> SignalObj | None: """Create a new Signal object from GUI Args: param: base signal parameters (NewSignalParam) edit: Open a dialog box to edit parameters (default: False) parent: parent widget Returns: Signal object or None if canceled Raises: ValueError: if base_param is None and edit is False """ if param is None: param = NewSignalParam() edit = True # Default to editing if no parameters provided # CustomSignalParam requires edit mode to initialize the xyarray. # Without this, if edit=False (the default in new_object), the setup_array # call would be skipped, leaving xyarray as None, which would cause an # AttributeError when trying to access param.xyarray.T later. if isinstance(param, OrigCustomSignalParam): edit = True if isinstance(param, OrigCustomSignalParam) and edit: p_init = NewSignalParam(_("Custom signal")) p_init.size = 10 # Set smaller default size for initial input if not p_init.edit(parent=parent): return None param.setup_array(size=p_init.size, xmin=p_init.xmin, xmax=p_init.xmax) if edit: if not param.edit(parent=parent): return None if isinstance(param, OrigCustomSignalParam): signal = create_signal(param.title) signal.xydata = param.xyarray.T if signal.title == SIGNAL_DEFAULT_TITLE: signal.title = f"custom(npts={param.size})" return signal try: signal = create_signal_headless(param) except Exception as exc: # pylint: disable=broad-except if parent is not None: QW.QMessageBox.warning(parent, _("Error"), str(exc)) else: raise ValueError(f"Error creating signal: {exc}") from exc signal = None # Insert creation parameters into metadata, only if `param` is an instance of a # class deriving from `NewSignalParam` (not an instance of `NewSignalParam` itself): # pylint: disable=unidiomatic-typecheck if isinstance(param, NewSignalParam) and type(param) is not NewSignalParam: insert_creation_parameters(signal, param) return signal def create_image_gui( param: NewImageParam | None = None, edit: bool = False, parent: QW.QWidget | None = None, ) -> ImageObj | None: """Create a new Image object from GUI Args: param: image parameters edit: Open a dialog box to edit parameters (default: False) parent: parent widget Returns: Image object or None if canceled Raises: ValueError: if base_param is None and edit is False """ if param is None: param = NewImageParam() edit = True # Default to editing if no parameters provided if param.height is None: param.height = 500 if param.width is None: param.width = 500 if param.dtype is None: param.dtype = ImageDatatypes.UINT16 dtype: ImageDatatypes = param.dtype numpy_dtype = dtype.to_numpy_dtype() if isinstance(param, Gauss2DParam): if param.a is None: try: param.a = np.iinfo(numpy_dtype).max / 2.0 except ValueError: param.a = 10.0 elif isinstance(param, BaseProcParam): param.set_from_datatype(numpy_dtype) if edit: if not param.edit(parent=parent): return None try: image = create_image_headless(param) except Exception as exc: # pylint: disable=broad-except if parent is not None: QW.QMessageBox.warning(parent, _("Error"), str(exc)) else: raise ValueError(f"Error creating image: {exc}") from exc return None # Insert creation parameters into metadata, only if `param` is an instance of a # class deriving from `NewImageParam` (not an instance of `NewImageParam` itself): # pylint: disable=unidiomatic-typecheck if isinstance(param, NewImageParam) and type(param) is not NewImageParam: insert_creation_parameters(image, param) return image DataLab-1.0.2/datalab/gui/objectview.py000066400000000000000000000751741511411446000177040ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Object view =========== The :mod:`datalab.gui.objectview` module provides widgets to display object (signal/image) trees. .. note:: This module provides tree widgets to display signals, images and groups. It is important to note that, by design, the user can only select either individual signals/images or groups, but not both at the same time. This is an important design choice, as it allows to simplify the user experience, and to avoid potential confusion between the two types of selection. Simple object tree ------------------ .. autoclass:: SimpleObjectTree Get object dialog ----------------- .. autoclass:: GetObjectsDialog Object view ----------- .. autoclass:: ObjectView """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import os from collections.abc import Iterator from typing import TYPE_CHECKING from guidata.configtools import get_icon from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from sigima.objects import ImageObj, SignalObj from datalab.config import _ from datalab.objectmodel import ObjectGroup, get_short_id, get_uuid from datalab.utils.qthelpers import block_signals if TYPE_CHECKING: from typing import Any from datalab.gui.panel.base import BaseDataPanel from datalab.objectmodel import ObjectModel def metadata_to_html(metadata: dict[str, Any]) -> str: """Convert metadata to human-readable string. Returns: HTML string """ textlines = [] for key, value in metadata.items(): if len(textlines) > 5: textlines.append("[...]") break if not key.startswith("_"): vlines = str(value).splitlines() if vlines: text = f"{key}: {vlines[0][:100]}" if len(vlines) > 1: text += " [...]" textlines.append(text) if textlines: ptit = _("Object metadata") psub = _("(click on Metadata button for more details)") prefix = f"{ptit}: {psub}
    " return f"

    {prefix}{'
    '.join(textlines)}

    " return "" class SimpleObjectTree(QW.QTreeWidget): """Base object handling panel list widget, object (sig/ima) lists""" SIG_ITEM_DOUBLECLICKED = QC.Signal(str) SIG_CONTEXT_MENU = QC.Signal(QC.QPoint) def __init__(self, parent: QW.QWidget, objmodel: ObjectModel) -> None: self.objmodel: ObjectModel = objmodel super().__init__(parent) self.setHeaderHidden(True) self.setColumnCount(1) self.setAlternatingRowColors(True) self.itemDoubleClicked.connect(self.item_double_clicked) self.header().setSectionResizeMode(QW.QHeaderView.Interactive) self.itemChanged.connect(lambda item: self.resizeColumnToContents(0)) def __str__(self) -> str: """Return string representation""" textlist = [] for tl_index in range(self.topLevelItemCount()): tl_item = self.topLevelItem(tl_index) textlist.append(tl_item.text(0)) for index in range(tl_item.childCount()): textlist.append(" " + tl_item.child(index).text(0)) return os.linesep.join(textlist) def initialize_from(self, sobjlist: SimpleObjectTree) -> None: """Init from another SimpleObjectList, without making copies of objects""" self.objmodel = sobjlist.objmodel self.populate_tree() self.set_current_item_id(sobjlist.get_current_item_id()) def iter_items( self, item: QW.QTreeWidgetItem | None = None ) -> Iterator[QW.QTreeWidgetItem]: """Recursively iterate over all items""" if item is None: for index in range(self.topLevelItemCount()): yield from self.iter_items(self.topLevelItem(index)) else: yield item for index in range(item.childCount()): yield from self.iter_items(item.child(index)) def get_item_from_id(self, item_id) -> QW.QTreeWidgetItem: """Return QTreeWidgetItem from id (stored in item's data)""" for item in self.iter_items(): if item.data(0, QC.Qt.UserRole) == item_id: return item return None def get_current_item_id(self, object_only: bool = False) -> str | None: """Return current item id""" item = self.currentItem() if item is not None and (not object_only or item.parent() is not None): return item.data(0, QC.Qt.UserRole) return None def set_current_item_id(self, uuid: str, extend: bool = False) -> None: """Set current item by id""" item = self.get_item_from_id(uuid) if extend: self.setCurrentItem(item, 0, QC.QItemSelectionModel.Select) else: self.setCurrentItem(item) def get_current_group_id(self) -> str: """Return current group ID""" selected_item = self.currentItem() if selected_item is None: return None if selected_item.parent() is None: return selected_item.data(0, QC.Qt.UserRole) return selected_item.parent().data(0, QC.Qt.UserRole) def get_sel_group_items(self) -> list[QW.QTreeWidgetItem]: """Return selected group items""" return [item for item in self.selectedItems() if item.parent() is None] def get_sel_group_uuids(self) -> list[str]: """Return selected group uuids""" return [item.data(0, QC.Qt.UserRole) for item in self.get_sel_group_items()] def get_sel_object_items(self) -> list[QW.QTreeWidgetItem]: """Return selected object items""" return [item for item in self.selectedItems() if item.parent() is not None] def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: """Return selected objects uuids. Args: include_groups: If True, also return objects from selected groups. Returns: List of selected objects uuids. """ sel_items = self.get_sel_object_items() if not sel_items: cur_item = self.currentItem() if cur_item is not None and cur_item.parent() is not None: sel_items = [cur_item] uuids = [item.data(0, QC.Qt.UserRole) for item in sel_items] if include_groups: for group_id in self.get_sel_group_uuids(): uuids.extend(self.objmodel.get_group_object_ids(group_id)) return uuids def get_sel_objects( self, include_groups: bool = False ) -> list[SignalObj | ImageObj]: """Return selected objects. If include_groups is True, also return objects from selected groups.""" return [self.objmodel[oid] for oid in self.get_sel_object_uuids(include_groups)] def get_sel_groups(self) -> list[ObjectGroup]: """Return selected groups""" return self.objmodel.get_groups(self.get_sel_group_uuids()) @staticmethod def __update_item( item: QW.QTreeWidgetItem, obj: SignalObj | ImageObj | ObjectGroup ) -> None: """Update item""" item.setText(0, f"{get_short_id(obj)}: {obj.title}") if isinstance(obj, (SignalObj, ImageObj)): item.setToolTip(0, metadata_to_html(obj.metadata)) item.setData(0, QC.Qt.UserRole, get_uuid(obj)) def populate_tree(self) -> None: """Populate tree with objects""" uuid = self.get_current_item_id() with block_signals(widget=self): self.clear() for group in self.objmodel.get_groups(): self.add_group_item(group) if uuid is not None: self.set_current_item_id(uuid) def update_tree(self) -> None: """Update tree""" for group in self.objmodel.get_groups(): self.__update_item(self.get_item_from_id(get_uuid(group)), group) for obj in group: self.__update_item(self.get_item_from_id(get_uuid(obj)), obj) def __add_to_group_item( self, obj: SignalObj | ImageObj, group_item: QW.QTreeWidgetItem ) -> None: """Add object to group item""" item = QW.QTreeWidgetItem() icon = "signal.svg" if isinstance(obj, SignalObj) else "image.svg" item.setIcon(0, get_icon(icon)) self.__update_item(item, obj) group_item.addChild(item) def add_group_item(self, group: ObjectGroup) -> None: """Add group item""" group_item = QW.QTreeWidgetItem() group_item.setIcon(0, get_icon("group.svg")) self.__update_item(group_item, group) self.addTopLevelItem(group_item) group_item.setExpanded(True) for obj in group: self.__add_to_group_item(obj, group_item) self.resizeColumnToContents(0) def add_object_item( self, obj: SignalObj | ImageObj, group_id: str, set_current: bool = True ) -> None: """Add item""" group_item = self.get_item_from_id(group_id) self.__add_to_group_item(obj, group_item) if set_current: self.set_current_item_id(get_uuid(obj)) self.resizeColumnToContents(0) def update_item(self, uuid: str) -> None: """Update item""" obj_or_group = self.objmodel.get_object_or_group(uuid) item = self.get_item_from_id(uuid) self.__update_item(item, obj_or_group) def remove_item(self, oid: str, refresh: bool = True) -> None: """Remove item""" item = self.get_item_from_id(oid) if item is not None: with block_signals(widget=self, enable=not refresh): if item.parent() is None: # Group item: remove from tree self.takeTopLevelItem(self.indexOfTopLevelItem(item)) else: # Object item: remove from parent item.parent().removeChild(item) def item_double_clicked(self, item: QW.QTreeWidgetItem) -> None: """Item was double-clicked: open a pop-up plot dialog""" if item.parent() is not None: oid = item.data(0, QC.Qt.UserRole) self.SIG_ITEM_DOUBLECLICKED.emit(oid) def contextMenuEvent(self, event: QG.QContextMenuEvent) -> None: # pylint: disable=C0103 """Override Qt method""" self.SIG_CONTEXT_MENU.emit(event.globalPos()) class GetObjectsDialog(QW.QDialog): """Dialog box showing groups and objects (signals or images) to select one, or more. Args: parent: parent widget panel: data panel title: dialog title comment: optional dialog comment nb_objects: number of objects to select (default: 1) minimum_size: minimum size (width, height) """ def __init__( self, parent: QW.QWidget, panel: BaseDataPanel, title: str, comment: str = "", nb_objects: int = 1, minimum_size: tuple[int, int] | None = None, ) -> None: super().__init__(parent) self.__nb_objects = nb_objects self.__selected_objects: list[SignalObj | ImageObj] = [] self.setWindowTitle(title) vlayout = QW.QVBoxLayout() self.setLayout(vlayout) self.tree = SimpleObjectTree(parent, panel.objmodel) self.tree.initialize_from(panel.objview) self.tree.SIG_ITEM_DOUBLECLICKED.connect(lambda oid: self.accept()) self.tree.itemSelectionChanged.connect(self.__item_selection_changed) if nb_objects > 1: self.tree.setSelectionMode(QW.QAbstractItemView.ExtendedSelection) vlayout.addWidget(self.tree) if comment: lbl = QW.QLabel(comment) lbl.setWordWrap(True) vlayout.addSpacing(10) vlayout.addWidget(lbl) bbox = QW.QDialogButtonBox(QW.QDialogButtonBox.Ok | QW.QDialogButtonBox.Cancel) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) self.ok_btn = bbox.button(QW.QDialogButtonBox.Ok) vlayout.addSpacing(10) vlayout.addWidget(bbox) # Update OK button state: self.__item_selection_changed() if minimum_size is not None: self.setMinimumSize(*minimum_size) else: self.setMinimumWidth(400) def __item_selection_changed(self) -> None: """Item selection has changed""" nobj = self.__nb_objects self.__selected_objects = self.tree.get_sel_objects(include_groups=nobj > 1) self.ok_btn.setEnabled(len(self.__selected_objects) == nobj) def get_selected_objects(self) -> list[SignalObj | ImageObj]: """Return selected objects""" return self.__selected_objects class ObjectView(SimpleObjectTree): """Object handling panel list widget, object (sig/ima) lists""" SIG_SELECTION_CHANGED = QC.Signal() SIG_IMPORT_FILES = QC.Signal(list) def __init__(self, parent: BaseDataPanel, objmodel: ObjectModel) -> None: super().__init__(parent, objmodel) self.setSelectionMode(QW.QAbstractItemView.ExtendedSelection) self.setAcceptDrops(True) self.setDragEnabled(True) self.setDragDropMode(QW.QAbstractItemView.InternalMove) self.itemSelectionChanged.connect(self.item_selection_changed) self.__dragged_objects: list[QW.QListWidgetItem] = [] self.__dragged_groups: list[QW.QListWidgetItem] = [] self.__dragged_expanded_states: dict[QW.QListWidgetItem, bool] = {} def paintEvent(self, event): # pylint: disable=C0103 """Reimplement Qt method""" super().paintEvent(event) if len(self.objmodel) > 0: return # Draw empty state message with contextual hints painter = QG.QPainter(self.viewport()) rect = self.rect() # Set font for main message font = painter.font() font.setPointSize(11) painter.setFont(font) # Main message main_msg = _("Drag files here to open") main_rect = QC.QRect(rect) main_rect.setHeight(rect.height() // 2) painter.drawText(main_rect, QC.Qt.AlignCenter, main_msg) # Contextual hint hint_rect = QC.QRect(rect) hint_rect.setTop(rect.height() // 2) font.setPointSize(9) font.setItalic(True) painter.setFont(font) painter.setPen(QG.QColor(128, 128, 128)) # Gray color panel: BaseDataPanel = self.parent() if panel.PANEL_STR_ID == "signal": hint = _( "Working with 2D images?\n" "Switch to the Image Panel using the tab above." ) else: hint = _( "Working with 1D signals?\n" "Switch to the Signal Panel using the tab above." ) painter.drawText(hint_rect, QC.Qt.AlignCenter, hint) # pylint: disable=unused-argument def dragEnterEvent(self, event: QG.QDragEnterEvent) -> None: """Reimplement Qt method""" if event.mimeData().hasUrls(): event.acceptProposedAction() else: super().dragEnterEvent(event) self.__dragged_groups = self.get_sel_group_items() self.__dragged_objects = self.get_sel_object_items() self.__dragged_expanded_states = { item.data(0, QC.Qt.UserRole): item.isExpanded() for item in self.__dragged_groups } def dragLeaveEvent(self, event: QG.QDragLeaveEvent) -> None: """Reimplement Qt method""" super().dragLeaveEvent(event) self.__dragged_groups = [] self.__dragged_objects = [] self.__dragged_expanded_states = {} # pylint: disable=unused-argument def dragMoveEvent(self, event: QG.QDragMoveEvent) -> None: """Reimplement Qt method""" self.setDropIndicatorShown(True) if event.mimeData().hasUrls(): event.setDropAction(QC.Qt.CopyAction) event.accept() else: super().dragMoveEvent(event) self.setDropIndicatorShown(self.__is_drop_allowed(event)) def __is_drop_allowed(self, event: QG.QDropEvent | QG.QDragMoveEvent) -> bool: """Return True if drop is allowed""" # Yes, this method has too many return statements. # But it's still quite readable, so let's focus on other things and just disable # the pylint warning. # # pylint: disable=too-many-return-statements if event.mimeData().hasUrls(): return True drop_pos = self.dropIndicatorPosition() on_item = drop_pos == QW.QAbstractItemView.OnItem above_item = drop_pos == QW.QAbstractItemView.AboveItem below_item = drop_pos == QW.QAbstractItemView.BelowItem on_viewport = drop_pos == QW.QAbstractItemView.OnViewport target_item = self.itemAt(event.pos()) # If moved items are objects, refuse the drop on the viewport if self.__dragged_objects and on_viewport: return False # If drop indicator is on an item, refuse the drop if the target item # is anything but a group if on_item and (target_item is None or target_item.parent() is not None): return False # If drop indicator is on an item, refuse the drop if the moved items # are groups if on_item and self.__dragged_groups: return False # If target item is None, it means that the drop position is # outside of the tree. In this case, we accept the drop and move # the objects to the end of the list. if target_item is None or on_viewport: return True # If moved items are groups, refuse the drop if the target item is # not a group if self.__dragged_groups and target_item.parent() is not None: return False # If moved items are groups, refuse the drop if the target item is # a group but the target position is below the target instead of above if self.__dragged_groups and below_item: return False # If moved items are objects, refuse the drop if the target item is # a group and the drop indicator is anything but on the target item if self.__dragged_objects and target_item.parent() is None and not on_item: return False # If moved items are objects, refuse the drop if the target item is # the first group item and the drop position is above the target item if ( self.__dragged_objects and target_item.parent() is None and self.indexFromItem(target_item).row() == 0 and above_item ): return False return True def get_all_group_uuids(self) -> list[str]: """Return all group uuids, in a list ordered by group position in the tree""" return [ self.topLevelItem(index).data(0, QC.Qt.UserRole) for index in range(self.topLevelItemCount()) ] def get_all_object_uuids(self) -> dict[str, list[str]]: """Return all object uuids, in a dictionary that maps group uuids to the list of object uuids in each group, in the correct order""" return { group_id: [ self.topLevelItem(index).child(idx).data(0, QC.Qt.UserRole) for idx in range(self.topLevelItem(index).childCount()) ] for index, group_id in enumerate(self.get_all_group_uuids()) } def dropEvent(self, event: QG.QDropEvent) -> None: # pylint: disable=C0103 """Reimplement Qt method""" if event.mimeData().hasUrls(): fnames = [url.toLocalFile() for url in event.mimeData().urls()] self.SIG_IMPORT_FILES.emit(fnames) event.setDropAction(QC.Qt.CopyAction) event.accept() else: is_allowed = self.__is_drop_allowed(event) if not is_allowed: event.ignore() else: drop_pos = self.dropIndicatorPosition() on_viewport = drop_pos == QW.QAbstractItemView.OnViewport target_item = self.itemAt(event.pos()) # If target item is None, it means that the drop position is # outside of the tree. In this case, we accept the drop and move # the objects to the end of the list. if target_item is None or on_viewport: # If moved items are groups, move them to the end of the list if self.__dragged_groups: for item in self.__dragged_groups: self.takeTopLevelItem(self.indexOfTopLevelItem(item)) self.addTopLevelItem(item) # If moved items are objects, move them to the last group if self.__dragged_objects: lastgrp_item = self.topLevelItem(self.topLevelItemCount() - 1) for item in self.__dragged_objects: item.parent().removeChild(item) lastgrp_item.addChild(item) event.accept() else: super().dropEvent(event) if event.isAccepted(): # Ok, the drop was accepted, so we need to update the model accordingly # (at this stage, the model has not been updated yet but the tree has # been updated already, e.g. by the super().dropEvent(event) calls). # Thus, we have to loop over all tree items and reproduce the tree # structure in the model, by reordering the groups and objects. # We have two cases to consider (that mutually exclude each other): # 1. Groups are moved: we need to reorder the groups in the model # 2. Objects are moved: we need to reorder the objects in all groups # in the model # Let's start with case 1: if self.__dragged_groups: # First, we need to get the list of all groups in the model # (in the correct order) gids = self.get_all_group_uuids() # Then, we need to reorder the groups in the model self.objmodel.reorder_groups(gids) # Now, let's consider case 2: if self.__dragged_objects: # First, we need to get a dictionary that maps group ids to # the list of objects in each group (in the correct order) oids = self.get_all_object_uuids() # Then, we need to reorder the objects in all groups in the model self.objmodel.reorder_objects(oids) # Finally, we need to update tree self.update_tree() # Restore expanded states of moved groups for item in self.__dragged_groups: item.setExpanded( self.__dragged_expanded_states[item.data(0, QC.Qt.UserRole)] ) # Restore selection, either of groups or objects sel_items = self.__dragged_groups or self.__dragged_objects extend = len(sel_items) > 1 for item in sel_items: if extend: self.setCurrentItem(item, 0, QC.QItemSelectionModel.Select) else: self.setCurrentItem(item) def get_current_object(self) -> SignalObj | ImageObj | None: """Return current object""" oid = self.get_current_item_id(object_only=True) if oid is not None: return self.objmodel[oid] return None def set_current_object(self, obj: SignalObj | ImageObj) -> None: """Set current object""" self.set_current_item_id(get_uuid(obj)) def item_selection_changed(self) -> None: """Refreshing the selection of objects and groups, emitting the SIG_SELECTION_CHANGED signal which triggers the update of the object properties panel, the plot items and the actions of the toolbar and menu bar. This method is called when the user selects or deselects items in the tree. It is also called when the user clicks on an item that was already selected. This method emits the SIG_SELECTION_CHANGED signal. """ # ==> This is a very important design choice <== # When a group is selected, all individual objects are deselected, even if # they belong to other groups. This is intended to simplify the user experience. # In other words, the user may either select groups or individual objects, but # not both at the same time. sel_groups = self.get_sel_group_items() if sel_groups: for item in self.get_sel_object_items(): item.setSelected(False) if self.currentItem().parent() is not None: self.setCurrentItem(sel_groups[0]) self.SIG_SELECTION_CHANGED.emit() def select_objects( self, selection: list[SignalObj | ImageObj | int | str], ) -> None: """Select multiple objects Args: selection: list of objects, object numbers (1 to N) or object uuids """ if all(isinstance(obj, int) for obj in selection): all_uuids = self.objmodel.get_object_ids() uuids = [all_uuids[num - 1] for num in selection] elif all(isinstance(obj, str) for obj in selection): uuids = selection else: assert all(isinstance(obj, (SignalObj, ImageObj)) for obj in selection) uuids = [get_uuid(obj) for obj in selection] for idx, uuid in enumerate(uuids): self.set_current_item_id(uuid, extend=idx > 0) def select_groups( self, groups: list[ObjectGroup | int | str] | None = None ) -> None: """Select multiple groups Args: groups: list of groups, group numbers (1 to N), group names or None (select all groups). Defaults to None. """ if groups is None: groups = self.objmodel.get_groups() elif all(isinstance(group, int) for group in groups): groups = [self.objmodel.get_groups()[grp_num - 1] for grp_num in groups] elif all(isinstance(group, str) for group in groups): groups = self.objmodel.get_groups(groups) assert all(isinstance(group, ObjectGroup) for group in groups) for idx, group in enumerate(groups): self.set_current_item_id(get_uuid(group), extend=idx > 0) def __reorder_model(self) -> None: """Reorder model""" self.objmodel.reorder_groups(self.get_all_group_uuids()) self.objmodel.reorder_objects(self.get_all_object_uuids()) self.update_tree() def move_up(self): """Move selected objects/groups up""" sel_objs = self.get_sel_object_items() sel_groups = self.get_sel_group_items() # Sort selected objects/groups by their position in the tree sel_objs.sort(key=lambda item: self.indexFromItem(item).row()) sel_groups.sort(key=lambda item: self.indexFromItem(item).row()) if not sel_objs and not sel_groups: return if sel_objs: for item in sel_objs: parent = item.parent() idx_item = parent.indexOfChild(item) idx_parent = self.indexOfTopLevelItem(parent) if idx_item > 0: parent.takeChild(idx_item) parent.insertChild(idx_item - 1, item) elif idx_parent > 0: # If the object is the first child of its parent, we check if # there is a group above the parent. If so, we move the object # to the end of the group above. parent.takeChild(idx_item) self.topLevelItem(idx_parent - 1).addChild(item) else: return else: # Store groups expanded state expstates = { item.data(0, QC.Qt.UserRole): item.isExpanded() for item in sel_groups } for item in sel_groups: idx_item = self.indexOfTopLevelItem(item) if idx_item > 0: self.takeTopLevelItem(idx_item) self.insertTopLevelItem(idx_item - 1, item) else: return # Restore groups expanded state for item in sel_groups: item.setExpanded(expstates[item.data(0, QC.Qt.UserRole)]) self.__reorder_model() # Restore selection for item in sel_objs + sel_groups: item.setSelected(True) def move_down(self): """Move selected objects/groups down""" sel_objs = self.get_sel_object_items() sel_groups = self.get_sel_group_items() # Sort selected objects/groups by their position in the tree sel_objs.sort(key=lambda item: self.indexFromItem(item).row(), reverse=True) sel_groups.sort(key=lambda item: self.indexFromItem(item).row(), reverse=True) if not sel_objs and not sel_groups: return if sel_objs: for item in sel_objs: parent = item.parent() idx_item = parent.indexOfChild(item) idx_parent = self.indexOfTopLevelItem(parent) if idx_item < parent.childCount() - 1: parent.takeChild(idx_item) parent.insertChild(idx_item + 1, item) elif idx_parent < self.topLevelItemCount() - 1: # If the object is the last child of its parent, we check if # there is a group below the parent. If so, we move the object # to the beginning of the group below. parent.takeChild(idx_item) self.topLevelItem(idx_parent + 1).insertChild(0, item) else: return else: # Store groups expanded state expstates = { item.data(0, QC.Qt.UserRole): item.isExpanded() for item in sel_groups } for item in sel_groups: idx_item = self.indexOfTopLevelItem(item) if idx_item < self.topLevelItemCount() - 1: self.takeTopLevelItem(idx_item) self.insertTopLevelItem(idx_item + 1, item) else: return # Restore groups expanded state for item in sel_groups: item.setExpanded(expstates[item.data(0, QC.Qt.UserRole)]) self.__reorder_model() # Restore selection for item in sel_objs + sel_groups: item.setSelected(True) DataLab-1.0.2/datalab/gui/panel/000077500000000000000000000000001511411446000162525ustar00rootroot00000000000000DataLab-1.0.2/datalab/gui/panel/__init__.py000066400000000000000000000025741511411446000203730ustar00rootroot00000000000000""" Panel ===== The :mod:`datalab.gui.panel` package provides the **panel objects** for signals and images. Three types of panels are available: - :class:`datalab.gui.panel.signal.SignalPanel`: Signal panel - :class:`datalab.gui.panel.image.ImagePanel`: Image panel - :class:`datalab.gui.panel.macro.MacroPanel`: Macro panel Signal and Image Panels are called **Data Panels** and are used to display and handle signals and images in the main window of DataLab. Data Panels rely on the :class:`datalab.gui.panel.base.ObjectProp` class (managing the object properties) and a set of modules to handle the GUI features: - :mod:`datalab.gui.actionhandler`: Application actions (menus, toolbars, context menu) - :mod:`datalab.gui.objectview`: Widgets to display object (signal/image) trees - :mod:`datalab.gui.plothandler`: `PlotPy` items for representing signals and images - :mod:`datalab.gui.processor`: Processor (computation) - :mod:`datalab.gui.panel.roieditor`: ROI editor The Macro Panel is used to display and run macros. It relies on the :mod:`datalab.gui.macroeditor` module to handle the macro edition and execution. Base features ------------- .. automodule:: datalab.gui.panel.base Signal panel ------------ .. automodule:: datalab.gui.panel.signal Image panel ----------- .. automodule:: datalab.gui.panel.image Macro panel ----------- .. automodule:: datalab.gui.panel.macro """ DataLab-1.0.2/datalab/gui/panel/base.py000066400000000000000000004062511511411446000175460ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ .. Base panel objects (see parent package :mod:`datalab.gui.panel`) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import abc import glob import os import os.path as osp import re import warnings from dataclasses import dataclass from typing import TYPE_CHECKING, Any, Generator, Generic, Literal, Type import guidata.dataset as gds import guidata.dataset.qtwidgets as gdq import h5py import numpy as np import plotpy.io from guidata.configtools import get_icon from guidata.dataset import restore_dataset, update_dataset from guidata.qthelpers import add_actions, create_action, exec_dialog from plotpy.plot import BasePlot, BasePlotOptions, PlotDialog, SyncPlotDialog from plotpy.tools import ActionTool from qtpy import QtCore as QC # type: ignore[import] from qtpy import QtWidgets as QW from qtpy.compat import ( getexistingdirectory, getopenfilename, getopenfilenames, getsavefilename, ) from sigima.io import ( read_annotations, read_metadata, read_roi, write_annotations, write_metadata, write_roi, ) from sigima.io.base import get_file_extensions from sigima.io.common.basename import format_basenames from sigima.objects import ( ImageObj, NewImageParam, SignalObj, TypeObj, TypeROI, create_image_from_param, create_signal, create_signal_from_param, ) from sigima.objects.base import ROI_KEY from sigima.params import SaveToDirectoryParam from datalab import objectmodel from datalab.adapters_metadata import ( GeometryAdapter, ResultData, TableAdapter, create_resultdata_dict, show_resultdata, ) from datalab.adapters_plotpy import create_adapter_from_object from datalab.config import APP_NAME, Conf, _ from datalab.env import execenv from datalab.gui import actionhandler, objectview from datalab.gui.newobject import ( CREATION_PARAMETERS_OPTION, NewSignalParam, extract_creation_parameters, insert_creation_parameters, ) from datalab.gui.processor.base import ( PROCESSING_PARAMETERS_OPTION, ProcessingParameters, extract_processing_parameters, insert_processing_parameters, ) from datalab.gui.roieditor import TypeROIEditor from datalab.objectmodel import ObjectGroup, get_short_id, get_uuid, set_uuid from datalab.utils.qthelpers import ( CallbackWorker, create_progress_bar, qt_long_callback, qt_try_except, qt_try_loadsave_file, save_restore_stds, ) from datalab.widgets.textimport import TextImportWizard if TYPE_CHECKING: from plotpy.items import CurveItem, LabelItem, MaskedXYImageItem from sigima.io.image import ImageIORegistry from sigima.io.signal import SignalIORegistry from datalab.gui import ObjItf from datalab.gui.main import DLMainWindow from datalab.gui.plothandler import ImagePlotHandler, SignalPlotHandler from datalab.gui.processor.image import ImageProcessor from datalab.gui.processor.signal import SignalProcessor from datalab.h5.native import NativeH5Reader, NativeH5Writer # Metadata keys that should not be pasted when copying metadata between objects METADATA_PASTE_EXCLUSIONS = { ROI_KEY, # ROI has dedicated copy/paste operations "__uuid", # Each object must have a unique identifier f"__{PROCESSING_PARAMETERS_OPTION}", # Object-specific processing history f"__{CREATION_PARAMETERS_OPTION}", # Object-specific creation parameters } def is_plot_item_serializable(item: Any) -> bool: """Return True if plot item is serializable""" try: plotpy.io.item_class_from_name(item.__class__.__name__) return True except AssertionError: return False def is_hdf5_file(filename: str, check_content: bool = False) -> bool: """Return True if filename has an HDF5 extension or is an HDF5 file. Args: filename: Path to the file to check check_content: If True, also attempts to open the file to verify it's a valid HDF5 file. If False, only checks the file extension. Returns: True if the file is (likely) an HDF5 file, False otherwise. """ # First, check by extension (fast) has_hdf5_extension = filename.lower().endswith((".h5", ".hdf5", ".hdf", ".he5")) if not check_content: return has_hdf5_extension # If checking content, try to open as HDF5 file if has_hdf5_extension: return True # Trust common HDF5 extensions # For other extensions, attempt to open the file to verify it's HDF5 try: with h5py.File(filename, "r"): return True except (OSError, IOError, ValueError): # Not a valid HDF5 file return False @dataclass class ProcessingReport: """Report of processing operation Args: success: True if processing succeeded obj_uuid: UUID of the processed object message: Optional message (error or info) """ success: bool obj_uuid: str | None = None message: str | None = None class ObjectProp(QW.QWidget): """Object handling panel properties Args: panel: parent data panel objclass: class of the object handled by the panel (SignalObj or ImageObj) """ def __init__(self, panel: BaseDataPanel, objclass: SignalObj | ImageObj) -> None: super().__init__(panel) # Create the tab widget self.tabwidget = QW.QTabWidget(self) self.tabwidget.setTabBarAutoHide(True) self.tabwidget.setTabPosition(QW.QTabWidget.West) self.panel = panel self.objclass = objclass # Object creation tab self.creation_param_editor: gdq.DataSetEditGroupBox | None = None self.current_creation_obj: SignalObj | ImageObj | None = None self.creation_scroll: QW.QScrollArea | None = None # Object processing tab self.processing_param_editor: gdq.DataSetEditGroupBox | None = None self.current_processing_obj: SignalObj | ImageObj | None = None self.processing_scroll: QW.QScrollArea | None = None # Properties tab self.properties = gdq.DataSetEditGroupBox("", objclass) self.properties.SIG_APPLY_BUTTON_CLICKED.connect(panel.properties_changed) self.properties.setEnabled(False) self.__original_values: dict[str, Any] = {} # Create Analysis and History widgets font = Conf.proc.small_mono_font.get_font() self.processing_history = QW.QTextEdit() self.processing_history.setReadOnly(True) self.processing_history.setFont(font) self.analysis_parameters = QW.QTextEdit() self.analysis_parameters.setReadOnly(True) self.analysis_parameters.setFont(font) # Track newly created objects to show Creation tab only once self._newly_created_obj_uuid: str | None = None # Track when analysis results were just computed self._fresh_analysis_obj_uuid: str | None = None # Track when object was just processed (1-to-1) self._fresh_processing_obj_uuid: str | None = None self.tabwidget.addTab( self.processing_history, get_icon("history.svg"), _("History") ) self.tabwidget.addTab( self.analysis_parameters, get_icon("analysis.svg"), _("Analysis parameters") ) self.tabwidget.addTab( self.properties, get_icon("properties.svg"), _("Properties") ) self.processing_history.textChanged.connect(self._update_tab_visibility) self.analysis_parameters.textChanged.connect(self._update_tab_visibility) # Create vertical layout for the container layout = QW.QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) # Add tab widget and button area to main layout layout.addWidget(self.tabwidget) # Here we could add another widget or layout if needed (in DataLab v0.20, we # had a permanent button area here, but it was removed to avoid clutter) def _update_tab_visibility(self) -> None: """Update visibility of tabs based on their content.""" for textedit in (self.processing_history, self.analysis_parameters): tab_index = self.tabwidget.indexOf(textedit) if tab_index >= 0: has_content = bool(textedit.toPlainText().strip()) self.tabwidget.setTabVisible(tab_index, has_content) def display_analysis_parameters(self, obj: SignalObj | ImageObj) -> bool: """Set analysis parameter label. Args: obj: Signal or Image object Returns: True if analysis parameters were found and displayed, False otherwise. """ text = "" # Iterate through all result adapters and extract parameter info for adapter_class in (GeometryAdapter, TableAdapter): for adapter in adapter_class.iterate_from_obj(obj): param = adapter.get_param() if param is not None: if text: text += "

    " # Get function name for context func_name = adapter.func_name if func_name: # Add function name as a header for better context param.set_comment( "(" + _("Parameters for function `%s`") % func_name + ")" ) text += param.to_html() self.analysis_parameters.setText(text) return bool(text) def _build_processing_history(self, obj: SignalObj | ImageObj) -> str: """Build processing history as a simple text list. Args: obj: Signal or Image object Returns: Processing history as text """ history_items = [] current_obj = obj max_depth = 20 # Prevent infinite loops # Walk backwards through processing chain, collecting items while current_obj is not None and len(history_items) < max_depth: proc_params = extract_processing_parameters(current_obj) if proc_params is None: # Check for creation parameters creation_params = extract_creation_parameters(current_obj) if creation_params is not None: text = f"{_('Created')}: {creation_params.title}" history_items.append(text) else: history_items.append(_("Original object")) break # Skip 1-to-0 operations (analysis) as they don't transform the object # They just add metadata, so they shouldn't appear in processing history if proc_params.pattern == "1-to-0": # For 1-to-0 operations, there's no processing history to show # (they analyze but don't transform the object) # Check if there's any earlier processing creation_params = extract_creation_parameters(current_obj) if creation_params is not None: text = f"{_('Created')}: {creation_params.title}" history_items.append(text) else: history_items.append(_("Original object")) break # Add current processing step func_name = proc_params.func_name.replace("_", " ").title() history_items.append(func_name) # Try to find source object if proc_params.source_uuid: current_obj = self.panel.mainwindow.find_object_by_uuid( proc_params.source_uuid ) if current_obj is None: history_items.append(_("(source deleted)")) break else: if proc_params.source_uuids: # Multiple sources (n-to-1 or 2-to-1 pattern) history_items.append(_("(multiple sources)")) break if len(history_items) <= 1: return "" # Shows the history tab only when there is some history # Reverse to show from oldest to newest, then add indentation history_items.reverse() history_lines = [] for i, item in enumerate(history_items): indent = " " * i history_lines.append(f"{indent}└─ {item}") return "\n".join(history_lines) def display_processing_history(self, obj: SignalObj | ImageObj) -> bool: """Display processing history. Args: obj: Signal or Image object Returns: True if processing history was found and displayed, False otherwise. """ history_text = self._build_processing_history(obj) self.processing_history.setText(history_text) return bool(history_text) def __update_properties_dataset(self, obj: SignalObj | ImageObj) -> None: """Update properties dataset from signal/image dataset Args: obj: Signal or Image object """ dataset: SignalObj | ImageObj = self.properties.dataset dataset.set_defaults() update_dataset(dataset, obj) self.properties.get() self.properties.apply_button.setEnabled(False) def update_properties_from( self, obj: SignalObj | ImageObj | None = None, force_tab: Literal["creation", "processing", "analysis", None] | None = None, ) -> None: """Update properties panel (properties, creation, processing) from object. Args: obj: Signal or Image object force_tab: Force a specific tab to be current """ self.properties.setDisabled(obj is None) if obj is None: obj = self.objclass() # Update the properties dataset self.__update_properties_dataset(obj) # Store original values to detect which properties have changed # (using `restore_dataset` to convert the dataset to a dictionary) self.__original_values = {} restore_dataset(self.properties.dataset, self.__original_values) # Display analysis parameters and processing history has_analysis_parameters = self.display_analysis_parameters(obj) self.display_processing_history(obj) # Remove only Creation and Processing tabs (dynamic tabs) # Use widget references instead of text labels for reliable identification if self.creation_scroll is not None: index = self.tabwidget.indexOf(self.creation_scroll) if index >= 0: self.tabwidget.removeTab(index) if self.processing_scroll is not None: index = self.tabwidget.indexOf(self.processing_scroll) if index >= 0: self.tabwidget.removeTab(index) # Reset references for dynamic tabs self.creation_param_editor = None self.current_creation_obj = None self.creation_scroll = None self.processing_param_editor = None self.current_processing_obj = None self.processing_scroll = None # Setup Creation and Processing tabs (if applicable) has_creation_tab = False has_processing_tab = False if obj is not None: has_creation_tab = self.setup_creation_tab(obj) has_processing_tab = self.setup_processing_tab(obj) # Processing tab setup # Trigger visibility update for History and Analysis parameters tabs # (will be called via textChanged signals, but we call explicitly # here to ensure initial state is correct) self._update_tab_visibility() # Determine which tab to show based on force_tab parameter: # - If force_tab="creation" and Creation tab exists, show it # - If force_tab="processing" and Processing tab exists, show it # - If force_tab="analysis" and Analysis tab has content, show it # - Otherwise, always show Properties tab (default behavior) if force_tab == "creation" and has_creation_tab: self.tabwidget.setCurrentWidget(self.creation_scroll) elif force_tab == "processing" and has_processing_tab: self.tabwidget.setCurrentWidget(self.processing_scroll) elif force_tab == "analysis" and has_analysis_parameters: self.tabwidget.setCurrentWidget(self.analysis_parameters) else: # Default: always show Properties tab when switching objects self.tabwidget.setCurrentWidget(self.properties) def mark_as_newly_created(self, obj: SignalObj | ImageObj) -> None: """Mark object to show Creation tab on next selection. Args: obj: Object to mark """ self._newly_created_obj_uuid = get_uuid(obj) def mark_as_freshly_processed(self, obj: SignalObj | ImageObj) -> None: """Mark object to show Processing tab on next selection. Args: obj: Object to mark """ self._fresh_processing_obj_uuid = get_uuid(obj) def mark_as_fresh_analysis(self, obj: SignalObj | ImageObj) -> None: """Mark object to show Analysis tab on next selection. Args: obj: Object to mark """ self._fresh_analysis_obj_uuid = get_uuid(obj) def get_changed_properties(self) -> dict[str, Any]: """Get dictionary of properties that have changed from original values. Returns: Dictionary mapping property names to their new values, containing only the properties that were modified by the user. """ dataset = self.properties.dataset changed = {} # Get current values as a dictionary current_values = {} restore_dataset(dataset, current_values) # Compare with original values for key, current_value in current_values.items(): original_value = self.__original_values.get(key) # Check if value has changed if not self._values_equal(current_value, original_value): changed[key] = current_value return changed def update_original_values(self) -> None: """Update the stored original values to the current dataset values. This should be called after applying changes to reset the baseline for detecting future changes. """ dataset = self.properties.dataset self.__original_values = {} restore_dataset(dataset, self.__original_values) @staticmethod def _values_equal(val1: Any, val2: Any) -> bool: """Compare two values, handling special cases like numpy arrays. Args: val1: first value val2: second value Returns: True if values are equal """ # Handle numpy arrays if isinstance(val1, np.ndarray) or isinstance(val2, np.ndarray): if not isinstance(val1, np.ndarray) or not isinstance(val2, np.ndarray): return False return np.array_equal(val1, val2) # Handle regular comparison return val1 == val2 def setup_creation_tab( self, obj: SignalObj | ImageObj, set_current: bool = False ) -> bool: """Setup the Creation tab with parameter editor for interactive object creation. Args: obj: Signal or Image object set_current: If True, set the Creation tab as current after creation Returns: True if Creation tab was set up, False otherwise """ param = extract_creation_parameters(obj) if param is None: return False # Create parameter editor widget using the actual parameter class # (which is a subclass of NewSignalParam or NewImageParam) editor = gdq.DataSetEditGroupBox(_("Creation Parameters"), param.__class__) update_dataset(editor.dataset, param) editor.get() # Connect Apply button to recreation handler editor.SIG_APPLY_BUTTON_CLICKED.connect(self.apply_creation_parameters) editor.set_apply_button_state(False) # Store reference to be able to retrieve it later self.creation_param_editor = editor self.current_creation_obj = obj # Remove existing Creation tab if it exists if self.creation_scroll is not None: index = self.tabwidget.indexOf(self.creation_scroll) if index >= 0: self.tabwidget.removeTab(index) # Set the parameter editor as the scroll area widget # Creation tab is always at index 0 (before all other tabs) self.creation_scroll = QW.QScrollArea() self.creation_scroll.setWidgetResizable(True) self.creation_scroll.setWidget(editor) icon_name = "new_sig.svg" if isinstance(obj, SignalObj) else "new_ima.svg" self.tabwidget.insertTab( 0, self.creation_scroll, get_icon(icon_name), _("Creation") ) # Set as current tab if requested if set_current: self.tabwidget.setCurrentWidget(self.creation_scroll) return True def apply_creation_parameters(self) -> None: """Apply creation parameters: recreate object with updated parameters.""" editor = self.creation_param_editor if editor is None or self.current_creation_obj is None: return if isinstance(self.current_creation_obj, SignalObj): otext = _("Signal was modified in-place.") else: otext = _("Image was modified in-place.") text = f"⚠️ {otext} ⚠️ " text += _( "If computation were performed based on this object, " "they may need to be redone." ) self.panel.SIG_STATUS_MESSAGE.emit(text, 20000) # Recreate object with new parameters # (serialization is done automatically in create_signal/image_from_param) param = editor.dataset try: if isinstance(self.current_creation_obj, SignalObj): new_obj = create_signal_from_param(param) else: # ImageObj new_obj = create_image_from_param(param) except Exception as exc: # pylint: disable=broad-exception-caught if execenv.unattended: raise exc QW.QMessageBox.warning( self, _("Error"), _("Failed to recreate object with new parameters:\n%s") % str(exc), ) return # Update the current object in-place obj_uuid = get_uuid(self.current_creation_obj) self.current_creation_obj.title = new_obj.title if isinstance(self.current_creation_obj, SignalObj): self.current_creation_obj.xydata = new_obj.xydata else: # ImageObj self.current_creation_obj.data = new_obj.data # Invalidate ROI mask cache when image dimensions change # (the mask is computed based on image shape, so it must be recomputed) self.current_creation_obj.invalidate_maskdata_cache() # Update metadata with new creation parameters insert_creation_parameters(self.current_creation_obj, param) # Auto-recompute analysis if the object had analysis parameters # Since the data has changed, any analysis results are now invalid # Use the processor for the current object's type obj_processor = self.__get_processor_associated_to(self.current_creation_obj) obj_processor.auto_recompute_analysis(self.current_creation_obj) # Update the tree view item (to show new title if it changed) self.panel.objview.update_item(obj_uuid) # Refresh only the plot, not the entire panel # (avoid calling selection_changed which would trigger a full refresh # of the Properties tab and could cause recursion issues) self.panel.refresh_plot(obj_uuid, update_items=True, force=True) # Update the Properties tab to reflect the new object properties # (e.g., data type, dimensions, etc.) self.__update_properties_dataset(self.current_creation_obj) # Refresh the Creation tab with the new parameters # Use QTimer to defer this until after the current event is processed # Set the Creation tab as current to keep it visible after refresh QC.QTimer.singleShot( 0, lambda: self.setup_creation_tab( self.current_creation_obj, set_current=True ), ) def setup_processing_tab( self, obj: SignalObj | ImageObj, reset_params: bool = True, set_current: bool = False, ) -> bool: """Setup the Processing tab with parameter editor for re-processing. Args: obj: Signal or Image object reset_params: If True, call update_from_obj() to reset parameters from source object. If False, use parameters as stored in metadata. set_current: If True, set the Processing tab as current after creation Returns: True if Processing tab was set up, False otherwise """ # Extract processing parameters proc_params = extract_processing_parameters(obj) if proc_params is None: return False # Check if the pattern type is 1-to-1 (only interactive pattern) if proc_params.pattern != "1-to-1": return False # Store reference to be able to retrieve it later self.current_processing_obj = obj # Check if object has processing parameter param = proc_params.param if param is None: return False # Skip interactive processing for list of parameters # (e.g., ROI extraction, erase operations) if isinstance(param, list): return False # Eventually call the `update_from_obj` method to properly initialize # the parameter object from the current object state. # Only do this when reset_params is True (initial setup), not when # refreshing after user has modified parameters. if reset_params and hasattr(param, "update_from_obj"): # Warning: the `update_from_obj` method takes the input object as argument, # not the output object (`obj` is the processed object here): # Retrieve the input object from the source UUID if proc_params.source_uuid is not None: source_obj = self.panel.mainwindow.find_object_by_uuid( proc_params.source_uuid ) if source_obj is not None: param.update_from_obj(source_obj) # Create parameter editor widget editor = gdq.DataSetEditGroupBox( _("Processing Parameters"), param.__class__, wordwrap=True ) update_dataset(editor.dataset, param) editor.get() # Connect Apply button to reprocessing handler editor.SIG_APPLY_BUTTON_CLICKED.connect(self.apply_processing_parameters) editor.set_apply_button_state(False) # Store reference to be able to retrieve it later self.processing_param_editor = editor # Remove existing Processing tab if it exists if self.processing_scroll is not None: index = self.tabwidget.indexOf(self.processing_scroll) if index >= 0: self.tabwidget.removeTab(index) # Processing tab comes after Creation tab (if it exists) # Find the correct insertion index: after Creation (index 0) if it exists, # otherwise at index 0 has_creation = ( self.creation_scroll is not None and self.tabwidget.indexOf(self.creation_scroll) >= 0 ) insert_index = 1 if has_creation else 0 # Create new processing scroll area and tab self.processing_scroll = QW.QScrollArea() self.processing_scroll.setWidgetResizable(True) self.processing_scroll.setHorizontalScrollBarPolicy(QC.Qt.ScrollBarAlwaysOff) self.processing_scroll.setSizePolicy( QW.QSizePolicy.Expanding, QW.QSizePolicy.Preferred ) self.processing_scroll.setWidget(editor) self.tabwidget.insertTab( insert_index, self.processing_scroll, get_icon("libre-tech-ram.svg"), _("Processing"), ) # Set as current tab if requested if set_current: self.tabwidget.setCurrentWidget(self.processing_scroll) return True def __get_processor_associated_to( self, obj: SignalObj | ImageObj ) -> SignalProcessor | ImageProcessor: """Get the processor associated to the given object type. Args: obj: Signal or Image object Returns: Processor associated to the object's type """ assert isinstance(obj, (SignalObj, ImageObj)) if isinstance(obj, SignalObj): return self.panel.mainwindow.signalpanel.processor return self.panel.mainwindow.imagepanel.processor def apply_processing_parameters( self, obj: SignalObj | ImageObj | None = None, interactive: bool = True ) -> ProcessingReport: """Apply processing parameters: re-run processing with updated parameters. Args: obj: Signal or Image object to reprocess. If None, uses the current object. interactive: If True, show progress and error messages in the UI. Returns: ProcessingReport with success status, object UUID, and optional message. """ if execenv.unattended: interactive = False report = ProcessingReport(success=False) editor = self.processing_param_editor obj = obj or self.current_processing_obj if obj is None: report.message = _("No processing object available.") return report report.obj_uuid = get_uuid(obj) # Extract processing parameters proc_params = extract_processing_parameters(obj) if proc_params is None: report.message = _("Processing metadata is incomplete.") if interactive: QW.QMessageBox.critical(self, _("Error"), report.message) return report # Check if source object still exists if proc_params.source_uuid is None: report.message = _( "Processing metadata is incomplete (missing source UUID)." ) if interactive: QW.QMessageBox.critical(self, _("Error"), report.message) return report # Find source object source_obj = self.panel.mainwindow.find_object_by_uuid(proc_params.source_uuid) if source_obj is None: report.message = _("Source object no longer exists.") if interactive: QW.QMessageBox.critical( self, _("Error"), report.message + "\n\n" + _( "The object that was used to create this processed object " "has been deleted and cannot be used for reprocessing." ), ) return report # Get updated parameters from editor param = editor.dataset if editor is not None else proc_params.param # For cross-panel computations, we need to use the processor from the panel # that owns the source object (e.g., radial_profile is in ImageProcessor) source_processor = self.__get_processor_associated_to(source_obj) # Recompute using the dedicated method (with multiprocessing support) try: new_obj = source_processor.recompute_1_to_1( proc_params.func_name, source_obj, param ) except Exception as exc: # pylint: disable=broad-exception-caught report.message = _("Failed to reprocess object:\n%s") % str(exc) if interactive: QW.QMessageBox.warning(self, _("Error"), report.message) return report if new_obj is None: # User cancelled the operation report.message = _("Processing was cancelled.") else: report.success = True # Update the current object in-place with data from new object obj.title = new_obj.title if isinstance(obj, SignalObj): obj.xydata = new_obj.xydata else: # ImageObj obj.data = new_obj.data # Invalidate ROI mask cache when image dimensions may have changed # (the mask is computed based on image shape, so it must be recomputed) obj.invalidate_maskdata_cache() # Update metadata with new processing parameters updated_proc_params = ProcessingParameters( func_name=proc_params.func_name, pattern=proc_params.pattern, param=param, source_uuid=proc_params.source_uuid, ) insert_processing_parameters(obj, updated_proc_params) # Auto-recompute analysis if the object had analysis parameters # Since the data has changed, any analysis results are now invalid # Use the processor for the current object's type (not source object's type) obj_processor = self.__get_processor_associated_to(obj) obj_processor.auto_recompute_analysis(obj) # Update the tree view item and refresh plot obj_uuid = get_uuid(obj) self.panel.objview.update_item(obj_uuid) self.panel.refresh_plot(obj_uuid, update_items=True, force=True) # Update the Properties tab to reflect the new object properties # (e.g., data type, dimensions, etc.) self.__update_properties_dataset(obj) # Refresh the Processing tab with the new parameters # Don't reset parameters from source object - keep the user's values # Set the Processing tab as current to keep it visible after refresh QC.QTimer.singleShot( 0, lambda: self.setup_processing_tab( obj, reset_params=False, set_current=True ), ) if isinstance(obj, SignalObj): report.message = _("Signal was reprocessed.") else: report.message = _("Image was reprocessed.") self.panel.SIG_STATUS_MESSAGE.emit("✅ " + report.message, 5000) return report class AbstractPanelMeta(type(QW.QSplitter), abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class AbstractPanel(QW.QSplitter, metaclass=AbstractPanelMeta): """Object defining DataLab panel interface, based on a vertical QSplitter widget A panel handle an object list (objects are signals, images, macros...). Each object must implement ``datalab.gui.ObjItf`` interface """ H5_PREFIX = "" SIG_OBJECT_ADDED = QC.Signal() SIG_OBJECT_REMOVED = QC.Signal() @abc.abstractmethod def __init__(self, parent): super().__init__(QC.Qt.Vertical, parent) self.setObjectName(self.__class__.__name__[0].lower()) # Check if the class implements __len__, __getitem__ and __iter__ for method in ("__len__", "__getitem__", "__iter__"): if not hasattr(self, method): raise NotImplementedError( f"Class {self.__class__.__name__} must implement method {method}" ) # pylint: disable=unused-argument def get_serializable_name(self, obj: ObjItf) -> str: """Return serializable name of object""" title = re.sub("[^-a-zA-Z0-9_.() ]+", "", obj.title.replace("/", "_")) name = f"{get_short_id(obj)}: {title}" return name def serialize_object_to_hdf5(self, obj: ObjItf, writer: NativeH5Writer) -> None: """Serialize object to HDF5 file""" with writer.group(self.get_serializable_name(obj)): obj.serialize(writer) def deserialize_object_from_hdf5( self, reader: NativeH5Reader, name: str, reset_all: bool = False ) -> ObjItf: """Deserialize object from a HDF5 file Args: reader: HDF5 reader name: Object name in HDF5 file reset_all: If True, preserve original UUIDs (workspace reload). If False, regenerate UUIDs (importing objects). """ with reader.group(name): obj = self.create_object() obj.deserialize(reader) # Only regenerate UUIDs when importing objects (reset_all=False). # When reopening a workspace (reset_all=True), preserve original UUIDs # so that processing parameter references (source_uuid, source_uuids) # remain valid and features like "Show source" and "Recompute" work. # When importing, only regenerate UUID if it conflicts with an existing one. if not reset_all and isinstance(obj, (SignalObj, ImageObj, ObjectGroup)): if self.objmodel.has_uuid(get_uuid(obj)): set_uuid(obj) return obj @abc.abstractmethod def serialize_to_hdf5(self, writer: NativeH5Writer) -> None: """Serialize whole panel to a HDF5 file""" @abc.abstractmethod def deserialize_from_hdf5( self, reader: NativeH5Reader, reset_all: bool = False ) -> None: """Deserialize whole panel from a HDF5 file Args: reader: HDF5 reader reset_all: If True, preserve original UUIDs (workspace reload). If False, regenerate UUIDs (importing objects). """ @abc.abstractmethod def create_object(self) -> ObjItf: """Create and return object""" @abc.abstractmethod def add_object(self, obj: ObjItf) -> None: """Add object to panel""" @abc.abstractmethod def remove_all_objects(self): """Remove all objects""" self.SIG_OBJECT_REMOVED.emit() class PasteMetadataParam(gds.DataSet): """Paste metadata parameters""" keep_roi = gds.BoolItem(_("Regions of interest"), default=True) keep_geometry = gds.BoolItem(_("Geometry results"), default=False).set_pos(col=1) keep_tables = gds.BoolItem(_("Table results"), default=False).set_pos(col=1) keep_other = gds.BoolItem(_("Other metadata"), default=True) class NonModalInfoDialog(QW.QMessageBox): """Non-modal information message box with selectable text. This widget displays an information message in a message dialog box, allowing users to select and copy the text content. """ def __init__(self, parent: QW.QWidget, title: str, text: str) -> None: """Create a non-modal information message box with selectable text. Args: parent: The parent widget. title: The title of the message box. text: The text to display in the message box. """ super().__init__(parent) self.setIcon(QW.QMessageBox.Information) self.setWindowTitle(title) if re.search(r"<[a-zA-Z/][^>]*>", text): self.setTextFormat(QC.Qt.RichText) # type: ignore[attr-defined] self.setTextInteractionFlags( QC.Qt.TextBrowserInteraction # type: ignore[attr-defined] ) else: self.setTextFormat(QC.Qt.PlainText) # type: ignore[attr-defined] self.setTextInteractionFlags( QC.Qt.TextSelectableByMouse # type: ignore[attr-defined] | QC.Qt.TextSelectableByKeyboard # type: ignore[attr-defined] ) self.setText(text) self.setStandardButtons(QW.QMessageBox.Close) self.setDefaultButton(QW.QMessageBox.Close) # ! Necessary only on non-Windows platforms self.setWindowFlags(QC.Qt.Window) # type: ignore[attr-defined] self.setModal(False) class SaveToDirectoryGUIParam(gds.DataSet, title=_("Save to directory")): """Save to directory parameters""" def __init__( self, objs: list[TypeObj] | None = None, extensions: list[str] | None = None ) -> None: super().__init__() self.__objs = objs or [] self.__extensions = extensions or [] def on_button_click( self: SaveToDirectoryGUIParam, _item: gds.ButtonItem, _value: None, parent: QW.QWidget, ) -> None: """Help button callback.""" text = "
    ".join( [ """Pattern accepts a Python format string. Standard Python format specifiers apply. Two extra modifiers are supported: 'upper' for uppercase and 'lower' for lowercase.""", "", "Available placeholders:", """
    KeywordDescription
    {title}Title
    {index}1-based index
    {count}Total number of selected objects
    {xlabel}, {xunit}, {ylabel}, {yunit} Axis information for signals
    {metadata[key]}Specific metadata value
    (direct {metadata} use is ignored)
    """, "", "Examples:", """
    PatternDescription
    {index:03d} 3-digit index with leading zeros
    {title:20.20} Title truncated to 20 characters
    {title:20.20upper} Title truncated to 20 characters, upper case
    {title:20.20lower} Title truncated to 20 characters, lower case
    """, ] ) NonModalInfoDialog(parent, "Pattern help", text).show() def get_extension_choices(self, _item=None, _value=None): """Return list of available extensions for choice item.""" return [("." + ext, "." + ext, None) for ext in self.__extensions] def build_filenames(self, objs: list[TypeObj] | None = None) -> list[str]: """Build filenames according to current parameters.""" objs = objs or self.__objs extension = self.extension if self.extension is not None else "" filenames = format_basenames(objs, self.basename + extension) used: set[str] = set() # Ensure all filenames are unique. for i, filename in enumerate(filenames): root, ext = osp.splitext(filename) filepath = osp.join(self.directory, filename) k = 1 while (filename in used) or (not self.overwrite and osp.exists(filepath)): filename = f"{root}_{k}{ext}" filepath = osp.join(self.directory, filename) k += 1 used.add(filename) filenames[i] = filename return filenames def generate_filepath_obj_pairs( self, objs: list[TypeObj] ) -> Generator[tuple[str, TypeObj], None, None]: """Iterate over (filepath, object) pairs to be saved.""" for filename, obj in zip(self.build_filenames(objs), objs): yield osp.join(self.directory, filename), obj def update_preview(self, _item=None, _value=None) -> None: """Update preview.""" try: filenames = self.build_filenames() preview_lines = [] for i, (obj, filename) in enumerate(zip(self.__objs, filenames), start=1): # Try to get short ID if object has been added to panel try: obj_id = get_short_id(obj) except (ValueError, KeyError): # Fallback to simple index for objects not yet in panel obj_id = str(i) preview_lines.append(f"{obj_id}: {filename}") self.preview = "\n".join(preview_lines) except (ValueError, KeyError, TypeError) as exc: # Handle formatting errors gracefully (e.g., incomplete format string) self.preview = f"Invalid pattern:{os.linesep}{exc}" directory = gds.DirectoryItem(_("Directory"), default=Conf.main.base_dir.get()) basename = gds.StringItem( _("Basename pattern"), default="{title}", help=_("Python format string. See description for details."), ).set_prop("display", callback=update_preview) help = gds.ButtonItem(_("Help"), on_button_click, "MessageBoxInformation").set_pos( col=1 ) extension = gds.ChoiceItem(_("Extension"), get_extension_choices).set_prop( "display", callback=update_preview ) overwrite = gds.BoolItem( _("Overwrite"), default=False, help=_("Overwrite existing files") ).set_pos(col=1) preview = gds.TextItem( _("Preview"), default=None, regexp=r"^(?!Invalid).*" ).set_prop("display", readonly=True) class AddMetadataParam( gds.DataSet, title=_("Add metadata"), comment=_( "Add a new metadata item to the selected objects.

    " "The metadata key will be the same for all objects, " "but the value can use a pattern to generate different values.
    " "Click the Help button for details on the pattern syntax.
    " ), ): """Add metadata parameters""" def __init__(self, objs: list[TypeObj] | None = None) -> None: super().__init__() self.__objs = objs or [] def on_help_button_click( self: AddMetadataParam, _item: gds.ButtonItem, _value: None, parent: QW.QWidget, ) -> None: """Help button callback.""" text = "
    ".join( [ """Pattern accepts a Python format string. Standard Python format specifiers apply. Two extra modifiers are supported: 'upper' for uppercase and 'lower' for lowercase.""", "", "Available placeholders:", """
    KeywordDescription
    {title}Title
    {index}1-based index
    {count}Total number of selected objects
    {xlabel}, {xunit}, {ylabel}, {yunit} Axis information for signals
    {metadata[key]}Specific metadata value
    (direct {metadata} use is ignored)
    """, "", "Examples:", """
    PatternDescription
    {index:03d} 3-digit index with leading zeros
    {title:20.20} Title truncated to 20 characters
    {title:20.20upper} Title truncated to 20 characters, upper case
    {title:20.20lower} Title truncated to 20 characters, lower case
    """, ] ) NonModalInfoDialog(parent, "Pattern help", text).show() def get_conversion_choices(self, _item=None, _value=None): """Return list of available conversion choices.""" return [ ("string", _("String"), None), ("float", _("Float"), None), ("int", _("Integer"), None), ("bool", _("Boolean"), None), ] def build_values( self, objs: list[TypeObj] | None = None ) -> list[str | float | int | bool]: """Build values according to current parameters. Raises: ValueError: If a value cannot be converted to the target type. """ objs = objs or self.__objs # Generate values using the pattern raw_values = format_basenames(objs, self.value_pattern) # Convert values according to the selected conversion type converted_values = [] for i, value_str in enumerate(raw_values, start=1): if self.conversion == "string": converted_values.append(value_str) elif self.conversion == "float": try: converted_values.append(float(value_str)) except ValueError as exc: raise ValueError( f"Cannot convert value at index {i} to float: '{value_str}'" ) from exc elif self.conversion == "int": try: converted_values.append(int(value_str)) except ValueError as exc: raise ValueError( f"Cannot convert value at index {i} to integer: '{value_str}'" ) from exc elif self.conversion == "bool": # Convert to boolean: "true", "1", "yes" -> True, others -> False lower_val = value_str.lower() converted_values.append(lower_val in ("true", "1", "yes", "on")) return converted_values def update_preview(self, _item=None, _value=None) -> None: """Update preview.""" try: values = self.build_values() preview_lines = [] for i, (obj, value) in enumerate(zip(self.__objs, values), start=1): # Try to get short ID if object has been added to panel try: obj_id = get_short_id(obj) except (ValueError, KeyError): # Fallback to simple index for objects not yet in panel obj_id = str(i) preview_lines.append(f"{obj_id}: {self.metadata_key} = {value!r}") self.preview = "\n".join(preview_lines) except ValueError as exc: # Handle conversion errors self.preview = f"Invalid conversion:{os.linesep}{exc}" except (KeyError, TypeError) as exc: # Handle formatting errors (e.g., incomplete format string) self.preview = f"Invalid pattern:{os.linesep}{exc}" metadata_key = gds.StringItem( _("Metadata key"), default="custom_key", notempty=True, regexp=r"^[a-zA-Z_][a-zA-Z0-9_]*$", help=_("The key name for the metadata item"), ).set_prop("display", callback=update_preview) value_pattern = gds.StringItem( _("Value pattern"), default="{index}", help=_("Python format string. See description for details."), ).set_prop("display", callback=update_preview) help = gds.ButtonItem( _("Help"), on_help_button_click, "MessageBoxInformation" ).set_pos(col=1) conversion = gds.ChoiceItem( _("Conversion"), get_conversion_choices, default="string" ).set_prop("display", callback=update_preview) preview = gds.TextItem(_("Preview"), default="", regexp=r"^(?!Invalid).*").set_prop( "display", readonly=True ) class BaseDataPanel(AbstractPanel, Generic[TypeObj, TypeROI, TypeROIEditor]): """Object handling the item list, the selected item properties and plot""" PANEL_STR = "" # e.g. "Signal Panel" PANEL_STR_ID = "" # e.g. "signal" PARAMCLASS: TypeObj = None # Replaced in child object ANNOTATION_TOOLS = () MINDIALOGSIZE = (800, 600) MAXDIALOGSIZE = 0.95 # % of DataLab's main window size # Replaced by the right class in child object: IO_REGISTRY: SignalIORegistry | ImageIORegistry | None = None SIG_STATUS_MESSAGE = QC.Signal(str, int) # emitted by "qt_try_except" decorator SIG_REFRESH_PLOT = QC.Signal( str, bool, bool, bool, bool ) # Connected to PlotHandler.refresh_plot @staticmethod @abc.abstractmethod def get_roi_class() -> Type[TypeROI]: """Return ROI class""" @staticmethod @abc.abstractmethod def get_roieditor_class() -> Type[TypeROIEditor]: """Return ROI editor class""" @abc.abstractmethod def __init__(self, parent: QW.QWidget) -> None: super().__init__(parent) self.mainwindow: DLMainWindow = parent self.objprop = ObjectProp(self, self.PARAMCLASS) self.objmodel = objectmodel.ObjectModel(f"g{self.PARAMCLASS.PREFIX}") self.objview = objectview.ObjectView(self, self.objmodel) self.objview.SIG_IMPORT_FILES.connect(self.handle_dropped_files) self.objview.populate_tree() self.plothandler: SignalPlotHandler | ImagePlotHandler = None self.processor: SignalProcessor | ImageProcessor = None self.acthandler: actionhandler.BaseActionHandler = None self.metadata_clipboard = {} self.annotations_clipboard: list[dict[str, Any]] = [] self.__roi_clipboard: TypeROI | None = None self.context_menu = QW.QMenu() self.__separate_views: dict[QW.QDialog, TypeObj] = {} def closeEvent(self, event): """Reimplement QMainWindow method""" self.processor.close() super().closeEvent(event) # ------AbstractPanel interface----------------------------------------------------- def plot_item_parameters_changed( self, item: CurveItem | MaskedXYImageItem | LabelItem ) -> None: """Plot items changed: update metadata of all objects from plot items""" # Find the object corresponding to the plot item obj = self.plothandler.get_obj_from_item(item) if obj is not None: # Unselect the item in the plot so that we update the item parameters # in the right state (fix issue #184): item.unselect() # Ensure that item's parameters are up-to-date: item.param.update_param(item) # Update object metadata from plot item parameters create_adapter_from_object(obj).update_metadata_from_plot_item(item) if obj is self.objview.get_current_object(): self.objprop.update_properties_from(obj) self.plothandler.update_resultproperty_from_plot_item(item) # pylint: disable=unused-argument def plot_item_moved( self, item: LabelItem, x0: float, y0: float, x1: float, y1: float ) -> None: """Plot item moved: update metadata of all objects from plot items Args: item: Plot item x0: new x0 coordinate y0: new y0 coordinate x1: new x1 coordinate y1: new y1 coordinate """ self.plothandler.update_resultproperty_from_plot_item(item) def serialize_object_to_hdf5(self, obj: TypeObj, writer: NativeH5Writer) -> None: """Serialize object to HDF5 file""" # Before serializing, update metadata from plot item parameters, in order to # save the latest visualization settings: try: item = self.plothandler[get_uuid(obj)] create_adapter_from_object(obj).update_metadata_from_plot_item(item) except KeyError: # Plot item has not been created yet (this happens when auto-refresh has # been disabled) pass super().serialize_object_to_hdf5(obj, writer) def serialize_to_hdf5(self, writer: NativeH5Writer) -> None: """Serialize whole panel to a HDF5 file""" with writer.group(self.H5_PREFIX): for group in self.objmodel.get_groups(): with writer.group(self.get_serializable_name(group)): with writer.group("title"): writer.write_str(group.title) for obj in group.get_objects(): self.serialize_object_to_hdf5(obj, writer) def deserialize_from_hdf5( self, reader: NativeH5Reader, reset_all: bool = False ) -> None: """Deserialize whole panel from a HDF5 file Args: reader: HDF5 reader reset_all: If True, preserve original UUIDs (workspace reload). If False, regenerate UUIDs (importing objects). """ with reader.group(self.H5_PREFIX): for name in reader.h5.get(self.H5_PREFIX, []): with reader.group(name): group = self.add_group("") with reader.group("title"): group.title = reader.read_str() for obj_name in reader.h5.get(f"{self.H5_PREFIX}/{name}", []): obj = self.deserialize_object_from_hdf5( reader, obj_name, reset_all ) self.add_object(obj, get_uuid(group), set_current=False) self.selection_changed() def __len__(self) -> int: """Return number of objects""" return len(self.objmodel) def __getitem__(self, nb: int) -> TypeObj: """Return object from its number (1 to N)""" return self.objmodel.get_object_from_number(nb) def __iter__(self): """Iterate over objects""" return iter(self.objmodel) def create_object(self) -> TypeObj: """Create object (signal or image) Returns: SignalObj or ImageObj object """ return self.PARAMCLASS() # pylint: disable=not-callable @qt_try_except() def add_object( self, obj: TypeObj, group_id: str | None = None, set_current: bool = True, ) -> None: """Add object Args: obj: SignalObj or ImageObj object group_id: group id to which the object belongs. If None or empty string, the object is added to the current group. set_current: if True, set the added object as current """ if obj in self.objmodel: # Prevent adding the same object twice raise ValueError( f"Object {hex(id(obj))} already in panel. " f"The same object cannot be added twice: " f"please use a copy of the object." ) if group_id is None or group_id == "": group_id = self.objview.get_current_group_id() if group_id is None: groups = self.objmodel.get_groups() if groups: group_id = get_uuid(groups[0]) else: group_id = get_uuid(self.add_group("")) obj.check_data() self.objmodel.add_object(obj, group_id) # Mark this object as newly created to show Creation tab on first selection # BUT: Don't overwrite if this object is already marked as freshly processed # or has fresh analysis results (those take precedence) obj_uuid = get_uuid(obj) if ( obj_uuid != self.objprop._fresh_processing_obj_uuid and obj_uuid != self.objprop._fresh_analysis_obj_uuid ): self.objprop.mark_as_newly_created(obj) # Block signals to avoid updating the plot (unnecessary refresh) self.objview.blockSignals(True) self.objview.add_object_item(obj, group_id, set_current=set_current) self.objview.blockSignals(False) # Emit signal to ensure that the data panel is shown in the main window and # that the plot is updated (trigger a refresh of the plot) self.SIG_OBJECT_ADDED.emit() self.objview.update_tree() def remove_all_objects(self) -> None: """Remove all objects""" # iterate over a copy of self.__separate_views dict keys to avoid RuntimeError: # dictionary changed size during iteration for dlg in list(self.__separate_views): dlg.done(QW.QDialog.DialogCode.Rejected) self.objmodel.clear() self.plothandler.clear() self.objview.populate_tree() self.refresh_plot("selected", True, False) super().remove_all_objects() # Update object properties panel to clear creation/processing tabs self.selection_changed() # ---- Signal/Image Panel API ------------------------------------------------------ def setup_panel(self) -> None: """Setup panel""" self.acthandler.create_all_actions() self.processor.SIG_ADD_SHAPE.connect(self.plothandler.add_shapes) self.SIG_REFRESH_PLOT.connect(self.plothandler.refresh_plot) self.objview.SIG_SELECTION_CHANGED.connect(self.selection_changed) self.objview.SIG_ITEM_DOUBLECLICKED.connect( lambda oid: self.open_separate_view([oid]) ) self.objview.SIG_CONTEXT_MENU.connect(self.__popup_contextmenu) self.objprop.properties.SIG_APPLY_BUTTON_CLICKED.connect( self.properties_changed ) self.addWidget(self.objview) self.addWidget(self.objprop) def refresh_plot( self, what: str, update_items: bool = True, force: bool = False, only_visible: bool = True, only_existing: bool = False, ) -> None: """Refresh plot. Args: what: string describing the objects to refresh. Valid values are "selected" (refresh the selected objects), "all" (refresh all objects), "existing" (refresh existing plot items), or an object uuid. update_items: if True, update the items. If False, only show the items (do not update them). Defaults to True. force: if True, force refresh even if auto refresh is disabled. Defaults to False. only_visible: if True, only refresh visible items. Defaults to True. Visible items are the ones that are not hidden by other items or the items except the first one if the option "Show first only" is enabled. This is useful for images, where the last image is the one that is shown. If False, all items are refreshed. only_existing: if True, only refresh existing items. Defaults to False. Existing items are the ones that have already been created and are associated to the object uuid. If False, create new items for the objects that do not have an item yet. Raises: ValueError: if `what` is not a valid value """ if what not in ("selected", "all", "existing") and not isinstance(what, str): raise ValueError(f"Invalid value for 'what': {what}") self.SIG_REFRESH_PLOT.emit( what, update_items, force, only_visible, only_existing ) def manual_refresh(self) -> None: """Manual refresh""" self.refresh_plot("selected", True, True) def get_category_actions( self, category: actionhandler.ActionCategory ) -> list[QW.QAction]: # pragma: no cover """Return actions for category""" return self.acthandler.feature_actions.get(category, []) def get_context_menu(self) -> QW.QMenu: """Update and return context menu""" # Note: For now, this is completely unnecessary to clear context menu everytime, # but implementing it this way could be useful in the future in menu contents # should take into account current object selection self.context_menu.clear() actions = self.get_category_actions(actionhandler.ActionCategory.CONTEXT_MENU) add_actions(self.context_menu, actions) return self.context_menu def __popup_contextmenu(self, position: QC.QPoint) -> None: # pragma: no cover """Popup context menu at position""" menu = self.get_context_menu() menu.popup(position) # ------Creating, adding, removing objects------------------------------------------ def add_group(self, title: str, select: bool = False) -> objectmodel.ObjectGroup: """Add group Args: title: group title select: if True, select the group in the tree view. Defaults to False. Returns: Created group object """ group = self.objmodel.add_group(title) self.objview.add_group_item(group) if select: self.objview.select_groups([group]) return group def __duplicate_individual_obj( self, oid: str, new_group_id: str | None = None, set_current: bool = True ) -> None: """Duplicate individual object""" obj = self.objmodel[oid] if new_group_id is None: new_group_id = self.objmodel.get_object_group_id(obj) self.add_object(obj.copy(), group_id=new_group_id, set_current=set_current) def duplicate_object(self) -> None: """Duplication signal/image object""" if not self.mainwindow.confirm_memory_state(): return # Duplicate individual objects (exclusive with respect to groups) for oid in self.objview.get_sel_object_uuids(): self.__duplicate_individual_obj(oid, set_current=False) # Duplicate groups (exclusive with respect to individual objects) for group in self.objview.get_sel_groups(): new_group = self.add_group(group.title) for oid in self.objmodel.get_group_object_ids(get_uuid(group)): self.__duplicate_individual_obj( oid, get_uuid(new_group), set_current=False ) self.selection_changed(update_items=True) def copy_metadata(self) -> None: """Copy object metadata""" obj = self.objview.get_sel_objects()[0] self.metadata_clipboard = obj.metadata.copy() # Rename geometry results to avoid conflicts when pasting to same object type new_pref = get_short_id(obj) + "_" self._rename_results_in_clipboard(new_pref) # Update action states (e.g., "Paste metadata" should now be enabled) self.selection_changed() def _rename_results_in_clipboard(self, prefix: str) -> None: """Rename geometry and table results in clipboard to avoid conflicts. Args: prefix: Prefix to add to result titles """ for aclass in (GeometryAdapter, TableAdapter): result_keys = [ k for k, v in self.metadata_clipboard.items() if aclass.match(k, v) ] for dict_key in result_keys: try: # Get the result data result_data = self.metadata_clipboard[dict_key] # Update the title in the result data if isinstance(result_data, dict) and "title" in result_data: result_data = result_data.copy() # Don't modify original result_data["title"] = prefix + result_data["title"] # Create new key with updated title new_dict_key = dict_key.replace( aclass.META_PREFIX, aclass.META_PREFIX + prefix, 1 ) # Remove old entry and add new one del self.metadata_clipboard[dict_key] self.metadata_clipboard[new_dict_key] = result_data except (KeyError, ValueError, IndexError, TypeError): # If we can't process this result, leave it as is continue def paste_metadata(self, param: PasteMetadataParam | None = None) -> None: """Paste metadata to selected object(s)""" if param is None: param = PasteMetadataParam( _("Paste metadata"), comment=_( "Select what to keep from the clipboard.

    " "Result shapes and annotations, if kept, will be merged with " "existing ones. All other metadata will be replaced." ), ) if not param.edit(parent=self.parentWidget()): return metadata = {} if param.keep_roi and ROI_KEY in self.metadata_clipboard: metadata[ROI_KEY] = self.metadata_clipboard[ROI_KEY] if param.keep_geometry: for key, value in self.metadata_clipboard.items(): if GeometryAdapter.match(key, value): metadata[key] = value if param.keep_tables: for key, value in self.metadata_clipboard.items(): if TableAdapter.match(key, value): metadata[key] = value if param.keep_other: for key, value in self.metadata_clipboard.items(): if ( not GeometryAdapter.match(key, value) and not TableAdapter.match(key, value) and key not in METADATA_PASTE_EXCLUSIONS ): metadata[key] = value sel_objects = self.objview.get_sel_objects(include_groups=True) for obj in sorted(sel_objects, key=get_short_id, reverse=True): obj.update_metadata_from(metadata) # We have to do a special refresh in order to force the plot handler to update # all plot items, even the ones that are not visible (otherwise, image masks # would not be updated after pasting the metadata: see issue #123) self.refresh_plot( "selected", update_items=True, only_visible=False, only_existing=True ) def add_metadata(self, param: AddMetadataParam | None = None) -> None: """Add metadata item to selected object(s) Args: param: Add metadata parameters """ sel_objects = self.objview.get_sel_objects(include_groups=True) if not sel_objects: return if param is None: param = AddMetadataParam(sel_objects) # Restore settings from config saved_param = Conf.io.add_metadata_settings.get(default=AddMetadataParam()) update_dataset(param, saved_param) with warnings.catch_warnings(): warnings.simplefilter("ignore", category=gds.DataItemValidationWarning) if not param.edit(parent=self.parentWidget(), wordwrap=False): return # Save settings to config Conf.io.add_metadata_settings.set(param) # Build values for all selected objects values = param.build_values(sel_objects) # Add metadata to each object for obj, value in zip(sel_objects, values): obj.metadata[param.metadata_key] = value # Refresh the plot to update any changes self.refresh_plot( "selected", update_items=True, only_visible=False, only_existing=True ) def copy_roi(self) -> None: """Copy regions of interest""" obj = self.objview.get_sel_objects()[0] self.__roi_clipboard = obj.roi.copy() def paste_roi(self) -> None: """Paste regions of interest""" sel_objects = self.objview.get_sel_objects(include_groups=True) for obj in sel_objects: if obj.roi is None: obj.roi = self.__roi_clipboard.copy() else: obj.roi = obj.roi.combine_with(self.__roi_clipboard) self.selection_changed(update_items=True) self.refresh_plot( "selected", update_items=True, only_visible=False, only_existing=True ) def remove_object(self, force: bool = False) -> None: """Remove signal/image object Args: force: if True, remove object without confirmation. Defaults to False. """ sel_groups = self.objview.get_sel_groups() if sel_groups and not force and not execenv.unattended: answer = QW.QMessageBox.warning( self, _("Delete group(s)"), _("Are you sure you want to delete the selected group(s)?"), QW.QMessageBox.Yes | QW.QMessageBox.No, ) if answer == QW.QMessageBox.No: return sel_objects = self.objview.get_sel_objects(include_groups=True) for obj in sorted(sel_objects, key=get_short_id, reverse=True): dlg_list: list[QW.QDialog] = [] for dlg, obj_i in self.__separate_views.items(): if obj_i is obj: dlg_list.append(dlg) for dlg in dlg_list: dlg.done(QW.QDialog.DialogCode.Rejected) self.plothandler.remove_item(get_uuid(obj)) self.objview.remove_item(get_uuid(obj), refresh=False) self.objmodel.remove_object(obj) for group in sel_groups: self.objview.remove_item(get_uuid(group), refresh=False) self.objmodel.remove_group(group) self.objview.update_tree() self.selection_changed(update_items=True) self.SIG_OBJECT_REMOVED.emit() def delete_all_objects(self) -> None: # pragma: no cover """Confirm before removing all objects""" if len(self) == 0: return if execenv.unattended: raise RuntimeError( "This method should not be executed in unattended mode: " "call remove_all_objects instead." ) answer = QW.QMessageBox.warning( self, _("Delete all"), _("Do you want to delete all objects (%s)?") % self.PANEL_STR, QW.QMessageBox.Yes | QW.QMessageBox.No, ) if answer == QW.QMessageBox.Yes: self.remove_all_objects() def delete_metadata( self, refresh_plot: bool = True, keep_roi: bool | None = None ) -> None: """Delete metadata of selected objects Args: refresh_plot: Refresh plot. Defaults to True. keep_roi: Keep regions of interest, if any. Defaults to None (ask user). """ sel_objs = self.objview.get_sel_objects(include_groups=True) # Check if there are regions of interest first: roi_backup: dict[TypeObj, np.ndarray] = {} if any(obj.roi is not None for obj in sel_objs): if execenv.unattended and keep_roi is None: keep_roi = False elif keep_roi is None: answer = QW.QMessageBox.warning( self, _("Delete metadata"), _( "Some selected objects have regions of interest.
    " "Do you want to delete them as well?" ), QW.QMessageBox.Yes | QW.QMessageBox.No | QW.QMessageBox.Cancel, ) if answer == QW.QMessageBox.Cancel: return keep_roi = answer == QW.QMessageBox.No if keep_roi: for obj in sel_objs: if obj.roi is not None: roi_backup[obj] = obj.roi # Delete metadata: for index, obj in enumerate(sel_objs): obj.reset_metadata_to_defaults() if not keep_roi: obj.mark_roi_as_changed() if obj in roi_backup: obj.roi = roi_backup[obj] if index == 0: self.selection_changed() # When calling object `reset_metadata_to_defaults` method, we removed all # metadata application options, among them the object number which is used # to compute the short ID of the object. # So we have to reset the short IDs of all objects in the model to recalculate # the object numbers: self.objmodel.reset_short_ids() if refresh_plot: # We have to do a special refresh in order to force the plot handler to # update all plot items, even the ones that are not visible (otherwise, # image masks would remained visible after deleting the ROI for example: # see issue #122) self.refresh_plot( "selected", update_items=True, only_visible=False, only_existing=True ) def add_annotations_from_items( self, items: list, refresh_plot: bool = True ) -> None: """Add object annotations (annotation plot items). Args: items: annotation plot items refresh_plot: refresh plot. Defaults to True. """ for obj in self.objview.get_sel_objects(include_groups=True): create_adapter_from_object(obj).add_annotations_from_items(items) if refresh_plot: self.refresh_plot("selected", True, False) def update_metadata_view_settings(self) -> None: """Update metadata view settings""" def_dict = Conf.view.get_def_dict(self.__class__.__name__[:3].lower()) for obj in self.objmodel: obj.set_metadata_options_defaults(def_dict, overwrite=True) self.refresh_plot("all", True, False) def copy_titles_to_clipboard(self) -> None: """Copy object titles to clipboard (for reproducibility)""" QW.QApplication.clipboard().setText(str(self.objview)) def new_group(self) -> None: """Create a new group""" # Open a message box to enter the group name group_name, ok = QW.QInputDialog.getText(self, _("New group"), _("Group name:")) if ok: self.add_group(group_name) def rename_selected_object_or_group(self, new_name: str | None = None) -> None: """Rename selected object or group Args: new_name: new name (default: None, i.e. ask user) """ sel_objects = self.objview.get_sel_objects(include_groups=False) sel_groups = self.objview.get_sel_groups() if (not sel_objects and not sel_groups) or len(sel_objects) + len( sel_groups ) > 1: # Won't happen in the application, but could happen in tests or using the # API directly raise ValueError("Select one object or group to rename") if sel_objects: obj = sel_objects[0] if new_name is None: new_name, ok = QW.QInputDialog.getText( self, _("Rename object"), _("Object name:"), QW.QLineEdit.Normal, obj.title, ) if not ok: return obj.title = new_name self.objview.update_item(get_uuid(obj)) self.objprop.update_properties_from(obj) elif sel_groups: group = sel_groups[0] if new_name is None: new_name, ok = QW.QInputDialog.getText( self, _("Rename group"), _("Group name:"), QW.QLineEdit.Normal, group.title, ) if not ok: return group.title = new_name self.objview.update_item(get_uuid(group)) @abc.abstractmethod def get_newparam_from_current( self, newparam: NewSignalParam | NewImageParam | None = None ) -> NewSignalParam | NewImageParam | None: """Get new object parameters from the current object. Args: newparam: new object parameters. If None, create a new one. Returns: New object parameters """ @abc.abstractmethod def new_object( self, param: NewSignalParam | NewImageParam | None = None, edit: bool = False, add_to_panel: bool = True, ) -> TypeObj | None: """Create a new object (signal/image). Args: param: new object parameters edit: Open a dialog box to edit parameters (default: False). When False, the object is created with default parameters and creation parameters are stored in metadata for interactive editing. add_to_panel: Add object to panel (default: True) Returns: New object """ def set_current_object_title(self, title: str) -> None: """Set current object title""" obj = self.objview.get_current_object() obj.title = title self.objview.update_item(get_uuid(obj)) def __load_from_file( self, filename: str, create_group: bool = True, add_objects: bool = True ) -> list[SignalObj] | list[ImageObj]: """Open objects from file (signal/image), add them to DataLab and return them. Args: filename: file name create_group: if True, create a new group if more than one object is loaded. Defaults to True. If False, all objects are added to the current group. add_objects: if True, add objects to the panel. Defaults to True. Returns: New object or list of new objects """ worker = CallbackWorker(lambda worker: self.IO_REGISTRY.read(filename, worker)) objs = qt_long_callback(self, _("Reading objects from file"), worker, True) group_id = None if len(objs) > 1 and create_group: # Create a new group if more than one object is loaded group_id = get_uuid(self.add_group(osp.basename(filename))) with create_progress_bar( self, _("Adding objects to workspace"), max_=len(objs) - 1 ) as progress: for i_obj, obj in enumerate(objs): progress.setValue(i_obj + 1) if progress.wasCanceled(): break if add_objects: set_uuid(obj) # In case the object UUID was serialized in the file, # we need to reset it to a new UUID to avoid conflicts # (e.g. HDF5 file) self.add_object(obj, group_id=group_id, set_current=obj is objs[-1]) self.selection_changed() return objs def __save_to_file(self, obj: TypeObj, filename: str) -> None: """Save object to file (signal/image). Args: obj: object filename: file name """ self.IO_REGISTRY.write(filename, obj) def load_from_directory(self, directory: str | None = None) -> list[TypeObj]: """Open objects from directory (signals or images, depending on the panel), add them to DataLab and return them. If the directory is not specified, ask the user to select a directory. Args: directory: directory name Returns: list of new objects """ if not self.mainwindow.confirm_memory_state(): return [] if directory is None: # pragma: no cover basedir = Conf.main.base_dir.get() with save_restore_stds(): directory = getexistingdirectory(self, _("Open"), basedir) if not directory: return [] folders = [ path for path in glob.glob(osp.join(directory, "**"), recursive=True) if osp.isdir(path) and len(os.listdir(path)) > 0 ] objs = [] with create_progress_bar( self, _("Scanning directory"), max_=len(folders) - 1 ) as progress: # Iterate over all subfolders in the directory: for i_path, path in enumerate(folders): progress.setValue(i_path + 1) if progress.wasCanceled(): break path = osp.normpath(path) fnames = sorted( [ osp.join(path, fname) for fname in os.listdir(path) if osp.isfile(osp.join(path, fname)) ] ) new_objs = self.load_from_files( fnames, create_group=False, add_objects=False, ignore_errors=True, ) if new_objs: objs += new_objs grp_name = osp.relpath(path, directory) if grp_name == ".": grp_name = osp.basename(path) grp = self.add_group(grp_name) for obj in new_objs: self.add_object(obj, group_id=get_uuid(grp), set_current=False) return objs def load_from_files( self, filenames: list[str] | None = None, create_group: bool = False, add_objects: bool = True, ignore_errors: bool = False, ) -> list[TypeObj]: """Open objects from file (signals/images), add them to DataLab and return them. Args: filenames: File names create_group: if True, create a new group if more than one object is loaded for a single file. Defaults to False: all objects are added to the current group. add_objects: if True, add objects to the panel. Defaults to True. ignore_errors: if True, ignore errors when loading files. Defaults to False. Returns: list of new objects """ if not self.mainwindow.confirm_memory_state(): return [] if filenames is None: # pragma: no cover basedir = Conf.main.base_dir.get() filters = self.IO_REGISTRY.get_read_filters() with save_restore_stds(): filenames, _filt = getopenfilenames(self, _("Open"), basedir, filters) # Sort filenames to ensure consistent alphabetical order across all platforms filenames = sorted(filenames) objs = [] for filename in filenames: with qt_try_loadsave_file(self.parentWidget(), filename, "load"): Conf.main.base_dir.set(filename) try: objs += self.__load_from_file( filename, create_group=create_group, add_objects=add_objects ) except Exception as exc: # pylint: disable=broad-exception-caught if ignore_errors: # Ignore unknown file types pass else: raise exc return objs def save_to_files(self, filenames: list[str] | str | None = None) -> None: """Save selected objects to files (signal/image). Args: filenames: File names """ objs = self.objview.get_sel_objects(include_groups=True) if filenames is None: # pragma: no cover filenames = [None] * len(objs) assert len(filenames) == len(objs), ( "Number of filenames must match number of objects" ) for index, obj in enumerate(objs): filename = filenames[index] if filename is None: basedir = Conf.main.base_dir.get() filters = self.IO_REGISTRY.get_write_filters() with save_restore_stds(): filename, _filt = getsavefilename( self, _("Save as"), basedir, filters ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "save"): Conf.main.base_dir.set(filename) self.__save_to_file(obj, filename) def save_to_directory(self, param: SaveToDirectoryParam | None = None) -> None: """Save signals or images to directory using a filename pattern. Opens a dialog to select the output directory, the basename pattern and the extension. Args: param: parameters. """ objs = self.objview.get_sel_objects(include_groups=True) if param is None: extensions = get_file_extensions(self.IO_REGISTRY.get_write_filters()) with warnings.catch_warnings(): warnings.simplefilter("ignore", category=gds.DataItemValidationWarning) guiparam = SaveToDirectoryGUIParam(objs, extensions) # Restore settings from config saved_param = Conf.io.save_to_directory_settings.get( default=SaveToDirectoryParam() ) update_dataset(guiparam, saved_param) # Validate extension: set to first if None or not in available list # Note: extensions list has no dots, but guiparam.extension has dot extensions_with_dot = ["." + ext for ext in extensions] if ( guiparam.extension is None or guiparam.extension not in extensions_with_dot ): guiparam.extension = extensions_with_dot[0] if extensions else "" if not guiparam.edit(parent=self.parentWidget()): return param = SaveToDirectoryParam() update_dataset(param, guiparam) # Save settings to config Conf.io.save_to_directory_settings.set(param) Conf.main.base_dir.set(param.directory) with create_progress_bar(self, _("Saving..."), max_=len(objs)) as progress: for i, (path, obj) in enumerate(param.generate_filepath_obj_pairs(objs)): progress.setValue(i + 1) if progress.wasCanceled(): break with qt_try_loadsave_file(self.parentWidget(), path, "save"): self.__save_to_file(obj, path) def handle_dropped_files(self, filenames: list[str] | None = None) -> None: """Handle dropped files Args: filenames: File names Returns: None """ dirnames = [fname for fname in filenames if osp.isdir(fname)] h5_fnames = [ fname for fname in filenames if is_hdf5_file(fname, check_content=True) ] other_fnames = sorted(list(set(filenames) - set(h5_fnames) - set(dirnames))) if dirnames: for dirname in dirnames: self.load_from_directory(dirname) if h5_fnames: self.mainwindow.open_h5_files(h5_fnames, import_all=True) if other_fnames: self.load_from_files(other_fnames) def exec_import_wizard(self) -> None: """Execute import wizard""" wizard = TextImportWizard(self.PANEL_STR_ID, parent=self.parentWidget()) if exec_dialog(wizard): objs = wizard.get_objs() if objs: with create_progress_bar( self, _("Adding objects to workspace"), max_=len(objs) - 1 ) as progress: for idx, obj in enumerate(objs): progress.setValue(idx) QW.QApplication.processEvents() if progress.wasCanceled(): break self.add_object(obj) def import_metadata_from_file(self, filename: str | None = None) -> None: """Import metadata from file (JSON). Args: filename: File name """ if filename is None: # pragma: no cover basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filter = getopenfilename( self, _("Import metadata"), basedir, "*.dlabmeta" ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "load"): Conf.main.base_dir.set(filename) obj = self.objview.get_sel_objects(include_groups=True)[0] obj.metadata = read_metadata(filename) self.refresh_plot("selected", True, False) def export_metadata_from_file(self, filename: str | None = None) -> None: """Export metadata to file (JSON). Args: filename: File name """ obj = self.objview.get_sel_objects(include_groups=True)[0] if filename is None: # pragma: no cover basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filt = getsavefilename( self, _("Export metadata"), basedir, "*.dlabmeta" ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "save"): Conf.main.base_dir.set(filename) write_metadata(filename, obj.metadata) def copy_annotations(self) -> None: """Copy annotations from selected object""" obj = self.objview.get_sel_objects(include_groups=True)[0] self.annotations_clipboard = obj.get_annotations() # Update action states (e.g., "Paste annotations" should now be enabled) self.selection_changed() def paste_annotations(self) -> None: """Paste annotations to selected object(s)""" if not self.annotations_clipboard: return sel_objects = self.objview.get_sel_objects(include_groups=True) for obj in sel_objects: obj.set_annotations(self.annotations_clipboard) self.refresh_plot("selected", True, False) # Update action states (e.g., annotation-related actions should now be enabled) self.selection_changed() def import_annotations_from_file(self, filename: str | None = None) -> None: """Import annotations from file (JSON). Args: filename: File name """ if filename is None: # pragma: no cover basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filter = getopenfilename( self, _("Import annotations"), basedir, "*.dlabann" ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "load"): Conf.main.base_dir.set(filename) obj = self.objview.get_sel_objects(include_groups=True)[0] annotations = read_annotations(filename) obj.set_annotations(annotations) self.refresh_plot("selected", True, False) # Update action states (annotation-related actions should now be enabled) self.selection_changed() def export_annotations_from_file(self, filename: str | None = None) -> None: """Export annotations to file (JSON). Args: filename: File name """ obj = self.objview.get_sel_objects(include_groups=True)[0] if filename is None: # pragma: no cover basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filt = getsavefilename( self, _("Export annotations"), basedir, "*.dlabann" ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "save"): Conf.main.base_dir.set(filename) annotations = obj.get_annotations() write_annotations(filename, annotations) def delete_annotations(self) -> None: """Delete all annotations from selected object(s)""" sel_objects = self.objview.get_sel_objects(include_groups=True) for obj in sel_objects: obj.clear_annotations() self.refresh_plot("selected", True, False) # Update action states (annotation-related actions should now be disabled) self.selection_changed() def import_roi_from_file(self, filename: str | None = None) -> None: """Import regions of interest from file (JSON). Args: filename: File name """ if filename is None: # pragma: no cover basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filter = getopenfilename( self, _("Import ROI"), basedir, "*.dlabroi" ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "load"): Conf.main.base_dir.set(filename) obj = self.objview.get_sel_objects(include_groups=True)[0] roi = read_roi(filename) if obj.roi is None: obj.roi = roi else: obj.roi = obj.roi.combine_with(roi) self.selection_changed(update_items=True) self.refresh_plot("selected", True, False) def export_roi_to_file(self, filename: str | None = None) -> None: """Export regions of interest to file (JSON). Args: filename: File name """ obj = self.objview.get_sel_objects(include_groups=True)[0] assert obj.roi is not None if filename is None: # pragma: no cover basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filt = getsavefilename( self, _("Export ROI"), basedir, "*.dlabroi" ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "save"): Conf.main.base_dir.set(filename) write_roi(filename, obj.roi) # ------Refreshing GUI-------------------------------------------------------------- def selection_changed(self, update_items: bool = False) -> None: """Object selection changed: update object properties, refresh plot and update object view. Args: update_items: Update plot items (default: False) """ selected_objects = self.objview.get_sel_objects(include_groups=True) selected_groups = self.objview.get_sel_groups() # Determine which tab to show based on object state current_obj = self.objview.get_current_object() force_tab = None if current_obj is not None: obj_uuid = get_uuid(current_obj) # Show Creation tab for newly created objects (only once) if obj_uuid == self.objprop._newly_created_obj_uuid: force_tab = "creation" self.objprop._newly_created_obj_uuid = None # Show Processing tab for freshly processed objects (only once) elif obj_uuid == self.objprop._fresh_processing_obj_uuid: force_tab = "processing" self.objprop._fresh_processing_obj_uuid = None # Show Analysis tab for objects with fresh analysis results elif obj_uuid == self.objprop._fresh_analysis_obj_uuid: force_tab = "analysis" self.objprop._fresh_analysis_obj_uuid = None self.objprop.update_properties_from(current_obj, force_tab=force_tab) self.acthandler.selected_objects_changed(selected_groups, selected_objects) self.refresh_plot("selected", update_items, False) def properties_changed(self) -> None: """The properties 'Apply' button was clicked: update object properties, refresh plot and update object view.""" # Get only the properties that have changed from the original values changed_props = self.objprop.get_changed_properties() # Apply only the changed properties to all selected objects for obj in self.objview.get_sel_objects(include_groups=True): obj.mark_roi_as_changed() # Update only the changed properties instead of all properties update_dataset(obj, changed_props) self.objview.update_item(get_uuid(obj)) # Auto-recompute analysis if the object had analysis parameters # Since properties have changed, any analysis results may now be invalid self.processor.auto_recompute_analysis(obj) # Refresh all selected items, including non-visible ones (only_visible=False) # This ensures that plot items are updated for all selected objects, even if # they are temporarily hidden behind other objects self.refresh_plot( "selected", update_items=True, force=False, only_visible=False ) # Update the stored original values to reflect the new state # This ensures subsequent changes are compared against the current values self.objprop.update_original_values() def recompute_processing(self) -> None: """Recompute/rerun selected objects or group with stored processing parameters. This method handles both single objects and groups. For each object, it checks if it has 1-to-1 processing parameters that can be recomputed. Objects without recomputable parameters are skipped. """ # Get selected objects (handles both individual selection and groups) objects = self.objview.get_sel_objects(include_groups=True) if not objects: return # Filter objects that have recomputable processing parameters recomputable_objects: list[SignalObj | ImageObj] = [] for obj in objects: proc_params = extract_processing_parameters(obj) if proc_params is not None and proc_params.pattern == "1-to-1": recomputable_objects.append(obj) if not recomputable_objects: if not execenv.unattended: QW.QMessageBox.information( self, _("Recompute"), _( "Selected object(s) do not have processing parameters " "that can be recomputed." ), ) return # Recompute each object with create_progress_bar( self, _("Recomputing objects"), max_=len(recomputable_objects) ) as progress: for index, obj in enumerate(recomputable_objects): progress.setValue(index + 1) QW.QApplication.processEvents() if progress.wasCanceled(): break # Temporarily set this object as current to use existing infrastructure self.objview.set_current_object(obj) report = self.objprop.apply_processing_parameters( obj=obj, interactive=False ) if not report.success and not execenv.unattended: failtxt = _("Failed to recompute object") if index == len(recomputable_objects) - 1: QW.QMessageBox.warning( self, _("Recompute"), f"{failtxt} '{obj.title}':\n{report.message}", ) else: conttxt = _("Do you want to continue with the next object?") answer = QW.QMessageBox.warning( self, _("Recompute"), f"{failtxt} '{obj.title}':\n{report.message}\n\n{conttxt}", QW.QMessageBox.Yes | QW.QMessageBox.No, ) if answer == QW.QMessageBox.No: break def select_source_objects(self) -> None: """Select source objects associated with the selected object's processing. This method retrieves the source object UUIDs from the selected object's processing parameters and selects them in the object view. """ # Get the selected object (should be exactly one) objects = self.objview.get_sel_objects(include_groups=False) if len(objects) != 1: return obj = objects[0] # Extract processing parameters proc_params = extract_processing_parameters(obj) if proc_params is None: if not execenv.unattended: QW.QMessageBox.information( self, _("Select source objects"), _("Selected object does not have processing metadata."), ) return # Get source UUIDs source_uuids = [] if proc_params.source_uuid: source_uuids.append(proc_params.source_uuid) if proc_params.source_uuids: source_uuids.extend(proc_params.source_uuids) if not source_uuids: if not execenv.unattended: QW.QMessageBox.information( self, _("Select source objects"), _("Selected object does not have source object references."), ) return # Check if source objects still exist (search across all panels) existing_objs = [] for uuid in source_uuids: obj = self.mainwindow.find_object_by_uuid(uuid) if obj is not None: existing_objs.append(obj) if not existing_objs: if not execenv.unattended: if len(source_uuids) == 1: msg = _("Source object no longer exists.") else: msg = _("Source objects no longer exist.") QW.QMessageBox.warning(self, _("Select source objects"), msg) return # Determine which panel contains the source objects # Source objects are always in the same panel (either all signals or all images) if all(uuid in self.objmodel.get_object_ids() for uuid in source_uuids): source_panel = self elif isinstance(existing_objs[0], SignalObj): source_panel = self.mainwindow.signalpanel else: # ImageObj source_panel = self.mainwindow.imagepanel # Switch to the source panel if needed if source_panel is not self: self.mainwindow.set_current_panel(source_panel) # Select the existing source objects # Note: Since all sources are in the same panel, all UUIDs in existing_objs # are guaranteed to be in source_panel source_panel.objview.clearSelection() for obj in existing_objs: source_panel.objview.set_current_item_id(get_uuid(obj), extend=True) # Show info if some sources were deleted missing_count = len(source_uuids) - len(existing_objs) if missing_count > 0 and not execenv.unattended: if len(existing_objs) == 1: msg = _("Selected a single source object") else: msg = _("Selected %d source objects") % len(existing_objs) msg += " (" if missing_count == 1: msg += _("1 source object no longer exists") else: msg += _("%d source objects no longer exist") % missing_count msg += ")" QW.QMessageBox.warning(self, _("Select source objects"), msg) # ------Plotting data in modal dialogs---------------------------------------------- def add_plot_items_to_dialog(self, dlg: PlotDialog, oids: list[str]) -> None: """Add plot items to dialog Args: dlg: Dialog oids: Object IDs """ objs = self.objmodel.get_objects(oids) plot = dlg.get_plot() with create_progress_bar( self, _("Creating plot items"), max_=len(objs) ) as progress: for index, obj in enumerate(objs): progress.setValue(index + 1) QW.QApplication.processEvents() if progress.wasCanceled(): return None item = create_adapter_from_object(obj).make_item( update_from=self.plothandler[get_uuid(obj)] ) item.set_readonly(True) plot.add_item(item, z=0) plot.set_active_item(item) item.unselect() plot.replot() return dlg def open_separate_view( self, oids: list[str] | None = None, edit_annotations: bool = False ) -> PlotDialog | None: """ Open separate view for visualizing selected objects Args: oids: Object IDs (default: None) edit_annotations: Edit annotations (default: False) Returns: Instance of PlotDialog """ if oids is None: oids = self.objview.get_sel_object_uuids(include_groups=True) obj = self.objmodel[oids[-1]] # last selected object if not all(oid in self.plothandler for oid in oids): # This happens for example when opening an already saved workspace with # multiple images, and if the user tries to view in a new window a group of # images without having selected any object yet. In this case, only the # last image is actually plotted (because if the other have the same size # and position, they are hidden), and the plot item of every other image is # not created yet. So we need to refresh the plot to create the plot item of # those images. self.plothandler.refresh_plot( "selected", update_items=True, force=True, only_visible=False ) # Create a new dialog and add plot items to it dlg = self.create_new_dialog( title=obj.title if len(oids) == 1 else None, edit=True, name=f"{obj.PREFIX}_new_window", ) if dlg is None: return None self.add_plot_items_to_dialog(dlg, oids) mgr = dlg.get_manager() toolbar = QW.QToolBar(_("Annotations"), self) dlg.button_layout.insertWidget(0, toolbar) mgr.add_toolbar(toolbar, id(toolbar)) toolbar.setToolButtonStyle(QC.Qt.ToolButtonTextUnderIcon) for tool in self.ANNOTATION_TOOLS: mgr.add_tool(tool, toolbar_id=id(toolbar)) def toggle_annotations(enabled: bool): """Toggle annotation tools / edit buttons visibility""" for widget in (dlg.button_box, toolbar, mgr.get_itemlist_panel()): if enabled: widget.show() else: widget.hide() edit_ann_action = create_action( dlg, _("Annotations"), toggled=toggle_annotations, icon=get_icon("annotations.svg"), ) mgr.add_tool(ActionTool, edit_ann_action) default_toolbar = mgr.get_default_toolbar() action_btn = default_toolbar.widgetForAction(edit_ann_action) action_btn.setToolButtonStyle(QC.Qt.ToolButtonTextBesideIcon) plot = dlg.get_plot() for item in plot.items: item.set_selectable(False) for item in create_adapter_from_object(obj).iterate_shape_items(editable=True): plot.add_item(item) self.__separate_views[dlg] = obj toggle_annotations(edit_annotations) if len(oids) > 1: # If multiple objects are displayed, show the item list panel # (otherwise, it is hidden by default to lighten the dialog, except # if `edit_annotations` is True): plot.manager.get_itemlist_panel().show() if edit_annotations: edit_ann_action.setChecked(True) dlg.show() dlg.finished.connect(self.__separate_view_finished) return dlg def __separate_view_finished(self, result: int) -> None: """Separate view was closed Args: result: result """ dlg: PlotDialog = self.sender() if result == QW.QDialog.DialogCode.Accepted: rw_items = [] for item in dlg.get_plot().get_items(): if not item.is_readonly() and is_plot_item_serializable(item): rw_items.append(item) obj = self.__separate_views[dlg] # Use the annotation adapter to set annotations in the new format adapter = create_adapter_from_object(obj) adapter.set_annotations_from_items(rw_items) self.selection_changed(update_items=True) self.__separate_views.pop(dlg) dlg.deleteLater() def view_images_side_by_side(self, oids: list[str] | None = None) -> None: """ View selected images side-by-side in a grid layout Args: oids: Object IDs (default: None, uses selected objects) """ if oids is None: oids = self.objview.get_sel_object_uuids(include_groups=True) if len(oids) < 2: return objs = self.objmodel.get_objects(oids) # Compute grid dimensions max_cols = 4 num_cols = min(len(objs), max_cols) num_rows = (len(objs) + num_cols - 1) // num_cols # Create dialog with synchronized plots dlg = SyncPlotDialog(title=_("View images side-by-side"), toolbar=False) dlg.setObjectName(f"{self.PANEL_STR_ID}_side_by_side") # Add each image to the grid for idx, obj in enumerate(objs): row = idx // num_cols col = idx % num_cols # Create plot with title plot = BasePlot(options=BasePlotOptions(title=obj.title, type="image")) # Create plot item from object adapter = create_adapter_from_object(obj) item = adapter.make_item() item.set_readonly(True) plot.add_item(item, z=0) # Add ROI items if available if obj.roi is not None: for roi_item in adapter.iterate_roi_items(editable=False): plot.add_item(roi_item) # Add to synchronized dialog dlg.add_plot(row, col, plot, sync=True) # Finalize and show dialog dlg.finalize_configuration() # Set explicit size for proper display dlg.resize(20 + 440 * num_cols, 20 + 400 * num_rows) exec_dialog(dlg) def get_dialog_size(self) -> tuple[int, int]: """Get dialog size (minimum and maximum)""" # Resize the dialog so that it's at least MINDIALOGSIZE (absolute values), # and at most MAXDIALOGSIZE (% of the main window size): minwidth, minheight = self.MINDIALOGSIZE maxwidth = int(self.mainwindow.width() * self.MAXDIALOGSIZE) maxheight = int(self.mainwindow.height() * self.MAXDIALOGSIZE) size = min(minwidth, maxwidth), min(minheight, maxheight) return size def create_new_dialog( self, edit: bool = False, toolbar: bool = True, title: str | None = None, name: str | None = None, options: dict[str, Any] | None = None, ) -> PlotDialog | None: """Create new pop-up signal/image plot dialog. Args: edit: Edit mode toolbar: Show toolbar title: Dialog title name: Dialog object name options: Plot options Returns: Plot dialog instance """ plot_options = self.plothandler.get_plot_options() if options is not None: plot_options = plot_options.copy(options) # pylint: disable=not-callable dlg = PlotDialog( parent=self.parentWidget(), title=APP_NAME if title is None else f"{title} - {APP_NAME}", options=plot_options, toolbar=toolbar, icon="DataLab.svg", edit=edit, size=self.get_dialog_size(), ) dlg.setObjectName(name) return dlg def get_roi_editor_output( self, mode: Literal["apply", "extract", "define"] = "apply" ) -> tuple[TypeROI, bool] | None: """Get ROI data (array) from specific dialog box. Args: mode: Mode of operation, either "apply" (define ROI, then apply it to selected objects), "extract" (define ROI, then extract data from it), or "define" (define ROI without applying or extracting). Returns: A tuple containing the ROI object and a boolean indicating whether the dialog was accepted or not. """ obj = self.objview.get_sel_objects(include_groups=True)[-1] item = create_adapter_from_object(obj).make_item( update_from=self.plothandler[get_uuid(obj)] ) roi_editor_class = self.get_roieditor_class() # pylint: disable=not-callable roi_editor = roi_editor_class( parent=self.parentWidget(), obj=obj, mode=mode, item=item, options=self.plothandler.get_plot_options(), size=self.get_dialog_size(), ) if exec_dialog(roi_editor): return roi_editor.get_roieditor_results() return None def get_objects_with_dialog( self, title: str, comment: str = "", nb_objects: int = 1, parent: QW.QWidget | None = None, ) -> TypeObj | None: """Get object with dialog box. Args: title: Dialog title comment: Optional dialog comment nb_objects: Number of objects to select parent: Parent widget Returns: Object(s) (signal(s) or image(s), or None if dialog was canceled) """ parent = self if parent is None else parent dlg = objectview.GetObjectsDialog(parent, self, title, comment, nb_objects) if exec_dialog(dlg): return dlg.get_selected_objects() return None def __show_no_result_warning(self): """Show no result warning""" msg = "
    ".join( [ _("No result currently available for this object."), "", _( "This feature leverages the results of previous analysis " "performed on the selected object(s).

    " "To compute results, select one or more objects and choose " "a feature in the Analysis menu." ), ] ) if not execenv.unattended: QW.QMessageBox.information(self, APP_NAME, msg) def show_results(self) -> None: """Show results""" objs = self.objview.get_sel_objects(include_groups=True) rdatadict = create_resultdata_dict(objs) if rdatadict: for rdata in rdatadict.values(): show_resultdata(self.parentWidget(), rdata, f"{objs[0].PREFIX}_results") else: self.__show_no_result_warning() def toggle_result_label_visibility(self, state: bool) -> None: """Toggle the visibility of the merged result label on the plot. Args: state: True to show the label, False to hide it """ show_label = state # Update the configuration Conf.view.show_result_label.set(show_label) # Synchronize the other panel's action state for panel in (self.mainwindow.signalpanel, self.mainwindow.imagepanel): if panel is not self and panel.acthandler.show_label_action is not None: panel.acthandler.show_label_action.blockSignals(True) panel.acthandler.show_label_action.setChecked(show_label) panel.acthandler.show_label_action.blockSignals(False) # Refresh the plot to show/hide the label self.plothandler.toggle_result_label_visibility(show_label) def __add_result_signal( self, x: np.ndarray | list[float], y: np.ndarray | list[float], title: str, xaxis: str, yaxis: str, group_id: str | None = None, ) -> None: """Add result signal Args: x: X data y: Y data title: Signal title xaxis: X axis label yaxis: Y axis label group_id: UUID of the group to add the signal to. If None, add to current group. """ xdata = np.array(x, dtype=float) ydata = np.array(y, dtype=float) obj = create_signal( title=f"{title}: {yaxis} = f({xaxis})", x=xdata, y=ydata, labels=[xaxis, yaxis], ) self.mainwindow.signalpanel.add_object(obj, group_id=group_id) def __create_plot_result_param_class(self, rdata: ResultData) -> type[gds.DataSet]: """Create PlotResultParam class dynamically based on result data. Args: rdata: Result data Returns: PlotResultParam class """ # Build X and Y choices from result data headers xchoices = (("indices", _("Indices")),) for xlabel in rdata.headers: # If this column data is not numeric, we skip it: if not isinstance( rdata.results[0].get_column_values(xlabel)[0], (int, float, np.number) ): continue xchoices += ((xlabel, xlabel),) ychoices = xchoices[1:] # Determine default plot kind based on result data default_kind = ( "one_curve_per_object" if any(len(result.to_dataframe()) > 1 for result in rdata.results) else "one_curve_per_title" ) class PlotResultParam(gds.DataSet): """Plot results parameters""" kind = gds.ChoiceItem( _("Plot kind"), ( ( "one_curve_per_object", _("One curve per object (or ROI) and per result title"), ), ("one_curve_per_title", _("One curve per result title")), ), default=default_kind, ) xaxis = gds.ChoiceItem(_("X axis"), xchoices, default="indices") yaxis = gds.ChoiceItem(_("Y axis"), ychoices, default=ychoices[0][0]) return PlotResultParam def __plot_result( self, category: str, rdata: ResultData, objs: list[SignalObj | ImageObj], param: gds.DataSet | None = None, result_group_id: str | None = None, ) -> None: """Plot results for a specific category Args: category: Result category rdata: Result data objs: List of objects param: Plot result parameters. If None, show dialog to get parameters. result_group_id: UUID of the group to add result signals to. If None, add to current group. """ # Regrouping ResultShape results by their `title` attribute: grouped_results: dict[str, list[GeometryAdapter | TableAdapter]] = {} for result in rdata.results: grouped_results.setdefault(result.title, []).append(result) # From here, results are already grouped by their `category` attribute, # and then by their `title` attribute. We can now plot them. # # Now, we have two common use cases: # 1. Plotting one curve per object (signal/image) and per `title` # attribute, if each selected object contains a result object # with multiple values (e.g. from a blob detection feature). # 2. Plotting one curve per `title` attribute, if each selected object # contains a result object with a single value (e.g. from a FHWM # feature) - in that case, we select only the first value of each # result object. if param is None: # Create parameter class and show dialog PlotResultParam = self.__create_plot_result_param_class(rdata) comment = ( _( "Plot results obtained from previous analyses.

    " "This plot is based on results associated with '%s' prefix." ) % category ) param = PlotResultParam(_("Plot results"), comment=comment) if not param.edit(parent=self.parentWidget()): return if param.kind == "one_curve_per_title": # One curve per ROI (if any) and per result title # ------------------------------------------------------------------ # Begin by checking if all results have the same number of ROIs: # for simplicity, let's check the number of unique ROI indices. all_roi_indexes = [ result.get_unique_roi_indices() for result in rdata.results ] # Check if all roi_indexes are the same: if len(set(map(tuple, all_roi_indexes))) > 1: if not execenv.unattended: QW.QMessageBox.warning( self, _("Plot results"), _( "All objects associated with results must have the " "same regions of interest (ROIs) to plot results " "together." ), ) return obj = objs[0] # Build a string with source object short IDs (max 3, then use "...") max_ids_to_show = 3 short_ids = [get_short_id(obj) for obj in objs] if len(short_ids) <= max_ids_to_show: source_ids = ", ".join(short_ids) else: # Show first 2, "...", then last one: "s001, s002, ..., s010" source_ids = ( ", ".join(short_ids[: max_ids_to_show - 1]) + ", ..., " + short_ids[-1] ) for i_roi in all_roi_indexes[0]: roi_suffix = f"|ROI{int(i_roi + 1)}" if i_roi >= 0 else "" for title, results in grouped_results.items(): # title x, y = [], [] for index, result in enumerate(results): if param.xaxis == "indices": x.append(index) else: x.append(result.get_column_values(param.xaxis, i_roi)[0]) y.append(result.get_column_values(param.yaxis, i_roi)[0]) if i_roi >= 0: roi_suffix = f"|{obj.roi.get_single_roi_title(int(i_roi))}" self.__add_result_signal( x, y, f"{title} ({source_ids}){roi_suffix}", param.xaxis, param.yaxis, result_group_id, ) else: # One curve per result title, per object and per ROI # ------------------------------------------------------------------ for title, results in grouped_results.items(): # title for index, result in enumerate(results): # object obj = objs[index] roi_indices = result.get_unique_roi_indices() for i_roi in roi_indices: # ROI roi_suffix = "" if i_roi >= 0: roi_suffix = f"|{obj.roi.get_single_roi_title(int(i_roi))}" roi_data = result.get_roi_data(i_roi) if param.xaxis == "indices": x = list(range(len(roi_data))) else: x = roi_data[param.xaxis].values y = roi_data[param.yaxis].values shid = get_short_id(objs[index]) stitle = f"{title} ({shid}){roi_suffix}" self.__add_result_signal( x, y, stitle, param.xaxis, param.yaxis, result_group_id ) def plot_results( self, kind: str | None = None, xaxis: str | None = None, yaxis: str | None = None, ) -> None: """Plot results Args: kind: Plot kind. Either "one_curve_per_object" or "one_curve_per_title". If None, show dialog to get parameters. xaxis: X axis column name. If None, show dialog to get parameters. yaxis: Y axis column name. If None, show dialog to get parameters. """ objs = self.objview.get_sel_objects(include_groups=True) rdatadict = create_resultdata_dict(objs) if rdatadict: # Always use or create a "Results" group for all plot results rgroup_title = _("Results") target_panel = self.mainwindow.signalpanel try: # Check if a "Results" group already exists in the signal panel rgroup = target_panel.objmodel.get_group_from_title(rgroup_title) except KeyError: # Create the group if it doesn't exist rgroup = target_panel.add_group(rgroup_title) result_group_id = get_uuid(rgroup) for category, rdata in rdatadict.items(): param = None if kind is not None and xaxis is not None and yaxis is not None: # Create parameter object programmatically PlotResultParam = self.__create_plot_result_param_class(rdata) param = PlotResultParam() param.kind = kind param.xaxis = xaxis param.yaxis = yaxis self.__plot_result(category, rdata, objs, param, result_group_id) else: self.__show_no_result_warning() def delete_results(self) -> None: """Delete results""" objs = self.objview.get_sel_objects(include_groups=True) rdatadict = create_resultdata_dict(objs) if rdatadict: if execenv.unattended: confirmed = True else: answer = QW.QMessageBox.warning( self, _("Delete results"), _( "Are you sure you want to delete all results " "of the selected object(s)?" ), QW.QMessageBox.Yes | QW.QMessageBox.No, ) confirmed = answer == QW.QMessageBox.Yes if confirmed: objs = self.objview.get_sel_objects(include_groups=True) for obj in objs: # Remove all table and geometry results using adapter methods TableAdapter.remove_all_from(obj) GeometryAdapter.remove_all_from(obj) if obj is self.objview.get_current_object(): self.objprop.update_properties_from(obj) # Update action states to reflect the removal selected_groups = self.objview.get_sel_groups() self.acthandler.selected_objects_changed(selected_groups, objs) self.refresh_plot("selected", True, False) else: self.__show_no_result_warning() def add_label_with_title( self, title: str | None = None, ignore_msg: bool = True ) -> None: """Add a label with object title on the associated plot Args: title: Label title. Defaults to None. If None, the title is the object title. ignore_msg: If True, do not show the information message. Defaults to True. If False, show a message box to inform the user that the label has been added as an annotation, and that it can be edited or removed using the annotation editing window. """ objs = self.objview.get_sel_objects(include_groups=True) for obj in objs: create_adapter_from_object(obj).add_label_with_title(title=title) if ( not Conf.view.ignore_title_insertion_msg.get(False) and not ignore_msg and not execenv.unattended ): answer = QW.QMessageBox.information( self, _("Annotation added"), _( "The label has been added as an annotation. " "You can edit or remove it using the annotation editing window." "

    " "Choosing to ignore this message will prevent it " "from being displayed again." ), QW.QMessageBox.Ok | QW.QMessageBox.Ignore, ) if answer == QW.QMessageBox.Ignore: Conf.view.ignore_title_insertion_msg.set(True) self.refresh_plot("selected", True, False) DataLab-1.0.2/datalab/gui/panel/image.py000066400000000000000000000126431511411446000177140ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ .. Image panel (see parent package :mod:`datalab.gui.panel`) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING, Type from plotpy.tools import ( AnnotatedCircleTool, AnnotatedEllipseTool, AnnotatedPointTool, AnnotatedRectangleTool, AnnotatedSegmentTool, LabelTool, ) from sigima.io.image import ImageIORegistry from sigima.objects import ImageDatatypes, ImageObj, ImageROI, NewImageParam from datalab.config import Conf, _ from datalab.gui import roieditor from datalab.gui.actionhandler import ImageActionHandler from datalab.gui.newobject import create_image_gui from datalab.gui.panel.base import BaseDataPanel from datalab.gui.plothandler import ImagePlotHandler from datalab.gui.processor.image import ImageProcessor if TYPE_CHECKING: from plotpy.plot import BasePlot from qtpy import QtWidgets as QW from datalab.gui.docks import DockablePlotWidget class ImagePanel(BaseDataPanel[ImageObj, ImageROI, roieditor.ImageROIEditor]): """Object handling the item list, the selected item properties and plot, specialized for Image objects""" PANEL_STR = _("Image Panel") PANEL_STR_ID = "image" PARAMCLASS = ImageObj MINDIALOGSIZE = (800, 800) # The following tools are used to create annotations on images. The annotation # items are created using PlotPy's default settings. Those appearance settings # may be modified in the configuration (see `datalab.config`). ANNOTATION_TOOLS = ( AnnotatedCircleTool, AnnotatedSegmentTool, AnnotatedRectangleTool, AnnotatedPointTool, AnnotatedEllipseTool, LabelTool, ) IO_REGISTRY = ImageIORegistry H5_PREFIX = "DataLab_Ima" # pylint: disable=duplicate-code @staticmethod def get_roi_class() -> Type[ImageROI]: """Return ROI class""" return ImageROI @staticmethod def get_roieditor_class() -> Type[roieditor.ImageROIEditor]: """Return ROI editor class""" return roieditor.ImageROIEditor def __init__( self, parent: QW.QWidget, dockableplotwidget: DockablePlotWidget, panel_toolbar: QW.QToolBar, ) -> None: super().__init__(parent) self.plothandler = ImagePlotHandler(self, dockableplotwidget.plotwidget) self.processor = ImageProcessor(self, dockableplotwidget.plotwidget) view_toolbar = dockableplotwidget.toolbar self.acthandler = ImageActionHandler(self, panel_toolbar, view_toolbar) # ------Refreshing GUI-------------------------------------------------------------- def plot_lut_changed(self, plot: BasePlot) -> None: """The LUT of the plot has changed: updating image objects accordingly Args: plot: Plot object """ zmin, zmax = plot.get_axis_limits(plot.colormap_axis) for obj in self.objview.get_sel_objects(): obj.zscalemin, obj.zscalemax = zmin, zmax if obj is self.objview.get_current_object(): self.objprop.update_properties_from(obj) # ------Creating, adding, removing objects------------------------------------------ def get_newparam_from_current( self, newparam: NewImageParam | None = None, title: str | None = None ) -> NewImageParam | None: """Get new object parameters from the current object. Args: newparam (guidata.dataset.DataSet): new object parameters. If None, create a new one. title: new object title. If None, use the current object title, or the default title. Returns: New object parameters """ curobj: ImageObj = self.objview.get_current_object() if newparam is None: newparam = NewImageParam() if title is not None: newparam.title = title if curobj is not None and Conf.proc.use_image_dims.get(True): # Use current image dimensions for new image: newparam.height, newparam.width = curobj.data.shape newparam.dtype = ImageDatatypes.from_numpy_dtype(curobj.data.dtype) return newparam def new_object( self, param: NewImageParam | None = None, edit: bool = False, add_to_panel: bool = True, ) -> ImageObj | None: """Create a new object (image). Args: param (guidata.dataset.DataSet): new object parameters edit (bool): Open a dialog box to edit parameters (default: False). When False, the object is created with default parameters and creation parameters are stored in metadata for interactive editing. add_to_panel (bool): Add the object to the panel (default: True) Returns: New object """ if not self.mainwindow.confirm_memory_state(): return None param = self.get_newparam_from_current(param) image = create_image_gui(param, edit=edit, parent=self.parentWidget()) if image is None: return None if add_to_panel: self.add_object(image) return image def toggle_show_contrast(self, state: bool) -> None: """Toggle show contrast option""" Conf.view.show_contrast.set(state) self.refresh_plot("selected", True, False) DataLab-1.0.2/datalab/gui/panel/macro.py000066400000000000000000000466541511411446000177440ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ .. Macro panel (see parent package :mod:`datalab.gui.panel`) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import os.path as osp import re from typing import TYPE_CHECKING from guidata.config import CONF from guidata.configtools import get_font, get_icon from guidata.qthelpers import add_actions, create_action from guidata.widgets.console.shell import PythonShellWidget from guidata.widgets.dockable import DockableWidgetMixin from qtpy import QtCore as QC from qtpy import QtWidgets as QW from qtpy.compat import getopenfilename, getsavefilename from datalab.config import Conf, _ from datalab.env import execenv from datalab.gui.macroeditor import Macro from datalab.gui.panel.base import AbstractPanel from datalab.utils.qthelpers import ( create_menu_button, qt_try_loadsave_file, save_restore_stds, ) if TYPE_CHECKING: from guidata.widgets.codeeditor import CodeEditor from datalab.h5.native import NativeH5Reader, NativeH5Writer class MacroTabs(QW.QTabWidget): """Macro tabwidget Args: parent (QWidget): Parent widget """ SIG_CONTEXT_MENU = QC.Signal(QC.QPoint) SIG_RENAME = QC.Signal(int) SIG_REMOVE = QC.Signal(int) def __init__(self, parent=None) -> None: super().__init__(parent) self.setTabsClosable(True) self.setMovable(True) self.tabBarDoubleClicked.connect(self.__rename) self.tabCloseRequested.connect(self.__remove) self.__titles: list[str] = [] def clear(self) -> None: """Override Qt method""" super().clear() self.__titles.clear() def contextMenuEvent(self, event): # pylint: disable=C0103 """Override Qt method""" self.SIG_CONTEXT_MENU.emit(event.globalPos()) def __rename(self, index: int) -> None: """Rename tab Args: index: Index of the tab """ self.SIG_RENAME.emit(index + 1) def __remove(self, index: int) -> None: """Remove tab Args: index: Index of the tab """ self.SIG_REMOVE.emit(index + 1) def __update_tab_titles(self) -> None: """Update tab titles""" for number, title in enumerate(self.__titles, 1): self.setTabText(number - 1, f"{number:02d}: {title}") def add_tab(self, macro: Macro) -> int: """Add tab Args: macro: Macro object Returns: int: Number of the tab (starting at 1) """ self.__titles.append(macro.title) index = self.addTab(macro.editor, "") self.__update_tab_titles() return index + 1 # Numbering starts at 1 def remove_tab(self, number: int) -> None: """Remove tab Args: number: Number of the tab (starting at 1) """ self.removeTab(number - 1) self.__titles.pop(number - 1) self.__update_tab_titles() def get_widget(self, number: int) -> CodeEditor: """Return macro editor widget at number Args: number: Number of the tab (starting at 1) Returns: Macro editor widget """ return self.widget(number - 1) def set_current_number(self, number: int) -> None: """Set current tab number Args: number: Number of the tab (starting at 1) """ self.setCurrentIndex(number - 1) def get_current_number(self) -> int: """Return current tab number Returns: int: Number of the tab (starting at 1) """ return self.currentIndex() + 1 def set_tab_title(self, number: int, name: str) -> None: """Set tab title Args: number: Number of the tab (starting at 1) name: Macro name """ self.__titles[number - 1] = name self.__update_tab_titles() class MacroPanel(AbstractPanel, DockableWidgetMixin): """Macro Panel widget Args: parent (QWidget): Parent widget """ LOCATION = QC.Qt.RightDockWidgetArea PANEL_STR = _("Macro panel") H5_PREFIX = "DataLab_Mac" SIG_OBJECT_MODIFIED = QC.Signal() FILE_FILTERS = f"{_('Python files')} (*.py)" def __init__(self, parent: QW.QMainWindow) -> None: super().__init__(parent) self.setWindowTitle(self.PANEL_STR) self.setWindowIcon(get_icon("libre-gui-cogs.svg")) self.setOrientation(QC.Qt.Vertical) self.context_menu = QW.QMenu() self.tabwidget_tb = QW.QToolBar(self) self.tabwidget_tb.setOrientation(QC.Qt.Vertical) self.console = PythonShellWidget(self, read_only=True) self.console.setMaximumBlockCount(5000) font = get_font(CONF, "console") font.setPointSize(10) self.console.set_font(font) self.console.write(_("-***- Macro Console -***-"), prompt=True) self.tabwidget = MacroTabs(self) self.tabwidget.SIG_RENAME.connect(self.rename_macro) self.tabwidget.SIG_REMOVE.connect(self.remove_macro) self.tabwidget.currentChanged.connect(self.__update_actions) tabwidget_with_tb = QW.QWidget(self) tabwidget_with_tb.setLayout(QW.QHBoxLayout()) tabwidget_with_tb.layout().addWidget(self.tabwidget_tb) tabwidget_with_tb.layout().addWidget(self.tabwidget) # Put console in a groupbox to have a title console_groupbox = QW.QGroupBox(_("Console"), self) console_groupbox.setLayout(QW.QHBoxLayout()) console_groupbox.layout().addWidget(self.console) # Put console groupbox in a frame to have a nice margin console_frame = QW.QFrame(self) console_frame.setLayout(QW.QHBoxLayout()) console_frame.layout().addWidget(console_groupbox) for widget in (tabwidget_with_tb, console_frame): self.addWidget(widget) self.setStretchFactor(0, 2) self.setStretchFactor(1, 1) self.run_action = None self.stop_action = None self.obj_actions: list[QW.QAction] = [] # Object-dependent actions self.__macros: list[Macro] = [] self.setup_actions() def update_color_mode(self) -> None: """Update color mode according to the current theme""" self.console.update_color_mode() for macro in self.__macros: macro.editor.update_color_mode() # ------AbstractPanel interface----------------------------------------------------- # pylint: disable=unused-argument def get_serializable_name(self, obj: Macro) -> str: """Return serializable name of object""" title = re.sub("[^-a-zA-Z0-9_.() ]+", "", obj.title.replace("/", "_")) name = f"{obj.PREFIX}{(self.__macros.index(obj) + 1):03d}: {title}" return name def serialize_to_hdf5(self, writer: NativeH5Writer) -> None: """Serialize whole panel to a HDF5 file Args: writer: HDF5 writer """ with writer.group(self.H5_PREFIX): for obj in self.__macros: self.serialize_object_to_hdf5(obj, writer) def deserialize_from_hdf5( self, reader: NativeH5Reader, reset_all: bool = False ) -> None: """Deserialize whole panel from a HDF5 file Args: reader: HDF5 reader reset_all: If True, preserve original UUIDs (workspace reload). If False, regenerate UUIDs (importing objects). """ with reader.group(self.H5_PREFIX): for name in reader.h5.get(self.H5_PREFIX, []): # Contrary to signal or image panels, macros are not stored # in a group but directly in the root of the HDF5 file obj = self.deserialize_object_from_hdf5(reader, name, reset_all) self.add_object(obj) def __len__(self) -> int: """Return number of objects""" return len(self.__macros) def __getitem__(self, nb: int) -> Macro: """Return object from its number (1 to N)""" return self.__macros[nb - 1] def __iter__(self): """Iterate over objects""" return iter(self.__macros) def create_object(self) -> Macro: """Create object. Returns: Macro object """ macro = Macro(self.console) macro.objectNameChanged.connect(self.macro_name_changed) macro.STARTED.connect( lambda orig_macro=macro: self.macro_state_changed(orig_macro, True) ) macro.FINISHED.connect( lambda orig_macro=macro: self.macro_state_changed(orig_macro, False) ) macro.MODIFIED.connect(self.macro_contents_changed) return macro def add_object(self, obj: Macro) -> None: """Add object. Args: obj: Macro object """ self.__macros.append(obj) number = self.tabwidget.add_tab(obj) self.SIG_OBJECT_ADDED.emit() self.tabwidget.set_current_number(number) def remove_all_objects(self) -> None: """Remove all objects""" self.tabwidget.clear() self.__macros.clear() super().remove_all_objects() # ---- Macro panel API ------------------------------------------------------------- def setup_actions(self) -> None: """Setup macro menu actions""" self.run_action = create_action( self, _("Run macro"), icon=get_icon("libre-camera-flash-on.svg"), triggered=self.run_macro, shortcut="Ctrl+F5", ) self.stop_action = create_action( self, _("Stop macro"), icon=get_icon("libre-camera-flash-off.svg"), triggered=self.stop_macro, shortcut="Shift+F5", ) self.stop_action.setDisabled(True) add_act = create_action( self, _("New macro"), icon=get_icon("libre-gui-add.svg"), triggered=self.add_macro, ) ren_act = create_action( self, _("Rename macro"), icon=get_icon("libre-gui-pencil.svg"), triggered=self.rename_macro, ) imp_act = create_action( self, _("Import macro from file"), icon=get_icon("fileopen_py.svg"), triggered=self.import_macro_from_file, ) exp_act = create_action( self, _("Export macro to file"), icon=get_icon("filesave_py.svg"), triggered=self.export_macro_to_file, ) rem_act = create_action( self, _("Remove macro"), icon=get_icon("libre-gui-action-delete.svg"), triggered=self.remove_macro, ) self.obj_actions += [ self.run_action, self.stop_action, ren_act, exp_act, rem_act, ] self.tabwidget.SIG_CONTEXT_MENU.connect(self.context_menu.popup) tabwidget_corner = QW.QToolBar(_("Macro editor toolbar"), self) self.context_menu.aboutToShow.connect(self.__update_actions) tabwidget_menu_btn = create_menu_button(self, self.context_menu) tabwidget_corner.addWidget(tabwidget_menu_btn) self.tabwidget.setCornerWidget(tabwidget_corner) main_actions = [ self.run_action, self.stop_action, None, add_act, ren_act, imp_act, exp_act, ] add_actions(tabwidget_corner, [self.run_action, self.stop_action]) add_actions(self.tabwidget_tb, main_actions) add_actions(self.context_menu, main_actions + [None, rem_act]) self.__update_actions() def __update_actions(self) -> None: """Update actions""" not_empty = self.tabwidget.count() > 0 for action in self.obj_actions: action.setEnabled(not_empty) if not_empty: macro = self.get_macro() if macro is not None: macro: Macro self.macro_state_changed(macro, macro.is_running()) def get_macro(self, number_or_title: int | str | None = None) -> Macro | None: """Return macro at number (if number is None, return current macro) Args: number: Number of the macro (starting at 1) or title of the macro. Defaults to None (current macro). Returns: Macro object or None (if not found) """ if number_or_title is None: number_or_title = self.tabwidget.get_current_number() if isinstance(number_or_title, str): return self.get_macro(self.get_number_from_title(number_or_title)) for macro in self.__macros: if self.tabwidget.get_widget(number_or_title) is macro.editor: return macro return None def get_number_from_title(self, title: str) -> int | None: """Return macro number from title Args: title: Title of the macro Returns: Number of the macro (starting at 1) or None (if not found) """ for number in range(1, self.tabwidget.count() + 1): if self.tabwidget.tabText(number - 1).endswith(title): return number return None def get_number_from_macro(self, macro: Macro) -> int | None: """Return macro number from macro object Args: macro: Macro object Returns: Number of the macro (starting at 1) or None (if not found) """ for number in range(1, self.tabwidget.count() + 1): if self.tabwidget.get_widget(number) is macro.editor: return number return None def get_macro_titles(self) -> list[str]: """Return list of macro titles""" return [macro.title for macro in self.__macros] def macro_contents_changed(self) -> None: """One of the macro contents has changed""" self.SIG_OBJECT_MODIFIED.emit() def run_macro(self, number_or_title: int | str | None = None) -> None: """Run current macro Args: number: Number of the macro (starting at 1). Defaults to None (run current macro, or does nothing if there is no macro). """ macro = self.get_macro(number_or_title) if macro is not None: macro: Macro macro.run() def stop_macro(self, number_or_title: int | str | None = None) -> None: """Stop current macro Args: number: Number of the macro (starting at 1). Defaults to None (run current macro, or does nothing if there is no macro). """ macro = self.get_macro(number_or_title) if macro is not None: macro: Macro macro.kill() def macro_state_changed(self, orig_macro: Macro, state: bool) -> None: """Macro state has changed (True: started, False: stopped) Args: orig_macro: Macro object state: State of the macro """ macro = self.get_macro() if macro is orig_macro: self.run_action.setEnabled(not state) self.stop_action.setEnabled(state) def add_macro(self) -> Macro: """Add macro, optionally with name Returns: Macro object """ macro = self.create_object() self.add_object(macro) if not macro.title: self.rename_macro() return macro def macro_name_changed(self, name: str) -> None: """Macro name has been changed Args: name: New name of the macro """ number = self.get_number_from_macro(self.sender()) if number is not None: self.tabwidget.set_tab_title(number, name) def rename_macro(self, number: int | None = None, title: str | None = None) -> None: """Rename macro Args: number: Number of the macro (starting at 1). Defaults to None. title: Title of the macro. Defaults to None. """ macro = self.get_macro(number) assert isinstance(macro, Macro) if title is None: title, valid = QW.QInputDialog.getText( self, _("Rename"), _("New title:"), QW.QLineEdit.Normal, macro.title, ) title = title if valid else None if title: macro.title = title if number is not None: self.tabwidget.set_current_number(number) def export_macro_to_file( self, number_or_title: int | str | None = None, filename: str | None = None ) -> None: """Export macro to file Args: number_or_title: Number of the macro (starting at 1) or title of the macro. Defaults to None. filename: Filename. Defaults to None. Raises: ValueError: If title is not found """ macro = self.get_macro(number_or_title) assert isinstance(macro, Macro) if filename is None: basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filt = getsavefilename( self, _("Save as"), basedir, self.FILE_FILTERS ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "save"): Conf.main.base_dir.set(filename) macro.title = osp.basename(filename) macro.to_file(filename) def import_macro_from_file(self, filename: str | None = None) -> int: """Import macro from file Args: filename: Filename. Defaults to None. Returns: Number of the macro (starting at 1) """ if filename is None: basedir = Conf.main.base_dir.get() with save_restore_stds(): filename, _filt = getopenfilename( self, _("Open"), basedir, self.FILE_FILTERS ) if filename: with qt_try_loadsave_file(self.parentWidget(), filename, "load"): Conf.main.base_dir.set(filename) macro = self.add_macro() macro.from_file(filename) return self.get_number_from_macro(macro) return -1 def remove_macro(self, number_or_title: int | str | None = None) -> None: """Remove macro Args: number_or_title: Number of the macro (starting at 1) or title of the macro. Defaults to None. """ if number_or_title is None: number_or_title = self.tabwidget.get_current_number() if isinstance(number_or_title, str): number_or_title = self.get_number_from_title(number_or_title) txt = "
    ".join( [ _( "When closed, the macro is permanently destroyed, " "unless it has been exported first." ), "", _("Do you want to continue?"), ] ) btns = QW.QMessageBox.StandardButton.Yes | QW.QMessageBox.StandardButton.No if execenv.unattended: choice = QW.QMessageBox.StandardButton.Yes else: choice = QW.QMessageBox.warning(self, self.windowTitle(), txt, btns) if choice == QW.QMessageBox.StandardButton.Yes: self.tabwidget.remove_tab(number_or_title) self.__macros.pop(number_or_title - 1) self.SIG_OBJECT_REMOVED.emit() DataLab-1.0.2/datalab/gui/panel/signal.py000066400000000000000000000127361511411446000201120ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ .. Signal panel (see parent package :mod:`datalab.gui.panel`) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING, Type import guidata.dataset as gds from guidata.config import ValidationMode, temporary_validation_mode from plotpy.tools import ( HCursorTool, HRangeTool, LabelTool, RectangleTool, SegmentTool, VCursorTool, XCursorTool, ) from sigima.io.signal import SignalIORegistry from sigima.objects import SignalObj, SignalROI from datalab.adapters_plotpy import CURVESTYLES from datalab.config import Conf, _ from datalab.gui import roieditor from datalab.gui.actionhandler import SignalActionHandler from datalab.gui.newobject import NewSignalParam, create_signal_gui from datalab.gui.panel.base import BaseDataPanel from datalab.gui.plothandler import SignalPlotHandler from datalab.gui.processor.signal import SignalProcessor if TYPE_CHECKING: from qtpy import QtWidgets as QW from datalab.gui.docks import DockablePlotWidget class SignalPanel(BaseDataPanel[SignalObj, SignalROI, roieditor.SignalROIEditor]): """Object handling the item list, the selected item properties and plot, specialized for Signal objects""" PANEL_STR = _("Signal Panel") PANEL_STR_ID = "signal" PARAMCLASS = SignalObj # The following tools are used to create annotations on signals. The annotation # items are created using PlotPy's default settings. Those appearance settings # may be modified in the configuration (see `datalab.config`). ANNOTATION_TOOLS = ( LabelTool, VCursorTool, HCursorTool, XCursorTool, SegmentTool, RectangleTool, HRangeTool, ) IO_REGISTRY = SignalIORegistry H5_PREFIX = "DataLab_Sig" # pylint: disable=duplicate-code @staticmethod def get_roi_class() -> Type[SignalROI]: """Return ROI class""" return SignalROI @staticmethod def get_roieditor_class() -> Type[roieditor.SignalROIEditor]: """Return ROI editor class""" return roieditor.SignalROIEditor def __init__( self, parent: QW.QWidget, dockableplotwidget: DockablePlotWidget, panel_toolbar: QW.QToolBar, ) -> None: super().__init__(parent) self.plothandler = SignalPlotHandler(self, dockableplotwidget.plotwidget) self.processor = SignalProcessor(self, dockableplotwidget.plotwidget) view_toolbar = dockableplotwidget.toolbar self.acthandler = SignalActionHandler(self, panel_toolbar, view_toolbar) # ------Creating, adding, removing objects------------------------------------------ def get_newparam_from_current( self, newparam: NewSignalParam | None = None, title: str | None = None ) -> NewSignalParam | None: """Get new object parameters from the current object. Args: newparam (guidata.dataset.DataSet): new object parameters. If None, create a new one. title: new object title. If None, use the current object title, or the default title. Returns: New object parameters """ curobj: SignalObj = self.objview.get_current_object() if newparam is None: newparam = NewSignalParam() if title is not None: newparam.title = title if curobj is not None and Conf.proc.use_signal_bounds.get(False): # Use current signal bounds for new signal: newparam.size = len(curobj.data) # try to set xmin/xmax from current signal data range with temporary_validation_mode(ValidationMode.STRICT): try: newparam.xmin = curobj.x.min() except gds.DataItemValidationError: pass try: newparam.xmax = curobj.x.max() except gds.DataItemValidationError: pass return newparam def new_object( self, param: NewSignalParam | None = None, edit: bool = False, add_to_panel: bool = True, ) -> SignalObj | None: """Create a new object (signal). Args: param (guidata.dataset.DataSet): new object parameters edit (bool): Open a dialog box to edit parameters (default: False). When False, the object is created with default parameters and creation parameters are stored in metadata for interactive editing. add_to_panel (bool): Add the new object to the panel (default: True) Returns: New object """ if not self.mainwindow.confirm_memory_state(): return None param = self.get_newparam_from_current(param) signal = create_signal_gui(param, edit=edit, parent=self.parentWidget()) if signal is None: return None if add_to_panel: self.add_object(signal) return signal # ------Plotting-------------------------------------------------------------------- def toggle_anti_aliasing(self, state: bool) -> None: """Toggle anti-aliasing on/off Args: state: state of the anti-aliasing """ self.plothandler.toggle_anti_aliasing(state) def reset_curve_styles(self) -> None: """Reset curve styles""" CURVESTYLES.reset_styles() DataLab-1.0.2/datalab/gui/plothandler.py000066400000000000000000000776301511411446000200560ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Plot handler ============ The :mod:`datalab.gui.plothandler` module provides plot handlers for signal and image panels, that is, classes handling `PlotPy` plot items for representing signals and images. Signal plot handler ------------------- .. autoclass:: SignalPlotHandler :members: :inherited-members: Image plot handler ------------------ .. autoclass:: ImagePlotHandler :members: :inherited-members: """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import hashlib from collections.abc import Iterator from typing import TYPE_CHECKING, Generic from weakref import WeakKeyDictionary import numpy as np from plotpy.constants import PlotType from plotpy.items import CurveItem, GridItem, LegendBoxItem, MaskedXYImageItem from plotpy.plot import PlotOptions from qtpy import QtWidgets as QW from qwt import QwtScaleDraw from sigima.objects import ImageObj, SignalObj, TypeObj from datalab.adapters_metadata import GeometryAdapter, TableAdapter from datalab.adapters_plotpy import TypePlotItem, create_adapter_from_object from datalab.adapters_plotpy.objects.scalar import MergedResultPlotPyAdapter from datalab.config import Conf, _ from datalab.objectmodel import get_uuid from datalab.utils.qthelpers import block_signals, create_progress_bar if TYPE_CHECKING: from plotpy.items import LabelItem from plotpy.plot import PlotWidget from datalab.gui.panel.base import BaseDataPanel def calc_data_hash(obj: SignalObj | ImageObj) -> str: """Calculate a hash for a SignalObj | ImageObj object's data For signals, this includes both X and Y data to detect axis changes. For images, this includes only the Z data. """ if isinstance(obj, SignalObj): # For signals, hash both X and Y data to detect axis changes # (e.g., when xmin/xmax is modified without changing Y values) return hashlib.sha1(np.ascontiguousarray(obj.xydata)).hexdigest() # For images, hash only the image data return hashlib.sha1(np.ascontiguousarray(obj.data)).hexdigest() class BasePlotHandler(Generic[TypeObj, TypePlotItem]): # type: ignore """Object handling plot items associated to objects (signals/images)""" PLOT_TYPE: PlotType | None = None # Replaced in subclasses def __init__( self, panel: BaseDataPanel, plotwidget: PlotWidget, ) -> None: self.panel = panel self.plotwidget = plotwidget self.plot = plotwidget.get_plot() # Plot items: key = object uuid, value = plot item self.__plotitems: dict[str, TypePlotItem] = {} self.__shapeitems = [] self.__cached_hashes: WeakKeyDictionary[TypeObj, list[int]] = ( WeakKeyDictionary() ) self.__auto_refresh = False self.__show_first_only = False # Mapping from object UUID to merged result adapter # The merged adapter consolidates all result labels for an object self.__merged_result_adapters: dict[str, MergedResultPlotPyAdapter] = {} def __len__(self) -> int: """Return number of items""" return len(self.__plotitems) def __getitem__(self, oid: str) -> TypePlotItem: """Return item associated to object uuid""" try: return self.__plotitems[oid] except KeyError as exc: # Item does not exist: this may happen when "auto refresh" is disabled # (object has been added to model but the corresponding plot item has not # been created yet) if not self.__auto_refresh: self.refresh_plot(oid, True, force=True, only_visible=False) return self.__plotitems[oid] # Item does not exist and auto refresh is enabled: this should not happen raise exc def get(self, key: str, default: TypePlotItem | None = None) -> TypePlotItem | None: """Return item associated to object uuid. If the key is not found, default is returned if given, otherwise None is returned.""" return self.__plotitems.get(key, default) def get_obj_from_item(self, item: TypePlotItem) -> TypeObj | None: """Return object associated to plot item Args: item: plot item Returns: Object associated to plot item """ for obj in self.panel.objmodel: if self.get(get_uuid(obj)) is item: return obj return None def __setitem__(self, oid: str, item: TypePlotItem) -> None: """Set item associated to object uuid""" self.__plotitems[oid] = item def __iter__(self) -> Iterator[TypePlotItem]: """Return an iterator over plothandler values (plot items)""" return iter(self.__plotitems.values()) def remove_item(self, oid: str) -> None: """Remove plot item associated to object uuid""" try: item = self.__plotitems.pop(oid) except KeyError: # Item does not exist: this may happen when "auto refresh" is disabled # (object has been added to model but the corresponding plot item has not # been created yet). # This may also happen after opening a project, then immediately selecting # a group containing more than one object: plot item would have been created # only for the first object in group, and this exception would be raised # for the second one (which does not have a plot item yet). return self.plot.del_item(item) def clear(self) -> None: """Clear plot items""" self.__plotitems = {} self.__merged_result_adapters = {} self.cleanup_dataview() self.remove_all_shape_items() def add_shapes(self, oid: str, do_autoscale: bool = False) -> None: """Add geometric shape items associated to computed results and annotations, for the object with the given uuid""" obj = self.panel.objmodel[oid] if obj.metadata: obj_adapter = create_adapter_from_object(obj) items = list(obj_adapter.iterate_shape_items(editable=False)) # Collect all result adapters results = list(TableAdapter.iterate_from_obj(obj)) + list( GeometryAdapter.iterate_from_obj(obj) ) # Create or update merged result adapter if results: merged_adapter = MergedResultPlotPyAdapter(results, obj) self.__merged_result_adapters[oid] = merged_adapter # Get the merged label merged_label = merged_adapter.get_merged_label() if merged_label is not None: # Set initial visibility based on configuration merged_label.setVisible(Conf.view.show_result_label.get()) items.append(merged_label) # Add other items from the merged adapter (e.g., geometric shapes) items.extend(merged_adapter.get_other_items()) else: # No results, remove any existing adapter self.__merged_result_adapters.pop(oid, None) if items: if do_autoscale: self.plot.do_autoscale() # Performance optimization: block `plotpy.plot.BasePlot` signals, add # all items except the last one, unblock signals, then add the last one # (this avoids some unnecessary refresh process by PlotPy) with block_signals(self.plot): with create_progress_bar( self.panel, _("Creating geometric shapes"), max_=len(items) - 1 ) as progress: for i_item, item in enumerate(items[:-1]): progress.setValue(i_item + 1) if progress.wasCanceled(): break self.plot.add_item(item) self.__shapeitems.append(item) # Only process events every 10 items to keep UI responsive # without killing performance if (i_item + 1) % 10 == 0: QW.QApplication.processEvents() self.plot.add_item(items[-1]) self.__shapeitems.append(items[-1]) def update_resultproperty_from_plot_item(self, item: LabelItem) -> None: """Update result properties from merged label plot item. When the merged results label is moved, update the stored position in the merged result adapter. Args: item: Merged results label item """ # Find the merged adapter that owns this label for merged_adapter in self.__merged_result_adapters.values(): if merged_adapter.get_cached_label() is item: # Update the adapter's metadata with the new position merged_adapter.update_obj_metadata_from_item(item) break def remove_all_shape_items(self) -> None: """Remove all geometric shapes associated to result items""" if set(self.__shapeitems).issubset(set(self.plot.items)): self.plot.del_items(self.__shapeitems) self.__shapeitems = [] # Clear cached labels in merged result adapters since they were removed for merged_adapter in self.__merged_result_adapters.values(): merged_adapter.invalidate_cached_label() def refresh_all_shape_items(self) -> None: """Refresh all geometric shapes to apply new style parameters. This method is called when shape/marker visualization settings are changed in the Settings dialog. It removes and recreates all shape items to apply the new parameters. """ # Get all object IDs that have shape items oids_with_shapes = list(self.__merged_result_adapters.keys()) if not oids_with_shapes: return # Remove all existing shape items self.remove_all_shape_items() # Recreate shape items for all objects with the new settings for oid in oids_with_shapes: self.add_shapes(oid, do_autoscale=False) self.plot.replot() def toggle_result_label_visibility(self, show: bool) -> None: """Toggle the visibility of all merged result labels on the plot. Args: show: True to show the labels, False to hide them """ for merged_adapter in self.__merged_result_adapters.values(): label = merged_adapter.get_cached_label() if label is not None: label.setVisible(show) self.plot.replot() def __add_item_to_plot(self, oid: str) -> TypePlotItem: """Make plot item and add it to plot. Args: oid: object uuid Returns: Plot item """ obj = self.panel.objmodel[oid] self.__cached_hashes[obj] = calc_data_hash(obj) item: TypePlotItem = create_adapter_from_object(obj).make_item() item.set_readonly(True) self[oid] = item self.plot.add_item(item) return item def __update_item_on_plot(self, oid: str, just_show: bool = False) -> None: """Update plot item. Args: oid: object uuid just_show: if True, only show the item (do not update it). Defaults to False. """ if not just_show: obj = self.panel.objmodel[oid] cached_hash = self.__cached_hashes.get(obj) new_hash = calc_data_hash(obj) data_changed = cached_hash is None or cached_hash != new_hash self.__cached_hashes[obj] = new_hash adapter = create_adapter_from_object(obj) adapter.update_item(self[oid], data_changed=data_changed) def set_auto_refresh(self, auto_refresh: bool) -> None: """Set auto refresh mode. Args: auto_refresh: if True, refresh plot items automatically """ self.__auto_refresh = auto_refresh if auto_refresh: self.refresh_plot("selected") def set_show_first_only(self, show_first_only: bool) -> None: """Set show first only mode. Args: show_first_only: if True, show only the first selected item """ self.__show_first_only = show_first_only if self.__auto_refresh: self.refresh_plot("selected") def get_existing_oids(self) -> list[str]: """Get existing object uuids. Returns: List of object uuids that have a plot item associated to them. """ return list(self.__plotitems.keys()) def reduce_shown_oids(self, oids: list[str]) -> list[str]: """Reduce the number of shown objects to visible items only. The base implementation is to show only the first selected item if the option "Show first only" is enabled. Args: oids: list of object uuids Returns: Reduced list of object uuids """ if self.__show_first_only: return oids[:1] return oids def refresh_plot( self, what: str, update_items: bool = True, force: bool = False, only_visible: bool = True, only_existing: bool = False, ) -> None: """Refresh plot. Args: what: string describing the objects to refresh. Valid values are "selected" (refresh the selected objects), "all" (refresh all objects), "existing" (refresh existing plot items), or an object uuid. update_items: if True, update the items. If False, only show the items (do not update them). Defaults to True. force: if True, force refresh even if auto refresh is disabled. Defaults to False. only_visible: if True, only refresh visible items. Defaults to True. Visible items are the ones that are not hidden by other items or the items except the first one if the option "Show first only" is enabled. This is useful for images, where the last image is the one that is shown. If False, all items are refreshed. only_existing: if True, only refresh existing items. Defaults to False. Existing items are the ones that have already been created and are associated to the object uuid. If False, create new items for the objects that do not have an item yet. Raises: ValueError: if `what` is not a valid value """ if not self.__auto_refresh and not force: return if what == "selected": # Refresh selected objects oids = self.panel.objview.get_sel_object_uuids(include_groups=True) if len(oids) == 1: self.cleanup_dataview() self.remove_all_shape_items() for item in self: if item is not None: item.hide() elif what == "existing": # Refresh existing objects oids = self.get_existing_oids() elif what == "all": # Refresh all objects oids = self.panel.objmodel.get_object_ids() else: # Refresh a single object defined by its uuid oids = [what] try: # Check if this is a valid object uuid self.panel.objmodel.get_objects(oids) except KeyError as exc: raise ValueError(f"Invalid value for `what`: {what}") from exc # Initialize titles and scales dictionaries title_keys = ("title", "xlabel", "ylabel", "zlabel", "xunit", "yunit", "zunit") titles_dict = {} autoscale = False scale_keys = ( "xscalelog", "xscalemin", "xscalemax", "yscalelog", "yscalemin", "yscalemax", ) scales_dict = {} if oids: if what != "existing" and only_visible: # Remove hidden items from the list of objects to refresh oids = self.reduce_shown_oids(oids) with create_progress_bar( self.panel, _("Creating plot items"), max_=len(oids) ) as progress: # Iterate over objects for i_obj, oid in enumerate(oids): progress.setValue(i_obj + 1) if progress.wasCanceled(): break obj = self.panel.objmodel[oid] # Collecting titles information for key in title_keys: title = getattr(obj, key, "") value = titles_dict.get(key) if value is None: titles_dict[key] = title elif value != title: titles_dict[key] = "" # Collecting scales information autoscale = autoscale or obj.autoscale for key in scale_keys: scale = getattr(obj, key, None) if scale is not None: cmp = min if "min" in key else max scales_dict[key] = cmp(scales_dict.get(key, scale), scale) # Update or add item to plot item = self.get(oid) if item is None: if only_existing: continue item = self.__add_item_to_plot(oid) else: self.__update_item_on_plot(oid, just_show=not update_items) if what != "existing" or item.isVisible(): self.plot.set_item_visible(item, True, replot=False) self.plot.set_active_item(item) item.unselect() # Add geometric shapes self.add_shapes(oid, do_autoscale=autoscale) self.plot.replot() else: # No object to refresh: clean up titles for key in title_keys: titles_dict[key] = "" # Set titles tdict = titles_dict tdict["ylabel"] = (tdict["ylabel"], tdict.pop("zlabel")) tdict["yunit"] = (tdict["yunit"], tdict.pop("zunit")) self.plot.set_titles(**titles_dict) # Set scales replot = False for axis_name, axis in (("bottom", "x"), ("left", "y")): axis_id = self.plot.get_axis_id(axis_name) scalelog = scales_dict.get(f"{axis}scalelog") if scalelog is not None: new_scale = "log" if scalelog else "lin" self.plot.set_axis_scale(axis_id, new_scale, autoscale=False) replot = True if autoscale: self.plot.do_autoscale() else: for axis_name, axis in (("bottom", "x"), ("left", "y")): axis_id = self.plot.get_axis_id(axis_name) new_vmin = scales_dict.get(f"{axis}scalemin") new_vmax = scales_dict.get(f"{axis}scalemax") if new_vmin is not None or new_vmax is not None: self.plot.do_autoscale(replot=False, axis_id=axis_id) vmin, vmax = self.plot.get_axis_limits(axis_id) new_vmin = new_vmin if new_vmin is not None else vmin new_vmax = new_vmax if new_vmax is not None else vmax self.plot.set_axis_limits(axis_id, new_vmin, new_vmax) replot = True if replot: self.plot.replot() def cleanup_dataview(self) -> None: """Clean up data view""" # Find items to remove (items that are not in the handler and not special items) # Skip shape items since they're managed separately and checking membership # for many items is expensive shape_items_set = set(self.__shapeitems) items_to_remove = [ item for item in self.plot.items[:] if item not in shape_items_set and item not in self and not isinstance(item, (LegendBoxItem, GridItem)) ] # Delete items one by one with error handling for items already removed for item in items_to_remove: try: self.plot.del_item(item) except ValueError: # Item was already removed (e.g., by detach()) pass def get_plot_options(self) -> PlotOptions: """Return standard signal/image plot options""" return PlotOptions( type=self.PLOT_TYPE, xlabel=self.plot.get_axis_title("bottom"), ylabel=self.plot.get_axis_title("left"), xunit=self.plot.get_axis_unit("bottom"), yunit=self.plot.get_axis_unit("left"), show_axes_tab=False, ) class SignalPlotHandler(BasePlotHandler[SignalObj, CurveItem]): """Object handling signal plot items, plot dialogs, plot options""" PLOT_TYPE = PlotType.CURVE def toggle_anti_aliasing(self, state: bool) -> None: """Toggle anti-aliasing Args: state: if True, enable anti-aliasing """ self.plot.set_antialiasing(state) self.plot.replot() def get_plot_options(self) -> PlotOptions: """Return standard signal/image plot options""" options = super().get_plot_options() options.curve_antialiasing = self.plot.antialiased return options def refresh_plot( self, what: str, update_items: bool = True, force: bool = False, only_visible: bool = True, only_existing: bool = False, ) -> None: """Refresh plot and configure datetime axis if needed. This override adds automatic datetime axis configuration when at least one of the displayed signals has a datetime X-axis. Args: what: string describing the objects to refresh update_items: if True, update the items force: if True, force refresh even if auto refresh is disabled only_visible: if True, only refresh visible items only_existing: if True, only refresh existing items """ # Call parent implementation super().refresh_plot(what, update_items, force, only_visible, only_existing) # Check if any visible signal has datetime X-axis has_datetime = False datetime_format = None for item in self: if item is not None and item.isVisible(): obj = self.get_obj_from_item(item) if obj is not None and obj.is_x_datetime(): has_datetime = True # Get format from signal metadata, or use configured default datetime_format = obj.metadata.get("x_datetime_format") if datetime_format is None: # Use configured format based on time unit unit = obj.xunit if obj.xunit else "s" if unit in ("ns", "us", "ms"): datetime_format = Conf.view.sig_datetime_format_ms.get( "%H:%M:%S.%f" ) else: datetime_format = Conf.view.sig_datetime_format_s.get( "%H:%M:%S" ) break # Configure X-axis for datetime or restore default if has_datetime and datetime_format is not None: self.plot.set_axis_datetime("bottom", format=datetime_format) else: # Restore default scale draw (remove datetime formatting) self.plot.setAxisScaleDraw(self.plot.get_axis_id("bottom"), QwtScaleDraw()) class ImagePlotHandler(BasePlotHandler[ImageObj, MaskedXYImageItem]): """Object handling image plot items, plot dialogs, plot options""" PLOT_TYPE = PlotType.IMAGE def reduce_shown_oids(self, oids: list[str]) -> list[str]: """Reduce the number of shown objects to visible items only. The base implementation is to show only the first selected item if the option "Show first only" is enabled. Args: oids: list of object uuids Returns: Reduced list of object uuids """ oids = super().reduce_shown_oids(oids) # For Image View, we show only the last image (which is the highest z-order # plot item) if more than one image is selected, if last image has no # transparency and if the other images are all completely covered by the last # image. # TODO: [P4] Enhance this algorithm to handle more complex cases # (not sure it's worth it) if len(oids) > 1: # Get objects associated to the oids objs = self.panel.objmodel.get_objects(oids) # First condition is about the image transparency last_obj = objs[-1] alpha_cond = ( last_obj.get_metadata_option("alpha", 1.0) == 1.0 and last_obj.get_metadata_option("alpha_function", 0) == 0 ) if alpha_cond: # Second condition is about the image size and position geom_cond = True for obj in objs[:-1]: # Handle both uniform and non-uniform coordinates if last_obj.is_uniform_coords and obj.is_uniform_coords: # Both have uniform coordinates, use old logic geom_cond = ( geom_cond and last_obj.x0 <= obj.x0 and last_obj.y0 <= obj.y0 and last_obj.x0 + last_obj.width >= obj.x0 + obj.width and last_obj.y0 + last_obj.height >= obj.y0 + obj.height ) else: # At least one has non-uniform coordinates, # use extent comparison last_x0 = ( last_obj.x0 if last_obj.is_uniform_coords else last_obj.xcoords[0] ) last_y0 = ( last_obj.y0 if last_obj.is_uniform_coords else last_obj.ycoords[0] ) last_x1 = ( last_obj.x0 + last_obj.width if last_obj.is_uniform_coords else last_obj.xcoords[-1] ) last_y1 = ( last_obj.y0 + last_obj.height if last_obj.is_uniform_coords else last_obj.ycoords[-1] ) obj_x0 = obj.x0 if obj.is_uniform_coords else obj.xcoords[0] obj_y0 = obj.y0 if obj.is_uniform_coords else obj.ycoords[0] obj_x1 = ( obj.x0 + obj.width if obj.is_uniform_coords else obj.xcoords[-1] ) obj_y1 = ( obj.y0 + obj.height if obj.is_uniform_coords else obj.ycoords[-1] ) geom_cond = ( geom_cond and last_x0 <= obj_x0 and last_y0 <= obj_y0 and last_x1 >= obj_x1 and last_y1 >= obj_y1 ) if not geom_cond: break if geom_cond: oids = oids[-1:] return oids def refresh_plot( self, what: str, update_items: bool = True, force: bool = False, only_visible: bool = True, only_existing: bool = False, ) -> None: """Refresh plot. Args: what: string describing the objects to refresh. Valid values are "selected" (refresh the selected objects), "all" (refresh all objects), "existing" (refresh existing plot items), or an object uuid. update_items: if True, update the items. If False, only show the items (do not update them). Defaults to True. force: if True, force refresh even if auto refresh is disabled. Defaults to False. only_visible: if True, only refresh visible items. Defaults to True. Visible items are the ones that are not hidden by other items or the items except the first one if the option "Show first only" is enabled. This is useful for images, where the last image is the one that is shown. If False, all items are refreshed. only_existing: if True, only refresh existing items. Defaults to False. Existing items are the ones that have already been created and are associated to the object uuid. If False, create new items for the objects that do not have an item yet. Raises: ValueError: if `what` is not a valid value """ super().refresh_plot( what=what, update_items=update_items, force=force, only_visible=only_visible, only_existing=only_existing, ) self.plotwidget.contrast.setVisible(Conf.view.show_contrast.get(True)) plot = self.plotwidget.get_plot() new_aspect_ratio = current_aspect_ratio = plot.get_aspect_ratio() new_lock = current_lock = plot.lock_aspect_ratio if Conf.view.ima_aspect_ratio_1_1.get(): # Lock aspect ratio to 1:1 new_aspect_ratio = 1.0 new_lock = True else: # Use physical pixel size to set aspect ratio # Determine which objects to check based on the 'what' parameter if what == "selected": # Use selected objects to determine aspect ratio oids = self.panel.objview.get_sel_object_uuids(include_groups=True) elif what == "existing": # Use existing objects oids = self.get_existing_oids() elif what == "all": # Use all objects oids = self.panel.objmodel.get_object_ids() else: # Single object by uuid oids = [what] # Reduce to visible items and check aspect ratio for oid in reversed(self.reduce_shown_oids(oids)): if oid in self.get_existing_oids() and self.get(oid).isVisible(): obj: ImageObj = self.panel.objmodel[oid] if obj.is_uniform_coords: new_aspect_ratio = obj.dx / obj.dy new_lock = True else: new_lock = False break if new_aspect_ratio != current_aspect_ratio or new_lock != current_lock: # Update aspect ratio only if it has changed plot.set_aspect_ratio(new_aspect_ratio, lock=new_lock) plot.do_autoscale() def cleanup_dataview(self) -> None: """Clean up data view""" for widget in (self.plotwidget.xcsw, self.plotwidget.ycsw): widget.hide() super().cleanup_dataview() def get_plot_options(self) -> PlotOptions: """Return standard signal/image plot options""" options = super().get_plot_options() options.zlabel = self.plot.get_axis_title("right") options.zunit = self.plot.get_axis_unit("right") return options DataLab-1.0.2/datalab/gui/processor/000077500000000000000000000000001511411446000171725ustar00rootroot00000000000000DataLab-1.0.2/datalab/gui/processor/__init__.py000066400000000000000000000057501511411446000213120ustar00rootroot00000000000000""" Processor ========= The :mod:`datalab.gui.processor` package provides the **processor objects** for signals and images. Processor objects are the bridge between the computation modules (in :mod:`sigima.proc`) and the GUI modules (in :mod:`datalab.gui`). They are used to call the computation functions and to update the GUI from inside the data panel objects. When implementing a processing feature in DataLab, the steps are usually the following: - Add an action in the :mod:`datalab.gui.actionhandler` module to trigger the processing feature from the GUI (e.g. a menu item or a toolbar button). - Implement the computation function in the :mod:`sigima.proc` module (that would eventually call the algorithm from the :mod:`sigima.tools` module). - Implement the processor object method in this package to call the computation function and eventually update the GUI. The processor objects are organized in submodules according to their purpose: - :mod:`datalab.gui.processor.base`: Common processing features - :mod:`datalab.gui.processor.signal`: Signal processing features - :mod:`datalab.gui.processor.image`: Image processing features Generic processing types ------------------------- To support consistent processing workflows, the :class:`BaseProcessor` class defines five generic processing methods, each corresponding to a fundamental input/output pattern. These methods are tightly integrated with the GUI logic: the input objects are taken from the current selection in the active panel (Signal or Image), and the output objects are automatically appended to the same panel. Descriptions: - ``compute_1_to_1``: Applies an independent transformation to each selected object. - ``compute_1_to_0``: Runs an analysis or measurement producing metadata or scalar data. - ``compute_1_to_n``: Produces multiple output objects from a single input (e.g. ROI extraction). - ``compute_n_to_1``: Aggregates multiple objects into one (e.g. sum, average); supports pairwise mode. - ``compute_2_to_1``: Applies a binary operation with a second operand (object or constant); supports pairwise mode. .. list-table:: :header-rows: 1 :align: left * - Method name - Signature - Multi-selection behavior * - ``compute_1_to_1`` - 1 object ➝ 1 object - k ➝ k * - ``compute_1_to_0`` - 1 object ➝ no object - k ➝ 0 * - ``compute_1_to_n`` - 1 object ➝ n objects - k ➝ k·n * - ``compute_n_to_1`` - n objects ➝ 1 object - n ➝ 1
    n ➝ n (pairwise mode) * - ``compute_2_to_1`` - 1 object + 1 operand ➝ 1 object - k + 1 ➝ k
    n + n ➝ n (pairwise mode) These methods are for internal or advanced use (e.g. plugin or macro authors) and will evolve without backward compatibility guarantees. Future developments (such as a visual pipeline editor) may require generalizing this model to support additional sources and destinations beyond the current panel-based selection/output logic. """ # noqa: E501 DataLab-1.0.2/datalab/gui/processor/base.py000066400000000000000000003010351511411446000204600ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ .. Base processor object (see parent package :mod:`datalab.gui.processor`) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import abc import multiprocessing import time import warnings from dataclasses import asdict, dataclass from enum import Enum, auto from multiprocessing.pool import Pool from typing import TYPE_CHECKING, Any, Callable, Generic, Literal, Optional import guidata.dataset as gds import numpy as np from qtpy import QtCore as QC from qtpy import QtWidgets as QW from sigima.config import options as sigima_options from sigima.enums import Interpolation1DMethod from sigima.objects import ( GeometryResult, ImageObj, SignalObj, TableResult, TypeROI, TypeROIParam, concat_geometries, ) from sigima.proc.decorator import is_computation_function from sigima.tools.signal.interpolation import interpolate from datalab import env from datalab.adapters_metadata import ( GeometryAdapter, ResultData, TableAdapter, show_resultdata, ) from datalab.adapters_plotpy import coordutils from datalab.config import Conf, _ from datalab.gui.processor.catcher import CompOut, wng_err_func from datalab.objectmodel import get_short_id, get_uuid, patch_title_with_ids from datalab.utils.qthelpers import create_progress_bar, qt_try_except from datalab.widgets.warningerror import show_warning_error if TYPE_CHECKING: from multiprocessing.pool import AsyncResult from plotpy.plot import PlotWidget from datalab.gui.panel.image import ImagePanel from datalab.gui.panel.signal import SignalPanel @dataclass class ProcessingParameters: """Processing parameters stored in object metadata. Attributes: func_name: Processing function name pattern: Processing pattern ("1-to-1", "n-to-1", or "2-to-1") param: Processing parameter dataset (optional, for 1-to-1 only) source_uuid: Source object UUID (for 1-to-1 pattern) source_uuids: Source object UUIDs (for n-to-1 and 2-to-1 patterns) """ func_name: str pattern: str param: gds.DataSet | None = None source_uuid: str | None = None source_uuids: list[str] | None = None def set_param_from_json(self, param_json: str | list[str]) -> None: """Set the param attribute from a JSON string or list of JSON strings. Args: param_json: JSON string or list of JSON strings representing the parameters """ try: if isinstance(param_json, list): # Handle list of JSON strings self.param = [gds.json_to_dataset(p) for p in param_json] else: # Handle single JSON string self.param = gds.json_to_dataset(param_json) except Exception: # pylint: disable=broad-except warnings.warn(_("Failed to deserialize processing parameters from JSON.")) self.param = None def to_dict(self) -> dict[str, Any]: """Convert ProcessingParameters to a dictionary. Returns: Dictionary representation of ProcessingParameters, ignoring None values. """ pp_dict = {k: v for k, v in asdict(self).items() if v is not None} param = pp_dict.pop("param", None) if param is not None: if isinstance(param, list): # Handle list of DataSet objects pp_dict["param_json"] = [gds.dataset_to_json(p) for p in param] else: # Handle single DataSet object pp_dict["param_json"] = gds.dataset_to_json(param) return pp_dict @classmethod def from_dict(cls, data: dict[str, Any]) -> ProcessingParameters: """Create ProcessingParameters from a dictionary. Args: data: Dictionary representation of ProcessingParameters """ instance = cls("", "") # Temporary values for key, value in data.items(): if key == "param_json": instance.set_param_from_json(value) else: setattr(instance, key, value) return instance # Metadata options for storing processing parameters (DataLab-specific) PROCESSING_PARAMETERS_OPTION = "processing_parameters" # Transformation history ANALYSIS_PARAMETERS_OPTION = "analysis_parameters" # Analysis operation (1-to-0) def extract_processing_parameters( obj: SignalObj | ImageObj, ) -> ProcessingParameters | None: """Extract processing parameters from object metadata. This extracts transformation history (1-to-1, n-to-1, 2-to-1, 1-to-n operations). For analysis operations (1-to-0), use extract_analysis_parameters instead. Args: obj: Signal or Image object Returns: ProcessingParameters instance if processing metadata exists, None otherwise. """ try: pp_dict = obj.get_metadata_option(PROCESSING_PARAMETERS_OPTION) except ValueError: return None return ProcessingParameters.from_dict(pp_dict) def extract_analysis_parameters( obj: SignalObj | ImageObj, ) -> ProcessingParameters | None: """Extract analysis parameters from object metadata. This extracts analysis operation parameters (1-to-0 pattern only). For transformation history, use extract_processing_parameters instead. Args: obj: Signal or Image object Returns: ProcessingParameters instance if analysis metadata exists, None otherwise. """ try: pp_dict = obj.get_metadata_option(ANALYSIS_PARAMETERS_OPTION) except ValueError: return None return ProcessingParameters.from_dict(pp_dict) def insert_processing_parameters( obj: SignalObj | ImageObj, pp: ProcessingParameters, ) -> None: """Insert processing parameters into object metadata. This stores transformation history (1-to-1, n-to-1, 2-to-1, 1-to-n) or analysis parameters (1-to-0) in separate metadata options to avoid overwriting transformation history when performing analysis operations. Args: obj: Signal or Image object pp: ProcessingParameters instance containing all processing metadata """ if pp.pattern == "1-to-0": # Store analysis parameters separately to preserve transformation history obj.set_metadata_option(ANALYSIS_PARAMETERS_OPTION, pp.to_dict()) else: # Store transformation history obj.set_metadata_option(PROCESSING_PARAMETERS_OPTION, pp.to_dict()) def run_with_env(func: Callable, args: tuple, env_json: str) -> CompOut: """Wrapper to apply environment config before calling func Args: func: function to call args: function arguments env_json: JSON string with environment configuration Returns: Computation output object containing the result, error message, or warning message. """ sigima_options.set_env(env_json) sigima_options.ensure_loaded_from_env() # recharge depuis l'env return wng_err_func(func, args) # Enable multiprocessing support for Windows, with frozen executable (e.g. PyInstaller) multiprocessing.freeze_support() # Set start method to 'spawn' for Linux (default is 'fork' which is not safe here # because of the use of Qt and multithreading) - for other OS, the default is # 'spawn' anyway try: multiprocessing.set_start_method("spawn") except RuntimeError: # This exception is raised if the method is already set (this may happen because # this module is imported more than once, e.g. when running tests) pass COMPUTATION_TIP = _( "DataLab relies on various libraries to perform the computation. During the " "computation, errors may occur because of the data (e.g. division by zero, " "unexpected data type, etc.) or because of the libraries (e.g. memory error, " "etc.). If you encounter an error, before reporting it, please ensure that " "the computation is correct, by checking the data and the parameters." ) POOL: Pool | None = None class WorkerState(Enum): """Worker states for computation lifecycle.""" IDLE = auto() # Ready to start new computation STARTING = auto() # Computation starting (prevents race conditions) RUNNING = auto() # Computation in progress FINISHED = auto() # Computation completed, result available class WorkerStateMachine: """State machine for managing worker computation lifecycle. This class handles state transitions for worker computations, ensuring valid state flow and preventing invalid operations. """ def __init__(self) -> None: """Initialize the state machine in IDLE state.""" self._current_state = WorkerState.IDLE @property def current_state(self) -> WorkerState: """Get the current state. Returns: Current WorkerState. """ return self._current_state def transition_to(self, target_state: WorkerState) -> None: """Transition to the specified target state. Args: target_state: The state to transition to. Raises: ValueError: If the transition is not valid from the current state. """ # Define valid state transitions valid_transitions = { WorkerState.IDLE: {WorkerState.STARTING}, WorkerState.STARTING: {WorkerState.RUNNING}, WorkerState.RUNNING: {WorkerState.FINISHED}, WorkerState.FINISHED: {WorkerState.IDLE}, } # Allow transitions to the same state (no-op) if target_state == self._current_state: return # Check if transition is valid allowed_targets = valid_transitions.get(self._current_state, set()) if target_state not in allowed_targets: raise ValueError( f"Invalid transition from {self._current_state} to {target_state}. " f"Valid transitions: {allowed_targets}" ) self._current_state = target_state def reset_to_idle(self) -> None: """Reset state to IDLE unconditionally. This is used for restart/cancel operations where we need to force the state back to IDLE regardless of current state. """ self._current_state = WorkerState.IDLE class Worker: """Multiprocessing worker, to run long-running tasks in a separate process""" def __init__(self) -> None: self.asyncresult: AsyncResult = None self.state_machine = WorkerStateMachine() @staticmethod def create_pool() -> None: """Create multiprocessing pool""" global POOL # pylint: disable=global-statement # Create a pool with one process POOL = Pool(processes=1) # pylint: disable=not-callable,consider-using-with @staticmethod def terminate_pool(wait: bool = False) -> None: """Terminate multiprocessing pool. Args: wait: wait for all tasks to finish. Defaults to False. """ global POOL # pylint: disable=global-statement if POOL is not None: if wait: # Close the pool properly (wait for all tasks to finish) POOL.close() else: # Terminate the pool and stop the timer POOL.terminate() POOL.join() POOL = None def restart_pool(self) -> None: """Terminate and recreate the pool""" # Terminate the process and stop the timer Worker.terminate_pool(wait=False) # Recreate the pool for the next computation Worker.create_pool() # Reset worker state after pool restart self.asyncresult = None self.state_machine.reset_to_idle() def run(self, func: Callable, args: tuple[Any]) -> None: """Run computation. Args: func: function to run args: arguments Raises: ValueError: If not in IDLE state or pool is not available. """ # Check if we can start computation if self.state_machine.current_state != WorkerState.IDLE: current_state = self.state_machine.current_state raise ValueError(f"Cannot start computation from {current_state} state") # Transition to starting state self.state_machine.transition_to(WorkerState.STARTING) global POOL # pylint: disable=global-statement,global-variable-not-assigned if POOL is None: raise ValueError("Multiprocessing pool is not available") # Start the computation env_json = sigima_options.get_env() self.asyncresult = POOL.apply_async(run_with_env, (func, args, env_json)) # Transition to running state self.state_machine.transition_to(WorkerState.RUNNING) def restart(self) -> None: """Restart/cancel current computation""" current_state = self.state_machine.current_state if current_state == WorkerState.IDLE: return # Already idle, nothing to restart if current_state == WorkerState.STARTING: # If we're still starting, just go back to idle self.asyncresult = None elif current_state == WorkerState.RUNNING: # Cancel the running computation - use restart_pool for consistency self.restart_pool() return # restart_pool already handles state reset if current_state == WorkerState.FINISHED: # Clean up and go to idle self.asyncresult = None # Let state machine handle the transition to idle self.state_machine.reset_to_idle() def close(self) -> None: """Close worker: close pool properly and wait for all tasks to finish""" # Close multiprocessing Pool properly, but only if no computation is running, # to avoid blocking the GUI at exit (so, when wait=True, we wait for the # task to finish before closing the pool but there is actually no task running, # so the pool is closed immediately but *properly*) Worker.terminate_pool(wait=self.asyncresult is None) def is_computation_finished(self) -> bool: """Return True if computation is finished. Returns: bool: True if computation is finished """ current_state = self.state_machine.current_state if current_state == WorkerState.IDLE: return True # No computation has been started if current_state == WorkerState.STARTING: return False # Computation is starting, not finished yet if current_state == WorkerState.FINISHED: return True # Already finished if current_state == WorkerState.RUNNING: if self.asyncresult is None: return False # Should not happen, but defensive finished = self.asyncresult.ready() if finished: # Transition to finished state self.state_machine.transition_to(WorkerState.FINISHED) return finished raise ValueError(f"Invalid worker state: {current_state}") def get_result(self) -> CompOut: """Return computation result. Returns: CompOut: computation result Raises: ValueError: If not in FINISHED state or no result available. """ # Check if we can get result if self.state_machine.current_state != WorkerState.FINISHED: current_state = self.state_machine.current_state raise ValueError(f"Cannot get result from {current_state} state") if self.asyncresult is None: raise ValueError("No result available") # Get result and clean up (ensure cleanup happens even if exception occurs) try: result = self.asyncresult.get() return result finally: # Always clean up, even if get() raises an exception self.asyncresult = None self.state_machine.transition_to(WorkerState.IDLE) def has_result_available(self) -> bool: """Check if computation finished successfully and result is available. Returns: True if computation completed successfully and result can be retrieved. """ return self.state_machine.current_state == WorkerState.FINISHED def is_pairwise_mode() -> bool: """Return True if operation mode is pairwise. Returns: bool: True if operation mode is pairwise """ state = Conf.proc.operation_mode.get() == "pairwise" return state @dataclass class ComputingFeature: """Computing feature dataclass. Args: pattern: pattern function: function paramclass: parameter class title: title icon_name: icon name comment: comment edit: whether to edit the parameters obj2_name: name of the second object skip_xarray_compat: whether to skip X-array compatibility check for this feature """ pattern: Literal["1_to_1", "1_to_0", "1_to_n", "n_to_1", "2_to_1"] function: Optional[Callable] = None paramclass: Optional[type[gds.DataSet]] = None title: Optional[str] = None icon_name: Optional[str] = None comment: Optional[str] = None edit: Optional[bool] = None obj2_name: Optional[str] = None skip_xarray_compat: Optional[bool] = None def __post_init__(self): """Validate the function after initialization.""" if self.function is not None and not is_computation_function(self.function): raise ValueError( f"'{self.function.__name__}' is not a valid computation function." ) @property def name(self) -> str: """Return the name of the computing feature.""" if self.function is None: raise ValueError( "ComputingFeature must have a 'function' to derive its name." ) return self.function.__name__ @property def action_title(self) -> str: """Return the action title of the computing feature.""" title = self.title if ( self.paramclass is not None and (self.edit is None or self.edit) ) or self.pattern == "1_to_0": title += "..." return title class BaseProcessor(QC.QObject, Generic[TypeROI, TypeROIParam]): """Object handling data processing: operations, processing, analysis. Args: panel: panel plotwidget: plot widget """ SIG_ADD_SHAPE = QC.Signal(str) PARAM_DEFAULTS: dict[str, gds.DataSet] = {} def __init__(self, panel: SignalPanel | ImagePanel, plotwidget: PlotWidget): super().__init__() self.panel = panel self.mainwindow = panel.mainwindow self.plotwidget = plotwidget self.worker: Worker | None = None self.set_process_isolation_enabled(Conf.main.process_isolation_enabled.get()) self.computing_registry: dict[str, ComputingFeature] = {} self.register_computations() def close(self): """Close processor properly""" if self.worker is not None: self.worker.close() self.worker = None def set_process_isolation_enabled(self, enabled: bool) -> None: """Set process isolation enabled. Args: enabled: enabled """ if enabled: if self.worker is None: self.worker = Worker() Worker.create_pool() else: if self.worker is not None: self.worker.terminate_pool() self.worker = None def _is_signal_panel(self) -> bool: """Check if the current panel is a signal panel. Returns: True if processing signals, False if processing images """ return self.panel.PARAMCLASS == SignalObj def _check_signal_xarray_compatibility( self, signals: list[SignalObj], progress: QW.QProgressDialog | None = None ) -> tuple[list[SignalObj], bool] | None: """Check X-array compatibility for multiple signals and handle conflicts. Args: signals: List of signal objects to check progress: Progress dialog (if method is called from a long-running task, we need to handle the progress dialog: the dialog will show up after a short delay on top of the message box if we don't handle it here) Returns: Tuple of (signals, yes_to_all_selected) where signals is the list of signals (potentially with interpolated signals) and yes_to_all_selected is True if user chose "Yes to All". Returns None if user canceled. """ if not self._is_signal_panel() or len(signals) <= 1: return signals, False initial_duration = 0 if progress is not None: initial_duration = progress.minimumDuration() # Set progress dialog minimum duration to a very high value to effectively # hide it if it shows up (we handle the dialog manually here) progress.setMinimumDuration(2000000) QW.QApplication.processEvents() # Get X arrays for comparison x_arrays = [sig.x for sig in signals] # Check if all X arrays are identical x_arrays_identical = True if len(x_arrays) > 1: # Compare sizes first sizes = [len(x) for x in x_arrays] if len(set(sizes)) > 1: x_arrays_identical = False else: # Same sizes - check if xmin and xmax are also the same xmins = [x.min() for x in x_arrays] xmaxs = [x.max() for x in x_arrays] # Use relative tolerance for floating point comparison if not ( np.allclose(xmins, xmins[0], rtol=1e-12) and np.allclose(xmaxs, xmaxs[0], rtol=1e-12) ): x_arrays_identical = False # If X arrays are identical, proceed normally if x_arrays_identical: if initial_duration > 0: # Restore initial progress dialog duration progress.setMinimumDuration(initial_duration) return signals, False # X arrays differ - handle based on configuration behavior = Conf.proc.xarray_compat_behavior.get("ask") yes_to_all_selected = False if behavior == "ask" and not env.execenv.unattended: # Create custom message box with "Yes to All" option msg_box = QW.QMessageBox(self.mainwindow) msg_box.setWindowTitle(_("X-array incompatibility")) msg_box.setText( _( "The selected signals have different X arrays.\n\n" "To perform the computation, signals need to be interpolated " "to match a common X array.\n\n" "Do you want to continue with automatic interpolation?" ) ) msg_box.setIcon(QW.QMessageBox.Icon.Question) # Add custom buttons msg_box.addButton(_("Yes"), QW.QMessageBox.ButtonRole.YesRole) yes_all_button = msg_box.addButton( _("Yes to All"), QW.QMessageBox.ButtonRole.YesRole ) no_button = msg_box.addButton(_("No"), QW.QMessageBox.ButtonRole.NoRole) msg_box.setDefaultButton(no_button) # Execute dialog and get user choice msg_box.exec() clicked_button = msg_box.clickedButton() if clicked_button == no_button: return None if clicked_button == yes_all_button: yes_to_all_selected = True # Perform interpolation to the smallest X array sizes = [len(x) for x in x_arrays] min_size_idx = np.argmin(sizes) target_x = x_arrays[min_size_idx] interpolated_signals = [] for i, sig in enumerate(signals): if i == min_size_idx: # Keep the target signal as-is interpolated_signals.append(sig) else: # Create interpolated copy interpolated_sig = sig.copy( title=f"{sig.title} (interpolated)", all_metadata=True ) x_orig, y_orig = sig.x, sig.y # Interpolate using linear method (safe default) y_new = interpolate( x_orig, y_orig, target_x, Interpolation1DMethod.LINEAR, fill_value=None, ) interpolated_sig.set_xydata(target_x, y_new) interpolated_signals.append(interpolated_sig) signals = interpolated_signals if initial_duration > 0: # Restore initial progress dialog duration progress.setMinimumDuration(initial_duration) return signals, yes_to_all_selected def _add_object_to_appropriate_panel( self, new_obj: SignalObj | ImageObj, group_id: str | None = None, use_group_for_non_native: bool = True, ) -> None: """Add object to the appropriate panel based on its type. For native objects (e.g., SignalObj in Signal panel, ImageObj in Image panel), adds to the current panel. For non-native objects (e.g., ImageObj created in Signal panel), adds to the target panel via mainwindow. Args: new_obj: Object to add group_id: Group ID to add the object to (optional) use_group_for_non_native: If True, use group_id even for non-native objects. If False, non-native objects are added to default group. Set to False when group_id is from the source panel and object goes to a different panel. """ is_new_obj_native = isinstance(new_obj, self.panel.PARAMCLASS) if is_new_obj_native: self.panel.add_object(new_obj, group_id=group_id) else: if use_group_for_non_native: self.panel.mainwindow.add_object(new_obj, group_id=group_id) else: self.panel.mainwindow.add_object(new_obj) def _create_group_for_result( self, new_obj: SignalObj | ImageObj, group_name: str ) -> str: """Create a group in the appropriate panel for the result object. For native objects, creates group in current panel. For non-native objects, creates group in the target panel. Args: new_obj: Result object to determine target panel group_name: Name for the new group Returns: UUID of the created group """ is_new_obj_native = isinstance(new_obj, self.panel.PARAMCLASS) if is_new_obj_native: return get_uuid(self.panel.add_group(group_name)) # Create group in target panel for non-native objects target_panel = ( self.panel.mainwindow.signalpanel if isinstance(new_obj, SignalObj) else self.panel.mainwindow.imagepanel ) return get_uuid(target_panel.add_group(group_name)) @abc.abstractmethod def register_operations(self) -> None: """Register operations.""" @abc.abstractmethod def register_processing(self) -> None: """Register processing functions.""" @abc.abstractmethod def register_analysis(self) -> None: """Register analysis functions.""" def register_computations(self) -> None: """Register computations.""" self.register_operations() self.register_processing() self.register_analysis() # pylint: disable=unused-argument def postprocess_1_to_0_result( self, obj: SignalObj | ImageObj, result: GeometryResult | TableResult ) -> bool: """Post-process results from 1-to-0 operations (hook method). This method is called after a 1-to-0 computation function has been executed and the result has been added to the object's metadata. Subclasses can override this method to perform additional processing on the result. Args: obj: The object that was analyzed result: The analysis result (GeometryResult or TableResult) Returns: True if the object was modified and needs a plot refresh, False otherwise """ # Default implementation does nothing and needs no refresh return False def has_param_defaults(self, paramclass: type[gds.DataSet]) -> bool: """Return True if parameter defaults are available. Args: paramclass: parameter class Returns: bool: True if parameter defaults are available """ return paramclass.__name__ in self.PARAM_DEFAULTS def update_param_defaults(self, param: gds.DataSet) -> None: """Update parameter defaults. Args: param: parameters """ key = param.__class__.__name__ pdefaults = self.PARAM_DEFAULTS.get(key) if pdefaults is not None: gds.update_dataset(param, pdefaults) self.PARAM_DEFAULTS[key] = param def init_param( self, param: gds.DataSet, paramclass: type[gds.DataSet], title: str, comment: str | None = None, ) -> tuple[bool, gds.DataSet]: """Initialize processing parameters. Args: param: parameter paramclass: parameter class title: title comment: comment Returns: Tuple (edit, param) where edit is True if parameters have been edited, False otherwise. """ edit = param is None if edit: param = paramclass(title, comment) self.update_param_defaults(param) if hasattr(param, "update_from_obj"): obj = self.panel.objview.get_sel_objects(include_groups=True)[0] param.update_from_obj(obj) return edit, param def handle_output( self, compout: CompOut, context: str, progress: QW.QProgressDialog ) -> SignalObj | ImageObj | GeometryResult | TableResult | None: """Handle computation output: if error, display error message, if warning, display warning message. Args: compout: computation output context: context (e.g. "Computing: Gaussian filter") progress: progress dialog Returns: Output object: a signal or image object, or a geometry/table result object, or None if error """ if compout.error_msg or compout.warning_msg: mindur = progress.minimumDuration() progress.setMinimumDuration(1000000) if compout.error_msg: show_warning_error( self.panel, "error", context, compout.error_msg, COMPUTATION_TIP ) if compout.warning_msg: show_warning_error(self.panel, "warning", context, compout.warning_msg) progress.setMinimumDuration(mindur) if compout.error_msg: return None result = compout.result return result def _merge_geometry_results_for_n_to_1( self, result_obj: SignalObj | ImageObj, src_obj_list: list[SignalObj | ImageObj] ) -> None: """Merge geometry results from source objects into the result object. This method handles geometry result merging for n_to_1 operations when keep_results is enabled, providing a clean alternative to monkey patching. Args: result_obj: The result object from the computation src_obj_list: The list of source objects used in the computation """ # Only merge if keep_results is enabled and we have multiple source objects if not Conf.proc.keep_results.get() or len(src_obj_list) <= 1: return # Group geometry results by title for merging geometry_by_title = {} # Collect all geometry results from all source objects for src_obj in src_obj_list: for geom_adapter in GeometryAdapter.iterate_from_obj(src_obj): title = geom_adapter.title if title not in geometry_by_title: geometry_by_title[title] = [] geometry_by_title[title].append(geom_adapter.result) # Only proceed if we have geometry results to merge if not geometry_by_title: return # Remove any existing geometry results from the result object result_keys_to_remove = [] for key in result_obj.metadata.keys(): if GeometryAdapter.match(key, result_obj.metadata[key]): result_keys_to_remove.append(key) for key in result_keys_to_remove: result_obj.metadata.pop(key, None) # Merge and add back concatenated geometry results for title, geometries in geometry_by_title.items(): if len(geometries) > 1: # Concatenate multiple geometry results merged_geometry = concat_geometries(title, geometries) adapter = GeometryAdapter(merged_geometry) adapter.add_to(result_obj) elif len(geometries) == 1: # Just one geometry result, add it adapter = GeometryAdapter(geometries[0]) adapter.add_to(result_obj) def _handle_keep_results(self, result_obj: SignalObj | ImageObj) -> None: """Handle keep_results logic by removing all results if keep_results is False. This method implements the logic that was previously in Sigima's dst_1_to_1, dst_n_to_1, and dst_2_to_1 functions, where results were deleted from the destination object when keep_results was False. Args: result_obj: The result object from the computation """ if not Conf.proc.keep_results.get(): # Remove all table and geometry results when keep_results is disabled TableAdapter.remove_all_from(result_obj) GeometryAdapter.remove_all_from(result_obj) def auto_recompute_analysis(self, obj: SignalObj | ImageObj) -> None: """Automatically recompute analysis (1-to-0) operations after data changes. This method checks if the object has 1-to-0 analysis parameters (analysis operations like statistics, measurements, etc.) and automatically recomputes the analysis to update the results based on the modified data. This should be called after: - ROI modifications (which change the data to be analyzed) - Data transformations via recompute_1_to_1 (which modify data in-place) Note: Should be called explicitly after ROI modifications, not during selection changes, to avoid interfering with the ROI change detection mechanism used by the mask refresh system. Args: obj: The object whose data was modified """ # Check if object has 1-to-0 analysis parameters (analysis operations) proc_params = extract_analysis_parameters(obj) if proc_params is None or proc_params.pattern != "1-to-0": return # Get the parameter from processing parameters param = proc_params.param # Get the actual function from the function name feature = self.get_feature(proc_params.func_name) # Recompute the analysis operation silently with Conf.proc.show_result_dialog.temp(False): self.compute_1_to_0(feature.function, param, edit=False) # Update the view obj_uuid = get_uuid(obj) self.panel.objview.update_item(obj_uuid) self.panel.refresh_plot(obj_uuid, update_items=True, force=True) def __exec_func( self, func: Callable, args: tuple, progress: QW.QProgressDialog, ) -> CompOut | None: """Execute function, eventually in a separate process. Args: func: function to execute args: function arguments progress: progress dialog Returns: Computation output object or None if canceled """ QW.QApplication.processEvents() if not progress.wasCanceled(): if self.worker is None: # No process isolation: run function directly return wng_err_func(func, args) # Process isolation: run function in a separate process self.worker.run(func, args) while not self.worker.is_computation_finished(): QW.QApplication.processEvents() time.sleep(0) # Just yields to other threads - no forced delay if progress.wasCanceled(): # User canceled the operation self.worker.restart() # Cancel computation and reset to idle break # Only get result if computation actually finished (not canceled) if self.worker.has_result_available(): return self.worker.get_result() return None def recompute_1_to_1( self, func_name: str, obj: SignalObj | ImageObj, param: gds.DataSet | None = None, ) -> SignalObj | ImageObj | None: """Recompute a 1-to-1 processing operation without adding result to panel. This method is specifically designed for the interactive re-processing feature where we want to update an existing object in-place. It executes the processing with full multiprocessing support (allowing cancellation) but returns the result without adding it to the panel. Args: func_name: Name of the processing function obj: Source object to process param: Processing parameters (optional) Returns: New processed object (not added to panel), or None if cancelled or error Raises: ValueError: If function is not found in registry """ # Get the function from the registry try: feature = self.get_feature(func_name) except ValueError as exc: raise ValueError(f"Function '{func_name}' not found in registry") from exc func = feature.function # Create progress dialog with short delay so it appears for long computations with create_progress_bar(self.panel, _("Recomputing..."), max_=1) as progress: progress.setValue(0) progress.setLabelText(_("Processing object with updated parameters...")) # Execute with multiprocessing support args = (obj, param) if param is not None else (obj,) comp_out = self.__exec_func(func, args, progress) if comp_out is None: # Cancelled by user return None # Handle the output new_obj = self.handle_output(comp_out, _("Recomputing"), progress) if new_obj is None: return None # Handle keep_results logic if isinstance(new_obj, (SignalObj, ImageObj)): self._handle_keep_results(new_obj) patch_title_with_ids(new_obj, [obj], get_short_id) return new_obj def _compute_1_to_1_subroutine( self, funcs: list[Callable], params: list, title: str ) -> None: """Generic subroutine for 1-to-1 processing. Args: funcs: list of functions to execute params: list of parameters title: title of progress bar """ assert len(funcs) == len(params) objs = self.panel.objview.get_sel_objects(include_groups=True) grps = self.panel.objview.get_sel_groups() n_glob = len(objs) * len(params) new_gids = {} with create_progress_bar(self.panel, title, max_=n_glob) as progress: for i_row, obj in enumerate(objs): for i_param, (param, func) in enumerate(zip(params, funcs)): name = func.__name__ pvalue = (i_row + 1) * (i_param + 1) pvalue = 0 if pvalue == 1 else pvalue i_title = f"{title} ({pvalue}/{n_glob})" progress.setLabelText(i_title) progress.setValue(pvalue) args = (obj,) if param is None else (obj, param) result = self.__exec_func(func, args, progress) if result is None: break new_obj = self.handle_output( result, _("Computing: %s") % i_title, progress ) if new_obj is None: continue assert isinstance(new_obj, (SignalObj, ImageObj)) patch_title_with_ids(new_obj, [obj], get_short_id) # Handle keep_results logic for 1_to_1 operations self._handle_keep_results(new_obj) # Store processing metadata for interactive re-processing pp = ProcessingParameters( func_name=name, pattern="1-to-1", param=param, source_uuid=get_uuid(obj), ) insert_processing_parameters(new_obj, pp) # Mark object as freshly processed to show Processing tab self.panel.objprop.mark_as_freshly_processed(new_obj) new_gid = None if grps: # If groups are selected, then it means that there is no # individual object selected: we work on groups only old_gid = self.panel.objmodel.get_object_group_id(obj) new_gid = new_gids.get(old_gid) if new_gid is None: # Create a new group for each selected group old_g = self.panel.objmodel.get_group(old_gid) new_gid = self._create_group_for_result( new_obj, f"{name}({get_short_id(old_g)})" ) new_gids[old_gid] = new_gid self._add_object_to_appropriate_panel( new_obj, group_id=new_gid, use_group_for_non_native=True ) # Select newly created groups, if any for group_id in new_gids.values(): self.panel.objview.set_current_item_id(group_id, extend=True) def __get_src_grps_gids_objs_nbobj_valid( self, min_group_nb: int ) -> tuple[list, list, dict, int]: """In pairwise mode only: get source groups, group ids, objects, and number of objects. Check if the number of objects is valid. Args: min_group_nb: minimum number of groups (typically, 2 for `n1` functions and 1 for `n1n` functions) Returns: Tuple (source groups, group ids, objects, number of objects, valid) """ # In pairwise mode, we need to create a new object for each pair of objects objs = self.panel.objview.get_sel_objects(include_groups=True) objmodel = self.panel.objmodel src_grps = sorted( {objmodel.get_group_from_object(obj) for obj in objs}, key=objmodel.get_number, ) src_gids = [get_uuid(grp) for grp in src_grps] # [src_objs dictionary] keys: old group id, values: list of old objects src_objs: dict[str, list[SignalObj | ImageObj]] = {} for src_gid in src_gids: src_objs[src_gid] = [ obj for obj in objs if objmodel.get_object_group_id(obj) == src_gid ] nbobj = len(src_objs[src_gids[0]]) valid = len(src_grps) >= min_group_nb if not valid: # In pairwise mode, we need selected objects in at least two groups. if env.execenv.unattended: raise ValueError( "Pairwise mode: objects must be selected in at least two groups" ) QW.QMessageBox.warning( self.mainwindow, _("Warning"), _( "In pairwise mode, you need to select objects " "in at least two groups." ), ) if valid: valid = all(len(src_objs[src_gid]) == nbobj for src_gid in src_gids) if not valid: if env.execenv.unattended: raise ValueError( "Pairwise mode: invalid number of objects in each group" ) QW.QMessageBox.warning( self.mainwindow, _("Warning"), _( "In pairwise mode, you need to select " "the same number of objects in each group." ), ) return src_grps, src_gids, src_objs, nbobj, valid def compute_1_to_1( self, func: Callable, param: gds.DataSet | None = None, paramclass: type[gds.DataSet] | None = None, title: str | None = None, comment: str | None = None, edit: bool | None = None, ) -> None: """Generic processing method: 1 object in → 1 object out. Applies a function independently to each selected object in the active panel. The result of each computation is a new object appended to the same panel. Args: func: Function to execute, that takes either `(dst_obj, src_obj)` or `(dst_obj, src_obj, param)` as arguments, where `dst_obj` is the output object, `src_obj` is the input object, and `param` is an optional parameter set. param: Optional parameter instance. paramclass: Optional parameter class for editing. title: Optional progress bar title. comment: Optional comment for parameter dialog. edit: Whether to open the parameter editor before execution. .. note:: With k selected objects, the method produces k outputs (one per input). .. note:: This method does not support pairwise mode. """ if (edit is None or param is None) and paramclass is not None: old_edit = edit edit, param = self.init_param(param, paramclass, title, comment) if old_edit is not None: edit = old_edit if param is not None: if edit and not param.edit(parent=self.mainwindow): return self._compute_1_to_1_subroutine([func], [param], title) def compute_multiple_1_to_1( self, funcs: list[Callable], params: list[gds.DataSet] | None = None, title: str | None = None, edit: bool | None = None, ) -> None: """Generic processing method: 1 object in → n objects out. Applies multiple functions to each selected object, generating multiple outputs per object. The resulting objects are appended to the active panel. Args: funcs: List of functions to apply. Each function takes either `(dst_obj, src_obj)` or `(dst_obj, src_obj, param)` as arguments, where `dst_obj` is the output object, `src_obj` is the input object, and `param` is an optional parameter set. params: List of parameter instances corresponding to each function. title: Optional progress bar title. edit: Whether to open the parameter editor before execution. .. note:: With k selected objects and n outputs per function, the method produces k × n outputs. .. note:: This method does not support pairwise mode. """ if params is None: params = [None] * len(funcs) else: group = gds.DataSetGroup(params, title=_("Parameters")) if edit and not group.edit(parent=self.mainwindow): return if len(funcs) != len(params): raise ValueError("Number of functions must match number of parameters") self._compute_1_to_1_subroutine(funcs, params, title) def compute_1_to_n( self, func: Callable, params: list[gds.DataSet], title: str | None = None, edit: bool | None = None, ) -> None: """Generic processing method: 1 object in → n objects out. Applies a single function to each selected object, with n different parameters set, thus generating n outputs per object. The resulting objects are appended to the active panel. Args: func: Single function to apply, that takes either `(dst_obj, src_obj)` or `(dst_obj, src_obj, param)` as arguments, where `dst_obj` is the output object, `src_obj` is the input object, and `param` is an optional parameter set. params: List of parameter instances. title: Optional progress bar title. edit: Whether to open the parameter editor before execution. .. note:: With k selected objects and n parameter sets, the method produces k × n outputs. .. note:: This method does not support pairwise mode. """ assert params is not None if edit: group = gds.DataSetGroup(params, title=_("Parameters")) if not group.edit(parent=self.mainwindow): return self._compute_1_to_1_subroutine([func] * len(params), params, title) def compute_1_to_0( self, func: Callable, param: gds.DataSet | None = None, paramclass: type[gds.DataSet] | None = None, title: str | None = None, comment: str | None = None, edit: bool | None = None, ) -> ResultData: """Generic processing method: 1 object in → no object out. Applies a function to each selected object, returning metadata or measurement results (e.g. peak coordinates, statistical properties) without generating new objects. Results are stored in the object's metadata and returned as a ResultData instance. Args: func: Function to execute, that takes either `(obj)` or `(obj, param)` as arguments, where `obj` is the input object and `param` is an optional parameter set. param: Optional parameter instance. paramclass: Optional parameter class for editing. title: Optional progress bar title. comment: Optional comment for parameter dialog. edit: Whether to open the parameter editor before execution. Returns: ResultData instance containing the results for all processed objects. .. note:: With k selected objects, the method performs k analyses and produces no output objects. .. note:: This method does not support pairwise mode. """ if (edit is None or param is None) and paramclass is not None: edit, param = self.init_param(param, paramclass, title, comment) if param is not None: if edit and not param.edit(parent=self.mainwindow): return None objs = self.panel.objview.get_sel_objects(include_groups=True) current_obj = self.panel.objview.get_current_object() title = func.__name__ if title is None else title refresh_needed = False with create_progress_bar(self.panel, title, max_=len(objs)) as progress: rdata = ResultData() for idx, obj in enumerate(objs): pvalue = idx + 1 pvalue = 0 if pvalue == 1 else pvalue progress.setValue(pvalue) args = (obj,) if param is None else (obj, param) # Execute function compout = self.__exec_func(func, args, progress) if compout is None: break result = self.handle_output( compout, _("Computing: %s") % title, progress ) if result is None: continue # Using the adapters: if isinstance(result, GeometryResult): adapter = GeometryAdapter(result) elif isinstance(result, TableResult): adapter = TableAdapter(result) else: # For "compute 1 to 0" functions, the result is either a # GeometryResult or TableResult: raise TypeError("Unsupported result type") # Add result shape to object's metadata # Pass function name for better parameter context in the Analysis tab adapter.add_to(obj, param) # Store processing parameters for auto-recompute on ROI change # This enables automatic recalculation when ROI is modified # Analysis parameters (1-to-0) are stored separately from # transformation history to avoid overwriting the processing chain # when analyzing objects. pp = ProcessingParameters( func_name=func.__name__, pattern="1-to-0", param=param, source_uuid=get_uuid(obj), ) insert_processing_parameters(obj, pp) # Apply processor-specific post-processing on the result refresh_needed |= self.postprocess_1_to_0_result(obj, result) # Append result to result data for later display rdata.append(adapter, obj) if obj is current_obj: # Mark object as having fresh analysis results to show Analysis tab self.panel.objprop.mark_as_fresh_analysis(obj) self.panel.selection_changed(update_items=True) else: self.panel.refresh_plot(get_uuid(obj), True, False) # Refresh plot if post-processing modified any objects (e.g., ROI creation) if refresh_needed: self.panel.refresh_plot("selected", only_visible=False, only_existing=True) if rdata and Conf.proc.show_result_dialog.get(): show_resultdata(self.mainwindow, rdata, f"{objs[0].PREFIX}_results") return rdata def compute_n_to_1( self, func: Callable, param: gds.DataSet | None = None, paramclass: type[gds.DataSet] | None = None, title: str | None = None, comment: str | None = None, edit: bool | None = None, ) -> None: """Generic processing method: n objects in → 1 object out. Aggregates multiple selected objects into a single result using the provided function. In pairwise mode, applies the function to object pairs (grouped by index) and generates one output per pair. Args: func: Function to apply, that takes either `(dst_obj, src_obj_list)` or `(dst_obj, src_obj_list, param)` as arguments, where `dst_obj` is the output object, `src_obj_list` is the input object list, and `param` is an optional parameter set. param: Optional parameter instance. paramclass: Optional parameter class for editing. title: Optional progress bar title. comment: Optional comment for parameter dialog. edit: Whether to open the parameter editor before execution. .. note:: With n selected objects: - in default mode, produces 1 output. - in pairwise mode, produces n outputs (one per pair). """ if (edit is None or param is None) and paramclass is not None: edit, param = self.init_param(param, paramclass, title, comment) if param is not None: if edit and not param.edit(parent=self.mainwindow): return objs = self.panel.objview.get_sel_objects(include_groups=True) objmodel = self.panel.objmodel pairwise = is_pairwise_mode() name = func.__name__ if pairwise: src_grps, src_gids, src_objs, _nbobj, valid = ( self.__get_src_grps_gids_objs_nbobj_valid(min_group_nb=2) ) if not valid: return dst_gname = ( f"{name}({','.join([get_short_id(grp) for grp in src_grps])})|pairwise" ) group_exclusive = len(self.panel.objview.get_sel_groups()) != 0 if not group_exclusive: # This is not a group exclusive selection dst_gname += "[...]" # Delay group creation until after first result to determine target panel dst_gid = None n_pairs = len(src_objs[src_gids[0]]) max_i_pair = min( n_pairs, max(len(src_objs[get_uuid(grp)]) for grp in src_grps) ) # Track "Yes to All" choice for this compute operation auto_interpolate_for_operation = False with create_progress_bar(self.panel, title, max_=n_pairs) as progress: for i_pair, src_obj1 in enumerate(src_objs[src_gids[0]][:max_i_pair]): progress.setValue(i_pair + 1) progress.setLabelText(title) src_objs_pair = [src_obj1] for src_gid in src_gids[1:]: src_obj = src_objs[src_gid][i_pair] src_objs_pair.append(src_obj) # Check signal x-array compatibility for n-to-1 operations if auto_interpolate_for_operation: # "Yes to All" selected, automatically interpolate # by temporarily changing the configuration with Conf.proc.xarray_compat_behavior.temp("interpolate"): result = self._check_signal_xarray_compatibility( src_objs_pair, progress=progress ) else: # Normal compatibility check with dialog result = self._check_signal_xarray_compatibility( src_objs_pair, progress=progress ) if result is None: # User canceled or compatibility check failed return checked_objs, yes_to_all_selected = result if yes_to_all_selected: auto_interpolate_for_operation = True src_objs_pair = checked_objs if param is None: args = (src_objs_pair,) else: args = (src_objs_pair, param) result = self.__exec_func(func, args, progress) if result is None: break new_obj = self.handle_output( result, _("Calculating: %s") % title, progress ) if new_obj is None: break assert isinstance(new_obj, (SignalObj, ImageObj)) patch_title_with_ids(new_obj, src_objs_pair, get_short_id) # Handle keep_results and geometry result merging self._handle_keep_results(new_obj) self._merge_geometry_results_for_n_to_1(new_obj, src_objs_pair) # Store lightweight processing metadata (non-interactive) proc_params = ProcessingParameters( func_name=name, pattern="n-to-1", param=param, source_uuids=[get_uuid(obj) for obj in src_objs_pair], ) insert_processing_parameters(new_obj, proc_params) # Create destination group on first result, in appropriate panel if dst_gid is None: dst_gid = self._create_group_for_result(new_obj, dst_gname) self._add_object_to_appropriate_panel(new_obj, group_id=dst_gid) else: # In single operand mode, we create a single object for all selected objects # [src_objs dictionary] keys: old group id, values: list of old objects src_objs: dict[str, list[SignalObj | ImageObj]] = {} grps = self.panel.objview.get_sel_groups() dst_group_name = None if grps: # (Group exclusive selection) # At least one group is selected: create a new group dst_gname = f"{name}({','.join([get_uuid(grp) for grp in grps])})" # Delay group creation until after first result dst_gid = None dst_group_name = dst_gname # Store name for later use else: # (Object exclusive selection) # No group is selected: use each object's group dst_gid = None for src_obj in objs: src_gid = objmodel.get_object_group_id(src_obj) src_objs.setdefault(src_gid, []).append(src_obj) # Track "Yes to All" choice for this compute operation auto_interpolate_for_operation = False with create_progress_bar(self.panel, title, max_=len(objs)) as progress: progress.setValue(0) progress.setLabelText(title) for src_gid, src_obj_list in src_objs.items(): # Check signal x-array compatibility for n-to-1 operations if auto_interpolate_for_operation: # "Yes to All" selected, automatically interpolate with Conf.proc.xarray_compat_behavior.temp("interpolate"): result = self._check_signal_xarray_compatibility( src_obj_list, progress=progress ) else: # Normal compatibility check with dialog result = self._check_signal_xarray_compatibility( src_obj_list, progress=progress ) if result is None: # User canceled or compatibility check failed return checked_objs, yes_to_all_selected = result if yes_to_all_selected: auto_interpolate_for_operation = True src_obj_list = checked_objs if param is None: args = (src_obj_list,) else: args = (src_obj_list, param) result = self.__exec_func(func, args, progress) if result is None: break new_obj = self.handle_output( result, _("Calculating: %s") % title, progress ) if new_obj is None: break assert isinstance(new_obj, (SignalObj, ImageObj)) group_id = dst_gid if dst_gid is not None else src_gid patch_title_with_ids(new_obj, src_obj_list, get_short_id) # Handle keep_results and geometry result merging self._handle_keep_results(new_obj) self._merge_geometry_results_for_n_to_1(new_obj, src_obj_list) # Store lightweight processing metadata (non-interactive) proc_params = ProcessingParameters( func_name=name, pattern="n-to-1", param=param, source_uuids=[get_uuid(obj) for obj in src_obj_list], ) insert_processing_parameters(new_obj, proc_params) # Create destination group on first result, in appropriate panel use_group_for_non_native = False if dst_gid is None and dst_group_name is not None: dst_gid = self._create_group_for_result(new_obj, dst_group_name) group_id = dst_gid use_group_for_non_native = True self._add_object_to_appropriate_panel( new_obj, group_id=group_id, use_group_for_non_native=use_group_for_non_native, ) # Select newly created group, if any if dst_gid is not None: self.panel.objview.set_current_item_id(dst_gid) def compute_2_to_1( self, obj2: SignalObj | ImageObj | list[SignalObj | ImageObj] | None, obj2_name: str, func: Callable, param: gds.DataSet | None = None, paramclass: type[gds.DataSet] | None = None, title: str | None = None, comment: str | None = None, edit: bool | None = None, skip_xarray_compat: bool | None = None, ) -> None: """Generic processing method: binary operation 1+1 → 1. Applies a binary function between each selected object and a second operand. Supports both single operand mode (same operand for all objects) and pairwise mode (one-to-one matching between two object lists). Args: obj2: Second operand (single object or list for pairwise mode). obj2_name: Display name for the second operand (used in selection dialog). func: Function to apply, that takes either `(dst_obj, src_obj1, src_obj2)` or `(dst_obj, src_obj1, src_obj2, param)` as arguments, where `dst_obj` is the output object, `src_obj1` is the first input object, `src_obj2` is the second input object (operand), and `param` is an optional parameter set. param: Optional parameter instance. paramclass: Optional parameter class for editing. title: Optional progress bar title. comment: Optional comment for parameter dialog. edit: Whether to open the parameter editor before execution. skip_xarray_compat: If True, skip x-array compatibility checks (only for signal panels). .. note:: With k selected objects: - in single operand mode and 1 secondary object: produces k outputs. - in pairwise mode with k secondary objects: produces k outputs (one per pair). """ if (edit is None or param is None) and paramclass is not None: edit, param = self.init_param(param, paramclass, title, comment) if param is not None: if edit and not param.edit(parent=self.mainwindow): return objs = self.panel.objview.get_sel_objects(include_groups=True) objmodel = self.panel.objmodel pairwise = is_pairwise_mode() name = func.__name__ if obj2 is None: objs2 = [] elif isinstance(obj2, list): objs2 = obj2 assert pairwise else: objs2 = [obj2] dlg_title = _("Select %s") % obj2_name if pairwise: group_exclusive = len(self.panel.objview.get_sel_groups()) != 0 src_grps, src_gids, src_objs, nbobj, valid = ( self.__get_src_grps_gids_objs_nbobj_valid(min_group_nb=1) ) if not valid: return if not objs2: objs2 = self.panel.get_objects_with_dialog( dlg_title, _( "Note: operation mode is pairwise: " "%s object(s) expected (i.e. as many as in the first group)" ) % nbobj, nbobj, ) if objs2 is None: return n_pairs = len(src_objs[src_gids[0]]) max_i_pair = min( n_pairs, max(len(src_objs[get_uuid(grp)]) for grp in src_grps) ) grp2_id = objmodel.get_object_group_id(objs2[0]) grp2 = objmodel.get_group(grp2_id) # Initialize pair mapping for potential interpolations pair_maps = {} # Check x-array compatibility for signal processing (pairwise mode) if self._is_signal_panel() and not skip_xarray_compat: # Check compatibility between objects from both groups all_pairs = [] for src_gid in src_gids: for i_pair in range(max_i_pair): src_obj1 = src_objs[src_gid][i_pair] src_obj2 = objs2[i_pair] if isinstance(src_obj1, SignalObj) and isinstance( src_obj2, SignalObj ): all_pairs.append((src_obj1, src_obj2)) # Track "Yes to All" choice for this compute operation auto_interpolate_for_operation = False # Check all pairs for compatibility and create interpolation maps for src_obj1, src_obj2 in all_pairs: if auto_interpolate_for_operation: # "Yes to All" selected, automatically interpolate with Conf.proc.xarray_compat_behavior.temp("interpolate"): result = self._check_signal_xarray_compatibility( [src_obj1, src_obj2] ) else: # Normal compatibility check with dialog result = self._check_signal_xarray_compatibility( [src_obj1, src_obj2] ) if result is None: return # User cancelled or error occurred checked_pair, yes_to_all_selected = result if yes_to_all_selected: auto_interpolate_for_operation = True # Store mapping for this specific pair pair_maps[(src_obj1, src_obj2)] = checked_pair with create_progress_bar(self.panel, title, max_=len(src_gids)) as progress: for i_group, src_gid in enumerate(src_gids): progress.setValue(i_group + 1) progress.setLabelText(title) if group_exclusive: # This is a group exclusive selection src_grp = objmodel.get_group(src_gid) grp_short_ids = [get_uuid(grp) for grp in (src_grp, grp2)] dst_gname = f"{name}({','.join(grp_short_ids)})|pairwise" else: dst_gname = f"{name}[...]" # Delay group creation until after first result dst_gid = None for i_pair in range(max_i_pair): orig_obj1, orig_obj2 = src_objs[src_gid][i_pair], objs2[i_pair] # Use interpolated signals if available, keep original refs actual_obj1, actual_obj2 = orig_obj1, orig_obj2 if (orig_obj1, orig_obj2) in pair_maps: interpolated_pair = pair_maps[(orig_obj1, orig_obj2)] actual_obj1 = interpolated_pair[0] actual_obj2 = interpolated_pair[1] args = [actual_obj1, actual_obj2] if param is not None: args.append(param) result = self.__exec_func(func, tuple(args), progress) if result is None: break new_obj = self.handle_output( result, _("Calculating: %s") % title, progress ) if new_obj is None: continue assert isinstance(new_obj, (SignalObj, ImageObj)) # Use original objects for title generation patch_title_with_ids( new_obj, [orig_obj1, orig_obj2], get_short_id ) # Handle keep_results logic for 2_to_1 operations self._handle_keep_results(new_obj) # Store lightweight processing metadata (non-interactive) proc_params = ProcessingParameters( func_name=name, pattern="2-to-1", param=param, source_uuids=[ get_uuid(orig_obj1), get_uuid(orig_obj2), ], ) insert_processing_parameters(new_obj, proc_params) # Create destination group on first result, in appropriate panel if dst_gid is None: dst_gid = self._create_group_for_result(new_obj, dst_gname) self._add_object_to_appropriate_panel(new_obj, group_id=dst_gid) else: if not objs2: objs2 = self.panel.get_objects_with_dialog( dlg_title, _( "Note: operation mode is single operand: " "1 object expected" ), ) if objs2 is None: return obj2 = objs2[0] # Initialize signal mapping for potential interpolations signal_map = {} # Check x-array compatibility for signal processing (single operand mode) orig_obj2 = obj2 # Keep reference to original obj2 for title generation if ( self._is_signal_panel() and isinstance(obj2, SignalObj) and not skip_xarray_compat ): signal_objs = [obj for obj in objs if isinstance(obj, SignalObj)] if signal_objs: # Check compatibility and get potentially interpolated signals result = self._check_signal_xarray_compatibility( signal_objs + [obj2] ) if result is None: return # User cancelled or error occurred checked_objs, _yes_to_all_selected = result # Note: In single operand mode, "Yes to All" doesn't apply # since there's only one compatibility check # Replace obj2 with the potentially interpolated version obj2 = checked_objs[-1] # obj2 was added last # Create a mapping of original to interpolated signals for orig_obj, checked_obj in zip(signal_objs, checked_objs[:-1]): signal_map[orig_obj] = checked_obj with create_progress_bar(self.panel, title, max_=len(objs)) as progress: for index, obj in enumerate(objs): progress.setValue(index + 1) progress.setLabelText(title) # Use interpolated signal if available actual_obj = obj if ( self._is_signal_panel() and isinstance(obj, SignalObj) and obj in signal_map ): actual_obj = signal_map[obj] args = ( (actual_obj, obj2) if param is None else (actual_obj, obj2, param) ) result = self.__exec_func(func, args, progress) if result is None: break new_obj = self.handle_output( result, _("Calculating: %s") % title, progress ) if new_obj is None: continue assert isinstance(new_obj, (SignalObj, ImageObj)) group_id = objmodel.get_object_group_id(obj) # Use original objects for title generation patch_title_with_ids(new_obj, [obj, orig_obj2], get_short_id) # Handle keep_results logic for 2_to_1 operations self._handle_keep_results(new_obj) # Store lightweight processing metadata (non-interactive) proc_params = ProcessingParameters( func_name=name, pattern="2-to-1", param=param, source_uuids=[ get_uuid(obj), get_uuid(orig_obj2), ], ) insert_processing_parameters(new_obj, proc_params) # group_id is from source panel, don't use for non-native objects self._add_object_to_appropriate_panel( new_obj, group_id=group_id, use_group_for_non_native=False ) def register_1_to_1( self, function: Callable, title: str, paramclass: type[gds.DataSet] | None = None, icon_name: str | None = None, comment: str | None = None, edit: bool | None = None, ) -> ComputingFeature: """Register a 1-to-1 processing function. The `register_1_to_1` method is used to register a function that takes one object as input and produces one object as output. The function is called with the input object and an optional parameter set. The result of the function is returned. Args: function: function to register title: title of the function paramclass: parameter class. Defaults to None. icon_name: icon name. Defaults to None. comment: comment. Defaults to None. edit: whether to open the parameter editor before execution. Returns: Registered feature. """ feature = ComputingFeature( pattern="1_to_1", function=function, title=title, paramclass=paramclass, icon_name=icon_name, comment=comment, edit=edit, ) self.add_feature(feature) return feature def register_1_to_0( self, function: Callable, title: str, paramclass: type[gds.DataSet] | None = None, icon_name: str | None = None, comment: str | None = None, edit: bool | None = None, ) -> ComputingFeature: """Register a 1-to-0 processing function. The function takes one object as input and produces no output. The function is called with the input object and an optional parameter set. The result of the function is returned. Args: function: function to register title: title of the function paramclass: parameter class. Defaults to None. icon_name: icon name. Defaults to None. comment: comment. Defaults to None. edit: whether to open the parameter editor before execution. Returns: Registered feature. """ feature = ComputingFeature( pattern="1_to_0", function=function, title=title, paramclass=paramclass, icon_name=icon_name, comment=comment, edit=edit, ) self.add_feature(feature) return feature def register_1_to_n( self, function: Callable, title: str, icon_name: str | None = None ) -> ComputingFeature: """Register a 1-to-n processing function. The function takes one object as input and produces multiple objects as output. The function is called with the input object and an optional parameter set. The result of the function is returned. Args: function: function to register title: title of the function icon_name: icon name. Defaults to None. Returns: Registered feature. """ feature = ComputingFeature( pattern="1_to_n", function=function, title=title, icon_name=icon_name, ) self.add_feature(feature) return feature def register_n_to_1( self, function: Callable, title: str, paramclass: type[gds.DataSet] | None = None, icon_name: str | None = None, comment: str | None = None, edit: bool | None = None, ) -> ComputingFeature: """Register a n-to-1 processing function. The function takes multiple objects as input and produces one object as output. The function is called with the input objects and an optional parameter set. The result of the function is returned. Args: function: function to register title: title of the function paramclass: parameter class. Defaults to None. icon_name: icon name. Defaults to None. comment: comment. Defaults to None. edit: whether to open the parameter editor before execution. Returns: Registered feature. """ feature = ComputingFeature( pattern="n_to_1", function=function, title=title, paramclass=paramclass, icon_name=icon_name, comment=comment, edit=edit, ) self.add_feature(feature) return feature def register_2_to_1( self, function: Callable, title: str, paramclass: type[gds.DataSet] | None = None, icon_name: str | None = None, comment: str | None = None, edit: bool | None = None, obj2_name: str | None = None, skip_xarray_compat: bool | None = None, ) -> ComputingFeature: """Register a 2-to-1 processing function. The function takes two objects as input and produces one object as output. The function is called with the input objects and an optional parameter set. The result of the function is returned. Args: function: function to register title: title of the function paramclass: parameter class. Defaults to None. icon_name: icon name. Defaults to None. comment: comment. Defaults to None. edit: whether to open the parameter editor before execution. obj2_name: name of the second object. Defaults to None. skip_xarray_compat: whether to skip X-array compatibility check. Defaults to None. Set to True for operations like interpolation where different X-arrays are expected and desired. Returns: Registered feature. """ feature = ComputingFeature( pattern="2_to_1", function=function, title=title, paramclass=paramclass, icon_name=icon_name, comment=comment, edit=edit, obj2_name=obj2_name, skip_xarray_compat=skip_xarray_compat, ) self.add_feature(feature) return feature def add_feature(self, feature: ComputingFeature) -> None: """Add a computing feature to the registry. Args: feature: ComputingFeature instance to add. """ self.computing_registry[feature.function] = feature def get_feature(self, function_or_name: Callable | str) -> ComputingFeature: """Get a computing feature by name or function. Args: function_or_name: Name of the feature or the function itself. Returns: Computing feature instance. """ try: return self.computing_registry[function_or_name] except KeyError as exc: for _func, feature in self.computing_registry.items(): if feature.name == function_or_name: return feature raise ValueError(f"Unknown computing feature: {function_or_name}") from exc @qt_try_except() def run_feature( self, key: str | Callable | ComputingFeature, *args, **kwargs, ) -> ResultData | list[SignalObj | ImageObj] | SignalObj | ImageObj | None: """Run a computing feature that has been previously registered. This method is a generic dispatcher for all compute methods. It uses the central registry to find the appropriate compute method based on the pattern (`1_to_1`, `1_to_0`, `n_to_1`, `2_to_1`, `1_to_n`). It then calls the appropriate compute method with the provided arguments. Depending on the pattern, this method can take different arguments: .. code-block:: python import sigima.proc.signal as sips import sigima.params proc = win.signalpanel.processor # where `win` is DataLab's main window # For patterns `1_to_1`, `1_to_0`, `n_to_1`: proc.run_feature(sips.normalize) param = sigima.params.MovingAverageParam(n=3) proc.run_feature(sips.moving_average, param) proc.run_feature(computation_function, param, edit=False) # For pattern `2_to_1`: proc.run_feature(sips.difference, obj2) param = sigima.params.InterpolationParam(method="cubic") proc.run_feature(sips.interpolation, obj2, param) # For pattern `1_to_n`: params = roi.to_params(obj) proc.run_feature(sips.extract_roi, params=params) Args: key: The key to look up in the registry. It can be a string, a callable, or a ComputingFeature instance. *args: Positional arguments to pass to the compute method. **kwargs: Keyword arguments to pass to the compute method. Returns: The result of the computation or None. """ if not isinstance(key, ComputingFeature): feature = self.get_feature(key) else: feature = key # Some keyword parameters may be overridden edit = kwargs.pop("edit", feature.edit) title = kwargs.pop("title", feature.title) comment = kwargs.pop("comment", feature.comment) pattern = feature.pattern if pattern in {"1_to_1", "1_to_0", "n_to_1"}: compute_method = getattr(self, f"compute_{pattern}") param = kwargs.pop("param", args[0] if args else None) assert isinstance(param, (gds.DataSet, type(None))), ( f"For pattern '{pattern}', 'param' must be a DataSet or None" ) return compute_method( feature.function, param=param, paramclass=feature.paramclass, title=title, comment=comment, edit=edit, ) if pattern == "2_to_1": obj2 = kwargs.pop("obj2", args[0] if args else None) assert isinstance(obj2, (SignalObj, ImageObj, list, type(None))), ( "For pattern '2_to_1', 'obj2' must be a SignalObj, ImageObj, " "list of SignalObj/ImageObj, or None" ) param = kwargs.pop("param", args[1] if args and len(args) > 1 else None) assert isinstance(param, (gds.DataSet, type(None))), ( "For pattern '2_to_1', 'param' must be a DataSet or None" ) return self.compute_2_to_1( obj2, feature.obj2_name or _("Second operand"), feature.function, param=param, paramclass=feature.paramclass, title=title, comment=comment, edit=edit, skip_xarray_compat=feature.skip_xarray_compat, ) if pattern == "1_to_n": params = kwargs.get("params", args[0] if args else []) if not isinstance(params, list) or any( not isinstance(param, gds.DataSet) for param in params ): raise ValueError( "For pattern '1_to_n', 'params' must be " "a list of DataSet or a DataSetGroup" ) return self.compute_1_to_n( feature.function, params=params, title=title, edit=edit, ) raise ValueError(f"Unsupported compute pattern: {pattern}") # ------Data Processing------------------------------------------------------------- @qt_try_except() def compute_roi_extraction(self, roi: TypeROI | None = None) -> None: """Extract Region Of Interest (ROI) from data with: - :py:func:`sigima.proc.image.compute_extract_roi` for single ROI - :py:func:`sigima.proc.image.compute_extract_rois` for multiple ROIs""" # Expected behavior: # ----------------- # * If `roi` is not None or not empty, skip the ROI dialog # * If first selected obj has a ROI, use this ROI as default but open # ROI Editor dialog anyway # * If multiple objs are selected, then apply the first obj ROI to all if roi is None or roi.is_empty(): roi = self.edit_roi_graphically(mode="extract") if roi is None or roi.is_empty(): return obj = self.panel.objview.get_sel_objects(include_groups=True)[0] params = roi.to_params(obj) if Conf.proc.extract_roi_singleobj.get() and len(params) > 1: # Extract multiple ROIs into a single object (remove all the ROIs), # if the "Extract all ROIs into a single image object" # option is checked and if there are more than one ROI self._extract_multiple_roi_in_single_object(params) else: # Extract each ROI into a separate object (keep the ROI in the case of # a circular ROI), if the "Extract all ROIs into a single image object" # option is not checked or if there is only one ROI (See Issue #31) self.run_feature("extract_roi", params=params, edit=False) @abc.abstractmethod @qt_try_except() def _extract_multiple_roi_in_single_object( self, params: list[TypeROIParam] ) -> None: """Extract multiple Regions Of Interest (ROIs) from data in a single object""" # ------Analysis------------------------------------------------------------------- def edit_roi_graphically( self, mode: Literal["apply", "extract", "define"] = "apply" ) -> TypeROI | None: """Define Region Of Interest (ROI). Args: mode: Mode of operation, either "apply" (define ROI, then apply it to selected objects), "extract" (define ROI, then extract data from it), or "define" (define ROI without applying or extracting). Returns: ROI object or None if ROI dialog has been canceled. """ assert mode in ("apply", "extract", "define"), ( f"Invalid mode: {mode}. Must be either 'apply', 'extract' or 'define'." ) # Expected behavior: # ----------------- # * If first selected obj has a ROI, use this ROI as default but open # ROI Editor dialog anyway # * If multiple objs are selected, then apply the first obj ROI to all results = self.panel.get_roi_editor_output(mode=mode) if results is None: return None edited_roi, modified = results objs = self.panel.objview.get_sel_objects(include_groups=True) obj = objs[-1] params = edited_roi.to_params(obj) group = gds.DataSetGroup(params, title=_("Regions of Interest")) if ( env.execenv.unattended # Unattended mode (automated unit tests) or edited_roi.is_empty() # No ROI has been defined or group.edit(parent=self.mainwindow) # ROI dialog has been accepted ): if modified: # If ROI has been modified, save ROI (not in "extract" mode) if edited_roi.is_empty() and mode != "define": # If ROI is empty, remove it from all selected objects # (not in "define" mode because the ROI is just defined and used # in a processing function for example: it's not bound to any # object yet) for obj_i in objs: obj_i.roi = None else: edited_roi = edited_roi.__class__.from_params(obj, params) if mode == "apply": # Apply ROI to all selected objects for obj_i in objs: obj_i.roi = edited_roi self.SIG_ADD_SHAPE.emit(get_uuid(obj)) self.panel.selection_changed(update_items=True) self.panel.refresh_plot( "selected", update_items=True, only_visible=False, only_existing=True, ) # Auto-recompute analysis operations for objects with modified ROIs if mode == "apply": for obj_i in objs: self.auto_recompute_analysis(obj_i) return edited_roi def edit_roi_numerically(self) -> TypeROI: """Edit Regions Of Interest (ROIs) numerically. Opens a dialog to edit the parameters of the selected ROIs. If no ROIs are selected, it will prompt the user to select ROIs. Returns: The edited ROI object if the dialog is accepted, otherwise the original ROI. """ obj = self.panel.objview.get_sel_objects()[0] assert obj.roi is not None, _("No ROI selected for editing.") params = obj.roi.to_params(obj) # Round coordinates to appropriate precision before displaying for param in params: if isinstance(obj, SignalObj): coordutils.round_signal_roi_param(obj, param) elif isinstance(obj, ImageObj): coordutils.round_image_roi_param(obj, param) group = gds.DataSetGroup(params, title=_("Regions of Interest")) if group.edit(parent=self.mainwindow): edited_roi = obj.roi.__class__.from_params(obj, params) obj.roi = edited_roi self.SIG_ADD_SHAPE.emit(get_uuid(obj)) self.panel.refresh_plot( "selected", update_items=True, only_visible=False, only_existing=True, ) # Auto-recompute analysis operations after ROI modification self.auto_recompute_analysis(obj) return edited_roi return obj.roi def delete_regions_of_interest(self) -> None: """Delete Regions Of Interest""" if ( env.execenv.unattended or QW.QMessageBox.question( self.mainwindow, _("Remove all ROIs"), _("Are you sure you want to remove all ROIs?"), ) == QW.QMessageBox.Yes ): modified_objs = [] for obj in self.panel.objview.get_sel_objects(): if obj.roi is not None: obj.roi = None modified_objs.append(obj) self.panel.selection_changed(update_items=True) # Auto-recompute analysis operations after ROI deletion for obj in modified_objs: self.auto_recompute_analysis(obj) def delete_single_roi(self, roi_index: int) -> None: """Delete a single ROI by index Args: roi_index: Index of the ROI to remove """ obj = self.panel.objview.get_sel_objects()[0] if obj.roi is not None and 0 <= roi_index < len(obj.roi.single_rois): roi_title = obj.roi.get_single_roi_title(roi_index) if ( env.execenv.unattended or QW.QMessageBox.question( self.mainwindow, _("Remove ROI"), _("Are you sure you want to remove ROI '%s'?") % roi_title, ) == QW.QMessageBox.Yes ): obj.roi.single_rois.pop(roi_index) # If no ROIs left, set roi to None if len(obj.roi.single_rois) == 0: obj.roi = None obj.mark_roi_as_changed() # Auto-recompute analysis operations after ROI modification # (must be done BEFORE selection_changed to avoid stale results) self.auto_recompute_analysis(obj) self.panel.selection_changed(update_items=True) DataLab-1.0.2/datalab/gui/processor/catcher.py000066400000000000000000000050401511411446000211540ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab warning and error catcher utility for processors """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import dataclasses import traceback import warnings from collections.abc import Callable from typing import TYPE_CHECKING, Any from datalab.env import execenv if TYPE_CHECKING: from sigima.objects import ImageObj, SignalObj from sigima.objects.scalar import GeometryResult, TableResult @dataclasses.dataclass class CompOut: """Class for representing computation output Attributes: result: computation result error_msg: error message warning_msg: warning message """ result: SignalObj | ImageObj | GeometryResult | TableResult | None = None error_msg: str | None = None warning_msg: str | None = None def wng_err_func(func: Callable, args: tuple[Any]) -> CompOut: """Wrapper function to catch errors and warnings during computation Args: func: function to call args: function arguments Returns: Computation output object containing the result, error message, or warning message. """ with warnings.catch_warnings(record=True) as wngs: try: result = func(*args) if wngs: wng = wngs[-1] warning_msg = warnings.formatwarning( message=wng.message, category=wng.category, filename=wng.filename, lineno=wng.lineno, line=wng.line, ) return CompOut(result=result, warning_msg=warning_msg) return CompOut(result=result) except Exception: # pylint: disable=broad-except if execenv.unattended and not execenv.catcher_test: # In unattended mode (test cases), we want to raise the exception # because test cases are supposed to work without any error. In real # life, we want to avoid raising the exception because it would stop # the application, and exceptions could be related to non-critical # errors due to external libraries. # When testing the catcher, on the other hand, we don't want to # raise the exception because it would stop the unattended test # execution. raise return CompOut(error_msg=traceback.format_exc()) DataLab-1.0.2/datalab/gui/processor/image.py000066400000000000000000001334001511411446000206270ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ .. Image processor object (see parent package :mod:`datalab.gui.processor`) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import importlib from typing import Literal import numpy as np import sigima.params import sigima.proc.base as sipb import sigima.proc.image as sipi from guidata.qthelpers import exec_dialog from plotpy.widgets.resizedialog import ResizeDialog from qtpy import QtWidgets as QW from sigima.objects import ( ImageObj, ImageROI, NormalDistributionParam, PoissonDistributionParam, ROI2DParam, UniformDistributionParam, ) from sigima.objects.scalar import GeometryResult, TableResult from sigima.proc.decorator import ComputationMetadata from datalab.adapters_metadata import GeometryAdapter from datalab.config import APP_NAME, _ from datalab.gui.processor.base import BaseProcessor from datalab.gui.profiledialog import ProfileExtractionDialog from datalab.gui.roigrideditor import ImageGridROIEditor from datalab.objectmodel import get_uuid from datalab.utils.qthelpers import create_progress_bar, qt_try_except from datalab.widgets import imagebackground def apply_geometry_transform( obj: ImageObj, operation: Literal[ "translate", "scale", "rotate90", "rotate270", "fliph", "flipv", "transpose" ], **kwargs, ) -> None: """Apply a geometric transformation to all geometry results in an object. This uses the Sigima transformation system for proper geometric operations. For image objects, rotations are performed around the image center to match how the image data is transformed. Args: obj: The object containing geometry results to transform operation: The transformation operation name **kwargs: Optional parameters for the transformation (e.g., angle for rotate) """ assert operation in [ "translate", "scale", "rotate90", "rotate270", "fliph", "flipv", "transpose", ], f"Unknown operation: {operation}" if operation == "translate": if not kwargs or "dx" not in kwargs or "dy" not in kwargs: raise ValueError("translate operation requires 'dx' and 'dy' parameters") dx, dy = kwargs["dx"], kwargs["dy"] elif operation == "scale": if not kwargs or "sx" not in kwargs or "sy" not in kwargs: raise ValueError("scale operation requires 'sx' and 'sy' parameters") sx, sy = kwargs["sx"], kwargs["sy"] for adapter in list(GeometryAdapter.iterate_from_obj(obj)): geom = adapter.result assert geom is not None, "Geometry should not be None" assert len(geom.coords) > 0, "Geometry coordinates should not be empty" if operation == "translate": tr_geom = sipi.transformer.translate(geom, dx, dy) elif operation == "scale": tr_geom = sipi.transformer.scale(geom, sx, sy, (obj.xc, obj.yc)) elif operation == "rotate90": tr_geom = sipi.transformer.rotate(geom, -np.pi / 2, (obj.xc, obj.yc)) elif operation == "rotate270": tr_geom = sipi.transformer.rotate(geom, np.pi / 2, (obj.xc, obj.yc)) elif operation == "fliph": tr_geom = sipi.transformer.fliph(geom, obj.xc) elif operation == "flipv": tr_geom = sipi.transformer.flipv(geom, obj.yc) elif operation == "transpose": tr_geom = sipi.transformer.transpose(geom) else: raise ValueError(f"Unknown operation: {operation}") # Remove the old geometry and add the transformed one adapter.remove_from(obj) tr_adapter = GeometryAdapter(tr_geom) tr_adapter.add_to(obj) class GeometricTransformWrapper: """Pickleable wrapper for geometric transformation functions. This class creates a callable wrapper that can be pickled, unlike nested functions. Instead of storing the function directly, it stores the module path and function name to allow proper pickling. """ def __init__(self, func, operation: str): self.operation = operation # Store function reference for execution self.func = func # Store function module and name for pickling self.__module__ = func.__module__ self.__qualname__ = func.__qualname__ self.__annotations__ = getattr(func, "__annotations__", {}) self.__name__ = getattr(func, "__name__", str(func)) # Copy the __wrapped__ attribute if it exists (for Sigima compatibility) # Note: We don't copy __wrapped__ as it may contain unpickleable references # The wrapper functionality will still work without it # Copy Sigima computation metadata (required for validation) computation_metadata_attr = "__computation_function_metadata" if hasattr(func, computation_metadata_attr): setattr( self, computation_metadata_attr, getattr(func, computation_metadata_attr), ) def __call__(self, src_obj, param=None): """Call the wrapped function and apply geometry transformations.""" # Call the original function if param is not None: dst_obj = self.func(src_obj, param) else: dst_obj = self.func(src_obj) apply_geometry_transform(dst_obj, operation=self.operation) return dst_obj def __getstate__(self): """Custom pickling: exclude the function reference.""" # Build state manually to avoid any problematic attributes state = { "operation": self.operation, "__module__": self.__module__, "__qualname__": self.__qualname__, "__annotations__": self.__annotations__, "__name__": self.__name__, } # Store function information for reconstruction if hasattr(self, "func"): state["_func_module"] = self.func.__module__ state["_func_name"] = self.func.__name__ # Note: We don't copy __wrapped__ as it may contain unpickleable references # Copy computation metadata safely computation_metadata_attr = "__computation_function_metadata" if hasattr(self, computation_metadata_attr): metadata = getattr(self, computation_metadata_attr) # Store as a dict to avoid any pickling issues with the object itself if hasattr(metadata, "__dict__"): state[computation_metadata_attr] = metadata.__dict__.copy() else: state[computation_metadata_attr] = metadata return state def __setstate__(self, state): """Custom unpickling: restore the function reference.""" self.__dict__.update(state) # Restore function from module and name if "_func_module" in state and "_func_name" in state: module = importlib.import_module(state["_func_module"]) self.func = getattr(module, state["_func_name"]) # Reconstruct computation metadata if it was stored as dict computation_metadata_attr = "__computation_function_metadata" if computation_metadata_attr in state: metadata_dict = state[computation_metadata_attr] if isinstance(metadata_dict, dict): metadata = ComputationMetadata(**metadata_dict) setattr(self, computation_metadata_attr, metadata) class ImageProcessor(BaseProcessor[ImageROI, ROI2DParam]): """Object handling image processing: operations, processing, analysis""" # pylint: disable=duplicate-code def _wrap_geometric_transform(self, func, operation: str): """Wrap a geometric transformation function to apply geometry transforms. Args: func: The original Sigima function operation: The operation name for geometry transformation Returns: Pickleable wrapped function that applies geometry transformations """ return GeometricTransformWrapper(func, operation) def postprocess_1_to_0_result( self, obj: ImageObj, result: GeometryResult | TableResult ) -> bool: """Post-process results from 1-to-0 operations for images. For image objects with geometry results, applies detection ROIs if requested in the result metadata (via DetectionROIParam). Args: obj: The image object that was analyzed result: The analysis result (GeometryResult or TableResult) Returns: True if the object was modified and needs refresh, False otherwise """ if isinstance(result, GeometryResult): return sipi.apply_detection_rois(obj, result) return False def register_operations(self) -> None: """Register operations.""" self.register_n_to_1(sipi.addition, _("Sum"), icon_name="sum.svg") self.register_n_to_1(sipi.average, _("Average"), icon_name="average.svg") self.register_n_to_1( sipi.standard_deviation, _("Standard deviation"), icon_name="std.svg", ) self.register_2_to_1( sipi.difference, _("Difference"), icon_name="difference.svg", obj2_name=_("image to subtract"), ) self.register_2_to_1( sipi.quadratic_difference, _("Quadratic Difference"), icon_name="quadratic_difference.svg", obj2_name=_("image to subtract"), ) self.register_n_to_1(sipi.product, _("Product"), icon_name="product.svg") self.register_2_to_1( sipi.division, _("Division"), icon_name="division.svg", obj2_name=_("divider"), ) self.register_1_to_1(sipi.inverse, _("Inverse"), icon_name="inverse.svg") self.register_2_to_1( sipi.arithmetic, _("Arithmetic"), paramclass=sipb.ArithmeticParam, icon_name="arithmetic.svg", obj2_name=_("signal to operate with"), ) self.register_1_to_1( sipi.addition_constant, _("Add constant"), paramclass=sipb.ConstantParam, icon_name="constant_add.svg", ) self.register_1_to_1( sipi.difference_constant, _("Subtract constant"), paramclass=sipb.ConstantParam, icon_name="constant_subtract.svg", ) self.register_1_to_1( sipi.product_constant, _("Multiply by constant"), paramclass=sipb.ConstantParam, icon_name="constant_multiply.svg", ) self.register_1_to_1( sipi.division_constant, _("Divide by constant"), paramclass=sipb.ConstantParam, icon_name="constant_divide.svg", ) self.register_1_to_1(sipi.absolute, _("Absolute value"), icon_name="abs.svg") self.register_1_to_1( sipi.phase, _("Phase"), paramclass=sigima.params.PhaseParam, icon_name="phase.svg", ) self.register_2_to_1( sipi.complex_from_magnitude_phase, _("Combine with phase"), paramclass=sipb.AngleUnitParam, icon_name="complex_from_magnitude_phase.svg", comment=_("Create a complex-valued image from magnitude and phase"), obj2_name=_("phase"), ) self.register_1_to_1(sipi.real, _("Real part"), icon_name="re.svg") self.register_1_to_1(sipi.imag, _("Imaginary part"), icon_name="im.svg") self.register_2_to_1( sipi.complex_from_real_imag, _("Combine with imaginary part"), icon_name="complex_from_real_imag.svg", comment=_("Create a complex-valued image from real and imaginary parts"), obj2_name=_("imaginary part"), ) self.register_1_to_1( sipi.astype, _("Convert data type"), paramclass=sigima.params.DataTypeIParam, icon_name="convert_dtype.svg", ) self.register_1_to_1(sipi.exp, _("Exponential"), icon_name="exp.svg") self.register_1_to_1( sipi.log10, _("Logarithm (base 10)"), icon_name="log10.svg" ) self.register_1_to_1( sipi.log10_z_plus_n, "Log10(z+n)", paramclass=sigima.params.Log10ZPlusNParam, ) self.register_2_to_1( sipi.flatfield, _("Flat-field correction"), sipi.FlatFieldParam, obj2_name=_("flat field image"), ) # Flip or rotation self.register_1_to_1( self._wrap_geometric_transform(sipi.fliph, "fliph"), _("Flip horizontally"), icon_name="flip_horizontally.svg", ) self.register_1_to_1( self._wrap_geometric_transform(sipi.transpose, "transpose"), _("Flip diagonally"), icon_name="swap_x_y.svg", ) self.register_1_to_1( self._wrap_geometric_transform(sipi.flipv, "flipv"), _("Flip vertically"), icon_name="flip_vertically.svg", ) self.register_1_to_1( self._wrap_geometric_transform(sipi.rotate270, "rotate270"), _("Rotate %s right") % "90°", icon_name="rotate_right.svg", ) self.register_1_to_1( self._wrap_geometric_transform(sipi.rotate90, "rotate90"), _("Rotate %s left") % "90°", icon_name="rotate_left.svg", ) self.register_1_to_1(sipi.rotate, _("Rotate by"), sipi.RotateParam) # Intensity profiles self.register_1_to_1( sipi.line_profile, _("Line profile"), sipi.LineProfileParam, icon_name="profile.svg", edit=False, ) self.register_1_to_1( sipi.segment_profile, _("Segment profile"), sipi.SegmentProfileParam, icon_name="profile_segment.svg", edit=False, ) self.register_1_to_1( sipi.average_profile, _("Average profile"), sipi.AverageProfileParam, icon_name="profile_average.svg", edit=False, ) self.register_1_to_1( sipi.radial_profile, _("Radial profile"), sipi.RadialProfileParam, icon_name="profile_radial.svg", ) self.register_2_to_1( sipi.convolution, _("Convolution"), icon_name="convolution.svg", obj2_name=_("kernel to convolve with"), ) self.register_2_to_1( sipi.deconvolution, _("Deconvolution"), icon_name="deconvolution.svg", obj2_name=_("kernel to deconvolve with"), ) def register_processing(self) -> None: """Register processing functions.""" # Axis transformation self.register_1_to_1( sipi.set_uniform_coords, _("Set uniform coordinates"), sipi.UniformCoordsParam, ) self.register_1_to_1( sipi.calibration, _("Polynomial calibration"), sipi.XYZCalibrateParam, comment=_( "Apply polynomial calibration to the X, Y or Z axis:\n" " • x' = a0 + a1*x + a2*x^2 + ...\n" " • y' = a0 + a1*y + a2*y^2 + ...\n" " • z' = a0 + a1*z + a2*z^2 + ..." ), ) self.register_1_to_1( sipi.transpose, _("Swap X/Y axes"), icon_name="swap_x_y.svg", ) # Level adjustment self.register_1_to_1( sipi.normalize, _("Normalize"), paramclass=sipb.NormalizeParam, icon_name="normalize.svg", ) self.register_1_to_1(sipi.clip, _("Clipping"), sipb.ClipParam, "clip.svg") self.register_1_to_1( sipi.offset_correction, _("Offset correction"), ROI2DParam, comment=_("Evaluate and subtract the offset value from the data"), icon_name="offset_correction.svg", ) # Noise addition self.register_1_to_1( sipi.add_gaussian_noise, _("Add Gaussian noise"), NormalDistributionParam ) self.register_1_to_1( sipi.add_poisson_noise, _("Add Poisson noise"), PoissonDistributionParam ) self.register_1_to_1( sipi.add_uniform_noise, _("Add uniform noise"), UniformDistributionParam ) # Noise reduction self.register_1_to_1( sipi.gaussian_filter, _("Gaussian filter"), sipb.GaussianParam, ) self.register_1_to_1( sipi.moving_average, _("Moving average"), sipb.MovingAverageParam, ) self.register_1_to_1( sipi.moving_median, _("Moving median"), sipb.MovingMedianParam, ) self.register_1_to_1(sipi.wiener, _("Wiener filter")) self.register_1_to_1( sipi.erase, _("Erase area") + "...", ROI2DParam, comment=_("Erase area in the image as defined by a region of interest"), icon_name="erase.svg", ) # Fourier analysis self.register_1_to_1( sipi.zero_padding, _("Zero padding"), sipi.ZeroPadding2DParam, comment=_( "Zero padding is used to increase the frequency resolution of the FFT" ), ) self.register_1_to_1( sipi.fft, _("FFT"), sipb.FFTParam, comment=_( "Fast Fourier Transform (FFT) is an estimation of the " "Discrete Fourier Transform (DFT). " "Results are complex numbers, but only the real part is plotted." ), edit=False, ) self.register_1_to_1( sipi.ifft, _("Inverse FFT"), sipb.FFTParam, comment=_( "Inverse Fast Fourier Transform (IFFT) is an estimation of the " "Inverse Discrete Fourier Transform (IDFT). " "Results are complex numbers, but only the real part is plotted." ), edit=False, ) self.register_1_to_1( sipi.magnitude_spectrum, _("Magnitude spectrum"), paramclass=sigima.params.SpectrumParam, comment=_( "Magnitude spectrum is the absolute value of the FFT result. " "It is a measure of the amplitude of the frequency components." ), ) self.register_1_to_1( sipi.phase_spectrum, _("Phase spectrum"), comment=_( "Phase spectrum is the angle of the FFT result. " "It is a measure of the phase of the frequency components." ), ) self.register_1_to_1( sipi.psd, _("Power spectral density"), paramclass=sigima.params.SpectrumParam, comment=_( "Power spectral density (PSD) is the square of the magnitude spectrum. " "It is a measure of the power of the frequency components." ), ) # Frequency filters self.register_1_to_1( sipi.butterworth, _("Butterworth"), sipi.ButterworthParam, ) self.register_1_to_1( sipi.gaussian_freq_filter, _("Gaussian bandpass"), sipi.GaussianFreqFilterParam, ) # Thresholding self.register_1_to_1( sipi.threshold, _("Parametric thresholding"), sipi.ThresholdParam, comment=_( "Parametric thresholding allows to select a thresholding method " "and a threshold value." ), ) self.register_1_to_1(sipi.threshold_isodata, _("ISODATA thresholding")) self.register_1_to_1(sipi.threshold_li, _("Li thresholding")) self.register_1_to_1(sipi.threshold_mean, _("Mean thresholding")) self.register_1_to_1(sipi.threshold_minimum, _("Minimum thresholding")) self.register_1_to_1(sipi.threshold_otsu, _("Otsu thresholding")) self.register_1_to_1(sipi.threshold_triangle, _("Triangle thresholding")) self.register_1_to_1(sipi.threshold_yen, _("Yen thresholding")) # Exposure self.register_1_to_1( sipi.adjust_gamma, _("Gamma correction"), sipi.AdjustGammaParam, ) self.register_1_to_1( sipi.adjust_log, _("Logarithmic correction"), sipi.AdjustLogParam, ) self.register_1_to_1( sipi.adjust_sigmoid, _("Sigmoid correction"), sipi.AdjustSigmoidParam, ) self.register_1_to_1( sipi.equalize_hist, _("Histogram equalization"), sipi.EqualizeHistParam, ) self.register_1_to_1( sipi.equalize_adapthist, _("Adaptive histogram equalization"), sipi.EqualizeAdaptHistParam, ) self.register_1_to_1( sipi.rescale_intensity, _("Intensity rescaling"), sipi.RescaleIntensityParam, ) # Restoration self.register_1_to_1( sipi.denoise_tv, _("Total variation denoising"), sipi.DenoiseTVParam, ) self.register_1_to_1( sipi.denoise_bilateral, _("Bilateral filter denoising"), sipi.DenoiseBilateralParam, ) self.register_1_to_1( sipi.denoise_wavelet, _("Wavelet denoising"), sipi.DenoiseWaveletParam, ) self.register_1_to_1( sipi.denoise_tophat, _("White Top-Hat denoising"), sipi.MorphologyParam, ) # Morphology self.register_1_to_1( sipi.white_tophat, _("White Top-Hat (disk)"), sipi.MorphologyParam, ) self.register_1_to_1( sipi.black_tophat, _("Black Top-Hat (disk)"), sipi.MorphologyParam, ) self.register_1_to_1( sipi.erosion, _("Erosion (disk)"), sipi.MorphologyParam, ) self.register_1_to_1( sipi.dilation, _("Dilation (disk)"), sipi.MorphologyParam, ) self.register_1_to_1( sipi.opening, _("Opening (disk)"), sipi.MorphologyParam, ) self.register_1_to_1( sipi.closing, _("Closing (disk)"), sipi.MorphologyParam, ) # Edge detection self.register_1_to_1(sipi.canny, _("Canny filter"), sipi.CannyParam) self.register_1_to_1(sipi.farid, _("Farid filter")) self.register_1_to_1(sipi.farid_h, _("Farid filter (horizontal)")) self.register_1_to_1(sipi.farid_v, _("Farid filter (vertical)")) self.register_1_to_1(sipi.laplace, _("Laplace filter")) self.register_1_to_1(sipi.prewitt, _("Prewitt filter")) self.register_1_to_1(sipi.prewitt_h, _("Prewitt filter (horizontal)")) self.register_1_to_1(sipi.prewitt_v, _("Prewitt filter (vertical)")) self.register_1_to_1(sipi.roberts, _("Roberts filter")) self.register_1_to_1(sipi.scharr, _("Scharr filter")) self.register_1_to_1(sipi.scharr_h, _("Scharr filter (horizontal)")) self.register_1_to_1(sipi.scharr_v, _("Scharr filter (vertical)")) self.register_1_to_1(sipi.sobel, _("Sobel filter")) self.register_1_to_1(sipi.sobel_h, _("Sobel filter (horizontal)")) self.register_1_to_1(sipi.sobel_v, _("Sobel filter (vertical)")) # Other processing self.register_1_to_n(sipi.extract_roi, "ROI", icon_name="roi.svg") self.register_1_to_1( sipi.resize, _("Resize"), sipi.ResizeParam, icon_name="resize.svg", ) self.register_1_to_1( sipi.binning, _("Pixel binning"), sipi.BinningParam, icon_name="binning.svg", ) self.register_1_to_1( sipi.resampling, _("Resampling"), sipi.Resampling2DParam, icon_name="resampling2d.svg", ) def register_analysis(self) -> None: """Register analysis functions.""" self.register_1_to_0(sipi.stats, _("Statistics"), icon_name="stats.svg") self.register_1_to_1( sipi.horizontal_projection, _("Horizontal projection"), # icon_name="horizontal_projection.svg", comment=_( "Compute the sum of pixel intensities along each column " "(projection on the x-axis)" ), ) self.register_1_to_1( sipi.vertical_projection, # icon_name="vertical_projection.svg", _("Vertical projection"), comment=_( "Compute the sum of pixel intensities along each row " "(projection on the y-axis)" ), ) self.register_1_to_1( sipi.histogram, _("Histogram"), paramclass=sipb.HistogramParam, icon_name="histogram.svg", ) self.register_1_to_0( sipi.centroid, _("Centroid"), comment=_("Compute image centroid"), ) self.register_1_to_0( sipi.enclosing_circle, _("Minimum enclosing circle center"), comment=_("Compute smallest enclosing circle center"), ) self.register_1_to_0( sipi.contour_shape, _("Contour detection"), sipi.ContourShapeParam, comment=_("Compute contour shape fit"), ) self.register_1_to_0( sipi.peak_detection, _("Peak detection"), sipi.Peak2DDetectionParam, comment=_("Detect peaks in the image"), ) self.register_1_to_0( sipi.hough_circle_peaks, _("Circle Hough transform"), sipi.HoughCircleParam, comment=_("Detect circular shapes using circle Hough transform"), ) # Blob detection self.register_1_to_0( sipi.blob_dog, _("Blob detection (DOG)"), sipi.BlobDOGParam, comment=_("Detect blobs using Difference of Gaussian (DOG) method"), ) self.register_1_to_0( sipi.blob_doh, _("Blob detection (DOH)"), sipi.BlobDOHParam, comment=_("Detect blobs using Difference of Gaussian (DOH) method"), ) self.register_1_to_0( sipi.blob_log, _("Blob detection (LOG)"), sipi.BlobLOGParam, comment=_("Detect blobs using Laplacian of Gaussian (LOG) method"), ) self.register_1_to_0( sipi.blob_opencv, _("Blob detection (OpenCV)"), sipi.BlobOpenCVParam, comment=_("Detect blobs using OpenCV SimpleBlobDetector"), ) def create_roi_grid(self) -> None: """Create a grid of regions of interest""" obj0 = self.panel.objview.get_sel_objects(include_groups=True)[0] if any(obj.roi is not None for obj in self.panel.objview.get_sel_objects()): if ( QW.QMessageBox.question( self.mainwindow, _("Warning"), _( "Creating a ROI grid will overwrite any existing ROI.

    " "Do you want to continue?" ), QW.QMessageBox.Yes | QW.QMessageBox.No, QW.QMessageBox.No, ) == QW.QMessageBox.No ): return editor = ImageGridROIEditor(parent=self.parent(), obj=obj0) if exec_dialog(editor): for obj in self.panel.objview.get_sel_objects(): obj.roi = editor.get_roi() self.SIG_ADD_SHAPE.emit(get_uuid(obj0)) self.panel.selection_changed(update_items=True) self.panel.refresh_plot( "selected", update_items=True, only_visible=False, only_existing=True, ) # Now, we ask the user if we shall extract the freshly defined ROI: if ( QW.QMessageBox.question( self.mainwindow, _("Extract ROI"), _("Do you want to extract images from the defined ROI?"), QW.QMessageBox.Yes | QW.QMessageBox.No, QW.QMessageBox.No, ) == QW.QMessageBox.Yes ): self.compute_roi_extraction(editor.get_roi()) @qt_try_except() def compute_resize(self, param: sigima.params.ResizeParam | None = None) -> None: """Resize image with :py:func:`sigima.proc.image.resize`""" obj0 = self.panel.objview.get_sel_objects(include_groups=True)[0] for obj in self.panel.objview.get_sel_objects(): if obj.data.shape != obj0.data.shape: QW.QMessageBox.warning( self.mainwindow, APP_NAME, _("Warning:") + "\n" + _("Selected images do not have the same size"), ) edit, param = self.init_param(param, sipi.ResizeParam, _("Resize")) if edit: original_size = obj0.data.shape dlg = ResizeDialog( self.plotwidget, new_size=original_size, old_size=original_size, text=_("Destination size:"), ) if not exec_dialog(dlg): return param.zoom = dlg.get_zoom() self.run_feature("resize", param, title=_("Resize"), edit=edit) @qt_try_except() def compute_binning(self, param: sigima.params.BinningParam | None = None) -> None: """Binning image with :py:func:`sigima.proc.image.binning`""" edit = param is None obj0 = self.panel.objview.get_sel_objects(include_groups=True)[0] input_dtype_str = str(obj0.data.dtype) title = _("Binning") edit, param = self.init_param(param, sipi.BinningParam, title) if edit: param.dtype_str = input_dtype_str if param.dtype_str is None: param.dtype_str = input_dtype_str self.run_feature("binning", param, title=title, edit=edit) @qt_try_except() def compute_line_profile( self, param: sigima.params.LineProfileParam | None = None ) -> None: """Compute profile along a vertical or horizontal line with :py:func:`sigima.proc.image.line_profile`""" title = _("Profile") add_initial_shape = self.has_param_defaults(sigima.params.LineProfileParam) edit, param = self.init_param(param, sipi.LineProfileParam, title) if edit: options = self.panel.plothandler.get_plot_options() dlg = ProfileExtractionDialog( "line", param, options, self.mainwindow, add_initial_shape ) obj = self.panel.objview.get_sel_objects(include_groups=True)[0] dlg.set_obj(obj) if not exec_dialog(dlg): return self.run_feature("line_profile", param, title=title, edit=False) @qt_try_except() def compute_segment_profile( self, param: sigima.params.SegmentProfileParam | None = None ): """Compute profile along a segment with :py:func:`sigima.proc.image.segment_profile`""" title = _("Profile") add_initial_shape = self.has_param_defaults(sigima.params.SegmentProfileParam) edit, param = self.init_param(param, sipi.SegmentProfileParam, title) if edit: options = self.panel.plothandler.get_plot_options() dlg = ProfileExtractionDialog( "segment", param, options, self.mainwindow, add_initial_shape ) obj = self.panel.objview.get_sel_objects(include_groups=True)[0] dlg.set_obj(obj) if not exec_dialog(dlg): return self.run_feature("segment_profile", param, title=title, edit=False) @qt_try_except() def compute_average_profile( self, param: sigima.params.AverageProfileParam | None = None ) -> None: """Compute average profile with :py:func:`sigima.proc.image.average_profile`""" title = _("Average profile") add_initial_shape = self.has_param_defaults(sigima.params.AverageProfileParam) edit, param = self.init_param(param, sipi.AverageProfileParam, title) if edit: options = self.panel.plothandler.get_plot_options() dlg = ProfileExtractionDialog( "rectangle", param, options, self.mainwindow, add_initial_shape, ) obj = self.panel.objview.get_sel_objects(include_groups=True)[0] dlg.set_obj(obj) if not exec_dialog(dlg): return self.run_feature("average_profile", param, title=title, edit=False) @qt_try_except() def compute_radial_profile( self, param: sigima.params.RadialProfileParam | None = None ) -> None: """Compute radial profile with :py:func:`sigima.proc.image.radial_profile`""" title = _("Radial profile") edit, param = self.init_param(param, sipi.RadialProfileParam, title) if edit: obj = self.panel.objview.get_sel_objects(include_groups=True)[0] param.update_from_obj(obj) self.run_feature("radial_profile", param, title=title, edit=edit) @qt_try_except() def distribute_on_grid(self, param: sigima.params.GridParam | None = None) -> None: """Distribute images on a grid""" title = _("Distribute on grid") edit, param = self.init_param(param, sipi.GridParam, title) if edit and not param.edit(parent=self.mainwindow): return objs = self.panel.objview.get_sel_objects(include_groups=True) g_row, g_col, x0, y0, x0_0, y0_0 = 0, 0, 0.0, 0.0, 0.0, 0.0 dx0, dy0 = 0.0, 0.0 with create_progress_bar(self.panel, title, max_=len(objs)) as progress: for i_row, obj in enumerate(objs): progress.setValue(i_row + 1) QW.QApplication.processEvents() if progress.wasCanceled(): break if i_row == 0: if obj.is_uniform_coords: x0_0, y0_0 = x0, y0 = obj.x0, obj.y0 else: x0_0, y0_0 = x0, y0 = obj.xcoords[0], obj.ycoords[0] else: if obj.is_uniform_coords: dx0, dy0 = x0 - obj.x0, y0 - obj.y0 obj.x0 += dx0 obj.y0 += dy0 else: dx0, dy0 = x0 - obj.xcoords[0], y0 - obj.ycoords[0] obj.xcoords += dx0 obj.ycoords += dy0 apply_geometry_transform(obj, "translate", dx=dx0, dy=dy0) sipi.transformer.transform_roi(obj, "translate", dx=dx0, dy=dy0) # Get image width and height if obj.is_uniform_coords: img_width, img_height = obj.width, obj.height else: img_width = obj.xcoords[-1] - obj.xcoords[0] img_height = obj.ycoords[-1] - obj.ycoords[0] if param.direction == "row": # Distributing images over rows sign = np.sign(param.rows) g_row = (g_row + sign) % param.rows y0 += (img_height + param.rowspac) * sign if g_row == 0: g_col += 1 x0 += img_width + param.colspac y0 = y0_0 else: # Distributing images over columns sign = np.sign(param.cols) g_col = (g_col + sign) % param.cols x0 += (img_width + param.colspac) * sign if g_col == 0: g_row += 1 x0 = x0_0 y0 += img_height + param.rowspac self.panel.refresh_plot("selected", True, False) @qt_try_except() def reset_positions(self) -> None: """Reset image positions""" x0_0, y0_0 = 0.0, 0.0 dx0, dy0 = 0.0, 0.0 objs = self.panel.objview.get_sel_objects(include_groups=True) for i_row, obj in enumerate(objs): if i_row == 0: if obj.is_uniform_coords: x0_0, y0_0 = obj.x0, obj.y0 else: x0_0, y0_0 = obj.xcoords[0], obj.ycoords[0] else: if obj.is_uniform_coords: dx0, dy0 = x0_0 - obj.x0, y0_0 - obj.y0 obj.x0 += dx0 obj.y0 += dy0 else: dx0, dy0 = x0_0 - obj.xcoords[0], y0_0 - obj.ycoords[0] obj.xcoords += dx0 obj.ycoords += dy0 apply_geometry_transform(obj, "translate", dx=dx0, dy=dy0) sipi.transformer.transform_roi(obj, "translate", dx=dx0, dy=dy0) self.panel.refresh_plot("selected", True, False) # ------Image Processing @qt_try_except() def compute_offset_correction(self, param: ROI2DParam | None = None) -> None: """Compute offset correction with :py:func:`sigima.proc.image.offset_correction`""" obj = self.panel.objview.get_sel_objects(include_groups=True)[0] if param is None: dlg = imagebackground.ImageBackgroundDialog(obj, parent=self.mainwindow) if exec_dialog(dlg): x0, y0, x1, y1 = dlg.get_rect_coords() param = ROI2DParam.create( geometry="rectangle", x0=int(x0), y0=int(y0), dx=int(x1 - x0), dy=int(y1 - y0), ) else: return self.run_feature("offset_correction", param) @qt_try_except() def compute_erase(self, roi: ImageROI | None = None) -> None: """Erase area in the image as defined by a region of interest Args: roi: Region of interest to erase """ if roi is None or roi.is_empty(): roi = self.edit_roi_graphically(mode="define") if roi is None or roi.is_empty(): return obj = self.panel.objview.get_sel_objects(include_groups=True)[0] params = roi.to_params(obj) # TODO: This `compute_1_to_1` call is not ideal, as it passes a list of # parameter sets (`params` is a list of `DataSet` objects) instead of a single # parameter set as expected by the method. Currently, the method implementation # is compatible with this call, and it simply passes the second argument through # to the `extract_rois` function. However, this should be rectified in the # future to ensure that the method signature and its usage are consistent. # The question is: should we pass a list of `DataSet` objects or directly a # `ImageROI` object? # (same as `_extract_multiple_roi_in_single_object`) self.compute_1_to_1(sipi.erase, params, title=_("Erase area"), edit=False) @qt_try_except() def compute_all_threshold(self) -> None: """Compute all threshold algorithms using the following functions: - :py:func:`sigima.proc.image.threshold_isodata` - :py:func:`sigima.proc.image.threshold_li` - :py:func:`sigima.proc.image.threshold_mean` - :py:func:`sigima.proc.image.threshold_minimum` - :py:func:`sigima.proc.image.threshold_otsu` - :py:func:`sigima.proc.image.threshold_triangle` - :py:func:`sigima.proc.image.threshold_yen` """ self.compute_multiple_1_to_1( [ sipi.threshold_isodata, sipi.threshold_li, sipi.threshold_mean, sipi.threshold_minimum, sipi.threshold_otsu, sipi.threshold_triangle, sipi.threshold_yen, ], None, "Threshold", edit=False, ) @qt_try_except() def compute_all_denoise(self, params: list | None = None) -> None: """Compute all denoising filters using the following functions: - :py:func:`sigima.proc.image.denoise_tv` - :py:func:`sigima.proc.image.denoise_bilateral` - :py:func:`sigima.proc.image.denoise_wavelet` - :py:func:`sigima.proc.image.denoise_tophat` """ if params is not None: assert len(params) == 4, "Wrong number of parameters (4 expected)" funcs = [ sipi.denoise_tv, sipi.denoise_bilateral, sipi.denoise_wavelet, sipi.denoise_tophat, ] edit = params is None if edit: params = [] for paramclass, title in ( (sipi.DenoiseTVParam, _("Total variation denoising")), (sipi.DenoiseBilateralParam, _("Bilateral filter denoising")), (sipi.DenoiseWaveletParam, _("Wavelet denoising")), (sipi.MorphologyParam, _("Denoise / Top-Hat")), ): param = paramclass(title) self.update_param_defaults(param) params.append(param) self.compute_multiple_1_to_1(funcs, params, "Denoise", edit=edit) @qt_try_except() def compute_all_morphology( self, param: sigima.params.MorphologyParam | None = None ) -> None: """Compute all morphology filters using the following functions: - :py:func:`sigima.proc.image.white_tophat` - :py:func:`sigima.proc.image.black_tophat` - :py:func:`sigima.proc.image.erosion` - :py:func:`sigima.proc.image.dilation` - :py:func:`sigima.proc.image.opening` - :py:func:`sigima.proc.image.closing` """ if param is None: param = sipi.MorphologyParam() if not param.edit(parent=self.mainwindow): return funcs = [ sipi.white_tophat, sipi.black_tophat, sipi.erosion, sipi.dilation, sipi.opening, sipi.closing, ] self.compute_multiple_1_to_1(funcs, [param] * len(funcs), "Morph", edit=False) @qt_try_except() def compute_all_edges(self) -> None: """Compute all edge detection algorithms. This function calls the following edge detection algorithms: - :py:func:`sigima.proc.image.canny` - :py:func:`sigima.proc.image.farid` - :py:func:`sigima.proc.image.farid_h` - :py:func:`sigima.proc.image.farid_v` - :py:func:`sigima.proc.image.laplace` - :py:func:`sigima.proc.image.prewitt` - :py:func:`sigima.proc.image.prewitt_h` - :py:func:`sigima.proc.image.prewitt_v` - :py:func:`sigima.proc.image.roberts` - :py:func:`sigima.proc.image.scharr` - :py:func:`sigima.proc.image.scharr_h` - :py:func:`sigima.proc.image.scharr_v` - :py:func:`sigima.proc.image.sobel` - :py:func:`sigima.proc.image.sobel_h` - :py:func:`sigima.proc.image.sobel_v` """ funcs = [ sipi.canny, sipi.farid, sipi.farid_h, sipi.farid_v, sipi.laplace, sipi.prewitt, sipi.prewitt_h, sipi.prewitt_v, sipi.roberts, sipi.scharr, sipi.scharr_h, sipi.scharr_v, sipi.sobel, sipi.sobel_h, sipi.sobel_v, ] self.compute_multiple_1_to_1(funcs, None, "Edges") @qt_try_except() def _extract_multiple_roi_in_single_object(self, params: list[ROI2DParam]) -> None: """Extract multiple Regions Of Interest (ROIs) from data in a single object""" # TODO: This `compute_1_to_1` call is not ideal, as it passes a list of # parameter sets (`params` is a list of `DataSet` objects) instead of a single # parameter set as expected by the method. Currently, the method implementation # is compatible with this call, and it simply passes the second argument through # to the `extract_rois` function. However, this should be rectified in the # future to ensure that the method signature and its usage are consistent. # The question is: should we pass a list of `DataSet` objects or directly a # `ImageROI` object? # (same as `compute_erase`) self.compute_1_to_1(sipi.extract_rois, params, title=_("Extract ROI")) # ------Image Analysis @qt_try_except() def compute_peak_detection( self, param: sigima.params.Peak2DDetectionParam | None = None ) -> dict[str, GeometryResult]: """Compute 2D peak detection with :py:func:`sigima.proc.image.peak_detection`""" edit, param = self.init_param( param, sipi.Peak2DDetectionParam, _("Peak detection") ) if edit: data = self.panel.objview.get_sel_objects(include_groups=True)[0].data param.size = max(min(data.shape) // 40, 50) # Run peak detection (ROI creation is handled automatically by base class) return self.run_feature("peak_detection", param, edit=edit) DataLab-1.0.2/datalab/gui/processor/signal.py000066400000000000000000000672021511411446000210300ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ .. Signal processor object (see parent package :mod:`datalab.gui.processor`) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import re from collections.abc import Callable import numpy as np import sigima.params import sigima.proc.base as sigima_base import sigima.proc.signal as sips from guidata.qthelpers import exec_dialog from sigima.objects import ( NormalDistributionParam, PoissonDistributionParam, ROI1DParam, SignalObj, SignalROI, UniformDistributionParam, create_signal, ) from sigima.objects.scalar import GeometryResult, TableResult from datalab.config import _ from datalab.gui.processor.base import BaseProcessor from datalab.utils.qthelpers import qt_try_except from datalab.widgets import ( fitdialog, signalbaseline, signalcursor, signaldeltax, signalpeak, ) class SignalProcessor(BaseProcessor[SignalROI, ROI1DParam]): """Object handling signal processing: operations, processing, analysis""" FIT_FUNCTIONS = ( (_("Linear fit"), sips.linear_fit), (_("Polynomial fit"), sips.polynomial_fit), (_("Gaussian fit"), sips.gaussian_fit), (_("Lorentzian fit"), sips.lorentzian_fit), (_("Voigt fit"), sips.voigt_fit), (_("Planckian fit"), sips.planckian_fit), (_("Two Half-Gaussians fit"), sips.twohalfgaussian_fit), (_("Piecewise exponential fit"), sips.piecewiseexponential_fit), (_("Exponential fit"), sips.exponential_fit), (_("Sinusoidal fit"), sips.sinusoidal_fit), (_("CDF fit"), sips.cdf_fit), (_("Sigmoid fit"), sips.sigmoid_fit), ) # pylint: disable=duplicate-code def register_operations(self) -> None: """Register operations.""" self.register_n_to_1(sips.addition, _("Sum"), icon_name="sum.svg") self.register_n_to_1(sips.average, _("Average"), icon_name="average.svg") self.register_n_to_1( sips.standard_deviation, _("Standard deviation"), icon_name="std.svg", ) self.register_2_to_1( sips.difference, _("Difference"), icon_name="difference.svg", obj2_name=_("signal to subtract"), ) self.register_2_to_1( sips.quadratic_difference, _("Quadratic Difference"), icon_name="quadratic_difference.svg", obj2_name=_("signal to subtract"), ) self.register_n_to_1(sips.product, _("Product"), icon_name="product.svg") self.register_2_to_1( sips.division, _("Division"), icon_name="division.svg", obj2_name=_("divider"), ) self.register_1_to_1(sips.inverse, _("Inverse"), icon_name="inverse.svg") self.register_2_to_1( sips.arithmetic, _("Arithmetic"), paramclass=sigima_base.ArithmeticParam, icon_name="arithmetic.svg", obj2_name=_("signal to operate with"), ) self.register_1_to_1( sips.addition_constant, _("Add constant"), paramclass=sigima_base.ConstantParam, icon_name="constant_add.svg", ) self.register_1_to_1( sips.difference_constant, _("Subtract constant"), paramclass=sigima_base.ConstantParam, icon_name="constant_subtract.svg", ) self.register_1_to_1( sips.product_constant, _("Multiply by constant"), paramclass=sigima_base.ConstantParam, icon_name="constant_multiply.svg", ) self.register_1_to_1( sips.division_constant, _("Divide by constant"), paramclass=sigima_base.ConstantParam, icon_name="constant_divide.svg", ) self.register_1_to_1(sips.absolute, _("Absolute value"), icon_name="abs.svg") self.register_1_to_1( sips.phase, _("Phase"), paramclass=sigima.params.PhaseParam, icon_name="phase.svg", ) self.register_2_to_1( sips.complex_from_magnitude_phase, _("Combine with phase"), paramclass=sigima_base.AngleUnitParam, icon_name="complex_from_magnitude_phase.svg", comment=_("Create a complex-valued signal from magnitude and phase"), obj2_name=_("phase"), ) self.register_1_to_1(sips.real, _("Real part"), icon_name="re.svg") self.register_1_to_1(sips.imag, _("Imaginary part"), icon_name="im.svg") self.register_2_to_1( sips.complex_from_real_imag, _("Combine with imaginary part"), icon_name="complex_from_real_imag.svg", comment=_("Create a complex-valued signal from real and imaginary parts"), obj2_name=_("imaginary part"), ) self.register_1_to_1( sips.astype, _("Convert data type"), paramclass=sigima.params.DataTypeSParam, icon_name="convert_dtype.svg", ) self.register_1_to_1(sips.exp, _("Exponential"), icon_name="exp.svg") self.register_1_to_1( sips.log10, _("Logarithm (base 10)"), icon_name="log10.svg" ) self.register_1_to_1(sips.sqrt, _("Square root"), icon_name="sqrt.svg") self.register_1_to_1( sips.derivative, _("Derivative"), icon_name="derivative.svg" ) self.register_1_to_1(sips.integral, _("Integral"), icon_name="integral.svg") self.register_2_to_1( sips.convolution, _("Convolution"), icon_name="convolution.svg", obj2_name=_("signal to convolve with"), ) self.register_2_to_1( sips.replace_x_by_other_y, _("Replace X by other signal's Y"), comment=_( "Replace X coordinates using Y values from another signal.\n" "Useful for calibration: plot data vs wavelength scale." ), obj2_name=_("signal providing Y values for X axis"), skip_xarray_compat=True, ) self.register_2_to_1( sips.deconvolution, _("Deconvolution"), icon_name="deconvolution.svg", obj2_name=_("signal to deconvolve with"), ) self.register_n_to_1( sips.signals_to_image, _("Assemble signals into image"), paramclass=sigima_base.SignalsToImageParam, icon_name="signals_to_image.svg", comment=_( "Assemble multiple signals into a 2D image.\n" "Signals can be stacked as rows or columns, " "with optional normalization." ), ) def register_processing(self) -> None: """Register processing functions.""" # Axis transformation self.register_1_to_1( sips.calibration, _("Linear calibration"), sips.XYCalibrateParam, comment=_( "Apply linear calibration to the X or Y axis:\n" " • x' = ax + b\n" " • y' = ay + b" ), ) self.register_1_to_1( sips.transpose, _("Swap X/Y axes"), icon_name="swap_x_y.svg" ) self.register_1_to_1( sips.reverse_x, _("Reverse X-axis"), icon_name="reverse_signal_x.svg", ) self.register_1_to_1( sips.to_polar, _("Convert to polar coordinates"), paramclass=sigima.params.AngleUnitParam, ) self.register_1_to_1( sips.to_cartesian, _("Convert to cartesian coordinates"), paramclass=sigima.params.AngleUnitParam, ) # Level adjustment self.register_1_to_1( sips.normalize, _("Normalize"), sigima_base.NormalizeParam, "normalize.svg", ) self.register_1_to_1( sips.clip, _("Clipping"), sigima_base.ClipParam, "clip.svg" ) self.register_1_to_1( sips.offset_correction, _("Offset correction"), icon_name="offset_correction.svg", comment=_("Evaluate and subtract the offset value from the data"), ) # Noise addition self.register_1_to_1( sips.add_gaussian_noise, _("Add Gaussian noise"), NormalDistributionParam ) self.register_1_to_1( sips.add_poisson_noise, _("Add Poisson noise"), PoissonDistributionParam ) self.register_1_to_1( sips.add_uniform_noise, _("Add uniform noise"), UniformDistributionParam ) # Noise reduction self.register_1_to_1( sips.gaussian_filter, _("Gaussian filter"), sigima_base.GaussianParam, ) self.register_1_to_1( sips.moving_average, _("Moving average"), sigima_base.MovingAverageParam, ) self.register_1_to_1( sips.moving_median, _("Moving median"), sigima_base.MovingMedianParam, ) self.register_1_to_1(sips.wiener, _("Wiener filter")) # Fourier analysis self.register_1_to_1( sips.zero_padding, _("Zero padding"), sips.ZeroPadding1DParam, comment=_( "Zero padding is used to increase the frequency resolution of the FFT" ), ) self.register_1_to_1( sips.fft, _("FFT"), sigima_base.FFTParam, comment=_( "Fast Fourier Transform (FFT) is an estimation of the " "Discrete Fourier Transform (DFT). " "Results are complex numbers, but only the real part is plotted." ), edit=False, ) self.register_1_to_1( sips.ifft, _("Inverse FFT"), comment=_( "Inverse Fast Fourier Transform (IFFT) is an estimation of the " "Inverse Discrete Fourier Transform (IDFT). " "Results are complex numbers, but only the real part is plotted." ), edit=False, ) self.register_1_to_1( sips.magnitude_spectrum, _("Magnitude spectrum"), paramclass=sigima.params.SpectrumParam, comment=_( "Magnitude spectrum is the absolute value of the FFT result. " "It is a measure of the amplitude of the frequency components." ), ) self.register_1_to_1( sips.phase_spectrum, _("Phase spectrum"), comment=_( "Phase spectrum is the angle of the FFT result. " "It is a measure of the phase of the frequency components." ), ) self.register_1_to_1( sips.psd, _("Power spectral density"), paramclass=sigima.params.SpectrumParam, comment=_( "Power spectral density (PSD) is the square of the magnitude spectrum. " "It is a measure of the power of the frequency components." ), ) self.register_1_to_1( sips.power, _("Power"), paramclass=sigima.params.PowerParam, icon_name="power.svg", ) self.register_1_to_1( sips.peak_detection, _("Peak detection"), paramclass=sigima.params.PeakDetectionParam, icon_name="peak_detect.svg", ) # Frequency filters self.register_1_to_1( sips.lowpass, _("Low-pass filter"), sigima.params.LowPassFilterParam, "lowpass.svg", ) self.register_1_to_1( sips.highpass, _("High-pass filter"), sigima.params.HighPassFilterParam, "highpass.svg", ) self.register_1_to_1( sips.bandpass, _("Band-pass filter"), sigima.params.BandPassFilterParam, "bandpass.svg", ) self.register_1_to_1( sips.bandstop, _("Band-stop filter"), sigima.params.BandStopFilterParam, "bandstop.svg", ) # Curve fitting for fit_name, fit_func in self.FIT_FUNCTIONS: icon_name = f"{fit_func.__name__}.svg" self.register_1_to_1(fit_func, fit_name, icon_name=icon_name) # Evaluate fit on another signal's x-axis self.register_2_to_1( sips.evaluate_fit, _("Evaluate fit"), obj2_name=_("signal for X values"), comment=_("Evaluate a fitting curve on the x-axis of another signal"), ) # Other processing self.register_1_to_1( sips.apply_window, _("Windowing"), paramclass=sigima.params.WindowingParam, icon_name="windowing.svg", comment=_("Apply a window (apodization) function: Hann, Hamming..."), ) self.register_1_to_1( sips.detrending, _("Detrending"), sips.DetrendingParam, icon_name="detrending.svg", ) self.register_2_to_1( sips.interpolate, _("Interpolation"), paramclass=sigima.params.InterpolationParam, obj2_name=_("signal for X values"), icon_name="interpolation.svg", skip_xarray_compat=True, ) self.register_1_to_1( sips.resampling, _("Resampling"), sips.Resampling1DParam, icon_name="resampling1d.svg", ) # Stability analysis self.register_1_to_1( sips.allan_variance, _("Allan variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.allan_deviation, _("Allan deviation"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.overlapping_allan_variance, _("Overlapping Allan variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.modified_allan_variance, _("Modified Allan variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.hadamard_variance, _("Hadamard variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.modified_allan_variance, _("Modified Allan variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.hadamard_variance, _("Hadamard variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.modified_allan_variance, _("Modified Allan variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.hadamard_variance, _("Hadamard variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.total_variance, _("Total variance"), paramclass=sigima.params.AllanVarianceParam, ) self.register_1_to_1( sips.time_deviation, _("Time deviation"), paramclass=sigima.params.AllanVarianceParam, ) # Other processing self.register_2_to_1( sips.xy_mode, _("X-Y mode"), obj2_name=_("Y-signal of the X-Y mode"), comment=_("Plot one signal as a fonction of the other one"), ) self.register_1_to_n(sips.extract_roi, "ROI", icon_name="roi.svg") def register_analysis(self) -> None: """Register analysis functions.""" self.register_1_to_0(sips.stats, _("Statistics"), icon_name="stats.svg") self.register_1_to_1( sips.histogram, _("Histogram"), paramclass=sigima.params.HistogramParam, icon_name="histogram.svg", ) self.register_1_to_0( sips.fwhm, _("Full width at half-maximum"), paramclass=sips.FWHMParam, icon_name="fwhm.svg", ) self.register_1_to_0( sips.fw1e2, _("Full width at") + " 1/e²", icon_name="fw1e2.svg", ) self.register_1_to_0( sips.full_width_at_y, _("Full width at y=..."), paramclass=sips.OrdinateParam, comment=_("Compute the full width at a given y value"), ) self.register_1_to_0( sips.x_at_y, _("First abscissa at y=..."), paramclass=sips.OrdinateParam, comment=_( "Compute the first abscissa at a given y value (linear interpolation)" ), ) self.register_1_to_0( sips.y_at_x, _("Ordinate at x=..."), paramclass=sips.AbscissaParam, comment=_("Compute the ordinate at a given x value (linear interpolation)"), ) self.register_1_to_0( sips.extract_pulse_features, _("Extract pulse features"), paramclass=sips.PulseFeaturesParam, comment=_("Extract pulse features (amplitude, rise time, fall time...)"), ) self.register_1_to_0( sips.x_at_minmax, _("Abscissa of the minimum and maximum"), comment=_( "Compute the smallest argument of the minima and the smallest " "argument of the maxima" ), ) self.register_1_to_0( sips.sampling_rate_period, _("Sampling rate and period"), comment=_( "Compute sampling rate and period for a constant sampling signal" ), ) self.register_1_to_0( sips.dynamic_parameters, _("Dynamic parameters"), paramclass=sips.DynamicParam, comment=_("Compute dynamic parameters: ENOB, SNR, SINAD, THD, ..."), ) self.register_1_to_0( sips.bandwidth_3db, _("Bandwidth at -3dB"), comment=_( "Compute bandwidth at -3dB assuming a low-pass filter " "already expressed in dB" ), ) self.register_1_to_0( sips.contrast, _("Contrast"), comment=_( "Compute contrast of a signal, i.e. (max-min)/(max+min), " "e.g. for an image profile" ), ) @qt_try_except() def compute_offset_correction(self, param: ROI1DParam | None = None) -> None: """Compute offset correction with :py:func:`sigima.proc.signal.offset_correction`""" obj = self.panel.objview.get_sel_objects(include_groups=True)[0] if param is None: dlg = signalbaseline.SignalBaselineDialog(obj, parent=self.mainwindow) if exec_dialog(dlg): param = ROI1DParam() param.xmin, param.xmax = dlg.get_x_range() else: return self.run_feature("offset_correction", param) @qt_try_except() def compute_all_stability( self, param: sigima.params.AllanVarianceParam | None = None ) -> None: """Compute all stability analysis features using the following functions: - :py:func:`sigima.proc.signal.allan_variance` - :py:func:`sigima.proc.signal.allan_deviation` - :py:func:`sigima.proc.signal.overlapping_allan_variance` - :py:func:`sigima.proc.signal.modified_allan_variance` - :py:func:`sigima.proc.signal.hadamard_variance` - :py:func:`sigima.proc.signal.total_variance` - :py:func:`sigima.proc.signal.time_deviation` """ if param is None: param = sips.AllanVarianceParam() if not param.edit(parent=self.mainwindow): return funcs = [ sips.allan_variance, sips.allan_deviation, sips.overlapping_allan_variance, sips.modified_allan_variance, sips.hadamard_variance, sips.total_variance, sips.time_deviation, ] self.compute_multiple_1_to_1( funcs, [param] * len(funcs), "Stability", edit=False ) @qt_try_except() def compute_peak_detection( self, param: sigima.params.PeakDetectionParam | None = None ) -> None: """Detect peaks from data with :py:func:`sigima.proc.signal.peak_detection`""" obj = self.panel.objview.get_sel_objects(include_groups=True)[0] edit, param = self.init_param( param, sips.PeakDetectionParam, _("Peak detection") ) if edit: dlg = signalpeak.SignalPeakDetectionDialog(obj, parent=self.mainwindow) if exec_dialog(dlg): param.threshold = int(dlg.get_threshold() * 100) param.min_dist = dlg.get_min_dist() else: return self.run_feature("peak_detection", param) @qt_try_except() def compute_polyfit( self, param: sigima.params.PolynomialFitParam | None = None ) -> None: """Compute polynomial fitting curve""" txt = _("Polynomial fit") edit, param = self.init_param(param, sips.PolynomialFitParam, txt) if not edit or param.edit(self.mainwindow): dlgfunc = fitdialog.polynomial_fit def polynomialfit(x, y, parent=None): """Polynomial fit dialog function""" return dlgfunc(x, y, param.degree, parent=parent) self.compute_fit(txt, polynomialfit) def __row_compute_fit( self, obj: SignalObj, name: str, fitdlgfunc: Callable ) -> None: """Curve fitting computing sub-method""" output = fitdlgfunc(obj.x, obj.y, parent=self.mainwindow) if output is not None: y, params = output params: list[fitdialog.FitParam] pvalues = {} for param in params: if re.match(r"[\S\_]*\d{2}$", param.name): shname = param.name[:-2] value = pvalues.get(shname, np.array([])) pvalues[shname] = np.array(list(value) + [param.value]) else: pvalues[param.name] = param.value # Creating new signal metadata = {fitdlgfunc.__name__: pvalues} signal = create_signal(f"{name}({obj.title})", obj.x, y, metadata=metadata) # Creating new plot item self.panel.add_object(signal) @qt_try_except() def compute_fit(self, title: str, fitdlgfunc: Callable) -> None: """Compute fitting curve using an interactive dialog Args: title: Title of the dialog fitdlgfunc: Fitting dialog function """ for obj in self.panel.objview.get_sel_objects(): self.__row_compute_fit(obj, title, fitdlgfunc) @qt_try_except() def compute_multigaussianfit(self) -> None: """Compute multi-Gaussian fitting curve using an interactive dialog""" fitdlgfunc = fitdialog.multigaussian_fit for obj in self.panel.objview.get_sel_objects(): dlg = signalpeak.SignalPeakDetectionDialog(obj, parent=self.mainwindow) if exec_dialog(dlg): # Computing x, y peaks = dlg.get_peak_indices() def multigaussianfit(x, y, parent=None): """Multi-Gaussian fit dialog function""" # pylint: disable=cell-var-from-loop return fitdlgfunc(x, y, peaks, parent=parent) self.__row_compute_fit(obj, _("Multi-Gaussian fit"), multigaussianfit) @qt_try_except() def compute_multilorentzianfit(self) -> None: """Compute Multi-Lorentzian fitting curve using an interactive dialog""" fitdlgfunc = fitdialog.multilorentzian_fit for obj in self.panel.objview.get_sel_objects(): dlg = signalpeak.SignalPeakDetectionDialog(obj, parent=self.mainwindow) if exec_dialog(dlg): # Computing x, y peaks = dlg.get_peak_indices() def multilorentzianfit(x, y, parent=None): """Multi-Lorentzian fit dialog function""" # pylint: disable=cell-var-from-loop return fitdlgfunc(x, y, peaks, parent=parent) self.__row_compute_fit( obj, _("Multi-Lorentzian fit"), multilorentzianfit ) @qt_try_except() def _extract_multiple_roi_in_single_object(self, params: list[ROI1DParam]) -> None: """Extract multiple Regions Of Interest (ROIs) from data in a single object""" # TODO: This `compute_1_to_1` call is not ideal, as it passes a list of # parameter sets (`params` is a list of `DataSet` objects) instead of a single # parameter set as expected by the method. Currently, the method implementation # is compatible with this call, and it simply passes the second argument through # to the `extract_rois` function. However, this should be rectified in the # future to ensure that the method signature and its usage are consistent. self.compute_1_to_1(sips.extract_rois, params, title=_("Extract ROI")) # ------Signal Analysis @qt_try_except() def compute_full_width_at_y( self, param: sigima.params.OrdinateParam | None = None ) -> dict[str, GeometryResult] | None: """Compute full width at a given y with :py:func:`sigima.proc.signal.full_width_at_y`""" if param is None: obj = self.panel.objview.get_sel_objects(include_groups=True)[0] dlg = signaldeltax.SignalDeltaXDialog(obj, parent=self.mainwindow) if exec_dialog(dlg): param = sips.OrdinateParam(_("Full width at y")) param.y = dlg.get_y_value() else: return None return self.run_feature("full_width_at_y", param) @qt_try_except() def compute_x_at_y( self, param: sips.OrdinateParam | None = None ) -> dict[str, TableResult] | None: """Compute x at y with :py:func:`sigima.proc.signal.x_at_y`.""" if param is None: obj = self.panel.objview.get_sel_objects(include_groups=True)[0] dlg = signalcursor.SignalCursorDialog( obj, cursor_orientation="horizontal", parent=self.mainwindow ) if exec_dialog(dlg): param = sips.OrdinateParam(_("Abscissa at y")) param.y = dlg.get_y_value() else: return None return self.run_feature("x_at_y", param) @qt_try_except() def compute_y_at_x( self, param: sips.AbscissaParam | None = None ) -> dict[str, TableResult] | None: """Compute y at x with :py:func:`sigima.proc.signal.y_at_x`.""" if param is None: obj = self.panel.objview.get_sel_objects(include_groups=True)[0] dlg = signalcursor.SignalCursorDialog( obj, cursor_orientation="vertical", parent=self.mainwindow ) if exec_dialog(dlg): param = sips.AbscissaParam(_("Ordinate at x")) param.x = dlg.get_x_value() else: return None return self.run_feature("y_at_x", param) DataLab-1.0.2/datalab/gui/profiledialog.py000066400000000000000000000302621511411446000203500ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Profile dialog ============== The :mod:`datalab.gui.profiledialog` module provides the profile extraction dialog. .. autoclass:: ProfileExtractionDialog """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING, Literal import qtpy.QtCore as QC import sigima.params from guidata.configtools import get_icon from plotpy.interfaces import ICurveItemType from plotpy.items import AnnotatedPoint, AnnotatedRectangle, AnnotatedSegment from plotpy.panels.csection.cswidget import LineCrossSection from plotpy.plot import PlotDialog, PlotOptions from plotpy.tools import AverageCrossSectionTool, CrossSectionTool, LineCrossSectionTool from qtpy import QtWidgets as QW from qtpy.QtWidgets import QWidget from datalab.adapters_plotpy import create_adapter_from_object from datalab.config import _ from datalab.utils.qthelpers import resize_widget_to_parent if TYPE_CHECKING: from plotpy.items import CurveItem from plotpy.panels import XCrossSection, YCrossSection from plotpy.plot import BasePlot from sigima.objects import ImageObj class ProfileExtractionDialog(PlotDialog): """Profile extraction dialog Args: mode: "line", "segment" or "rectangle" options: Plot options parent: Parent widget """ def __init__( self, mode: Literal["line", "segment", "rectangle"], param: sigima.params.LineProfileParam | sigima.params.SegmentProfileParam | sigima.params.AverageProfileParam, options: PlotOptions | None = None, parent: QWidget | None = None, add_initial_shape: bool = False, ) -> None: self.__obj: ImageObj | None = None self.__default_curve_color: str | None = None assert mode in ("line", "segment", "rectangle") self.mode = mode self.param = param title = param.get_title() self.__add_initial_shape = add_initial_shape if options is None: options = PlotOptions(show_contrast=True, show_axes_tab=False) options.show_xsection = options.show_ysection = True toolklass = { "line": CrossSectionTool, "segment": LineCrossSectionTool, "rectangle": AverageCrossSectionTool, }[mode] super().__init__(title=title, edit=True, options=options, parent=parent) self.setObjectName("profileextraction") self.setWindowIcon(get_icon("DataLab.svg")) resize_widget_to_parent(self, parent, aspect_ratio=1.0) mgr = self.get_manager() tool: ( CrossSectionTool | LineCrossSectionTool | AverageCrossSectionTool | None ) = mgr.get_tool(toolklass) if tool is None: tool = mgr.add_tool(toolklass) self.cstool = tool self.shape: AnnotatedPoint | AnnotatedSegment | AnnotatedRectangle | None = None self.param_btn = pbtn = QW.QPushButton(_("Edit profile parameters")) pbtn.setIcon(get_icon("edit.svg")) pbtn.clicked.connect(self.edit_values) pbtn.setEnabled(False) self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(False) tool.SIG_TOOL_JOB_FINISHED.connect(self.__tool_job_finished) self.button_layout.insertWidget(0, pbtn) rbtn = QW.QPushButton(_("Reset selection")) rbtn.setIcon(get_icon("reset.svg")) rbtn.clicked.connect(self.reset_to_initial) self.button_layout.insertWidget(1, rbtn) self.update_cs_panels_state() self.get_plot().SIG_ITEMS_CHANGED.connect(self.update_cs_panels_state) def populate_plot_layout(self): """Populate the plot layout""" super().populate_plot_layout() lcs_panel = LineCrossSection(self) splitter = self.plot_widget.xcsw_splitter splitter.addWidget(lcs_panel) splitter.setSizes([0, 1, 0]) self.manager.add_panel(lcs_panel) # Install event filters on cross-section plots to detect clicks mgr = self.get_manager() xcs_panel = mgr.get_xcs_panel() ycs_panel = mgr.get_ycs_panel() if xcs_panel is not None: xcs_panel.cs_plot.canvas().installEventFilter(self) # Store reference to know which plot was clicked xcs_panel.cs_plot.canvas().setProperty("cs_direction", "horizontal") if ycs_panel is not None: ycs_panel.cs_plot.canvas().installEventFilter(self) ycs_panel.cs_plot.canvas().setProperty("cs_direction", "vertical") def __set_curve_enable_state(self, curve: CurveItem, state: bool) -> None: """Set curve enable state Args: curve: Curve item state: Enable state """ if self.__default_curve_color is None: self.__default_curve_color = curve.param.line.color color = self.__default_curve_color if state else "#666666" curve.param.line.color = color curve.param.update_item(curve) def __get_curve(self, plot: BasePlot) -> CurveItem | None: """Get cross-section curve Args: plot: Plot """ curves = plot.get_items(item_type=ICurveItemType) if curves: return curves[0] return None def __update_xycs_panel_state( self, cs_panel: XCrossSection | YCrossSection, state: bool ) -> None: """Update cross-section panel state Args: cs_panel: Cross-section panel state: Enable state """ cs_panel.setEnabled(state) cs_plot = cs_panel.cs_plot curve = self.__get_curve(cs_plot) if curve: self.__set_curve_enable_state(curve, state) def __on_cs_plot_clicked(self, direction: str) -> None: """Handle click on cross-section plot to switch direction Args: direction: "horizontal" or "vertical" """ # Only handle clicks for line and rectangle modes if self.mode not in ("line", "rectangle"): return # Switch direction if different if self.param.direction != direction: self.param.direction = direction self.update_cs_panels_state() self.get_plot().replot() def eventFilter(self, obj: QC.QObject, event: QC.QEvent) -> bool: """Event filter to detect clicks on cross-section plots Args: obj: Object event: Event Returns: True if event was handled, False otherwise """ # Check if this is a cross-section plot canvas direction = obj.property("cs_direction") if direction: # Handle mouse press to switch direction if event.type() == QC.QEvent.MouseButtonPress: self.__on_cs_plot_clicked(direction) # Consume the event to prevent curve selection return True return super().eventFilter(obj, event) def update_cs_panels_state(self): """Enable or disable X or Y cross-section panels depending on the direction of the desired profile extraction.""" mgr = self.get_manager() lcs_panel = mgr.get_panel(LineCrossSection.PANEL_ID) xcs_panel, ycs_panel = mgr.get_xcs_panel(), mgr.get_ycs_panel() xymode = self.mode in ("line", "rectangle") lcs_panel.setVisible(not xymode) xcs_panel.setVisible(xymode) ycs_panel.setVisible(xymode) if xymode: p = self.param self.__update_xycs_panel_state(xcs_panel, p.direction == "horizontal") self.__update_xycs_panel_state(ycs_panel, p.direction == "vertical") def accept(self) -> None: """Accept""" if self.shape is not None: self.shape_to_param() super().accept() def reset_to_initial(self) -> None: """Reset to initial""" self.param_btn.setEnabled(False) self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(False) if self.mode == "line": self.param = sigima.params.LineProfileParam() elif self.mode == "segment": self.param = sigima.params.SegmentProfileParam() else: self.param = sigima.params.AverageProfileParam() plot = self.get_plot() if self.shape is not None: plot.del_item(self.shape) self.cstool.activate() self.update_cs_panels_state() self.get_plot().replot() def __tool_job_finished(self): """Tool job finished""" self.param_btn.setEnabled(True) self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(True) self.shape = self.cstool.get_last_final_shape() assert self.shape is not None self.shape.set_readonly(True) self.shape_to_param() self.update_cs_panels_state() def __physical_to_indices(self, coords: list[float]) -> tuple[int, int]: """Physical to indices Args: coords: Coordinates Returns: Tuple of indices """ assert self.__obj is not None return self.__obj.physical_to_indices(coords, clip=True) def shape_to_param(self) -> None: """Shape to param""" assert self.__obj is not None p2i = self.__physical_to_indices p = self.param if isinstance(self.shape, AnnotatedPoint): assert isinstance(p, sigima.params.LineProfileParam) p.col, p.row = p2i(self.shape.get_pos()) elif isinstance(self.shape, AnnotatedSegment): assert isinstance(p, sigima.params.SegmentProfileParam) p.col1, p.row1, p.col2, p.row2 = p2i(self.shape.get_rect()) if p.col1 > p.col2: p.col1, p.col2 = p.col2, p.col1 p.row1, p.row2 = p.row2, p.row1 else: assert isinstance(p, sigima.params.AverageProfileParam) p.col1, p.row1, p.col2, p.row2 = p2i(self.shape.get_rect()) if p.col1 > p.col2: p.col1, p.col2 = p.col2, p.col1 p.row1, p.row2 = p.row2, p.row1 def param_to_shape(self) -> None: """Param to shape""" assert self.__obj is not None i2p = self.__obj.indices_to_physical p = self.param if isinstance(self.shape, AnnotatedPoint): assert isinstance(p, sigima.params.LineProfileParam) x, y = i2p([p.col, p.row]) self.shape.set_pos(x, y) elif isinstance(self.shape, AnnotatedSegment): assert isinstance(p, sigima.params.SegmentProfileParam) x1, y1, x2, y2 = i2p([p.col1, p.row1, p.col2, p.row2]) self.shape.set_rect(x1, y1, x2, y2) else: assert isinstance(p, sigima.params.AverageProfileParam) x1, y1, x2, y2 = i2p([p.col1, p.row1, p.col2, p.row2]) self.shape.set_rect(x1, y1, x2, y2) def edit_values(self) -> None: """Edit values""" self.shape_to_param() if self.param.edit(parent=self, apply=lambda _param: self.apply_callback()): self.param_to_shape() self.update_cs_panels_state() self.get_plot().replot() def apply_callback(self) -> None: """Apply callback""" self.param_to_shape() self.update_cs_panels_state() self.get_plot().replot() def set_obj(self, obj: ImageObj): """Set object Args: obj: Image object """ self.__obj = obj item = create_adapter_from_object(obj).make_item() item.set_readonly(True) item.set_resizable(False) item.set_rotatable(False) item.set_selectable(False) plot = self.get_plot() plot.add_item(item) plot.set_active_item(item) item.unselect() if self.__add_initial_shape: plot = self.get_plot() self.show() # To be able to convert axes to canvas coordinates p0 = QC.QPointF(0.0, 0.0) self.cstool.add_shape_to_plot(plot, p0, p0) self.shape = self.cstool.get_last_final_shape() self.param_to_shape() self.param_btn.setEnabled(True) self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(True) else: self.cstool.activate() DataLab-1.0.2/datalab/gui/roieditor.py000066400000000000000000000522131511411446000175300ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ ROI editor ========== The :mod:`datalab.gui.roieditor` module provides the ROI editor widgets for signals and images. Signal ROI editor ----------------- .. autoclass:: SignalROIEditor :members: Image ROI editor ---------------- .. autoclass:: ImageROIEditor :members: """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import abc import re from typing import TYPE_CHECKING, Any, Generic, Literal, TypeVar, Union from guidata.configtools import get_icon from guidata.qthelpers import add_actions, create_action from plotpy.items import ( AnnotatedCircle, AnnotatedPolygon, AnnotatedRectangle, AnnotatedXRange, CurveItem, MaskedXYImageItem, ) from plotpy.plot import PlotDialog, PlotManager, PlotOptions from plotpy.tools import CircleTool, HRangeTool, PolygonTool, RectangleTool, SelectTool from qtpy import QtCore as QC from qtpy import QtWidgets as QW from sigima.objects import ( CircularROI, ImageObj, ImageROI, PolygonalROI, RectangularROI, ROI1DParam, ROI2DParam, SegmentROI, SignalObj, SignalROI, TypeObj, TypeROI, ) from sigima.objects.base import get_generic_roi_title from datalab.adapters_plotpy import ( TypePlotItem, TypeROIItem, configure_roi_item, create_adapter_from_object, plotitem_to_singleroi, ) from datalab.config import Conf, _ from datalab.env import execenv if TYPE_CHECKING: from plotpy.plot import BasePlot from plotpy.tools.base import InteractiveTool def configure_roi_item_in_tool(shape, obj: SignalObj | ImageObj) -> None: """Configure ROI item in tool""" fmt = create_adapter_from_object(obj).get_obj_option("format") configure_roi_item(shape, fmt, lbl=True, editable=True, option=obj.PREFIX) def tool_deselect_items(tool: InteractiveTool) -> None: """Deselect all items in plot associated with the tool""" plot = tool.get_active_plot() plot.select_some_items([]) # Deselect all items def tool_setup_shape( plot: BasePlot, shape: TypeROIItem, obj: SignalObj | ImageObj, ) -> None: """Tool setup shape""" configure_roi_item_in_tool(shape, obj) max_index = -1 for item in plot.get_items(): name = str(item.title().text()) match = re.match(r"ROI(\d+)", name) if match is not None: max_index = max(max_index, int(match.group(1))) shape.setTitle(get_generic_roi_title(max_index + 1)) class ROISegmentTool(HRangeTool): """ROI segment tool""" TITLE = _("Range ROI") ICON = "roi_sig.svg" def __init__(self, manager: PlotManager, obj: SignalObj) -> None: super().__init__(manager, switch_to_default_tool=False, toolbar_id=None) self.roi = SegmentROI([0, 1], False) self.obj = obj def activate(self): """Activate tool""" tool_deselect_items(self) super().activate() def create_shape(self) -> AnnotatedXRange: """Create shape""" shape = create_adapter_from_object(self.roi).to_plot_item(self.obj) tool_setup_shape(self.get_active_plot(), shape, self.obj) return shape class ROIRectangleTool(RectangleTool): """ROI rectangle tool""" TITLE = _("Rectangular ROI") ICON = "roi_new_rectangle.svg" def __init__(self, manager: PlotManager, obj: ImageObj) -> None: super().__init__(manager, switch_to_default_tool=False, toolbar_id=None) self.roi = RectangularROI([0, 0, 1, 1], False) self.obj = obj def activate(self): """Activate tool""" tool_deselect_items(self) super().activate() def create_shape(self) -> tuple[AnnotatedRectangle, int, int]: """Create shape""" item = create_adapter_from_object(self.roi).to_plot_item(self.obj) return item, 0, 2 # Reimplement `RectangularShapeTool` method def setup_shape(self, shape: AnnotatedRectangle) -> None: """Setup shape""" tool_setup_shape(self.get_active_plot(), shape, self.obj) class ROICircleTool(CircleTool): """ROI circle tool""" TITLE = _("Circular ROI") ICON = "roi_new_circle.svg" def __init__(self, manager: PlotManager, obj: ImageObj) -> None: super().__init__(manager, switch_to_default_tool=False, toolbar_id=None) self.roi = CircularROI([0, 0, 1], False) self.obj = obj def activate(self): """Activate tool""" tool_deselect_items(self) super().activate() def create_shape(self) -> tuple[AnnotatedCircle, int, int]: """Create shape""" item = create_adapter_from_object(self.roi).to_plot_item(self.obj) return item, 0, 1 # Reimplement `RectangularShapeTool` method def setup_shape(self, shape: AnnotatedCircle) -> None: """Setup shape""" tool_setup_shape(self.get_active_plot(), shape, self.obj) class ROIPolygonTool(PolygonTool): """ROI polygon tool""" TITLE = _("Polygonal ROI") ICON = "roi_new_polygon.svg" def __init__(self, manager: PlotManager, obj: ImageObj) -> None: super().__init__(manager, switch_to_default_tool=False, toolbar_id=None) self.roi = PolygonalROI([0, 0, 1, 0, 1, 1, 0, 1], False) self.obj = obj def activate(self): """Activate tool""" tool_deselect_items(self) super().activate() def create_shape(self) -> tuple[AnnotatedPolygon, int, int]: """Create shape""" return create_adapter_from_object(self.roi).to_plot_item(self.obj) # Reimplement `RectangularShapeTool` method def setup_shape(self, shape: AnnotatedPolygon) -> None: """Setup shape""" tool_setup_shape(self.get_active_plot(), shape, self.obj) TypeROIEditor = TypeVar("TypeROIEditor", bound="BaseROIEditor") class BaseROIEditorMeta(type(PlotDialog), abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class BaseROIEditor( PlotDialog, Generic[TypeObj, TypeROI, TypePlotItem, TypeROIItem], # type: ignore metaclass=BaseROIEditorMeta, ): """ROI Editor Args: parent: Parent plot dialog obj: Object to edit (:class:`sigima.objects.SignalObj` or :class:`sigima.objects.ImageObj`) mode: Mode of operation, either "apply" (define ROI, then apply it to selected objects), "extract" (define ROI, then extract data from it), or "define" (define ROI without applying or extracting). item: Optional plot item to add to the plot (if None, a new item is created from the object) """ ICON_NAME = None OBJ_NAME = None ROI_ITEM_TYPES = () ADDITIONAL_OPTIONS: dict[str, Any] = {} def __init__( self, parent: QW.QWidget | None, obj: SignalObj | ImageObj, mode: Literal["apply", "extract", "define"] = "apply", item: TypePlotItem | None = None, options: PlotOptions | dict[str, Any] | None = None, size: tuple[int, int] | None = None, ) -> None: assert mode in ("apply", "extract", "define"), ( f"Invalid mode: {mode}. Must be either 'apply', 'extract' or 'define'." ) self.editor_layout: QW.QHBoxLayout | None = None self.remove_all_action: QW.QAction | None = None self.singleobj_btn: QW.QCheckBox | None = None self.obj = obj self.mode = mode if item is None: item = create_adapter_from_object(obj).make_item() self.main_item = item self.__modified: bool | None = None self._tools: list[InteractiveTool] = [] # Create ROI associated with the object if mode == "define": # In "define" mode, we do not want to show the object's ROI to avoid any # confusion with the ROI being defined roi = None else: # In "apply" or "extract" mode, we want to show the object's ROI # if it exists, otherwise create a new empty ROI roi = obj.roi if roi is None: roi = self.get_obj_roi_class()() self.__roi: TypeROI = roi if options is None: options = self.ADDITIONAL_OPTIONS else: options = options.copy(self.ADDITIONAL_OPTIONS) roi_s = _("Regions of interest") super().__init__( parent=parent, toolbar=mode != "define", options=options, title=f"{roi_s} - {obj.title}", icon="DataLab.svg", edit=True, size=size, ) self.setObjectName(f"{obj.PREFIX}_roi_editor") self.accepted.connect(self.dialog_accepted) # Create the ROI items fmt = create_adapter_from_object(obj).get_obj_option("format") roi_adapter = create_adapter_from_object(self.__roi) self.roi_items: list[TypeROIItem] = list( roi_adapter.iterate_roi_items(obj, fmt, True, True) ) self.toolbar = QW.QToolBar(self) self.add_tools_to_plot_dialog() self.setup_editor_layout() self.setup_items() # force update of ROI titles and remove_all_btn state self.items_changed(self.get_plot()) self.get_plot().SIG_ITEMS_CHANGED.connect(self.items_changed) self.get_plot().SIG_ITEM_REMOVED.connect(self.item_removed) self.get_plot().SIG_RANGE_CHANGED.connect( lambda _rng, _min, _max: self.item_moved() ) self.get_plot().SIG_ANNOTATION_CHANGED.connect(lambda _plt: self.item_moved()) # In "extract mode", the dialog box OK button should always been enabled # when at least one ROI is defined, # whereas in non-extract mode (when editing ROIs) the OK button is by default # disabled (until ROI data is modified) if self.mode == "extract": self.modified = len(self.roi_items) > 0 else: self.modified = False def setup_layout(self) -> None: # Reimplement PlotDialog method """Populate the plot layout""" super().setup_layout() self.editor_layout = QW.QHBoxLayout() self.button_layout.insertLayout(0, self.editor_layout) def setup_editor_layout(self) -> None: """Setup editor layout""" self.toolbar.setToolButtonStyle(QC.Qt.ToolButtonTextUnderIcon) add_actions(self.toolbar, self.create_actions()) for action in self.toolbar.actions(): if action.menu() is not None: widget = self.toolbar.widgetForAction(action) widget.setPopupMode(QW.QToolButton.ToolButtonPopupMode.InstantPopup) self.editor_layout.addWidget(self.toolbar) if self.mode == "extract": self.singleobj_btn = QW.QCheckBox( _("Extract all ROIs\ninto a single %s") % self.OBJ_NAME, self, ) self.editor_layout.addWidget(self.singleobj_btn) self.singleobj_btn.setChecked(Conf.proc.extract_roi_singleobj.get()) self.editor_layout.addStretch() def setup_items(self) -> None: """Setup items""" self.main_item.set_selectable(False) self.main_item.set_readonly(True) plot = self.get_plot() plot.add_item(self.main_item) plot.set_active_item(self.main_item) self.main_item.unselect() for roi_item in self.roi_items: plot.add_item(roi_item) plot.set_active_item(roi_item) @abc.abstractmethod def get_obj_roi_class(self) -> type[TypeROI]: """Get object ROI class""" def add_tools_to_plot_dialog(self) -> None: """Add tools to plot dialog""" mgr = self.get_manager() select_tool = mgr.get_tool(SelectTool) add_actions(self.toolbar, [select_tool.action]) @property def modified(self) -> bool: """Return dialog modified state""" return self.__modified @modified.setter def modified(self, value: bool) -> None: """Set dialog modified state""" self.__modified = value if self.mode in ("extract", "define"): # In "extract" mode or in "define" mode, OK button is enabled # when at least one ROI is defined value = value and len(self.roi_items) > 0 self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(value) def dialog_accepted(self) -> None: """Parent dialog was accepted: updating ROI Editor data""" self.__roi.empty() for roi_item in self.roi_items: self.__roi.add_roi(plotitem_to_singleroi(roi_item, self.obj)) if self.singleobj_btn is not None: Conf.proc.extract_roi_singleobj.set(self.singleobj_btn.isChecked()) def get_roieditor_results(self) -> tuple[TypeROI, bool]: """Get ROI editor results Returns: A tuple containing the ROI data parameters and ROI modified state. ROI modified state is True if the ROI data has been modified within the dialog box. """ return self.__roi, self.modified def create_coordinate_based_roi_actions(self) -> list[QW.QAction]: """Create coordinate-based ROI actions""" return [] def __new_action_menu( self, title: str, icon: str, actions: list[QW.QAction] ) -> QW.QAction: """Create a new action menu""" menu = QW.QMenu(title) for action in actions: menu.addAction(action) action = QW.QAction(get_icon(icon), title, self) action.setMenu(menu) return action def create_actions(self) -> list[QW.QAction]: """Create actions""" g_menu_act = self.__new_action_menu( _("Graphical ROI"), "roi_graphical.svg", [tool.action for tool in self._tools], ) c_menu_act = self.__new_action_menu( _("Coordinate-based ROI"), "roi_coordinate.svg", self.create_coordinate_based_roi_actions(), ) self.remove_all_action = create_action( self, _("Remove all"), icon=get_icon("roi_delete.svg"), triggered=self.remove_all_rois, ) return [g_menu_act, c_menu_act, None, self.remove_all_action] def remove_all_rois(self) -> None: """Remove all ROIs""" if ( execenv.unattended or QW.QMessageBox.question( self, _("Remove all ROIs"), _("Are you sure you want to remove all ROIs?"), ) == QW.QMessageBox.Yes ): self.get_plot().del_items(self.roi_items) def get_roi_items(self) -> list[TypeROIItem]: """Get ROI items""" return self.roi_items def update_roi_items(self) -> None: """Update ROI items""" old_nb_items = len(self.roi_items) self.roi_items = [ item for item in self.get_plot().get_items() if isinstance(item, self.ROI_ITEM_TYPES) ] self.get_plot().select_some_items([]) if old_nb_items != len(self.roi_items): self.modified = True def items_changed(self, _plot: BasePlot) -> None: """Items have changed""" self.update_roi_items() self.remove_all_action.setEnabled(len(self.roi_items) > 0) def item_removed(self, item) -> None: """Item was removed. Since all items are read-only except ROIs... this must be an ROI.""" assert item in self.roi_items self.update_roi_items() self.modified = True def item_moved(self) -> None: """ROI plot item has just been moved""" self.modified = True class SignalROIEditor(BaseROIEditor[SignalObj, SignalROI, CurveItem, AnnotatedXRange]): """Signal ROI Editor Args: parent: Parent plot dialog obj: Object to edit (:class:`sigima.objects.SignalObj` or :class:`sigima.objects.ImageObj`) mode: Mode of operation, either "apply" (define ROI, then apply it to selected objects), "extract" (define ROI, then extract data from it), or "define" (define ROI without applying or extracting). item: Optional plot item to add to the plot (if None, a new item is created from the object) """ ICON_NAME = "roi_sig.svg" OBJ_NAME = _("signal") ROI_ITEM_TYPES = (AnnotatedXRange,) def __init__( self, parent: QW.QWidget | None, obj: SignalObj | ImageObj, mode: Literal["apply", "extract", "define"] = "apply", item: TypePlotItem | None = None, options: PlotOptions | dict[str, Any] | None = None, size: tuple[int, int] | None = None, ) -> None: super().__init__( parent=parent, obj=obj, mode=mode, item=item, options=options, size=size, ) def get_obj_roi_class(self) -> type[SignalROI]: """Get object ROI class""" return SignalROI def add_tools_to_plot_dialog(self) -> None: """Add tools to plot dialog""" super().add_tools_to_plot_dialog() mgr = self.get_manager() segm_tool = mgr.add_tool(ROISegmentTool, self.obj) self._tools.append(segm_tool) segm_tool.activate() def manually_add_roi(self) -> None: """Manually add segment ROI""" param = ROI1DParam() if param.edit(parent=self): segment_roi = param.to_single_roi(self.obj) shape = create_adapter_from_object(segment_roi).to_plot_item(self.obj) configure_roi_item_in_tool(shape, self.obj) self.get_plot().add_item(shape) self.get_plot().set_active_item(shape) def create_coordinate_based_roi_actions(self) -> list[QW.QAction]: """Create coordinate-based ROI actions""" segcoord_act = create_action( self, _("Range ROI"), icon=get_icon("roi_sig.svg"), triggered=self.manually_add_roi, ) return [segcoord_act] class ImageROIEditor( BaseROIEditor[ ImageObj, ImageROI, MaskedXYImageItem, # `Union` is mandatory here for Python 3.9-3.10 compatibility: Union[AnnotatedPolygon, AnnotatedRectangle, AnnotatedCircle], ] ): """Image ROI Editor Args: parent: Parent plot dialog obj: Object to edit (:class:`sigima.objects.SignalObj` or :class:`sigima.objects.ImageObj`) mode: Mode of operation, either "apply" (define ROI, then apply it to selected objects), "extract" (define ROI, then extract data from it), or "define" (define ROI without applying or extracting). item: Optional plot item to add to the plot (if None, a new item is created from the object) """ ICON_NAME = "roi_ima.svg" OBJ_NAME = _("image") ROI_ITEM_TYPES = (AnnotatedRectangle, AnnotatedCircle, AnnotatedPolygon) ADDITIONAL_OPTIONS = {"show_itemlist": True, "show_contrast": False} def get_obj_roi_class(self) -> type[ImageROI]: """Get object ROI class""" return ImageROI def add_tools_to_plot_dialog(self) -> None: """Add tools to plot dialog""" super().add_tools_to_plot_dialog() mgr = self.get_manager() rect_tool = mgr.add_tool(ROIRectangleTool, self.obj) circ_tool = mgr.add_tool(ROICircleTool, self.obj) poly_tool = mgr.add_tool(ROIPolygonTool, self.obj) self._tools.extend([rect_tool, circ_tool, poly_tool]) rect_tool.activate() def manually_add_roi( self, roi_type: Literal["rectangle", "circle", "polygon"] ) -> None: """Manually add image ROI""" assert roi_type in ("rectangle", "circle", "polygon") if roi_type == "polygon": raise NotImplementedError("Manual polygonal ROI creation is not supported") param = ROI2DParam() param.geometry = roi_type if param.edit(parent=self): roi = param.to_single_roi(self.obj) shape = create_adapter_from_object(roi).to_plot_item(self.obj) configure_roi_item_in_tool(shape, self.obj) self.get_plot().add_item(shape) self.get_plot().set_active_item(shape) def create_coordinate_based_roi_actions(self) -> list[QW.QAction]: """Create coordinate-based ROI actions""" rectcoord_act = create_action( self, _("Rectangular ROI"), icon=get_icon("roi_new_rectangle.svg"), triggered=lambda: self.manually_add_roi("rectangle"), ) circcoord_act = create_action( self, _("Circular ROI"), icon=get_icon("roi_new_circle.svg"), triggered=lambda: self.manually_add_roi("circle"), ) return [rectcoord_act, circcoord_act] def setup_items(self) -> None: """Setup items""" super().setup_items() # In "define" mode, we want to show the mask that is associated with the # image's ROI, if it exists, because the ROI that is being defined has nothing # to do with the image's ROI: it is just a temporary ROI that will for example # be used in a processing function, so the user need to visualize the mask that # corresponds to the data on which the processing function will be applied. self.main_item.set_mask_visible(self.mode == "define") DataLab-1.0.2/datalab/gui/roigrideditor.py000066400000000000000000000171401511411446000203760ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ROI Grid editor""" from __future__ import annotations from typing import Any import guidata.dataset as gds import guidata.dataset.qtwidgets as gdq from plotpy.plot import PlotDialog, PlotOptions from qtpy import QtCore as QC from qtpy import QtWidgets as QW from sigima.io import read_roi_grid, write_roi_grid from sigima.objects import ImageObj, ImageROI from sigima.params import ROIGridParam from sigima.proc.image import generate_image_grid_roi from datalab.adapters_plotpy import create_adapter_from_object from datalab.config import _ from datalab.utils.qthelpers import block_signals class DisplayParam(gds.DataSet): """ROI Grid display parameters""" def __init__(self, roi_editor: ImageGridROIEditor | None = None) -> None: super().__init__() self.roi_editor = roi_editor def display_changed(self, item, value) -> None: # pylint: disable=unused-argument """Emit display changed signal.""" assert self.roi_editor is not None, "ROI editor is not set" if self.roi_editor.is_ready(): self.roi_editor.SIG_DISPLAY_CHANGED.emit() show_mask = gds.BoolItem(_("Show mask"), default=True).set_prop( "display", callback=display_changed ) _prop_show_roi = gds.ValueProp(False) show_roi = gds.BoolItem(_("Show ROI"), default=True).set_prop( "display", callback=display_changed, store=_prop_show_roi ) show_names = gds.BoolItem(_("Show names"), default=True).set_prop( "display", callback=display_changed, active=_prop_show_roi ) class ImageGridROIEditor(PlotDialog): """Image Grid ROI Editor. Args: parent: Parent plot dialog obj: Object to edit (:class:`sigima.objects.ImageObj`) item: Optional plot item to add to the plot (if None, a new item is created from the object) """ SIG_GEOMETRY_CHANGED = QC.Signal() SIG_DISPLAY_CHANGED = QC.Signal() ADDITIONAL_OPTIONS = {"show_itemlist": False, "show_contrast": False} IO_FILTERS = _("ROI grid files (*.dlabgrid);;All files (*)") def __init__( self, parent: QW.QWidget | None, obj: ImageObj, gridparam: ROIGridParam | None = None, displayparam: DisplayParam | None = None, options: PlotOptions | dict[str, Any] | None = None, size: tuple[int, int] | None = None, ) -> None: self.editor_layout: QW.QVBoxLayout | None = None self.__roi = ImageROI() self.__is_ready = False self.obj = obj = obj.copy() # Avoid modifying the original object obj.roi = None # Clear the ROI to avoid conflicts with the editor gridparam = gridparam or ROIGridParam() displayparam = displayparam or DisplayParam() self.gridparamwidget = gdq.DataSetEditGroupBox( _("Grid parameters"), ROIGridParam, show_button=False ) gds.update_dataset(self.gridparamwidget.dataset, gridparam) self.displayparamwidget = gdq.DataSetEditGroupBox( _("Display parameters"), DisplayParam, show_button=False, roi_editor=self ) gds.update_dataset(self.displayparamwidget.dataset, displayparam) self.update_obj(update_item=False) if options is None: options = self.ADDITIONAL_OPTIONS else: options = options.copy(self.ADDITIONAL_OPTIONS) roi_s = _("ROI grid") super().__init__( parent=parent, toolbar=False, options=options, title=f"{roi_s} - {obj.title}", icon="DataLab.svg", edit=True, size=size, ) self.gridparamwidget.dataset.on_geometry_changed = ( self.SIG_GEOMETRY_CHANGED.emit ) self.setObjectName("i_grid_roi_editor") self.setup_editor_layout() self.update_items() self.SIG_GEOMETRY_CHANGED.connect(self.update_obj) self.SIG_DISPLAY_CHANGED.connect(self.update_items) self.__is_ready = True def get_roi(self) -> ImageROI: """Get the current ROI""" return self.__roi def is_ready(self) -> bool: """Check if the editor is ready for use""" return self.__is_ready def setup_layout(self) -> None: # Reimplement PlotDialog method """Populate the plot layout""" super().setup_layout() self.editor_layout = QW.QVBoxLayout() self.plot_layout.addLayout(self.editor_layout, 0, 1) self.plot_layout.setColumnStretch(0, 2) self.plot_layout.setColumnStretch(1, 1) def setup_editor_layout(self) -> None: """Setup editor layout""" self.editor_layout.addWidget(self.gridparamwidget) gbox = QW.QGroupBox(_("Import/Export")) glayout = QW.QHBoxLayout() glayout.addWidget( QW.QPushButton(_("Import grid"), clicked=self.import_roi_grid) ) glayout.addWidget( QW.QPushButton(_("Export grid"), clicked=self.export_roi_grid) ) gbox.setLayout(glayout) self.editor_layout.addWidget(gbox) self.editor_layout.addWidget(self.displayparamwidget) self.editor_layout.addStretch() def import_roi_grid(self) -> None: """Import ROI grid from file""" filename, _filter = QW.QFileDialog.getOpenFileName( self, _("Import ROI grid"), "", self.IO_FILTERS ) if filename: try: gp = read_roi_grid(filename) except Exception as exc: # pylint: disable=broad-except QW.QMessageBox.critical( self, _("Error"), _("Failed to import ROI grid: {0}").format(str(exc)), ) return gds.update_dataset(self.gridparamwidget.dataset, gp) with block_signals(widget=self.gridparamwidget, children=True): self.gridparamwidget.get() self.update_items() self.SIG_GEOMETRY_CHANGED.emit() def export_roi_grid(self) -> None: """Export ROI grid to file""" self.gridparamwidget.set() filename, _filter = QW.QFileDialog.getSaveFileName( self, _("Export ROI grid"), "", self.IO_FILTERS ) if filename: try: write_roi_grid(filename, self.gridparamwidget.dataset) except Exception as exc: # pylint: disable=broad-except QW.QMessageBox.critical( self, _("Error"), _("Failed to export ROI grid: {0}").format(str(exc)), ) def update_items(self) -> None: """Setup items""" dp = self.displayparamwidget.dataset obj = self.obj plot = self.get_plot() plot.del_all_items() item = create_adapter_from_object(obj).make_item() item.set_mask_visible(dp.show_mask) item.set_selectable(False) item.set_readonly(True) plot.add_item(item) plot.set_active_item(item) item.unselect() if dp.show_roi: fmt = create_adapter_from_object(obj).get_obj_option("format") roi_adapter = create_adapter_from_object(obj.roi) for ritem in roi_adapter.iterate_roi_items(obj, fmt, dp.show_names, False): plot.add_item(ritem) plot.replot() def update_obj(self, update_item: bool = True) -> None: """Update the object with the current parameters""" roi = generate_image_grid_roi(self.obj, self.gridparamwidget.dataset) self.__roi = self.obj.roi = roi if update_item: self.update_items() DataLab-1.0.2/datalab/gui/settings.py000066400000000000000000000526751511411446000174040ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Settings ======== The :mod:`datalab.gui.settings` module provides the DataLab settings dialog and related classes. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import Any, Generator import guidata.dataset as gds from guidata.dataset import restore_dataset, update_dataset from plotpy.styles import BaseImageParam from qtpy import QtWidgets as QW from datalab.config import Conf, _ class MainSettings(gds.DataSet): """DataLab main settings""" g0 = gds.BeginGroup(_("Settings for main window and general features")) color_mode = gds.ChoiceItem( _("Color mode"), zip(Conf.main.color_mode.values, Conf.main.color_mode.values), help=_("Color mode for the application"), ) process_isolation_enabled = gds.BoolItem( "", _("Process isolation"), help=_( "With process isolation, each computation is run in a separate process," "
    which prevents the application from freezing during long computations." ), ) rpc_server_enabled = gds.BoolItem( "", _("RPC server"), help=_( "RPC server is used to communicate with external applications," "
    like your own scripts (e.g. from Spyder or Jupyter) or other software." ), ) available_memory_threshold = gds.IntItem( _("Memory threshold"), default=0, unit=_("MB"), help=_( "Memory threshold below which a warning is displayed " "before loading any new data" ), ) plugins_enabled = gds.BoolItem( "", _("Third-party plugins"), help=_("Disable third-party plugins at startup"), ) plugins_path = gds.DirectoryItem( _("Plugins path"), allow_none=True, help=_( "Path to third-party plugins.

    " "DataLab will discover plugins in this path, " "as well as in your PYTHONPATH." ), ) v020_plugins_warning_ignore = gds.BoolItem( _("Ignore compatibility issues warning"), _("DataLab v0.20 plugins"), help=_( "If enabled, DataLab will not warn you about v0.20 plugins that are " "no longer compatible with v1.0." ), ) _g0 = gds.EndGroup("") class ConsoleSettings(gds.DataSet): """DataLab console settings""" g0 = gds.BeginGroup( _("Settings for internal console, used for debugging or advanced users") ) console_enabled = gds.BoolItem("", _("Console enabled")) show_console_on_error = gds.BoolItem( "", _("Show console on error"), help=_( "If enabled, the console will be shown when an error occurs in the " "application. This is useful for debugging purposes as it allows to " "see the error traceback." ), ) external_editor_path = gds.StringItem(_("External editor path"), "") external_editor_args = gds.StringItem(_("External editor arguments"), "") _g0 = gds.EndGroup("") class IOSettings(gds.DataSet): """DataLab I/O settings""" g0 = gds.BeginGroup(_("Settings for I/O operations")) h5_clear_workspace = gds.BoolItem( "", _("Clear workspace before loading HDF5 file"), help=_( "If enabled, the current workspace will be cleared before loading a " "new HDF5 file.\n" "If disabled, when importing DataLab workspace files, only objects with " "conflicting identifiers will have their processing history lost " "(features like 'Show source' and 'Recompute' will not work for those " "objects). Non-conflicting objects will preserve their processing history." ), ) h5_clear_workspace_ask = gds.BoolItem("", _("Ask before clearing workspace")) h5_fullpath_in_title = gds.BoolItem( "", _("HDF5 full path in title"), help=_( "If enabled, the full path of the HDF5 data set will be used as the title " "for the signal/image object.
    " "If disabled, only the name of the data set will be used as the title." ), ) h5_fname_in_title = gds.BoolItem( "", _("HDF5 file name in title"), help=_( "If enabled, the name of the HDF5 file will be used as a suffix in the " "title of the signal/image object." ), ) _g0 = gds.EndGroup("") class ProcSettings(gds.DataSet): """DataLab processing settings""" g0 = gds.BeginGroup(_("Settings for computations")) operation_mode = gds.ChoiceItem( _("Operation mode"), zip(Conf.proc.operation_mode.values, Conf.proc.operation_mode.values), help=_( "Operation mode for computations taking N inputs:" "
    • single: single operand mode
    • " "
    • pairwise: pairwise operation mode
    " "
    Computations taking N inputs are the ones where:" "
    • N(>=2) objects in %s 1 object out
    • " "
    • N(>=1) objects + 1 object in %s N objects out
    " ) % ("→", "→"), ) use_signal_bounds = gds.BoolItem( _("Use current signal bounds"), _("New signals"), help=_( "If enabled, when creating a new signal, the xmin and xmax values will be " "initialized from the current signal's bounds.
    " "If disabled, the default values from the New Signal dialog will be used." ), ) use_image_dims = gds.BoolItem( _("Use current image dimensions"), _("New images"), help=_( "If enabled, when creating a new image, the width and height values will " "be initialized from the current image's dimensions.
    " "If disabled, the default values from the New Image dialog will be used." ), ) fft_shift_enabled = gds.BoolItem( "", _("FFT shift"), help=_( "Enable FFT shift to center the zero-frequency component in the frequency " "spectrum for easier visualization and analysis." ), ) auto_normalize_kernel = gds.BoolItem( _("Auto-normalize convolution/deconvolution kernel"), _("Convolution"), help=_( "If enabled, convolution and deconvolution kernels will be automatically " "normalized for signal and image processing operations to preserve signal " "energy and image intensity." ), ) extract_roi_singleobj = gds.BoolItem( _("Extract multiple ROIs in a single object"), _("ROI extraction"), help=_( "If enabled, multiple ROIs will be extracted into a single object.
    " "If disabled, each ROI will be extracted into a separate object." ), ) ignore_warnings = gds.BoolItem( _("Ignore warnings during computations"), _("Warnings"), help=_("If enabled, warnings during computations will be ignored."), ) xarray_compat_behavior = gds.ChoiceItem( _("X-axis"), zip( Conf.proc.xarray_compat_behavior.values, [_("Ask before interpolation"), _("Interpolate systematically")], ), help=_( "Behavior when X-axis arrays are incompatible in multi-signal computations:" "
    • Ask: display confirmation dialog (default)
    • " "
    • Interpolate: automatically interpolate signals
    " ), ) _g0 = gds.EndGroup("") g1 = gds.BeginGroup(_("Settings for results management")) keep_results = gds.BoolItem( _("Keep results in metadata after computation"), _("Keep results"), help=_( "If enabled, the results of a previous analysis will be kept in object's " "metadata after the computation.
    " "If disabled, the results will be removed from the object's metadata." "

    " "This option is disabled by default because keeping analysis results may " "be confusing as those results could be outdated following the " "computation." ), ) show_result_dialog = gds.BoolItem( _("Show results dialog automatically after processing"), _("Show results"), help=_( "If enabled, the results dialog will be shown automatically after each " "processing operation producing results.
    " "If disabled, the results dialog will not be shown automatically." ), ) _g1 = gds.EndGroup("") class ImageDefaultSettings(BaseImageParam): """Image visualization default settings""" _multiselection = True # Hide label (not clean because it's not the intended use) # pylint:disable=unused-argument def edit_default_image_settings( dataset: gds.DataSet, item: gds.DataItem, value: Any, parent: QW.QWidget ) -> bool: """Edit default image settings Args: dataset: dataset item: Data item value: Value parent: Parent widget Returns: True if the settings were edited """ param = ImageDefaultSettings(_("Default image visualization settings")) ima_def_dict = Conf.view.get_def_dict("ima") update_dataset(param, ima_def_dict) if param.edit(parent=parent): restore_dataset(param, ima_def_dict) Conf.view.set_def_dict("ima", ima_def_dict) return True return False # pylint:disable=unused-argument def edit_dataset_settings( dataset: gds.DataSet, item: gds.DataItem, param: gds.DataSet, parent: QW.QWidget ) -> gds.DataSet: """Edit dataset-like settings Args: dataset: dataset item: Data item param: The DataSet instance from config, or None if not set parent: Parent widget Returns: The modified dataset, or None if cancelled """ assert param is not None, "Should not be None" param.set_title(_("Visualization settings")) param.edit(parent=parent) return param class ViewSettings(gds.DataSet): """DataLab Visualization settings""" _view_tabs = gds.BeginTabGroup("") g0 = gds.BeginGroup(_("Common")) plot_toolbar_position = gds.ImageChoiceItem( _("Plot toolbar position"), ( ("top", _("Top (above plot)"), "libre-gui-arrow-up.svg"), ("bottom", _("Bottom (below plot)"), "libre-gui-arrow-down.svg"), ("left", _("Left (of plot)"), "libre-gui-arrow-left.svg"), ("right", _("Right (of plot)"), "libre-gui-arrow-right.svg"), ), ) ignore_title_insertion_msg = gds.BoolItem( "", _("Ignore title insertion message"), help=_( "Ignore information message when inserting object title as annotation label" ), default=False, ) _g0 = gds.EndGroup("") g1 = gds.BeginGroup(_("Signals")).set_prop("display", icon="signal.svg") _prop_ads = gds.ValueProp(False) sig_linewidth = gds.FloatItem( _("Default line width"), default=1.0, min=0.1, help=_("Default line width for curves representing signals"), ) sig_linewidth_perfs_threshold = gds.IntItem( _("Performance threshold"), default=1000, min=100, help=_( "Number of points threshold for line width limitation.\n" "For signals with more than this number of points, " "line width is automatically limited to 1.0 for performance reasons.\n\n" "That's because the Qt raster engine experiences significant rendering " "slowdowns with thick lines on large datasets." ), ) sig_autodownsampling = gds.BoolItem( "", _("Use auto downsampling"), help=_("Use auto downsampling for large signals"), ).set_prop("display", store=_prop_ads) sig_autodownsampling_maxpoints = gds.IntItem( _("Downsampling max points"), default=10000, min=1000, help=_("Maximum number of points for downsampling"), ).set_prop("display", active=_prop_ads) sig_autoscale_margin_percent = gds.FloatItem( _("Autoscale margin"), unit=_("%"), default=0.2, min=0.0, max=50.0, help=_( "Percentage of margin to add around data when auto-scaling signal " "plots.
    A value of 0.2% adds a small margin for better " "visualization.
    Set to 0% for no margin (exact data bounds)." ), ) sig_datetime_format_s = gds.StringItem( _("DateTime format (s/min/h)"), default="%H:%M:%S", help=_( "Format string for datetime X-axis labels when using standard time " "units (s, min, h).
    Uses Python's strftime format codes " "(e.g., %H:%M:%S for hours:minutes:seconds)." ), ) sig_datetime_format_ms = gds.StringItem( _("DateTime format (ms/μs/ns)"), default="%H:%M:%S.%f", help=_( "Format string for datetime X-axis labels when using sub-second time " "units (ms, μs, ns).
    Uses Python's strftime format codes " "(e.g., %H:%M:%S.%f for hours:minutes:seconds.microseconds)." ), ) sig_shape_param = gds.ButtonItem( _("Results: edit shape styles"), edit_dataset_settings, icon="shapes.svg" ) sig_marker_param = gds.ButtonItem( _("Results: edit marker styles"), edit_dataset_settings, icon="markers.svg" ) _g1 = gds.EndGroup("") g2 = gds.BeginGroup(_("Images")).set_prop("display", icon="image.svg") ima_aspect_ratio_1_1 = gds.BoolItem( "", _("Lock aspect ratio to 1:1"), help=_( "If enabled, the aspect ratio of the image will be locked to 1:1.
    " "If disabled, the aspect ratio will be determined by the physical pixel " "size (this is the default and recommended setting)." ), ) ima_eliminate_outliers = gds.FloatItem( _("Eliminate outliers"), unit=_("%"), default=2.0, min=0.0, max=100.0, help=_( "Eliminate a percentage of the highest and lowest values
    " "of the image histogram - recommanded values are below 1%" ), ) ima_autoscale_margin_percent = gds.FloatItem( _("Autoscale margin"), unit=_("%"), default=0.2, min=0.0, max=50.0, help=_( "Percentage of margin to add around data when auto-scaling image " "plots.
    A value of 0.2% adds a small margin for better " "visualization.
    Set to 0% for no margin (exact data bounds)." ), ) ima_defaults = gds.ButtonItem( _("Default image visualization settings"), edit_default_image_settings, icon="image.svg", default=False, ) ima_shape_param = gds.ButtonItem( _("Results: edit shape styles"), edit_dataset_settings, icon="shapes.svg" ) ima_marker_param = gds.ButtonItem( _("Results: edit marker styles"), edit_dataset_settings, icon="markers.svg" ) _g2 = gds.EndGroup("") g3 = gds.BeginGroup(_("Results")).set_prop("display", icon="show_results.svg") max_shapes_to_draw = gds.IntItem( _("Maximum shapes to draw"), default=1000, min=1, help=_("Maximum number of geometry shapes to draw on plot."), ) max_cells_in_label = gds.IntItem( _("Maximum cells in label"), default=100, min=1, help=_( "Maximum number of table cells (rows × columns) to display " "in merged result label on plot." ), ) max_cols_in_label = gds.IntItem( _("Maximum columns in label"), default=15, min=1, help=_("Maximum number of columns to display in merged result label."), ) show_result_label = gds.BoolItem( _("Show the merged result label by default"), _("Result label"), default=True, help=_( "Show the merged result label on the plot by default. " "Can be toggled per-object using the checkbox in the Properties panel." ), ) _g3 = gds.EndGroup("") _end_view_tabs = gds.EndTabGroup("") # Generator yielding (param, section, option) tuples from configuration dictionary def _iter_conf( paramdict: dict[str, gds.DataSet], ) -> Generator[tuple[gds.DataSet, str, str], None, None]: """Iterate over configuration parameters""" confdict = Conf.to_dict() for section_name, section in confdict.items(): if section_name in paramdict: for option in section: param = paramdict[section_name] if hasattr(param, option): yield param, section_name, option def conf_to_datasets(paramdict: dict[str, gds.DataSet]) -> None: """Convert DataLab configuration to datasets""" for param, section, option in _iter_conf(paramdict): value = getattr(getattr(Conf, section), option).get() # ConfigParser automatically unescapes %% to % when reading, but to be safe # we ensure datetime format strings are properly unescaped for display if option in ("sig_datetime_format_s", "sig_datetime_format_ms"): value = value.replace("%%", "%") setattr(param, option, value) def datasets_to_conf(paramdict: dict[str, gds.DataSet]) -> None: """Convert datasets to DataLab configuration""" for param, section, option in _iter_conf(paramdict): value = getattr(param, option) # Escape % characters for datetime format strings (ConfigParser requirement) if option in ("sig_datetime_format_s", "sig_datetime_format_ms"): value = value.replace("%", "%%") getattr(getattr(Conf, section), option).set(value) RESTART_OPTIONS = ( ("process_isolation_enabled", _("Process isolation enable status")), ("rpc_server_enabled", _("RPC server enable status")), ("console_enabled", _("Console enable status")), ("plugins_enabled", _("Third-party plugins support")), ("plugins_path", _("Third-party plugins path")), ) def get_restart_items_values(paramdict: dict[str, gds.DataSet]) -> list: """Get restart items values""" values = [] for option, _name in RESTART_OPTIONS: for param, _section, _option in _iter_conf(paramdict): if option == _option: values.append(getattr(param, option)) return values def get_all_values(paramdict: dict[str, gds.DataSet]) -> list: """Get all values""" values = [] for param, _section, _option in _iter_conf(paramdict): value = getattr(param, _option) if isinstance(value, gds.DataSet): # For dataset-like options, get a serializable representation value = gds.dataset_to_json(value) values.append(value) return values def get_all_options(paramdict: dict[str, gds.DataSet]) -> list: """Get all options""" options = [] for _param, _section, _option in _iter_conf(paramdict): options.append(_option) return options def create_dataset_dict() -> dict[str, gds.DataSet]: """Create a dictionary of datasets for each settings tab, populate it from Conf.""" paramdict = { "main": MainSettings(_("General"), icon="libre-gui-settings.svg"), "proc": ProcSettings(_("Processing"), icon="libre-tech-ram.svg"), "view": ViewSettings(_("Visualization"), icon="visualization.svg"), "io": IOSettings(_("I/O"), icon="io.svg"), "console": ConsoleSettings(_("Console"), icon="console.svg"), } conf_to_datasets(paramdict) return paramdict def edit_settings(parent: QW.QWidget) -> list[str]: """Edit DataLab settings Args: parent: Parent widget Returns: List of changed option names """ paramdict = create_dataset_dict() before = get_restart_items_values(paramdict) all_values_before = get_all_values(paramdict) params = gds.DataSetGroup(paramdict.values(), title=_("Settings")) changed_options = [] if params.edit(parent=parent): after = get_restart_items_values(paramdict) if before != after: # List the options that were changed changed = [ item[1] for item, value in zip(RESTART_OPTIONS, before) if value != after[RESTART_OPTIONS.index(item)] ] # Show a message box to inform the user that a restart is required QW.QMessageBox.information( parent, _("Restart required"), _( "The following options have been changed:\n\n" "- %s\n\n" "A restart is required for these changes to take effect." ) % "\n- ".join(changed), ) datasets_to_conf(paramdict) all_values_after = get_all_values(paramdict) all_options = get_all_options(paramdict) if all_values_before != all_values_after: changed_options = [ option for option, value in zip(all_options, all_values_before) if value != all_values_after[all_options.index(option)] ] # Check for image default settings changes for vis_defaults in ("ima_defaults",): if getattr(paramdict["view"], vis_defaults): changed_options.append(vis_defaults) return changed_options DataLab-1.0.2/datalab/gui/tour.py000066400000000000000000000754031511411446000165270ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. # pylint: disable=invalid-name # Allows short reference names like x, y, ... """ Tour ==== The :mod:`datalab.gui.tour` module implements a tour of DataLab features. A dialog box is displayed when the user launches DataLab for the first time or when the user clicks on the "Show tour" entry in the "?" menu. The tour user experience is the following: - First, the DataLab main window is maximized, and it is grayed out (the whole window is covered with a gray area with an opacity of 50%). The user can not interact with the DataLab main window while the tour is running. - A first modal dialog box is displayed with a short description of DataLab, and two buttons: "Start" and "Close". If the user clicks on "Start", the tour starts. If the user clicks on "Close", the tour is not started and the dialog box is closed. - The tour is composed of several steps. Each step is a modal dialog box with a short description of a DataLab feature, and three buttons: "Previous", "Next" and "Close". If the user clicks on "Previous", the previous step is displayed. If the user clicks on "Next", the next step is displayed. If the user clicks on "Close", the tour is stopped and the dialog box is closed. - At each step, the dialog box is moved to the center of the DataLab main window (i.e. the center of the screen), and the feature described in the step is highlighted in the DataLab main window. The highlight is a red rectangle around the feature, and the feature is the only part of the DataLab main window that is not grayed out. - The last step of the tour is a modal dialog box with a conclusion message and two buttons: "Show tour again", "Close", and "Show demo". If the user clicks on "Show tour again", the tour starts again. If the user clicks on "Close", the tour is stopped and the dialog box is closed. If the user clicks on "Show demo", the demo is started. .. autoclass:: Tour :members: :inherited-members: """ from __future__ import annotations import abc import enum import os from collections.abc import Callable from typing import TYPE_CHECKING import numpy as np from guidata.configtools import get_icon, get_image_file_path from guidata.qthelpers import is_dark_theme from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from sigima.objects import create_image, create_signal from datalab.config import _ from datalab.env import execenv if TYPE_CHECKING: from datalab.gui.main import DLMainWindow class Cover(QW.QWidget): """ Widget that covers the main window with a gray area with an opacity of 50%. """ def __init__(self, parent: DLMainWindow) -> None: super().__init__(parent) self.setWindowFlags(QC.Qt.Tool | QC.Qt.FramelessWindowHint) self.setAttribute(QC.Qt.WA_TranslucentBackground) self.__opacity_factor = 1.0 # Widgets to be excluded from the grayed out area: self.__excluded_widgets: list[QW.QWidget] | None = None # Path to be grayed out: self.__path: QG.QPainterPath = QG.QPainterPath() def set_opacity_factor(self, opacity_factor: float) -> None: """ Set the opacity factor of the grayed out area. Args: opacity_factor: Opacity factor. """ self.__opacity_factor = opacity_factor def exclude(self, widgets: list[QW.QWidget]) -> None: """ Exclude widgets from the grayed out area. Args: widgets: Widgets to be excluded. """ self.__excluded_widgets = widgets def update_geometry(self) -> None: """ Update the geometry of the widget. """ if os.name == "nt": QW.QApplication.processEvents() self.setGeometry(self.parentWidget().geometry()) self.__path = QG.QPainterPath() # Path is defined as the rectangle of the main window minus the rectangles of # the excluded widgets: self.__path.addRect(QC.QRectF(self.parentWidget().rect())) if self.__excluded_widgets is not None: for widget in self.__excluded_widgets: widget.raise_() widget.show() geometry = widget.frameGeometry() width, height = geometry.width(), geometry.height() point = widget.mapTo(self.parentWidget(), QC.QPoint(0, 0)) x, y = point.x(), point.y() widget_path = QG.QPainterPath() widget_path.addRect(QC.QRectF(x, y, width, height)) self.__path -= QG.QPainterPath(widget_path) self.repaint() def showEvent(self, a0: QG.QShowEvent | None) -> None: """ Event handler for the "show" event. Args: a0: Show event. """ super().showEvent(a0) self.setGeometry(self.parentWidget().geometry()) def paintEvent(self, event: QG.QPaintEvent) -> None: """ Event handler for the "paint" event. Args: event: Paint event. """ super().paintEvent(event) painter = QG.QPainter(self) painter.setOpacity((0.75 if is_dark_theme() else 0.5) * self.__opacity_factor) painter.setBrush(QG.QBrush(QC.Qt.black)) painter.setPen(QC.Qt.NoPen) painter.drawPath(self.__path) class StepResult(enum.Enum): """ Result of a step. """ PREVIOUS = enum.auto() NEXT = enum.auto() CLOSE = enum.auto() DEMO = enum.auto() RESTART = enum.auto() class StepDialog(QW.QDialog): """ Base class for tour dialog boxes. Args: parent: Parent widget. step: Tour step. """ def __init__( self, parent: QW.QWidget, step: TourStep, ) -> None: super().__init__(parent) self.setWindowTitle(step.title) self.setWindowFlags(QC.Qt.Popup) self.setModal(True) self.step = step self.result: StepResult | None = None self.__btnmap: dict[QW.QPushButton, StepResult] = {} self.__btnlayout = QW.QHBoxLayout() self._setup_ui() def __btn(self, text: str, result: StepResult, default: bool = False) -> None: """ Create a button. Args: text: Button text. result: Result of the button. default: Default button. Defaults to False. """ btn = QW.QPushButton(text) btn.setAutoDefault(default) btn.setDefault(default) icon = { "<<": "rewind.svg", "<": "previous.svg", ">": "next.svg", "X": "stop.svg", }.get(text) if icon is not None: btn.setIcon(get_icon(icon)) btn.setText("") btn.setMinimumWidth(100) btn.clicked.connect(lambda: self.button_clicked(btn)) self.__btnmap[btn] = result self.__btnlayout.addWidget(btn) def __btn_spacing(self, spacing: int) -> None: """ Add spacing between buttons. Args: spacing: Spacing. """ self.__btnlayout.addSpacing(spacing) def __create_label( self, text: str, delta_fontsize: int, color: QC.Qt.GlobalColor, bold: bool = False, ) -> QW.QLabel: """ Create a label. Args: text: Label text. delta_fontsize: Delta font size. color: Text color. bold: Bold text. Returns: Label. """ label = QW.QLabel(text) label.setWordWrap(True) label.setAlignment(QC.Qt.AlignCenter) # Change font size for something bigger: font = label.font() font.setPointSize(font.pointSize() + delta_fontsize) label.setFont(font) # Set text color: palette = label.palette() palette.setColor(QG.QPalette.WindowText, color) label.setPalette(palette) # Set bold text: font = label.font() font.setBold(bold) return label def __create_horizontal_line(self) -> QW.QFrame: """ Create a horizontal line. Returns: Horizontal line. """ line = QW.QFrame() line.setFrameShape(QW.QFrame.HLine) line.setFrameShadow(QW.QFrame.Sunken) line.setLineWidth(1) line.setMidLineWidth(0) palette = line.palette() palette.setColor(QG.QPalette.WindowText, QC.Qt.lightGray) line.setPalette(palette) return line def _setup_ui(self) -> None: """ Setup the user interface. """ if self.step.step_type == "introduction": self.__btn_spacing(50) self.__btn(_("Start"), StepResult.NEXT, True) self.__btn(_("Close"), StepResult.CLOSE) self.__btn_spacing(50) elif self.step.step_type == "conclusion": self.__btn("<<", StepResult.RESTART) self.__btn("<", StepResult.PREVIOUS) self.__btn(_("Demo"), StepResult.DEMO) self.__btn("X", StepResult.CLOSE, True) else: self.__btn("<<", StepResult.RESTART) self.__btn("<", StepResult.PREVIOUS) self.__btn(">", StepResult.NEXT, True) self.__btn("X", StepResult.CLOSE) self._layout = QW.QVBoxLayout() if self.step.step_type in ("introduction", "conclusion"): logo = QW.QLabel() logo.setPixmap(QG.QPixmap(get_image_file_path("DataLab-Banner2-100.png"))) logo.setAlignment(QC.Qt.AlignCenter) self._layout.addWidget(logo) title_color = QC.Qt.lightGray if is_dark_theme() else QC.Qt.darkGray title = self.__create_label(self.step.title, 1, title_color, True) self._layout.addWidget(title) self._layout.addWidget(self.__create_horizontal_line()) label_color = QC.Qt.cyan if is_dark_theme() else QC.Qt.darkBlue label_dsize = 3 if self.step.step_type == "regular" else 4 label = self.__create_label(self.step.text, label_dsize, label_color) if self.step.step_type == "regular": label.setAlignment(QC.Qt.AlignLeft) self._layout.addWidget(label) self._layout.addSpacing(5) self._layout.addLayout(self.__btnlayout) if self.step.step_type == "introduction": self._layout.addSpacing(5) help_text = _( "Hit Enter to continue to the next step, or " "Esc to close the tour." ) help_label = self.__create_label(help_text, -1, title_color) help_label.setAlignment(QC.Qt.AlignLeft) self._layout.addWidget(help_label) self.setLayout(self._layout) def button_clicked(self, button: QW.QPushButton) -> None: """ Event handler for the "clicked" event on the buttons. Args: button: Button that was clicked. """ self.result = self.__btnmap[button] if self.result is StepResult.CLOSE: self.reject() else: self.accept() def reject(self) -> None: """ Event handler for the "reject" event. """ self.result = StepResult.CLOSE super().reject() def paintEvent(self, event: QG.QPaintEvent) -> None: """ Event handler for the "paint" event. Args: event: Paint event. """ super().paintEvent(event) painter = QG.QPainter(self) painter.setOpacity(0.5) painter.setBrush(QG.QBrush(QC.Qt.black)) painter.setPen(QC.Qt.NoPen) class TourStep: """ Tour step. Args: tour: Tour. title: Step title. text: Step text. widgets: Widgets to be highlighted. If None, no widget is highlighted, meaning that the step is probably an introduction or a conclusion. setup_callback: Callback function to be called before the step is displayed, which takes a single argument, the `DLMainWindow` instance. teardown_callback: Callback function to be called after the step is displayed, which takes a single argument, the `DLMainWindow` instance. step_type: Step type. Can be "regular", "introduction" or "conclusion". """ def __init__( self, tour: BaseTour, title: str, text: str, widgets: list[QW.QWidget] | None = None, setup_callback: Callable | None = None, teardown_callback: Callable | None = None, step_type: str = "regular", ) -> None: self.tour = tour self.title = title self.text = text self.widgets = widgets self.setup_callback = setup_callback self.teardown_callback = teardown_callback self.step_type = step_type assert step_type in ["regular", "introduction", "conclusion"] def show(self) -> StepResult: """ Show the step. Returns: Result of the step. """ if self.setup_callback is not None: self.setup_callback(self.tour.win) self.update_cover(self.tour.cover) dialog = StepDialog(self.tour.win, self) if not execenv.unattended: dialog.exec() elif self.step_type != "conclusion": dialog.result = StepResult.NEXT dialog.accept() else: dialog.result = StepResult.CLOSE dialog.reject() if self.teardown_callback is not None: self.teardown_callback(self.tour.win) return dialog.result def update_cover(self, cover: Cover) -> None: """ Update the cover widget. Args: cover: Cover widget. """ cover.set_opacity_factor(1.0 if self.step_type == "regular" else 0.7) cover.exclude(self.widgets) cover.update_geometry() class BaseTourMeta(type(QW.QWidget), abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class BaseTour(QW.QWidget, metaclass=BaseTourMeta): """ Base class for the tour of DataLab features. Args: win: DataLab main window. """ def __init__(self, win: DLMainWindow) -> None: super().__init__(win) self.win = win self._steps: list[TourStep] = [] self._current_step = 0 self.cover = Cover(win) self.cover.show() self.__window_geometry: tuple[tuple[int, int], tuple[int, int]] | None = None self.__window_prepared = False self.setup_tour(win) def __resize_window(self, factor: float) -> None: """ Resize the window so that it is centered on the screen and its size is `factor` times the size of the screen. Args: factor: Factor by which the size of the window is multiplied. """ desktop = QW.QApplication.desktop() screen = desktop.screenNumber(desktop.cursor().pos()) screen_geometry = desktop.screenGeometry(screen) width = int(screen_geometry.width() * factor) height = int(screen_geometry.height() * factor) self.win.resize(width, height) self.win.move(screen_geometry.center() - QC.QPoint(width // 2, height // 2)) def __save_window_geometry(self) -> None: """Save the window geometry (size and position).""" self.__window_geometry = self.win.saveGeometry() def __restore_window_geometry(self) -> None: """Restore the window geometry (size and position).""" if self.__window_geometry is not None: self.win.restoreGeometry(self.__window_geometry) @abc.abstractmethod def setup_tour(self, win: DLMainWindow) -> None: """ Setup the tour: add steps to the tour. """ @abc.abstractmethod def cleanup_tour(self, win: DLMainWindow) -> None: """ Cleanup the tour. """ def add_step( self, title: str, text: str, widgets: list[QW.QWidget] | None = None, setup_callback: Callable | None = None, teardown_callback: Callable | None = None, step_type: str | None = None, ) -> None: """ Add a step to the tour. Args: title: Step title. text: Step text. widgets: Widgets to be highlighted. If None, no widget is highlighted, meaning that the step is probably an introduction or a conclusion. setup_callback: Callback function to be called before the step is displayed, which takes a single argument, the `DLMainWindow` instance. teardown_callback: Callback function to be called after the step is displayed, which takes a single argument, the `DLMainWindow` instance. step_type: Step type. Can be "regular", "introduction" or "conclusion". Defaults to None. """ if step_type is None: if self._steps: step_type = "regular" else: step_type = "introduction" step = TourStep( self, title, text, widgets, setup_callback, teardown_callback, step_type ) self._steps.append(step) def show_current_step(self) -> None: """ Show the current step. """ step = self._steps[self._current_step] result = step.show() if result is StepResult.PREVIOUS: self.previous_step() elif result is StepResult.NEXT: self.next_step() elif result is StepResult.CLOSE: self.end() elif result is StepResult.DEMO: self.end() # pylint: disable=import-outside-toplevel from datalab.tests.scenarios import demo demo.play_demo(self.win) elif result is StepResult.RESTART: self.start() else: raise RuntimeError(f"Unknown result: {result}") def start(self) -> None: """ Start the tour. """ self._current_step = 0 self.show_current_step() def end(self) -> None: """ End the tour. """ self.cover.close() self.cleanup_tour(self.win) self.__restore_window_geometry() def next_step(self) -> None: """ Go to the next step. """ if self._current_step == 0 and not self.__window_prepared: self.__save_window_geometry() self.__resize_window(0.7) self.cover.update_geometry() self.__window_prepared = True self._current_step += 1 self.show_current_step() def previous_step(self) -> None: """ Go to the previous step. """ self._current_step -= 1 self.show_current_step() class Tour(BaseTour): """ Tour of DataLab features. Args: win: DataLab main window. """ def prepare_signalpanel(self, win: DLMainWindow) -> None: """ Prepare the signal panel. Args: win: DataLab main window. """ # Create a signal: x = np.linspace(0, 10, 100) y = np.sin(x) sig = create_signal(_("Test signal, for the tour"), x, y) win.add_object(sig) win.set_current_panel("signal") def prepare_imagepanel(self, win: DLMainWindow) -> None: """ Prepare the image panel. Args: win: DataLab main window. """ # Create an image: x = np.linspace(0, 10, 100) y = np.linspace(0, 10, 100) xx, yy = np.meshgrid(x, y) zz = np.sin(xx) * np.cos(yy) img = create_image(_("Test image, for the tour"), zz) win.add_object(img) win.set_current_panel("image") def popup_menu(self, win: DLMainWindow, menu: QW.QMenu) -> None: """ Popup a menu. Args: win: DataLab main window. menu_name: Name of the menu to popup. """ menu.popup(win.mapToGlobal(QC.QPoint(50, 50))) def cleanup_tour(self, win: DLMainWindow) -> None: """ Cleanup the tour. Args: win: DataLab main window. """ if len(win.signalpanel.objmodel) == 1: win.signalpanel.remove_all_objects() else: win.signalpanel.remove_object() if len(win.imagepanel.objmodel) == 1: win.imagepanel.remove_all_objects() else: win.imagepanel.remove_object() def setup_tour(self, win: DLMainWindow) -> None: """ Setup the tour: add steps to the tour. """ self.add_step( _("Welcome to DataLab!"), _("This tour will guide you through the main features of DataLab."), ) self.add_step( _("DataLab main window"), _( "This is the main window of DataLab. It is composed of several parts " "that we will describe in the following steps." ), ) self.add_step( _("DataLab main window"), _( "Menus and toolbars regroup the main actions that can be performed " "in DataLab. Their content is adapted to the current panel, as we " "will see in the following steps." ), [ win.menuBar(), win.main_toolbar, win.signalpanel_toolbar, win.imagepanel_toolbar, win.signalpanel.acthandler.view_toolbar, win.imagepanel.acthandler.view_toolbar, ], ) self.add_step( _("DataLab main window"), _( "The main window is composed of two main panels: the Signal Panel, " "and the Image Panel.
    " "Switching between panels is done using the highlighted tabs." ), [win.tabwidget.tabBar()], ) self.add_step( _("Signal Panel"), _( "The Signal Panel is used to manage 1D signals." "It is composed of the elements shown in the following steps." ), ) self.add_step( _("Signal Panel") + " – " + _("List and properties"), _( "In the highlighted area, signals are listed at the top, and their " "properties may be displayed and edited at the bottom.

    " "Signals are numbered (but may be reorganized) and put together in " "numbered groups." ), [win.tabwidget.tabBar(), win.signalpanel], self.prepare_signalpanel, ) self.add_step( _("Signal Panel") + " – " + _("View"), _( "Signals are plotted in the Signal View.

    " "Curves may be customized using context menus or the vertical " "toolbar on the left (appearance settings are saved in the " "signal metadata)." ), [win.docks[win.signalpanel]], ) self.add_step( _("Signal Panel") + " – " + _("File menu"), _( "The File menu contains actions to " "import and export signals individually (various formats) or " "to save or restore the whole workspace (HDF5 files)." ), [win.menuBar()], lambda win: self.popup_menu(win, win.file_menu), lambda win: win.file_menu.hide(), ) self.add_step( _("Signal Panel") + " – " + _("Create menu"), _( "The Create menu contains actions to create new signals " "from various models (Gaussian, sine, etc.)." ), [win.menuBar()], lambda win: self.popup_menu(win, win.create_menu), lambda win: win.create_menu.hide(), ) self.add_step( _("Signal Panel") + " – " + _("Edit menu"), _( "The Edit menu contains actions to edit signals individually " "or in groups." ), [win.menuBar()], lambda win: self.popup_menu(win, win.edit_menu), lambda win: win.edit_menu.hide(), ) self.add_step( _("Signal Panel") + " – " + _("Operations menu"), _( "The Operations menu is focused on arithmetic operations, " "basic mathematical functions or data type conversions." ), [win.menuBar()], lambda win: self.popup_menu(win, win.operation_menu), lambda win: win.operation_menu.hide(), ) self.add_step( _("Signal Panel") + " – " + _("Processing menu"), _("The Processing menu regroups 1->1 signal processing actions."), [win.menuBar()], lambda win: self.popup_menu(win, win.processing_menu), lambda win: win.processing_menu.hide(), ) self.add_step( _("Signal Panel") + " – " + _("Analysis menu"), _( "The Analysis menu regroups 1->0 signal computing actions " "(that is, actions that do not modify the signals, but compute " "a result, e.g. scalar values), with optional ROI selection." ), [win.menuBar()], lambda win: self.popup_menu(win, win.analysis_menu), lambda win: win.analysis_menu.hide(), ) self.add_step( _("Image Panel"), _( "The Image Panel is used to manage 2D images. It is composed " "of the elements shown in the following steps." ), [], lambda win: win.set_current_panel("image"), ) self.add_step( _("Image Panel") + " – " + _("List and properties"), _( "In the highlighted area, images are listed at the top, and their " "properties may be displayed and edited at the bottom.

    " "Images are numbered (but may be reorganized) and put together in " "numbered groups." ), [win.tabwidget.tabBar(), win.imagepanel], self.prepare_imagepanel, ) self.add_step( _("Image Panel") + " – " + _("View"), _( "Images are shown in the Image View.

    " "The displayed images may be customized using context menus " "or the vertical toolbar on the left (appearance settings " "are saved in the image metadata)." ), [win.docks[win.imagepanel]], ) self.add_step( _("Image Panel") + " – " + _("File menu"), _( "The File menu contains actions to " "import and export images individually (various formats) or " "to save or restore the whole workspace (HDF5 files)." ), [win.menuBar()], lambda win: self.popup_menu(win, win.file_menu), lambda win: win.file_menu.hide(), ) self.add_step( _("Image Panel") + " – " + _("Create menu"), _( "The Create menu contains actions to create new images " "from various models (Gaussian, checkerboard, etc.)." ), [win.menuBar()], lambda win: self.popup_menu(win, win.create_menu), lambda win: win.create_menu.hide(), ) self.add_step( _("Image Panel") + " – " + _("Edit menu"), _( "The Edit menu contains actions to edit images individually " "or in groups." ), [win.menuBar()], lambda win: self.popup_menu(win, win.edit_menu), lambda win: win.edit_menu.hide(), ) self.add_step( _("Image Panel") + " – " + _("Operations menu"), _( "The Operations menu is focused on arithmetic operations, " "data type conversions, pixel binning resize, intensity profiles..." ), [win.menuBar()], lambda win: self.popup_menu(win, win.operation_menu), lambda win: win.operation_menu.hide(), ) self.add_step( _("Image Panel") + " – " + _("Processing menu"), _( "The Processing menu regroups 1->1 image processing actions " "(that is, actions that modify the images)." ), [win.menuBar()], lambda win: self.popup_menu(win, win.processing_menu), lambda win: win.processing_menu.hide(), ) self.add_step( _("Image Panel") + " – " + _("Analysis menu"), _( "The Analysis menu regroups 1->0 image computing actions " "(that is, actions that do not modify the images, but compute " "a result, e.g. circle coordinates), with optional ROI selection." ), [win.menuBar()], lambda win: self.popup_menu(win, win.analysis_menu), lambda win: win.analysis_menu.hide(), ) self.add_step( _("Extensions"), _( "DataLab is designed to be easily extended with new features, " "by using Macros, Plugins or Remote Control." "

    The common point between these mechanisms is that " "they are all relying on Python scripts and the DataLab API." ), ) self.add_step( _("Extensions") + " – " + _("Macros"), _( "The Macro Panel allows to create, edit and run macros.
    " "Macros are saved together with the DataLab workspace (HDF5 file)." ), [win.docks[win.macropanel]], lambda win: win.set_current_panel("macro"), lambda win: win.set_current_panel("signal"), ) self.add_step( _("Extensions") + " – " + _("Plugins"), _( "The Plugins menu regroups features that are not part of " "the core of DataLab, but that are provided as plugins.
    " "(See the documentation for more information about plugins.)" ), [win.menuBar()], lambda win: self.popup_menu(win, win.plugins_menu), lambda win: win.plugins_menu.hide(), ) self.add_step( _("This is the end of the tour!"), _("You can show the tour again, or close this dialog box."), step_type="conclusion", ) def start(win: DLMainWindow) -> None: """ Start the tour of DataLab features. Args: win: DataLab main window. """ tour = Tour(win) tour.start() DataLab-1.0.2/datalab/h5/000077500000000000000000000000001511411446000147035ustar00rootroot00000000000000DataLab-1.0.2/datalab/h5/__init__.py000066400000000000000000000004411511411446000170130ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab HDF5 I/O module """ # pylint: disable=unused-import # Registering dynamic I/O features: from datalab.h5 import generic # noqa: F401 from datalab.h5.common import H5Importer # noqa: F401 DataLab-1.0.2/datalab/h5/common.py000066400000000000000000000233421511411446000165510ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Common tools for exogenous HDF5 format support """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import abc import os.path as osp from collections.abc import Callable import h5py import numpy as np from guidata.utils.misc import to_string from sigima.io.common.converters import convert_array_to_valid_dtype from sigima.objects import ImageObj, SignalObj from datalab.config import Conf def data_to_xy(data: np.ndarray) -> list[np.ndarray]: """Convert 2-D array into a list of 1-D array data (x, y, dx, dy). This is useful for importing data and creating a DataLab signal with it. Args: data (numpy.ndarray): 2-D array of data Returns: list[np.ndarray]: list of 1-D array data (x, y, dx, dy) """ if len(data.ravel()) == len(data): return np.arange(len(data)), data.ravel(), None, None rows, cols = data.shape for colnb in (2, 3, 4): if cols == colnb and rows > colnb: data = data.T break if len(data) == 1: data = data.T if len(data) not in (2, 3, 4): raise ValueError(f"Invalid data: len(data)={len(data)} (expected 2, 3 or 4)") x, y = data[:2] dx, dy = None, None if len(data) == 3: dy = data[2] if len(data) == 4: dx, dy = data[2:] return x, y, dx, dy class BaseNode(metaclass=abc.ABCMeta): """Object representing a HDF5 node""" IS_ARRAY = False def __init__(self, h5file, dname): self.h5file = h5file self.dset = h5file[dname] self.metadata = {} self.__obj = None self.children = [] self.uint32_wng = False @property def id(self): """Return node id""" return self.dset.name @property def name(self): """Return node name, constructed from dataset name""" return to_string(self.dset.name).split("/")[-1] @property def data(self): """Data associated to node, if available""" return None @property def icon_name(self): """Icon name associated to node""" @property def shape_str(self): """Return string representation of node shape, if any""" return "" @property def dtype_str(self): """Return string representation of node data type, if any""" return "" @property def text(self): """Return node textual representation""" return "" @property def description(self): """Return node description""" return "" @classmethod def match(cls, dset): """Return True if h5 dataset match node pattern""" def is_supported(self) -> bool: """Return True if node is associated to supported data""" return False def create_native_object(self): """Create native object, if supported""" return None def get_native_object(self): """Return native object, if supported""" if self.__obj is None: obj = self.create_native_object() # pylint: disable=assignment-from-none if obj is not None: self.__process_metadata(obj) self.__obj = obj return self.__obj def collect_attributes(self): """Collect attributes from node""" for key, value in self.dset.attrs.items(): if isinstance(value, bytes): value = to_string(value) if isinstance(value, (np.ndarray, str, float, int, bool)) or np.isscalar( value ): self.metadata[key] = value def __process_metadata(self, obj): """Process metadata from dataset to obj""" obj.reset_metadata_to_defaults() obj.set_metadata_option("HDF5Path", self.h5file.filename) obj.set_metadata_option("HDF5Dataset", self.id) obj.metadata.update(self.metadata) @property def object_title(self): """Return signal/image object title""" if Conf.io.h5_fullpath_in_title.get(): title = self.id else: title = self.name if Conf.io.h5_fname_in_title.get(): title += f" ({osp.basename(self.h5file.filename)})" return title def set_signal_data(self, obj: SignalObj) -> None: """Set signal data (handles various issues)""" data = self.data if data.dtype not in (float, np.complex128): data = np.array(data, dtype=float) data = convert_array_to_valid_dtype(data, SignalObj.VALID_DTYPES) if len(data.shape) == 1: obj.set_xydata(np.arange(data.size), data) else: x, y, dx, dy = data_to_xy(data) obj.set_xydata(x, y, dx, dy) def set_image_data(self, obj: ImageObj) -> None: """Set image data (handles various issues)""" data = self.data if data.dtype == np.uint32: self.uint32_wng = data.max() > np.iinfo(np.int32).max clipped_data = data.clip(0, np.iinfo(np.int32).max) data = np.array(clipped_data, dtype=np.int32) obj.data = convert_array_to_valid_dtype(data, ImageObj.VALID_DTYPES) class H5Importer: """DataLab HDF5 importer class""" def __init__(self, filename): self.h5file = h5py.File(filename) self.__nodes = {} self.root = RootNode(self.h5file) self.__nodes[self.root.id] = self.root self.root.collect_children(self.__nodes) NODE_FACTORY.run_post_triggers(self) @property def nodes(self): """Return all nodes""" return self.__nodes.values() def get(self, node_id: str): """Return node associated to id""" return self.__nodes[node_id] def get_relative(self, node: BaseNode, relpath: str, ancestor: int = 0): """Return node using relative path to another node""" path = "/" + ( "/".join(node.id.split("/")[:-ancestor]) + "/" + relpath.strip("/") ).strip("/") return self.__nodes[path] def close(self): """Close HDF5 file""" self.__nodes = {} self.h5file.close() class NodeFactory: """Factory for node classes""" def __init__(self): self.__ignored_datasets = [] self.__generic_classes = [] self.__thirdparty_classes = [] self.__post_triggers = {} def add_ignored_datasets(self, names): """Add h5 dataset name to ignore list""" self.__ignored_datasets.extend(names) def add_post_trigger(self, nodecls: BaseNode, callback: Callable): """Add post trigger function, to be called at the end of the collect process. Callbacks take only one argument: H5Importer instance.""" triggers = self.__post_triggers.setdefault(nodecls, []) triggers.append(callback) def register(self, cls, is_generic=False): """Register node class. Generic classes are processed after specific classes (as a fallback solution)""" if is_generic: self.__generic_classes.append(cls) else: self.__thirdparty_classes.append(cls) def get(self, dset): """Return node class that matches h5 dataset""" for name in to_string(dset.name).split("/"): if name in self.__ignored_datasets: return None for cls in self.__thirdparty_classes + self.__generic_classes: try: if cls.match(dset): return cls except (UnicodeDecodeError, TypeError, ValueError, OSError) as exc: # Skip classes that can't match this dataset due to various issues print( f"Warning: Class {cls.__name__} can't match dataset " f"'{dset.name}': {exc}" ) continue if isinstance(dset, h5py.Group): return GroupNode return None def run_post_triggers(self, importer: H5Importer): """Run post-collect callbacks""" for node in importer.nodes: for nodecls, triggers in self.__post_triggers.items(): if isinstance(node, nodecls): for func in triggers: func(node, importer) NODE_FACTORY = NodeFactory() class GroupNode(BaseNode): """Object representing a HDF5 group node""" @property def icon_name(self): """Icon name associated to node""" return "h5group.svg" def collect_children(self, node_dict: dict[str, BaseNode]): """Construct tree""" for dset in self.dset.values(): try: child_cls = NODE_FACTORY.get(dset) if child_cls is not None: child = child_cls(self.h5file, dset.name) node_dict[child.id] = child self.children.append(child) if isinstance(child, GroupNode): child.collect_children(node_dict) child.collect_attributes() except (UnicodeDecodeError, TypeError, ValueError, KeyError) as exc: # Skip datasets that can't be processed due to various issues print(f"Warning: Skipping dataset '{dset.name}' due to error: {exc}") continue class RootNode(GroupNode): """Object representing a HDF5 root node""" def __init__(self, h5file): super().__init__(h5file, "/") @property def icon_name(self): """Icon name associated to node""" return "h5file.svg" @property def name(self): """Return node name, constructed from dataset name""" return osp.basename(self.h5file.filename) @property def description(self): """Return node description""" return self.h5file.filename DataLab-1.0.2/datalab/h5/generic.py000066400000000000000000000472751511411446000167100ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Generic HDF5 format support """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... import h5py import numpy as np from guidata.utils.misc import to_string from sigima.objects import create_image, create_signal from datalab.h5 import common, utils # ============================================================================= # Encoding and Data Reading Utilities # ============================================================================= def safe_decode_bytes(data, fallback=""): """Safely decode bytes to string using multiple encoding strategies.""" if isinstance(data, str): return data if not isinstance(data, bytes): return str(data) # Try encodings in order of preference for encoding in ["utf-8", "latin1", "cp1252", "iso-8859-1", "ascii"]: try: decoded = data.decode(encoding) # For legacy encodings, validate the result looks reasonable if encoding in ["latin1", "cp1252", "iso-8859-1"]: if _is_reasonable_text(decoded): return decoded else: return decoded except (UnicodeDecodeError, UnicodeError): continue # Final fallback with replacement characters try: return data.decode("utf-8", errors="replace") except Exception: # pylint: disable=broad-except return fallback def _is_reasonable_text(text): """Check if decoded text looks reasonable (mostly printable).""" if not text: return True printable_chars = sum(1 for c in text if c.isprintable() or c.isspace()) ratio = printable_chars / len(text) # Accept if mostly printable or short enough to be likely text return ratio >= 0.8 or len(text) < 20 def safe_read_dataset(dset, fallback_data=None): """Safely read HDF5 dataset with encoding error handling.""" try: return dset[()] except UnicodeDecodeError: # Try alternative reading strategies for problematic encodings return _try_alternative_read(dset, fallback_data) except (TypeError, ValueError, OSError): return fallback_data def _try_alternative_read(dset, fallback_data): """Try alternative strategies to read datasets with encoding issues.""" strategies = [ lambda d: d.asstr()[()], # Try string conversion lambda d: d.astype("S")[()], # Try reading as bytes ] for strategy in strategies: try: return strategy(dset) except Exception: # pylint: disable=broad-except continue return fallback_data # ============================================================================= # Text Formatting Utilities # ============================================================================= def format_text_data(data): """Format various types of data for text display.""" if data is None: return "" try: return to_string(data) except (UnicodeDecodeError, UnicodeError): return _handle_encoding_issues(data) def _handle_encoding_issues(data): """Handle data with encoding issues.""" if isinstance(data, bytes): return safe_decode_bytes(data) if isinstance(data, np.ndarray): if data.dtype.kind in ["S", "a", "U"]: # String arrays return _format_string_array(data) if data.dtype.names: # Compound data return _format_compound_data(data) return f"" def _format_string_array(data): """Format string arrays with encoding handling.""" try: if data.size == 1: return safe_decode_bytes(data.item()) # Show first few elements items = [] for i, item in enumerate(data.flat): if i >= 5: items.append("...") break items.append(safe_decode_bytes(item)) return f"[{', '.join(items)}]" except Exception: # pylint: disable=broad-except return f"" def _format_compound_data(data): """Format compound data with encoding handling.""" try: result_parts = [] for field_name in data.dtype.names: field_data = data[field_name] if hasattr(field_data, "item"): field_data = field_data.item() if isinstance(field_data, bytes): field_value = safe_decode_bytes(field_data) else: field_value = str(field_data) result_parts.append(f"{field_name}: {field_value}") return f"({', '.join(result_parts)})" except Exception: # pylint: disable=broad-except return f"" # ============================================================================= # Base Node Class # ============================================================================= class BaseGenericNode(common.BaseNode): """Base class for generic HDF5 data nodes with encoding support.""" @classmethod def match(cls, dset): """Return True if h5 dataset matches this node pattern.""" return not isinstance(dset, h5py.Group) @property def icon_name(self): """Icon name associated to node.""" return "h5scalar.svg" @property def data(self): """Data associated to node, if available.""" return safe_read_dataset(self.dset, fallback_data=None) @property def dtype_str(self): """Return string representation of node data type.""" try: return str(self.dset.dtype) except (UnicodeDecodeError, TypeError, ValueError): if self.data is None: return "unknown" try: return str(self.data.dtype) except Exception: # pylint: disable=broad-except return "unknown" @property def text(self): """Return node textual representation.""" return format_text_data(self.data) # ============================================================================= # Specialized Node Classes # ============================================================================= class GenericScalarNode(BaseGenericNode): """Node for scalar HDF5 data.""" @classmethod def match(cls, dset): """Match scalar numeric data.""" if not super().match(dset): return False data = safe_read_dataset(dset) return ( data is not None and isinstance(data, np.generic) and utils.is_supported_num_dtype(data) ) class GenericTextNode(BaseGenericNode): """Node for text/string HDF5 data.""" @classmethod def match(cls, dset): """Match text or string data.""" if not super().match(dset): return False data = safe_read_dataset(dset) if data is None: # Try to match based on dtype for unreadable data try: dtype = dset.dtype return dtype.kind in ["S", "a", "U"] or "str" in str(dtype) except Exception: # pylint: disable=broad-except return False return isinstance(data, bytes) or utils.is_supported_str_dtype(data) @property def dtype_str(self): """Return simplified dtype for text data.""" return "string" @property def text(self): """Return formatted text with special handling for single arrays.""" if self.data is None: return "" try: if utils.is_single_str_array(self.data): item = self.data[0] return safe_decode_bytes(item) if isinstance(item, bytes) else str(item) return format_text_data(self.data) except (UnicodeDecodeError, UnicodeError): return _handle_text_encoding_issues(self.data) def _handle_text_encoding_issues(data): """Handle encoding issues specific to text nodes.""" if isinstance(data, bytes): return safe_decode_bytes(data) if isinstance(data, np.ndarray) and data.dtype.kind in ["S", "a"]: try: if data.size == 1: return safe_decode_bytes(data.item()) decoded = [safe_decode_bytes(item) for item in data.flat] return str(decoded[:10]) # Show first 10 elements except Exception: # pylint: disable=broad-except return f"" return "" class GenericArrayNode(BaseGenericNode): """Node for array HDF5 data, including numeric arrays from compound data.""" IS_ARRAY = True @classmethod def match(cls, dset): """Match numeric array data, including convertible compound data.""" if not super().match(dset): return False data = safe_read_dataset(dset) if data is None: return False # First check direct numeric arrays if ( utils.is_supported_num_dtype(data) and isinstance(data, np.ndarray) and len(data.shape) in (1, 2) ): return True # Then check compound data that can be converted to numeric arrays if ( isinstance(data, np.ndarray) and hasattr(data.dtype, "names") and data.dtype.names is not None ): return cls._can_convert_compound_to_numeric(data) return False @classmethod def _can_convert_compound_to_numeric(cls, data): """Check if compound data can be converted to a supported numeric array.""" try: numeric_array = cls.extract_numeric_from_compound(data) return ( numeric_array is not None and utils.is_supported_num_dtype(numeric_array) and isinstance(numeric_array, np.ndarray) and len(numeric_array.shape) in (1, 2) ) except Exception: # pylint: disable=broad-except return False @classmethod def extract_numeric_from_compound(cls, data): """Extract a numeric array from compound data.""" if not (hasattr(data.dtype, "names") and data.dtype.names): return None # Find ALL fields and check if they are numeric all_fields = list(data.dtype.names) numeric_fields = [] for field_name in all_fields: field_dtype = data.dtype.fields[field_name][0] if np.issubdtype(field_dtype, np.number): numeric_fields.append(field_name) # Only convert if ALL fields are numeric (preserve all information) # or if there's a single numeric field and no important string data if len(numeric_fields) == 0: return None if len(numeric_fields) != len(all_fields): # Mixed data - check if non-numeric fields contain meaningful data for field_name in all_fields: if field_name not in numeric_fields: field_data = data[field_name] # If there's meaningful string data, don't convert if cls._has_meaningful_string_data(field_data): return None try: # If single numeric field, extract it directly if len(numeric_fields) == 1: return data[numeric_fields[0]] # Multiple numeric fields: stack them if compatible shapes field_data = [data[field] for field in numeric_fields] # Check if all fields have the same shape shapes = [arr.shape for arr in field_data] if len(set(shapes)) == 1: # Stack along new axis to create 2D array return np.stack(field_data, axis=-1) except Exception: # pylint: disable=broad-except pass return None @classmethod def _has_meaningful_string_data(cls, field_data): """Check if string field contains meaningful data worth preserving.""" try: if hasattr(field_data, "flat"): # Check if most entries are non-empty and meaningful non_empty_count = 0 for item in field_data.flat: if isinstance(item, bytes): decoded = item.decode("utf-8", errors="ignore").strip() if decoded and len(decoded) > 0: non_empty_count += 1 elif isinstance(item, str) and item.strip(): non_empty_count += 1 # If most entries have meaningful content, preserve it return non_empty_count / field_data.size > 0.5 return True # Default to preserving unknown string data except Exception: # pylint: disable=broad-except return True # Conservative: preserve if we can't determine @property def data(self): """Data associated to node, if available.""" raw_data = safe_read_dataset(self.dset, fallback_data=None) # If this is compound data, try to extract numeric array if ( raw_data is not None and isinstance(raw_data, np.ndarray) and hasattr(raw_data.dtype, "names") and raw_data.dtype.names is not None ): numeric_data = self.extract_numeric_from_compound(raw_data) if numeric_data is not None: return numeric_data return raw_data def is_supported(self) -> bool: """Return True if node is associated to supported data""" return self.data.size > 1 @property def __is_signal(self): """Return True if array represents a signal""" shape = self.data.shape return len(shape) == 1 or shape[0] in (1, 2) or shape[1] in (1, 2) @property def icon_name(self): """Icon name associated to node""" if self.is_supported(): return "signal.svg" if self.__is_signal else "image.svg" return "h5array.svg" @property def shape_str(self): """Return string representation of node shape, if any""" return " x ".join([str(size) for size in self.data.shape]) @property def dtype_str(self): """Return string representation of node data type, if any""" return str(self.data.dtype) @property def text(self): """Return node textual representation""" return str(self.data) def create_native_object(self): """Create native object, if supported""" if self.__is_signal: obj = create_signal(self.object_title) try: self.set_signal_data(obj) except ValueError: obj = None else: obj = create_image(self.object_title) try: self.set_image_data(obj) except ValueError: obj = None return obj class GenericCompoundNode(BaseGenericNode): """Node for compound/structured HDF5 data that can't convert to numeric arrays.""" IS_ARRAY = True @classmethod def match(cls, dset): """Match compound/structured data that cannot be converted to numeric arrays.""" if not super().match(dset): return False data = safe_read_dataset(dset) if data is None: # Try to match based on dtype if we can't read the data try: return dset.dtype.names is not None except Exception: # pylint: disable=broad-except return False # Check if it's compound data (structured array) if not ( isinstance(data, np.ndarray) and hasattr(data.dtype, "names") and data.dtype.names is not None ): return False # IMPORTANT: Only match if GenericArrayNode cannot handle this data # Try to convert to a numeric array first if cls._can_convert_to_numeric_array(data): return False # Let GenericArrayNode handle it return True # We handle compound data that can't be converted @classmethod def _can_convert_to_numeric_array(cls, data): """Check if compound data can be converted to a numeric array.""" try: # Try to extract numeric fields and create a pure numeric array numeric_array = cls.extract_numeric_array(data) if numeric_array is None: return False # Check if the resulting array would be supported by GenericArrayNode return ( utils.is_supported_num_dtype(numeric_array) and isinstance(numeric_array, np.ndarray) and len(numeric_array.shape) in (1, 2) ) except Exception: # pylint: disable=broad-except return False @classmethod def extract_numeric_array(cls, data): """Try to extract a pure numeric array from compound data.""" # Use the same logic as GenericArrayNode return GenericArrayNode.extract_numeric_from_compound(data) @property def dtype_str(self): """Return detailed compound dtype information.""" try: dtype = self.dset.dtype if dtype.names: field_info = [] for name in dtype.names: field_dtype = dtype.fields[name][0] field_info.append(f"{name}: {field_dtype}") return f"compound({', '.join(field_info)})" return str(dtype) except Exception: # pylint: disable=broad-except return super().dtype_str @property def text(self): """Return formatted compound data.""" if self.data is None: return "" try: return self._format_compound_data() except Exception: # pylint: disable=broad-except return f"" def _format_compound_data(self): """Format compound data for display.""" if not (hasattr(self.data.dtype, "names") and self.data.dtype.names): return super().text if self.data.size == 1: return self._format_single_record() return self._format_multiple_records() def _format_single_record(self): """Format a single compound record.""" parts = [] for field_name in self.data.dtype.names: field_value = self.data[field_name].item() if isinstance(field_value, bytes): field_value = safe_decode_bytes(field_value) parts.append(f"{field_name}: {field_value}") return f"({', '.join(parts)})" def _format_multiple_records(self): """Format multiple compound records.""" records = [] for i, record in enumerate(self.data.flat): if i >= 3: # Show max 3 records records.append("...") break parts = [] for field_name in self.data.dtype.names: field_value = record[field_name] if isinstance(field_value, bytes): field_value = safe_decode_bytes(field_value) parts.append(f"{field_name}: {field_value}") records.append(f"({', '.join(parts)})") return f"[{', '.join(records)}]" # ============================================================================= # Node Registration # ============================================================================= # Register all node types with the factory common.NODE_FACTORY.register(GenericScalarNode, is_generic=True) common.NODE_FACTORY.register(GenericTextNode, is_generic=True) common.NODE_FACTORY.register(GenericArrayNode, is_generic=True) common.NODE_FACTORY.register(GenericCompoundNode, is_generic=True) DataLab-1.0.2/datalab/h5/native.py000066400000000000000000000016701511411446000165470ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Native HDF5 I/O module """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from guidata.io import HDF5Reader, HDF5Writer import datalab DATALAB_VERSION_NAME = "DataLab_Version" class NativeH5Writer(HDF5Writer): """DataLab signal/image objects HDF5 guidata Dataset Writer class Args: filename (str): HDF5 file name """ def __init__(self, filename: str) -> None: super().__init__(filename) self.h5[DATALAB_VERSION_NAME] = datalab.__version__ class NativeH5Reader(HDF5Reader): """DataLab signal/image objects HDF5 guidata dataset Writer class Args: filename (str): HDF5 file name """ def __init__(self, filename: str) -> None: super().__init__(filename) self.version = self.h5[DATALAB_VERSION_NAME] DataLab-1.0.2/datalab/h5/utils.py000066400000000000000000000053131511411446000164170ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Utilities for exogenous HDF5 format support """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... import numpy as np from guidata.utils.misc import to_string def fix_ldata(fuzzy): """Fix label data""" if fuzzy is not None: if fuzzy and isinstance(fuzzy, np.void) and len(fuzzy) > 1: # Shouldn't happen (invalid LMJ fmt) fuzzy = fuzzy[0] if isinstance(fuzzy, (np.bytes_, bytes)): fuzzy = to_string(fuzzy) if isinstance(fuzzy, str): return fuzzy return "" def fix_ndata(fuzzy): """Fix numeric data""" if fuzzy is not None: if fuzzy and isinstance(fuzzy, np.void) and len(fuzzy) > 1: # Shouldn't happen (invalid LMJ fmt) fuzzy = fuzzy[0] try: if float(fuzzy) == int(fuzzy): return int(fuzzy) return float(fuzzy) except (TypeError, ValueError): pass return None def process_scalar_value(dset, name, callback): """Process dataset numeric/str value `name`""" try: scdata = dset[name][()] if isinstance(scdata, np.ndarray): scdata = scdata[0] if scdata is not None: return callback(scdata) except (KeyError, ValueError): pass return None def process_label(dset, name): """Process dataset label `name`""" try: ldata = dset[name][()] if ldata is not None: xldata, yldata, zldata = "", "", "" if len(ldata) == 2: xldata, yldata = ldata elif len(ldata) == 3: xldata, yldata, zldata = ldata return fix_ldata(xldata), fix_ldata(yldata), fix_ldata(zldata) except KeyError: pass return "", "", "" def process_xy_values(dset, name): """Process dataset x,y values `name`""" try: ldata = dset[name][()] if ldata is not None: return fix_ndata(ldata[0]), fix_ndata(ldata[1]) except (KeyError, ValueError): pass return None, None def is_supported_num_dtype(data): """Return True if data type is a numerical type supported by DataLab""" return data.dtype.name.startswith(("int", "uint", "float", "complex")) def is_single_str_array(data): """Return True if data is a single-item string array""" return ( isinstance(data, np.generic) and data.shape == (1,) and isinstance(data[0], str) ) def is_supported_str_dtype(data): """Return True if data type is a string type supported by preview""" return data.dtype.name.startswith("string") or is_single_str_array(data) DataLab-1.0.2/datalab/locale/000077500000000000000000000000001511411446000156265ustar00rootroot00000000000000DataLab-1.0.2/datalab/locale/fr/000077500000000000000000000000001511411446000162355ustar00rootroot00000000000000DataLab-1.0.2/datalab/locale/fr/LC_MESSAGES/000077500000000000000000000000001511411446000200225ustar00rootroot00000000000000DataLab-1.0.2/datalab/locale/fr/LC_MESSAGES/datalab.po000066400000000000000000003106771511411446000217700ustar00rootroot00000000000000# French translations for datalab. # Copyright (C) 2025 DataLab Platform Developers # This file is distributed under the same license as the datalab project. # msgid "" msgstr "" "Project-Id-Version: datalab\n" "Report-Msgid-Bugs-To: p.raybaut@codra.fr\n" "POT-Creation-Date: 2025-12-03 12:01+0100\n" "PO-Revision-Date: 2025-05-22 15:46+0200\n" "Last-Translator: Christophe Debonnel \n" "Language: fr\n" "Language-Team: DataLab Platform Developers 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.17.0\n" msgid "Results" msgstr "Résultats" #, python-format msgid "%d more rows" msgstr "%d lignes supplémentaires" #, python-format msgid "%d more columns" msgstr "%d colonnes supplémentaires" #, python-format msgid "%s omitted" msgstr "%s non affichés" #, python-format msgid "Only %d out of %d shapes are displayed" msgstr "Seules %d sur %d formes sont affichées" msgid "DataLab is a generic signal and image processing platform" msgstr "DataLab est une plateforme générique de traitement du signal et de l'image" msgid "Remove all" msgstr "Supprimer tout" msgid "Delete all results" msgstr "Supprimer tous les résultats" #, python-format msgid "Open %s..." msgstr "Ouvrir un objet %s..." #, python-format msgid "Open one or more %s files" msgstr "Ouvrir un ou plusieurs fichiers de type %s" msgid "Open from directory..." msgstr "Ouvrir depuis le répertoire..." #, python-format msgid "Open all %s files from directory" msgstr "Ouvrir tous les fichiers de type %s dans le répertoire" #, python-format msgid "Save %s..." msgstr "Enregistrer un objet %s..." #, python-format msgid "Save selected %s" msgstr "Enregistrer l'objet %s sélectionné" msgid "Save to directory..." msgstr "Enregistrer dans un répertoire..." #, python-format msgid "Save selected %s using a filename pattern" msgstr "Enregistrer les objets %s sélectionnés en utilisant un modèle de nom de fichier" msgid "Import text file..." msgstr "Importer un fichier texte..." msgid "Recompute" msgstr "Retraiter" #, python-format msgid "Recompute selected %s with its processing parameters" msgstr "Retraiter l'objet %s sélectionné avec ses paramètres de traitement" msgid "Select source objects" msgstr "Sélectionner les objets source" #, python-format msgid "Select source object(s) used to create the selected %s" msgstr "Sélectionner le ou les objets source utilisés pour créer l'objet %s sélectionné" msgid "Rename" msgstr "Renommer" #, python-format msgid "Edit title of selected %s or group" msgstr "Modifier le titre de l'objet %s ou du groupe sélectionné" msgid "New group..." msgstr "Nouveau groupe..." msgid "Create a new group" msgstr "Créer un nouveau groupe" msgid "Move up" msgstr "Déplacer vers le haut" msgid "Move up selection (groups or objects)" msgstr "Déplacer vers le haut la sélection (groupes ou objets)" msgid "Move down" msgstr "Déplacer vers le bas" msgid "Move down selection (groups or objects)" msgstr "Déplacer vers le bas la sélection (groupes ou objets)" msgid "Duplicate" msgstr "Dupliquer" #, python-format msgid "Duplicate selected %s" msgstr "Dupliquer l'objet %s sélectionné" msgid "Remove" msgstr "Supprimer" #, python-format msgid "Remove selected %s" msgstr "Supprimer l'objet %s sélectionné" msgid "Delete all" msgstr "Supprimer tout" msgid "Delete all groups and objects" msgstr "Supprimer tous les groupes et objets" msgid "Metadata" msgstr "Métadonnées" msgid "Copy metadata" msgstr "Copier les métadonnées" #, python-format msgid "Copy metadata from selected %s" msgstr "Copier les métadonnées de l'objet %s sélectionné" msgid "Paste metadata" msgstr "Coller les métadonnées" #, python-format msgid "Paste metadata into selected %s" msgstr "Coller les métadonnées dans l'objet %s sélectionné" msgid "Add metadata" msgstr "Ajouter des métadonnées" #, python-format msgid "Add a metadata item to selected %s" msgstr "Ajouter un élément de métadonnée à l'objet %s sélectionné" msgid "Import metadata" msgstr "Importer les métadonnées" #, python-format msgid "Import metadata into %s" msgstr "Importer les métadonnées dans l'objet %s" msgid "Export metadata" msgstr "Exporter les métadonnées" #, python-format msgid "Export selected %s metadata" msgstr "Exporter les métadonnées de l'objet %s sélectionné" msgid "Delete object metadata" msgstr "Supprimer les métadonnées" msgid "Delete all that is contained in object metadata" msgstr "Supprimer toutes les métadonnées liées à l'objet" msgid "Annotations" msgstr "Annotations" msgid "Copy annotations" msgstr "Copier les annotations" #, python-format msgid "Copy annotations from selected %s" msgstr "Copier les annotations de l'objet %s sélectionné" msgid "Paste annotations" msgstr "Coller les annotations" #, python-format msgid "Paste annotations into selected %s" msgstr "Coller les annotations dans l'objet %s sélectionné" msgid "Edit annotations" msgstr "Modifier les annotations" #, python-format msgid "Edit annotations of selected %s" msgstr "Modifier les annotations de l'objet %s sélectionné" msgid "Import annotations" msgstr "Importer les annotations" #, python-format msgid "Import annotations into %s" msgstr "Importer les annotations dans l'objet %s" msgid "Export annotations" msgstr "Exporter les annotations" #, python-format msgid "Export selected %s annotations" msgstr "Exporter les annotations de l'objet %s sélectionné" msgid "Delete annotations" msgstr "Supprimer les annotations" #, python-format msgid "Delete all annotations from selected %s" msgstr "Supprimer toutes les annotations de l'objet %s sélectionné" msgid "Insert object title as annotation label" msgstr "Insérer le titre de l'objet sous forme d'annotation" msgid "Add the selected object's title as a label to the plot annotations" msgstr "Ajouter le titre de l'objet sélectionné comme étiquette aux annotations du graphique" msgid "Copy titles to clipboard" msgstr "Copier les titres dans le presse-papier" msgid "Copy titles of selected objects to clipboard" msgstr "Copier les titres des objets sélectionnés dans le presse-papier" msgid "Edit graphically" msgstr "Édition graphique" msgid "Edit regions of interest graphically" msgstr "Édition graphique des régions d'intérêt" msgid "Edit numerically" msgstr "Édition numérique" msgid "Edit regions of interest numerically" msgstr "Édition numérique des régions d'intérêt" msgid "View in a new window" msgstr "Voir dans une nouvelle fenêtre" #, python-format msgid "View selected %s in a new window" msgstr "Voir l'objet %s sélectionné dans une nouvelle fenêtre" msgid "Constant Operations" msgstr "Opérations avec une constante" msgid "Axis transformation" msgstr "Transformation des axes" msgid "Level adjustment" msgstr "Ajustement de niveau" msgid "Offset correction" msgstr "Soustraction d'offset" msgid "Evaluate and subtract the offset value from the data" msgstr "Évaluer et soustraire la valeur d'offset des données" msgid "Noise addition" msgstr "Addition de bruit" msgid "Noise reduction" msgstr "Réduction de bruit" msgid "Fourier analysis" msgstr "Analyse de Fourier" msgid "Extract" msgstr "Extraire" msgid "Copy" msgstr "Copier" #, python-format msgid "Copy regions of interest from selected %s" msgstr "Copier les régions d'intérêt de l'objet %s sélectionné" msgid "Paste" msgstr "Coller" #, python-format msgid "Paste regions of interest into selected %s" msgstr "Coller les régions d'intérêt dans l'objet %s sélectionné" msgid "Import" msgstr "Importer" #, python-format msgid "Import regions of interest into %s" msgstr "Importer les régions d'intérêt dans l'objet %s" msgid "Export" msgstr "Exporter" #, python-format msgid "Export selected %s regions of interest" msgstr "Exporter les régions d'intérêt de l'objet %s sélectionné" msgid "Show results" msgstr "Afficher les résultats" msgid "Results label" msgstr "Etiquette des résultats" msgid "Show or hide the merged result label on the plot" msgstr "Afficher ou masquer l'étiquette de résultat fusionnée sur le graphique" msgid "Plot results" msgstr "Tracer les résultats" msgid "Delete results" msgstr "Supprimer les résultats" msgid "Refresh manually" msgstr "Rafraîchir manuellement" msgid "Refresh plot, even if auto-refresh is enabled" msgstr "Rafraîchit le graphique, même si le rafraîchissement automatique est activé" msgid "signal" msgstr "signal" msgid "signals" msgstr "signaux" msgid "Zero" msgstr "Zéro" msgid "Normal distribution" msgstr "Distribution normale" msgid "Poisson distribution" msgstr "Distribution de Poisson" msgid "Uniform distribution" msgstr "Distribution uniforme" msgid "Gaussian" msgstr "Gaussienne" msgid "Lorentzian" msgstr "Lorentzienne" msgid "Voigt" msgstr "Voigt" msgid "Blackbody (Planck's law)" msgstr "Corps noir (loi de Planck)" msgid "Sine" msgstr "Sinus" msgid "Cosine" msgstr "Cosinus" msgid "Sawtooth" msgstr "Dents de scie" msgid "Triangle" msgstr "Triangle" msgid "Square" msgstr "Carré" msgid "Cardinal sine" msgstr "Sinus cardinal" msgid "Linear chirp" msgstr "Modulation linéaire de fréquence" msgid "Step" msgstr "Échelon" msgid "Exponential" msgstr "Exponentielle" msgid "Logistic" msgstr "Logistique" msgid "Pulse" msgstr "Impulsion" msgid "Step pulse" msgstr "Impulsion échelon" msgid "Square pulse" msgstr "Impulsion carrée" msgid "Polynomial" msgstr "Polynomial" msgid "Custom" msgstr "Personnalisé" #, python-format msgid "Create new %s" msgstr "Créer un nouvel objet %s" msgid "Frequency filters" msgstr "Filtres fréquentiels" msgid "Fitting" msgstr "Ajustement" msgid "Interactive fitting" msgstr "Ajustement interactif" msgid "Linear fit" msgstr "Ajustement linéaire" msgid "Polynomial fit" msgstr "Ajustement polynomial" msgid "Gaussian fit" msgstr "Ajustement gaussien" msgid "Lorentzian fit" msgstr "Ajustement lorentzien" msgid "Voigt fit" msgstr "Ajustement Voigt" msgid "Multi-Gaussian fit" msgstr "Ajustement multi-gaussien" msgid "Multi-Lorentzian fit" msgstr "Ajustement multi-lorentzien" msgid "Planckian fit" msgstr "Ajustement planckien" msgid "Planckian (blackbody radiation) fitting" msgstr "Ajustement planckien (rayonnement du corps noir)" msgid "Two half-Gaussian fit" msgstr "Ajustement de deux demi-Gaussiennes" msgid "Asymmetric peak fitting with two half-Gaussians" msgstr "Ajustement de pics asymétriques avec deux demi-Gaussiennes" msgid "Piecewise exponential (raise-decay) fit" msgstr "Ajustement exponentiel par morceaux (croissant-décroissant)" msgid "Piecewise exponential fitting with raise and decay components" msgstr "Ajustement exponentiel par morceaux avec composantes croissante et décroissante" msgid "Exponential fit" msgstr "Ajustement exponentiel" msgid "Sinusoidal fit" msgstr "Ajustement sinusoïdal" msgid "CDF fit" msgstr "Ajustement CDF" msgid "Cumulative distribution function fit, related to Error function (erf)" msgstr "Fonction de distribution cumulative (CDF), liée à la fonction d'erreur (erf)" msgid "Stability analysis" msgstr "Analyse de stabilité" msgid "All stability features" msgstr "Toutes les analyses de stabilité" msgid "Compute all stability features" msgstr "Calcule toutes les analyses de stabilité" msgid "Full width at y=..." msgstr "Largeur à y=..." msgid "Compute the full width at a given y value" msgstr "Calcule la largeur à une valeur y donnée" msgid "First abscissa at y=..." msgstr "Première abscisse à y=..." msgid "Compute the first abscissa at a given y value (linear interpolation)" msgstr "Calcule la première abscisse à une valeur y donnée (interpolation linéaire)" msgid "Ordinate at x=..." msgstr "Ordonnée à x=..." msgid "Compute the ordinate at a given x value (linear interpolation)" msgstr "Calcule l'ordonnée à une valeur x donnée (interpolation linéaire)" msgid "Peak detection" msgstr "Détection de pics" msgid "Curve anti-aliasing" msgstr "Anticrénelage des courbes" msgid "Toggle curve anti-aliasing on/off (may slow down plotting)" msgstr "Active/désactive l'anticrénelage des courbes (peut ralentir le tracé)" msgid "Reset curve styles" msgstr "Réinitialiser les styles de courbes" msgid "" "Curve styles are looped over a list of predefined styles.\n" "This action resets the list to its initial state." msgstr "" "Les styles de courbes sont parcourus dans une liste de styles prédéfinis.\n" "Cette action réinitialise la liste à son état initial." msgid "image" msgstr "image" msgid "images" msgstr "images" msgid "Geometry" msgstr "Géométrie" msgid "Distribute on a grid..." msgstr "Distribuer sur une grille..." msgid "Reset image positions" msgstr "Réinitialiser les positions des images" msgid "2D sinc" msgstr "Sinc 2D" msgid "Ring pattern" msgstr "Motif en anneau" msgid "Ramp" msgstr "Rampe" msgid "Checkerboard" msgstr "Damier" msgid "Sinusoidal grating" msgstr "Réseau sinusoïdal" msgid "Siemens star" msgstr "Étoile de Siemens" msgid "Create ROI grid" msgstr "Créer une grille de ROI" msgid "Create a grid of regions of interest" msgstr "Créer une grille de régions d'intérêt" msgid "Thresholding" msgstr "Seuillage" msgid "All thresholding methods" msgstr "Toutes les méthodes de seuillage" msgid "Apply all thresholding methods" msgstr "Appliquer toutes les méthodes de seuillage" msgid "Exposure" msgstr "Exposition" msgid "Restoration" msgstr "Restauration" msgid "All denoising methods" msgstr "Tous les débruitages" msgid "Apply all denoising methods" msgstr "Appliquer tous les débruitages" msgid "Morphology" msgstr "Morphologie" msgid "All morphological operations" msgstr "Toutes les opérations morphologiques" msgid "Apply all morphological operations" msgstr "Appliquer toutes les opérations morphologiques" msgid "Edge detection" msgstr "Détection de contours" msgid "All edge detection filters..." msgstr "Tous les filtres de contours..." msgid "Compute all edge detection filters" msgstr "Calcule tous les filtres de contours" msgid "Erase area" msgstr "Gommer une zone" msgid "Erase area in the image as defined by a region of interest" msgstr "Gomme une zone de l'image définie par une région d'intérêt (ROI)." msgid "Intensity profiles" msgstr "Profils d'intensité" msgid "Line profile..." msgstr "Profil rectiligne..." msgid "Extract horizontal or vertical profile" msgstr "Extraire un profil horizontal ou vertical" msgid "Segment profile..." msgstr "Profil le long d'un segment..." msgid "Extract profile along a segment" msgstr "Extraire un profil le long d'un segment" msgid "Average profile..." msgstr "Profil moyen..." msgid "Extract average horizontal or vertical profile" msgstr "Extraire un profil moyen horizontal ou vertical" msgid "Radial profile extraction..." msgstr "Extraire le profil radial..." msgid "Radial profile extraction around image centroid" msgstr "Extraire le profil radial autour du barycentre de l'image" msgid "2D peak detection" msgstr "Détection de pics 2D" msgid "Compute automatic 2D peak detection" msgstr "Détection automatique de pics 2D" msgid "Blob detection" msgstr "Détection de taches" msgid "Resize" msgstr "Redimensionner" msgid "Pixel binning" msgstr "Binning" msgid "View images side-by-side" msgstr "Voir les images côte à côte" msgid "View selected images side-by-side in a new window" msgstr "Voir les images sélectionnées côte à côte dans une nouvelle fenêtre" msgid "Show contrast panel" msgstr "Afficher le panneau de contraste" msgid "Show or hide contrast adjustment panel" msgstr "Afficher ou cacher le panneau de réglage du contraste" msgid "Process signal" msgstr "Traiter le signal" #, python-format msgid "Loading data from %s..." msgstr "Chargement des données depuis %s..." msgid "Clipping uint32 data to int32." msgstr "Troncature de données uint32 en int32." msgid "No supported data available in HDF5 file(s)." msgstr "Aucune donnée prise en charge dans le(s) fichier(s) HDF5." msgid "Macro simple example" msgstr "Exemple simple de macro" msgid "Untitled" msgstr "Sans titre" #, python-format msgid "# ==> Unable to run '%s' macro" msgstr "# ==> Impossible d'exécuter la macro '%s'" msgid "Macro Python interpreter failed to start!" msgstr "Le démarrage de l'interpréteur Python des macros a échoué !" #, python-format msgid "# ==> Running '%s' macro..." msgstr "# ==> Exécution de la macro '%s'..." #, python-format msgid "Terminating '%s' macro" msgstr "Arrêt de la macro '%s'" #, python-format msgid "# <== '%s' macro has finished" msgstr "# <== La macro '%s' a terminé son exécution" #, python-format msgid "Available memory is below %d MB.

    Do you want to continue?" msgstr "La mémoire disponible est inférieure à %d Mo.

    Souhaitez-vous néanmoins continuer ?" msgid "This software is in the beta stage of its release cycle. The focus of beta testing is providing a feature complete software for users interested in trying new features before the final release. However, beta software may not behave as expected and will probably have more bugs or performance issues than completed software." msgstr "Ce logiciel est en phase beta de son cycle de développement. L'objectif de la phase de beta test est de fournir une version du logiciel disposant de toutes les fonctionnalités prévues dans la version finale, à l'attention d'utilisateurs intéressés de tester en avance de phase ces fonctionnalités. Cependant, un logiciel en version beta peut ne pas fonctionner correctement et présente plus d'anomalies résiduelles et de problèmes de performance que la version finale." msgid "This software is in the alpha stage of its release cycle. The focus of alpha testing is providing an incomplete software for early testing of specific features by users. Please note that alpha software was not thoroughly tested by the developer before it is released." msgstr "Ce logiciel est en phase alpha de son cycle de développement. L'objectif de la phase d'alpha test est de fournir une version incomplète du logiciel pour des tests réalisés en amont par des utilisateurs intéressés ou concernés par de nouvelles fonctionnalités ou des corrections d'anomalies. Notez que la version alpha d'un logiciel ne fait pas l'objet de tests poussés avant sa diffusion." msgid "This is not a stable release." msgstr "Ceci n'est pas une version stable." msgid "Do you want to see available log files?" msgstr "Souhaitez-vous consulter les journaux de bord disponibles ?" msgid "DataLab v0.20 plugins detected" msgstr "Plugins DataLab v0.20 détectés" msgid "The following plugins are using the old DataLab v0.20 format:" msgstr "Les plugins suivants utilisent l'ancien format DataLab v0.20 :" msgid "These plugins will not be loaded in DataLab v1.0 because they are not compatible with the new architecture." msgstr "Ces plugins ne seront pas chargés dans DataLab v1.0 car ils ne sont pas compatibles avec la nouvelle architecture." msgid "To use these plugins with DataLab v1.0, you need to update them. Please refer to the migration guide on the DataLab website " msgstr "Pour utiliser ces plugins avec DataLab v1.0, vous devez les mettre à jour. Veuillez vous référer au guide de migration sur le site web de DataLab " msgid " or in the PDF documentation." msgstr " ou dans la documentation PDF." msgid "Choosing to ignore this message will prevent it from appearing again." msgstr "Ignorer ce message empêchera son affichage ultérieur." #, python-format msgid "Welcome to %s!" msgstr "Bienvenue dans %s !" msgid "Open HDF5 files..." msgstr "Ouvrir des fichiers HDF5..." msgid "Open one or more HDF5 files" msgstr "Ouvrir un ou plusieurs fichiers HDF5" msgid "Save to HDF5 file..." msgstr "Enregistrer dans un fichier HDF5..." msgid "Save to HDF5 file" msgstr "Enregistrer dans un fichier HDF5" msgid "Browse HDF5 file..." msgstr "Parcourir un fichier HDF5..." msgid "Browse an HDF5 file" msgstr "Parcourir un fichier HDF5" msgid "Settings..." msgstr "Préférences..." msgid "Open settings dialog" msgstr "Ouvrir la boîte de dialogue des préférences" msgid "Main Toolbar" msgstr "Barre d'outils principale" msgid "Hide window" msgstr "Cacher la fenêtre" msgid "Hide DataLab window" msgstr "Cacher la fenêtre de DataLab" msgid "Quit" msgstr "Quitter" msgid "Quit application" msgstr "Quitter l'application" msgid "Auto-refresh" msgstr "Rafraîchissement automatique" msgid "Auto-refresh plot when object is modified, added or removed" msgstr "Rafraîchir le graphique automatiquement lors de la modification, de l'ajout ou de la suppression d'un objet" msgid "Show first object only" msgstr "Afficher uniquement le premier objet" msgid "Show only the first selected object (signal or image)" msgstr "Afficher uniquement le premier objet sélectionné (signal ou image)" msgid "Show graphical object titles" msgstr "Afficher les titres des objets graphiques" msgid "Show or hide ROI and other graphical object titles or subtitles" msgstr "Afficher ou cacher les titres (et sous-titres) des régions d'intérêt et autres objets graphiques" msgid "Signal Panel Toolbar" msgstr "Barre d'outils du panneau Signal" msgid "Image Panel Toolbar" msgstr "Barre d'outils du panneau Image" msgid "Signal View" msgstr "Vue Signal" msgid "Image View" msgstr "Vue Image" msgid "Signal Panel" msgstr "Panneau Signal" msgid "Image Panel" msgstr "Panneau Image" msgid "1D Signals: Manage and process one-dimensional data" msgstr "Signaux 1D : Gérer et traiter des données unidimensionnelles" msgid "2D Images: Manage and process two-dimensional data" msgstr "Images 2D : Gérer et traiter des données bidimensionnelles" msgid "&File" msgstr "&Fichier" msgid "&Create" msgstr "&Création" msgid "&Edit" msgstr "&Édition" msgid "ROI" msgstr "ROI" msgid "Operations" msgstr "Opérations" msgid "Processing" msgstr "Traitement" msgid "Analysis" msgstr "Analyse" msgid "Plugins" msgstr "Plugins" msgid "&View" msgstr "&Affichage" msgid "Online documentation" msgstr "Documentation en ligne" msgid "PDF documentation" msgstr "Documentation PDF" msgid "Tour" msgstr "Visite guidée" msgid "Demo" msgstr "Démo" msgid "Test segfault/Python error" msgstr "Tester un plantage/une erreur Python" msgid "Log files" msgstr "Journaux de bord" msgid "Installation and configuration" msgstr "Installation et configuration" msgid "Project home page" msgstr "Page d'accueil du projet" msgid "Bug report or feature request" msgstr "Rapport d'anomalie ou demande de nouvelle fonctionnalité" msgid "About..." msgstr "À propos..." msgid "" "Welcome to DataLab console!\n" "---------------------------\n" "You can access the main window with the 'dl' variable.\n" "Example:\n" " o = dl.get_object() # returns currently selected object\n" " o = dl[1] # returns object number 1\n" " o = dl['My image'] # returns object which title is 'My image'\n" " o.data # returns object data\n" "Modules imported at startup: os, sys, os.path as osp, time, numpy as np, scipy.signal as sps, scipy.ndimage as spi" msgstr "" "Bienvenue dans la console de DataLab !\n" "--------------------------------------\n" "Vous pouvez accéder à la fenêtre principale avec la variable 'dl'.\n" "Exemples :\n" " o = dl.get_object() # retourne l'objet actuellement sélectionné\n" " o = dl[1] # retourne l'objet numéro 1\n" " o = dl['Mon image'] # retourne l'objet dont le titre est 'Mon image'\n" " o.data # retourne les données de l'objet\n" "Modules importés au démarrage : os, sys, os.path as osp, time, numpy as np, scipy.signal as sps, scipy.ndimage as spi" msgid "Console" msgstr "Console" msgid "Macro Panel" msgstr "Gestionnaire de Macros" msgid "Disable auto-refresh?" msgstr "Désactiver le rafraîchissement automatique ?" msgid "When auto-refresh is disabled, the plot view will not automatically update when objects are modified, added or removed." msgstr "Lorsque le rafraîchissement automatique est désactivé, la vue du graphique ne sera pas mise à jour automatiquement lorsque des objets sont modifiés, ajoutés ou supprimés." msgid "You will need to manually click the refresh button to update the view." msgstr "Vous devrez cliquer manuellement sur le bouton de rafraîchissement pour mettre à jour la vue." msgid "Are you sure you want to disable auto-refresh?" msgstr "Êtes-vous sûr de vouloir désactiver le rafraîchissement automatique ?" msgid "Save" msgstr "Enregistrer" msgid "Do you want to clear current workspace (signals and images) before importing data from HDF5 files?" msgstr "Souhaitez-vous vider l'espace de travail actuel (signaux et images) avant d'importer des données depuis des fichiers HDF5 ?" msgid "Note: If you choose No, when importing DataLab workspace files, objects with conflicting identifiers will have their processing history lost (features like 'Show source' and 'Recompute' will not work for those objects). Non-conflicting objects will preserve their processing history." msgstr "Note : Si vous choisissez Non, lors de l'importation de fichiers d'espace de travail DataLab, les objets ayant des identifiants en conflit perdront leur historique de traitement (les fonctionnalités telles que 'Afficher la source' et 'Retraiter' ne fonctionneront pas pour ces objets). Les objets sans conflit conserveront leur historique de traitement." #, python-format msgid "Choosing to ignore this message will prevent it from being displayed again, and will use the current setting (%s)." msgstr "Ignorer ce message empêchera son affichage ultérieur et utilisera le réglage actuel (%s)." msgid "Yes" msgstr "Oui" msgid "No" msgstr "Non" msgid "Open" msgstr "Ouvrir" msgid "HDF5 files (*.h5 *.hdf5 *.hdf *.he5);;All files (*)" msgstr "Fichiers HDF5 (*.h5 *.hdf5 *.hdf *.he5);;Tous les fichiers (*)" msgid "not started" msgstr "non démarré" #, python-format msgid "started (port %s)" msgstr "démarré (port %s)" msgid "enabled" msgstr "activé" msgid "disabled" msgstr "désactivé" msgid "Advanced configuration:" msgstr "Configuration avancée :" msgid "XML-RPC server:" msgstr "Serveur XML-RPC :" msgid "Process isolation:" msgstr "Isolation de processus :" msgid "Created by" msgstr "Créé par" #, python-format msgid "Developed and maintained by %s open-source project team" msgstr "Développé et maintenu par l'équipe du projet libre %s" msgid "About" msgstr "À propos de" msgid "Apply settings to existing results?" msgstr "Appliquer les réglages aux résultats existants ?" msgid "" "Visualization settings for annotated shapes and markers have been modified.\n" "\n" "Do you want to apply these settings to existing results in the workspace?" msgstr "" "Les réglages d'affichage par défaut pour les formes annotées et les marqueurs ont été modifiés.\n" "\n" "Souhaitez-vous appliquer ces réglages aux résultats existants dans l'espace de travail ?" msgid "Visualization settings" msgstr "Réglages d'affichage" #, python-format msgid "Default visualization settings have changed.

    Do you want to update all active %s objects?" msgstr "Les réglages d'affichage par défaut ont changé.

    Souhaitez-vous mettre à jour tous les objets %s actifs ?" msgid "Do you want to save all signals and images to an HDF5 file before quitting DataLab?" msgstr "Souhaitez-vous enregistrer tous les signaux et images dans un fichier HDF5 avant de quitter DataLab ?" msgid "Select one point then press OK to accept" msgstr "Sélectionnez un point puis appuyez sur OK pour valider" msgid "Edit curve interactively" msgstr "Modifier la courbe graphiquement" msgid "Insert point" msgstr "Insérer un point" msgid "Custom signal" msgstr "Signal personnalisé" msgid "Object metadata" msgstr "Métadonnées de l'objet" msgid "(click on Metadata button for more details)" msgstr "(cliquer sur le bouton Métadonnées pour plus de détails)" msgid "Drag files here to open" msgstr "Déposer des fichiers ici pour les ouvrir" msgid "" "Working with 2D images?\n" "Switch to the Image Panel using the tab above." msgstr "" "Vous souhaitez travailler avec des images 2D ?\n" "Passez au panneau Image en utilisant l'onglet ci-dessus." msgid "" "Working with 1D signals?\n" "Switch to the Signal Panel using the tab above." msgstr "" "Vous souhaitez travailler avec des signaux 1D ?\n" "Passez au panneau Signal en utilisant l'onglet ci-dessus." msgid "History" msgstr "Historique" msgid "Analysis parameters" msgstr "Paramètres d'analyse" msgid "Properties" msgstr "Propriétés" #, python-format msgid "Parameters for function `%s`" msgstr "Paramètres pour la fonction `%s`" msgid "Original object" msgstr "Objet original" msgid "(source deleted)" msgstr "(source supprimée)" msgid "(multiple sources)" msgstr "(sources multiples)" msgid "Creation Parameters" msgstr "Paramètres de création" msgid "Creation" msgstr "Création" msgid "Signal was modified in-place." msgstr "Le signal a été modifié sur place." msgid "Image was modified in-place." msgstr "L'image a été modifiée sur place." msgid "If computation were performed based on this object, they may need to be redone." msgstr "Si des calculs ont été effectués sur la base de cet objet, ils devront peut-être être refaits." #, python-format msgid "" "Failed to recreate object with new parameters:\n" "%s" msgstr "" "Échec de la recréation de l'objet avec les nouveaux paramètres :\n" "%s" msgid "Processing Parameters" msgstr "Paramètres de traitement" msgid "No processing object available." msgstr "Aucun objet de traitement disponible." msgid "Processing metadata is incomplete." msgstr "Les métadonnées de traitement sont incomplètes." msgid "Processing metadata is incomplete (missing source UUID)." msgstr "Les métadonnées de traitement sont incomplètes (UUID source manquant)." msgid "Source object no longer exists." msgstr "L'objet source n'existe plus." msgid "The object that was used to create this processed object has been deleted and cannot be used for reprocessing." msgstr "L'objet qui a été utilisé pour créer cet objet traité a été supprimé et ne peut pas être utilisé pour le retraitement." #, python-format msgid "" "Failed to reprocess object:\n" "%s" msgstr "" "Échec du retraitement de l'objet :\n" "%s" msgid "Processing was cancelled." msgstr "Le traitement a été annulé." msgid "Signal was reprocessed." msgstr "Le signal a été retraité." msgid "Image was reprocessed." msgstr "L'image a été retraitée." msgid "Geometry results" msgstr "Résultats géométriques" msgid "Table results" msgstr "Résultats tabulaires" msgid "Other metadata" msgstr "Autres métadonnées" msgid "Save to directory" msgstr "Enregistrer dans un répertoire" msgid "Directory" msgstr "Répertoire" msgid "Basename pattern" msgstr "Nom de base" msgid "Python format string. See description for details." msgstr "Chaîne de format Python. Voir la description pour plus de détails." msgid "Help" msgstr "Aide" msgid "Extension" msgstr "Extension" msgid "Overwrite" msgstr "Écraser" msgid "Overwrite existing files" msgstr "Écraser les fichiers existants" msgid "Preview" msgstr "Aperçu" msgid "Add a new metadata item to the selected objects.

    The metadata key will be the same for all objects, but the value can use a pattern to generate different values.
    Click the Help button for details on the pattern syntax.
    " msgstr "Ajouter un nouvel élément de métadonnée aux objets sélectionnés.

    La clé de métadonnée sera la même pour tous les objets, mais la valeur peut utiliser un modèle pour générer des valeurs différentes.
    Cliquez sur le bouton Aide pour plus de détails sur la syntaxe du modèle.
    " msgid "String" msgstr "Chaîne de caractères" msgid "Float" msgstr "Flottant" msgid "Integer" msgstr "Entier" msgid "Boolean" msgstr "Booléen" msgid "Metadata key" msgstr "Clé de métadonnées" msgid "The key name for the metadata item" msgstr "Le nom de la clé pour l'élément de métadonnées" msgid "Value pattern" msgstr "Modèle de valeur" msgid "Conversion" msgstr "Conversion" msgid "Select what to keep from the clipboard.

    Result shapes and annotations, if kept, will be merged with existing ones. All other metadata will be replaced." msgstr "Sélectionnez ce que vous souhaitez conserver dans le presse-papier.

    Les formes graphiques et les annotations, si conservées, seront fusionnées avec celles existantes. Toutes les autres métadonnées seront remplacées." msgid "Delete group(s)" msgstr "Supprimer le(s) groupe(s)" msgid "Are you sure you want to delete the selected group(s)?" msgstr "Êtes-vous sûr de vouloir supprimer le(s) groupe(s) sélectionné(s) ?" #, python-format msgid "Do you want to delete all objects (%s)?" msgstr "Souhaitez-vous supprimer tous les objets (%s) ?" msgid "Delete metadata" msgstr "Supprimer les métadonnées" msgid "Some selected objects have regions of interest.
    Do you want to delete them as well?" msgstr "Certains objets sélectionnés ont des régions d'intérêt.
    Souhaitez-vous les supprimer également ?" msgid "New group" msgstr "Nouveau groupe" msgid "Group name:" msgstr "Nom du groupe :" msgid "Rename object" msgstr "Renommer l'objet" msgid "Object name:" msgstr "Nom de l'objet :" msgid "Rename group" msgstr "Renommer le groupe" msgid "Reading objects from file" msgstr "Lecture des objets depuis le fichier" msgid "Adding objects to workspace" msgstr "Ajout d'objets à l'espace de travail" msgid "Scanning directory" msgstr "Analyse du répertoire" msgid "Save as" msgstr "Enregistrer sous" msgid "Saving..." msgstr "Enregistrement en cours..." msgid "Import ROI" msgstr "Importer une ROI" msgid "Export ROI" msgstr "Exporter une ROI" msgid "Selected object(s) do not have processing parameters that can be recomputed." msgstr "L'objet (ou les objets) sélectionné(s) n'ont pas de paramètres de traitement pouvant être retraités." msgid "Recomputing objects" msgstr "Retraitement des objets" msgid "Failed to recompute object" msgstr "Échec du retraitement de l'objet" msgid "Do you want to continue with the next object?" msgstr "Souhaitez-vous continuer avec l'objet suivant ?" msgid "Selected object does not have processing metadata." msgstr "L'objet sélectionné n'a pas de métadonnées de traitement." msgid "Selected object does not have source object references." msgstr "L'objet sélectionné n'a pas de références d'objet source." msgid "Source objects no longer exist." msgstr "Les objets source n'existent plus." msgid "Selected a single source object" msgstr "Un seul objet source sélectionné" #, python-format msgid "Selected %d source objects" msgstr "%d objets source sélectionnés" msgid "1 source object no longer exists" msgstr "1 objet source n'existe plus." #, python-format msgid "%d source objects no longer exist" msgstr "%d objets source n'existent plus." msgid "No result currently available for this object." msgstr "Aucun résultat disponible pour le moment." msgid "This feature leverages the results of previous analysis performed on the selected object(s).

    To compute results, select one or more objects and choose a feature in the Analysis menu." msgstr "Cette fonctionnalité exploite les résultats d'analyse précédents.

    Pour calculer des résultats, sélectionnez un ou plusieurs objets et choisissez une fonctionnalité dans le menu Analyse." msgid "Indices" msgstr "Indices" msgid "Plot kind" msgstr "Type de graphique" msgid "One curve per object (or ROI) and per result title" msgstr "Une courbe par objet (ou ROI) et par titre de résultat" msgid "One curve per result title" msgstr "Une courbe par titre de résultat" msgid "X axis" msgstr "Axe des X" msgid "Y axis" msgstr "Axe des Y" #, python-format msgid "Plot results obtained from previous analyses.

    This plot is based on results associated with '%s' prefix." msgstr "Tracer les résultats obtenus avec des analyses réalisées précédemment.

    Ce graphique est basé sur les résultats associés au préfixe '%s'." msgid "All objects associated with results must have the same regions of interest (ROIs) to plot results together." msgstr "Tous les objets associés aux résultats doivent avoir les mêmes ROIs pour tracer les résultats ensemble." msgid "Are you sure you want to delete all results of the selected object(s)?" msgstr "Êtes-vous sûr de vouloir supprimer tous les résultats des objets sélectionnés ?" msgid "Annotation added" msgstr "Annotation ajoutée" msgid "The label has been added as an annotation. You can edit or remove it using the annotation editing window.

    Choosing to ignore this message will prevent it from being displayed again." msgstr "L'étiquette a été ajoutée comme annotation. Vous pouvez la modifier ou la supprimer en utilisant la fenêtre d'édition des annotations.

    Ignorer ce message empêchera son affichage ultérieur." msgid "Macro panel" msgstr "Panneau des macros" msgid "-***- Macro Console -***-" msgstr "-***- Console des macros -***-" msgid "Run macro" msgstr "Exécuter la macro" msgid "Stop macro" msgstr "Arrêter la macro" msgid "New macro" msgstr "Nouvelle macro" msgid "Rename macro" msgstr "Renommer la macro" msgid "Import macro from file" msgstr "Importer la macro depuis un fichier" msgid "Export macro to file" msgstr "Exporter la macro vers un fichier" msgid "Remove macro" msgstr "Supprimer la macro" msgid "Macro editor toolbar" msgstr "Barre d'outils des macros" msgid "New title:" msgstr "Nouveau titre :" msgid "When closed, the macro is permanently destroyed, unless it has been exported first." msgstr "Lorsqu'elle est fermée, une macro est détruite de manière définitive, sauf si elle a été exportée au préalable." msgid "Do you want to continue?" msgstr "Souhaitez-vous vraiment continuer ?" msgid "Creating geometric shapes" msgstr "Création des formes géométriques" msgid "Creating plot items" msgstr "Création des objets graphiques" msgid "Failed to deserialize processing parameters from JSON." msgstr "Échec de la désérialisation des paramètres de traitement depuis le format JSON." msgid "DataLab relies on various libraries to perform the computation. During the computation, errors may occur because of the data (e.g. division by zero, unexpected data type, etc.) or because of the libraries (e.g. memory error, etc.). If you encounter an error, before reporting it, please ensure that the computation is correct, by checking the data and the parameters." msgstr "DataLab utilise plusieurs bibliothèques pour réaliser les calculs. Lors des calculs, des erreurs peuvent survenir en raison de la nature des données (par exemple division par zéro, type de données inattendu, etc.) ou à cause de limitations ou d'erreurs dans les bibliothèques (par exemple erreur mémoire, etc.). Si vous rencontrez une erreur, avant de la signaler, assurez-vous que le calcul est correct, en vérifiant les données et les paramètres." msgid "X-array incompatibility" msgstr "Incompatibilité des tableaux des X" msgid "" "The selected signals have different X arrays.\n" "\n" "To perform the computation, signals need to be interpolated to match a common X array.\n" "\n" "Do you want to continue with automatic interpolation?" msgstr "" "Les signaux sélectionnés ont des tableaux des X différents.\n" "\n" "Pour effectuer le calcul, les signaux doivent être interpolés pour correspondre à un tableau des X commun.\n" "\n" "Souhaitez-vous continuer avec une interpolation automatique ?" msgid "Yes to All" msgstr "Oui à tout" msgid "Recomputing..." msgstr "Retraitement en cours..." msgid "Processing object with updated parameters..." msgstr "Traitement de l'objet avec les paramètres mis à jour..." msgid "Recomputing" msgstr "Retraitement" #, python-format msgid "Computing: %s" msgstr "Calcul en cours : %s" msgid "In pairwise mode, you need to select objects in at least two groups." msgstr "En mode 'pairwise', vous devez sélectionner des objets dans au moins deux groupes." msgid "In pairwise mode, you need to select the same number of objects in each group." msgstr "En mode 'pairwise', vous devez sélectionner le même nombre d'objets dans chaque groupe." msgid "Parameters" msgstr "Paramètres" #, python-format msgid "Calculating: %s" msgstr "Calcul : %s" #, python-format msgid "Select %s" msgstr "Sélectionner %s" #, python-format msgid "Note: operation mode is pairwise: %s object(s) expected (i.e. as many as in the first group)" msgstr "Note : le mode d'opération est pairwise : %s objet(s) attendu(s) (c'est-à-dire autant que dans le premier groupe)" msgid "Note: operation mode is single operand: 1 object expected" msgstr "Note : le mode d'opération est single : 1 objet attendu" msgid "Second operand" msgstr "Second opérande" msgid "Regions of Interest" msgstr "Régions d'intérêt" msgid "No ROI selected for editing." msgstr "Aucune ROI sélectionnée pour l'édition." msgid "Remove ROI" msgstr "Supprimer la ROI" #, python-format msgid "Are you sure you want to remove ROI '%s'?" msgstr "Êtes-vous sûr de vouloir supprimer la ROI '%s' ?" msgid "Sum" msgstr "Addition" msgid "Average" msgstr "Moyenne" msgid "Standard deviation" msgstr "Écart-type" msgid "Difference" msgstr "Soustraction" msgid "image to subtract" msgstr "image à soustraire" msgid "Quadratic Difference" msgstr "Différence quadratique" msgid "Product" msgstr "Produit" msgid "Division" msgstr "Division" msgid "divider" msgstr "le diviseur" msgid "Inverse" msgstr "Inverse" msgid "Arithmetic" msgstr "Arithmétique" msgid "signal to operate with" msgstr "signal opérande" msgid "Add constant" msgstr "Additionner une constante" msgid "Subtract constant" msgstr "Soustraire une constante" msgid "Multiply by constant" msgstr "Multiplier par une constante" msgid "Divide by constant" msgstr "Diviser par une constante" msgid "Absolute value" msgstr "Valeur absolue" msgid "Phase" msgstr "Phase" msgid "Combine with phase" msgstr "Combiner avec la phase" msgid "Create a complex-valued image from magnitude and phase" msgstr "Créer une image à valeurs complexes à partir de l'amplitude et de la phase" msgid "phase" msgstr "phase" msgid "Real part" msgstr "Partie réelle" msgid "Imaginary part" msgstr "Partie imaginaire" msgid "Combine with imaginary part" msgstr "Combiner avec la partie imaginaire" msgid "Create a complex-valued image from real and imaginary parts" msgstr "Créer une image à valeurs complexes à partir des parties réelle et imaginaire" msgid "imaginary part" msgstr "partie imaginaire" msgid "Convert data type" msgstr "Convertir le type de données" msgid "Logarithm (base 10)" msgstr "Logarithme (base 10)" msgid "Flat-field correction" msgstr "Correction de champ plat" msgid "flat field image" msgstr "l'image de champ plat" msgid "Flip horizontally" msgstr "Symétrie horizontale" msgid "Flip diagonally" msgstr "Symétrie diagonale" msgid "Flip vertically" msgstr "Symétrie verticale" #, python-format msgid "Rotate %s right" msgstr "Rotation directe de %s" #, python-format msgid "Rotate %s left" msgstr "Rotation inverse de %s" msgid "Rotate by" msgstr "Rotation de" msgid "Line profile" msgstr "Profil rectiligne" msgid "Segment profile" msgstr "Profil le long d'un segment" msgid "Average profile" msgstr "Profil moyen" msgid "Radial profile" msgstr "Profil radial" msgid "kernel to convolve with" msgstr "noyau de la convolution" msgid "Deconvolution" msgstr "Déconvolution" msgid "kernel to deconvolve with" msgstr "noyau de la déconvolution" msgid "Set uniform coordinates" msgstr "Convertir en coordonnées uniformes" msgid "Polynomial calibration" msgstr "Étalonnage polynomial" msgid "" "Apply polynomial calibration to the X, Y or Z axis:\n" " • x' = a0 + a1*x + a2*x^2 + ...\n" " • y' = a0 + a1*y + a2*y^2 + ...\n" " • z' = a0 + a1*z + a2*z^2 + ..." msgstr "" "Appliquer un étalonnage polynomial à l'axe X, Y ou Z :\n" " • x' = a0 + a1*x + a2*x^2 + ...\n" " • y' = a0 + a1*y + a2*y^2 + ...\n" " • z' = a0 + a1*z + a2*z^2 + ..." msgid "Swap X/Y axes" msgstr "Permuter les axes X/Y" msgid "Normalize" msgstr "Normaliser" msgid "Clipping" msgstr "Écrêtage" msgid "Add Gaussian noise" msgstr "Ajouter du bruit gaussien" msgid "Add Poisson noise" msgstr "Ajouter du bruit de Poisson" msgid "Add uniform noise" msgstr "Ajouter du bruit uniforme" msgid "Gaussian filter" msgstr "Filtre gaussien" msgid "Moving average" msgstr "Moyenne mobile" msgid "Moving median" msgstr "Médiane mobile" msgid "Wiener filter" msgstr "Filtre de Wiener" msgid "Zero padding" msgstr "Complément de zéros" msgid "Zero padding is used to increase the frequency resolution of the FFT" msgstr "Le complément de zéros est utilisé pour augmenter la résolution de la FFT" msgid "FFT" msgstr "FFT" msgid "Fast Fourier Transform (FFT) is an estimation of the Discrete Fourier Transform (DFT). Results are complex numbers, but only the real part is plotted." msgstr "La transformée de Fourier rapide (FFT) est une estimation de la transformée de Fourier discrète (DFT). Les résultats sont des nombres complexes, mais seule la partie réelle est tracée." msgid "Inverse FFT" msgstr "FFT inverse" msgid "Inverse Fast Fourier Transform (IFFT) is an estimation of the Inverse Discrete Fourier Transform (IDFT). Results are complex numbers, but only the real part is plotted." msgstr "La transformée de Fourier rapide inverse (IFFT) est une estimation de la transformée de Fourier discrète inverse (IDFT). Les résultats sont des nombres complexes, mais seule la partie réelle est tracée." msgid "Magnitude spectrum" msgstr "Spectre d'amplitude" msgid "Magnitude spectrum is the absolute value of the FFT result. It is a measure of the amplitude of the frequency components." msgstr "Le spectre d'amplitude est la valeur absolue du résultat de la transformée de Fourier rapide. Il mesure l'amplitude des composantes fréquentielles." msgid "Phase spectrum" msgstr "Spectre de phase" msgid "Phase spectrum is the angle of the FFT result. It is a measure of the phase of the frequency components." msgstr "Le spectre de phase est l'angle du résultat de la transformée de Fourier rapide. Il mesure la phase des composantes fréquentielles." msgid "Power spectral density" msgstr "Densité spectrale de puissance" msgid "Power spectral density (PSD) is the square of the magnitude spectrum. It is a measure of the power of the frequency components." msgstr "La densité spectrale de puissance est le carré du spectre d'amplitude. Elle mesure la puissance des composantes fréquentielles." msgid "Butterworth" msgstr "Butterworth" msgid "Gaussian bandpass" msgstr "Passe-bande gaussien" msgid "Parametric thresholding" msgstr "Seuillage paramétrique" msgid "Parametric thresholding allows to select a thresholding method and a threshold value." msgstr "Le seuillage paramétrique permet de sélectionner une méthode de seuillage et une valeur de seuil." msgid "ISODATA thresholding" msgstr "Seuillage ISODATA" msgid "Li thresholding" msgstr "Seuillage Li" msgid "Mean thresholding" msgstr "Seuillage moyen" msgid "Minimum thresholding" msgstr "Seuillage minimum" msgid "Otsu thresholding" msgstr "Seuillage Otsu" msgid "Triangle thresholding" msgstr "Seuillage Triangle" msgid "Yen thresholding" msgstr "Seuillage Yen" msgid "Gamma correction" msgstr "Correction gamma" msgid "Logarithmic correction" msgstr "Correction logarithmique" msgid "Sigmoid correction" msgstr "Correction sigmoïde" msgid "Histogram equalization" msgstr "Egalisation d'histogramme" msgid "Adaptive histogram equalization" msgstr "Egalisation d'histogramme adaptative" msgid "Intensity rescaling" msgstr "Ajustement des niveaux" msgid "Total variation denoising" msgstr "Filtrage variationnel (débruitage)" msgid "Bilateral filter denoising" msgstr "Filtrage bilatéral (débruitage)" msgid "Wavelet denoising" msgstr "Débruitage par ondelettes" msgid "White Top-Hat denoising" msgstr "Débruitage Top-Hat" msgid "White Top-Hat (disk)" msgstr "Top-Hat (disque)" msgid "Black Top-Hat (disk)" msgstr "Top-Hat dual (disque)" msgid "Erosion (disk)" msgstr "Erosion (disque)" msgid "Dilation (disk)" msgstr "Dilatation (disque)" msgid "Opening (disk)" msgstr "Ouverture (disque)" msgid "Closing (disk)" msgstr "Fermeture (disque)" msgid "Canny filter" msgstr "Filtre de Canny" msgid "Farid filter" msgstr "Filtre de Farid" msgid "Farid filter (horizontal)" msgstr "Filtre de Farid (horizontal)" msgid "Farid filter (vertical)" msgstr "Filtre de Farid (vertical)" msgid "Laplace filter" msgstr "Filtre de Laplace" msgid "Prewitt filter" msgstr "Filtre de Prewitt" msgid "Prewitt filter (horizontal)" msgstr "Filtre de Prewitt (horizontal)" msgid "Prewitt filter (vertical)" msgstr "Filtre de Prewitt (vertical)" msgid "Roberts filter" msgstr "Filtre de Roberts" msgid "Scharr filter" msgstr "Filtre de Scharr" msgid "Scharr filter (horizontal)" msgstr "Filtre de Scharr (horizontal)" msgid "Scharr filter (vertical)" msgstr "Filtre de Scharr (vertical)" msgid "Sobel filter" msgstr "Filtre de Sobel" msgid "Sobel filter (horizontal)" msgstr "Filtre de Sobel (horizontal)" msgid "Sobel filter (vertical)" msgstr "Filtre de Sobel (vertical)" msgid "Resampling" msgstr "Rééchantillonnage" msgid "Statistics" msgstr "Statistiques" msgid "Horizontal projection" msgstr "Projection horizontale" msgid "Compute the sum of pixel intensities along each column (projection on the x-axis)" msgstr "Calcule la somme des intensités des pixels le long de chaque colonne (projection sur l'axe des x)" msgid "Vertical projection" msgstr "Projection verticale" msgid "Compute the sum of pixel intensities along each row (projection on the y-axis)" msgstr "Calcule la somme des intensités des pixels le long de chaque ligne (projection sur l'axe des y)" msgid "Histogram" msgstr "Histogramme" msgid "Centroid" msgstr "Barycentre" msgid "Compute image centroid" msgstr "Calcule le barycentre de l'image" msgid "Minimum enclosing circle center" msgstr "Centre du cercle minimum" msgid "Compute smallest enclosing circle center" msgstr "Calcule le centre du cercle minimum" msgid "Contour detection" msgstr "Détection de contours" msgid "Compute contour shape fit" msgstr "Ajustement d'une forme géométrique à un contour" msgid "Detect peaks in the image" msgstr "Détection de pics dans l'image" msgid "Circle Hough transform" msgstr "Transformée de Hough circulaire" msgid "Detect circular shapes using circle Hough transform" msgstr "Détection de formes circulaires à partir d'une tranformée de Hough" msgid "Blob detection (DOG)" msgstr "Détection de taches (gaussien)" msgid "Detect blobs using Difference of Gaussian (DOG) method" msgstr "Détection de taches basée sur la méthode du discriminant gaussien" msgid "Blob detection (DOH)" msgstr "Détection de taches (hessien)" msgid "Detect blobs using Difference of Gaussian (DOH) method" msgstr "Détection de taches basée sur la méthode du hessien gaussien" msgid "Blob detection (LOG)" msgstr "Détection de taches (LOG)" msgid "Detect blobs using Laplacian of Gaussian (LOG) method" msgstr "Détection de taches basée sur la méthode du laplacien de gaussien (LOG)" msgid "Blob detection (OpenCV)" msgstr "Détection de taches (OpenCV)" msgid "Detect blobs using OpenCV SimpleBlobDetector" msgstr "Détection de taches basée sur SimpleBlobDetector d'OpenCV" msgid "Creating a ROI grid will overwrite any existing ROI.

    Do you want to continue?" msgstr "La création d'une grille de ROI écrasera toute ROI existante.

    Voulez-vous continuer ?" msgid "Extract ROI" msgstr "Extraire une ROI" msgid "Do you want to extract images from the defined ROI?" msgstr "Souhaitez-vous extraire les images de la ROI définie ?" msgid "Warning:" msgstr "Attention :" msgid "Selected images do not have the same size" msgstr "Les images sélectionnées n'ont pas la même taille" msgid "Destination size:" msgstr "Taille de destination :" msgid "Binning" msgstr "Binning" msgid "Profile" msgstr "Profil" msgid "Distribute on grid" msgstr "Distribuer sur grille" msgid "Denoise / Top-Hat" msgstr "Débruitage Top-Hat" msgid "Two Half-Gaussians fit" msgstr "Ajustement de deux demi-Gaussiennes" msgid "Piecewise exponential fit" msgstr "Ajustement exponentiel par morceaux" msgid "Sigmoid fit" msgstr "Ajustement sigmoïde" msgid "signal to subtract" msgstr "signal à soustraire" msgid "Create a complex-valued signal from magnitude and phase" msgstr "Créer un signal à valeurs complexes à partir de l'amplitude et de la phase" msgid "Create a complex-valued signal from real and imaginary parts" msgstr "Créer un signal à valeurs complexes à partir des parties réelle et imaginaire" msgid "Square root" msgstr "Racine carrée" msgid "Derivative" msgstr "Dérivée" msgid "Integral" msgstr "Intégrale" msgid "signal to convolve with" msgstr "signal pour la convolution" msgid "Replace X by other signal's Y" msgstr "Remplacer X par le Y d'un autre signal" msgid "" "Replace X coordinates using Y values from another signal.\n" "Useful for calibration: plot data vs wavelength scale." msgstr "" "Remplacer les coordonnées X en utilisant les valeurs Y d'un autre signal.\n" "Utile pour l'étalonnage : tracer des données en fonction d'une échelle de longueurs d'onde." msgid "signal providing Y values for X axis" msgstr "signal fournissant les valeurs Y pour l'axe X" msgid "signal to deconvolve with" msgstr "signal pour la déconvolution" msgid "Assemble signals into image" msgstr "Assembler des signaux en une image" msgid "" "Assemble multiple signals into a 2D image.\n" "Signals can be stacked as rows or columns, with optional normalization." msgstr "" "Assembler plusieurs signaux en une image 2D.\n" "Les signaux peuvent être empilés en lignes ou en colonnes, avec une normalisation optionnelle." msgid "Linear calibration" msgstr "Étalonnage linéaire" msgid "" "Apply linear calibration to the X or Y axis:\n" " • x' = ax + b\n" " • y' = ay + b" msgstr "" "Appliquer un étalonnage linéaire à l'axe X ou Y :\n" " • x' = ax + b\n" " • y' = ay + b" msgid "Reverse X-axis" msgstr "Inverser l'axe des X" msgid "Convert to polar coordinates" msgstr "Convertir en coordonnées polaires" msgid "Convert to cartesian coordinates" msgstr "Convertir en coordonnées cartésiennes" msgid "Power" msgstr "Puissance" msgid "Low-pass filter" msgstr "Filtre passe-bas" msgid "High-pass filter" msgstr "Filtre passe-haut" msgid "Band-pass filter" msgstr "Filtre passe-bande" msgid "Band-stop filter" msgstr "Filtre coupe-bande" msgid "Evaluate fit" msgstr "Évaluer l'ajustement" msgid "signal for X values" msgstr "signal pour les valeurs X" msgid "Evaluate a fitting curve on the x-axis of another signal" msgstr "Évaluer une courbe d'ajustement sur l'axe des x d'un autre signal" msgid "Windowing" msgstr "Fenêtrage" msgid "Apply a window (apodization) function: Hann, Hamming..." msgstr "Appliquer une fonction de fenêtrage (ou d'apodisation) : Hann, Hamming..." msgid "Detrending" msgstr "Elimination de tendance" msgid "Interpolation" msgstr "Interpolation" msgid "Allan variance" msgstr "Variance d'Allan" msgid "Allan deviation" msgstr "Ecart-type d'Allan" msgid "Overlapping Allan variance" msgstr "Variance d’Allan avec recouvrement" msgid "Modified Allan variance" msgstr "Variance d'Allan modifiée" msgid "Hadamard variance" msgstr "Variance de Hadamard" msgid "Total variance" msgstr "Variance totale" msgid "Time deviation" msgstr "Ecart-type temporel" msgid "X-Y mode" msgstr "Mode X-Y" msgid "Y-signal of the X-Y mode" msgstr "Signal de l'axe des ordonnées du mode X-Y" msgid "Plot one signal as a fonction of the other one" msgstr "Tracer un signal en fonction de l'autre" msgid "Full width at half-maximum" msgstr "Largeur à mi-hauteur" msgid "Full width at" msgstr "Largeur à " msgid "Extract pulse features" msgstr "Extraire les caractéristiques d'une impulsion" msgid "Extract pulse features (amplitude, rise time, fall time...)" msgstr "Extraire les caractéristiques d'une impulsion (amplitude, temps de montée, temps de descente...)" msgid "Abscissa of the minimum and maximum" msgstr "Abscisse du minimum et du maximum" msgid "Compute the smallest argument of the minima and the smallest argument of the maxima" msgstr "Calcule le plus petit argument du minimum et le plus petit argument du maximum" msgid "Sampling rate and period" msgstr "Fréquence et période d'échantillonnage" msgid "Compute sampling rate and period for a constant sampling signal" msgstr "Calcule la fréquence et la période d'échantillonnage pour un signal à pas constant" msgid "Dynamic parameters" msgstr "Paramètres dynamiques" msgid "Compute dynamic parameters: ENOB, SNR, SINAD, THD, ..." msgstr "Calcule les paramètres dynamiques : ENOB, SNR, SINAD, THD..." msgid "Bandwidth at -3dB" msgstr "Bande passante à -3dB" msgid "Compute bandwidth at -3dB assuming a low-pass filter already expressed in dB" msgstr "Calcule la bande passante à -3dB en supposant un filtre passe-bas déjà exprimé en dB" msgid "Contrast" msgstr "Contraste" msgid "Compute contrast of a signal, i.e. (max-min)/(max+min), e.g. for an image profile" msgstr "Calcule le contraste d'un signal, c'est-à-dire (max-min)/(max+min), p.ex. pour un profil d'image" msgid "Full width at y" msgstr "Largeur à y=..." msgid "Abscissa at y" msgstr "Abscisse à y=..." msgid "Ordinate at x" msgstr "Ordonnée à x=..." msgid "Edit profile parameters" msgstr "Modifier les paramètres du profil" msgid "Reset selection" msgstr "Réinitialiser la sélection" msgid "Range ROI" msgstr "Intervalle ROI" msgid "Rectangular ROI" msgstr "ROI rectangulaire" msgid "Circular ROI" msgstr "ROI circulaire" msgid "Polygonal ROI" msgstr "ROI polygonale" msgid "Regions of interest" msgstr "Régions d'intérêt" #, python-format msgid "" "Extract all ROIs\n" "into a single %s" msgstr "" "Extraire toutes les ROI\n" "dans un seul objet %s" msgid "Graphical ROI" msgstr "ROI graphique" msgid "Coordinate-based ROI" msgstr "ROI par coordonnées" msgid "Remove all ROIs" msgstr "Supprimer toutes les ROI" msgid "Are you sure you want to remove all ROIs?" msgstr "Êtes-vous sûr de vouloir supprimer toutes les ROI ?" msgid "Show mask" msgstr "Afficher le masque" msgid "Show ROI" msgstr "Afficher la ROI" msgid "Show names" msgstr "Afficher les noms" msgid "ROI grid files (*.dlabgrid);;All files (*)" msgstr "Fichiers de grille de ROI (*.dlabgrid);;Tous les fichiers (*)" msgid "Grid parameters" msgstr "Paramètres de grille" msgid "Display parameters" msgstr "Paramètres d'affichage" msgid "ROI grid" msgstr "Grille de ROI" msgid "Import/Export" msgstr "Importer/Exporter" msgid "Import grid" msgstr "Importer une grille" msgid "Export grid" msgstr "Exporter une grille" msgid "Import ROI grid" msgstr "Importer une grille de ROI" #, python-brace-format msgid "Failed to import ROI grid: {0}" msgstr "Échec de l'importation de la grille de ROI : {0}" msgid "Export ROI grid" msgstr "Exporter une grille de ROI" #, python-brace-format msgid "Failed to export ROI grid: {0}" msgstr "Échec de l'exportation de la grille de ROI : {0}" msgid "Settings for main window and general features" msgstr "Réglages de la fenêtre principale et des fonctionnalités générales" msgid "Color mode" msgstr "Thème de couleur" msgid "Color mode for the application" msgstr "Thème de couleur pour l'application" msgid "Process isolation" msgstr "Isolation de processus" msgid "With process isolation, each computation is run in a separate process,
    which prevents the application from freezing during long computations." msgstr "Avec l'isolation de processus, chaque calcul est exécuté dans un processus séparé,
    ce qui évite que l'application ne se fige pendant les calculs longs." msgid "RPC server" msgstr "Serveur XML-RPC" msgid "RPC server is used to communicate with external applications,
    like your own scripts (e.g. from Spyder or Jupyter) or other software." msgstr "Le serveur XML-RPC est utilisé pour communiquer avec des applications externes,
    comme vos propres scripts (par exemple depuis Spyder ou Jupyter) ou d'autres logiciels." msgid "Memory threshold" msgstr "Seuil de mémoire" msgid "MB" msgstr "Mo" msgid "Memory threshold below which a warning is displayed before loading any new data" msgstr "Seuil de mémoire en dessous duquel un avertissement est affiché avant de charger de nouvelles données" msgid "Third-party plugins" msgstr "Plugins tiers" msgid "Disable third-party plugins at startup" msgstr "Désactiver les plugins tiers au démarrage" msgid "Plugins path" msgstr "Chemin des plugins" msgid "Path to third-party plugins.

    DataLab will discover plugins in this path, as well as in your PYTHONPATH." msgstr "Chemin d'accès aux plugins tiers.

    DataLab découvrira les plugins dans ce chemin, ainsi que dans votre PYTHONPATH." msgid "Ignore compatibility issues warning" msgstr "Ignorer l'avertissement de compatibilité" msgid "DataLab v0.20 plugins" msgstr "Plugins DataLab v0.20" msgid "If enabled, DataLab will not warn you about v0.20 plugins that are no longer compatible with v1.0." msgstr "Si activé, DataLab ne vous avertira pas des plugins v0.20 qui ne sont plus compatibles avec v1.0." msgid "Settings for internal console, used for debugging or advanced users" msgstr "Réglages de la console interne, utilisée pour le débogage ou les utilisateurs avancés" msgid "Console enabled" msgstr "Console activée" msgid "Show console on error" msgstr "Afficher la console en cas d'erreur" msgid "If enabled, the console will be shown when an error occurs in the application. This is useful for debugging purposes as it allows to see the error traceback." msgstr "Si activé, la console sera affichée lorsqu'une erreur se produit dans l'application. Cela est utile pour le débogage car cela permet de voir la trace de l'erreur." msgid "External editor path" msgstr "Chemin de l'éditeur externe" msgid "External editor arguments" msgstr "Arguments de l'éditeur externe" msgid "Settings for I/O operations" msgstr "Réglages des opérations d'entrée/sortie" msgid "Clear workspace before loading HDF5 file" msgstr "Effacer l'espace de travail avant de charger un fichier HDF5" msgid "" "If enabled, the current workspace will be cleared before loading a new HDF5 file.\n" "If disabled, when importing DataLab workspace files, only objects with conflicting identifiers will have their processing history lost (features like 'Show source' and 'Recompute' will not work for those objects). Non-conflicting objects will preserve their processing history." msgstr "" "Si activé, l'espace de travail actuel sera effacé avant de charger un nouveau fichier HDF5.\n" "Si désactivé, lors de l'importation de fichiers de l'espace de travail DataLab, seuls les objets avec des identifiants en conflit perdront leur historique de traitement (les fonctionnalités telles que 'Afficher la source' et 'Retraiter' ne fonctionneront pas pour ces objets). Les objets non conflictuels conserveront leur historique de traitement." msgid "Ask before clearing workspace" msgstr "Demander avant d'effacer l'espace de travail" msgid "HDF5 full path in title" msgstr "Chemin complet du fichier HDF5 dans le titre" msgid "If enabled, the full path of the HDF5 data set will be used as the title for the signal/image object.
    If disabled, only the name of the data set will be used as the title." msgstr "Si activé, le chemin complet du fichier HDF5 sera utilisé comme titre de l'objet signal/image.
    Si désactivé, seul le nom du fichier HDF5 sera utilisé comme titre." msgid "HDF5 file name in title" msgstr "Nom du fichier HDF5 dans le titre" msgid "If enabled, the name of the HDF5 file will be used as a suffix in the title of the signal/image object." msgstr "Si activé, le nom du fichier HDF5 sera utilisé comme suffixe dans le titre de l'objet signal/image." msgid "Settings for computations" msgstr "Réglages des calculs" msgid "Operation mode" msgstr "Mode d'opération" #, python-format msgid "Operation mode for computations taking N inputs:
    • single: single operand mode
    • pairwise: pairwise operation mode

    Computations taking N inputs are the ones where:
    • N(>=2) objects in %s 1 object out
    • N(>=1) objects + 1 object in %s N objects out
    " msgstr "Mode d'opération pour les calculs prenant N entrées:
    • single: mode d'opération avec un seul opérande
    • pairwise: mode d'opération par paire

    Les calculs prenant N entrées sont ceux où :
    • N(>=2) objets en %s 1 objet en sortie
    • N(>=1) objets + 1 objet en %s N objets en sortie
    " msgid "Use current signal bounds" msgstr "Utiliser les bornes du signal courant" msgid "New signals" msgstr "Nouveaux signaux" msgid "If enabled, when creating a new signal, the xmin and xmax values will be initialized from the current signal's bounds.
    If disabled, the default values from the New Signal dialog will be used." msgstr "Si activé, lors de la création d'un nouveau signal, les valeurs xmin et xmax seront initialisées à partir des bornes du signal actuel.
    Si désactivé, les valeurs par défaut de la boîte de dialogue Nouveau signal seront utilisées." msgid "Use current image dimensions" msgstr "Utiliser les dimensions de l'image courante" msgid "New images" msgstr "Nouvelles images" msgid "If enabled, when creating a new image, the width and height values will be initialized from the current image's dimensions.
    If disabled, the default values from the New Image dialog will be used." msgstr "Si activé, lors de la création d'une nouvelle image, les valeurs de largeur et de hauteur seront initialisées à partir des dimensions de l'image actuelle.
    Si désactivé, les valeurs par défaut de la boîte de dialogue Nouvelle image seront utilisées." msgid "FFT shift" msgstr "Décalage FFT" msgid "Enable FFT shift to center the zero-frequency component in the frequency spectrum for easier visualization and analysis." msgstr "Activer le décalage FFT pour centrer la composante de fréquence nulle dans le spectre de fréquence pour une visualisation et une analyse plus faciles." msgid "Auto-normalize convolution/deconvolution kernel" msgstr "Normalisation automatique du noyau de convolution/déconvolution" msgid "Convolution" msgstr "Convolution" msgid "If enabled, convolution and deconvolution kernels will be automatically normalized for signal and image processing operations to preserve signal energy and image intensity." msgstr "Si activé, les noyaux de convolution et de déconvolution seront automatiquement normalisés pour les opérations de traitement de signaux et d'images afin de préserver l'énergie du signal et l'intensité de l'image." msgid "Extract multiple ROIs in a single object" msgstr "Extraire plusieurs ROI dans un seul objet" msgid "ROI extraction" msgstr "Extraction de ROI" msgid "If enabled, multiple ROIs will be extracted into a single object.
    If disabled, each ROI will be extracted into a separate object." msgstr "Si activé, plusieurs ROI seront extraites dans un seul objet.
    Si désactivé, chaque ROI sera extraite dans un objet séparé." msgid "Ignore warnings during computations" msgstr "Ignorer les avertissements lors des calculs" msgid "Warnings" msgstr "Avertissements" msgid "If enabled, warnings during computations will be ignored." msgstr "Si activé, les avertissements lors des calculs seront ignorés." msgid "X-axis" msgstr "Axe des X" msgid "Ask before interpolation" msgstr "Demander avant d'interpoler" msgid "Interpolate systematically" msgstr "Interpoler systématiquement" msgid "Behavior when X-axis arrays are incompatible in multi-signal computations:
    • Ask: display confirmation dialog (default)
    • Interpolate: automatically interpolate signals
    " msgstr "Comportement lorsque les tableaux des X sont incompatibles dans les calculs multi-signaux :
    • Demander : afficher une boîte de dialogue de confirmation (par défaut)
    • Interpoler : interpoler automatiquement les signaux
    " msgid "Settings for results management" msgstr "Réglages de la gestion des résultats" msgid "Keep results in metadata after computation" msgstr "Conserver les résultats dans les métadonnées après le calcul" msgid "Keep results" msgstr "Conserver les résultats" msgid "If enabled, the results of a previous analysis will be kept in object's metadata after the computation.
    If disabled, the results will be removed from the object's metadata.

    This option is disabled by default because keeping analysis results may be confusing as those results could be outdated following the computation." msgstr "Si activé, les résultats d'une analyse précédente seront conservés dans les métadonnées de l'objet après le calcul.
    Si désactivé, les résultats seront supprimés des métadonnées de l'objet.

    Cette option est désactivée par défaut car la conservation des résultats d'analyse peut prêter à confusion, car ces résultats pourraient être obsolètes suite au calcul." msgid "Show results dialog automatically after processing" msgstr "Afficher automatiquement la boîte de dialogue des résultats après le traitement" msgid "If enabled, the results dialog will be shown automatically after each processing operation producing results.
    If disabled, the results dialog will not be shown automatically." msgstr "Si activé, la boîte de dialogue des résultats sera affichée automatiquement après chaque opération de traitement produisant des résultats.
    Si désactivé, la boîte de dialogue des résultats ne sera pas affichée automatiquement." msgid "Default image visualization settings" msgstr "Réglages d'affichage d'images par défaut" msgid "Common" msgstr "Commun" msgid "Plot toolbar position" msgstr "Position de la barre d'outils des graphiques" msgid "Top (above plot)" msgstr "Haut (au-dessus du graphique)" msgid "Bottom (below plot)" msgstr "Bas (en-dessous du graphique)" msgid "Left (of plot)" msgstr "Gauche (à gauche du graphique)" msgid "Right (of plot)" msgstr "Droite (à droite du graphique)" msgid "Ignore title insertion message" msgstr "Ignorer le message d'insertion du titre" msgid "Ignore information message when inserting object title as annotation label" msgstr "Ignorer le message d'information lors de l'insertion du titre de l'objet en tant qu'étiquette d'annotation" msgid "Signals" msgstr "Signaux" msgid "Default line width" msgstr "Épaisseur par défaut" msgid "Default line width for curves representing signals" msgstr "Épaisseur de trait par défaut pour les courbes représentant des signaux" msgid "Performance threshold" msgstr "Seuil de performance" msgid "" "Number of points threshold for line width limitation.\n" "For signals with more than this number of points, line width is automatically limited to 1.0 for performance reasons.\n" "\n" "That's because the Qt raster engine experiences significant rendering slowdowns with thick lines on large datasets." msgstr "" "Seuil du nombre de points pour la limitation de l'épaisseur de trait.\n" "Pour les signaux comportant plus de ce nombre de points, l'épaisseur de trait est automatiquement limitée à 1,0 pour des raisons de performance.\n" "\n" "Cela est dû au fait que le moteur de rendu Qt subit des ralentissements importants lors du rendu de lignes épaisses sur de grands ensembles de données." msgid "Use auto downsampling" msgstr "Utiliser l'auto-sous-échantillonnage" msgid "Use auto downsampling for large signals" msgstr "Utiliser l'auto-sous-échantillonnage pour les signaux volumineux" msgid "Downsampling max points" msgstr "Nombre max. de points" msgid "Maximum number of points for downsampling" msgstr "Nombre maximum de points pour le sous-échantillonnage" msgid "Autoscale margin" msgstr "Marge de zoom automatique" msgid "%" msgstr "%" msgid "Percentage of margin to add around data when auto-scaling signal plots.
    A value of 0.2% adds a small margin for better visualization.
    Set to 0% for no margin (exact data bounds)." msgstr "Pourcentage de marge à ajouter autour des données lors du redimensionnement automatique des graphiques de signaux.
    Une valeur de 0,2 % ajoute une petite marge pour une meilleure visualisation.
    Réglez sur 0 % pour aucune marge (limites exactes des données)." msgid "DateTime format (s/min/h)" msgstr "Format DateTime (s/min/h)" msgid "Format string for datetime X-axis labels when using standard time units (s, min, h).
    Uses Python's strftime format codes (e.g., %H:%M:%S for hours:minutes:seconds)." msgstr "Chaîne de format pour les étiquettes de l'axe X datetime lors de l'utilisation d'unités de temps standard (s, min, h).
    Utilise les codes de format strftime de Python (par exemple, %H:%M:%S pour heures:minutes:secondes)." msgid "DateTime format (ms/μs/ns)" msgstr "Format DateTime (ms/μs/ns)" #, python-format msgid "Format string for datetime X-axis labels when using sub-second time units (ms, μs, ns).
    Uses Python's strftime format codes (e.g., %H:%M:%S.%f for hours:minutes:seconds.microseconds)." msgstr "Chaîne de format pour les étiquettes de l'axe X datetime lors de l'utilisation d'unités de temps sub-secondes (ms, μs, ns).
    Utilise les codes de format strftime de Python (par exemple, %H:%M:%S.%f pour heures:minutes:secondes.microsecondes)." msgid "Results: edit shape styles" msgstr "Résultats : modifier les styles de forme" msgid "Results: edit marker styles" msgstr "Résultats : modifier les styles de marqueur" msgid "Images" msgstr "Images" msgid "Lock aspect ratio to 1:1" msgstr "Verrouiller le ratio d'aspect à 1:1" msgid "If enabled, the aspect ratio of the image will be locked to 1:1.
    If disabled, the aspect ratio will be determined by the physical pixel size (this is the default and recommended setting)." msgstr "Si activé, le ratio d'aspect de l'image sera verrouillé à 1:1.
    Si désactivé, le ratio d'aspect sera déterminé par la taille des pixels physiques (c'est le paramètre par défaut et recommandé)." msgid "Eliminate outliers" msgstr "Eliminer les bords" msgid "Eliminate a percentage of the highest and lowest values
    of the image histogram - recommanded values are below 1%" msgstr "Eliminer un pourcentage des valeurs les plus hautes et les plus basses
    de l'histogramme de l'image - les valeurs recommandées sont inférieures à 1%" msgid "Percentage of margin to add around data when auto-scaling image plots.
    A value of 0.2% adds a small margin for better visualization.
    Set to 0% for no margin (exact data bounds)." msgstr "Pourcentage de marge à ajouter autour des données lors du redimensionnement automatique des graphiques d'images.
    Une valeur de 0,2 % ajoute une petite marge pour une meilleure visualisation.
    Réglez sur 0 % pour aucune marge (limites exactes des données)." msgid "Maximum shapes to draw" msgstr "Nombre maximum de formes à dessiner" msgid "Maximum number of geometry shapes to draw on plot." msgstr "Nombre maximum de formes géométriques à dessiner sur le graphique." msgid "Maximum cells in label" msgstr "Nombre maximum de cellules dans l'étiquette" msgid "Maximum number of table cells (rows × columns) to display in merged result label on plot." msgstr "Nombre maximum de cellules de tableau (lignes × colonnes) à afficher dans l'étiquette de résultat fusionnée sur le graphique." msgid "Maximum columns in label" msgstr "Nombre maximum de colonnes dans l'étiquette" msgid "Maximum number of columns to display in merged result label." msgstr "Nombre maximum de colonnes à afficher dans l'étiquette de résultat fusionnée." msgid "Show the merged result label by default" msgstr "Afficher le titre de résultat fusionné par défaut" msgid "Result label" msgstr "Étiquette des résultats" msgid "Show the merged result label on the plot by default. Can be toggled per-object using the checkbox in the Properties panel." msgstr "Etiquette des résultats fusionnés sur le graphique par défaut. Peut être activée ou désactivée par objet à l'aide de la case à cocher dans le panneau des propriétés." msgid "Process isolation enable status" msgstr "Etat d'activation de l'isolation de processus" msgid "RPC server enable status" msgstr "Etat d'activation du serveur XML-RPC" msgid "Console enable status" msgstr "Etat d'activation de la console" msgid "Third-party plugins support" msgstr "Prise en charge des plugins tiers" msgid "Third-party plugins path" msgstr "Chemin des plugins tiers" msgid "General" msgstr "Général" msgid "Visualization" msgstr "Visualisation" msgid "I/O" msgstr "Entrée/sortie" msgid "Settings" msgstr "Préférences" msgid "Restart required" msgstr "Redémarrage requis" #, python-format msgid "" "The following options have been changed:\n" "\n" "- %s\n" "\n" "A restart is required for these changes to take effect." msgstr "" "Les options suivantes ont été modifiées :\n" "\n" "- %s\n" "\n" "Un redémarrage est nécessaire pour que ces changements prennent effet." msgid "Start" msgstr "Démarrer" msgid "Close" msgstr "Fermer" msgid "Hit Enter to continue to the next step, or Esc to close the tour." msgstr "Taper Entrée pour passer à l'étape suivante, ou Echap pour fermer la visite guidée." msgid "Test signal, for the tour" msgstr "Signal de test, pour la visite guidée" msgid "Test image, for the tour" msgstr "Image de test, pour la visite guidée" msgid "Welcome to DataLab!" msgstr "Bienvenue dans DataLab !" msgid "This tour will guide you through the main features of DataLab." msgstr "Cette visite guidée vous présentera les principales fonctionnalités de DataLab." msgid "DataLab main window" msgstr "Fenêtre principale de DataLab" msgid "This is the main window of DataLab. It is composed of several parts that we will describe in the following steps." msgstr "Ceci est la fenêtre principale de DataLab. Elle est composée de plusieurs parties que nous décrirons dans les étapes suivantes." msgid "Menus and toolbars regroup the main actions that can be performed in DataLab. Their content is adapted to the current panel, as we will see in the following steps." msgstr "Les menus et barres d'outils regroupent les principales actions qui peuvent être réalisées dans DataLab. Leur contenu est adapté au panneau courant, comme nous le verrons dans les étapes suivantes." msgid "The main window is composed of two main panels: the Signal Panel, and the Image Panel.
    Switching between panels is done using the highlighted tabs." msgstr "La fenêtre principale est composée de deux panneaux principaux : le panneau Signal, et le panneau Image.
    Le passage d'un panneau à l'autre se fait en utilisant les onglets surlignés." msgid "The Signal Panel is used to manage 1D signals.It is composed of the elements shown in the following steps." msgstr "Le Panneau Signal est utilisé pour gérer les signaux 1D. Il est composé des éléments décrits dans les étapes suivantes." msgid "List and properties" msgstr "Liste et propriétés" msgid "In the highlighted area, signals are listed at the top, and their properties may be displayed and edited at the bottom.

    Signals are numbered (but may be reorganized) and put together in numbered groups." msgstr "Dans la zone surlignée, les signaux sont listés en haut, et leurs propriétés peuvent être affichées et éditées en bas.

    Les signaux sont numérotés (mais peuvent être réorganisés) et peuvent être regroupés dans des groupes numérotés." msgid "View" msgstr "Vue" msgid "Signals are plotted in the Signal View.

    Curves may be customized using context menus or the vertical toolbar on the left (appearance settings are saved in the signal metadata)." msgstr "Les signaux sont tracés dans la Vues Signal.

    Les courbes peuvent être personnalisées en utilisant les menus contextuels ou la barre d'outils verticale à gauche (ces réglages d'apparence sont enregistrés dans les métadonnées du signal)." msgid "File menu" msgstr "Menu Fichier" msgid "The File menu contains actions to import and export signals individually (various formats) or to save or restore the whole workspace (HDF5 files)." msgstr "Le menu Fichier contient les actions pour importer et exporter des signaux individuellement (divers formats) ou pour enregistrer ou restaurer l'ensemble de l'espace de travail (fichiers HDF5)." msgid "Create menu" msgstr "Menu Création" msgid "The Create menu contains actions to create new signals from various models (Gaussian, sine, etc.)." msgstr "Le menu Création contient des actions pour créer de nouveaux signaux à partir de différents modèles (Gaussien, sinusoïde, etc.)." msgid "Edit menu" msgstr "Menu Edition" msgid "The Edit menu contains actions to edit signals individually or in groups." msgstr "Le menu Edition contient les actions pour éditer des signaux individuellement ou en groupes." msgid "Operations menu" msgstr "Menu Opérations" msgid "The Operations menu is focused on arithmetic operations, basic mathematical functions or data type conversions." msgstr "Le menu Opérations est centré sur les opérations arithmétiques, les fonctions mathématiques de base ou les conversions de type de données." msgid "Processing menu" msgstr "Menu Traitement" msgid "The Processing menu regroups 1->1 signal processing actions." msgstr "Le menu Traitement regroupe les actions de traitement de signaux 1->1." msgid "Analysis menu" msgstr "Menu Analyse" msgid "The Analysis menu regroups 1->0 signal computing actions (that is, actions that do not modify the signals, but compute a result, e.g. scalar values), with optional ROI selection." msgstr "Le menu Analyse regroupe les actions de calculs de signaux 1->0 (c'est-à-dire les actions qui ne modifient pas les signaux, mais qui calculent un résultat, par exemple des valeurs scalaires), avec une sélection optionnelle de ROI." msgid "The Image Panel is used to manage 2D images. It is composed of the elements shown in the following steps." msgstr "Le Panneau Image est utilisé pour gérer les images 2D. Il est composé des éléments décrits dans les étapes suivantes." msgid "In the highlighted area, images are listed at the top, and their properties may be displayed and edited at the bottom.

    Images are numbered (but may be reorganized) and put together in numbered groups." msgstr "Dans la zone surlignée, les images sont listées en haut, et leurs propriétés peuvent être affichées et éditées en bas.

    Les images sont numérotées (mais peuvent être réorganisées) et peuvent être regroupées dans des groupes numérotés." msgid "Images are shown in the Image View.

    The displayed images may be customized using context menus or the vertical toolbar on the left (appearance settings are saved in the image metadata)." msgstr "Les images sont affichées dans la Vues Image.

    Les images affichées peuvent être personnalisées en utilisant les menus contextuels ou la barre d'outils verticale à gauche (ces réglages d'apparence sont enregistrés dans les métadonnées de l'image)." msgid "The File menu contains actions to import and export images individually (various formats) or to save or restore the whole workspace (HDF5 files)." msgstr "Le menu Fichier contient les actions pour importer et exporter des images individuellement (divers formats) ou pour enregistrer ou restaurer l'ensemble de l'espace de travail (fichiers HDF5)." msgid "The Create menu contains actions to create new images from various models (Gaussian, checkerboard, etc.)." msgstr "Le menu Création contient des actions pour créer de nouvelles images à partir de différents modèles (Gaussien, damier, etc.)." msgid "The Edit menu contains actions to edit images individually or in groups." msgstr "Le menu Edition contient les actions pour éditer des images individuellement ou en groupes." msgid "The Operations menu is focused on arithmetic operations, data type conversions, pixel binning resize, intensity profiles..." msgstr "Le menu Opérations est centré sur les opérations arithmétiques, les conversions de type de données, le redimensionnement par binning de pixels, les profils d'intensité..." msgid "The Processing menu regroups 1->1 image processing actions (that is, actions that modify the images)." msgstr "Le menu Traitement regroupe les actions de traitement d'images 1->1 (c'est-à-dire les actions qui modifient les images)." msgid "The Analysis menu regroups 1->0 image computing actions (that is, actions that do not modify the images, but compute a result, e.g. circle coordinates), with optional ROI selection." msgstr "Le menu Analyse regroupe les actions de calculs d'images 1->0 (c'est-à-dire les actions qui ne modifient pas les images, mais qui calculent un résultat, par exemple les coordonnées d'un cercle), avec une sélection optionnelle de ROI." msgid "Extensions" msgstr "Extensions" msgid "DataLab is designed to be easily extended with new features, by using Macros, Plugins or Remote Control.

    The common point between these mechanisms is that they are all relying on Python scripts and the DataLab API." msgstr "DataLab est conçu pour être facilement personnalisable avec de nouvelles fonctionnalités, en utilisant des Macros, des Plugins ou un Contrôle à distance.

    Le point commun entre ces mécanismes est qu'ils reposent tous sur des scripts Python et l'API DataLab." msgid "Macros" msgstr "Macros" msgid "The Macro Panel allows to create, edit and run macros.
    Macros are saved together with the DataLab workspace (HDF5 file)." msgstr "Le Gestionnaire de Macros permet de créer, éditer et exécuter des macros.
    Les macros sont sauvegardées avec l'espace de travail DataLab (fichier HDF5)." msgid "The Plugins menu regroups features that are not part of the core of DataLab, but that are provided as plugins.
    (See the documentation for more information about plugins.)" msgstr "Le menu Plugins regroupe des fonctionnalités qui ne font pas partie du coeur de DataLab, mais qui sont fournies sous forme de plugins.
    (Voir la documentation pour plus d'informations sur les plugins.)" msgid "This is the end of the tour!" msgstr "C'est la fin de la visite guidée !" msgid "You can show the tour again, or close this dialog box." msgstr "Vous pouvez afficher la visite guidée à nouveau, ou fermer cette boîte de dialogue." msgid "Registered plugins:" msgstr "Plugins enregistrés :" msgid "No plugins available" msgstr "Aucun plugin disponible" msgid "Plugins are disabled (see DataLab settings)" msgstr "Les plugins sont désactivés (voir les préférences de DataLab)" msgid "Warning" msgstr "Attention" msgid "Error" msgstr "Erreur" msgid "Information" msgstr "Information" msgid "Question" msgstr "Question" msgid "Test data" msgstr "Données de test" msgid "Testing DataLab functionalities" msgstr "Tester les fonctionnalités de DataLab" msgid "Ring" msgstr "Anneau" msgid "Grid of Gaussian Images" msgstr "Grille d'images gaussiennes" msgid "Load spectrum of paracetamol" msgstr "Charger le spectre du paracétamol" msgid "Load all test signals" msgstr "Charger tous les signaux de test" msgid "Create image with peaks" msgstr "Créer une image avec des pics" msgid "Create 2D sin cos image" msgstr "Créer une image 2D sin cos" msgid "Create 2D noisy gaussian image" msgstr "Créer une image 2D gaussienne bruitée" msgid "Create 2D multi gaussian image" msgstr "Créer une image 2D multi-gaussienne" msgid "Create annotated image" msgstr "Créer une image annotée" msgid "Create 2D step image" msgstr "Créer une image 2D échelon" msgid "Create ring image" msgstr "Créer une image avec un anneau" msgid "Create image with a grid of gaussian spots" msgstr "Créer une image avec une grille de spots gaussiens" msgid "Load all test images" msgstr "Charger toutes les images de test" msgid "Host application" msgstr "Application hôte" msgid "Raise window" msgstr "Placer la fenêtre au premier plan" msgid "Add signal objects" msgstr "Ajouter des objets signaux" msgid "Add image objects" msgstr "Ajouter des objets images" msgid "Remove all objects" msgstr "Supprimer tous les objets" msgid "Import macro from file (example)" msgstr "Importer une macro depuis un fichier (exemple)" msgid "Close DataLab" msgstr "Fermer DataLab" msgid "This the host application, which embeds DataLab." msgstr "Ceci est une application embarquant DataLab." msgid "Open DataLab" msgstr "Ouvrir DataLab" msgid "Import signal from DataLab" msgstr "Importer un signal depuis DataLab" msgid "Import image from DataLab" msgstr "Importer une image depuis DataLab" msgid "Remote client test" msgstr "Test du client distant" msgid "This the client application, which connects to DataLab." msgstr "Ceci l'application cliente, qui se connecte à DataLab." msgid "Connect to DataLab" msgstr "Se connecter à DataLab" msgid "Execute multiple commands" msgstr "Exécuter des commandes multiples" msgid "Get object titles" msgstr "Obtenir la liste des titres" msgid "Get object uuids" msgstr "Obtenir la liste des uuids" msgid "Get object" msgstr "Obtenir un objet" msgid "Raw data (2D-Gaussian)" msgstr "Image brute (gaussienne 2D)" msgid "Flat data (Uniform random)" msgstr "Image d'homogénéité (Distribution uniforme)" msgid "Random function" msgstr "Fonction gaussienne aléatoire" msgid "Multi-Gaussian" msgstr "Multi-gaussienne" msgid "2D Peaks with noise background" msgstr "Pics 2D avec fond bruité" msgid "Click OK to start the demo.

    Note:
    - Demo will cover a selection of DataLab features (for a complete list of features, please refer to the documentation).
    - It won't require any user interaction." msgstr "Cliquer sur OK pour démarrer la démo.

    Note :
    - La démo couvre une sélection des fonctionnalités de DataLab (pour une liste complète des fonctionnalités, veuillez vous référer à la documentation).
    - Elle ne nécessite aucune interaction de l'utilisateur." msgid "Click OK to end demo." msgstr "Cliquer sur OK pour terminer la démo." msgid "Cancel" msgstr "Annuler" msgid "Error:" msgstr "Erreur:" msgid "Context" msgstr "Contexte" #, python-format msgid "The file %s could not be read:" msgstr "Le fichier %s n'a pas pu être ouvert :" #, python-format msgid "The file %s could not be written:" msgstr "Le fichier %s n'a pas pu être enregistré :" msgid "in this folder" msgstr "dans ce dossier" msgid "Open tab menu" msgstr "Ouvrir le menu des onglets" msgid "Connection to DataLab" msgstr "Connexion à DataLab" msgid "Contents of file" msgstr "Contenu du fichier" msgid "Polymomial fit" msgstr "Ajustement polynomial" msgid "Amplitude" msgstr "Amplitude" msgid "Base line" msgstr "Ligne de base" msgid "Std-dev" msgstr "Ecart-type" msgid "Mean" msgstr "Moyenne" msgid "Y0" msgstr "Y0" msgid "A coefficient" msgstr "Coefficient A" msgid "B coefficient" msgstr "Coefficient B" msgid "y0 constant" msgstr "Constante y0" msgid "Frequency" msgstr "Fréquence" msgid "Continuous component" msgstr "Composante continue" msgid "Peak wavelength" msgstr "Longueur d'onde de pic" msgid "Width factor" msgstr "Facteur de largeur" msgid "Left amplitude" msgstr "Amplitude gauche" msgid "Right amplitude" msgstr "Amplitude droite" msgid "Left width" msgstr "Largeur gauche" msgid "Right width" msgstr "Largeur droite" msgid "Center" msgstr "Centre" msgid "Left baseline" msgstr "Ligne de base gauche" msgid "Right baseline" msgstr "Ligne de base droite" msgid "Center position" msgstr "Position du centre" msgid "Left time constant" msgstr "Constante de temps gauche" msgid "Right time constant" msgstr "Constante de temps droite" msgid "Collapse all" msgstr "Replier tout" msgid "Expand all" msgstr "Déplier tout" msgid "Restore" msgstr "Restaurer" msgid "Restore original tree layout" msgstr "Restaurer l'organisation initiale de l'arbre" msgid "Collapse selection" msgstr "Replier la sélection" msgid "Expand selection" msgstr "Déplier la sélection" msgid "HDF5 Browser" msgstr "Explorateur HDF5" msgid "Size" msgstr "Taille" msgid "Type" msgstr "Type" msgid "Value" msgstr "Valeur" msgid "Name" msgstr "Nom" msgid "Unsupported data" msgstr "Données non prises en charge" msgid "Group" msgstr "Groupe" msgid "Attributes" msgstr "Attributs" msgid "Show array" msgstr "Afficher le tableau" msgid "Path" msgstr "Chemin" msgid "Description" msgstr "Description" msgid "Textual preview" msgstr "Aperçu textuel" msgid "Select HDF5 file" msgstr "Sélectionner un fichier HDF5" msgid "Check all" msgstr "Cocher tout" msgid "Uncheck all" msgstr "Décocher tout" msgid "Show only supported data" msgstr "Afficher uniquement les données prises en charge" msgid "Show values" msgstr "Afficher les valeurs" msgid "Image background selection" msgstr "Sélection de l'arrière-plan de l'image" msgid "Background area" msgstr "Zone d'arrière-plan" msgid "Background value:" msgstr "Valeur de l'arrière-plan :" msgid "Installation configuration" msgstr "Configuration d'installation" msgid "User configuration" msgstr "Configuration utilisateur" msgid "Plugins and I/O features" msgstr "Plugins et fonctionnalités d'entrée/sortie" msgid "Log files were generated during current session." msgstr "Des journaux de bord ont été générés lors de la session en cours." msgid "Log files were generated during last session." msgstr "Des journaux de bord ont été générés lors de la dernière session." msgid "Log files are currently empty." msgstr "Les journaux de bord sont vides." msgid "Signal baseline selection" msgstr "Sélection de la ligne de base du signal" msgid "Select X value with cursor" msgstr "Sélectionner la valeur X avec le curseur" msgid "Select Y value with cursor" msgstr "Sélectionner la valeur Y avec le curseur" msgid "Apply" msgstr "Appliquer" msgid "Apply cursor position" msgstr "Appliquer la position du curseur" msgid "Cursor position" msgstr "Position du curseur" msgid "Minimum distance:" msgstr "Distance minimale :" msgid "Signal peak detection" msgstr "Détection de pics 1D" msgid "Internal console" msgstr "Console interne" msgid "" "Click to show the internal console.\n" "The icon will turn red if an error or warning is logged." msgstr "" "Cliquer pour afficher la console interne.\n" "L'icône deviendra rouge si une erreur ou un avertissement est enregistré." msgid "" "Click to show the internal console.\n" "An error or warning has been logged." msgstr "" "Cliquer pour afficher la console interne.\n" "Une erreur ou un avertissement a été enregistré." msgid "" "Click to show the internal console.\n" "No error or warning has been logged." msgstr "" "Cliquer pour afficher la console interne.\n" "Aucune erreur ou avertissement n'a été enregistré." msgid "Memory available:" msgstr "Mémoire disponible :" msgid "Memory used:" msgstr "Mémoire utilisée :" msgid "Alarm threshold:" msgstr "Seuil d'alarme :" msgid "Memory:" msgstr "Mémoire :" msgid "Plugins:" msgstr "Plugins :" msgid "XML-RPC:" msgstr "XML-RPC :" msgid "Source" msgstr "Source" msgid "File" msgstr "Fichier" msgid "Clipboard" msgstr "Presse-papiers" msgid "Source of the data" msgstr "Source des données" msgid "File containing the data" msgstr "Fichier contenant les données" msgid "Preview parameters" msgstr "Paramètres de l'aperçu" msgid "Maximum Number of Rows" msgstr "Nombre maximum de lignes" msgid "Maximum number of rows to display" msgstr "Nombre maximum de lignes à afficher" msgid "Select the source of the data:" msgstr "Sélectionner la source des données :" msgid "Source Parameters" msgstr "Paramètres de la source" msgid "Delimiter" msgstr "Délimiteur" msgid "Tab" msgstr "Tabulation" msgid "Space" msgstr "Espace" msgid "Column delimiter character" msgstr "Caractère délimiteur de colonne" msgid "Decimal" msgstr "Décimal" msgid "Point" msgstr "Point" msgid "Comma" msgstr "Virgule" msgid "Decimal separator character" msgstr "Caractère séparateur décimal" msgid "Comments" msgstr "Commentaires" msgid "Character that indicates a comment line" msgstr "Caractère indiquant une ligne de commentaire" msgid "Rows to Skip" msgstr "Lignes à sauter" msgid "Number of rows to skip at the beginning of the file (including comments)" msgstr "Nombre de lignes à sauter au début du fichier (y compris les commentaires)" msgid "Max. nb of rows" msgstr "Nb max. de lignes" msgid "Maximum number of rows to import" msgstr "Nombre maximum de lignes à importer" msgid "Header" msgstr "En-tête" msgid "None" msgstr "Aucun" msgid "Infer" msgstr "Inférer" msgid "First row" msgstr "Première ligne" msgid "Row index to use as the column names" msgstr "Indice de ligne à utiliser comme noms de colonnes" msgid "Transpose" msgstr "Transposer" msgid "Transpose the data (swap rows and columns)" msgstr "Transposer les données (échanger les lignes et les colonnes)" msgid "Data type" msgstr "Type de données" msgid "Output signal data type." msgstr "Type de données du signal de sortie." msgid "First Column is X" msgstr "La première colonne est X" msgid "" "First column contains the X values\n" "(ignored if there is only one column)" msgstr "" "La première colonne contient les valeurs des X\n" "(ignoré s'il n'y a qu'une seule colonne)" msgid "Output image data type." msgstr "Type de données de l'image générée." msgid "Raw Data" msgstr "Données brutes" msgid "Data Preview" msgstr "Aperçu des données" msgid "Preview and modify the import settings:" msgstr "Aperçu et modification des paramètres d'importation :" msgid "Import Parameters" msgstr "Paramètres d'importation" msgid "Reading data" msgstr "Lecture des données" #, python-format msgid "" "The number of signals to import is very high (%d).\n" "This may be an error.\n" "\n" "Are you sure you want to continue?" msgstr "" "Le nombre de signaux à importer est très élevé (%d).\n" "Cela peut être une erreur.\n" "\n" "Etes-vous sûr de vouloir continuer ?" msgid "Graphical Representation" msgstr "Représentation graphique" msgid "Graphical representation of the imported data" msgstr "Représentation graphique des données importées" #, python-format msgid "Unselect the %s that you do not want to import:" msgstr "Désélectionner les %s que vous ne voulez pas importer :" msgid "Select all" msgstr "Tout sélectionner" msgid "Adding data to the plot" msgstr "Ajout des données au graphique" msgid "Title" msgstr "Titre" msgid "X label" msgstr "Titre X" msgid "Y label" msgstr "Titre Y" msgid "X unit" msgstr "Unité X" msgid "Y unit" msgstr "Unité Y" msgid "Z label" msgstr "Titre Z" msgid "Z unit" msgstr "Unité Z" msgid "Labels and units" msgstr "Titres et unités" msgid "Set the labels and units for the imported data" msgstr "Définir les titres et unités pour les données importées" msgid "The following title, labels and units will be applied to the data.

    Note: Leave empty the labels and units to keep the default values (i.e. the values which were inferred from the data)." msgstr "Les titres, étiquettes et unités suivants seront appliqués aux données.

    Note : Laisser vide les étiquettes et unités pour conserver les valeurs par défaut (c'est-à-dire les valeurs qui ont été déduites des données)." msgid "clipboard" msgstr "presse-papiers" msgid "Imported from:" msgstr "Importer depuis :" msgid "DataLab Import Wizard" msgstr "Assistant d'importation de DataLab" msgid "Error message" msgstr "Message d'erreur" msgid "The following traceback may help to understand the problem:" msgstr "Le traceback suivant peut aider à comprendre le problème :" msgid "Warning message" msgstr "Message d'avertissement" msgid "Please take into account the following warning message:" msgstr "Merci de prendre en compte le message d'avertissement suivant :" msgid "An error has occured during the following context:" msgstr "Une erreur est survenue dans le contexte suivant:" msgid "Tip" msgstr "Astuce" msgid "Please click on the 'Ignore' button to ignore this warning next time." msgstr "Merci de cliquer sur le bouton 'Ignorer' pour ignorer cet avertissement la prochaine fois." msgid "Back" msgstr "Précédent" msgid "Next" msgstr "Suivant" msgid "Finish" msgstr "Terminer" msgid "Welcome to the Example Wizard" msgstr "Bienvenue dans l'assistant exemple" msgid "This wizard will guide you through the process of importing data." msgstr "Cet assistant vous guidera à travers le processus d'importation de données." msgid "Select the Source of the Data" msgstr "Sélectionner la source des données" msgid "Select the source of the data to be imported (clipboard or file)." msgstr "Sélectionner la source des données à importer (presse-papiers ou fichier)." msgid "Browse..." msgstr "Parcourir..." msgid "Select the File to Import" msgstr "Sélectionner le fichier à importer" msgid "CSV Files (*.csv);;Text Files (*.txt);;All Files (*)" msgstr "Fichiers CSV (*.csv);;Fichiers texte (*.txt);;Tous les fichiers (*)" msgid "Please select the file to import." msgstr "Merci de sélectionner le fichier à importer." msgid "Example Wizard" msgstr "Assistant exemple" DataLab-1.0.2/datalab/objectmodel.py000066400000000000000000000524121511411446000172340ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Object model ============ The :mod:`datalab.gui.objectmodel` module defines the object data model used by the GUI to store signals, images and groups. The model is based on a hierarchical tree of objects, with two levels: - The top level is a list of groups (`ObjectGroup` instances) - The second level is a list of objects (`SignalObj` or `ImageObj` instances) The model is implemented by the `ObjectModel` class. Object group ------------ The `ObjectGroup` class represents a group of objects. It is a container for `SignalObj` and `ImageObj` instances. .. autoclass:: ObjectGroup Object model ------------ The `ObjectModel` class is a container for ObjectGroup instances, as well as a container for `SignalObj` and `ImageObj` instances. .. autoclass:: ObjectModel """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import re from collections.abc import Iterator from typing import Callable from uuid import uuid4 from sigima import ImageObj, SignalObj def get_number(obj: SignalObj | ImageObj | ObjectGroup) -> int: """Get object number from metadata""" if isinstance(obj, ObjectGroup): return obj.number number = obj.get_metadata_option("number") assert isinstance(number, int) return number def set_number(obj: SignalObj | ImageObj | ObjectGroup, number: int) -> None: """Set object number in metadata""" assert isinstance(number, int) if isinstance(obj, ObjectGroup): obj.number = number else: obj.set_metadata_option("number", number) def get_uuid(obj: SignalObj | ImageObj | ObjectGroup) -> str: """Get object UUID""" if isinstance(obj, ObjectGroup): return obj.uuid return obj.get_metadata_option("uuid", str(uuid4())) def set_uuid(obj: SignalObj | ImageObj | ObjectGroup) -> None: """Set object UUID""" if isinstance(obj, ObjectGroup): obj.uuid = str(uuid4()) else: obj.set_metadata_option("uuid", str(uuid4())) def get_short_id(obj: SignalObj | ImageObj | ObjectGroup) -> str: """Short object ID""" if isinstance(obj, ObjectGroup): return f"{obj.prefix}{get_number(obj):03d}" return f"{obj.PREFIX}{get_number(obj):03d}" def patch_title_with_ids( dst_obj: SignalObj | ImageObj, src_objs: list[SignalObj] | list[ImageObj], id_func: Callable, ) -> None: """Patch object title with short IDs of source objects Destination object's title has been set to a string containing placeholders (e.g. "integral({0})"), by `sigima` computation function using a generic mecanism (see `sigima.base.dst_1_to_1` for example). Args: dst_obj: destination object src_objs: list of source objects id_func: function to get ID from object (e.g. `short_id` or `get_uuid`) """ ids = [id_func(obj) for obj in src_objs] title = dst_obj.title assert isinstance(title, str), "Title must be a string" try: dst_obj.title = title.format(*ids) except IndexError as exc: raise ValueError( f"Not enough source objects to fill title placeholders: {title}" ) from exc class ObjectGroup: """Represents a DataLab object group Args: title: group title model: object model prefix: prefix for short ID ("gs" for signal groups, "gi" for image groups) """ def __init__(self, title: str, model: ObjectModel, prefix: str) -> None: self.model = model self.prefix = prefix # Instance-specific prefix self.uuid: str = str(uuid4()) # Group uuid self.number: int = 0 # Group number (used for short ID) self.__objects: list[str] = [] # list of object uuids self.__title: str = title @property def title(self) -> str: """Return group title""" return self.__title @title.setter def title(self, title: str) -> None: """Set group title""" self.__title = title def __iter__(self) -> Iterator[SignalObj | ImageObj]: """Iterate over objects in group""" return iter(self.model.get_objects(self.__objects)) def __len__(self) -> int: """Return number of objects in group""" return len(self.__objects) def __getitem__( self, index: int | slice ) -> SignalObj | ImageObj | list[SignalObj | ImageObj]: """Return object at index""" if isinstance(index, slice): return [ self.model[self.__objects[i]] for i in range(*index.indices(len(self))) if i < len(self) ] return self.model[self.__objects[index]] def __contains__(self, obj: SignalObj | ImageObj) -> bool: """Return True if obj is in group""" return get_uuid(obj) in self.__objects def append(self, obj: SignalObj | ImageObj) -> None: """Append object to group""" self.__objects.append(get_uuid(obj)) def insert(self, index: int, obj: SignalObj | ImageObj) -> None: """Insert object at index""" self.model.replace_short_ids_by_uuids_in_titles([obj]) self.__objects.insert(index, get_uuid(obj)) self.model.reset_short_ids() self.model.replace_uuids_by_short_ids_in_titles() def remove(self, obj: SignalObj | ImageObj) -> None: """Remove object from group""" self.model.replace_short_ids_by_uuids_in_titles() self.__objects.remove(get_uuid(obj)) self.model.reset_short_ids() self.model.replace_uuids_by_short_ids_in_titles() def clear(self) -> None: """Clear group""" self.__objects.clear() def get_objects(self) -> list[SignalObj | ImageObj]: """Return objects in group""" return self.model.get_objects(self.__objects) def get_object_ids(self) -> list[str]: """Return object ids in group""" return self.__objects class ObjectModel: """Represents a DataLab object model (groups of signals/images)""" def __init__(self, group_prefix: str) -> None: """Initialize object model Args: group_prefix: prefix for group short IDs ("gs" for signal, "gi" for image) """ self._group_prefix = group_prefix # dict of objects, key is object uuid: self._objects: dict[str, SignalObj | ImageObj] = {} # list of groups: self._groups: list[ObjectGroup] = [] def reset_short_ids(self) -> None: """Reset short IDs (used for object numbering) This method is called when an object was removed from a group.""" gnb = onb = 1 for group in self._groups: set_number(group, gnb) gnb += 1 for obj in group: set_number(obj, onb) onb += 1 def __len__(self) -> int: """Return number of objects""" return len(self._objects) def __getitem__(self, uuid: str) -> SignalObj | ImageObj: """Return object with uuid""" return self._objects[uuid] def __iter__(self) -> Iterator[SignalObj | ImageObj]: """Iterate over objects""" return iter(self._objects.values()) def __repr__(self) -> str: """Return object representation""" return repr(self._objects) def __str__(self) -> str: """Return object string representation""" return str(self._objects) def __bool__(self) -> bool: """Return True if model is not empty""" return bool(self._objects) def __contains__(self, obj: SignalObj | ImageObj) -> bool: """Return True if obj is in model""" return get_uuid(obj) in self._objects def has_uuid(self, uuid: str) -> bool: """Check if an object with the given UUID exists in the model Args: uuid: UUID string to check Returns: True if an object with this UUID exists, False otherwise """ return uuid in self._objects def clear(self) -> None: """Clear model""" self._objects.clear() self._groups.clear() def get_all_objects( self, flatten: bool = True ) -> list[SignalObj | ImageObj] | list[list[SignalObj | ImageObj]]: """Return all objects, in order of appearance in groups Args: flatten: if True, return a flat list of objects, otherwise return a list of lists (one list per group) Returns: List of objects in order of appearance in groups. """ objects = [] for group in self._groups: if flatten: objects.extend(group.get_objects()) else: objects.append(group.get_objects()) return objects def get_object_or_group(self, uuid: str) -> SignalObj | ImageObj | ObjectGroup: """Return object or group with uuid""" if uuid in self._objects: return self._objects[uuid] for group in self._groups: if get_uuid(group) == uuid: return group raise KeyError(f"Object or group with uuid {uuid} not found") def get_group(self, uuid: str) -> ObjectGroup: """Return group with uuid""" for group in self._groups: if get_uuid(group) == uuid: return group raise KeyError(f"Group with uuid {uuid} not found") def get_number(self, obj_or_group: SignalObj | ImageObj | ObjectGroup) -> int: """Return number of object or group""" if isinstance(obj_or_group, ObjectGroup): try: return self._groups.index(obj_or_group) + 1 except ValueError as exc: raise KeyError( f"Group {get_uuid(obj_or_group)} not found in model" ) from exc if isinstance(obj_or_group, (SignalObj, ImageObj)): objs = self.get_all_objects() try: return objs.index(obj_or_group) + 1 except ValueError as exc: raise KeyError( f"Object {get_uuid(obj_or_group)} not found in model" ) from exc raise KeyError(f"Object or group {get_uuid(obj_or_group)} not found in model") def get_group_from_number(self, number: int) -> ObjectGroup: """Return group from its number. Args: number: group number (starts with 1) Returns: Group Raises: IndexError: if group with number not found """ if number < 1: raise IndexError(f"Group number {number} is out of range (must be >= 1)") if number > len(self._groups): raise IndexError( f"Group number {number} is out of range (max is {len(self._groups)})" ) return self._groups[number - 1] def get_group_from_title(self, title: str) -> ObjectGroup: """Return group from its title. Args: title: group title Returns: Group Raises: KeyError: if group with title not found """ for group in self._groups: if group.title == title: return group raise KeyError(f"Group with title '{title}' not found") def get_group_from_object(self, obj: SignalObj | ImageObj) -> ObjectGroup: """Return group containing object Args: obj: object to find group for Returns: Group Raises: KeyError: if object not found in any group """ for group in self._groups: if obj in group: return group raise KeyError(f"Object with uuid '{get_uuid(obj)}' not found in any group") def get_groups(self, uuids: list[str] | None = None) -> list[ObjectGroup]: """Return groups""" if uuids is None: return self._groups return [group for group in self._groups if get_uuid(group) in uuids] def add_group(self, title: str) -> ObjectGroup: """Add group to model Args: title: group title Returns: Created group object """ group = ObjectGroup(title, self, self._group_prefix) self._groups.append(group) self.reset_short_ids() return group def get_object_group_id(self, obj: SignalObj | ImageObj) -> str | None: """Return group id of object Args: obj: object to get group id from Returns: group id or None if object is not in any group """ try: return get_uuid(self.get_group_from_object(obj)) except KeyError: return None def get_group_object_ids(self, group_id: str) -> list[str]: """Return object ids in group""" for group in self._groups: if get_uuid(group) == group_id: return group.get_object_ids() raise KeyError(f"Group with uuid '{group_id}' not found") def remove_group(self, group: ObjectGroup) -> None: """Remove group from model""" self.replace_short_ids_by_uuids_in_titles() self._groups.remove(group) for obj in group: remove_obj = True for other_group in self._groups: if obj in other_group: remove_obj = False break if remove_obj: del self._objects[get_uuid(obj)] self.reset_short_ids() self.replace_uuids_by_short_ids_in_titles() def add_object(self, obj: SignalObj | ImageObj, group_id: str) -> None: """Add object to model""" self.replace_short_ids_by_uuids_in_titles([obj]) self._objects[get_uuid(obj)] = obj onb = 0 for group in self._groups: onb += len(group) if get_uuid(group) == group_id: set_number(obj, onb + 1) group.append(obj) break else: raise KeyError(f"Group with uuid '{group_id}' not found") self.reset_short_ids() self.replace_uuids_by_short_ids_in_titles() def remove_object(self, obj: SignalObj | ImageObj) -> None: """Remove object from model""" for group in self._groups: if obj in group: group.remove(obj) del self._objects[get_uuid(obj)] self.reset_short_ids() def get_object_from_number(self, number: int) -> SignalObj | ImageObj: """Return object from its number. Args: number: object number (unique in model) Returns: Object Raises: IndexError: if object with number not found """ if number < 1: raise IndexError(f"Object number {number} is out of range (must be >= 1)") objs = self.get_all_objects() if number > len(objs): raise IndexError( f"Object number {number} is out of range (max is {len(objs)})" ) return objs[number - 1] def get_objects(self, uuids: list[str]) -> list[SignalObj | ImageObj]: """Return objects with uuids""" return [self._objects[uuid] for uuid in uuids] def get_object_ids(self, flatten: bool = True) -> list[str] | list[list[str]]: """Return object ids, in order of appearance in groups Args: flatten: if True, return a flat list of object ids, otherwise return a list of lists (one list per group) Returns: List of object ids in order of appearance in groups. """ ids = [] for group in self._groups: if flatten: ids.extend(group.get_object_ids()) else: ids.append(group.get_object_ids()) return ids def get_group_titles_with_object_info( self, ) -> tuple[list[str], list[list[str]], list[list[str]]]: """Return groups titles and lists of inner objects uuids and titles. Returns: Tuple: groups titles, lists of inner objects uuids and titles """ grp_titles = [] obj_uuids = [] obj_titles = [] for group in self._groups: grp_titles.append(group.title) obj_uuids.append(group.get_object_ids()) obj_titles.append([obj.title for obj in group]) return grp_titles, obj_uuids, obj_titles def get_object_titles(self, flatten: bool = True) -> list[str] | list[list[str]]: """Return object titles, in order of appearance in groups Args: flatten: if True, return a flat list of object titles, otherwise return a list of lists (one list per group) Returns: List of object titles in order of appearance in groups. """ if flatten: return [obj.title for obj in self.get_all_objects()] return [[obj.title for obj in group] for group in self._groups] def get_object_from_title(self, title: str) -> SignalObj | ImageObj: """Return object with title. Args: title: object title Returns: object with title Raises: KeyError: if object with title not found """ for obj in self._objects.values(): if obj.title == title: return obj raise KeyError(f"Object with title '{title}' not found") def __get_group_object_mapping_to_shortid(self) -> dict[str, str]: """Return dictionary mapping group/object uuids to their short ID""" mapping = {} for group in self._groups: mapping[get_uuid(group)] = get_short_id(group) for obj in group: mapping[get_uuid(obj)] = get_short_id(obj) return mapping def replace_short_ids_by_uuids_in_titles( self, other_objects: tuple[SignalObj | ImageObj] | None = None ) -> None: """Replace short IDs by uuids in titles Args: other_objects: tuple of other objects to consider for short ID replacement .. note:: This method is called before reorganizing groups or objects. It replaces the short IDs in titles by the uuids. This is needed because the short IDs are used to reflect in the title the operation performed on the object/group, e.g. "fft(s001)" or "g001 + g002". But when reorganizing groups or objects, the short IDs may change, so we need to replace them by the uuids, which are stable. Once the reorganization is done, we will replace the uuids by the new short IDs thanks to the `__replace_uuids_by_short_ids_in_titles` method. """ mapping = self.__get_group_object_mapping_to_shortid() objs = self._objects.values() if other_objects is not None: objs = list(objs) + list(other_objects) for obj in objs: for obj_uuid, short_id in mapping.items(): obj.title = obj.title.replace(short_id, obj_uuid) for group in self._groups: for grp_uuid, short_id in mapping.items(): group.title = group.title.replace(short_id, grp_uuid) def replace_uuids_by_short_ids_in_titles(self) -> None: """Replace uuids by short IDs in titles .. note:: This method is called after reorganizing groups or objects. It replaces the uuids in titles by the short IDs. """ mapping = self.__get_group_object_mapping_to_shortid() for obj in self._objects.values(): for obj_uuid, short_id in mapping.items(): obj.title = obj.title.replace(obj_uuid, short_id) for group in self._groups: for grp_uuid, short_id in mapping.items(): group.title = group.title.replace(grp_uuid, short_id) # Replace remaining UUIDs with f"{obj.PREFIX}xxx" # (this may happen if groups or objects were removed in the meantime): pattern = re.compile(r"\b[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}\b") for obj in self._objects.values(): obj.title = pattern.sub(f"{obj.PREFIX}xxx", obj.title) for group in self._groups: for obj in group: obj.title = pattern.sub(f"{obj.PREFIX}xxx", obj.title) def reorder_groups(self, group_ids: list[str]) -> None: """Reorder groups. Args: group_ids: list of group uuids """ # Replace short IDs by uuids in titles: self.replace_short_ids_by_uuids_in_titles() # Reordering groups: self._groups = [self.get_group(group_id) for group_id in group_ids] # Reset short IDs: self.reset_short_ids() # Replace uuids by short IDs in titles: self.replace_uuids_by_short_ids_in_titles() def reorder_objects(self, obj_ids: dict[str, list[str]]) -> None: """Reorder objects in groups. Args: obj_ids: dict of group uuids and list of object uuids """ # Replace short IDs by uuids in titles: self.replace_short_ids_by_uuids_in_titles() # Reordering objects in groups: for group_id, obj_uuids in obj_ids.items(): group = self.get_group(group_id) group.clear() for obj_uuid in obj_uuids: group.append(self._objects[obj_uuid]) # Reset short IDs: self.reset_short_ids() # Replace uuids by short IDs in titles: self.replace_uuids_by_short_ids_in_titles() DataLab-1.0.2/datalab/plugins.py000066400000000000000000000265131511411446000164310ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab plugin system --------------------- DataLab plugin system provides a way to extend the application with new functionalities. Plugins are Python modules that relies on two classes: - :class:`PluginInfo`, which stores information about the plugin - :class:`PluginBase`, which is the base class for all plugins Plugins may also extends DataLab I/O features by providing new image or signal formats. To do so, they must provide a subclass of :class:`ImageFormatBase` or :class:`SignalFormatBase`, in which format information is defined using the :class:`FormatInfo` class. """ from __future__ import annotations import abc import dataclasses import importlib import os import os.path as osp import pkgutil import sys from typing import TYPE_CHECKING from qtpy import QtWidgets as QW # pylint: disable=unused-import from sigima.io.base import FormatInfo # noqa: F401 from sigima.io.image.base import ImageFormatBase # noqa: F401 from sigima.io.image.formats import ClassicsImageFormat # noqa: F401 from sigima.io.signal.base import SignalFormatBase # noqa: F401 from datalab.config import MOD_NAME, OTHER_PLUGINS_PATHLIST, Conf, _ from datalab.control.proxy import LocalProxy from datalab.env import execenv if TYPE_CHECKING: from sigima.objects import NewImageParam, NewSignalParam from datalab.gui import main from datalab.gui.panel.image import ImagePanel from datalab.gui.panel.signal import SignalPanel PLUGINS_DEFAULT_PATH = Conf.get_path("plugins") if not osp.isdir(PLUGINS_DEFAULT_PATH): os.makedirs(PLUGINS_DEFAULT_PATH) # pylint: disable=bad-mcs-classmethod-argument class PluginRegistry(type): """Metaclass for registering plugins""" _plugin_classes: list[type[PluginBase]] = [] _plugin_instances: list[PluginBase] = [] def __init__(cls, name, bases, attrs): super().__init__(name, bases, attrs) if name != "PluginBase": cls._plugin_classes.append(cls) @classmethod def get_plugin_classes(cls) -> list[type[PluginBase]]: """Return plugin classes""" return cls._plugin_classes @classmethod def get_plugins(cls) -> list[PluginBase]: """Return plugin instances""" return cls._plugin_instances @classmethod def get_plugin(cls, name_or_class: str | type[PluginBase]) -> PluginBase | None: """Return plugin instance""" for plugin in cls._plugin_instances: if name_or_class in (plugin.info.name, plugin.__class__): return plugin return None @classmethod def register_plugin(cls, plugin: PluginBase): """Register plugin""" if plugin.info.name in [plug.info.name for plug in cls._plugin_instances]: raise ValueError(f"Plugin {plugin.info.name} already registered") cls._plugin_instances.append(plugin) execenv.log(cls, f"Plugin {plugin.info.name} registered") @classmethod def unregister_plugin(cls, plugin: PluginBase): """Unregister plugin""" cls._plugin_instances.remove(plugin) execenv.log(cls, f"Plugin {plugin.info.name} unregistered") execenv.log(cls, f"{len(cls._plugin_instances)} plugins left") @classmethod def unregister_all_plugins(cls): """Unregister all plugins""" for plugin in cls._plugin_instances: execenv.log(cls, f"Unregistering plugin {plugin.info.name}") plugin.unregister() cls._plugin_instances.clear() execenv.log(cls, "All plugins unregistered") @classmethod def get_plugin_info(cls, html: bool = True) -> str: """Return plugin information (names, versions, descriptions) in html format Args: html: return html formatted text (default: True) """ linesep = "
    " if html else os.linesep bullet = "• " if html else " " * 4 def italic(text: str) -> str: """Return italic text""" return f"{text}" if html else text if Conf.main.plugins_enabled.get(): plugins = cls.get_plugins() if plugins: text = italic(_("Registered plugins:")) text += linesep for plugin in plugins: text += f"{bullet}{plugin.info.name} ({plugin.info.version})" if plugin.info.description: text += f": {plugin.info.description}" text += linesep else: text = italic(_("No plugins available")) else: text = italic(_("Plugins are disabled (see DataLab settings)")) return text @dataclasses.dataclass class PluginInfo: """Plugin info""" name: str = None version: str = "0.0.0" description: str = "" icon: str = None class PluginBaseMeta(PluginRegistry, abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class PluginBase(abc.ABC, metaclass=PluginBaseMeta): """Plugin base class""" PLUGIN_INFO: PluginInfo = None def __init__(self): self.main: main.DLMainWindow = None self.proxy: LocalProxy = None self._is_registered = False self.info = self.PLUGIN_INFO if self.info is None: raise ValueError(f"Plugin info not set for {self.__class__.__name__}") @property def signalpanel(self) -> SignalPanel: """Return signal panel""" return self.main.signalpanel @property def imagepanel(self) -> ImagePanel: """Return image panel""" return self.main.imagepanel def show_warning(self, message: str): """Show warning message""" QW.QMessageBox.warning(self.main, _("Warning"), message) def show_error(self, message: str): """Show error message""" QW.QMessageBox.critical(self.main, _("Error"), message) def show_info(self, message: str): """Show info message""" QW.QMessageBox.information(self.main, _("Information"), message) def ask_yesno( self, message: str, title: str | None = None, cancelable: bool = False ) -> bool: """Ask yes/no question""" if title is None: title = _("Question") buttons = QW.QMessageBox.Yes | QW.QMessageBox.No if cancelable: buttons |= QW.QMessageBox.Cancel answer = QW.QMessageBox.question(self.main, title, message, buttons) if answer == QW.QMessageBox.Yes: return True if answer == QW.QMessageBox.No: return False return None def edit_new_signal_parameters( self, title: str | None = None, size: int | None = None, ) -> NewSignalParam: """Create and edit new signal parameter dataset Args: title: title of the new signal size: size of the new signal (default: None, get from current signal) Returns: New signal parameter dataset (or None if canceled) """ newparam = self.signalpanel.get_newparam_from_current(title=title) if size is not None: newparam.size = size if newparam.edit(self.main): return newparam return None def edit_new_image_parameters( self, title: str | None = None, shape: tuple[int, int] | None = None, hide_height: bool = False, hide_width: bool = False, hide_type: bool = True, hide_dtype: bool = False, ) -> NewImageParam | None: """Create and edit new image parameter dataset Args: title: title of the new image shape: shape of the new image (default: None, get from current image) hide_height: hide image heigth parameter (default: False) hide_width: hide image width parameter (default: False) hide_type: hide image type parameter (default: True) hide_dtype: hide image data type parameter (default: False) Returns: New image parameter dataset (or None if canceled) """ newparam = self.imagepanel.get_newparam_from_current(title=title) if shape is not None: newparam.height, newparam.width = shape newparam.hide_height = hide_height newparam.hide_width = hide_width newparam.hide_type = hide_type newparam.hide_dtype = hide_dtype if newparam.edit(self.main): return newparam return None def is_registered(self): """Return True if plugin is registered""" return self._is_registered def register(self, main: main.DLMainWindow) -> None: """Register plugin""" if self._is_registered: return PluginRegistry.register_plugin(self) self._is_registered = True self.main = main self.proxy = LocalProxy(main) self.register_hooks() def unregister(self): """Unregister plugin""" if not self._is_registered: return PluginRegistry.unregister_plugin(self) self._is_registered = False self.unregister_hooks() self.main = None self.proxy = None def register_hooks(self): """Register plugin hooks""" def unregister_hooks(self): """Unregister plugin hooks""" @abc.abstractmethod def create_actions(self): """Create actions""" def discover_plugins() -> list[type[PluginBase]]: """Discover plugins using naming convention Returns: List of discovered plugins (as classes) """ if Conf.main.plugins_enabled.get(): for path in [ Conf.main.plugins_path.get(), PLUGINS_DEFAULT_PATH, ] + OTHER_PLUGINS_PATHLIST: rpath = osp.realpath(path) if rpath not in sys.path: sys.path.append(rpath) return [ importlib.import_module(name) for _finder, name, _ispkg in pkgutil.iter_modules() if name.startswith(f"{MOD_NAME}_") ] return [] def discover_v020_plugins() -> list[tuple[str, str]]: """Discover v0.20 plugins (with ``cdl_`` prefix) without importing them Returns: List of tuples (plugin_name, directory_path) for discovered v0.20 plugins """ v020_plugins = [] if Conf.main.plugins_enabled.get(): for path in [ Conf.main.plugins_path.get(), PLUGINS_DEFAULT_PATH, ] + OTHER_PLUGINS_PATHLIST: rpath = osp.realpath(path) if rpath not in sys.path: sys.path.append(rpath) for finder, name, _ispkg in pkgutil.iter_modules(): if name.startswith("cdl_"): # Get the directory path from the module finder if hasattr(finder, "path"): directory_path = finder.path v020_plugins.append((name, directory_path)) else: # Fallback if path is not available v020_plugins.append((name, "")) return v020_plugins def get_available_plugins() -> list[PluginBase]: """Instantiate and get available plugins Returns: List of available plugins (as instances) """ # Note: this function is not used by DataLab itself, but it is used by the # test suite to get a list of available plugins discover_plugins() return [plugin_class() for plugin_class in PluginRegistry.get_plugin_classes()] DataLab-1.0.2/datalab/plugins/000077500000000000000000000000001511411446000160505ustar00rootroot00000000000000DataLab-1.0.2/datalab/plugins/_readme_.txt000066400000000000000000000004161511411446000203450ustar00rootroot00000000000000Warning: -------- This folder is not a Python package. That is intentional, because it is not meant to be imported. It is distributed as data folder from a packaging point of view. It contains a collection of plugins that are automatically loaded by the plugin system.DataLab-1.0.2/datalab/plugins/datalab_imageformats.py000066400000000000000000000127551511411446000225620ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image file formats Plugin for DataLab ------------------------------------- This plugin is an example of DataLab plugin. It provides image file formats from cameras, scanners, and other acquisition devices. """ import struct import numpy as np from sigima.io.base import FormatInfo from sigima.io.image.base import SingleImageFormatBase # ============================================================================== # Thales Pixium FXD file format # ============================================================================== class FXDFile: """Class implementing Thales Pixium FXD Image file reading feature Args: fname (str): path to FXD file debug (bool): debug mode """ HEADER = " None: self.__debug = debug self.file_format = None # long self.nbcols = None # long self.nbrows = None # long self.nbframes = None # long self.pixeltype = None # long self.quantlevels = None # long self.maxlevel = None # float self.minlevel = None # float self.comment_length = None # long self.fname = None self.data = None if fname is not None: self.load(fname) def __repr__(self) -> str: """Return a string representation of the object""" info = ( ("Image width", f"{self.nbcols:d}"), ("Image Height", f"{self.nbrows:d}"), ("Frame number", f"{self.nbframes:d}"), ("File format", f"{self.file_format:d}"), ("Pixel type", f"{self.pixeltype:d}"), ("Quantlevels", f"{self.quantlevels:d}"), ("Min. level", f"{self.minlevel:f}"), ("Max. level", f"{self.maxlevel:f}"), ("Comment length", f"{self.comment_length:d}"), ) desc_len = max(len(d) for d in list(zip(*info))[0]) + 3 res = "" for description, value in info: res += ("{:" + str(desc_len) + "}{}\n").format(description + ": ", value) res = object.__repr__(self) + "\n" + res return res def load(self, fname: str) -> None: """Load header and image pixel data Args: fname (str): path to FXD file """ with open(fname, "rb") as data_file: header_s = struct.Struct(self.HEADER) record = data_file.read(9 * 4) unpacked_rec = header_s.unpack(record) ( self.file_format, self.nbcols, self.nbrows, self.nbframes, self.pixeltype, self.quantlevels, self.maxlevel, self.minlevel, self.comment_length, ) = unpacked_rec if self.__debug: print(unpacked_rec) print(self) data_file.seek(128 + self.comment_length) if self.pixeltype == 0: size, dtype = 4, np.float32 elif self.pixeltype == 1: size, dtype = 2, np.uint16 elif self.pixeltype == 2: size, dtype = 1, np.uint8 else: raise NotImplementedError(f"Unsupported pixel type: {self.pixeltype}") block = data_file.read(self.nbrows * self.nbcols * size) data = np.frombuffer(block, dtype=dtype) self.data = data.reshape(self.nbrows, self.nbcols) class FXDImageFormat(SingleImageFormatBase): """Object representing Thales Pixium (FXD) image file type""" FORMAT_INFO = FormatInfo( name="Thales Pixium", extensions="*.fxd", readable=True, writeable=False, ) @staticmethod def read_data(filename: str) -> np.ndarray: """Read data and return it Args: filename (str): path to FXD file Returns: np.ndarray: image data """ fxd_file = FXDFile(filename) return fxd_file.data # ============================================================================== # Dürr NDT XYZ file format # ============================================================================== class XYZImageFormat(SingleImageFormatBase): """Object representing Dürr NDT XYZ image file type""" FORMAT_INFO = FormatInfo( name="Dürr NDT", extensions="*.xyz", readable=True, writeable=True, ) @staticmethod def read_data(filename: str) -> np.ndarray: """Read data and return it Args: filename (str): path to XYZ file Returns: np.ndarray: image data """ with open(filename, "rb") as fdesc: cols = int(np.fromfile(fdesc, dtype=np.uint16, count=1)[0]) rows = int(np.fromfile(fdesc, dtype=np.uint16, count=1)[0]) arr = np.fromfile(fdesc, dtype=np.uint16, count=cols * rows) arr = arr.reshape((rows, cols)) return np.fliplr(arr) @staticmethod def write_data(filename: str, data: np.ndarray) -> None: """Write data to file Args: filename: File name data: Image array data """ data = np.fliplr(data) with open(filename, "wb") as fdesc: fdesc.write(np.array(data.shape[1], dtype=np.uint16).tobytes()) fdesc.write(np.array(data.shape[0], dtype=np.uint16).tobytes()) fdesc.write(data.tobytes()) DataLab-1.0.2/datalab/plugins/datalab_testdata.py000066400000000000000000000165231511411446000217120ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Test Data Plugin for DataLab ---------------------------- This plugin is an example of DataLab plugin. It provides test data samples and some actions to test DataLab functionalities. """ from __future__ import annotations import sigima.tests.data as test_data from sigima.io.image import ImageIORegistry from sigima.io.signal import SignalIORegistry from sigima.tests import helpers from datalab.config import _ from datalab.plugins import PluginBase, PluginInfo from datalab.utils.qthelpers import create_progress_bar # ------------------------------------------------------------------------------ # All computation functions must be defined as global functions, otherwise # they cannot be pickled and sent to the worker process # ------------------------------------------------------------------------------ class PluginTestData(PluginBase): """DataLab Test Data Plugin""" PLUGIN_INFO = PluginInfo( name=_("Test data"), version="1.0.0", description=_("Testing DataLab functionalities"), ) def load_test_objs( self, registry_class: type[SignalIORegistry | ImageIORegistry], title: str ) -> None: """Load all test objects from a given registry class Args: registry_class: Registry class (SignalIORegistry or ImageIORegistry) title: Progress bar title Returns: List of (filename, object) tuples """ test_objs = list(helpers.read_test_objects(registry_class)) with create_progress_bar(self.signalpanel, title, max_=len(test_objs)) as prog: for i_obj, (_fname, obj) in enumerate(test_objs): prog.setValue(i_obj + 1) if prog.wasCanceled(): break if obj is not None: self.proxy.add_object(obj) # Signal processing features ------------------------------------------------ def create_paracetamol_signal(self) -> None: """Create paracetamol signal""" obj = test_data.create_paracetamol_signal() self.proxy.add_object(obj) # Image processing features ------------------------------------------------ def create_peak_image(self) -> None: """Create 2D peak image""" obj = self.imagepanel.new_object(add_to_panel=False) if obj is not None: param = test_data.PeakDataParam.create(size=max(obj.data.shape)) self.imagepanel.processor.update_param_defaults(param) if param.edit(self.main): obj.data, _coords = test_data.get_peak2d_data(param) self.proxy.add_object(obj) def create_sincos_image(self) -> None: """Create 2D sin cos image""" newparam = self.edit_new_image_parameters(hide_type=True) if newparam is not None: obj = test_data.create_sincos_image(newparam) self.proxy.add_object(obj) def create_noisy_gaussian_image(self) -> None: """Create 2D noisy gauss image""" newparam = self.edit_new_image_parameters(hide_height=True, hide_type=True) if newparam is not None: obj = test_data.create_noisy_gaussian_image(newparam, add_annotations=False) self.proxy.add_object(obj) def create_multigaussian_image(self) -> None: """Create 2D multi gauss image""" newparam = self.edit_new_image_parameters(hide_height=True, hide_type=True) if newparam is not None: obj = test_data.create_multigaussian_image(newparam) self.proxy.add_object(obj) def create_2dstep_image(self) -> None: """Create 2D step image""" newparam = self.edit_new_image_parameters(hide_type=True) if newparam is not None: obj = test_data.create_2dstep_image(newparam) self.proxy.add_object(obj) def create_ring_image(self) -> None: """Create 2D ring image""" param = test_data.RingParam(_("Ring")) if param.edit(self.main): obj = test_data.create_ring_image(param) self.proxy.add_object(obj) def create_annotated_image(self) -> None: """Create annotated image""" obj = test_data.create_annotated_image() self.proxy.add_object(obj) def create_grid_gaussian_image(self) -> None: """Create image with a grid of gaussian spots""" param = test_data.GridOfGaussianImages(_("Grid of Gaussian Images")) if param.edit(self.main): obj = test_data.create_grid_of_gaussian_images(param) self.proxy.add_object(obj) # Plugin menu entries ------------------------------------------------------ def create_actions(self) -> None: """Create actions""" # Signal Panel ---------------------------------------------------------- sah = self.signalpanel.acthandler with sah.new_menu(_("Test data")): sah.new_action( _("Load spectrum of paracetamol"), triggered=self.create_paracetamol_signal, select_condition="always", ) sah.new_action( _("Load all test signals"), triggered=lambda regclass=SignalIORegistry, title=_("Load all test signals"): self.load_test_objs(regclass, title), select_condition="always", separator=True, ) # Image Panel ----------------------------------------------------------- iah = self.imagepanel.acthandler with iah.new_menu(_("Test data")): iah.new_action( _("Create image with peaks"), triggered=self.create_peak_image, select_condition="always", separator=True, ) iah.new_action( _("Create 2D sin cos image"), triggered=self.create_sincos_image, select_condition="always", ) iah.new_action( _("Create 2D noisy gaussian image"), triggered=self.create_noisy_gaussian_image, select_condition="always", ) iah.new_action( _("Create 2D multi gaussian image"), triggered=self.create_multigaussian_image, select_condition="always", ) iah.new_action( _("Create annotated image"), triggered=self.create_annotated_image, select_condition="always", ) iah.new_action( _("Create 2D step image"), triggered=self.create_2dstep_image, select_condition="always", ) iah.new_action( _("Create ring image"), triggered=self.create_ring_image, select_condition="always", ) iah.new_action( _("Create image with a grid of gaussian spots"), triggered=self.create_grid_gaussian_image, select_condition="always", ) iah.new_action( _("Load all test images"), triggered=lambda regclass=ImageIORegistry, title=_("Load all test images"): self.load_test_objs(regclass, title), select_condition="always", separator=True, ) DataLab-1.0.2/datalab/start.pyw000066400000000000000000000042411511411446000162660ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab ======= Starter script for DataLab. """ import sys # -------------------------------------------------------------------------------------- # Macro command execution for the standalone version of DataLab if len(sys.argv) > 1 and sys.argv[1] == "-c": exec(sys.argv[2]) # -------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------- # Main DataLab application # # This part is executed when the script is run as a standalone application. # It is protected by using `if __name__ == '__main__':` to avoid running it again when # the multiprocessing pool is created (see datalab/gui/processor/base.py). elif __name__ == "__main__": try: from datalab.app import run run() except Exception as exc: # At this point, we intercept exceptions raised before the application is # started and write them to a log file. This could happen if there is an error # occuring during the import of one of the modules used by the application. # Last example to date: NumPy V2.0.0-2.0.1 raises an exception when imported # if the script is executed using 'pythonw.exe' instead of 'python.exe'. import datetime import traceback with open("datalab_error.log", "w") as stream: stream.write(f"DataLab failed to start:\n") stream.write(f" Date: {datetime.datetime.now()}\n") stream.write(f" Python {sys.version}\n") stream.write(f" Executable: {sys.executable}\n") comment = "" if sys.platform != "win32": comment = " - This script is intended to be run on Windows only." stream.write(f" Platform: {sys.platform}{comment}\n") stream.write(f" Python path:\n") for path in sys.path: stream.write(f" {path}\n") stream.write("\n") traceback.print_exc(file=stream) # -------------------------------------------------------------------------------------- DataLab-1.0.2/datalab/tests/000077500000000000000000000000001511411446000155315ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/__init__.py000066400000000000000000000161431511411446000176470ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Tests (:mod:`datalab.tests`) ------------------------ The DataLab test suite is based on the `pytest `_ framework. The test suite modules are organized in subpackages according to their purpose. The following subpackages are available: - :mod:`datalab.tests.backbone`: backbone tests - :mod:`datalab.tests.features`: feature tests (unit tests and application tests) - :mod:`datalab.tests.scenarios`: high-level scenarios tests .. seealso:: :ref:`validation` for more information about DataLab's testing strategy. """ from __future__ import annotations import os import os.path as osp import sys import time from contextlib import contextmanager from typing import Generator import psutil import pytest from guidata.guitest import run_testlauncher from sigima.tests import helpers import datalab.config # Loading icons from datalab.config import MOD_NAME, SHOTPATH from datalab.control.proxy import RemoteProxy from datalab.env import execenv from datalab.gui.main import DLMainWindow from datalab.gui.panel.image import ImagePanel from datalab.gui.panel.signal import SignalPanel from datalab.utils import qthelpers as qth # Add test data files and folders pointed by `DATALAB_DATA` environment variable: helpers.add_test_path_from_env("DATALAB_DATA") # Add test data files and folders for the DataLab module: helpers.add_test_module_path(MOD_NAME, osp.join("data", "tests")) # Set default screenshot path for tests execenv.screenshot_path = SHOTPATH @contextmanager def datalab_test_app_context( size: tuple[int, int] = None, maximized: bool = False, save: bool = False, console: bool | None = None, exec_loop: bool = True, ) -> Generator[DLMainWindow, None, None]: """Context manager handling DataLab mainwindow creation and Qt event loop with optional HDF5 file save and other options for testing purposes Args: size: mainwindow size (default: (950, 600)) maximized: whether to maximize mainwindow (default: False) save: whether to save HDF5 file (default: False) console: whether to show console (default: None) exec_loop: whether to execute Qt event loop (default: True) """ if size is None: size = 1200, 700 with qth.datalab_app_context(exec_loop=exec_loop): win: DLMainWindow | None = None try: win = DLMainWindow(console=console) if maximized: win.showMaximized() else: width, height = size win.resize(width, height) win.showNormal() win.show() win.setObjectName(helpers.get_default_test_name()) # screenshot name yield win finally: if save: path = helpers.get_output_data_path("h5") try: os.remove(path) win.save_to_h5_file(path) except (FileNotFoundError, PermissionError): pass has_exception_occurred = sys.exc_info()[0] is not None if not exec_loop or has_exception_occurred and win is not None: # Closing main window properly win.set_modified(False) win.close() def is_pid_alive(pid: int) -> bool: """Check if a process with the given PID is alive Args: Process ID to check Returns: True if the process is alive, False otherwise """ return psutil.pid_exists(pid) and psutil.Process(pid).is_running() def run_datalab_in_background(wait_until_ready: bool = True) -> None: """Run DataLab application as a service. This function starts the DataLab application in a separate process, ensuring that it runs independently of the current script. It sets the necessary environment variables to prevent the application from quitting automatically (since the script is executed in a non-interactive mode - the so-called "unattended" mode) and to avoid port conflicts. After starting the application, it waits for a short period to allow the application to initialize and then checks if the process is alive. The main use case for this function is in testing scenarios where the DataLab application needs to be running in the background while a client connects to it and performs various operations. Args: wait_until_ready: If True, waits until the DataLab application is ready to accept connections (default: True). Uses RemoteProxy's built-in retry logic with extended timeout to handle DataLab startup time. Raises: RuntimeError: If the DataLab application fails to start """ env = os.environ.copy() env[execenv.DO_NOT_QUIT_ENV] = "1" if execenv.XMLRPCPORT_ENV in env: # May happen when executing other tests before env.pop(execenv.XMLRPCPORT_ENV) proc = helpers.exec_script( "-m", args=["datalab.app"], wait=False, env=env, verbose=False ) # If the process fails to start, it will raise the `AssertionError` exception # with the message "Unable to start DataLab application". # In that case, it might be useful to set `wait=True` and `verbose=True` in the # `exec_script` call above, so that the script waits for the DataLab application # to start and prints the output to the console. This way, you can see any # error messages or logs that might help you understand why the application failed # to start. # If the script is executed within a pytest session, add the `-s` option to pytest. # Give the process a moment to actually start time.sleep(1) if not is_pid_alive(proc.pid): raise RuntimeError("DataLab process terminated immediately after start") if wait_until_ready: # Use RemoteProxy's built-in retry mechanism with extended timeout # DataLab startup: Python imports, Qt init, GUI creation, XML-RPC server try: proxy = RemoteProxy(autoconnect=False) proxy.connect(timeout=30.0) # 30 seconds max for DataLab to be ready proxy.disconnect() except ConnectionRefusedError as exc: if is_pid_alive(proc.pid): proc.kill() raise RuntimeError( "Failed to connect to DataLab application. " "Process may have started but XML-RPC server is not responding." ) from exc @contextmanager def skip_if_opencv_missing() -> Generator[None, None, None]: """Skip test if OpenCV is not available""" try: yield except ImportError as exc: if "cv2" in str(exc).lower(): pytest.skip("OpenCV not available, skipping test") raise exc def take_plotwidget_screenshot(panel: SignalPanel | ImagePanel, name: str) -> None: """Eventually takes plotwidget screenshot (only in screenshot mode)""" if execenv.screenshot: prefix = panel.PARAMCLASS.PREFIX qth.grab_save_window(panel.plothandler.plotwidget, f"{prefix}_{name}") def run() -> None: """Run DataLab test launcher""" run_testlauncher(datalab) if __name__ == "__main__": run() DataLab-1.0.2/datalab/tests/backbone/000077500000000000000000000000001511411446000172755ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/backbone/__init__.py000066400000000000000000000000021511411446000213760ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/backbone/config_unit_test.py000066400000000000000000000133641511411446000232210ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Configuration test Checking .ini configuration file management. """ # guitest: show import os import os.path as osp from qtpy import QtCore as QC from qtpy import QtWidgets as QW from datalab import app from datalab.config import Conf from datalab.env import execenv from datalab.tests import helpers from datalab.utils.conf import CONF from datalab.utils.qthelpers import datalab_app_context SEC_MAIN = Conf.main OPT_MAX = SEC_MAIN.window_maximized OPT_POS = SEC_MAIN.window_position OPT_SIZ = SEC_MAIN.window_size OPT_DIR = SEC_MAIN.base_dir SEC_CONS = Conf.console OPT_CON = SEC_CONS.console_enabled CONFIGS = ( { SEC_MAIN.get_name(): { OPT_MAX.option: False, OPT_POS.option: (250, 250), OPT_SIZ.option: (1300, 700), OPT_DIR.option: "", }, SEC_CONS.get_name(): { OPT_CON.option: False, }, }, { SEC_MAIN.get_name(): { OPT_MAX.option: False, OPT_POS.option: (100, 100), OPT_SIZ.option: (750, 600), OPT_DIR.option: osp.dirname(__file__), }, SEC_CONS.get_name(): { OPT_CON.option: False, }, }, { SEC_MAIN.get_name(): { OPT_MAX.option: True, OPT_POS.option: (10, 10), OPT_SIZ.option: (750, 600), OPT_DIR.option: "", }, SEC_CONS.get_name(): { OPT_CON.option: True, }, }, ) def apply_conf(conf, name): """Apply configuration""" execenv.print(f" Applying configuration {name}:") fname = CONF.filename() try: os.remove(fname) execenv.print(f" Removed configuration file {fname}") except FileNotFoundError: execenv.print(f" Configuration file {fname} was not found") for section, settings in conf.items(): for option, value in settings.items(): execenv.print(f" Writing [{section}][{option}] = {value}") CONF.set(section, option, value) CONF.save() def is_wsl() -> bool: """Return True if running on Windows Subsystem for Linux (WSL)""" if os.name == "posix": return "WSL" in os.uname().release # pylint: disable=no-member return False def is_offscreen() -> bool: """Return True if running in offscreen mode (e.g. in CI or pytest session)""" return os.environ.get("QT_QPA_PLATFORM", "") == "offscreen" def assert_in_interval(val1, val2, interval, context): """Raise an AssertionError if val1 is in [val2-interval/2,val2+interval/2]""" itv1, itv2 = val2 - 0.5 * interval, val2 + 0.5 * interval try: assert itv1 <= val1 <= itv2 except AssertionError as exc: if is_wsl() or is_offscreen(): # Ignore this assertion error in two cases: # 1. If running on WSL, as the position of windows is not reliable # 2. If running in offscreen mode (e.g. in CI or pytest session), # as the position of windows may not be set correctly in offscreen mode pass else: raise AssertionError(f"{context}: {itv1} <= {val1} <= {itv2}") from exc def check_conf(conf, name, win: QW.QMainWindow, h5files): """Check configuration""" execenv.print(f" Checking configuration {name}: ") sec_main_name = SEC_MAIN.get_name() sec_cons_name = SEC_CONS.get_name() sec_main = conf[sec_main_name] sec_cons = conf[sec_cons_name] execenv.print(f" Checking [{sec_main_name}][{OPT_MAX.option}]: ", end="") assert sec_main[OPT_MAX.option] == ( win.windowState() == QC.Qt.WindowState.WindowMaximized ) execenv.print("OK") execenv.print(f" Checking [{sec_main_name}][{OPT_POS.option}]: ", end="") if not sec_main[OPT_MAX.option]: # Check position/size only when not maximized # Check position, taking into account screen offset (e.g. Linux/Gnome) conf_x, conf_y = sec_main[OPT_POS.option] conf_w, conf_h = sec_main[OPT_SIZ.option] available_go = QW.QDesktopWidget().availableGeometry() x_offset, y_offset = available_go.x(), available_go.y() assert_in_interval(win.x(), conf_x - x_offset, 0, "X position") assert_in_interval(win.y(), conf_y - y_offset / 2, 15 + y_offset, "Y position") # Check size assert_in_interval(win.width(), conf_w, 5, "Width") assert_in_interval(win.height(), conf_h, 5, "Height") execenv.print(f"OK {win.x(), win.y(), win.width(), win.height()}") else: execenv.print("Passed (maximized)") execenv.print(f" Checking [{sec_cons_name}][{OPT_CON.option}]: ", end="") assert sec_cons[OPT_CON.option] == (win.console is not None) execenv.print("OK") execenv.print(f" Checking [{sec_main_name}][{OPT_DIR.option}]: ", end="") if h5files is None: assert conf[SEC_MAIN.get_name()][OPT_DIR.option] == OPT_DIR.get() execenv.print("OK (written in conf file)") else: assert OPT_DIR.get() == osp.dirname(h5files[0]) execenv.print("OK (changed to HDF5 file path)") def test_config(): """Testing DataLab configuration file""" with execenv.context(unattended=True): h5files = [helpers.get_test_fnames("*.h5")[1]] execenv.print("Testing DataLab configuration settings:") for index, conf in enumerate(CONFIGS): name = f"CONFIG{index}" apply_conf(conf, name) with datalab_app_context(exec_loop=True) as qapp: win = app.create(splash=False, h5files=h5files) qapp.processEvents() check_conf(conf, name, win, h5files) h5files = None execenv.print("=> Everything is OK") if __name__ == "__main__": test_config() DataLab-1.0.2/datalab/tests/backbone/config_versioning_unit_test.py000066400000000000000000000022471511411446000254620ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Configuration versioning test. Test that the configuration folder name is versioned correctly. """ import datalab from datalab.config import get_config_app_name def test_config_app_name(): """Test configuration app name versioning.""" config_name = get_config_app_name() major_version = datalab.__version__.split(".", maxsplit=1)[0] print(f"DataLab version: {datalab.__version__}") print(f"Major version: {major_version}") print(f"Config app name: {config_name}") # For v0.x, the config name should be "DataLab" (no suffix) if major_version == "0": assert config_name == "DataLab", f"Expected 'DataLab', got '{config_name}'" print("✓ v0.x uses legacy config folder name: .DataLab") else: # For v1.x, v2.x, etc., the config name should include version suffix expected = f"DataLab_v{major_version}" assert config_name == expected, f"Expected '{expected}', got '{config_name}'" print(f"✓ v{major_version}.x uses versioned config folder: .{config_name}") if __name__ == "__main__": test_config_app_name() DataLab-1.0.2/datalab/tests/backbone/dictlistserial_app_test.py000066400000000000000000000024541511411446000245720ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Testing (de)serialization of Dictionnary/List inside object metadata """ # guitest: show import os.path as osp from sigima.tests.data import create_test_image_with_metadata from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers def test_dict_serialization(): """Dictionnary/List in metadata (de)serialization test""" with execenv.context(unattended=True): with helpers.WorkdirRestoringTempDir() as tmpdir: with datalab_test_app_context(console=False) as win: panel = win.imagepanel image = create_test_image_with_metadata() panel.add_object(image) fname = osp.join(tmpdir, "test.h5") win.save_to_h5_file(fname) win.reset_all() win.open_h5_files([fname], import_all=True) execenv.print("Dictionary/List (de)serialization:") oids = panel.objmodel.get_object_ids() first_image = panel.objmodel[oids[0]] helpers.compare_metadata( image.metadata, first_image.metadata.copy(), raise_on_diff=True ) if __name__ == "__main__": test_dict_serialization() DataLab-1.0.2/datalab/tests/backbone/errorcatcher_unit_test.py000066400000000000000000000046361511411446000244410ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Catch error and warning test (during computation) Unit test for BaseProcessor.handle_output method: catching error and warning during computation. This test runs a computation function that raises an error and/or a warning, and checks that the error and/or warning are/is correctly caught and displayed in the GUI. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: show import warnings from sigima.objects import SignalObj from sigima.tests import data as test_data from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context def comp_error(src: SignalObj) -> SignalObj: # pylint: disable=unused-argument """Computation function that raises an error""" raise ValueError("This is a test error") def comp_warning(src: SignalObj) -> SignalObj: # pylint: disable=unused-argument """Computation function that raises a warning""" warnings.warn("This is a test warning") return src.copy() def comp_warning_error(src: SignalObj) -> SignalObj: # pylint: disable=unused-argument """Computation function that raises a warning and an error""" warnings.warn("This is a test warning") raise ValueError("This is a test error") def comp_no_error(src: SignalObj) -> SignalObj: # pylint: disable=unused-argument """Computation function that does not raise an error""" return src.copy() def test_catcher(): """Catch error and warning test""" with execenv.context(catcher_test=True): with datalab_test_app_context() as win: panel = win.signalpanel sig = test_data.create_paracetamol_signal() panel.add_object(sig) panel.processor.compute_1_to_1(comp_no_error, title="Test no error") panel.processor.compute_1_to_1(comp_error, title="Test error") Conf.proc.ignore_warnings.set(True) panel.processor.compute_1_to_1(comp_warning, title="Test warning (ignored)") Conf.proc.ignore_warnings.set(False) panel.processor.compute_1_to_1( comp_warning, title="Test warning (not ignored)" ) panel.processor.compute_1_to_1( comp_warning_error, title="Test warning + error" ) if __name__ == "__main__": test_catcher() DataLab-1.0.2/datalab/tests/backbone/errormsgbox_unit_test.py000066400000000000000000000027721511411446000243260ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Error message box test """ # guitest: show from guidata.qthelpers import exec_dialog, qt_app_context from qtpy import QtWidgets as QW from datalab.widgets.warningerror import WarningErrorMessageBox def error_message_box(category: str): """Test error message box Args: category (str): Error category Valid values are: "error", "warning" """ with qt_app_context(): win = QW.QMainWindow() win.setWindowTitle(f"DataLab {category.capitalize()} Message Box test") win.show() if category == "error": try: raise ValueError("Test error message box") except ValueError: context = "Test_error_message_box." * 5 tip = "This error may occured when testing the error message box. " * 10 dlg = WarningErrorMessageBox(win, "error", context, tip=tip) exec_dialog(dlg) elif category == "warning": context = "Test_warning_message_box." * 5 message = "Test warning message box" * 10 dlg = WarningErrorMessageBox(win, "warning", context, message) exec_dialog(dlg) else: raise ValueError(f"Invalid category: {category}") def test_error_message_box(): """Test error message box""" error_message_box("error") error_message_box("warning") if __name__ == "__main__": test_error_message_box() DataLab-1.0.2/datalab/tests/backbone/execenv_unit.py000066400000000000000000000221301511411446000223410ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DLExecEnv test --------------- Checking DataLab execution environment management. """ # guitest: skip (only needed for regression tests) from __future__ import annotations import os import sys import datalab from datalab.env import VerbosityLevels, execenv from datalab.tests import helpers ARGV_TEST = "--execenvtest" def print_execenv() -> None: """Print DL execution environment""" sys.argv.remove(ARGV_TEST) print(str(execenv.to_dict())) def get_subprocess_execenv_dict(args: list[str], env: dict | None = None) -> dict: """Get DL execution environment dict from subprocess Args: args (list[str]): command-line arguments env (dict | None): environment variables to pass to subprocess Returns: dict[str, str | int | bool | None]: DL execution environment dict """ output = helpers.get_script_output(__file__, args=args + [ARGV_TEST], env=env) return eval(output) # pylint: disable=eval-used def assert_two_dicts_are_equal( dict1: dict, dict2: dict, exceptions: tuple[str] | None = None ) -> None: """Assert two dicts are equal Args: dict1 (dict): first dict dict2 (dict): second dict exceptions (tuple[str] | None): keys to ignore """ diff_keys = [] for key in dict1: if key in exceptions: continue if dict1[key] != dict2[key]: diff_keys.append(key) if diff_keys: assert False, f"Dictionaries differ on keys: {diff_keys}" def test_cli(): """Test DL execution environment from command-line""" remove_all_datalab_envvars() # Test default values execenv.print("Testing command-line arguments:") execenv.print(" Default values: ", end="") execenvdict = get_subprocess_execenv_dict([]) execenv.print("OK") assert execenvdict == execenv.to_dict() # Testing boolean arguments execenv.print(" Testing boolean arguments:") for argname in ("unattended", "accept_dialogs", "screenshot"): execenv.print(f" {argname}:", end="") for val in (True, False): execenv.print(f" {val}", end="") if val: args = [f"--{argname}"] else: args = [] # Default value is False execenvdict = get_subprocess_execenv_dict(args) assert_two_dicts_are_equal(execenvdict, execenv.to_dict(), (argname,)) assert execenvdict[argname] is val, ( f"execenvdict[{argname}] = {execenvdict[argname]} != {val}" ) execenv.print() # Testing integer arguments execenv.print(" Testing integer arguments:") for argname in ("delay", "xmlrpcport"): execenv.print(f" {argname}:", end="") for val in (None, 0, 1, 2): if val is None: args = [] else: args = [f"--{argname}", str(val)] execenv.print(f" {val}", end="") execenvdict = get_subprocess_execenv_dict(args) assert_two_dicts_are_equal(execenvdict, execenv.to_dict(), (argname,)) if val is None: if argname == "delay": # Default value is 0 for delay assert execenvdict[argname] == 0 else: # Default value is None for xmlrpcport assert execenvdict[argname] is None else: assert execenvdict[argname] == val execenv.print() # Testing choice arguments execenv.print(" Testing choice arguments:") for argname in ("verbose",): execenv.print(f" {argname}:", end="") choices = {"verbose": [verb.value for verb in VerbosityLevels]} defaultval = {"verbose": VerbosityLevels.NORMAL.value}[argname] for val in [None] + choices[argname]: if val is None: args = [] else: args = [f"--{argname}", val] execenv.print(f" {val}", end="") execenvdict = get_subprocess_execenv_dict(args) assert_two_dicts_are_equal(execenvdict, execenv.to_dict(), (argname,)) if val is None: assert execenvdict[argname] == defaultval else: assert execenvdict[argname] == val execenv.print() # Testing special arguments execenv.print(" Testing special arguments:") execenv.print(" version: ", end="") args = ["--version"] output = helpers.get_script_output(__file__, args=args + [ARGV_TEST]) execenv.print(output) assert datalab.__version__ in output execenv.print(" h5 positionnal argument: ", end="") for h5files in (None, ["test.h5"], ["toto.h5", "tata.h5"]): if h5files is None: args = [] else: args = [";".join(h5files)] execenv.print(f" {h5files}", end="") execenvdict = get_subprocess_execenv_dict(args) assert execenvdict["h5files"] == h5files execenv.print() execenv.print(" h5browser argument:") for argname in ("-b", "--h5browser"): execenv.print(f" {argname}", end="") for val in (None, "test.h5"): if val is None: args = [] else: args = [argname, val] execenv.print(f" {val}", end="") execenvdict = get_subprocess_execenv_dict(args) assert execenvdict["h5browser_file"] == val execenv.print() execenv.print("=> Everything is OK") def remove_all_datalab_envvars(): """Remove all DL environment variables""" for _attrname, envvar in execenv.iterate_over_attrs_envvars(): os.environ.pop(envvar, None) def get_attr_to_envvar( vartype: type, default: int | str | None | bool, values: list[int | str | None | bool] | None = None, ) -> tuple: """Get ATTR_TO_ENVVAR tuple for a given type""" if vartype is bool: if default is False: ate = ((True, ("1", "true")), (False, (None, "", "0", "false"))) else: ate = ((True, (None, "", "1", "true")), (False, ("0", "false"))) elif vartype is int: ate = [] for val in values: if val == default: ate.append((val, (None, "", str(val)))) else: ate.append((val, (str(val),))) ate = tuple(ate) if default is None: ate = ((None, (None, "")),) + ate elif vartype is str: ate = ((None, (None, "")),) elif vartype is list: ate = [] for choice in values: if choice == default: ate.append((choice, (None, "", choice))) else: ate.append((choice, (choice,))) ate = tuple(ate) else: raise ValueError(f"Unknown type {vartype}") return ate ATTR_TO_ENVVAR = { "unattended": get_attr_to_envvar(bool, False), "accept_dialogs": get_attr_to_envvar(bool, False), "screenshot": get_attr_to_envvar(bool, False), "do_not_quit": get_attr_to_envvar(bool, False), "catcher_test": get_attr_to_envvar(bool, False), "delay": get_attr_to_envvar(int, 0, [0, 10, 20]), "xmlrpcport": get_attr_to_envvar(int, None, [9854, 1020, 213]), "verbose": get_attr_to_envvar( list, VerbosityLevels.NORMAL.value, [verb.value for verb in VerbosityLevels] ), } def test_envvar(): """Testing DataLab configuration file""" assert execenv.unattended is False, "This test must be run with unattended=False" print("Testing DataLab execution environment:") for attrname, envvar in execenv.iterate_over_attrs_envvars(): attr_to_envvar = ATTR_TO_ENVVAR[attrname] print(f" Testing {attrname}:") for value, envvals in attr_to_envvar: print(f" {value}: [attr->env]", end="") remove_all_datalab_envvars() if value is not None: setattr(execenv, attrname, value) assert os.environ.get(envvar) in envvals, ( f"os.environ[{envvar}] = {os.environ.get(envvar)} != {envvals}" ) print(" [env->attr]", end="") remove_all_datalab_envvars() for envval in envvals: if envval is not None: os.environ[envvar] = envval assert getattr(execenv, attrname) == value, ( f"execenv.{attrname} = {getattr(execenv, attrname)}" f" != {value} (envval = {repr(envval)})" ) print(" [env->subprocess->attr]", end="") remove_all_datalab_envvars() for envval in envvals: if envval is not None: os.environ[envvar] = envval execenvdict = get_subprocess_execenv_dict([]) assert execenvdict[attrname] == value, ( f"execenvdict[{attrname}] = {execenvdict[attrname]}" f" != {value} (envval = {repr(envval)})" ) print() print("=> Everything is OK") if __name__ == "__main__": if ARGV_TEST in sys.argv: print_execenv() else: test_envvar() test_cli() DataLab-1.0.2/datalab/tests/backbone/loadtest_gdi.py000066400000000000000000000106071511411446000223150ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ GDI objects loading test ======================== This test is specific to Windows. It is not relevant for other platforms. This test aims at checking that all GDI objects are released when the widget are closed (i.e. when the Python object is garbage collected). """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: skip from __future__ import annotations import ctypes import os from sigima.objects import NewImageParam from sigima.tests.data import create_sincos_image, iterate_image_creation from datalab.env import execenv from datalab.gui.main import DLMainWindow from datalab.tests import datalab_test_app_context, helpers from datalab.tests.scenarios.common import compute_common_operations if os.name == "nt": from ctypes import WinDLL def get_gdi_count() -> int: """Get the number of GDI objects for the current process. This function uses the Windows API to get the count of GDI (Graphical Device Interface) objects used by the current process. Note: This function will only work on Windows. Returns: int: The count of GDI objects for the current process. """ # Constants GR_GDIOBJECTS: int = 0 # Load the User32 DLL user32: WinDLL = ctypes.windll.user32 # Get the current process id pid: int = os.getpid() # Get handle of the process handle: int = ctypes.windll.kernel32.OpenProcess(1040, 0, pid) # Call the function and get the GDI count gdi_count: int = user32.GetGuiResources(handle, GR_GDIOBJECTS) # Close the handle ctypes.windll.kernel32.CloseHandle(handle) return gdi_count else: def get_gdi_count() -> int: """Dumb function that always returns 0.""" return 0 def test_various_image_features(win: DLMainWindow): """Run image related tests.""" win.set_current_panel("image") panel = win.imagepanel param = NewImageParam.create(height=150, width=150) for image in iterate_image_creation(param.width, non_zero=True, verbose=False): panel.add_object(create_sincos_image(param)) panel.add_object(image) compute_common_operations(panel) panel.remove_all_objects() break def test_gdi_count(win: DLMainWindow) -> int | None: """Test the GDI count. This function will create a DataSetGroup, show the widget, and then close the widget. It will then check that the GDI count has not increased. Raises: AssertionError: If the GDI count has increased. Returns: int: The GDI count after creating the widget. """ # Get the GDI count before creating the widget gdi_count_before: int = get_gdi_count() execenv.print(f" GDI count: {gdi_count_before} --> ", end="") # Create widgets during the test test_various_image_features(win) # Import HDF5 file using the HDF5 browser win.open_h5_files( helpers.get_test_fnames("*.h5")[:5], import_all=True, reset_all=False ) for panel in (win.signalpanel, win.imagepanel): panel.remove_all_objects() # Get the GDI count after creating the widget gdi_count_after: int = get_gdi_count() execenv.print(gdi_count_after) # # Check that the GDI count has not increased # assert gdi_count_before == gdi_count_after # assert gdi_count_before == gdi_count_after_close return gdi_count_after def load_test(): """Load test.""" with execenv.context(unattended=True): with datalab_test_app_context() as win: gdi_count = [] for iteration in range(4): execenv.print(f"Test iteration: {iteration}") count = test_gdi_count(win) if count is None: execenv.print("Test aborted") break gdi_count.append(count) if iteration > 0: increase = gdi_count[-1] - gdi_count[-2] assert increase <= 0, "GDI count should not increase (memory leak)" increase_pct = increase / gdi_count[0] * 100 execenv.print( f" GDI count increase: {increase:+d} ({increase_pct:.2f}%)" ) if __name__ == "__main__": load_test() DataLab-1.0.2/datalab/tests/backbone/long_callback.py000066400000000000000000000052461511411446000224310ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Long callback test ------------------ This test is not meant to be executed as part of the `pytest` suite, hence the name of the script. """ # guitest: show,skip import time from guidata.qthelpers import qt_app_context from qtpy import QtWidgets as QW from datalab.utils.qthelpers import CallbackWorker, qt_long_callback def long_computation_func(delay: float) -> str: """Simulate long computation Args: delay: Delay in seconds Returns: str: Result message """ time.sleep(delay) return "OK" def long_computation_progress_func(worker: CallbackWorker, delay: float) -> str: """Simulate long computation, with progress Args: worker: Callback worker delay: Delay in seconds Returns: str: Result message """ step_delay = 2.0 maxiter = int(delay / step_delay) for idx in range(maxiter): worker.set_progress(idx / maxiter) if worker.was_canceled(): return f"Interrupted at iteration #{idx}" time.sleep(step_delay) return "Done" class TestWindow(QW.QMainWindow): """Test window""" def __init__(self): super().__init__() self.setWindowTitle("Test window") btn1 = QW.QPushButton("Run long computation") btn1.clicked.connect(self.run_long_computation) btn2 = QW.QPushButton("Run long computation with progress bar") btn2.clicked.connect(self.run_long_computation_with_progress) mainwidget = QW.QWidget() layout = QW.QHBoxLayout() mainwidget.setLayout(layout) layout.addWidget(btn1) layout.addWidget(btn2) self.setCentralWidget(mainwidget) def __execute_worker(self, worker: CallbackWorker, progress: bool) -> None: """Execute worker""" ret = qt_long_callback(self, "Doing stuff...", worker, progress) QW.QMessageBox.information(self, "Result", f"Long computation result: {ret}") def run_long_computation(self) -> None: """Run long computation""" worker = CallbackWorker(long_computation_func, delay=5.0) self.__execute_worker(worker, progress=False) def run_long_computation_with_progress(self) -> None: """Run long computation with progress""" worker = CallbackWorker(long_computation_progress_func, delay=10.0) self.__execute_worker(worker, progress=True) def testing_long_callback() -> None: """Test long callback function""" with qt_app_context(exec_loop=True): win = TestWindow() win.resize(800, 600) win.show() if __name__ == "__main__": testing_long_callback() DataLab-1.0.2/datalab/tests/backbone/main_app_test.py000066400000000000000000000114661511411446000225020ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Application test for main window -------------------------------- Testing the features of the main window of the application that are not covered by other tests. """ # guitest: show import os import sigima.params import sigima.proc.signal as sips from sigima.tests.data import create_paracetamol_signal from datalab.env import execenv from datalab.objectmodel import get_short_id, get_uuid from datalab.tests import datalab_test_app_context def test_main_app(): """Main window test""" with datalab_test_app_context(console=False) as win: # Switch from panel to panel for panelname in ("macro", "image", "signal"): win.set_current_panel(panelname) # Switch to an unknown panel try: win.set_current_panel("unknown_panel") raise RuntimeError("Unknown panel should have raised an exception") except ValueError: pass panel = win.signalpanel # Create new groups grp1 = panel.add_group("Group 1") panel.add_group("Group 2") # Add group using different levels of the API panel.add_group("Group 3", select=True) panel.remove_object(force=True) win.add_group("Group 4", select=True) panel.remove_object(force=True) win.add_group("Group 5", panel="signal", select=True) panel.remove_object(force=True) # Rename group panel.objview.select_groups([2]) panel.rename_selected_object_or_group("Group xxx") panel.remove_object(force=True) # Add signals to signal panel sig1 = create_paracetamol_signal(500) panel.add_object(sig1) panel.rename_selected_object_or_group("Paracetamol Signal 1") panel.processor.run_feature(sips.derivative) panel.processor.run_feature(sips.wiener) # Get object titles titles = win.get_object_titles() execenv.print(f"Object titles:{os.linesep}{titles}") # Get object uuids uuids = win.get_object_uuids() uuids2 = win.get_object_uuids(group=1) uuids3 = win.get_object_uuids(group="Group 1") uuids4 = win.get_object_uuids(group=get_uuid(grp1)) assert uuids == uuids2 == uuids3 == uuids4, "Group UUIDs should be the same" execenv.print(f"Object uuids:{os.linesep}{uuids}") # Testing `get_object` execenv.print("*** Testing `get_object` ***") # Get object from title obj = win.get_object(titles[-1]) execenv.print(f" Object (from title) '{get_short_id(obj)}':{os.linesep}{obj}") # Get object obj = win.get_object(1) execenv.print( f" Object (from number) '{get_short_id(obj)}':{os.linesep}{obj}" ) # Get object by uuid obj = win.get_object(uuids[-1]) execenv.print(f" Object (from uuid) '{get_short_id(obj)}':{os.linesep}{obj}") # Testing dict-like interface of main window: execenv.print("*** Testing dict-like interface of proxy ***") # Get object from title obj = win[titles[-1]] execenv.print(f" Object (from title) '{get_short_id(obj)}':{os.linesep}{obj}") # Get object obj = win[1] execenv.print( f" Object (from number) '{get_short_id(obj)}':{os.linesep}{obj}" ) # Get object by uuid obj = win[uuids[-1]] execenv.print(f" Object (from uuid) '{get_short_id(obj)}':{os.linesep}{obj}") # Use "calc" method with parameters param = sigima.params.MovingMedianParam.create(n=5) win.calc("moving_median", param) # Use "calc" method without parameters win.calc("integral") # Use "calc" and choose an unknown computation method try: win.calc("unknown_method") raise RuntimeError("Unknown method should have raised an exception") except ValueError: pass # Force application menus to pop-up for menu in ( win.file_menu, win.create_menu, win.edit_menu, win.roi_menu, win.operation_menu, win.processing_menu, win.analysis_menu, win.view_menu, win.help_menu, ): # Just access the menu to ensure it's created and initialized assert menu is not None, f"Menu {menu.title()} should exist" # Trigger aboutToShow to populate dynamic menus without showing the popup menu.aboutToShow.emit() # Verify menu has actions (optional, but good sanity check) assert len(menu.actions()) > 0, f"Menu {menu.title()} should have actions" # Open settings dialog win.settings_action.trigger() if __name__ == "__main__": test_main_app() DataLab-1.0.2/datalab/tests/backbone/memory_leak.py000066400000000000000000000020771511411446000221610ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Memory leak test DataLab application memory leak test. """ # guitest: skip import os import numpy as np import psutil from guidata.qthelpers import qt_app_context from sigima.tests.vistools import view_curves from datalab.env import execenv from datalab.tests.features.control.embedded1_unit_test import HostWindow def memory_leak_test(iterations=100): """Test for memory leak""" with qt_app_context(): proc = psutil.Process(os.getpid()) mainview = HostWindow() mainview.show() memlist = [] for i in range(iterations): mainview.init_cdl() mainview.close_datalab() memdata = proc.memory_info().vms / 1024**2 memlist.append(memdata) execenv.print(i + 1, ":", memdata, "MB") view_curves( np.array(memlist), title="Memory leak test for DataLab application", ylabel="Memory (MB)", ) if __name__ == "__main__": memory_leak_test() DataLab-1.0.2/datalab/tests/backbone/procisolation1_unit.py000066400000000000000000000105771511411446000236660ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Process isolation unit test --------------------------- """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: skip from __future__ import annotations import time from collections.abc import Callable from multiprocessing.pool import AsyncResult, Pool from typing import Any import numpy as np import scipy.signal as sps from guidata.qthelpers import qt_app_context from plotpy.plot import PlotWindow from qtpy import QtWidgets as QW from sigima.objects import ImageDatatypes, NewImageParam from sigima.tests.data import create_2d_random, create_noisy_gaussian_image from datalab.adapters_plotpy import create_adapter_from_object from datalab.env import execenv from datalab.utils.qthelpers import create_progress_bar POOL: Pool | None = None class Worker: """Multiprocessing worker, to run long-running tasks in a separate process""" def __init__(self) -> None: self.asyncresult: AsyncResult = None self.result: Any = None @staticmethod def create_pool() -> None: """Create multiprocessing pool""" global POOL # pylint: disable=global-statement # Create a pool with one process POOL = Pool(processes=1) # pylint: disable=not-callable,consider-using-with @staticmethod def terminate_pool() -> None: """Terminate multiprocessing pool""" global POOL # pylint: disable=global-statement if POOL is not None: POOL.terminate() POOL.join() POOL = None def run(self, func: Callable, args: tuple[Any]) -> None: """Run computation""" global POOL # pylint: disable=global-statement,global-variable-not-assigned assert POOL is not None self.asyncresult = POOL.apply_async(func, args) def terminate(self) -> None: """Terminate worker""" # Terminate the process and stop the timer self.terminate_pool() execenv.print("Computation cancelled!") # Recreate the pool for the next computation self.create_pool() def is_computation_finished(self) -> bool: """Return True if computation is finished""" return self.asyncresult.ready() def get_result(self) -> Any: """Return computation result""" self.result = self.asyncresult.get() self.asyncresult = None return self.result def testfunc(data: np.ndarray, size: int, error: bool) -> np.ndarray: """Test function""" if error: raise ValueError("Test error") return sps.medfilt(data, size) + create_2d_random(data.shape[0], data.dtype) def test_multiprocessing1(iterations: int = 4) -> None: """Multiprocessing test""" Worker.create_pool() with qt_app_context(exec_loop=True): win = PlotWindow(title="Multiprocessing test", icon="datalab.svg", toolbar=True) win.resize(800, 600) win.show() param = NewImageParam.create( height=1000, width=1000, dtype=ImageDatatypes.UINT16 ) image = create_noisy_gaussian_image(param, add_annotations=True) win.get_plot().add_item(create_adapter_from_object(image).make_item()) worker = Worker() with create_progress_bar(win, "Computing", max_=iterations) as progress: for index in range(iterations): progress.setValue(index) progress.setLabelText(f"Computing {index}") test_error = index == 2 worker.run(testfunc, (image.data, 3, test_error)) while not worker.is_computation_finished(): QW.QApplication.processEvents() time.sleep(0.1) if progress.wasCanceled(): worker.terminate() break if worker.is_computation_finished(): try: image.data = worker.get_result() except Exception as exc: # pylint: disable=broad-except execenv.print(f"Intercepted exception: {exc}") win.get_plot().add_item( create_adapter_from_object(image).make_item() ) else: break worker.terminate_pool() if __name__ == "__main__": test_multiprocessing1() DataLab-1.0.2/datalab/tests/backbone/procisolation2_unit.py000066400000000000000000000134671511411446000236700ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Process isolation unit test --------------------------- """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: skip import time from multiprocessing import Pool import numpy as np import scipy.signal as sps from guidata.configtools import get_icon from guidata.qthelpers import qt_app_context from plotpy.plot import PlotOptions, PlotWidget from qtpy import QtCore as QC from qtpy import QtWidgets as QW from sigima.objects import NewImageParam from sigima.tests.data import create_2d_random, create_noisy_gaussian_image from datalab.adapters_plotpy import create_adapter_from_object from datalab.env import execenv class MainWindow(QW.QMainWindow): """Multiprocessing test main window""" SIG_COMPUTATION_FINISHED = QC.Signal() def __init__(self): super().__init__() self.setWindowTitle("DataLab Multiprocessing test") self.setWindowIcon(get_icon("datalab.svg")) # Setting up the layout and widgets self.imagewidget = PlotWidget(options=PlotOptions(type="image")) self.setCentralWidget(self.imagewidget) self.layout = QW.QVBoxLayout(self.imagewidget) self.start_button = QW.QPushButton("Start Computation", self) self.start_button.clicked.connect(self.start_computation) self.layout.addWidget(self.start_button) self.cancel_button = QW.QPushButton("Cancel Computation", self) self.cancel_button.clicked.connect(self.cancel_computation) self.layout.addWidget(self.cancel_button) # Create a test image and add it to the plot param = NewImageParam.create(height=1000, width=1000) image = create_noisy_gaussian_image(param, add_annotations=True) self.imageitem = create_adapter_from_object(image).make_item() self.imagewidget.plot.add_item(self.imageitem) self.array = image.data self.result = None self.timer = QC.QTimer() self.timer.setInterval(10) # Check every 100 ms self.timer.timeout.connect(self.check_process) self.start_time = None self.SIG_COMPUTATION_FINISHED.connect(self.update_plot) @staticmethod def long_running_task(array: np.ndarray) -> None: """ A long running task that computes a median filter on the input array and puts the result in the queue. The done_event is set when the computation is finished. Args: array (numpy.ndarray): The input data to compute the filter on. """ start_time = time.time() result = sps.medfilt(array, 1) + create_2d_random(array.shape[0], array.dtype) execenv.print(f"Computation done: delta={time.time() - start_time:.3f} s") return result def print_time(self, title: str) -> None: """ Prints the time since the last call to this method and resets the start_time. Args: title (str): The title to print before the time. """ execenv.print(f"{title}: {time.time() - self.start_time:.3f} s") self.start_time = time.time() def start_computation(self) -> None: """ Starts the computation in a separate process and starts the timer. """ global POOL # pylint: disable=global-statement,global-variable-not-assigned if self.result and not self.result.ready(): self.print_time("Computation already running!") return self.start_time = time.time() self.result = POOL.apply_async(self.long_running_task, (self.array,)) self.timer.start() self.print_time("Computation started") def cancel_computation(self) -> None: """ Cancels the computation by terminating the process and stopping the timer. """ global POOL # pylint: disable=global-statement # Terminate the process and stop the timer POOL.terminate() POOL.join() self.timer.stop() execenv.print("Computation cancelled!") # Recreate the pool for the next computation POOL = Pool(processes=1) # pylint: disable=not-callable,consider-using-with def check_process(self) -> None: """ Checks if the computation is finished. If it is, stops the timer and calls the method to handle the computation finishing. """ if self.result.ready(): self.print_time("Computation finished") self.timer.stop() self.on_computation_finished() def on_computation_finished(self) -> None: """ Retrieves the result from the queue and emits the SIG_COMPUTATION_FINISHED signal. """ self.array = self.result.get() self.SIG_COMPUTATION_FINISHED.emit() self.print_time("Computation result retrieved") def update_plot(self) -> None: """ Updates the plot with the result of the computation. """ self.imageitem.set_data(self.array) self.imagewidget.plot.replot() self.print_time("Plot updated") def closeEvent(self, event) -> None: """ Overrides the closeEvent to stop the timer and terminate the process when the window is closed. Args: event: The close event. """ self.timer.stop() super().closeEvent(event) def test_multiprocessing2() -> None: """ Creates a PyQt application context, shows the main window, and starts the event loop. """ global POOL # pylint: disable=global-statement,global-variable-not-assigned with qt_app_context(exec_loop=True): window = MainWindow() window.show() POOL.terminate() POOL.join() if __name__ == "__main__": POOL = Pool(processes=1) # pylint: disable=not-callable,consider-using-with test_multiprocessing2() DataLab-1.0.2/datalab/tests/backbone/procisolation_unit_test.py000066400000000000000000000010151511411446000246270ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Process isolation unit test --------------------------- Just test if it's possible to run the process isolation test from another module. This may be an issue with the Pool object being global. """ # guitest: show from datalab.tests.backbone import procisolation1_unit def test_procisolation(): """Test process isolation""" procisolation1_unit.test_multiprocessing1() if __name__ == "__main__": test_procisolation() DataLab-1.0.2/datalab/tests/backbone/profiling_app.py000066400000000000000000000011731511411446000225020ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Profiling """ # guitest: skip from datalab.env import execenv from datalab.tests import datalab_test_app_context def test_profiling(): """Profiling test""" with execenv.context(unattended=True): with datalab_test_app_context() as win: win.open_h5_files( [ "C:/Dev/Projets/X-GRID_data/Projets_Oasis/XGRID5/" "VS000001-blobs_doh_profiling.h5" ], import_all=True, ) if __name__ == "__main__": test_profiling() DataLab-1.0.2/datalab/tests/backbone/strings_unit_test.py000066400000000000000000000040041511411446000234340ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ String utilities unit tests for DataLab Testing the string utility functions in datalab.utils.strings module, particularly the save_html_diff function which is useful for debugging and comparing text differences. """ from __future__ import annotations import os import tempfile from pathlib import Path from unittest.mock import patch import pytest from datalab.utils.strings import save_html_diff @pytest.fixture def temp_html_file(): """Fixture providing a temporary file path for HTML diff output.""" with tempfile.TemporaryDirectory() as tmpdir: yield os.path.join(tmpdir, "test_diff.html") def test_save_html_diff_basic(temp_html_file): # pylint: disable=W0621 """Test that save_html_diff creates a valid HTML file with diff content.""" text1 = "Line 1\nLine 2\nLine 3" text2 = "Line 1\nModified Line 2\nLine 3" with patch("webbrowser.open"): save_html_diff(text1, text2, "Before", "After", temp_html_file) # Verify file creation and basic structure assert Path(temp_html_file).exists() content = Path(temp_html_file).read_text(encoding="utf-8") assert " None: """Add metadata to signals helper function.""" execenv.print("Add metadata signal application test:") panel = win.signalpanel # Add test signals to the panel for sig in create_test_signals(): panel.add_object(sig) # Select all signals panel.objview.select_objects([1, 2, 3]) # Create and configure the Add metadata dialog objs = panel.objview.get_sel_objects(include_groups=True) param = AddMetadataParam(objs) # Configure example metadata param.metadata_key = "experiment_id" param.value_pattern = "EXP_{index:03d}" param.conversion = "string" param.update_preview() execenv.print(f" Preview: {param.preview}") assert "experiment_id" in param.preview execenv.print(" ✓ Add metadata parameter configured correctly") # Edit the parameter to show the dialog execenv.print(" Opening Add metadata dialog...") with warnings.catch_warnings(): warnings.simplefilter("ignore", category=gds.DataItemValidationWarning) with execenv.context(screenshot=screenshot): param.edit(parent=win, wordwrap=False, object_name="s_add_metadata") # Run DataLab's metadata addition functionality: panel.add_metadata(param) execenv.print("==> Signal application test OK") def __add_metadata_to_images(win: DLMainWindow, screenshot: bool = False) -> None: """Add metadata to images helper function.""" execenv.print("Add metadata image test:") panel = win.imagepanel # Add test images to the panel for img in create_test_images(): panel.add_object(img) # Select all images panel.objview.select_objects([1, 2, 3]) # Create and configure the Add metadata dialog objs = panel.objview.get_sel_objects(include_groups=True) param = AddMetadataParam(objs) # Configure example metadata param.metadata_key = "sample_id" param.value_pattern = "SAMPLE_{index:04d}_{title:upper}" param.conversion = "string" param.update_preview() execenv.print(f" Preview: {param.preview}") assert "sample_id" in param.preview execenv.print(" ✓ Add metadata parameter configured correctly") # Edit the parameter to show the dialog execenv.print(" Opening Add metadata dialog...") with warnings.catch_warnings(): warnings.simplefilter("ignore", category=gds.DataItemValidationWarning) with execenv.context(screenshot=screenshot): param.edit(parent=win, wordwrap=False, object_name="i_add_metadata") # Run DataLab's metadata addition functionality: panel.add_metadata(param) execenv.print("==> Image application test OK") def test_add_metadata_to_signals() -> None: """Test Add metadata feature for signals.""" with datalab_test_app_context() as win: __add_metadata_to_signals(win) def test_add_metadata_to_images() -> None: """Test Add metadata feature for images.""" with datalab_test_app_context() as win: __add_metadata_to_images(win) def add_metadata_screenshots(): """Generate add metadata screenshots.""" with execenv.context(unattended=True): with datalab_test_app_context() as win: execenv.print("Add metadata screenshots test:") __add_metadata_to_signals(win, screenshot=True) __add_metadata_to_images(win, screenshot=True) execenv.print("==> All screenshot tests completed") if __name__ == "__main__": # test_add_metadata_to_signals() # test_add_metadata_to_images() add_metadata_screenshots() DataLab-1.0.2/datalab/tests/features/common/add_metadata_unit_test.py000066400000000000000000000214521511411446000257030ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Unit tests for Add Metadata feature. This module tests the `AddMetadataParam` class and the `add_metadata` method from `datalab.gui.panel.base`. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING import guidata.config as gcfg import numpy as np import pytest from sigima.objects import create_image, create_signal from datalab.env import execenv from datalab.gui.panel.base import AddMetadataParam if TYPE_CHECKING: from sigima.objects import ImageObj, SignalObj def create_test_signals() -> list[SignalObj]: """Create a list of test signals for testing.""" # Signal 1: Sine wave x = np.linspace(0, 10, 100) signal1 = create_signal( title="Sine Wave", x=x, y=np.sin(x), metadata={"type": "sine", "frequency": "1 Hz"}, ) # Signal 2: Cosine wave signal2 = create_signal( title="Cosine Wave", x=x, y=np.cos(x * 2), metadata={"type": "cosine", "frequency": "2 Hz"}, ) # Signal 3: Exponential decay signal3 = create_signal( title="Exponential Decay", x=x, y=np.exp(-x / 3), metadata={"type": "exponential", "time_constant": "3 s"}, ) return [signal1, signal2, signal3] def create_test_images() -> list[ImageObj]: """Create a list of test images for testing.""" # Image 1: Random noise image1 = create_image( title="Random Noise", data=np.random.rand(100, 100), metadata={"type": "noise", "distribution": "uniform"}, ) # Image 2: Gaussian pattern x = np.linspace(-3, 3, 50) y = np.linspace(-3, 3, 50) X, Y = np.meshgrid(x, y) image2 = create_image( title="Gaussian Pattern", data=np.exp(-(X**2 + Y**2)), metadata={"type": "gaussian", "sigma": "1.0"}, ) # Image 3: Checkerboard pattern data3 = np.zeros((100, 100)) data3[::10, ::10] = 1 data3[5::10, 5::10] = 1 image3 = create_image( title="Checkerboard", data=data3, metadata={"type": "pattern", "period": "10 px"}, ) return [image1, image2, image3] class TestAddMetadata: """Test class for AddMetadataParam with proper setup/teardown.""" @pytest.fixture(autouse=True) def setup_validation(self): """Disable guidata validation during tests.""" old_mode = gcfg.get_validation_mode() gcfg.set_validation_mode(gcfg.ValidationMode.DISABLED) yield gcfg.set_validation_mode(old_mode) def test_string_values(self) -> None: """Test adding string metadata values.""" execenv.print(f"{self.test_string_values.__doc__}:") # Create test signals signals = create_test_signals() # Create parameter p = AddMetadataParam(signals) p.metadata_key = "test_string" p.value_pattern = "{title}" p.conversion = "string" # Build values values = p.build_values(signals) expected_values = ["Sine Wave", "Cosine Wave", "Exponential Decay"] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ String values: {values}") # Check preview p.update_preview() assert "test_string" in p.preview, "Preview should contain metadata key" execenv.print(" ✓ Preview generated successfully") execenv.print(f"{self.test_string_values.__doc__}: OK") def test_numeric_values(self) -> None: """Test adding numeric metadata values.""" execenv.print(f"{self.test_numeric_values.__doc__}:") # Create test signals signals = create_test_signals() # Test integer conversion p = AddMetadataParam(signals) p.metadata_key = "index" p.value_pattern = "{index}" p.conversion = "int" values = p.build_values(signals) expected_values = [1, 2, 3] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Integer values: {values}") # Test float conversion p.conversion = "float" values = p.build_values(signals) expected_values = [1.0, 2.0, 3.0] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Float values: {values}") execenv.print(f"{self.test_numeric_values.__doc__}: OK") def test_boolean_values(self) -> None: """Test adding boolean metadata values.""" execenv.print(f"{self.test_boolean_values.__doc__}:") # Create test signals signals = create_test_signals() # Test boolean conversion with "true" pattern p = AddMetadataParam(signals) p.metadata_key = "is_valid" p.value_pattern = "true" p.conversion = "bool" values = p.build_values(signals) expected_values = [True, True, True] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Boolean (true) values: {values}") # Test boolean conversion with "false" pattern p.value_pattern = "false" values = p.build_values(signals) expected_values = [False, False, False] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Boolean (false) values: {values}") execenv.print(f"{self.test_boolean_values.__doc__}: OK") def test_pattern_formatting(self) -> None: """Test various pattern formatting options.""" execenv.print(f"{self.test_pattern_formatting.__doc__}:") # Create test signals signals = create_test_signals() # Test index with zero padding p = AddMetadataParam(signals) p.metadata_key = "file_id" p.value_pattern = "file_{index:03d}" p.conversion = "string" values = p.build_values(signals) expected_values = ["file_001", "file_002", "file_003"] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Padded index pattern: {values}") # Test uppercase modifier p.value_pattern = "{title:upper}" values = p.build_values(signals) expected_values = ["SINE WAVE", "COSINE WAVE", "EXPONENTIAL DECAY"] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Uppercase pattern: {values}") # Test lowercase modifier p.value_pattern = "{title:lower}" values = p.build_values(signals) expected_values = ["sine wave", "cosine wave", "exponential decay"] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Lowercase pattern: {values}") execenv.print(f"{self.test_pattern_formatting.__doc__}: OK") def test_with_images(self) -> None: """Test AddMetadataParam with image objects.""" execenv.print(f"{self.test_with_images.__doc__}:") # Create test images images = create_test_images() # Create parameter p = AddMetadataParam(images) p.metadata_key = "category" p.value_pattern = "{title:lower}" p.conversion = "string" # Build values values = p.build_values(images) expected_values = ["random noise", "gaussian pattern", "checkerboard"] assert values == expected_values, f"Expected {expected_values}, got {values}" execenv.print(f" ✓ Image metadata values: {values}") # Check preview p.update_preview() assert "category" in p.preview, "Preview should contain metadata key" # Check that all values are in the preview for expected_val in expected_values: assert expected_val in p.preview, f"Preview should contain {expected_val}" execenv.print(" ✓ Preview contains all values") execenv.print(f"{self.test_with_images.__doc__}: OK") def test_error_handling(self) -> None: """Test error handling for invalid patterns.""" execenv.print(f"{self.test_error_handling.__doc__}:") # Create test signals signals = create_test_signals() # Test with invalid pattern p = AddMetadataParam(signals) p.metadata_key = "test" p.value_pattern = "{invalid_key}" # This key doesn't exist p.conversion = "string" # Update preview should handle the error gracefully p.update_preview() assert "Invalid" in p.preview, "Preview should show invalid pattern error" execenv.print(" ✓ Invalid pattern error handled") execenv.print(f"{self.test_error_handling.__doc__}: OK") if __name__ == "__main__": pytest.main([__file__, "-v"]) DataLab-1.0.2/datalab/tests/features/common/annotations_management_unit_test.py000066400000000000000000000121531511411446000300420ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Unit tests for annotation copy/paste functionality.""" import os.path as osp from sigima.tests import data as test_data from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers def test_annotations_copy_paste(): """Test copying and pasting annotations between objects.""" with execenv.context(unattended=True): with datalab_test_app_context() as win: panel = win.signalpanel # Create two signals sig1 = test_data.create_paracetamol_signal() sig2 = test_data.create_paracetamol_signal() # Add annotations to first signal orig_annotations = [ {"type": "label", "text": "Peak 1"}, {"type": "label", "text": "Peak 2"}, ] sig1.set_annotations(orig_annotations) # Add objects to panel - sig1 will be selected after this panel.add_object(sig1) # Copy from first signal (which is currently selected) panel.copy_annotations() # Add second signal - sig2 will be selected after this panel.add_object(sig2) # Paste to second signal (which is now selected) panel.paste_annotations() # Verify annotations were copied assert sig2.get_annotations() == orig_annotations def test_annotations_import_export(): """Test importing and exporting annotations to file.""" with execenv.context(unattended=True): with helpers.WorkdirRestoringTempDir() as tmpdir: fname = osp.join(tmpdir, "test.dlabann") with datalab_test_app_context() as win: panel = win.signalpanel # Create signal with annotations sig = test_data.create_paracetamol_signal() orig_annotations = [{"type": "label", "text": "Test annotation"}] sig.set_annotations(orig_annotations) panel.add_object(sig) # Export annotations panel.export_annotations_from_file(fname) # Clear annotations to test import sig.clear_annotations() assert len(sig.get_annotations()) == 0 # Import annotations panel.import_annotations_from_file(fname) # Verify annotations were imported assert sig.get_annotations() == orig_annotations def test_annotations_delete(): """Test deleting annotations from objects.""" with execenv.context(unattended=True): with datalab_test_app_context() as win: panel = win.signalpanel # Create signal with annotations sig = test_data.create_paracetamol_signal() sig.set_annotations( [ {"type": "label", "text": "To be deleted"}, ] ) panel.add_object(sig) # Verify annotations exist assert len(sig.get_annotations()) == 1 # Delete annotations panel.delete_annotations() # Verify annotations were deleted assert len(sig.get_annotations()) == 0 def test_annotations_action_states(): """Test that action states are updated after annotation operations. This test verifies the fix for the issue where action enable states were not updated after operations like delete_annotations, requiring the user to select another object for the actions to update. Note: We can't easily test the UI action states in automated tests, but we verify that the underlying state update mechanism is called. """ with execenv.context(unattended=True): with datalab_test_app_context() as win: panel = win.signalpanel # Create signal with annotations sig = test_data.create_paracetamol_signal() orig_annotations = [{"type": "label", "text": "Test"}] sig.set_annotations(orig_annotations) panel.add_object(sig) # Verify object has annotations assert len(sig.get_annotations()) == 1 # Delete annotations - this should update action states panel.delete_annotations() # Verify annotations were deleted assert len(sig.get_annotations()) == 0 # Verify clipboard is empty assert len(panel.annotations_clipboard) == 0 # Re-add annotations and copy - this should update action states sig.set_annotations(orig_annotations) panel.selection_changed() # Refresh states panel.copy_annotations() # Verify clipboard now has annotations assert len(panel.annotations_clipboard) == 1 # Clear annotations, paste, and verify sig.clear_annotations() panel.paste_annotations() assert len(sig.get_annotations()) == 1 if __name__ == "__main__": test_annotations_copy_paste() test_annotations_import_export() test_annotations_delete() test_annotations_action_states() DataLab-1.0.2/datalab/tests/features/common/auto_analysis_recompute_unit_test.py000066400000000000000000000242721511411446000302540ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Unit test for automatic recomputation of 1-to-0 analysis operations. This test verifies that analysis results (like centroid) are automatically updated when data changes through various methods: - ROI modifications (adding, deleting ROIs) - Data transformations via recompute_1_to_1 (modifying processing parameters) The tests create a Gaussian image, compute its centroid, then verify that: 1. The centroid changes when a ROI is added to restrict the calculation region 2. Two centroid rows are generated when two ROIs are added 3. One centroid row remains after deleting the first ROI 4. The centroid returns to the original value when all ROIs are deleted 5. The centroid is recomputed when processing parameters are modified """ # guitest: show from __future__ import annotations import numpy as np from sigima.objects import Gauss2DParam, create_image_from_param, create_image_roi from sigima.params import RotateParam from datalab.adapters_metadata import GeometryAdapter from datalab.config import Conf from datalab.tests import datalab_test_app_context def get_centroid_coords(obj) -> tuple[float, float] | None: """Extract centroid coordinates from object metadata. Args: obj: Image object with centroid results Returns: Tuple (x, y) of centroid coordinates, or None if no centroid found """ adapter = GeometryAdapter.from_obj(obj, "centroid") if adapter is not None: print("adapter.result.coords:", adapter.result.coords) return tuple(adapter.result.coords[0]) return None def test_analysis_recompute_after_roi_change(): """Test automatic recomputation of analysis results when ROI changes.""" with datalab_test_app_context(console=False) as win: panel = win.imagepanel # Create a 2D Gaussian image in a 200x200 image size = 200 param = Gauss2DParam.create(height=size, width=size, sigma=20) img = create_image_from_param(param) panel.add_object(img) # Compute centroid on the full image with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("centroid") centroid = get_centroid_coords(img) assert centroid is not None, "Centroid should be computed" x0, y0 = centroid print(f"\nInitial centroid (full image): ({x0:.1f}, {y0:.1f})") # Step 1: Add ROI (simulating edit_roi_graphically) # Add a rectangular ROI in the upper-left quadrant roi = create_image_roi("rectangle", [25, 25, 50, 50]) # x0, y0, width, height img.roi = roi panel.refresh_plot("selected", update_items=True) # Trigger auto-recompute by simulating ROI modification panel.processor.auto_recompute_analysis(img) # Verify centroid was updated centroid = get_centroid_coords(img) assert centroid is not None, "Centroid should still exist after ROI change" x1, y1 = centroid print(f"Centroid after adding ROI (upper-left): ({x1:.1f}, {y1:.1f})") # Centroid should have moved (different from initial) centroid_changed = not ( np.isclose(x1, x0, atol=0.1) and np.isclose(y1, y0, atol=0.1) ) assert centroid_changed, ( f"Centroid should have changed from ({x0:.1f}, {y0:.1f}) " f"to ({x1:.1f}, {y1:.1f})" ) # Step 2: Add two ROIs at once # Create a multi-ROI object with two rectangular regions roi1 = create_image_roi("rectangle", [25, 25, 50, 50]) # Upper-left roi2 = create_image_roi("rectangle", [150, 150, 40, 40]) # Lower-right roi1.add_roi(roi2) # Combine both ROIs img.roi = roi1 panel.refresh_plot("selected", update_items=True) panel.processor.auto_recompute_analysis(img) # Verify centroid now has TWO rows (one for each ROI) adapter = GeometryAdapter.from_obj(img, "centroid") assert adapter is not None, "Centroid adapter should exist" coords = adapter.result.coords print(f"Centroid coords after adding two ROIs:\n{coords}") assert len(coords) == 2, f"Should have 2 centroid rows, got {len(coords)}" x2_roi0, y2_roi0 = coords[0] x2_roi1, y2_roi1 = coords[1] print( f"Centroid ROI 0 (upper-left): ({x2_roi0:.1f}, {y2_roi0:.1f}), " f"ROI 1 (lower-right): ({x2_roi1:.1f}, {y2_roi1:.1f})" ) # Step 3: Delete the first ROI using delete_single_roi panel.processor.delete_single_roi(roi_index=0) # Verify centroid now has ONE row (for the remaining ROI) adapter = GeometryAdapter.from_obj(img, "centroid") assert adapter is not None, "Centroid adapter should exist after ROI deletion" coords = adapter.result.coords print(f"Centroid coords after deleting first ROI:\n{coords}") assert len(coords) == 1, f"Should have 1 centroid row, got {len(coords)}" x3, y3 = coords[0] print(f"Centroid after deleting first ROI: ({x3:.1f}, {y3:.1f})") # The remaining ROI should be the second one (lower-right), so centroid should # be close to what was previously in ROI 1 assert np.isclose(x3, x2_roi1, atol=1.0), ( f"X centroid should be close to {x2_roi1:.1f}, got {x3:.1f}" ) assert np.isclose(y3, y2_roi1, atol=1.0), ( f"Y centroid should be close to {y2_roi1:.1f}, got {y3:.1f}" ) # Step 4: Delete all remaining ROIs using delete_regions_of_interest panel.processor.delete_regions_of_interest() # Verify centroid was updated back to original centroid = get_centroid_coords(img) assert centroid is not None, "Centroid should exist after deleting all ROIs" x4, y4 = centroid print(f"Centroid after delete_regions_of_interest: ({x4:.1f}, {y4:.1f})") # Should return to original centroid of full image assert np.isclose(x4, x0, atol=1.0), ( f"X centroid should return to {x0:.1f}, got {x4:.1f}" ) assert np.isclose(y4, y0, atol=1.0), ( f"Y centroid should return to {y0:.1f}, got {y4:.1f}" ) print("\n✓ All ROI auto-recompute tests passed!") def test_analysis_recompute_after_recompute_1_to_1(): """Test automatic recomputation of analysis after processing parameter changes.""" with datalab_test_app_context(console=False) as win: panel = win.imagepanel # Create a Gaussian image offset from center size = 200 # In Gauss2DParam, x0 and y0 are the center coordinates with Xmin=-10.0, # Ymin=-10.0, Xmax=10.0, Ymax=10.0 by default. # The centroid position should be at (49.75, 99.5). # After a 45° rotation, it should move closer to (64.32, 134.68). # Or after a 90° rotation, it should move to (99.5, 149.2). param = Gauss2DParam.create(height=size, width=size, x0=-5.0) img = create_image_from_param(param) panel.add_object(img) # Apply a rotation transformation with 45° angle rot_param = RotateParam.create(angle=45.0) with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("rotate", rot_param) # Get the rotated image img_rotated = panel.objview.get_sel_objects()[0] print(f"\nRotated image title: {img_rotated.title}") # Compute centroid on the rotated image with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("centroid") # Get initial centroid (after 45° rotation) centroid = get_centroid_coords(img_rotated) assert centroid is not None, "Centroid should be computed" x0, y0 = centroid print(f"Initial centroid (45° rotation): ({x0:.1f}, {y0:.1f})") expected_x0 = 64.32 expected_y0 = 134.68 assert np.isclose(x0, expected_x0, atol=0.2), ( f"X centroid should be near {expected_x0:.1f}, got {x0:.1f}" ) assert np.isclose(y0, expected_y0, atol=0.2), ( f"Y centroid should be near {expected_y0:.1f}, got {y0:.1f}" ) # Now modify the rotation angle to 90° via the Processing tab # The rotated object is already selected, just ensure we're accessing it panel.objview.select_objects([img_rotated]) # Get the processing parameter editor and change the angle assert panel.objprop.processing_param_editor is not None editor = panel.objprop.processing_param_editor editor.dataset.angle = 90.0 # Change from 45° to 90° # Apply the modified parameters (this triggers recompute_1_to_1) report = panel.objprop.apply_processing_parameters(interactive=False) assert report.success, f"Recompute failed: {report.message}" print("Processing parameters recomputed with new angle (90°)") # Verify centroid was automatically recomputed centroid = get_centroid_coords(img_rotated) assert centroid is not None, "Centroid should still exist after recompute" x1, y1 = centroid print(f"Centroid after recompute (90° rotation): ({x1:.1f}, {y1:.1f})") # After 90° rotation: the Gaussian blob that was at upper-right (after 45°) # moves toward the center-right area # Empirical measurements show approximately (99.5, 149.2) expected_x1 = 99.5 expected_y1 = 149.2 assert np.isclose(x1, expected_x1, atol=0.2), ( f"X centroid should be near {expected_x1:.1f}, got {x1:.1f}" ) assert np.isclose(y1, expected_y1, atol=0.2), ( f"Y centroid should be near {expected_y1:.1f}, got {y1:.1f}" ) # Most importantly, verify the centroid changed from 90° rotation centroid_changed = not ( np.isclose(x1, x0, atol=5.0) and np.isclose(y1, y0, atol=5.0) ) assert centroid_changed, ( f"Centroid should have changed from ({x0:.1f}, {y0:.1f}) " f"to ({x1:.1f}, {y1:.1f}) after changing rotation angle" ) print("\n✓ Recompute_1_to_1 auto-analysis test passed!") if __name__ == "__main__": test_analysis_recompute_after_roi_change() test_analysis_recompute_after_recompute_1_to_1() DataLab-1.0.2/datalab/tests/features/common/coordutils_unit_test.py000066400000000000000000000145361511411446000255070ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Coordinate utilities unit tests """ import numpy as np import pytest from sigima.objects import ( CircularROI, PolygonalROI, RectangularROI, SegmentROI, create_image, create_signal, ) from datalab.adapters_plotpy.coordutils import ( round_image_coords, round_image_roi_param, round_signal_coords, round_signal_roi_param, ) def test_round_signal_coords(): """Test signal coordinate rounding""" # Create a signal with sampling period of 0.1 x = np.arange(0, 10, 0.1) y = np.sin(x) sig = create_signal("test", x, y) # Test basic rounding coords = [1.23456789, 5.87654321] rounded = round_signal_coords(sig, coords) # With sampling period 0.1 and precision_factor 0.1, precision = 0.01 # Should round to 2 decimal places assert rounded == [1.23, 5.88] # Test with custom precision factor rounded = round_signal_coords(sig, coords, precision_factor=1.0) # precision = 0.1, should round to 1 decimal place assert rounded == [1.2, 5.9] # Test with signal that has too few points sig_short = create_signal("test", np.array([1.0]), np.array([2.0])) coords = [1.23456789] rounded = round_signal_coords(sig_short, coords) # Should return coords as-is assert rounded == coords # Test with constant x (zero sampling period) sig_const = create_signal("test", np.ones(10), np.ones(10)) rounded = round_signal_coords(sig_const, coords) # Should return coords as-is assert rounded == coords def test_round_image_coords(): """Test image coordinate rounding""" # Create an image with dx=dy=1.0 (uniform) data = np.ones((100, 100)) img = create_image("test", data) # Test basic rounding coords = [10.123456, 20.987654, 30.555555, 40.444444] rounded = round_image_coords(img, coords) # With pixel spacing 1.0 and precision_factor 0.1, precision = 0.1 # Should round to 1 decimal place assert rounded == [10.1, 21.0, 30.6, 40.4] # Test with custom precision factor rounded = round_image_coords(img, coords, precision_factor=1.0) # precision = 1.0, should round to 0 decimal places assert rounded == [10.0, 21.0, 31.0, 40.0] # Test with empty coords assert round_image_coords(img, []) == [] # Test error for odd number of coordinates with pytest.raises(ValueError, match="even number of elements"): round_image_coords(img, [1.0, 2.0, 3.0]) def test_round_signal_roi_param(): """Test signal ROI parameter rounding""" # Create a signal with sampling period of 0.1 x = np.arange(0, 10, 0.1) y = np.sin(x) sig = create_signal("test", x, y) # Create a segment ROI roi = SegmentROI([1.23456789, 5.87654321], False) param = roi.to_param(sig, 0) # Round the parameter round_signal_roi_param(sig, param) # Check that coordinates are rounded assert param.xmin == 1.23 assert param.xmax == 5.88 def test_round_image_roi_param_rectangle(): """Test image ROI parameter rounding for rectangular ROI""" # Create an image with dx=dy=1.0 data = np.ones((100, 100)) img = create_image("test", data) # Create a rectangular ROI with floating-point errors roi = RectangularROI([10.0, 20.0, 50.29999999999995, 75.19999999999999], False) param = roi.to_param(img, 0) # Verify we have the floating-point errors before rounding assert param.dx == 50.29999999999995 assert param.dy == 75.19999999999999 # Round the parameter round_image_roi_param(img, param) # Check that coordinates are rounded assert param.x0 == 10.0 assert param.y0 == 20.0 assert param.dx == 50.3 assert param.dy == 75.2 def test_round_image_roi_param_circle(): """Test image ROI parameter rounding for circular ROI""" # Create an image with dx=dy=1.0 data = np.ones((100, 100)) img = create_image("test", data) # Create a circular ROI with floating-point errors roi = CircularROI([50.123456, 50.987654, 25.555555], False) param = roi.to_param(img, 0) # Round the parameter round_image_roi_param(img, param) # Check that coordinates are rounded assert param.xc == 50.1 assert param.yc == 51.0 assert param.r == 25.6 def test_round_image_roi_param_polygon(): """Test image ROI parameter rounding for polygonal ROI""" # Create an image with dx=dy=1.0 data = np.ones((100, 100)) img = create_image("test", data) # Create a polygonal ROI with floating-point errors coords = [10.123456, 20.987654, 30.555555, 40.444444, 50.111111, 60.999999] roi = PolygonalROI(coords, False) param = roi.to_param(img, 0) # Round the parameter round_image_roi_param(img, param) # Check that coordinates are rounded expected = np.array([10.1, 21.0, 30.6, 40.4, 50.1, 61.0]) np.testing.assert_array_equal(param.points, expected) def test_round_coords_non_uniform_image(): """Test coordinate rounding for non-uniform image coordinates""" # Create an image with non-uniform coordinates data = np.ones((10, 10)) img = create_image("test", data) # Set non-uniform coordinates img.xcoords = np.array([0, 1, 3, 6, 10, 15, 21, 28, 36, 45]) # varying spacing img.ycoords = np.array([0, 2, 4, 6, 8, 10, 12, 14, 16, 18]) # uniform spacing of 2 # Test rounding - should use average spacing coords = [5.123456, 7.987654, 25.555555, 13.444444] rounded = round_image_coords(img, coords) # Average dx ≈ 5.0, average dy = 2.0 # With precision_factor=0.1: precision_x=0.5, precision_y=0.2 # Should round to 1 decimal place for both assert rounded == [5.1, 8.0, 25.6, 13.4] def test_round_coords_preserves_structure(): """Test that coordinate rounding preserves the structure of coordinates""" # Create an image data = np.ones((100, 100)) img = create_image("test", data) # Test with multiple coordinate pairs coords = [ 10.111, 20.222, 30.333, 40.444, 50.555, 60.666, 70.777, 80.888, ] rounded = round_image_coords(img, coords) # Should have same length assert len(rounded) == len(coords) # Each coordinate should be rounded independently assert all(isinstance(c, (int, float)) for c in rounded) if __name__ == "__main__": pytest.main([__file__, "-v"]) DataLab-1.0.2/datalab/tests/features/common/createobject_unit_test.py000066400000000000000000000030551511411446000257440ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ New signal/image test Testing GUI functions related to signal/image creation. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: show from __future__ import annotations import sigima.objects from guidata.qthelpers import qt_app_context from sigima.tests.vistools import view_curves, view_images from datalab.env import execenv from datalab.gui.newobject import create_image_gui, create_signal_gui def test_new_signal() -> None: """Test new signal feature""" edit = not execenv.unattended with qt_app_context(): signal = create_signal_gui(None, edit=edit) if signal is not None: data = (signal.x, signal.y) view_curves([data], name=test_new_signal.__name__, title=signal.title) def test_new_image() -> None: """Test new image feature""" # Test with no input parameter edit = not execenv.unattended with qt_app_context(): image = create_image_gui(None, edit=edit) if image is not None: view_images(image.data, name=test_new_image.__name__, title=image.title) # Test with parametered 2D-Gaussian param = sigima.objects.Gauss2DParam.create(x0=3, y0=3, sigma=5) image = create_image_gui(param, edit=edit) if image is not None: view_images(image.data, name=test_new_image.__name__, title=image.title) if __name__ == "__main__": test_new_signal() test_new_image() DataLab-1.0.2/datalab/tests/features/common/geometry_results_app_test.py000066400000000000000000000117011511411446000265240ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Result shapes application test: - Create an image with metadata shapes and ROI - Further tests to be done manually: check if copy/paste metadata works """ # guitest: show from __future__ import annotations import pandas as pd import sigima.objects import sigima.params from sigima.tests import data as test_data from datalab.adapters_metadata import GeometryAdapter from datalab.config import Conf from datalab.tests import datalab_test_app_context def __create_image_with_geometry_results() -> sigima.objects.ImageObj: """Create test image with geometry results""" param = sigima.objects.Gauss2DParam.create( height=600, width=600, title="Test image (with geometry results)", dtype=sigima.objects.ImageDatatypes.UINT16, x0=2, y0=3, ) image = sigima.objects.create_image_from_param(param) for geometry in test_data.generate_geometry_results(): GeometryAdapter(geometry).add_to(image) return image def __check_geometry_results_merge( obj1: sigima.objects.SignalObj | sigima.objects.ImageObj, obj2: sigima.objects.SignalObj | sigima.objects.ImageObj, ) -> None: """Check if geometry results merge properly: the scenario is to duplicate an object, then compute average. We thus have to check if the second object (average) has the expected geometry results (i.e. twice the number of geometry results of the original object for each geometry result type). Args: obj1: Original object obj2: Merged object """ rsl1, rsl2 = ( list(GeometryAdapter.iterate_from_obj(obj1)), list(GeometryAdapter.iterate_from_obj(obj2)), ) assert len(rsl2) == len(rsl1), ( f"Result shapes length mismatch: {len(rsl1)} != {len(rsl2)}" ) for rs1, rs2 in zip(rsl1, rsl2): df1 = rs1.to_dataframe() df2 = rs2.to_dataframe() assert len(df1) * 2 == len(df2), ( f"Result shape dataframe length mismatch: {len(df1)} * 2 != {len(df2)}" ) # Check that the second dataframe contains double the data # (original geometry result concatenated with itself) coord_cols = [col for col in df1.columns if col != "roi_index"] df1_doubled = pd.concat([df1, df1], ignore_index=True) pd.testing.assert_frame_equal( df2[coord_cols].sort_values(coord_cols[0]).reset_index(drop=True), df1_doubled[coord_cols].sort_values(coord_cols[0]).reset_index(drop=True), ) def __check_roi_merge( obj1: sigima.objects.SignalObj | sigima.objects.ImageObj, obj2: sigima.objects.SignalObj | sigima.objects.ImageObj, ) -> None: """Check if ROI merge properly: the scenario is to duplicate an object, then compute average. We thus have to check if the second object (average) has the expected ROI (i.e. the union of the original object's ROI). Args: obj1: Original object obj2: Merged object """ roi1 = obj1.roi roi2 = obj2.roi for single_roi2 in roi2: assert roi1.get_single_roi(0) == single_roi2 def test_geometry_results() -> None: """Geometry results test""" with datalab_test_app_context() as win: obj1 = test_data.create_sincos_image() obj2 = __create_image_with_geometry_results() obj2.roi = sigima.objects.create_image_roi("rectangle", [10, 10, 50, 400]) panel = win.signalpanel for noised in (False, True): sig = test_data.create_noisy_signal(noised=noised) panel.add_object(sig) panel.processor.run_feature("fwhm", sigima.params.FWHMParam()) panel.processor.run_feature("fw1e2") panel.objview.select_objects((1, 2)) panel.show_results() panel.plot_results() win.set_current_panel("image") panel = win.imagepanel for obj in (obj1, obj2): panel.add_object(obj) panel.show_results() panel.plot_results() for keep_results in (False, True): with Conf.proc.keep_results.temp(keep_results): # Test merging result shapes (duplicate obj, then compute average): for panel in (win.signalpanel, win.imagepanel): panel.objview.select_objects((2,)) panel.duplicate_object() panel.objview.select_objects((2, len(panel))) panel.processor.run_feature("average") last_obj = panel[len(panel)] if keep_results: __check_geometry_results_merge(panel[2], last_obj) if panel is win.imagepanel: __check_roi_merge(panel[2], last_obj) else: assert ( len(list(GeometryAdapter.iterate_from_obj(last_obj))) == 0 ) if __name__ == "__main__": test_geometry_results() DataLab-1.0.2/datalab/tests/features/common/interactive_processing_test.py000066400000000000000000001305031511411446000270230ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Interactive re-processing feature tests Tests the end-to-end interactive processing workflow where users can modify processing parameters and re-apply them to regenerate the result. This includes: - Parameter modification and re-application - Parameter serialization/deserialization - Processing metadata storage for 1-to-1 operations - Handling of operations with and without parameters Note: metadata_all_patterns_test.py verifies metadata storage for all processing patterns (1-to-1, 2-to-1, n-to-1). """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import numpy as np from guidata.dataset import json_to_dataset from guidata.qthelpers import qt_app_context, qt_wait from sigima.objects import Gauss2DParam, GaussParam, create_image_roi from sigima.params import ( BinningParam, ConstantParam, GaussianParam, MovingAverageParam, SignalsToImageParam, ) from sigima.proc.image import RadialProfileParam from datalab.gui.newobject import CREATION_PARAMETERS_OPTION from datalab.gui.processor.base import PROCESSING_PARAMETERS_OPTION from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context def test_signal_interactive_processing(): """Test interactive processing for signals""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor # Create a test signal panel.new_object() signal = panel.objview.get_current_object() assert signal is not None # Apply a Gaussian filter (which has parameters) param = GaussianParam.create(sigma=2.0) processor.compute_1_to_1( processor.get_feature("gaussian_filter").function, param=param, title="Gaussian filter", ) # Get the filtered signal filtered_sig = panel.objview.get_current_object() assert filtered_sig is not None assert filtered_sig != signal # Check that processing metadata was stored assert PROCESSING_PARAMETERS_OPTION in filtered_sig.get_metadata_options() option_dict = filtered_sig.get_metadata_option(PROCESSING_PARAMETERS_OPTION) # Verify metadata content assert option_dict["source_uuid"] == get_uuid(signal) assert option_dict["func_name"] == "gaussian_filter" # Verify the parameter can be deserialized stored_param = json_to_dataset(option_dict["param_json"]) assert stored_param.sigma == 2.0 def test_image_interactive_processing(): """Test interactive processing for images""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.imagepanel processor = panel.processor # Create a test image panel.new_object() image = panel.objview.get_current_object() assert image is not None # Apply a moving average filter (which has parameters) param = MovingAverageParam.create(n=5) processor.compute_1_to_1( processor.get_feature("moving_average").function, param=param, title="Moving average", ) # Get the filtered image filtered_ima = panel.objview.get_current_object() assert filtered_ima is not None assert filtered_ima != image # Check that processing metadata was stored assert PROCESSING_PARAMETERS_OPTION in filtered_ima.get_metadata_options() option_dict = filtered_ima.get_metadata_option(PROCESSING_PARAMETERS_OPTION) # Verify metadata content assert option_dict["source_uuid"] == get_uuid(image) assert option_dict["func_name"] == "moving_average" # Verify the parameter can be deserialized stored_param = json_to_dataset(option_dict["param_json"]) assert stored_param.n == 5 def test_processing_without_parameters(): """Test that processing without parameters doesn't store metadata""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor # Create a test signal panel.new_object() signal = panel.objview.get_current_object() assert signal is not None # Apply absolute value (which has NO parameters) processor.compute_1_to_1( processor.get_feature("absolute").function, title="Absolute value", ) # Get the result signal result_signal = panel.objview.get_current_object() assert result_signal is not None assert result_signal != signal # Check that processing metadata was NOT stored assert PROCESSING_PARAMETERS_OPTION in result_signal.get_metadata_options() option_dict = result_signal.get_metadata_option( PROCESSING_PARAMETERS_OPTION ) assert "param_json" not in option_dict def test_recompute(): """Test recompute feature for signals""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor # Create a test signal panel.new_object() signal = panel.objview.get_current_object() signal_uuid = get_uuid(signal) # Apply a Gaussian filter with initial parameters param = GaussianParam.create(sigma=2.0) processor.run_feature("gaussian_filter", param=param) filtered_sig = panel.objview.get_current_object() original_data = filtered_sig.y.copy() # Recompute with different input signal data constant = 1.23098765 signal.y += constant panel.recompute_processing() assert np.allclose(filtered_sig.y, original_data + constant) # Verify metadata is correct assert PROCESSING_PARAMETERS_OPTION in filtered_sig.get_metadata_options() option_dict = filtered_sig.get_metadata_option(PROCESSING_PARAMETERS_OPTION) assert option_dict["source_uuid"] == signal_uuid assert option_dict["func_name"] == "gaussian_filter" def test_apply_creation_parameters_signal(): """Test apply_creation_parameters for signals""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel objprop = panel.objprop # Create a signal with specific parameters param = GaussParam.create(mu=250.0, sigma=20.0, a=100.0, y0=0.0, size=500) panel.new_object(param=param, edit=False) signal = panel.objview.get_current_object() assert signal is not None signal_uuid = get_uuid(signal) # Verify the Creation tab was set up assert objprop.creation_param_editor is not None original_data = signal.y.copy() # Modify the creation parameters in the editor editor = objprop.creation_param_editor # Change the Gaussian parameters to get a predictable result editor.dataset.a = 200.0 # Double the amplitude from 100.0 to 200.0 # Apply the new creation parameters objprop.apply_creation_parameters() # Verify the signal was updated in-place (same UUID) updated_signal = panel.objview.get_current_object() assert get_uuid(updated_signal) == signal_uuid # Get the updated creation parameters from metadata creation_param_json = updated_signal.get_metadata_option( CREATION_PARAMETERS_OPTION ) updated_param = json_to_dataset(creation_param_json) # Verify the parameter was actually updated in metadata assert updated_param.a == 200.0 # Verify the data has changed # Since we're working with very small Gaussian values, # just verify they're different assert not np.array_equal(updated_signal.y, original_data) def test_apply_creation_parameters_image(): """Test apply_creation_parameters for images""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.imagepanel objprop = panel.objprop # Create an image with specific parameters (using a derived class # of NewImageParam) to ensure creation parameters are stored in metadata param = Gauss2DParam.create(x0=50.0, y0=50.0, sigma=10.0, a=100.0) panel.new_object(param=param, edit=False) image = panel.objview.get_current_object() assert image is not None # Verify the Creation tab was set up assert objprop.creation_param_editor is not None original_data = image.data.copy() # Modify the parameters in the editor to create a visibly different image editor = objprop.creation_param_editor # Change the amplitude to make it clearly different editor.dataset.a = 200.0 # Double the amplitude from 100.0 to 200.0 # Apply the new parameters objprop.apply_creation_parameters() # Verify the image was updated in-place (same UUID) updated_image = panel.objview.get_current_object() assert get_uuid(updated_image) == get_uuid(image) # Verify the data has changed (amplitude doubled) assert not np.array_equal(updated_image.data, original_data) def test_no_duplicate_creation_tabs(): """Test that applying creation parameters multiple times doesn't create duplicate tabs. This test verifies the fix for the bug where clicking "Apply" in the Creation tab would create a new Creation tab instead of reusing the existing one. It also verifies that the Creation tab remains current after applying changes. """ with qt_app_context(): with datalab_test_app_context() as win: panel = win.imagepanel objprop = panel.objprop # Create an image with creation parameters param = Gauss2DParam.create(x0=50.0, y0=50.0, sigma=10.0, a=100.0) panel.new_object(param=param, edit=False) image = panel.objview.get_current_object() assert image is not None # Verify Creation tab was set up assert objprop.creation_param_editor is not None assert objprop.creation_scroll is not None # Count how many Creation tabs exist initially using the widget reference initial_index = objprop.tabwidget.indexOf(objprop.creation_scroll) assert initial_index >= 0, "Creation tab should be present" # Count tabs by checking if they reference the same scroll widget initial_count = sum( 1 for i in range(objprop.tabwidget.count()) if objprop.tabwidget.widget(i) is objprop.creation_scroll ) assert initial_count == 1, "Should have exactly one Creation tab initially" # Apply creation parameters multiple times editor = objprop.creation_param_editor for amplitude in [150.0, 200.0, 250.0]: editor.dataset.a = amplitude objprop.apply_creation_parameters() # Wait for the deferred setup_creation_tab to complete qt_wait(0.1) # Verify that creation_scroll reference still exists assert objprop.creation_scroll is not None # Count Creation tabs again - should still be just one creation_count = sum( 1 for i in range(objprop.tabwidget.count()) if objprop.tabwidget.widget(i) is objprop.creation_scroll ) assert creation_count == 1, ( f"Should still have exactly one Creation tab after " f"applying amplitude={amplitude}" ) # Verify that the Creation tab is the current tab assert objprop.tabwidget.currentWidget() is objprop.creation_scroll, ( f"Creation tab should remain current after " f"applying amplitude={amplitude}" ) def test_no_creation_parameters_for_base_classes(): """Test that creation parameters are NOT stored for base classes This test verifies the behavior introduced by the patch that only stores creation parameters for derived classes of NewSignalParam/NewImageParam, not for the base classes themselves. """ with qt_app_context(): with datalab_test_app_context() as win: # Test with signals signal_panel = win.signalpanel signal_objprop = signal_panel.objprop # Create a signal using default new_object() (uses base NewSignalParam) signal_panel.new_object(edit=False) signal = signal_panel.objview.get_current_object() assert signal is not None # Verify the Creation tab was NOT set up (no creation parameters stored) assert signal_objprop.creation_param_editor is None # Verify that CREATION_PARAMETERS_OPTION is not in metadata assert CREATION_PARAMETERS_OPTION not in signal.get_metadata_options() # Test with images image_panel = win.imagepanel image_objprop = image_panel.objprop # Create an image using default new_object() (uses base NewImageParam) image_panel.new_object(edit=False) image = image_panel.objview.get_current_object() assert image is not None # Verify the Creation tab was NOT set up (no creation parameters stored) assert image_objprop.creation_param_editor is None # Verify that CREATION_PARAMETERS_OPTION is not in metadata assert CREATION_PARAMETERS_OPTION not in image.get_metadata_options() def test_apply_processing_parameters_signal(): """Test apply_processing_parameters for signals""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor objprop = panel.objprop # Create a test signal with some structure param = GaussParam.create(mu=250.0, sigma=20.0, a=100.0, y0=10.0, size=500) panel.new_object(param=param, edit=False) signal = panel.objview.get_current_object() assert signal is not None signal_uuid = get_uuid(signal) original_signal_data = signal.y.copy() # Apply addition_constant with initial value v0 = 5.0 processor.run_feature("addition_constant", ConstantParam.create(value=v0)) # Get the processed signal processed_sig = panel.objview.get_current_object() assert processed_sig is not None processed_uuid = get_uuid(processed_sig) # Verify initial constant was applied: data should be original + 5.0 assert np.allclose(processed_sig.y, original_signal_data + v0) # Select the processed signal to trigger setup_processing_tab panel.objview.set_current_object(processed_sig) # Verify the Processing tab was set up assert objprop.processing_param_editor is not None # Modify the processing parameters editor = objprop.processing_param_editor # Change constant from 5.0 to 15.0 editor.dataset.value = v1 = 15.0 # Apply the new processing parameters report = objprop.apply_processing_parameters() # Verify the operation succeeded assert report.success, f"Reprocessing failed: {report.message}" assert report.obj_uuid == processed_uuid # Verify the object UUID didn't change (in-place update) assert get_uuid(processed_sig) == processed_uuid # Verify the new constant was applied: data should now be original + 15.0 assert np.allclose(processed_sig.y, original_signal_data + v1) # Verify metadata still points to the same source pp_dict = processed_sig.get_metadata_option(PROCESSING_PARAMETERS_OPTION) assert pp_dict["source_uuid"] == signal_uuid assert pp_dict["func_name"] == "addition_constant" # Verify the parameter was updated stored_param = json_to_dataset(pp_dict["param_json"]) assert stored_param.value == v1 def test_apply_processing_parameters_image(): """Test apply_processing_parameters for images""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.imagepanel processor = panel.processor objprop = panel.objprop # Create a default test image panel.new_object(edit=False) image = panel.objview.get_current_object() assert image is not None image_uuid = get_uuid(image) original_image_data = image.data.copy() # Apply addition_constant with initial value v0 = 7.0 processor.run_feature("addition_constant", ConstantParam.create(value=v0)) # Get the processed image processed_ima = panel.objview.get_current_object() assert processed_ima is not None processed_uuid = get_uuid(processed_ima) # Verify initial constant was applied: data should be original + 7.0 assert np.allclose(processed_ima.data, original_image_data + v0) # Select the processed image to trigger setup_processing_tab panel.objview.set_current_object(processed_ima) # Verify the Processing tab was set up assert objprop.processing_param_editor is not None # Modify the processing parameters editor = objprop.processing_param_editor # Change constant from 7.0 to 20.0 editor.dataset.value = v1 = 20.0 # Apply the new processing parameters report = objprop.apply_processing_parameters() # Verify the operation succeeded assert report.success, f"Reprocessing failed: {report.message}" assert report.obj_uuid == processed_uuid # Verify the object UUID didn't change (in-place update) assert get_uuid(processed_ima) == processed_uuid # Verify the new constant was applied: data should now be original + 20.0 assert np.allclose(processed_ima.data, original_image_data + v1) # Verify metadata still points to the same source pp_dict = processed_ima.get_metadata_option(PROCESSING_PARAMETERS_OPTION) assert pp_dict["source_uuid"] == image_uuid assert pp_dict["func_name"] == "addition_constant" # Verify the parameter was updated stored_param = json_to_dataset(pp_dict["param_json"]) assert stored_param.value == v1 def test_no_duplicate_processing_tabs(): """Test that applying processing parameters multiple times doesn't create duplicate tabs. This test verifies the fix for the bug where clicking "Apply" in the Processing tab would create a new Processing tab instead of reusing the existing one. It also verifies that the Processing tab remains current after applying changes. """ with qt_app_context(): with datalab_test_app_context() as win: panel = win.imagepanel processor = panel.processor objprop = panel.objprop # Create a default test image panel.new_object(edit=False) image = panel.objview.get_current_object() assert image is not None # Apply addition_constant with initial value v0 = 7.0 processor.run_feature("addition_constant", ConstantParam.create(value=v0)) # Get the processed image processed_ima = panel.objview.get_current_object() assert processed_ima is not None # Select the processed image to trigger setup_processing_tab panel.objview.set_current_object(processed_ima) # Verify Processing tab was set up assert objprop.processing_param_editor is not None assert objprop.processing_scroll is not None # Count how many Processing tabs exist initially initial_index = objprop.tabwidget.indexOf(objprop.processing_scroll) assert initial_index >= 0, "Processing tab should be present" # Count tabs by checking if they reference the same scroll widget initial_count = sum( 1 for i in range(objprop.tabwidget.count()) if objprop.tabwidget.widget(i) is objprop.processing_scroll ) assert initial_count == 1, ( "Should have exactly one Processing tab initially" ) # Apply processing parameters multiple times editor = objprop.processing_param_editor for value in [10.0, 15.0, 20.0]: editor.dataset.value = value report = objprop.apply_processing_parameters() assert report.success # Wait for the deferred setup_processing_tab to complete qt_wait(0.1) # Verify that processing_scroll reference still exists assert objprop.processing_scroll is not None # Count Processing tabs again - should still be just one processing_count = sum( 1 for i in range(objprop.tabwidget.count()) if objprop.tabwidget.widget(i) is objprop.processing_scroll ) assert processing_count == 1, ( f"Should still have exactly one Processing tab after " f"applying value={value}" ) # Verify that the Processing tab is the current tab assert objprop.tabwidget.currentWidget() is objprop.processing_scroll, ( f"Processing tab should remain current after applying value={value}" ) def test_apply_processing_parameters_missing_source(): """Test apply_processing_parameters when source object is missing""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor objprop = panel.objprop # Create a test signal with actual data param = GaussParam.create(mu=250.0, sigma=20.0, a=100.0, y0=10.0, size=500) panel.new_object(param=param, edit=False) signal = panel.objview.get_current_object() # Apply a Gaussian filter filter_param = GaussianParam.create(sigma=2.0) processor.compute_1_to_1( processor.get_feature("gaussian_filter").function, param=filter_param, title="Gaussian filter", ) # Get the filtered signal filtered_sig = panel.objview.get_current_object() # Delete the source signal panel.objview.set_current_object(signal) panel.remove_object(force=True) # Select the filtered signal panel.objview.set_current_object(filtered_sig) # Try to apply processing parameters report = objprop.apply_processing_parameters(interactive=False) # Verify the operation failed with appropriate message assert not report.success # Check for English or French message assert ( "no longer exists" in report.message.lower() or "n'existe plus" in report.message.lower() ) def test_cross_panel_image_to_signal(): """Test cross-panel processing: Image → Signal (radial profile)""" with qt_app_context(): with datalab_test_app_context() as win: image_panel = win.imagepanel signal_panel = win.signalpanel image_processor = image_panel.processor # Create a test image with a Gaussian peak image_param = Gauss2DParam.create( x0=50.0, y0=50.0, sigma=10.0, a=100.0, height=100, width=100 ) image_panel.new_object(param=image_param, edit=False) image = image_panel.objview.get_current_object() assert image is not None image_uuid = get_uuid(image) # Apply radial_profile (Image → Signal cross-panel computation) profile_param = RadialProfileParam.create(x0=50, y0=50) image_processor.run_feature("radial_profile", param=profile_param) # Verify the result is now in the signal panel signal = signal_panel.objview.get_current_object() assert signal is not None # Check that processing metadata was stored assert PROCESSING_PARAMETERS_OPTION in signal.get_metadata_options() option_dict = signal.get_metadata_option(PROCESSING_PARAMETERS_OPTION) # Verify metadata content assert option_dict["source_uuid"] == image_uuid assert option_dict["func_name"] == "radial_profile" assert option_dict["pattern"] == "1-to-1" # Verify the parameter can be deserialized stored_param = json_to_dataset(option_dict["param_json"]) assert stored_param.x0 == 50 assert stored_param.y0 == 50 # Test that the Processing tab is set up correctly # (even though source is in a different panel) signal_panel.objview.set_current_object(signal) assert signal_panel.objprop.processing_param_editor is not None # Test modifying processing parameters editor = signal_panel.objprop.processing_param_editor # Change the center position editor.dataset.x0 = 40 editor.dataset.y0 = 40 # Apply the new processing parameters report = signal_panel.objprop.apply_processing_parameters() # Verify the operation succeeded assert report.success, f"Cross-panel reprocessing failed: {report.message}" # Verify the parameter was updated in metadata updated_dict = signal.get_metadata_option(PROCESSING_PARAMETERS_OPTION) updated_param = json_to_dataset(updated_dict["param_json"]) assert updated_param.x0 == 40 assert updated_param.y0 == 40 # Test recompute feature with modified source image image.data *= 2.0 # Double the image intensity original_signal_data = signal.y.copy() # Recompute the radial profile signal_panel.recompute_processing() # The signal should have changed (doubled intensity) assert not np.allclose(signal.y, original_signal_data) def test_cross_panel_image_to_signal_group(): """Test cross-panel processing with groups: Image group → Signal group""" with qt_app_context(): with datalab_test_app_context() as win: image_panel = win.imagepanel signal_panel = win.signalpanel image_processor = image_panel.processor # Create a group of test images group_name = "Test Images" group = image_panel.add_group(group_name) group_id = get_uuid(group) # Create multiple test images in the group n_images = 3 for i in range(n_images): image_param = Gauss2DParam.create( x0=50.0 + i * 5, y0=50.0 + i * 5, sigma=10.0, a=100.0, height=100, width=100, ) image_panel.new_object(param=image_param, edit=False) # The new objects are automatically added to the current group # Select the entire group image_panel.objview.set_current_item_id(group_id, extend=False) # Get the initial number of groups in signal panel signal_groups_before = len(signal_panel.objmodel.get_groups()) # Apply radial_profile to the entire group (Image → Signal cross-panel) profile_param = RadialProfileParam.create(x0=50, y0=50) image_processor.run_feature("radial_profile", param=profile_param) # Verify a NEW group was created in the signal panel signal_groups_after = len(signal_panel.objmodel.get_groups()) assert signal_groups_after == signal_groups_before + 1, ( "Expected a new group to be created for cross-panel computation results" ) # Verify that the new group contains the correct number of signals signal_groups = signal_panel.objmodel.get_groups() new_group = signal_groups[-1] # Get the last (newly created) group signals_in_group = new_group.get_objects() assert len(signals_in_group) == n_images, ( f"Expected {n_images} signals in new group, got {len(signals_in_group)}" ) # Verify the group name follows the expected pattern assert "radial_profile" in new_group.title.lower(), ( f"Expected group name to contain 'radial_profile', " f"got '{new_group.title}'" ) def test_cross_panel_signal_to_image(): """Test cross-panel processing: Signal → Image (combine signals into image)""" with qt_app_context(): with datalab_test_app_context() as win: signal_panel = win.signalpanel image_panel = win.imagepanel signal_processor = signal_panel.processor # Create multiple test signals n_signals = 5 signal_uuids = [] for i in range(n_signals): signal_param = GaussParam.create( mu=250.0 + i * 10, sigma=20.0, a=100.0, y0=float(i), size=500 ) signal_panel.new_object(param=signal_param, edit=False) signal = signal_panel.objview.get_current_object() signal_uuids.append(get_uuid(signal)) # Select all signals for uuid in signal_uuids: signal_panel.objview.set_current_item_id(uuid, extend=True) # Combine signals into image (Signal → Image cross-panel computation) sti_param = SignalsToImageParam.create( orientation="columns", normalize=True ) signal_processor.run_feature("signals_to_image", param=sti_param) # Verify the result is now in the image panel image = image_panel.objview.get_current_object() assert image is not None # Check that processing metadata was stored assert PROCESSING_PARAMETERS_OPTION in image.get_metadata_options() option_dict = image.get_metadata_option(PROCESSING_PARAMETERS_OPTION) # Verify metadata content for n-to-1 pattern assert option_dict["func_name"] == "signals_to_image" assert option_dict["pattern"] == "n-to-1" assert len(option_dict["source_uuids"]) == n_signals assert all(uuid in signal_uuids for uuid in option_dict["source_uuids"]) # Verify the parameter can be deserialized stored_param = json_to_dataset(option_dict["param_json"]) assert stored_param.orientation == "columns" assert stored_param.normalize is True # Test that the Processing tab is NOT set up for n-to-1 pattern # (interactive processing only works for 1-to-1 pattern) image_panel.objview.set_current_object(image) assert image_panel.objprop.processing_param_editor is None def test_select_source_objects_same_panel(): """Test selecting source objects within the same panel""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor # Create a source signal panel.new_object(edit=False) source_signal = panel.objview.get_current_object() source_uuid = get_uuid(source_signal) # Apply a filter to create a processed signal param = GaussianParam.create(sigma=2.0) processor.run_feature("gaussian_filter", param=param) # Get the filtered signal filtered_signal = panel.objview.get_current_object() assert filtered_signal is not None # Clear selection panel.objview.clearSelection() # Select only the filtered signal panel.objview.set_current_item_id(get_uuid(filtered_signal), extend=False) # Call select_source_objects panel.select_source_objects() # Verify that the source signal is now selected selected_uuids = panel.objview.get_sel_object_uuids() assert source_uuid in selected_uuids assert len(selected_uuids) == 1 def test_select_source_objects_cross_panel(): """Test selecting source objects across panels (cross-panel computation)""" with qt_app_context(): with datalab_test_app_context() as win: image_panel = win.imagepanel signal_panel = win.signalpanel image_processor = image_panel.processor # Create a source image image_param = Gauss2DParam.create( x0=50.0, y0=50.0, sigma=10.0, a=100.0, height=100, width=100 ) image_panel.new_object(param=image_param, edit=False) image = image_panel.objview.get_current_object() image_uuid = get_uuid(image) # Apply radial_profile (Image → Signal) profile_param = RadialProfileParam.create(x0=50, y0=50) image_processor.run_feature("radial_profile", param=profile_param) # Verify we're now in the signal panel signal = signal_panel.objview.get_current_object() assert signal is not None # Clear selection in signal panel signal_panel.objview.clearSelection() # Select only the radial profile signal signal_panel.objview.set_current_item_id(get_uuid(signal), extend=False) # Call select_source_objects - should switch to image panel signal_panel.select_source_objects() # Verify that we switched to the image panel # (the current panel in the main window should now be image panel) assert win.get_current_panel() == "image" # Verify that the source image is now selected in the image panel selected_uuids = image_panel.objview.get_sel_object_uuids() assert image_uuid in selected_uuids assert len(selected_uuids) == 1 def test_select_source_objects_multiple_sources(): """Test selecting multiple source objects (n-to-1 processing)""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor # Create multiple source signals n_signals = 3 source_uuids = [] for _i in range(n_signals): panel.new_object(edit=False) signal = panel.objview.get_current_object() source_uuids.append(get_uuid(signal)) # Select all source signals for uuid in source_uuids: panel.objview.set_current_item_id(uuid, extend=True) # Apply addition operation (n-to-1) processor.run_feature("addition") # Get the result signal result_signal = panel.objview.get_current_object() assert result_signal is not None # Clear selection panel.objview.clearSelection() # Select only the result signal panel.objview.set_current_item_id(get_uuid(result_signal), extend=False) # Call select_source_objects panel.select_source_objects() # Verify that all source signals are now selected selected_uuids = panel.objview.get_sel_object_uuids() assert len(selected_uuids) == n_signals assert all(uuid in selected_uuids for uuid in source_uuids) def test_select_source_objects_deleted_source(): """Test selecting source objects when source has been deleted""" with qt_app_context(): with datalab_test_app_context() as win: panel = win.signalpanel processor = panel.processor # Create a source signal panel.new_object(edit=False) source_signal = panel.objview.get_current_object() # Apply a filter param = GaussianParam.create(sigma=2.0) processor.run_feature("gaussian_filter", param=param) # Get the filtered signal filtered_signal = panel.objview.get_current_object() # Delete the source signal panel.objview.set_current_object(source_signal) panel.remove_object(force=True) # Select the filtered signal panel.objview.clearSelection() panel.objview.set_current_item_id(get_uuid(filtered_signal), extend=False) # Call select_source_objects - should show warning # (This won't raise an exception, just show a message box in GUI) panel.select_source_objects() # Verify that no objects are selected (source was deleted) selected_uuids = panel.objview.get_sel_object_uuids() # The filtered signal should still be selected assert get_uuid(filtered_signal) in selected_uuids def test_roi_mask_invalidation_on_size_change(): """Test that ROI masks are invalidated when image size changes. This test verifies the fix for the bug where modifying creation parameters that change the image dimensions doesn't invalidate the ROI mask cache, resulting in corrupted ROI display. Reproduction steps: 1. Create a 2D gaussian image 2. Add a rectangular ROI 3. Change the size of the image (increase width by 50%) 4. Verify that the ROI mask is properly invalidated and recomputed """ with qt_app_context(): with datalab_test_app_context() as win: panel = win.imagepanel objprop = panel.objprop # Step 1: Create a 2D gaussian image with specific dimensions param = Gauss2DParam.create( height=100, width=100, x0=50.0, y0=50.0, sigma=10.0, a=100.0 ) panel.new_object(param=param, edit=False) image = panel.objview.get_current_object() assert image is not None assert image.data.shape == (100, 100) # Step 2: Add a rectangular ROI roi = create_image_roi("rectangle", [20, 20, 40, 40]) image.roi = roi # Verify the ROI mask is created and cached mask_before = image.maskdata assert mask_before is not None assert mask_before.shape == (100, 100) # Step 3: Change the image dimensions (increase width by 50%) editor = objprop.creation_param_editor assert editor is not None editor.dataset.width = 150 # Change from 100 to 150 # Apply the new parameters objprop.apply_creation_parameters() # Step 4: Verify the image was resized updated_image = panel.objview.get_current_object() assert get_uuid(updated_image) == get_uuid(image) assert updated_image.data.shape == (100, 150) # Step 5: Verify the ROI mask was invalidated and will be recomputed # with the new dimensions mask_after = updated_image.maskdata assert mask_after is not None assert mask_after.shape == (100, 150), ( f"ROI mask shape {mask_after.shape} doesn't match " f"new image shape {updated_image.data.shape}" ) # The mask should be different from before (different shape) assert mask_before.shape != mask_after.shape def test_roi_mask_invalidation_on_processing_change(): """Test that ROI masks are invalidated when processing changes image dimensions. This test verifies the fix for the bug where reprocessing with parameters that change image dimensions doesn't invalidate the ROI mask cache, resulting in corrupted ROI display. Scenario: 1. Create a source image 2. Apply binning (reduces dimensions) 3. Add ROI to the binned image 4. Change binning factor (changes dimensions again) 5. Verify ROI mask is properly recomputed """ with qt_app_context(): with datalab_test_app_context() as win: panel = win.imagepanel objprop = panel.objprop # Step 1: Create a source image param = Gauss2DParam.create( height=100, width=100, x0=50.0, y0=50.0, sigma=10.0, a=100.0 ) panel.new_object(param=param, edit=False) source_image = panel.objview.get_current_object() assert source_image is not None # Step 2: Apply binning to reduce dimensions binning_param = BinningParam.create(sx=2, sy=2) # 100x100 -> 50x50 # Use the processor's run_feature method with edit=False panel.processor.run_feature("binning", binning_param, edit=False) # Get the binned result (last object in the list) binned = panel.objview.get_sel_objects()[-1] assert binned.data.shape == (50, 50) # Step 3: Add a rectangular ROI to the binned image roi = create_image_roi("rectangle", [10, 10, 20, 20]) binned.roi = roi # Verify the ROI mask is created and cached mask_before = binned.maskdata assert mask_before is not None assert mask_before.shape == (50, 50) # Step 4: Change binning factor via Processing tab assert objprop.setup_processing_tab(binned) editor = objprop.processing_param_editor assert editor is not None # Change binning factor from 2x2 to 4x4 (50x50 -> 25x25) editor.dataset.sx = 4 editor.dataset.sy = 4 # Apply the new processing parameters report = objprop.apply_processing_parameters(binned) assert report.success # Step 5: Verify the image was resized assert binned.data.shape == (25, 25) # Step 6: Verify the ROI mask was invalidated and will be recomputed # with the new dimensions mask_after = binned.maskdata assert mask_after is not None assert mask_after.shape == (25, 25), ( f"ROI mask shape {mask_after.shape} doesn't match " f"new image shape {binned.data.shape}" ) # The mask should be different from before (different shape) assert mask_before.shape != mask_after.shape if __name__ == "__main__": test_signal_interactive_processing() test_image_interactive_processing() test_processing_without_parameters() test_recompute() test_apply_creation_parameters_signal() test_apply_creation_parameters_image() test_no_duplicate_creation_tabs() test_no_creation_parameters_for_base_classes() test_apply_processing_parameters_signal() test_apply_processing_parameters_image() test_no_duplicate_processing_tabs() test_apply_processing_parameters_missing_source() test_cross_panel_image_to_signal() test_cross_panel_image_to_signal_group() test_cross_panel_signal_to_image() test_select_source_objects_same_panel() test_select_source_objects_cross_panel() test_select_source_objects_multiple_sources() test_select_source_objects_deleted_source() test_roi_mask_invalidation_on_size_change() test_roi_mask_invalidation_on_processing_change() DataLab-1.0.2/datalab/tests/features/common/io_app_test.py000066400000000000000000000047121511411446000235230ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ I/O application test: - Testing signals I/O - Testing images I/O """ # guitest: show from __future__ import annotations import os.path as osp from sigima.io.base import IOAction from sigima.io.image import ImageIORegistry from sigima.io.signal import SignalIORegistry from datalab.env import execenv from datalab.gui.panel.base import BaseDataPanel from datalab.tests import datalab_test_app_context, helpers def __testfunc( title: str, panel: BaseDataPanel, registry: SignalIORegistry | ImageIORegistry, pattern: str, in_folder: str, ) -> None: """Test I/O features""" execenv.print(f" {title}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # os.startfile(tmpdir) fnames = helpers.get_test_fnames(pattern, in_folder) execenv.print(" Opening:") # TODO: [P3] This test does not support formats that return multiple objects # (e.g. SIF files with multiple images). As a consequence, it will not test # thoroughly the I/O functionalities for these formats (it will keep only the # first object in the list of returned objects) objs = [] for fname in fnames: execenv.print(f" {fname}: ", end="") try: registry.get_format(fname, IOAction.LOAD) except NotImplementedError: execenv.print("Skipped (not supported)") continue objs.append(panel.load_from_files([fname])[0]) execenv.print("OK") execenv.print(" Saving:") for fname, obj in zip(fnames, objs): panel.objview.set_current_object(obj) path = osp.join(tmpdir, osp.basename(fname)) execenv.print(f" {path}: ", end="") try: registry.get_format(fname, IOAction.SAVE) except NotImplementedError: execenv.print("Skipped (not supported)") continue panel.save_to_files([path]) execenv.print("OK") def test_io_app() -> None: """Run image tools test scenario""" with datalab_test_app_context() as win: execenv.print("I/O application test:") __testfunc("Signals", win.signalpanel, SignalIORegistry, "*.*", "curve_formats") __testfunc("Images", win.imagepanel, ImageIORegistry, "*.*", "image_formats") if __name__ == "__main__": test_io_app() DataLab-1.0.2/datalab/tests/features/common/large_results_app_test.py000066400000000000000000000162071511411446000257710ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Large Results Application Test Module This module contains tests for verifying that DataLab handles large result datasets efficiently and correctly. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show,skip import time import numpy as np import sigima.enums import sigima.objects import sigima.params as sigima_param from sigima.tests.data import get_test_image from datalab.adapters_metadata.geometry_adapter import GeometryAdapter from datalab.config import Conf from datalab.tests import datalab_test_app_context def create_polygon_vertices( x0: float, y0: float, nb_points: int, radius_mean: float, radius_variation: float ) -> list[tuple[float, float]]: """Generate points for a polygon around (x0, y0) Args: x0: x coordinate of the polygon center y0: y coordinate of the polygon center nb_points: number of points to generate radius_mean: mean radius of the polygon radius_variation: variation in radius Returns: List of (x, y) points representing the polygon vertices """ points = [] # Calculate number of NaNs to append (random numbers between 0 and nb_points-10): num_nans = np.random.randint(0, nb_points - 10) for j in range(nb_points - num_nans): angle = j * (2 * np.pi / (nb_points - num_nans)) radius = radius_mean + radius_variation * np.random.rand() x = x0 + radius * np.cos(angle) y = y0 + radius * np.sin(angle) points.append((x, y)) for _ in range(num_nans): points.append((np.nan, np.nan)) return points def create_random_polygons( size: int, nb_polygons: int, nb_points_per_polygon: int ) -> np.ndarray: """Create random polygons Args: size: size of the area in which to create polygons nb_polygons: number of polygons to create nb_points_per_polygon: number of points per polygon Returns: Array of shape (nb_polygons, nb_points_per_polygon, 2) """ polygons = [] for _ in range(nb_polygons): x0 = size * np.random.rand() y0 = size * np.random.rand() points = create_polygon_vertices( x0, y0, nb_points_per_polygon, radius_mean=20, radius_variation=30 ) # Append the flattened points: polygons.append(points) return np.array(polygons) def test_large_results_scenario(measure_execution_time: bool = False) -> None: """Test scenario to verify result truncation limits work correctly Args: measure_execution_time: if True, measure and print the execution time, then quit immediately This scenario tests: - Contour detection on flower.npy (generates many contours) - Shape drawing truncation at max_shapes_to_draw limit - Label display truncation at max_cells_in_label limit - Performance with large polygons (many points per polygon) Performance benchmark (15 polygons × 5000 points): - Pure PlotPy: ~473ms (baseline for drawing shapes only) - DataLab: ~254ms (includes shape drawing + HTML label generation) - Note: DataLab is faster due to optimized HTML truncation before formatting """ nb_polygons = 15 nb_points_per_polygon = 5000 with datalab_test_app_context( console=False, exec_loop=not measure_execution_time ) as win: # Create an image panel panel = win.imagepanel # Load the flower test image ima = get_test_image("flower.npy") ima.title = "Test image 'flower.npy' - Contour Detection Limit Test" panel.add_object(ima) # Apply Roberts filter for edge detection panel.processor.run_feature("roberts") # Run contour detection which should produce a large set of results param = sigima_param.ContourShapeParam() param.shape = sigima.enums.ContourShape.POLYGON with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("contour_shape", param) # Create geometry results manually using many polygons (we generate results # in a manner that should be similar to what contour detection would typically # produce but in a way that we can control precisely here) vertices = create_random_polygons( size=ima.data.shape[0], nb_polygons=nb_polygons, nb_points_per_polygon=nb_points_per_polygon, ) geom_result = sigima.objects.GeometryResult( title="Polygon", kind=sigima.objects.KindShape.POLYGON, coords=vertices.reshape(-1, nb_points_per_polygon * 2), func_name="contour_detection_test", ) geom_adapter = GeometryAdapter(geom_result) ima2 = ima.copy() geom_adapter.add_to(ima2) panel.add_object(ima2) if measure_execution_time: # Now measure the execution time of switching selection between # the 3 images: # Image #1: flower.npy, as loaded # Image #2: Image #1 after Roberts filter + contour detection # Image #3: Image #1 with manually added large polygon result print("\nMeasuring image switch timings...") image_switch_times = {} for _j in range(2): # Doing multiple iterations to stabilize timings panel.objview.select_objects([1]) for i in range(2, 4): start_time = time.perf_counter() panel.objview.select_objects([i]) elapsed_time = (time.perf_counter() - start_time) * 1000 # in ms image_switch_times.setdefault(i, []).append(elapsed_time) print(f" - Switch to image #{i}: {elapsed_time:.1f} ms") print("\nImage switch timings (ms):") for i in range(2, 4): times = image_switch_times[i] avg_time = sum(times) / len(times) print( f" - Switching to image #{i}: avg {avg_time:.1f} ms " f"over {len(times)} runs" ) # Measure execution time of manual refresh of the image view: print("\nMeasuring image view refresh timings...") image_refresh_times = {} for i in range(3, 4): panel.objview.select_objects([i]) for _j in range(5): # Doing multiple iterations to stabilize timings start_time = time.perf_counter() panel.manual_refresh() elapsed_time = (time.perf_counter() - start_time) * 1000 # in ms image_refresh_times.setdefault(i, []).append(elapsed_time) print(f" - Manual refresh: {elapsed_time:.1f} ms") print("\nImage view refresh timings (ms):") for i in range(3, 4): times = image_refresh_times[i] avg_time = sum(times) / len(times) print( f" - Manual refresh: avg {avg_time:.1f} ms over {len(times)} runs" ) if __name__ == "__main__": test_large_results_scenario(measure_execution_time=False) DataLab-1.0.2/datalab/tests/features/common/metadata_all_patterns_test.py000066400000000000000000000104561511411446000266060ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Processing metadata storage tests Tests that ALL processing patterns (1-to-1, 2-to-1, n-to-1) correctly store metadata in object metadata options, regardless of whether they support interactive re-processing. This is an integration test that verifies the metadata storage infrastructure works correctly across all computation patterns. Note: interactive_processing_test.py tests the interactive re-processing UI feature. """ # guitest: show import guidata.dataset as gds from guidata.qthelpers import qt_app_context from sigima.proc.signal.filtering import GaussianParam from datalab.gui.processor.base import PROCESSING_PARAMETERS_OPTION from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context def test_metadata_all_patterns(): """Test that metadata is stored for all processing patterns.""" with qt_app_context(): with datalab_test_app_context() as win: # Get panels sig_panel = win.signalpanel img_panel = win.imagepanel # === Test 1: 1-to-1 pattern (with parameters) === sig_panel.new_object() sig1 = sig_panel.objmodel.get_all_objects()[-1] param = GaussianParam.create(sigma=2.0) sig_panel.processor.compute_1_to_1( sig_panel.processor.get_feature("gaussian_filter").function, param=param, title="Gaussian filter", ) filtered_sig = sig_panel.objmodel.get_all_objects()[-1] # Check metadata contains all keys including pattern type assert PROCESSING_PARAMETERS_OPTION in filtered_sig.get_metadata_options() option_dict = filtered_sig.get_metadata_option(PROCESSING_PARAMETERS_OPTION) assert option_dict["func_name"] == "gaussian_filter" assert option_dict["pattern"] == "1-to-1" assert option_dict["source_uuid"] == get_uuid(sig1) assert option_dict["param_json"] == gds.dataset_to_json(param) # === Test 2: 2-to-1 pattern (single operand) === sig_panel.new_object() sig2 = sig_panel.objmodel.get_all_objects()[-1] sig_panel.objview.select_objects([sig1]) # Select only sig1 sig_panel.processor.compute_2_to_1( obj2=sig2, obj2_name="signal to subtract", func=sig_panel.processor.get_feature("difference").function, title="Difference", ) subtracted_sig = sig_panel.objmodel.get_all_objects()[-1] # Check lightweight metadata (no params, but has pattern and sources) assert PROCESSING_PARAMETERS_OPTION in subtracted_sig.get_metadata_options() option_dict = subtracted_sig.get_metadata_option( PROCESSING_PARAMETERS_OPTION ) assert option_dict["pattern"] == "2-to-1" assert option_dict["source_uuids"] == [get_uuid(sig1), get_uuid(sig2)] assert len(option_dict["source_uuids"]) == 2 # Should NOT have full parameters stored assert "param" not in option_dict # === Test 3: n-to-1 pattern (single operand mode) === img_panel.new_object() img1 = img_panel.objmodel.get_all_objects()[-1] img_panel.new_object() img2 = img_panel.objmodel.get_all_objects()[-1] img_panel.objview.select_objects([img1, img2]) img_panel.processor.compute_n_to_1( func=img_panel.processor.get_feature("addition").function, title="Addition", ) sum_img = img_panel.objmodel.get_all_objects()[-1] # Check lightweight metadata assert PROCESSING_PARAMETERS_OPTION in sum_img.get_metadata_options() option_dict = sum_img.get_metadata_option(PROCESSING_PARAMETERS_OPTION) assert option_dict["pattern"] == "n-to-1" assert "source_uuids" in option_dict assert len(option_dict["source_uuids"]) == 2 # Should NOT have full parameters stored assert "param" not in option_dict print("✓ All processing patterns store appropriate metadata") if __name__ == "__main__": test_metadata_all_patterns() DataLab-1.0.2/datalab/tests/features/common/metadata_app_test.py000066400000000000000000000116671511411446000247030ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Metadata application test: - Create signal/image, with ROI - Compute things (adds metadata) - Test metadata delete, copy, paste """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.objects import sigima.params import sigima.proc.image as sipi import sigima.proc.signal as sips from sigima.tests.data import create_paracetamol_signal from datalab.adapters_metadata.geometry_adapter import GeometryAdapter from datalab.env import execenv from datalab.gui.panel.base import BaseDataPanel, PasteMetadataParam from datalab.gui.panel.image import ImagePanel from datalab.gui.panel.signal import SignalPanel from datalab.tests import datalab_test_app_context from datalab.tests.features.image.roi_app_test import create_test_image_with_roi def __run_signal_computations(panel: SignalPanel): """Test all signal features related to ROI""" execenv.print(" Signal features") panel.processor.run_feature(sips.fwhm, sigima.params.FWHMParam()) panel.processor.run_feature(sips.fw1e2) def __run_image_computations(panel: ImagePanel): """Test all image features related to ROI""" execenv.print(" Image features") panel.processor.run_feature(sipi.centroid) panel.processor.run_feature(sipi.enclosing_circle) panel.processor.run_feature( sipi.peak_detection, sigima.params.Peak2DDetectionParam() ) def __test_metadata_features(panel: BaseDataPanel): """Test all metadata features""" # Duplicate the first object panel.duplicate_object() # Delete metadata of the first object for keep_roi in (True, False): # Test both cases (coverage test) panel.delete_metadata(keep_roi=keep_roi) # Select and copy metadata of the second object panel.objview.select_objects([2]) source_obj = panel.objview.get_sel_objects()[0] source_metadata = source_obj.metadata.copy() # Verify source object has geometry results geometry_keys = [ k for k, v in source_metadata.items() if GeometryAdapter.match(k, v) ] execenv.print(f" Source object has {len(geometry_keys)} geometry metadata keys") assert len(geometry_keys) > 0, "Source object should have geometry results" # Copy metadata panel.copy_metadata() # Select and paste metadata to the first object panel.objview.select_objects([1]) target_obj = panel.objview.get_sel_objects()[0] # Verify target has no geometry metadata before paste target_geo_keys_before = [ k for k, v in target_obj.metadata.items() if GeometryAdapter.match(k, v) ] execenv.print( f" Target object has {len(target_geo_keys_before)} geometry keys before paste" ) # Paste metadata (with default parameters - keep everything) param = PasteMetadataParam("Test paste") param.keep_geometry = True param.keep_tables = True param.keep_other = True param.keep_roi = True panel.paste_metadata(param) # Verify the paste worked target_metadata_after = target_obj.metadata.copy() target_geo_keys_after = [ k for k, v in target_metadata_after.items() if GeometryAdapter.match(k, v) ] execenv.print( f" Target object has {len(target_geo_keys_after)} geometry keys after paste" ) # Check that geometry metadata was actually pasted assert len(target_geo_keys_after) > 0, ( "Target object should have geometry results after paste" ) # Verify that all geometry metadata uses the new unified format (_dict) for key in target_geo_keys_after: # Verify the geometry data is valid geometry_data = target_metadata_after[key] assert isinstance(geometry_data, dict), f"Geometry data should be dict: {key}" assert "title" in geometry_data, f"Missing title in geometry data: {key}" assert "coords" in geometry_data, f"Missing coords in geometry data: {key}" execenv.print(f" ✓ Valid geometry entry: {key}") execenv.print(" ✓ Metadata copy/paste verification passed") def test_metadata_app(): """Run metadata application test scenario""" size = 200 with datalab_test_app_context() as win: execenv.print("Metadata application test:") # === Signal metadata features test === panel = win.signalpanel sig = create_paracetamol_signal(size) sig.roi = sigima.objects.create_signal_roi([[26, 41], [125, 146]], indices=True) panel.add_object(sig) __run_signal_computations(panel) __test_metadata_features(panel) # === Image metadata features test === panel = win.imagepanel param = sigima.objects.NewImageParam.create(height=size, width=size) ima = create_test_image_with_roi(param) panel.add_object(ima) __run_image_computations(panel) __test_metadata_features(panel) execenv.print("==> OK") if __name__ == "__main__": test_metadata_app() DataLab-1.0.2/datalab/tests/features/common/metadata_io_unit_test.py000066400000000000000000000041271511411446000255620ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Metadata import/export unit test: - Create an image with annotations, geometry result and table results - Add the image to DataLab - Export image metadata to file (JSON) - Delete image metadata - Import image metadata from previous file - Check if image metadata is the same as the original image """ # guitest: show import os.path as osp from sigima.tests import data as test_data from datalab.adapters_metadata import GeometryAdapter, TableAdapter from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers def test_metadata_io_unit(): """Run image tools test scenario""" with execenv.context(unattended=True): with helpers.WorkdirRestoringTempDir() as tmpdir: fname = osp.join(tmpdir, "test.dlabmeta") with datalab_test_app_context() as win: panel = win.imagepanel # Create a test image with annotations ima = test_data.create_annotated_image() # Add geometry results to test their serialization for geometry in test_data.generate_geometry_results(): GeometryAdapter(geometry).add_to(ima) # Add table results to test their serialization for table in test_data.generate_table_results(): TableAdapter(table).add_to(ima) panel.add_object(ima) orig_metadata = ima.metadata.copy() panel.export_metadata_from_file(fname) panel.delete_metadata() # The +1 is for the "number" metadata option which has no default: assert len(ima.metadata) == len(ima.get_metadata_options_defaults()) + 1 panel.import_metadata_from_file(fname) execenv.print("Check metadata export <--> import features:") helpers.compare_metadata( orig_metadata, ima.metadata, raise_on_diff=True ) if __name__ == "__main__": test_metadata_io_unit() DataLab-1.0.2/datalab/tests/features/common/misc_app_test.py000066400000000000000000000153461511411446000240540ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Miscellaneous application test ------------------------------ Whenever we have a test that does not fit in any of the other test files, we put it here... """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import os.path as osp from typing import TYPE_CHECKING, Any import sigima.params import sigima.proc.signal as sips from sigima.tests.data import ( create_2dstep_image, create_paracetamol_signal, get_test_fnames, ) from datalab.env import execenv from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context, helpers if TYPE_CHECKING: from datalab.gui.main import DLMainWindow def __print_test_result(title: str, result: Any = None) -> None: """Print a test result""" execenv.print(f"Testing {title}{'' if result is None else ':'}") if result is not None: execenv.print(str(result)) execenv.print("") def __misc_unit_function(win: DLMainWindow) -> None: """Run miscellaneous unit tests Args: win: DLMainWindow instance """ panel = win.signalpanel objview = panel.objview sig = create_paracetamol_signal() panel.add_object(sig) panel.processor.run_feature(sips.derivative) panel.processor.run_feature( sips.moving_average, sigima.params.MovingAverageParam.create(n=5) ) __print_test_result("`SimpleObjectTree.__str__` method", objview) # Updated metadata view settings: __print_test_result("Updated metadata view settings") panel.update_metadata_view_settings() # Double click on the first signal item in object view: __print_test_result("Double click on the first signal item in object view") tree_item = objview.currentItem() objview.itemDoubleClicked.emit(tree_item, 0) # Open context menu on current item: __print_test_result("Open context menu on current item") tree_item_pos = objview.mapToGlobal(objview.visualItemRect(tree_item).center()) objview.SIG_CONTEXT_MENU.emit(tree_item_pos) # Plot item parameters changed: __print_test_result("Plot item parameters changed") objview.select_objects([get_uuid(sig)]) item = panel.plothandler[get_uuid(sig)] panel.plot_item_parameters_changed(item) # Duplicate group: __print_test_result("Duplicate group") objview.select_groups([1]) panel.duplicate_object() # Delete group: __print_test_result("Delete group") objview.select_groups([2]) panel.remove_object() # Exec import wizard: __print_test_result("Exec signal import wizard") win.signalpanel.exec_import_wizard() __print_test_result("Exec image import wizard") win.imagepanel.exec_import_wizard() # Properties changed: __print_test_result("Properties changed") objview.select_objects([get_uuid(sig)]) panel.properties_changed() # Get object titles: __print_test_result("Get object titles") execenv.print(win.get_object_titles()) # Get object titles with info: __print_test_result("Get group titles with object info") execenv.print(win.get_group_titles_with_object_info()) # Pop up tab menu: __print_test_result("Pop up tab menu") win.tabmenu.popup(win.mapToGlobal(win.tabmenu.pos())) # Repopulate panel trees: __print_test_result("Repopulate panel trees") win.repopulate_panel_trees() # Browse HDF5 files: __print_test_result("Browse HDF5 files") win.browse_h5_files([], False) # Open object __print_test_result("Open object") fname = get_test_fnames("*.csv")[0] win.load_from_files([fname]) # Open directory __print_test_result("Open directory (signals)") path = osp.dirname(get_test_fnames("curve_formats/*.*")[0]) win.signalpanel.load_from_directory(path) # Select all signals and save them to a temporary directory __print_test_result("Select first group and save signals to a temporary directory") win.signalpanel.objview.select_groups([1]) with helpers.WorkdirRestoringTempDir() as tmpdir: param = sigima.params.SaveToDirectoryParam.create( directory=tmpdir, basename="{title}_test", extension=".csv", overwrite=True ) win.signalpanel.save_to_directory(param) # Open objects from signal panel __print_test_result("Open objects from signal panel") fnames = [f for f in get_test_fnames("curve_formats/*.*") if not f.endswith(".mca")] win.signalpanel.load_from_files(fnames) # Get version __print_test_result("Get version") execenv.print(win.get_version()) # Add signal __print_test_result("Add signal") win.add_signal( sig.title, sig.x, sig.y, sig.xunit, sig.yunit, sig.xlabel, sig.ylabel ) gp2 = win.signalpanel.add_group("group2") win.add_signal( sig.title, sig.x, sig.y, sig.xunit, sig.yunit, sig.xlabel, sig.ylabel, group_id=get_uuid(gp2), set_current=False, ) # Add image __print_test_result("Add image") ima = create_2dstep_image() win.add_image( ima.title, ima.data, ima.xunit, ima.yunit, ima.zunit, ima.xlabel, ima.ylabel, ima.zlabel, ) gp3 = win.imagepanel.add_group("group3") win.add_image( ima.title, ima.data, ima.xunit, ima.yunit, ima.zunit, ima.xlabel, ima.ylabel, ima.zlabel, group_id=get_uuid(gp3), set_current=False, ) # Get selected object UUIDs __print_test_result("Get selected object UUIDs") uuids = win.get_sel_object_uuids() execenv.print(uuids) # Select objects by UUIDs __print_test_result("Select objects by UUIDs") win.select_objects(uuids) # Get object shapes __print_test_result("Get object shapes") win.get_object_shapes(uuids[0]) # Select groups by UUIDs __print_test_result("Select groups by UUIDs") win.select_groups([1]) uuids = win.get_sel_object_uuids() win.select_groups(uuids) # Delete metadata __print_test_result("Delete metadata") win.delete_metadata() # Close application __print_test_result("Close application") win.close_application() def test_misc_app() -> None: """Run misc. application test scenario""" with datalab_test_app_context(console=False) as win: execenv.print("Miscellaneous application test") execenv.print("==============================") execenv.print("") # We don't need to refresh the GUI during those tests (that's faster!) with win.context_no_refresh(): __misc_unit_function(win) if __name__ == "__main__": test_misc_app() DataLab-1.0.2/datalab/tests/features/common/multiple_geometry_results_unit_test.py000066400000000000000000000100121511411446000306300ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Test for multiple geometry results of the same kind ==================================================== This test verifies that multiple geometry results of the same kind (e.g., multiple segment results like FWHM and FW1e2) can coexist on the same object. """ from __future__ import annotations import numpy as np import sigima.objects as sio from sigima.objects.scalar import GeometryResult, KindShape from datalab.adapters_metadata import GeometryAdapter def test_multiple_segment_results(): """Test that multiple segment geometry results can coexist.""" # Create a simple signal object x = np.linspace(0, 10, 100) y = np.exp(-((x - 5) ** 2) / 2) obj = sio.create_signal("Test Signal", x, y) # Create two different segment results (simulating FWHM and FW1e2) fwhm_result = GeometryResult( title="fwhm", func_name="fwhm", kind=KindShape.SEGMENT, coords=np.array([[3.5, 0.6, 6.5, 0.6]]), # x0, y0, x1, y1 roi_indices=None, attrs={"method": "zero-crossing"}, ) fw1e2_result = GeometryResult( title="fw1e2", func_name="fw1e2", kind=KindShape.SEGMENT, coords=np.array([[3.0, 0.37, 7.0, 0.37]]), # Different coordinates roi_indices=None, attrs={"method": "gaussian"}, ) # Add both results to the object GeometryAdapter(fwhm_result).add_to(obj) GeometryAdapter(fw1e2_result).add_to(obj) # Verify both results are stored results = list(GeometryAdapter.iterate_from_obj(obj)) assert len(results) == 2, f"Expected 2 results, got {len(results)}" # Verify we can retrieve both results by title titles = {adapter.title for adapter in results} assert "fwhm" in titles, "FWHM result not found" assert "fw1e2" in titles, "FW1e2 result not found" # Verify the results have different coordinates for adapter in results: if adapter.title == "fwhm": assert np.allclose(adapter.result.coords[0], [3.5, 0.6, 6.5, 0.6]) elif adapter.title == "fw1e2": assert np.allclose(adapter.result.coords[0], [3.0, 0.37, 7.0, 0.37]) print("✓ Multiple segment results can coexist") def test_replace_same_title(): """Test that adding a result with the same title replaces the old one.""" # Create a simple signal object x = np.linspace(0, 10, 100) y = np.exp(-((x - 5) ** 2) / 2) obj = sio.create_signal("Test Signal", x, y) # Create first FWHM result fwhm_result_1 = GeometryResult( title="fwhm", kind=KindShape.SEGMENT, coords=np.array([[3.5, 0.6, 6.5, 0.6]]), roi_indices=None, func_name="fwhm", attrs={"method": "zero-crossing"}, ) # Create second FWHM result (same title, different coords) fwhm_result_2 = GeometryResult( title="fwhm", kind=KindShape.SEGMENT, coords=np.array([[3.6, 0.6, 6.6, 0.6]]), # Slightly different roi_indices=None, func_name="fwhm", attrs={"method": "gaussian"}, ) # Add first result GeometryAdapter(fwhm_result_1).add_to(obj) # Verify one result results = list(GeometryAdapter.iterate_from_obj(obj)) assert len(results) == 1, f"Expected 1 result after first add, got {len(results)}" # Add second result (should replace the first) GeometryAdapter(fwhm_result_2).add_to(obj) # Verify still only one result results = list(GeometryAdapter.iterate_from_obj(obj)) assert len(results) == 1, f"Expected 1 result after second add, got {len(results)}" # Verify it's the second one (with updated coordinates) adapter = results[0] assert adapter.title == "fwhm" assert np.allclose(adapter.result.coords[0], [3.6, 0.6, 6.6, 0.6]) assert adapter.result.attrs["method"] == "gaussian" print("✓ Results with same title are properly replaced") if __name__ == "__main__": test_multiple_segment_results() test_replace_same_title() print("\n✅ All tests passed!") DataLab-1.0.2/datalab/tests/features/common/multiple_table_results_unit_test.py000066400000000000000000000036751511411446000301050ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Test for multiple table results of the same kind ================================================== This test verifies that multiple table results of the same kind can coexist on the same object. """ from __future__ import annotations import numpy as np import sigima.objects as sio from sigima.objects.scalar import TableResult from datalab.adapters_metadata import TableAdapter def test_multiple_table_results(): """Test that multiple table results with different titles can coexist.""" # Create a simple signal object x = np.linspace(0, 10, 100) y = np.exp(-((x - 5) ** 2) / 2) obj = sio.create_signal("Test Signal", x, y) # Create two different table results (simulating different statistics) stats1 = TableResult( title="basic_stats", func_name="basic_stats", headers=["Mean", "Std", "Min", "Max"], data=[[5.0, 1.5, 0.0, 10.0]], roi_indices=None, attrs={"method": "basic"}, ) stats2 = TableResult( title="advanced_stats", func_name="advanced_stats", headers=["Median", "Q1", "Q3", "IQR"], data=[[5.0, 3.5, 6.5, 3.0]], roi_indices=None, attrs={"method": "advanced"}, ) # Add both results to the object TableAdapter(stats1).add_to(obj) TableAdapter(stats2).add_to(obj) # Verify both results are stored results = list(TableAdapter.iterate_from_obj(obj)) assert len(results) == 2, f"Expected 2 results, got {len(results)}" # Verify we can retrieve both results by title titles = {adapter.title for adapter in results} assert "basic_stats" in titles, "Basic stats result not found" assert "advanced_stats" in titles, "Advanced stats result not found" print("✓ Multiple table results can coexist") if __name__ == "__main__": test_multiple_table_results() print("\n✅ All tests passed!") DataLab-1.0.2/datalab/tests/features/common/operation_modes_app_test.py000066400000000000000000000372131511411446000263050ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Operation modes test -------------------- DataLab has two operation modes: - **Single operand mode**: the operation is applied to the selected objects (this is the default mode) - **Pairwise mode**: the operation is applied to the selected pairs of objects This test scenario covers the pairwise mode and the operations that can be performed in this mode: sum, difference, product, division, ... """ # guitest: show from __future__ import annotations from datalab import app from datalab.config import Conf from datalab.env import execenv from datalab.gui.processor.base import is_pairwise_mode from datalab.objectmodel import get_short_id from datalab.tests import helpers from datalab.utils.qthelpers import datalab_app_context def get_h5fname() -> str: """Get the HDF5 test filename""" fnames = helpers.get_test_fnames("reorder*") return fnames[0] def check_titles(title: str, titles: list[tuple[str, str]]) -> None: """Check that the title is one of the expected titles""" execenv.print(f"{title}:") for actual_title, expected_title in titles: execenv.print(f" {actual_title} == {expected_title}", end=" ") assert actual_title == expected_title if actual_title == expected_title: execenv.print("✓") else: execenv.print("✗") def test_single_operand_mode_compute_n_to_1() -> None: """Run single operand mode test scenario with `compute_n_to_1` operation (e.g. sum)""" h5fname = get_h5fname() original_mode = Conf.proc.operation_mode.get() Conf.proc.operation_mode.set("single") with datalab_app_context(exec_loop=True): win = app.create(h5files=[h5fname], console=False) panel = win.signalpanel view, model = panel.objview, panel.objmodel # Checking the operation mode: assert not is_pairwise_mode() # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select the two first groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] view.select_groups(groups) # Perform a sum operation panel.processor.run_feature("addition") # Default operation mode is single operand mode, so the sum operation # is applied to the selected groups, and we should have a new group # with two signals being the sum of signals from each group: # - signal 1: group 1 signal 1 + group 1 signal 2 # - signal 2: group 2 signal 1 + group 2 signal 2 assert len(model.get_groups()) == n_groups + 1 new_group = model.get_group_from_number(n_groups + 1) assert len(new_group) == 2 titles = [] for idx, obj in enumerate(new_group): pfx_orig = ", ".join(get_short_id(obj) for obj in groups[idx].get_objects()) titles.append((obj.title, f"Σ({pfx_orig})")) check_titles(f"Single operand mode Σ[{new_group.title}]", titles) # Remove new group view.select_groups([new_group]) panel.remove_object(force=True) # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select the two first signals of the first two groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] objs = groups[0][:2] + groups[1][:2] view.select_objects(objs) # Perform a sum operation panel.processor.run_feature("addition") # Default operation mode is single operand mode, so the sum operation # is applied to the selected signals, and we should have a new resulting # signal being the sum of the selected signals added in each group: # - signal added to group 1: group 1 signal 1 + group 2 signal 1 # - signal added to group 2: group 1 signal 2 + group 2 signal 2 assert len(model.get_groups()) == n_groups # no new group titles = [] for idx in range(1): pfx_orig = ", ".join(get_short_id(obj) for obj in groups[idx][:2]) titles.append((groups[idx][-1].title, f"Σ({pfx_orig})")) check_titles(f"Single operand mode Σ[{groups[1].title}]", titles) Conf.proc.operation_mode.set(original_mode) def test_pairwise_operations_mode_compute_n_to_1() -> None: """Run pairwise operations mode test scenario with `compute_n_to_1` operation (e.g. sum)""" h5fname = get_h5fname() original_mode = Conf.proc.operation_mode.get() Conf.proc.operation_mode.set("pairwise") with datalab_app_context(exec_loop=True): win = app.create(h5files=[h5fname], console=False) panel = win.signalpanel view, model = panel.objview, panel.objmodel # Checking the operation mode: assert is_pairwise_mode() # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select the two first groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] view.select_groups(groups) # Checking that each group contains the same number of signals (this is # required for pairwise operations - this part of the test is checking # if the data file is the one we expect) n_objects = len(groups[0]) assert all(len(group) == n_objects for group in groups) # Perform a sum operation panel.processor.run_feature("addition") # Operation mode is now pairwise, so the sum operation is applied to the # selected groups, and we should have a new group with as many signals as # the original groups, each signal being the sum of the corresponding signals: # - signal 1: group 1 signal 1 + group 2 signal 1 # - signal 2: group 1 signal 1 + group 2 signal 2 # ... assert len(model.get_groups()) == n_groups + 1 new_group = model.get_group_from_number(n_groups + 1) assert len(new_group.get_objects()) == n_objects titles = [] for idx in range(len(groups[0])): obj = new_group[idx] pfx_orig = ", ".join( get_short_id(obj) for obj in (grp[idx] for grp in groups) ) titles.append((obj.title, f"Σ({pfx_orig})")) check_titles(f"Pairwise operations mode Σ[{new_group.title}]", titles) # Remove new group view.select_groups([new_group]) panel.remove_object(force=True) # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select two signals of the first two groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] objs = [groups[0][0]] + [groups[0][-1]] + groups[1][-2:] view.select_objects(objs) # Perform a sum operation panel.processor.run_feature("addition") # Operation mode is now pairwise, so the sum operation is applied to the # selected signals, and we should have a new group with as many signals as # the selected signals, each signal being the sum of the corresponding signals: # - signal 1: group 1 signal 1 + group 2 signal 1 # - signal 2: group 1 signal 1 + group 2 signal 2 # ... assert len(model.get_groups()) == n_groups + 1 new_group = model.get_group_from_number(n_groups + 1) assert len(new_group) == 2 # 2 signals were selected titles = [] for idx, obj in enumerate(new_group): pfx_orig = ", ".join(get_short_id(obj) for obj in objs[idx::2]) titles.append((obj.title, f"Σ({pfx_orig})")) check_titles(f"Pairwise operations mode Σ[{new_group.title}]", titles) Conf.proc.operation_mode.set(original_mode) def test_single_operand_mode_compute_2_to_1() -> None: """Run single operand mode test scenario with `compute_2_to_1` operation (e.g. difference)""" h5fname = get_h5fname() original_mode = Conf.proc.operation_mode.get() Conf.proc.operation_mode.set("single") with datalab_app_context(exec_loop=True): win = app.create(h5files=[h5fname], console=False) panel = win.signalpanel view, model = panel.objview, panel.objmodel # Checking the operation mode: assert not is_pairwise_mode() # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select the two first groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] view.select_groups(groups) n_objects = [len(grp) for grp in groups] # Perform a difference operation with the first signal of the third group group3 = model.get_group_from_number(3) panel.processor.run_feature("difference", group3[0]) # Default operation mode is single operand mode, so we should have new signals # in each selected group being the difference between the original signals and # the selected signal: # - in group 1: # - signal 1: group 1 signal 1 - group 3 signal 1 # - signal 2: group 1 signal 2 - group 3 signal 1 # - in group 2: # - signal 1: group 2 signal 1 - group 3 signal 1 # - signal 2: group 2 signal 2 - group 3 signal 1 assert len(model.get_groups()) == n_groups new_objs = [] for i_group, group in enumerate(groups): titles = [] for i_obj in range(n_objects[i_group]): obj = group[i_obj + n_objects[i_group]] titles.append( ( obj.title, f"{get_short_id(group[i_obj])}-{get_short_id(group3[0])}", ) ) new_objs.append(obj) check_titles(f"Single operand mode Δ[{group.title}]", titles) # Remove new signals view.select_objects(new_objs) panel.remove_object(force=True) # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select the two first signals of the first two groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] objs = groups[0][:2] + groups[1][:2] view.select_objects(objs) n_objects = [2, 2] # Perform a difference operation with the first signal of the third group panel.processor.run_feature("difference", group3[0]) # Default operation mode is single operand mode, so we should have new signals # being the difference between the original signals and the selected signal: # - in group 1: # - signal 1: group 1 signal 1 - group 3 signal 1 # - signal 2: group 1 signal 2 - group 3 signal 1 # - in group 2: # - signal 1: group 2 signal 1 - group 3 signal 1 # - signal 2: group 2 signal 2 - group 3 signal 1 assert len(model.get_groups()) == n_groups # no new group for i_group, group in enumerate(groups): titles = [] for i_obj in range(n_objects[i_group]): obj = group[len(group) - n_objects[i_group] + i_obj] titles.append( ( obj.title, f"{get_short_id(group[i_obj])}-{get_short_id(group3[0])}", ) ) check_titles(f"Single operand mode Δ[{group.title}]", titles) Conf.proc.operation_mode.set(original_mode) def test_pairwise_operations_mode_compute_2_to_1() -> None: """Run pairwise operations mode test scenario with `compute_2_to_1` operation (e.g. difference)""" h5fname = get_h5fname() original_mode = Conf.proc.operation_mode.get() Conf.proc.operation_mode.set("pairwise") with datalab_app_context(exec_loop=True): win = app.create(h5files=[h5fname], console=False) panel = win.signalpanel view, model = panel.objview, panel.objmodel # Checking the operation mode: assert is_pairwise_mode() # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select the two first groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] view.select_groups(groups) # Checking that each group contains the same number of signals (this is # required for pairwise operations - this part of the test is checking # if the data file is the one we expect) n_objects = len(groups[0]) assert all(len(group) == n_objects for group in groups) # Perform a difference operation with the third group group3 = model.get_group_from_number(3) assert len(group3) == n_objects panel.processor.run_feature("difference", group3.get_objects()) # Operation mode is now pairwise, so the difference operation is applied to the # selected groups, and we should have a new group with as many signals as the # original groups, each signal being the difference of the corresponding # signals: # - signal 1: group 1 signal 1 - group 2 signal 1 # - signal 2: group 1 signal 1 - group 2 signal 2 # ... assert len(model.get_groups()) == n_groups + 2 new_groups = [ model.get_group_from_number(idx) for idx in (n_groups + 1, n_groups + 2) ] execenv.print("Δ|pairwise") for i_new_grp, new_grp in enumerate(new_groups): assert len(new_grp.get_objects()) == n_objects titles = [] for idx in range(n_objects): obj = new_grp[idx] obj1, obj2 = groups[i_new_grp][idx], group3[idx] titles.append((obj.title, f"{get_short_id(obj1)}-{get_short_id(obj2)}")) check_titles(f"Pairwise operations mode Δ[{new_grp.title}]", titles) # Remove new groups view.select_groups(new_groups) panel.remove_object(force=True) # Store the number of groups before the operations n_groups = len(model.get_groups()) # Select two signals of the first two groups groups = [model.get_group_from_number(idx) for idx in (1, 2)] objs = [groups[0][0]] + [groups[0][-1]] + groups[1][-2:] view.select_objects(objs) n_objects = 2 # Perform a difference operation with two signals from the third group objs2 = group3[:2] panel.processor.run_feature("difference", objs2) # Operation mode is now pairwise, so the difference operation is applied to the # selected signals, and we should have a new group with as many signals as the # selected signals, each signal being the difference of the corresponding # signals: # - signal 1: group 1 signal 1 - group 3 signal 1 # - signal 2: group 1 signal 1 - group 3 signal 2 # ... assert len(model.get_groups()) == n_groups + 2 new_groups = [ model.get_group_from_number(idx) for idx in (n_groups + 1, n_groups + 2) ] i_obj1 = 0 execenv.print("Δ|pairwise") for i_new_grp, new_grp in enumerate(new_groups): assert len(new_grp.get_objects()) == n_objects titles = [] for idx in range(n_objects): obj = new_grp[idx] obj1, obj2 = objs[i_obj1], objs2[idx] i_obj1 += 1 titles.append((obj.title, f"{get_short_id(obj1)}-{get_short_id(obj2)}")) check_titles(f"Pairwise operations mode Δ[{new_grp.title}]", titles) Conf.proc.operation_mode.set(original_mode) if __name__ == "__main__": test_single_operand_mode_compute_n_to_1() test_pairwise_operations_mode_compute_n_to_1() test_single_operand_mode_compute_2_to_1() test_pairwise_operations_mode_compute_2_to_1() DataLab-1.0.2/datalab/tests/features/common/plot_results_app_test.py000066400000000000000000000260731511411446000256570ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Plot results application test: Testing the "Plot results" feature with different options: - Different plot kinds (one curve per object vs. one curve per title) - Different X/Y axis selections - Results with and without ROIs - Both signal and image panels - Multiple result types (scalar and geometry results) - Group selection creates a new result group """ # guitest: show from __future__ import annotations from typing import Generator import sigima.objects import sigima.params from sigima.tests import data as test_data from datalab.config import _ from datalab.env import execenv from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context def iterate_noisy_signals( count: int, a: float, sigma: float, ) -> Generator[tuple[sigima.objects.SignalObj, float], None, None]: """Generate noisy signals for testing.""" noiseparam = sigima.objects.NormalDistribution1DParam.create(sigma=sigma, mu=0.0) param = sigima.objects.GaussParam.create(a=a) for i in range(count): param.sigma = 1.0 + (i * 0.1) ** 2 theoretical_fwhm = param.get_expected_features().fwhm sig = test_data.create_noisy_signal( noiseparam, param, f"Signal|fwhm_th={theoretical_fwhm:.2f}" ) yield sig, theoretical_fwhm def test_plot_results_signals_one_curve_per_title(): """Test plot results feature with signals, one curve per title. Create signals with single-value results (e.g., FWHM) and plot them. Verify that results are created in the "Results" group. """ with datalab_test_app_context() as win: panel = win.signalpanel with execenv.context(unattended=True): x_th = [] y_th = [] for i, (sig, theoretical_fwhm) in enumerate( iterate_noisy_signals(5, a=10.0, sigma=0.01) ): x_th.append(i) y_th.append(theoretical_fwhm) panel.add_object(sig) # Compute FWHM using the default method (zero-crossing) which introduces # a systematic ~2% error compared to the theoretical value # (trade-off for noise robustness) panel.processor.run_feature("fwhm", sigima.params.FWHMParam()) # Get number of groups before plotting groups_before = len(panel.objmodel.get_groups()) panel.objview.selectAll() panel.show_results() panel.plot_results(kind="one_curve_per_title", xaxis="indices", yaxis="Δx") # Verify a Results group was created groups_after = panel.objmodel.get_groups() assert len(groups_after) == groups_before + 1, ( f"Expected {groups_before + 1} groups, got {len(groups_after)}" ) # Verify the new group is named "Results" expected_title = _("Results") result_group = groups_after[-1] assert result_group.title == expected_title, ( f"Expected last group to be '{expected_title}', " f"got '{result_group.title}'" ) # Verify the Results group contains the result signal assert len(result_group) > 0, ( "Results group should contain at least one result signal" ) fwhm_var_th = sigima.objects.create_signal("FWHM_Theoretical", x_th, y_th) panel.add_object(fwhm_var_th) panel.objview.select_objects((6, 7)) # The observed offset should be around ~2% of the theoretical value def test_plot_results_images_one_curve_per_object(): """Test plot results feature with images, one curve per object. Create images with multi-value results (e.g., peak detection) and plot them. """ with datalab_test_app_context() as win: panel = win.imagepanel with execenv.context(unattended=True): for i in range(3): img = test_data.create_peak_image() img.title = f"Peaks_{i + 1}" panel.add_object(img) param = sigima.params.Peak2DDetectionParam.create(create_rois=False) panel.processor.run_feature("peak_detection", param) panel.objview.selectAll() panel.show_results() # Use programmatic parameters: plot y vs x for each peak panel.plot_results(kind="one_curve_per_object", xaxis="x", yaxis="y") def test_plot_results_images_with_rois(): """Test plot results feature with images containing ROIs. Create images with ROIs and single-value results (e.g., centroid) and plot them. """ with datalab_test_app_context() as win: panel = win.imagepanel with execenv.context(unattended=True): size = 512 peak_param = test_data.PeakDataParam.create(size=size) for i in range(3): data, peak_coords = test_data.get_peak2d_data(peak_param) img = sigima.objects.create_image(f"Image_ROI_{i + 1}", data) # Add rectangular ROI to image roi_coords = [] for xpeak, ypeak in peak_coords: roi_coords.append([xpeak, ypeak, 20]) img.roi = sigima.objects.create_image_roi("circle", roi_coords) panel.add_object(img) panel.processor.run_feature("centroid") panel.objview.selectAll() panel.show_results() # Plot centroid x vs indices with ROIs panel.plot_results(kind="one_curve_per_title", xaxis="indices", yaxis="x") def test_plot_results_with_group_selection(): """Test plot results with Results group. All plot results operations should create result signals in a reusable "Results" group for better organization. """ with datalab_test_app_context() as win: panel = win.signalpanel with execenv.context(unattended=True): # Create a group with signals panel.add_group("Test Group") # Add signals and compute FWHM for i, (sig, _fwhm) in enumerate( iterate_noisy_signals(3, a=10.0, sigma=0.01) ): sig.title = f"Signal_{i + 1}" panel.add_object(sig) panel.processor.run_feature("fwhm", sigima.params.FWHMParam()) # Get the number of groups before plotting results groups_before = len(panel.objmodel.get_groups()) # Select the group (not individual objects) panel.objview.select_groups([1]) # Verify the group is selected sel_groups = panel.objview.get_sel_groups() assert len(sel_groups) == 1, ( f"Expected 1 selected group, got {len(sel_groups)}" ) # Plot results - this should create or reuse a "Results" group panel.plot_results(kind="one_curve_per_title", xaxis="indices", yaxis="Δx") # Verify a new group was created groups_after = panel.objmodel.get_groups() assert len(groups_after) == groups_before + 1, ( f"Expected {groups_before + 1} groups, got {len(groups_after)}" ) # Check that the new group is named "Results" (or its translation) expected_title = _("Results") result_group = groups_after[-1] # Last group should be Results assert result_group.title == expected_title, ( f"Expected last group to be '{expected_title}', " f"got '{result_group.title}'" ) # Check that the Results group contains at least one result signal assert len(result_group) > 0, ( "Results group should contain at least one result signal" ) # Verify that the result signal title includes source object short IDs result_signal = list(result_group)[0] # Should contain all three source signal IDs: s001, s002, s003 # (s000 is the default group, so signals start at s001) assert "(s001, s002, s003)" in result_signal.title, ( f"Result signal title should include source IDs (s001, s002, s003), " f"got '{result_signal.title}'" ) # Test that the group is reused: create another group and plot results test_group_2 = panel.add_group("Test Group 2") test_group_2_id = get_uuid(test_group_2) for i, (sig, _fwhm) in enumerate( iterate_noisy_signals(2, a=10.0, sigma=0.01) ): sig.title = f"Signal2_{i + 1}" panel.add_object(sig, group_id=test_group_2_id) panel.processor.run_feature("fwhm", sigima.params.FWHMParam()) # Select the second group and plot results again panel.objview.select_groups([3]) # Plot results again num_results_before = len(result_group) panel.plot_results(kind="one_curve_per_title", xaxis="indices", yaxis="Δx") # Verify no new group was created (reused existing Results group) groups_final = panel.objmodel.get_groups() assert len(groups_final) == len(groups_after), ( "Results group should be reused, no new group created" ) # Verify more results were added to the existing Results group assert len(result_group) > num_results_before, ( "More results should be added to the existing Results group" ) # Test with many objects (more than 3) to verify "..." is used test_group_3 = panel.add_group("Test Group 3") test_group_3_id = get_uuid(test_group_3) for i, (sig, _fwhm) in enumerate( iterate_noisy_signals(5, a=10.0, sigma=0.01) ): sig.title = f"Signal3_{i + 1}" panel.add_object(sig, group_id=test_group_3_id) panel.processor.run_feature("fwhm", sigima.params.FWHMParam()) # Select the third group panel.objview.select_groups([4]) # Plot results num_results_before = len(result_group) panel.plot_results(kind="one_curve_per_title", xaxis="indices", yaxis="Δx") # Verify the result signal title uses "..." for many objects new_results = list(result_group)[num_results_before:] assert len(new_results) > 0, "Should have new results" result_signal_many = new_results[0] # With 5 source signals, should show first 2 IDs, "...", then last ID # Format: "fwhm (s..., s..., ..., s...): ..." assert ", ..., " in result_signal_many.title, ( f"Result signal title should use '...' before last ID, " f"got '{result_signal_many.title}'" ) if __name__ == "__main__": test_plot_results_signals_one_curve_per_title() test_plot_results_images_one_curve_per_object() test_plot_results_images_with_rois() test_plot_results_with_group_selection() DataLab-1.0.2/datalab/tests/features/common/reorder_app_test.py000066400000000000000000000056501511411446000245600ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Groups/signals/images reorder test: - Testing groups/signals reorder (images are not tested but the code is the same) - When executed in unattended mode, the test only covers the "move up" and "move down" actions - When executed in interactive mode, the user has to test the "drag and drop" actions manually - In unattended mode only, we take the opportunity to test other methods of the `ObjectModel` class (e.g. `get_group`, `remove_group`, ...) for maximizing the code coverage """ # guitest: show from datalab import app from datalab.env import execenv from datalab.objectmodel import get_uuid from datalab.tests import helpers from datalab.utils.qthelpers import datalab_app_context def test_reorder(): """Run signals/images reorder test scenario""" with datalab_app_context(exec_loop=True): win = app.create(h5files=[helpers.get_test_fnames("reorder*")[0]]) panel = win.signalpanel view, model = panel.objview, panel.objmodel # Select multiple signals objs = [model.get_object_from_number(idx) for idx in (2, 4, 5, 9)] view.select_objects(objs) # Move up view.move_up() # Check that the order is correct (note: objects 4 and 5 are not affected # by the move up action because they are moved up from the top of their group # to the bottom of the previous group) assert [model.get_number(obj) for obj in objs] == [1, 4, 5, 8] # Move down view.move_down() # Check that the order is correct (note: objects 4 and 5 are not affected # by the move down action because they are moved down from the bottom of their # group to the top of the next group) assert [model.get_number(obj) for obj in objs] == [2, 4, 5, 9] # Select multiple groups groups = [model.get_group_from_number(idx) for idx in (2, 3)] view.select_groups(groups) # Move up view.move_up() assert [model.get_number(group) for group in groups] == [1, 2] # Move down view.move_down() assert [model.get_number(group) for group in groups] == [2, 3] # Testing other methods of the `ObjectModel` class in unattended mode only if execenv.unattended: # Get group group = model.get_group_from_number(2) assert model.get_number(group) == 2 # Get the same group from its uuid group = model.get_group(get_uuid(group)) assert model.get_number(group) == 2 group = model.get_object_or_group(get_uuid(group)) assert model.get_number(group) == 2 # Remove group n_groups = len(model.get_groups()) model.remove_group(group) assert len(model.get_groups()) == n_groups - 1 if __name__ == "__main__": test_reorder() DataLab-1.0.2/datalab/tests/features/common/result_deletion_unit_test.py000066400000000000000000000066511511411446000265200ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Result deletion unit test -------------------------- Test the deletion of analysis results from objects. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations from sigima.objects import Gauss2DParam, create_image_from_param from sigima.tests.data import create_paracetamol_signal from datalab.adapters_metadata import GeometryAdapter, TableAdapter from datalab.config import Conf from datalab.env import execenv from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context def test_delete_results_image(): """Test deletion of analysis results from images""" with datalab_test_app_context(console=False) as win: execenv.print("Image result deletion test:") panel = win.imagepanel # Create a test image param = Gauss2DParam.create(height=200, width=200, sigma=20) img = create_image_from_param(param) panel.add_object(img) # Run centroid analysis to create results execenv.print(" Running centroid analysis...") with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("centroid") # Verify that results exist img_refreshed = panel.objmodel[get_uuid(img)] adapter_before = GeometryAdapter.from_obj(img_refreshed, "centroid") assert adapter_before is not None, ( "Centroid result should exist before deletion" ) execenv.print(" ✓ Centroid result created") # Delete all results execenv.print(" Deleting all results...") panel.objview.select_objects([get_uuid(img)]) panel.delete_results() # Verify that results were deleted img_after = panel.objmodel[get_uuid(img)] adapter_after = GeometryAdapter.from_obj(img_after, "centroid") assert adapter_after is None, "Centroid result should be deleted" execenv.print(" ✓ Centroid result deleted") def test_delete_results_signal(): """Test deletion of analysis results from signals""" with datalab_test_app_context(console=False) as win: execenv.print("Signal result deletion test:") panel = win.signalpanel # Create a test signal sig = create_paracetamol_signal() panel.add_object(sig) # Run stats analysis to create table results execenv.print(" Running stats analysis...") with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("stats") # Verify that results exist sig_refreshed = panel.objmodel[get_uuid(sig)] tables_before = list(TableAdapter.iterate_from_obj(sig_refreshed)) assert len(tables_before) > 0, "Stats result should exist before deletion" execenv.print(" ✓ Stats result created") # Delete all results execenv.print(" Deleting all results...") panel.objview.select_objects([get_uuid(sig)]) panel.delete_results() # Verify that results were deleted sig_after = panel.objmodel[get_uuid(sig)] tables_after = list(TableAdapter.iterate_from_obj(sig_after)) assert len(tables_after) == 0, "Stats result should be deleted" execenv.print(" ✓ Stats result deleted") if __name__ == "__main__": test_delete_results_image() test_delete_results_signal() DataLab-1.0.2/datalab/tests/features/common/result_merged_label_unit_test.py000066400000000000000000000141311511411446000273070ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Merged result label test: Test that multiple results are merged into a single label that displays all results. This test verifies that: 1. Computing FWHM adds a result to the merged label 2. Computing FW1e2 adds another result to the same merged label 3. The merged label contains both results 4. The merged label is read-only (cannot be deleted to remove individual results) 5. De-selecting and re-selecting the signal maintains the merged label """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params import sigima.proc.signal as sips from sigima.tests.data import create_paracetamol_signal from datalab.adapters_metadata.geometry_adapter import GeometryAdapter from datalab.env import execenv from datalab.tests import datalab_test_app_context def test_merged_result_label() -> None: """Test that multiple results are merged into a single label""" with datalab_test_app_context() as win: panel = win.signalpanel # Create a Gaussian curve execenv.print("Creating paracetamol signal...") sig = create_paracetamol_signal() panel.add_object(sig) execenv.print(f" Added signal: {sig.title}") # Compute the FWHM (this adds a result to metadata) execenv.print("Computing FWHM...") panel.processor.run_feature(sips.fwhm, sigima.params.FWHMParam()) # Force refresh to ensure shapes are added panel.plothandler.refresh_plot("selected", force=True) # Check that the result metadata exists sig = panel.objview.get_sel_objects()[0] geometry_results_1 = list(GeometryAdapter.iterate_from_obj(sig)) execenv.print(f" Geometry results after FWHM: {len(geometry_results_1)}") assert len(geometry_results_1) == 1, "Should have one geometry result" # Get the plot and find the merged result label item plot = panel.plothandler.plot label_items = [item for item in plot.items if hasattr(item, "labelparam")] # Find the merged result label - it should be on the plot merged_label = None for item in label_items: if hasattr(item, "is_readonly") and item.is_readonly(): merged_label = item break assert merged_label is not None, "Should find the merged result label" execenv.print(f" Found merged result label: {merged_label.title()}") # Check that the label is read-only assert merged_label.is_readonly(), "Merged label should be read-only" execenv.print(" ✓ Merged label is read-only") # Get the label text to verify it contains FWHM result label_text_1 = merged_label.text_string assert "fwhm" in label_text_1.lower(), "Label should contain FWHM result" execenv.print(" ✓ Label contains FWHM result") # Compute FW1e2 (this adds another result to metadata) execenv.print("Computing FW1e2...") panel.processor.run_feature(sips.fw1e2) # Check that we now have two results sig = panel.objview.get_sel_objects()[0] geometry_results_2 = list(GeometryAdapter.iterate_from_obj(sig)) execenv.print(f" Geometry results after FW1e2: {len(geometry_results_2)}") assert len(geometry_results_2) == 2, "Should have two geometry results" # Verify the merged label now contains both results merged_labels = [ item for item in plot.items if hasattr(item, "labelparam") and hasattr(item, "is_readonly") and item.is_readonly() ] execenv.print(f" Merged result labels on plot: {len(merged_labels)}") assert len(merged_labels) == 1, "Should have exactly one merged result label" merged_label_2 = merged_labels[0] label_text_2 = merged_label_2.text_string assert "fwhm" in label_text_2.lower(), "Label should contain FWHM result" assert "fw1e2" in label_text_2.lower(), "Label should contain FW1e2 result" assert "
    " in label_text_2, "Should contain separator between results" execenv.print(" ✓ Merged label contains both FWHM and FW1e2 results") # Create another signal and select it (to deselect the first one) execenv.print("Creating second signal to deselect first...") sig2 = create_paracetamol_signal() sig2.title = "Paracetamol 2" panel.add_object(sig2) # Re-select the first signal execenv.print("Re-selecting first signal...") panel.objview.select_objects([1]) # Check that the merged label still exists and contains both results sig = panel.objview.get_sel_objects()[0] geometry_results_after = list(GeometryAdapter.iterate_from_obj(sig)) execenv.print( f" Geometry results after reselect: {len(geometry_results_after)}" ) assert len(geometry_results_after) == 2, ( "Should still have two geometry results after re-selection" ) # Check that the merged label is still present merged_labels_after = [ item for item in plot.items if hasattr(item, "labelparam") and hasattr(item, "is_readonly") and item.is_readonly() ] execenv.print( f" Merged result labels on plot after reselect: {len(merged_labels_after)}" ) assert len(merged_labels_after) == 1, ( "Should still have one merged result label after re-selection" ) merged_label_final = merged_labels_after[0] label_text_final = merged_label_final.text_string assert "fwhm" in label_text_final.lower(), ( "Label should still contain FWHM result" ) assert "fw1e2" in label_text_final.lower(), ( "Label should still contain FW1e2 result" ) execenv.print(" ✓ Merged label persists after re-selection") execenv.print("✓ Test passed: Merged result label works correctly") if __name__ == "__main__": test_merged_result_label() DataLab-1.0.2/datalab/tests/features/common/result_shape_settings_unit_test.py000066400000000000000000000217371511411446000277370ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Unit test for visualization settings for annotated shapes and markers. This test verifies that visualization settings (configured in Settings dialog) are properly applied when creating geometry results: 1. Centroid produces a marker (MARKER kind from sigima) 2. Contour detection produces annotated shapes (CIRCLE, ELLIPSE, or POLYGON kind) The test uses the Conf.view.def*.temp() context manager to temporarily modify settings and verify they're applied to new results. """ from __future__ import annotations from plotpy.items import AnnotatedCircle, Marker from plotpy.styles import MarkerParam, ShapeParam from sigima.objects import Gauss2DParam, create_image_from_param from datalab.adapters_metadata import GeometryAdapter from datalab.adapters_plotpy import GeometryPlotPyAdapter from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context def test_ima_shape_param(): """Test that annotated shape settings are applied to enclosing_circle results on images.""" with datalab_test_app_context(console=False) as win: panel = win.imagepanel # Create a Gaussian image for testing (simple peak for enclosing circle) size = 200 param = Gauss2DParam.create(height=size, width=size, sigma=20) img = create_image_from_param(param) img.title = "Test Gaussian" panel.add_object(img) # Test: Verify annotated shape settings for enclosing circle # ---------------------------------------------------------- execenv.print("\n=== Test: Enclosing Circle (Annotated Shapes) ===") # Create custom annotated shape settings def_param = ShapeParam() def_param.line.width = 3 def_param.line.color = "#852727" # Temporarily set the annotated shape settings # Note: enclosing_circle is an image feature, so we use ima_shape_param with Conf.view.ima_shape_param.temp(def_param): # Compute enclosing circle with the custom settings with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("enclosing_circle") # Get the geometry adapter and create plot items adapter = GeometryAdapter.from_obj(img, "enclosing_circle") assert adapter is not None, "Enclosing circle should be computed" # Create a plotpy adapter to get the shape items plotpy_adapter = GeometryPlotPyAdapter(adapter) items = list(plotpy_adapter.iterate_shape_items("%.1f", True, "i")) # Verify we got annotated shapes assert len(items) > 0, "Should have at least one shape" shape_item = items[0] assert isinstance(shape_item, AnnotatedCircle), ( f"Expected AnnotatedCircle, got {type(shape_item)}" ) # Verify the annotation settings were applied param: ShapeParam = shape_item.shape.shapeparam execenv.print(f"Line width: {param.line.width}") execenv.print(f"Line color: {param.line.color}") assert param.line.width == def_param.line.width, ( f"Expected line.width={def_param.line.width}, got {param.line.width}" ) assert param.line.color == def_param.line.color, ( f"Expected line.color={def_param.line.color}, got {param.line.color}" ) execenv.print( "✓ Enclosing circle annotated shape settings correctly applied" ) execenv.print("\n=== Test passed ===") def test_ima_marker_param(): """Test that shape settings are applied to geometry results.""" with datalab_test_app_context(console=False) as win: panel = win.imagepanel # Create a 2D Gaussian image for testing size = 200 param = Gauss2DParam.create(height=size, width=size, sigma=20) img = create_image_from_param(param) img.title = "Test Gaussian" panel.add_object(img) # Test: Verify marker settings for centroid # ------------------------------------------ execenv.print("\n=== Test: Centroid (Marker) ===") # Create custom marker settings def_param = MarkerParam() def_symbol = def_param.symbol def_symbol.marker = "XCross" def_symbol.size = 15 def_symbol.edgecolor = "#316331" def_symbol.facecolor = "#291b6b" def_symbol.alpha = 0.87 # Temporarily set the marker settings with Conf.view.ima_marker_param.temp(def_param): # Compute centroid with the custom settings with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("centroid") # Get the geometry adapter and create plot items adapter = GeometryAdapter.from_obj(img, "centroid") assert adapter is not None, "Centroid should be computed" # Create a plotpy adapter to get the marker item plotpy_adapter = GeometryPlotPyAdapter(adapter) items = list(plotpy_adapter.iterate_shape_items("%.1f", True, "i")) # Verify we got a marker assert len(items) > 0, "Should have at least one marker" marker = items[0] assert isinstance(marker, Marker), f"Expected Marker, got {type(marker)}" # Verify the marker settings were applied symbol = marker.markerparam.symbol execenv.print(f"Marker symbol: {symbol.marker}") execenv.print(f"Marker size: {symbol.size}") execenv.print(f"Marker edge color: {symbol.edgecolor}") assert symbol.marker == def_symbol.marker, ( f"Expected marker='XCross', got '{symbol.marker}'" ) assert symbol.size == def_symbol.size, ( f"Expected size={def_symbol.size}, got {symbol.size}" ) assert symbol.edgecolor == def_symbol.edgecolor, ( f"Expected edgecolor={def_symbol.edgecolor}, got {symbol.edgecolor}" ) assert symbol.facecolor == def_symbol.facecolor, ( f"Expected facecolor={def_symbol.facecolor}, got {symbol.facecolor}" ) execenv.print("✓ Centroid marker settings correctly applied") execenv.print("\n=== Test passed ===") def test_refresh_shape_items_after_settings_change(): """Test that shape items are refreshed when settings change. This test verifies the fix for the issue where result shapes were not updated when refreshing the Image View after changing shape parameters in the Settings dialog. """ with datalab_test_app_context(console=False) as win: panel = win.imagepanel # Create a Gaussian image with a result size = 200 param = Gauss2DParam.create(height=size, width=size, sigma=20) img = create_image_from_param(param) img.title = "Test Gaussian" panel.add_object(img) # Compute enclosing circle with initial settings with Conf.proc.show_result_dialog.temp(False): panel.processor.run_feature("enclosing_circle") # Get initial shape item styling plot = panel.plothandler.plot shape_items = [item for item in plot.items if isinstance(item, AnnotatedCircle)] assert len(shape_items) > 0, "Should have at least one shape item" initial_width = shape_items[0].shape.shapeparam.line.width initial_color = shape_items[0].shape.shapeparam.line.color execenv.print(f"Initial shape: width={initial_width}, color={initial_color}") # Change temporarily the shape parameters new_param = ShapeParam() new_param.line.width = 5 new_param.line.color = "#00ff00" with Conf.view.ima_shape_param.temp(new_param): # Call refresh_all_shape_items() to apply new settings panel.plothandler.refresh_all_shape_items() # Get updated shape items shape_items_after = [ item for item in plot.items if isinstance(item, AnnotatedCircle) ] assert len(shape_items_after) > 0, ( "Should still have shape items after refresh" ) updated_width = shape_items_after[0].shape.shapeparam.line.width updated_color = shape_items_after[0].shape.shapeparam.line.color execenv.print( f"Updated shape: width={updated_width}, color={updated_color}" ) # Verify the shape was updated with new settings assert updated_width == 5, f"Expected width 5, got {updated_width}" assert updated_color == "#00ff00", ( f"Expected color #00ff00, got {updated_color}" ) execenv.print("✓ Shape items correctly refreshed after settings change\n") if __name__ == "__main__": test_ima_shape_param() test_ima_marker_param() test_refresh_shape_items_after_settings_change() DataLab-1.0.2/datalab/tests/features/common/roi_plotitem_unit_test.py000066400000000000000000000047261511411446000260260ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ ROI to plot item conversion unit tests """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import numpy as np import sigima.objects from guidata.qthelpers import qt_app_context from sigima.tests.data import ( create_multigaussian_image, create_paracetamol_signal, create_test_image_rois, create_test_signal_rois, ) from datalab.adapters_plotpy import create_adapter_from_object, plotitem_to_singleroi from datalab.env import execenv def __conversion_methods( roi: sigima.objects.SignalROI | sigima.objects.ImageROI, obj: sigima.objects.SignalObj | sigima.objects.ImageObj, ) -> None: """Test conversion methods for single ROI objects""" execenv.print(" test `to_plot_item` and `from_plot_item` methods: ", end="") single_roi = roi.get_single_roi(0) with qt_app_context(exec_loop=False): plot_item = create_adapter_from_object(single_roi).to_plot_item(obj) sroi_new = plotitem_to_singleroi(plot_item, obj) orig_coords = [float(val) for val in single_roi.get_physical_coords(obj)] new_coords = [float(val) for val in sroi_new.get_physical_coords(obj)] execenv.print(f"{orig_coords} --> {new_coords}") # Check that coordinates are close # (allowing for rounding applied during conversion) assert np.allclose(orig_coords, new_coords, rtol=1e-5, atol=1e-10) def test_signal_roi_plotitem_conversion() -> None: """Test signal ROIs conversion to/from plot items""" execenv.print("==============================================") execenv.print("Test signal ROIs conversion to/from plot items") execenv.print("==============================================") obj = create_paracetamol_signal() for roi in create_test_signal_rois(obj): __conversion_methods(roi, obj) def test_image_roi_plotitem_conversion() -> None: """Test image ROIs conversion to/from plot items""" execenv.print("==============================================") execenv.print("Test image ROIs conversion to/from plot items") execenv.print("==============================================") obj = create_multigaussian_image() for roi in create_test_image_rois(obj): __conversion_methods(roi, obj) if __name__ == "__main__": test_signal_roi_plotitem_conversion() test_image_roi_plotitem_conversion() DataLab-1.0.2/datalab/tests/features/common/roieditor_unit_test.py000066400000000000000000000101121511411446000253020ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ ROI editor unit test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import numpy as np from guidata.qthelpers import exec_dialog, qt_app_context from sigima.objects import ImageROI, create_image_roi, create_signal_roi from sigima.tests.data import create_multigaussian_image, create_paracetamol_signal from datalab.env import execenv from datalab.gui.roieditor import ImageROIEditor, SignalROIEditor from datalab.utils import qthelpers as qth def test_signal_roi_editor(screenshots: bool = False) -> None: """Test signal ROI editor""" cls = SignalROIEditor title = f"Testing {cls.__name__}" obj = create_paracetamol_signal() roi = create_signal_roi([36.4, 40.9], indices=False, title="Test ROI") obj.roi = roi with qt_app_context(exec_loop=False): execenv.print(title) roi_editor = cls(parent=None, obj=obj, mode="extract", size=(800, 600)) if screenshots: roi_editor.show() qth.grab_save_window(roi_editor) exec_dialog(roi_editor) def create_image_roi_example() -> ImageROI: """Create an example image ROI""" roi = create_image_roi("rectangle", [720, 720, 304, 304], title="Test ROI 1") roi.add_roi(create_image_roi("circle", [550, 650, 165], title="Test ROI 2")) roi.add_roi( create_image_roi( "polygon", [225, 75, 650, 175, 625, 475, 200, 675], title="Test ROI 3" ) ) return roi def test_image_roi_editor(screenshots: bool = False) -> None: """Test image ROI editor""" cls = ImageROIEditor title = f"Testing {cls.__name__}" obj = create_multigaussian_image() obj.roi = create_image_roi_example() with qt_app_context(exec_loop=False): execenv.print(title) for mode in ("extract", "apply"): execenv.print(f" mode={mode}") roi_editor = cls(parent=None, obj=obj, mode=mode, size=(800, 600)) if mode == "apply": # Clear the ROI roi_editor.remove_all_rois() if screenshots and mode == "extract": roi_editor.show() qth.grab_save_window(roi_editor) if exec_dialog(roi_editor): results = roi_editor.get_roieditor_results() if results is not None: edited_roi, modified = results if mode == "extract": # Test that the single ROIs are equal # pylint: disable=use-a-generator assert all( [ np.array_equal( sroi1.get_physical_coords(obj), sroi2.get_physical_coords(obj), ) for sroi1, sroi2 in zip( obj.roi.single_rois, edited_roi.single_rois ) ] ), "Single ROIs are not equal" execenv.print(" Single ROIs indice coordinates:") for sroi in edited_roi.single_rois: execenv.print( f" {sroi.title} ({sroi.__class__.__name__}):" ) c_i = [int(val) for val in sroi.get_indices_coords(obj)] c_p = [float(val) for val in sroi.get_physical_coords(obj)] execenv.print(f" Indices : {c_i}") execenv.print(f" Physical: {c_p}") else: # Test the use case where the ROI is cleared assert modified, "ROI is not modified" assert edited_roi.is_empty(), "ROI is not cleared" if __name__ == "__main__": test_signal_roi_editor(screenshots=True) test_image_roi_editor(screenshots=True) DataLab-1.0.2/datalab/tests/features/common/save_to_dir_app_test.py000066400000000000000000000140461511411446000254130ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Save to directory application test for screenshots: - Create signals and images - Open Save to directory dialog - Take screenshots for documentation """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import warnings from typing import TYPE_CHECKING import guidata.config as gcfg import guidata.dataset as gds from datalab.env import execenv from datalab.gui.panel.base import SaveToDirectoryGUIParam from datalab.tests import datalab_test_app_context, helpers from datalab.tests.features.common.add_metadata_unit_test import ( create_test_images, create_test_signals, ) if TYPE_CHECKING: from datalab.gui.main import DLMainWindow def __save_signals_to_directory(win: DLMainWindow, screenshot: bool = False) -> None: """Save signals to directory helper function.""" execenv.print("Save to directory signal application test:") panel = win.signalpanel # Add test signals to the panel for sig in create_test_signals(): panel.add_object(sig) # Select all signals panel.objview.select_objects([1, 2, 3]) # Get selected objects objs = panel.objview.get_sel_objects(include_groups=True) extensions = ["csv", "txt", "h5sig"] with helpers.WorkdirRestoringTempDir() as tmpdir: # Temporarily disable validation to allow creating SaveToDirectoryGUIParam # with an empty directory path by default old_mode = gcfg.get_validation_mode() gcfg.set_validation_mode(gcfg.ValidationMode.DISABLED) try: # Create and configure the Save to directory dialog with warnings.catch_warnings(): warnings.simplefilter("ignore", category=gds.DataItemValidationWarning) param = SaveToDirectoryGUIParam(objs, extensions) # Configure example save parameters param.directory = "" if screenshot else tmpdir param.basename = "{index:03d}_{title}" param.extension = ".csv" param.overwrite = False param.update_preview() execenv.print(f" Preview: {param.preview}") assert "s001: 001_Sine Wave.csv" in param.preview execenv.print(" ✓ Save to directory parameter configured correctly") # Edit the parameter to show the dialog execenv.print(" Opening Save to directory dialog...") with execenv.context(screenshot=screenshot): param.edit( parent=win, wordwrap=False, object_name="s_save_to_directory" ) # Note: We don't actually call panel.save_to_directory() here as we're just # testing the dialog display for screenshots finally: gcfg.set_validation_mode(old_mode) execenv.print("==> Signal application test OK") def __save_images_to_directory(win: DLMainWindow, screenshot: bool = False) -> None: """Save images to directory helper function.""" execenv.print("Save to directory image test:") panel = win.imagepanel # Add test images to the panel for img in create_test_images(): panel.add_object(img) # Select all images panel.objview.select_objects([1, 2, 3]) # Get selected objects objs = panel.objview.get_sel_objects(include_groups=True) extensions = ["h5ima", "tiff", "png", "jpg"] with helpers.WorkdirRestoringTempDir() as tmpdir: # Temporarily disable validation to allow creating SaveToDirectoryGUIParam # with an empty directory path by default old_mode = gcfg.get_validation_mode() gcfg.set_validation_mode(gcfg.ValidationMode.DISABLED) try: # Create and configure the Save to directory dialog with warnings.catch_warnings(): warnings.simplefilter("ignore", category=gds.DataItemValidationWarning) param = SaveToDirectoryGUIParam(objs, extensions) # Configure example save parameters param.directory = "" if screenshot else tmpdir param.basename = "{title}_{index:04d}" param.extension = ".png" param.overwrite = False param.update_preview() execenv.print(f" Preview: {param.preview}") assert "i001: Random Noise_0001.png" in param.preview execenv.print(" ✓ Save to directory parameter configured correctly") # Edit the parameter to show the dialog execenv.print(" Opening Save to directory dialog...") with execenv.context(screenshot=screenshot): param.edit( parent=win, wordwrap=False, object_name="i_save_to_directory" ) # Note: We don't actually call panel.save_to_directory() here as we're just # testing the dialog display for screenshots finally: gcfg.set_validation_mode(old_mode) execenv.print("==> Image application test OK") def test_save_to_directory_signals() -> None: """Test Save to directory feature for signals.""" with datalab_test_app_context() as win: __save_signals_to_directory(win) def test_save_to_directory_images() -> None: """Test Save to directory feature for images.""" with datalab_test_app_context() as win: __save_images_to_directory(win) def save_to_directory_screenshots(): """Generate save to directory screenshots.""" with execenv.context(unattended=True): with datalab_test_app_context() as win: execenv.print("Save to directory screenshots test:") __save_signals_to_directory(win, screenshot=True) __save_images_to_directory(win, screenshot=True) execenv.print("==> All screenshot tests completed") if __name__ == "__main__": # test_save_to_directory_signals() # test_save_to_directory_images() save_to_directory_screenshots() DataLab-1.0.2/datalab/tests/features/common/save_to_dir_unit_test.py000066400000000000000000000407221511411446000256120ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Unit tests for SaveToDirectoryGUIParam class. This module thoroughly tests the `SaveToDirectoryGUIParam` class from `datalab.gui.panel.base`, including its GUI-specific features like extension choices from the IO registry, preview generation, and help dialog integration. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code from __future__ import annotations import os import os.path as osp import guidata.config as gcfg import numpy as np import pytest from sigima.objects import create_signal from datalab.env import execenv from datalab.gui.panel.base import SaveToDirectoryGUIParam from datalab.tests import helpers from datalab.tests.features.common.add_metadata_unit_test import ( create_test_images, create_test_signals, ) class TestSaveToDirectoryGUIParam: """Test class for SaveToDirectoryGUIParam with proper setup/teardown.""" @pytest.fixture(autouse=True) def setup_validation(self): """Disable guidata validation during tests. This prevents directory validation issues. """ old_mode = gcfg.get_validation_mode() gcfg.set_validation_mode(gcfg.ValidationMode.DISABLED) yield gcfg.set_validation_mode(old_mode) def test_preview_generation(self) -> None: """Test preview generation feature of SaveToDirectoryGUIParam.""" execenv.print(f"{self.test_preview_generation.__doc__}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # Create test objects signals = create_test_signals() # Define extensions extensions = ["csv", "txt", "h5sig"] # Create GUI parameter instance p = SaveToDirectoryGUIParam(signals, extensions) # Set parameters p.directory = tmpdir p.basename = "{title}" p.extension = ".csv" # Update preview p.update_preview() # Check preview content expected_filenames = [ "1: Sine Wave.csv", "2: Cosine Wave.csv", "3: Exponential Decay.csv", ] preview_lines = p.preview.split("\n") assert len(preview_lines) == len(signals), ( f"Expected {len(signals)} preview lines, got {len(preview_lines)}" ) for i, expected in enumerate(expected_filenames): assert preview_lines[i] == expected, ( f"Expected '{expected}', got '{preview_lines[i]}'" ) execenv.print(f" ✓ Preview correctly shows: {preview_lines}") # Test preview with different pattern p.basename = "{index:03d}_{title}" p.update_preview() preview_lines = p.preview.split("\n") expected_filenames = [ "1: 001_Sine Wave.csv", "2: 002_Cosine Wave.csv", "3: 003_Exponential Decay.csv", ] for i, expected in enumerate(expected_filenames): assert preview_lines[i] == expected, ( f"Expected '{expected}', got '{preview_lines[i]}'" ) execenv.print(f" ✓ Preview with pattern: {preview_lines}") execenv.print(f"{self.test_preview_generation.__doc__}: OK") def test_filename_building(self) -> None: """Test filename building with various patterns via SaveToDirectoryGUIParam.""" execenv.print(f"{self.test_filename_building.__doc__}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # Create test signals with specific metadata signals = create_test_signals() extensions = ["csv", "txt"] # Test different basename patterns test_cases = [ ( "{title}", ["Sine Wave.csv", "Cosine Wave.csv", "Exponential Decay.csv"], ), ( "{index:03d}_{title}", [ "001_Sine Wave.csv", "002_Cosine Wave.csv", "003_Exponential Decay.csv", ], ), ( "signal_{count}_{index}", ["signal_3_1.csv", "signal_3_2.csv", "signal_3_3.csv"], ), ( "{metadata[type]}_signal", [ "sine_signal.csv", "cosine_signal.csv", "exponential_signal.csv", ], ), ] for basename_pattern, expected_files in test_cases: execenv.print(f" Testing pattern: {basename_pattern}") # Create GUI parameter p = SaveToDirectoryGUIParam(signals, extensions) # Configure parameters p.directory = tmpdir p.basename = basename_pattern p.extension = ".csv" p.overwrite = True # Build filenames filenames = p.build_filenames(signals) execenv.print(f" Generated filenames: {filenames}") # Verify expected filenames assert filenames == expected_files, ( f"Expected {expected_files}, got {filenames}" ) execenv.print(" ✓ Pattern matched expected filenames") execenv.print(f"{self.test_filename_building.__doc__}: OK") def test_collision_handling(self) -> None: """Test collision handling in SaveToDirectoryGUIParam.""" execenv.print(f"{self.test_collision_handling.__doc__}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # Create test signals with duplicate titles signals = [] x = np.linspace(0, 10, 100) for i in range(3): y = np.sin(x + i) signal = create_signal("Test Signal", x=x, y=y, metadata={"index": i}) signals.append(signal) extensions = ["h5sig"] # Create GUI parameter p = SaveToDirectoryGUIParam(signals, extensions) # Test collision handling without overwrite p.directory = tmpdir p.basename = "{title}" p.extension = ".h5sig" p.overwrite = False # Build filenames - should generate unique names filenames = p.build_filenames(signals) expected_files = [ "Test Signal.h5sig", "Test Signal_1.h5sig", "Test Signal_2.h5sig", ] assert filenames == expected_files, ( f"Expected {expected_files}, got {filenames}" ) execenv.print(f" ✓ Collision handling: {filenames}") # Create first file manually to test existing file collision first_file_path = osp.join(tmpdir, "Test Signal.h5sig") with open(first_file_path, "w", encoding="utf-8") as f: f.write("test") # Build filenames again - first file exists, should be skipped filenames = p.build_filenames(signals[:1]) expected_files = ["Test Signal_1.h5sig"] assert filenames == expected_files, ( f"Expected {expected_files} (avoiding existing file), got {filenames}" ) execenv.print(f" ✓ Existing file collision: {filenames}") # Test with overwrite enabled p.overwrite = True filenames = p.build_filenames(signals[:1]) expected_files = ["Test Signal.h5sig"] assert filenames == expected_files, ( f"Expected {expected_files} (overwrite enabled), got {filenames}" ) execenv.print(f" ✓ Overwrite mode: {filenames}") execenv.print(f"{self.test_collision_handling.__doc__}: OK") def test_metadata_access(self) -> None: """Test accessing metadata fields in basename patterns.""" execenv.print(f"{self.test_metadata_access.__doc__}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # Create signals with rich metadata signals = [] x = np.linspace(0, 10, 100) metadata_list = [ {"experiment": "exp001", "sensor": "A", "temperature": "25C"}, {"experiment": "exp002", "sensor": "B", "temperature": "30C"}, {"experiment": "exp003", "sensor": "C", "temperature": "35C"}, ] for i, metadata in enumerate(metadata_list): y = np.sin(x + i) signal = create_signal(f"Signal {i + 1}", x=x, y=y, metadata=metadata) signals.append(signal) extensions = ["csv"] # Create GUI parameter p = SaveToDirectoryGUIParam(signals, extensions) # Test accessing nested metadata in basename pattern p.directory = tmpdir p.basename = ( "{metadata[experiment]}_{metadata[sensor]}_{metadata[temperature]}" ) p.extension = ".csv" p.overwrite = False # Build and verify filenames filenames = p.build_filenames(signals) expected_files = [ "exp001_A_25C.csv", "exp002_B_30C.csv", "exp003_C_35C.csv", ] assert filenames == expected_files, ( f"Expected {expected_files}, got {filenames}" ) execenv.print(f" ✓ Metadata access in basename patterns: {filenames}") execenv.print(f"{self.test_metadata_access.__doc__}: OK") def test_filepath_obj_pairs(self) -> None: """Test generate_filepath_obj_pairs method.""" execenv.print(f"{self.test_filepath_obj_pairs.__doc__}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # Create test signals signals = create_test_signals() extensions = ["csv"] # Create GUI parameter p = SaveToDirectoryGUIParam(signals, extensions) p.directory = tmpdir p.basename = "{title}" p.extension = ".csv" p.overwrite = False # Generate filepath-object pairs pairs = list(p.generate_filepath_obj_pairs(signals)) # Verify we got the right number of pairs assert len(pairs) == len(signals), ( f"Expected {len(signals)} pairs, got {len(pairs)}" ) # Verify each pair expected_filenames = [ "Sine Wave.csv", "Cosine Wave.csv", "Exponential Decay.csv", ] for i, (filepath, obj) in enumerate(pairs): expected_path = osp.join(tmpdir, expected_filenames[i]) assert filepath == expected_path, ( f"Expected path '{expected_path}', got '{filepath}'" ) assert obj is signals[i], ( f"Expected object {signals[i].title}, got {obj.title}" ) execenv.print( f" ✓ Pair {i + 1}: {osp.basename(filepath)} -> {obj.title}" ) execenv.print(f"{self.test_filepath_obj_pairs.__doc__}: OK") def test_with_images(self) -> None: """Test SaveToDirectoryGUIParam with image objects.""" execenv.print(f"{self.test_with_images.__doc__}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # Create test images images = create_test_images() # Image extensions extensions = ["h5ima", "tiff", "png"] # Create GUI parameter p = SaveToDirectoryGUIParam(images, extensions) p.directory = tmpdir p.basename = "{index:02d}_{title}" p.extension = ".png" p.overwrite = False # Build filenames filenames = p.build_filenames(images) expected_files = [ "01_Random Noise.png", "02_Gaussian Pattern.png", "03_Checkerboard.png", ] assert filenames == expected_files, ( f"Expected {expected_files}, got {filenames}" ) execenv.print(f" ✓ Image filenames: {filenames}") # Test preview p.update_preview() preview_lines = p.preview.split("\n") expected_preview = [ "1: 01_Random Noise.png", "2: 02_Gaussian Pattern.png", "3: 03_Checkerboard.png", ] for i, expected in enumerate(expected_preview): assert preview_lines[i] == expected, ( f"Expected '{expected}', got '{preview_lines[i]}'" ) execenv.print(f" ✓ Image preview: {preview_lines}") execenv.print(f"{self.test_with_images.__doc__}: OK") def test_edge_cases(self) -> None: """Test SaveToDirectoryGUIParam edge cases.""" execenv.print(f"{self.test_edge_cases.__doc__}:") with helpers.WorkdirRestoringTempDir() as tmpdir: # Test with empty objects list p = SaveToDirectoryGUIParam([], ["csv"]) p.directory = tmpdir p.basename = "{title}" p.extension = ".csv" # Should handle empty list gracefully filenames = p.build_filenames([]) assert not filenames, f"Expected empty list, got {filenames}" execenv.print(" ✓ Handled empty objects list") # Update preview with empty list p.update_preview() assert p.preview == "", f"Expected empty preview, got '{p.preview}'" execenv.print(" ✓ Empty preview is blank") # Test with signals having special characters in titles signals = [] x = np.linspace(0, 10, 100) y = np.sin(x) special_titles = [ "Signal with spaces", "Signal_with_underscores", "Signal-with-dashes", ] for title in special_titles: signal = create_signal(title, x=x, y=y) signals.append(signal) p = SaveToDirectoryGUIParam(signals, ["csv"]) p.directory = tmpdir p.basename = "{title}" p.extension = ".csv" # Test filename generation with special characters filenames = p.build_filenames(signals) execenv.print(f" Filenames with special chars: {filenames}") # All filenames should be valid for filename in filenames: assert "/" not in filename and "\\" not in filename, ( f"Invalid filename: {filename}" ) execenv.print(" ✓ Handled special characters in titles") # Test with very long directory path long_subdir = "a" * 50 long_dir = osp.join(tmpdir, long_subdir) os.makedirs(long_dir, exist_ok=True) p.directory = long_dir p.basename = "test" p.extension = ".csv" # Should handle long paths pairs = list(p.generate_filepath_obj_pairs(signals[:1])) expected_path = osp.join(long_dir, "test.csv") assert pairs[0][0] == expected_path, ( f"Expected path '{expected_path}', got '{pairs[0][0]}'" ) execenv.print(" ✓ Handled long directory path") execenv.print(f"{self.test_edge_cases.__doc__}: OK") def test_help_button(self) -> None: """Test help button callback of SaveToDirectoryGUIParam.""" execenv.print(f"{self.test_help_button.__doc__}:") # Create GUI parameter signals = create_test_signals() p = SaveToDirectoryGUIParam(signals, ["csv"]) # The help button callback should not raise an error # Note: We can't fully test the dialog display in automated tests, # but we can verify the callback exists and is callable assert hasattr(p, "on_button_click"), ( "GUI param should have on_button_click method" ) execenv.print(" ✓ Help button callback exists") # Verify the help callback is properly configured # (In a real GUI context, this would open a dialog) execenv.print(" ✓ Help callback is callable") execenv.print(f"{self.test_help_button.__doc__}: OK") if __name__ == "__main__": pytest.main([__file__, "-v"]) DataLab-1.0.2/datalab/tests/features/common/stat_app_test.py000066400000000000000000000022231511411446000240620ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Statistics test Testing the following: - Create a signal - Compute statistics on signal and show results - Create an image - Compute statistics on image and show results """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from sigima.tests.common.stat_unit_test import ( create_reference_image, create_reference_signal, ) from datalab.tests import datalab_test_app_context, take_plotwidget_screenshot def test_stat_app(): """Run statistics application test scenario""" with datalab_test_app_context() as win: # === Signal statistics test === panel = win.signalpanel panel.add_object(create_reference_signal()) take_plotwidget_screenshot(panel, "stat_test") panel.processor.run_feature("stats") # === Image statistics test === panel = win.imagepanel panel.add_object(create_reference_image()) take_plotwidget_screenshot(panel, "stat_test") panel.processor.run_feature("stats") if __name__ == "__main__": test_stat_app() DataLab-1.0.2/datalab/tests/features/common/stats_tools_unit_test.py000066400000000000000000000050031511411446000256630ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Custom curve and image stats tool unit test. PlotPy's statistics tools (`plotpy.tools.XCurveStatsTool`, `plotpy.tools.YCurveStatsTool`, and `plotpy.tools.ImageStatsTool` are customized in `datalab.gui.docks` module). """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import numpy as np import plotpy from guidata.qthelpers import exec_dialog, qt_app_context from packaging.version import Version from plotpy.constants import PlotType from plotpy.tests.unit.utils import drag_mouse from plotpy.tools import CurveStatsTool, ImageStatsTool, YRangeCursorTool from qtpy import QtWidgets as QW from sigima.objects import ImageObj, SignalObj from sigima.tests.data import create_multigaussian_image, create_paracetamol_signal from datalab.adapters_plotpy import create_adapter_from_object from datalab.gui.docks import DataLabPlotWidget def simulate_stats_tool( plot_type: PlotType, obj: SignalObj | ImageObj, x_path: np.ndarray, y_path: np.ndarray, ) -> None: """Simulate stats tool with a custom signal or image.""" widget = DataLabPlotWidget(plot_type) plot = widget.get_plot() item = create_adapter_from_object(obj).make_item() plot.add_item(item) plot.set_active_item(item) item.unselect() if plot_type == PlotType.CURVE: classes = [CurveStatsTool, YRangeCursorTool] else: classes = [ImageStatsTool] for klass in classes: stattool = widget.get_manager().get_tool(klass) stattool.activate() if Version(plotpy.__version__) < Version("2.4"): qapp = QW.QApplication.instance() drag_mouse(widget, qapp, x_path, y_path) else: drag_mouse(widget, x_path, y_path) return widget def test_stats_tool() -> None: """Test `XCurveStatsTool` with a custom signal.""" sig = create_paracetamol_signal() ima = create_multigaussian_image() with qt_app_context(): dlg = QW.QDialog() dlg.setWindowTitle("Stats Tool Test") dlg.resize(1200, 600) swidget = simulate_stats_tool(PlotType.CURVE, sig, [0.01, 0.02], [0.7, 0.9]) iwidget = simulate_stats_tool(PlotType.IMAGE, ima, [0.2, 0.8], [0.9, 0.95]) hlayout = QW.QHBoxLayout() hlayout.addWidget(swidget) hlayout.addWidget(iwidget) dlg.setLayout(hlayout) exec_dialog(dlg) if __name__ == "__main__": test_stats_tool() DataLab-1.0.2/datalab/tests/features/common/table_results_app_test.py000066400000000000000000000030751511411446000257650ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Result properties application test """ # guitest: show from __future__ import annotations import numpy as np from sigima.objects import NormalDistribution1DParam from sigima.tests import data as test_data from datalab.adapters_metadata.table_adapter import TableAdapter from datalab.tests import datalab_test_app_context def create_image_with_table_results(): """Create test image with table results""" image = test_data.create_multigaussian_image() for table in test_data.generate_table_results(): TableAdapter(table).add_to(image) return image def test_table_results(): """Result properties application test""" obj1 = test_data.create_sincos_image() obj2 = create_image_with_table_results() with datalab_test_app_context() as win: panel = win.signalpanel noiseparam = NormalDistribution1DParam() for sigma in np.linspace(0.0, 0.5, 11): noiseparam.sigma = sigma sig = test_data.create_noisy_signal(noiseparam=noiseparam) panel.add_object(sig) panel.processor.run_feature("dynamic_parameters") panel.processor.run_feature("contrast") panel.objview.selectAll() panel.show_results() panel.plot_results() win.set_current_panel("image") panel = win.imagepanel for obj in (obj1, obj2): panel.add_object(obj) panel.show_results() panel.plot_results() if __name__ == "__main__": test_table_results() DataLab-1.0.2/datalab/tests/features/common/textimport_unit_test.py000066400000000000000000000124021511411446000255250ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Import wizard test """ # guitest: show import numpy as np from guidata.dataset import update_dataset from guidata.qthelpers import exec_dialog, qt_app_context from qtpy import QtWidgets as QW from sigima.objects import ImageObj, SignalObj from datalab.env import execenv from datalab.tests import helpers from datalab.widgets.textimport import ImageParam, SignalParam, TextImportWizard def file_to_clipboard(filename: str) -> None: """Copy file content to clipboard""" for encoding in ("utf-8", "latin-1"): try: with open(filename, "r", encoding=encoding) as file: text = file.read() QW.QApplication.clipboard().setText(text) return except UnicodeDecodeError: pass TEST_SIGNAL_PARAM = SignalParam.create( xlabel="X Signal axis", ylabel="Y Signal axis", xunit="X Signal unit", yunit="Y Signal unit", ) TEST_IMAGE_PARAM = ImageParam.create( xlabel="X Image axis", ylabel="Y Image axis", zlabel="Z Image axis", xunit="X Image unit", yunit="Y Image unit", zunit="Z Image unit", ) def test_import_wizard(): """Test the import wizard""" with qt_app_context(): for destination, fname, otype in ( ("image", "fiber.txt", ImageObj), ("signal", "multiple_curves.csv", SignalObj), ("signal", "paracetamol.txt", SignalObj), ("signal", "spectrum.mca", SignalObj), ): path = helpers.get_test_fnames(fname)[0] if not execenv.unattended: # Do not test clipboard in unattended mode, would fail: # - Windows: OleSetClipboard: Failed to set mime data (text/plain) # on clipboard: COM error 0xffffffff800401d0 # - Linux: QXcbClipboard: Unable to receive an event from the clipboard # manager in a reasonable time file_to_clipboard(path) wizard = TextImportWizard(destination=destination) if execenv.unattended: wizard.show() srcpge = wizard.source_page # `SourcePage` srcpge.param.path = path srcpge.param_widget.get() wizard.go_to_next_page() datapge = wizard.data_page # `DataPreviewPage` n_objs = 1 if destination == "image": datapge.param.dtype_str = "uint8" else: datapge.param.dtype_str = "float32" if fname == "fiber.txt": datapge.param.delimiter_choice = " " elif fname == "multiple_curves.csv": datapge.param.delimiter_choice = ";" datapge.param.skip_rows = 1 n_objs = 5 elif fname == "spectrum.mca": datapge.param.skip_rows = 18 datapge.param.max_rows = 2048 datapge.param.header = None datapge.param.first_col_is_x = False else: datapge.param.skip_rows = 10 datapge.param_widget.get() datapge.update_preview() wizard.go_to_next_page() # Go to `GraphicalRepresentationPage` wizard.go_to_previous_page() # For test purpose only wizard.go_to_next_page() # Go to `GraphicalRepresentationPage` labels_page = wizard.labels_page # `LabelsPage` if destination == "image": assert isinstance(labels_page.param, ImageParam) update_dataset(labels_page.param, TEST_IMAGE_PARAM) else: assert isinstance(labels_page.param, SignalParam) update_dataset(labels_page.param, TEST_SIGNAL_PARAM) wizard.go_to_next_page() # Go to `LabelsPage` wizard.accept() objs = wizard.get_objs() assert len(objs) == n_objs assert isinstance(objs[0], otype) # Check that the parameters are set correctly for obj in objs: if isinstance(obj, ImageObj): assert obj.data.dtype == np.uint8 assert obj.xlabel == TEST_IMAGE_PARAM.xlabel assert obj.ylabel == TEST_IMAGE_PARAM.ylabel assert obj.zlabel == TEST_IMAGE_PARAM.zlabel assert obj.xunit == TEST_IMAGE_PARAM.xunit assert obj.yunit == TEST_IMAGE_PARAM.yunit assert obj.zunit == TEST_IMAGE_PARAM.zunit elif isinstance(obj, SignalObj): assert obj.data.dtype == np.float32 assert obj.xlabel == TEST_SIGNAL_PARAM.xlabel assert obj.ylabel == TEST_SIGNAL_PARAM.ylabel assert obj.xunit == TEST_SIGNAL_PARAM.xunit assert obj.yunit == TEST_SIGNAL_PARAM.yunit elif exec_dialog(wizard): for obj in wizard.get_objs(): execenv.print(obj) if __name__ == "__main__": test_import_wizard() DataLab-1.0.2/datalab/tests/features/common/uuid_preservation_test.py000066400000000000000000000277721511411446000260360ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Test UUID preservation when reopening workspace This test verifies that when a workspace is saved to HDF5, cleared, and reopened, the object UUIDs are preserved so that processing parameter references (source_uuid, source_uuids) remain valid. This ensures features like "Show source" and "Recompute" continue to work after reopening a workspace. Related issue: Processing tab features don't work after reopening workspace because UUIDs are regenerated. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... import os.path as osp from guidata.qthelpers import qt_app_context from sigima.params import GaussianParam from datalab.gui.processor.base import PROCESSING_PARAMETERS_OPTION from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context, helpers def test_uuid_preservation_signals(): """Test that signal UUIDs are preserved when reopening workspace""" with qt_app_context(): with helpers.WorkdirRestoringTempDir() as tmpdir: with datalab_test_app_context(console=False) as win: panel = win.signalpanel processor = panel.processor # Step 1: Create a test signal panel.new_object() signal = panel.objview.get_current_object() assert signal is not None original_signal_uuid = get_uuid(signal) # Step 2: Apply a processing operation with parameters param = GaussianParam.create(sigma=2.0) processor.compute_1_to_1( processor.get_feature("gaussian_filter").function, param=param, title="Gaussian filter", ) # Step 3: Get the filtered signal and verify metadata filtered_sig = panel.objview.get_current_object() assert filtered_sig is not None original_filtered_uuid = get_uuid(filtered_sig) # Verify processing metadata was stored correctly assert ( PROCESSING_PARAMETERS_OPTION in filtered_sig.get_metadata_options() ) option_dict = filtered_sig.get_metadata_option( PROCESSING_PARAMETERS_OPTION ) assert option_dict["source_uuid"] == original_signal_uuid assert option_dict["func_name"] == "gaussian_filter" # Step 4: Save workspace to HDF5 fname = osp.join(tmpdir, "test_uuid_preservation.h5") win.save_to_h5_file(fname) # Step 5: Remove all objects (clear workspace) panel.remove_all_objects() assert len(panel.objmodel) == 0 # Step 6: Reopen workspace win.open_h5_files([fname], import_all=True, reset_all=True) # Step 7: Verify UUIDs are preserved signal_after = panel.objmodel.get_object_from_number(1) filtered_sig_after = panel.objmodel.get_object_from_number(2) signal_uuid_after = get_uuid(signal_after) filtered_uuid_after = get_uuid(filtered_sig_after) # CRITICAL: UUIDs must be preserved after reload assert signal_uuid_after == original_signal_uuid, ( f"Signal UUID changed after reload: " f"{original_signal_uuid} -> {signal_uuid_after}" ) assert filtered_uuid_after == original_filtered_uuid, ( f"Filtered signal UUID changed after reload: " f"{original_filtered_uuid} -> {filtered_uuid_after}" ) # Step 8: Verify processing parameters still reference correct source option_dict_after = filtered_sig_after.get_metadata_option( PROCESSING_PARAMETERS_OPTION ) assert option_dict_after["source_uuid"] == signal_uuid_after, ( f"Processing parameter source_uuid doesn't match: " f"{option_dict_after['source_uuid']} != {signal_uuid_after}" ) # Step 9: Verify "Show source" feature would work # (by checking that the source object can be found) source_obj = win.find_object_by_uuid(option_dict_after["source_uuid"]) assert source_obj is signal_after, ( "Cannot find source object by UUID - " "'Show source' feature would fail" ) def test_uuid_preservation_images(): """Test that image UUIDs are preserved when reopening workspace""" with qt_app_context(): with helpers.WorkdirRestoringTempDir() as tmpdir: with datalab_test_app_context(console=False) as win: panel = win.imagepanel processor = panel.processor # Step 1: Create a test image panel.new_object() image = panel.objview.get_current_object() assert image is not None original_image_uuid = get_uuid(image) # Step 2: Apply a processing operation param = GaussianParam.create(sigma=1.5) processor.compute_1_to_1( processor.get_feature("gaussian_filter").function, param=param, title="Gaussian filter", ) # Step 3: Get the filtered image and verify metadata filtered_img = panel.objview.get_current_object() assert filtered_img is not None original_filtered_uuid = get_uuid(filtered_img) # Verify processing metadata option_dict = filtered_img.get_metadata_option( PROCESSING_PARAMETERS_OPTION ) assert option_dict["source_uuid"] == original_image_uuid # Step 4: Save, clear, and reopen workspace fname = osp.join(tmpdir, "test_uuid_preservation_images.h5") win.save_to_h5_file(fname) panel.remove_all_objects() win.open_h5_files([fname], import_all=True, reset_all=True) # Step 5: Verify UUIDs are preserved image_after = panel.objmodel.get_object_from_number(1) filtered_img_after = panel.objmodel.get_object_from_number(2) assert get_uuid(image_after) == original_image_uuid assert get_uuid(filtered_img_after) == original_filtered_uuid # Step 6: Verify processing parameters still work option_dict_after = filtered_img_after.get_metadata_option( PROCESSING_PARAMETERS_OPTION ) assert option_dict_after["source_uuid"] == get_uuid(image_after) source_obj = win.find_object_by_uuid(option_dict_after["source_uuid"]) assert source_obj is image_after def test_uuid_regeneration_on_import(): """Test that UUIDs are regenerated only when conflicts exist during import""" with qt_app_context(): with helpers.WorkdirRestoringTempDir() as tmpdir: with datalab_test_app_context(console=False) as win: panel = win.signalpanel # Step 1: Create and save a signal panel.new_object() signal1 = panel.objview.get_current_object() uuid1 = get_uuid(signal1) fname = osp.join(tmpdir, "test_import.h5") win.save_to_h5_file(fname) # Step 2: Import the same file (reset_all=False, import_all=True) # This should regenerate UUID only for the conflicting object win.open_h5_files([fname], import_all=True, reset_all=False) # Step 3: Verify we now have 2 signals with different UUIDs assert len(panel.objmodel) == 2 signal1_after = panel.objmodel.get_object_from_number(1) signal2_imported = panel.objmodel.get_object_from_number(2) uuid1_after = get_uuid(signal1_after) uuid2 = get_uuid(signal2_imported) # Original signal should keep its UUID assert uuid1_after == uuid1 # Imported signal should have a NEW UUID (different from original) assert uuid2 != uuid1, ( "Imported signal should have a new UUID, " f"but got same as original: {uuid2} == {uuid1}" ) # Step 4: Import the same file again win.open_h5_files([fname], import_all=True, reset_all=False) # Step 5: Verify we now have 3 signals, all with different UUIDs assert len(panel.objmodel) == 3 signal3_imported = panel.objmodel.get_object_from_number(3) uuid3 = get_uuid(signal3_imported) # Third signal should have yet another different UUID assert uuid3 != uuid1 assert uuid3 != uuid2 assert len({uuid1, uuid2, uuid3}) == 3, ( "All three signals should have unique UUIDs" ) def test_uuid_preservation_empty_workspace(): """Test that UUIDs are preserved when opening HDF5 in empty workspace""" with qt_app_context(): with helpers.WorkdirRestoringTempDir() as tmpdir: # Create and save a workspace with processing history with datalab_test_app_context(console=False) as win1: panel = win1.signalpanel processor = panel.processor # Create signal and apply processing panel.new_object() signal = panel.objview.get_current_object() original_uuid = get_uuid(signal) param = GaussianParam.create(sigma=2.0) processor.compute_1_to_1( processor.get_feature("gaussian_filter").function, param=param, title="Gaussian filter", ) filtered_sig = panel.objview.get_current_object() original_filtered_uuid = get_uuid(filtered_sig) # Save workspace fname = osp.join(tmpdir, "test_empty_workspace.h5") win1.save_to_h5_file(fname) # Open the file in a NEW empty workspace (simulating startup) with datalab_test_app_context(console=False) as win2: panel = win2.signalpanel # Workspace is empty - UUIDs should be preserved (reset_all=True) # Note: reset_all is None, so it should auto-detect empty workspace win2.open_h5_files([fname], import_all=True, reset_all=None) # Verify UUIDs are preserved signal_loaded = panel.objmodel.get_object_from_number(1) filtered_loaded = panel.objmodel.get_object_from_number(2) assert get_uuid(signal_loaded) == original_uuid, ( "Signal UUID should be preserved when opening in empty workspace" ) assert get_uuid(filtered_loaded) == original_filtered_uuid, ( "Filtered signal UUID should be preserved " "when opening in empty workspace" ) # Verify processing parameters still work option_dict = filtered_loaded.get_metadata_option( PROCESSING_PARAMETERS_OPTION ) assert option_dict["source_uuid"] == get_uuid(signal_loaded) source_obj = win2.find_object_by_uuid(option_dict["source_uuid"]) assert source_obj is signal_loaded if __name__ == "__main__": test_uuid_preservation_signals() test_uuid_preservation_images() test_uuid_regeneration_on_import() test_uuid_preservation_empty_workspace() print("All UUID preservation tests passed!") DataLab-1.0.2/datalab/tests/features/common/worker_unit_test.py000066400000000000000000000347701511411446000246330ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Worker and WorkerStateMachine Unit Tests ======================================== This module contains comprehensive unit tests for the Worker class and WorkerStateMachine class in DataLab's processor module. Tests cover: 1. State machine functionality independently from Worker class 2. Worker class nominal operations 3. Exception handling in computations 4. Process pool restart mechanism for long-running/cancelled computations """ # pylint: disable=protected-access import time from unittest.mock import Mock, patch import pytest from guidata.qthelpers import qt_app_context from qtpy import QtWidgets as QW import datalab.gui.processor.base as base_module from datalab.gui.processor.base import Worker, WorkerState, WorkerStateMachine from datalab.gui.processor.catcher import CompOut class TestWorkerStateMachine: """Test suite for WorkerStateMachine class - independent from Worker class.""" def test_initial_state(self): """Test that state machine starts in IDLE state.""" sm = WorkerStateMachine() assert sm.current_state == WorkerState.IDLE def test_valid_transitions(self): """Test all valid state transitions.""" sm = WorkerStateMachine() # IDLE -> STARTING sm.transition_to(WorkerState.STARTING) assert sm.current_state == WorkerState.STARTING # STARTING -> RUNNING sm.transition_to(WorkerState.RUNNING) assert sm.current_state == WorkerState.RUNNING # RUNNING -> FINISHED sm.transition_to(WorkerState.FINISHED) assert sm.current_state == WorkerState.FINISHED # FINISHED -> IDLE (complete cycle) sm.transition_to(WorkerState.IDLE) assert sm.current_state == WorkerState.IDLE def test_same_state_transition_allowed(self): """Test that transitioning to the same state is a no-op.""" sm = WorkerStateMachine() # Should not raise exception sm.transition_to(WorkerState.IDLE) assert sm.current_state == WorkerState.IDLE # Same for other states sm.transition_to(WorkerState.STARTING) sm.transition_to(WorkerState.STARTING) assert sm.current_state == WorkerState.STARTING def test_invalid_transitions(self): """Test that invalid transitions raise ValueError.""" sm = WorkerStateMachine() # IDLE can only go to STARTING with pytest.raises( ValueError, match="Invalid transition from WorkerState.IDLE to WorkerState.RUNNING", ): sm.transition_to(WorkerState.RUNNING) with pytest.raises( ValueError, match="Invalid transition from WorkerState.IDLE to WorkerState.FINISHED", ): sm.transition_to(WorkerState.FINISHED) # STARTING can only go to RUNNING sm.transition_to(WorkerState.STARTING) with pytest.raises( ValueError, match="Invalid transition from WorkerState.STARTING to WorkerState.IDLE", ): sm.transition_to(WorkerState.IDLE) with pytest.raises(ValueError, match="Invalid transition.*STARTING.*FINISHED"): sm.transition_to(WorkerState.FINISHED) def test_reset_to_idle_from_any_state(self): """Test that reset_to_idle works from any state.""" sm = WorkerStateMachine() # Test from each state states_to_test = [ WorkerState.IDLE, WorkerState.STARTING, WorkerState.RUNNING, WorkerState.FINISHED, ] for state in states_to_test: # Force state (bypassing transition validation for test) sm._current_state = state sm.reset_to_idle() assert sm.current_state == WorkerState.IDLE # Module-level functions for pickle compatibility in multiprocessing def dummy_successful_computation(x: int, y: int) -> int: """Simple computation that returns sum of two numbers.""" return x + y def dummy_failing_computation() -> None: """Computation that raises an exception.""" raise ValueError("Test exception from computation") def dummy_infinite_computation() -> None: """Computation that runs forever (until process is killed).""" while True: time.sleep(0.1) # Simulate work class TestWorker: """Test suite for Worker class functionality.""" def setup_method(self): """Setup for each test method - ensure clean pool state.""" # Clean up any existing pool Worker.terminate_pool(wait=False) Worker.create_pool() def teardown_method(self): """Cleanup after each test method.""" # Clean up pool to avoid interference between tests Worker.terminate_pool(wait=False) def test_worker_initial_state(self): """Test worker starts in correct initial state.""" worker = Worker() assert worker.state_machine.current_state == WorkerState.IDLE assert worker.asyncresult is None def test_worker_pool_management(self): """Test pool creation and termination.""" # Test static methods work Worker.terminate_pool() Worker.create_pool() # Verify pool exists by checking global POOL variable assert base_module.POOL is not None # Test termination Worker.terminate_pool() # Note: POOL global variable is set to None in terminate_pool def test_nominal_computation_case(self): """Test Case 2a: Nominal case - start computation, wait, get result.""" with qt_app_context(): worker = Worker() # Start computation worker.run(dummy_successful_computation, (10, 5)) assert worker.state_machine.current_state == WorkerState.RUNNING # Wait for completion while not worker.is_computation_finished(): QW.QApplication.processEvents() time.sleep(0.001) # Small sleep to avoid busy waiting # Should be finished assert worker.state_machine.current_state == WorkerState.FINISHED assert worker.has_result_available() # Get result result = worker.get_result() assert isinstance(result, CompOut) assert result.result == 15 # 10 + 5 assert result.error_msg is None assert worker.state_machine.current_state == WorkerState.IDLE def test_computation_exception_case(self): """Test Case 2b: Computation raises an exception.""" # Note: In unattended test mode, exceptions are re-raised by wng_err_func # This test validates that the worker can handle exceptions that bubble up with qt_app_context(): worker = Worker() # Start computation that will fail worker.run(dummy_failing_computation, ()) assert worker.state_machine.current_state == WorkerState.RUNNING # In unattended mode, the exception will be raised when getting result # Wait for computation to "complete" (which means ready to raise exception) while not worker.is_computation_finished(): QW.QApplication.processEvents() time.sleep(0.001) # Should be marked as finished (even though it will raise on get_result) assert worker.state_machine.current_state == WorkerState.FINISHED assert worker.has_result_available() # In unattended mode, get_result will raise the original exception with pytest.raises(ValueError, match="Test exception from computation"): worker.get_result() # After exception, should still be back to IDLE (cleanup happened) assert worker.state_machine.current_state == WorkerState.IDLE def test_computation_cancellation_and_pool_restart(self): """Test Case 2c: Long computation with cancellation and pool restart.""" with qt_app_context(): worker = Worker() # Start infinite computation worker.run(dummy_infinite_computation, ()) assert worker.state_machine.current_state == WorkerState.RUNNING # Let it run briefly to ensure it's actually started start_time = time.time() while time.time() - start_time < 0.1: # 100ms QW.QApplication.processEvents() time.sleep(0.001) # Verify it's still running (not finished) if worker.is_computation_finished(): pytest.fail("Infinite computation finished unexpectedly") # Simulate user cancellation (like progress dialog cancel) worker.restart() assert worker.state_machine.current_state == WorkerState.IDLE assert worker.asyncresult is None # Verify pool was restarted by running a normal computation worker.run(dummy_successful_computation, (20, 22)) assert worker.state_machine.current_state == WorkerState.RUNNING # Wait for this computation to complete while not worker.is_computation_finished(): QW.QApplication.processEvents() time.sleep(0.001) # Should complete successfully, proving pool restart worked assert worker.state_machine.current_state == WorkerState.FINISHED result = worker.get_result() assert result.result == 42 # 20 + 22 assert result.error_msg is None def test_worker_restart_from_various_states(self): """Test worker.restart() behavior from different states.""" with qt_app_context(): worker = Worker() # Test restart from IDLE (should be no-op) assert worker.state_machine.current_state == WorkerState.IDLE worker.restart() assert worker.state_machine.current_state == WorkerState.IDLE # Test restart from STARTING state with patch.object(worker.state_machine, "transition_to"): # Force STARTING state worker.state_machine._current_state = WorkerState.STARTING worker.asyncresult = Mock() # Simulate asyncresult exists worker.restart() assert worker.asyncresult is None assert worker.state_machine.current_state == WorkerState.IDLE # Test restart from FINISHED state worker.state_machine._current_state = WorkerState.FINISHED worker.asyncresult = Mock() worker.restart() assert worker.asyncresult is None assert worker.state_machine.current_state == WorkerState.IDLE def test_worker_close(self): """Test worker.close() method.""" worker = Worker() # Test close with no active computation worker.close() # Should not raise # Test close with active computation (simulate) worker.asyncresult = Mock() worker.close() # Should not raise def test_error_conditions(self): """Test various error conditions.""" worker = Worker() # Test starting computation when not in IDLE state worker.state_machine._current_state = WorkerState.RUNNING with pytest.raises( ValueError, match="Cannot start computation from WorkerState.RUNNING state" ): worker.run(dummy_successful_computation, (1, 2)) # Reset to proper state worker.state_machine.reset_to_idle() # Test getting result when not in FINISHED state with pytest.raises( ValueError, match="Cannot get result from WorkerState.IDLE state" ): worker.get_result() # Test has_result_available in various states assert not worker.has_result_available() # IDLE worker.state_machine._current_state = WorkerState.RUNNING assert not worker.has_result_available() # RUNNING worker.state_machine._current_state = WorkerState.FINISHED assert worker.has_result_available() # FINISHED def test_restart_pool_method_integration(self): """Test that restart_pool is properly integrated with restart method.""" with qt_app_context(): worker = Worker() # Start an infinite computation worker.run(dummy_infinite_computation, ()) # Let it run briefly start_time = time.time() while time.time() - start_time < 0.05: # 50ms QW.QApplication.processEvents() time.sleep(0.001) # Force RUNNING state and call restart (which should use restart_pool) assert worker.state_machine.current_state == WorkerState.RUNNING worker.restart() # Should be back to IDLE assert worker.state_machine.current_state == WorkerState.IDLE # Pool should be functional - test with a simple computation worker.run(dummy_successful_computation, (100, 200)) while not worker.is_computation_finished(): QW.QApplication.processEvents() time.sleep(0.001) result = worker.get_result() assert result.result == 300 # Module-level function for pickle compatibility def simple_multiplication(a: int, b: int) -> int: """Simple computation that multiplies two numbers.""" return a * b def test_worker_and_state_machine_integration(): """Integration test ensuring Worker and WorkerStateMachine work together.""" with qt_app_context(): # Ensure clean pool Worker.terminate_pool(wait=False) Worker.create_pool() try: worker = Worker() # Test complete workflow assert worker.state_machine.current_state == WorkerState.IDLE # Start computation worker.run(simple_multiplication, (6, 7)) assert worker.state_machine.current_state == WorkerState.RUNNING # Wait and check states while not worker.is_computation_finished(): QW.QApplication.processEvents() time.sleep(0.001) assert worker.state_machine.current_state == WorkerState.FINISHED # Get result and verify state transition result = worker.get_result() assert result.result == 42 # 6 * 7 assert worker.state_machine.current_state == WorkerState.IDLE finally: # Cleanup Worker.terminate_pool(wait=False) if __name__ == "__main__": # Run specific test for debugging pytest.main([__file__, "-v"]) DataLab-1.0.2/datalab/tests/features/control/000077500000000000000000000000001511411446000210275ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/features/control/__init__.py000066400000000000000000000000021511411446000231300ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/features/control/connect_dialog.py000066400000000000000000000013721511411446000243540ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Remote client connection dialog example """ # guitest: show,skip from guidata.qthelpers import qt_app_context from qtpy import QtWidgets as QW from datalab.control.proxy import RemoteProxy from datalab.widgets.connection import ConnectionDialog def test_dialog(): """Test connection dialog""" proxy = RemoteProxy(autoconnect=False) with qt_app_context(): dlg = ConnectionDialog(proxy.connect) if dlg.exec(): QW.QMessageBox.information(None, "Connection", "Successfully connected") else: QW.QMessageBox.critical(None, "Connection", "Connection failed") if __name__ == "__main__": test_dialog() DataLab-1.0.2/datalab/tests/features/control/embedded1_unit_test.py000066400000000000000000000240761511411446000253220ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Application embedded test 1 DataLab main window is destroyed when closing application. It is rebuilt from scratch when reopening application. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import abc from guidata.qthelpers import ( get_std_icon, qt_app_context, win32_fix_title_bar_background, ) from guidata.widgets.codeeditor import CodeEditor from qtpy import QtWidgets as QW from sigima.objects import NewImageParam from sigima.tests import data as test_data from datalab.config import _ from datalab.gui.main import DLMainWindow from datalab.tests.features.macro.macroeditor_unit_test import get_macro_example_path class HostWidget(QW.QWidget): """Host widget: menu with action buttons, log viewer""" def __init__(self, parent=None): super().__init__(parent) self.button_layout = QW.QVBoxLayout() self.logwidget = CodeEditor(self) self.logwidget.setMinimumWidth(500) grid_layout = QW.QGridLayout() grid_layout.addLayout(self.button_layout, 0, 0) grid_layout.addWidget(self.logwidget, 0, 1) self.setLayout(grid_layout) def log(self, message): """Log message""" self.logwidget.appendPlainText(message) def add_spacing(self, spacing: int) -> None: """Add spacing to button box""" self.button_layout.addSpacing(spacing) def add_label(self, text: str) -> None: """Add label to button box""" self.button_layout.addWidget(QW.QLabel(text)) def add_widget(self, obj: QW.QWidget, spacing_before: int = 0) -> None: """Add widget (QWidget) to button box""" if spacing_before > 0: self.add_spacing(spacing_before) self.button_layout.addWidget(obj) def add_button(self, title, slot, spacing_before=0, icon=None): """Add button""" btn = QW.QPushButton(title) if icon is not None: btn.setIcon(get_std_icon(icon)) btn.clicked.connect(lambda _checked=False: slot()) self.add_widget(btn, spacing_before=spacing_before) return btn def add_stretch(self): """Add stretch to button box""" self.button_layout.addStretch() class AbstractClientWindowMeta(type(QW.QMainWindow), abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class AbstractClientWindow(QW.QMainWindow, metaclass=AbstractClientWindowMeta): """Abstract client window, to embed DataLab or connect to it""" PURPOSE = None INIT_BUTTON_LABEL = None SIG_TITLES = ("Oscilloscope", "Digitizer", "Radiometer", "Voltmeter", "Sensor") IMA_TITLES = ( "Camera", "Streak Camera", "Image Scanner", "Laser Beam Profiler", "Gated Imaging Camera", ) def __init__(self): super().__init__() win32_fix_title_bar_background(self) self.setWindowTitle(_("Host application")) self.setWindowIcon(get_std_icon("ComputerIcon")) self.datalab: DLMainWindow = None self.host = HostWidget(self) self.setCentralWidget(self.host) self.setup_window() self.host.add_stretch() self.index_sigtitle = -1 self.index_imatitle = -1 @property def sigtitle(self): """Return current signal title index""" self.index_sigtitle = idx = (self.index_sigtitle + 1) % len(self.SIG_TITLES) return self.SIG_TITLES[idx] @property def imatitle(self): """Return current image title index""" self.index_imatitle = idx = (self.index_imatitle + 1) % len(self.IMA_TITLES) return self.IMA_TITLES[idx] def setup_window(self): """Setup window""" self.host.add_label(self.PURPOSE) add_btn = self.host.add_button add_btn(self.INIT_BUTTON_LABEL, self.init_cdl, 10, "DialogApplyButton") add_btn(_("Raise window"), self.raise_cdl, 0, "FileDialogToParent") self.add_additional_buttons() add_btn(_("Add signal objects"), self.add_signals, 10, "CommandLink") add_btn(_("Add image objects"), self.add_images, 0, "CommandLink") add_btn(_("Remove all objects"), self.remove_all, 5, "MessageBoxWarning") add_btn(_("Run macro"), self.run_macro, 10, "CommandLink") add_btn(_("Stop macro"), self.stop_macro, 0, "CommandLink") add_btn( _("Import macro from file (example)"), self.import_macro, 0, "CommandLink" ) add_btn(_("Close DataLab"), self.close_datalab, 10, "DialogCloseButton") def add_additional_buttons(self): """Add additional buttons""" @abc.abstractmethod def init_cdl(self): """Open DataLab test""" def raise_cdl(self): """Raise DataLab window""" if self.datalab is not None: self.datalab.raise_window() self.host.log("=> Raised DataLab window") @abc.abstractmethod def close_datalab(self): """Close DataLab window""" def add_object(self, obj): """Add object to DataLab""" if self.datalab is not None: self.datalab.add_object(obj) def add_signals(self): """Add signals to DataLab""" if self.datalab is not None: for func in ( test_data.create_paracetamol_signal, test_data.create_noisy_signal, ): obj = func(title=self.sigtitle) self.add_object(obj) self.host.log(f"Added signal: {obj.title}") def add_images(self): """Add images to DataLab""" if self.datalab is not None: p = NewImageParam.create(height=2000, width=2000, title=self.imatitle) for func in ( test_data.create_sincos_image, test_data.create_noisy_gaussian_image, test_data.create_multigaussian_image, ): obj = func(p) self.add_object(obj) self.host.log(f"Added image: {obj.title}") @abc.abstractmethod def remove_all(self): """Remove all objects from DataLab""" def __has_macro(self): """Check if there is a macro in DataLab""" return len(self.datalab.get_object_titles("macro")) > 0 def run_macro(self): """Run macro in DataLab""" if self.datalab is not None: if self.__has_macro(): self.datalab.run_macro() self.host.log("=> Running macro") else: self.host.log("No macro to run") def stop_macro(self): """Stop macro in DataLab""" if self.datalab is not None: if self.__has_macro(): self.datalab.stop_macro() self.host.log("=> Stopping macro") else: self.host.log("No macro to stop") def import_macro(self): """Import macro in DataLab""" if self.datalab is not None: fname = get_macro_example_path() self.datalab.import_macro_from_file(fname) self.host.log(f"=> Imported macro: {fname}") class AbstractHostWindow(AbstractClientWindow): # pylint: disable=abstract-method """Abstract host window, embedding DataLab""" PURPOSE = _("This the host application, which embeds DataLab.") INIT_BUTTON_LABEL = _("Open DataLab") def remove_all(self): """Remove all objects from DataLab""" if self.datalab is not None: for panel in self.datalab.panels: panel.remove_all_objects() self.host.log(f"Removed objects from {panel.PANEL_STR}") def add_additional_buttons(self): """Add additional buttons""" add_btn = self.host.add_button add_btn(_("Import signal from DataLab"), self.import_signal, 10, "ArrowLeft") add_btn(_("Import image from DataLab"), self.import_image, 0, "ArrowLeft") def import_object(self, panel, title): """Import object from DataLab""" self.host.log(f"get_objects_with_dialog ({title}):") objs = panel.get_objects_with_dialog(title, parent=self.host) if objs is not None: for obj in objs: self.host.log(f" -> {obj.title}:") self.host.log(str(obj)) else: self.host.log(" -> canceled") def import_signal(self): """Import signal from DataLab""" if self.datalab is not None: self.import_object(self.datalab.signalpanel, self.sender().text()) def import_image(self): """Import image from DataLab""" if self.datalab is not None: self.import_object(self.datalab.imagepanel, self.sender().text()) class HostWindow(AbstractHostWindow): """Test main view""" def init_cdl(self): """Open DataLab test""" if self.datalab is None: self.datalab = DLMainWindow(console=False) self.datalab.SIG_CLOSING.connect(self.datalab_was_closed) self.datalab.show() self.host.log("✨Initialized DataLab window") else: try: self.datalab.show() self.datalab.raise_() self.host.log("=> Shown DataLab window") except RuntimeError: self.datalab = None self.init_cdl() def datalab_was_closed(self): """DataLab was closed""" self.datalab = None self.host.log("✨DataLab window was closed by user") def close_datalab(self): """Close DataLab window""" if self.datalab is not None: self.host.log("=> Closed DataLab") self.datalab.SIG_CLOSING.disconnect(self.datalab_was_closed) self.datalab.close() self.datalab.deleteLater() self.datalab = None def run_host_window(klass): """Running host window to test DataLab embedding feature""" with qt_app_context(exec_loop=True): window: HostWindow = klass() window.resize(800, 800) window.show() def test_embedded_feature(): """Testing embedded feature""" run_host_window(HostWindow) if __name__ == "__main__": test_embedded_feature() DataLab-1.0.2/datalab/tests/features/control/embedded2_unit_test.py000066400000000000000000000027471511411446000253240ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Application embedded test 2 DataLab main window is simply hidden when closing application. It is shown and raised above other windows when reopening application. """ # guitest: show from datalab.gui.main import DLMainWindow from datalab.tests.features.control import embedded1_unit_test class HostWindow(embedded1_unit_test.AbstractHostWindow): """Test main view""" def init_cdl(self) -> None: """Open DataLab test""" if self.datalab is None: self.datalab = DLMainWindow(console=False, hide_on_close=True) self.host.log("✨ Initialized DataLab window") self.datalab.show() else: self.datalab.show() self.datalab.raise_window() self.host.log("=> Shown DataLab window") def close_datalab(self) -> None: """Close DataLab window""" if self.datalab is not None: self.host.log("=> Closed DataLab") self.datalab.close() def closeEvent(self, event) -> None: # pylint: disable=invalid-name """Close event Reimplemented from QWidget.closeEvent""" if self.datalab is None or self.datalab.close_properly(): event.accept() else: event.ignore() def test_embedded_feature(): """Testing embedded feature""" embedded1_unit_test.run_host_window(HostWindow) if __name__ == "__main__": test_embedded_feature() DataLab-1.0.2/datalab/tests/features/control/remoteclient_app_test.py000066400000000000000000000172011511411446000257730ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Remote GUI-based client test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: show from __future__ import annotations import functools from contextlib import contextmanager from guidata.qthelpers import qt_app_context, qt_wait from qtpy import QtWidgets as QW from datalab.config import _ from datalab.control.proxy import RemoteProxy from datalab.env import execenv from datalab.tests import run_datalab_in_background from datalab.tests.features.control import embedded1_unit_test from datalab.tests.features.control.remoteclient_unit import multiple_commands from datalab.utils.qthelpers import bring_to_front from datalab.widgets.connection import ConnectionDialog APP_NAME = _("Remote client test") def try_send_command(): """Try and send command to DataLab application remotely""" def try_send_command_decorator(func): """Try... except... decorator""" @functools.wraps(func) def method_wrapper(*args, **kwargs): """Decorator wrapper function""" self: HostWindow = args[0] # extracting 'self' from method arguments output = None try: output = func(*args, **kwargs) except ConnectionRefusedError as exc: self.datalab = None message = "🔥 Connection refused 🔥 (server is not ready?)" self.host.log(message) if execenv.unattended: raise ConnectionRefusedError( "Connection refused (server is not ready?)" ) from exc QW.QMessageBox.critical(self, APP_NAME, message) return output return method_wrapper return try_send_command_decorator class HostWindow(embedded1_unit_test.AbstractClientWindow): """Test main view""" PURPOSE = _("This the client application, which connects to DataLab.") INIT_BUTTON_LABEL = _("Connect to DataLab") def init_cdl(self): """Open DataLab test""" if self.datalab is None: if execenv.unattended: self.datalab = RemoteProxy() ok = True else: self.datalab = RemoteProxy(autoconnect=False) connect_dlg = ConnectionDialog(self.datalab.connect, self) ok = connect_dlg.exec() if ok: self.host.log("✨ Initialized DataLab connection ✨") self.host.log(f" Communication port: {self.datalab.port}") self.host.log(" List of exposed methods:") for name in self.datalab.get_method_list(): self.host.log(f" {name}") else: self.datalab = None error_msg = connect_dlg.get_error_message() self.host.log(f"🔥 Connection refused 🔥 ({error_msg})") if execenv.unattended: raise ConnectionRefusedError( "Connection refused (server is not ready?)" ) else: self.host.log("=> Already connected to DataLab") @try_send_command() def close_datalab(self): """Close DataLab window""" if self.datalab is not None: self.datalab.close_application() self.host.log("🎬 Closed DataLab!") self.datalab = None def add_additional_buttons(self): """Add additional buttons""" add_btn = self.host.add_button add_btn(_("Execute multiple commands"), self.exec_multiple_cmd, 10) add_btn(_("Get object titles"), self.get_object_titles, 10) add_btn(_("Get object uuids"), self.get_object_uuids, 10) add_btn(_("Get object"), self.get_object) @try_send_command() def exec_multiple_cmd(self): """Execute multiple commands in DataLab""" if self.datalab is not None: self.host.log("Starting command sequence...") multiple_commands(self.datalab) self.host.log("...end") @try_send_command() def get_object_titles(self): """Get object (signal/image) titles for current panel""" if self.datalab is not None: self.host.log("Object titles:") titles = self.datalab.get_object_titles() if titles: for name in titles: self.host.log(f" {name}") else: self.host.log(" Empty.") @try_send_command() def get_object_uuids(self): """Get object (signal/image) uuids for current panel""" if self.datalab is not None: self.host.log("Object uuids:") uuids = self.datalab.get_object_uuids() if uuids: for uuid in uuids: self.host.log(f" {uuid}") else: self.host.log(" Empty.") @try_send_command() def get_object(self): """Get object (signal/image) at index for current panel""" if self.datalab is not None: titles = self.datalab.get_object_titles() if titles: obj = self.datalab.get_object() if obj is not None: self.host.log(f"Object '{obj.title}'") self.host.log(str(obj)) else: self.host.log("🏴‍☠️ Object is None! (no selection)") else: self.host.log("🏴‍☠️ Object list is empty!") @try_send_command() def add_object(self, obj): """Add object to DataLab""" super().add_object(obj) @try_send_command() def remove_all(self): """Remove all objects from DataLab""" if self.datalab is not None: self.datalab.reset_all() self.host.log("Removed all objects") @contextmanager def qt_wait_print(dt: float, message: str, parent=None): """Wait and print message""" qt_wait(dt, show_message=True, parent=parent) execenv.print(f"{message}...", end="") yield execenv.print("OK") def test_remote_client(): """Remote client application test""" run_datalab_in_background() with qt_app_context(exec_loop=True): window = HostWindow() window.resize(800, 800) window.show() dt = 1 if execenv.unattended: qt_wait(8, show_message=True, parent=window) window.init_cdl() with qt_wait_print(dt, "Executing multiple commands"): window.exec_multiple_cmd() bring_to_front(window) with qt_wait_print(dt, "Raising DataLab window"): window.raise_cdl() with qt_wait_print(dt, "Import macro"): window.import_macro() with qt_wait_print(dt, "Getting object titles"): window.get_object_titles() with qt_wait_print(dt, "Getting object uuids"): window.get_object_uuids() with qt_wait_print(dt, "Getting object"): window.get_object() with qt_wait_print(dt, "Adding signals"): window.add_signals() with qt_wait_print(dt, "Adding images"): window.add_images() with qt_wait_print(dt, "Run macro"): window.run_macro() with qt_wait_print(dt * 2, "Stop macro"): window.stop_macro() with qt_wait_print(dt, "Removing all objects"): window.remove_all() with qt_wait_print(dt, "Closing DataLab"): window.close_datalab() if __name__ == "__main__": test_remote_client() DataLab-1.0.2/datalab/tests/features/control/remoteclient_unit.py000066400000000000000000000046641511411446000251440ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Remote client test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: skip import os import os.path as osp import time import numpy as np from guidata.qthelpers import qt_app_context from plotpy.builder import make from sigima.params import XYCalibrateParam from sigima.tests.data import create_2d_gaussian, create_paracetamol_signal from datalab import app from datalab.control.proxy import RemoteProxy from datalab.env import execenv from datalab.tests import helpers def multiple_commands(remote: RemoteProxy): """Execute multiple XML-RPC commands""" with helpers.WorkdirRestoringTempDir() as tmpdir: x, y = create_paracetamol_signal().get_data() remote.add_signal("tutu", x, y) z = create_2d_gaussian(2000, np.uint16) remote.add_image("toto", z) rect = make.annotated_rectangle(100, 100, 200, 200, title="Test") area = rect.get_rect() remote.add_annotations_from_items([rect]) uuid = remote.get_sel_object_uuids()[0] items = remote.get_object_shapes() assert len(items) == 1 and items[0].get_rect() == area remote.add_label_with_title(f"Image uuid: {uuid}") remote.select_groups([1]) remote.select_objects([uuid]) remote.delete_metadata() fname = osp.join(tmpdir, osp.basename("remote_test.h5")) remote.save_to_h5_file(fname) remote.reset_all() remote.open_h5_files([fname], True, False) remote.import_h5_file(fname, True) remote.set_current_panel("signal") assert remote.get_current_panel() == "signal" remote.calc("log10") param = XYCalibrateParam.create(a=1.2, b=0.1) remote.calc("calibration", param) time.sleep(2) # Avoid permission error when trying to clean-up temporary files def test_remoteclient_unit(): """Remote client test""" env = os.environ.copy() env[execenv.DO_NOT_QUIT_ENV] = "1" execenv.print("Launching DataLab in a separate process") helpers.exec_script(app.__file__, wait=False, env=env) remote = RemoteProxy() execenv.print("Executing multiple commands...", end="") with qt_app_context(): # needed for building plot items multiple_commands(remote) execenv.print("OK") if __name__ == "__main__": test_remoteclient_unit() DataLab-1.0.2/datalab/tests/features/control/simpleclient_unit_test.py000066400000000000000000000310111511411446000261630ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Simple Remote client test ------------------------- This test covers the simple remote client functionalities as provided by the `sigima.client` module. In Sigima, the `sigima.tests.common.client_unit_test` module provides a set of unit tests for the client functionalities. The purpose of these tests is to ensure that the client can correctly interact with the real server, handling various scenarios and edge cases. The tests include: - A function comparing the list of methods implemented by the real server (DataLab's `RemoteServer` class) to those implemented by the stub server (Sigima's `DataLabStubServer` class). - A function comparing the list of methods implemented by the full client (DataLab's `RemoteProxy` class) to those implemented by the simple client (Sigima's `SimpleRemoteProxy` class). - A function that simply runs the `sigima.tests.common.client_unit_test` suite after having launched a real server instance (DataLab application, using the `datalab.tests.run_datalab_in_background` function), ensuring that this test passes with the stub server as well as with the real server. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: skip import inspect import warnings from guidata.env import execenv from packaging.version import Version from sigima.client.remote import SimpleRemoteProxy, __required_server_version__ from sigima.client.stub import DataLabStubServer from sigima.tests.common.client_unit_test import RemoteClientTester import datalab from datalab.control.baseproxy import AbstractDLControl from datalab.control.proxy import RemoteProxy from datalab.tests import run_datalab_in_background def test_compare_server_methods() -> None: """Compare methods implemented by RemoteServer vs DataLabStubServer. This function compares the list of methods implemented by the real server (DataLab's RemoteServer class) to those implemented by the stub server (Sigima's DataLabStubServer class). """ execenv.print("\n=== Comparing Server Methods ===") # Get methods from RemoteServer (the real DataLab server) # RemoteServer implements AbstractDLControl methods remote_server_methods = set(AbstractDLControl.get_public_methods()) # Get methods from DataLabStubServer (the stub server) stub_server_methods = { name for name, method in inspect.getmembers(DataLabStubServer, inspect.isfunction) if not name.startswith("_") } execenv.print(f"RemoteServer methods: {len(remote_server_methods)}") execenv.print(f"DataLabStubServer methods: {len(stub_server_methods)}") # Methods in RemoteServer but not in DataLabStubServer missing_in_stub = remote_server_methods - stub_server_methods if missing_in_stub: execenv.print("\n⚠️ Methods in RemoteServer but missing in DataLabStubServer:") for method in sorted(missing_in_stub): execenv.print(f" - {method}") # Methods in DataLabStubServer but not in RemoteServer extra_in_stub = stub_server_methods - remote_server_methods if extra_in_stub: execenv.print("\n🔍 Methods in DataLabStubServer but not in RemoteServer:") for method in sorted(extra_in_stub): execenv.print(f" - {method}") # Common methods common_methods = remote_server_methods & stub_server_methods execenv.print(f"\n✅ Common methods: {len(common_methods)}") # Assert that stub server implements all required methods assert not missing_in_stub, ( f"DataLabStubServer is missing {len(missing_in_stub)} methods " f"implemented by RemoteServer: {sorted(missing_in_stub)}" ) execenv.print("✨ Server method comparison completed successfully!") def test_compare_client_methods() -> None: """Compare methods implemented by RemoteProxy vs SimpleRemoteProxy. This function compares the list of methods implemented by the full client (DataLab's RemoteProxy class) to those implemented by the simple client (Sigima's SimpleRemoteProxy class). """ execenv.print("\n=== Comparing Client Methods ===") # Get public methods from RemoteProxy (the full client) remote_proxy_methods = { name for name, method in inspect.getmembers(RemoteProxy, inspect.ismethod) if not name.startswith("_") and callable(method) } # Get public methods from SimpleRemoteProxy (the simple client) simple_proxy_methods = { name for name, method in inspect.getmembers(SimpleRemoteProxy, inspect.ismethod) if not name.startswith("_") and callable(method) } execenv.print(f"RemoteProxy methods: {len(remote_proxy_methods)}") execenv.print(f"SimpleRemoteProxy methods: {len(simple_proxy_methods)}") # Methods in SimpleRemoteProxy but not in RemoteProxy extra_in_simple = simple_proxy_methods - remote_proxy_methods if extra_in_simple: execenv.print( "\n🔍 Methods in SimpleRemoteProxy but not in RemoteProxy " "(expected, as SimpleRemoteProxy is a subset):" ) for method in sorted(extra_in_simple): execenv.print(f" - {method}") # Methods in RemoteProxy but not in SimpleRemoteProxy missing_in_simple = remote_proxy_methods - simple_proxy_methods if missing_in_simple: execenv.print( "\n📝 Methods in RemoteProxy but not in SimpleRemoteProxy " "(expected, as SimpleRemoteProxy is simpler):" ) for method in sorted(missing_in_simple): execenv.print(f" - {method}") # Common methods common_methods = remote_proxy_methods & simple_proxy_methods execenv.print(f"\n✅ Common methods: {len(common_methods)}") execenv.print("✨ Client method comparison completed successfully!") def test_with_real_server() -> None: """Run sigima.tests.common.client_unit_test suite with real DataLab server. This function runs the comprehensive client unit test suite after launching a real DataLab instance in the background, ensuring that the tests pass with the real server. """ execenv.print("\n=== Testing with Real DataLab Server ===") # Launch DataLab application in the background execenv.print("Launching DataLab in background...") run_datalab_in_background(wait_until_ready=True) # Import and run the comprehensive test from sigima execenv.print("Running comprehensive client tests with real server...") tester = RemoteClientTester() # Initialize connection to real DataLab server using the existing port if not tester.init_cdl(): raise ConnectionRefusedError( "Failed to connect to DataLab server. " "Make sure DataLab is running and accessible." ) try: # Run all tests tester.run_comprehensive_test() execenv.print("✨ All tests passed with real DataLab server!") finally: # Clean up tester.close_datalab() def test_version_compatibility() -> None: """Test that DataLab version is compatible with Sigima client. This test ensures that the current version of DataLab meets the minimum requirements of the Sigima client as defined in __required_server_version__. """ execenv.print("\n=== Testing Version Compatibility ===") # Get DataLab version datalab_version = datalab.__version__ execenv.print(f"DataLab version: {datalab_version}") execenv.print(f"Required version: {__required_server_version__}") # Test version comparison using Version class with edge cases execenv.print("\nTesting Version comparison:") test_cases = [ ("1.0.0", "1.0.0", True, "Same version"), ("1.0.1", "1.0.0", True, "Newer patch version"), ("1.1.0", "1.0.0", True, "Newer minor version"), ("2.0.0", "1.0.0", True, "Newer major version"), ("0.9.9", "1.0.0", False, "Older version"), ("1.0.0a1", "1.0.0", False, "Alpha is pre-release (< 1.0.0)"), ("1.0.0b2", "1.0.0", False, "Beta is pre-release (< 1.0.0)"), ("1.0.0rc1", "1.0.0", False, "RC is pre-release (< 1.0.0)"), ("1.0.0", "1.0.0a1", True, "Release is newer than alpha"), ("1.0.1", "1.0.0a1", True, "Newer patch > alpha"), ("1.0.0a10", "1.0.0a2", True, "Later alpha version"), ] for ver1, ver2, expected, description in test_cases: result = Version(ver1) >= Version(ver2) status = "✓" if result == expected else "✗" execenv.print( f" {status} Version('{ver1}') >= Version('{ver2}') = {result} " f"[expected: {expected}] - {description}" ) assert result == expected, ( f"Version comparison failed for {ver1} vs {ver2}: " f"expected {expected}, got {result}" ) # Check if current DataLab version is compatible execenv.print(f"\nChecking DataLab {datalab_version} compatibility...") is_compatible = Version(datalab_version) >= Version(__required_server_version__) if is_compatible: execenv.print( f"✅ DataLab version {datalab_version} is compatible " f"(>= {__required_server_version__})" ) else: execenv.print( f"⚠️ DataLab version {datalab_version} is NOT compatible " f"(< {__required_server_version__})" ) # Note: During development (alpha/beta/rc versions), we allow the test to pass # even if the version comparison indicates incompatibility. In production, # both DataLab and Sigima should be at release versions. vdatalab = Version(datalab_version) # Allow pre-release versions if they're the same base version if vdatalab.is_prerelease and not is_compatible: # Check if the base version (without pre-release) would be compatible base_ver = f"{vdatalab.major}.{vdatalab.minor}.{vdatalab.micro}" if Version(base_ver) >= Version(__required_server_version__): execenv.print( f"ℹ️ Pre-release version {datalab_version} allowed for testing " f"(base version {base_ver} >= {__required_server_version__})" ) is_compatible = True # This assertion ensures DataLab's version meets Sigima's requirements assert is_compatible, ( f"DataLab version {datalab_version} is not compatible with " f"Sigima client requirements (>= {__required_server_version__}). " f"Please upgrade DataLab or downgrade the required version in Sigima." ) # Test that warning is issued when connecting to incompatible version execenv.print("\nTesting version compatibility warning with stub server...") with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") # Create a stub server that reports an old version stub = DataLabStubServer(port=0, verbose=False) # Temporarily patch get_version to return an old version original_get_version = stub.get_version def mock_old_version(): return "0.9.0" # Old version that should trigger warning stub.get_version = mock_old_version try: port = stub.start() # Try to connect - should trigger warning proxy = SimpleRemoteProxy(autoconnect=False) proxy.connect(port=str(port)) # Check that a warning was issued version_warnings = [ warning for warning in w if "may not be fully compatible" in str(warning.message) ] if version_warnings: execenv.print( f"✅ Warning correctly issued for incompatible version: " f"{version_warnings[0].message}" ) else: execenv.print("⚠️ No warning issued for incompatible version") # Print all warnings for debugging if w: execenv.print(f" All warnings captured ({len(w)}):") for warning in w: execenv.print(f" - {warning.message}") assert len(version_warnings) > 0, ( "Expected warning for incompatible version but none was issued" ) finally: # Restore original method and stop server stub.get_version = original_get_version stub.stop() execenv.print("✨ Version compatibility test completed successfully!") if __name__ == "__main__": test_compare_server_methods() test_compare_client_methods() test_version_compatibility() test_with_real_server() DataLab-1.0.2/datalab/tests/features/hdf5/000077500000000000000000000000001511411446000201755ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/features/hdf5/__init__.py000066400000000000000000000000021511411446000222760ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/features/hdf5/h5browser1_unit_test.py000066400000000000000000000016371511411446000246550ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ HDF5 browser unit tests 1 ------------------------- Try and open all HDF5 test data available. """ # guitest: show from __future__ import annotations from guidata.qthelpers import exec_dialog, qt_app_context from datalab.tests import helpers from datalab.tests.features.hdf5.h5browser_app_test import create_h5browser_dialog def test_h5browser_all_files(pattern=None): """HDF5 browser unit test for all available .h5 test files""" with qt_app_context(): fnames = helpers.get_test_fnames("*.h5" if pattern is None else pattern) for index, fname in enumerate(fnames): dlg = create_h5browser_dialog([fname], toggle_all=True, select_all=True) dlg.setObjectName(dlg.objectName() + f"_{index:02d}") exec_dialog(dlg) if __name__ == "__main__": test_h5browser_all_files() DataLab-1.0.2/datalab/tests/features/hdf5/h5browser2_unit.py000066400000000000000000000030671511411446000236160ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ HDF5 browser unit tests 2 ------------------------- Testing for memory leak """ # guitest: show,skip import os import time import numpy as np import psutil from guidata.qthelpers import qt_app_context from sigima.tests.vistools import view_curves from datalab.env import execenv from datalab.tests import helpers from datalab.widgets.h5browser import H5BrowserDialog def test_memoryleak(fname, iterations=20): """Memory leak test""" with qt_app_context(): proc = psutil.Process(os.getpid()) fname = helpers.get_test_fnames(fname)[0] dlg = H5BrowserDialog(None) memlist = [] for i in range(iterations): t0 = time.time() dlg.open_file(fname) memdata = proc.memory_info().vms / 1024**2 memlist.append(memdata) execenv.print(i + 1, ":", memdata, "MB") dlg.browser.tree.select_all(True) dlg.browser.tree.toggle_all(True) execenv.print(i + 1, ":", proc.memory_info().vms / 1024**2, "MB") dlg.show() dlg.accept() dlg.close() execenv.print(i + 1, ":", proc.memory_info().vms / 1024**2, "MB") dlg.cleanup() execenv.print(i + 1, ":", f"{(time.time() - t0):.1f} s") view_curves( np.array(memlist), title="Memory leak test for HDF5 browser dialog", ylabel="Memory (MB)", ) if __name__ == "__main__": test_memoryleak("scenario*.h5") DataLab-1.0.2/datalab/tests/features/hdf5/h5browser_app_test.py000066400000000000000000000041271511411446000243720ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ HDF5 Browser Application test ----------------------------- """ # guitest: show from __future__ import annotations from guidata.qthelpers import exec_dialog, qt_app_context from qtpy import QtWidgets as QW from datalab.env import execenv from datalab.tests import helpers from datalab.widgets.h5browser import H5BrowserDialog def create_h5browser_dialog( fnames: list[str], toggle_all: bool = False, select_all: bool = False ) -> H5BrowserDialog: """Create HDF5 browser dialog with all nodes expanded and selected Args: fnames: HDF5 file names Returns: H5BrowserDialog instance """ execenv.print(f"Opening: {fnames}") dlg = H5BrowserDialog(None) dlg.open_files(fnames) dlg.browser.tree.toggle_all(toggle_all) dlg.browser.tree.select_all(select_all) return dlg def test_h5browser() -> None: """Test HDF5 browser""" fnames = helpers.get_test_fnames("*.h5")[-2:] with qt_app_context(): dlg = create_h5browser_dialog(fnames) if execenv.unattended: # Test all buttons: dlg.show() for index in range(dlg.button_layout.count()): widget = dlg.button_layout.itemAt(index).widget() if isinstance(widget, QW.QCheckBox): widget.setChecked(True) widget.setChecked(False) elif isinstance(widget, QW.QPushButton): widget.click() # Test various features: tree = dlg.browser.tree tree.update_menu() tree.expandAll() tree.collapseAll() tree.restore() # Removing file, adding file from browser: dlg.browser.close_file(fnames[0]) dlg.browser.open_file(fnames[0]) # Removing file, adding file from file selector: dlg.browser.selector.remove_file(fnames[0]) dlg.browser.selector.add_file(fnames[0]) exec_dialog(dlg) if __name__ == "__main__": test_h5browser() DataLab-1.0.2/datalab/tests/features/hdf5/h5import_app_test.py000066400000000000000000000011671511411446000242220ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ HDF5 import application test """ # guitest: show from datalab import app from datalab.env import execenv from datalab.tests import helpers from datalab.utils.qthelpers import datalab_app_context def test_hdf5_import(): """Testing DataLab app launcher""" with datalab_app_context(exec_loop=True): win = app.create(console=False) fname = helpers.get_test_fnames("*.h5")[-1] execenv.print(f"Importing HDF5 file: {fname}") win.import_h5_file(fname) if __name__ == "__main__": test_hdf5_import() DataLab-1.0.2/datalab/tests/features/hdf5/h5importer_app_test.py000066400000000000000000000020501511411446000245410ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ HDF5 Importer Application test ------------------------------ Running application a few times in a row with different entry parameters. """ # guitest: show from datalab import app from datalab.env import execenv from datalab.tests import helpers from datalab.utils.qthelpers import datalab_app_context def test_h5importer_app(pattern=None): """Testing DataLab app launcher""" if pattern is None: pattern = "*.h5" execenv.print("HDF5 import test scenario:") execenv.print("[1] Loading all h5 files at once (only the first 5 files)") with datalab_app_context(exec_loop=True): app.create(h5files=helpers.get_test_fnames(pattern)[:5]) execenv.print("[2] Loading h5 files one by one") for fname in helpers.get_test_fnames(pattern): with datalab_app_context(exec_loop=True): execenv.print(f" Opening: {fname}") app.create(h5files=[fname]) if __name__ == "__main__": test_h5importer_app() DataLab-1.0.2/datalab/tests/features/image/000077500000000000000000000000001511411446000204315ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/features/image/__init__.py000066400000000000000000000000021511411446000225320ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/features/image/annotations_app_test.py000066400000000000000000000014171511411446000252420ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Annotations application test: - Create an image with annotations and ROI - Further tests to be done manually: edit "Annotations" and check that modifications are taken into account, without affecting the existing ROI """ # guitest: show from sigima.objects import create_image_roi from sigima.tests import data as test_data from datalab.app import run def test_annotations_app(): """Annotations test""" obj1 = test_data.create_sincos_image() obj2 = test_data.create_annotated_image() obj2.roi = create_image_roi("rectangle", [10, 10, 60, 400]) run(console=False, objects=(obj1, obj2), size=(1200, 550)) if __name__ == "__main__": test_annotations_app() DataLab-1.0.2/datalab/tests/features/image/annotations_unit_test.py000066400000000000000000000057011511411446000254410ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Annotations unit test: - Create an image with annotations - Open dialog (equivalent to click on button "Annotations") - Accept dialog without modifying shapes - Check if image annotations are still the same """ # guitest: show from plotpy.builder import make from plotpy.items import AnnotatedShape, PolygonShape from plotpy.plot import BasePlot from qtpy import QtWidgets as QW from sigima.tests import data as test_data from datalab.adapters_plotpy import create_adapter_from_object from datalab.env import execenv from datalab.tests import datalab_test_app_context def set_annotation_color(annotation: AnnotatedShape, color: str) -> None: """Set annotation color""" shape: PolygonShape = annotation.shape param = shape.shapeparam param.line.color = param.fill.color = color param.fill.alpha = 0.3 param.fill.style = "SolidPattern" param.update_item(shape) plot: BasePlot = annotation.plot() if plot is not None: plot.replot() def test_annotations_unit(): """Run image tools test scenario""" with datalab_test_app_context() as win: panel = win.imagepanel # Create image with annotations ima1 = test_data.create_multigaussian_image() ima1.title = "Annotations from items" rect = make.annotated_rectangle(100, 100, 200, 200, title="Test") set_annotation_color(rect, "#2222ff") circ = make.annotated_circle(300, 300, 400, 400, title="Test") set_annotation_color(circ, "#22ff22") elli = make.annotated_ellipse( 500, 500, 800, 500, 650, 400, 650, 600, title="Test" ) segm = make.annotated_segment(700, 700, 800, 800, title="Test") label = make.label("Test", (1000, 1000), (0, 0), "BR") adapter = create_adapter_from_object(ima1) adapter.add_annotations_from_items([rect, circ, elli, segm, label]) panel.add_object(ima1) # Create another image with annotations ima2 = test_data.create_annotated_image(title="Annotations from JSON") panel.add_object(ima2) execenv.print("Check [geometric shapes] <--> [plot items] conversion:") execenv.print("(comparing annotations)") for ima in (ima1, ima2): execenv.print(f" Checking image '{ima.title}': ", end="") panel.objview.select_objects([ima]) # Open separate view panel.open_separate_view().done(QW.QDialog.DialogCode.Accepted) orig_ann = ima.annotations panel.open_separate_view().done(QW.QDialog.DialogCode.Accepted) # Check if annotations are still the same # open("before.json", mode="wb").write(orig_ann.encode()) # open("after.json", mode="wb").write(ima.annotations.encode()) assert orig_ann == ima.annotations execenv.print("OK") if __name__ == "__main__": test_annotations_unit() DataLab-1.0.2/datalab/tests/features/image/average_app_test.py000066400000000000000000000030051511411446000243120ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Average application test ======================== The purpose of this test is to check that we can average a set of images without overflowing the data type. This test was written following a regression where the average of 10 images of size 256x256 with a Gaussian distribution of values was overflowing the data type uint8. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: show import numpy as np import sigima.objects import sigima.tests.data as ctd from datalab.tests import datalab_test_app_context, helpers def test_image_average() -> None: """Average application test.""" with datalab_test_app_context() as win: panel = win.imagepanel N, size = 10, 256 dtype = sigima.objects.ImageDatatypes.UINT8 p = sigima.objects.NewImageParam.create(height=size, width=size, dtype=dtype) data = ctd.create_2d_gaussian(size, dtype.to_numpy_dtype()) for _idx in range(N): obj = sigima.objects.create_image_from_param(p) obj.data = data panel.add_object(obj) panel.objview.select_groups([0]) panel.processor.run_feature("average") res_data = panel.objview.get_sel_objects(include_groups=True)[0].data exp_data = np.array(data, dtype=float) helpers.check_array_result("Average", res_data, exp_data) if __name__ == "__main__": test_image_average() DataLab-1.0.2/datalab/tests/features/image/background_dialog_test.py000066400000000000000000000052471511411446000255100ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image background dialog unit test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: show from __future__ import annotations import numpy as np import sigima.objects import sigima.params import sigima.proc.image as sipi from guidata.qthelpers import exec_dialog, qt_app_context from sigima.tests import vistools from sigima.tests.data import create_noisy_gaussian_image from datalab.env import execenv from datalab.widgets.imagebackground import ImageBackgroundDialog def test_image_background_selection() -> None: """Image background selection test.""" with qt_app_context(): img = create_noisy_gaussian_image() # Switch to non-uniform coordinates to test the background dialog handling: xcoords = np.linspace(0, 10, img.data.shape[1]) img.set_coords(xcoords, 0.02 * xcoords**3) dlg = ImageBackgroundDialog(img) dlg.resize(640, 480) dlg.setObjectName(dlg.objectName() + "_00") # to avoid timestamp suffix exec_dialog(dlg) if execenv.unattended: dlg.test_compute_background() execenv.print(f"background: {dlg.get_background()}") execenv.print(f"rect coords: {dlg.get_rect_coords()}") # Check background value: x0, y0, x1, y1 = dlg.get_rect_coords() ix0, iy0, ix1, iy1 = dlg.imageitem.get_closest_index_rect(x0, y0, x1, y1) assert np.isclose(img.data[iy0:iy1, ix0:ix1].mean(), dlg.get_background()) def test_image_offset_correction_with_background_dialog() -> None: """Image offset correction interactive test using the background dialog.""" with qt_app_context(): i1 = create_noisy_gaussian_image() dlg = ImageBackgroundDialog(i1) ok = exec_dialog(dlg) if ok: if execenv.unattended: dlg.test_compute_background() param = sigima.objects.ROI2DParam() # pylint: disable=unbalanced-tuple-unpacking ix0, iy0, ix1, iy1 = i1.physical_to_indices(dlg.get_rect_coords()) param.x0, param.y0, param.dx, param.dy = ix0, iy0, ix1 - ix0, iy1 - iy0 i2 = sipi.offset_correction(i1, param) i3 = sipi.clip(i2, sigima.params.ClipParam.create(lower=0)) vistools.view_images_side_by_side( [i1, i3], titles=["Original image", "Corrected image"], title="Image offset correction and thresholding", ) if __name__ == "__main__": test_image_background_selection() test_image_offset_correction_with_background_dialog() DataLab-1.0.2/datalab/tests/features/image/blobs_app_test.py000066400000000000000000000033371511411446000240110ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Blob detection application test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params from sigima.objects import create_image from sigima.tests.data import get_test_image from datalab.adapters_plotpy import create_adapter_from_object from datalab.tests import datalab_test_app_context, skip_if_opencv_missing def test_blobs(): """Run blob detection application test scenario""" with datalab_test_app_context() as win: panel = win.imagepanel proc = panel.processor data = get_test_image("flower.npy").data # Testing blob detection # ====================== for paramclass, compute_method, name in ( (sigima.params.BlobDOGParam, "blob_dog", "BlobDOG"), (sigima.params.BlobDOHParam, "blob_doh", "BlobDOH"), (sigima.params.BlobLOGParam, "blob_log", "BlobLOG"), (sigima.params.BlobOpenCVParam, "blob_opencv", "BlobOpenCV"), ): param = paramclass() param.min_sigma = 10.0 param.max_sigma = 30.0 image = create_image(name, data) create_adapter_from_object(image).add_label_with_title() panel.add_object(image) with skip_if_opencv_missing(): proc.run_feature(compute_method, param) # Testing distribute_on_grid and reset_positions # ============================================== panel.objview.selectAll() param = sigima.params.GridParam.create(cols=2, colspac=10, rowspac=10) proc.distribute_on_grid(param) if __name__ == "__main__": test_blobs() DataLab-1.0.2/datalab/tests/features/image/contour_app_test.py000066400000000000000000000030051511411446000243710ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Contour finding application test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.enums import sigima.params from sigima.objects import NewImageParam from sigima.tests.data import create_multigaussian_image from datalab.env import execenv from datalab.tests import datalab_test_app_context, take_plotwidget_screenshot from datalab.tests.features.image.roi_app_test import create_test_image_with_roi def test_contour_app(): """Run contour finding application test scenario""" newparam = NewImageParam.create(height=200, width=200) with datalab_test_app_context() as win: panel = win.imagepanel for shape in sigima.enums.ContourShape: ima1 = create_multigaussian_image(newparam) ima1.set_metadata_option("colormap", "gray") panel.add_object(ima1) param = sigima.params.ContourShapeParam.create(shape=shape) panel.processor.run_feature("contour_shape", param) take_plotwidget_screenshot(panel, "contour_test") ima2 = create_test_image_with_roi(newparam) ima2.set_metadata_option("colormap", "gray") panel.add_object(ima2) panel.processor.edit_roi_graphically() panel.processor.run_feature("contour_shape", param) if not execenv.unattended: break if __name__ == "__main__": test_contour_app() DataLab-1.0.2/datalab/tests/features/image/contour_fabryperot_app_test.py000066400000000000000000000032651511411446000266360ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Contour finding application test with Fabry-Perot images """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.enums import sigima.objects import sigima.params from sigima.tests.data import get_test_image from datalab.tests import datalab_test_app_context, take_plotwidget_screenshot def test_contour_app() -> None: """Run contour finding application test scenario""" with datalab_test_app_context() as win: panel = win.imagepanel shape = sigima.enums.ContourShape.CIRCLE ima1 = get_test_image("fabry-perot1.jpg") ima1.set_metadata_option("colormap", "gray") xc, yc, r = 601.0, 556.0, 457.0 roi = sigima.objects.create_image_roi("circle", [xc, yc, r]) ima1.roi = roi panel.add_object(ima1) param = sigima.params.ContourShapeParam.create(shape=shape) panel.processor.run_feature("contour_shape", param) take_plotwidget_screenshot(panel, "contour_fabryperot_test") ima2 = get_test_image("fabry-perot2.jpg") ima2.set_metadata_option("colormap", "gray") ima2.roi = roi panel.add_object(ima2) panel.processor.run_feature("contour_shape", param) param = sigima.params.LineProfileParam.create(direction="horizontal", row=554) panel.processor.run_feature("line_profile", param) param = sigima.params.AverageProfileParam.create( direction="horizontal", row1=550, row2=560 ) panel.processor.run_feature("average_profile", param) if __name__ == "__main__": test_contour_app() DataLab-1.0.2/datalab/tests/features/image/denoise_app_test.py000066400000000000000000000015271511411446000243350ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Denoise processing application test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params from sigima.tests.data import get_test_image from datalab.tests import datalab_test_app_context def test_denoise(): """Run denoise application test scenario""" with datalab_test_app_context() as win: win.showMaximized() panel = win.imagepanel panel.add_object(get_test_image("flower.npy")) proc = panel.processor proc.compute_all_denoise() panel.objview.select_groups() param = sigima.params.GridParam.create(cols=3) proc.distribute_on_grid(param) panel.add_label_with_title() if __name__ == "__main__": test_denoise() DataLab-1.0.2/datalab/tests/features/image/distribute_on_grid_app_test.py000066400000000000000000000071531511411446000265670ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Distribute on grid application test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import numpy as np import sigima.params from sigima.tests.data import get_test_image from datalab.env import execenv from datalab.tests import datalab_test_app_context def get_image_origin(obj): """Get image origin (x0, y0) handling both uniform and non-uniform coordinates. Args: obj: Image object Returns: Tuple (x0, y0) """ if obj.is_uniform_coords: return obj.x0, obj.y0 return obj.xcoords[0], obj.ycoords[0] def test_distribute_on_grid(): """Run distribute on grid application test scenario""" with execenv.context(unattended=True): with datalab_test_app_context(console=False) as win: panel = win.imagepanel proc = panel.processor panel.add_object(get_test_image("flower.npy")) proc.compute_all_morphology(sigima.params.MorphologyParam.create(radius=10)) panel.objview.select_groups() # Distribute on grid params = [ sigima.params.GridParam.create(cols=4), sigima.params.GridParam.create( rows=3, colspac=20, rowspac=20, direction="row" ), sigima.params.GridParam.create(cols=2, colspac=10, rowspac=10), ] origins = [] for param in params: proc.distribute_on_grid(param) objs = panel.objview.get_sel_objects(include_groups=True) origins.append([get_image_origin(obj) for obj in objs]) # Reset positions proc.reset_positions() objs = panel.objview.get_sel_objects(include_groups=True) origins.append([get_image_origin(obj) for obj in objs]) # Verify results with tolerance for floating point comparisons tol = 1e-10 # First distribution (cols=4) assert np.allclose(origins[0][0], (0.0, 0.0), atol=tol) assert np.allclose(origins[0][1], (512.0, 0.0), atol=tol) assert np.allclose(origins[0][2], (1024.0, 0.0), atol=tol) assert np.allclose(origins[0][3], (1536.0, 0.0), atol=tol) assert np.allclose(origins[0][4], (0.0, 512.0), atol=tol) assert np.allclose(origins[0][5], (512.0, 512.0), atol=tol) assert np.allclose(origins[0][6], (1024.0, 512.0), atol=tol) # Second distribution (rows=3, colspac=20, rowspac=20, direction="row") assert np.allclose(origins[1][0], (0.0, 0.0), atol=tol) assert np.allclose(origins[1][1], (0.0, 532.0), atol=tol) assert np.allclose(origins[1][2], (0.0, 1064.0), atol=tol) assert np.allclose(origins[1][3], (532.0, 0.0), atol=tol) assert np.allclose(origins[1][4], (532.0, 532.0), atol=tol) assert np.allclose(origins[1][5], (532.0, 1064.0), atol=tol) # Third distribution (cols=2, colspac=10, rowspac=10) assert np.allclose(origins[2][0], (0.0, 0.0), atol=tol) assert np.allclose(origins[2][1], (522.0, 0.0), atol=tol) assert np.allclose(origins[2][2], (0.0, 522.0), atol=tol) assert np.allclose(origins[2][3], (522.0, 522.0), atol=tol) assert np.allclose(origins[2][4], (0.0, 1044.0), atol=tol) assert np.allclose(origins[2][5], (522.0, 1044.0), atol=tol) # After reset, all should be at origin for x0, y0 in origins[3]: assert np.allclose([x0, y0], [0.0, 0.0], atol=tol) if __name__ == "__main__": test_distribute_on_grid() DataLab-1.0.2/datalab/tests/features/image/edges_app_test.py000066400000000000000000000015301511411446000237700ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Edges processing application test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params from sigima.tests.data import get_test_image from datalab.tests import datalab_test_app_context def test_edges(): """Run edges processing application test scenario""" with datalab_test_app_context() as win: win.showMaximized() panel = win.imagepanel panel.add_object(get_test_image("flower.npy")) proc = panel.processor proc.compute_all_edges() panel.objview.select_groups() param = sigima.params.GridParam.create(cols=4) proc.distribute_on_grid(param) panel.add_label_with_title() if __name__ == "__main__": test_edges() DataLab-1.0.2/datalab/tests/features/image/erase_app_test.py000066400000000000000000000011071511411446000240000ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Image erase application test""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from sigima.tests.data import get_test_image from datalab.tests import datalab_test_app_context def test_erase(): """Run erase application test scenario""" with datalab_test_app_context() as win: win.imagepanel.add_object(get_test_image("flower.npy")) win.imagepanel.processor.compute_erase() if __name__ == "__main__": test_erase() DataLab-1.0.2/datalab/tests/features/image/fft2d_app_test.py000066400000000000000000000013321511411446000237060ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image FFT application test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.objects from datalab.tests import datalab_test_app_context def test_fft2d_app() -> None: """FFT application test.""" with datalab_test_app_context() as win: panel = win.imagepanel param = sigima.objects.Gauss2DParam.create(width=100, height=100) i1 = sigima.objects.create_image_from_param(param) panel.add_object(i1) panel.processor.run_feature("fft") panel.processor.run_feature("ifft") if __name__ == "__main__": test_fft2d_app() DataLab-1.0.2/datalab/tests/features/image/flatfield_app_test.py000066400000000000000000000021301511411446000246300ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Flat field test Testing the following: - Create a gaussian image (raw data) - Create a random noised image (flat data) - Compute the flat field image """ # guitest: show from sigima.objects import Gauss2DParam, UniformDistribution2DParam from sigima.proc.image import FlatFieldParam from datalab.config import _ from datalab.tests import datalab_test_app_context def test_flatfield(): """Run flat field test scenario""" with datalab_test_app_context() as win: panel = win.imagepanel param0 = Gauss2DParam.create(title=_("Raw data (2D-Gaussian)")) ima0 = panel.new_object(param0, edit=False) param1 = UniformDistribution2DParam.create( title=_("Flat data (Uniform random)"), vmax=5 ) ima1 = panel.new_object(param1, edit=False) panel.objview.select_objects([ima0]) ffp = FlatFieldParam() ffp.threshold = 80 panel.processor.run_feature("flatfield", ima1, ffp) if __name__ == "__main__": test_flatfield() DataLab-1.0.2/datalab/tests/features/image/geometry_transform_unit_test.py000066400000000000000000000342141511411446000270330ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- """Unit test for geometry transformation operations.""" from __future__ import annotations from typing import Callable import numpy as np import sigima.objects as sio import sigima.params as sip import sigima.proc.image as sipi from sigima.tests import data as test_data from datalab.adapters_metadata.geometry_adapter import GeometryAdapter from datalab.gui.processor.image import apply_geometry_transform from datalab.tests import datalab_test_app_context def __create_test_image() -> sio.ImageObj: """Create a test image with geometry results for testing.""" param = sio.Gauss2DParam.create( height=600, width=600, x0=2.5, y0=7.5, title="Test image (with geometry results)", dtype=sio.ImageDatatypes.UINT16, ) obj = sio.create_image_from_param(param) for geometry in test_data.generate_geometry_results(): GeometryAdapter(geometry).add_to(obj) obj.roi = sio.create_image_roi("rectangle", [10, 10, 50, 400]) return obj def __get_geometries(obj: sio.ImageObj) -> list[sio.GeometryResult]: """Get geometries from an image object.""" return [ga.result for ga in GeometryAdapter.iterate_from_obj(obj)] def __get_expected_geometry_result( orig_geom: sio.GeometryResult, operation: str ) -> sio.GeometryResult: """Get expected geometry result for a given operation. Args: orig_geom: Original geometry result operation: Operation name (rotate90, rotate270, etc.) Returns: Expected geometry result after transformation """ # For image transformations, rotations should be around the image center # (300, 300 for our 600x600 test image) xc, yc = (300.0, 300.0) if operation == "rotate90": exp_geom = sipi.transformer.rotate(orig_geom, -np.pi / 2, (xc, yc)) elif operation == "rotate270": exp_geom = sipi.transformer.rotate(orig_geom, np.pi / 2, (xc, yc)) elif operation == "fliph": exp_geom = sipi.transformer.fliph(orig_geom, xc) elif operation == "flipv": exp_geom = sipi.transformer.flipv(orig_geom, yc) elif operation == "transpose": exp_geom = sipi.transformer.transpose(orig_geom) elif operation == "resize": # Resize changes pixel resolution but keeps physical coordinates unchanged exp_geom = orig_geom elif operation == "binning": # Binning changes pixel resolution but keeps physical coordinates unchanged exp_geom = orig_geom else: raise ValueError(f"Unknown operation: {operation}") return exp_geom def __validate_geometry_transformation( tr_geometries: list[sio.GeometryResult], or_geometries: list[sio.GeometryResult], operation: str, test_context: str = "geometry", ) -> None: """Validate that geometry transformation was applied correctly. Args: tr_geometries: List of transformed geometry results or_geometries: List of original geometry results operation: Operation name (rotate90, rotate270, etc.) test_context: Context string for error messages (e.g., "App", "Unit") """ for i, tr_geom in enumerate(tr_geometries): original_geom = or_geometries[i] expected_geom = __get_expected_geometry_result(original_geom, operation) # Compare the actual transformation result with expected np.testing.assert_allclose( tr_geom.coords, expected_geom.coords, rtol=1e-10, err_msg=f"{test_context} geometry result {i} " f"({tr_geom.title}) coordinates do not match expected for {operation}. " f"Got: {tr_geom.coords}, Expected: {expected_geom.coords}", ) # Verify other properties are preserved assert tr_geom.title == expected_geom.title, ( f"Title should be preserved for geometry {i} in {operation}" ) assert tr_geom.kind == expected_geom.kind, ( f"Kind should be preserved for geometry {i} in {operation}" ) np.testing.assert_array_equal( tr_geom.roi_indices, expected_geom.roi_indices, err_msg=f"ROI indices should be preserved for geometry {i} in {operation}", ) def __validate_basic_transformation(tr_obj: sio.ImageObj, or_obj: sio.ImageObj) -> None: """Validate basic transformation requirements. Args: tr_obj: The transformed image object or_obj: The original image object """ assert tr_obj is not or_obj, "Transformation should create a new object" assert len(tr_obj.metadata) == len(or_obj.metadata), ( "Number of geometry results should be preserved" ) def __validate_roi_transformation( tr_obj: sio.ImageObj, or_obj: sio.ImageObj, operation: str, ) -> None: """Validate that ROI is properly transformed. Args: tr_obj: The transformed image object or_obj: Original image object operation: Operation name for expected transformation """ tr_roi = tr_obj.roi assert tr_roi is not None, "ROI should not be removed after transformation" assert len(tr_roi.single_rois) == len(or_obj.roi.single_rois), ( "Number of ROI objects should be preserved" ) # Validate that the ROI coordinates were properly transformed for i, roi in enumerate(tr_roi.single_rois): # Temporary transform the ROI into a geometry result: or_roi = or_obj.roi.get_single_roi(i) temp_geom = sio.GeometryResult( "temp_geom", sio.KindShape.RECTANGLE, coords=np.asarray([or_roi.get_physical_coords(or_obj)]), ) expected_geom = __get_expected_geometry_result(temp_geom, operation) exp_coords = expected_geom.coords[0] np.testing.assert_allclose( roi.get_physical_coords(tr_obj), exp_coords, rtol=1e-10, atol=1e-10, err_msg=f"ROI {i} coordinates do not match expected for {operation}.", ) def __validate_image_data_transformation( tr_obj: sio.ImageObj, or_obj: sio.ImageObj, operation: str ) -> None: """Validate that image data was properly transformed. Args: tr_obj: The transformed image object or_obj: Original image object operation: Operation name for expected transformation """ if operation == "rotate90": expected_data = np.rot90(or_obj.data) elif operation == "rotate270": expected_data = np.rot90(or_obj.data, k=-1) elif operation == "fliph": expected_data = np.fliplr(or_obj.data) elif operation == "flipv": expected_data = np.flipud(or_obj.data) elif operation == "transpose": expected_data = np.transpose(or_obj.data) elif operation in ("resize", "binning"): # These operations are more complex and use Sigima's functions # We'll just verify the operation was applied (shape may change) return else: raise ValueError(f"Unknown operation for data validation: {operation}") np.testing.assert_array_equal( tr_obj.data, expected_data, err_msg=f"Image data not properly transformed for {operation}", ) # ============================================================================= # Unit Tests # ============================================================================= def __create_unit_test( operation: str, param_creator: Callable[ [], sip.BinningParam | sip.ResizeParam | sip.RotateParam ] = None, ) -> Callable[[], None]: """Create a unit test function for a geometry transformation operation. Args: operation: Operation name (e.g., "rotate90", "fliph") param_creator: Function to create parameter object, if needed Returns: Test function """ def test_func() -> None: """Test geometry transformation at unit level.""" obj = __create_test_image() or_geometries = __get_geometries(obj) # Store original data for comparison # Apply transformation (same as DataLab processor does) param = param_creator() if param_creator else None compfunc = getattr(sipi, operation, None) if compfunc is None: raise ValueError(f"Unknown operation: {operation}") if param is None: tr_obj = compfunc(obj) else: tr_obj = compfunc(obj, param) # Apply the geometry transformation to the result # (skip geometry transformation for resize and binning as they preserve # physical coordinates) if operation not in ["resize", "binning"]: apply_geometry_transform(tr_obj, operation) # Validate basic transformation requirements __validate_basic_transformation(tr_obj, obj) # Validate geometry transformation tr_geometries = __get_geometries(tr_obj) __validate_geometry_transformation( tr_geometries, or_geometries, operation, "Unit" ) # Validate ROI transformation (only for simple operations) simple_ops = ["fliph", "flipv", "transpose"] if operation in simple_ops: __validate_roi_transformation(tr_obj, obj, operation) # Set proper function name and docstring test_func.__name__ = f"test_geometry_transform_{operation}_unit" test_func.__doc__ = ( f"Test geometry transformation for {operation} at unit level.\n\n" f"This test verifies that the DataLab geometry transformation properly " f"applies Sigima's {operation} function to geometry results." ) return test_func def __create_app_test( operation: str, param_creator: Callable[ [], sip.BinningParam | sip.ResizeParam | sip.RotateParam ] = None, ) -> Callable[[], None]: """Create an app test function for a geometry transformation operation. Args: operation: Operation name (e.g., "rotate90", "fliph") param_creator: Function to create parameter object, if needed Returns: Test function """ def test_func() -> None: """Test operation at application level through direct processing.""" with datalab_test_app_context() as win: panel = win.imagepanel proc = panel.processor obj = __create_test_image() panel.add_object(obj) panel.objview.select_objects((1,)) # Apply operation using app workflow param = param_creator() if param_creator else None if param is None: proc.run_feature(operation) else: proc.run_feature(operation, param=param) tr_obj = panel[len(panel)] # # Validate basic transformation requirements # __validate_basic_transformation(tr_obj, obj) # # Validate geometry transformation # tr_geometries = __get_geometries(tr_obj) # __validate_geometry_transformation( # tr_geometries, or_geometries, operation, "App", param # ) # Verify that image data is properly transformed __validate_image_data_transformation(tr_obj, obj, operation) # For simple transformations, validate ROI transformation # Skip ROI validation for rotation operations due to inconsistency in Sigima # library between image data rotation (around image center) and ROI coordinate # rotation (around ROI center) simple_ops = ["fliph", "flipv", "transpose"] if operation in simple_ops: __validate_roi_transformation(tr_obj, obj, operation) # Set proper function name and docstring test_func.__name__ = f"test_geometry_transform_{operation}_app" test_func.__doc__ = ( f"Test {operation} operation at application level.\n\n" f"This test verifies the complete transformation workflow including " f"image processing and geometry transformation pipeline." ) return test_func # ============================================================================= # Parameter Creators # ============================================================================= def __resize_param() -> sip.ResizeParam: """Create resize parameter.""" return sip.ResizeParam.create(zoom=1.5) def __binning_param() -> sip.BinningParam: """Create binning parameter.""" return sip.BinningParam.create(sx=2, sy=3) # ============================================================================= # Generate Test Functions # ============================================================================= # Simple transformations (no parameters) test_geometry_transform_rotate90_unit = __create_unit_test("rotate90") test_geometry_transform_rotate90_app = __create_app_test("rotate90") test_geometry_transform_rotate270_unit = __create_unit_test("rotate270") test_geometry_transform_rotate270_app = __create_app_test("rotate270") test_geometry_transform_fliph_unit = __create_unit_test("fliph") test_geometry_transform_fliph_app = __create_app_test("fliph") test_geometry_transform_flipv_unit = __create_unit_test("flipv") test_geometry_transform_flipv_app = __create_app_test("flipv") test_geometry_transform_transpose_unit = __create_unit_test("transpose") test_geometry_transform_transpose_app = __create_app_test("transpose") # Parametric transformations test_geometry_transform_resize_unit = __create_unit_test("resize", __resize_param) test_geometry_transform_resize_app = __create_app_test("resize", __resize_param) test_geometry_transform_binning_unit = __create_unit_test("binning", __binning_param) test_geometry_transform_binning_app = __create_app_test("binning", __binning_param) if __name__ == "__main__": # test_geometry_transform_rotate90_unit() test_geometry_transform_rotate90_app() test_geometry_transform_rotate270_unit() test_geometry_transform_rotate270_app() test_geometry_transform_fliph_unit() test_geometry_transform_fliph_app() test_geometry_transform_flipv_unit() test_geometry_transform_flipv_app() test_geometry_transform_transpose_unit() test_geometry_transform_transpose_app() test_geometry_transform_resize_unit() test_geometry_transform_resize_app() test_geometry_transform_binning_unit() test_geometry_transform_binning_app() print("✅ All geometry transformation tests passed!") DataLab-1.0.2/datalab/tests/features/image/imagetools_app_test.py000066400000000000000000000034161511411446000250510ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image tools application test: - Testing `ZAxisLogTool` - Testing `profile_to_signal` function (image cross section -> curve) """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import os.path as osp from plotpy.coords import axes_to_canvas from plotpy.tools import CrossSectionTool from qtpy import QtCore as QC from sigima.objects import NewImageParam from sigima.tests.data import create_multigaussian_image from datalab.gui.docks import profile_to_signal from datalab.tests import datalab_test_app_context def test_image_tools_app(): """Run image tools test scenario""" with datalab_test_app_context() as win: panel = win.imagepanel newparam = NewImageParam.create(height=200, width=200) ima = create_multigaussian_image(newparam) panel.add_object(ima) panel.set_current_object_title(f"Test image for {osp.basename(__file__)}") plotwidget = panel.plothandler.plotwidget mgr = plotwidget.get_manager() plot = plotwidget.get_plot() # === Testing "profile_to_signal" ---------------------------------------------- cstool: CrossSectionTool = mgr.get_tool(CrossSectionTool) xcs_panel, ycs_panel = mgr.get_xcs_panel(), mgr.get_ycs_panel() xcs_panel.setVisible(True) ycs_panel.setVisible(True) x, y = newparam.width // 2, newparam.height // 2 active_item = plot.get_active_item() pos = QC.QPointF(*axes_to_canvas(active_item, x, y)) cstool.add_shape_to_plot(plot, pos, pos) for panel in (xcs_panel, ycs_panel): profile_to_signal(plot, panel) if __name__ == "__main__": test_image_tools_app() DataLab-1.0.2/datalab/tests/features/image/imagetools_unit_test.py000066400000000000000000000014031511411446000252420ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image tools test Simple image dialog for testing all image tools available in DataLab """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from guidata.qthelpers import qt_app_context from plotpy.builder import make from sigima.tests.data import create_noisy_gaussian_image from sigima.tests.vistools import view_image_items def test_image_tools_unit(): """Image tools test""" with qt_app_context(): data = create_noisy_gaussian_image().data items = [make.image(data, interpolation="nearest", eliminate_outliers=2.0)] view_image_items(items) if __name__ == "__main__": test_image_tools_unit() DataLab-1.0.2/datalab/tests/features/image/load_app_test.py000066400000000000000000000041241511411446000236220ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Load application test: high number of images """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import numpy as np import pytest import sigima.objects import sigima.params from datalab.env import execenv from datalab.tests import datalab_test_app_context def create_random_test_data( size: tuple[int, int] | None = None, ) -> sigima.objects.ImageObj: """Create a test image, based on a fast algorithm, to be able to generate a high number of images. Args: size: Size of the image. """ if size is None: size = (2048, 2048) # Create a base image with low frequency shapes: x = np.linspace(-1, 1, size[0]) y = np.linspace(-1, 1, size[1]) xx, yy = np.meshgrid(x, y) a1, a2, f1, f2 = np.random.rand(4) data = a1 * np.sin(2 * np.pi * xx * (1 + f1 * 0.2)) + a2 * np.cos( 2 * np.pi * yy * (1 + f2 * 0.2) ) # Add some random noise: data += 0.1 * np.random.randn(*data.shape) image = sigima.objects.create_image("Random test image", data) return image @pytest.mark.skip("This a load test, not a functional test") def test_high_number_of_images() -> None: """Run a test with a high number of images.""" nb = 30 execenv.print("Creating images", end="") images = [] for idx in range(nb): execenv.print(".", end="") ima = create_random_test_data() ima.title += f" {idx}" images.append(ima) execenv.print(" done") with datalab_test_app_context() as win: panel = win.imagepanel for ima in images: panel.add_object(ima) panel.objview.select_groups() # Comment the two following lines to check if DataLab only shows the last image # when they are all superposed param = sigima.params.GridParam.create(cols=10) panel.processor.distribute_on_grid(param) panel.duplicate_object() if __name__ == "__main__": test_high_number_of_images() DataLab-1.0.2/datalab/tests/features/image/morph_app_test.py000066400000000000000000000016531511411446000240340ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Morphology processing application test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params from sigima.tests.data import get_test_image from datalab.tests import datalab_test_app_context def test_morphology(): """Run morphology application test scenario""" with datalab_test_app_context() as win: win.showMaximized() panel = win.imagepanel panel.add_object(get_test_image("flower.npy")) proc = panel.processor param = sigima.params.MorphologyParam.create(radius=10) proc.compute_all_morphology(param) panel.objview.select_groups() param = sigima.params.GridParam.create(cols=4) proc.distribute_on_grid(param) panel.add_label_with_title() if __name__ == "__main__": test_morphology() DataLab-1.0.2/datalab/tests/features/image/offsetcorrection_app_test.py000066400000000000000000000021051511411446000262560ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image offset correction application test An application test for the image offset correction feature is necessary to ensure that the feature works correctly with the GUI and the image processing pipeline, as it involves user interaction and a specific dialog for selecting the offset region. Experience has shown that this feature can be prone to issues, especially with dialog interactions, so a dedicated test is essential to catch any regressions or unexpected behavior in the future. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from sigima.tests.data import get_test_image from datalab.tests import datalab_test_app_context def test_offset_correction(): """Run offset correction application test scenario""" with datalab_test_app_context() as win: win.imagepanel.add_object(get_test_image("flower.npy")) win.imagepanel.processor.compute_offset_correction() if __name__ == "__main__": test_offset_correction() DataLab-1.0.2/datalab/tests/features/image/peak2d_app_test.py000066400000000000000000000033131511411446000240500ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ 2D peak detection test Testing the following: - Create a test image with multiple peaks - Compute 2D peak detection and show points on image """ # guitest: show import sigima.params from sigima.tests.data import create_peak_image from datalab.tests import datalab_test_app_context, take_plotwidget_screenshot def test_peak2d(screenshot: bool = False) -> None: """Run 2D peak detection scenario""" with datalab_test_app_context() as win: panel = win.imagepanel ima = create_peak_image() panel.add_object(ima) # Test with ROI creation enabled (default) param = sigima.params.Peak2DDetectionParam.create(create_rois=True) results = panel.processor.compute_peak_detection(param) assert results is not None, "Peak detection should return results" # Get the processed image object obj = panel.objview.get_current_object() assert obj.roi is not None, "ROI should be created when create_rois=True" assert not obj.roi.is_empty(), "ROI should not be empty" # Test with ROI creation disabled ima2 = create_peak_image() panel.add_object(ima2) param2 = sigima.params.Peak2DDetectionParam.create(create_rois=False) panel.processor.compute_peak_detection(param2) obj2 = panel.objview.get_current_object() assert obj2.roi is None or obj2.roi.is_empty(), ( "ROI should not be created when create_rois=False" ) win.toggle_show_titles(False) if screenshot: take_plotwidget_screenshot(panel, "peak2d_test") if __name__ == "__main__": test_peak2d() DataLab-1.0.2/datalab/tests/features/image/profile_app_test.py000066400000000000000000000046441511411446000243520ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Profile extraction test ======================= Testing the profile extraction features of the image panel: - Compute a profile along a horizontal line - Compute a profile along a vertical line - Compute an average profile between two points along a horizontal line - Compute an average profile between two points along a vertical line - Compute a radial profile """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params from sigima.tests.data import create_noisy_gaussian_image, get_test_image from datalab.tests import datalab_test_app_context def test_profile(): """Run profile extraction test scenario""" with datalab_test_app_context() as win: panel = win.imagepanel panel.add_object(get_test_image("flower.npy")) proc = panel.processor for direction, row, col in ( ("horizontal", 102, 131), ("vertical", 102, 131), ): profparam = sigima.params.LineProfileParam.create( direction=direction, row=row, col=col ) proc.compute_line_profile(profparam) for direction, row1, col1, row2, col2 in ( ("horizontal", 10, 10, 102, 131), ("vertical", 10, 10, 102, 131), ): avgprofparam = sigima.params.AverageProfileParam.create( direction=direction, row1=row1, col1=col1, row2=row2, col2=col2, ) proc.compute_average_profile(avgprofparam) segprofparam = sigima.params.SegmentProfileParam.create( row1=10, col1=10, row2=102, col2=131 ) proc.compute_segment_profile(segprofparam) image2 = create_noisy_gaussian_image(center=(0.0, 0.0), add_annotations=False) panel.add_object(image2) for center, x0, y0 in ( (None, 0.0, 0.0), ("centroid", 0.0, 0.0), ("center", 0.0, 0.0), ("user", 800.0, 900.0), ): if center is None: proc.compute_radial_profile() else: param = sigima.params.RadialProfileParam.create( center=center, x0=x0, y0=y0 ) proc.compute_radial_profile(param) if __name__ == "__main__": test_profile() DataLab-1.0.2/datalab/tests/features/image/profile_dialog_test.py000066400000000000000000000042171511411446000250250ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Profile extraction unit test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params from guidata.qthelpers import exec_dialog, qt_app_context from sigima.tests.data import create_noisy_gaussian_image from datalab.env import execenv from datalab.gui.profiledialog import ProfileExtractionDialog def test_profile_unit(): """Run profile extraction test""" with qt_app_context(): obj = create_noisy_gaussian_image(center=(0.0, 0.0), add_annotations=False) for mode in ("line", "segment", "rectangle"): for initial_param in (True, False): if initial_param: if mode == "line": param = sigima.params.LineProfileParam.create(row=100, col=200) elif mode == "segment": param = sigima.params.SegmentProfileParam.create( row1=10, col1=20, row2=200, col2=300 ) else: param = sigima.params.AverageProfileParam.create( row1=10, col1=20, row2=200, col2=300 ) else: if mode == "line": param = sigima.params.LineProfileParam() elif mode == "segment": param = sigima.params.SegmentProfileParam() else: param = sigima.params.AverageProfileParam() execenv.print("-" * 80) execenv.print(f"Testing mode: {mode} - initial_param: {initial_param}") dialog = ProfileExtractionDialog( mode, param, add_initial_shape=initial_param ) dialog.set_obj(obj) if initial_param: dialog.edit_values() ok = exec_dialog(dialog) execenv.print(f"Returned code: {ok}") execenv.print(f"Param: {param}") if __name__ == "__main__": test_profile_unit() DataLab-1.0.2/datalab/tests/features/image/roi_app_test.py000066400000000000000000000065271511411446000235050ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Image ROI application test""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations from typing import TYPE_CHECKING import pytest import sigima.params as sigima_param from sigima.objects import ImageObj, ImageROI, NewImageParam, create_image_roi from sigima.tests.data import create_multigaussian_image from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers if TYPE_CHECKING: from datalab.gui.panel.image import ImagePanel SIZE = 200 # Image ROIs: IROI1 = [100, 100, 75, 100] # Rectangle IROI2 = [66, 100, 50] # Circle # Polygon (triangle, that is intentionally inside the rectangle, so that this ROI # has no impact on the mask calculations in the tests) IROI3 = [100, 100, 100, 150, 150, 133] def __run_image_computations(panel: ImagePanel): """Test all image features related to ROI""" panel.processor.run_feature("centroid") panel.processor.run_feature("histogram", sigima_param.HistogramParam()) panel.processor.run_feature( "peak_detection", sigima_param.Peak2DDetectionParam.create(create_rois=False) ) roi = ImageROI() panel.processor.compute_roi_extraction(roi) def create_test_image_with_roi(newimageparam: NewImageParam) -> ImageObj: """Create test image with ROIs Args: newimageparam (sigima.NewImageParam): Image parameters Returns: sigima.ImageObj: Image object with ROIs """ ima = create_multigaussian_image(newimageparam) ima.data += 1 # Ensure that the image has non-zero values (for ROI check tests) roi = create_image_roi("rectangle", IROI1) roi.add_roi(create_image_roi("circle", IROI2)) roi.add_roi(create_image_roi("polygon", IROI3)) ima.roi = roi return ima def test_image_roi_app(screenshots: bool = False): """Run Image ROI application test scenario""" with datalab_test_app_context(console=False) as win: execenv.print("Image ROI application test:") panel = win.imagepanel param = NewImageParam.create(height=SIZE, width=SIZE) ima1 = create_multigaussian_image(param) panel.add_object(ima1) __run_image_computations(panel) ima2 = create_test_image_with_roi(param) for singleobj in (False, True): with Conf.proc.extract_roi_singleobj.temp(singleobj): ima2_i = ima2.copy() panel.add_object(ima2_i) helpers.print_obj_data_dimensions(ima2_i) panel.processor.edit_roi_graphically() if screenshots: win.statusBar().hide() win.take_screenshot("i_roi_image") __run_image_computations(panel) @pytest.mark.skip(reason="This test is only for manual testing") def test_image_roi_basic_app(): """Run Image ROI basic application test scenario""" with datalab_test_app_context(console=False) as win: panel = win.imagepanel param = NewImageParam.create(height=SIZE, width=SIZE) ima1 = create_multigaussian_image(param) panel.add_object(ima1) panel.processor.edit_roi_graphically() if __name__ == "__main__": test_image_roi_app(screenshots=True) test_image_roi_basic_app() DataLab-1.0.2/datalab/tests/features/image/roi_circ_app_test.py000066400000000000000000000037431511411446000245020ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Circular ROI test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations from typing import Literal import numpy as np import sigima.objects from skimage import draw from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers def create_test_image_with_roi( geometry: Literal["rectangle", "circle", "polygon"], ) -> sigima.objects.ImageObj: """Create test image with ROIs""" data = np.zeros((500, 750), dtype=np.uint16) xc, yc, r = 500, 200, 100 rr, cc = draw.disk((yc, xc), r) data[rr, cc] = 10000 data[yc + r - 20 : yc + r, xc + r - 30 : xc + r - 10] = 50000 if geometry == "rectangle": coords = [xc - r, yc - r, 2 * r, 2 * r] elif geometry == "circle": coords = [xc, yc, r] else: raise NotImplementedError(f"Geometry {geometry} not implemented") ima = sigima.objects.create_image(f"Test image with ROI/{geometry}", data) ima.roi = sigima.objects.create_image_roi(geometry, coords, indices=True) return ima def test_roi_circ() -> None: """Run circular ROI application test scenario""" with datalab_test_app_context() as win: execenv.print("Circular ROI test:") panel = win.imagepanel for geometry in ("rectangle", "circle"): # model.ROI2DParam.geometries: ima = create_test_image_with_roi(geometry) panel.add_object(ima) helpers.print_obj_data_dimensions(ima) panel.processor.run_feature("stats") panel.processor.run_feature("centroid") # Extracting ROIs: for obj_nb in (1, 2): obj = panel[obj_nb] panel.objview.set_current_object(obj) params = obj.roi.to_params(obj) panel.processor.run_feature("extract_roi", params=params) if __name__ == "__main__": test_roi_circ() DataLab-1.0.2/datalab/tests/features/image/roi_manipulation_app_test.py000066400000000000000000000250241511411446000262560ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Image ROI manipulation application test (copy/paste, import/export)""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import os import tempfile from typing import TYPE_CHECKING from sigima.io import read_roi from sigima.objects import NewImageParam, create_image_roi from sigima.tests.data import create_multigaussian_image from datalab.env import execenv from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context if TYPE_CHECKING: from datalab.gui.panel.image import ImagePanel SIZE = 200 # Image ROIs: IROI1 = [100, 100, 75, 100] # Rectangle IROI2 = [66, 100, 50] # Circle IROI3 = [100, 100, 100, 150, 150, 133] # Polygon def test_image_roi_copy_paste(): """Test image ROI copy and paste functionality""" with datalab_test_app_context(console=False) as win: execenv.print("Image ROI Copy/Paste test:") panel: ImagePanel = win.imagepanel param = NewImageParam.create(height=SIZE, width=SIZE) # Create first image with ROI ima1 = create_multigaussian_image(param) ima1.title = "Image with ROI" roi1 = create_image_roi("rectangle", IROI1) roi1.add_roi(create_image_roi("circle", IROI2)) ima1.roi = roi1 panel.add_object(ima1) # Create second image without ROI ima2 = create_multigaussian_image(param) ima2.title = "Image without ROI" panel.add_object(ima2) # Create third image without ROI ima3 = create_multigaussian_image(param) ima3.title = "Image without ROI 2" panel.add_object(ima3) execenv.print(" Initial state:") execenv.print(f" Image 1 ROI: {ima1.roi is not None}") execenv.print(f" Image 2 ROI: {ima2.roi is not None}") execenv.print(f" Image 3 ROI: {ima3.roi is not None}") # Select first image and copy its ROI panel.objview.set_current_item_id(get_uuid(ima1)) panel.copy_roi() execenv.print(" Copied ROI from Image 1") # Select second image and paste ROI panel.objview.set_current_item_id(get_uuid(ima2)) panel.paste_roi() execenv.print(" Pasted ROI to Image 2") # Verify that ima2 now has the same ROI as ima1 assert ima2.roi is not None, "Image 2 should have ROI after paste" assert len(ima2.roi) == len(ima1.roi), "ROI should have same number of regions" execenv.print(f" Image 2 now has {len(ima2.roi)} ROI regions") # Select third image and paste ROI (should create new ROI) panel.objview.set_current_item_id(get_uuid(ima3)) panel.paste_roi() execenv.print(" Pasted ROI to Image 3") assert ima3.roi is not None, "Image 3 should have ROI after paste" assert len(ima3.roi) == len(ima1.roi), "ROI should have same number of regions" execenv.print(f" Image 3 now has {len(ima3.roi)} ROI regions") # Test pasting to image that already has ROI (should combine) panel.objview.set_current_item_id(get_uuid(ima2)) panel.copy_roi() execenv.print(" Copied ROI from Image 2") # Add a different ROI to ima1 roi_new = create_image_roi("polygon", IROI3) ima1.roi.add_roi(roi_new) original_roi_count = len(ima1.roi) execenv.print(f" Image 1 now has {original_roi_count} ROI regions") # Paste the ROI from ima2 into ima1 (should combine) panel.objview.set_current_item_id(get_uuid(ima1)) panel.paste_roi() execenv.print(" Pasted ROI to Image 1 (should combine)") # Get fresh reference to ima1 from panel ima1_updated = panel.objmodel[get_uuid(ima1)] assert ima1_updated.roi is not None, "Image 1 should still have ROI" # After combining, ima1 should have more regions than before assert len(ima1_updated.roi) >= original_roi_count, ( f"Expected at least {original_roi_count} ROI regions, " f"got {len(ima1_updated.roi)}" ) execenv.print( f" Image 1 now has {len(ima1_updated.roi)} ROI regions (combined)" ) execenv.print(" ✓ Image ROI copy/paste test passed") def test_image_roi_copy_paste_multiple_selection(): """Test image ROI paste to multiple selected images""" with datalab_test_app_context(console=False) as win: execenv.print("Image ROI Copy/Paste with multiple selection test:") panel: ImagePanel = win.imagepanel param = NewImageParam.create(height=SIZE, width=SIZE) # Create source image with ROI ima_src = create_multigaussian_image(param) ima_src.title = "Source with ROI" roi = create_image_roi("rectangle", IROI1) roi.add_roi(create_image_roi("circle", IROI2)) ima_src.roi = roi panel.add_object(ima_src) # Create multiple target images without ROI target_images = [] for i in range(3): ima = create_multigaussian_image(param) ima.title = f"Target image {i + 1}" panel.add_object(ima) target_images.append(ima) execenv.print(f" Created {len(target_images)} target images") # Copy ROI from source panel.objview.set_current_item_id(get_uuid(ima_src)) panel.copy_roi() execenv.print(" Copied ROI from source image") # Select all target images target_uuids = [get_uuid(img) for img in target_images] panel.objview.set_current_item_id(target_uuids[0]) for uuid in target_uuids[1:]: panel.objview.set_current_item_id(uuid, extend=True) execenv.print(f" Selected {len(target_uuids)} target images") # Paste ROI to all selected images panel.paste_roi() execenv.print(" Pasted ROI to all selected images") # Verify all target images have ROI for i, img in enumerate(target_images): assert img.roi is not None, f"Target image {i + 1} should have ROI" assert len(img.roi) == len(ima_src.roi), ( f"Target image {i + 1} should have {len(ima_src.roi)} ROI regions" ) execenv.print(f" Target image {i + 1}: {len(img.roi)} ROI regions ✓") execenv.print(" ✓ Multiple selection paste test passed") def test_image_roi_import_export(): """Test image ROI import and export to/from file functionality""" with datalab_test_app_context(console=False) as win: execenv.print("Image ROI Import/Export test:") panel: ImagePanel = win.imagepanel param = NewImageParam.create(height=SIZE, width=SIZE) # Create first image with ROI ima1 = create_multigaussian_image(param) ima1.title = "Image with ROI" roi1 = create_image_roi("rectangle", IROI1) roi1.add_roi(create_image_roi("circle", IROI2)) roi1.add_roi(create_image_roi("polygon", IROI3)) ima1.roi = roi1 panel.add_object(ima1) original_roi_count = len(ima1.roi) execenv.print(f" Image 1 has {original_roi_count} ROI regions") # Export ROI to file roi_file = tempfile.mktemp(suffix=".dlabroi") try: execenv.print(" Exporting ROI to temporary file") # Select first image and export its ROI panel.objview.set_current_item_id(get_uuid(ima1)) panel.export_roi_to_file(roi_file) execenv.print(" ✓ ROI exported") # Verify file was created assert os.path.exists(roi_file), "ROI file should have been created" # Read the exported ROI directly to verify content exported_roi = read_roi(roi_file) assert len(exported_roi) == original_roi_count, ( f"Exported ROI should have {original_roi_count} regions" ) execenv.print(f" ✓ Exported ROI has {len(exported_roi)} regions") # Create second image without ROI ima2 = create_multigaussian_image(param) ima2.title = "Image without ROI" panel.add_object(ima2) assert ima2.roi is None, "Image 2 should not have ROI initially" # Import ROI from file to second image panel.objview.set_current_item_id(get_uuid(ima2)) panel.import_roi_from_file(roi_file) execenv.print(" Imported ROI to Image 2") # Get fresh reference to ima2 from panel ima2_updated = panel.objmodel[get_uuid(ima2)] assert ima2_updated.roi is not None, "Image 2 should have ROI after import" assert len(ima2_updated.roi) == original_roi_count, ( f"Imported ROI should have {original_roi_count} regions" ) execenv.print(f" ✓ Image 2 now has {len(ima2_updated.roi)} ROI regions") # Test importing ROI to image that already has ROI (should combine) ima3 = create_multigaussian_image(param) ima3.title = "Image with existing ROI" roi3 = create_image_roi("circle", [150, 150, 40]) ima3.roi = roi3 panel.add_object(ima3) initial_roi_count = len(ima3.roi) execenv.print(f" Image 3 has {initial_roi_count} ROI region initially") # Import ROI (should combine with existing) panel.objview.set_current_item_id(get_uuid(ima3)) panel.import_roi_from_file(roi_file) execenv.print(" Imported ROI to Image 3 (should combine)") # Get fresh reference to ima3 from panel ima3_updated = panel.objmodel[get_uuid(ima3)] assert ima3_updated.roi is not None, "Image 3 should still have ROI" # After combining, should have more regions assert len(ima3_updated.roi) >= initial_roi_count, ( f"Expected at least {initial_roi_count} ROI regions, " f"got {len(ima3_updated.roi)}" ) execenv.print( f" ✓ Image 3 now has {len(ima3_updated.roi)} ROI regions (combined)" ) finally: # Clean up temporary file if os.path.exists(roi_file): try: os.unlink(roi_file) except (PermissionError, OSError): pass # Ignore cleanup errors on Windows execenv.print(" ✓ Image ROI import/export test passed") if __name__ == "__main__": test_image_roi_copy_paste() test_image_roi_copy_paste_multiple_selection() test_image_roi_import_export() DataLab-1.0.2/datalab/tests/features/image/roigrid_unit_test.py000066400000000000000000000036741511411446000245520ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ROI grid unit test.""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations from guidata.qthelpers import exec_dialog, qt_app_context from sigima.proc.image import Direction, ROIGridParam from sigima.tests.data import create_grid_of_gaussian_images from datalab.gui.roigrideditor import ImageGridROIEditor from datalab.utils import qthelpers as qth def test_roi_grid(screenshots: bool = False) -> None: """ROI grid test.""" with qt_app_context(): roi_editor = ImageGridROIEditor( parent=None, obj=create_grid_of_gaussian_images() ) if screenshots: roi_editor.show() qth.grab_save_window(roi_editor) exec_dialog(roi_editor) def test_roi_grid_geometry_headless() -> None: """Test ROI grid geometry in headless mode.""" img = create_grid_of_gaussian_images() # Create grid parameters gp = ROIGridParam() gp.nx, gp.ny = 2, 2 gp.xsize = gp.ysize = 50 gp.xtranslation = gp.ytranslation = 50 gp.xdirection = gp.ydirection = Direction.INCREASING with qt_app_context(): dlg = ImageGridROIEditor(parent=None, obj=img, gridparam=gp) # Set a small grid and sizes dlg.update_obj(update_item=False) roi = dlg.get_roi() assert roi is not None # 4 ROIs, centered in each cell assert len(list(roi)) == 4 titles = [r.title for r in roi] assert "ROI(1,1)" in titles and "ROI(2,2)" in titles # Check one ROI position approximately r00 = next(r for r in roi if r.title == "ROI(1,1)") _x0, _y0, dx, dy = r00.get_physical_coords(img) assert dx == img.width / 2 * 0.5 assert dy == img.height / 2 * 0.5 if __name__ == "__main__": test_roi_grid_geometry_headless() test_roi_grid(screenshots=True) DataLab-1.0.2/datalab/tests/features/image/side_by_side_app_test.py000066400000000000000000000027201511411446000253250ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ View images side-by-side test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import numpy as np import sigima.objects from datalab.tests import datalab_test_app_context def test_view_images_side_by_side() -> None: """Test viewing multiple images side-by-side.""" with datalab_test_app_context() as win: panel = win.imagepanel # Create several test images with different content for i in range(5): x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) xx, yy = np.meshgrid(x, y) # Different patterns for each image if i == 0: data = np.exp(-(xx**2 + yy**2) / (2 * (i + 1))) elif i == 1: data = np.sin(xx) * np.cos(yy) elif i == 2: data = np.abs(xx) + np.abs(yy) elif i == 3: data = xx**2 - yy**2 else: data = np.random.randn(100, 100) image = sigima.objects.create_image(f"Test Image {i + 1}", data) panel.add_object(image) # Select all images (1 to 5) panel.objview.select_objects(list(range(1, 6))) # Open side-by-side view panel.view_images_side_by_side() if __name__ == "__main__": test_view_images_side_by_side() DataLab-1.0.2/datalab/tests/features/macro/000077500000000000000000000000001511411446000204505ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/features/macro/__init__.py000066400000000000000000000000021511411446000225510ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/features/macro/macro_app_test.py000066400000000000000000000014101511411446000240160ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Macro Panel application test (essentially for the screenshot...) """ # guitest: show from datalab import config from datalab.gui.main import DLMainWindow from datalab.utils import qthelpers as qth def test_macro(screenshots: bool = False) -> None: """Run image tools test scenario""" config.reset() # Reset configuration (remove configuration file and initialize it) with qth.datalab_app_context(exec_loop=True): win = DLMainWindow() win.show() win.set_current_panel("macro") win.macropanel.add_macro() if screenshots: qth.grab_save_window(win.macropanel, "macro_panel") if __name__ == "__main__": test_macro() DataLab-1.0.2/datalab/tests/features/macro/macroeditor_unit_test.py000066400000000000000000000167611511411446000254430ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Macro Panel unit tests ---------------------- The objective of this test is to check all the functionalities of the Macro Panel widget, by calling all its methods and checking the results. Some methods are not tested here, as they are tested in remote control tests (see datalab/tests/features/control/remoteclient_app.py): - `run_macro` - `stop_macro` All other methods should be tested here. """ # guitest: show import os.path as osp import time from guidata.qthelpers import qt_app_context from qtpy import QtWidgets as QW from datalab.env import execenv from datalab.gui.macroeditor import Macro from datalab.gui.panel import macro from datalab.tests import datalab_test_app_context, helpers def get_macro_example_path() -> str: """Return macro example path""" path = helpers.get_temporary_directory() contents = """ # Simple DataLab macro example import numpy as np from datalab.control.proxy import RemoteProxy proxy = RemoteProxy() z = np.random.rand(20, 20) proxy.add_image("toto", z) proxy.calc("fft") print("All done! :)") """ filename = osp.join(path, "macro_example.py") with open(filename, "w", encoding="utf-8") as f: f.write(contents) return filename def test_macro_editor(): """Test dep viewer window""" with qt_app_context(exec_loop=True): widget = macro.MacroPanel(None) widget.resize(800, 600) widget.show() # Create a new macro new_macro = widget.add_macro() assert new_macro is widget.get_macro() # Check out the macro title, serializable name, number, ... execenv.print("Macro title:", new_macro.title) execenv.print("Serializable name:", widget.get_serializable_name(new_macro)) nb1 = widget.get_number_from_macro(new_macro) nb2 = widget.get_number_from_title(new_macro.title) assert nb1 == nb2 and nb1 == 1 execenv.print("Macro number:", nb1) titles = widget.get_macro_titles() assert titles[0] == new_macro.title and len(titles) == 1 new_title = "New title" widget.rename_macro(1, new_title) assert widget.get_macro_titles()[0] == new_title with helpers.WorkdirRestoringTempDir() as tmpdir: fname = osp.join(tmpdir, "macro.py") widget.export_macro_to_file(1, fname) widget.import_macro_from_file(fname) imported_macro: Macro = widget.get_macro(2) assert imported_macro.title == new_macro.title assert imported_macro.get_code() == new_macro.get_code() widget.rename_macro(1, "Other title") widget.remove_macro(1) assert len(widget.get_macro_titles()) == 1 assert widget.get_macro_titles()[0] == imported_macro.title # Remove all macros widget.remove_all_objects() assert len(widget.get_macro_titles()) == 0 # Load a macro from file macro_path = get_macro_example_path() widget.import_macro_from_file(macro_path) assert len(widget.get_macro_titles()) == 1 assert widget.get_macro_titles()[0] == osp.basename(macro_path) def test_macro_unicode_encoding(): """Test that macros can print Unicode characters without encoding errors. This test verifies the fix for the UnicodeEncodeError that occurred on Windows systems with locales like cp1252 when macros printed Unicode characters. The test creates and runs a macro that prints various Unicode characters, simulating the scenario where RemoteProxy connection messages (which contain arrows →) would cause encoding errors on Windows with cp1252 locale. Without the UTF-8 encoding fix in Macro.run(), this test would fail with: UnicodeEncodeError: 'charmap' codec can't encode character '\u2192' """ with helpers.WorkdirRestoringTempDir(): with datalab_test_app_context(console=False) as win: win.set_current_panel("macro") # Create a macro that prints various Unicode characters macro = win.macropanel.add_macro() macro.title = "Unicode Test Macro" # This test verifies that Unicode characters can be printed successfully. # The macro prints Unicode characters without any encoding manipulation. # With the UTF-8 fix in Macro.run(), these print statements work correctly. # Without the fix, on systems with cp1252 locale, these would fail. # # Note: We cannot reliably simulate cp1252 locale in the test because: # 1. Modern Python often defaults to UTF-8 # 2. If we manually reconfigure to cp1252 in the macro, it overrides # any fix done before the macro code runs # 3. The PYTHONIOENCODING env var might be set system-wide # # This test serves as a regression test - it will catch if the fix # is removed, but only on systems that actually default to cp1252. unicode_code = """ import sys # Print encoding info for debugging print(f"stdout encoding: {sys.stdout.encoding}") print(f"stderr encoding: {sys.stderr.encoding}") # Print various Unicode characters that are not in cp1252 # On systems with cp1252 default locale, without the UTF-8 fix, # these would cause UnicodeEncodeError print("Testing Unicode output:") print(" → Arrow character (U+2192)") print(" ✓ Check mark (U+2713)") print(" • Bullet point (U+2022)") print(" … Ellipsis (U+2026)") print(" Emoji: 🎉 🚀 ⚡") # Simulate RemoteProxy connection message format print("Setting XML-RPC port... [input:None] →[execenv.xmlrpcport:None] OK") print("All Unicode tests passed! ✓") """ macro.set_code(unicode_code) # Run the macro and wait for completion execenv.print("Running Unicode test macro...") win.macropanel.run_macro() # Wait for macro to complete (with timeout) # We need to process Qt events for the QProcess signals to be delivered max_wait = 10 # seconds elapsed = 0 while macro.is_running() and elapsed < max_wait: QW.QApplication.processEvents() time.sleep(0.1) elapsed += 0.1 # Verify the macro completed (not still running) # If there was an encoding error, the process would have crashed assert not macro.is_running(), ( "Macro did not complete within timeout - " "likely failed with encoding error" ) # Check the exit code - should be 0 for success # With the UTF-8 fix, the macro completes successfully (exit code 0) # Without the fix, it crashes with UnicodeEncodeError (exit code 1) exit_code = macro.get_exit_code() assert exit_code == 0, ( f"Macro exited with error code {exit_code} - " f"likely UnicodeEncodeError when trying to print Unicode characters" ) execenv.print("✓ Unicode test macro completed successfully!") execenv.print( "Note: This test verifies Unicode support works. On systems with " "UTF-8 as default encoding, it may pass even without the fix. " "The fix is critical for Windows systems with cp1252 locale." ) # Clean up win.macropanel.remove_all_objects() if __name__ == "__main__": test_macro_editor() test_macro_unicode_encoding() DataLab-1.0.2/datalab/tests/features/signal/000077500000000000000000000000001511411446000206245ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/features/signal/__init__.py000066400000000000000000000000021511411446000227250ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/features/signal/baseline_dialog_test.py000066400000000000000000000033271511411446000253430ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Baseline dialog test """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: show from __future__ import annotations import numpy as np import sigima.objects import sigima.proc.signal as sips from guidata.qthelpers import exec_dialog, qt_app_context from sigima.tests.data import create_paracetamol_signal from sigima.tests.vistools import view_curves from datalab.env import execenv from datalab.widgets.signalbaseline import SignalBaselineDialog def test_signal_baseline_selection(): """Signal baseline selection dialog test""" sig = create_paracetamol_signal() with qt_app_context(): dlg = SignalBaselineDialog(sig) dlg.resize(640, 480) dlg.setObjectName(dlg.objectName() + "_00") # to avoid timestamp suffix exec_dialog(dlg) execenv.print(f"baseline: {dlg.get_baseline()}") execenv.print(f"X range: {dlg.get_x_range()}") # Check baseline value: i0, i1 = np.searchsorted(sig.x, dlg.get_x_range()) assert dlg.get_baseline() == sig.data[i0:i1].mean() def test_signal_baseline_dialog() -> None: """Test the signal baseline dialog for offset correction.""" with qt_app_context(): s1 = create_paracetamol_signal() dlg = SignalBaselineDialog(s1) if exec_dialog(dlg): param = sigima.objects.ROI1DParam() param.xmin, param.xmax = dlg.get_x_range() s2 = sips.offset_correction(s1, param) view_curves([s1, s2], title="Signal offset correction") if __name__ == "__main__": test_signal_baseline_selection() test_signal_baseline_dialog() DataLab-1.0.2/datalab/tests/features/signal/custom_signal_bug_unit_test.py000066400000000000000000000066711511411446000270120ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Test for Custom Signal creation bug fix ======================================== This test verifies that creating a Custom signal doesn't crash with AttributeError when xyarray is None. Bug report: "Créer un signal Custom déclenche immédiatement l'erreur AttributeError: 'NoneType' object has no attribute 'T'." """ import pytest from guidata.qthelpers import qt_app_context from datalab.gui.newobject import CustomSignalParam, create_signal_gui def test_custom_signal_param_initialization(): """Test that CustomSignalParam initializes properly""" with qt_app_context(): param = CustomSignalParam() # Initially, xyarray should be None assert param.xyarray is None # But other defaults should exist assert param.size == 10 assert param.xmin == 0.0 assert param.xmax == 1.0 def test_custom_signal_param_setup_array(): """Test that setup_array creates the xyarray properly""" with qt_app_context(): param = CustomSignalParam() assert param.xyarray is None # Call setup_array to initialize param.setup_array(size=10, xmin=0.0, xmax=1.0) # Now xyarray should exist and be transposable assert param.xyarray is not None assert param.xyarray.shape == (10, 2) # Should be able to transpose without error transposed = param.xyarray.T assert transposed.shape == (2, 10) def test_custom_signal_param_generate_1d_data(): """Test that generate_1d_data works even with None xyarray""" with qt_app_context(): param = CustomSignalParam() assert param.xyarray is None # generate_1d_data should call setup_array internally x, y = param.generate_1d_data() # Should succeed without AttributeError assert x is not None assert y is not None assert len(x) == param.size assert len(y) == param.size def test_custom_signal_creation_forces_edit_mode(): """Test that creating a custom signal with edit=False forces edit=True This test verifies the bug fix for: "Créer un signal Custom déclenche immédiatement l'erreur AttributeError: 'NoneType' object has no attribute 'T'." The bug occurred when edit=False was passed (the default), which caused setup_array to not be called, leaving xyarray as None, which then crashed when trying to access xyarray.T. The fix forces edit=True for CustomSignalParam to ensure the user is always prompted to set up the array properly. """ # This test can't actually test the dialog interaction, but we can verify # that the code doesn't crash immediately with AttributeError due to None xyarray # The test framework will handle the unattended mode appropriately with qt_app_context(): # In unattended mode, the dialogs will be auto-canceled, so this should # return None rather than crashing param = CustomSignalParam() # In actual usage with GUI, this would show dialogs # In unattended test mode, dialogs are auto-canceled # The important thing is it doesn't crash with AttributeError _signal = create_signal_gui(param, edit=False, parent=None) # In unattended mode, this will be None because dialogs are canceled # But it shouldn't have crashed with AttributeError if __name__ == "__main__": pytest.main([__file__, "-v"]) DataLab-1.0.2/datalab/tests/features/signal/deltax_dialog_unit_test.py000066400000000000000000000021541511411446000260760ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Signal delta x dialog unit test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from guidata.qthelpers import exec_dialog, qt_app_context from sigima.tests.data import create_paracetamol_signal from sigima.tools.signal.pulse import full_width_at_y from datalab.widgets.signaldeltax import SignalDeltaXDialog def test_signal_delta_x_dialog(): """Test the SignalDeltaXDialog widget.""" sig = create_paracetamol_signal() with qt_app_context(): dlg = SignalDeltaXDialog(signal=sig) dlg.resize(640, 480) dlg.setObjectName(dlg.objectName() + "_00") # to avoid timestamp suffix exec_dialog(dlg) y = dlg.get_y_value() x0, y0, x1, y1 = dlg.get_coords() exp_x0, exp_y0, exp_x1, exp_y1 = full_width_at_y(sig.x, sig.y, y) assert (x0, y0, x1, y1) == (exp_x0, exp_y0, exp_x1, exp_y1), ( f"Expected: {(exp_x0, exp_y0, exp_x1, exp_y1)} but got: {(x0, y0, x1, y1)}" ) if __name__ == "__main__": test_signal_delta_x_dialog() DataLab-1.0.2/datalab/tests/features/signal/fft1d_app_test.py000066400000000000000000000013001511411446000240730ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Signal FFT application test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from sigima.objects import CosineParam, create_signal_from_param from datalab.tests import datalab_test_app_context def test_fft1d_app(): """FFT application test.""" with datalab_test_app_context() as win: panel = win.signalpanel s1 = create_signal_from_param(CosineParam.create(size=10000)) panel.add_object(s1) panel.processor.run_feature("fft") panel.processor.run_feature("ifft") if __name__ == "__main__": test_fft1d_app() DataLab-1.0.2/datalab/tests/features/signal/filter_app_test.py000066400000000000000000000031231511411446000243610ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Frequential filtering application test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.params from sigima.objects import create_signal_from_param from sigima.tests.helpers import check_array_result from sigima.tests.signal.pulse.pulse_unit_test import create_test_square_params from datalab.tests import datalab_test_app_context def test_signal_freq_filter_app(): """Signal frequency filtering application test.""" with datalab_test_app_context(console=False) as win: panel = win.signalpanel s1 = create_signal_from_param(create_test_square_params()) panel.add_object(s1) for feature, paramclass in ( ("lowpass", sigima.params.LowPassFilterParam), ("highpass", sigima.params.HighPassFilterParam), ("bandstop", sigima.params.BandStopFilterParam), ): for zero_padding in (True, False): panel.objview.select_objects([1]) # Select the first signal param = paramclass.create(method="brickwall", zero_padding=zero_padding) param.update_from_obj(s1) panel.processor.run_feature(feature, param) s2 = panel.objview.get_sel_objects()[0] check_array_result( f"{feature} filter output X data (zero_padding={zero_padding})", s2.x, s1.x, ) if __name__ == "__main__": test_signal_freq_filter_app() DataLab-1.0.2/datalab/tests/features/signal/fitdialog_unit_test.py000066400000000000000000000035751511411446000252500ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Curve fitting dialog test Testing fit dialogs: Gaussian, Lorentzian, Voigt, etc. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from guidata.qthelpers import qt_app_context from sigima.objects import NormalDistribution1DParam from sigima.tests.data import create_noisy_signal, get_test_signal from sigima.tools.signal.peakdetection import peak_indices from datalab.env import execenv from datalab.tests import helpers from datalab.widgets import fitdialog as fdlg def test_fit_dialog(): """Test function""" with qt_app_context(): # Multi-gaussian curve fitting test s1 = get_test_signal("paracetamol.txt") peakidx = peak_indices(s1.y) s2 = create_noisy_signal(NormalDistribution1DParam.create(sigma=5.0)) s3 = get_test_signal("gaussian_fit.txt") s4 = get_test_signal("piecewiseexponential_fit.txt") ep = execenv.print tn = helpers.get_default_test_name ep(fdlg.polynomial_fit(s2.x, s2.y, 4, name=tn("00"))) ep(fdlg.linear_fit(s2.x, s2.y, name=tn("01"))) ep(fdlg.gaussian_fit(s3.x, s3.y, name=tn("02"))) ep(fdlg.lorentzian_fit(s3.x, s3.y, name=tn("03"))) ep(fdlg.multigaussian_fit(s1.x, s1.y, peakidx, name=tn("04"))) ep(fdlg.multilorentzian_fit(s1.x, s1.y, peakidx, name=tn("05"))) ep(fdlg.voigt_fit(s3.x, s3.y, name=tn("06"))) ep(fdlg.exponential_fit(s2.x, s2.y, name=tn("07"))) ep(fdlg.sinusoidal_fit(s2.x, s2.y, name=tn("08"))) ep(fdlg.cdf_fit(s2.x, s2.y, name=tn("09"))) ep(fdlg.planckian_fit(s3.x, s3.y, name=tn("10"))) ep(fdlg.twohalfgaussian_fit(s3.x, s3.y, name=tn("11"))) ep(fdlg.piecewiseexponential_fit(s4.x, s4.y, name=tn("12"))) if __name__ == "__main__": test_fit_dialog() DataLab-1.0.2/datalab/tests/features/signal/interpolation_app_test.py000066400000000000000000000101631511411446000257650ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Interpolation application test and X-array compatibility behavior. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import numpy as np import sigima.params from sigima.objects import SignalObj, create_signal from datalab.tests import datalab_test_app_context def test_interpolation_app(): """Test interpolation feature in DataLab application. This test ensures that interpolation works correctly when signals have different X arrays (which is the whole point of interpolation). """ with datalab_test_app_context() as win: panel = win.signalpanel # Create interpolation parameters param = sigima.params.InterpolationParam.create(method="linear") # Create X arrays x_dense = np.linspace(0, 10, 100) x_sparse = np.linspace(1, 9, 20) for x1, x2 in [(x_dense, x_sparse), (x_sparse, x_dense)]: context = f"Source X {'dense' if len(x1) > len(x2) else 'sparse'} → " context += f"Target X {'sparse' if len(x1) > len(x2) else 'dense'}" # Create source signal with dense sampling y1 = np.sin(x1) sig1 = create_signal("Source signal", x1, y1) panel.add_object(sig1) # Create target signal with sparse sampling and different range y2 = np.zeros_like(x2) # Y values don't matter for interpolation target sig2 = create_signal("Target X values", x2, y2) panel.add_object(sig2) # This is the key test - interpolation should work even when X arrays differ # The X-array compatibility check should NOT interfere panel.objview.select_objects([sig1]) panel.processor.run_feature("interpolate", sig2, param) # Verify the result result_objects = panel.objview.get_sel_objects() assert len(result_objects) == 1, ( f"[{context}] Should have one interpolated result" ) result = result_objects[0] assert isinstance(result, SignalObj), ( f"[{context}] Result should be a SignalObj" ) assert result.x.shape == sig2.x.shape, ( f"[{context}] Result X should match target X shape" ) assert np.allclose(result.x, sig2.x), ( f"[{context}] Result X should match target X" ) expected_y = np.interp(x2, x1, y1) assert np.allclose(result.y, expected_y, atol=1e-10), ( f"[{context}] Result Y should be properly interpolated" ) def test_xarray_compatibility_still_works_for_other_operations(): """Test that X-array compatibility still works for operations that need it. This test ensures that the fix for interpolation doesn't break X-array compatibility for other operations like addition. """ with datalab_test_app_context() as win: panel = win.signalpanel # Create signals with different X arrays (should trigger compatibility check) x1 = np.linspace(0, 10, 100) y1 = np.ones_like(x1) sig1 = create_signal("Signal 1", x1, y1) panel.add_object(sig1) x2 = np.linspace(0, 10, 50) # Different sampling y2 = np.ones_like(x2) sig2 = create_signal("Signal 2", x2, y2) panel.add_object(sig2) # Test addition (should still use X-array compatibility) panel.objview.select_objects([sig1, sig2]) panel.processor.run_feature("addition") # Get the result result_objects = panel.objview.get_sel_objects() assert len(result_objects) == 1, "Should have one addition result" result = result_objects[0] # For addition, the X-array compatibility should have handled the different # arrays. The result should have consistent X values and proper Y values (2.0) assert np.allclose(result.y, 2.0, atol=1e-10), ( "Addition result should be 2.0 (1.0 + 1.0)" ) if __name__ == "__main__": test_interpolation_app() DataLab-1.0.2/datalab/tests/features/signal/loadbigsignal_app_test.py000066400000000000000000000053311511411446000256760ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Load big signal application test: - Generate a big signal (open an existing CSV file and create a dummy CSV file by duplicating the data several times) - Load the big signal in the signal panel """ # guitest: show import os.path as osp import numpy as np import pandas as pd import pytest from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers def create_large_random_dataframe(nrows: int, ncols: int) -> pd.DataFrame: """Create a large DataFrame with random data. Args: nrows: The number of rows to generate. ncols: The number of columns to generate. """ # The number of initial random rows to generate initial_rows = min(nrows, 1000) # Generate the initial "SignalXX" data with random values initial_signal_data = np.random.rand(initial_rows, ncols) # Duplicate the "SignalXX" data to fill the desired number of rows full_signal_data = np.tile( initial_signal_data, (nrows // initial_rows + (1 if nrows % initial_rows > 0 else 0), 1), ) # If nrows is not an exact multiple of initial_rows, trim the excess rows full_signal_data = full_signal_data[:nrows, :] # Generate the "Time" column as a sequential array from 0 to nrows-1 time_data = np.arange(nrows).reshape(-1, 1) # Combine the "Time" column with the "SignalXX" data full_data = np.hstack((time_data, full_signal_data)) # Prepare the column names column_names = ["Time"] + [f"Signal{str(i).zfill(2)}" for i in range(1, ncols + 1)] # Create and return the DataFrame df = pd.DataFrame(full_data, columns=column_names) return df @pytest.mark.parametrize("nrows, ncols", [(10000, 16)]) def test_loadbigsignal_app(nrows: int, ncols: int) -> None: """Load big signal application test""" with helpers.WorkdirRestoringTempDir() as tmpdir: with datalab_test_app_context() as win: execenv.print("Loading big signal application test:") execenv.print(" - Working in temporary directory:", tmpdir) execenv.print(f" - Creating a big dataset ({nrows} rows, {ncols} columns)") df = create_large_random_dataframe(nrows, ncols) big_csv = osp.join(tmpdir, "big.csv") df.to_csv(big_csv, index=False) execenv.print(" - Loading the big signal in the signal panel") panel = win.signalpanel panel.load_from_files([big_csv]) execenv.print(" - Saving the big signal") panel.save_to_files([big_csv.replace(".csv", "_copy.csv")]) execenv.print("OK") if __name__ == "__main__": test_loadbigsignal_app(1000000, 16) DataLab-1.0.2/datalab/tests/features/signal/multiple_rois_unit_test.py000066400000000000000000000112151511411446000261630ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Test for multiple geometry results with multiple ROIs ====================================================== This test verifies that multiple geometry results (e.g., FWHM and FW1e2) can coexist when computed on signals with multiple ROIs (e.g., multiple pulse peaks). """ from __future__ import annotations import numpy as np import sigima.objects as sio import sigima.params import sigima.proc.signal as sig_proc from datalab.adapters_metadata import GeometryAdapter def test_multiple_results_with_multiple_rois(): """Test that FWHM and FW1e2 work correctly with multiple ROIs.""" # Create a signal with three Gaussian pulses x = np.linspace(0, 30, 3000) # Three pulses at different positions pulse1 = 1.0 * np.exp(-((x - 5) ** 2) / 2) # Peak at x=5, sigma=1 pulse2 = 0.8 * np.exp(-((x - 15) ** 2) / 4) # Peak at x=15, sigma=2 pulse3 = 1.2 * np.exp(-((x - 25) ** 2) / 1) # Peak at x=25, sigma=0.707 y = pulse1 + pulse2 + pulse3 signal = sio.create_signal("Triple Pulse Signal", x, y) # Create three ROIs around each pulse (pass all coordinates at once) signal.roi = sio.create_signal_roi( [[0.0, 10.0], [10.0, 20.0], [20.0, 30.0]] # Three ROI ranges ) roi_count = len(list(signal.iterate_roi_indices())) print(f"Signal has {roi_count} ROIs") fwhm_param = sigima.params.FWHMParam() fwhm_param.method = "zero-crossing" fwhm_result = sig_proc.fwhm(signal, fwhm_param) assert fwhm_result is not None, "FWHM computation failed" print(f"FWHM result has {len(fwhm_result.coords)} rows") assert len(fwhm_result.coords) == 3, "Expected 3 FWHM measurements (one per ROI)" GeometryAdapter(fwhm_result).add_to(signal) # Compute FW1e2 (should also get one result per ROI) fw1e2_result = sig_proc.fw1e2(signal) assert fw1e2_result is not None, "FW1e2 computation failed" print(f"FW1e² result has {len(fw1e2_result.coords)} rows") assert len(fw1e2_result.coords) == 3, "Expected 3 FW1e2 measurements (one per ROI)" GeometryAdapter(fw1e2_result).add_to(signal) # Verify both results are stored separately results = list(GeometryAdapter.iterate_from_obj(signal)) assert len(results) == 2, f"Expected 2 distinct results, got {len(results)}" # Verify the titles titles = {adapter.title for adapter in results} assert "fwhm" in titles, "FWHM result not found" assert "fw1e2" in titles, "FW1e2 result not found" # Verify each result has measurements for all 3 ROIs for adapter in results: assert len(adapter.result.coords) == 3, ( f"{adapter.title} should have 3 measurements" ) # Verify ROI indices are correct roi_indices = adapter.result.roi_indices assert roi_indices is not None, f"{adapter.title} should have ROI indices" assert len(roi_indices) == 3, f"{adapter.title} should have 3 ROI indices" assert set(roi_indices) == {0, 1, 2}, ( f"{adapter.title} ROI indices should be [0, 1, 2]" ) print(f"\n{adapter.title.upper()} measurements:") for coords, roi_idx in zip(adapter.result.coords, roi_indices): width = abs(coords[2] - coords[0]) print(f" ROI {roi_idx}: width = {width:.4f}") print("\n✓ Multiple results with multiple ROIs work correctly") def test_roi_filtering(): """Test that we can filter results by ROI index.""" # Create a signal with two pulses x = np.linspace(0, 20, 2000) pulse1 = np.exp(-((x - 5) ** 2) / 2) pulse2 = np.exp(-((x - 15) ** 2) / 2) y = pulse1 + pulse2 signal = sio.create_signal("Dual Pulse Signal", x, y) # Create two ROIs (pass all coordinates at once) signal.roi = sio.create_signal_roi([[0.0, 10.0], [10.0, 20.0]]) # Compute FWHM fwhm_param = sigima.params.FWHMParam() fwhm_param.method = "zero-crossing" fwhm_result = sig_proc.fwhm(signal, fwhm_param) assert fwhm_result is not None assert len(fwhm_result.coords) == 2 GeometryAdapter(fwhm_result).add_to(signal) # Retrieve and filter by ROI adapters = list(GeometryAdapter.iterate_from_obj(signal)) assert len(adapters) == 1 adapter = adapters[0] # Get data for specific ROI roi0_df = adapter.get_roi_data(0) roi1_df = adapter.get_roi_data(1) assert len(roi0_df) == 1, "ROI 0 should have 1 measurement" assert len(roi1_df) == 1, "ROI 1 should have 1 measurement" print("\n✓ ROI filtering works correctly") if __name__ == "__main__": test_multiple_results_with_multiple_rois() test_roi_filtering() print("\n✅ All multi-ROI tests passed!") DataLab-1.0.2/datalab/tests/features/signal/pulse_features_app_test.py000066400000000000000000000074631511411446000261350ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Pulse features application test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from sigima.objects import ( SignalObj, TableKind, TableResult, create_signal_from_param, create_signal_roi, ) from sigima.params import PulseFeaturesParam from sigima.tests.helpers import check_scalar_result from sigima.tests.signal.pulse.pulse_unit_test import ( create_test_square_params, create_test_step_params, ) from datalab.adapters_metadata import TableAdapter from datalab.gui.panel.signal import SignalPanel from datalab.tests import datalab_test_app_context from datalab.utils import qthelpers as qth def __check_table(obj: SignalObj) -> TableResult: """Check that the object has a pulse features table.""" tables = list(TableAdapter.iterate_from_obj(obj)) assert len(tables) == 1 table = tables[0].result assert table.kind == TableKind.PULSE_FEATURES return table def __add_signal_and_check_pulse_features( panel: SignalPanel, obj: SignalObj, assertions: dict[str, float] ) -> None: """Add signal to the application and check that pulse features are extracted.""" panel.add_object(obj) param = PulseFeaturesParam() param.update_from_obj(obj) panel.processor.run_feature("extract_pulse_features", param) table = __check_table(obj) for name, expected_value in assertions.items(): if isinstance(expected_value, str): assert table[name][0] == expected_value else: check_scalar_result(name, table[name][0], expected_value, rtol=1e-2) def test_pulse_features_app(): """Pulse features application test.""" with datalab_test_app_context(console=False) as win: panel = win.signalpanel # Add first signal and extract features s1 = create_signal_from_param(create_test_step_params()) __add_signal_and_check_pulse_features( panel, s1, { "signal_shape": "step", "polarity": 1.0, "amplitude": 4.9, "rise_time": 1.5, }, ) # Add second signal and extract features s2 = create_signal_from_param(create_test_square_params()) __add_signal_and_check_pulse_features( panel, s2, { "signal_shape": "square", "polarity": 1.0, "amplitude": 4.94, "rise_time": 1.60, "fall_time": 3.95, "fwhm": 5.49, }, ) # Select the two signals and show the results table panel.objview.select_objects([s1, s2]) panel.show_results() # Define a ROI, just to test that it works (⚠️ it makes no sense here): # it tests that the "comparison rows" features work correctly with ROIs. # TODO: Maybe we should test this part in a more appropriate place, like in # a test for the "statistics" feature. roi = create_signal_roi([[0.650227, 5.8], [1.1596, 9.09509]]) s1.roi = roi s2.roi = roi.copy() panel.processor.run_feature("stats") panel.show_results() def pulse_features_screenshot(): """Generate pulse features screenshot.""" with datalab_test_app_context(size=(1400, 600), console=False) as win: panel = win.signalpanel s1 = create_signal_from_param(create_test_step_params()) panel.add_object(s1) param = PulseFeaturesParam() param.update_from_obj(s1) panel.processor.run_feature("extract_pulse_features", param) qth.grab_save_window(win.signalview, "s_pulse_features") if __name__ == "__main__": # test_pulse_features_app() pulse_features_screenshot() DataLab-1.0.2/datalab/tests/features/signal/pulse_features_roi_app_test.py000066400000000000000000000035051511411446000267770ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Pulse features with ROIs application test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations from sigima.objects import SignalObj, TableResult from sigima.params import PulseFeaturesParam from sigima.tests.signal.pulse.pulse_features_roi_unit_test import ( check_results_equal, generate_source_signal, ) from datalab.gui.panel.signal import SignalPanel from datalab.tests import datalab_test_app_context def __extract_pulse_features(panel: SignalPanel, obj: SignalObj) -> TableResult: """Extract pulse features.""" panel.objview.select_objects([obj]) param = PulseFeaturesParam() param.update_from_obj(obj) rdata = panel.processor.run_feature("extract_pulse_features", param) assert len(rdata.results) == 1 return rdata.results[0] def test_pulse_features_roi_app(): """Pulse features with ROIs application test.""" with datalab_test_app_context(console=False) as win: panel = win.signalpanel # Test signal with multiple ROIs defined around peaks of the spectrum sig = generate_source_signal() panel.add_object(sig) pf_sig = __extract_pulse_features(panel, sig) # Extract ROIs in separate signals and test each one panel.processor.run_feature("extract_roi", params=sig.roi.to_params(sig)) pf_extracted_sigs = [] for nb_sig in (2, 3, 4): extracted_sig = panel.objmodel.get_object_from_number(nb_sig) pf_extracted_sig = __extract_pulse_features(panel, extracted_sig) pf_extracted_sigs.append(pf_extracted_sig) check_results_equal(pf_sig, pf_extracted_sigs) if __name__ == "__main__": test_pulse_features_roi_app() DataLab-1.0.2/datalab/tests/features/signal/roi_app_test.py000066400000000000000000000050451511411446000236720ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Signal ROI application test""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations from typing import TYPE_CHECKING import pytest import sigima.params as sigima_param from sigima.objects import SignalROI, create_signal_roi from sigima.tests.data import create_paracetamol_signal from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers if TYPE_CHECKING: from datalab.gui.panel.signal import SignalPanel SIZE = 200 # Signal ROIs: SROI1 = [26, 41] SROI2 = [125, 146] def __run_signal_computations(panel: SignalPanel): """Test all signal features related to ROI""" panel.processor.run_feature("fwhm", sigima_param.FWHMParam()) panel.processor.run_feature("fw1e2") panel.processor.run_feature("histogram", sigima_param.HistogramParam()) roi = SignalROI() panel.processor.compute_roi_extraction(roi) def test_signal_roi_app(screenshots: bool = False) -> None: """Run Signal ROI application test scenario Args: screenshots: If True, take screenshots during the test. """ with datalab_test_app_context(console=False) as win: execenv.print("Signal ROI application test:") panel = win.signalpanel sig1 = create_paracetamol_signal(SIZE) panel.add_object(sig1) __run_signal_computations(panel) sig2 = create_paracetamol_signal(SIZE) sig2.roi = create_signal_roi([SROI1, SROI2], indices=True) for singleobj in (False, True): with Conf.proc.extract_roi_singleobj.temp(singleobj): sig2_i = sig2.copy() panel.add_object(sig2_i) helpers.print_obj_data_dimensions(sig2_i, indent=1) panel.processor.edit_roi_graphically() if screenshots: win.statusBar().hide() win.take_screenshot("s_roi_signal") __run_signal_computations(panel) @pytest.mark.skip(reason="This test is only for manual testing") def test_signal_roi_basic_app(): """Run Signal ROI basic application test scenario""" with datalab_test_app_context(console=False) as win: panel = win.signalpanel sig1 = create_paracetamol_signal(SIZE) panel.add_object(sig1) panel.processor.edit_roi_graphically() if __name__ == "__main__": test_signal_roi_basic_app() test_signal_roi_app(screenshots=False) DataLab-1.0.2/datalab/tests/features/signal/roi_manipulation_app_test.py000066400000000000000000000242521511411446000264530ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Signal ROI manipulation application test (copy/paste, import/export)""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import os import tempfile from typing import TYPE_CHECKING from sigima.io import read_roi from sigima.objects import create_signal_roi from sigima.tests.data import create_paracetamol_signal from datalab.env import execenv from datalab.objectmodel import get_uuid from datalab.tests import datalab_test_app_context if TYPE_CHECKING: from datalab.gui.panel.signal import SignalPanel SIZE = 200 # Signal ROIs: SROI1 = [26, 41] SROI2 = [125, 146] SROI3 = [60, 80] def test_signal_roi_copy_paste(): """Test signal ROI copy and paste functionality""" with datalab_test_app_context(console=False) as win: execenv.print("Signal ROI Copy/Paste test:") panel: SignalPanel = win.signalpanel # Create first signal with ROI sig1 = create_paracetamol_signal(SIZE) sig1.title = "Signal with ROI" roi1 = create_signal_roi([SROI1, SROI2], indices=True) sig1.roi = roi1 panel.add_object(sig1) # Create second signal without ROI sig2 = create_paracetamol_signal(SIZE) sig2.title = "Signal without ROI" panel.add_object(sig2) # Create third signal without ROI sig3 = create_paracetamol_signal(SIZE) sig3.title = "Signal without ROI 2" panel.add_object(sig3) execenv.print(" Initial state:") execenv.print(f" Signal 1 ROI: {sig1.roi is not None}") execenv.print(f" Signal 2 ROI: {sig2.roi is not None}") execenv.print(f" Signal 3 ROI: {sig3.roi is not None}") # Select first signal and copy its ROI panel.objview.set_current_item_id(get_uuid(sig1)) panel.copy_roi() execenv.print(" Copied ROI from Signal 1") # Select second signal and paste ROI panel.objview.set_current_item_id(get_uuid(sig2)) panel.paste_roi() execenv.print(" Pasted ROI to Signal 2") # Verify that sig2 now has the same ROI as sig1 assert sig2.roi is not None, "Signal 2 should have ROI after paste" assert len(sig2.roi) == len(sig1.roi), "ROI should have same number of regions" execenv.print(f" Signal 2 now has {len(sig2.roi)} ROI regions") # Select third signal and paste ROI (should create new ROI) panel.objview.set_current_item_id(get_uuid(sig3)) panel.paste_roi() execenv.print(" Pasted ROI to Signal 3") assert sig3.roi is not None, "Signal 3 should have ROI after paste" assert len(sig3.roi) == len(sig1.roi), "ROI should have same number of regions" execenv.print(f" Signal 3 now has {len(sig3.roi)} ROI regions") # Test pasting to signal that already has ROI (should combine) panel.objview.set_current_item_id(get_uuid(sig2)) panel.copy_roi() execenv.print(" Copied ROI from Signal 2") # Add a different ROI to sig1 roi_new = create_signal_roi([SROI3], indices=True) sig1.roi = sig1.roi.combine_with(roi_new) original_roi_count = len(sig1.roi) execenv.print(f" Signal 1 now has {original_roi_count} ROI regions") # Paste the ROI from sig2 into sig1 (should combine) panel.objview.set_current_item_id(get_uuid(sig1)) panel.paste_roi() execenv.print(" Pasted ROI to Signal 1 (should combine)") # Get fresh reference to sig1 from panel sig1_updated = panel.objmodel[get_uuid(sig1)] assert sig1_updated.roi is not None, "Signal 1 should still have ROI" # After combining, sig1 should have more regions than before assert len(sig1_updated.roi) >= original_roi_count, ( f"Expected at least {original_roi_count} ROI regions, " f"got {len(sig1_updated.roi)}" ) execenv.print( f" Signal 1 now has {len(sig1_updated.roi)} ROI regions (combined)" ) execenv.print(" ✓ Signal ROI copy/paste test passed") def test_signal_roi_copy_paste_multiple_selection(): """Test signal ROI paste to multiple selected signals""" with datalab_test_app_context(console=False) as win: execenv.print("Signal ROI Copy/Paste with multiple selection test:") panel: SignalPanel = win.signalpanel # Create source signal with ROI sig_src = create_paracetamol_signal(SIZE) sig_src.title = "Source with ROI" roi = create_signal_roi([SROI1, SROI2], indices=True) sig_src.roi = roi panel.add_object(sig_src) # Create multiple target signals without ROI target_signals = [] for i in range(3): sig = create_paracetamol_signal(SIZE) sig.title = f"Target signal {i + 1}" panel.add_object(sig) target_signals.append(sig) execenv.print(f" Created {len(target_signals)} target signals") # Copy ROI from source panel.objview.set_current_item_id(get_uuid(sig_src)) panel.copy_roi() execenv.print(" Copied ROI from source signal") # Select all target signals target_uuids = [get_uuid(sig) for sig in target_signals] panel.objview.set_current_item_id(target_uuids[0]) for uuid in target_uuids[1:]: panel.objview.set_current_item_id(uuid, extend=True) execenv.print(f" Selected {len(target_uuids)} target signals") # Paste ROI to all selected signals panel.paste_roi() execenv.print(" Pasted ROI to all selected signals") # Verify all target signals have ROI for i, sig in enumerate(target_signals): assert sig.roi is not None, f"Target signal {i + 1} should have ROI" assert len(sig.roi) == len(sig_src.roi), ( f"Target signal {i + 1} should have {len(sig_src.roi)} ROI regions" ) execenv.print(f" Target signal {i + 1}: {len(sig.roi)} ROI regions ✓") execenv.print(" ✓ Multiple selection paste test passed") def test_signal_roi_import_export(): """Test signal ROI import and export to/from file functionality""" with datalab_test_app_context(console=False) as win: execenv.print("Signal ROI Import/Export test:") panel: SignalPanel = win.signalpanel # Create first signal with ROI sig1 = create_paracetamol_signal(SIZE) sig1.title = "Signal with ROI" roi1 = create_signal_roi([SROI1, SROI2, SROI3], indices=True) sig1.roi = roi1 panel.add_object(sig1) original_roi_count = len(sig1.roi) execenv.print(f" Signal 1 has {original_roi_count} ROI regions") # Export ROI to file roi_file = tempfile.mktemp(suffix=".dlabroi") try: execenv.print(" Exporting ROI to temporary file") # Select first signal and export its ROI panel.objview.set_current_item_id(get_uuid(sig1)) panel.export_roi_to_file(roi_file) execenv.print(" ✓ ROI exported") # Verify file was created assert os.path.exists(roi_file), "ROI file should have been created" # Read the exported ROI directly to verify content exported_roi = read_roi(roi_file) assert len(exported_roi) == original_roi_count, ( f"Exported ROI should have {original_roi_count} regions" ) execenv.print(f" ✓ Exported ROI has {len(exported_roi)} regions") # Create second signal without ROI sig2 = create_paracetamol_signal(SIZE) sig2.title = "Signal without ROI" panel.add_object(sig2) assert sig2.roi is None, "Signal 2 should not have ROI initially" # Import ROI from file to second signal panel.objview.set_current_item_id(get_uuid(sig2)) panel.import_roi_from_file(roi_file) execenv.print(" Imported ROI to Signal 2") # Get fresh reference to sig2 from panel sig2_updated = panel.objmodel[get_uuid(sig2)] assert sig2_updated.roi is not None, "Signal 2 should have ROI after import" assert len(sig2_updated.roi) == original_roi_count, ( f"Imported ROI should have {original_roi_count} regions" ) execenv.print(f" ✓ Signal 2 now has {len(sig2_updated.roi)} ROI regions") # Test importing ROI to signal that already has ROI (should combine) sig3 = create_paracetamol_signal(SIZE) sig3.title = "Signal with existing ROI" roi3 = create_signal_roi([[90, 110]], indices=True) sig3.roi = roi3 panel.add_object(sig3) initial_roi_count = len(sig3.roi) execenv.print(f" Signal 3 has {initial_roi_count} ROI region initially") # Import ROI (should combine with existing) panel.objview.set_current_item_id(get_uuid(sig3)) panel.import_roi_from_file(roi_file) execenv.print(" Imported ROI to Signal 3 (should combine)") # Get fresh reference to sig3 from panel sig3_updated = panel.objmodel[get_uuid(sig3)] assert sig3_updated.roi is not None, "Signal 3 should still have ROI" # After combining, should have more regions assert len(sig3_updated.roi) >= initial_roi_count, ( f"Expected at least {initial_roi_count} ROI regions, " f"got {len(sig3_updated.roi)}" ) execenv.print( f" ✓ Signal 3 now has {len(sig3_updated.roi)} ROI regions (combined)" ) finally: # Clean up temporary file if os.path.exists(roi_file): try: os.unlink(roi_file) except (PermissionError, OSError): pass # Ignore cleanup errors on Windows execenv.print(" ✓ Signal ROI import/export test passed") if __name__ == "__main__": test_signal_roi_copy_paste() test_signal_roi_copy_paste_multiple_selection() test_signal_roi_import_export() DataLab-1.0.2/datalab/tests/features/signal/select_xy_cursor_unit_test.py000066400000000000000000000031521511411446000266710ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Signal horizontal or vertical cursor selection unit test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from typing import Literal import numpy as np import pytest from guidata.qthelpers import exec_dialog, qt_app_context from sigima.tests.data import create_paracetamol_signal from sigima.tools.signal.features import find_x_values_at_y from datalab.env import execenv from datalab.widgets.signalcursor import SignalCursorDialog @pytest.mark.parametrize("cursor_orientation", ["horizontal", "vertical"]) def test_signal_cursor_selection( cursor_orientation: Literal["horizontal", "vertical"], ) -> None: """Parametrized signal cursor selection unit test.""" sig = create_paracetamol_signal() with qt_app_context(): dlg = SignalCursorDialog(signal=sig, cursor_orientation=cursor_orientation) dlg.resize(640, 480) dlg.setObjectName(dlg.objectName() + "_00") # to avoid timestamp suffix exec_dialog(dlg) x, y = dlg.get_cursor_position() if cursor_orientation == "horizontal": execenv.print(f"X value: {x}") x_sig = find_x_values_at_y(sig.x, sig.y, y)[0] assert x == x_sig, f"Expected {x_sig}, got {x}" else: execenv.print(f"Y value: {y}") y_sig = sig.y[np.searchsorted(sig.x, x)] assert y == y_sig, f"Expected {y_sig}, got {y}" if __name__ == "__main__": test_signal_cursor_selection(cursor_orientation="horizontal") test_signal_cursor_selection(cursor_orientation="vertical") DataLab-1.0.2/datalab/tests/features/signal/signalpeakdetection_dialog_test.py000066400000000000000000000017231511411446000275740ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Signal peak detection dialog test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from guidata.qthelpers import exec_dialog, qt_app_context from sigima.tests.data import get_test_signal from datalab.env import execenv from datalab.widgets.signalpeak import SignalPeakDetectionDialog def test_peak1d_dialog(): """Signal peak dialog test""" with qt_app_context(): s = get_test_signal("paracetamol.txt") dlg = SignalPeakDetectionDialog(s) dlg.resize(640, 300) plot = dlg.get_plot() plot.set_axis_limits(plot.xBottom, 16, 30) dlg.setObjectName(dlg.objectName() + "_00") # to avoid timestamp suffix exec_dialog(dlg) execenv.print("peaks:") execenv.pprint(dlg.get_peaks()) execenv.pprint(dlg.get_min_dist()) if __name__ == "__main__": test_peak1d_dialog() DataLab-1.0.2/datalab/tests/features/signal/signals_to_image_app_test.py000066400000000000000000000066761511411446000264200ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Signals to image conversion application test""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show from __future__ import annotations import sigima.params from sigima.enums import NormalizationMethod, SignalsToImageOrientation from sigima.objects import SignalTypes from sigima.tests.data import create_periodic_signal from datalab.env import execenv from datalab.tests import datalab_test_app_context SIZE = 100 N_SIGNALS = 10 def test_signals_to_image_app(screenshots: bool = False) -> None: """Run signals to image conversion application test scenario Args: screenshots: If True, take screenshots during the test. """ with datalab_test_app_context(console=False) as win: execenv.print("Signals to image conversion application test:") # Create multiple test signals for i in range(N_SIGNALS): sig = create_periodic_signal( SignalTypes.SINE, freq=50.0 + i * 10.0, size=SIZE, a=(i + 1) * 0.1 ) sig.title = f"Signal {i + 1}" win.signalpanel.add_object(sig) # Select all signals win.signalpanel.objview.select_objects(list(range(1, N_SIGNALS + 1))) # Test without normalization, as rows p = sigima.params.SignalsToImageParam() p.orientation = SignalsToImageOrientation.ROWS p.normalize = False win.signalpanel.processor.run_feature("signals_to_image", p) if screenshots: win.statusBar().hide() win.take_screenshot("s_signals_to_image_rows") # Select all signals again win.set_current_panel("signal") win.signalpanel.objview.select_objects(list(range(1, N_SIGNALS + 1))) # Test without normalization, as columns p.orientation = SignalsToImageOrientation.COLUMNS win.signalpanel.processor.run_feature("signals_to_image", p) if screenshots: win.take_screenshot("s_signals_to_image_columns") # Select all signals again win.set_current_panel("signal") win.signalpanel.objview.select_objects(list(range(1, N_SIGNALS + 1))) # Test with normalization, as rows p.orientation = SignalsToImageOrientation.ROWS p.normalize = True p.normalize_method = NormalizationMethod.MAXIMUM win.signalpanel.processor.run_feature("signals_to_image", p) if screenshots: win.take_screenshot("s_signals_to_image_normalized") # Verify that images were created assert len(win.imagepanel) == 3, f"Expected 3 images, got {len(win.imagepanel)}" # Switch to image panel to verify dimensions win.set_current_panel("image") # Verify image dimensions - get objects directly from object model images = win.imagepanel.objmodel.get_all_objects() assert len(images) == 3, f"Expected 3 images in object model, got {len(images)}" assert images[0].data.shape == ( N_SIGNALS, SIZE, ), f"Expected shape ({N_SIGNALS}, {SIZE}), got {images[0].data.shape}" assert images[1].data.shape == ( SIZE, N_SIGNALS, ), f"Expected shape ({SIZE}, {N_SIGNALS}), got {images[1].data.shape}" execenv.print(" ✓ Signals to image conversion test passed") if __name__ == "__main__": test_signals_to_image_app(screenshots=False) DataLab-1.0.2/datalab/tests/features/signal/xarray_compat_app_test.py000066400000000000000000000121331511411446000257460ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ X-array compatibility application test. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import numpy as np from sigima.objects import GaussParam, SignalObj, create_signal_from_param from datalab.config import Conf from datalab.tests import datalab_test_app_context def __check_addition_result( result: SignalObj, s_ref: SignalObj, context: str, coeff: float ) -> None: """Check that the Y data of the result is the same as the reference signal multiplied by coeff.""" assert len(result.x) == len(s_ref.x), f"[{context}] Addition result length mismatch" assert np.allclose(result.y, coeff * s_ref.y, atol=1e-4), ( f"[{context}] Addition result value mismatch" ) def __check_difference_result( result: SignalObj, s_ref: SignalObj, context: str ) -> None: """Check that the Y data of the result is zero.""" assert len(result.x) == len(s_ref.x), ( f"[{context}] Difference result length mismatch" ) assert np.allclose(result.y, 0.0, atol=1e-4), ( f"[{context}] Difference result value mismatch" ) def test_xarray_compatibility_app(): """X-array compatibility application test. This test aims at verifying that the X-array compatibility feature works as expected in the application context. """ with datalab_test_app_context() as win: panel = win.signalpanel # Reference parameters: p_ref = GaussParam.create(size=500, xmin=-10, xmax=10) # Parameters with the same number of points but different X ranges: p_same_nbp = GaussParam.create(size=500, xmin=-5, xmax=5) # Parameters with different number of points but same X ranges: p_same_range = GaussParam.create(size=1000, xmin=-10, xmax=10) # Parameters with different number of points and different X ranges: p_different = GaussParam.create(size=1000, xmin=-5, xmax=5) panel.add_object(s_ref := create_signal_from_param(p_ref)) panel.add_object(s_same_nbp := create_signal_from_param(p_same_nbp)) panel.add_object(s_same_range := create_signal_from_param(p_same_range)) panel.add_object(s_different := create_signal_from_param(p_different)) # Test with addition operation: with Conf.proc.xarray_compat_behavior.temp("interpolate"): # Select signals with the same number of points but different X ranges: panel.objview.select_objects([s_ref, s_same_nbp]) panel.processor.run_feature("addition") __check_addition_result( panel.objview.get_sel_objects()[0], s_ref, "same_nbp", 2.0 ) # Select signals with different number of points but same X ranges: panel.objview.select_objects([s_ref, s_same_range]) panel.processor.run_feature("addition") __check_addition_result( panel.objview.get_sel_objects()[0], s_ref, "same_range", 2.0 ) # Select signals with different number of points and different X ranges: panel.objview.select_objects([s_ref, s_different]) panel.processor.run_feature("addition") __check_addition_result( panel.objview.get_sel_objects()[0], s_ref, "different", 2.0 ) # Select all signals and add them: panel.objview.select_objects([s_ref, s_same_nbp, s_same_range, s_different]) panel.processor.run_feature("addition") __check_addition_result( panel.objview.get_sel_objects()[0], s_ref, "all", 4.0 ) # Select all signals and average them: panel.objview.select_objects([s_ref, s_same_nbp, s_same_range, s_different]) panel.processor.run_feature("average") __check_addition_result( panel.objview.get_sel_objects()[0], s_ref, "all", 1.0 ) # Test with subtraction operation: with Conf.proc.xarray_compat_behavior.temp("interpolate"): # Select signals with the same number of points but different X ranges: panel.objview.select_objects([s_ref]) panel.processor.run_feature("difference", obj2=s_same_nbp) __check_difference_result( panel.objview.get_sel_objects()[0], s_ref, "same_nbp" ) # Select signals with different number of points but same X ranges: panel.objview.select_objects([s_ref]) panel.processor.run_feature("difference", obj2=s_same_range) __check_difference_result( panel.objview.get_sel_objects()[0], s_ref, "same_range" ) # Select signals with different number of points and different X ranges: panel.objview.select_objects([s_ref]) panel.processor.run_feature("difference", obj2=s_different) __check_difference_result( panel.objview.get_sel_objects()[0], s_ref, "different" ) if __name__ == "__main__": test_xarray_compatibility_app() DataLab-1.0.2/datalab/tests/features/tour_unit_test.py000066400000000000000000000006161511411446000230130ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Tour test """ # guitest: show from datalab.gui.tour import start from datalab.tests import datalab_test_app_context def test_tour() -> None: """ Test the tour of DataLab features. """ with datalab_test_app_context() as win: start(win) if __name__ == "__main__": test_tour() DataLab-1.0.2/datalab/tests/features/utilities/000077500000000000000000000000001511411446000213625ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/features/utilities/__init__.py000066400000000000000000000000021511411446000234630ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/features/utilities/installconf_unit_test.py000066400000000000000000000006701511411446000263510ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Dependencies viewer test """ # guitest: show from guidata.qthelpers import qt_app_context from datalab.widgets.instconfviewer import exec_datalab_installconfig_dialog def test_dep_viewer(): """Test dep viewer window""" with qt_app_context(): exec_datalab_installconfig_dialog() if __name__ == "__main__": test_dep_viewer() DataLab-1.0.2/datalab/tests/features/utilities/logview_app_test.py000066400000000000000000000006371511411446000253150ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Log viewer test """ # guitest: show from datalab.app import run from datalab.tests import helpers from datalab.tests.features.utilities import logview_error def test_logviewer_app(): """Test log viewer""" helpers.exec_script(logview_error.__file__) run() if __name__ == "__main__": test_logviewer_app() DataLab-1.0.2/datalab/tests/features/utilities/logview_error.py000066400000000000000000000011041511411446000246150ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Log viewer test: raise an exception and create a seg fault in DataLab """ # guitest: skip from guidata.qthelpers import qt_app_context from datalab.env import execenv from datalab.gui.main import DLMainWindow def error(): """Raise an exception and create a seg fault in DataLab""" with execenv.context(unattended=True): with qt_app_context(exec_loop=True): win = DLMainWindow() win.test_segfault_error() if __name__ == "__main__": error() DataLab-1.0.2/datalab/tests/features/utilities/logview_unit_test.py000066400000000000000000000006561511411446000255150ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Log viewer test """ # guitest: show from guidata.qthelpers import qt_app_context from datalab.widgets.logviewer import exec_datalab_logviewer_dialog def test_logviewer_dialog(): """Test log viewer window""" with qt_app_context(): exec_datalab_logviewer_dialog() if __name__ == "__main__": test_logviewer_dialog() DataLab-1.0.2/datalab/tests/features/utilities/memstatus_app_test.py000066400000000000000000000023641511411446000256620ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Memory status widget application test """ # guitest: show import numpy as np import psutil from sigima.objects import Gauss2DParam from datalab import config from datalab.env import execenv from datalab.tests import datalab_test_app_context def memory_alarm(threshold): """Memory alarm test""" config.Conf.main.available_memory_threshold.set(threshold) rng = np.random.default_rng() with datalab_test_app_context() as win: panel = win.imagepanel win.memorystatus.update_status() # Force memory status update param = Gauss2DParam.create( x0=rng.integers(-9, 9), y0=rng.integers(-9, 9), sigma=rng.integers(1, 20) ) panel.new_object(param, edit=False) def test_mem_status(): """Memory alarm test""" mem_available = psutil.virtual_memory().available // (1024**2) execenv.print(f"Memory status widget test (memory available: {mem_available} MB):") for index, threshold in enumerate((mem_available * 2, mem_available - 100)): execenv.print(f" Threshold {index}: {threshold} MB") memory_alarm(threshold) config.reset() if __name__ == "__main__": test_mem_status() DataLab-1.0.2/datalab/tests/features/utilities/settings_unit_test.py000066400000000000000000000064751511411446000257060ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab settings test """ # guitest: show import guidata.dataset as gds from guidata.dataset.qtwidgets import DataSetGroupEditDialog from guidata.qthelpers import qt_app_context from qtpy import QtWidgets as QW from datalab.config import _ from datalab.env import execenv from datalab.gui.settings import create_dataset_dict, edit_settings from datalab.utils import qthelpers as qth def test_edit_settings(): """Test edit settings""" with qt_app_context(): changed = edit_settings(None) execenv.print(changed) def capture_settings_screenshots(): """Capture screenshots of each settings tab Note: Screenshot filenames are language-independent (use English names) to ensure consistency across different language builds. """ with qt_app_context(exec_loop=False): paramdict = create_dataset_dict() params = gds.DataSetGroup(paramdict.values(), title=_("Settings")) names = list(paramdict.keys()) # Define fixed sub-tab names for View settings (language-independent) # These correspond to the order of BeginGroup items in ViewSettings view_subtab_names = ["common", "signals", "images", "results"] # Create the dialog manually so we can access the tab widget dialog = DataSetGroupEditDialog( instance=params, icon="", parent=None, apply=None, wordwrap=True, size=None ) # Find the main QTabWidget in the dialog main_tab_widget = dialog.findChild(QW.QTabWidget) if main_tab_widget is not None: # Take a screenshot of each main tab for i in range(main_tab_widget.count()): main_tab_widget.setCurrentIndex(i) dialog.show() tab_name = names[i] # Check if this tab contains a nested tab widget (like View settings) current_widget = main_tab_widget.currentWidget() nested_tab_widgets = current_widget.findChildren(QW.QTabWidget) if nested_tab_widgets: # Handle nested tabs (e.g., Common, Signals, Images, Results) nested_tab_widget = nested_tab_widgets[0] for j in range(nested_tab_widget.count()): nested_tab_widget.setCurrentIndex(j) # Use predefined names instead of translated tab text if tab_name == "view" and j < len(view_subtab_names): nested_tab_name = view_subtab_names[j] else: # Fallback for any other potential nested tabs nested_tab_name = f"tab{j}" qth.grab_save_window( dialog, f"settings_{tab_name}_{nested_tab_name}", add_timestamp=False, ) else: # No nested tabs, just take a screenshot of the main tab qth.grab_save_window( dialog, f"settings_{tab_name}", add_timestamp=False ) # Don't execute the dialog, just close it dialog.close() if __name__ == "__main__": capture_settings_screenshots() DataLab-1.0.2/datalab/tests/scenarios/000077500000000000000000000000001511411446000175175ustar00rootroot00000000000000DataLab-1.0.2/datalab/tests/scenarios/__init__.py000066400000000000000000000000021511411446000216200ustar00rootroot00000000000000# DataLab-1.0.2/datalab/tests/scenarios/beautiful_app.py000066400000000000000000000111111511411446000227040ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ beautiful_app ------------- A high-level test scenario producing beautiful screenshots. .. note:: This scenario is used to produce screenshots for the documentation. Thus, it is not run by default when running all tests. .. warning:: When modifying this scenario, please update the script "update_screenshots.py" in the "doc" folder. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show,skip import sigima.objects import sigima.params from sigima.tests.data import get_test_image from datalab.config import Conf from datalab.tests import datalab_test_app_context def run_beautiful_scenario(screenshots: bool = False) -> None: """High-level test scenario producing beautiful screenshots""" data_size = 500 with datalab_test_app_context(console=False, exec_loop=not screenshots) as win: # Beautiful screenshot of a signal panel = win.signalpanel sig = sigima.objects.create_signal_from_param(sigima.objects.LorentzParam()) panel.add_object(sig) panel.processor.run_feature("fft") panel.processor.run_feature("wiener") panel.processor.run_feature("derivative") panel.processor.run_feature("integral") panel.processor.run_feature("gaussian_filter", sigima.params.GaussianParam()) panel.processor.run_feature("fft") panel.processor.run_feature("derivative") # Beautiful screenshot of an image panel = win.imagepanel param = sigima.objects.Gauss2DParam.create(height=data_size, width=data_size) ima = sigima.objects.create_image_from_param(param) ima.set_metadata_option("colormap", "jet") panel.add_object(ima) panel.processor.run_feature("equalize_hist", sigima.params.EqualizeHistParam()) panel.processor.run_feature( "equalize_adapthist", sigima.params.EqualizeAdaptHistParam() ) panel.processor.run_feature("denoise_tv", sigima.params.DenoiseTVParam()) panel.processor.run_feature( "denoise_wavelet", sigima.params.DenoiseWaveletParam() ) panel.processor.run_feature("white_tophat", sigima.params.MorphologyParam()) panel.processor.run_feature("denoise_tv", sigima.params.DenoiseTVParam()) n = data_size // 3 roi = sigima.objects.create_image_roi( "rectangle", [n, n, data_size - 2 * n, data_size - 2 * n] ) panel.processor.compute_roi_extraction(roi) if screenshots: win.statusBar().hide() win.take_screenshot("i_beautiful") win.take_menu_screenshots() win.set_current_panel(win.signalpanel) win.take_screenshot("s_beautiful") def run_blob_detection_on_flower_image(screenshots: bool = False) -> None: """High-level test scenario for flower image with ROI extraction This scenario creates: - A flower test image - Roberts edge detection filter applied - A rectangular ROI extraction - A closing morphological filter to clean up the result - Blob detection using OpenCV algorithm """ with datalab_test_app_context(console=False, exec_loop=not screenshots) as win: # Create an image panel panel = win.imagepanel # Load the flower test image ima = get_test_image("flower.npy") ima.title = "Test image 'flower.npy'" panel.add_object(ima) # Apply Roberts filter for edge detection panel.processor.run_feature("roberts") # Extract a rectangular ROI roi = sigima.objects.create_image_roi("rectangle", [32, 64, 448, 384]) panel.processor.compute_roi_extraction(roi) # Apply a closing morphological filter to clean up the result closing_param = sigima.params.MorphologyParam.create(radius=10) panel.processor.run_feature("closing", closing_param) # Detect blobs using OpenCV algorithm param = sigima.params.BlobOpenCVParam() param.filter_by_color = False param.min_area = 400 param.max_area = 1000 param.filter_by_circularity = True param.min_circularity = 0.7 with Conf.proc.show_result_dialog.temp(False): with Conf.view.show_result_label.temp(False): panel.processor.run_feature("blob_opencv", param) if screenshots: win.statusBar().hide() win.take_screenshot("i_blob_detection_flower") if __name__ == "__main__": run_blob_detection_on_flower_image(screenshots=False) DataLab-1.0.2/datalab/tests/scenarios/common.py000066400000000000000000000406371511411446000213730ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Scenarios common functions """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: skip from __future__ import annotations import numpy as np import sigima.enums import sigima.objects import sigima.params from sigima.tests.data import ( create_noisy_signal, create_paracetamol_signal, create_peak_image, create_sincos_image, iterate_image_creation, iterate_signal_creation, ) from datalab.config import _ from datalab.gui.main import DLMainWindow from datalab.gui.panel.image import ImagePanel from datalab.gui.panel.signal import SignalPanel def __compute_1_to_1_operations(panel: SignalPanel | ImagePanel, number: int) -> None: """Test `compute_1_to_1` type operations on a signal or image Requires that one signal or image has been added at index.""" assert len(panel) >= number - 1 panel.objview.select_objects((number,)) panel.processor.run_feature("gaussian_filter", sigima.params.GaussianParam()) panel.processor.run_feature("moving_average", sigima.params.MovingAverageParam()) panel.processor.run_feature("moving_median", sigima.params.MovingMedianParam()) panel.processor.run_feature("wiener") panel.processor.run_feature("fft") panel.processor.run_feature("ifft") panel.processor.run_feature("absolute") panel.processor.run_feature("magnitude_spectrum") panel.processor.run_feature("phase_spectrum") panel.processor.run_feature("psd") panel.remove_object() panel.processor.run_feature("real") panel.remove_object() panel.processor.run_feature("imag") panel.remove_object() panel.processor.run_feature( "astype", sigima.params.DataTypeIParam.create(dtype_str="float64"), ) panel.processor.run_feature("log10") panel.processor.run_feature("exp") panel.processor.run_feature("transpose") panel.processor.run_feature("transpose") def compute_common_operations(panel: SignalPanel | ImagePanel) -> None: """Test operations common to signal/image Requires that two (and only two) signals/images are created/added to panel First signal/image is supposed to be always the same (reference) Second signal/image is the tested object """ assert len(panel) == 2 panel.objview.select_objects((2,)) panel.processor.run_feature("difference", panel[1]) # difference with obj #1 panel.remove_object() panel.objview.select_objects((2,)) panel.processor.run_feature("quadratic_difference", panel[2]) panel.delete_metadata() const_oper_param = sigima.params.ConstantParam.create(value=2.0) for const_oper in ( "addition_constant", "difference_constant", "product_constant", "division_constant", ): panel.objview.select_objects((3,)) panel.processor.run_feature(const_oper, const_oper_param) panel.objview.select_objects((3,)) panel.remove_object() panel.objview.select_objects((1, 2)) panel.processor.run_feature("addition") panel.objview.select_objects((1, 2)) panel.processor.run_feature("addition") panel.objview.select_objects((1, 2)) panel.processor.run_feature("product") param = sigima.params.ConstantParam.create(value=2.0) panel.processor.run_feature("addition_constant", param) panel.processor.run_feature("difference_constant", param) panel.processor.run_feature("product_constant", param) panel.processor.run_feature("division_constant", param) obj = panel.objmodel.get_groups()[0][-1] param = sigima.params.ClipParam() # Clipping before division... param.upper = (obj.data.max() - obj.data.min()) * 0.8 + obj.data.min() panel.processor.run_feature("clip", param) param = sigima.params.NormalizeParam() for method in sigima.enums.NormalizationMethod: param.method = method panel.processor.run_feature("normalize", param) panel.objview.select_objects((3, 7)) panel.processor.run_feature("division") for feature_name in ("average", "standard_deviation"): panel.objview.select_objects((1, 2, 3)) panel.processor.run_feature(feature_name) panel.add_label_with_title() __compute_1_to_1_operations(panel, 2) def run_signal_computations( win: DLMainWindow, data_size: int = 500, all_types: bool = True ) -> None: """Testing signal features""" panel = win.signalpanel win.set_current_panel("signal") if all_types: for signal in iterate_signal_creation(data_size, non_zero=True): panel.add_object(create_paracetamol_signal(data_size)) panel.add_object(signal) compute_common_operations(panel) panel.remove_all_objects() sig1 = create_paracetamol_signal(data_size) win.add_object(sig1) # Add new signal based on s0 panel.objview.set_current_object(sig1) param = sigima.objects.UniformDistribution1DParam.create( title=_("Random function"), vmin=0, vmax=sig1.y.max() * 0.2 ) noiseobj1 = panel.new_object(param, edit=False) compute_common_operations(panel) # Signal specific operations panel.processor.run_feature("sqrt") panel.processor.run_feature("power", sigima.params.PowerParam.create(power=2)) panel.processor.run_feature("reverse_x") panel.processor.run_feature("reverse_x") # Test filter methods for filter_func_name, paramclass in ( ("lowpass", sigima.params.LowPassFilterParam), ("highpass", sigima.params.HighPassFilterParam), ("bandpass", sigima.params.BandPassFilterParam), ("bandstop", sigima.params.BandStopFilterParam), ): for method in sigima.enums.FrequencyFilterMethod: panel.objview.set_current_object(sig1) param = paramclass.create(method=method) param.update_from_obj(sig1) # Use default cut-off frequencies panel.processor.run_feature(filter_func_name, param) # Test windowing methods noiseobj2 = noiseobj1.copy() win.add_object(noiseobj2) param = sigima.params.WindowingParam() for method in sigima.enums.WindowingMethod: panel.objview.set_current_object(noiseobj2) param.method = method panel.processor.run_feature("apply_window", param) win.add_object(sig1.copy()) param = sigima.params.XYCalibrateParam.create(a=1.2, b=0.1) panel.processor.run_feature("calibration", param) panel.processor.run_feature("derivative") panel.processor.run_feature("integral") param = sigima.params.PeakDetectionParam() panel.processor.compute_peak_detection(param) panel.processor.compute_multigaussianfit() panel.objview.select_objects([-3]) sig = panel.objview.get_sel_objects()[0] i1 = data_size // 10 i2 = len(sig.y) - i1 roi = sigima.objects.create_signal_roi([i1, i2], indices=True) panel.processor.compute_roi_extraction(roi) sig = create_noisy_signal( sigima.objects.NormalDistribution1DParam.create(sigma=5.0) ) panel.add_object(sig) for _name, fitfunc in panel.processor.FIT_FUNCTIONS: panel.objview.set_current_object(sig) panel.processor.run_feature(fitfunc) # Test evaluate_fit: evaluate a fit on another signal's x-axis # First, perform a linear fit on sig panel.objview.set_current_object(sig) panel.processor.run_feature("linear_fit") fitted_signal = panel.objview.get_current_object() # Create a signal with different x-axis x_new = np.linspace(sig.x.min() - 10, sig.x.max() + 10, 150) y_new = np.zeros_like(x_new) sig_new_x = sigima.objects.create_signal( "New X values for fit evaluation", x_new, y_new ) panel.add_object(sig_new_x) # Evaluate the fit on the new signal's x-axis panel.objview.set_current_object(fitted_signal) panel.processor.run_feature("evaluate_fit", sig_new_x) param = sigima.objects.GaussParam.create(title=_("Gaussian")) sig = sigima.objects.create_signal_from_param(param) panel.add_object(sig) param = sigima.params.FWHMParam() for method_value, _method_name in param.methods: param.method = method_value panel.processor.run_feature("fwhm", param) panel.processor.run_feature("fw1e2") # Create a new signal which X values are a subset of sig1 x = np.linspace(sig1.x.min(), sig1.x.max(), data_size // 2)[: data_size // 4] y = x * 0.0 sig2 = sigima.objects.create_signal("X values for interpolation", x, y) panel.add_object(sig2) # Test interpolation # pylint: disable=protected-access for method in sigima.enums.Interpolation1DMethod: for fill_value in (None, 0.0): panel.objview.set_current_object(sig1) param = sigima.params.InterpolationParam.create( method=method, fill_value=fill_value ) panel.processor.run_feature("interpolate", sig2, param) # Test resampling xmin, xmax = x[0], x[-1] for mode, dx, nbpts in (("dx", 0.1, 10), ("nbpts", 0.0, 100)): panel.objview.set_current_object(sig1) param = sigima.params.Resampling1DParam.create( xmin=xmin, xmax=xmax, mode=mode, dx=dx, nbpts=nbpts ) panel.processor.run_feature("resampling", param) # Test convolution panel.objview.set_current_object(sig1) panel.processor.run_feature("derivative") panel.processor.run_feature("convolution", sig1) # Test detrending panel.objview.set_current_object(sig1) # pylint: disable=protected-access for method_choice_tuple in sigima.params.DetrendingParam.methods: param = sigima.params.DetrendingParam.create(method=method_choice_tuple[0]) panel.processor.run_feature("detrending", param) # Test histogram panel.objview.set_current_object(sig1) param = sigima.params.HistogramParam.create(bins=100) panel.processor.run_feature("histogram", param) # Test bandwidth and dynamic parameters panel.processor.run_feature("bandwidth_3db") panel.processor.run_feature("dynamic_parameters") def run_image_computations( win: DLMainWindow, data_size: int = 150, all_types: bool = True ) -> None: """Test image features""" win.set_current_panel("image") panel = win.imagepanel newparam = sigima.objects.NewImageParam.create(height=data_size, width=data_size) if all_types: for image in iterate_image_creation(data_size, non_zero=True): panel.add_object(create_sincos_image(newparam)) panel.add_object(image) compute_common_operations(panel) panel.remove_all_objects() ima1 = create_sincos_image(newparam) panel.add_object(ima1) # Add new image based on i0 panel.objview.set_current_object(ima1) unifparam = sigima.objects.UniformDistribution2DParam() unifparam.set_from_datatype(ima1.data.dtype) unifparam.vmax = int(ima1.data.max() * 0.2) panel.new_object(unifparam, edit=False) compute_common_operations(panel) # Test resampling w, h = ima1.data.shape[1], ima1.data.shape[0] for method, mode, dx, dy, width_param, height_param in ( (sigima.enums.Interpolation2DMethod.NEAREST, "dxy", 0.5, 0.5, 10, 10), (sigima.enums.Interpolation2DMethod.LINEAR, "shape", 0.0, 0.0, w // 2, h // 2), (sigima.enums.Interpolation2DMethod.CUBIC, "shape", 0.0, 0.0, w * 2, h // 2), ): panel.objview.set_current_object(ima1) param = sigima.params.Resampling2DParam.create( method=method, mode=mode, dx=dx, dy=dy, width=width_param, height=height_param, xmin=ima1.x0, xmax=ima1.x0 + ima1.width, ymin=ima1.y0, ymax=ima1.y0 + ima1.height, ) panel.processor.run_feature("resampling", param) # Test denoising methods param = sigima.params.XYZCalibrateParam.create(axis="z", a1=1.2, a0=0.1) panel.processor.run_feature("calibration", param) param = sigima.params.DenoiseTVParam() panel.processor.run_feature("denoise_tv", param) param = sigima.params.DenoiseBilateralParam() panel.processor.run_feature("denoise_bilateral", param) param = sigima.params.DenoiseWaveletParam() panel.processor.run_feature("denoise_wavelet", param) # Test exposure methods ima2 = create_sincos_image(newparam) panel.add_object(ima2) panel.processor.run_feature( "absolute" ) # Avoid neg. values for skimage correction methods param = sigima.params.AdjustGammaParam.create(gamma=0.5) panel.processor.run_feature("adjust_gamma", param) param = sigima.params.AdjustLogParam.create(gain=0.5) panel.processor.run_feature("adjust_log", param) param = sigima.params.AdjustSigmoidParam.create(gain=0.5) panel.processor.run_feature("adjust_sigmoid", param) param = sigima.params.EqualizeHistParam() panel.processor.run_feature("equalize_hist", param) param = sigima.params.EqualizeAdaptHistParam() panel.processor.run_feature("equalize_adapthist", param) param = sigima.params.RescaleIntensityParam() panel.processor.run_feature("rescale_intensity", param) # Test morphology methods param = sigima.params.MorphologyParam.create(radius=10) panel.processor.run_feature("denoise_tophat", param) panel.processor.run_feature("white_tophat", param) panel.processor.run_feature("black_tophat", param) param.radius = 1 panel.processor.run_feature("erosion", param) panel.processor.run_feature("dilation", param) panel.processor.run_feature("opening", param) panel.processor.run_feature("closing", param) param = sigima.params.ButterworthParam.create(order=2, cut_off=0.5) panel.processor.run_feature("butterworth", param) param = sigima.params.CannyParam() panel.processor.run_feature("canny", param) # Test threshold methods ima2 = create_sincos_image(newparam) panel.add_object(ima2) param = sigima.params.ThresholdParam() for method_value, _method_name in param.methods: panel.objview.set_current_object(ima2) param = sigima.params.ThresholdParam.create(method=method_value) if method_value == "manual": param.value = (ima2.data.max() - ima2.data.min()) * 0.5 + ima2.data.min() panel.processor.run_feature("threshold", param) for func_name in ( "threshold_isodata", "threshold_li", "threshold_mean", "threshold_minimum", "threshold_otsu", "threshold_triangle", "threshold_yen", ): panel.objview.set_current_object(ima2) panel.processor.run_feature(func_name) # Test edge detection methods ima2 = create_sincos_image(newparam) panel.add_object(ima2) for func_name in ( "roberts", "prewitt", "prewitt_h", "prewitt_v", "sobel", "sobel_h", "sobel_v", "scharr", "scharr_h", "scharr_v", "farid", "farid_h", "farid_v", "laplace", ): panel.processor.run_feature(func_name) param = sigima.params.Log10ZPlusNParam.create(n=1) panel.processor.run_feature("log10_z_plus_n", param) panel.processor.run_feature("rotate90") panel.processor.run_feature("rotate270") panel.processor.run_feature("fliph") panel.processor.run_feature("flipv") param = sigima.params.RotateParam.create(angle=5.0) for boundary in sigima.enums.BorderMode: if boundary is sigima.enums.BorderMode.MIRROR: continue param.mode = boundary panel.processor.run_feature("rotate", param) param = sigima.params.ResizeParam.create(zoom=1.3) panel.processor.run_feature("resize", param) n = data_size // 10 roi = sigima.objects.create_image_roi( "rectangle", [n, n, data_size - 2 * n, data_size - 2 * n] ) panel.processor.compute_roi_extraction(roi) panel.processor.run_feature("centroid") panel.processor.run_feature("enclosing_circle") ima = create_peak_image(newparam) panel.add_object(ima) param = sigima.params.Peak2DDetectionParam.create(create_rois=True) panel.processor.compute_peak_detection(param) param = sigima.params.ContourShapeParam() panel.processor.run_feature("contour_shape", param) param = sigima.params.BinningParam.create(sx=2, sy=2, operation="average") panel.processor.run_feature("binning", param) # Test histogram panel.objview.set_current_object(ima) param = sigima.params.HistogramParam.create(bins=100) panel.processor.run_feature("histogram", param) DataLab-1.0.2/datalab/tests/scenarios/demo.py000066400000000000000000000135441511411446000210240ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Demo """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # pylint: disable=duplicate-code # guitest: show,skip from __future__ import annotations from typing import TYPE_CHECKING import sigima.objects import sigima.params import sigima.proc.image as sipi from guidata.qthelpers import qt_wait from qtpy import QtWidgets as QW from sigima.enums import BorderMode from sigima.tests.data import ( create_multigaussian_image, create_paracetamol_signal, create_peak_image, create_sincos_image, get_test_image, ) from datalab.config import _, reset from datalab.env import execenv from datalab.tests import datalab_test_app_context if TYPE_CHECKING: from datalab.gui.main import DLMainWindow DELAY1, DELAY2, DELAY3 = 1, 2, 3 # DELAY1, DELAY2, DELAY3 = 0, 0, 0 def test_signal_features(win: DLMainWindow, data_size: int = 500) -> None: """Testing signal features""" panel = win.signalpanel win.set_current_panel("signal") qt_wait(DELAY2) sig1 = create_paracetamol_signal(data_size) win.add_object(sig1) qt_wait(DELAY1) panel.objview.set_current_object(sig1) param = sigima.objects.UniformDistribution1DParam.create( title=_("Random function"), vmin=0, vmax=sig1.y.max() * 0.2 ) sig2 = sigima.objects.create_signal_from_param(param) win.add_object(sig2) # compute_common_operations(panel) panel.objview.select_objects((1, 2)) qt_wait(DELAY1) panel.processor.run_feature("addition") qt_wait(DELAY1) panel.processor.run_feature("normalize") panel.processor.run_feature("derivative") panel.processor.run_feature("integral") panel.objview.set_current_object(sig1) qt_wait(DELAY1) panel.processor.run_feature("detrending") sig3 = panel.objview.get_current_object() param = sigima.params.PeakDetectionParam() panel.processor.run_feature("peak_detection", param) sig4 = panel.objview.get_current_object() panel.objview.select_objects([sig3, sig4]) qt_wait(DELAY2) panel.objview.set_current_object(sig3) panel.processor.compute_multigaussianfit() sig = sigima.objects.create_signal_from_param(sigima.objects.StepPulseParam()) panel.add_object(sig) panel.processor.run_feature("extract_pulse_features") qt_wait(DELAY2) def test_image_features(win: DLMainWindow, data_size: int = 512) -> None: """Testing signal features""" win.set_current_panel("image") panel = win.imagepanel panel.add_object(get_test_image("flower.npy")) ima1 = panel.objview.get_current_object() qt_wait(DELAY2) panel.objview.set_current_object(ima1) param = sigima.objects.UniformDistribution2DParam.create( width=data_size, height=data_size ) param.set_from_datatype(ima1.data.dtype) param.vmax = int(ima1.data.max() * 0.2) ima2 = sigima.objects.create_image_from_param(param) panel.add_object(ima2) panel.objview.select_objects((1, 2)) panel.processor.run_feature("addition") qt_wait(DELAY2) # compute_common_operations(panel) panel.processor.run_feature("histogram") qt_wait(DELAY2) param = sigima.objects.NewImageParam.create(width=data_size, height=data_size) ima1 = create_sincos_image(param) panel.add_object(ima1) qt_wait(DELAY3) panel.processor.run_feature("rotate90") panel.processor.run_feature("rotate270") panel.processor.run_feature("fliph") panel.processor.run_feature("flipv") rotparam = sipi.RotateParam.create(angle=5.0) for boundary in BorderMode: if boundary is BorderMode.MIRROR: continue rotparam.mode = boundary panel.processor.run_feature("rotate", rotparam) param.title = _("Multi-Gaussian") ima1 = create_multigaussian_image(param) s = data_size roi = sigima.objects.create_image_roi( "rectangle", [s // 2, s // 2, s - 25 - s // 2, s - s // 2] ) roi.add_roi(sigima.objects.create_image_roi("circle", [s // 3, s // 2, s // 4])) ima1.roi = roi panel.add_object(ima1) qt_wait(DELAY2) panel.processor.run_feature("centroid") qt_wait(DELAY1) panel.processor.run_feature("enclosing_circle") qt_wait(DELAY2) param.title = _("2D Peaks with noise background") ima = create_peak_image(param) panel.add_object(ima) param = sigima.params.Peak2DDetectionParam.create(create_rois=True) panel.processor.run_feature("peak_detection", param) qt_wait(DELAY2) param = sigima.params.ContourShapeParam() panel.processor.run_feature("contour_shape", param) qt_wait(DELAY2) n = data_size // 10 roi = sigima.objects.create_image_roi( "rectangle", [n, n, data_size - 2 * n, data_size - 2 * n] ) panel.processor.compute_roi_extraction(roi) def play_demo(win: DLMainWindow) -> None: """Play demo Args: win: DLMainWindow instance """ ret = QW.QMessageBox.information( win, _("Demo"), _( "Click OK to start the demo.

    Note:
    " "- Demo will cover a selection of DataLab features " "(for a complete list of features, please refer to the documentation).
    " "- It won't require any user interaction." ), QW.QMessageBox.Ok | QW.QMessageBox.Cancel, ) if ret == QW.QMessageBox.Ok: execenv.enable_demo_mode(int(DELAY1 * 1000)) test_signal_features(win) test_image_features(win) qt_wait(DELAY3) execenv.disable_demo_mode() QW.QMessageBox.information(win, _("Demo"), _("Click OK to end demo.")) def run(): """Run demo""" reset() # Reset configuration (remove configuration file and initialize it) with datalab_test_app_context(console=False) as win: play_demo(win) if __name__ == "__main__": run() DataLab-1.0.2/datalab/tests/scenarios/example_app_test.py000066400000000000000000000027031511411446000234250ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Example of high-level test scenario Create an image object from Scikit-image human mitosis sample, then open DataLab to show it. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import sigima.objects import sigima.params from sigima.tests.data import get_test_image from datalab.control.proxy import proxy_context from datalab.tests import skip_if_opencv_missing def test_example_app() -> None: """Example of high-level test scenario using proxy interface""" with proxy_context("local") as proxy: data = get_test_image("flower.npy").data image = sigima.objects.create_image("Test image with peaks", data) proxy.add_object(image) proxy.calc("roberts") data_size = data.shape[0] n = data_size // 5 roi = sigima.objects.create_image_roi( "rectangle", [n, n, data_size - 2 * n, data_size - 2 * n] ) proxy.calc("compute_roi_extraction", roi) param = sigima.params.BlobOpenCVParam.create( min_dist_between_blobs=0.1, filter_by_color=False, min_area=500, max_area=2000, filter_by_circularity=True, min_circularity=0.2, ) with skip_if_opencv_missing(): proxy.calc("blob_opencv", param) if __name__ == "__main__": test_example_app() DataLab-1.0.2/datalab/tests/scenarios/scenario_h5_app_test.py000066400000000000000000000054761511411446000242030ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab mainwindow automation test ---------------------------------- This test scenario shows how to use the DataLab application in a test scenario. It also validates the HDF5 file format. This scenario executes the following steps: - Creating two test signals - Creating two test images - Creating a macro - Saving current project (h5 file) - Removing all objects - Opening another project (h5 file) - Access current image metadata - Checking macro code """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import os.path as osp from sigima.params import ClipParam from sigima.tests.data import create_noisy_gaussian_image, create_paracetamol_signal from datalab.env import execenv from datalab.tests import datalab_test_app_context, helpers from datalab.tests.scenarios import scenario_mac_app_test from datalab.utils.strings import save_html_diff def test_scenario_h5(): """Example of high-level test scenario with HDF5 file""" with helpers.WorkdirRestoringTempDir() as tmpdir: with datalab_test_app_context(console=False) as win: # === Creating two test signals panel = win.signalpanel sig1 = create_paracetamol_signal() panel.add_object(sig1) panel.processor.run_feature("derivative") # === Creating two test images panel = win.imagepanel ima1 = create_noisy_gaussian_image(add_annotations=True) panel.add_object(ima1) param = ClipParam.create(upper=ima1.data.mean()) panel.processor.run_feature("clip", param) # === Creating a macro scode = scenario_mac_app_test.add_macro_sample(win, 0).get_code() scenario_mac_app_test.add_macro_sample(win, 1) # === Saving project fname = osp.join(tmpdir, "test.h5") win.save_to_h5_file(fname) # === Removing all objects for panel in win.panels: panel.remove_all_objects() # === Reopening previously saved project win.open_h5_files([fname], import_all=True, reset_all=True) # === Accessing object metadata obj = win.imagepanel.objmodel.get_groups()[0][0] execenv.print(f"Image '{obj.title}':") for key, value in obj.metadata.items(): execenv.print(f' metadata["{key}"] = {value}') # === Checking macro code lcode = win.macropanel.get_macro(1).get_code() if lcode != scode: save_html_diff(scode, lcode, "Saved code", "Loaded code", "macro0.html") raise AssertionError("Macro code is not the same as saved") if __name__ == "__main__": test_scenario_h5() DataLab-1.0.2/datalab/tests/scenarios/scenario_ima1_app_test.py000066400000000000000000000020271511411446000245030ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image processing test scenario ------------------------------ Testing all the image processing features, without process isolation. """ # pylint: disable=duplicate-code # guitest: show from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context from datalab.tests.scenarios import common def test_scenario_image() -> None: """Run image unit test scenario 1 (no process isolation)""" assert Conf.main.process_isolation_enabled.get(), ( "Process isolation must be enabled" ) with datalab_test_app_context(save=True) as win: with win.context_no_refresh(): execenv.print("Testing image features without process isolation...") win.set_process_isolation_enabled(False) common.run_image_computations(win) win.imagepanel.remove_all_objects() execenv.print("==> OK") if __name__ == "__main__": test_scenario_image() DataLab-1.0.2/datalab/tests/scenarios/scenario_ima2_app_test.py000066400000000000000000000020001511411446000244730ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Image processing test scenario ------------------------------ Testing all the image processing features, with process isolation. """ # pylint: disable=duplicate-code # guitest: show from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context from datalab.tests.scenarios import common def test_scenario_image2() -> None: """Run image unit test scenario 2 (process isolation)""" assert Conf.main.process_isolation_enabled.get(), ( "Process isolation must be enabled" ) with datalab_test_app_context(save=True) as win: execenv.print("Testing image features *with* process isolation...") common.run_image_computations(win, all_types=False) oids = win.imagepanel.objmodel.get_object_ids() win.imagepanel.open_separate_view(oids[:4]) execenv.print("==> OK") if __name__ == "__main__": test_scenario_image2() DataLab-1.0.2/datalab/tests/scenarios/scenario_mac_app_test.py000066400000000000000000000035021511411446000244130ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Macro-commands test scenario ---------------------------- Testing all the macro-commands features. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... # guitest: show import os.path as osp import time from datalab.gui.macroeditor import Macro from datalab.gui.main import DLMainWindow from datalab.tests import datalab_test_app_context, helpers def add_macro_sample(win: DLMainWindow, index: int) -> Macro: """Add a macro sample to the macro panel Args: win: DLMainWindow index: index of the macro sample to add """ macro = win.macropanel.add_macro() macro.title = f"Test macro {index}" samples = [ "import time; [print(f'{i}:{time.sleep(.1)}') for i in range(50)]", "print('Hello world')", ] assert index < len(samples), f"index={index} is out of range" macro.set_code(samples[index]) return macro def test_scenario_macro() -> None: """Example of high-level test scenario with HDF5 file""" with helpers.WorkdirRestoringTempDir() as tmpdir: with datalab_test_app_context(console=False) as win: win.set_current_panel("macro") add_macro_sample(win, 0) win.macropanel.run_macro() time.sleep(1) win.macropanel.stop_macro() code2 = add_macro_sample(win, 1).get_code() fname = osp.join(tmpdir, "test.macro") win.macropanel.export_macro_to_file(2, fname) win.macropanel.remove_macro() macro_nb = win.macropanel.import_macro_from_file(fname) macro2 = win.macropanel.get_macro(macro_nb) assert macro2.get_code() == code2, "Macro code is not the same" if __name__ == "__main__": test_scenario_macro() DataLab-1.0.2/datalab/tests/scenarios/scenario_sig1_app_test.py000066400000000000000000000021251511411446000245160ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Signal processing test scenario ------------------------------- Testing all the signal processing features, without process isolation. """ # pylint: disable=duplicate-code # guitest: show from __future__ import annotations from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context from datalab.tests.scenarios import common def test_scenario_signal1() -> None: """Run signal unit test scenario 1 (no process isolation)""" assert Conf.main.process_isolation_enabled.get(), ( "Process isolation must be enabled" ) with datalab_test_app_context(save=True) as win: with win.context_no_refresh(): execenv.print("Testing signal features (process isolation: off)...") win.set_process_isolation_enabled(False) common.run_signal_computations(win, all_types=True) win.signalpanel.remove_all_objects() execenv.print("==> OK") if __name__ == "__main__": test_scenario_signal1() DataLab-1.0.2/datalab/tests/scenarios/scenario_sig2_app_test.py000066400000000000000000000020541511411446000245200ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Signal processing test scenario ------------------------------- Testing all the signal processing features, with process isolation. """ # pylint: disable=duplicate-code # guitest: show from __future__ import annotations from datalab.config import Conf from datalab.env import execenv from datalab.tests import datalab_test_app_context from datalab.tests.scenarios import common def test_scenario_signal2() -> None: """Run signal unit test scenario 2 (process isolation)""" assert Conf.main.process_isolation_enabled.get(), ( "Process isolation must be enabled" ) with datalab_test_app_context(save=True) as win: execenv.print("Testing signal features (process isolation: on)...") common.run_signal_computations(win, all_types=False) oids = win.signalpanel.objmodel.get_object_ids() win.signalpanel.open_separate_view(oids[:3]) execenv.print("==> OK") if __name__ == "__main__": test_scenario_signal2() DataLab-1.0.2/datalab/utils/000077500000000000000000000000001511411446000155275ustar00rootroot00000000000000DataLab-1.0.2/datalab/utils/__init__.py000066400000000000000000000000021511411446000176300ustar00rootroot00000000000000# DataLab-1.0.2/datalab/utils/conf.py000066400000000000000000000235521511411446000170350ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Configuration utilities """ from __future__ import annotations import os import os.path as osp import warnings from collections.abc import Generator from contextlib import contextmanager from typing import TYPE_CHECKING, Any import guidata.dataset as gds from guidata.configtools import MONOSPACE, get_family from guidata.userconfig import NoDefault, UserConfig if TYPE_CHECKING: import qtpy.QtGui as QG class AppUserConfig(UserConfig): """Application user configuration""" def to_dict(self) -> dict: """Return configuration as a dictionary""" confdict = {} for section in self.sections(): secdict = {} for option, value in self.items(section, raw=self.raw): secdict[option] = value confdict[section] = secdict return confdict CONF = AppUserConfig({}) class Configuration: """Configuration file""" @classmethod def initialize(cls, name: str, version: str, load: bool) -> None: """Initialize configuration""" CONF.set_application(name, version, load=load) @classmethod def reset(cls) -> None: """Reset configuration""" global CONF # pylint: disable=global-statement CONF.cleanup() # Remove configuration file CONF = AppUserConfig({}) @classmethod def get_filename(cls) -> str: """Return configuration file name""" return CONF.filename() @classmethod def get_path(cls, basename: str) -> str: """Return filename path inside configuration directory""" return CONF.get_path(basename) @classmethod def to_dict(cls) -> dict: """Return configuration as a dictionary""" return CONF.to_dict() class Section: """Configuration section""" @classmethod def set_name(cls, section: str) -> None: """Set section name""" cls._name = section @classmethod def get_name(cls) -> str: """Return section name""" return cls._name class Option: """Configuration option handler""" def __init__(self) -> None: self.section = None self.option = None def get(self, default=NoDefault) -> Any: """Get configuration option value""" return CONF.get(self.section, self.option, default) def set(self, value: Any) -> None: """Set configuration option value""" CONF.set(self.section, self.option, value) def remove(self) -> None: """Remove configuration option""" # No use case for this method yet (quite dangerous!) CONF.remove_option(self.section, self.option) @contextmanager def temp(self, value: Any) -> Generator[None, None, None]: """Temporarily set configuration option value Args: value: new value """ old_value = self.get() self.set(value) yield self.set(old_value) class FontOption(Option): """Font configuration option handler""" def get(self, default=NoDefault) -> str: """Get font name from configuration""" if default is NoDefault: default = (MONOSPACE, 9, False) family = CONF.get(self.section, self.option + "_family", default[0]) size = CONF.get(self.section, self.option + "_size", default[1]) bold = CONF.get(self.section, self.option + "_bold", default[2]) return family, size, bold def set(self, value: tuple[str | list[str], int, bool]) -> None: """Set font name in configuration""" assert isinstance(value, tuple), ( "Font value must be a tuple (family, size, bold)" ) CONF.set(self.section, self.option + "_family", value[0]) CONF.set(self.section, self.option + "_size", value[1]) CONF.set(self.section, self.option + "_bold", value[2]) def get_font(self) -> QG.QFont: """Get QFont from configuration""" # Import here to avoid having to create a Qt application when # just manipulating configuration files from qtpy import QtGui as QG # pylint: disable=import-outside-toplevel family, size, bold = self.get() if isinstance(family, (list, tuple)): family = get_family(family) return QG.QFont(family, size, QG.QFont.Bold if bold else QG.QFont.Normal) class ConfigPathOption(Option): """Configuration file path configuration option handler""" def get(self, default=NoDefault) -> str: """Get configuration file path from configuration""" if default is NoDefault: default = "" fname = super().get(default) if osp.basename(fname) != fname: raise ValueError(f"Invalid configuration file name {fname}") return CONF.get_path(osp.basename(fname)) class WorkingDirOption(Option): """Working directory configuration option handler""" def get(self, default=NoDefault) -> str: """Get working directory from configuration""" if default is NoDefault: default = "" path = super().get(default) if osp.isdir(path): return path return "" def set(self, value: str) -> None: """Set working directory in configuration""" if not osp.isdir(value): value = osp.dirname(value) if not osp.isdir(value): raise FileNotFoundError(f"Invalid working directory name {value}") os.chdir(value) super().set(value) class EnumOption(Option): """Enumeration option handler""" def __init__(self, values: list[Any], default: Any = NoDefault) -> None: super().__init__() if default is NoDefault: default = values[0] self.values = values self.default = default def get(self, default: Any = NoDefault) -> Any: """Get configuration option value""" value = super().get(default) if value not in self.values: # Only show a warning here, as the configuration file may be edited manually warnings.warn( f"Invalid value {value} for option {self.option}, " f"expected {self.values}" ) return self.default return value def set(self, value: Any) -> None: """Set configuration option value""" if value not in self.values: raise ValueError( f"Invalid value {value} for option {self.option}, " f"expected {self.values}" ) super().set(value) class DataSetOption(Option): """DataSet option handler""" def __init__(self, default_instance: gds.DataSet | None = None) -> None: super().__init__() self.default_instance = default_instance def set_default_instance(self, default_instance: gds.DataSet) -> None: """Set the default instance (for lazy initialization)""" self.default_instance = default_instance def get(self, default: Any = NoDefault) -> gds.DataSet: """Get configuration option value""" # Use provided default or fall back to default_instance effective_default = ( default if default is not NoDefault else self.default_instance ) try: json_str = super().get(default) except RuntimeError as exc: # Option not yet registered in CONF - register it with default if effective_default is None: raise ValueError( f"No default instance set for option '{self.option}' " f"in section '{self.section}'" ) from exc # Register the default value in CONF (writes to config file) self.set(effective_default) return effective_default # If the option doesn't exist, super().get() returns the default parameter if not isinstance(json_str, str): return json_str if json_str is NoDefault or not json_str: if effective_default is None: raise ValueError( f"No default instance set for option '{self.option}' " f"in section '{self.section}'" ) return effective_default # Unescape percent signs that were escaped for ConfigParser json_str = json_str.replace("%%", "%") try: return gds.json_to_dataset(json_str) except Exception as exc: # pylint: disable=broad-except # Corrupted JSON: remove the option and return default self.remove() if effective_default is None: raise ValueError( f"No default instance set for option '{self.option}' " f"in section '{self.section}'" ) from exc return effective_default def set(self, value: gds.DataSet) -> None: """Set configuration option value""" json_str = gds.dataset_to_json(value) # Escape percent signs for ConfigParser (which uses % for interpolation) json_str = json_str.replace("%", "%%") super().set(json_str) class SectionMeta(type): """Configuration metaclass""" # pylint: disable=bad-mcs-classmethod-argument def __new__(cls, name, bases, dct): optlist = [] for attrname, obj in list(dct.items()): if isinstance(obj, Option): obj.option = attrname optlist.append(obj) dct["_options"] = optlist return type.__new__(cls, name, bases, dct) class ConfMeta(type): """Configuration metaclass""" # pylint: disable=bad-mcs-classmethod-argument def __new__(cls, name, bases, dct): for attrname, obj in list(dct.items()): if isinstance(obj, Section): obj.set_name(attrname) for option in obj._options: option.section = attrname return type.__new__(cls, name, bases, dct) DataLab-1.0.2/datalab/utils/dephash.py000066400000000000000000000067631511411446000175310ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Module checking dependencies with respect to a reference """ import hashlib import os import os.path as osp import sys from guidata.utils.misc import get_module_path BUFFER_SIZE = 65536 def get_file_hash(filename, dhash=None, bufsize=None): """Return SHA256 hash for file""" if dhash is None: dhash = hashlib.sha256() buffer = bytearray(128 * 1024 if bufsize is None else bufsize) # using a memoryview so that we can slice the buffer without copying it buffer_view = memoryview(buffer) with open(filename, "rb", buffering=0) as fobj: while True: n_chunk = fobj.readinto(buffer_view) if not n_chunk: break dhash.update(buffer_view[:n_chunk]) return dhash def get_directory_hash(directory, extensions=None, verbose=False): """Return SHA256 hash for whole directory""" dhash = hashlib.sha1() if not os.path.exists(directory): return -1 assert extensions is None or isinstance(extensions, (tuple, list)) extlist = [] if extensions is not None: for ext in extensions: if not ext.startswith("."): ext = "." + ext extlist.append(ext) filenb = 0 for root, _dirs, files in os.walk(directory): for name in files: if extensions is None or osp.splitext(name)[1] in extlist: filepath = os.path.join(root, name) if verbose: filenb += 1 print(f"[{filenb:07d}] Hashing: {filepath}") dhash = get_file_hash(filepath, dhash) return dhash.hexdigest() def get_module_hash(module_name, verbose=False): """Return SHA256 hash for Python module""" path = get_module_path(module_name) return get_directory_hash(path, extensions=(".py",), verbose=verbose) def get_dependencies_hash(dependencies): """Return SHA256 hash for Python module dependencies""" return {name: get_module_hash(name) for name in dependencies} DEPFILENAME = f"dependencies-py{sys.version_info.major}-{sys.platform}.txt" def check_dependencies_hash(datapath, hash_dict=None): """Check dependencies hash dictionary""" if hash_dict is None: hash_dict = {} with open(osp.join(datapath, DEPFILENAME), "rb") as filehandle: for line in filehandle.readlines(): key, value = line.decode("utf-8").strip().split(":") hash_dict[key] = value return {name: get_module_hash(name) == hash_dict[name] for name in hash_dict} def create_dependencies_file(datapath, dependencies): """Create dependencies.txt file""" hdict = get_dependencies_hash(dependencies) path = osp.join(datapath, DEPFILENAME) print("Hash file for Python module dependencies:") with open(path, "wb") as filehandle: print(f" Opening {path}") for name in hdict: line = name + ":" + hdict[name] + os.linesep print(f" Writing: {line}", end="") filehandle.write(line.encode("utf-8")) print(" => All done.") if __name__ == "__main__": # datapath = osp.join(osp.dirname(__file__), os.pardir, "data") # hdict = get_dependencies_hash(("guidata", "plotpy")) # print(hdict) # print(check_dependencies_hash(datapath, hdict)) create_dependencies_file( osp.join(osp.dirname(__file__), os.pardir, "data"), ("guidata", "plotpy") ) # print(check_dependencies_hash(datapath)) DataLab-1.0.2/datalab/utils/qthelpers.py000066400000000000000000000524021511411446000201130ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Qt utilities """ from __future__ import annotations import faulthandler import functools import inspect import logging import os import os.path as osp import shutil import sys import time import traceback from collections.abc import Callable, Generator from contextlib import contextmanager from typing import Any import guidata from guidata.configtools import get_icon from guidata.qthelpers import grab_save_window as guidata_grab_save_window from guidata.utils.misc import to_string from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from datalab.config import ( APP_NAME, DATETIME_FORMAT, SHOTPATH, Conf, _, get_old_log_fname, ) from datalab.env import execenv def close_widgets_and_quit(screenshot=False) -> None: """Close Qt top level widgets and quit Qt event loop""" for widget in QW.QApplication.instance().topLevelWidgets(): try: wname = widget.objectName() except RuntimeError: # Object has been deleted continue if screenshot and wname and widget.isVisible(): # pragma: no cover grab_save_window(widget, wname.lower()) assert widget.close() QW.QApplication.instance().quit() QAPP_INSTANCE = None def get_log_contents(fname: str) -> str | None: """Return True if file exists and something was logged in it""" if osp.exists(fname): with open(fname, "rb") as fdesc: return to_string(fdesc.read()).strip() return None def initialize_log_file(fname: str) -> bool: """Eventually keep the previous log file Returns True if there was a previous log file""" contents = get_log_contents(fname) if contents: try: shutil.move(fname, get_old_log_fname(fname)) except Exception: # pylint: disable=broad-except pass return True return False def remove_empty_log_file(fname: str) -> None: """Eventually remove empty log files""" if not get_log_contents(fname): try: os.remove(fname) except Exception: # pylint: disable=broad-except pass @contextmanager def datalab_app_context( exec_loop=False, enable_logs=True ) -> Generator[QW.QApplication, None, None]: """DataLab Qt application context manager, handling Qt application creation and persistance, faulthandler/traceback logging features, screenshot mode and unattended mode. Args: exec_loop: whether to execute Qt event loop (default: False) enable_logs: whether to enable logs (default: True) """ global QAPP_INSTANCE # pylint: disable=global-statement if QAPP_INSTANCE is None: QAPP_INSTANCE = guidata.qapplication() # === Set application name and version --------------------------------------------- # pylint: disable=import-outside-toplevel import datalab QAPP_INSTANCE.setApplicationName(APP_NAME) QAPP_INSTANCE.setApplicationVersion(datalab.__version__) QAPP_INSTANCE.setOrganizationName(APP_NAME + " project") if enable_logs: # === Create a logger for standard exceptions ---------------------------------- tb_log_fname = Conf.main.traceback_log_path.get() Conf.main.traceback_log_available.set(initialize_log_file(tb_log_fname)) logger = logging.getLogger(__name__) fmt = "[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s" logging.basicConfig( filename=tb_log_fname, filemode="w", level=logging.ERROR, format=fmt, datefmt=DATETIME_FORMAT, ) def custom_excepthook(exc_type, exc_value, exc_traceback): "Custom exception hook" logger.critical( "Unhandled exception", exc_info=(exc_type, exc_value, exc_traceback) ) return sys.__excepthook__(exc_type, exc_value, exc_traceback) sys.excepthook = custom_excepthook # === Use faulthandler for other exceptions ------------------------------------ fh_log_fname = Conf.main.faulthandler_log_path.get() Conf.main.faulthandler_log_available.set(initialize_log_file(fh_log_fname)) with open(fh_log_fname, "w", encoding="utf-8") as fh_log_fn: if enable_logs and Conf.main.faulthandler_enabled.get(True): faulthandler.enable(file=fh_log_fn) exception_occured = False try: yield QAPP_INSTANCE except Exception: # pylint: disable=broad-except exception_occured = True finally: if ( execenv.unattended or execenv.screenshot ) and not execenv.do_not_quit: # pragma: no cover if execenv.delay > 0: mode = "Screenshot" if execenv.screenshot else "Unattended" message = f"{mode} mode (delay: {execenv.delay}ms)" msec = execenv.delay - 200 for widget in QW.QApplication.instance().topLevelWidgets(): if isinstance(widget, QW.QMainWindow): widget.statusBar().showMessage(message, msec) QC.QTimer.singleShot( execenv.delay, lambda: close_widgets_and_quit(screenshot=execenv.screenshot), ) if exec_loop and not exception_occured: QAPP_INSTANCE.exec() if exception_occured: raise # pylint: disable=misplaced-bare-raise if enable_logs and Conf.main.faulthandler_enabled.get(): faulthandler.disable() remove_empty_log_file(fh_log_fname) if enable_logs: logging.shutdown() remove_empty_log_file(tb_log_fname) def is_running_tests() -> bool: """Check if code is running during test execution""" return "pytest" in sys.modules @contextmanager def try_or_log_error(context: str) -> Generator[None, None, None]: """Try to execute a function and log an error message if it fails""" try: yield except Exception: # pylint: disable=broad-except if is_running_tests(): # If we are running tests, we want to raise the exception raise traceback.print_exc() logger = logging.getLogger(__name__) logger.error("Error in %s", context, exc_info=traceback.format_exc()) Conf.main.traceback_log_available.set(True) finally: pass @contextmanager def create_progress_bar( parent: QW.QWidget, label: str, max_: int, show_after: int = 1000 ) -> Generator[QW.QProgressDialog, None, None]: """Create modal progress bar Args: parent: Parent widget label: Progress dialog title max_: Maximum progress value show_after: Delay before showing the progress dialog (ms, default: 1000) """ prog = QW.QProgressDialog(label, _("Cancel"), 0, max_, parent, QC.Qt.SplashScreen) prog.setWindowModality(QC.Qt.WindowModal) prog.setMinimumDuration(show_after) try: yield prog finally: prog.close() prog.deleteLater() class CallbackWorker(QC.QThread): """Worker for executing long operations in a separate thread (this must not be confused with the :py:class:`datalab.gui.processor.base.Worker` class, which handles the execution of computations in a another process) Implements `CallbackWorkerProtocol` from `sigima.worker`, used for computations that support cancellation and progress reporting. Args: callback: The function to be executed in a separate thread, that takes optionnally 'worker' as argument (instance of this class), and any other argument passed with **kwargs kwargs: Callback keyword arguments """ SIG_PROGRESS_UPDATE = QC.Signal(int) def __init__(self, callback: Callable, **kwargs) -> None: super().__init__() self.callback = callback if "worker" in inspect.signature(callback).parameters: kwargs["worker"] = self self.kwargs = kwargs self.result: Any | None = None self.__canceled = False self.__exc = None def run(self) -> None: """Start thread""" # Initialize progress bar: setting progress to 0.0 has the effect of # showing the progress dialog after the `minimumDuration` time has elapsed. # If we don't set the progress to 0.0, the progress dialog will be shown only # after the first call to `set_progress` method even if the `minimumDuration` # time has elapsed. self.set_progress(0.0) try: self.result = self.callback(**self.kwargs) except Exception as exc: # pylint: disable=broad-except self.__exc = exc def cancel(self) -> None: """Progress bar was canceled""" self.__canceled = True def was_canceled(self) -> bool: """Return whether the progress dialog was canceled by user""" return self.__canceled def set_progress(self, value: float) -> None: """Set progress bar value Args: value: float between 0.0 and 1.0 """ self.SIG_PROGRESS_UPDATE.emit(int(100 * value)) def get_result(self) -> Any: """Return callback result""" if self.__exc is not None: raise self.__exc return self.result def qt_long_callback( parent: QW.QWidget, label: str, worker: CallbackWorker, progress: bool, show_after: int = 500, ) -> Any: """Handle long callbacks: run in a separate thread while showing a busy bar Args: parent: Parent widget label: Progress dialog title worker: Callback worker handling the function execution in a separate thread progress: Whether the progress feature is handled or not. If True, a progress bar and a 'Cancel' button are shown on the progress dialog. The progress value is updated by the `worker.set_progress` method (which takes a float between 0.0 and 1.0). Moreover, if `progress` is True, we wait for the callback function to return (it means that the callback function must implement a mechanism to return an intermediate result or `None` if the `worker.was_canceled` method returns True). show_after: Delay before showing the progress dialog (ms, default: 1000) Returns: Callback result """ if progress: prog = QW.QProgressDialog( label, _("Cancel"), 0, 100, parent, QC.Qt.SplashScreen ) prog.setMinimumDuration(show_after) worker.SIG_PROGRESS_UPDATE.connect(prog.setValue) prog.canceled.connect(worker.cancel) else: prog = QW.QProgressDialog(label, None, 0, 0, parent, QC.Qt.SplashScreen) prog.setMinimumDuration(0) prog.setCancelButton(None) prog.setRange(0, 0) prog.show() prog.setWindowModality(QC.Qt.WindowModal) worker.start() while worker.isRunning() and not worker.was_canceled(): QW.QApplication.processEvents() time.sleep(0.005) if progress: worker.SIG_PROGRESS_UPDATE.disconnect(prog.setValue) worker.wait() try: result = worker.get_result() except Exception as exc: # pylint: disable=broad-except prog.close() prog.deleteLater() raise exc prog.close() prog.deleteLater() return result def qt_handle_error_message(widget: QW.QWidget, message: str, context: str = None): """Handles application (QWidget) error message""" traceback.print_exc() txt = str(message) msglines = txt.splitlines() firstline = _("Error:") if context is None else f"%s: {context}" % _("Context") msglines.insert(0, firstline) if len(msglines) > 10: msglines = msglines[:10] + ["..."] title = widget.window().objectName() QW.QMessageBox.critical(widget, title, os.linesep.join(msglines)) def qt_try_except(message=None, context=None): """Try...except Qt widget method decorator""" def qt_try_except_decorator(func): """Try...except Qt widget method decorator""" @functools.wraps(func) def method_wrapper(*args, **kwargs): """Decorator wrapper function""" self = args[0] # extracting 'self' from method arguments # If "self" is a BaseProcessor, then we need to get the panel instance panel = getattr(self, "panel", self) if message is not None: panel.SIG_STATUS_MESSAGE.emit(message, 0) QW.QApplication.setOverrideCursor(QG.QCursor(QC.Qt.WaitCursor)) panel.repaint() output = None try: output = func(*args, **kwargs) except Exception as msg: # pylint: disable=broad-except if is_running_tests(): # If we are running tests, we want to raise the exception raise qt_handle_error_message(panel.parentWidget(), msg, context) finally: if message is not None: panel.SIG_STATUS_MESSAGE.emit("", 0) QW.QApplication.restoreOverrideCursor() return output return method_wrapper return qt_try_except_decorator @contextmanager def qt_try_loadsave_file( parent: QW.QWidget, filename: str, operation: str ) -> Generator[str, None, None]: """Try and open file (operation: "load" or "save")""" if operation not in ("load", "save"): raise ValueError("operation argument must be 'load' or 'save'") try: yield filename except Exception as msg: # pylint: disable=broad-except if is_running_tests(): # If we are running tests, we want to raise the exception raise traceback.print_exc() url = osp.dirname(filename).replace("\\", "/") if operation == "load": text = _("The file %s could not be read:") else: text = _("The file %s could not be written:") in_folder = _("in this folder") message = text % ( f"{osp.basename(filename)}" f" ({in_folder})" ) QW.QMessageBox.critical(parent, APP_NAME, f"{message}

    {str(msg)}") finally: pass def grab_save_window( widget: QW.QWidget, name: str | None = None, add_timestamp: bool = True ) -> None: # pragma: no cover """Grab window screenshot and save it. Args: widget: Widget to grab name: Screenshot name (if None, uses widget.objectName()) add_timestamp: Whether to add a timestamp to the screenshot name (default: True) """ if name is None: name = widget.objectName() # DataLab-specific logic: determine if timestamp should be added # based on name patterns and DataLab conventions if name.endswith("_"): # Name ending with underscore always gets timestamp add_timestamp = True elif name[-1].isdigit() or name.startswith(("s_", "i_")): # DataLab screenshot names or numbered items don't get timestamp add_timestamp = False # Use guidata's grab_save_window with DataLab-specific configuration guidata_grab_save_window( widget=widget, name=name, save_dir=SHOTPATH, add_timestamp=add_timestamp ) @contextmanager def save_restore_stds() -> Generator[None, None, None]: """Save/restore standard I/O before/after doing some things (e.g. calling Qt open/save dialogs)""" saved_in, saved_out, saved_err = sys.stdin, sys.stdout, sys.stderr sys.stdout = None try: yield finally: sys.stdin, sys.stdout, sys.stderr = saved_in, saved_out, saved_err @contextmanager def block_signals( widget: QW.QWidget, enable: bool = True, children: bool = False ) -> Generator[None, None, None]: """Eventually block/unblock widget Qt signals before/after doing some things Args: widget: Widget to block/unblock signals enable: Whether to block/unblock signals (default: True). This is useful to avoid blocking signals when not needed without having to handle it by adding an `if` statement which would require to duplicate the code that is inside the `with` statement in the `else` branch. children: Whether to block/unblock signals for child widgets (default: False). Returns: Context manager """ if enable: widget.blockSignals(True) if children: for child in widget.findChildren(QW.QWidget): child.blockSignals(True) try: yield finally: if enable: widget.blockSignals(False) if children: for child in widget.findChildren(QW.QWidget): child.blockSignals(False) def create_menu_button( parent: QW.QWidget | None = None, menu: QW.QMenu | None = None ) -> QW.QPushButton: """Create a menu button Args: parent (QWidget): Parent widget menu (QMenu): Menu to attach to the button Returns: QW.QPushButton: Menu button """ button = QW.QPushButton(get_icon("libre-gui-menu.svg"), "", parent) button.setFlat(True) if menu is not None: button.setMenu(menu) return button def bring_to_front(window: QW.QWidget) -> None: """Bring window to front Args: window: Window to bring to front """ # Show window on top of others eflags = window.windowFlags() window.setWindowFlags(eflags | QC.Qt.WindowStaysOnTopHint) window.show() window.setWindowFlags(eflags) window.show() # If window is minimized, restore it if window.isMinimized(): window.showNormal() def configure_menu_about_to_show(menu: QW.QMenu, slot: Callable) -> None: """Configure menu about to show. This method is only used to connect the "aboutToShow" signal of menus, and more importantly to fix Issue #15 (Part 2) which is the fact that dynamic menus are not supported on MacOS unless an action is added to the menu before it is displayed. Args: menu: menu slot: slot """ # On MacOS, add an empty action to the menu before connecting the # "aboutToShow" signal to the slot. This is required to fix Issue #15 (Part 2) if sys.platform == "darwin": menu.addAction(QW.QAction(menu)) menu.aboutToShow.connect(slot) def resize_widget_to_parent( widget: QW.QWidget, parent: QW.QWidget | None = None, ratio: float = 0.95, aspect_ratio: float = 1.0, min_size: int = 500, ) -> None: """Resize widget based on parent widget's dimensions Args: widget: Widget to resize parent: Parent widget (if None, uses widget.parentWidget()) ratio: Ratio of parent size to use (0.0 to 1.0, default: 0.95 for 95%). This represents the percentage of the maximum dimension with respect to the widget. aspect_ratio: Width/height ratio (1.0 for square, >1.0 for landscape, <1.0 for portrait, default: 1.0) min_size: Minimum size in pixels (default: 500) """ if parent is None: parent = widget.parentWidget() if parent is not None: parent_size = parent.size() parent_width = parent_size.width() parent_height = parent_size.height() # Calculate maximum available dimensions max_width = parent_width * ratio max_height = parent_height * ratio # Determine which dimension is limiting based on aspect ratio # For aspect_ratio = w/h, we have: w = aspect_ratio * h # Check which constraint is more restrictive width_from_height = max_height * aspect_ratio height_from_width = max_width / aspect_ratio if width_from_height <= max_width: # Height is the limiting factor height = int(max_height) width = int(width_from_height) else: # Width is the limiting factor width = int(max_width) height = int(height_from_width) # Ensure minimum size while preserving aspect ratio if width < min_size or height < min_size: if aspect_ratio >= 1.0: # Landscape or square: scale up from minimum width width = max(width, min_size) height = max(height, int(min_size / aspect_ratio)) else: # Portrait: scale up from minimum height height = max(height, min_size) width = max(width, int(min_size * aspect_ratio)) # Final check: ensure we don't exceed parent dimensions width = min(width, parent_width) height = min(height, parent_height) widget.resize(width, height) else: # Fallback: use square with min_size if no parent widget.resize(min_size, min_size) def add_corner_menu( tabwidget: QW.QTabWidget, corner: QC.Qt.Corner | None = None ) -> QW.QMenu: """Add menu as corner widget to tab widget Args: tabwidget: Tab widget corner: Corner Returns: Menu """ if corner is None: corner = QC.Qt.TopRightCorner menu = QW.QMenu(tabwidget) btn = QW.QToolButton(tabwidget) btn.setMenu(menu) btn.setPopupMode(QW.QToolButton.InstantPopup) btn.setIcon(get_icon("menu.svg")) btn.setToolTip(_("Open tab menu")) tabwidget.setCornerWidget(btn, corner) return menu DataLab-1.0.2/datalab/utils/strings.py000066400000000000000000000017711511411446000176000ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab strings utilities """ from __future__ import annotations import difflib import os.path as osp import webbrowser def save_html_diff( text1: str, text2: str, desc1: str, desc2: str, filename: str ) -> None: """Generates HTML diff between two strings, saves it to a file, and opens it in a web browser (Windows only). Args: text1 (str): The first string to compare. text2 (str): The second string to compare. desc1 (str): Description of the first string. desc2 (str): Description of the second string. filename (str): The name of the file to save the HTML diff to. Returns: None """ differ = difflib.HtmlDiff() diff_html = differ.make_file(text1.splitlines(), text2.splitlines(), desc1, desc2) with open(filename, "w", encoding="utf-8") as file: file.write(diff_html) webbrowser.open("file://" + osp.realpath(filename)) DataLab-1.0.2/datalab/utils/tests.py000066400000000000000000000000001511411446000172310ustar00rootroot00000000000000DataLab-1.0.2/datalab/widgets/000077500000000000000000000000001511411446000160355ustar00rootroot00000000000000DataLab-1.0.2/datalab/widgets/__init__.py000066400000000000000000000000021511411446000201360ustar00rootroot00000000000000# DataLab-1.0.2/datalab/widgets/connection.py000066400000000000000000000111551511411446000205510ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Module providing a connection dialog box for the DataLab proxy client """ from __future__ import annotations import time from collections.abc import Callable from guidata.configtools import get_icon, get_image_file_path from guidata.qthelpers import ( get_std_icon, qt_app_context, win32_fix_title_bar_background, ) from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from datalab.config import _ class ConnectionThread(QC.QThread): """DataLab Connection thread""" SIG_CONNECTION_OK = QC.Signal() SIG_CONNECTION_KO = QC.Signal(str) def __init__(self, connect_callback: Callable, parent: QC.QObject = None) -> None: super().__init__(parent) self.connect_callback = connect_callback def run(self) -> None: """Run thread""" try: self.connect_callback() self.SIG_CONNECTION_OK.emit() except ConnectionRefusedError as exc: self.SIG_CONNECTION_KO.emit(str(exc)) class ConnectionDialog(QW.QDialog): """DataLab Connection dialog Args: connect_callback: Callback function to connect to DataLab server parent: Parent widget. Defaults to None. """ def __init__(self, connect_callback: Callable, parent: QW.QWidget = None) -> None: super().__init__(parent) win32_fix_title_bar_background(self) self.setWindowTitle(_("Connection to DataLab")) self.setWindowIcon(get_icon("DataLab.svg")) self.resize(300, 50) self.__error_message = "" self.host_label = QW.QLabel() pixmap = QG.QPixmap(get_image_file_path("DataLab-Banner-200.png")) self.host_label.setPixmap(pixmap) self.host_label.setAlignment(QC.Qt.AlignCenter) self.progress_bar = QW.QProgressBar() self.progress_bar.setRange(0, 0) status = QW.QWidget() status_layout = QW.QHBoxLayout() status.setLayout(status_layout) self.status_label = QW.QLabel("Waiting for connection...") self.status_icon = QW.QLabel() status_layout.addWidget(self.status_icon) status_layout.addWidget(self.status_label) status_layout.setContentsMargins(0, 0, 0, 0) status_layout.addStretch() layout = QW.QVBoxLayout() layout.addWidget(self.host_label) layout.addWidget(self.progress_bar) layout.addWidget(status) self.setLayout(layout) self.thread = ConnectionThread(connect_callback) self.thread.SIG_CONNECTION_OK.connect(self.__on_connection_successful) self.thread.SIG_CONNECTION_KO.connect(self.__on_connection_failed) button_box = QW.QDialogButtonBox(QW.QDialogButtonBox.Cancel) button_box.rejected.connect(self.reject) layout.addWidget(button_box) def __set_status_icon(self, name: str) -> None: """Set status icon with standard Qt icon name""" self.status_icon.setPixmap(QG.QPixmap(get_std_icon(name).pixmap(24))) def __connect_to_server(self) -> None: """Connect to server""" self.progress_bar.setRange(0, 0) self.__set_status_icon("BrowserReload") self.status_label.setText("Connecting to server...") self.thread.start() def __on_connection_successful(self) -> None: """Connection successful""" self.progress_bar.setRange(0, 1) self.progress_bar.setValue(1) self.__set_status_icon("DialogApplyButton") self.status_label.setText("Connection successful!") QC.QTimer.singleShot(1000, self.accept) def __on_connection_failed(self, error_message: str) -> None: """Connection failed""" self.__error_message = error_message self.progress_bar.setRange(0, 1) self.progress_bar.setValue(1) self.__set_status_icon("MessageBoxCritical") self.status_label.setText(f"Connection failed: {error_message}") QC.QTimer.singleShot(2000, self.reject) def get_error_message(self) -> str: """Get error message if connection failed""" return self.__error_message def exec(self) -> int: """Execute dialog""" self.__connect_to_server() return super().exec() def reject(self) -> None: """Reject dialog""" super().reject() self.__error_message = "Cancelled by user" if __name__ == "__main__": def fake_connect(): """Fake connection""" time.sleep(5) # raise ConnectionRefusedError("Connection refused") with qt_app_context(): dlg = ConnectionDialog(fake_connect) dlg.exec() DataLab-1.0.2/datalab/widgets/filedialog.py000066400000000000000000000060711511411446000205120ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Module providing a file dialog widget based on Qt's QFileDialog.getOpenFileNames but supporting multiple file preselection (Qt original dialog only supports single file selection). """ from __future__ import annotations import os import os.path as osp from guidata.qthelpers import qt_app_context from qtpy.QtCore import QItemSelectionModel from qtpy.QtWidgets import QAbstractItemView, QFileDialog, QListView, QWidget def get_open_file_names( parent: QWidget | None = None, caption: str = "", basedir: str | list[str] = "", filters: str = "", selectedfilter: str = "", options: QFileDialog.Options = None, ) -> tuple[list[str], str]: """Wrapper around QtGui.QFileDialog.getOpenFileNames static method Returns a tuple (filenames, selectedfilter) -- when dialog box is canceled, returns a tuple (empty list, empty string) Args: parent: Parent widget for the dialog. caption: Dialog title. basedir: Initial directory to open the dialog in, or preselected files (single string or list of strings). filters: File filters for the dialog. selectedfilter: Default filter to be selected. options: Additional options for the dialog. Returns: A tuple containing a list of selected filenames and the selected filter. """ if isinstance(basedir, str): if osp.isfile(basedir): sel_files = [basedir] basedir = osp.dirname(basedir) else: sel_files = [] else: assert isinstance(basedir, list) sel_files = basedir basedir = osp.dirname(sel_files[0]) if sel_files else "" dlg = QFileDialog( parent, caption, basedir, filters, options=QFileDialog.DontUseNativeDialog ) if options is not None: dlg.setOptions(options | QFileDialog.DontUseNativeDialog) file_view = dlg.findChild(QListView, "listView") sel_model = file_view.selectionModel() for fname in sel_files: idx = sel_model.model().index(fname) sel_model.select(idx, QItemSelectionModel.Select | QItemSelectionModel.Rows) file_view.setSelectionMode(QAbstractItemView.ExtendedSelection) file_view.setSelectionBehavior(QAbstractItemView.SelectRows) if dlg.exec(): filenames = dlg.selectedFiles() selectedfilter = dlg.selectedNameFilter() else: filenames = [] selectedfilter = "" return filenames, selectedfilter def test_get_open_file_names(): """Test get_open_file_names function""" datalab_widgets_path = osp.dirname(__file__) sel_files = [ osp.join(datalab_widgets_path, fname) for fname in os.listdir(datalab_widgets_path)[:2] ] with qt_app_context(): filenames, selectedfilter = get_open_file_names( filters="Python files (*.py);;All files (*)", caption="Select Python files", basedir=sel_files, ) print(filenames, selectedfilter) if __name__ == "__main__": test_get_open_file_names() DataLab-1.0.2/datalab/widgets/fileviewer.py000066400000000000000000000043131511411446000205510ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Module providing a file viewer widget """ from __future__ import annotations from pathlib import Path from guidata.widgets.codeeditor import CodeEditor from qtpy import QtWidgets as QW from datalab.config import _ def read_text_file(path: str) -> str: """Read text file using multiple encodings Args: path (str): path to file Raises: UnicodeDecodeError: if unable to read file using any of the encodings Returns: str: file contents """ encodings = ["utf-8", "latin1", "cp1252", "utf-16", "utf-32", "ascii"] for encoding in encodings: try: with open(path, "r", encoding=encoding) as fdesc: return fdesc.read() except UnicodeDecodeError: pass raise UnicodeDecodeError( f"Unable to read file using the following encodings: {encodings}" ) def get_title_contents(path: str) -> tuple[str, str]: """Get title and contents for log filename Args: path (str): path to file Returns: tuple[str, str]: title and contents """ contents = read_text_file(path) pathobj = Path(path) uri_path = pathobj.absolute().as_uri() prefix = _("Contents of file") text = f'{prefix} {path}:' return text, contents class FileViewerWidget(QW.QWidget): """File viewer widget Args: parent (QW.QWidget | None): parent widget. Defaults to None. """ def __init__(self, language: str | None = None, parent: QW.QWidget = None) -> None: super().__init__(parent) self.editor = CodeEditor(language=language) self.editor.setReadOnly(True) layout = QW.QVBoxLayout() self.label = QW.QLabel("") layout.addWidget(self.label) layout.addWidget(self.editor) self.setLayout(layout) def set_data(self, text: str, contents: str) -> None: """Set log data Args: text (str): text to display contents (str): contents to display """ self.label.setText(text) self.label.setOpenExternalLinks(True) self.editor.setPlainText(contents) DataLab-1.0.2/datalab/widgets/fitdialog.py000066400000000000000000000600261511411446000203550ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Curve fitting dialog widgets""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... import numpy as np from guidata.configtools import get_icon from guidata.qthelpers import exec_dialog from plotpy.plot import PlotOptions from plotpy.widgets.fit import FitDialog, FitParam from scipy.special import erf # pylint: disable=no-name-in-module from sigima.tools.checks import check_1d_arrays from sigima.tools.signal import fitting, fourier, pulse from datalab.config import Conf, _ DEFAULT_FORMAT = "%g" def guifit( x, y, fitfunc, fitparams, fitargs=None, fitkwargs=None, wintitle=None, title=None, xlabel=None, ylabel=None, param_cols=1, auto_fit=True, winsize=None, winpos=None, parent=None, name=None, ): # pylint: disable=too-many-positional-arguments """GUI-based curve fitting tool""" win = FitDialog( edit=True, title=wintitle, icon=None, toolbar=True, options=PlotOptions( title=title, xlabel=xlabel, ylabel=ylabel, curve_antialiasing=True, show_axes_tab=False, autoscale_margin_percent=Conf.view.sig_autoscale_margin_percent.get(), ), parent=parent, param_cols=param_cols, auto_fit=auto_fit, ) win.setObjectName(name) win.set_data(x, y, fitfunc, fitparams, fitargs, fitkwargs) try: win.autofit() # TODO: [P3] make this optional except ValueError: pass if parent is None: win.setWindowIcon(get_icon("DataLab.svg")) if winsize is not None: win.resize(*winsize) if winpos is not None: win.move(*winpos) win.get_plot().do_autoscale() if exec_dialog(win): return win.get_values() return None # --- Polynomial fitting curve ------------------------------------------------- def polynomial_fit(x, y, degree, parent=None, name=None): """Compute polynomial fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" ivals = np.polyfit(x, y, degree) params = [] for index in range(degree + 1): val = ivals[index] vmax = max(1.0, np.abs(val)) param = FitParam( f"c{(len(ivals) - index - 1):d}", val, -2 * vmax, 2 * vmax, format=DEFAULT_FORMAT, ) params.append(param) def fitfunc(x, params): return np.polyval(params, x) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Polymomial fit"), name=name ) if values: return fitfunc(x, values), params def linear_fit(x: np.ndarray, y: np.ndarray, parent=None, name=None): """Compute linear fit using polynomialfit. Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters """ return polynomial_fit(x, y, 1, parent=parent, name=name) # --- Gaussian fitting curve --------------------------------------------------- def gaussian_fit(x, y, parent=None, name=None): """Compute Gaussian fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima GaussianFitComputer computer = fitting.GaussianFitComputer(x, y) initial_params = computer.compute_initial_params() amp_guess = initial_params["amp"] sigma_guess = initial_params["sigma"] mu_guess = initial_params["x0"] b_guess = initial_params["y0"] dy = np.max(y) - np.min(y) max_amp = amp_guess * 2.0 if amp_guess > 0 else dy a = FitParam(_("Amplitude"), amp_guess, 0.0, max_amp, format=DEFAULT_FORMAT) b = FitParam( _("Base line"), b_guess, np.min(y) - 0.1 * dy, np.max(y), format=DEFAULT_FORMAT ) sigma = FitParam( _("Std-dev") + " (σ)", sigma_guess, sigma_guess * 0.1, sigma_guess * 10, format=DEFAULT_FORMAT, ) mu = FitParam( _("Mean") + " (μ)", mu_guess, np.min(x), np.max(x), format=DEFAULT_FORMAT ) params = [a, sigma, mu, b] def fitfunc(x, params): return pulse.GaussianModel.func(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Gaussian fit"), name=name ) if values: return fitfunc(x, values), params # --- Lorentzian fitting curve ------------------------------------------------- def lorentzian_fit(x, y, parent=None, name=None): """Compute Lorentzian fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima LorentzianFitComputer computer = fitting.LorentzianFitComputer(x, y) initial_params = computer.compute_initial_params() amp_guess = initial_params["amp"] sigma_guess = initial_params["sigma"] mu_guess = initial_params["x0"] b_guess = initial_params["y0"] # Create parameter bounds dy = np.max(y) - np.min(y) max_amp = amp_guess * 2.0 if amp_guess > 0 else dy a = FitParam(_("Amplitude"), amp_guess, 0.0, max_amp, format=DEFAULT_FORMAT) b = FitParam( _("Base line"), b_guess, np.min(y) - 0.1 * dy, np.max(y), format=DEFAULT_FORMAT ) sigma = FitParam( _("Std-dev") + " (σ)", sigma_guess, sigma_guess * 0.1, sigma_guess * 10, format=DEFAULT_FORMAT, ) mu = FitParam( _("Mean") + " (μ)", mu_guess, np.min(x), np.max(x), format=DEFAULT_FORMAT ) params = [a, sigma, mu, b] def fitfunc(x, params): return pulse.LorentzianModel.func(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Lorentzian fit"), name=name ) if values: return fitfunc(x, values), params # --- Voigt fitting curve ------------------------------------------------------ def voigt_fit(x, y, parent=None, name=None): """Compute Voigt fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima VoigtFitComputer computer = fitting.VoigtFitComputer(x, y) initial_params = computer.compute_initial_params() amp_guess = initial_params["amp"] sigma_guess = initial_params["sigma"] mu_guess = initial_params["x0"] b_guess = initial_params["y0"] # Create parameter bounds dy = np.max(y) - np.min(y) max_amp = amp_guess * 2.0 if amp_guess > 0 else dy a = FitParam(_("Amplitude"), amp_guess, 0.0, max_amp, format=DEFAULT_FORMAT) b = FitParam( _("Base line"), b_guess, np.min(y) - 0.1 * dy, np.max(y), format=DEFAULT_FORMAT ) sigma = FitParam( _("Std-dev") + " (σ)", sigma_guess, sigma_guess * 0.1, sigma_guess * 10, format=DEFAULT_FORMAT, ) mu = FitParam( _("Mean") + " (μ)", mu_guess, np.min(x), np.max(x), format=DEFAULT_FORMAT ) params = [a, sigma, mu, b] def fitfunc(x, params): return pulse.VoigtModel.func(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Voigt fit"), name=name ) if values: return fitfunc(x, values), params # --- Multi-Gaussian fitting curve --------------------------------------------- def multigaussian(x, *values, **kwargs): """Return a 1-dimensional multi-Gaussian function.""" a_amp = values[0::2] a_sigma = values[1::2] y0 = values[-1] a_x0 = kwargs["a_x0"] y = np.zeros_like(x) + y0 for amp, sigma, x0 in zip(a_amp, a_sigma, a_x0): y += amp * np.exp(-0.5 * ((x - x0) / sigma) ** 2) return y def multigaussian_fit(x, y, peak_indices, parent=None, name=None): """Compute Multi-Gaussian fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima MultiGaussianFitComputer computer = fitting.MultiGaussianFitComputer(x, y, peak_indices) initial_params = computer.compute_initial_params() # Use Sigima parameters to populate DataLab params params = [] for index, i0 in enumerate(peak_indices): stri = f"{index + 1:02d}" amp_key = f"amp_{index + 1}" sigma_key = f"sigma_{index + 1}" amp_val = initial_params[amp_key] if amp_key in initial_params else y[i0] sigma_val = ( initial_params[sigma_key] if sigma_key in initial_params else (x.max() - x.min()) / 100 ) # Calculate bounds based on local data istart = 0 iend = len(x) - 1 if index > 0: istart = (peak_indices[index - 1] + i0) // 2 if index < len(peak_indices) - 1: iend = (peak_indices[index + 1] + i0) // 2 dx = 0.5 * (x[iend] - x[istart]) dy = np.max(y[istart:iend]) - np.min(y[istart:iend]) params += [ FitParam( ("A") + stri, amp_val, 0.0, max(dy * 2, amp_val * 2), format=DEFAULT_FORMAT, ), FitParam("σ" + stri, sigma_val, dx / 100, dx, format=DEFAULT_FORMAT), ] y0_val = initial_params.get("y0", np.min(y)) params.append( FitParam( _("Y0"), y0_val, np.min(y) - 0.1 * (np.max(y) - np.min(y)), np.max(y), format=DEFAULT_FORMAT, ) ) kwargs = {"a_x0": x[peak_indices]} def fitfunc(xi, params): return multigaussian(xi, *params, **kwargs) param_cols = 1 if len(params) > 8: param_cols = 4 values = guifit( x, y, fitfunc, params, param_cols=param_cols, winsize=(900, 600), parent=parent, name=name, wintitle=_("Multi-Gaussian fit"), ) if values: return fitfunc(x, values), params # --- Multi-Lorentzian fitting curve ------------------------------------------- def multilorentzian(x, *values, **kwargs): """Return a 1-dimensional multi-Lorentzian function.""" a_amp = values[0::2] a_sigma = values[1::2] y0 = values[-1] a_x0 = kwargs["a_x0"] y = np.zeros_like(x) + y0 for amp, sigma, x0 in zip(a_amp, a_sigma, a_x0): y += pulse.LorentzianModel.func(x, amp, sigma, x0, 0) return y def multilorentzian_fit( x: np.ndarray, y: np.ndarray, peak_indices, parent=None, name=None ): """Compute Multi-Lorentzian fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima MultiLorentzianFitComputer computer = fitting.MultiLorentzianFitComputer(x, y, peak_indices) initial_params = computer.compute_initial_params() # Use Sigima parameters to populate DataLab params params = [] for index, i0 in enumerate(peak_indices): stri = f"{index + 1:02d}" amp_key = f"amp_{index + 1}" sigma_key = f"sigma_{index + 1}" amp_val = ( initial_params[amp_key] if amp_key in initial_params else pulse.LorentzianModel.get_amp_from_amplitude( y[i0] - np.min(y), (x.max() - x.min()) / 100 ) ) sigma_val = ( initial_params[sigma_key] if sigma_key in initial_params else (x.max() - x.min()) / 100 ) params += [ FitParam( ("A") + stri, amp_val, 0.0, max(amp_val * 1.2, y[i0] * 1.2), format=DEFAULT_FORMAT, ), FitParam( "σ" + stri, sigma_val, sigma_val * 0.2, sigma_val * 10, format=DEFAULT_FORMAT, ), ] y0_val = initial_params.get("y0", np.min(y)) params.append( FitParam( _("Y0"), y0_val, np.min(y) - 0.1 * (np.max(y) - np.min(y)), np.max(y), format=DEFAULT_FORMAT, ) ) kwargs = {"a_x0": x[peak_indices]} def fitfunc(xi, params): return multilorentzian(xi, *params, **kwargs) param_cols = 1 if len(params) > 8: param_cols = 4 values = guifit( x, y, fitfunc, params, param_cols=param_cols, winsize=(900, 600), parent=parent, name=name, wintitle=_("Multi-Lorentzian fit"), ) if values: return fitfunc(x, values), params # --- Exponential fitting curve ------------------------------------------------ def exponential_fit(x: np.ndarray, y: np.ndarray, parent=None, name=None): """Compute exponential fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima ExponentialFitComputer computer = fitting.ExponentialFitComputer(x, y) initial_params = computer.compute_initial_params() oa = initial_params["a"] ob = initial_params["b"] oc = initial_params["y0"] # Create parameter bounds moa, mob, moc = np.maximum(1, [abs(oa), abs(ob), abs(oc)]) a_p = FitParam( _("A coefficient"), oa, -2 * moa, 2 * moa, logscale=True, format=DEFAULT_FORMAT ) b_p = FitParam(_("B coefficient"), ob, 0.5 * mob, 1.5 * mob, format=DEFAULT_FORMAT) c_p = FitParam(_("y0 constant"), oc, -2 * moc, 2 * moc, format=DEFAULT_FORMAT) params = [a_p, b_p, c_p] def modelfunc(x, a, b, c): return a * np.exp(b * x) + c def fitfunc(x, params): return modelfunc(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Exponential fit"), name=name ) if values: return fitfunc(x, values), params # --- Sinusoidal fitting curve ------------------------------------------------ @check_1d_arrays(x_evenly_spaced=True) def dominant_frequency(x: np.ndarray, y: np.ndarray) -> np.floating: """Find the dominant frequency. Args: x: 1-D x values. y: 1-D y values. Returns: Dominant frequency. """ f, spectrum = fourier.magnitude_spectrum(x, y) return np.abs(f[np.argmax(spectrum)]) def sinusoidal_fit(x: np.ndarray, y: np.ndarray, parent=None, name=None): """Compute sinusoidal fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima SinusoidalFitComputer computer = fitting.SinusoidalFitComputer(x, y) initial_params = computer.compute_initial_params() guess_a = initial_params["amplitude"] guess_f = initial_params["frequency"] guess_ph = np.rad2deg(initial_params["phase"]) # Convert to degrees guess_c = initial_params["offset"] # Create parameter bounds abs_values = [abs(guess_a), abs(guess_f), abs(guess_ph), abs(guess_c)] moa, mof, _mop, moc = np.maximum(1, abs_values) a_p = FitParam(_("Amplitude"), guess_a, -2 * moa, 2 * moa, format=DEFAULT_FORMAT) f_p = FitParam(_("Frequency"), guess_f, 0, 2 * mof, format=DEFAULT_FORMAT) p_p = FitParam(_("Phase"), guess_ph, -360, 360, format=DEFAULT_FORMAT) c_p = FitParam( _("Continuous component"), guess_c, -2 * moc, 2 * moc, format=DEFAULT_FORMAT ) params = [a_p, f_p, p_p, c_p] def modelfunc(x, a, f, p, c): return a * np.sin(2 * np.pi * f * x + np.deg2rad(p)) + c def fitfunc(x, params): return modelfunc(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Sinusoidal fit"), name=name ) if values: return fitfunc(x, values), params # --- Cumulative distribution function fitting curve ----------------------------------- def cdf_fit(x: np.ndarray, y: np.ndarray, parent=None, name=None): """Compute Cumulative Distribution Function (CDF) fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima CDFFitComputer computer = fitting.CDFFitComputer(x, y) initial_params = computer.compute_initial_params() a_guess = initial_params["amplitude"] mu_guess = initial_params["mu"] sigma_guess = initial_params["sigma"] b_guess = initial_params["baseline"] # Create parameter bounds dy = np.max(y) - np.min(y) abs_values = [abs(a_guess), abs(mu_guess), abs(sigma_guess), abs(b_guess)] iamp, ix0, islope, _ioff = np.maximum(1, abs_values) a = FitParam(_("Amplitude"), a_guess, 0, iamp * 2.0, format=DEFAULT_FORMAT) b = FitParam( _("Base line"), b_guess, np.min(y) - 0.1 * dy, np.max(y), format=DEFAULT_FORMAT ) sigma = FitParam( _("Std-dev") + " (σ)", sigma_guess, islope * 0.1, islope * 2, format=DEFAULT_FORMAT, ) mu = FitParam( _("Mean") + " (μ)", mu_guess, ix0 * 0.2, ix0 * 2, format=DEFAULT_FORMAT ) params = [a, mu, sigma, b] def modelfunc(x, a, mu, sigma, b): return a * erf((x - mu) / (sigma * np.sqrt(2))) + b def fitfunc(x, params): return modelfunc(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("CDF fit"), name=name, ) if values: return fitfunc(x, values), params # --- Planckian fitting curve -------------------------------------------------- def planckian_fit(x: np.ndarray, y: np.ndarray, parent=None, name=None): """Compute Planckian (blackbody radiation) fit Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima PlanckianFitComputer computer = fitting.PlanckianFitComputer(x, y) initial_params = computer.compute_initial_params() amp_guess = initial_params["amp"] x0_guess = initial_params["x0"] sigma_guess = initial_params["sigma"] y0_guess = initial_params["y0"] # Create parameter bounds dy = np.max(y) - np.min(y) # Parameter bounds with appropriate ranges for Planckian fitting amp = FitParam( _("Amplitude"), amp_guess, amp_guess * 0.01, amp_guess * 100, format=DEFAULT_FORMAT, ) x0 = FitParam( _("Peak wavelength"), x0_guess, np.min(x), np.max(x), format=DEFAULT_FORMAT ) sigma = FitParam(_("Width factor"), sigma_guess, 0.1, 5.0, format=DEFAULT_FORMAT) y0 = FitParam( _("Base line"), y0_guess, y0_guess - 0.2 * dy, y0_guess + 0.2 * dy, format=DEFAULT_FORMAT, ) params = [amp, x0, sigma, y0] def fitfunc(x, params: list[float]) -> np.ndarray: """Evaluate Planckian function with given parameters.""" return fitting.PlanckianFitComputer.evaluate(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Planckian fit"), name=name ) if values: return fitfunc(x, values), params # --- Two half-Gaussian fitting curve ------------------------------------------ def twohalfgaussian_fit(x: np.ndarray, y: np.ndarray, parent=None, name=None): """Compute two half-Gaussian fit for asymmetric peaks Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima TwoHalfGaussianFitComputer computer = fitting.TwoHalfGaussianFitComputer(x, y) initial_params = computer.compute_initial_params() amp_left_guess = initial_params["amp_left"] amp_right_guess = initial_params["amp_right"] sigma_left_guess = initial_params["sigma_left"] sigma_right_guess = initial_params["sigma_right"] x0_guess = initial_params["x0"] y0_left_guess = initial_params["y0_left"] y0_right_guess = initial_params["y0_right"] # Create parameter bounds dx = np.max(x) - np.min(x) dy = np.max(y) - np.min(y) # Parameter bounds with better ranges # New model signature: func(x, amp_left, amp_right, sigma_left, # sigma_right, x0, y0_left, y0_right) amp_left = FitParam( _("Left amplitude"), amp_left_guess, dy * 0.1, dy * 3, format=DEFAULT_FORMAT ) amp_right = FitParam( _("Right amplitude"), amp_right_guess, dy * 0.1, dy * 3, format=DEFAULT_FORMAT ) sigma_left = FitParam( _("Left width") + " (σL)", sigma_left_guess, dx * 0.001, # Very small minimum dx * 0.5, # Reasonable maximum format=DEFAULT_FORMAT, ) sigma_right = FitParam( _("Right width") + " (σR)", sigma_right_guess, dx * 0.001, # Very small minimum dx * 0.5, # Reasonable maximum format=DEFAULT_FORMAT, ) x0 = FitParam( _("Center") + " (x₀)", x0_guess, np.min(x), np.max(x), format=DEFAULT_FORMAT ) y0_left = FitParam( _("Left baseline"), y0_left_guess, y0_left_guess - 0.2 * dy, y0_left_guess + 0.2 * dy, format=DEFAULT_FORMAT, ) y0_right = FitParam( _("Right baseline"), y0_right_guess, y0_right_guess - 0.2 * dy, y0_right_guess + 0.2 * dy, format=DEFAULT_FORMAT, ) params = [amp_left, amp_right, sigma_left, sigma_right, x0, y0_left, y0_right] def fitfunc(x, params): return fitting.TwoHalfGaussianFitComputer.evaluate(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Two half-Gaussian fit"), name=name, ) if values: return fitfunc(x, values), params # --- Piecewise exponential (raise-decay) fitting curve ------------------------ def piecewiseexponential_fit(x: np.ndarray, y: np.ndarray, parent=None, name=None): """Compute piecewise exponential fit (raise-decay) Returns (yfit, params), where yfit is the fitted curve and params are the fitting parameters""" # Get initial parameter estimates from Sigima DoubleExponentialFitComputer computer = fitting.DoubleExponentialFitComputer(x, y) initial_params = computer.compute_initial_params() x_center_guess = initial_params["x_center"] a_left_guess = initial_params["a_left"] b_left_guess = initial_params["b_left"] a_right_guess = initial_params["a_right"] b_right_guess = initial_params["b_right"] y0_guess = initial_params["y0"] # Create parameter bounds x_min, x_max = float(x.min()), float(x.max()) y_min, y_max = float(y.min()), float(y.max()) y_range = y_max - y_min x_range = x_max - x_min # Parameter bounds with more realistic ranges # New model signature: func(x, x_center, a_left, b_left, a_right, b_right, y0) x_center = FitParam( _("Center position"), x_center_guess, x_min, x_max, format=DEFAULT_FORMAT ) a_left = FitParam( _("Left amplitude"), a_left_guess, 0.0, a_left_guess * 10.0, format=DEFAULT_FORMAT, ) b_left = FitParam( _("Left time constant") + " (bL)", b_left_guess, # Already in coefficient form 0.001 / x_range, # Slow decay 100.0 / x_range, # Fast decay format=DEFAULT_FORMAT, ) a_right = FitParam( _("Right amplitude"), a_right_guess, 0.0, a_right_guess * 10.0, format=DEFAULT_FORMAT, ) b_right = FitParam( _("Right time constant") + " (bR)", b_right_guess, # Already in coefficient form -100.0 / x_range, # Fast decay -0.001 / x_range, # Slow decay format=DEFAULT_FORMAT, ) y0 = FitParam( _("Base line"), y0_guess, y0_guess - 0.2 * y_range, y0_guess + 0.2 * y_range, format=DEFAULT_FORMAT, ) params = [x_center, a_left, b_left, a_right, b_right, y0] def fitfunc(x, params): return fitting.DoubleExponentialFitComputer.evaluate(x, *params) values = guifit( x, y, fitfunc, params, parent=parent, wintitle=_("Piecewise exponential (raise-decay) fit"), name=name, ) if values: return fitfunc(x, values), params DataLab-1.0.2/datalab/widgets/h5browser.py000066400000000000000000001024771511411446000203420ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab HDF5 browser module """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import abc import os import os.path as osp from typing import TYPE_CHECKING, Any, Callable from guidata.qthelpers import ( add_actions, create_action, create_toolbutton, exec_dialog, get_icon, get_std_icon, win32_fix_title_bar_background, ) from guidata.utils.misc import to_string from guidata.widgets.arrayeditor import ArrayEditor from plotpy.builder import make from plotpy.plot import PlotOptions, PlotWidget from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from qtpy.compat import getopenfilename from sigima import ImageObj, SignalObj from datalab.adapters_plotpy import CURVESTYLES, create_adapter_from_object from datalab.config import Conf, _ from datalab.h5 import H5Importer from datalab.utils.qthelpers import block_signals, qt_handle_error_message if TYPE_CHECKING: from plotpy.plot import BasePlot from datalab.h5.common import BaseNode class AbstractTreeWidgetMeta(type(QW.QTreeWidget), abc.ABCMeta): """Mixed metaclass to avoid conflicts""" class AbstractTreeWidget(QW.QTreeWidget, metaclass=AbstractTreeWidgetMeta): """One-column tree widget with context menu, ...""" def __init__(self, parent: QW.QWidget) -> None: super().__init__(parent) self.setItemsExpandable(True) self.itemActivated.connect(self.activated) self.itemClicked.connect(self.clicked) # Setup context menu self.menu = QW.QMenu(self) self.collapse_all_action = None self.collapse_selection_action = None self.expand_all_action = None self.expand_selection_action = None self.common_actions = self.setup_common_actions() self.itemSelectionChanged.connect(self.item_selection_changed) self.item_selection_changed() @abc.abstractmethod def activated(self, item: QW.QTreeWidgetItem) -> None: """Double-click event""" @abc.abstractmethod def clicked(self, item: QW.QTreeWidgetItem) -> None: """Item was clicked""" @abc.abstractmethod def get_actions_from_items( self, items: list[QW.QTreeWidgetItem] ) -> list[QW.QAction]: """Get actions from item""" # Right here: add other actions if necessary (reimplement this method) return [] def setup_common_actions(self) -> list[QW.QAction]: """Setup context menu common actions""" self.collapse_all_action = create_action( self, _("Collapse all"), icon=get_icon("collapse.svg"), triggered=self.collapseAll, ) self.expand_all_action = create_action( self, _("Expand all"), icon=get_icon("expand.svg"), triggered=self.expandAll ) self.restore_action = create_action( self, _("Restore"), tip=_("Restore original tree layout"), icon=get_icon("restore.svg"), triggered=self.restore, ) self.collapse_selection_action = create_action( self, _("Collapse selection"), icon=get_icon("collapse_selection.svg"), triggered=self.collapse_selection, ) self.expand_selection_action = create_action( self, _("Expand selection"), icon=get_icon("expand_selection.svg"), triggered=self.expand_selection, ) return [ self.collapse_all_action, self.expand_all_action, self.restore_action, None, self.collapse_selection_action, self.expand_selection_action, ] def update_menu(self) -> None: """Update context menu""" self.menu.clear() items = self.selectedItems() actions = self.get_actions_from_items(items) if actions: actions.append(None) actions += self.common_actions add_actions(self.menu, actions) def restore(self) -> None: """Restore tree state""" self.collapseAll() for item in self.get_top_level_items(): self.expandItem(item) def __expand_item(self, item: QW.QTreeWidgetItem) -> None: # pragma: no cover """Expand item tree branch""" self.expandItem(item) for index in range(item.childCount()): child = item.child(index) self.__expand_item(child) def expand_selection(self) -> None: # pragma: no cover """Expand selection""" items = self.selectedItems() if not items: items = self.get_top_level_items() for item in items: self.__expand_item(item) if items: self.scrollToItem(items[0]) def __collapse_item(self, item: QW.QTreeWidgetItem) -> None: # pragma: no cover """Collapse item tree branch""" self.collapseItem(item) for index in range(item.childCount()): child = item.child(index) self.__collapse_item(child) def collapse_selection(self) -> None: # pragma: no cover """Collapse selection""" items = self.selectedItems() if not items: items = self.get_top_level_items() for item in items: self.__collapse_item(item) if items: self.scrollToItem(items[0]) def item_selection_changed(self) -> None: """Item selection has changed""" is_selection = len(self.selectedItems()) > 0 self.expand_selection_action.setEnabled(is_selection) self.collapse_selection_action.setEnabled(is_selection) def get_top_level_items(self) -> list[QW.QTreeWidgetItem]: """Iterate over top level items""" return [self.topLevelItem(_i) for _i in range(self.topLevelItemCount())] def find_all_items(self): """Find all items""" return self.findItems("", QC.Qt.MatchContains | QC.Qt.MatchRecursive) def contextMenuEvent(self, event: QG.QContextMenuEvent) -> None: """Override Qt method""" self.update_menu() self.menu.popup(event.globalPos()) class H5TreeWidget(AbstractTreeWidget): """HDF5 Browser Tree Widget Args: parent: Parent widget """ SIG_SELECTED = QC.Signal(QW.QTreeWidgetItem) def __init__(self, parent: QW.QWidget) -> None: super().__init__(parent) title = _("HDF5 Browser") self.setColumnCount(4) self.setWindowTitle(title) self.setHeaderLabels([_("Name"), _("Size"), _("Type"), _("Value")]) self.header().setSectionResizeMode(0, QW.QHeaderView.Stretch) self.header().setStretchLastSection(False) self.fnames: list[str] = [] self.h5importers: list[H5Importer] = [] def add_root(self, fname: str) -> None: """Add HDF5 root (new file) Args: fname: HDF5 file name """ self.fnames.append(osp.abspath(fname)) importer = H5Importer(fname) self.h5importers.append(importer) self.add_root_to_tree(importer) # Temporarily expand all items to calculate proper column widths rootitem = self.topLevelItem(self.topLevelItemCount() - 1) self.expand_all_children(rootitem) for col in range(4): self.resizeColumnToContents(col) # Restore to default state (only root and its immediate children expanded) for index in range(rootitem.childCount()): child = rootitem.child(index) self.collapseItem(child) def remove_root(self, fname: str) -> None: """Remove HDF5 root Args: fname: HDF5 file name """ index = self.fnames.index(osp.abspath(fname)) self.fnames.pop(index) importer = self.h5importers.pop(index) importer.close() # Remove root item associated with file item = self.topLevelItem(index) self.takeTopLevelItem(index) del item def cleanup(self) -> None: """Clean up widget""" for importer in self.h5importers: importer.close() self.fnames: list[str] = [] self.h5importers: list[H5Importer] = [] self.clear() def __get_top_level_item(self, item: QW.QTreeWidgetItem) -> QW.QTreeWidgetItem: """Get top level item associated to item Args: item: Tree item Returns: Top level item """ while item.parent(): item = item.parent() return item def get_node(self, item: QW.QTreeWidgetItem) -> BaseNode: """Get HDF5 dataset associated to item Args: item: Tree item Returns: HDF5 node """ toplevel_item = self.__get_top_level_item(item) toplevel_index = self.indexOfTopLevelItem(toplevel_item) node_id = item.data(0, QC.Qt.UserRole) if node_id: importer = self.h5importers[toplevel_index] return importer.get(node_id) return None def get_nodes(self, only_checked_items: bool = True) -> list[BaseNode]: """Get all nodes associated to checked items Args: only_checked_items: If True, only checked items are returned Returns: List of HDF5 nodes """ datasets = [] for item in self.find_all_items(): if item.flags() & QC.Qt.ItemIsUserCheckable: if only_checked_items and item.checkState(0) == 0: continue if item is not self.topLevelItem(0): node = self.get_node(item) datasets.append(node) return datasets def activated(self, item: QW.QTreeWidgetItem) -> None: """Double-click event""" if item is not self.topLevelItem(0): self.SIG_SELECTED.emit(item) def clicked(self, item: QW.QTreeWidgetItem) -> None: """Click event""" self.activated(item) def get_actions_from_items(self, items): # pylint: disable=W0613 """Get actions from item""" return [] def is_empty(self) -> bool: """Return True if tree is empty""" return len(self.find_all_items()) == 1 def is_any_item_checked(self) -> bool: """Return True if any item is checked""" for item in self.find_all_items(): if item.checkState(0) > 0: return True return False def select_all(self, state: bool) -> None: """Select all items Args: state: If True, all items are selected """ for item in self.find_all_items(): if item.flags() & QC.Qt.ItemIsUserCheckable: item.setSelected(state) if state: self.clicked(item) def toggle_all(self, state: bool) -> None: """Toggle all item state from 'unchecked' to 'checked' (or vice-versa) Args: state: If True, all items are checked """ for item in self.find_all_items(): if item.flags() & QC.Qt.ItemIsUserCheckable: item.setCheckState(0, QC.Qt.Checked if state else QC.Qt.Unchecked) @staticmethod def __create_node(node: BaseNode) -> QW.QTreeWidgetItem: """Create tree node from HDF5 node Args: node: HDF5 node Returns: Tree widget node """ text = to_string(node.text) if len(text) > 30: text = text[:30] + "..." treeitem = QW.QTreeWidgetItem([node.name, node.shape_str, node.dtype_str, text]) treeitem.setData(0, QC.Qt.UserRole, node.id) if node.description: for col in range(treeitem.columnCount()): treeitem.setToolTip(col, node.description) return treeitem @staticmethod def __recursive_popfunc(parent_item: QW.QTreeWidgetItem, node: BaseNode) -> None: """Recursive HDF5 analysis Args: parent_item: Parent tree item node: HDF5 node """ tree_item = H5TreeWidget.__create_node(node) if node.is_supported(): tree_item.setCheckState(0, QC.Qt.Unchecked) else: tree_item.setFlags(QC.Qt.ItemIsEnabled) tree_item.setIcon(0, get_icon(node.icon_name)) parent_item.addChild(tree_item) for child in node.children: H5TreeWidget.__recursive_popfunc(tree_item, child) def expand_all_children(self, item: QW.QTreeWidgetItem) -> None: """Expand all children (recursively) Args: item: Tree item """ self.expandItem(item) for index in range(item.childCount()): child = item.child(index) self.expand_all_children(child) def add_root_to_tree(self, importer: H5Importer) -> None: """Add root to tree Args: importer: HDF5 importer """ root = importer.root rootitem = QW.QTreeWidgetItem([root.name]) rootitem.setToolTip(0, root.description) rootitem.setData(0, QC.Qt.UserRole, root.id) rootitem.setFlags(QC.Qt.ItemIsEnabled) rootitem.setIcon(0, get_icon(root.icon_name)) self.addTopLevelItem(rootitem) for node in root.children: self.__recursive_popfunc(rootitem, node) self.expandItem(rootitem) def toggle_show_only_checkable_items(self, state: bool) -> None: """Show only checkable items Args: state: If True, only checkable items are shown """ for item in self.find_all_items(): item.setHidden(state) if state: # Iterate over checkable items and show them (and their parents) for item in self.find_all_items(): if item.flags() & QC.Qt.ItemIsUserCheckable: item.setHidden(False) parent = item.parent() while parent: parent.setHidden(False) parent = parent.parent() def toggle_show_values(self, state: bool) -> None: """Show values Args: state: If True, values are shown """ # Hide or show the "Value" column self.setColumnHidden(3, not state) def set_current_file(self, fname: str) -> None: """Set current file Args: fname: HDF5 file name """ index = self.fnames.index(osp.abspath(fname)) item = self.topLevelItem(index) self.setCurrentItem(item) self.scrollToItem(item, QW.QAbstractItemView.PositionAtTop) class PlotPreview(QW.QStackedWidget): """Plot preview""" def __init__(self, parent: QW.QWidget) -> None: super().__init__(parent) self.curvewidget = PlotWidget( self, options=PlotOptions( type="curve", curve_antialiasing=True, show_axes_tab=False, autoscale_margin_percent=Conf.view.sig_autoscale_margin_percent.get( 0.2 ), ), ) self.addWidget(self.curvewidget) self.imagewidget = PlotWidget( self, options=PlotOptions( type="image", show_contrast=True, show_axes_tab=False, autoscale_margin_percent=Conf.view.ima_autoscale_margin_percent.get( 0.2 ), ), ) self.addWidget(self.imagewidget) def cleanup(self) -> None: """Clean up widget""" for widget in (self.imagewidget, self.curvewidget): widget.get_plot().del_all_items() def update_plot_preview(self, node: BaseNode) -> None: """Update plot preview widget""" try: obj = node.get_native_object() except Exception as msg: # pylint: disable=broad-except qt_handle_error_message(self, msg) return if obj is None: # An error occurred while creating the object (invalid data, ...) label = make.label(_("Unsupported data"), "C", (0, 0), "C") plot: BasePlot = self.currentWidget().get_plot() plot.del_all_items() plot.add_item(label) plot.replot() return if isinstance(obj, SignalObj): obj: SignalObj widget = self.curvewidget else: obj: ImageObj widget = self.imagewidget with CURVESTYLES.suspend(): item = create_adapter_from_object(obj).make_item() plot = widget.get_plot() plot.del_all_items() plot.add_item(item) plot.set_active_item(item) item.unselect() plot.do_autoscale() self.setCurrentWidget(widget) class TablePreview(QW.QWidget): """Table preview Args: title: Group title parent: Parent widget """ def __init__(self, parent: QW.QWidget) -> None: super().__init__(parent) self.setLayout(QW.QVBoxLayout()) self.table = QW.QTableWidget(self) self.table.setEditTriggers(QW.QAbstractItemView.NoEditTriggers) self.table.horizontalHeader().setStretchLastSection(True) self.layout().addWidget(self.table) def clear(self) -> None: """Clear table""" self.table.clear() def update_table_preview(self, data: dict[str, Any]) -> None: """Update table preview widget Args: node: HDF5 node """ self.clear() self.table.setRowCount(len(data)) self.table.setColumnCount(1) self.table.setHorizontalHeaderLabels([_("Value")]) self.table.setVerticalHeaderLabels(list(data.keys())) for row, value in enumerate(data.values()): self.table.setItem(row, 0, QW.QTableWidgetItem(str(value))) self.table.resizeRowsToContents() class GroupAndAttributes(QW.QTabWidget): """Group and attributes Args: parent: Parent widget show_array_callback: Callback to show array """ def __init__(self, parent: QW.QWidget, show_array_callback: Callable) -> None: super().__init__(parent) self.group = TablePreview(self) self.addTab(self.group, get_icon("h5group.svg"), _("Group")) self.attrs = TablePreview(self) self.addTab(self.attrs, get_icon("h5attrs.svg"), _("Attributes")) # Add a button as corner widget to show the array (if any): self.__show_array_btn = create_toolbutton( self, icon=get_icon("show_results.svg"), text=_("Show array"), autoraise=False, triggered=show_array_callback, ) self.__show_array_btn.setEnabled(False) self.setCornerWidget(self.__show_array_btn, QC.Qt.TopRightCorner) def cleanup(self) -> None: """Clean up widget""" self.group.clear() self.attrs.clear() def update_from_node(self, node: BaseNode) -> None: """Update widget from node Args: node: HDF5 node """ # Update group ================================================================= text = to_string(node.text) if text: lines = text.splitlines()[:5] if len(lines) == 5: lines += ["[...]"] text = os.linesep.join(lines) data = { _("Path"): node.id, _("Name"): node.name, _("Description"): node.description, _("Textual preview"): text, # "Raw": repr(node.data), } self.group.update_table_preview(data) # Update attributes ============================================================ self.attrs.update_table_preview(node.metadata) # Update show array button ===================================================== self.__show_array_btn.setEnabled(node.IS_ARRAY) class H5FileSelector(QW.QWidget): """HDF5 file selector Args: parent: Parent widget """ SIG_ADD_FILENAME = QC.Signal(str) SIG_REMOVE_FILENAME = QC.Signal(str) SIG_CURRENT_CHANGED = QC.Signal(str) def __init__(self, parent: QW.QWidget) -> None: super().__init__(parent) self.setLayout(QW.QHBoxLayout()) self.layout().setContentsMargins(0, 0, 0, 0) self.combo = QW.QComboBox(self) self.combo.currentTextChanged.connect(self.current_file_changed) self.layout().addWidget(self.combo) self.btn_add = create_toolbutton( self, icon=get_std_icon("DirOpenIcon"), text=_("Open") + " ...", autoraise=False, triggered=lambda _checked=False: self.add_file(), ) self.btn_add.setSizePolicy(QW.QSizePolicy.Fixed, QW.QSizePolicy.Fixed) self.layout().addWidget(self.btn_add) self.btn_rmv = create_toolbutton( self, icon=get_std_icon("DialogCloseButton"), text=_("Close"), autoraise=False, triggered=self.remove_file, ) self.btn_rmv.setSizePolicy(QW.QSizePolicy.Fixed, QW.QSizePolicy.Fixed) self.layout().addWidget(self.btn_rmv) self.btn_rmv.setEnabled(False) def set_current_fname(self, fname: str) -> None: """Set current file name Args: fname: HDF5 file name """ index = self.combo.findText(fname) if index >= 0: self.combo.setCurrentIndex(index) def get_current_fname(self) -> str: """Return current file name Returns: HDF5 file name """ return self.combo.currentText() def current_file_changed(self, fname: str) -> None: """Current file changed Args: fname: HDF5 file name """ self.SIG_CURRENT_CHANGED.emit(fname) def add_fname(self, fname: str) -> None: """Add file name Args: fname: HDF5 file name """ self.combo.addItem(get_icon("h5file.svg"), fname) self.btn_rmv.setEnabled(True) def remove_fname(self, fname: str) -> None: """Remove file name Args: fname: HDF5 file name """ index = self.combo.findText(fname) if index >= 0: self.combo.removeItem(index) if self.combo.count() == 0: self.btn_rmv.setEnabled(False) def add_file(self, fname: str | None = None) -> None: """Browse file Args: fname: HDF5 file name. Default is None. (this is used for testing only) """ if fname is None: fname = getopenfilename( self, _("Select HDF5 file"), "", _("HDF5 files (*.h5 *.hdf5 *.hdf *.he5);;All files (*)"), )[0] if fname: self.SIG_ADD_FILENAME.emit(osp.abspath(fname)) def remove_file(self, fname: str | None = None) -> None: """Remove file name Args: fname: HDF5 file name """ if fname is None: fname = self.combo.currentText() self.SIG_REMOVE_FILENAME.emit(fname) class H5Browser(QW.QSplitter): """HDF5 Browser Widget Args: parent: Parent widget """ SIG_SELECT_NEW_FILE = QC.Signal(str) SIG_REMOVE_FILE = QC.Signal(str) def __init__(self, parent: QW.QWidget | None = None) -> None: super().__init__(parent) self.selector = H5FileSelector(self) self.selector.SIG_ADD_FILENAME.connect(self.__add_new_file) self.selector.SIG_REMOVE_FILENAME.connect(self.__remove_file) self.selector.SIG_CURRENT_CHANGED.connect(self.__selector_current_file_changed) self.tree = H5TreeWidget(self) self.tree.SIG_SELECTED.connect(self.__item_selected_on_tree) selectorandtree = QW.QFrame(self) selectorandtree.setLayout(QW.QVBoxLayout()) selectorandtree.layout().addWidget(self.selector) # Add toolbar with tree actions toolbar = self.__create_toolbar() selectorandtree.layout().addWidget(toolbar) selectorandtree.layout().addWidget(self.tree) selectorandtree.layout().setContentsMargins(0, 0, 0, 0) self.addWidget(selectorandtree) preview = QW.QSplitter(self) preview.setOrientation(QC.Qt.Vertical) self.addWidget(preview) self.plotpreview = PlotPreview(self) preview.addWidget(self.plotpreview) self.groupandattrs = GroupAndAttributes(self, self.show_array) preview.addWidget(self.groupandattrs) preview.setSizes([int(self.size().height() / 2)] * 2) def __create_toolbar(self) -> QW.QToolBar: """Create toolbar with tree actions Returns: Toolbar widget """ toolbar = QW.QToolBar(self) toolbar.setToolButtonStyle(QC.Qt.ToolButtonTextBesideIcon) toolbar.setIconSize(QC.QSize(16, 16)) toolbar.setStyleSheet("QToolBar { padding: 2px; spacing: 2px; }") toolbar.addAction(self.tree.expand_all_action) toolbar.addAction(self.tree.collapse_all_action) toolbar.addAction(self.tree.restore_action) toolbar.addSeparator() toolbar.addAction(self.tree.expand_selection_action) toolbar.addAction(self.tree.collapse_selection_action) return toolbar def open_file(self, fname: str) -> None: """Open HDF5 file Args: fname: HDF5 file name """ self.tree.add_root(fname) self.selector.add_fname(fname) def close_file(self, fname: str) -> None: """Close HDF5 file Args: fname: HDF5 file name """ self.tree.remove_root(fname) self.selector.remove_fname(fname) def __add_new_file(self, fname: str) -> None: """Add new file Args: fname: HDF5 file name """ self.open_file(fname) self.selector.set_current_fname(fname) self.SIG_SELECT_NEW_FILE.emit(fname) def __remove_file(self, fname: str) -> None: """Remove file Args: fname: HDF5 file name """ self.close_file(fname) self.SIG_REMOVE_FILE.emit(fname) def cleanup(self) -> None: """Clean up widget""" self.tree.cleanup() self.plotpreview.cleanup() def get_node(self, item: QW.QTreeWidgetItem | None = None) -> BaseNode: """Return (selected) dataset Args: item: Tree item Returns: HDF5 node """ if item is None: item = self.tree.currentItem() return self.tree.get_node(item) def __item_selected_on_tree(self, item: QW.QTreeWidgetItem) -> None: """Item selected on tree Args: item: Tree item """ # View the selected item node = self.get_node(item) if node.is_supported(): self.plotpreview.update_plot_preview(node) self.groupandattrs.update_from_node(node) # Update the file selector combo box with block_signals(self.selector.combo): # Avoid triggering current file changed signal, which would result in # loosing the current selection on the tree (side effect: "Show array" # button would still be enabled if the previous node was an array, except # that now the current node is not an array, thus causing an error if # the user clicks on the button). self.selector.set_current_fname(node.h5file.filename) def __selector_current_file_changed(self, fname: str) -> None: """Selector current file changed Args: fname: HDF5 file name """ if fname: self.tree.set_current_file(fname) def show_array(self) -> None: """Show array""" node = self.get_node() assert node.IS_ARRAY arrayeditor = ArrayEditor(self) arrayeditor.setup_and_check( node.data, title=node.name, readonly=True, add_title_suffix=False ) exec_dialog(arrayeditor) class H5BrowserDialog(QW.QDialog): """HDF5 Browser Dialog Args: parent: Parent widget size: Dialog size """ def __init__( self, parent: QW.QWidget | None = None, size: tuple[int, int] = (1150, 700) ) -> None: super().__init__(parent) self.setWindowFlags(QC.Qt.Window) self.setObjectName("h5browser") self.setWindowTitle(_("HDF5 Browser")) self.setWindowIcon(get_icon("h5browser.svg")) win32_fix_title_bar_background(self) vlayout = QW.QVBoxLayout() self.setLayout(vlayout) self.button_layout: QW.QHBoxLayout | None = None self.bbox: QW.QDialogButtonBox | None = None self.nodes: list[BaseNode] = [] self.checkbox_show_only: QW.QCheckBox | None = None self.checkbox_show_values: QW.QCheckBox | None = None self.browser = H5Browser(self) self.browser.SIG_SELECT_NEW_FILE.connect(self.select_new_file) self.browser.SIG_REMOVE_FILE.connect(self.remove_file) vlayout.addWidget(self.browser) self.browser.tree.itemChanged.connect(lambda item: self.refresh_buttons()) self.install_button_layout() self.setMinimumSize(QC.QSize(900, 500)) self.resize(QC.QSize(*size)) self.browser.setSizes([int(self.size().height() / 2)] * 2) self.refresh_buttons() def accept(self) -> None: """Accept changes""" self.nodes = self.browser.tree.get_nodes() QW.QDialog.accept(self) def is_empty(self) -> bool: """Return True if tree is empty""" return self.browser.tree.is_empty() def cleanup(self) -> None: """Cleanup dialog""" self.browser.cleanup() def refresh_buttons(self) -> None: """Refresh buttons""" state = self.browser.tree.is_any_item_checked() self.bbox.button(QW.QDialogButtonBox.Ok).setEnabled(state) def show_only_checkable_items(self, state: int) -> None: """Show only checkable items Args: state: If True, only checkable items are shown """ self.browser.tree.toggle_show_only_checkable_items(state) fname = self.browser.selector.get_current_fname() if fname: self.browser.tree.set_current_file(fname) def __finalize_setup(self) -> None: """Finalize setup""" tree = self.browser.tree tree.toggle_show_only_checkable_items(self.checkbox_show_only.isChecked()) tree.toggle_show_values(self.checkbox_show_values.isChecked()) def open_file(self, fname: str) -> None: """Open file Args: fname: HDF5 file name """ self.browser.open_file(fname) self.__finalize_setup() def open_files(self, fnames: list[str]) -> None: """Open files Args: fnames: HDF5 file names """ for fname in fnames: self.browser.open_file(fname) self.__finalize_setup() def select_new_file(self, fname: str) -> None: # pylint:disable=unused-argument """Select new file Args: fname: HDF5 file name """ self.__finalize_setup() self.refresh_buttons() def remove_file(self, fname: str) -> None: # pylint:disable=unused-argument """Remove file Args: fname: HDF5 file name """ self.refresh_buttons() def get_all_nodes(self) -> list[BaseNode]: """Return all supported datasets Returns: List of HDF5 nodes """ return self.browser.tree.get_nodes(only_checked_items=False) def get_nodes(self) -> list[BaseNode]: """Return datasets Returns: List of HDF5 nodes """ return self.nodes def install_button_layout(self) -> None: """Install button layout""" bbox = QW.QDialogButtonBox(QW.QDialogButtonBox.Ok | QW.QDialogButtonBox.Cancel) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) btn_check_all = create_toolbutton( self, icon=get_icon("check_all.svg"), text=_("Check all"), autoraise=False, shortcut=QG.QKeySequence.SelectAll, triggered=lambda checked=True: self.browser.tree.toggle_all(checked), ) btn_uncheck_all = create_toolbutton( self, icon=get_icon("uncheck_all.svg"), text=_("Uncheck all"), autoraise=False, triggered=lambda checked=False: self.browser.tree.toggle_all(checked), ) self.checkbox_show_only = QW.QCheckBox(_("Show only supported data")) self.checkbox_show_only.stateChanged.connect(self.show_only_checkable_items) self.checkbox_show_values = QW.QCheckBox(_("Show values")) self.checkbox_show_values.stateChanged.connect( self.browser.tree.toggle_show_values ) self.button_layout = QW.QHBoxLayout() self.button_layout.addWidget(self.checkbox_show_only) self.button_layout.addWidget(self.checkbox_show_values) self.button_layout.addSpacing(10) self.button_layout.addWidget(btn_check_all) self.button_layout.addWidget(btn_uncheck_all) self.button_layout.addStretch() self.button_layout.addWidget(bbox) self.bbox = bbox vlayout: QW.QVBoxLayout = self.layout() vlayout.addSpacing(10) vlayout.addLayout(self.button_layout) DataLab-1.0.2/datalab/widgets/imagebackground.py000066400000000000000000000075201511411446000215350ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Image background selection dialog.""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING import numpy as np from guidata.configtools import get_icon from plotpy.builder import make from plotpy.plot import PlotDialog from datalab.adapters_plotpy import create_adapter_from_object from datalab.config import _ from datalab.utils.qthelpers import resize_widget_to_parent if TYPE_CHECKING: from plotpy.items import MaskedXYImageItem, RangeComputation2d, RectangleShape from qtpy.QtWidgets import QWidget from sigima.objects import ImageObj class ImageBackgroundDialog(PlotDialog): """Image background selection dialog. Args: image: image object parent: parent widget. Defaults to None. """ def __init__(self, image: ImageObj, parent: QWidget | None = None) -> None: self.__background: float | None = None self.__rect_coords: tuple[float, float, float, float] | None = None self.imageitem: MaskedXYImageItem | None = None self.rectarea: RectangleShape | None = None self.comput2d: RangeComputation2d | None = None super().__init__( title=_("Image background selection"), edit=True, parent=parent ) self.setObjectName("backgroundselection") if parent is None: self.setWindowIcon(get_icon("DataLab.svg")) else: resize_widget_to_parent(self, aspect_ratio=1.0) self.__image = image.copy() self.__setup_dialog() def test_compute_background(self) -> None: """Method to test background computation.""" # Instead of waiting for Qt events, directly test the computation method # by simulating what RangeComputation2d would do x0, y0, x1, y1 = self.rectarea.get_rect() x, y, z = self.imageitem.get_data(x0, y0, x1, y1) self.__compute_background(x, y, z) def __compute_background( self, x: np.ndarray, # pylint: disable=unused-argument y: np.ndarray, # pylint: disable=unused-argument z: np.ndarray, ) -> float: """Compute background value""" self.__rect_coords = self.rectarea.get_rect() self.__background = z.mean() return self.__background def __setup_dialog(self) -> None: """Setup dialog box""" obj = self.__image self.imageitem = create_adapter_from_object(obj).make_item() plot = self.get_plot() if obj.is_uniform_coords: x0, y0 = obj.x0, obj.y0 x1, y1 = obj.xc + obj.dx, obj.yc + obj.dy else: x0, y0 = obj.xcoords[0], obj.ycoords[0] xc = (obj.xcoords[0] + obj.xcoords[-1]) / 2 yc = (obj.ycoords[0] + obj.ycoords[-1]) / 2 x1, y1 = xc, yc self.rectarea = make.rectangle(x0, y0, x1, y1, _("Background area")) self.comput2d = make.computation2d( self.rectarea, "TL", _("Background value:") + " %g", self.imageitem, self.__compute_background, ) for item in (self.imageitem, self.rectarea, self.comput2d): plot.add_item(item) plot.replot() plot.set_active_item(self.rectarea) def get_background(self) -> float: """Get background value""" return self.__background def get_rect_coords(self) -> tuple[float, float, float, float]: """Get rectangle coordinates Returns: tuple: rectangle coordinates (x0, y0, x1, y1) Raises: ValueError: if rectangle coordinates are not set """ if self.__rect_coords is None: raise ValueError("Rectangle coordinates not set") return self.__rect_coords DataLab-1.0.2/datalab/widgets/instconfviewer.py000066400000000000000000000135361511411446000214640ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Module providing DataLab Installation configuration widget """ from __future__ import annotations import json import locale import os import platform import sys from importlib.metadata import distributions from pathlib import Path from guidata.configtools import get_icon from guidata.qthelpers import exec_dialog from qtpy import QtWidgets as QW from sigima.io.image import ImageIORegistry from sigima.io.signal import SignalIORegistry import datalab from datalab.config import APP_NAME, IS_FROZEN, Conf, _ from datalab.plugins import PluginRegistry from datalab.widgets.fileviewer import FileViewerWidget, get_title_contents def decode_fs_string(string: bytes) -> str: """Convert string from file system charset to unicode""" charset = sys.getfilesystemencoding() if charset is None: charset = locale.getpreferredencoding() return string.decode(charset) def get_installed_package_info() -> str: """Get the list of installed packages with their versions""" packages = [(dist.metadata["Name"], dist.version) for dist in distributions()] # Sort alphabetically by package name packages.sort(key=lambda x: x[0].lower()) # Determine column widths name_width = max(len(name) for name, _ in packages) version_width = max(len(version) for _, version in packages) header = f"{'Package':{name_width}} {'Version':{version_width}}" separator = f"{'-' * name_width} {'-' * version_width}" result_lines = [header, separator] for name, version in packages: result_lines.append(f"{name:{name_width}} {version:{version_width}}") return os.linesep.join(result_lines) def get_manifest_package_info(manifest_path: Path) -> str: """Get the list of packages from the build manifest file Args: manifest_path: Path to the manifest.json file Returns: Formatted string with package list and build information """ try: with open(manifest_path, "r", encoding="utf-8") as f: manifest = json.load(f) packages = list(manifest["packages"].items()) packages.sort(key=lambda x: x[0].lower()) # Determine column widths name_width = max(len(name) for name, _ in packages) version_width = max(len(version) for _, version in packages) header = f"{'Package':{name_width}} {'Version':{version_width}}" separator = f"{'-' * name_width} {'-' * version_width}" result_lines = [ f"Build time: {manifest['build_time']}", f"Python version: {manifest['python_version']}", f"Build system: {manifest['system']} {manifest['release']}", f"Architecture: {manifest['architecture']}", "", header, separator, ] for name, version in packages: result_lines.append(f"{name:{name_width}} {version:{version_width}}") return os.linesep.join(result_lines) except Exception as e: return f"Error reading manifest file: {e}" def get_install_info() -> str: """Get DataLab installation informations Returns: str: installation informations """ if IS_FROZEN: # Stand-alone version more_info = "This is the Stand-alone version of DataLab." more_info += os.linesep * 2 # Try to read manifest file from executable root directory manifest_path = Path(sys.executable).parent / "manifest.json" if manifest_path.exists(): more_info += get_manifest_package_info(manifest_path) else: more_info += "Manifest file not found." else: more_info = get_installed_package_info() info = os.linesep.join( [ f"DataLab v{datalab.__version__}", "", f"Machine type: {platform.machine()}", f"Platform: {platform.platform()}", f"Python v{sys.version}", "", more_info, ] ) return info class InstallConfigViewerWindow(QW.QDialog): """Installation configuration window""" def __init__(self, parent: QW.QWidget | None = None) -> None: super().__init__(parent) self.setObjectName("instviewer") self.setWindowTitle(APP_NAME + " - " + _("Installation and configuration")) self.setWindowIcon(get_icon("DataLab.svg")) self.tabs = QW.QTabWidget(self) uc_title, uc_contents = get_title_contents(Conf.get_filename()) plugins_io_contents = PluginRegistry.get_plugin_info(html=False) for registry in (SignalIORegistry, ImageIORegistry): plugins_io_contents += os.linesep + ("_" * 80) + os.linesep * 2 plugins_io_contents += registry.get_format_info(mode="text") for title, contents, tab_icon, tab_title in ( ( _("Installation configuration"), get_install_info(), get_icon("libre-toolbox.svg"), _("Installation configuration"), ), ( uc_title, uc_contents, get_icon("libre-gui-settings.svg"), _("User configuration"), ), ( _("Plugins and I/O features"), plugins_io_contents, get_icon("libre-gui-plugin.svg"), _("Plugins and I/O features"), ), ): viewer = FileViewerWidget() viewer.set_data(title, contents) self.tabs.addTab(viewer, tab_icon, tab_title) layout = QW.QVBoxLayout() layout.addWidget(self.tabs) self.setLayout(layout) self.resize(800, 500) def exec_datalab_installconfig_dialog(parent: QW.QWidget | None = None) -> None: """View DataLab installation configuration""" dlg = InstallConfigViewerWindow(parent=parent) exec_dialog(dlg) DataLab-1.0.2/datalab/widgets/logviewer.py000066400000000000000000000054141511411446000204160ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Module providing a log viewer widget, a log viewer window and DataLab's log viewer """ from __future__ import annotations import os.path as osp from guidata.configtools import get_icon from guidata.qthelpers import exec_dialog from qtpy import QtWidgets as QW from datalab.config import APP_NAME, Conf, _, get_old_log_fname from datalab.env import execenv from datalab.widgets.fileviewer import FileViewerWidget, get_title_contents class LogViewerWindow(QW.QDialog): """Log viewer window""" def __init__(self, fnames: list[str], parent: QW.QWidget | None = None) -> None: super().__init__(parent) self.setObjectName("logviewer") self.setWindowTitle(APP_NAME + " - " + _("Log files")) self.setWindowIcon(get_icon("DataLab.svg")) self.tabs = QW.QTabWidget(self) for fname in fnames: if osp.isfile(fname): title, contents = get_title_contents(fname) if not contents.strip(): continue viewer = FileViewerWidget(language="Python") viewer.set_data(title, contents) self.tabs.addTab(viewer, get_icon("logs.svg"), osp.basename(fname)) layout = QW.QVBoxLayout() layout.addWidget(self.tabs) self.setLayout(layout) self.resize(900, 400) @property def is_empty(self) -> bool: """Return True if there is no log available""" return self.tabs.count() == 0 def get_log_filenames() -> list[str]: """Return log filenames""" return [ Conf.main.traceback_log_path.get(), Conf.main.faulthandler_log_path.get(), get_old_log_fname(Conf.main.traceback_log_path.get()), get_old_log_fname(Conf.main.faulthandler_log_path.get()), ] def get_log_prompt_message() -> str | None: """Return prompt message for log files, i.e. a message informing the user whether log files were generated during last session or current session.""" avail = [osp.isfile(fname) for fname in get_log_filenames()] if avail[0] or avail[1]: return _("Log files were generated during current session.") if avail[2] or avail[3]: return _("Log files were generated during last session.") return None def exec_datalab_logviewer_dialog(parent: QW.QWidget | None = None) -> None: """View DataLab logs""" fnames = [osp.normpath(fname) for fname in get_log_filenames() if osp.isfile(fname)] dlg = LogViewerWindow(fnames, parent=parent) if dlg.is_empty: if not execenv.unattended: QW.QMessageBox.information( dlg, APP_NAME, _("Log files are currently empty.") ) dlg.close() else: exec_dialog(dlg) DataLab-1.0.2/datalab/widgets/signalbaseline.py000066400000000000000000000063511511411446000213740ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Signal base line selection dialog.""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING import numpy as np from guidata.configtools import get_icon from plotpy.builder import make from plotpy.plot import PlotDialog from datalab.adapters_plotpy import CURVESTYLES, create_adapter_from_object from datalab.config import _ from datalab.utils.qthelpers import resize_widget_to_parent if TYPE_CHECKING: from plotpy.items import CurveItem, Marker, XRangeSelection from qtpy.QtWidgets import QWidget from sigima.objects import SignalObj class SignalBaselineDialog(PlotDialog): """Signal baseline selection dialog. Args: signal: signal object parent: parent widget. Defaults to None. """ def __init__(self, signal: SignalObj, parent: QWidget | None = None) -> None: self.__curve_styles = CURVESTYLES.style_generator() self.__baseline: float | None = None self.__x_range: tuple[float, float] = [np.nan, np.nan] self.curve: CurveItem | None = None self.cursor: Marker | None = None self.xrange: XRangeSelection | None = None super().__init__(title=_("Signal baseline selection"), edit=True, parent=parent) self.setObjectName("baselineselection") if parent is None: self.setWindowIcon(get_icon("DataLab.svg")) legend = make.legend("TR") self.get_plot().add_item(legend) self.__signal = signal.copy() self.__setup_dialog() resize_widget_to_parent(self, aspect_ratio=1.0) def __setup_dialog(self) -> None: """Setup dialog box""" obj = self.__signal with CURVESTYLES.alternative(self.__curve_styles): self.curve = create_adapter_from_object(obj).make_item() plot = self.get_plot() plot.set_antialiasing(True) plot.SIG_RANGE_CHANGED.connect(self.xrange_changed) plot.SIG_MARKER_CHANGED.connect(self.cursor_changed) self.cursor = make.hcursor(0.0, _("Base line") + " = %g") self.cursor.set_movable(False) self.xrange = make.xrange(obj.x[0], obj.x[int(0.2 * len(obj.x))]) for item in (self.curve, self.cursor, self.xrange): plot.add_item(item) plot.replot() plot.set_active_item(self.xrange) self.xrange_changed(self.xrange, *self.xrange.get_range()) # pylint: disable=unused-argument def xrange_changed(self, item: XRangeSelection, xmin: float, xmax: float) -> None: """X range changed""" self.__x_range = sorted([xmin, xmax]) imin, imax = np.searchsorted(self.__signal.x, self.__x_range) if imin == imax: return self.cursor.set_pos(0, np.mean(self.__signal.y[imin:imax])) plot = self.get_plot() plot.replot() def cursor_changed(self, item: Marker) -> None: """Cursor changed""" _x, self.__baseline = item.get_pos() def get_baseline(self) -> float: """Get baseline""" return self.__baseline def get_x_range(self) -> tuple[float, float]: """Get x range""" return self.__x_range DataLab-1.0.2/datalab/widgets/signalcursor.py000066400000000000000000000177721511411446000211400ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Signal horizontal or vertical cursor selection dialog.""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING, Literal import numpy as np from guidata.configtools import get_icon from plotpy.builder import make from plotpy.plot import PlotDialog from qtpy import QtGui as QG from qtpy import QtWidgets as QW from sigima.tools.signal.features import find_x_values_at_y from datalab.adapters_plotpy import CURVESTYLES, create_adapter_from_object from datalab.config import _ from datalab.utils.qthelpers import block_signals, resize_widget_to_parent if TYPE_CHECKING: from plotpy.items import CurveItem, Marker from qtpy.QtWidgets import QWidget from sigima.objects import SignalObj class SignalCursorDialog(PlotDialog): """Signal horizontal or vertical cursor selection dialog. Args: signal: signal object parent: parent widget. Defaults to None. """ def __init__( self, signal: SignalObj, cursor_orientation: Literal["horizontal", "vertical"], parent: QWidget | None = None, ) -> None: assert cursor_orientation in ( "horizontal", "vertical", ), "cursor_orientation must be 'horizontal' or 'vertical'" self.__curve_styles = CURVESTYLES.style_generator() self.__cursor_orientation = cursor_orientation self.__signal = signal self.__x_value: float | None = None self.__y_value: float | None = None self.curve: CurveItem | None = None self.hcursor: Marker | None = None self.vcursor: Marker | None = None self.xlineedit: QW.QLineEdit | None = None self.ylineedit: QW.QLineEdit | None = None if cursor_orientation == "horizontal": title = _("Select X value with cursor") else: title = _("Select Y value with cursor") super().__init__(title=title, edit=True, parent=parent) self.setObjectName("SignalCursorDialog") if parent is None: self.setWindowIcon(get_icon("DataLab.svg")) legend = make.legend("TR") self.get_plot().add_item(legend) self.__setup_dialog() resize_widget_to_parent(self, aspect_ratio=1.0) def __setup_dialog(self) -> None: """Setup dialog box""" apply_button = QW.QPushButton(_("Apply")) apply_button.setIcon(get_icon("apply.svg")) apply_button.setToolTip(_("Apply cursor position")) xlabel = QW.QLabel("X=") ylabel = QW.QLabel("Y=") self.xlineedit = QW.QLineEdit() self.xlineedit.editingFinished.connect(self.xlineedit_editing_finished) self.xlineedit.setValidator(QG.QDoubleValidator()) self.ylineedit = QW.QLineEdit() self.ylineedit.editingFinished.connect(self.ylineedit_editing_finished) self.ylineedit.setValidator(QG.QDoubleValidator()) self.xlineedit.setReadOnly(self.__cursor_orientation == "horizontal") self.xlineedit.setDisabled(self.__cursor_orientation == "horizontal") self.ylineedit.setReadOnly(self.__cursor_orientation == "vertical") self.ylineedit.setDisabled(self.__cursor_orientation == "vertical") xygroup = QW.QGroupBox(_("Cursor position")) xylayout = QW.QHBoxLayout() xylayout.addWidget(xlabel) xylayout.addWidget(self.xlineedit) if self.__cursor_orientation == "vertical": xylayout.addWidget(apply_button) apply_button.clicked.connect(self.xlineedit_editing_finished) xylayout.addStretch() xylayout.addSpacing(10) xylayout.addWidget(ylabel) xylayout.addWidget(self.ylineedit) if self.__cursor_orientation == "horizontal": xylayout.addWidget(apply_button) apply_button.clicked.connect(self.ylineedit_editing_finished) xygroup.setLayout(xylayout) self.button_layout.insertWidget(0, xygroup) obj = self.__signal with CURVESTYLES.alternative(self.__curve_styles): self.curve = create_adapter_from_object(obj).make_item() plot = self.get_plot() plot.set_antialiasing(True) xcursor = make.xcursor(np.mean(obj.x), np.mean(obj.y), "X = %g, Y = %g") xcursor.set_selectable(False) param = xcursor.markerparam param.symbol.facecolor = "blue" param.symbol.edgecolor = "cyan" param.symbol.size = 9 param.line.style = "DotLine" param.line.color = "blue" param.line.width = 2.0 param.update_item(xcursor) plot.SIG_MARKER_CHANGED.connect(self.cursor_changed) if self.__cursor_orientation == "horizontal": self.hcursor = make.hcursor(np.mean(obj.y), "Y = %g") self.vcursor = xcursor self.vcursor.setVisible(False) else: self.vcursor = make.vcursor(np.mean(obj.x), "X = %g") self.hcursor = xcursor self.hcursor.setVisible(False) for item in (self.curve, self.vcursor, self.hcursor): plot.add_item(item) plot.replot() if self.__cursor_orientation == "horizontal": plot.set_active_item(self.hcursor) self.cursor_changed(self.hcursor) else: plot.set_active_item(self.vcursor) self.cursor_changed(self.vcursor) def cursor_changed(self, item: Marker) -> None: """Cursor changed""" sig = self.__signal plot = self.get_plot() if self.__cursor_orientation == "horizontal" and item is self.hcursor: _x, y = item.get_pos() x = None x_values = find_x_values_at_y(sig.x, sig.y, y) if len(x_values) > 0: x = x_values[0] with block_signals(plot): self.vcursor.set_pos(x, y) self.vcursor.setVisible(x is not None) self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(x is not None) elif self.__cursor_orientation == "vertical" and item is self.vcursor: x, _y = item.get_pos() y_index = np.searchsorted(self.__signal.x, x) if x < self.__signal.x[0] or y_index >= len(self.__signal.y): y = None else: y = self.__signal.y[y_index] with block_signals(plot): self.hcursor.set_pos(x, y) self.hcursor.setVisible(True) self.hcursor.setVisible(y is not None) self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(y is not None) self.xlineedit.setText(f"{x:g}" if x is not None else "") self.ylineedit.setText(f"{y:g}" if y is not None else "") self.__x_value, self.__y_value = x, y def xlineedit_editing_finished(self) -> None: """X line edit editing finished""" try: x = float(self.xlineedit.text()) _x, y = self.vcursor.get_pos() if self.__cursor_orientation == "horizontal": self.hcursor.set_pos(x, y) else: self.vcursor.set_pos(x, y) except ValueError: pass plot = self.get_plot() plot.replot() def ylineedit_editing_finished(self) -> None: """Y line edit editing finished""" try: y = float(self.ylineedit.text()) x, _y = self.hcursor.get_pos() if self.__cursor_orientation == "horizontal": self.hcursor.set_pos(x, y) else: self.vcursor.set_pos(x, y) except ValueError: pass plot = self.get_plot() plot.replot() def get_cursor_position(self) -> tuple[float, float]: """Get cursor position""" return self.__x_value, self.__y_value def get_x_value(self) -> float: """Get cursor x value""" return self.__x_value def get_y_value(self) -> float: """Get cursor y value""" return self.__y_value DataLab-1.0.2/datalab/widgets/signaldeltax.py000066400000000000000000000130471511411446000210730ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ GUI dialog for analyzing signals and calculating full width at Y. """ # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations import warnings from typing import TYPE_CHECKING import numpy as np from guidata.configtools import get_icon from plotpy.builder import make from plotpy.plot import PlotDialog from qtpy import QtGui as QG from qtpy import QtWidgets as QW from sigima.tools.signal.pulse import full_width_at_y from datalab.adapters_plotpy import CURVESTYLES, create_adapter_from_object from datalab.config import _ from datalab.utils.qthelpers import resize_widget_to_parent if TYPE_CHECKING: from plotpy.items import CurveItem, Marker, XRangeSelection from qtpy.QtWidgets import QWidget from sigima.objects import SignalObj class SignalDeltaXDialog(PlotDialog): """Signal Delta X dialog. Args: signal: signal object parent: parent widget. Defaults to None. """ def __init__(self, signal: SignalObj, parent: QWidget | None = None) -> None: self.__curve_styles = CURVESTYLES.style_generator() self.__signal = signal self.__coords: list[float, float, float, float] | None = None self.curve: CurveItem | None = None self.hcursor: Marker | None = None self.delta_xrange: XRangeSelection | None = None self.deltaxlineedit: QW.QLineEdit | None = None self.ylineedit: QW.QLineEdit | None = None title = _("Select Y value with cursor") super().__init__(title=title, edit=True, parent=parent) self.setObjectName("SignalCursorDialog") if parent is None: self.setWindowIcon(get_icon("DataLab.svg")) legend = make.legend("TR") self.get_plot().add_item(legend) self.__setup_dialog() resize_widget_to_parent(self, aspect_ratio=1.0) def __setup_dialog(self) -> None: """Setup dialog box""" apply_button = QW.QPushButton(_("Apply")) apply_button.setIcon(get_icon("apply.svg")) apply_button.setToolTip(_("Apply cursor position")) xlabel = QW.QLabel("∆X=") ylabel = QW.QLabel("Y=") self.deltaxlineedit = QW.QLineEdit() self.deltaxlineedit.setReadOnly(True) self.deltaxlineedit.setDisabled(True) self.ylineedit = QW.QLineEdit() self.ylineedit.editingFinished.connect(self.ylineedit_editing_finished) self.ylineedit.setValidator(QG.QDoubleValidator()) xygroup = QW.QGroupBox(_("Cursor position")) xylayout = QW.QHBoxLayout() xylayout.addWidget(xlabel) xylayout.addWidget(self.deltaxlineedit) xylayout.addWidget(ylabel) xylayout.addWidget(self.ylineedit) xylayout.addWidget(apply_button) vlayout = QW.QVBoxLayout() vlayout.addLayout(xylayout) self.warning_label = QW.QLabel() vlayout.addWidget(self.warning_label) apply_button.clicked.connect(self.ylineedit_editing_finished) xygroup.setLayout(vlayout) self.button_layout.insertWidget(0, xygroup) obj = self.__signal with CURVESTYLES.alternative(self.__curve_styles): self.curve = create_adapter_from_object(obj).make_item() plot = self.get_plot() plot.set_antialiasing(True) self.delta_xrange = make.xrange(0.0, 1.0) self.delta_xrange.setVisible(False) self.delta_xrange.set_style("roi", "s/readonly") self.delta_xrange.set_selectable(False) plot.SIG_MARKER_CHANGED.connect(self.cursor_changed) self.hcursor = make.hcursor(np.mean(obj.y), "Y = %g") for item in (self.curve, self.delta_xrange, self.hcursor): plot.add_item(item) plot.replot() plot.set_active_item(self.hcursor) self.cursor_changed(self.hcursor) def cursor_changed(self, item: Marker) -> None: """Cursor changed""" sig = self.__signal _x, y = item.get_pos() try: with warnings.catch_warnings(record=True) as w: self.__coords = full_width_at_y(sig.x, sig.y, y) if np.nan in self.__coords: raise ValueError("Invalid coordinates") delta_str = f"{self.__coords[2] - self.__coords[0]:g}" ok = True if len(w) > 0: self.warning_label.setText("⚠️ " + str(w[-1].message)) else: self.warning_label.setText("") self.delta_xrange.setVisible(True) self.delta_xrange.set_range(self.__coords[0], self.__coords[2]) except ValueError: delta_str = "" ok = False self.delta_xrange.setVisible(False) self.button_box.button(QW.QDialogButtonBox.Ok).setEnabled(ok) self.deltaxlineedit.setText(delta_str) self.ylineedit.setText(f"{y:g}" if y is not None else "") def ylineedit_editing_finished(self) -> None: """Y line edit editing finished""" try: y = float(self.ylineedit.text()) x, _y = self.hcursor.get_pos() self.hcursor.set_pos(x, y) except ValueError: pass plot = self.get_plot() plot.replot() def get_coords(self) -> tuple[float, float, float, float]: """Return coordinates of segment associated to the width at Y""" return self.__coords def get_y_value(self) -> float: """Get cursor y value""" _x, y = self.hcursor.get_pos() return y DataLab-1.0.2/datalab/widgets/signalpeak.py000066400000000000000000000147541511411446000205400ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """Signal peak detection feature""" # pylint: disable=invalid-name # Allows short reference names like x, y, ... from __future__ import annotations from typing import TYPE_CHECKING import numpy as np from guidata.configtools import get_icon from plotpy.builder import make from plotpy.plot import PlotDialog from qtpy import QtCore as QC from qtpy import QtWidgets as QW from sigima.tools.signal.peakdetection import peak_indices from datalab.adapters_plotpy import CURVESTYLES, create_adapter_from_object from datalab.config import _ from datalab.utils.qthelpers import resize_widget_to_parent if TYPE_CHECKING: from plotpy.items import Marker from qtpy.QtWidgets import QWidget from sigima.objects import SignalObj class DistanceSlider(QW.QWidget): """Minimum distance slider Args: parent: parent widget. Defaults to None. """ TITLE = _("Minimum distance:") SIG_VALUE_CHANGED = QC.Signal(int) def __init__(self, parent: QWidget | None = None) -> None: super().__init__(parent) self.slider = QW.QSlider(QC.Qt.Horizontal) self.label = QW.QLabel() layout = QW.QHBoxLayout() layout.addWidget(self.label) layout.addWidget(self.slider) self.setLayout(layout) def value_changed(self, value: int) -> None: """Slider value has changed Args: value: slider value """ plural = "s" if value > 1 else "" self.label.setText(f"{self.TITLE} {value} point{plural}") self.SIG_VALUE_CHANGED.emit(value) def setup_slider(self, value: int, maxval: int) -> None: """Setup slider Args: value: initial value maxval: maximum value """ self.slider.setMinimum(1) self.slider.setMaximum(maxval) self.slider.setValue(value) self.slider.setTickPosition(QW.QSlider.TicksBothSides) self.value_changed(value) self.slider.valueChanged.connect(self.value_changed) class SignalPeakDetectionDialog(PlotDialog): """Signal Peak detection dialog Args: signal: signal object parent: parent widget. Defaults to None. """ def __init__(self, signal: SignalObj, parent: QWidget | None = None) -> None: self.__curve_styles = CURVESTYLES.style_generator() self.peaks = None self.peak_indices = None self.in_curve = None self.in_threshold = None self.in_threshold_cursor = None self.co_results = None self.co_positions = None self.co_markers = None self.min_distance = None self.distance_slider: DistanceSlider | None = None super().__init__(title=_("Signal peak detection"), edit=True, parent=parent) self.setObjectName("peakdetection") if parent is None: self.setWindowIcon(get_icon("DataLab.svg")) legend = make.legend("TR") self.get_plot().add_item(legend) self.__signal = signal.copy() self.__setup_dialog() resize_widget_to_parent(self, parent, aspect_ratio=1.0) def populate_plot_layout(self) -> None: # Reimplement PlotDialog method """Populate the plot layout""" super().populate_plot_layout() self.distance_slider = DistanceSlider(self) self.add_widget(self.distance_slider, 1, 0, 1, 1) def __setup_dialog(self) -> None: """Setup dialog box""" obj = self.__signal with CURVESTYLES.alternative(self.__curve_styles): self.in_curve = create_adapter_from_object(obj).make_item() plot = self.get_plot() plot.set_antialiasing(True) plot.add_item(self.in_curve) self.in_threshold = 0.5 * (np.max(obj.y) - np.min(obj.y)) + np.min(obj.y) cursor = make.hcursor(self.in_threshold) self.in_threshold_cursor = cursor plot.add_item(self.in_threshold_cursor) self.co_results = make.label("", "TL", (0, 0), "TL") plot.add_item(self.co_results) plot.SIG_MARKER_CHANGED.connect(self.hcursor_changed) self.min_distance = 1 self.distance_slider.setup_slider(self.min_distance, len(obj.y) // 4) self.distance_slider.SIG_VALUE_CHANGED.connect(self.minimum_distance_changed) self.compute_peaks() # Replot, otherwise, it's not possible to set active item: plot.replot() plot.set_active_item(cursor) def get_peaks(self) -> list[tuple[float, float]]: """Return peaks coordinates""" return self.peaks def get_peak_indices(self) -> list[int]: """Return peak indices""" return self.peak_indices def get_threshold(self) -> float: """Return relative threshold""" y = self.__signal.y return (self.in_threshold - np.min(y)) / (np.max(y) - np.min(y)) def get_min_dist(self) -> int: """Return minimum distance""" return self.min_distance def compute_peaks(self) -> None: """Compute peak detection""" x, y = self.__signal.xydata plot = self.get_plot() self.peak_indices = peak_indices( y, thres=self.in_threshold, min_dist=self.min_distance, thres_abs=True, ) self.peaks = [(x[index], y[index]) for index in self.peak_indices] markers = [ make.marker( pos, movable=False, color="orange", markerstyle="|", linewidth=1, marker="NoSymbol", linestyle="DashLine", ) for pos in self.peaks ] if self.co_markers is not None: plot.del_items(self.co_markers) self.co_markers = markers for item in self.co_markers: plot.add_item(item) positions = [str(marker.get_pos()[0]) for marker in markers] prefix = f"{_('Peaks:')}
    " self.co_results.set_text(prefix + "
    ".join(positions)) def hcursor_changed(self, marker: Marker) -> None: """Horizontal cursor position has changed Args: marker: marker item """ _x, y = marker.get_pos() self.in_threshold = y self.compute_peaks() def minimum_distance_changed(self, value: int) -> None: """Minimum distance changed Args: value: minimum distance value """ self.min_distance = value self.compute_peaks() self.get_plot().replot() DataLab-1.0.2/datalab/widgets/status.py000066400000000000000000000171531511411446000177410ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab main window status bar widgets """ from __future__ import annotations import os import psutil from guidata.configtools import get_icon from guidata.qthelpers import get_std_icon from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from datalab.config import DEBUG, Conf, _ from datalab.env import execenv from datalab.plugins import PluginRegistry class BaseStatus(QW.QWidget): """Base status widget. Args: delay (int | None): update interval (s). If None, widget will not be updated. parent (QWidget): parent widget """ def __init__( self, delay: int | None = None, parent: QW.QWidget | None = None ) -> None: super().__init__(parent) layout = QW.QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) self.icon = QW.QLabel() self.label = QW.QLabel() layout.addWidget(self.icon) layout.addWidget(self.label) if delay is not None: self.timer = QC.QTimer() self.timer.timeout.connect(self.update_status) self.timer.start(delay * 1000) def set_icon(self, icon: QG.QIcon | str | None) -> None: """Set icon. Args: icon (QIcon | None): icon """ size = self.label.sizeHint().height() if isinstance(icon, str): icon = get_icon(icon) pixmap = QG.QPixmap() if icon is None else icon.pixmap(size, size) self.icon.setPixmap(pixmap) def update_status(self) -> None: """Update status widget""" raise NotImplementedError class ConsoleStatus(BaseStatus): """Console status widget. Shows a message if an error or warning has been logged to the console. Shows a button to show the console, only if the console is hidden. Args: parent (QWidget): parent widget """ SIG_SHOW_CONSOLE = QC.Signal() def __init__(self, parent: QW.QWidget | None = None) -> None: super().__init__(None, parent) self.label.setText(_("Internal console")) self.label.setToolTip( _( "Click to show the internal console.\n" "The icon will turn red if an error or warning is logged." ) ) self.label.setCursor(QG.QCursor(QC.Qt.PointingHandCursor)) self.label.mouseReleaseEvent = self.on_click self.ok_icon = get_std_icon("MessageBoxInformation") self.ko_icon = get_std_icon("MessageBoxWarning") self.has_errors = False self.update_status() def on_click(self, event: QG.QMouseEvent) -> None: """Handle mouse click event on label. Args: event: mouse event """ if event.button() == QC.Qt.LeftButton: self.SIG_SHOW_CONSOLE.emit() def console_visibility_changed(self, visible: bool) -> None: """Handle console visibility changed event. Args: visible (bool): console visibility """ if visible: # Hide this status widget when console is visible self.hide() else: self.show() self.update_status() def exception_occurred(self) -> None: """Handle exception occurred event""" self.has_errors = True self.update_status() def update_status(self) -> None: """Update status widget""" if self.has_errors: self.set_icon(self.ko_icon) self.label.setStyleSheet("color: red") self.label.setToolTip( _( "Click to show the internal console.\n" "An error or warning has been logged." ) ) else: self.set_icon(self.ok_icon) self.label.setStyleSheet("") self.label.setToolTip( _( "Click to show the internal console.\n" "No error or warning has been logged." ) ) class MemoryStatus(BaseStatus): """Memory status widget. Args: threshold (int): available memory thresold (MB) delay (int): update interval (s) parent (QWidget): parent widget """ SIG_MEMORY_ALARM = QC.Signal(bool) def __init__( self, threshold: int = 500, delay: int = 2, parent: QW.QWidget | None = None ) -> None: super().__init__(delay, parent) self.demo_mode = False self.ko_icon = get_std_icon("MessageBoxWarning") self.__threshold = threshold * (1024**2) self.label.setMinimumWidth(self.label.fontMetrics().width("000%")) self.update_status() def set_demo_mode(self, state: bool) -> None: """Set demo mode state (used when taking screenshots). The demo mode allows to take screenshots which always look the same. (this will set memory usage to a constant value). If demo mode is set to False, memory usage will be set to actual value. Args: state (bool): demo mode state """ self.demo_mode = state self.update_status() def update_status(self) -> None: """Update status widget""" mem = psutil.virtual_memory() memok = mem.available > self.__threshold self.SIG_MEMORY_ALARM.emit(not memok) txtlist = [ f"%s {mem.available // (1024**2)} MB" % _("Memory available:"), f"%s {mem.used // (1024**2)} MB" % _("Memory used:"), f"%s {self.__threshold // (1024**2)} MB" % _("Alarm threshold:"), ] txt = os.linesep.join(txtlist) self.setToolTip(txt) if DEBUG and not memok: execenv.log(self, txt) self.label.setStyleSheet("" if memok else "color: red") self.set_icon("libre-tech-ram.svg" if memok else self.ko_icon) mem_percent = 65 if self.demo_mode else int(mem.percent) self.label.setText(_("Memory:") + f" {mem_percent}%") class PluginStatus(BaseStatus): """Plugin status widget. Shows the number of plugins loaded. Args: parent (QWidget): parent widget """ def __init__(self, parent: QW.QWidget | None = None) -> None: super().__init__(None, parent) self.set_icon("libre-gui-plugin.svg") self.update_status() def update_status(self) -> None: """Update status widget""" text = _("Plugins:") + " " if Conf.main.plugins_enabled.get(): nplugins = len(PluginRegistry.get_plugins()) text += str(nplugins) else: text += "-" self.label.setText(text) self.setToolTip(PluginRegistry.get_plugin_info()) class XMLRPCStatus(BaseStatus): """XML-RPC status widget. Shows the XML-RPC server status and port number. Args: parent (QWidget): parent widget """ def __init__(self, parent: QW.QWidget | None = None) -> None: super().__init__(None, parent) self.port: int | None = None def set_port(self, port: int | None): """Set XML-RPC server port number. Args: port (int | None): XML-RPC server port number. If None, XML-RPC server is disabled. """ self.port = port self.update_status() def update_status(self) -> None: """Update status widget""" text = _("XML-RPC:") + " " if self.port is None: self.label.setText(text + "-") self.set_icon("libre-gui-unlink.svg") else: self.label.setText(text + str(self.port)) self.set_icon("libre-gui-link.svg") DataLab-1.0.2/datalab/widgets/textimport.py000066400000000000000000000651131511411446000206340ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Text Import Wizard -------------------------- The DataLab Import Wizard is a tool for importing data from a text source: - Clipboard - File (csv, txt, etc.) It is based on the DataLab Wizard widget, which is a widget that guides the user through a series of steps to complete a task. It is implemented as a series of pages, each of which is a separate widget. """ from __future__ import annotations import io import os.path as osp from typing import TYPE_CHECKING, Generator import guidata.dataset as gds import guidata.dataset.qtwidgets as gdq import numpy as np import pandas as pd from guidata.configtools import get_icon from guidata.widgets.codeeditor import CodeEditor from plotpy.plot import PlotOptions, PlotWidget from qtpy import QtCore as QC from qtpy import QtGui as QG from qtpy import QtWidgets as QW from sigima import ImageObj, SignalObj, create_image, create_signal from sigima.io.common.textreader import count_lines, read_first_n_lines from sigima.io.signal.funcs import get_labels_units_from_dataframe, read_csv_by_chunks from datalab.adapters_plotpy import CURVESTYLES, create_adapter_from_object from datalab.config import Conf, _ from datalab.utils.qthelpers import ( CallbackWorker, create_progress_bar, qt_long_callback, ) from datalab.widgets.wizard import Wizard, WizardPage if TYPE_CHECKING: from plotpy.items import CurveItem, MaskedXYImageItem from plotpy.plot import BasePlot from qtpy.QtWidgets import QWidget class SourceParam(gds.DataSet): """Source parameters dataset""" def __init__(self, source_page: SourcePage) -> None: super().__init__() self.source_page = source_page # pylint: disable=unused-argument def source_callback(self, item: gds.ChoiceItem, value: str) -> None: """Source callback""" if value == "clipboard": is_valid = bool(QW.QApplication.clipboard().text()) else: is_valid = self.path is not None and osp.isfile(self.path) self.source_page.set_valid(is_valid) def file_callback(self, item: gds.FileOpenItem, value: str | None) -> None: """File callback""" self.source_page.set_valid(value is not None and osp.isfile(value)) _prop = gds.GetAttrProp("choice") source = ( gds.ChoiceItem( _("Source"), [("clipboard", _("Clipboard")), ("file", _("File"))], default="file", help=_("Source of the data"), radio=True, ) .set_prop("display", store=_prop) .set_prop("display", callback=source_callback) ) path = ( gds.FileOpenItem( _("File"), formats=("txt", "csv", "dat", "asc", "mca"), check=False, help=_("File containing the data"), ) .set_prop("display", active=gds.FuncProp(_prop, lambda x: x == "file")) .set_prop("display", callback=file_callback) ) _bg = gds.BeginGroup(_("Preview parameters")) preview_max_rows = gds.IntItem( _("Maximum Number of Rows"), default=100000, min=1, check=False, help=_("Maximum number of rows to display"), ).set_prop("display", active=gds.FuncProp(_prop, lambda x: x == "file")) _eg = gds.EndGroup(_("Preview parameters")) class SourcePage(WizardPage): """Source page""" def __init__(self) -> None: super().__init__() self.__text = "" self.__path = "" self.__loaded_partially = True self.set_title(_("Source")) self.set_subtitle(_("Select the source of the data:")) self.param_widget = gdq.DataSetEditGroupBox( _("Source Parameters"), SourceParam, show_button=False, source_page=self ) self.param = self.param_widget.dataset self.add_to_layout(self.param_widget) self.add_stretch() self.set_valid(False) def get_source_path(self) -> str | None: """Return the selected source path, or None if clipboard is selected""" return self.param.path if self.param.source == "file" else None def get_source_text(self, preview: bool) -> str: """Return the source text""" if not self.__loaded_partially or preview: return self.__text with open(self.__path, "r", encoding="utf-8") as file: self.__text = file.read() self.__loaded_partially = False return self.__text def validate_page(self) -> bool: """Validate the page""" self.__text = "" self.param_widget.set() if self.param.source == "file": self.__path = self.get_source_path() if self.__path is not None and osp.isfile(self.__path): try: self.__text = read_first_n_lines( self.__path, n=self.param.preview_max_rows ) except Exception: # pylint:disable=broad-except return False self.__loaded_partially = ( count_lines(self.__path) > self.param.preview_max_rows ) else: return False else: self.__text = QW.QApplication.clipboard().text() self.__loaded_partially = False return bool(self.__text) class BaseImportParam(gds.DataSet): """Import parameters dataset""" delimiter_choice = gds.ChoiceItem( _("Delimiter"), [ (",", ","), (";", ";"), ("\t", _("Tab")), (" ", _("Space")), ], help=_("Column delimiter character"), ) decimal_choice = gds.ChoiceItem( _("Decimal"), [(".", _("Point")), (",", _("Comma"))], help=_("Decimal separator character"), default=".", ).set_pos(col=1) comment_char = gds.StringItem( _("Comments"), default="#", help=_("Character that indicates a comment line"), ).set_pos(col=2) skip_rows = gds.IntItem( _("Rows to Skip"), default=0, help=_( "Number of rows to skip at the beginning of the file (including comments)" ), ) max_rows = gds.IntItem( _("Max. nb of rows"), default=None, min=1, check=False, help=_("Maximum number of rows to import"), ).set_pos(col=1) header = gds.ChoiceItem( _("Header"), ((None, _("None")), ("infer", _("Infer")), (0, _("First row"))), default="infer", help=_("Row index to use as the column names"), ).set_pos(col=2) transpose = gds.BoolItem( _("Transpose"), default=False, help=_("Transpose the data (swap rows and columns)"), ) class SignalImportParam(BaseImportParam): """Signal import parameters dataset""" VALID_DTYPES_STRLIST = SignalObj.get_valid_dtypenames() dtype_str = gds.ChoiceItem( _("Data type"), list(zip(VALID_DTYPES_STRLIST, VALID_DTYPES_STRLIST)), help=_("Output signal data type."), default="float64", ).set_pos(col=1) first_col_is_x = gds.BoolItem( _("First Column is X"), default=True, help=_( "First column contains the X values\n(ignored if there is only one column)" ), ).set_pos(col=2) class ImageImportParam(BaseImportParam): """Image import parameters dataset""" VALID_DTYPES_STRLIST = ImageObj.get_valid_dtypenames() dtype_str = gds.ChoiceItem( _("Data type"), list(zip(VALID_DTYPES_STRLIST, VALID_DTYPES_STRLIST)), help=_("Output image data type."), default="uint16", ).set_pos(col=1) class ArrayModel(QC.QAbstractTableModel): """Array model Args: parent: Parent widget data: Data array horizontal_headers: Horizontal headers """ # pylint: disable=invalid-name def __init__( self, parent: QWidget, data: np.ndarray, horizontal_headers: list[str] | None = None, ) -> None: super().__init__(parent) self.__data = data self.__horizontal_headers = horizontal_headers def rowCount(self, _parent: QC.QModelIndex) -> int: """Return the row count (reimplement the `QC.QAbstractTableModel` method)""" return self.__data.shape[0] def columnCount(self, _parent: QC.QModelIndex) -> int: """Return the column count (reimplement the `QC.QAbstractTableModel` method)""" return self.__data.shape[1] def data(self, index: QC.QModelIndex, role: int) -> str | None: """Return the data (reimplement the `QC.QAbstractTableModel` method)""" if role == QC.Qt.DisplayRole: return str(self.__data[index.row(), index.column()]) return None def headerData(self, section: int, orientation: int, role: int) -> str | None: """Return the header data (reimplement the `QC.QAbstractTableModel` method)""" if ( role == QC.Qt.DisplayRole and orientation == QC.Qt.Horizontal and self.__horizontal_headers is not None ): return self.__horizontal_headers[section] return super().headerData(section, orientation, role) class ArrayView(QW.QTableView): """Array view Args: parent: Parent widget """ def __init__(self, parent: QWidget) -> None: super().__init__(parent) self.setShowGrid(True) self.setAlternatingRowColors(True) def set_data( self, data: np.ndarray, horizontal_headers: list[str] | None = None ) -> None: """Set the data Args: data: Data array horizontal_headers: Horizontal headers """ model = ArrayModel(self, data, horizontal_headers) self.setModel(model) class PreviewWidget(QW.QWidget): """Widget showing the raw data, the prefiltered data and a preview of the data""" def __init__(self, parent: QWidget, destination: str) -> None: super().__init__(parent) self.destination = destination main_layout = QW.QVBoxLayout() self.setLayout(main_layout) self.tabwidget = tw = QW.QTabWidget() self._raw_text_edit = self.create_editor() tw.addTab( self._raw_text_edit, get_icon("libre-gui-questions.svg"), _("Raw Data") ) self._preview_table = ArrayView(self) self._preview_table.setFont(self._raw_text_edit.font()) self._preview_table.setEditTriggers(QW.QAbstractItemView.NoEditTriggers) tw.addTab(self._preview_table, get_icon("table.svg"), _("Preview")) main_layout.addWidget(tw) def create_editor(self) -> CodeEditor: """Create a code editor""" editor = CodeEditor() font = editor.font() font.setPointSize(font.pointSize() - 2) editor.setFont(font) editor.setReadOnly(True) editor.setWordWrapMode(QG.QTextOption.NoWrap) return editor def set_raw_data(self, data: str) -> None: """Set the raw data""" self._raw_text_edit.setPlainText(data) def __clear_preview_table(self, enable: bool) -> None: """Clear the preview table""" self._preview_table.setModel(None) self._preview_table.setEnabled(enable) idx = self.tabwidget.indexOf(self._preview_table) icon_name = "table.svg" if enable else "table_unavailable.svg" self.tabwidget.setTabIcon(idx, get_icon(icon_name)) if enable: self.tabwidget.setCurrentIndex(idx) def set_preview_data( self, df: pd.DataFrame | None, param: SignalImportParam | ImageImportParam ) -> None: """Set the preview data""" data = df.to_numpy(np.dtype(param.dtype_str)) if df is not None else None if data is None or len(data.shape) not in (1, 2) or data.size == 0: self.__clear_preview_table(False) else: self.__clear_preview_table(True) if self.destination == "signal": assert param.first_col_is_x is not None h_headers = df.columns.tolist() else: h_headers = None self._preview_table.set_data(data, horizontal_headers=h_headers) def str_to_dataframe( raw_data: str, param: SignalImportParam | ImageImportParam, worker: CallbackWorker | None = None, ) -> pd.DataFrame | None: """Convert raw data to a DataFrame Args: raw_data: Raw data param: Import parameters worker: Callback worker object parent: Parent widget Returns: The DataFrame, or None if the conversion failed """ if not raw_data: return None textstream = io.StringIO(raw_data) nlines = raw_data.count("\n") + (not raw_data.endswith("\n")) try: df = read_csv_by_chunks( textstream, nlines, worker=worker, decimal=param.decimal_choice, delimiter=param.delimiter_choice, skiprows=param.skip_rows, nrows=param.max_rows, comment=param.comment_char, header=param.header, ) df.to_numpy(np.dtype(param.dtype_str)) # To eventually raise ValueError except Exception: # pylint:disable=broad-except return None # Remove rows and columns where all values are NaN in the DataFrame: df = df.dropna(axis=0, how="all").dropna(axis=1, how="all") if param.transpose: return df.T return df class DataPreviewPage(WizardPage): """Data preview page Args: destination: Destination type ('signal' or 'image') """ def __init__(self, source_page: SourcePage, destination: str) -> None: super().__init__() self.__quick_update = False self.source_page = source_page self.destination = destination self.__preview_df: pd.DataFrame | None = None self.set_title(_("Data Preview")) self.set_subtitle(_("Preview and modify the import settings:")) self.param_widget = gdq.DataSetEditGroupBox( _("Import Parameters"), SignalImportParam if destination == "signal" else ImageImportParam, ) self.param_widget.SIG_APPLY_BUTTON_CLICKED.connect(self.update_preview) self.param_widget.set_apply_button_state(False) self.param = self.param_widget.dataset self.add_to_layout(self.param_widget) self.preview_widget = PreviewWidget(self, destination) self.preview_widget.setSizePolicy( QW.QSizePolicy(QW.QSizePolicy.Expanding, QW.QSizePolicy.Expanding) ) self.add_to_layout(self.preview_widget) def read_data_callback(self, worker: CallbackWorker) -> pd.DataFrame: """Read data callback Args: worker: Callback worker object Returns: The DataFrame """ source_text = self.source_page.get_source_text(preview=False) df = str_to_dataframe(source_text, self.param, worker) return df def get_dataframe(self) -> pd.DataFrame | None: """Return the data Returns: The data frame, or None if the data could not be converted """ worker = CallbackWorker(self.read_data_callback) df = qt_long_callback(self, _("Reading data"), worker, 100) return df def update_preview(self) -> None: """Update the preview""" # Raw data raw_data = self.source_page.get_source_text(preview=True) self.preview_widget.set_raw_data(raw_data) # Preview df = str_to_dataframe(raw_data, self.param) if not self.__quick_update: self.preview_widget.set_preview_data(df, param=self.param) self.__preview_df = df self.set_valid(df is not None) def initialize_page(self) -> None: """Initialize the page""" super().initialize_page() self.param_widget.get() self.update_preview() def validate_page(self) -> bool: """Validate the page""" self.__quick_update = True self.param_widget.set() self.__quick_update = False if self.destination == "signal": nb_sig = len(self.__preview_df.columns) if self.param.first_col_is_x: nb_sig -= 1 if ( nb_sig > 20 and QW.QMessageBox.warning( self, _("Warning"), _( "The number of signals to import is very high (%d).\n" "This may be an error.\n\n" "Are you sure you want to continue?" ) % nb_sig, QW.QMessageBox.Yes | QW.QMessageBox.No, ) == QW.QMessageBox.No ): return False return super().validate_page() class GraphicalRepresentationPage(WizardPage): """Graphical representation page""" def __init__(self, data_page: DataPreviewPage, destination: str) -> None: super().__init__() self.__curve_styles: Generator[tuple[str, str], None, None] | None = None self.__objitmlist: list[ tuple[SignalObj | ImageObj, CurveItem | MaskedXYImageItem] ] = [] self.set_title(_("Graphical Representation")) self.set_subtitle(_("Graphical representation of the imported data")) self.data_page = data_page self.destination = destination layout = QW.QVBoxLayout() instruction = QW.QLabel( _("Unselect the %s that you do not want to import:") % (_("signals") if destination == "signal" else _("images")) ) layout.addWidget(instruction) cb_all = QW.QCheckBox(_("Select all")) cb_all.setChecked(True) cb_all.stateChanged.connect(self.toggle_all) layout.addWidget(cb_all) plot_type = "curve" if destination == "signal" else "image" # Get appropriate autoscale margin from configuration if plot_type == "curve": autoscale_margin = Conf.view.sig_autoscale_margin_percent.get() else: autoscale_margin = Conf.view.ima_autoscale_margin_percent.get() self.plot_widget = PlotWidget( self, toolbar=True, options=PlotOptions( type=plot_type, show_itemlist=True, show_contrast=True, curve_antialiasing=True, show_axes_tab=False, autoscale_margin_percent=autoscale_margin, ), ) plot = self.plot_widget.get_plot() plot.SIG_ITEMS_CHANGED.connect(self.items_changed) layout.addWidget(self.plot_widget) self.add_to_layout(layout) def toggle_all(self, state: int) -> None: """Toggle all items selection""" plot = self.plot_widget.get_plot() for _obj, item in self.__objitmlist: plot.set_item_visible(item, state == QC.Qt.Checked, replot=False) plot.replot() def items_changed(self, _plot: BasePlot) -> None: """Item selection changed""" objs = self.get_objs() self.set_valid(len(objs) > 0) def get_objs(self) -> list[SignalObj | ImageObj]: """Return the objects""" return [obj for obj, item in self.__objitmlist if item.isVisible()] def __plot_signal( self, x: np.ndarray, y: np.ndarray, title: str, labels: tuple[str, str] | None = None, units: tuple[str, str] | None = None, zorder: int | None = None, ) -> None: """Plot signals""" obj = create_signal(title, x=x, y=y, labels=labels, units=units) with CURVESTYLES.alternative(self.__curve_styles): item = create_adapter_from_object(obj).make_item() plot = self.plot_widget.get_plot() plot.add_item(item, z=zorder) maxpoints = 20000 if len(x) >= 2 * maxpoints: item.param.use_dsamp = True item.param.dsamp_factor = len(x) // maxpoints self.__objitmlist.append((obj, item)) def __show_image(self, data: np.ndarray) -> None: """Show image""" obj = create_image("", data) item = create_adapter_from_object(obj).make_item() plot = self.plot_widget.get_plot() plot.add_item(item) self.__objitmlist.append((obj, item)) plot.set_active_item(item) item.unselect() def initialize_page(self) -> None: """Initialize the page""" self.__curve_styles = CURVESTYLES.style_generator() df = self.data_page.get_dataframe() assert df is not None data = df.to_numpy(np.dtype(self.data_page.param.dtype_str)) param = self.data_page.param plot = self.plot_widget.get_plot() plot.del_all_items() self.__objitmlist = [] if self.destination == "signal": xydata = data.T x = np.arange(len(xydata[0]), dtype=self.data_page.param.dtype_str) if len(xydata) == 1: self.__plot_signal(x, xydata[0], "") else: xlabel, ylabels, xunit, yunits = get_labels_units_from_dataframe(df) if param.first_col_is_x: x = xydata[0] plot.set_axis_title("bottom", xlabel) zorder = 1000 with create_progress_bar( self, _("Adding data to the plot"), max_=len(xydata) - 1 ) as progress: for ycol in range(1 if param.first_col_is_x else 0, len(xydata)): progress.setValue(ycol - 1) if progress.wasCanceled(): break yidx = ycol if param.first_col_is_x else ycol - 1 self.__plot_signal( x, xydata[yidx], ylabels[ycol - 1], labels=(xlabel, ylabels[ycol - 1]), units=(xunit, yunits[ycol - 1]), zorder=zorder, ) zorder -= 1 QW.QApplication.processEvents() else: self.__show_image(data) plot.do_autoscale() self.items_changed(plot) return super().initialize_page() def validate_page(self) -> bool: """Validate the page""" objs = self.get_objs() if len(objs) == 0: return False return super().validate_page() class SignalParam(gds.DataSet): """Signal parameters dataset""" title = gds.StringItem(_("Title"), default="").set_pos(col=0, colspan=2) xlabel = gds.StringItem(_("X label"), default="") ylabel = gds.StringItem(_("Y label"), default="").set_pos(col=1) xunit = gds.StringItem(_("X unit"), default="") yunit = gds.StringItem(_("Y unit"), default="").set_pos(col=1) class ImageParam(gds.DataSet): """Image parameters dataset""" title = gds.StringItem(_("Title"), default="").set_pos(col=0, colspan=3) xlabel = gds.StringItem(_("X label"), default="") ylabel = gds.StringItem(_("Y label"), default="").set_pos(col=1) zlabel = gds.StringItem(_("Z label"), default="").set_pos(col=2) xunit = gds.StringItem(_("X unit"), default="") yunit = gds.StringItem(_("Y unit"), default="").set_pos(col=1) zunit = gds.StringItem(_("Z unit"), default="").set_pos(col=2) def update_dataset_non_empty_values(dest: gds.DataSet, source: gds.DataSet) -> None: """Update the destination dataset from the non-empty values of the source dataset Args: dest: Destination dataset source: Source dataset """ for item in source.get_items(): key = item.get_name() value = getattr(source, key) if value not in (None, "") and hasattr(dest, key): setattr(dest, key, value) class LabelsPage(WizardPage): """Labels page""" def __init__( self, source_page: SourcePage, plot_page: GraphicalRepresentationPage, destination: str, ) -> None: super().__init__() self.set_title(_("Labels and units")) self.set_subtitle(_("Set the labels and units for the imported data")) self.source_page = source_page self.plot_page = plot_page self.param_widget = gdq.DataSetEditGroupBox( _("Parameters"), SignalParam if destination == "signal" else ImageParam, show_button=False, ) self.param = self.param_widget.dataset label = QW.QLabel( _( "The following title, labels and units will be applied to the data." "

    Note: " "Leave empty the labels and units to keep the default values " "(i.e. the values which were inferred from the data)." ) ) self.add_to_layout(label) self.add_to_layout(self.param_widget) self.add_stretch() def get_objs(self) -> list[SignalObj | ImageObj]: """Return the objects""" objs = self.plot_page.get_objs() for idx, obj in enumerate(objs): update_dataset_non_empty_values(obj, self.param) if len(objs) > 1: obj.title = f"{obj.title} {idx + 1:02d}" return objs def initialize_page(self) -> None: """Initialize the page""" path = self.source_page.get_source_path() if path is None: path = _("clipboard") else: path = osp.basename(path) self.param.title = _("Imported from:") + " " + path self.param_widget.get() return super().initialize_page() def validate_page(self) -> bool: """Validate the page""" self.param_widget.set() return super().validate_page() class TextImportWizard(Wizard): """Text data import wizard Args: destination: Destination type ('signal' or 'image') """ def __init__(self, destination: str, parent: QWidget | None = None) -> None: super().__init__(parent) assert destination in ("signal", "image") self.setWindowTitle(_("DataLab Import Wizard")) self.source_page = SourcePage() self.add_page(self.source_page) self.data_page = DataPreviewPage(self.source_page, destination) self.add_page(self.data_page) self.plot_page = GraphicalRepresentationPage(self.data_page, destination) self.add_page(self.plot_page) self.labels_page = LabelsPage(self.source_page, self.plot_page, destination) self.add_page(self.labels_page, last_page=True) def get_objs(self) -> list[SignalObj | ImageObj]: """Return the objects""" return self.labels_page.get_objs() DataLab-1.0.2/datalab/widgets/warningerror.py000066400000000000000000000175431511411446000211400ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ Module providing a warning/error message box """ import os.path as osp import re import subprocess import traceback from guidata.config import CONF from guidata.configtools import get_font from guidata.qthelpers import exec_dialog, get_std_icon from guidata.widgets.console.shell import PythonShellWidget from qtpy import QtCore as QC from qtpy import QtWidgets as QW from datalab.config import Conf, _, get_mod_source_dir def go_to_error(text: str) -> None: """Go to error: open file with external editor, and go to line number Args: text (str): Error text """ pattern = r'File "(.+)", line (\d+),' match = re.search(pattern, text) if match: path = match.group(1) line_number = match.group(2) mod_src_dir = get_mod_source_dir() if not osp.isfile(path) and mod_src_dir is not None: otherpath = osp.join(mod_src_dir, path) if not osp.isfile(otherpath): # TODO: [P3] For frozen app, go to error is implemented only when the # source code is available locally (development mode). # How about using a web browser to open the source code on github? return path = otherpath if not osp.isfile(path): return # File not found (unhandled case) fdict = {"path": path, "line_number": line_number} args = Conf.console.external_editor_args.get().format(**fdict).split(" ") editor_path = Conf.console.external_editor_path.get() subprocess.run([editor_path] + args, shell=True, check=False) def insert_spaces(text: str, nbchars: int) -> str: """ Inserts spaces regularly in a string, every nbchars characters, after certain characters (",", ";", "-", "+", "*", ")"), and keeps searching until detecting one of those characters. Args: text (str): The input string. nbchars (int): The number of characters after which a space should be inserted. Returns: str: The modified string with spaces inserted. """ special_chars = (",", ";", "-", "+", "*", ")", "_") new_text = "" index = 0 while index < len(text): if ( index + nbchars < len(text) and text[index + nbchars] not in special_chars and not any(c in special_chars for c in text[index : index + nbchars + 1]) ): new_text += text[index : index + nbchars] # Append characters index += nbchars else: new_text += text[index : index + nbchars] + " " # Insert space index += nbchars return new_text class WarningErrorMessageBox(QW.QDialog): """Warning/Error message box Args: parent (QW.QWidget): parent widget category (str): message category ("error" or "warning") context (str | None): context. Defaults to None. message (str | None): message. Defaults to None. tip (str | None): tip. Defaults to None. """ def __init__( self, parent: QW.QWidget, category: str, context: str = None, message: str = None, tip: str = None, ) -> None: super().__init__(parent) assert category in ("error", "warning") self.setWindowTitle(parent.window().objectName()) self.shell = PythonShellWidget(self, read_only=True) self.shell.go_to_error.connect(go_to_error) font = get_font(CONF, "console") font.setPointSize(9) self.shell.set_font(font) message = traceback.format_exc() if message is None else message self.shell.insert_text(message, at_end=True, error=True) bbox = QW.QDialogButtonBox(QW.QDialogButtonBox.Ok) bbox.accepted.connect(self.accept) if category == "warning": bbox.addButton(QW.QDialogButtonBox.Ignore).clicked.connect(self.ignore) layout = QW.QVBoxLayout() if category == "error": width, height = 725, 400 icon = "MessageBoxCritical" tb_title = _("Error message") tb_text = _("The following traceback may help to understand the problem:") else: width, height = 725, 200 icon = "MessageBoxWarning" tb_title = _("Warning message") tb_text = _("Please take into account the following warning message:") if context is not None: context = insert_spaces(context, 80) msgprefix = _("An error has occured during the following context:") text = "
    ".join([msgprefix, f"{context}"]) ct_groupbox = QW.QGroupBox(_("Context"), self) ct_layout = QW.QHBoxLayout() ct_image_layout = QW.QVBoxLayout() ct_image = QW.QLabel() ct_image.setPixmap(get_std_icon(icon).pixmap(24, 24)) ct_image.setSizePolicy(QW.QSizePolicy.Fixed, QW.QSizePolicy.Fixed) ct_image_layout.addWidget(ct_image) ct_image_layout.addStretch() ct_layout.addLayout(ct_image_layout) ct_label = QW.QLabel(text) ct_label.setWordWrap(True) ct_label.setAlignment(QC.Qt.AlignLeft | QC.Qt.AlignTop) ct_layout.addWidget(ct_label) ct_groupbox.setLayout(ct_layout) ct_groupbox.setSizePolicy( QW.QSizePolicy.MinimumExpanding, QW.QSizePolicy.Fixed ) layout.addWidget(ct_groupbox) tb_groupbox = QW.QGroupBox(tb_title, self) tb_layout = QW.QVBoxLayout() tb_layout.addWidget(QW.QLabel(tb_text)) tb_layout.addWidget(self.shell) tb_groupbox.setLayout(tb_layout) layout.addWidget(tb_groupbox) if tip is not None: tip_groupbox = QW.QGroupBox(_("Tip"), self) tip_layout = QW.QHBoxLayout() tip_image_layout = QW.QVBoxLayout() tip_image = QW.QLabel() tip_image.setPixmap(get_std_icon("MessageBoxInformation").pixmap(24, 24)) tip_image.setSizePolicy(QW.QSizePolicy.Fixed, QW.QSizePolicy.Fixed) tip_image_layout.addWidget(tip_image) tip_image_layout.addStretch() tip_layout.addLayout(tip_image_layout) tip_label = QW.QLabel(tip) tip_label.setWordWrap(True) tip_label.setAlignment(QC.Qt.AlignLeft | QC.Qt.AlignTop) tip_layout.addWidget(tip_label) tip_groupbox.setLayout(tip_layout) tip_groupbox.setSizePolicy( QW.QSizePolicy.MinimumExpanding, QW.QSizePolicy.Fixed ) layout.addWidget(tip_groupbox) layout.addSpacing(10) if category == "warning": layout.addWidget( QW.QLabel( _( "Please click on the 'Ignore' button to " "ignore this warning next time." ) ) ) layout.addSpacing(10) layout.addWidget(bbox) self.setLayout(layout) self.resize(width, height) bbox.button(QW.QDialogButtonBox.Ok).setFocus() def ignore(self): """Ignore warning next time""" Conf.proc.ignore_warnings.set(True) self.accept() def show_warning_error( parent: QW.QWidget, category: str, context: str = None, message: str = None, tip: str = None, ) -> None: """Show error message Args: parent (QW.QWidget): parent widget category (str): message category ("error" or "warning") context (str | None): context. Defaults to None. message (str | None): message. Defaults to None. tip (str | None): tip. Defaults to None. """ if category == "warning" and Conf.proc.ignore_warnings.get(): return dlg = WarningErrorMessageBox(parent, category, context, message, tip) exec_dialog(dlg) DataLab-1.0.2/datalab/widgets/wizard.py000066400000000000000000000226221511411446000177130ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. """ DataLab Wizard Widget --------------------- The DataLab Wizard is a widget that guides the user through a series of steps to complete a task. It is implemented as a series of pages, each of which is a separate widget. The `Wizard` class is the main widget that contains the pages. The `WizardPage` class is the base class for the pages. This module is strongly inspired from Qt's `QWizard` and `QWizardPage` classes. .. note:: The only motivation for reimplementing the wizard widget is to support complete styling with `QPalette` and `QStyle` (e.g. `guidata`'s dark mode is not supported on Windows). """ from __future__ import annotations from qtpy import QtCore as QC from qtpy import QtWidgets as QW from qtpy.compat import getopenfilename from qtpy.QtWidgets import QWidget from datalab.config import _ class WizardPage(QW.QWidget): """Wizard page base class We create our own wizard page class instead of using QWizardPage because the latter does not support complete styling with `QPalette` and `QStyle` (e.g. `guidata`'s dark mode is not supported on Windows). This class reimplements the `QWizardPage` features. """ SIG_INITIALIZE_PAGE = QC.Signal() SIG_VALID_STATE_CHANGED = QC.Signal() def __init__(self, parent: QW.QWidget | None = None) -> None: super().__init__(parent) self.__is_valid: bool = True self.wizard: Wizard | None = None self._main_layout = QW.QVBoxLayout() self._user_layout = QW.QVBoxLayout() self._title_label = QW.QLabel("") font = self._title_label.font() font.setPointSize(font.pointSize() + 4) font.setBold(True) self._title_label.setFont(font) self._title_label.setStyleSheet("color: #1E90FF") horiz_line = QW.QFrame() horiz_line.setFrameShape(QW.QFrame.HLine) horiz_line.setFrameShadow(QW.QFrame.Sunken) self._subtitle_label = QW.QLabel("") self._main_layout.addWidget(self._title_label) self._main_layout.addWidget(self._subtitle_label) self._main_layout.addWidget(horiz_line) self._main_layout.addLayout(self._user_layout) self.setLayout(self._main_layout) def set_wizard(self, wizard: Wizard) -> None: """Set the wizard""" self.wizard = wizard def get_wizard(self) -> Wizard: """Return the wizard""" return self.wizard def set_title(self, title: str) -> None: """Set the title of the page""" self._title_label.setText(title) def set_subtitle(self, subtitle: str) -> None: """Set the subtitle of the page""" self._subtitle_label.setText(subtitle) def set_valid(self, is_valid: bool) -> None: """Set the page as valid""" self.__is_valid = is_valid self.SIG_VALID_STATE_CHANGED.emit() def is_valid(self) -> bool: """Return whether the page is valid""" return self.__is_valid def add_to_layout(self, layout: QW.QLayout | QW.QWidget) -> None: """Add a layout to the user layout""" if isinstance(layout, QW.QWidget): self._user_layout.addWidget(layout) else: self._user_layout.addLayout(layout) def add_stretch(self) -> None: """Add a stretch to the user layout""" self._user_layout.addStretch() def initialize_page(self) -> None: """Initialize the page""" self.SIG_INITIALIZE_PAGE.emit() def validate_page(self) -> bool: """Validate the page""" return self.is_valid() class Wizard(QW.QDialog): """Wizard base class""" def __init__(self, parent: QWidget | None = None) -> None: super().__init__(parent) _main_layout = QW.QVBoxLayout() self.setLayout(_main_layout) self._pages_widget = QW.QStackedWidget() _main_layout.addWidget(self._pages_widget) btn_layout = QW.QHBoxLayout() self._back_btn = QW.QPushButton(_("Back")) self._back_btn.clicked.connect(self.go_to_previous_page) self._next_btn = QW.QPushButton(_("Next")) self._next_btn.clicked.connect(self.go_to_next_page) self._finish_btn = QW.QPushButton(_("Finish")) self._finish_btn.clicked.connect(self.accept) self._cancel_btn = QW.QPushButton(_("Cancel")) self._cancel_btn.clicked.connect(self.reject) btn_layout.addWidget(self._back_btn) btn_layout.addWidget(self._next_btn) btn_layout.addWidget(self._finish_btn) btn_layout.addWidget(self._cancel_btn) _main_layout.addLayout(btn_layout) self.setSizePolicy( QW.QSizePolicy(QW.QSizePolicy.Minimum, QW.QSizePolicy.Minimum) ) def add_page(self, page: WizardPage, last_page: bool = False) -> None: """Add a page to the wizard""" page.set_wizard(self) page.SIG_INITIALIZE_PAGE.connect(self.__update_button_states) page.SIG_VALID_STATE_CHANGED.connect(self.__update_button_states) self._pages_widget.addWidget(page) if last_page: self._pages_widget.widget(0).initialize_page() def __update_button_states(self, index: int | None = None) -> None: """Update button states""" if index is None: index = self._pages_widget.currentIndex() self._back_btn.setEnabled(index > 0) not_last_page = index < self._pages_widget.count() - 1 page_valid = self._pages_widget.currentWidget().is_valid() self._next_btn.setEnabled(not_last_page and page_valid) is_last_page = index == self._pages_widget.count() - 1 self._finish_btn.setEnabled(is_last_page and page_valid) def go_to_previous_page(self) -> None: """Go to the previous page""" self._pages_widget.setCurrentIndex(self._pages_widget.currentIndex() - 1) self.__update_button_states() def go_to_next_page(self) -> None: """Go to the next page""" if self.validate_page(): self._pages_widget.setCurrentIndex(self._pages_widget.currentIndex() + 1) self.initialize_page() def initialize_page(self) -> None: """Initialize the page""" self._pages_widget.currentWidget().initialize_page() def validate_page(self) -> bool: """Validate the page""" return self._pages_widget.currentWidget().validate_page() def accept(self) -> None: """Accept the wizard""" if self.validate_page(): super().accept() class ExamplePage1(WizardPage): """Example wizard page 1""" def __init__(self) -> None: super().__init__() self.set_title(_("Welcome to the Example Wizard")) self.set_subtitle( _("This wizard will guide you through the process of importing data.") ) def initialize_page(self) -> None: """Initialize the page""" print("ExamplePage1 initialized") super().initialize_page() def validate_page(self) -> bool: """Validate the page""" print("ExamplePage1 validated") return super().validate_page() class ExamplePage2(WizardPage): """Example wizard page 2""" def __init__(self) -> None: super().__init__() self.set_title(_("Select the Source of the Data")) self.set_subtitle( _("Select the source of the data to be imported (clipboard or file).") ) self._clipboard_rb = QW.QRadioButton(_("Clipboard")) self._file_rb = QW.QRadioButton(_("File")) self._file_rb.toggled.connect(self.file_rb_toggled) self._file_le = QW.QLineEdit() self._file_btn = QW.QPushButton(_("Browse...")) self._file_btn.clicked.connect(self.browse_file) self.add_to_layout(self._clipboard_rb) self.add_to_layout(self._file_rb) self.add_to_layout(self._file_le) self.add_to_layout(self._file_btn) def initialize_page(self) -> None: """Initialize the page""" print("ExamplePage2 initialized") super().initialize_page() def file_rb_toggled(self, checked: bool) -> None: """File radio button toggled""" self._file_le.setEnabled(checked) self._file_btn.setEnabled(checked) def browse_file(self) -> None: """Browse file""" file_name, _filt = getopenfilename( self, _("Select the File to Import"), "", _("CSV Files (*.csv);;Text Files (*.txt);;All Files (*)"), ) if file_name: self._file_le.setText(file_name) def validate_page(self) -> bool: """Validate the page""" if self._file_rb.isChecked() and not self._file_le.text(): QW.QMessageBox.critical( self, _("Error"), _("Please select the file to import."), QW.QMessageBox.Ok, ) return False return True class ExampleWizard(Wizard): """Example wizard widget""" def __init__(self) -> None: super().__init__() self.setWindowTitle(_("Example Wizard")) self.add_page(ExamplePage1()) self.add_page(ExamplePage2(), last_page=True) def test_example_wizard(): """Test the import wizard""" # pylint: disable=import-outside-toplevel from guidata.qthelpers import qt_app_context with qt_app_context(): wizard = ExampleWizard() wizard.exec() if __name__ == "__main__": test_example_wizard() DataLab-1.0.2/doc/000077500000000000000000000000001511411446000135445ustar00rootroot00000000000000DataLab-1.0.2/doc/_static/000077500000000000000000000000001511411446000151725ustar00rootroot00000000000000DataLab-1.0.2/doc/_static/DataLab-Frontpage.png000066400000000000000000002170741511411446000211260ustar00rootroot00000000000000PNG  IHDRfr pHYsaaøtEXtSoftwarewww.inkscape.org< IDATx鏝y3}-J[l-pv\4MHj$hWIE&HaImgǑ5.wq'l} [nH-CRuA9s!xv;II~'o&ّ;Ϻ$/%$%ln7|5ɧodMI>hۿ?i޿mѓ7gv{2\d]YF}@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @Y͚m25=LM&I͎JoO3\l:?SG308C04ɌMdzf63Z$I#tvv3wgyYbA֬\dlhWoo"põXNα9qv8.^Υ\TFǦryl:cәMjv4әxaO.ɪfl^4;7-ϦuKda}h_rj3|y2GO 詡>1cʙ<7kzf,Ύ˳sӊܴ"[7,i6Z*Ag308WNgс.^L̰`^W/=;d%Y߷0ݝ.+bjz6#9vj(Ox*>q4u}kj6[6?sK{lZ$}d~oW::Ex-"0Zv'<|9rrFOt7wȝ;tqozf~̩s~@+3?n͇ޘy"c"0'gfcGżtbF.Oef&HOw3{nNgA&@_9yn$37z7Hve}ߢܱ/o{ܱ:=V,MPVgG'ǏŃsyb:owF#tgٳkM>rϦleyvltl*/<}X<~F4'V-wߺ:sC{l\$͎=\W"pvɃ͓/kN5ɖwnȮ-+f=\7"pU'grG׏ɡ7'IV}̭V>%zw6_n AxSfg[̋<\c][0v;&21ud/{wϿֿ,K w4A(mű|x>#cUj$βŽΓ3kl4E/|[ ͎tt4p= @l}lOfrzF4'6[ݹy#o3Kjfwܒ xZ_|nn'?w&ϼt6/+$nfeuӊش<;6ȶ[ x̶22:gGұ y3:>}Uk4]ٸnI/];V[Wg󺥙?늳x|x">wtt4ҿzq~SlŽivt$I. ȳ'9vz(˻^X2/mYZvΖ ˲zM\ 3TG&s|BydyDFƮ|Hve]ߢܴ"ܳ)}]-}S N᧏,GH߲·ܒGƦ'晗̅ LdjU:ظ<[s[ҿfq:V,pgHl;cӹ<>G.#ϜȑCifV,Ws5޳1oeKcx2~/}~UOW3_ջKܚ}ѯj|{Ogsy|:X{iݒtw5$EVN_}PC9rj(SWWu6;gך_zWxtw6j+N]ݥߪFO߿#ݹmՄݧ^ɟyzߙL͎Fї?ҿfUܔExm|219ɩ\HwGo/oK-LOwgUw8?Gs5:[ƵK=nɎ|_WZLNfxt"Ox:Ծ3wuvcۜKKDPwKy{h /eht2cWOh${ߖ|ٽ/q' v;co_{:_sf5=Ȓ=Y|A֯Zd'33<;=G;A'ɧݞ/}l_6Nvv. p,Op:_ʩs#Lum>;h4tqo>yMپiyv幍F#t3ٙy04~fMϴ208 C9zr084IّVg39=əLL{@8~)W15A!Fǧ̾yɣyf=9kIWgG6]_{7eݪ?qUDjtvvaܼni>\wMd|rospFǧjp=6jsXyDW/ن%ݝٽ/_mnM*.:t8^9P۟F#yt7t^8x~NVchOdzuGBPv|ٟ99OW?y{>rϦ7u?vvɩ>|8/|0/]z^x1/ݛV-7ߚzy`^Wß<23 oϖKdUQ:n7>1?obbڲ2+wrU G<1U/^}ro#uww3wX?sU|g_ޝ\ MS8 hZx.=q,'<.οgt6Ny8'NdmWR۟VW6tu5ӿfqݟ_,^_Ƚ{n?)+$Ff|#9u~$Flqo~{綵Y8sP^z@N?ѴiZy׮{tu5qίIrH|]ͬ[o]eKe^Ogdzf6cS84s/X&~͎F֮\+wfݪi6}IPV^ʑsaǢOݑ՟{(񉉜=s6ٳ2>>~U矝`8پ}[zzz^sFFG#[̊% ]a]nJW#$V[\T. x epd-o|ɼ|r־tp= 61>9o<|0/:ə+?*,^Н޳1wG/MG1& ĉ9zXΟ[kT˙me,Z uK2֬X:/~HxT. v_(|ڿ_w[ IDAT+0_TF'382щ Lfpd7ry2cSalܻږy= 7oSӳ9~v8_}p.Gfm[V⮬Yr9r4?>{"N ĥ=]ٵ6|leyiWdтlX_m2ry*#?Qh|T&3>1əLNdzvW/ʧۑ}7 3AG'󽧎kFҿfq>mٳkmy###9pP>9m||3wߺ&eˆÇrLNߊkX͎,]ԛz_v;3\ȥ\ɌMdjz6}Cw_y`. pm乑|9/{޵6жv&''o9tpl䇻FRƲcZ*==ݯF#YbA;<ɜp9[/-k_ˊFYbAVXp sAPܥvjz:Ϝ {3Jv'rLLLfMٸic.xݩ@\5AnRvr)O?;'j=mƫZVr\tiN3339?0  guYݷ*Ͽѣ;79tRNں*w߶&}˯P{%gΜYުޝqw~Qu_]}_n$$x/3CΩ Vv "#>ސwwɒFsHD$H$A@軫*31' T'*Y||>O*"lH8,B!B$PA OHQulCW9 S"c㌎S}_KVczzT*L6Z xeB !B!b$PA]0>ݐiОNb+lfrjGf7f_[\f|b0p&n!B!B,OE!8LI5U7)YF6cppx|cj5fg  MQUUB!Bk  R' $3uly~B~=s,8~Hl>3g@?--R(B!B\ h@3y^gBk.{߱q&&&)K7STbph (==]t o !B!B4,y>o<6t-yqj:}L6/j5 TŚbDnfB!BѰ$PMss(tw-[hY#/2;7]EAT4MGSUTMC54UCQUX&۶-˲, ۱,ZmmZrds9sx^ pp8L P_sQ!B!ur,DI+A;_;Zr oT0pM p\.\.}ki*j Rob;cc65qzXT(*+_e,ZqklL6(n|~~Ϗzxxt].B!B!nK( рѐG^>ZD2L/>S4LnMQJ(B!% ZHKK7XTZ^lkY~RT+ra&nt}~/>4ojdMx|5ij}JcKW)B!BlF( `RBe|U M#DKOw^.*4L0--bMD%CFPE .m۔eҩTd*E"$/PTU؋4qbHXx5Mo w9ߕB!BqI(DN(׷JKާT*34`0Ȗz{ Bzp8Υ?{lw̯fEŅ_zTUxhoo\.ǹ8:|Vײ,R4lVE!B! h0\Ju>v,lyq:wݵ~LӼ0eA:tBX*Q(]\.Q֨jԪUp '*CJUUQ5M0\.LӍmbFYr=e!aA[[[=dahd5unFD"B!B!" &-Q-etM%\>5"03vҙ,#m&''Jkò3eٹW+qX&z* **--ۻ` n?*^Jww--s'H&Zgle``pO!B!$Pe !7-Lc)|\RH6::ԥв+WD_è7>^r\.|^/^vҩ48ӤәK?Ƕtww oj!B!bH(DTj7%ꣻ-캃\D"yb 4b\7{(|֡`(]d2Y,LKK3>WD!B!, h0bu];閐{sEfS }UUP Zj5y ^ׅcszt^$p yhWCƒ85{ٻUk6Ɉ 8pB_Y㷿q ;!BB4ӥWcVg.~bD\ Y~iݸ̦\K2=ٻԃ@]S5riU?KpMӥ &Ma/-Q/1?~!⠀zqBr SΎ$_,e.%B!D@Q6KTWm-%S*6tKxszTfS\u:> W/ ֨֘&?[:|R(B!@Q6u =n2k〃e95ZӶ2.VK O˷؆ǭ*(B!I(D1tE&_ǪYN=P\co@Q Sl{qrMA۶. -۹"Dme׃ǚMjS(*RRFb͗Iʤeb2c=,tNgKLM򝧶iݪB!I(DQ߼@^t`lJ*MPdỺ֭W,JբRJrŢ\QbF6_&W/Vɗ Uҹ\TTLL~acbqb;躶3ÅB!h$Aې(thk32I痯P4M&˕ w7UUq0t{ww;#iALq+5?\ϖ0&B!bskB܆E5@G'.Ε0LM(J%,+5XoFk'p'z=DnisTؙ)pT}FB!Blb( ѠZt4__IԖ`1 㺞F@Q w[3?z |` ~gr GOO?9\e˪B!BMKE!T[OgKӥ|%+Lt^WE!PZ[:BhнO{9~nJA{*B!ۻ ql zWH8"+}~>t:}{]TUCUU4MEu~?hH8LKs3MБZ4Me϶^ӥ_!_1lގ0=![q@!B!n$9;) 5{W+oHfSmE χ=~馩)JKs3Ěx-CixCEE!B!  5ct_sXlS9:i ( 7t-7]ijj9FkK3P4д*+[J%4Mk)r߽|k] [jD'ʓ,ZE,B!FE!\kQΌ$1R#EE׫sśM47hňD¸Ma`\躎fYW˲LNM23X,cvn> q4U)? U%+80#CܳDPQ!B$PiJ[Sl@q"ޘG(Z@4M"0hp8L xpKϿm "Yf3$)$Pbp:}a^Tִ}&_ad2MP5 q\TR4M~`p&FQ~ߢmSTfsdYRsd|Dbdd4bkG!nEQؿ,tԊK5 'vߒ'\SD\dl@*S&)̔HfJ ʕ՚MfQE|Pc4&&3ݴ6wt R̟^7BIvPUlLl\\H*[".̔IfK55JզZm҉.  ŦpMo b5'oh(WI' $2ϔHf$e,{MS1]9>ǽ気P$7|MtB\ $|nz'ř˭JR34b϶nw\¡U=f}|ucss31!bJX/NǙS(;fY,m/9LMU^er6G<'WX9Ofz?2@$F3TEj;t:9cx<$C)'U'(DCnzCkb]BZ>!sc;LxBi׵=D,E[ǒB9,^,.26Y~J4g4Z&ָya}Te2#.1:h )'RLY IDATTv144Z|l펰-Q/͑ɸVrt"Oba/^:{VKP_NhW yk /ו+ӉNz 3jjJX"J259 lvMP.沔J%^FQU0~1ErH>z{M]i8/IL$|>ّ92u^9̥̥=5*D}ܵGm&]Eǁ/obp|$Á}h}ܚ)jkk}"]wky-Q/UmJrF&_!.28cc|SsRJ.Nf8xd=< 5V-:BW;??He(byO]8N"O:W")18S .|ũ 2<2ǭ}w B~b>;P,/~@QqZ5$v*$%&fr:6/81I:/,R瘈xo==}wto'{h {@[Bl"mgh< '_Ε9vzy>}<^/mm8yj)NJrBl߶-[z1 YζmlۦZ2==Srk\L.'LI(8{G;9YUbT'/ gYj\gg8SjPa;L<l vp`?mM>܆r Yǒ/-qݥ_QZ ȭCeR5TTX-TglNex0{ +Tq,'/o枝m6å6kZSղc%EMUY U_pt*[ ;ZfR,8q!Ή q~Sܳ=9++7d >1AgK>~` ~Lg9ةYxEe::ʑt{{ضCXw˃g9{11T^ͱl[oIgk@Y!8ѩ Vd^?<rځ(M-==WP-t0;5yfLNL2S,Vkju y .]a@WyaR؎ï>5Ho{pSLϽ9N\%/_sq9??xcg9P||+mMMsq[sy/9tlb妟t_fԊ6CiGсܵuSC؎L~$1>mqo\M?NՆ׭ySY6/{=$Lqݧ_ǩ/-1;1V6Z" (}]|ctUʗ*v/>uUattvKJ2Mvۍi8md2 fgHRJryCٶM.cnn {!֋~SбQ^x|mnbW{}|b?MgoղL̩Ys`_d` 8B?C#.Tkd>el*#wu#1w;(¸/j9hCs5Y6dCF8ѻyvwnmcePrvxxKN1>TKm;de2Sy.baBlR( 5=|S||brU6/&898ǽ]WM4 GwWC#7eH&) ds9,\B@\Kz LMMK(6 ÃdrsjhoCV%YMba!)]:7Jj16%)13w*-q4/s^dh"[yT>Ƽ˥T,ۦZO].k}:;w32Oߋk݆݂mۡjٜIp~}dSCtO^4 S\* l*Ulll\HpS'.̒̔M9tkׄDӲTSC{;93ë@a;7J4m\y4֖(S3 S,43qzn2|/>ONL*|;q!t"XCU(UN!~q 1\-Q/ရpMo ֿz:n~j4lǹtZʤs4|DH"]$)Q(UW_5_L/Vo@?{/Fi՚M2S"\{h y׺^~M'9C8uU%jk qq6u<~Df9Tkm+THeder |TDH*[^l‘/'MxXċ5 7dc~"A7S4tL6+ERc.]d2cj6t"L"\ sk8ڡ L)< Dž*K)H(&vgI\5x횦T*MژkeGhG4!x.뢣OXY106P4F+T4?{4&(J= DZ`\~‚9Ύ14hѩ "L|quDZ|_vtxݍ#tO^Z2R}9kg]]< q9tu7pz.3^CiBg zhzm[:B4G}vذmgqZ٤se.Ne8w1XSsyR2ʪNƫ5#sZ6opE\qթ<0?qW]>wn }ćZd_QUjM:Wbx"Å5J_~Lf̃[h5mZ,8q>OJ=p44Gtٳ{w5pvдŗ5ݣԗHjm򳫯 UQl̹$3LTl_1ςpߝ\,b@QMqq6_G2Z]^7rN_) ś jsر$eΧ#|rrj۫Bg=|]ܳ m$f=O.@W0?:)2Ҋ}:ORCUi ϩOes\(/{nUUATZ|.^x|Q/|R]PcW.U+*][0>16Ywǩ}']k 嚙Bl( ®&~Ž5mCl.(0=5M&]W˲,GFعcMM.R ϥJ,dzœ,M8f}WK>q_ّĊK5òl[A8*gGկW5 iV~nY_xQ[ AO{?=<:ϭx-)gz\|靸tSl.&Ls+ѐ<'BWuoZoP1淿q'wnmo^?j{KKQo<:PQ$]Sj ;߼3ó$3U},W-`W⁢(17 JQ6`﯍iEsK3.3I8p@_(Zl}8?7_%T^₩)xv/z#]M9Y]P/Qp4ڛx] ty d6/s?~8߇%Ol0,''U<΃{;9Pn5v*(~kqo3:ç'&*n80:yvߢk#[\8_uD~ss6ۂyZ٪*&HANWY|9Anq?2=rۚi]^/m%LN}hnBsh4Clݫt"t޶ YGqf9Ls4:Jz:wlǶrvz;>L G͞m-nba/^tǁxZwcn%4?}$cK_r~~p = W6pWHMk㽣/~,6l"SLWvvkgه#0/:nB~w^\lN\{im#-,/w]\KSm箝mtF+[x]w#7obx"beͲ958K#3y-B5@Q[2udONL/UbDZ(?l \Uՠ( ]RiŕI7EQ|DzBS4mzqWq3(BgX؃KWW@=O{ՉL<;^\:>;On瑻3be~ݼ0!I8`b4Z,,?yK:[WY)6Njqjh9UoǷ׶/JǭBà O,7Wɉ Ao}m [ހ[n^ԗul ' 9Ό̭8\ A9ۂlSKkOB54QR'/̮V Mx(U{=DvWQ|^/PV:;:ø\C8E$GG-[zho!'ĵr:Mi@ %"zc0f {p}]G;.]kj( Dnyq8EUlN7-Z[rDl,qxUmi -A^xl+?<&ߦiww 6ts OL;^4\JM+\֑alukѩBwkwQ\U/?=?>dOa7rmӎPˡ( x~to^ckwb:8x+^Ɠi!7w]4 =`'3eF&+)UڜCqWQD߲Ov|twvG tŶj*\ Μ=O6Eu^& }z8ԛADCtL"SqRqjh ^]5׭= wr@3Aכ(Ӄc'|y>hǁW߿5tsV IDATqK8eQ,qOIضMRazf꧿ q3ضCsCx'xRtD'Hpq*Û ٙUm n}w{+LKWyv qζ<'!MaOF .(Os1݀1?zb{{EvHeK|vff.bY66ƛ3Zb@KoM&.hsӮ}Ǒ剝,oHЛ&l:ƚ*PݟNZIڝl陞mh4wHU$ x U?cْhK]2)U~?WMUo]C)4kpo?@Q7xƧev>]AcEnT@QQpŷÓ9̻l|^/mTyP^^csr<`۶O{3>~gcbbQl[m4K>2i_*J$?&h 5lf)!_>֊>6ĒY]E}L8MX8~|nٶdz.{燸]͞n柿]n!ӟ~(_x7˟ە̽{`Kt<?aee32^d.)X(+WEQ/=ǎ>15߸ !^Ǐrf.ɓ8"{M_o~?aHJ_,d*3Ms͂JHT~VL5j*|x#篍UK 34e!7u :REQVEY&wqp~j]z˖XtŻ]TЩ(C<|mD"<b0Ѷm8׮3g$t;l)lmNe`_X"> ]+* 2wq`ϝl2]̂ʰiGZXJA}#E\Γ)J{ըi#z٢ƻyD3{o=omS_{ʓh.YWkvm]6|ׁH {phEQ֗ (*PYMݛY/eےw Ι&f8' {.pQCZ ]9|=$& p2׮188D<RJ==$IUlIB<.wbL" RʘɵÌt]\W꠲̷xD3{[T?dY63 ;?\p/QǛxP^-q:t<ĩDž>$e Ydh<'WF/||N?Gqm9c_Q6 (* TG|D{~eexnt$X9k&{9--ed*ͱ1]+bnn7 lccܵߢl6(jB6g¯YJ?Õ)` C_ !p;uGm7;dKg-tQEdiWÓǚh m۠M"aOhJMX3<+*;ؾ+&QEEA ]:ȿSRw>046⋵痢g!ZN;(/_|4㌌ryΝћcBmh,Fի$?(5"۶iو5n31}gkD[%Ϸ[TKeme&c1.ݘ,*KjE( uIRBˡs|-.5{pl k!wmL eG:8u~gMD>վiU(Deф`_[?]U:xt?z]Cjjiij& i@#OPWW8EJmdY&'8' ͮ}8bzzX(ˡkE,[b6b km[rM&fX|9ю*l}'jD( yxhuULlDӼsvuMn*;R'FAٺx>#g&j \qǏ6&m)4M\󏵱_n4! pb-U徂?:G(JT@QQvWrdOu3o|_bZKSc#= {tt.,)>^M4#q5/]ffffMJe-H .Ɩ˒k?ff>]pm8ؾEЋ´HE+kCX" {Z9QM(s5A{C6P 29>3YLVnG5{[+;w9e'nC{) wi\e9t\=+&؁W@ >tTVJyÞ׸nZ8~!Bo -m&8{3>4Cd -Abfzffþ"(.Mt b&QF&&iBgv ߍ5AyycM4V9jGhZBi,o sgje*Vn+:F2Ylj]LW9rY?1!n˵+`nn!FGǘ%No mی  ?EYJ|BbAH)1-I,3T81tHÁJ Tni[fi!'<?@i碽*?#>I 4=7`|;3+wA8fOKe^&g}8MAV u FW;< vc@Q6~RHS'{XTr$ qXr.\.HRz0N300 +VX*p#C#Țn~Dԇwl9R:\GwT{eIfinF`_[%U^G~iFyL)7Upӡs`?L C7[]KsmPohBЮJZ =Oϧ5KQP[GZ\Zum"㝳|AU^'&&!amޅss 2>1ه(Ut@QŚlKr{tC+,KH)4# Bg-u&I*BNv! 5P=q9!SGJ5GSMЎ&BP_.L\um&k19db&E) (*䃊_nj*|Ruu;rNMu5~J5a8ffg'n!);\δW /5ӡY-%z _K̻7 .[CTyp[yml\ 4w,E9b.atrru!GqT+!srxw%z ?77Ti !vh9: 5F ϪዊJWQ5%2/|TTd-N^}B ZZ LO6RvT,*Kixƚd(ڶ$1/\d}m*BXK\*1ej6yNji߷F<էa1ws ǎ%RJ5NtdpSu״llȊplNgY6m aByN)b,s+x=k*}Cg_[ŖP 2?q|&QpeFJTi Cg_kG fFYC(Zj,ЄGud:lJWeG(/Qx;g4e~#؄|>G& "L$IPT6t$.v=5ɺ,y! *\Fh꣸l[205*vX.bZN!eMž.!RJb,jQ,2_m$+B~9꩚ t'|+J*g[EQ6gyo>/ӳ)~u%2;t<7hmmް;.V^x1= 5Gd2TT6T:cZEwNFz-%tS5qZQǸS蚠&V}֋ E*vP!Js',s{ˠ!\ahUK2^U%w۸:ရw6#TY튢{UeCe}|=W֖/wu!-Qu=nA}}'>G B mL&Ƣͱ1:^#*W2=&,㤲pO1L`Fv+2TTy u$D|=N\N] IExiHHg W}(vnXQ4A}e>][yiӷp; ^.d à2ed_cBDhjlP(ugIb4cxdAgrtn{\}Ӣ(ʶ%cS.|e'ȗ%R9d<AeCW=n: 4MRu l2E\::!r)!j#?M)T04ʂnWJ2s2p*(jiι*ġ(E=EYTKO4~uzGV\Yt kWzv׭7\N$3+כCQ`6w/ReW"EQ 4Asm>7=4bfN&kqoK/vi#p"rQUYI]]- ue_d9`dtٹ9rNLNӋ餦zÇ(;06(*C1s>x )$uFp9tVſrL&W5M- .h\ !d|iS ̺4NTEm$\#[JU(LE)PrUfWLK]/tWbW{;d^R=Pj( $I,gbr>&''1#\.\N'랍\1fvT xpIƴjq9T@.M,[+"CQׅ BO9!PeH) m{Y0 0 NYY5 C+ɠz[8KqR1 ],%&p; ?6E0Uem(EB~/"]3+Nvb@ؾg!NGJ&.:Hдj˲Hg2?@ooC1,b`pۍ߿kEt"TD_$)A]P7+1t7Bg5]a[(u oe-I)4 ]q:8\>/YVѴ|2]`j]!D_(FREEQSq9u/;yL `q|&X#2YGG1͕* !uHݻvԈ북+  h~{js&appC1 T)whhro\`r9 ۖ*Kqv/XҖ`Z6%ބؒq,˺uCӉqSriz`]DN&(݊Mδo L:*YCU(ʆRWɊܷNr]ˣw~~ We|>|ӲY>{߷?ǍnB??e\mK.v3=_\Gmķ&}$"JSM1t$SE5E2[M6k.aNcےd&Nxl&L\.G6EJtp8mLRq)Cp8MKʚ*)!aSsδ0-{ iYE2kEZTeݗ(M5N \q? -iʘt]_6^V [@夔fIfgs IDATb)I|=YL@7 *(] |n?{A-əα[$O?ܼ>]שcLNLRSSC{[+eea|~?meI\i{&uzm9.^% !-mLQ›55ܺ/X"#ȖrOY{zq T{tH 6EBr6Ųz]u۽8ʯ%,&nsԶm$v C]/$[JUpm6g36 ph${($S9U~)!l#8w?(J)QEEQք@{%newsSKf9y˖cG EUUU(1?7$cLNN-^`74ӱ{ZxĴlXC>LmĿfSl tϹJŮeKFlTR3w#c,P801x3=:Odsђ na 0@#2(z .Mer\PAE򁧜i1<* hx*هdMXh<:;*(I=EY3nKW1<ct2mQ2YlnzI)fGa|lIFkr9{ݴ4z7%$g E=A2]8U_&[8K^u-%gxV -%cQb u^&T ?ƒYFj")!2- .躾c^s"sHFkt欒}ݚgųQ`N!df>l`;WT@QQ5kJ?c>i(%Ko*bR 﫡ҿC4M#s ROϥfmыm-h`d2J֙<(PƜL dK/#i=odnCRJXidY2 Dh4<333qL\u:* 2&XTͷH)wh*ͩxUA lO%,P{]TEE)%*(ʺф~'aNzy~ bbԀ۽u&xr '&H9uٶdz.ɻ+B6gWSakMpIR(@oOz2t l[2Kso +tu%D\H$gjjII$ض$SUUQp9u*< f1-$c-S־$ccqF7%wxPIK]PT(SEEQ#9W܅.}aƦ|K\dnIeM8v(mx= mQ>=s76PNLqy[%Ok5Rmvdr.&25bp,${eR;ik\Hx fRB<{hv]ަiJFLMM1>>$sssdY@H$BMM H`05yg~ B8h./65yt/tnǟxϮO͕nyGl[I0x3|,!/{+NQ6 (*ޖ kïuܱƖ?{LNG{{^*ڶCCC$>eZ 1n'[,[ qꮭtc$Vf| ~6|S#|nv5\Of!,)U|F'G(tPœdb299sssR)nBTTT|\.4MC'~?ضqb:[ D>8R% cQƦ%}ۖ\鞦odO TosEhj((2ho(v9/31\Ʋ%cSq^;Gδo&C4~wTjs/5MF\KI8yoW>cJǏ6R_Xh!Cg{lj_ĒO-BmĿc }tqhʃT=m\ @v%`6̕qRJL$aY eBt]raabpiP&UUpit2:ut;w ?@ zx<8Nb`QY~]Meݫ62_A;b|boucQ]=m[?:ύifjBt4t0YQJ (* ]*ןz,hR23gv/_wd:ijoc@Zs:TgnKSS^UfKQ0:睳|ta#UWǵv>>PKYpΞ)M12,A*cr(cӉ Zjt]C]o'pp}UJd-zGfΚlpOf⻯t]9mX",T6&y^Mqm>фalLij*6@3g9wuLqv*gx.n R!.﫡,F+q{9e파q۶, ˶Jpk=np8p:*p ^'m wK#} L&=?a)Ti,fx<g, A{c_: b׆X*vr6t [JƦU0qi*8ֈUq8W{7$wH),,TD"A61>tىc5~WSktNݺRr{?CYSٜE,?}l1S)%tLzqdO-*;QQ6 (*%5oOyK3޹QSD)MAeeǏs#;֌M'W:w]v-{GG ?y:鬹&ǤlmR3V39o>̕daVrsb-;X_Zy]6箍{;&}}8;e_>xGݕ5.ޘV*md0>>333fӜ>>TeƋ/#/<δl^~3c;DݲlFc|v}>57MW:OwHX"w_ZTQ{mFnPecѤR,&12c.f>!ȿY]8:~Iu9 z*Bn$/pXSӻH*.wO_Tr>LM^/}n7ڕ2?D,Y\/mcwS9EPel1ٜxYG11`&&5ə67˒X}.!.u Cuk躆p; ~2/HrUWQMׂ nx_t=S֯ 9/Kd/Deee:4⿺ݻvQW[뽣|y>{pv iIF.f)GT~ǤlmRiJƣa'!]7TD[ {%\)"hKvsbUޒ )ah,{9ml[ϖ!_.F 4-w \.۩oًM)%i.-Jۍa8 X 8zk!o/9:/jcp,JYx9sC4Vcsii@z!X40KOn﷯sc;N<//a&_8;~7lWOrtO5Oo<}M\`z.]T[]eUI E8*([@2z4篍;d5j pqPN2_%uFJ:k58K^ô$zn! ::v#% ,n q\X@E˵{3M}S|xaXQ˒O'xˇ8 S5&SWy]3VW {x=RelZy\Z.uMT*mrg1m^/ۖdsg:o˞͡iiΧxM'x~k3GG) ?ߙh ʘ|ٽ:RGد2)az>1^~>"~A'<ʯN;<ه|<|vosĪY-u {8Q=m/f.}t!pra,ҲPulGo^ˣ|VÅs?gnbp,gW%7"졭.L.#-a- ~5>< {dbXz!4>N=]GovppW%u*h/ w ~ wTCM܋YlPTML壋#~][?W&k1>`|PtP&VSUVte/ ]ԡz\;g/,[?:?IδGhPU]e[d2&&'Wn*iinXqHsCa7fhbs*cAd'jܷmE+w:a^3WnSfNO\mT# :7 Lfh,E':7hח.wO򣷮VY_j9w8UGY>4,঩6.AťA 3%N'-f!. \ʘq*cSz}RJӸo?7[Ego-CcQSC4ˣ. `fu]y!~v#5Kwl\x{ƅӲy~^'.Ξ 4]זD2Ǚ+7;]\+>_}x {ɦx`tL/=NcM|?*3&Z4|>uQS]k-4=kx㾂uLMi,Ϟl*5R óz>gp,zϟ>o~+TkiX+tޛMgJ'U_50:?zF *K043OLͥxa.tsB }o$pm!xO_H/^:XJ>p, o(/ Y荹נ^<ã3ȧRq?>~=A8TB:^7Ůiۏ>c`t2,t8Ȋm6b,|Ѓ˩v47Rʘ\hQ89ygO:K~(ہ (*ʙ6箎|37 nKI4w)jvTqtO5 5AB~>ޟz/qׯ3:ZҴT ٜŷC}UFtMDcq4M#J{[~o,&f?}F,58Efcit5AXRn#!5Oq+\"bM*+8ϵk'5-{۟ {p"lRJl)I?Ļg]f˩cvQ?emijZk`tUj#>:DEJ+F\nt1:p!t:/[Ji 7&$T|~\?]1|B]{5M44ٍk,3%BEh.9ulk/ۅ-%EhZ?'&ޯ:y@QNCcWCG(IAQUz~E)aCQ9ul[_J d?φq9uv5?ȁ.P}U*BsM%e*N&+W'/d!Hfd2By#q'0MojI`6_ϟl!2Elea qz\>'{ 5*Bnj#Nn 7M>u s]$?~:xPpbKݠ)ϮL{cE|klV1䩀l9fv>7͍^z*ma>XX;U^ A( OS47痽.gtMdڈ¡ #K5̬,o!mfi?m+̕joQho(Ю67FҕVfej4Oi6f $- 2s(" G2Zo~f;vum_zUBCW_m‘~_ 4_ftG C3?scN% ~xv!(,:8Y3E]*|(P嵐ڟVWbp۾Di~r\ -RL&9uqs,JH$ixmhRl%0 fgÔؿ66LO; ]7uP$Kƫؾv4R _G|n;{6' /q企c8Di~w]D2C)0t| 0$S'{:¥GSpE׼d\ rw lX Uzy s[p$mgzTzЍ,·gG%LNxvll87l_qS_4LTyj+ygGnF$ZKmx &+7_ͶϽ$]UlW^ls'L x2Sƒ;\RyE\ q#93D0۰`D3LݺY++ow dEP?|zӳIZ eƦAM1,BPVtFA3Iff ól^_ɮMlPM)n$p9Uvt }^?'zF"{1 ܷD* c99c\ 7ѹ:o]d6SndcKV\ IBϙ=,h"C(`j&T``(1Ʀ OKܾ,Kнg]4#($PsOn"~goTL$3\2321c{Zx`G#~cU:r@ű~N36x؟ǥsS ZJ 蚝㲳v2\\]0LLǸ2MlY_SPEsBJYKg4.O>w h^O~zJyTlEy1݄Xh̐uB\ƥ 4X,ĦR~;׏rex`(sHGv7\N<$WԱhp:nT+#Q|#'k>ʣq(W2 =ot1<l WR\Fl9K$3\{|ӗƉ'6G\vSqT;3J?^p;DJPYN]qw԰mc5וvCdYbGG ,qu<;ɔҜ8N2\o8P]i ƂQ~N/xgRs톬dN)M7d4RTZ#H2$:TTZ#KdĒDi"DhH831f℣%Bv{nơkΖr>hcEn09#;8Mw{5]mTI oɺ#NNpgC'<4s;ʎ>x'6V#I` 0Ppw3o+SLLe:*h)Ǧ*H?%fcIg8;G8tbp↋^>Ɠ[i1|IʦWu='l;͉B%4M#( ocrzz<m_d<eh<*ht8SV ڬp88g/ѹQf:۸S؞&.pxu]'H`퍥[ڏNsorѨȜP:jl)g]]*rvgn D Wą1N\cp|Pm2jSndJveMq kAQ Xfi%p= d4#;5ok`SkM5~^u#I6Vrv2fr!"Ώх;7GSrpMwkki~a-l%ky@yAF TV8L4bqhFٌ"9`e1CkؼT}tFo_JUpMf~2elꍦRkxȲ4/MR}&Ȇs53üwzha]oPzG\%p/U\񑵂ˡӉ,O2̆(Cu~^zLտLzgG-֗PUrNHRhP[Lo6ݮS00bSCLL有BMJ(48ƐeGv5Lf8sibQ_:so>83ž-u謡KC\Xr)$SٹT+3>9ısLLnOrlolfJN5e&Lw %0 EK:9ȁms!iUTypj6+'uPp78=/N R鬳rx|Oh6]] _=ᓃnb;3JZP$l~(p:ػ>ɾyJ1Y^Ua&!N e5$ EI)|NT=`b:߾G]F7RpQsPsΉ۴CqB$ӡ.Or /}^ɒDunOvRWT.:w߻ڇrST{c.otiLIpvU.rd)vL7~/>ʞun`}S)~'.IIaZ)$*nG$2DS:>ı"ɢW C affx5vPS85eF7]„f^Mb`,|KSg4V;,uľV:F{S>cՊ@ M(,3M#.ˀL GG 93c{ZXeVTd]Ԕ{/.!S8GN1NVLS\j62-toR5~.LuGK_|FW[%wN`5ytW؞vtVt.7߽5ߡ) j6B)lhFn$IJjPW{**˖] c 76C3|NToˇq2bۆ2*^wʡ>.C;8~vLT*u]N{ t.sWy+LLnYX\)67؞ul﨡҇ә$Dԍ@p!E`Q ׁ (=/ F 31G<7Pԗ6J|~rώ j0F(dp|G[Κ5[N*T\6@mJ͵!' $HR_Jyj?-zӗƉn/n9p6Ugk=jXWNY@8/n "3$YQ)"*lan$!cuٶ2M~;53# ל"K~oK;:jhr*$)RMYzA*Ȭ\@ ͵?=ѳ# v/IPuo[={Գe}9~L:LT*ڇ&nֶ%lh.s"ů$nJW[{ֳMm=Q\eF$BsMh &Jp aG<xYbmP&?rjt)ݮ_n;0M0gd"B0gzJNʻNmq T(.PS.@]˞p1q$ ;;7\cG9;+S"7W z9/urvme[G5sn/,{E IDATz}se2CS [v3KP[67=pr-Bmljdw=-8TeU0慰B[d2"dˁUl\2Z|RZ+سj" A{37l8L:}M4V{l)IzNEW+K%~'JټmTE{!( +bVAO.,\ 1>)>vvwQWE)DYccLFn\7qoU a?Lܿj݊m'vslxilRdEɆ*8T={kW^en*JT{h Pp!RnmNP8$IB"[Zϱa?}C3LDFo**nꫳy\j^\G16K/]U0n#Pm7}N,Yas4.W/=k(Gώ28fl*Llƨ6ESSe]]+Qņ J$ \_R$IUR5aܨټ1^-6+w0gF9uqqԊEI=v*˲ R}[p:lHfnB *26VӃ5Jp><7BO/>h/NmMyo0޴:ؿ‘Cwsudur&^x)(|NJ|Nҥ0 bxÁ́]_gt*<^p:S^⢽=ؾG%1"rd:Zʉ' $tp;mYAm]j.gsmQ] b1n7ں qΏqehP$l4~2ڒTkrvtְ"%@4HHt",;n01?>aGqص_D7;7sH$I"399I:fxpdtW4 zs^׍>ۆk.RwTNd2I$2K4%=qt؈"E񜚚" ,_ښzv΍^`d2J,F 2m k?qkz+~WYUkKj`S[7VQse23iYnE*@pw E`0OW9t|H| .v$ *n>&>H; ~`.K7x0OGpuV|( >+wk=O_ӗ&VU8R|7={/WUsNudI&024,a8DXU; S5 fdÜ0faә(I&ppJ6d h׊p-X}S(Rr0shm6uYoetRid*[02Zv*1V{oJ)k-\ǜdH$9l7+֞i)J#g[=;Bӽcc]9Oo哏nqJ$3\:ŷ^;]&*,K5j. WWW=9ui}ؔ;Lpb U_#ljzqhu1s 0μnY*˦k^q- 8&nLM9a2̹#*2 nskc]`7Y1V+1~߼e箉k2&F[ fRUӉr8s0O ]bcQ$j=toHѩ*}:l4ɋ"Ifx'-|.*J\r^S zOhsOvbWe^ʪVE=;B$&G;p;ջʽ%;(6l7V5['ۅȿXC":%upEkF5M#JL&s5]7F"QCc^h gf Árt:o=!E s2F`Z |r*lqƂ[ʱWpRSERqڳTf:wTZhV,!Oӄ" R{׭Li\&I$y t+TXWǩu{p5Xk[Jd2:jyNdY#WH/Ҝ'IKdx TyD`wn;ŬՊuY.B&4t:M*MMQ.u|Ƿ7SXXǺ8}^j}^8{Mr)8N3',:&AQ c!AFX'&EQjdˆJzLor4f T㧺Ky ǎaa<Jk$R≬GI8ӳ ‘$HlpH,Ž2Lt(zhNjJ$7/pbHNTo&4bl)bt`uUUX#%; /TDܬ!Ӌ27ڹy?_l4u!6 $In|Zt1L@AQ (#iڒm68M.<|.^zv3}nM'Ose}\12Nd. |n;~'{[sRU桱Ocێ"HR$Ks"9ofIz=3ѳ K(Ԕ{|.JwީaIgh\<~K ER?G7c{ҳU'*@ j|JoGMTUMpxob r1"uƼ5_/ъhd&MR%(Ϋ(x^JJJp\BTBP`b\ĥ8]<>IRxUo\WC^zv _~v3M5~$I"錌GƫgѫMEIett@燬 #"IȊLߙs"c~]1Xl>tF'Mr(q cS.$Z͓[dCO7>CEҜӗJgo<ƫGW߁dlg>`I5)V59to(-x<1AaDq\ߦhs$)YHdL&d2Wd^n7%%%x<QL XE(ӡbhQ|dYvMʡ>_g6vMXZT|v'kA)L凧nKSd 6&cW\e4PUȮꆑ-KrGώ;0}SkY(qF~ "Id}|gye^v6f֫ inacǦ<{j@P־ٚ06?V*XZsYÓ@QfDSDL$ڦ K580L[r,T:?YFsyNW3ϰD`g@p^ U,TӚߊlɁL{t:oK] 5^TB0op} *nr"Zp^eSQꦩOkC 7R]CmJʕ'{9~aE άut`r:ϏLk/`]]Fgk%_| SGeh0Mα~d >d'x&zēCFnS8qUG 0|qPBn%ui %ʩuj /bu A X>kB VѺhd}Ñ[L7Sd2R)h. L!6&0XW-W0+!H( ^}pɴ~Lj~'a74o;0id(N0tMr %>'.< ؞W84RΖ<MrѢ#5t Ί_z N 9[o_$).b(1Sېe߼t=+E4Qî^]a$'qƜpG랇'7"2i@jVR.4CA!Pd2K"`mb5c䧳ȲnVǼ5O}ҢzMRq\.n.2Aw:P8sbۯo]TU~|^U>Hkc)nUSxcLh-6]UrrPY桥rj4V*s+RZ!kTZ xRRNI]0 Hْ)xj?Ul2a≥,~3:cSQqkl"X͜HYO[*ʹ[ř|׍&bnu:8N'N˕{p8p8~Pb cN$DDFq("܁b)Nc8ZJr's.`kc֘aB\}Iw1#5\ X^CQ Xf̉BF"S_Wfj&m &VLRq:l8T6oQPP]Ud2DQ4vÁfe^ŶՌLD8;\2Xڤ3:?;G:-NR^zv aLNЊē^|ڀ`oѯ\ē^ %>'_KPm©x/R(`܅NYfk]w# b 㦠 r! -_*v j"EX_ յboՅcFn2xp9W"E`ɿTsUEaW%iIr'.۩R_奩6@Ǻrj*|lhˡ"IVqXn%0NPU5 ( Ue.; qAdp|`x"o)u׏\&4=[y4TBe^;rƟ'px_6~-r誊/CE@SmEsRhuP-T8hM鐟a)Mh }@hu PpXӔXLQP1ν,FY)Tm}}7w+=BbŠBK-NA\ȳOsxөu5L|kXnw;wDzxޜA < k X~U ;Onm (઴5u,#vPJȅJiopo`8N21\uoFldJ_?޽dhAЦlh*?^WW_f<]۟ɳn%`kBpK$o!`~r圼 [ۖa L&k"]L`a '>g擻XWu~PNW} Zs~kJŨLwqZ~?^UU}fkDѬiZN@4Ýc̷H$r hZ^TU%rĸV =(qN]篿y7߿lﱡ/=u@?hLEddYr|@V\(/yw 0.ZN$`WW-<)|2oyDד%R7aSK[;^ U>~;ģ!yEkeaNMW5^kIm6nǃι5M˝;nӹhub3:pA_0[RRBiip+ 5N$ïE"<.{[_EM7ձaF aR`\]UdN Vkhmׅ\mӺfo<sz~vsz|yy-@pLk NW!'Z]U*sSU桲MmJ/UJVs1 M7Sc8wy WOfd.;CǺrJ|.R #.\ r p(mmN6_2쪂nNDx|s\.l̎LU>| yªUzyvçq$IfggZKŭL{w_Lx\L(\KﲊVDžu_BS c6'Tע(Hk fub}D9&M.Cω>Ͽo :܄/X)S:}MJ~?h5\R~~ρmgo]v.YPm2,aSddI"ēi4d$(a&g׉5^7q]]mtƏ NsGώr(C^Um'YWW]U0 ¾|*v2}3e#-Ƨmhtn*X}dB.)_ X˘.DS<%BXM~9wL?=KhM+uD]yt8j^z臨K*dfft::tSg[!p!1Q 1'f0Agɲ]kV):t[)AkB!ZۡcCZXcy/Zw!azޘb"ba$ItDE%&@p9"4zraWk<[im($8y7?\1N͛<+3ڨ."IH<-yGB3 ޼.v5o?|8?{Ī95+K [7Pfffְ< 狀I%1ɼ1Cj y|`foR!~̜ ,TE XI œ5Y%Y\zo.c1꼿1W*䝄$I\.~?^WA @prz Icm9$j䓏ndgg ><.;x=|gr:F2`}c)_6׊Ǖ 0 ݀IFsb#R<SQQ$ip$y_eUeF7}tOszNΌD$%:LmPʲ-KkFxWk+bƾ؈ua܈}e;VaAY%Ԉ$xp89 άj_<94 4D6UNK/+\ֻO_/zAl8_Kha6+??vDkwh8e'%yϿuK|Z~U½;5Dsl)n o=1Z g˖v\{ #ʎM=Vf27[["@ o%zD/F=F( JҺ+ъ`vfXB.7y^BLJgzyU]R7|$@c[=]Џ޽pJ嬎)s:PR+k!Vmv{ G-uhu粙4L5u ') tVSNcUU6ΡN[^ ]()J[ [|) ,M HnWfSZMZMV+n{TX T,UT433jR|>l6.A;oZj6jϢK 岪ժfffT*T,m3:PƢOm萵*hoĭM{ZX]J4JG;Ʉǁd2>X@x$ ef:qcK F5 ɻD@ח[zf]j*'5SjlA'+:TL9zGAwx"; FcG?ZRHHłj1j~Iwj#96'fH$tvS+.4trj)`L& @fSFCfSARD"|^rYJe] gC=̆a{.bQrYryvC`,`@?˅7;FloB>Dmn?MNWO$ 'FF7˅KAq*>(/P饪U-e5Ll' $D+.]j[V_?rV3圎.ъUj}uzܖ^^Ξ]D"R1R͕w2'T-} y:{bN'Vq ȾnUH6ZudPNhJphha]~؟t+ mXcqtRX &ݮ&=V֋q7/L&aMNO^W}ŷ/rZUHڲeC`1Z %1Z?Vpaq.NDZpp~cOmt#uČ?1j)`DGiA__KWkrW!+0[ O-đRIOHH/  j{sG5_+ВSZw֕wx<⡢Νl9_fb^|E8 G<J>=1͔ CFcƓGjxxNHRzj6ͪ+AE"0" 9_ϞYY91`FW] M0ҕu}ۗͤtziFfTRӧ_V$ֻ?bSÑ^{@VM"Nz ͔rgq};L>knxp lov֠McƢR08YuNUQp8\?OdTleUG r31cxN=68%M6%گ1z;*%IA:hçvXhˬ=_ͦF־&L 岂 P`+l\p#P tR:~\+n,QoZh</'} ðq?WLcՂ -ƖYj!ݶ pc"<,AOLFlV|>|~*{^Jn %{ZV;ɨ`1zj\.^~A܋@T IRVRVgOj4j ;ꭞZA_N_@An^n^phr%ĉJzfReRwf>|kg*aXV-e4WkTṂ z.]¥;z޿Q׵MZm?gJ&_Y?91rWBw.Ǻx[_~OۗWtg-`m)Hv_0\V`X6mAfAs.zی0ѵ і$iIJe W}? -Tczڱ5u:iu:ݿ=FQp8T -XPq8*Ʉm'zCe8Iz^؝^j}5Zk|tku C݁z񇽨&"K$yNL$**3**2*a%b)QQQO{Bw ϝӹSsr.轫kvA.PPއ՞LJsΝ_);5ʅR)oA`?;K'S z`Mllߚ;P%PEEVq?V]D.x.[Vhv:*DۖnWD" -ze-jl6/ BXh}{=6z>F+D`:E$T)eU)eu#cMt"1N*I`<( ͕njzG锧RقN,V8_ܴwbH\S ֻq|X333j4`()Wwt13iIDATHYxnIq=wvA^bgNF􍋺xuma/.{S-s?qRmf8;K.–1}AN" ;>I ŭ+qXiȪS67Vc.~P7j jjʊr\;ZT*hmmMT*)χfggU,UN ^ਘS/W:7^{붮hk߹cz܂^xΞUV_{ GcuyE7uv끷wߺ=13'fGo_~;}Uv$N,@6Էv* Xb4@}L*Bx0*|>jvVuWfCV:lk1zd2Ŷf.}cz6 \|#P--\o}~w.菾.uhU:XBIBfLg 7W/Ǘ>D߿pS_'[O>{T_]ΒH*#8 bMʹpl/eGye7 ӐseBVG$2--`Ѫ}zZux<mr9yw*`0|8>op-X ;cq???"lQO<{TRVռg՚._tRs՜Z/haJN՜ y_lJIx2Q7jo6ƻ 7ܒ+7zҊ^9sthEvR)O O-x|YC Ax~[4q; }?}gb˖Ѷ#Ljh 0 E`km`Zz`0+l,)`:`~J)}Pv.Tn.~PH̉Y-t}۶vD?:De;[[_T©`Zfbj^*~v T, m"tTP_7 (H$_Ԃ޾`V cݸҕ5Uz#*rVT౓ lpa?WNXhYpg˅*z]l#*1 Zi=,$<O"PTRT i'Hz= gfffoFjZt:* d2S\ښS"Չ`y^B?:{rV_Kw:{TkvufSKJzy;Gur hx Ƭ}M~H$¥F+Dh'D$ W{^*;'Z5d|89ز噙5Mj5z~xӶiXRQXTQP2¾lVrYb1߬-WTRr"t*ق>1/ꥧ7.]=`)t'|ZOlHfUu!$!:ؚRaKF'.[?+WUӶvfvaOͪGQxzj6*J* ekCr۽H<`?yHE;\7pUڵI GcuCy^Bbf_=1sT;zf n1+Fy.u:p*KhLF\NVKA""0"첤L^i:Z37۷uNK PB~:|Yz>vznHj.~@,%˞EC;z= p@.E/ޯBx*H"qRUϟ]7~pU{}MWwz*IRh"i0k'9r~QKJ;xxXY8huEȖZ%_$%ZN[9[m7OvhnIUaķÖ0_x\.L&BfN^^ Ʀ=w]Z}`т\.Ni?FqF{,=9O=}뺱ҝzhj)Zwvlg ~B;=d0=/ɵ p/*[a47;n}f˼с(tyڶpPx%j4ja T(T.fJ<Ey<%<$Y?3O߼=^j[@H;$*ܩ9 c}p,N%=}O|1 :X 0^=,L&J$޷odUteʒGm9ؤt:wWa՘|BD Upo{GMS\VTP /M3UjT.533:s LHj}}w{j7V]~M^WI/'??'h2lji2(JuZ {EB.V}YiRb˾;znZiam}GPfSkkkvNyfggUTdvy G"# uښUɟ7/lk*L9gwy]^ׯ/mlI3:sp?BVTY$) ް~} F(Go+reW>HhUvXpSAf; }_{smRQ\{@noFzW7;zeyn6iO?wDOѧ_ґ,D+UYHo aL~pBVմʾh`U N A  㢟=?Fn` u:A ,f2yEr9E`_G_ rޔA,݉LJ\Z|F傯s8R3gy+r*DCh> !x`nZ_N ̦MAGiS_}{E60¹cWN ki.`:N{#P(P((),S(#޸۫ZA_HXP*)N*T,-g5_ka.'f8_ޟT*xR [fģAh4 SO=Ȓi7,Xl4jzkčR) UUy.1LxVW3P*驐K+ImAnW8ƗQGUF O{4$9 xES@Q}y?ZAFynϟQqUUi8_~ͼ`;̶}y| YUU7^J¿xS,r\﹡;zϹʽWӷ[(<9`10P3@uc;t~s(&_>RwLyyy%upᚁW״.y *MAЎa}/%{}8ޞrdɲ+MӊT6wXu}^܂տd^2?)7A[<+ҎlR&>L0rf׿Տj]qI2:wWS)"sBڽE .{3, UVE ' v{w@)f~%^.Xv  y_KR^yaÅ%2yBo\̆/ߩzZV nf0Ҭ=ė:K oW|l}_̳>Mt@n $?Y ɒݔYjI ٟsiwW% s8[%QV^xs_͸ek)UUmUU+Eyjο|[LccXb#|()}1>aOz?UUi ڕEB,z ݖUѡ޼X"} TU]P#ߡV5QuF`

    UU\ô(|OnuD?G_z3q끞բWMQYYى_/R50w{d|[.cpx"9q.(`0=T3{8zޞ.TUr TUU7?.<~X R- `LdW{&xb08m^|tw7ȶ!06^QǎOfw޳tyǎxR+K܌LWwiB<sTU=zY m%X?A:y3dyS^^Vkw+&܇?K":̛*O[ġ:AvnV[^!'r֠o( g5Oo2J|x UUXQW+WDffk ޳/̏6Yx;@(@Jڑ>IV^GN}4yE/>%CoŷzƝG$z)w[l`1pCfk.[Nޱ).)aÇEnXw+؛σ7ʹ裪jE|EMn :2 pu8~R A}Y+23Æ-K =PUTzͲW4HՔWxR'%^էBQ@ Tk7}vz%,<_딀p J">HJ)f$ITKk'IqV} KEL߼JJJ[~p)VY_ҵKN1Сc@(??+UUm6+=nt xs}\"չFL&&|{KUՙE dMa\h6QZZʖ_嗭yg``BE~ۀ!UU愯(J8{8;n+) \s 8nnnハ7x0rN:Eѩ"Nq) Oin'Np ؉d"0 dl3 @; HoDhʤiKXh(>> G%p{ ukLHppW;v,N:b!Qr5quud2IݫEyMU.lgETp5ZX o 6Ҳ2Q\RLII)X, FI0fWWpwwpWWpssh4<ꌚEDGE>ǏNl*e@[~P+4h ꀦQQQɚ(+/Yfv @ s֫j<__CwK_-? oCItI(g6_h4 vY,T%d2׹sC;'t:}4K~~6~< - ߵM:Tr >r%DtT$&ɊݬA8fm^Re:\xao5sUmQfK=y إ(2##"֫<v9/'M,ԋ>}@@?77AA4G_RY3ӓ9@btq{3tv4 mQ=귘Pj 8qEr|}|nm̝4(@?=]zKK[fFбuRU)Ii sd\F𯨬5gC'-N[~$DKRawZ}Zᒋ& N~#Elc4(cq9UhsWU8%ƿs/p+n";imN69"_`_ċ \Z2UV+8 Uτ\̆KT{qg ˫qAcp5ȦIVlwKt]Ij[RRR;i4mRvS zS͊C>{ 'ڤ|qNg\iW!!u ꋛb*2w$ڢuf5?7WT݇bAoTF` >SjZlH4 v'-FEYy`J<.$4dPC1DGEӱ#aa g/B46-|$ w琞s =kddB7HddV VZG|U?}p@瓑 ;'W6/|G^tAK{nʀoul͍;v㊕|ɧ,_i/u=giPU !o ]{8QT<ZmYˆPTt &.`JN[Fw`Yy.v6رcEQ6{NM;@OVe?/DEF|+xY3v ڍl;iJJ8"s>aNa?5(0/M*h4=)n޽z"رx^Q䒴+xCk۷Zm㰛+ӯo\D$:'s-7>|+Z؟.N.3;J# pMİoVySDx900h4镞Q%I"!^fvd2qx>WdTZ,X,Ufz˲i[eY694)d-yl SthqOc螔ȈWew|V^ÎhWc$$yjC3^ J!'צ9v_2vP'yA""$Rmt9r}Ȉ,o4`]p 4 YUA=z@LmY<NƝ98<>l2 !6yxx$ZVi]X&!?=ZiVrrqNm8bNn#Gs@F!k +nEE%{ofmf-!{[7'Szn둣ƝG2V}Q#ٴF#C o>X͖ I:$ήyhV!Q zK&'ή-9IӌKuwwrO21ϑ'2"|,[5Mszeh¯3j@L؊ޟ^@i!"{K}}}:F^L&^ՇCf7)**b~L|}|,/4e"ҵc¿˲yuCbCMA}yH_bXBdd0`eVS¿ʲihи-{ve]Mwp #"<7??ӧkϏQ#ӭ[jNKgde9'f#;LFcWY4tS¯G324N8Yygc<ߞM-6CQiʦl_߫2x}⊕ٹkֲ+-;N\\lg!IӴ-{끦iY?7 IC:>rY'_%7W`` *2L, 2cF$44nMQQARJJJ(--#:*r,˚i;[Z NMӬ,a5;?YCgnBl&c4q蜐hfoV\Myݚ((,lAAɲ,/4-%=~4M4mqB||Ɉѣ=]ĺmTKxӮN3O$.fs{ͦ 䫪ZSw޳T[f٨*cyqq@Xv}`D`֧[0 <|k]aUU7rn9;<F} ř= d~`S?Ô]癷?7?|fbt7GXPdž7zd9b6y˫1vp,2Wq9p'.mFx)D Xa [r($iGNS<]tvi6r+~^nDw :ԛP/:faXVU5ud!3WPQiFύCc=iEl63hb;#7:|t~w=ew %4s?p#K&(J20TqE`:Յ$at k@zw  Iw54b۾ə~B=veT R:?{g>/0&KOdqX,ULAv7Wx#xq1w_;fPovϟw;ėa4H> 1 M¾PGA vp^eUlۗͦixyлK(K+{x~Κsv|5}iߞͰ<̷ʲ,wts2˷l]-_wߓvxxExq:6|g.!:AQ>A~1R <Z@+ն,G`Ǚn⋥{1 co$X=>(GBat,U6Hw7+`馾7'ʲ{gnͶ:n@گu$?9keJDGo[x_K8U\1آ(㟶Z >5ZH;r]D+-(9V-4 ~ٓ WYEQZMk@pef 7'=Zti% V*K .IbpV+|Ml,O8z8_oxLe@p|\;8Qb.ՁSR^im@Xa\6a`dYެiZbBZdYtCuוJ+eBb\ }ҹ?+d\(?^2۲RsoV'63&nY+eY^imԧ Oׇo>ǵwkbe sN2w$ ~U4dR\z'9ŌFqW9JEuA+ҀᣅeY^Ӵ IDAT ({7_4ܜ^F2vH,[vXv:GO?˞i[r0îJ4 #eYNӴe.`U(}*{=iK&1 NDA[J*()s.sQoOfLW~`ڭy7VqgWxpHVUu_3 o/Zs0f?sČc-(PVQj6֚bof#lqzXF67I=vc3K3xZ|-}k7]nz#U.B>(:Yk)߃o/Ҏdw;ظ3S^n.F݈ "6—(?b#|n eL5q"u9SI#|ݎZϋ a~9zy޳$AyUUf&M@Q O]ԯ8_̔b^}g7%߃ Bτ`b2J9߯9HFΩsIdfZϋܿ'3Mg,@ =7ĸ\`LJhՃۚȲtݰӎkb4Hׅ =m\e`,\kz$WEa4J:"ŚY Đޑ]C1Su K񡺫E=xqtp7ɒ=fBVcڂ76%jE~WV^ {>a/\πyr ϨqjK&[9ϏėW1mw.rh?>y<7UU}^aLW&Ȳd5$sCEIN>xp,}dY%Mc*ʪM#--^{eBnA CG b"|Y1RecɺLC\]:شAy22z@L?Y7hVS+M(Wd]~'$HPoB=0Hn&V%dd VnʠRELʐ8n7_1M4Ѽk1$F+jgxyq|d_)צfq@'M @QUVۓS_Yf:(q۵]y>xyݼJo}7vOZ7zyxxk ,yv(ޑm.^ݓ+vsN2oG&}8}I"q($G&y1>fmd=Ey<8fsD ʐΎ,k'He`t(9Yj,2 r><]/ GP~7d&?='ںu-6;Ɨ?.WڑS:Ntp5M[ܨL JpƟ RQG&J*2 k] j *,VVm`#HR8]7;TZmazw*B0(>UZ IcYZ[v'|8 f{Nh48uye;_b4JO OPn}iT4ptpM^0 wks4[ar0LʺmY\a=-{HBiZi¯FӴbM˲a=) l|RX_xNuاY-q~Njwך>+n|t%^?[i?֝C~5iʲ wݐ{dtI%Mߑg0H%&:~U4.5> \AxEQI y1 ۯb@S@wUU3wou<* `ďl}y> N|} TU=I!C=@ \$v< ,졆t yu(^WSqi~LJ+.3]vTAץ# -Xq?\]ɉj%ϭF'8_OTUrj;(+UUm|ILOw37 V--}L6_ymh>RwQRְVsWERU 7 UU˱GQl ^tw5%6m/{ ?!?Id;P(J ~Ե|ݯ? dUGk8GLC&kݛ"v)5jϵx>5gMQq{3WdL.VS@{AO?qG/^nX?9S|=]9`Y 8JQUJUWnKxyp0ޞ.3OtpLFXBNrTUM$qO*1E] _oz[vp7-5v ԌfIy'Gc7zݝ'R㌺c6M)(|YLV' eNp_to*^l2u; I-My^^ϖt-c63&<{olu$8|C/RjױWRR3bD|2nz$NÏ eDtՅ._PeV۴ xۯ\ V`Fij5"yhEk$LSR3Uވ{(?2#J*ؼ({ϸb 捏7^Q!^< Qܥjح$t3Bx肎B's@L5VnKЌѭnNkCU^.׏qШ2v&i懛x狭Aucnp' i'0IUՋ[,|̘{Ɯ@=@P8B,9IQ5|'CUU x:EQ)w{J+>^tp$Z@SUGKi}RY0]+ü>m:877;{vp7&o!`GkvUH{=*㥔w#c7'd514صWZgx8r{0M?isn`&M4a 6`- 4|ƈVyfs+.UZ ߜqV7o TBЭ#䲛%x$æ7srcjjnʉ t$cHI<,dGc2Φ˸KG`՟]7tQ=.W')Ygua[0sbu5evz_]b ::*q:V2's!j RR3?a–7ICBEmc!6(lf PufNXn܌>6G_>9pZ%alLM u:oCm̵]Y;.? ANfLԩ<  ISVaJjKHA[BH_ %`BcVr!SSf~6 dݻ13JGt)s86[u]\S=i _QMcGn~NTRX}]R_Ou!矣C KʜKo](UW|WKU关6"D>{4J O:o⨦ `N g:y25;{9VBrtHa ݶz;gNl/)A0s bt]=DBf}bNpQk[T7SR3 K3 rQuI)tNot;йj5 6/mkoYWL3ܞ+=ժjݩy_9x/K޼YJr/Z* c:xQfNzԌ B;f.ɔ=%OGMO:)I!KyzQ[ !hqc1]rv:h}E}^ۙVxTA7,FY쬧Ζ !=W׵< -6amf<]/Wt례e:u7~/!JxIQugo_}Y+#)XjN[قMiQ}:|oh!'g}* i!IH @)3ljj@Y^!t#4q)s2 z7lh}B@r)O@{6S󟘗| 1OOtFzE3u}ޭis3 MG~zp>oՌQ 75Η$^*db5ɬ1Q}̿͟gx8ՙ1sRԔ:͜N@o}onx0bDF$KLC "HXkub㰅:9)놖z:o>LNwrt鶆x8ꈎجI`w%t _3UGkbtzP#ٕ~ǟz+-3' C?S}$I1if!uFݙ9)'6kgjj'33;??󡎿 :WUY+f?V\OubCQt.t;MmNSOh==y,z\5n5L{=ׅRWTVI_JBS^ʦ'KGm^SpvIV֠Klub;;.&f06:4姀3A+ ƌ5bO_b@*֜~V 聯*:}Nх̠L«d՜HY\JohlrP6q6rK6rWLq g .nu xƤ/U^~cF`SR-I!ή ̐Xa;Иظ5̔Ԍ{\:I\6 ߔԌylׄ^RUy~LdCˎ//xaBbwRXBr|ORlP'͉qfjؼt*w-}?yc[@Lit%hʼ. I2;/<~FjfvL\A@C$u|]Km:)s2Ϗlٙs9lQ>J5l"驷3/Ԭ UUqua=~k¶ϟ:gy2'Q!zd*5@쌛M2:|wױz7x% )%5cy_ O]7p6IB5ͯ=Uy?EB ۂm|n <µ6O3@`.vAMk5חYVLM=|.&LMzj41끰 馦f$`@<(XIaO˥ _oĈ)s2gI׹`2:;ӈON(y~Cʂ7~] u|Y#bPKD@a̯uYkK eÅ=}`($0U~m4f`$|^m]=JxŠrh"NyW7:uX_Qp,evGN LtfX8yZ [!}}RRsZ颣Ofw D zw 5#6uÑRR"'ۄm3pQ،QL9V| ybIVp $,PQg>q9يmA- n( Hxkt!uvq}b1cR덵11j$lW?:<ν: !:bQSKڗN ˫,r؟2= DǞ^Ǽ36s\n^Pe%t>LKx>B}I`o'i!̉纏ch.]/ws'G2>[S/:u(_B=lHgP[ft.}$tϚl`+kKԺXN%N%N;i8]vSN%N;i8]vSN%N;i8]vSN%N;i8]vSN%N;i8]vSN%Z.3lIENDB`DataLab-1.0.2/doc/_static/DataLab-Title.svg000066400000000000000000001127251511411446000202720ustar00rootroot00000000000000 image/svg+xmlDataLab DataLab-1.0.2/doc/_static/codra.png000066400000000000000000000053131511411446000167720ustar00rootroot00000000000000PNG  IHDR22?sRGBgAMA a pHYs.!.![ `IDAThCŚ p>3PK"*EKUb0NEԪÃ$"thk;tڱSSi)EB|@[[f:RSy( B@ @$owoo~߹g|=g t]qAt#sH{kF敀dJܽf UU35"ZBWKظs!]1ՇZDDZU=2ɑb%Q꣘٩PRɃ N FmDa+ ;D([[!}t.$N EfZ}r]+T4V! ]35E*׮;p$?$Fbq# C-Wkv#WT+ʗ"SӴ](H?!Ѹ:^fɯ8P  ##/"*֍@gڧN@JD+]2&.-i늯N.l,=(8 ّF݈-y pO{b"(l!IȚ,d,ZW7u"NN뚈 w]A3A-*7>SY:?*6!VZ:0fQxM X3'-qM-lq&QAT:邖wC*eY~ۮ*" !##5k}Q/,WPF4S>5F]m1?>nO(b-rwwFpfput+K0WrτDy$qÎhG$aS=Bӯֶw3B(ϭ'{r~Ef$߀$I|JtrQN w{EF!hY wBڎ{fc,aaP_"))܇I^6<;vSmvns^$wdj0Cf HͣeEFZPu hhY1f4^cnjݱyUE4 )+|]awTB }z*@Ew\I>JfL !⣺D%4fz)xFs3olԢu{UM7ztH/NS[BNncL79"a=qEUei'!}88!D̃; @%Iyi7;~m]j}UYӊ؁C&7R074/Bzgg/U}ߣ oPn !(!nZ$'ܾ*"m${/R-ʏC8RIYDحY@دkcst@B9pYcߒ""nMXr3-gL ҦjlTÙ79޵nG> B^6^ub g2v!)JѭYd5-0q˰3Ҡ;~ ]+m{i9hL6u(aTH`nQ xI{Di+ZppbpE201K\&A~+$DG Xԥ{3|ʏהpPUZz~$(A-źBvº(G>|ҧWp2W]0ycuʢnG>}8ߢQnD&~Ǜ?]WPP~@^ŹKk\WmG<kBOtV?)[5>;tot'(H$zMW܄W+Ysij9 h}FDS84diI_rE$zB8h<7w._$D>y /}(~Ƈ*CL1}[\@5>9mcMCu7$=W2SIK!#u`mX'vvv`1CS'oΜSNNu6uzɒx4^*33 .HBऌX2k*­m7yt2????(  ʦny[ԳչyаԴ6ҳØ_;U/sҲc?\7eAyeBhEkfCN&ͪѱzuȡiHN&hEn^:N&u wXN&N&N&P)tz\V0R+Ơϭj컋qŝپʳƿcҴӵyͶzԷʩ۫ŶThnλ鶴Ӗ,S,렞Rŷ\N&㡟| L5Q*γٸ{yc?¼˯᷅ik—ָ~apO(U/ØӲɥxάAAAAAA?AAAAA?A?AAA?ADataLab-1.0.2/doc/_static/plotpy-stack-powered.png000066400000000000000000000772701511411446000220120ustar00rootroot00000000000000PNG  IHDRae pHYsyyštEXtSoftwarewww.inkscape.org< IDATxy|_H pHV Ϫ_O֊"'RiW>*TmTXX!\"C$ccfggvg6#f;~ c @0Pihh| c%I`4ጱaBrcPc7 B`$IiEUզxn@  P  @8MNp<9cO|mIVO!D9}=)-`{iڴi[zB@  @ oׯ?w!PrZ3ӦM'#@!AKkcN4x"=ZYY'#@ !Aa|uNd(B2e+}=@ ; BUU"0sr|„ ]}=@ 8B CFCCC|mևO@ A(z|7M z>̈́)S<P A"@ MHcc,0WOD!$>1*4Ms^Eyyz"@  † a>Yɲ Y!?Xc1m8TUXw/|f2O&N+@ H lٲ%;qu(y BsFD"Fbi<GZ!7O21"Q P dOyL$;p'lUUD UUŮh@  @ d?# УbVyo2&X DZ猱kNH  B q>ଞ' zIڍ1#@{{;4wb+++#==@ B ٰaI?%IsWD ?O%rTuqf}gԩ;zr@ ; iaÆ+cJgsjg?TQT<4Qs%K+OX&N,//;@ !@ illT;$H eٲ)!ȡ1c@[[[5]*//*@ P f͚5\q8ix7XsjH*ߏ.yԩNgg@ !+ccHgxd)aKg*h76wuua߾}鶫tv@ 0#@ HIsssn[[۟u_IlȻf3XsTv7/34 Cgg'[6z-diB@ R5krx^\0㙉|͢ndss?o1'?VPP#GvպrKcccN@ & NHB.S\$%K ;ayv6ss^DӱcEB?0bdeyA7l3; @ "eT 8aÆc͢m]9pl@dl(HƁZSık:o0mcu1r\ػw/{4B)SH_ ׃TTt|mJwWnL̘ikk[kN`ɓ4]ow @`FB@MSSMv'ZlOz6AY!Cz,UIOus;Ԅyйr%ic`7v%Npu[[YӧO=( /koo.Ey&$~AMMwcg{fEQڄ\N 444|>ߟA Ʊs`X'=ԗ^Af̰5hhcRØ$׵j~;$~?A{-huFWE{{{Yv P sc3a>>eT ~-܎O9SUy-ʌ4vB{߃z=If"bmD)…`'>_Ȳe_?FCk׮Mt@ 0!RFAΦM=68SvtuW\|aoMق(,I0I5vMT)x!"ts3cKGl)jE& k)e"DRڼyK'N=DӴex FY;|~C`AU,ߏq(Q{}HyڴiΜ9S3|W!3pQWLiaJ; 1JQH%; )MMMYtJs?<-%|EVN|~?|>_w]4A$FWG"ᰫEkkAJJRGD*qyL1^&FOWrα)őH.?|A#X,JF",xU\ ~kSJ𷬬?vm{r%K䴶 bYN2@ (+DB` !S܌M%ȦM :/!((*BNn}GkK ,lj"2{6JȕsM, ?[۷szX8C!oll ' )OΛ7'& u_wQJ$;үx>B1k8!d2* B6o<2X%3!RU[nRZ q'cѮ `|y9 IJ#򓟀q3sqd&~ ߶" nᥥ5~JnjA޽|N؃wY:˵KUGS7o qe#;'q9yyڹj,\tttyJa0VRJoP(JbxVi#*` essߝ?־P_B!PAFb4Mnܹ1B z>$ J$I A˔TM Q 1jA3EEg oknN>~:5ᣒvq 55u/><#W݊ >pG(P_8)A)K(! @0Xvk'SC1cC뾟Ξ= {I9r zr>d11 G5ׯ[ tx,@q;=06]N3q-ca/B,IқSNݔʐR:4BTT+  7NS\K$ + lo\6c`gYŝ"C~5lz7uqr"5=;z4&s/5 \y99o>D) nll<J|>߅vi]6oFdRdr%k jwqۦo˲,f2 窬СCF  _ B(9ϡG/x59[`1{vWG)!38=bYh/DuBQ?ejDRZ}{y~ ti(UҥKZZZFBMqaĆ ݤ )NoѮX ;~ 1HIU>Xp?gHq1:fYK.9"!%J镌{1lٲ?isu&ŠxFfy>P#bc|{M{c͸xt<3Q?`?^w ĉ @S fJFBxF0 7Tiȡiς /}Ij[v-e '\TsȐ!&?pgEQB. B\4=A(0B#_&Fܹ 8~(OL02M9P @ **"E;Eq-0jP B7ch$AYQJ ~b:!`xILeYƈѣVBh=s9NbcO?m" &ONL-(N<8$OLCaa:NƘ+q~t7A/=(pW'(>{;] x"iș ~]9s/wX!!30|H˩imԫ; 6΢FiQGNJn.pzp:!9yy:lqѲH09@2Xǝvf-e o\de0\j2Əeh65??m\ʬ G555UN<Փ(USSsB [zgVN = @} Ù p]eKsRFܒb (((*B^$UUU31Q/,΄ ,1t3j"ۜ(?*J0}:0/ }nPfŭ3Nwv{c"-εtj~xfstѮ7p G@]J~SczB Bh!W'HnxȊaًSUVX!744$iiEc$k`(Z2w/(ݾ['x⦛n앙,PJ(PHɋ{1HWӴ]Z|'-[onn/IHMrNMӾ6OOI%COb]BJJsE9lWh;ݼI̅B),j% *AGeeejS[ %<>lHJ0c`+LL1cm&z}!AƎg|Yԥ 4m*:x²"Ǐw5 '[iVV~\L[qo',X,]; п` L) BjB?5M[m ) Dc ]O_6 a@0F5E؉wk5j]lx!!fѢEEp(0O---)/|>q1c`7?WbF+o0^Ve9cUUN`29i~^ J&7N#| O"_^(ʣ=<` TUUoj{sM΅ (bY\w4WP/:1gxd}>a6S{.tQt : :(L2j~\ )l7QXG<=@vNs_;] z5z _X¨Qztg0'G7QE@87wьQGnN4^Z,]UU{H\Es:hP>4YoCvBp9Wh ;&cPWi p R]mDpL/FUUE)Uqq1ýx$t@aa[[[…A,J)Y`Aozهr~8Cxr&cCxp* IDATbX+)?蚱`3X-@aO}}xUU_F! >$/aS21t((7|/Cϻ5S',?Obnٲe~pPfڵ`N}K$xmANS}KKbBa3l..'Mң#G ؘH>FȟSSBu<X$͍O()qgB_@8,1J zܭ߸fBHMMDA3s[ZZVSJ{jF7(Jf*^"p݊+"?xs˸m-^R5*";&xLR: ]$bRZ^7BŔdWn=rx?VY/$|PJ,a&I<ܵkѰ yyyk20,ˮzV٥FƷ.HAGVMs"+KG8i.S 8~.'OCYN>YQ0tAfYڧ:}Ʒ٥Rp#t>eS^AqEEz<=nDZCƍrՁ֭Š;1❼<]mݪ8q }@uMm[ f΅SA lI80?n~};/d͈7Gu!XFѣ= ج,FXڢ\͚x(WE_UUtLPJ #'O0V۪C)}t$nsߎ*L7ҜNoO999EØ(M#]}$% 4MqAs}eYYُf͚eoe4vjEQBݢb߃G렔Ny1 DHE(kjjnauBy=AӴK$IzRG)!_g] P=0'JKKwjY[[{i?|K I㎂+ci0rs*ta _WWh -F/ SJwΛ7#wPJi>^8 e-ZTDatF)}x]]]|V(]\SSsc\6IΈM^^4$Fpj&$2 ~q.x-{LlۖM ̘Ze7ٽum^62;9̨*3xf㛲2]٥:@lĩyN.#GA7=ztFJ !䏙{(c9S^nɿR+-aB`ptKKKoPb\,4v_Q4fBocOz8ՔR%XloI b.]_٩RJ?Ş>VB>&4|"H=c,Mp |陓[[[{juuCu'J|f{n! cпOwόb=XUXX8IGaZ颔BlP[[{f( 83\+kQJ/QeKAEQ"j錱;c\ BMz/Mq555165;uuu߮b} >MV@o2i]stRz2t1`wIƣ'հp7E)y%;q~Au}T[[{ؽs+,XpI@WTK.b=0+++뱜eH7V/:4q1$5Ssf YnunQQ\G2߷ {"y@'!>_ӽz &w=4 ֖n99k-m̘ 7mnM6 G?p+l\n%~RF'[%< .1^ɪ*s !vb}+!g1CEMM͹PifBj0V.\ Bfx"$F.W{ه4 :ME頔.3n&!MIެ^,[ $b\7:kĤBhИ /7!EBȫӦM{&s+EQxumm4M8iA쮠^;y <"oZ54|?L=e)o oĎ$B#2ۜVԂrc,7> Btfp"cXa2eAӴlλۇ̙3U3RƘBwVRRU ;o޼]c _0k]cn$ zy'xRz(l8<^ 纺fÚYVVy777ލٌh4rɒ%6SJwu2{V1 jYowH7, 1cYC%nެ0c`ǎKKYytLc'h$EUkkC; )0>ސ>'kG kKAH$2 +V׭[wi߆a؎%ƅN`|;]W|ƳCa\n5t1%˧jLEQ^z( cw:e oz~XTT$~8=;wRܟhAſiiiL 2 $" 5SJ_${'o@F:b̹EEE{)E?2ƞVǟ՟B. B tk!a诿9ze5X5\{^zZЭe' q;P 6.x1V,*Џmmm:Y 5㹠oS+۾y߶on@pGL5FЦfKGTd1i||zdrKe~'}~(X&:jse$IR}|!fey"4>![[[V,0? dKTiRϱL:8Nh{՛999z]T2.[o۵GUWW{]hI)=z:HR8+IMr!cc`-HBO]\(mɵVWW yxaJeCSVjbҿB-**zpeR⌇2!J0x;rR,*)*!`0w-n2EMMsu EAhc(4>t2|ix*/7B~ _9L߉#cߡ>'E-]Pn.PY |ht6r$:P?_1vvB؈KFСDPC~? DbMӠi\:LTi5\za Pa7iڏa{8l͙ e, (nJ%E苩nQeY`EQ>~sp.o |.d]B)}[! ́PwRo}lB ٿ” \5+V:]9Wx u6ec |pr^7 cg <"UҥKf0t?ehب[C)<B{`0 ]]]ݫq4c>劢,ļm$ +1AbF1Fm$ܷd#·=$.\X->xEQ۽`EB!_c|~/i 0& BțoZXMK:^s$j.£O[&aw A @[,K]Ǡ~xӰS.K-/|(}tΝ-.^/;c@,^ I僆26C `gxGوFo916Xx1BOEoZxBnp[Ґz[4sa.^^ 4ZP\fyFU]EQ }q@D1 Ґq(pq;,u ébb )/ 2Odf,*>=WE#NByyyZ߽{wҞ;---AV.Fqn8@Rr*a]eW?@#|_Q;1oWQR6Уw]c,ȲIF"ף] ϟ5پm>t}b1/Qk33Nm_@2׵&-qd5ʱg{` 8zNe h8P> 4|l>9&Iq2Cm=C="S8@m-bK+(ߖMn﷎ů|ʆobP"5}~Q3@B'ݍ e4 ;1{`0B&Nl,zu,$c.H?|K ~#:gɒ%9EQ&H?a&WWW@G$6}1wâJR #ڣ]2|r@)(ˡ|Gr&@ϕOVf'{֕NY/JY544TDfx~㫪:zݘM c/:pbRAhѢ"@{EQ3nW0uʲ}7)>uuuSJd^ @`ic̍b~0w=pa,}!`ڵW \\QUWW7VUU@ VUU9sJ)}F@EQbҷaM9M ƗU'Eyn|⃕vţLW2<$ltKAÁ247F~S&Z=ظj]Ŗ-٦$}ڞ=ȿ^)ۑ^BoMzm'`M+;=G⃶5u*v fj3Hhp(ODjkk. =6!17כ 2ㅅ?N'}hAqz:B~eu&]y:mAWUUrV( H=8TVMMͷ?hNOo5'F˓  U9- ʧLs^$؉IЍ4~='zTjz9gFc7s쫓b3ncugj ϊY%px>o>N7eŊ4zNU9/!7r)!D"7:IDy/6w|IVVV%mOixQW2.u'u媒9ձ;ڕ$!ל.:t Р9<rv`jIDϧG.8hoζs\g[v )իvU E@76h+m+4w ßXYin!!d0 %I hvfQv y?78^ [LEQƂvli&ݬDQ/H_ =c/(`=_[[{j`=Lż~ִQCmmIk* nꍝ,;z%I~7b7V|K8f[&SןifdY8hX'fԐ|drXjڲ~t8=H4[oQ׏ BK`7wUUF:Y$;vȌ]JVQJl)@7sb_/\.*augEnA5q8 #g3Хy]rχmc7ǮFSP~n |K G@ǁi7 5s&r~sH$[F^}mW^ *Z6feD zW[W1ٝM9v6n!fEδBjcKSK߿+{%!yƘrJоlq<~a6hKEQb5550rғnokkk oja|Rڴߓ\CosJrALW ?MJs0C, L+''\/?㮕fVX!_~:tgQ_TUUNseܦڽRI剚X k$IM.kR y$)C$;v>e0OWWI╯ݙ: <g1^ !uS\ F'Cm]Ÿӯ'V9()::ɓMփ$aĨQΥv˗#|9|'g2mdУ9ī oup2 IDATu^:dlj6ēbƴ]cNٹƐ[ϐ>K`Қ>C,4m-HUA ௒$TWWApXoRJK݈MxT[ԸC)@91vuod~5㡻=x )۠Τ6|~dMӞT8̄iN*A?BF ^;eYިF7B,Oc@m[A0#cz\VJ)h45!D.X`$WQJB-0C%I:K^}ps(O u-pɾL: !4E-0B^=ZK1c̓ {^1o1Й3g~J0ECc'A\ 4n&c.GB0aX]r4e0RmwvW|áY̥EEf$)e)T?E:+TQYn研w1Ly1 fRa t PZ0zo99b:W tyw*>xt,vJ00ƺbiH̉9,˷X6(NDYs!z9 !N?6RʼF 0p)?p]`?U7CUU}n]4, F; B-<<٩2Wb< \5v5,_BaJT7x`Pdѡ;bn~Ѓ C&%1mS޾鏯iZ:z̍K=dPۄ1^H0 p1v-J4ŋuvvi =[2ݶ?bj^䵽!0n" *Ō xwEq,jR4Օ$I۳f͊RJZVTWWו3#4s(V$oj:*>'vXIEQR(_6o$)ߋ1֓|횦%'_AOC"tn\ook,#$b1ȲsӼ;V.x':`AYХжp wux\VСzj/ص+!8rl߼ٶ-,'Fe`ma!@6.  87G/3'> }nBiT2`j?p$5$0w=){t@w`?=h7FY?QUu!hnAQJ+H!pb"!\} 2t[MFˬ?u|B%ks&z0*VB>HTĎC?wy, BQ-m e҉ФM]ihj%2 49N@Ό1rV a]MyUQK41mʾ ORaM1a.aBca$\Ww!cVX!#1ܓ< eY^͙LZ`yu04s)+`E/sJB EF13TK<"nج^0XZ⨰:Xk5;eeapccǰ# m9Ə?Xi6vI4%zv)Z| SB=$)Nox=~R݊4^$ B0Ʈ Nຝ72Yi ꢞ1i=m%+#r`T5m ڹVT۶%DƏG֭Ea^A ;ژ,w7]1N8ƱsuћQ'3^-=g{Xwq1t(6ޢ~L(oXbzCC}[Zx1v& 4I`y^] DSJOd g%!d@'(i!cqŨ7¦G$I[X'N 7lk1e!lԊMDߋ7ٚ?^kv5qAB4>s9be˖[WCg AhGo?8p(ތ#a#FtYjbX̿^tvض#15R'^_pÇQ.;;.`0͟~>%v}ngCK[`c'šK1Ig4M۫qY,$CEjjj2ܶAV3o4JTp0ϙ9sJ. \qwfH$;x4hkc^Qm=d(wqjL %@gNB XaшOGt瘍]^Q!al2FkD;'Kc,9uB>XVn!O 2z%'s*lc>N !υ5=q*++e;C(tQB蚉?횎v5]f3 \tn\uv=@>wE nIE,4 9y$(7ξTӵ!;/ԎPoKҮǤKAVU+Ȳԋgc^ ReGmN5FB7ؒ)wv|ocyyy7(!@^H}C_eGuvvM z'e `ҡGBWCUڦ5L2e7qG~;WMʴ0oKe(ӛA39HL[Hg1b4wu41 g$t+~=$@ SވhciG ַ6))- c[}~R[p9{_}Au~c1詥6ȲQs,nҦMz!mSZzɭMo"P r 8xDQ($MR989*GTrQ)(-P44&ٙ1&iO6μNy-BYyѻi(_EUeeVa/ߛ+8 J)'?Aa+% A5 ̛16쁊G"XJ[23vhӅM!~`cC FZMӎfrA4"¸:|^סH$՝""\ r^;J)eX|0j/ /Bx"U{Oqq7&*9QQBp%M֙;wnw&}Bz(IԴ >pٝRi@ _7O?N۶m*_rHieO#sMC)`3&{O㻟C.S `.pσe w֣1s-Q~3Sky+9JKՅޮ. ŭhQΟW0+jk܌`g:;Kd'|>tٙ )Rx jZHB Eow " VJib>\oY"dS6 {MMM)E*eFJu]VuM7Mϧs.1`- oٸZ2cCp e:9.̊2u$` X< ogQq4M*瓌Gicݧi/=(b:XNi!fy/χ[%9`A;p,O 7h^ }FIHd!v-ޡpUkJGpV0sg,9C‰i cAh@(&4 faҥX\SKbҥ9_t XX&9=H@͊Ej.1$$FX^[!ޘYJ]׃+NdTJ3cLӼHqH1v10vON߂E㞖`ۆܼV gp%{AxRXٙ! Nez)ue3 F/._Ǚ/[)&%ic!7L l#`_JYh c̝JY)5*׼g1wצ577glB\v^ȷO2];3S50jv qIiAi*Ńm> nee)e)}%D6t].MiV)jGK}j,Z`0σ0}$cld\y oᆹddߋgTT? }EL/x0H<0zwD~?nnnNB566~.HC,~|aܜ-B 6hvB; L@g8#`x<%OvVPUɷ8vNOT :ŪX2|5Rivn"STUCti{|^Sl7μ(ChƤ3W>P9%.$ Cq_\(=/RO !VCo2YMd1*Oh][I6dBuܼ"pΟb](qLGYXXd/0Sv- !++uZ4:D"=?ۜ>XpkCCÇ<otR0 h7XB/?pcsVWoxݞO1 5a8qnڴ]S.5 %w,QN'\)b!Nc?bح^.!m>ؼ0mB9LuAt˙a9.y(yYʥ]!2mhP4bx#U*KfETwyh6߼`BmS,_]+e {/<f"`Rfw E 6f)_0Ir[ D"<3T{Bzd)J/&r hhh!muA^aeFb8 遀1ƾ8Ts-k &T__rv^f(e_ϩ^a)b6oi4-ku}|s~Cl޲#g h4~o1vUyy!xJ1޽P#*Rcw׭ĔB7#@q/,M`ñ-j[QQ TTX=ᎠOFBCjxG= \^KUk{+KP/Q!ram޼Y/ jA,((/w3ټ&4vV Rp0@}!"2z`r9PΚ5qrqbRJ)eIIɧNFgF4 _"ga #g'tৰKb7Bhor>q2H)(^}d:Kc3َպ.Xwi+9k8Y2)hvMH)%۰?w ,䅠Ǟ=k5M;s޳w G2ƾK4>;h4sQ9Q5DMcLduiӦv9D} g͚UnКwʩ/{̆ HIÙ!"% f@Ix{w0i#X]ӓV )tH\QՏڪpN)Cf{ϧ%fSBd{rr`_!;gօN1ܭ ρixOT2lζذW ;TnB7OEs"c+ĠpQ=It\YzrCtmc BOe9[/_80_Pvx^m%UwyՖ뮻ί@ 0@1#(}˧2 Mv~ʢp걝xo_:= ~JkP^yÁNyhPy5}:p≩&c69ByfHII=iA¼r)//Ukkk+rΕK[? 1T:V0ւ*r |~$ Tc%|`A _ohhx:J4\-兦iL>clRj(Դ4!*DӴytx|ͧihp455}4?",Q4nnn^ocg "jf7*;dTAMihtϟLlBw ָCX4$ 缜G"'wB Ow)=?}zvSc޷ذ*Cu2kh8hDWbE&Ɠįwp0ؽanTcW+G7666*ݑ&BTC_UTRH\sҿ4\)B|q1tMӅ~ A~I cTWWF6x<*hhlliOPe  zN$Bb',ML UuʣDjk>u= W01<hܟ;VX \yۉ8`eFpW{JTKGKg>$!IDAT |2lUrrA2%}GvEv'a6w˗/ϪL䟒W xm]wݥ766~ Vj0u*v1uLkkmBn)7)N/"Vxk`}dqX I~d[}K,ORgXjcd 9O !~ @I4ņF!}jԜ9sv$K X`5?vz4D,bQ|ZqhRyWBP$+#['Rʇc/>K%HfU _4K/qf ݙ/뱉S  4MSU#XBERʋ@1 KMz*ٙ=$ye\6Ƀ`<9TFׁhs}T`T>iF⏛q!ě^%8 bj[E5Xb.R^`Z[[BNX ^_@| Inll<5Ld B|8A-T4dہ1VLSg+tJ%V@%vWۖ |B4nQEfR(Z!֔A7oTYR/eZ7^;|ׇ NyRD^),,ro`0Y#91Fl[p=RʜM"މD"W-Nb[nyS獺W06EXur  !|=0^ *-yj?RW"(Ƌlum~ 0@>lt;CFY]˜ z㥔ذшr Lpޣ!L,HQ8%0xG6n&fH]o/VTTR9P3+/rǚMΉM1v"ȭPqV`>puשz8&)/>u;I|AU(<ַB!Ada֭BfxOq]\T;x>5&K(W٨s܋8vmlg>/ uݲp V&g*E׉84X7pE,Xb5azUh\gSS9篎@vn O\9vs?> u^u_QOQ  bNkjjZ#ZGGG Zw <C\ۏZя,o[`+fSd hsi - sfUH)CkRP__qB?sο,AoM6zR7S:rx@4444!B*_ohh (Kllpp+t*R@H<klU7KӴ38|u/ ÿB:{MF 1>pSϷ25%d;I9Vׁ Qmf3g;90{Dݑ"m^炖VUUuuu;#/i^.F#EqX 2Yͳǁ=r ( ;[w>pBb/|Sb}s>W 'ǘpο ̂۶mےB曧Xe?~|}})yZjU'%ԩ{r¨#gHⶼRD/[>}8bKkx{vdb (/8ZKQ:+ω8fM"c۵sXlbp^;4͠ÚTyRĸ ?s9>|`q,7/W*1MKѱjy?9H$Y";%lt1vfmmRwp ׿3}#p!sί𯵵X08 az5,#xcPLj6a{9牢XT%B4m4͟6t3ƶ3ƞXla%'˘KosћP6W.M92ۢ«ԫxLG3/`#Spk ;D^Jؽy` (D"tj 0Ʈ 2g܄#i^ GPu1~9o޼;t9p-[np~s(aɰ?1>+cq¾m& `7lefEg5M{4?s5sp.X0}uxRJUPgoll<4O8B6wgv*#=}%_n޼yaR+n <9x a݇0O>ki^:4*Fqhcǎ:)eSx«jeS$pɇwAm$߽۳:H02t+zgpLPc<^V+;lė.) Mݻ>P]]膁!R.0 X7o\z$y!`>Ik9 VX +[J)wxw#"8r,o3z]wݥ,6Msr!cTJYP@ ,^Xc2^F;Ux~c'o .[Rʿx~2~Kc`y Z +K{CJJaaaKG'"!¶mfeFz`:{|T7}X ǭ竄$LiǯY_?PED3#/$`gbT/#8f`ڽX{{{HmA!*=BoQQ‰D!$C?ɶ_O_D9% S/fzĠA8x !t]YLLޫ{WThl@g;`䛗$3t1v\"Α#nfP˽|R+|l .F]}}}) 8hA/n9$bbB!ABTTTRfש.&s~Zfc '[AL2}'>u2 iwb ~PQ"qԊ1=H$ t|)eӺu[ҝ q¶^|( $C 42x'٭,Y0i:ds]>u~VyUwg{on@@R{c'zyߛwV CΏ clB?( $C˗ ӦnsLp}%tA>HwK]e-5pGz6Pp,fw-o7 { = B80zeMD{{{SP#PgY=A1=ATVVm߾ ?gsg I]nϓO`ƽK/Դ-VTλQؔCw]baQ'VLS0`DP  wkj OF7mmmmAd$AʢqbDB8DI$)((,eN9v/B 3_"֯هn{LY-%+g2ieP`A5%b222b51RPPpk>CāQi8Aڴ|1~Ͽo n L}(th0wI!T4l_rsL2Kchkq}RWT5+xpNRQH)/YnfKdd֭o"OsNALd qt]4ͳ,z~a{XzPJ6?5c3~l^-m3q3J$>|e } )$c#&l\xP(ATVV@(O'^B6LdS,Mn_X>gw0:>U:p?06hooPS%r9g &-_PO6 &[pdX6"~~b2~ރ^ʴl`ؠPӀ Ύc|#F28@`KLmm͚ HSSqP #z8 @oooTxZ&S9cv`/S>q^'>0~JctNy_Gn*}O Ii*V̛7y A  [nDJy!PY%^lg* ( ظD7fX,p9f(,!^|&%TNDOO4Q  BXM|/|P@H(555{L<p1^Wf8_ W60S螋__J ]3q)8޼RD $.8;Wx!^cc֭: VѬ;Z Ds>ALLv 4o~* IJ=;F/B*i6 $ O>3ϼ8=Wf3[?pΡKL@rCMMͳc1A!D}8% &(d;AD?ܾ}Ry;% 0:m+Q!HrY^.߶@P℣qܺa-4:;;Udp A8(Ru C۱cmRʋUn ٺJLiZz-2d@i -G(v], Y>W'=3iZK$BuuwUq"xE䜟1q !A~ȪOر#j4ʹMMArhϞ=X)% Àa~LDc:3my=g ^${saaA($ "WP eZZZC2[T"unw?K01'-Hcd6YJߏ03񚚚{ & B B}OOEa3PPPT 2tAzx'J)188>]H)?L>AA  MKKf_D<}~*cP)%;@H$kkk AA^P!Ay1a!G{꒽|ٲX^{#6}=}k,dǞ={N`  |AB rkii"cl 11tzns~f+5uD"A=N4Mz  LP@HDعsZ4`y.5L/hiAD"!񱖅:H$r%K  sB)RkDru\gp4ϔ9XD"a 2}-% AW_}ui8>OZWizRW&j&FFFH$FpiWWVVAA~P@HD>a;vdIoC]G=gt~uOkʿDAA^P@HDimmw3{>RJQSS3XB  qB v1<<|%/(ͭ?ٰaC^O  T NKKt2ƾPJ:x޹nݺ AAD  7mu"NaoLӼ AA1!ؾ}2)?1>xO5M)A1ѡ }\\ y>Ax~Q]]xO  "(1yWW1bX='mR'cj`eeAAD( $bc̟?MӎR@42e=EY@  ( $bRsEJKKTH)H) lc az1.| ]^zHAA>-+IENDB`DataLab-1.0.2/doc/_static/pypi.svg000066400000000000000000001530021511411446000166750ustar00rootroot00000000000000DataLab-1.0.2/doc/_templates/000077500000000000000000000000001511411446000157015ustar00rootroot00000000000000DataLab-1.0.2/doc/_templates/layout.html000066400000000000000000000007061511411446000201070ustar00rootroot00000000000000{% extends "!layout.html" %} {% block htmltitle %} {% if pagename == 'index' %} DataLab {% else %} {{ super() }} {% endif %} {% endblock %}DataLab-1.0.2/doc/conf.py000066400000000000000000000222761511411446000150540ustar00rootroot00000000000000# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file. # pylint: skip-file import os import os.path as osp import sys import zipfile import guidata.config as gcfg sys.path.insert(0, os.path.abspath("..")) # Importing sigima to avoid re-enabling guidata validation mode import sigima # noqa import datalab os.environ["DATALAB_DOC"] = "1" # Turn off validation of guidata config # (documentation build is not the right place for validation) gcfg.set_validation_mode(gcfg.ValidationMode.DISABLED) def compress_tutorials_data(app): """Compress tutorials data folders to zip files in doc/_download directory.""" docpath = osp.abspath(osp.dirname(__file__)) tutorials_path = osp.join(docpath, "..", "datalab", "data", "tutorials") download_dir = osp.join(docpath, "_download") if not osp.exists(tutorials_path): print(f"Warning: tutorials directory not found: {tutorials_path}") return # Create download directory if it doesn't exist os.makedirs(download_dir, exist_ok=True) # Look for folders in tutorials directory try: for item in os.listdir(tutorials_path): item_path = osp.join(tutorials_path, item) if osp.isdir(item_path): zip_filename = osp.join(download_dir, f"{item}.zip") print(f"Compressing tutorial folder: {item} -> {zip_filename}") # Create zip file with zipfile.ZipFile(zip_filename, "w", zipfile.ZIP_DEFLATED) as zipf: for root, dirs, files in os.walk(item_path): for file in files: file_path = osp.join(root, file) arcname = osp.join(item, osp.relpath(file_path, item_path)) zipf.write(file_path, arcname) print(f"Created: {zip_filename}") except Exception as exc: print(f"Warning: failed to compress tutorials: {exc}") def setup(app): """Setup function for Sphinx.""" app.connect("builder-inited", compress_tutorials_data) # Exclude outreach directory from LaTeX/PDF builds def exclude_outreach_from_latex(app): """Exclude outreach directory from LaTeX builds to keep it HTML-only.""" if app.builder.format == "latex": # Exclude the entire outreach directory for PDF builds patterns_to_exclude = ["outreach/*"] for pattern in patterns_to_exclude: if pattern not in app.config.exclude_patterns: app.config.exclude_patterns.append(pattern) # Suppress warnings about excluded outreach documents during latex builds warnings_to_suppress = ["toc.excluded", "ref.doc"] for warning_type in warnings_to_suppress: if warning_type not in app.config.suppress_warnings: app.config.suppress_warnings.append(warning_type) # Exclude detailed API documentation from gettext extraction, but keep api/index.rst def exclude_api_from_gettext(app): if app.builder.name == "gettext": # Get all RST files in the api directory api_rel_dir = "features/advanced/api" api_dir = osp.join(app.srcdir, *api_rel_dir.split("/")) if osp.exists(api_dir): for filename in os.listdir(api_dir): if filename.endswith(".rst") and filename != "index.rst": # Remove .rst extension and add wildcard pattern = f"{api_rel_dir}/{filename[:-4]}*" if pattern not in app.config.exclude_patterns: app.config.exclude_patterns.append(pattern) # Also check subdirectories like api/gui/ for dirname in os.listdir(api_dir): subdir_path = osp.join(api_dir, dirname) if osp.isdir(subdir_path): # Exclude entire subdirectories except their index files pattern = f"{api_rel_dir}/{dirname}/*" if pattern not in app.config.exclude_patterns: app.config.exclude_patterns.append(pattern) # Suppress warnings about excluded API documents during gettext builds app.config.suppress_warnings.extend(["toc.excluded", "ref.doc"]) app.connect("builder-inited", exclude_outreach_from_latex) app.connect("builder-inited", exclude_api_from_gettext) # -- Project information ----------------------------------------------------- project = "DataLab" author = "" copyright = "2023, DataLab Platform Developers" release = datalab.__version__ rst_prolog = f""" .. |download_link1| raw:: html DataLab {release} | Windows 7 SP1, 8, 10, 11 """ # noqa: E501 # -- General configuration --------------------------------------------------- extensions = [ "sphinx.ext.intersphinx", "sphinx.ext.napoleon", "sphinx.ext.mathjax", "sphinx.ext.githubpages", "sphinx.ext.viewcode", "sphinx_sitemap", "myst_parser", "sphinx_design", "sphinx_copybutton", "guidata.dataset.autodoc", ] templates_path = ["_templates"] exclude_patterns = [] # -- Options for sitemap extension ------------------------------------------- html_baseurl = datalab.__homeurl__ # for sitemap extension sitemap_locales = ["en", "fr"] sitemap_filename = "../sitemap.xml" # -- Options for HTML output ------------------------------------------------- html_theme = "pydata_sphinx_theme" html_logo = "_static/DataLab-Title.svg" html_title = project html_favicon = "_static/favicon.ico" html_show_sourcelink = False templates_path = ["_templates"] if "language=fr" in sys.argv: ann = "DataLab a été présenté à SciPy 2024 🐍, PyData Paris 2024 et OSXP 2024 ! Un cas d'usage avancé sera présenté à OSXP 2025 🚀 — En savoir plus" # noqa: E501 else: ann = "DataLab has been presented at SciPy 2024 🐍, PyData Paris 2024, and OSXP 2024! An advanced use case will be presented at OSXP 2025 🚀 — Learn more" # noqa: E501 html_theme_options = { "show_toc_level": 2, "github_url": "https://github.com/DataLab-Platform/DataLab/", "logo": { "text": f"v{datalab.__version__}", }, "icon_links": [ { "name": "PyPI", "url": "https://pypi.org/project/datalab-platform", "icon": "_static/pypi.svg", "type": "local", "attributes": {"target": "_blank"}, }, { "name": "CODRA", "url": "https://codra.net", "icon": "_static/codra.png", "type": "local", "attributes": {"target": "_blank"}, }, ], "announcement": ann, } html_static_path = ["_static"] # -- Options for LaTeX output ------------------------------------------------ latex_logo = "_static/DataLab-Frontpage.png" # -- Options for sphinx-intl package ----------------------------------------- locale_dirs = ["locale/"] # path is example but recommended. gettext_compact = False gettext_location = False # -- Options for autodoc extension ------------------------------------------- autodoc_default_options = { "members": True, "member-order": "bysource", } # -- Options for intersphinx extension --------------------------------------- intersphinx_mapping = { "python": ("https://docs.python.org/3", None), "qwt": ("https://pythonqwt.readthedocs.io/en/latest/", None), "numpy": ("https://numpy.org/doc/stable/", None), "scipy": ("https://docs.scipy.org/doc/scipy/", None), "scikit-image": ("https://scikit-image.org/docs/stable/", None), "h5py": ("https://docs.h5py.org/en/stable/", None), "guidata": ("https://guidata.readthedocs.io/en/latest/", None), "plotpy": ("https://plotpy.readthedocs.io/en/latest/", None), } # -- Latex macros for math in docstrings ------------------------------------- macros = { "FFT": r"\operatorname{FFT}", "PSD": r"\operatorname{PSD}", "sgn": r"\operatorname{sgn}", "sinc": r"\operatorname{sinc}", "sawtooth": r"\operatorname{sawtooth}", "erfc": r"\operatorname{erfc}", "erf": r"\operatorname{erf}", } latex_elements = { "preamble": r""" \usepackage{amsmath} \usepackage{amssymb} \usepackage{mathrsfs}""" + "\n".join(f"\\newcommand{{\\{cmd}}}{{{defn}}}" for cmd, defn in macros.items()), } # -- MathJax configuration for HTML output ----------------------------------- mathjax3_config = { "loader": {"load": ["[tex]/ams"]}, "tex": { "macros": macros, }, } DataLab-1.0.2/doc/contributing/000077500000000000000000000000001511411446000162535ustar00rootroot00000000000000DataLab-1.0.2/doc/contributing/contribute_code.rst000066400000000000000000000026011511411446000221540ustar00rootroot00000000000000.. _contribute_code: Contribute code =============== This page explains how you can contribute code to the project. .. seealso:: The :ref:`guidelines` page presents the coding guidelines that you should follow when contributing to the project. Fork the project ---------------- The first step is to fork the project on GitHub. You can do that by visiting `DataLab GitHub project `_ and clicking on the "Fork" button on the top right corner of the page. Once you have forked the project, you will have a copy of the project in your own GitHub account. Then you can clone the project on your computer and start working on it. Submit a pull request --------------------- Once you have made some changes, you can submit a pull request to the original project. To do that, go to your forked project on GitHub and click on the "Pull request" button on the top right corner of the page. Then you will have to fill a form to describe your pull request. Once you have submitted the pull request, the project maintainers will review your changes and merge them if they are satisfied. During the review process, the project maintainers will check that your code follows the coding guidelines and that it does not break the existing tests. If your code does not follow the coding guidelines, you will have to fix it before your pull request can be merged. DataLab-1.0.2/doc/contributing/dependencies.rst000066400000000000000000000071261511411446000214410ustar00rootroot00000000000000.. _dependencies: About Dependencies ================== Dependencies are an important part of any software project, and they can significantly affect the development process. In this section, we will discuss the dependencies used in our project, how to manage them, and best practices for keeping them up to date. Managing Dependencies --------------------- Dependencies in DataLab Project are defined in the `pyproject.toml` file, as officially recommended by the Python packaging authority (see `Writing your pyproject.toml `_). The `pyproject.toml` file contains many sections, but the most relevant for dependencies are: - `[project.dependencies]`: This section lists the direct dependencies of the application. These are the packages that the application needs to run. - `[project.optional-dependencies]`: This section lists optional dependencies that can be installed to enable additional features. These dependencies are not required for the core functionality of the application but can enhance its capabilities. Among the optional dependencies, we have the following groups: - `qt`: Qt-based graphical user interface (currently, PyQt5). - `opencv`: computer vision tasks requiring OpenCV. - `dev`: development and testing (linters, formatters, etc.). - `doc`: building the documentation (Sphinx, etc.). - `test`: running the tests (pytest, etc.). Deploying Dependencies ---------------------- Production ^^^^^^^^^^ In production, we recommend using the package manager that is most suitable for your environment and that you are most comfortable with. All package managers (e.g., `pip`, `conda`) are directly or indirectly using the information from the `pyproject.toml` file to install the dependencies. See :ref:`installation` for more information on how to install DataLab and its dependencies. Development ^^^^^^^^^^^ In development, you may also use the requirements text file to make it easier to install the dependencies in a virtual environment or container. The `requirements.txt` file lists all the dependencies needed for the project, including both direct and optional dependencies. This is the exact list of dependencies that are defined in the `pyproject.toml` file, but formatted for use with `pip` or other package managers that support requirements files. .. note:: The requirements file is generated from the `pyproject.toml` file using a tool provided by the `guidata` package. .. code-block:: console python -m guidata.utils.genreqs txt # to generate requirements.txt Adding New Dependencies ----------------------- When adding new dependencies to the project, please follow these rules: 1. If it is a direct dependency, that is a package that the application needs to run, add it to the `[project.dependencies]` section in the `pyproject.toml` file, and specify the version range that is compatible with the application, in order to avoid breaking changes. 2. If it is an optional dependency, that is a package that can be installed to enable additional features, add it to the appropriate section in the `[project.optional-dependencies]` section in the `pyproject.toml` file. - For the `dev` dependencies, unless it's absolutely necessary, do not specify a version range, as it may limit the ability to use the latest version of the package. - For the other optional dependencies, specify the version range that is compatible with the application, in order to avoid breaking changes. .. note:: In other words, except for the `dev` dependencies, always specify a version range that is compatible with the application.DataLab-1.0.2/doc/contributing/environment.md000066400000000000000000000137371511411446000211540ustar00rootroot00000000000000Setting up Development Environment ================================== Getting started with DataLab development is easy. Here is what you will need: 1. An integrated development environment (IDE) for Python. We recommend [Spyder](https://www.spyder-ide.org/) or [Visual Studio Code](https://code.visualstudio.com/), but any IDE will do. 2. A Python distribution. We recommend [WinPython](https://winpython.github.io/), on Windows, or [Anaconda](https://www.anaconda.com/), on Linux or Mac. But, again, any Python distribution will do. 3. A clean project structure (see below). 4. Test data (see below). 5. Environment variables (see below). 6. Third-party software (see below). Development Environment ----------------------- If you are using [Spyder](https://www.spyder-ide.org/), thank you for supporting the scientific open-source Python community! If you are using Visual Studio Code, that's also an excellent choice (for other reasons). We recommend installing the following extensions: | Extension | Description | | --------- | ----------- | | [gettext](https://marketplace.visualstudio.com/items?itemName=mrorz.language-gettext) | Gettext syntax highlighting | | [Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance) | Python language server | | [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) | Python extension | | [reStructuredText Syntax highlighting](https://marketplace.visualstudio.com/items?itemName=trond-snekvik.simple-rst) | reStructuredText syntax highlighting | | [Ruff](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff) | Extremely fast Python linter and code formatter | | [Todo Tree](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree) | Todo tree | | [Insert GUID](https://marketplace.visualstudio.com/items?itemName=heaths.vscode-guid) | Insert GUID | | [XML Tools](https://marketplace.visualstudio.com/items?itemName=DotJoshJohnson.xml) | XML Tools | Python Environment ------------------ DataLab requires the following : * Python (e.g. WinPython) * Additional Python packages Installing all required packages : pip install --upgrade -r requirements.txt ℹ️ See [Installation](https://datalab-platform.com/en/intro/installation.html) for more details on reference Python and Qt versions. ⚠️ If you are contributing to DataLab's processing features, you will need to work on both DataLab's main repository and sigima's repository. To install `sigima` in editable mode, use the following command: pip install -e ../sigima # Adjust the path to your local sigima repository If you are using [WinPython](https://winpython.github.io/), thank you for supporting the scientific open-source Python community! The following table lists the currently officially used Python distributions: | Python version | Status | WinPython version | | -------------- | ------------ | ----------------- | | 3.9 | OK | 3.9.10.0 | | 3.10 | OK | 3.10.11.1 | | 3.11 | OK | 3.11.5.0 | | 3.12 | OK | 3.12.3.0 | | 3.13 | OK | 3.13.2.0 | ⚠ We strongly recommend using the `.dot` versions of WinPython which are lightweight and can be customized to your needs (using `pip install -r requirements.txt`). ✅ We also recommend using a dedicated WinPython instance for DataLab. Test data --------- DataLab test data are located in different folders, depending on their nature or origin. Required data for unit tests are located in "datalab\data\tests" (public data). A second folder %DATALAB_DATA% (optional) may be defined for additional tests which are still under development (or for confidential data). Specific environment variables ------------------------------ Enable the "debug" mode (no stdin/stdout redirection towards internal console): @REM Mode DEBUG set DEBUG=1 Building PDF documentation requires LaTeX. On Windows, the following environment: @REM LaTeX executable must be in Windows PATH, for mathematical equations rendering @REM Example with MiKTeX : set PATH=C:\\Apps\\miktex-portable\\texmfs\\install\\miktex\\bin\\x64;%PATH% Visual Studio Code configuration used in `launch.json` and/or `tasks.json` (examples) : @REM Folder containing additional working test data set DATALAB_DATA=C:\Dev\Projets\DATALAB_data Visual Studio Code `.env` file: * This file is used to set environment variables for the application. * It is used to set the `PYTHONPATH` environment variable to the root of the project. * This is required to be able to import the project modules from within VS Code. * To create this file, copy the `.env.template` file to `.env` (and eventually add your own paths). Windows installer ----------------- The Windows installer is built using [WiX Toolset](https://wixtoolset.org/) V4.0.5. Using the WiX Toolset requires [.NET SDK](https://dotnet.microsoft.com/download/dotnet/) V6.0 minimum. You may install .NET SDK using `winget`: winget install Microsoft.DotNet.SDK.8 Once .NET SDK is installed, the WiX Toolset can be installed and configured using the following commands: dotnet tool install --global wix --version 4.0.5 wix extension add WixToolset.UI.wixext/4.0.5 First, you need to generate the installer script from a generic template: python wix/makewxs.py Building the installer is done using the following command: wix build .\wix\DataLab.wxs -ext WixToolset.UI.wixext Third-party Software -------------------- The following software may be required for maintaining the project: | Software | Description | | -------- | ----------- | | [gettext](https://mlocati.github.io/articles/gettext-iconv-windows.html) | Translations | | [Git](https://git-scm.com/) | Version control system | | [ImageMagick](https://imagemagick.org/) | Image manipulation utilities | | [Inkscape](https://inkscape.org/) | Vector graphics editor | | [MikTeX](https://miktex.org/) | LaTeX distribution on Windows | DataLab-1.0.2/doc/contributing/gitworkflow.rst000066400000000000000000000207661511411446000213760ustar00rootroot00000000000000.. _gitworkflow: Git Workflow ============ This document describes the Git workflow used in the DataLab project, based on a ``main`` branch, a ``develop`` branch, and feature-specific branches. It also defines how bug fixes are managed. .. note:: This workflow is a simplified version of the `Gitflow Workflow `_. It has been adapted to suit the needs of the DataLab project at the current stage of development. In the near future, we may consider adopting a more complex workflow, e.g. by adding release branches. Branching Model --------------- Main Branches ^^^^^^^^^^^^^ - ``main``: Represents the stable, production-ready version of the project. - ``develop``: Used for ongoing development and integration of new features. Feature Branches ^^^^^^^^^^^^^^^^ - ``feature/feature_name``: Used for the development of new features. - Created from ``develop``. - Merged back into ``develop`` once completed. - Deleted after merging. Release Branch ^^^^^^^^^^^^^^ - ``release``: Represents the current maintenance line for patch releases. - Created from ``main`` after a stable release when the first patch is needed. - Accepts ``fix/xxx`` and ``hotfix/xxx`` branch merges. - Merged back into ``main`` for each patch release tag (e.g., 1.0.1, 1.0.2). - Reset or recreated when starting a new minor/major release cycle. .. note:: The ``release`` branch is not versioned (no ``release/1.0.x``). It always represents "the current maintenance line." When a new minor version is released (e.g., 1.2.0), the old ``release`` branch is deleted and a new one is created from the fresh tag when the first patch for 1.2.1 is needed. Bug Fix Branches ^^^^^^^^^^^^^^^^ - ``fix/xxx``: Used for general bug fixes that are not urgent. - Created from ``develop`` (for next feature release) or ``release`` (for patch release). - Merged back into the originating branch once completed. - Deleted after merging. - ``hotfix/xxx``: Used for urgent production-critical fixes. - Created from ``release`` (if exists) or ``main`` (if no ``release`` branch yet). - Merged back into ``release`` or ``main``. - The fix is then cherry-picked into ``develop``. - Deleted after merging. .. note:: Hotfixes (high-priority fixes) will be integrated in the next maintenance release (X.Y.Z -> Z+1), while fixes (low-priority fixes) will be integrated in the next feature release (X.Y -> Y+1). Documentation Branches ---------------------- When working on documentation that is not related to source code (e.g. training materials, user guides), branches should be named using the ``doc/`` prefix. Examples: - ``doc/training-materials`` - ``doc/user-guide`` This naming convention improves clarity by clearly separating documentation efforts from code-related development (features, fixes, etc.). Workflow for New Features ------------------------- 1. Create a new feature branch from ``develop``: .. code-block:: sh git checkout develop git checkout -b develop/feature_name 2. Develop the feature and commit changes. 3. Merge the feature branch back into ``develop``: .. code-block:: sh git checkout develop git merge --no-ff develop/feature_name 4. Delete the feature branch: .. code-block:: sh git branch -d develop/feature_name .. warning:: Do not leave feature branches unmerged for too long. Regularly rebase them on ``develop`` to minimize conflicts. Workflow for Regular Bug Fixes ------------------------------ For next feature release (target: ``develop``): 1. Create a bug fix branch from ``develop``: .. code-block:: sh git checkout develop git checkout -b fix/bug_description 2. Apply the fix and commit changes. 3. Merge the fix branch back into ``develop``: .. code-block:: sh git checkout develop git merge --no-ff fix/bug_description 4. Delete the fix branch: .. code-block:: sh git branch -d fix/bug_description For current maintenance release (target: ``release``): 1. Create a bug fix branch from ``release``: .. code-block:: sh git checkout release git checkout -b fix/bug_description 2. Apply the fix and commit changes. 3. Merge the fix branch back into ``release``: .. code-block:: sh git checkout release git merge --no-ff fix/bug_description 4. Delete the fix branch: .. code-block:: sh git branch -d fix/bug_description .. warning:: Do not create a ``fix/xxx`` branch from a ``develop/feature_name`` branch. Always branch from ``develop`` or ``release`` to ensure fixes are correctly propagated. .. code-block:: sh # Incorrect: git checkout develop/feature_name git checkout -b fix/wrong_branch .. code-block:: sh # Correct: git checkout develop git checkout -b fix/correct_branch Workflow for Critical Hotfixes ------------------------------ 1. Create a hotfix branch from ``release`` (or ``main`` if no ``release`` branch exists): .. code-block:: sh git checkout release # or: git checkout main git checkout -b hotfix/critical_bug 2. Apply the fix and commit changes. 3. Merge the fix back into ``release`` (or ``main``): .. code-block:: sh git checkout release # or: git checkout main git merge --no-ff hotfix/critical_bug 4. Cherry-pick the fix into ``develop``: .. code-block:: sh git checkout develop git cherry-pick 5. Delete the hotfix branch: .. code-block:: sh git branch -d hotfix/critical_bug .. warning:: Do not merge ``fix/xxx`` or ``hotfix/xxx`` directly into ``main`` without following the workflow. Ensure hotfixes are cherry-picked into ``develop`` to avoid losing fixes in future releases. Workflow for Patch Releases ---------------------------- When ready to release a patch version (e.g., 1.0.1, 1.0.2): 1. Ensure the ``release`` branch contains all desired fixes. 2. Merge ``release`` into ``main``: .. code-block:: sh git checkout main git merge --no-ff release 3. Tag the release on ``main``: .. code-block:: sh git tag -a v1.0.1 -m "Release version 1.0.1" git push origin main --tags 4. Keep the ``release`` branch for additional patches in the same minor version series. Workflow for Minor/Major Releases ---------------------------------- When ready to release a new minor or major version (e.g., 1.1.0, 2.0.0): 1. Merge ``develop`` into ``main``: .. code-block:: sh git checkout main git merge --no-ff develop 2. Tag the release on ``main``: .. code-block:: sh git tag -a v1.1.0 -m "Release version 1.1.0" git push origin main --tags 3. Delete the old ``release`` branch (if exists): .. code-block:: sh git branch -d release git push origin --delete release 4. Create a new ``release`` branch from ``main`` when the first patch for 1.1.1 is needed: .. code-block:: sh git checkout main git checkout -b release git push -u origin release Best Practices -------------- - Regularly **rebase feature branches** on ``develop`` to stay up to date: .. code-block:: sh git checkout develop/feature_name git rebase develop - Avoid long-lived branches to minimize merge conflicts. - Ensure bug fixes in ``release`` or ``main`` are **always cherry-picked** to ``develop``. - Clearly differentiate between ``fix/xxx`` (non-urgent fixes) and ``hotfix/xxx`` (critical production fixes). - When creating the ``release`` branch, update release notes to indicate which version it targets (e.g., add a comment in the merge commit: "Create release branch for v1.0.x maintenance"). - The ``release`` branch always represents the current maintenance line. To know which version it targets, check the most recent tag on ``main`` or the release notes. Takeaway -------- This workflow ensures a structured yet flexible development process while keeping ``main`` stable and ``develop`` always updated with the latest changes. The ``release`` branch provides a dedicated maintenance line for patch releases, allowing ``develop`` to proceed with new features without interference. This solves the problem of coordinating unreleased changes across the PlotPyStack ecosystem (DataLab, Sigima, PlotPy, guidata, PythonQwt) by providing a stable branch for CI testing during maintenance cycles. DataLab-1.0.2/doc/contributing/guidelines.rst000066400000000000000000000047111511411446000211400ustar00rootroot00000000000000.. _guidelines: Coding guidelines ================= Generic coding guidelines ------------------------- We follow the `PEP 8 `_ coding style. In particular, we are especially strict about the following guidelines: - Limit all lines to a maximum of 79 characters. - Respect the naming conventions (classes, functions, variables, etc.). - Use specific exceptions instead of the generic :class:`Exception`. To enforce these guidelines, the following tools are mandatory: - `ruff `_ for code formatting and static code analysis. - `pylint `_ for static code analysis. ruff ^^^^ If you are using `Visual Studio Code `_, the project settings will automatically format your code with `ruff` on save (you may also run the task "Run Ruff" to run `ruff` on the project). To run `ruff`, run the following command:: ruff check pylint ^^^^^^ To run `pylint`, run the following command:: pylint datalab If you are using `Visual Studio Code `_ on Windows, you may run the task "Run Pylint" to run `pylint` on the project. .. note:: A `pylint` rating greater than 9/10 is required to merge a pull request. Specific coding guidelines -------------------------- In addition to the generic coding guidelines, we have the following specific guidelines: - Write docstrings for all classes, methods and functions. The docstrings should follow the `Google style `_. - Add typing annotations for all functions and methods. The annotations should use the future syntax (``from __future__ import annotations``) - Try to keep the code as simple as possible. If you have to write a complex piece of code, try to split it into several functions or classes. - Add as many comments as possible. The code should be self-explanatory, but it is always useful to add some comments to explain the general idea of the code, or to explain some tricky parts. - Do not use ``from module import *`` statements, even in the ``__init__`` module of a package. - Avoid using mixins (multiple inheritance) when possible. It is often possible to use composition instead of inheritance. - Avoid using ``__getattr__`` and ``__setattr__`` methods. They are often used to implement lazy initialization, but this can be done in a more explicit way. DataLab-1.0.2/doc/contributing/index.rst000066400000000000000000000106041511411446000201150ustar00rootroot00000000000000Contributing ============ .. meta:: :description: Contribute to DataLab project, the open-source scientific data analysis platform :keywords: DataLab, contribute, open-source, scientific, data, analysis, platform, signal processing, image processing DataLab is **your** platform. If you want it to be improved, you **can** contribute to the project, whether you are a developer or not. There are many ways to contribute to DataLab project, depending on how much time you have, your experience with open source projects, and your skills. Share your ideas and experiences -------------------------------- .. only:: html and not latex :octicon:`info;1em;sd-text-info` :bdg-success-line:`No coding required` Besides the classic bug reports and feature requests, you can share your ideas and experiences for improving DataLab. In particular, we are very interested in your feedback on the documentation and tutorials. Moreover, if you have a use case that you would like to share with the community, please let us know. .. only:: html and not latex .. grid:: 2 :gutter: 1 2 3 4 .. grid-item-card:: :octicon:`bug;1em;sd-text-info` Bugs :link: https://github.com/DataLab-Platform/DataLab/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title= Reporting a bug .. grid-item-card:: :octicon:`light-bulb;1em;sd-text-info` Enhancements :link: https://github.com/DataLab-Platform/DataLab/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title= Suggesting an enhancement .. grid-item-card:: :octicon:`book;1em;sd-text-info` Documentation :link: https://github.com/DataLab-Platform/DataLab/issues/new?assignees=&labels=documentation&projects=&template=doc_request.md&title= Suggesting a documentation topic .. grid-item-card:: :octicon:`mortar-board;1em;sd-text-info` Tutorial :link: https://github.com/DataLab-Platform/DataLab/issues/new?assignees=&labels=documentation&projects=&template=tutorial_request.md&title= Suggesting a tutorial topic .. only:: latex and not html Without coding, you can contribute to DataLab project by: - `Reporting a bug `_ - `Suggesting an enhancement `_ - `Suggesting a documentation topic `_ - `Suggesting a tutorial topic `_ Share your scientific/technical knowledge ----------------------------------------- .. only:: html and not latex :octicon:`info;1em;sd-text-info` :bdg-success-line:`No coding required` Your technical or scientific knowledge is also very valuable to us, as you may directly contribute to the documentation or tutorials. Or, better, if you want to write a tutorial, we will be happy to help you. Again without coding, you can contribute to DataLab project by: - Writing documentation - Writing a tutorial Contribute to new features -------------------------- .. only:: html and not latex :octicon:`info;1em;sd-text-info` :bdg-info-line:`Coding (beginner)` :bdg-warning-line:`Coding (advanced)` Even if you are not a developer, you can contribute to the project by: - Testing new features - Writing and submitting new Plugins - Writing and submitting macro-commands Develop new features -------------------- .. only:: html and not latex :octicon:`info;1em;sd-text-info` :bdg-warning-line:`Coding (advanced)` If you are a developer, you can contribute to the core of the project by fixing bugs or implementing new features. .. only:: html and not latex .. grid:: 1 :gutter: 1 2 3 4 .. grid-item-card:: :octicon:`terminal;1em;sd-text-info` Code :link: contribute_code :link-type: doc Contributing to the code .. only:: latex and not html See :ref:`contribute_code` section for more information. .. toctree:: :maxdepth: 2 :hidden: contribute_code guidelines gitworkflow dependencies environment roadmap DataLab-1.0.2/doc/contributing/roadmap.md000066400000000000000000000445171511411446000202330ustar00rootroot00000000000000# Roadmap This document outlines the current and future development plans for DataLab: * It includes information about [funding sources](#funding), and [future evolution](#future-milestones). * It also provides a summary of [past milestones](#past-milestones) to give context to the project's evolution. (funding)= ## 📈 Funding > ℹ️ As an open-source project, DataLab relies on the support of various organizations and grants to fund its development and maintenance. The project's roadmap is shaped by the needs and priorities of its users, as well as the availability of resources. Funded work is prioritized and scheduled accordingly, while community contributions are welcomed and encouraged. From the project’s inception in 2023, the development of DataLab has been funded by the following grants and organizations: | Funding | Description | |---------|-----------------------------------------------------------------------------| | CEA | [CEA](https://www.cea.fr/) - French Alternative Energies and Atomic Energy Commission:
    • DataLab was initially created for analyzing data from CEA's Laser Megajoule (LMJ) facility
    • Interfaced with the LMJ control system, DataLab is used to process and visualize signals and images acquired with plasma diagnostics (devices such as cameras, digitizers, spectrometers, etc.)
    • It is also used for R&D activities around the LMJ facility (e.g., metrology, data analysis, etc.)
    • CEA is the major investor in DataLab and the main contributor to the project: CEA scientists and engineers are actively involved in the roadmap | | CODRA | [CODRA](https://codra.net/), a software engineering company and software publisher, has supported DataLab’s open-source journey since its inception:
    • Open-source project management and communication (social media, website, etc.)
    • Conferences and events: [SciPy 2024](https://cfp.scipy.org/2024/talk/G3MC9L/), [PyData Paris 2024](https://www.youtube.com/watch?v=lBEu-DeHyz0&list=PLJjbbmRgu6RqGMOhahm2iE6NUkIYIaEDK), [Open Source Experience 2024](https://pretalx.com/pydata-paris-2024/talk/WTDVCC/), etc.
    • Documentation: tutorials, videos, and more | | NLnet | [NLnet Foundation](https://nlnet.nl/), as part of the NGI0 Commons Fund backed by the European Commission, funded the [redesign of DataLab’s core architecture](https://nlnet.nl/project/DataLab/) — a major overhaul included in the 1.0 release (November 2025):
    • The goal was to decouple the data model, computation, and I/O from the UI
    • This led to the creation of the [Sigima](https://sigima.readthedocs.io/en/latest/) library, which now handles data processing independently of DataLab’s GUI
    • This redesign improves maintainability, testability, and extensibility of the codebase
    • This also enables DataLab to be used as a library (through Sigima) in other software projects, fostering integration and reuse | (future-milestones)= ## 🏗️ Future Milestones > ℹ️ The following tasks are long-term goals for DataLab. They are not scheduled for any specific release and may evolve over time based on user needs and project direction. The following table summarizes the future evolutions and maintenance plans for DataLab that are detailed in the sections below. | Milestone type | Description | |----------------------|----------------------------------------------| | 🔄 Future Evolutions | • Support for data acquisition
    • Web frontend
    • Support for time series
    • Database connectors
    • Jupyter plugin for interactive data analysis
    • Spyder plugin for interactive data analysis
    • Jupyter kernel interface for DataLab | | 🛠️ Maintenance | • Transition to gRPC for remote control
    • Drop Qt5 support and migrate to Qt6 | | 🧱 Other Tasks | • Create a DataLab plugin template | ### 🔄 Support for Data Acquisition Adding support for data acquisition would be a major step forward in making DataLab not only a platform for signal and image processing, but also a **versatile tool for real-time experimental workflows**. The idea would be to allow users to acquire data directly from various hardware devices (e.g., cameras, digitizers, spectrometers, etc.) **within DataLab itself**. Such a feature would enable **seamless integration between acquisition and analysis**, allowing users to process and visualize data immediately after it is captured, without needing to switch tools or export/import files. While no formal design has been established yet, a viable approach could be to: * Introduce a **new plugin family dedicated to data acquisition**, following the modular architecture of DataLab; * Define a **generic API for acquisition plugins**, ensuring flexibility and compatibility across device types; * **Leverage existing solutions** such as [PyMoDAQ](https://pymodaq.cnrs.fr/), a Python-based data acquisition framework already compatible with a wide range of laboratory instruments. A potential **collaboration with the PyMoDAQ development team** could be explored, to benefit from their ecosystem and avoid duplicating efforts. This would also help foster interoperability and promote open standards in the Python scientific instrumentation community. ### 🌐 Web Frontend As DataLab's modular architecture evolves, a natural next step is to provide a **web-based frontend** to complement the existing desktop application. A web frontend would allow users to: * **Run DataLab remotely** (e.g. from a server) and access it via a browser; * Perform processing and visualization tasks without needing a local Python environment; * Facilitate **collaborative data analysis**, sharing sessions or results with colleagues; * Integrate with JupyterHub, dashboards, or lab management tools for centralized usage. This frontend could be built on top of the [Sigima](https://sigima.readthedocs.io/en/latest/) library (that was recently created from the externalization of DataLab's processing functionalities), exposing its features through a web interface — possibly leveraging tools like **JupyterLab extensions**, **Panel**, or **Dash**, depending on the chosen stack. While still exploratory, this direction would increase **accessibility and portability** of DataLab, especially in academic and industrial environments. > ℹ️ The web frontend shall not replace the desktop application, but rather complement it by providing a different access mode. DataLab's philosophy is to remain a **local application** that does not require a server to run, ensuring data privacy and security. More precisely, the web frontend will empower users to run DataLab on a server and access it remotely - typically on a local network, but it will not be a cloud-based solution or a first step towards a fully cloud-based application which would be against the project's philosophy. ### ⏱️ Support for Time Series DataLab currently focuses on generic signal and image processing, but many use cases — especially in scientific instrumentation and experimental physics — involve **time series data**. Adding dedicated support for time series would make it easier to: * Handle signals with associated timestamps or non-uniform sampling; * Perform time-aware processing and visualization (e.g., event alignment, time-based filtering, resampling); * Integrate with external systems generating time-indexed data. This feature is tracked in [Issue #27](https://github.com/DataLab-Platform/DataLab/issues/27), where potential use cases and design considerations are discussed. Introducing robust time series handling would broaden DataLab’s applicability in domains such as data logging, slow control, and real-time monitoring. ### 🗃️ Database Connectors Currently, DataLab operates primarily on files and in-memory data structures. Adding **connectors to databases** would significantly extend its capabilities, especially for users dealing with large, structured, or historical datasets. This feature would allow DataLab to: * **Query and load data** from SQL or NoSQL databases (e.g. PostgreSQL, SQLite, MongoDB, etc.); * Support metadata-driven workflows, where experiments or datasets are referenced from a database; * **Store analysis results** or annotations back into a database for traceability and reproducibility; * Facilitate integration into lab information management systems (LIMS) or enterprise data infrastructures. The design could include: * A **plugin-based system** for supporting various database backends; * A simple configuration interface for connection settings and query management; * Integration with pandas or SQLAlchemy for flexible data exchange. This evolution would help bridge the gap between **data acquisition, analysis, and long-term storage**, enabling more robust scientific data workflows. ### 📓 Jupyter Plugin for Interactive Data Analysis Although DataLab can already be remotely controlled from a Jupyter notebook — thanks to its existing remote control capabilities (see {ref}`ref-to-remote-control`) — the user experience could be greatly enhanced by developing a **dedicated Jupyter plugin**. This plugin would provide a **tighter integration** between Jupyter and DataLab, offering the following features: * Use DataLab as a **Jupyter kernel**, enabling direct access to its processing capabilities from within a notebook; * **Display numerical results from DataLab in Jupyter**, and vice versa — for example, importing results computed in a Jupyter notebook into the DataLab interface; * Allow **interactive data manipulation**: use DataLab for efficient signal and image operations, and Jupyter for custom or home-made data analysis routines; * Bridge scripting and GUI workflows, making DataLab more attractive for scientific users familiar with Jupyter environments. Technically, this plugin could rely on the **Jupyter kernel interface** to expose DataLab's capabilities in an interactive programming context. Such integration would reinforce DataLab’s role in the scientific Python ecosystem and facilitate reproducible, notebook-driven analysis workflows. ### 🧩 Spyder Plugin for Interactive Data Analysis A plugin for the [Spyder IDE](https://www.spyder-ide.org/) would address the **same use cases as the Jupyter plugin**, providing seamless integration between DataLab and Spyder’s interactive environment. This plugin would allow users to: * Interact with DataLab directly from Spyder; * Visualize or send data between the DataLab GUI and the Spyder console; * Use DataLab’s processing capabilities in real time while scripting custom analysis workflows in Spyder. As with the Jupyter integration, this plugin could be implemented by leveraging the **Jupyter kernel interface** (see {ref}`ref-to-remote-control`), which Spyder already supports internally. Such a plugin would enhance DataLab's usability for scientists and engineers who prefer Spyder’s integrated development environment for exploratory analysis. ### 🧠 Jupyter Kernel Interface for DataLab Implementing a native **Jupyter kernel interface** for DataLab would provide a more integrated way to use it from other environments such as **Jupyter notebooks, Spyder, or Visual Studio Code**. This interface would allow: * Direct control of DataLab from third-party tools that support Jupyter kernels; * **Two-way data exchange**: e.g., displaying DataLab results inside a notebook, or visualizing Jupyter-generated data inside the DataLab GUI; * Tighter integration into scripting workflows and IDEs beyond simple remote control. However, based on initial exploration, implementing a full Jupyter kernel may be **non-trivial and potentially time-consuming**. Given that remote control already enables communication between DataLab and Jupyter (see {ref}`ref-to-remote-control`), the added value of a full kernel integration should be carefully evaluated against its complexity and maintenance cost. This option remains open for discussion depending on user demand and development resources. ### 🛠️ Maintenance Plan #### 🔄 2026: Transition to gRPC for Remote Control DataLab currently relies on XML-RPC for remote control, which may become a limitation for more advanced or high-performance use cases. If the need arises for a more **efficient, robust, and extensible communication protocol**, a switch to **gRPC** is under consideration. This improvement is tracked in [Issue #18](https://github.com/DataLab-Platform/DataLab/issues/18). #### 🚫 2025: Drop Qt5 Support and Migrate to Qt6 With the **end-of-life of Qt5 scheduled for mid-2025**, DataLab will fully migrate to **Qt6**. This transition is expected to be **straightforward**, thanks to: * The use of the `qtpy` abstraction layer; * The fact that the `PlotPyStack` library is already compatible with Qt6. This change will ensure compatibility with future versions of Qt and modern Python environments. ### 🧱 Other Tasks #### 🧩 Create a DataLab Plugin Template To encourage community contributions and facilitate the development of extensions, a **template for creating DataLab plugins** is planned. This template would: * Provide a ready-to-use scaffold with best practices; * Help new developers quickly understand the plugin architecture; * Promote consistency and modularity across third-party plugins. The task is tracked in [Issue #26](https://github.com/DataLab-Platform/DataLab/issues/26). (past-milestones)= ## 🏆 Past Milestones From version 0.9 to 1.0, DataLab has undergone significant development and enhancements. The project has evolved from a simple data analysis tool to a powerful platform for processing and visualizing signals and images. Those enhancements have been made possible thanks to the support of the following organizations (see [Funding](#funding) for more details): * [CEA](https://www.cea.fr/): French Alternative Energies and Atomic Energy Commission * [CODRA](https://codra.net/en/): software engineering company and software publisher * [NLnet](https://nlnet.nl/): NLnet Foundation, as part of the NGI0 Commons Fund The following table summarizes the major past milestones of DataLab, including the release dates and a brief description of the features or enhancements introduced in each version. | Milestone | Description | |-----------|-----------------------------------------------------------------------------| | [1.0](https://github.com/DataLab-Platform/DataLab/releases/tag/v1.0.0)
    2025/11 | • Interactive object editing: modify creation/processing parameters and recompute objects
    • New object creation: parametric signal/image generators, Poisson noise, complex-valued objects
    • Enhanced processing: pulse features, ideal filters, 2D resampling, convolution, projections
    • ROI & annotations: copy/paste, import/export, grid creation, inverse ROI logic
    • Visualization: merged result labels, datetime support, performance optimizations
    • File formats: FT-Lab (.sig, .ima), coordinated text files, improved HDF5 support
    • Non-uniform coordinates and polynomial calibration
    • Public API enhancements for programmability | | [0.20](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.20.0)
    2025/04 | • ANDOR SIF images: add support for background images
    • Array editor: new copy all, export, and paste features
    • Fourier analysis: new zero padding feature for signals and images
    • ROI editor: ROI selection tool now active by default
    • Signal processing: X-Y mode, abscissa/ordinate find features, full width at y=...
    • Public API: add `group_id` and `set_current` arguments to add methods | | [0.19](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.19.0)
    2025/04 | • Open all signals or images from a folder (recursively)
    • ROI editor: add options to create ROIs from coordinates | | [0.18](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.18.0)
    2024/11 | • New pairwise operand mode (the operation is done on each pair of signals/images)
    • New polygonal ROI feature
    • Support Windows 7 SP1 to Windows 11 with a single installer | | [0.17](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.17.0)
    2024/08 | • Introduce ROI support across all processing features
    • Add arithmetic operations on signals and images
    • New Ubuntu package for native installation on Linux
    • New Conda package for all platforms (Windows, Linux, MacOS) | | [0.16](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.16.0)
    2024/06 | • New validation process for signal and image features
    • Add support for binary images (unlocking new processing features) | | [0.15](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.15.0)
    2024/04 | • New MSI installer for the stand-alone version on Windows
    • Add support for large text/CSV files (> 1 GB)
    • Add auto downsampling feature | | [0.14](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.14.0)
    2024/03 | • HDF5 browser: multiple file support, detailed info on groups and attributes
    • New Debian package for native installation on Linux | | [0.12](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.12.0)
    2024/02 | • Add a tour and demo feature
    • Add tutorials to the documentation
    • Add a Text file import assistant | | [0.11](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.11.0)
    2024/01 | • Add features for reordering signals and images (e.g. drag-and-drop)
    • Add 1D convolution, interpolation, resampling and detrending features | | [0.10](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.10.0)
    2023-12 | • Develop a very simple DataLab plugin to demonstrate the plugin system
    • Allow to disable the automatic refresh when doing multiple processing steps
    • Serialize curve and image styles in HDF5 files
    • Improve curve readability | | [0.9](https://github.com/DataLab-Platform/DataLab/releases/tag/v0.9.0)
    2023-11 | • Run computations in a separate process
    • Add a plugin system: API for third-party extensions
    • Add a macro-command system
    • Add an XML-RPC server to allow DataLab remote control | DataLab-1.0.2/doc/features/000077500000000000000000000000001511411446000153625ustar00rootroot00000000000000DataLab-1.0.2/doc/features/advanced/000077500000000000000000000000001511411446000171275ustar00rootroot00000000000000DataLab-1.0.2/doc/features/advanced/api.rst000066400000000000000000000013341511411446000204330ustar00rootroot00000000000000.. _api: API === The public Application Programming Interface (API) of DataLab offers a set of functions to access the DataLab features. .. note:: For more details about the `sigima` package, please refer to the `Sigima documentation `_. The Sigima API is especially useful to write scripts that can be run in DataLab (see :ref:`about_macros`) or to develop plugins (see :ref:`about_plugins`). .. toctree:: :maxdepth: 2 :caption: Public features: proxy .. toctree:: :maxdepth: 1 :caption: Internal features: api/index api/main api/panel api/actionhandler api/objectview api/plothandler api/roieditor api/processor api/docks api/h5io DataLab-1.0.2/doc/features/advanced/api/000077500000000000000000000000001511411446000177005ustar00rootroot00000000000000DataLab-1.0.2/doc/features/advanced/api/actionhandler.rst000066400000000000000000000000731511411446000232450ustar00rootroot00000000000000.. automodule:: datalab.gui.actionhandler :no-members: DataLab-1.0.2/doc/features/advanced/api/docks.rst000066400000000000000000000000631511411446000215340ustar00rootroot00000000000000.. automodule:: datalab.gui.docks :no-members: DataLab-1.0.2/doc/features/advanced/api/h5io.rst000066400000000000000000000000621511411446000212740ustar00rootroot00000000000000.. automodule:: datalab.gui.h5io :no-members: DataLab-1.0.2/doc/features/advanced/api/index.rst000066400000000000000000000000551511411446000215410ustar00rootroot00000000000000.. automodule:: datalab.gui :no-members: DataLab-1.0.2/doc/features/advanced/api/main.rst000066400000000000000000000000621511411446000213540ustar00rootroot00000000000000.. automodule:: datalab.gui.main :no-members: DataLab-1.0.2/doc/features/advanced/api/objectview.rst000066400000000000000000000000701511411446000225700ustar00rootroot00000000000000.. automodule:: datalab.gui.objectview :no-members: DataLab-1.0.2/doc/features/advanced/api/panel.rst000066400000000000000000000000421511411446000215250ustar00rootroot00000000000000.. automodule:: datalab.gui.panel DataLab-1.0.2/doc/features/advanced/api/plothandler.rst000066400000000000000000000000711511411446000227440ustar00rootroot00000000000000.. automodule:: datalab.gui.plothandler :no-members: DataLab-1.0.2/doc/features/advanced/api/processor.rst000066400000000000000000000000461511411446000224510ustar00rootroot00000000000000.. automodule:: datalab.gui.processor DataLab-1.0.2/doc/features/advanced/api/roieditor.rst000066400000000000000000000000671511411446000224350ustar00rootroot00000000000000.. automodule:: datalab.gui.roieditor :no-members: DataLab-1.0.2/doc/features/advanced/command.rst000066400000000000000000000054571511411446000213120ustar00rootroot00000000000000.. _ref-to-command-line-features: Command line features ===================== .. meta:: :description: DataLab command line features :keywords: command line, datalab, run, test, demo Run DataLab ----------- To run DataLab from the command line, type the following:: $ datalab To show help on command line usage, simply run:: $ datalab --help usage: app.py [-h] [-b path] [-v] [--unattended] [--screenshot] [--delay DELAY] [--xmlrpcport PORT] [--verbose {quiet,minimal,normal}] [h5] Run DataLab positional arguments: h5 HDF5 file names (separated by ';'), optionally with dataset name (separated by ',') options: -h, --help show this help message and exit -b path, --h5browser path path to open with HDF5 browser -v, --version show DataLab version --reset reset DataLab configuration --unattended non-interactive mode --accept_dialogs accept dialogs in unattended mode --screenshot automatic screenshots --delay DELAY delay (ms) before quitting application in unattended mode --xmlrpcport XMLRPCPORT XML-RPC port number --verbose {quiet,normal,debug} verbosity level: for debugging/testing purpose Open HDF5 file at startup ------------------------- To open HDF5 files, or even import only a specified HDF5 dataset, use the following:: $ datalab /path/to/file1.h5 $ datalab /path/to/file1.h5,/path/to/dataset1 $ datalab /path/to/file1.h5,/path/to/dataset1;/path/to/file2.h5,/path/to/dataset2 Open HDF5 browser at startup ---------------------------- To open the HDF5 browser at startup, use one of the following commands:: $ datalab -b /path/to/file1.h5 $ datalab --h5browser /path/to/file1.h5 Run DataLab demo ---------------- To execute DataLab demo, run the following:: $ datalab-demo .. _run_scientific_validation_tests: Run technical validation tests ------------------------------- .. note:: Technical validation tests are directly included in individual unit tests and are disseminated throughout the code. The test functions including validation tests are marked with the ``@pytest.mark.validation`` decorator. To execute DataLab technical validation tests, run the following:: $ pytest -m validation .. seealso:: See section :ref:`validation` for more information on DataLab's validation strategy. .. _run_functional_validation_tests: Run complete test suite ------------------------ To execute all DataLab unit tests, simply run:: $ pytest Run interactive tests --------------------- To execute DataLab interactive tests, run the following:: $ datalab-tests .. image:: /images/interactive_tests.png DataLab-1.0.2/doc/features/advanced/instviewer.rst000066400000000000000000000055701511411446000220670ustar00rootroot00000000000000.. _ref-to-instviewer: Installation and Configuration ============================== The **Installation and Configuration** dialog box is a diagnostic tool available from DataLab’s graphical interface. It provides a structured overview of the current installation, user-specific settings, and available plugins and I/O features. This tool is primarily designed for troubleshooting and verification purposes — whether you are a user trying to understand how DataLab is set up on your system, or a developer validating your plugin integration. To open the dialog box, go to the "?" menu in the main DataLab window and select **Installation and configuration**. This will open a dialog window that displays all relevant information about your DataLab installation. The dialog window is divided into **three tabs**, each covering a specific aspect of the environment. 1. Installation Configuration ----------------------------- .. figure:: /images/shots/instviewer.png Installation and configuration (see "?" menu), tab 1 This tab displays system-level information about the DataLab installation, including: - Application version; - Platform and operating system; - Whether DataLab is running in frozen (standalone) mode or as a standard Python package; - Internal paths used for data storage and plugin discovery; - Python interpreter details (version, architecture, paths); - Location of the `datalab` package. This section is especially useful for debugging path-related issues or confirming the installation context (e.g., standalone vs. pip-installed). 2. User Configuration --------------------- .. figure:: /images/shots/instviewer2.png Installation and configuration (see "?" menu), tab 2 This tab lists user-specific configuration details, through the contents of DataLab's configuration file. It helps users verify their personalized settings and ensures that DataLab is reading the correct directories for user-defined plugins or preferences. 3. Plugins and I/O Features --------------------------- .. figure:: /images/shots/instviewer3.png Installation and configuration (see "?" menu), tab 3 This tab lists all plugins and I/O handlers currently available in the application. This view is ideal for verifying that all expected plugins and I/O features are detected, loaded, and functional. Usage Tips ---------- - You can copy text from any of the tabs for diagnostic or support purposes. - If a plugin or I/O feature does not appear, check that its filename starts with `datalab_` and that it is located in a recognized plugin directory (see the *User Configuration* tab). .. note:: Reporting unexpected behavior or any other bug on `GitHub Issues`_ will be greatly appreciated, especially if the contents of this viewer are attached to the report (as well as log files, see :ref:`ref-to-logviewer`). .. _GitHub Issues: https://github.com/DataLab-Platform/DataLab/issues/new/choose DataLab-1.0.2/doc/features/advanced/logviewer.rst000066400000000000000000000022531511411446000216660ustar00rootroot00000000000000.. _ref-to-logviewer: Log viewer ========== .. meta:: :description: DataLab's log viewer :keywords: DataLab, log, viewer, crash, bug, report Despite countless efforts (unit testing, test coverage...), DataLab might crash or behave unexpectedly. For those situations, DataLab provides two logs (located in your home directory): - "Traceback log", for Python exceptions - "Faulthandler log", for system failures (e.g. Qt-related crash) .. note:: The log viewer is accessible from the "?" menu in the main window. .. figure:: /images/shots/logviewer.png DataLab log viewer (see "?" menu) If DataLab crashed or if any Python exception is raised during its execution, those log files will be updated accordingly. DataLab will even notify that new informations are available in log files at next startup. This is an invitation to submit a bug report. Reporting unexpected behavior or any other bug on `GitHub Issues`_ will be greatly appreciated, especially if those log file contents are attached to the report (as information on your installation configuration, see :ref:`ref-to-instviewer`). .. _GitHub Issues: https://github.com/DataLab-Platform/DataLab/issues/new/choose DataLab-1.0.2/doc/features/advanced/macros.rst000066400000000000000000000067711511411446000211600ustar00rootroot00000000000000.. _about_macros: Macros ====== .. meta:: :description: How to use macros in DataLab, the open-source data analysis and visualization platform :keywords: DataLab, data analysis, data visualization, open-source, Python, macros Overview -------- There are many ways to extend DataLab with new functionality (see :ref:`about_plugins` or :ref:`ref-to-remote-control`). The easiest way to do so is by using macros. Macros are small Python scripts that can be executed from the "Macro Panel" in DataLab. .. figure:: ../../images/shots/macro_panel.png :align: center :alt: Macro Panel The Macro Panel in DataLab. Macros can be used to automate repetitive tasks, or to create new functionality. As the plugin and remote control system, macros rely on the DataLab high-level API to interact with the application. This means that you can reuse the same code snippets in macros, plugins, and remote control scripts. .. warning:: DataLab handles macros as Python scripts. This means that you can use the full power of Python to create your macros. Even though this is a powerful feature, it also means that you should be careful when running macros from unknown sources, as they can potentially harm your system. .. seealso:: The DataLab high-level API is documented in the :ref:`api` section. The plugin system is documented in the :ref:`about_plugins` section, and the remote control system is documented in the :ref:`ref-to-remote-control` section. Main features ------------- The Macro Panel is a simple interface to: - Create new macros, using the "New macro" |libre-gui-add| button. - Rename existing macros, using the "Rename macro" |libre-gui-pencil| button. - Import/export macros from/to files, using the "Import macro" |fileopen_py| and "Export macro" |filesave_py| buttons. - Execute macros, using the "Run macro" |libre-camera-flash-on| button. - Stop the execution of a macro, using the "Stop macro" |libre-camera-flash-off| button. .. |libre-gui-add| image:: ../../../datalab/data/icons/libre-gui-add.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |libre-gui-pencil| image:: ../../../datalab/data/icons/libre-gui-pencil.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |fileopen_py| image:: ../../../datalab/data/icons/io/fileopen_py.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |filesave_py| image:: ../../../datalab/data/icons/io/filesave_py.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |libre-camera-flash-on| image:: ../../../datalab/data/icons/libre-camera-flash-on.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |libre-camera-flash-off| image:: ../../../datalab/data/icons/libre-camera-flash-off.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Macros are embedded in the DataLab workspace, so they are saved together with the rest of the data (i.e. with signals and images) when exporting the workspace to a HDF5 file. This means that you can share your macros with other users simply by sharing the workspace file. .. note:: Macro are executed in a separate process, so they won't block the main DataLab application. This means that you can continue working with DataLab while a macro is running and that *you can stop a macro at any time* using the |libre-camera-flash-off| button. Example ------- For a detailed example of how to create a macro, see the :ref:`tutorial_custom_func` tutorial. DataLab-1.0.2/doc/features/advanced/migration_v020_to_v100.rst000066400000000000000000000630321511411446000236750ustar00rootroot00000000000000.. _migration_v020_to_v100: Migrating from DataLab v0.20 to v1.0 ==================================== .. meta:: :description: Guide for migrating DataLab plugins from v0.20 to v1.0 :keywords: DataLab, plugin, migration, v0.20, v1.0, Sigima, API changes .. warning:: **Critical compatibility notice:** DataLab v1.0 introduces **major breaking changes** that are **not backward compatible** with v0.20. - **Plugins** developed for v0.20 **will not work** and must be updated - **API changes** require code modifications for all custom integrations Please read this guide carefully before upgrading to v1.0. DataLab v1.0 introduces significant architectural changes compared to v0.20. The most important change is the **externalization of signal and image processing features** into a separate library called **Sigima**. This architectural change improves modularity, testability, and enables the reuse of processing functions in other projects. However, it requires updates to existing plugins to adapt to the new API. This guide describes the steps to migrate plugins from DataLab v0.20 to v1.0. .. contents:: :local: :depth: 2 What changed in v1.0? --------------------- Major architectural changes ^^^^^^^^^^^^^^^^^^^^^^^^^^^ The most significant change in DataLab v1.0 is the creation of the **Sigima library**, which now contains: - **Signal and image objects** (``SignalObj``, ``ImageObj``, ROI classes) - **Processing parameters** (all ``*Param`` classes) - **Processing functions** (``sigima.proc.signal`` and ``sigima.proc.image`` modules) - **Algorithms** for signal and image processing, or data type conversion, coordinates transformation, ... (``sigima.tools`` module) - **I/O functions** (reading and writing signals/images) - **Test data utilities** (test signal and image generation) - **Result objects** (``TableResult`` and ``GeometryResult``, replacing ``ResultProperties`` and ``ResultShape``) What remains in DataLab: - **GUI components** (panels, widgets, plot integration) - **Plugin system** (``datalab.plugins`` module) - **Application logic** (main window, configuration, project management) - **Result metadata adapters** (``TableAdapter``, ``GeometryAdapter`` for storing results in object metadata) Package renaming ^^^^^^^^^^^^^^^^ The DataLab package was renamed from ``cdl`` to ``datalab`` for clarity: .. code-block:: python # v0.20 import cdl.obj import cdl.param from cdl.plugins import PluginBase # v1.0 import sigima.objects import sigima.params from datalab.plugins import PluginBase Plugin file naming convention ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Plugin filenames must follow the new naming convention: .. important:: Plugin files must be renamed from ``cdl_*.py`` to ``datalab_*.py``. **Examples:** - ``cdl_myplugin.py`` → ``datalab_myplugin.py`` - ``cdl_custom_filters.py`` → ``datalab_custom_filters.py`` - ``cdl_example.py`` → ``datalab_example.py`` This naming convention is required for DataLab to automatically discover and load plugins at startup. Plugins that don't follow this naming pattern will not be loaded. .. note:: The plugin discovery mechanism looks for Python files matching the pattern ``datalab_*.py`` in the plugins directory. Make sure to update your plugin filenames accordingly. New result objects ^^^^^^^^^^^^^^^^^^ DataLab v1.0 introduces two new immutable result types: - **TableResult**: Replaces ``ResultProperties`` for tabular scalar results (e.g., statistics, measurements) - **GeometryResult**: Replaces ``ResultShape`` for geometric results (e.g., detected features, contours) These new result types are computation-oriented and free of application-specific logic (e.g., Qt, metadata). All metadata-related behaviors have been migrated to the DataLab application layer using **adapter classes** (``TableAdapter``, ``GeometryAdapter``). Object UUID access ^^^^^^^^^^^^^^^^^^ The way to access an object's UUID has changed: .. code-block:: python # v0.20 - Direct attribute access obj_uuid = obj.uuid # v1.0 - Use helper function from datalab.objectmodel from datalab.objectmodel import get_uuid obj_uuid = get_uuid(obj) # Alternative in v1.0 - Access metadata directly obj_uuid = obj.get_metadata_option("uuid") This change applies to both ``SignalObj`` and ``ImageObj`` objects. The UUID is now stored in the object's metadata rather than as a direct attribute. .. note:: The ``get_uuid()`` function is defined in ``datalab.objectmodel``, not as a method on the object itself. Import it before use: ``from datalab.objectmodel import get_uuid``. Unified processor interface ^^^^^^^^^^^^^^^^^^^^^^^^^^^ The processor methods have been unified and renamed: - Most specific ``compute_*`` methods now use the generic ``run_feature()`` method - Naming conventions updated: ``compute_11`` → ``compute_1_to_1``, ``compute_10`` → ``compute_1_to_0``, etc. Updating the imports -------------------- Import path changes ^^^^^^^^^^^^^^^^^^^ The following table gives the equivalence between DataLab v0.20 and v1.0 imports. The table below shows the mapping between DataLab v0.20 and v1.0 API. For most entries, only the import statement needs to be updated. .. csv-table:: DataLab v0.20 to v1.0 Compatibility Table :file: v020_to_v100.csv :header-rows: 1 :widths: 50, 50 :delim: ; Migrating plugin code --------------------- Example 1: Simple processing plugin ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Here's how a simple custom filter plugin needs to be updated: **DataLab v0.20:** .. code-block:: python import numpy as np import scipy.ndimage as spi import cdl.computation.image as cpi import cdl.obj import cdl.param import cdl.plugins def weighted_average_denoise(data: np.ndarray) -> np.ndarray: """Apply a custom denoising filter to an image.""" def filter_func(values: np.ndarray) -> float: central_pixel = values[len(values) // 2] differences = np.abs(values - central_pixel) weights = np.exp(-differences / np.mean(differences)) return np.average(values, weights=weights) return spi.generic_filter(data, filter_func, size=5) class CustomFilters(cdl.plugins.PluginBase): """DataLab Custom Filters Plugin""" PLUGIN_INFO = cdl.plugins.PluginInfo( name="My custom filters", version="1.0.0", description="This is an example plugin", ) def create_actions(self) -> None: """Create actions""" acth = self.imagepanel.acthandler proc = self.imagepanel.processor with acth.new_menu(self.PLUGIN_INFO.name): for name, func in (("Weighted average denoise", weighted_average_denoise),): # Wrap function to handle ImageObj objects wrapped_func = cpi.Wrap11Func(func) acth.new_action( name, triggered=lambda: proc.compute_11(wrapped_func, title=name) ) **DataLab v1.0:** .. code-block:: python import numpy as np import scipy.ndimage as spi import sigima.proc.image as sipi import datalab.plugins def weighted_average_denoise(data: np.ndarray) -> np.ndarray: """Apply a custom denoising filter to an image.""" def filter_func(values: np.ndarray) -> float: central_pixel = values[len(values) // 2] differences = np.abs(values - central_pixel) weights = np.exp(-differences / np.mean(differences)) return np.average(values, weights=weights) return spi.generic_filter(data, filter_func, size=5) class CustomFilters(datalab.plugins.PluginBase): """DataLab Custom Filters Plugin""" PLUGIN_INFO = datalab.plugins.PluginInfo( name="My custom filters", version="1.0.0", description="This is an example plugin", ) def create_actions(self) -> None: """Create actions""" acth = self.imagepanel.acthandler proc = self.imagepanel.processor with acth.new_menu(self.PLUGIN_INFO.name): for name, func in (("Weighted average denoise", weighted_average_denoise),): # Wrap function to handle ImageObj objects wrapped_func = sipi.Wrap1to1Func(func) acth.new_action( name, triggered=lambda: proc.compute_1_to_1(wrapped_func, title=name), ) **Key changes:** 1. ``cdl.computation.image`` → ``sigima.proc.image`` 2. ``cdl.plugins`` → ``datalab.plugins`` 3. ``Wrap11Func`` → ``Wrap1to1Func`` 4. ``compute_11`` → ``compute_1_to_1`` Example 2: Plugin using built-in features ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **DataLab v0.20:** .. code-block:: python import cdl.obj import cdl.param import cdl.plugins class ExtractBlobs(cdl.plugins.PluginBase): """DataLab Example Plugin""" PLUGIN_INFO = cdl.plugins.PluginInfo( name="Extract blobs (example)", version="1.0.0", description="This is an example plugin", ) def preprocess(self) -> None: """Preprocess image""" panel = self.imagepanel param = cdl.param.BinningParam.create(sx=2, sy=2) panel.processor.compute_binning(param) panel.processor.compute_moving_median(cdl.param.MovingMedianParam.create(n=5)) def detect_blobs(self) -> None: """Detect circular blobs""" panel = self.imagepanel param = cdl.param.BlobOpenCVParam() param.filter_by_color = False param.min_area = 600.0 param.max_area = 6000.0 param.filter_by_circularity = True param.min_circularity = 0.8 param.max_circularity = 1.0 panel.processor.compute_blob_opencv(param) def create_actions(self) -> None: """Create actions""" acth = self.imagepanel.acthandler with acth.new_menu(self.PLUGIN_INFO.name): acth.new_action("Preprocess image", triggered=self.preprocess) acth.new_action("Detect circular blobs", triggered=self.detect_blobs) **DataLab v1.0:** .. code-block:: python import sigima.objects import sigima.params import datalab.plugins class ExtractBlobs(datalab.plugins.PluginBase): """DataLab Example Plugin""" PLUGIN_INFO = datalab.plugins.PluginInfo( name="Extract blobs (example)", version="1.0.0", description="This is an example plugin", ) def preprocess(self) -> None: """Preprocess image""" panel = self.imagepanel param = sigima.params.BinningParam.create(sx=2, sy=2) panel.processor.run_feature("binning", param) panel.processor.run_feature( "moving_median", sigima.params.MovingMedianParam.create(n=5) ) def detect_blobs(self) -> None: """Detect circular blobs""" panel = self.imagepanel param = sigima.params.BlobOpenCVParam() param.filter_by_color = False param.min_area = 600.0 param.max_area = 6000.0 param.filter_by_circularity = True param.min_circularity = 0.8 param.max_circularity = 1.0 panel.processor.run_feature("blob_opencv", param) def create_actions(self) -> None: """Create actions""" acth = self.imagepanel.acthandler with acth.new_menu(self.PLUGIN_INFO.name): acth.new_action("Preprocess image", triggered=self.preprocess) acth.new_action("Detect circular blobs", triggered=self.detect_blobs) **Key changes:** 1. ``cdl.param`` → ``sigima.params`` 2. ``cdl.plugins`` → ``datalab.plugins`` 3. ``compute_binning(param)`` → ``run_feature("binning", param)`` 4. ``compute_moving_median(param)`` → ``run_feature("moving_median", param)`` 5. ``compute_blob_opencv(param)`` → ``run_feature("blob_opencv", param)`` Example 3: Plugin creating objects and handling results ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **DataLab v0.20:** .. code-block:: python import numpy as np import cdl.obj as dlo import cdl.tests.data as test_data from cdl.computation import image as cpima from cdl.config import _ from cdl.plugins import PluginBase, PluginInfo def add_noise_to_image(src: dlo.ImageObj, p: dlo.NormalRandomParam) -> dlo.ImageObj: """Add gaussian noise to image""" dst = cpima.dst_11(src, "add_gaussian_noise", f"mu={p.mu},sigma={p.sigma}") test_data.add_gaussian_noise_to_image(dst, p) return dst class PluginTestData(PluginBase): """DataLab Test Data Plugin""" PLUGIN_INFO = PluginInfo( name=_("Test data"), version="1.0.0", description=_("Testing DataLab functionalities"), ) def add_noise_to_image(self) -> None: """Add noise to image""" self.imagepanel.processor.compute_11( add_noise_to_image, paramclass=dlo.NormalRandomParam, title=_("Add noise"), ) def create_noisygauss_image(self) -> None: """Create 2D noisy gauss image""" newparam = self.edit_new_image_parameters( hide_image_height=True, hide_image_type=True ) if newparam is not None: obj = test_data.create_noisygauss_image(newparam, add_annotations=False) self.proxy.add_object(obj) def create_actions(self) -> None: """Create actions""" iah = self.imagepanel.acthandler with iah.new_menu(_("Test data")): iah.new_action(_("Add noise to image"), triggered=self.add_noise_to_image) iah.new_action( _("Create 2D noisy gauss image"), triggered=self.create_noisygauss_image, select_condition="always", ) **DataLab v1.0:** .. code-block:: python import numpy as np import sigima.objects import sigima.tests.data as test_data from sigima.proc import image as sipi from datalab.config import _ from datalab.plugins import PluginBase, PluginInfo def add_noise_to_image( src: sigima.objects.ImageObj, p: sigima.objects.NormalDistribution2DParam ) -> sigima.objects.ImageObj: """Add gaussian noise to image""" dst = sipi.dst_1to1(src, "add_gaussian_noise", f"mu={p.mu},sigma={p.sigma}") test_data.add_gaussian_noise_to_image(dst, p) return dst class PluginTestData(PluginBase): """DataLab Test Data Plugin""" PLUGIN_INFO = PluginInfo( name=_("Test data"), version="1.0.0", description=_("Testing DataLab functionalities"), ) def add_noise_to_image(self) -> None: """Add noise to image""" self.imagepanel.processor.compute_1_to_1( add_noise_to_image, paramclass=sigima.objects.NormalDistribution2DParam, title=_("Add noise"), ) def create_noisy_gaussian_image(self) -> None: """Create 2D noisy gauss image""" newparam = self.edit_new_image_parameters( hide_height=True, hide_type=True ) if newparam is not None: obj = test_data.create_noisy_gaussian_image(newparam, add_annotations=False) self.proxy.add_object(obj) def create_actions(self) -> None: """Create actions""" iah = self.imagepanel.acthandler with iah.new_menu(_("Test data")): iah.new_action(_("Add noise to image"), triggered=self.add_noise_to_image) iah.new_action( _("Create 2D noisy gaussian image"), triggered=self.create_noisy_gaussian_image, select_condition="always", ) **Key changes:** 1. ``cdl.obj`` → ``sigima.objects`` 2. ``cdl.tests.data`` → ``sigima.tests.data`` 3. ``cdl.computation.image`` → ``sigima.proc.image`` 4. ``dst_11`` → ``dst_1to1`` 5. ``compute_11`` → ``compute_1_to_1`` 6. ``dlo.NormalRandomParam`` → ``sigima.objects.NormalDistribution2DParam`` 7. ``create_noisygauss_image`` → ``create_noisy_gaussian_image`` 8. ``hide_image_height`` → ``hide_height``, ``hide_image_type`` → ``hide_type`` Working with result objects --------------------------- Changes to result objects ^^^^^^^^^^^^^^^^^^^^^^^^^ The result object architecture has been completely redesigned in v1.0: **v0.20 Result Objects:** - ``ResultProperties``: For tabular results (statistics, etc.) - ``ResultShape``: For geometric results (detected features, etc.) - These objects contained Qt-specific code and metadata handling logic - Methods like ``add_to(obj)`` and ``from_metadata_entry()`` were part of the result class **v1.0 Result Objects:** - ``TableResult``: Immutable, computation-oriented table results - ``GeometryResult``: Immutable, computation-oriented geometry results - No Qt or metadata dependencies - Metadata handling moved to DataLab adapter classes Using TableResult and GeometryResult ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In v1.0, when your plugin receives results from ``compute_1_to_0`` operations, you'll work with ``TableResult`` or ``GeometryResult`` objects. **Example 1: Computing signal dynamic parameters (TableResult)** This example shows how to compute dynamic parameters (ENOB, SINAD, THD, etc.) and work with the resulting ``TableResult``: .. code-block:: python import sigima.params import sigima.proc.signal from datalab.adapters_metadata import TableAdapter # Get the current signal from the panel panel = self.signalpanel obj = panel.objview.get_current_object() # Compute dynamic parameters param = sigima.params.DynamicParam.create(full_scale=1.0) table = sigima.proc.signal.dynamic_parameters(obj, param) # Access specific values from the table enob = table["enob"][0] # Effective Number of Bits sinad = table["sinad"][0] # Signal-to-Noise and Distortion Ratio thd = table["thd"][0] # Total Harmonic Distortion # Convert to dictionary for easy access result_dict = table.as_dict() print(f"ENOB: {result_dict['enob']}") print(f"SINAD: {result_dict['sinad']} dB") # Store result in object metadata using adapter adapter = TableAdapter(table) adapter.add_to(obj) # Convert to pandas DataFrame for further processing df = table.to_dataframe() print(df) **Example 2: Detecting image peaks (GeometryResult)** This example shows how to detect peaks in an image and work with the resulting ``GeometryResult``: .. code-block:: python import sigima.params import sigima.proc.image from datalab.adapters_metadata import GeometryAdapter # Get the current image from the panel panel = self.imagepanel obj = panel.objview.get_current_object() # Configure peak detection parameters param = sigima.params.Peak2DDetectionParam.create( size=50, # Neighborhood size threshold=0.5, # Relative threshold create_rois=True # Create ROI for each peak ) # Compute peak detection geometry = sigima.proc.image.peak_detection(obj, param) # Access geometry data coords = geometry.coords # numpy array of shape (n_peaks, 2) n_peaks = len(coords) print(f"Detected {n_peaks} peaks") # Iterate over detected peaks for i, (x, y) in enumerate(coords): print(f"Peak {i+1}: x={x:.2f}, y={y:.2f}") # Check geometry kind from sigima.objects import KindShape assert geometry.kind == KindShape.POINT # Store geometry in object metadata using adapter adapter = GeometryAdapter(geometry) adapter.add_to(obj) **Example 3: Computing bandwidth (GeometryResult with segments)** This example shows how to compute signal bandwidth, which returns a segment geometry: .. code-block:: python import sigima.proc.signal from datalab.adapters_metadata import GeometryAdapter # Get the current signal from the panel panel = self.signalpanel obj = panel.objview.get_current_object() # Compute -3dB bandwidth geometry = sigima.proc.signal.bandwidth_3db(obj) # Access segment coordinates [x0, y0, x1, y1] x0, y0, x1, y1 = geometry.coords[0] print(f"Bandwidth segment: ({x0}, {y0}) to ({x1}, {y1})") # Calculate bandwidth length bandwidth = geometry.segments_lengths()[0] print(f"Bandwidth@-3dB: {bandwidth:.2f}") # Store in metadata adapter = GeometryAdapter(geometry) adapter.add_to(obj) Retrieving results from metadata ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To retrieve results stored in object metadata: .. code-block:: python from datalab.adapters_metadata import TableAdapter, GeometryAdapter obj = ... # Some signal or image object # Iterate over all table results for adapter in TableAdapter.iterate_from_obj(obj): result = adapter.result # TableResult instance title = adapter.title df = result.to_dataframe() # Iterate over all geometry results for adapter in GeometryAdapter.iterate_from_obj(obj): result = adapter.result # GeometryResult instance title = adapter.title coords = result.coords Processor method changes ------------------------ The processor interface has been unified in v1.0. Most specific ``compute_*`` methods now use the generic ``run_feature()`` method. Using run_feature() ^^^^^^^^^^^^^^^^^^^ The ``run_feature()`` method is a unified interface for running processing features: .. code-block:: python # v1.0 - Generic interface proc = panel.processor # Simple features (no parameters) proc.run_feature("normalize") proc.run_feature("fft") # Features with parameters param = sigima.params.GaussianParam.create(sigma=2.0) proc.run_feature("gaussian_filter", param) # Features with direct function reference import sigima.proc.image as sipi proc.run_feature(sipi.normalize) proc.run_feature(sipi.gaussian_filter, param) Method renaming ^^^^^^^^^^^^^^^ Several processor methods have been renamed for consistency: .. list-table:: :header-rows: 1 :widths: 50 50 * - v0.20 - v1.0 * - ``compute_11(func, ...)`` - ``compute_1_to_1(func, ...)`` * - ``compute_10(func, ...)`` - ``compute_1_to_0(func, ...)`` * - ``compute_n1(func, ...)`` - ``compute_n_to_1(func, ...)`` * - ``compute_1n(func, ...)`` - ``compute_1_to_n(func, ...)`` * - ``compute_21(func, ...)`` - ``compute_2_to_1(func, ...)`` Built-in features using run_feature ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Most built-in processing features that previously had dedicated ``compute_*`` methods now use ``run_feature()``: .. code-block:: python # v0.20 proc.compute_binning(param) proc.compute_moving_median(param) proc.compute_blob_opencv(param) proc.compute_gaussian_filter(param) # v1.0 proc.run_feature("binning", param) proc.run_feature("moving_median", param) proc.run_feature("blob_opencv", param) proc.run_feature("gaussian_filter", param) Some complex features still have dedicated methods: .. code-block:: python # These still use dedicated methods in v1.0 proc.compute_roi_extraction(roi) proc.compute_multigaussianfit() proc.compute_peak_detection(param) Testing your plugin ------------------- After migration, thoroughly test your plugin: 1. **Import checks**: Verify all imports work correctly 2. **Parameter creation**: Check that parameter classes are correctly instantiated 3. **Object creation**: Test signal/image object creation functions 4. **Processing operations**: Verify all processing features work as expected 5. **Result handling**: Check that results are correctly generated and stored 6. **GUI integration**: Test that menus and actions appear correctly Common issues and solutions --------------------------- Import errors ^^^^^^^^^^^^^ **Problem**: ``ModuleNotFoundError: No module named 'cdl'`` **Solution**: Update all imports from ``cdl.*`` to either ``datalab.*`` or ``sigima.*`` depending on the module. Attribute errors on processor ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Problem**: ``AttributeError: 'ImageProcessor' object has no attribute 'compute_binning'`` **Solution**: Replace ``compute_*`` method calls with ``run_feature()`` calls: .. code-block:: python # Wrong (v0.20 style) proc.compute_binning(param) # Correct (v1.0 style) proc.run_feature("binning", param) Result object incompatibility ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Problem**: ``AttributeError: 'TableResult' object has no attribute 'add_to'`` **Solution**: Use adapter classes for metadata operations: .. code-block:: python # Wrong (v0.20 style) result.add_to(obj) # Correct (v1.0 style) from datalab.adapters_metadata import TableAdapter TableAdapter(result).add_to(obj) Missing parameters ^^^^^^^^^^^^^^^^^^ **Problem**: ``ImportError: cannot import name 'SomeParam' from 'datalab'`` **Solution**: Import parameters from ``sigima.params`` instead of ``cdl.param``: .. code-block:: python # Wrong from cdl.param import GaussianParam # Correct from sigima.params import GaussianParam Additional resources -------------------- - `DataLab v1.0 documentation `_ - `Sigima documentation `_ - `Plugin examples `_ - :doc:`DataLab API reference ` - `Sigima API reference `_ Getting help ------------ If you encounter issues during migration: 1. Check the `GitHub issue tracker `_ 2. Consult the built-in plugin examples in the ``datalab/plugins`` directory DataLab-1.0.2/doc/features/advanced/model.rst000066400000000000000000000016511511411446000207640ustar00rootroot00000000000000.. _ref-to-model: Internal data model =================== .. meta:: :description: Internal model of DataLab, the open-source scientific data analysis and visualisation platform :keywords: DataLab, internal model, data model, signal, image, dataset, parameter, computation, scientific data analysis, visualisation, platform In its internal data model, DataLab stores data using two main classes: * :class:`sigima.objects.SignalObj`, which represents a signal object, and * :class:`sigima.objects.ImageObj`, which represents an image object. These classes are defined in the :mod:`sigima.objects` package. Also, DataLab uses many different datasets (based on guidata's ``DataSet`` class) to store the parameters of the computations. These datasets are defined in different modules but are exposed publicly in the :mod:`sigima.params` package. .. seealso:: The :ref:`api` section for more information on the public API. DataLab-1.0.2/doc/features/advanced/plugins.rst000066400000000000000000000124231511411446000213440ustar00rootroot00000000000000.. _about_plugins: Plugins ======= .. meta:: :description: Plugin system for DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, plugin, processing, input/output, HDF5, file format, data analysis, visualization, scientific, open-source, platform DataLab supports a robust plugin architecture, allowing users to extend the application’s features without modifying its core. Plugins can introduce new processing tools, data import/export formats, or custom GUI elements — all seamlessly integrated into the platform. What is a plugin? ----------------- A plugin is a Python module that is automatically loaded by DataLab at startup. It can define new features or modify existing ones. To be recognized as a plugin, the file must: - Be a Python module whose name **starts with** ``datalab_`` (e.g. ``datalab_myplugin.py``), - Contain a class that **inherits from** :class:`datalab.plugins.PluginBase`, - Include a class attribute named ``PLUGIN_INFO``, which must be an instance of :class:`datalab.plugins.PluginInfo`. This `PLUGIN_INFO` object is used by DataLab to retrieve metadata such as the plugin name, type, and menu integration. .. note:: Only Python files whose names start with ``datalab_`` will be scanned for plugins. DataLab supports three categories of plugins, each with its own purpose and registration mechanism: - **Processing and visualization plugins** Add custom actions for signal or image processing. These may include new computation functions, data visualization tools, or interactive dialogs. Integrated into a dedicated submenu of the “Plugins” menu. - **Input/Output plugins** Define new file formats (read and/or write) handled transparently by DataLab's I/O framework. These plugins extend compatibility with custom or third-party data formats. - **HDF5 plugins** Special plugins that support HDF5 files with domain-specific tree structures. These allow DataLab to interpret signals or images organized in non-standard ways. Where to put a plugin? ---------------------- Plugins are automatically discovered at startup from multiple locations: - The user plugin directory: Typically `~/.DataLab/plugins` on Linux/macOS or `C:/Users/YourName/.DataLab/plugins` on Windows. - A custom plugin directory: Configurable in DataLab's preferences. - The standalone distribution directory: If using a frozen (standalone) build, the `plugins` folder located next to the executable is scanned. - The internal `datalab/plugins` folder (not recommended for user plugins): This location is reserved for built-in or bundled plugins and should not be modified manually. How to develop a plugin? ------------------------ The recommended approach to developing a plugin is to derive from an existing example and adapt it to your needs. You can explore the source code in the `datalab/plugins` folder or refer to community-contributed examples. .. note:: Most of DataLab's signal and image processing functionalities have been externalized into a dedicated library called **Sigima** (`https://sigima.readthedocs.io/en/latest/ `_). When developing DataLab plugins, you will typically import and use many Sigima functions and features to perform data processing, analysis, and visualization tasks. Sigima provides a comprehensive set of tools for scientific data manipulation that can be leveraged directly in your plugins. To develop in your usual Python environment (e.g., with an IDE like `Spyder `_), you can: 1. **Install DataLab in your Python environment**, using one of the following methods: - :ref:`install_conda` - :ref:`install_pip` - :ref:`install_wheel` - :ref:`install_source` 2. **Or add the `datalab` package manually to your Python path**: - Download the source from the `PyPI page `_, - Unzip the archive, - Add the `datalab` directory to your PYTHONPATH (e.g., using the *PYTHONPATH Manager* in Spyder). .. note:: Even if you’ve installed `datalab` in your environment, you cannot run the full DataLab application directly from an IDE. You must launch DataLab via the command line or using the installer-created shortcut to properly test your plugin. Example: processing plugin -------------------------- Here is a minimal example of a plugin that prints a message when activated: .. literalinclude:: ../../../datalab/plugins/datalab_testdata.py Example: input/output plugin ---------------------------- Here is a simple example of a plugin that adds a new file formats to DataLab. .. literalinclude:: ../../../datalab/plugins/datalab_imageformats.py Other examples -------------- Other examples of plugins can be found in the `plugins/examples` directory of the DataLab source code (explore `here on GitHub `_). Migrating from v0.20 to v1.0 ---------------------------- If you have existing plugins written for DataLab v0.20, please refer to the :ref:`migration guide ` for detailed instructions on updating your plugins to work with DataLab v1.0. Public API ---------- .. automodule:: datalab.plugins :members: PluginInfo, PluginBase, FormatInfo, ImageFormatBase, ClassicsImageFormat, SignalFormatBase DataLab-1.0.2/doc/features/advanced/proxy.rst000066400000000000000000000000671511411446000210450ustar00rootroot00000000000000.. automodule:: datalab.control.proxy :no-members: DataLab-1.0.2/doc/features/advanced/remote.rst000066400000000000000000000107611511411446000211610ustar00rootroot00000000000000.. _ref-to-remote-control: Remote controlling ================== .. meta:: :description: How to remote control DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, remote control, XML-RPC, Python, IDE, Spyder, Jupyter, third-party application, signal, image, HDF5, calculation, processor DataLab may be controlled remotely using the `XML-RPC`_ protocol which is natively supported by Python (and many other languages). Remote controlling allows to access DataLab main features from a separate process. .. note:: If you are looking for a lighweight alternative solution to remote control DataLab (i.e. without having to install the whole DataLab package and its dependencies on your environment), you may use the `Sigima`_ package that provides a simple remote client for DataLab. To install it, just run: `pip install sigima`. .. _Sigima: https://github.com/DataLab-Platform/Sigima From an IDE ^^^^^^^^^^^ DataLab may be controlled remotely from an IDE (e.g. `Spyder`_ or any other IDE, or even a Jupyter Notebook) that runs a Python script. It allows to connect to a running DataLab instance, adds a signal and an image, and then runs calculations. This feature is exposed by the `RemoteProxy` class that is provided in module ``datalab.control.proxy``. From a third-party application ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DataLab may also be controlled remotely from a third-party application, for the same purpose. If the third-party application is written in Python 3, it may directly use the `RemoteProxy` class as mentioned above. From another language, it is also achievable, but it requires to implement a XML-RPC client in this language using the same methods of proxy server as in the `RemoteProxy` class. Data (signals and images) may also be exchanged between DataLab and the remote client application, in both directions. The remote client application may be written in any language that supports XML-RPC. For example, it is possible to write a remote client application in Python, Java, C++, C#, etc. The remote client application may be a graphical application or a command line application. The remote client application may be run on the same computer as DataLab or on a different computer. In the latter case, the remote client application must know the IP address of the computer running DataLab. The remote client application may be run before or after DataLab. In the latter case, the remote client application must try to connect to DataLab until it succeeds. Supported features ^^^^^^^^^^^^^^^^^^ Supported features are the following: - Switch to signal or image panel - Remove all signals and images - Save current session to a HDF5 file - Open HDF5 files into current session - Browse HDF5 file - Open a signal or an image from file - Add a signal - Add an image - Get object list - Run calculation with parameters .. note:: The signal and image objects are described on this section: :ref:`ref-to-model`. Some examples are provided to help implementing such a communication between your application and DataLab: - See module: ``datalab.tests.features.control.remoteclient_app_test`` - See module: ``datalab.tests.features.control.remoteclient_unit`` .. figure:: /images/shots/remote_control_test.png Screenshot of remote client application test (``datalab.tests.features.control.remoteclient_app_test``) Examples ^^^^^^^^ When using Python 3, you may directly use the `RemoteProxy` class as in examples cited above or below. Here is an example in Python 3 of a script that connects to a running DataLab instance, adds a signal and an image, and then runs calculations (the cell structure of the script make it convenient to be used in `Spyder`_ IDE): .. literalinclude:: ../../remote_example.py Here is a Python 2.7 reimplementation of this class: .. literalinclude:: ../../remotecontrol_py27.py Connection dialog ^^^^^^^^^^^^^^^^^ The DataLab package also provides a connection dialog that may be used to connect to a running DataLab instance. It is exposed by the :py:class:`datalab.widgets.connection.ConnectionDialog` class. .. figure:: ../../images/shots/connect_dialog.png Screenshot of connection dialog (``datalab.widgets.connection.ConnectionDialog``) Example of use: .. literalinclude:: ../../../datalab/tests/features/control/connect_dialog.py Public API ^^^^^^^^^^ .. autoclass:: datalab.control.remote.RemoteClient :inherited-members: .. _XML-RPC: https://docs.python.org/3/library/xmlrpc.html .. _Spyder: https://www.spyder-ide.org/DataLab-1.0.2/doc/features/advanced/v020_to_v100.csv000066400000000000000000000070761511411446000216150ustar00rootroot00000000000000DataLab v0.20;DataLab v1.0 **Module/package renames**; ``cdl``;``datalab`` ``cdl.obj``;``sigima.objects`` ``cdl.param``;``sigima.params`` ``cdl.computation.image``;``sigima.proc.image`` ``cdl.computation.signal``;``sigima.proc.signal`` ``cdl.plugins``;``datalab.plugins`` **Object creation and manipulation**; ``cdl.obj.create_image()``;``sigima.objects.create_image()`` ``cdl.obj.create_signal()``;``sigima.objects.create_signal()`` ``cdl.obj.ImageObj``;``sigima.objects.ImageObj`` ``cdl.obj.SignalObj``;``sigima.objects.SignalObj`` ``cdl.obj.create_image_roi()``;``sigima.objects.create_image_roi()`` ``cdl.obj.create_signal_roi()``;``sigima.objects.create_signal_roi()`` ``cdl.obj.ImageROI``;``sigima.objects.ImageROI`` ``cdl.obj.SignalROI``;``sigima.objects.SignalROI`` **Parameter classes**; ``cdl.param.BinningParam``;``sigima.params.BinningParam`` ``cdl.param.MovingMedianParam``;``sigima.params.MovingMedianParam`` ``cdl.param.BlobOpenCVParam``;``sigima.params.BlobOpenCVParam`` ``cdl.param.GaussianParam``;``sigima.params.GaussianParam`` ``cdl.param.*Param``;``sigima.params.*Param`` **Computation function wrappers**; ``cdl.computation.image.Wrap11Func``;``sigima.proc.image.Wrap1to1Func`` ``cdl.computation.signal.Wrap11Func``;``sigima.proc.signal.Wrap1to1Func`` ``cdl.computation.image.dst_11()``;``sigima.proc.image.dst_1to1()`` ``cdl.computation.signal.dst_11()``;``sigima.proc.signal.dst_1to1()`` **Processor methods** (`p` is a signal or image processor instance); ``p.compute_11(...)``;``p.compute_1_to_1(...)`` ``p.compute_10(...)``;``p.compute_1_to_0(...)`` ``p.compute_n1(...)``;``p.compute_n_to_1(...)`` ``p.compute_binning(param)``;``p.run_feature("binning", param)`` ``p.compute_moving_median(param)``;``p.run_feature("moving_median", param)`` ``p.compute_blob_opencv(param)``;``p.run_feature("blob_opencv", param)`` ``p.compute_*(param)``;``p.run_feature("feature_name", param)`` **Result objects**; ``cdl.obj.ResultProperties``;``sigima.objects.TableResult`` ``cdl.obj.ResultShape``;``sigima.objects.GeometryResult`` ``result.add_to(obj)``;``TableAdapter(result).add_to(obj)`` ``ResultShape.from_metadata_entry()``;``GeometryAdapter.from_metadata_entry()`` ``result.to_html(obj)``;``ResultHtmlGenerator.generate_html(result, obj)`` **Test data functions**; ``cdl.tests.data.*``;``sigima.tests.data.*`` ``cdl.tests.data.create_paracetamol_signal()``;``sigima.tests.data.create_paracetamol_signal()`` ``cdl.tests.data.add_gaussian_noise_to_signal()``;``sigima.tests.data.add_gaussian_noise_to_signal()`` ``cdl.tests.data.create_noisygauss_image()``;``sigima.tests.data.create_noisy_gaussian_image()`` ``cdl.tests.data.create_multigauss_image()``;``sigima.tests.data.create_multigaussian_image()`` **New image parameters**; ``edit_new_image_parameters(hide_image_dtype=True)``;``edit_new_image_parameters(hide_dtype=True)`` ``edit_new_image_parameters(hide_image_type=True)``;``edit_new_image_parameters(hide_type=True)`` ``edit_new_image_parameters(hide_image_height=True)``;``edit_new_image_parameters(hide_height=True)`` **I/O functions**; ``cdl.io.image.read_image()``;``sigima.io.image.read_image()`` ``cdl.io.image.write_image()``;``sigima.io.image.write_image()`` ``cdl.io.signal.read_signal()``;``sigima.io.signal.read_signal()`` ``cdl.io.signal.write_signal()``;``sigima.io.signal.write_signal()`` **Enumerations**; ``cdl.obj.ImageDatatypes``;``sigima.objects.ImageDatatypes`` ``cdl.obj.ImageTypes``;``sigima.objects.ImageTypes`` **DataLab-specific features**; ``cdl.config._``;``datalab.config._`` ``cdl.plugins.PluginBase``;``datalab.plugins.PluginBase`` ``cdl.plugins.PluginInfo``;``datalab.plugins.PluginInfo`` DataLab-1.0.2/doc/features/common/000077500000000000000000000000001511411446000166525ustar00rootroot00000000000000DataLab-1.0.2/doc/features/common/h5browser.rst000066400000000000000000000023451511411446000213300ustar00rootroot00000000000000.. _h5browser: HDF5 Browser ============ .. meta:: :description: HDF5 Browser in DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, workspace, HDF5, browser, scientific, data, analysis, visualization, platform The "HDF5 Browser" is a modal dialog box allowing to import almost any 1D and 2D data into DataLab workspace (and eventually metadata). .. image:: /images/h5browser.png Compatible curve or image data are displayed in a hierarchical view on the left panel, as well as other scalar data (scalar values are just shown for context purpose and may not be imported into DataLab workspace). The right panel displays the selected curve or image data. It also shows information on "Group" (path, description, etc.) and "Attributes" (names and values). The HDF5 browser is fairly simple to use: * On the left panel, select the curve or image data you want to import * Selected data is plotted on the right panel * Click on "Check all" if you want to import all compatible data * Then validate by clicking on "OK" .. note:: The HDF5 browser may be used to explore multiple HDF5 files at once, thus allowing to import data from different files into the same DataLab workspace. DataLab-1.0.2/doc/features/common/overview.rst000066400000000000000000000147661511411446000212700ustar00rootroot00000000000000.. _overview: Overview ======== .. meta:: :description: Overview and basic concepts of DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, workspace, scientific, data, analysis, visualization, platform Basic concepts -------------- Working with DataLab is very easy. The user interface is intuitive and self-explanatory. The main window is divided into two main areas: - The left area shows the list of data sets which are currently loaded in DataLab, distibuted over two tabs: **Signals** and **Images**. The user can switch between the two tabs by clicking on the corresponding tab: this switches the main window to the corresponding panel, as well as the menu and toolbar contents. Below the list of data sets, a **Properties** view shows information about the currently selected data set. - The right area shows the visualization of the currently selected data set. The visualization is updated automatically when the user selects a new data set in the list of data sets. .. figure:: /images/shots/s_app_at_startup.png DataLab main window, at startup. Internal data model and workspace --------------------------------- DataLab has its own internal data model, in which data sets are organized around a tree structure. Each panel in the main window corresponds to a branch of the tree. Each data set shown in the panels corresponds to a leaf of the tree. Inside the data set, the data is organized in an object-oriented way, with a set of attributes and methods. The data model is described in more details in the API section (see :mod:`sigima.objects`). For each data set (1D signal or 2D image), not only the data itself is stored, but also a set of metadata, which describes the data or the way it has to be displayed. The metadata is stored in a dictionary, which is accessible through the ``metadata`` attribute of the data set (and may also be browsed in the **Properties** view, with the **Metadata** button). The DataLab **Workspace** is defined as the collection of all data sets which are currently loaded in DataLab, in both the **Signals** and **Images** panels. Loading and saving the workspace -------------------------------- The following actions are available to manage the workspace from the **File** menu: - **Open HDF5 file**: load a workspace from an HDF5 file. - **Save to HDF5 file**: save the current workspace to an HDF5 file. - **Browse HDF5 file**: open the :ref:`h5browser` to explore the content of an HDF5 file and import data sets into the workspace. .. note:: Data sets may also be saved or loaded individually, using data formats such as `.txt` or `.npy` for 1D signals (see :ref:`open_signal` for the list of supported formats), , or `.tiff` or `.dcm` for 2D images (see :ref:`open_image` for the list of supported formats). Interactive object creation and processing ------------------------------------------ DataLab provides an interactive workflow for creating objects and adjusting processing parameters, allowing you to fine-tune results without creating multiple objects. Interactive object creation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When creating a new signal or image using the creation functions (e.g., Gaussian signal, 2D peak image, etc.), DataLab stores the creation parameters in the object's metadata. This enables interactive parameter adjustment after creation: 1. Create a signal or image using **Operations** > **Create** menu 2. Select the created object in the list 3. A **Creation** tab appears in the Properties panel (bottom-left) 4. Modify any creation parameter (amplitude, frequency, size, etc.) 5. Click **Apply** to regenerate the object with new parameters The object is updated in-place, preserving any subsequent processing or analysis results. This is particularly useful for: - Exploring different parameter values without cluttering the workspace - Fine-tuning object characteristics while observing the results - Educational purposes to demonstrate parameter effects .. note:: Interactive creation is only available for objects created with parameter classes (not for imported data from files). Interactive 1-to-1 processing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When applying a 1-to-1 processing operation that has configurable parameters (e.g., Gaussian filter, threshold, morphological operations), DataLab stores the processing metadata, enabling parameter adjustment and re-processing: 1. Apply a processing operation with parameters (e.g., **Processing** > **Filtering** > **Gaussian filter**) 2. The result object contains processing metadata (parameters, source object, function name) 3. Select the processed object in the list 4. A **Processing** tab appears in the Properties panel 5. Modify processing parameters (e.g., filter sigma value) 6. Click **Apply** to re-process with updated parameters The processed object is updated in-place with the new results. This workflow is ideal for: - Iteratively tuning filter parameters while observing results in real-time - Adjusting threshold values without creating multiple intermediate objects - Experimenting with different morphological structure element sizes - Educational demonstrations of parameter effects on processing results .. note:: **Processing metadata requirements:** - Only works for 1-to-1 processing functions with parameter classes - Processing functions without parameters (e.g., absolute value, inverse) work as before - Source object must still exist for re-processing (error shown if deleted) **Not supported for:** - 2-to-1 processing (operations combining two objects) - n-to-1 processing (operations aggregating multiple objects) - These patterns don't benefit significantly from interactive parameter adjustment Example workflow ^^^^^^^^^^^^^^^^ Here's a typical workflow using interactive processing: 1. **Create a test signal**: Operations > Create > Gaussian signal - Initial parameters: amplitude=1.0, mu=50, sigma=10 2. **Adjust creation parameters**: In the Creation tab, change sigma to 20, click Apply - Signal is regenerated with new width 3. **Apply Gaussian filter**: Processing > Filtering > Gaussian filter - Initial sigma=2.0 4. **Fine-tune filtering**: In the Processing tab, try sigma=1.0, then sigma=5.0 - Each Apply updates the filtered result - Compare different smoothing levels without creating multiple objects This interactive approach provides immediate visual feedback and keeps your workspace organized by avoiding proliferation of test objects with slightly different parameters. DataLab-1.0.2/doc/features/common/settings.rst000066400000000000000000000305221511411446000212460ustar00rootroot00000000000000.. _settings: Settings ======== .. meta:: :description: Settings of DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, settings, scientific, data, analysis, visualization, platform DataLab provides a comprehensive settings dialog to customize the application behavior, visualization defaults, and I/O operations. The settings are organized into five tabs: General, Processing, Visualization, I/O, and Console. General ------- The General settings tab contains main window and general feature settings: .. figure:: /images/shots/settings_main.png General settings tab **Color mode** Choose the color mode for the application interface (e.g., light, dark, or auto). **Process isolation** When enabled, each computation runs in a separate process, preventing the application from freezing during long computations. This is the recommended setting for better responsiveness. **RPC server** Enable the RPC (Remote Procedure Call) server to communicate with external applications, such as your own scripts running in Spyder, Jupyter, or other software. This allows programmatic control of DataLab. **Memory threshold** Set a threshold (in MB) below which a warning is displayed before loading new data. This helps prevent out-of-memory errors when working with large datasets. Set to 0 to disable the warning. **Third-party plugins** Enable or disable third-party plugins at startup. **Plugins path** Specify the directory path where DataLab should look for third-party plugins. DataLab will also discover plugins in your PYTHONPATH. Processing ---------- The Processing settings tab controls computation behavior and default parameters: .. figure:: /images/shots/settings_proc.png Processing settings tab **Operation mode** Choose the operation mode for computations taking N inputs: - **Single**: single operand mode - **Pairwise**: pairwise operation mode .. note:: These operation modes determine how DataLab handles computations involving multiple objects. They apply to two types of operations: - **N→1 operations**: Combine N (≥2) objects into 1 output (e.g. sum, average) - **N+1→N operations**: Apply an operation between N (≥1) objects and 1 operand to produce N outputs (e.g. difference, division) **Single operand mode** (default): Operations are applied independently within each group. - For **N→1 operations**: All objects in each group are combined into one result per group. Example with groups G1={A, B} and G2={C, D}, sum operation: - Result: Σ(A,B) and Σ(C,D) (one per group) - For **N+1→N operations**: Each selected object is combined with a single reference operand. Example with groups G1={A, B} and G2={C, D}, difference with reference R: - In G1: A-R, B-R - In G2: C-R, D-R **Pairwise operation mode**: Objects from different groups are combined at matching positions (all groups must have the same number of objects). - For **N→1 operations**: Objects at the same position in each group are combined. Example with groups G1={A, B} and G2={C, D}, sum operation: - Result: A+C and B+D (pairing by position) - For **N+1→N operations**: Objects at matching positions are combined pairwise. Example with groups G1={A, B}, G2={C, D}, difference with group G3={E, F}: - New group 1: A-E, B-F - New group 2: C-E, D-F **Use signal bounds for new signals** When enabled, the xmin and xmax values for new signals are initialized from the current signal's bounds. When disabled, default values are used. **Use image dimensions for new images** When enabled, the width and height values for new images are initialized from the current image's dimensions. When disabled, default values are used. **FFT shift** Enable FFT shift to center the zero-frequency component in the frequency spectrum for easier visualization and analysis. **Extract multiple ROIs in a single object** When enabled, multiple ROIs (Regions of Interest) are extracted into a single object. When disabled, each ROI is extracted into a separate object. **Ignore warnings** Suppress warning messages during computations. **X-array compatibility behavior** Choose the behavior when X arrays are incompatible in multi-signal computations: - **Ask**: display a confirmation dialog (default) - **Interpolate**: automatically interpolate signals Result management ^^^^^^^^^^^^^^^^^ **Keep results in metadata after computation** When enabled, results from previous analyses are kept in the object's metadata after computation. When disabled, results are removed. This option is disabled by default to avoid confusion from outdated results. **Show results dialog automatically after processing** When enabled, the results dialog is shown automatically after each processing operation producing results. When disabled, the results dialog is not shown automatically but results can still be viewed using the dedicated button or menu option. Visualization ------------- The Visualization settings tab controls how data is displayed. This tab is organized into four sub-tabs: Common, Signals, Images, and Results. Common settings ^^^^^^^^^^^^^^^ The Common sub-tab contains settings that apply to all visualizations: .. figure:: /images/shots/settings_view_common.png Visualization settings - Common sub-tab **Plot toolbar position** Choose where to position the plot toolbar (top, bottom, left, or right of the plot). **Ignore title insertion message** Suppress the information message when inserting an object title as an annotation label. Signals ^^^^^^^ The Signals sub-tab contains settings specific to signal visualizations: .. figure:: /images/shots/settings_view_signals.png Visualization settings - Signals sub-tab **Default line width** Default line width for curves representing signals. This setting affects all signal visualizations unless overridden individually. Note: for signals exceeding the line width performance threshold (see below), the line width is automatically clamped to 1.0 for optimal rendering performance. **Line width performance threshold** For signals with more than this number of points (default: 1,000), line width is automatically limited to 1.0 for performance reasons. This prevents the ~10x rendering slowdown caused by Qt's raster engine when drawing thick lines (width > 1.0) on large datasets. For smaller signals, the configured default line width applies normally. This optimization is transparent and requires no user intervention. **Use auto downsampling** Enable automatic downsampling for large signals to improve performance and visualization clarity. **Downsampling max points** Maximum number of points to display when downsampling is enabled (default: 10,000). **Autoscale margin** Percentage of margin to add around data when auto-scaling signal plots. A value of 0.2% adds a small margin for better visualization. Set to 0% for no margin (exact data bounds). **DateTime format (s/min/h)** Format string for datetime X-axis labels when using standard time units (s, min, h). Uses Python's strftime format codes (e.g., %H:%M:%S for hours:minutes:seconds). **DateTime format (ms/μs/ns)** Format string for datetime X-axis labels when using sub-second time units (ms, μs, ns). Uses Python's strftime format codes (e.g., %H:%M:%S.%f for hours:minutes:seconds.microseconds). **Results: edit shape styles** Click this button to configure the visual style for annotation shapes (rectangles, circles, segments, etc.) displayed on signal plots. This includes: - Line style, color, and width - Fill pattern, color, and transparency - Symbol shape, size, and colors These settings apply to all result shapes drawn on signal plots (e.g., peak markers, FWHM indicators, feature detection results). **Results: edit marker styles** Click this button to configure the visual style for cursor markers on signal plots. This includes: - Line style, color, and width - Symbol appearance - Text label formatting and positioning - Background transparency These settings apply to cursor-type markers used in signal analysis results. Images ^^^^^^ The Images sub-tab contains settings specific to image visualizations: .. figure:: /images/shots/settings_view_images.png Visualization settings - Images sub-tab **Lock aspect ratio to 1:1** When enabled, the aspect ratio of images is locked to 1:1. When disabled, the aspect ratio is determined by the physical pixel size (default and recommended setting). **Eliminate outliers** Percentage of the highest and lowest values to eliminate from the image histogram. Recommended values are below 1%. **Autoscale margin** Percentage of margin to add around data when auto-scaling image plots. A value of 0.2% adds a small margin for better visualization. Set to 0% for no margin (exact data bounds). **Default image visualization settings** Click this button to configure default visualization settings for images (colormap, interpolation, contrast, etc.). **Results: edit shape styles** Click this button to configure the visual style for annotation shapes displayed on image plots. Parameters are similar to signal shapes but optimized for image visualization (e.g., different colors for better visibility on images). **Results: edit marker styles** Click this button to configure the visual style for cursor markers on image plots. Results ^^^^^^^ The Results sub-tab contains settings for displaying analysis results on plots: .. figure:: /images/shots/settings_view_results.png Visualization settings - Results sub-tab These settings control how analysis results are displayed on plots to prevent performance issues with large datasets: **Maximum shapes to draw** Maximum number of geometry shapes to draw on the plot (default: 1,000). When the number of shapes exceeds this limit, only the first N shapes are drawn and a warning label is displayed. **Maximum cells in label** Maximum number of table cells (rows × columns) to display in merged result labels on plots (default: 100). When the number of cells exceeds this limit, the table is truncated. **Maximum columns in label** Maximum number of columns to display in merged result labels (default: 15). When the number of columns exceeds this limit, only the first N columns are displayed. **Show the merged result label by default** When enabled, the merged result label is shown on the plot by default for new objects. This setting can be toggled per-object using the checkbox in the Properties panel. .. note:: These settings affect only the visualization of results on plots. They do not affect the actual computation or storage of results in metadata. I/O --- The I/O settings tab controls input/output operations: .. figure:: /images/shots/settings_io.png I/O settings tab **Clear workspace before loading HDF5 file** When enabled, the workspace is cleared before loading an HDF5 file. **Ask before clearing workspace** When enabled, a confirmation dialog is displayed before clearing the workspace. **HDF5 full path in title** When enabled, the full path of the HDF5 dataset is used as the title for the signal/image object. When disabled, only the dataset name is used. **HDF5 file name in title** When enabled, the HDF5 file name is appended as a suffix to the title of the signal/image object. Console ------- The Console settings tab configures the internal console for debugging and advanced users: .. figure:: /images/shots/settings_console.png Console settings tab **Console enabled** Enable the internal Python console for debugging and advanced scripting. **Show console on error** When enabled, the console is automatically shown when an error occurs in the application. This is useful for debugging as it allows you to see the error traceback. **External editor path** Path to an external text editor to use for editing Python code from the console. **External editor arguments** Command-line arguments to pass to the external editor. DataLab-1.0.2/doc/features/image/000077500000000000000000000000001511411446000164445ustar00rootroot00000000000000DataLab-1.0.2/doc/features/image/2d_peak_detection.rst000066400000000000000000000052431511411446000225450ustar00rootroot00000000000000.. _ref-to-2d-peak-detection: 2D Peak Detection ================= DataLab provides a "2D Peak Detection" feature which is based on a minimum-maximum filter algorithm. .. figure:: /images/2d_peak_detection/peak2d_app_param.png 2D peak detection parameters. How to use the feature: - Create or open an image in DataLab workspace - Select "2d peak detection" in "Analysis" menu - Enter parameters "Neighborhoods size" and "Relative threhold" - Optionally, enable "Create regions of interest" to automatically create ROIs around each detected peak: * Choose ROI geometry: "Rectangle" or "Circle" * ROI size is automatically calculated based on the minimum distance between detected peaks (to avoid overlap) * This feature requires at least 2 detected peaks * Created ROIs can be useful for subsequent processing on each peak area (e.g., contour detection, measurements, etc.) .. figure:: /images/2d_peak_detection/peak2d_app_results.png 2d peak detection results (see test "peak2d_app.py") Results are shown in a table: - Each row is associated to a detected peak - First column shows the ROI index (0 if no ROI is defined on input image) - Second and third columns show peak coordinates .. figure:: /images/2d_peak_detection/peak2d_app_zoom.png Example of 2D peak detection. The 2d peak detection algorithm works in the following way: - First, the minimum and maximum filtered images are computed using a sliding window algorithm with a user-defined size (implementation based on `scipy.ndimage.minimum_filter `_ and `scipy.ndimage.maximum_filter `_) - Then, the difference between the maximum and minimum filtered images is clipped at a user-defined threshold - Resulting image features are labeled using `scipy.ndimage.label `_ - Peak coordinates are then obtained from labels center - Duplicates are eventually removed The 2d peak detection parameters are the following: - "Neighborhoods size": size of the sliding window (see above) - "Relative threshold": detection threshold - "Create regions of interest": if enabled, automatically creates ROIs around each detected peak (requires at least 2 peaks) - "ROI geometry": shape of the ROIs ("Rectangle" or "Circle") Feature is based on ``get_2d_peaks_coords`` function from ``sigima.tools`` module: .. literalinclude:: ../../../../Sigima/sigima/tools/image/detection.py :pyobject: get_2d_peaks_coords DataLab-1.0.2/doc/features/image/contour_detection.rst000066400000000000000000000037741511411446000227400ustar00rootroot00000000000000.. _ref-to-contour-detection: Contour Detection ================= DataLab provides a "Contour Detection" feature which is based on `the marching cubes algorithm `_. .. figure:: /images/contour_detection/contour_app_param.png Contour detection parameters. How to use the feature: - Create or open an image in DataLab workspace - Eventually create a ROI around the target area - Select "Contour detection" in "Analysis" menu - Enter parameter "Shape" ("Ellipse", "Circle" or "Polygon") - Optionally, enable "Create regions of interest" to automatically create ROIs around each detected contour: * Choose ROI geometry: "Rectangle" or "Circle" * ROI size is automatically calculated based on the minimum distance between detected contours (to avoid overlap) * This feature requires at least 2 detected contours * Created ROIs can be useful for subsequent processing on each contour area .. figure:: /images/contour_detection/contour_app_results.png Contour detection results (see test "contour_app.py") Results are shown in a table: - Each row is associated to a contour - First column shows the ROI index (0 if no ROI is defined on input image) - Other columns show contour coordinates: 4 columns for circles (coordinates of diameter), 8 columns for ellipses (coordinates of diameters) .. figure:: /images/contour_detection/contour_app.png Example of contour detection. The contour detection algorithm works in the following way: - First, iso-valued contours are computed (implementation based on `skimage.measure.find_contours.find_contours `_) - Then, each contour is fitted to the closest ellipse (or circle) Feature is based on ``get_contour_shapes`` function from ``sigima.tools`` module: .. literalinclude:: ../../../../Sigima/sigima/tools/image/detection.py :pyobject: get_contour_shapes DataLab-1.0.2/doc/features/image/menu_analysis.rst000066400000000000000000000175231511411446000220550ustar00rootroot00000000000000.. _ima-menu-analysis: Analysis features on Images ============================ This section describes the image analysis features available in DataLab. .. seealso:: :ref:`ima-menu-operations` for more information on operations that can be performed on images, or :ref:`ima-menu-processing` for information on processing features on images. .. figure:: /images/shots/i_analysis.png Screenshot of the "Analysis" menu. When the "Image Panel" is selected, the menus and toolbars are updated to provide image-related actions. The "Analysis" menu allows you to perform various computations on the current image or group of images. It also allows you to compute statistics, to compute the centroid, to detect peaks, to detect contours, and so on. .. note:: In DataLab vocabulary, an "analysis" is a feature that computes a scalar result from an image. This result is stored as metadata, and thus attached to image. This is different from a "processing" which creates a new image from an existing one. Statistics ^^^^^^^^^^ Compute statistics on selected image and show a summary table. .. figure:: /images/shots/i_stats.png Example of statistical summary table: each row is associated to an ROI (the first row gives the statistics for the whole data). Histogram ^^^^^^^^^ Compute histogram of selected image and show it in the Signal Panel. Parameters are: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Bins - Number of bins * - Lower limit - Lower limit of the histogram * - Upper limit - Upper limit of the histogram .. figure:: /images/shots/i_histogram.png Example of histogram. Intensity profiles ^^^^^^^^^^^^^^^^^^ Line profile ~~~~~~~~~~~~ Extract an horizontal or vertical profile from each selected image, and create new signals from these profiles. .. figure:: /images/shots/i_profile.png Line profile dialog. Parameters may also be set manually ("Edit profile parameters" button). Segment profile ~~~~~~~~~~~~~~~ Extract a segment profile from each selected image, and create new signals from these profiles. Average profile ~~~~~~~~~~~~~~~ Extract an horizontal or vertical profile averaged over a rectangular area, from each selected image, and create new signals from these profiles. .. figure:: /images/shots/i_profile_average.png Average profile dialog: the area is defined by a rectangle shape. Parameters may also be set manually ("Edit profile parameters" button). Radial profile extraction ~~~~~~~~~~~~~~~~~~~~~~~~~ Extract a radial profile from each selected image, and create new signals from these profiles. The following parameters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Center - Center around which the radial profile is computed: centroid, image center, or user-defined * - X - X coordinate of the center (if user-defined), in pixels * - Y - Y coordinate of the center (if user-defined), in pixels Horizontal and vertical projections ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Compute horizontal and vertical projection profiles: - Horizontal projection: Sum the pixel values along each row (projection on the x-axis). - Vertical projection: Sum the pixel values along each column (projection on the y-axis). Centroid ^^^^^^^^ Compute the centroid of the image using a robust adaptive algorithm. DataLab uses the :py:func:`sigima.tools.image.get_centroid_auto` function to estimate the image centroid. This function combines the robustness of a Fourier-based approach (as discussed by `Weisshaar et al. `_) with fallback mechanisms designed to handle pathological cases, such as: - truncated or asymmetric shapes, - off-center objects, - strong background noise. Internally, :py:func:`sigima.tools.image.get_centroid_auto` compares the Fourier result with two alternative estimators (a projected profile-based method :py:func:`sigima.tools.image.get_projected_profile_centroid` and a standard centroid from `scikit-image`), and selects the most consistent one. This strategy ensures accurate and stable results across a wide range of image types — from clean laboratory data to noisy or partial acquisitions. Minimum enclosing circle center ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Compute the circle contour enclosing image values above a threshold level defined as the half-maximum value. 2D peak detection ^^^^^^^^^^^^^^^^^ Automatically find peaks on image using a minimum-maximum filter algorithm. .. figure:: /images/shots/i_peak2d_test.png Example of 2D peak detection. .. seealso:: See :ref:`ref-to-2d-peak-detection` for more details on algorithm and associated parameters. Contour detection ^^^^^^^^^^^^^^^^^ Automatically extract contours and fit them using a circle or an ellipse, or directly represent them as a polygon. .. figure:: /images/shots/i_contour_test.png Example of contour detection. .. seealso:: See :ref:`ref-to-contour-detection` for more details on algorithm and associated parameters. .. note:: Computed scalar results are systematically stored as metadata. Metadata is attached to image and serialized with it when exporting current session in a HDF5 file. Circle Hough transform ^^^^^^^^^^^^^^^^^^^^^^ Detect circular shapes using circle Hough transform (implementation based on `skimage.transform.hough_circle_peaks `_). .. _ima-blob-detection: Blob detection ^^^^^^^^^^^^^^ Blob detection (DOG) Detect blobs using Difference of Gaussian (DOG) method (implementation based on `skimage.feature.blob_dog `_). Blob detection (DOH) Detect blobs using Determinant of Hessian (DOH) method (implementation based on `skimage.feature.blob_doh `_). Blob detection (LOG) Detect blobs using Laplacian of Gaussian (LOG) method (implementation based on `skimage.feature.blob_log `_). Blob detection (OpenCV) Detect blobs using OpenCV implementation of `SimpleBlobDetector `_. .. note:: **Automatic ROI creation for detection features** All detection features (2D peak detection, contour detection, circle Hough transform, and blob detection) support automatic ROI creation around detected objects. This feature: - Creates rectangular or circular ROIs around each detected feature - Automatically sizes ROIs based on minimum distance between detections - Requires at least 2 detected objects to determine appropriate ROI size - Enables subsequent processing on individual detected regions To use this feature, enable "Create regions of interest" in the detection parameters dialog and choose the desired ROI geometry. Show results ^^^^^^^^^^^^ Show the results of all analyses performed on the selected images. This shows the same table as the one shown after having performed a computation. Results label ^^^^^^^^^^^^^ Toggle the visibility of result labels on the plot. When enabled, this checkable menu item displays result annotations (such as centroid markers, detected contours, blob circles, or other analysis shapes) directly on the image plot. This option is synchronized between Signal and Image panels and persists across sessions. It is only enabled when results are available for the selected image. Plot results ^^^^^^^^^^^^ Plot the results of analyses performed on the selected images, with user-defined X and Y axes (e.g. plot the contour circle radius as a function of the image number). DataLab-1.0.2/doc/features/image/menu_create.rst000066400000000000000000000052211511411446000214650ustar00rootroot00000000000000.. _ima-menu-create: Create Images ============= This section describes how to create new images from various mathematical models. .. figure:: /images/shots/i_create.png Screenshot of the "Create" menu. When the "Image Panel" is selected, the menus and toolbars are updated to provide image-related actions. The "Create" menu allows you to create new images from various models (see below). New image ^^^^^^^^^ Create a new image from various models (supported datatypes: uint8, uint16, int16, float32, float64): .. list-table:: :header-rows: 1 :widths: 10, 20, 70 :class: longtable * - Icon - Model - Equation * - .. image:: ../../../datalab/data/icons/create/2d-zero.svg :width: 30px - Zero - :math:`z[i] = 0` * - .. image:: ../../../datalab/data/icons/create/2d-normal.svg :width: 30px - Normal distribution - :math:`z[i]` is normally distributed with configurable mean and standard deviation * - .. image:: ../../../datalab/data/icons/create/2d-poisson.svg :width: 30px - Poisson distribution - :math:`z[i]` is Poisson distributed with configurable mean * - .. image:: ../../../datalab/data/icons/create/2d-uniform.svg :width: 30px - Uniform distribution - :math:`z[i]` is uniformly distributed between two configurable bounds * - .. image:: ../../../datalab/data/icons/create/2d-gaussian.svg :width: 30px - 2D Gaussian - :math:`z = A \cdot \exp\left(-\dfrac{\left(\sqrt{\left(x-x_0\right)^2+\left(y-y_0\right)^2}-\mu\right)^2}{2\sigma^2}\right)` * - .. image:: ../../../datalab/data/icons/create/2d-ramp.svg :width: 30px - 2D Ramp - :math:`z = A (x - x_0) + B (y - y_0) + C` * - .. image:: ../../../datalab/data/icons/create/checkerboard.svg :width: 30px - Checkerboard - Alternating square pattern for calibration and spatial frequency analysis * - .. image:: ../../../datalab/data/icons/create/grating.svg :width: 30px - Sinusoidal grating - :math:`z = A \sin(2\pi(f_x \cdot x + f_y \cdot y) + \varphi) + C` * - .. image:: ../../../datalab/data/icons/create/ring.svg :width: 30px - Ring pattern - Concentric circular rings for radial analysis * - .. image:: ../../../datalab/data/icons/create/siemens.svg :width: 30px - Siemens star - Radial spoke pattern for resolution testing * - .. image:: ../../../datalab/data/icons/create/2d-sinc.svg :width: 30px - 2D sinc - :math:`z = A \cdot \mathrm{sinc}\left(\dfrac{\sqrt{(x-x_0)^2+(y-y_0)^2}}{\sigma}\right) + C` DataLab-1.0.2/doc/features/image/menu_edit.rst000066400000000000000000000255441511411446000211610ustar00rootroot00000000000000.. _ima-menu-edit: Manipulate metadata and annotations =================================== This section describes how to manipulate metadata and annotations in DataLab. Image metadata contains various information about the image or its representation, such as view settings, Regions Of Interest (ROIs), processing chain history, analysis results, and any other information that you may have added to the metadata of an image (or that comes from the image file itself). .. seealso:: For more information about Regions Of Interest (ROIs), see the :ref:`ima-menu-roi` section. .. figure:: /images/shots/i_edit.png Screenshot of the "Edit" menu. The "Edit" menu allows you to perform classic editing operations on the current image or group of images (create/rename group, move up/down, delete image/group of images, etc.). As detailed below, it also allows you to: - Navigate and utilize the processing chain history through actions like "Recompute" and "Select source objects". - Manipulate metadata and annotations associated with the current image, thanks to the "Metadata" and "Annotations" submenus which provide the following features. Recompute --------- The "Recompute" |recompute| action allows you to recompute the selected image(s) using their original processing parameters. This is useful when you want to re-execute the processing chain that was used to create an image, for example after modifying global settings or dependencies. .. |recompute| image:: ../../../datalab/data/icons/edit/recompute.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: This action is only available for images that were created through processing operations and have stored processing parameters. Select source objects --------------------- The "Select source objects" |goto_source| action allows you to select the source object(s) that were used to create the currently selected image. This helps trace back the processing history and understand which original images were used as input for the current result. .. |goto_source| image:: ../../../datalab/data/icons/edit/goto_source.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: This action is only available when exactly one image is selected and that image has source object references. Metadata -------- .. figure:: /images/shots/i_edit_metadata.png Screenshot of the "Metadata" submenu. Copy/paste metadata ^^^^^^^^^^^^^^^^^^^ As metadata contains useful information about the image, it can be copied and pasted from one image to another by selecting the "Copy metadata" |metadata_copy| and "Paste metadata" |metadata_paste| actions in the "Edit" menu. .. |metadata_copy| image:: ../../../datalab/data/icons/edit/metadata_copy.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |metadata_paste| image:: ../../../datalab/data/icons/edit/metadata_paste.svg :width: 24px :height: 24px :class: dark-light no-scaled-link This feature allows you to tranfer those information from one image to another: - :ref:`Regions Of Interest (ROIs) `: that is a very efficient way to reuse the same ROI on different images and easily compare the results of the analysis on those images - Analyze results, such as a centroid position or a contour detection (the relevance of transferring such information depends on the context and is up to the user to decide) - Any other information that you may have added to the metadata of an image .. note:: Copying metadata from an image to another will overwrite the metadata of the destination image (for the metadata keys that are common to both images) or simply add the metadata keys that are not present in the destination image. Import/export metadata ^^^^^^^^^^^^^^^^^^^^^^ Metadata can also be imported and exported from/to a JSON file using the "Import metadata" |metadata_import| and "Export metadata" |metadata_export| actions in the "Edit" menu. This is exactly the same as the copy/paste metadata feature (see above for more details on the use cases of this feature), but it allows you to save the metadata to a file and then import it back later. .. |metadata_import| image:: ../../../datalab/data/icons/edit/metadata_import.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |metadata_export| image:: ../../../datalab/data/icons/edit/metadata_export.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Delete metadata ^^^^^^^^^^^^^^^ When deleting metadata using the "Delete metadata" |metadata_delete| action in the "Edit" menu, you will be prompted to confirm the deletion of Region of Interests (ROIs) if they are present in the metadata. After this eventual confirmation, the metadata will be deleted, meaning that analysis results, ROIs, and any other information associated with the image will be lost. .. |metadata_delete| image:: ../../../datalab/data/icons/edit/metadata_delete.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Add metadata ^^^^^^^^^^^^ The "Add metadata" |metadata_add| action allows you to add custom metadata items to one or more selected images. This is useful for tagging images with experiment IDs, sample names, processing steps, or any other custom information. .. |metadata_add| image:: ../../../datalab/data/icons/edit/metadata_add.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. figure:: /images/shots/i_add_metadata.png Add metadata dialog. When you select "Add metadata..." from the Edit menu, a dialog appears where you can: - **Metadata key**: Enter the name of the metadata field to add - **Value pattern**: Define a pattern for the metadata value using Python format strings - **Conversion**: Choose how to store the value (string, float, integer, or boolean) - **Preview**: See how the metadata will be added to each selected image The value pattern supports the following placeholders: - ``{title}``: Image title - ``{index}``: 1-based index of the image in the selection - ``{count}``: Total number of selected images - ``{xlabel}``, ``{xunit}``, ``{ylabel}``, ``{yunit}``: Axis labels and units - ``{metadata[key]}``: Access existing metadata values You can also use format modifiers: - ``{title:upper}``: Convert to uppercase - ``{title:lower}``: Convert to lowercase - ``{index:03d}``: Format as 3-digit number with leading zeros **Examples:** - Add acquisition number: key=``acquisition``, pattern=``ACQ_{index:04d}``, conversion=string → Creates metadata like ``acquisition="ACQ_0001"`` - Add exposure time: key=``exposure_ms``, pattern=``{metadata[exposure]}``, conversion=float → Copies exposure from existing metadata and converts to float - Flag calibrated images: key=``is_calibrated``, pattern=``true``, conversion=bool → Sets ``is_calibrated=True`` for all selected images Annotations ----------- Annotations are visual elements that can be added to images to highlight specific features, mark regions of interest, or add explanatory notes. DataLab provides a dedicated submenu in the "Edit" menu for managing annotations. .. figure:: /images/shots/i_edit_annotations.png Screenshot of the "Annotations" submenu. Copy/paste annotations ^^^^^^^^^^^^^^^^^^^^^^ Annotations can be copied from one image and pasted to one or more other images using the "Copy annotations" |annotations_copy| and "Paste annotations" |annotations_paste| actions. This is useful when you want to apply the same visual markers across multiple images. .. |annotations_copy| image:: ../../../datalab/data/icons/edit/annotations_copy.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |annotations_paste| image:: ../../../datalab/data/icons/edit/annotations_paste.svg :width: 24px :height: 24px :class: dark-light no-scaled-link The "Paste annotations" action is only enabled when there are annotations in the clipboard (i.e., after using "Copy annotations"). Edit annotations ^^^^^^^^^^^^^^^^ The "Edit annotations" |annotations_edit| action opens a dialog where you can view, add, modify, or remove annotations from the current image. This provides a visual way to manage all annotations on an image. .. |annotations_edit| image:: ../../../datalab/data/icons/edit/annotations_edit.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Import/export annotations ^^^^^^^^^^^^^^^^^^^^^^^^^^ Annotations can be saved to and loaded from JSON files (.dlabann extension) using the "Import annotations" |annotations_import| and "Export annotations" |annotations_export| actions. This allows you to: - Save annotation sets for later reuse - Share annotations with colleagues - Archive annotations separately from image data - Apply the same annotations to different images across sessions .. |annotations_import| image:: ../../../datalab/data/icons/edit/annotations_import.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |annotations_export| image:: ../../../datalab/data/icons/edit/annotations_export.svg :width: 24px :height: 24px :class: dark-light no-scaled-link The "Export annotations" action is only available when the selected image has annotations. Delete annotations ^^^^^^^^^^^^^^^^^^ The "Delete annotations" |annotations_delete| action removes all annotations from the selected image(s). This action is only enabled when the selected image(s) have annotations. .. |annotations_delete| image:: ../../../datalab/data/icons/edit/annotations_delete.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: Annotations are stored separately from metadata and analysis results. Deleting annotations does not affect ROIs or other metadata items. Image titles ------------ Image titles may be considered as metadata from a user point of view, even if they are not stored in the metadata of the image (but in an attribute of the image object). The "Edit" menu allows you to: - "Add object title to plot": this action will add a label on top of the image with its title, which might be useful in combination with the "Distribute on a grid" operation (see :ref:`ima-menu-processing`) to easily identify the images. - "Copy titles to clipboard" |copy_titles|: this action will copy the titles of the selected images to the clipboard, which might be useful to paste them in a text editor or in a spreadsheet. Example of the content of the clipboard: .. code-block:: text g001: s001: lorentz(a=1,sigma=1,mu=0,ymin=0) s002: derivative(s001) s003: wiener(s002) g002: derivative(g001) s004: derivative(s001) s005: derivative(s002) s006: derivative(s003) g003: fft(g002) s007: fft(s004) s008: fft(s005) s009: fft(s006) .. |copy_titles| image:: ../../../datalab/data/icons/edit/copy_titles.svg :width: 24px :height: 24px :class: dark-light no-scaled-link DataLab-1.0.2/doc/features/image/menu_file.rst000066400000000000000000000130331511411446000211410ustar00rootroot00000000000000.. _ima-menu-file: Open and save Images ==================== This section describes how to open and save images (and workspaces). .. note:: For creating new images from mathematical models, see :ref:`ima-menu-create`. .. figure:: /images/shots/i_file.png Screenshot of the "File" menu. When the "Image Panel" is selected, the menus and toolbars are updated to provide image-related actions. The "File" menu allows you to: - Open, save and close images (see below). - Save and restore the current workspace or browse HDF5 files (see :ref:`overview`). - Edit DataLab preferences (see :ref:`settings`). .. _open_image: Open image ^^^^^^^^^^ Create a new image from the following supported filetypes: .. list-table:: :header-rows: 1 * - File type - Extensions * - PNG files - .png * - TIFF files - .tif, .tiff * - 8-bit images - .jpg, .gif * - NumPy arrays - .npy * - MAT-Files - .mat * - Text files - .txt, .csv, .asc * - Andor SIF files - .sif * - Princeton Instruments SPE files - .spe * - Opticks GEL files - .gel * - Hammamatsu NDPI files - .ndpi * - PCO Camera REC files - .rec * - SPIRICON files - .scor-data * - FXD files - .fxd * - Bitmap images - .bmp * - FT-Lab files - .ima .. note:: DataLab also supports any image format that can be read by the `imageio` library, provided that the associated plugin(s) are installed (see `imageio documentation `_) and that the output NumPy array data type and shape are supported by DataLab. To add a new file format, you may use the `imageio_formats` entry of DataLab configuration file. This entry is a formatted like the `IMAGEIO_FORMATS` object which represents the natively supported formats: .. autodata:: sigima.config.IMAGEIO_FORMATS Open from directory ^^^^^^^^^^^^^^^^^^^ Open multiple images from a specified directory. Save image ^^^^^^^^^^ Save current image (see "Open image" supported filetypes). Save images to directory ^^^^^^^^^^^^^^^^^^^^^^^^ Save all selected images to a specified directory, with configurable filename pattern and image format. .. figure:: /images/shots/i_save_to_directory.png Save images to directory dialog. When you select "Save to directory..." from the File menu, a dialog appears where you can: - **Directory**: Choose the target directory where images will be saved - **Filename pattern**: Define a pattern for the filenames using Python format strings - **File extension**: Select the output format (.png, .tiff, .h5ima, etc.) - **Overwrite**: Choose whether to overwrite existing files - **Preview**: See the list of files that will be created (with object IDs) The filename pattern supports the following placeholders: - ``{title}``: Image title - ``{index}``: 1-based index of the image in the selection (with zero-padding) - ``{count}``: Total number of selected images - ``{xlabel}``, ``{xunit}``, ``{ylabel}``, ``{yunit}``, ``{zlabel}``, ``{zunit}``: Axis labels and units - ``{metadata[key]}``: Access metadata values You can also use format modifiers, for example ``{index:03d}`` will format the index with 3 digits zero-padding (001, 002, 003, etc.). Import text file ^^^^^^^^^^^^^^^^ DataLab can natively import many types of image files (e.g. TIFF, JPEG, PNG, etc.). However some specific text file formats may not be supported. In this case, you can use the `Import text file` feature, which allows you to import a text file and convert it to an image. This feature is accessible from the `File` menu, under the `Import text file` option. It opens an import wizard that guides you through the process of importing the text file. Step 1: Select the source ------------------------- The first step is to select the source of the text file. You can either select a file from your computer or the clipboard if you have copied the text from another application. .. figure:: ../../images/import_text_file/i_01.png :alt: Step 1: Select the source :align: center Step 1: Select the source Step 2: Preview and configure the import ----------------------------------------- The second step consists of configuring the import and previewing the result. You can configure the following options: - **Delimiter**: The character used to separate the values in the text file. - **Comments**: The character used to indicate that the line is a comment and should be ignored. - **Rows to Skip**: The number of rows to skip at the beginning of the file. - **Maximum Number of Rows**: The maximum number of rows to import. If the file contains more rows, they will be ignored. - **Transpose**: If checked, the rows and columns will be transposed. - **Data type**: The destination data type of the imported data. When you are done configuring the import, click the `Apply` button to see the result. .. figure:: ../../images/import_text_file/i_02.png :alt: Step 2: Configure the import :align: center Step 2: Configure the import .. figure:: ../../images/import_text_file/i_03.png :alt: Step 2: Preview the result :align: center Step 2: Preview the result Step 3: Show graphical representation ------------------------------------- The third step shows a graphical representation of the imported data. You can use the `Finish` button to import the data into DataLab workspace. .. figure:: ../../images/import_text_file/i_04.png :alt: Step 3: Show graphical representation :align: center Step 3: Show graphical representationDataLab-1.0.2/doc/features/image/menu_operations.rst000066400000000000000000000225641511411446000224160ustar00rootroot00000000000000.. _ima-menu-operations: Operations on Images ==================== This section describes the operations that can be performed on images. .. seealso:: :ref:`ima-menu-processing` for more information on image processing features, or :ref:`ima-menu-analysis` for information on analysis features on images. .. figure:: /images/shots/i_operation.png Screenshot of the "Operations" menu. When the "Image Panel" is selected, the menus and toolbars are updated to provide image-related actions. The "Operations" menu allows you to perform various operations on the current image or group of images. It also allows you to extract profiles, distribute images on a grid, or resize images. Operations with a constant -------------------------- Create a new image which is the result of a constant operation on each selected image: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Operation - Equation * - |constant_add| Add - :math:`z_{k} = z_{k-1} + conv(c)` * - |constant_subtract| Subtract - :math:`z_{k} = z_{k-1} - conv(c)` * - |constant_multiply| Multiply - :math:`z_{k} = conv(z_{k-1} \times c)` * - |constant_divide| Divide - :math:`z_{k} = conv(\dfrac{z_{k-1}}{c})` .. |constant_add| image:: ../../../datalab/data/icons/operations/constant_add.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |constant_subtract| image:: ../../../datalab/data/icons/operations/constant_subtract.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |constant_multiply| image:: ../../../datalab/data/icons/operations/constant_multiply.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |constant_divide| image:: ../../../datalab/data/icons/operations/constant_divide.svg :width: 24px :height: 24px :class: dark-light no-scaled-link where :math:`c` is the constant value and :math:`conv` is the conversion function which handles data type conversion (keeping the same data type as the input image). Basic arithmetic operations --------------------------- Arithmetic operations are performed pixel by pixel between the selected images. .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - |sum| Sum - :math:`z_{M} = \sum_{k=0}^{M-1}{z_{k}}` * - |difference| Difference - :math:`z_{2} = z_{1} - z_{0}` * - |product| Product - :math:`z_{M} = \prod_{k=0}^{M-1}{z_{k}}` * - |division| Division - :math:`z_{2} = \dfrac{z_{1}}{z_{0}}` * - |inverse| Inverse - :math:`z_{2} = \dfrac{1}{z_{1}}` * - |exponential| Exponential - :math:`z_{2} = \exp(z_{1})` * - |logarithm| Logarithm (base 10) - :math:`z_{2} = \log_{10}(z_{1})` .. |sum| image:: ../../../datalab/data/icons/operations/sum.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |difference| image:: ../../../datalab/data/icons/operations/difference.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |product| image:: ../../../datalab/data/icons/operations/product.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |division| image:: ../../../datalab/data/icons/operations/division.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |inverse| image:: ../../../datalab/data/icons/operations/inverse.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |exponential| image:: ../../../datalab/data/icons/operations/exp.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |logarithm| image:: ../../../datalab/data/icons/operations/log10.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Basic mathematical functions ---------------------------- .. list-table:: :header-rows: 1 :widths: 40, 60 * - Function - Description * - |exp| Exponential - :math:`z_{k} = \exp(z_{k})` * - |log10| Logarithm (base 10) - :math:`z_{k} = \log_{10}(z_{k})` * - Log10(z+10) - :math:`z_{k} = \log_{10}(z_{k}+n)` (useful if image background is zero) .. |exp| image:: ../../../datalab/data/icons/operations/exp.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |log10| image:: ../../../datalab/data/icons/operations/log10.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Convolution and Deconvolution ------------------------------ .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Implementation * - |convolution| Convolution - Based on `scipy.signal.convolve `_ * - |deconvolution| Deconvolution - Frequency domain deconvolution .. |convolution| image:: ../../../datalab/data/icons/operations/convolution.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |deconvolution| image:: ../../../datalab/data/icons/operations/deconvolution.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Absolute value and complex image operations ------------------------------------------- .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - |abs| Absolute value - :math:`z_{k} = |z_{k-1}|` * - |phase| Phase (argument) - :py:func:`sigima.proc.image.phase` * - |complex_from_magnitude_phase| Combine with phase - Consider current image as the module and allow to select a image representing the phase to merge them in a complex image :py:func:`sigima.proc.image.complex_from_magnitude_phase` * - |re| Real part - :math:`z_{k} = \Re(z_{k-1})` * - |im| Imaginary part - :math:`z_{k} = \Im(z_{k-1})` * - |complex_from_real_imag| Combine with imaginary part - Consider current image as the real part and allow to select a image representing the imaginary part to merge them in a complex image :py:func:`sigima.proc.image.complex_from_real_imag` .. |abs| image:: ../../../datalab/data/icons/operations/abs.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |phase| image:: ../../../datalab/data/icons/operations/phase.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |complex_from_magnitude_phase| image:: ../../../datalab/data/icons/operations/phase.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |re| image:: ../../../datalab/data/icons/operations/re.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |im| image:: ../../../datalab/data/icons/operations/im.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |complex_from_real_imag| image:: ../../../datalab/data/icons/operations/im.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Data type conversion -------------------- The "Convert data type" |convert_dtype| action allows you to convert the data type of the selected images. For integer data types, the conversion is done by clipping the values to the new data type range before effectively converting the data type. For floating point data types, the conversion is straightforward. .. |convert_dtype| image:: ../../../datalab/data/icons/operations/convert_dtype.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: Data type conversion uses the :py:func:`sigima.tools.datatypes.clip_astype` function which relies on :py:func:`numpy.ndarray.astype` function with the default parameters (`casting='unsafe'`). Statistics between images ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create a new image which is the result of a statistical operation on each pixel of the selected images: .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - |average| Average - :math:`z_{M} = \dfrac{1}{M}\sum_{k=0}^{M-1}{z_{k}}` * - |standard_deviation| Standard Deviation - :math:`z_{M} = \sqrt{\dfrac{1}{M}\sum_{k=0}^{M-1}{(y_{k} - \bar{y})^{2}}}` * - |quadratic_difference| Quadratic difference - :math:`z_{2} = \dfrac{z_{1} - z_{0}}{\sqrt{2}}` .. |average| image:: ../../../datalab/data/icons/operations/average.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |standard_deviation| image:: ../../../datalab/data/icons/operations/std.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |quadratic_difference| image:: ../../../datalab/data/icons/operations/quadratic_difference.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Flat-field correction ^^^^^^^^^^^^^^^^^^^^^ Create a new image which is flat-field correction of the **two** selected images: .. math:: z_{1} = \begin{cases} \dfrac{z_{0}}{z_{f}}.\overline{z_{f}} & \text{if } z_{0} > z_{threshold} \\ z_{0} & \text{otherwise} \end{cases}` where :math:`z_{0}` is the raw image, :math:`z_{f}` is the flat field image, :math:`z_{threshold}` is an adjustable threshold and :math:`\overline{z_{f}}` is the flat field image average value: .. math:: \overline{z_{f}}= \dfrac{1}{N_{row}.N_{col}}.\sum_{i=0}^{N_{row}}\sum_{j=0}^{N_{col}}{z_{f}(i,j)} .. note:: Raw image and flat field image are supposedly already corrected by performing a dark frame subtraction. DataLab-1.0.2/doc/features/image/menu_processing.rst000066400000000000000000000451011511411446000223770ustar00rootroot00000000000000.. _ima-menu-processing: Processing Images ================= This section describes the image processing features available in DataLab. .. seealso:: :ref:`ima-menu-operations` for more information on operations that can be performed on images, or :ref:`ima-menu-analysis` for information on analysis features on images. .. figure:: /images/shots/i_processing.png Screenshot of the "Processing" menu. When the "Image Panel" is selected, the menus and toolbars are updated to provide image-related actions. The "Processing" menu allows you to perform various processing on the current image or group of images: it allows you to apply filters, to perform exposure correction, to perform denoising, to perform morphological operations, and so on. Geometry ^^^^^^^^ Flip and rotation ~~~~~~~~~~~~~~~~~ Create a new image by flipping or rotating the data of the selected image. The image may be flipped horizontally, vertically, or diagonally (transposition). It may be rotated by 90°, 270° or any user-defined value. .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - Flip horizontally - Mirror image along the vertical axis * - Flip diagonally - Transpose the image (swap X/Y axes) * - Flip vertically - Mirror image along the horizontal axis * - Rotate 90° right - Rotate image 90° clockwise * - Rotate 90° left - Rotate image 90° counter-clockwise * - Rotate by... - Rotate image by any angle (user-defined) Distribute images along a grid ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :header-rows: 1 :widths: 40, 60 * - Feature - Description * - |distribute_on_grid| Distribute on a grid - Distribute selected images on a regular grid * - |reset_positions| Reset image positions - Reset the positions of the selected images to first image (x0, y0) coordinates .. |distribute_on_grid| image:: ../../../datalab/data/icons/processing/distribute_on_grid.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |reset_positions| image:: ../../../datalab/data/icons/processing/reset_positions.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Axis transformation ^^^^^^^^^^^^^^^^^^^ Set uniform coordinates ~~~~~~~~~~~~~~~~~~~~~~~ Create a new image with uniform coordinates (i.e., with a constant pixel size in both X and Y directions). Polynomial calibration ~~~~~~~~~~~~~~~~~~~~~~ Create a new image which is a polynomial calibration of each selected image with respect to Z axis. .. note:: Linear calibration was removed from the UI as it is a special case of polynomial calibration with degree 1. Level adjustment ^^^^^^^^^^^^^^^^ Normalize ~~~~~~~~~ Create a new image which is the normalized version of each selected image by maximum, amplitude, sum, energy or RMS: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Normalization - Equation * - Maximum - :math:`z_{1} = \dfrac{z_{0}}{z_{\max}}` * - Amplitude - :math:`z_{1} = \dfrac{z_{0}}{z_{\max}-z_{\min}}` * - Area - :math:`z_{1} = \dfrac{z_{0}}{\sum_{i=0}^{N-1}{z_{i}}}` * - Energy - :math:`z_{1}= \dfrac{z_{0}}{\sqrt{\sum_{n=0}^{N}\left|z_{0}[n]\right|^2}}` * - RMS - :math:`z_{1}= \dfrac{z_{0}}{\sqrt{\dfrac{1}{N}\sum_{n=0}^{N}\left|z_{0}[n]\right|^2}}` Clipping ~~~~~~~~ Apply the clipping to each selected image. Offset correction ~~~~~~~~~~~~~~~~~ Create a new image which is the result of offset correction on each selected image. This operation is performed by subtracting the image background value which is estimated by the mean value of a user-defined rectangular area. Noise addition ^^^^^^^^^^^^^^ Generate new images by adding the same noise to each selected image. The available noise types are: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Noise - Description * - Gaussian - Normal distribution * - Uniform - Uniform distribution * - Poisson - Poisson distribution Noise reduction ^^^^^^^^^^^^^^^ Create a new image which is the result of noise reduction on each selected image. The following filters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Filter - Formula/implementation * - Gaussian filter - `scipy.ndimage.gaussian_filter `_ * - Moving average - `scipy.ndimage.uniform_filter `_ * - Moving median - `scipy.ndimage.median_filter `_ * - Wiener filter - `scipy.signal.wiener `_ Fourier analysis ^^^^^^^^^^^^^^^^ Zero padding ~~~~~~~~~~~~ Create a new image which is the result of zero padding on each selected image. The following parameters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Strategy - Zero padding strategy (see below) * - Rows - Number of rows to add (if `strategy` is 'custom') * - Columns - Number of columns to add (if `strategy` is 'custom') * - Position - Position of the added zeros: 'bottom-right', 'centered' Zero padding strategy refers to the method used to add zeros to the image, and it can be one of the following: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Strategy - Description * - next_pow2 - Next power of 2 (e.g. 512, 1024, ...) * - multiple_of_64 - Next multiple of 64 (e.g. 512, 576, ...) * - custom - Custom size (user-defined) FFT related functions ~~~~~~~~~~~~~~~~~~~~~ Create a new image which is the result of a Fourier analysis on each selected image. The following functions are available: .. list-table:: :header-rows: 1 :widths: 20, 30, 50 * - Function - Description - Formula/implementation * - FFT - Fast Fourier Transform - `numpy.fft.fft2 `_ * - Inverse FFT - Inverse Fast Fourier Transform - `numpy.fft.ifft2 `_ * - Magnitude spectrum - Optional: output in decibels (dB) - | :math:`z_{1} = \left|\FFT\left(z_{0}\right)\right|` or | :math:`z_{1} = 20 \log_{10} \left(\left|\FFT\left(z_{0}\right)\right|\right)` (dB) * - Phase spectrum - Phase of the FFT expressed in degrees, using `numpy.angle `_ - :math:`z_{1} = \angle\left(\FFT\left(z_{0}\right)\right)` * - Power spectral density - Optional: output in decibels (dB) - | :math:`z_{1} = \left|\FFT\left(z_{0}\right)\right|^2` or | :math:`z_{1} = 10 \log_{10} \left(\left|\FFT\left(z_{0}\right)\right|^2\right)` (dB) .. note:: FFT and inverse FFT are performed using frequency shifting if the option is enabled in DataLab settings (see :ref:`settings`). Frequency-domain filters ^^^^^^^^^^^^^^^^^^^^^^^^ The following frequency-domain filters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Method - Description * - Butterworth - Butterworth filter, based on `skimage.filters.butterworth `_ * - Gaussian filter - Gaussian filter Thresholding ^^^^^^^^^^^^ Create a new image which is the result of thresholding on each selected image, eventually based on user-defined parameters ("Parametric thresholding"). The following parameters are available when selecting "Parametric thresholding": .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Threshold method - The thresholding method to use (see table below) * - Bins - Number of bins for histogram calculation * - Value - Threshold value * - Operation - Operation to apply (> or <) The following thresholding methods are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Method - Implementation * - Manual - Manual thresholding (user-defined parameters) * - ISODATA - `skimage.filters.threshold_isodata `_ * - Li - `skimage.filters.threshold_li `_ * - Mean - `skimage.filters.threshold_mean `_ * - Minimum - `skimage.filters.threshold_minimum `_ * - Otsu - `skimage.filters.threshold_otsu `_ * - Triangle - `skimage.filters.threshold_triangle `_ * - Yen - `skimage.filters.threshold_yen `_ .. note:: The "All thresholding methods" option allows to perform all thresholding methods on the same image. Combined with the "distribute on a grid" option, this allows to compare the different thresholding methods on the same image. Exposure ^^^^^^^^ Create a new image which is the result of exposure correction on each selected image. The following functions are available: .. list-table:: :header-rows: 1 :widths: 25, 25, 50 * - Function - Implementation - Comments * - Gamma correction - `skimage.exposure.adjust_gamma `_ - * - Logarithmic correction - `skimage.exposure.adjust_log `_ - * - Sigmoid correction - `skimage.exposure.adjust_sigmoid `_ - * - Histogram equalization - `skimage.exposure.equalize_hist `_ - * - Adaptive histogram equalization - `skimage.exposure.equalize_adapthist `_ - Contrast Limited Adaptive Histogram Equalization (CLAHE) algorithm * - Intensity rescaling - `skimage.exposure.rescale_intensity `_ - Stretch or shrink image intensity levels Restoration ^^^^^^^^^^^ Create a new image which is the result of restoration on each selected image. The following functions are available: .. list-table:: :header-rows: 1 :widths: 25, 25, 50 * - Function - Implementation - Comments * - Total variation denoising - `skimage.restoration.denoise_tv_chambolle `_ - * - Bilateral filter denoising - `skimage.restoration.denoise_bilateral `_ - * - Wavelet denoising - `skimage.restoration.denoise_wavelet `_ - * - White Top-Hat denoising - `skimage.morphology.white_tophat `_ - Denoise image by subtracting its white top hat transform .. note:: The "All denoising methods" option allows to perform all denoising methods on the same image. Combined with the "distribute on a grid" option, this allows to compare the different denoising methods on the same image. Morphology ^^^^^^^^^^ Create a new image which is the result of morphological operations on each selected image, using a disk footprint. The following functions are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Function - Implementation * - White Top-Hat (disk) - `skimage.morphology.white_tophat `_ * - Black Top-Hat (disk) - `skimage.morphology.black_tophat `_ * - Erosion (disk) - `skimage.morphology.erosion `_ * - Dilation (disk) - `skimage.morphology.dilation `_ * - Opening (disk) - `skimage.morphology.opening `_ * - Closing (disk) - `skimage.morphology.closing `_ .. note:: The "All morphological operations" option allows to perform all morphological operations on the same image. Combined with the "distribute on a grid" option, this allows to compare the different morphological operations on the same image. Edges ^^^^^ Create a new image which is the result of edge filtering on each selected image. The following functions are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Function - Implementation * - Canny filter - `skimage.feature.canny `_ * - Farid filter - `skimage.filters.farid `_ * - Farid filter (horizontal) - `skimage.filters.farid_h `_ * - Farid filter (vertical) - `skimage.filters.farid_v `_ * - Laplace filter - `skimage.filters.laplace `_ * - Prewitt filter - `skimage.filters.prewitt `_ * - Prewitt filter (horizontal) - `skimage.filters.prewitt_h `_ * - Prewitt filter (vertical) - `skimage.filters.prewitt_v `_ * - Roberts filter - `skimage.filters.roberts `_ * - Scharr filter - `skimage.filters.scharr `_ * - Scharr filter (horizontal) - `skimage.filters.scharr_h `_ * - Scharr filter (vertical) - `skimage.filters.scharr_v `_ * - Sobel filter - `skimage.filters.sobel `_ * - Sobel filter (horizontal) - `skimage.filters.sobel_h `_ * - Sobel filter (vertical) - `skimage.filters.sobel_v `_ .. note:: The "All edges filters" option allows to perform all edge filtering algorithms on the same image. Combined with the "distribute on a grid" option, this allows to compare the different edge filters on the same image. Erase area ^^^^^^^^^^ Erase an area in the image as defined by a region of interest (ROI). .. note:: The region to erase is defined by the user through a dialog box. It can consist of a single ROI or multiple ROIs with various shapes (rectangular, circular, etc.). Note that the ROI defined here is not bound to any object; it is used solely to specify the area to erase in the image. In particular, it is independent of the image’s ROI, if any (the latter is shown in the dialog box as a masked area). Resize ^^^^^^ Create a new image which is a resized version of each selected image. Pixel binning ^^^^^^^^^^^^^ Combine clusters of adjacent pixels, throughout the image, into single pixels. The result can be the sum, average, median, minimum, or maximum value of the cluster. Resampling ^^^^^^^^^^ Generate new images by resampling each selected image. The following parameters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - math:`x_{min}` - Minimum x-coordinate of the output image * - :math:`x_{max}` - Maximum x-coordinate of the output image * - :math:`y_{min}` - Minimum y-coordinate of the output image * - :math:`y_{max}` - Maximum y-coordinate of the output image * - Mode - Image size definition mode: 'Pixel size' or 'Output shape'. The 'Pixel size' mode allows to define the pixel size of the new image, while the 'Output shape' mode allows to define the number of pixels of the new image. * - ΔX - Pixel size in x-direction (if 'Pixel size' mode is selected) * - ΔY - Pixel size in y-direction (if 'Pixel size' mode is selected) * - Width - Output image width in pixels (if 'Output shape' mode is selected) * - Height - Output image height in pixels (if 'Output shape' mode is selected) * - Interpolation method - Interpolation method to use: 'nearest', 'linear', 'cubic' * - Fill value - Value to use for points outside the input image domain (if None, function uses NaN for extrapolation) DataLab-1.0.2/doc/features/image/menu_roi.rst000066400000000000000000000101031511411446000210060ustar00rootroot00000000000000.. _ima-menu-roi: Regions Of Interest (ROI) ========================= This section describes how to manipulate Regions Of Interest (ROIs) for images in DataLab. .. figure:: /images/shots/i_roi.png Screenshot of the "ROI" menu. The "ROI" menu allows you to manage Regions Of Interest (ROIs) associated with the current image. .. seealso:: For more information about image metadata, see the :ref:`ima-menu-edit` section. The Regions Of Interest (ROI) are image areas that are defined by the user to perform specific operations, processing, or analysis on them. ROI are taken into account almost in all computing features in DataLab: - The "Operations" menu features are done only on the ROI if one is defined (except if the operation changes the data shape - like the resize operation - or the pixel size - like the binning operation). - The "Processing" menu actions are performed only on the ROI if one is defined (except if the destination signal data type is different from the source's, like in the Fourier analysis features or like the thresholding operations). - The "Analysis" menu actions are done only on the ROI if one is defined. .. note:: ROI are stored as metadata, and thus attached to image. The "ROI" menu allows you to: - "Edit graphically" |edit_roi|: open a dialog box to manage ROI associated with the selected image (add, remove, move, resize, etc.). The ROI definition dialog is exactly the same as ROI extraction (see below). .. figure:: /images/shots/i_roi_editor.png An image with an ROI. - "Edit numerically": open a dialog box to edit the parameters of the selected ROIs numerically (i.e. using a simple form). This allows you to define or modify ROIs based on numerical values. - "Create ROI grid" |roi_grid|: open a dialog box to create a grid of ROIs on the selected image. This allows you to define multiple ROIs distributed evenly across the image. - "Extract" |image_roi|: extract the defined ROI from the selected images. This will create a new image for each ROI (or a single image, if the "Extract all ROIs into a single image" option is selected in the dialog), with the same metadata as the original image, but with the data corresponding to the ROI only. The new images will be added to the current workspace. - "Copy" |roi_copy|: copy the defined ROI from the selected images to the clipboard. This allows you to paste the ROI into another image or use it in other operations. - "Paste" |roi_paste|: paste the copied ROI from the clipboard to the selected images. This will add the ROI to the images, allowing you to define or modify ROIs based on previously copied ones. - "Import" |roi_import|: import ROIs from a file. This allows you to load previously saved ROIs into the current image. - "Export" |roi_export|: export the defined ROIs to a file. This allows you to save the ROIs for later use or to share them with others. - "Remove all" |roi_delete|: remove all defined ROI for the selected images. .. figure:: /images/shots/i_roi_dialog.png ROI extraction dialog: the ROI is defined by moving the position and adjusting the size of a rectangle shape. .. |edit_roi| image:: ../../../datalab/data/icons/roi/roi.svg :width: 24px :height: 24px :class: dark-light .. |image_roi| image:: ../../../datalab/data/icons/roi/roi_ima.svg :width: 24px :height: 24px :class: dark-light .. |roi_grid| image:: ../../../datalab/data/icons/roi/roi_grid.svg :width: 24px :height: 24px :class: dark-light .. |roi_copy| image:: ../../../datalab/data/icons/roi/roi_copy.svg :width: 24px :height: 24px :class: dark-light .. |roi_paste| image:: ../../../datalab/data/icons/roi/roi_paste.svg :width: 24px :height: 24px :class: dark-light .. |roi_import| image:: ../../../datalab/data/icons/roi/roi_import.svg :width: 24px :height: 24px :class: dark-light .. |roi_export| image:: ../../../datalab/data/icons/roi/roi_export.svg :width: 24px :height: 24px :class: dark-light .. |roi_delete| image:: ../../../datalab/data/icons/roi/roi_delete.svg :width: 24px :height: 24px :class: dark-light DataLab-1.0.2/doc/features/image/menu_view.rst000066400000000000000000000106441511411446000212010ustar00rootroot00000000000000.. _ima-menu-view: View options for Images ======================= .. figure:: /images/shots/i_view.png Screenshot of the "View" menu. When the "Image Panel" is selected, the menus and toolbars are updated to provide image-related actions. The "View" menu allows you to visualize the current image or group of images. It also allows you to show/hide titles, to show/hide the contrast panel, to refresh the visualization, and so on. View in a new window ^^^^^^^^^^^^^^^^^^^^ Open a new window to visualize the selected images. This option allows you to show the selected images in a separate window, in which you can visualize the data more comfortably (e.g., by maximizing the window) as well as to add or edit annotations. When you click on the button "Annotations" in the toolbar of the new window, the annotation editing mode is activated (see the section "Edit annotations" below). View images side-by-side ^^^^^^^^^^^^^^^^^^^^^^^^ Open a new window to visualize the selected images side-by-side. This option allows you to show the selected images in a separate window, arranged in a grid layout, with synchronized zooming and panning. This is useful to compare multiple images simultaneously. Edit annotations ^^^^^^^^^^^^^^^^ Open a new window to edit annotations. This option allows you to edit the annotations of the selected images in a separate window. This is equivalent to select the "View in a new window" option and then click on the "Annotations" button in the toolbar of the new window. Annotations are used to add text, lines, rectangles, ellipses, and other geometrical shapes to the images. They are useful to highlight regions of interest, to add comments, to mark points, and so on. .. note:: The annotations are saved in the metadata of the image, so they are persistent and will be displayed every time you visualize the image. .. figure:: /images/annotations/image_annotations1.png Annotations may be added in the separate view. The typical workflow to edit annotations is as follows: 1. Select the "Edit annotations" option. 2. In the new window, add annotations by clicking on the corresponding buttons at the bottom of the window. 3. Eventually, customize the annotations by changing their properties (e.g., the text, the color, the position, etc.) using the "Parameters" option in the context menu of the annotations. 4. When you are done, click on the "OK" button to save the annotations. This will close the window and the annotations will be saved in the metadata of the image and will be displayed in the main window. .. figure:: /images/annotations/image_annotations2.png Annotations are now part of the image metadata. .. note:: Annotations may be copied from an image to another by using the "copy/paste metadata" features. Auto-refresh ^^^^^^^^^^^^ Automatically refresh the visualization when the data changes: - When enabled (default), the plot view is automatically refreshed when the data changes. - When disabled, the plot view is not refreshed until you manually refresh it by using the "Refresh manually" menu entry. Even though the refresh algorithm is optimized, it may still take some time to refresh the plot view when the data changes, especially when the data set is large. Therefore, you may want to disable the auto-refresh feature when you are working with large data sets, and enable it again when you are done. This will avoid unnecessary refreshes. Show only first selected image ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Toggle between showing all selected images or only the first one. When this option is enabled, only the first selected image is displayed in the plot view. This may be useful when multiple images are selected and focusing on a single image is (temporarily) preferred. Refresh manually ^^^^^^^^^^^^^^^^ Refresh the visualization manually. This triggers a refresh of the plot view. It is useful when the auto-refresh feature is disabled, or when you want to force a refresh of the plot view. Show contrast panel ^^^^^^^^^^^^^^^^^^^ Show/hide contrast adjustment panel. Show graphical object titles ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Show/hide titles of analysis results or annotations. This option allows you to show or hide the titles of the graphical objects (e.g., the titles of the analysis results or annotations). Hiding the titles can be useful when you want to visualize the data without any distractions, or if there are too many titles and they are overlapping.DataLab-1.0.2/doc/features/index.rst000066400000000000000000000071131511411446000172250ustar00rootroot00000000000000Features ======== .. meta:: :description: DataLab features :keywords: DataLab, features, validation, signal processing, image processing The following sections describe the features of DataLab, the open-source scientific data analysis and visualization platform. .. note:: Before jumping into the details of other parts of the documentation, it is recommended to start with the :ref:`overview` page, which describes the basic concepts of DataLab. .. seealso:: For a synthetic overview of the features of DataLab, please refer to the :ref:`key_features` page. .. _validation: Overview & Common features -------------------------- .. figure:: /images/shots/i_blob_detection_flower.png DataLab main window .. toctree:: :maxdepth: 1 :caption: Overview & Common features: common/overview common/settings common/h5browser .. raw:: latex \newpage Signal processing ----------------- This section describes the features specific to the signal processing panel. The signal processing panel is the default panel when DataLab is started. .. figure:: /images/shots/s_beautiful.png DataLab main window: Signal processing view .. toctree:: :maxdepth: 1 :caption: Signal processing: signal/menu_file signal/menu_create signal/menu_edit signal/menu_roi signal/menu_operations signal/menu_processing signal/menu_analysis signal/menu_view .. raw:: latex \newpage Image processing ---------------- This section describes the features specific to the image processing panel. The image processing panel can be selected by clicking on the "Images" tab at the bottom-right of the DataLab main window. .. figure:: /images/shots/i_beautiful.png DataLab main window: Image processing view .. toctree:: :maxdepth: 1 :caption: Image processing: image/menu_file image/menu_create image/menu_edit image/menu_roi image/menu_operations image/menu_processing image/menu_analysis image/menu_view image/2d_peak_detection image/contour_detection Validation ---------- DataLab is a platform for scientific data analysis and visualization. It may be used in a variety of scientific disciplines, including biology, physics, and astronomy. The common ground for all these disciplines is the need to validate the results of computational analysis against ground-truth data. This is a critical step in the scientific method, and it is essential for reproducibility and trust in the results. This is what we call **technical validation**. DataLab is also used in industrial applications, where the validation of the results is essential for guaranteeing the quality of the process but a wider range of validation is required to ensure that a maximum of use cases are covered from a functional point of view. This is what we call **functional validation**. Thus, DataLab validation may be categorized into two types: - **Technical validation**: ensures that the results of computational analysis are accurate and reliable. - **Functional validation**: checks that the software behaves as expected in a variety of use cases (classic automated unit test suite). .. toctree:: :maxdepth: 1 :caption: Validation: validation/technical validation/functional validation/status Advanced features ----------------- This section describes the advanced features of DataLab. .. toctree:: :maxdepth: 1 :caption: Advanced features: advanced/plugins advanced/migration_v020_to_v100 advanced/macros advanced/remote advanced/model advanced/logviewer advanced/instviewer advanced/command advanced/api DataLab-1.0.2/doc/features/signal/000077500000000000000000000000001511411446000166375ustar00rootroot00000000000000DataLab-1.0.2/doc/features/signal/menu_analysis.rst000066400000000000000000000211541511411446000222430ustar00rootroot00000000000000.. _sig-menu-analysis: Analysis features on Signals ============================= This section describes the signal analysis features available in DataLab. .. seealso:: :ref:`sig-menu-operations` for more information on operations that can be performed on signals, or :ref:`sig-menu-processing` for information on processing features on signals. .. figure:: /images/shots/s_analysis.png Screenshot of the "Analysis" menu. When the "Signal Panel" is selected, the menus and toolbars are updated to provide signal-related actions. The "Analysis" menu allows you to perform various computations on the selected signals, such as statistics, full width at half-maximum, or full width at 1/e². .. note:: In DataLab vocabulary, an "analysis" is a feature that computes a scalar result from a signal. This result is stored as metadata, and thus attached to signal. This is different from a "processing" which creates a new signal from an existing one. Statistics ^^^^^^^^^^ Compute statistics on selected signal and show a summary table. .. figure:: /images/shots/s_stats.png Example of statistical summary table: each row is associated to an ROI (the first row gives the statistics for the whole data). Histogram ^^^^^^^^^ Compute histogram of selected signal and show it. Parameters are: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Bins - Number of bins * - Lower limit - Lower limit of the histogram * - Upper limit - Upper limit of the histogram .. figure:: /images/shots/s_histogram.png Example of histogram. Full width at half-maximum ^^^^^^^^^^^^^^^^^^^^^^^^^^ Compute the Full Width at Half-Maximum (FWHM) of selected signal, using one of the following methods: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Method - Description * - Zero-crossing - Find the zero-crossings of the signal after having centered its amplitude around zero * - Gauss - Fit data to a Gaussian model using least-square method * - Lorentz - Fit data to a Lorentzian model using least-square method * - Voigt - Fit data to a Voigt model using least-square method .. figure:: /images/shots/s_fwhm.png The computed result is displayed as an annotated segment. Full width at 1/e² ^^^^^^^^^^^^^^^^^^ Fit data to a Gaussian model using least-square method. Then, compute the full width at 1/e². .. note:: Computed scalar results are systematically stored as metadata. Metadata is attached to signal and serialized with it when exporting current session in a HDF5 file. Arguments of the min and max ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Compute the smallest argument of the minima and the smallest argument of the maxima of the selected signal. Abscissa at y=... ^^^^^^^^^^^^^^^^^ Compute the abscissa at a given ordinate value for the selected signal. If there is no solution, the displayed result is NaN. If there are multiple solutions, the displayed result is the smallest value. Peak detection ^^^^^^^^^^^^^^ Create a new signal from semi-automatic peak detection of each selected signal. .. figure:: /images/shots/s_peak_detection.png Peak detection dialog: threshold is adjustable by moving the horizontal marker, peaks are detected automatically (see vertical markers with labels indicating peak position) Sampling rate and period ^^^^^^^^^^^^^^^^^^^^^^^^ Compute the sampling rate and period of selected signal. .. warning:: This feature assumes that the X values are regularly spaced. Dynamic parameters ^^^^^^^^^^^^^^^^^^ Compute the following dynamic parameters on selected signal: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - f - Frequency (sinusoidal fit) * - ENOB - Effective Number Of Bits * - SNR - Signal-to-Noise Ratio * - SINAD - Signal-to-Noise And Distortion Ratio * - THD - Total Harmonic Distortion * - SFDR - Spurious-Free Dynamic Range Bandwidth at -3 dB ^^^^^^^^^^^^^^^^^^ Determine the bandwidth at -3 dB by identifying the range of abscissa values where the signal remains greater than its maximum value minus 3 dB. .. warning:: This feature requires that the signal is expressed in decibels (dB). Contrast ^^^^^^^^ Compute the contrast of selected signal. The contrast is defined as the ratio of the difference and the sum of the maximum and minimum values: .. math:: \text{Contrast} = \dfrac{\text{max}(y) - \text{min}(y)}{\text{max}(y) + \text{min}(y)} .. note:: This feature assumes that the signal is a profile from an image, where the contrast is meaningful. This justifies the optical definition of contrast. Extract pulse features ^^^^^^^^^^^^^^^^^^^^^^ Perform comprehensive pulse analysis on selected signals, automatically extracting timing and amplitude characteristics for step and square pulse signals. This feature provides automated pulse characterization with intelligent signal type recognition and robust parameter extraction for digital signal analysis, oscilloscope measurements, and pulse timing validation. .. figure:: /images/shots/s_pulse_features.png Pulse features results as displayed in the Signal View. **Key Capabilities:** * **Automated signal recognition**: Heuristically identifies signal type (step, square, or other) for optimal analysis * **Polarity detection**: Automatically determines positive/negative pulse polarity using baseline comparison * **Comprehensive timing measurements**: Extracts rise time, fall time, FWHM, and timing parameters at specific amplitude fractions * **Baseline characterization**: Analyzes start and end baseline regions for accurate feature computation * **Robust algorithms**: Uses advanced statistical methods with noise tolerance and error handling **Parameters:** .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Signal shape - Signal type selection: Auto (automatic detection), Step, or Square * - Start baseline min - Lower X boundary for the start (initial) baseline region * - Start baseline max - Upper X boundary for the start (initial) baseline region * - End baseline min - Lower X boundary for the end (final) baseline region * - End baseline max - Upper X boundary for the end (final) baseline region * - Rise/Fall time - Reference levels for rise/fall time measurement with predefined choices: 5%-95% (High precision), 10%-90% (IEEE standard), 20%-80% (Noisy signals), 25%-75% (Alternative) **Extracted Features:** The analysis computes the following pulse characteristics: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Feature - Description * - Signal shape - Detected signal type (STEP, SQUARE, or OTHER) * - Polarity - Signal polarity (+1 for positive, -1 for negative pulses) * - Amplitude - Peak-to-peak amplitude of the pulse * - Offset - DC offset (baseline level) * - Rise time - Time from the lower to upper reference levels during rising edge * - Fall time - Time from the lower to upper reference levels during falling edge (square pulses only) * - FWHM - Full Width at Half Maximum (square pulses only) * - x50 - Time at which signal reaches 50% of maximum amplitude * - x100 - Time at which signal reaches 100% of maximum amplitude (plateau start) * - Foot duration - Duration of flat region before pulse rise * - Baseline ranges - Extracted start and end baseline boundary coordinates .. note:: Results are displayed in a comprehensive table showing all extracted parameters, and as visual annotations on the signal plot. For step signals, fall-related parameters (fall_time, fwhm) are not applicable and show as None. The feature works best with well-defined pulse signals that have clear baseline regions. Show results ^^^^^^^^^^^^ Show the results of all analyses performed on the selected signals. This shows the same table as the one shown after having performed a computation. Results label ^^^^^^^^^^^^^ Toggle the visibility of result labels on the plot. When enabled, this checkable menu item displays result annotations (such as FWHM, peak positions, or other analysis markers) directly on the signal plot. This option is synchronized between Signal and Image panels and persists across sessions. It is only enabled when results are available for the selected signal. Plot results ^^^^^^^^^^^^ Plot the results of analyses performed on the selected signals, with user-defined X and Y axes (e.g. plot the FWHM as a function of the signal index). DataLab-1.0.2/doc/features/signal/menu_create.rst000066400000000000000000000142511511411446000216630ustar00rootroot00000000000000.. _sig-menu-create: Create Signals ============== This section describes how to create new signals from various mathematical models. .. figure:: /images/shots/s_create.png Screenshot of the "Create" menu. When the "Signal Panel" is selected, the menus and toolbars are updated to provide signal-related actions. The "Create" menu allows you to create new signals from various models (see below). New signal ^^^^^^^^^^ Create a new signal from various models: .. list-table:: :header-rows: 1 :widths: 10, 20, 70 :class: longtable * - Icon - Model - Equation * - .. image:: ../../../datalab/data/icons/create/1d-zero.svg :width: 30px - Zero - :math:`y[i] = 0` * - .. image:: ../../../datalab/data/icons/create/1d-normal.svg :width: 30px - Normal distribution - :math:`y[i]` is normally distributed with configurable mean and standard deviation * - .. image:: ../../../datalab/data/icons/create/1d-poisson.svg :width: 30px - Poisson distribution - :math:`y[i]` is Poisson distributed with configurable mean * - .. image:: ../../../datalab/data/icons/create/1d-uniform.svg :width: 30px - Uniform distribution - :math:`y[i]` is uniformly distributed between two configurable bounds * - .. image:: ../../../datalab/data/icons/create/gaussian.svg :width: 30px - Gaussian - :math:`y = y_{0}+\dfrac{A}{\sqrt{2\pi} \cdot \sigma} \cdot \exp\left(-\dfrac{1}{2} \cdot \left(\dfrac{x-x_{0}}{\sigma}\right)^2\right)` * - .. image:: ../../../datalab/data/icons/create/lorentzian.svg :width: 30px - Lorentzian - :math:`y = y_{0}+\dfrac{A}{\sigma \cdot \pi} \cdot \dfrac{1}{1+\left(\dfrac{x-x_{0}}{\sigma}\right)^2}` * - .. image:: ../../../datalab/data/icons/create/voigt.svg :width: 30px - Voigt - :math:`y = y_{0}+A \cdot \dfrac{\Re\left(\exp\left(-z^2\right) \cdot \erfc(-j \cdot z)\right)}{\sqrt{2\pi} \cdot \sigma}` with :math:`z = \dfrac{x-x_{0}-j \cdot \sigma}{\sqrt{2} \cdot \sigma}` * - .. image:: ../../../datalab/data/icons/create/planck.svg :width: 30px - Blackbody (Planck's law) - :math:`y = \dfrac{2 h c^2}{\lambda^5 \left(\exp\left(\dfrac{h c}{\lambda k T}\right)-1\right)}` * - .. image:: ../../../datalab/data/icons/create/sine.svg :width: 30px - Sine - :math:`y = y_{0}+A\sin\left(2\pi \cdot f \cdot x+\phi\right)` * - .. image:: ../../../datalab/data/icons/create/cosine.svg :width: 30px - Cosine - :math:`y = y_{0}+A\cos\left(2\pi \cdot f \cdot x+\phi\right)` * - .. image:: ../../../datalab/data/icons/create/sawtooth.svg :width: 30px - Sawtooth - :math:`y = y_{0}+A \left( 2 \left( f x + \frac{\phi}{2\pi} - \left\lfloor f x + \frac{\phi}{2\pi} + \frac{1}{2} \right\rfloor \right) \right)` * - .. image:: ../../../datalab/data/icons/create/triangle.svg :width: 30px - Triangle - :math:`y = y_{0}+A \sawtooth\left(2 \pi f x + \phi, \text{width} = 0.5\right)` * - .. image:: ../../../datalab/data/icons/create/square.svg :width: 30px - Square - :math:`y = y_0 + A \sgn\left( \sin\left( 2\pi f x + \phi \right) \right)` * - .. image:: ../../../datalab/data/icons/create/sinc.svg :width: 30px - Cardinal sine - :math:`y = y_0 + A \sinc\left(2\pi f x + \phi\right)` * - .. image:: ../../../datalab/data/icons/create/linear_chirp.svg :width: 30px - Linear chirp - :math:`y = y_{0} + A \sin\left(\phi_{0} + 2\pi \left(f_{0}\, x + \frac{1}{2} c\, x^{2}\right)\right)` * - .. image:: ../../../datalab/data/icons/create/step.svg :width: 30px - Step - :math:`y = y_{0}+A \left\{\begin{array}{ll}1 & \text{if } x > x_{0} \\ 0 & \text{otherwise}\end{array}\right.` * - .. image:: ../../../datalab/data/icons/create/exponential.svg :width: 30px - Exponential - :math:`y = y_{0}+A \exp\left(B \cdot x\right)` * - .. image:: ../../../datalab/data/icons/create/logistic.svg :width: 30px - Logistic - :math:`y = y_{0} + \dfrac{A}{1 + \exp\left(-k \left(x - x_{0}\right)\right)}` * - .. image:: ../../../datalab/data/icons/create/pulse.svg :width: 30px - Pulse - :math:`y = y_{0}+A \left\{\begin{array}{ll}1 & \text{if } x_{0} < x < x_{1} \\ 0 & \text{otherwise}\end{array}\right.` * - .. image:: ../../../datalab/data/icons/create/step_pulse.svg :width: 30px - Step Pulse - | :math:`y = \left( \begin{cases} y_0 & \text{if } x < t_0 \\ y_0 + A \cdot \dfrac{x - t_0}{t_r} & \text{if } t_0 \leq x < t_0 + t_r \\ y_0 + A & \text{if } x \geq t_0 + t_r \end{cases} \right) + \mathcal{N}\left(0, \sigma_n\right)` | where: * :math:`t_0` is the pulse start time, * :math:`t_r` is the rise time, * :math:`\sigma_n` is the noise amplitude * - .. image:: ../../../datalab/data/icons/create/square_pulse.svg :width: 30px - Square Pulse - | :math:`y(x) = \left(\begin{cases} y_0 & \text{if } x < t_0 \\ y_0 + A \cdot \dfrac{x - t_0}{t_r} & \text{if } t_0 \leq x < t_0 + t_r \\ y_0 + A & \text{if } t_0 + t_r \leq x < t_1 \\ y_0 + A - A \cdot \dfrac{x - t_1}{t_f} & \text{if } t_1 \leq x < t_1 + t_f \\ y_0 & \text{if } x \geq t_1 + t_f \end{cases} \right) + \mathcal{N}(0, \sigma_n)` | where: * :math:`t_0` is the pulse start time, * :math:`t_r` is the rise time, * :math:`t_f` is the fall time, * :math:`t_1 = t_0 + t_r + d` is the time at which the decay starts, * :math:`\sigma_n` is the noise amplitude * the duration of the plateau :math:`d` is computed as :math:`d = t_{\mathrm{FWHM}} - \dfrac{t_r + t_f}{2}` from the full width at half maximum :math:`t_{\mathrm{FWHM}}` .. warning:: The duration of the plateau :math:`d` should not be negative. * - .. image:: ../../../datalab/data/icons/create/polynomial.svg :width: 30px - Polynomial - :math:`y = y_{0}+A_{0}+A_{1} \cdot x+A_{2} \cdot x^2+\ldots+A_{n} \cdot x^n` * - - Custom - Manual input of X and Y values DataLab-1.0.2/doc/features/signal/menu_edit.rst000066400000000000000000000252101511411446000213420ustar00rootroot00000000000000.. _sig-menu-edit: Manipulate metadata and annotations =================================== This section describes how to manipulate metadata and annotations in DataLab. Signal metadata contains various information about the signal or its representation, such as view settings, Regions Of Interest (ROIs), processing chain history, analysis results, and any other information that you may have added to the metadata of a signal (or that comes from the signal file itself). .. figure:: /images/shots/s_edit.png Screenshot of the "Edit" menu. The "Edit" menu allows you to perform classic editing operations on the current signal or group of signals (create/rename group, move up/down, delete signal/group of signals, etc.). As detailed below, it also allows you to: - Navigate and utilize the processing chain history through actions like "Recompute" and "Select source objects". - Manipulate metadata and annotations associated with the current signal, thanks to the "Metadata" and "Annotations" submenus which provide the following features. Recompute --------- The "Recompute" |recompute| action allows you to recompute the selected signal(s) using their original processing parameters. This is useful when you want to re-execute the processing chain that was used to create a signal, for example after modifying global settings or dependencies. .. |recompute| image:: ../../../datalab/data/icons/edit/recompute.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: This action is only available for signals that were created through processing operations and have stored processing parameters. Select source objects --------------------- The "Select source objects" |goto_source| action allows you to select the source object(s) that were used to create the currently selected signal. This helps trace back the processing history and understand which original signals were used as input for the current result. .. |goto_source| image:: ../../../datalab/data/icons/edit/goto_source.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: This action is only available when exactly one signal is selected and that signal has source object references. Metadata -------- .. figure:: /images/shots/s_edit_metadata.png Screenshot of the "Metadata" submenu. Copy/paste metadata ^^^^^^^^^^^^^^^^^^^ As metadata contains useful information about the signal, it can be copied and pasted from one signal to another by selecting the "Copy metadata" |metadata_copy| and "Paste metadata" |metadata_paste| actions in the "Edit" menu. .. |metadata_copy| image:: ../../../datalab/data/icons/edit/metadata_copy.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |metadata_paste| image:: ../../../datalab/data/icons/edit/metadata_paste.svg :width: 24px :height: 24px :class: dark-light no-scaled-link This feature allows you to tranfer those information from one signal to another: - :ref:`Regions Of Interest (ROIs) `: that is a very efficient way to reuse the same ROI on different signals and easily compare the results of the analysis on those signals - Analyze results, such as peak positions or FHWM intervals (the relevance of transferring such information depends on the context and is up to the user to decide) - Any other information that you may have added to the metadata of a signal .. note:: Copying metadata from a signal to another will overwrite the metadata of the destination signal (for the metadata keys that are common to both signals) or simply add the metadata keys that are not present in the destination signal. Import/export metadata ^^^^^^^^^^^^^^^^^^^^^^ Metadata can also be imported and exported from/to a JSON file using the "Import metadata" |metadata_import| and "Export metadata" |metadata_export| actions in the "Edit" menu. This is exactly the same as the copy/paste metadata feature (see above for more details on the use cases of this feature), but it allows you to save the metadata to a file and then import it back later. .. |metadata_import| image:: ../../../datalab/data/icons/edit/metadata_import.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |metadata_export| image:: ../../../datalab/data/icons/edit/metadata_export.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Delete metadata ^^^^^^^^^^^^^^^ When deleting metadata using the "Delete metadata" |metadata_delete| action in the "Edit" menu, you will be prompted to confirm the deletion of Region of Interests (ROIs) if they are present in the metadata. After this eventual confirmation, the metadata will be deleted, meaning that analysis results, ROIs, and any other information associated with the signal will be lost. .. |metadata_delete| image:: ../../../datalab/data/icons/edit/metadata_delete.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Add metadata ------------ The "Add metadata" |metadata_add| action allows you to add custom metadata items to one or more selected signals. This is useful for tagging signals with experiment IDs, sample names, processing steps, or any other custom information. .. |metadata_add| image:: ../../../datalab/data/icons/edit/metadata_add.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. figure:: /images/shots/s_add_metadata.png Add metadata dialog. When you select "Add metadata..." from the Edit menu, a dialog appears where you can: - **Metadata key**: Enter the name of the metadata field to add - **Value pattern**: Define a pattern for the metadata value using Python format strings - **Conversion**: Choose how to store the value (string, float, integer, or boolean) - **Preview**: See how the metadata will be added to each selected signal The value pattern supports the following placeholders: - ``{title}``: Signal title - ``{index}``: 1-based index of the signal in the selection - ``{count}``: Total number of selected signals - ``{xlabel}``, ``{xunit}``, ``{ylabel}``, ``{yunit}``: Axis labels and units - ``{metadata[key]}``: Access existing metadata values You can also use format modifiers: - ``{title:upper}``: Convert to uppercase - ``{title:lower}``: Convert to lowercase - ``{index:03d}``: Format as 3-digit number with leading zeros **Examples:** - Add experiment ID: key=``experiment_id``, pattern=``EXP_{index:03d}``, conversion=string → Creates metadata like ``experiment_id="EXP_001"`` - Add sample temperature: key=``temperature``, pattern=``{metadata[temp]}``, conversion=float → Copies temperature from existing metadata and converts to float - Mark processed signals: key=``is_processed``, pattern=``true``, conversion=bool → Sets ``is_processed=True`` for all selected signals Annotations ----------- Annotations are visual elements that can be added to signals to highlight specific features, mark regions of interest, or add explanatory notes. DataLab provides a dedicated submenu in the "Edit" menu for managing annotations. .. figure:: /images/shots/s_edit_annotations.png Screenshot of the "Annotations" submenu. Copy/paste annotations ^^^^^^^^^^^^^^^^^^^^^^ Annotations can be copied from one signal and pasted to one or more other signals using the "Copy annotations" |annotations_copy| and "Paste annotations" |annotations_paste| actions. This is useful when you want to apply the same visual markers across multiple signals. .. |annotations_copy| image:: ../../../datalab/data/icons/edit/annotations_copy.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |annotations_paste| image:: ../../../datalab/data/icons/edit/annotations_paste.svg :width: 24px :height: 24px :class: dark-light no-scaled-link The "Paste annotations" action is only enabled when there are annotations in the clipboard (i.e., after using "Copy annotations"). Edit annotations ^^^^^^^^^^^^^^^^ The "Edit annotations" |annotations_edit| action opens a dialog where you can view, add, modify, or remove annotations from the current signal. This provides a visual way to manage all annotations on a signal. .. |annotations_edit| image:: ../../../datalab/data/icons/edit/annotations_edit.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Import/export annotations ^^^^^^^^^^^^^^^^^^^^^^^^^^ Annotations can be saved to and loaded from JSON files (.dlabann extension) using the "Import annotations" |annotations_import| and "Export annotations" |annotations_export| actions. This allows you to: - Save annotation sets for later reuse - Share annotations with colleagues - Archive annotations separately from signal data - Apply the same annotations to different signals across sessions .. |annotations_import| image:: ../../../datalab/data/icons/edit/annotations_import.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |annotations_export| image:: ../../../datalab/data/icons/edit/annotations_export.svg :width: 24px :height: 24px :class: dark-light no-scaled-link The "Export annotations" action is only available when the selected signal has annotations. Delete annotations ^^^^^^^^^^^^^^^^^^ The "Delete annotations" |annotations_delete| action removes all annotations from the selected signal(s). This action is only enabled when the selected signal(s) have annotations. .. |annotations_delete| image:: ../../../datalab/data/icons/edit/annotations_delete.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: Annotations are stored separately from metadata and analysis results. Deleting annotations does not affect ROIs or other metadata items. Signal titles ------------- Signal titles may be considered as metadata from a user point of view, even if they are not stored in the metadata of the signal (but in an attribute of the signal object). The "Edit" menu allows you to: - "Add object title to plot": this action will add a label on top of the signal with its title. - "Copy titles to clipboard" |copy_titles|: this action will copy the titles of the selected signals to the clipboard, which might be useful to paste them in a text editor or in a spreadsheet. Example of the content of the clipboard: .. code-block:: text g001: s001: lorentz(a=1,sigma=1,mu=0,ymin=0) s002: derivative(s001) s003: wiener(s002) g002: derivative(g001) s004: derivative(s001) s005: derivative(s002) s006: derivative(s003) g003: fft(g002) s007: fft(s004) s008: fft(s005) s009: fft(s006) .. |copy_titles| image:: ../../../datalab/data/icons/edit/copy_titles.svg :width: 24px :height: 24px :class: dark-light no-scaled-link DataLab-1.0.2/doc/features/signal/menu_file.rst000066400000000000000000000112551511411446000213400ustar00rootroot00000000000000.. _sig-menu-file: Open and save Signals ===================== This section describes how to open and save signals (and workspaces). .. note:: For creating new signals from mathematical models, see :ref:`sig-menu-create`. .. figure:: /images/shots/s_file.png Screenshot of the "File" menu. When the "Signal Panel" is selected, the menus and toolbars are updated to provide signal-related actions. The "File" menu allows you to: - Open, save and close signals (see below). - Save and restore the current workspace or browse HDF5 files (see :ref:`overview`). - Edit DataLab preferences (see :ref:`settings`). .. _open_signal: Open signal ^^^^^^^^^^^ Create a new signal from the following supported filetypes: .. list-table:: :header-rows: 1 * - File type - Extensions * - Text files - .txt, .csv * - NumPy arrays - .npy * - MAT-Files - .mat * - FT-Lab files - .sig Open from directory ^^^^^^^^^^^^^^^^^^^ Open multiple signals from a specified directory. Save signal ^^^^^^^^^^^ Save current signal to the following supported filetypes: .. list-table:: :header-rows: 1 * - File type - Extensions * - Text files - .csv Save signals to directory ^^^^^^^^^^^^^^^^^^^^^^^^^ Save all selected signals to a specified directory, with configurable filename pattern and signal format. .. figure:: /images/shots/s_save_to_directory.png Save signals to directory dialog. When you select "Save to directory..." from the File menu, a dialog appears where you can: - **Directory**: Choose the target directory where signals will be saved - **Filename pattern**: Define a pattern for the filenames using Python format strings - **File extension**: Select the output format (.csv, .txt, etc.) - **Overwrite**: Choose whether to overwrite existing files - **Preview**: See the list of files that will be created (with object IDs) The filename pattern supports the following placeholders: - ``{title}``: Signal title - ``{index}``: 1-based index of the signal in the selection (with zero-padding) - ``{count}``: Total number of selected signals - ``{xlabel}``, ``{xunit}``, ``{ylabel}``, ``{yunit}``: Axis labels and units - ``{metadata[key]}``: Access metadata values You can also use format modifiers, for example ``{index:03d}`` will format the index with 3 digits zero-padding (001, 002, 003, etc.). Import text file ^^^^^^^^^^^^^^^^ DataLab can natively import signal files (e.g. CSV, NPY, etc.). However some specific text file formats may not be supported. In this case, you can use the `Import text file` feature, which allows you to import a text file and convert it to a signal. This feature is accessible from the `File` menu, under the `Import text file` option. It opens an import wizard that guides you through the process of importing the text file. Step 1: Select the source ------------------------- The first step is to select the source of the text file. You can either select a file from your computer or the clipboard if you have copied the text from another application. .. figure:: ../../images/import_text_file/s_01.png :alt: Step 1: Select the source :align: center Step 1: Select the source Step 2: Preview and configure the import ----------------------------------------- The second step consists of configuring the import and previewing the result. You can configure the following options: - **Delimiter**: The character used to separate the values in the text file. - **Comments**: The character used to indicate that the line is a comment and should be ignored. - **Rows to Skip**: The number of rows to skip at the beginning of the file. - **Maximum Number of Rows**: The maximum number of rows to import. If the file contains more rows, they will be ignored. - **Transpose**: If checked, the rows and columns will be transposed. - **Data type**: The destination data type of the imported data. - **First Column is X**: If checked, the first column will be used as the X axis. When you are done configuring the import, click the `Apply` button to see the result. .. figure:: ../../images/import_text_file/s_02.png :alt: Step 2: Configure the import :align: center Step 2: Configure the import .. figure:: ../../images/import_text_file/s_03.png :alt: Step 2: Preview the result :align: center Step 2: Preview the result Step 3: Show graphical representation ------------------------------------- The third step shows a graphical representation of the imported data. You can use the `Finish` button to import the data into DataLab workspace. .. figure:: ../../images/import_text_file/s_04.png :alt: Step 3: Show graphical representation :align: center Step 3: Show graphical representationDataLab-1.0.2/doc/features/signal/menu_operations.rst000066400000000000000000000211731511411446000226040ustar00rootroot00000000000000.. _sig-menu-operations: Operations on Signals ===================== This section describes the operations that can be performed on signals. .. seealso:: :ref:`sig-menu-processing` for more information on signal processing features, or :ref:`sig-menu-analysis` for information on analysis features on signals. .. figure:: /images/shots/s_operation.png Screenshot of the "Operations" menu. When the "Signal Panel" is selected, the menus and toolbars are updated to provide signal-related actions. The "Operations" menu allows you to perform various operations on the selected signals, such as arithmetic operations, peak detection, or convolution. Operations with a constant -------------------------- Create a new signal which is the result of a constant operation on each selected signal: .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - |constant_add| Addition - :math:`y_{k} = y_{k-1} + c` * - |constant_subtract| Subtraction - :math:`y_{k} = y_{k-1} - c` * - |constant_multiply| Multiplication - :math:`y_{k} = y_{k-1} \times c` * - |constant_divide| Division - :math:`y_{k} = \dfrac{y_{k-1}}{c}` .. |constant_add| image:: ../../../datalab/data/icons/operations/constant_add.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |constant_subtract| image:: ../../../datalab/data/icons/operations/constant_subtract.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |constant_multiply| image:: ../../../datalab/data/icons/operations/constant_multiply.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |constant_divide| image:: ../../../datalab/data/icons/operations/constant_divide.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Basic arithmetic operations --------------------------- .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - |sum| Sum - :math:`y_{M} = \sum_{k=0}^{M-1}{y_{k}}` * - |difference| Difference - :math:`y_{2} = y_{1} - y_{0}` * - |product| Product - :math:`y_{M} = \prod_{k=0}^{M-1}{y_{k}}` * - |division| Division - :math:`y_{2} = \dfrac{y_{1}}{y_{0}}` * - |inverse| Inverse - :math:`y_{2} = \dfrac{1}{y_{1}}` * - |exponential| Exponential - :math:`y_{2} = \exp(y_{1})` * - |logarithm| Logarithm (base 10) - :math:`y_{2} = \log_{10}(y_{1})` .. |sum| image:: ../../../datalab/data/icons/operations/sum.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |difference| image:: ../../../datalab/data/icons/operations/difference.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |product| image:: ../../../datalab/data/icons/operations/product.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |division| image:: ../../../datalab/data/icons/operations/division.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |inverse| image:: ../../../datalab/data/icons/operations/inverse.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |exponential| image:: ../../../datalab/data/icons/operations/exp.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |logarithm| image:: ../../../datalab/data/icons/operations/log10.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Convolution and Deconvolution ------------------------------ .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Implementation * - |convolution| Convolution - Based on `scipy.signal.convolve `_ * - |deconvolution| Deconvolution - Frequency domain deconvolution .. |convolution| image:: ../../../datalab/data/icons/operations/convolution.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |deconvolution| image:: ../../../datalab/data/icons/operations/deconvolution.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Absolute value and complex signal operations -------------------------------------------- .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - |abs| Absolute value - :math:`y_{k} = |y_{k-1}|` * - |phase| Phase (argument) - :py:func:`sigima.proc.signal.phase` * - |complex_from_magnitude_phase| Combine with phase - Consider current signal as the module and allow to select a signal representing the phase to merge them in a complex signal :py:func:`sigima.proc.signal.complex_from_magnitude_phase` * - |re| Real part - :math:`y_{k} = \Re(y_{k-1})` * - |im| Imaginary part - :math:`y_{k} = \Im(y_{k-1})` * - |complex_from_real_imag| Combine with imaginary part - Consider current signal as the real part and allow to select a signal representing the imaginary part to merge them in a complex signal :py:func:`sigima.proc.signal.complex_from_real_imag` .. |abs| image:: ../../../datalab/data/icons/operations/abs.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |phase| image:: ../../../datalab/data/icons/operations/phase.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |complex_from_magnitude_phase| image:: ../../../datalab/data/icons/operations/phase.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |re| image:: ../../../datalab/data/icons/operations/re.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |im| image:: ../../../datalab/data/icons/operations/im.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |complex_from_real_imag| image:: ../../../datalab/data/icons/operations/im.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Data type conversion -------------------- The "Convert data type" |convert_dtype| action allows you to convert the data type of the selected signals. .. |convert_dtype| image:: ../../../datalab/data/icons/operations/convert_dtype.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. note:: Data type conversion relies on :py:func:`numpy.ndarray.astype` function with the default parameters (`casting='unsafe'`). Statistics between signals ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create a new signal which is the result of a statistical operation on each point of the selected signals: .. list-table:: :header-rows: 1 :widths: 40, 60 * - Operation - Description * - |average| Average - :math:`y_{M} = \dfrac{1}{M}\sum_{k=0}^{M-1}{y_{k}}` * - |standard_deviation| Standard Deviation - :math:`y_{M} = \sqrt{\dfrac{1}{M}\sum_{k=0}^{M-1}{(y_{k} - \bar{y})^{2}}}` .. |average| image:: ../../../datalab/data/icons/operations/average.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |standard_deviation| image:: ../../../datalab/data/icons/operations/std.svg :width: 24px :height: 24px :class: dark-light no-scaled-link Other mathematical functions ---------------------------- .. list-table:: :header-rows: 1 :widths: 40, 60 * - Function - Description * - |power| Power - :math:`y_{k} = y_{k}^{n}` * - |sqrt| Square root - :math:`y_{k} = \sqrt{y_{k}}` * - |derivative| Derivative - Based on `numpy.gradient `_ * - |integral| Integral - Based on `scipy.integrate.cumulative_trapezoid `_ * - |signal_to_image| Assemble signals into image - Create a 2D image by assembling selected 1D signals as rows or columns, with optional normalization. .. |power| image:: ../../../datalab/data/icons/operations/power.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |sqrt| image:: ../../../datalab/data/icons/operations/sqrt.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |derivative| image:: ../../../datalab/data/icons/operations/derivative.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |integral| image:: ../../../datalab/data/icons/operations/integral.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |signal_to_image| image:: ../../../datalab/data/icons/operations/signals_to_image.svg :width: 24px :height: 24px :class: dark-light no-scaled-link DataLab-1.0.2/doc/features/signal/menu_processing.rst000066400000000000000000000425021511411446000225740ustar00rootroot00000000000000.. _sig-menu-processing: Processing Signals ================== This section describes the signal processing features available in DataLab. .. seealso:: :ref:`sig-menu-operations` for more information on operations that can be performed on signals, or :ref:`sig-menu-analysis` for information on analysis features on signals. .. figure:: /images/shots/s_processing.png Screenshot of the "Processing" menu. When the "Signal Panel" is selected, the menus and toolbars are updated to provide signal-related actions. The "Processing" menu allows you to perform various processing on the selected signals, such as smoothing, normalization, or interpolation. Axis transformation ^^^^^^^^^^^^^^^^^^^ Linear calibration ~~~~~~~~~~~~~~~~~~ Create a new signal which is a linear calibration of each selected signal with respect to X or Y axis: .. list-table:: :header-rows: 1 :widths: 40, 60 * - Parameter - Linear calibration * - X-axis - :math:`x_{1} = a.x_{0} + b` * - Y-axis - :math:`y_{1} = a.y_{0} + b` Swap X/Y axes ~~~~~~~~~~~~~ Create a new signal which is the result of swapping X/Y data. Reverse X-axis ~~~~~~~~~~~~~~ Create a new signal which is the result of reversing X data. Replace X by other signal's Y ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a new signal by combining two signals, using Y values from the second signal as X coordinates for the first signal's Y values. This feature is particularly useful for calibration scenarios, such as: - Applying wavelength calibration to spectroscopy data - Using a calibrated reference signal to rescale measurement data - Combining signals where one contains calibration points The two signals must have the same number of points. The operation directly uses the Y arrays without interpolation. .. list-table:: :header-rows: 1 :widths: 40, 60 * - Input - Description * - Signal 1 - Provides the Y data for the output signal * - Signal 2 - Provides the Y data that becomes the X coordinates of the output signal X-Y mode ~~~~~~~~ Create a new signal by simulating the X-Y mode of an oscilloscope. This operation plots one signal as a function of another by: 1. Finding the overlapping X range between both signals 2. Resampling both signals onto a common X grid within that overlap 3. Using the resampled Y values as coordinates (first signal's Y as X, second signal's Y as Y) .. note:: This is different from "Replace X by other signal's Y" as it performs interpolation to handle signals with different X arrays. Convert to Cartesian coordinates ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a new signal which is the result of converting polar coordinates to Cartesian coordinates. This function assumes that the x-axis represents the radius and the y-axis the angle. .. warning:: A radius cannot be negative. Any negative value is clipped to 0. Convert to polar coordinates ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a new signal which is the result of converting Cartesian coordinates to polar coordinates. Level adjustment ^^^^^^^^^^^^^^^^ Normalize ~~~~~~~~~ Create a new signal which is the normalization of each selected signal by maximum, amplitude, sum, energy or RMS: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Normalization * - Maximum - :math:`y_{1}= \dfrac{y_{0}}{\max\left(y_{0}\right)}` * - Amplitude - :math:`y_{1}= \dfrac{y_{0}'}{\max\left(y_{0}'\right)}` with :math:`y_{0}'=y_{0}-\min\left(y_{0}\right)` * - Area - :math:`y_{1}= \dfrac{y_{0}}{\sum_{n=0}^{N}y_{0}[n]}` * - Energy - :math:`y_{1}= \dfrac{y_{0}}{\sqrt{\sum_{n=0}^{N}\left|y_{0}[n]\right|^2}}` * - RMS - :math:`y_{1}= \dfrac{y_{0}}{\sqrt{\dfrac{1}{N}\sum_{n=0}^{N}\left|y_{0}[n]\right|^2}}` Clipping ~~~~~~~~ Create a new signal which is the result of clipping each selected signal. Offset correction ~~~~~~~~~~~~~~~~~ Create a new signal which is the result of offset correction of each selected signal. This operation is performed by subtracting the signal baseline which is estimated by the mean value of a user-defined range. Noise addition ^^^^^^^^^^^^^^ Generate new signals by adding the same noise to each selected signal. The available noise types are: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Noise - Description * - Gaussian - Normal distribution * - Uniform - Uniform distribution * - Poisson - Poisson distribution Noise reduction ^^^^^^^^^^^^^^^ Create a new signal which is the result of noise reduction of each selected signal. The following filters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Filter - Formula/implementation * - Gaussian filter - `scipy.ndimage.gaussian_filter `_ * - Moving average - `scipy.ndimage.uniform_filter `_ * - Moving median - `scipy.ndimage.median_filter `_ * - Wiener filter - `scipy.signal.wiener `_ Fourier analysis ^^^^^^^^^^^^^^^^ Zero padding ~~~~~~~~~~~~ Create a new signal which is the result of zero padding of each selected signal. The following parameters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Strategy - Zero padding strategy (see below) * - Number of points - Custom length (if `strategy` is "custom") Zero padding strategy refers to the method used to increase the length of the signal, and it can be one of the following: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Strategy - Description * - next_pow2 - Next power of 2 (e.g. 1024 → 2048) * - double - Double the length (e.g. 1024 → 2048) * - triple - Triple the length (e.g. 1024 → 3072) * - custom - Custom length (user-defined) FFT related functions ~~~~~~~~~~~~~~~~~~~~~ Create a new signal which is the result of a Fourier analysis of each selected signal. The following functions are available: .. list-table:: :header-rows: 1 :widths: 20, 30, 50 * - Function - Description - Formula/implementation * - FFT - Fast Fourier Transform - `numpy.fft.fft `_ * - Inverse FFT - Inverse Fast Fourier Transform - `numpy.fft.ifft `_ * - Magnitude spectrum - Optional: output in decibels (dB) - | :math:`y_{1} = \left|\FFT\left(y_{0}\right)\right|` or | :math:`y_{1} = 20 \log_{10} \left(\left|\FFT\left(y_{0}\right)\right|\right)` (dB) * - Phase spectrum - Phase of the FFT expressed in degrees, using `numpy.angle `_ - :math:`y_{1} = \angle \FFT\left(y_{0}\right)` * - Power spectral density (PSD) - Optional: output in decibels (dB). PSD is estimated using Welch's method (see `scipy.signal.welch `_) - | :math:`y_{1} = \PSD\left(y_{0}\right)` or | :math:`y_{1} = 10 \log_{10} \left(\PSD\left(y_{0}\right)\right)` (dB) .. note:: FFT and inverse FFT are performed using frequency shifting if the option is enabled in DataLab settings (see :ref:`settings`). Frequency filters ^^^^^^^^^^^^^^^^^ Create a new signal which is the result of applying a frequency filter to each selected signal. The following filters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Filter - Description * - |lowpass| Low-pass - Filter out high frequencies, above a cutoff frequency * - |highpass| High-pass - Filter out low frequencies, below a cutoff frequency * - |bandpass| Band-pass - Filter out frequencies outside a range * - |bandstop| Band-stop - Filter out frequencies inside a range .. |lowpass| image:: ../../../datalab/data/icons/processing/lowpass.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |highpass| image:: ../../../datalab/data/icons/processing/highpass.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |bandpass| image:: ../../../datalab/data/icons/processing/bandpass.svg :width: 24px :height: 24px :class: dark-light no-scaled-link .. |bandstop| image:: ../../../datalab/data/icons/processing/bandstop.svg :width: 24px :height: 24px :class: dark-light no-scaled-link For each filter, the following methods are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Method - Description * - Bessel - Bessel filter, using SciPy's `scipy.signal.bessel `_ function * - Brick wall - Ideal (rectangular) filter in the frequency domain * - Butterworth - Butterworth filter, using SciPy's `scipy.signal.butter `_ function * - Chebyshev I - Chebyshev type I filter, using SciPy's `scipy.signal.cheby1 `_ function * - Chebyshev II - Chebyshev type II filter, using SciPy's `scipy.signal.cheby2 `_ function * - Elliptic - Elliptic filter, using SciPy's `scipy.signal.ellip `_ function Fitting ^^^^^^^ Fit a model to each selected signal. This can be done automatically or through an interactive curve fitting dialog. .. list-table:: :header-rows: 1 :widths: 20, 80 * - Model - Equation * - Linear - :math:`y = c_{0} + c_{1} \cdot x` * - Polynomial - :math:`y = c_{0} + c_{1} \cdot x + c_{2} \cdot x^2 + ... + c_{n} \cdot x^n` * - Gaussian - :math:`y = y_{0} + \dfrac{A}{\sqrt{2 \pi} \sigma} \exp\left(-\dfrac{1}{2} \left(\dfrac{x - x_{0}}{\sigma}\right)^2\right)` * - Lorentzian - :math:`y = y_{0} + \dfrac{A}{\pi \sigma} \cdot \dfrac{1}{1+\left(\dfrac{x-x_{0}}{\sigma}\right)^2}` * - Voigt - :math:`y = y_{0} + A \cdot \dfrac{\Re\left(\exp(-z^2) \cdot \operatorname{erfc}(-j \cdot z)\right)}{\sqrt{2 \pi} \sigma}` with :math:`z = \dfrac{x - x_{0} - j \cdot \sigma}{\sqrt{2} \sigma}` * - Multi-Gaussian - :math:`y = y_{0} + \sum_{i=0}^{N}\dfrac{A_{i}}{\sqrt{2 \pi} \sigma_{i}} \exp\left(-\dfrac{1}{2} \left(\dfrac{x - x_{0,i}}{\sigma_{i}}\right)^2\right)` * - Multi-Lorentzian - :math:`y = y_{0} + \sum_{i=0}^{N}\dfrac{A_{i}}{\pi \sigma_{i}} \cdot \dfrac{1}{1 + \left(\dfrac{x - x_{0,i}}{\sigma_{i}}\right)^2}` * - Planck - :math:`y = y_{0} + A\cdot \dfrac{2h \cdot c^2}{\lambda^5} \cdot \left(\exp\left(\dfrac{h \cdot c}{\lambda \cdot k \cdot T}\right)-1\right)^{-1}` * - Two half Gaussians - | :math:`y = y_{0} + A \cdot \dfrac{1}{\sqrt{2 \pi} \sigma_{0}} \cdot \exp\left(-\dfrac{1}{2}\left(\dfrac{x - x_{0}}{\sigma_{0}}\right)^2\right)` if :math:`x < x_{0}` | :math:`y = y_{0} + A \cdot \dfrac{1}{\sqrt{2 \pi} \sigma_{1}} \cdot \exp\left(-\dfrac{1}{2}\left(\dfrac{x - x_{1}}{\sigma_{1}}\right)^2\right)` otherwise * - Two back-to-back exponentials - | :math:`y = y_{0} + A_{1} \cdot \exp\left(-x/\tau_{1}\right)` if :math:`x < 0` | :math:`y = y_{0} + A_{2} \cdot \exp(-x/\tau_{2})` otherwise * - Exponential - :math:`y = y_{0} + A \exp\left(B \cdot x\right)` * - Sinusoidal - :math:`y = y_{0} + A \sin\left(2 \pi f \cdot x + \phi\right)` * - Cumulative Distribution Function (CDF) - :math:`y = y_{0} + A \erf\left(\dfrac{x - x_{0}}{\sqrt{2} \sigma}\right)` Windowing ^^^^^^^^^ Create a new signal which is the result of applying a window function to each selected signal. The following window functions are available: .. list-table:: :header-rows: 1 :widths: 20, 80 * - Window function - Reference * - Barthann - :py:func:`scipy.signal.windows.barthann` * - Bartlett - :py:func:`numpy.bartlett` * - Blackman - :py:func:`scipy.signal.windows.blackman` * - Blackman-Harris - :py:func:`scipy.signal.windows.blackmanharris` * - Bohman - :py:func:`scipy.signal.windows.bohman` * - Boxcar (rectangular) - :py:func:`scipy.signal.windows.boxcar` * - Cosine - :py:func:`scipy.signal.windows.cosine` * - Exponential - :py:func:`scipy.signal.windows.exponential` * - Flat top - :py:func:`scipy.signal.windows.flattop` * - Gaussian - :py:func:`scipy.signal.windows.gaussian` * - Hamming - :py:func:`numpy.hamming` * - Hann - :py:func:`numpy.hanning` * - Kaiser - :py:func:`scipy.signal.windows.kaiser` * - Lanczos - :py:func:`scipy.signal.windows.lanczos` * - Nuttall - :py:func:`scipy.signal.windows.nuttall` * - Parzen - :py:func:`scipy.signal.windows.parzen` * - Taylor - :py:func:`scipy.signal.windows.taylor` * - Tukey - :py:func:`scipy.signal.windows.tukey` Detrending ^^^^^^^^^^ Create a new signal which is the detrending of each selected signal. This features is based on SciPy's `scipy.signal.detrend `_ function. The following parameters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Method - Detrending method: 'linear' or 'constant'. See SciPy's `scipy.signal.detrend `_ function. Interpolation ^^^^^^^^^^^^^ Create a new signal which is the interpolation of each selected signal with respect to a second signal X-axis (which might be the same as one of the selected signals). The following interpolation methods are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Method - Description * - Linear - Linear interpolation, using using NumPy's `interp `_ function * - Spline - Cubic spline interpolation, using using SciPy's `scipy.interpolate.splev `_ function * - Quadratic - Quadratic interpolation, using using NumPy's `polyval `_ function * - Cubic - Cubic interpolation, using using SciPy's `Akima1DInterpolator `_ class * - Barycentric - Barycentric interpolation, using using SciPy's `BarycentricInterpolator `_ class * - PCHIP - Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) interpolation, using using SciPy's `PchipInterpolator `_ class Resampling ^^^^^^^^^^ Create a new signal which is the resampling of each selected signal. The following parameters are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Parameter - Description * - Method - Interpolation method (see previous section) * - Fill value - Interpolation fill value (see previous section) * - Xmin - Minimum X value * - Xmax - Maximum X value * - Mode - Resampling mode: step size or number of points * - Step size - Resampling step size * - Number of points - Resampling number of points Stability analysis ^^^^^^^^^^^^^^^^^^ Create a new signal which is the result of a stability analysis of each selected signal. The following stability analysis methods are available: .. list-table:: :header-rows: 1 :widths: 25, 75 * - Function - Description * - Allan variance - Measure of the stability of a signal: defined as the variance of the difference between two successive measurements as a function of the time interval between them. * - Allan deviation - Square root of the Allan variance. * - Overlapping Allan deviation - A more robust version of the Allan variance that overlaps successive segments to improve statistical confidence. * - Modified Allan variance - A variation of the Allan variance that accounts for phase noise by introducing a filtering operation. * - Hadamard variance - An alternative to Allan variance, more robust to linear frequency drift in the signal * - Total variance - Extends the Allan variance concept to cover all possible averaging intervals. * - Time deviation - Derived from Allan deviation, quantifies stability in terms of time rather than frequency. .. note:: The "All stability features" option allows to compute all stability analysis methods at once. DataLab-1.0.2/doc/features/signal/menu_roi.rst000066400000000000000000000074751511411446000212230ustar00rootroot00000000000000.. _sig-menu-roi: Regions Of Interest (ROI) ========================= This section describes how to manipulate Regions Of Interest (ROIs) for signals in DataLab. .. figure:: /images/shots/s_roi.png Screenshot of the "ROI" menu. The "ROI" menu allows you to manage Regions Of Interest (ROIs) associated with the current signal. .. seealso:: For more information about signal metadata, see the :ref:`sig-menu-edit` section. The Regions Of Interest (ROI) are signal areas that are defined by the user to perform specific operations, processing, or analysis on them. ROI are taken into account almost in all computing features in DataLab: - The "Operations" menu features are done only on the ROI if one is defined (except if the operation changes the number of points, like interpolation or resampling). - The "Processing" menu actions are performed only on the ROI if one is defined (except if the destination signal data type is different from the source's, like in the Fourier analysis features). - The "Analysis" menu actions are done only on the ROI if one is defined. .. note:: ROI are stored as metadata, and thus attached to signal. The "ROI" menu allows you to: - "Edit graphically" |edit_roi|: open a dialog box to manage ROI associated with the selected signal (add, remove, move, resize, etc.). The ROI definition dialog is exactly the same as ROI extraction (see below): the ROI is defined by moving the position and adjusting the width of an horizontal range. .. figure:: /images/shots/s_roi_editor.png A signal with an ROI. - "Edit numerically": open a dialog box to edit the parameters of the selected ROIs numerically (i.e. using a simple form). This allows you to define or modify ROIs based on numerical values. - "Extract" |signal_roi|: extract the defined ROI from the selected signals. This will create a new signal for each ROI (or a single signal, if the "Extract all ROIs into a single signal" option is selected in the dialog), with the same metadata as the original signal, but with the data corresponding to the ROI only. The new signals will be added to the current workspace. - "Copy" |roi_copy|: copy the defined ROI from the selected signals to the clipboard. This allows you to paste the ROI into another signal or use it in other operations. - "Paste" |roi_paste|: paste the copied ROI from the clipboard to the selected signals. This will add the ROI to the signals, allowing you to define or modify ROIs based on previously copied ones. - "Import" |roi_import|: import ROIs from a file. This allows you to load previously saved ROIs into the current signal. - "Export" |roi_export|: export the defined ROIs to a file. This allows you to save the ROIs for later use or to share them with others. - "Remove all" |roi_delete|: remove all defined ROI for the selected signals. .. figure:: /images/shots/s_roi_dialog.png ROI extraction dialog: the ROI is defined by moving the position and adjusting the width of an horizontal range. .. |edit_roi| image:: ../../../datalab/data/icons/roi/roi.svg :width: 24px :height: 24px :class: dark-light .. |signal_roi| image:: ../../../datalab/data/icons/roi/roi_sig.svg :width: 24px :height: 24px :class: dark-light .. |roi_copy| image:: ../../../datalab/data/icons/roi/roi_copy.svg :width: 24px :height: 24px :class: dark-light .. |roi_paste| image:: ../../../datalab/data/icons/roi/roi_paste.svg :width: 24px :height: 24px :class: dark-light .. |roi_import| image:: ../../../datalab/data/icons/roi/roi_import.svg :width: 24px :height: 24px :class: dark-light .. |roi_export| image:: ../../../datalab/data/icons/roi/roi_export.svg :width: 24px :height: 24px :class: dark-light .. |roi_delete| image:: ../../../datalab/data/icons/roi/roi_delete.svg :width: 24px :height: 24px :class: dark-light DataLab-1.0.2/doc/features/signal/menu_view.rst000066400000000000000000000114551511411446000213750ustar00rootroot00000000000000.. _sig-menu-view: View options for Signals ======================== .. figure:: /images/shots/s_view.png Screenshot of the "View" menu. When the "Signal Panel" is selected, the menus and toolbars are updated to provide signal-related actions. The "View" menu allows you to visualize the current signal or group of signals. It also allows you to show/hide titles, to enable/disable anti-aliasing, or to refresh the visualization. View in a new window ^^^^^^^^^^^^^^^^^^^^ Open a new window to visualize the selected signals. This option allows you to visualize the selected signals in a separate window, in which you can visualize the data more comfortably (e.g., by maximizing the window) and you can also annotate the data. When you click on the button "Annotations" in the toolbar of the new window, the annotation editing mode is activated (see the section "Edit annotations" below). Edit annotations ^^^^^^^^^^^^^^^^ Open a new window to edit annotations. This option allows you to show the selected signals in a separate window, in which you can visualize the data more comfortably (e.g., by maximizing the window) as well as to add or edit annotations. Annotations are used to add comments or labels to the data, and they can be used to highlight specific events or regions of interest. .. note:: The annotations are saved in the metadata of the signal, so they are persistent and will be displayed every time you visualize the signal. .. figure:: /images/annotations/signal_annotations1.png Annotations may be added in the separate view. The typical workflow to edit annotations is as follows: 1. Select the "Edit annotations" option. 2. In the new window, add annotations by clicking on the corresponding buttons at the bottom of the window. 3. Eventually, customize the annotations by changing their properties (e.g., the text, the color, the position, etc.) using the "Parameters" option in the context menu of the annotations. 4. When you are done, click on the "OK" button to save the annotations. This will close the window and the annotations will be saved in the metadata of the signal and will be displayed in the main window. .. figure:: /images/annotations/signal_annotations2.png Annotations are now part of the signal metadata. .. note:: Annotations may be copied from a signal to another by using the "copy/paste metadata" features. Auto-refresh ^^^^^^^^^^^^ Automatically refresh the visualization when the data changes: - When enabled (default), the plot view is automatically refreshed when the data changes. - When disabled, the plot view is not refreshed until you manually refresh it by using the "Refresh manually" menu entry. Even though the refresh algorithm is optimized, it may still take some time to refresh the plot view when the data changes, especially when the data set is large. Therefore, you may want to disable the auto-refresh feature when you are working with large data sets, and enable it again when you are done. This will avoid unnecessary refreshes. Show only first selected signal ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Toggle between showing all selected signals or only the first one. When this option is enabled, only the first selected signal is displayed in the plot view. This may be useful when multiple signals are selected and focusing on a single signal is (temporarily) preferred. Refresh manually ^^^^^^^^^^^^^^^^ Refresh the visualization manually. This triggers a refresh of the plot view. It is useful when the auto-refresh feature is disabled, or when you want to force a refresh of the plot view. Show graphical object titles ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Show/hide titles of analysis results or annotations. This option allows you to show or hide the titles of the graphical objects (e.g., the titles of the analysis results or annotations). Hiding the titles can be useful when you want to visualize the data without any distractions, or if there are too many titles and they are overlapping. Curve anti-aliasing ^^^^^^^^^^^^^^^^^^^ Enable/disable anti-aliasing of curves. Anti-aliasing makes the curves look smoother, but it may also make them look less sharp. .. note:: Anti-aliasing is enabled by default. .. warning:: Anti-aliasing may slow down the visualization, especially when working with large data sets. Reset curve styles ^^^^^^^^^^^^^^^^^^ Reset the curve style cycle to the beginning. When plotting curves, DataLab automatically assigns a color and a line style to each curve. Both parameters are chosen from a predefined list of colors and line styles, and are assigned in a round-robin fashion. This menu entry allows you to reset the curve styles, so that the next time you plot curves, the first curve will be assigned the first color and the first line style of the predefined lists, and the loop will start again from there.DataLab-1.0.2/doc/features/validation/000077500000000000000000000000001511411446000175145ustar00rootroot00000000000000DataLab-1.0.2/doc/features/validation/functional.rst000066400000000000000000000040111511411446000224040ustar00rootroot00000000000000.. _functional_validation: Functional validation ===================== .. meta:: :description: Validation in DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, scientific, data, analysis Strategy -------- DataLab functional validation is based a classic test strategy, with a strong emphasis on automated testing. Apart from one or two manual tests (e.g. load test), all tests are automated (more than 99% of the tests are automated). Writing tests follows the TDD (Test-Driven Development) principle: - When *a new feature is developed*, the developer writes the tests first. The tests are then executed to ensure that they fail. The developer then implements the feature, and the tests are executed again to ensure that they pass. - When *a bug is reported*, the developer writes a test that reproduces the bug. The test is executed to ensure that it fails. The developer then fixes the bug, and the test is executed again to ensure that it passes. Depending on the abstraction level, unit tests and/or application tests are written. When writing both types of tests, the developer starts with the unit tests and then writes the application tests. Types of tests -------------- The functional validation of DataLab is based on two main types of tests: - **Unit tests** (test scripts named ``*_unit_test.py``): Test individual functions or methods. All unit tests are automated. - **Application tests** (test scripts named ``*_app_test.py``): Test the interaction between components (integration tests), or the application as a whole. All application tests are automated. Implementation -------------- The tests are implemented using the `pytest `_ framework. Many existing tests may be derived from to create new tests. Executing tests --------------- To execute the tests, the developer uses the command line interface. See section :ref:`run_functional_validation_tests` for more information on how to run functional validation tests.DataLab-1.0.2/doc/features/validation/status.rst000066400000000000000000000044211511411446000215720ustar00rootroot00000000000000.. _validation_status: Validation Status of DataLab ============================ .. meta:: :description: Validation in DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, scientific, data, analysis, validation, ground-truth, analytical Functional validation --------------------- In DataLab, functional validation is based on a classic test strategy (see :ref:`functional_validation`). Test coverage is around 90%, with more than 200 tests. Technical validation --------------------- This paragraph provides the validation status of compute functions in DataLab (this is what we call technical validation, see :ref:`scientific_validation`). .. note:: This is a work in progress: the tables below are updated continuously as new functions are validated or test code is adapted (the tables are generated from the test code). Some functions are already validated but do not appear in the list below yet, while others are still in the validation process. .. warning:: The validation status must not be confused with the test coverage. The validation status indicates whether the function has been validated against ground-truth data or analytical models. The test coverage indicates the percentage of the code that is executed by the test suite, but it does not necessarily take into account the correctness of the results (DataLab's test coverage is around 90%). .. csv-table:: Validation Statistics :file: ../../validation_statistics.csv :header: Category, Signal, Image, Total Signal Compute Functions ^^^^^^^^^^^^^^^^^^^^^^^^ The table below shows the validation status of signal compute functions in DataLab. It is automatically generated from the source code. .. csv-table:: Validation status of signal compute functions :file: ../../validation_status_signal.csv :header: Compute function, Description, Test function :widths: 30, 40, 30 Image Compute Functions ^^^^^^^^^^^^^^^^^^^^^^^ The table below shows the validation status of image compute functions in DataLab. It is automatically generated from the source code. .. csv-table:: Validation status of image compute functions :file: ../../validation_status_image.csv :header: Compute function, Description, Test function :widths: 30, 40, 30 DataLab-1.0.2/doc/features/validation/technical.rst000066400000000000000000000061261511411446000222050ustar00rootroot00000000000000.. _scientific_validation: Technical Validation ===================== .. meta:: :description: Validation in DataLab, the open-source scientific data analysis and visualization platform :keywords: DataLab, scientific, data, analysis, validation, ground-truth, analytical DataLab technical validation is based on two key concepts: **ground-truth data** and **analytical validation**. Ground-truth data ----------------- Ground-truth data is data that is known to be correct. It is used to validate the results of computational analysis. In DataLab, ground-truth data may be obtained from a variety of sources, including: - Experimental data - Simulated data - Synthetic data - Data from a trusted source Analytical validation --------------------- Analytical validation is the process of comparing the results of computational analysis to ground-truth data. This is done to ensure that the results are accurate and reliable. In DataLab, analytical validation is implemented using a variety of techniques, including: - Cross-validation with an analytical model (from a trusted source, e.g. `SciPy `_ or `NumPy `_) - Statistical analysis - Visual inspection - Expert review Scope ----- The scope of technical validation in DataLab includes all compute functions that operate on DataLab's signal and image objects (i.e. :class:`sigima.objects.SignalObj` and :class:`sigima.objects.ImageObj`). This includes functions for (all functions are named ``compute_``): - Signal processing (:mod:`sigima.proc.signal`) - Image processing (:mod:`sigima.proc.image`) Implementation -------------- The tests are implemented using the `pytest `_ framework. When writing a new technical validation test, the following rules should be followed regarding the test function: - The test function should be named: - ``test_signal_`` for signal compute functions - ``test_image_`` for image compute functions .. note:: The ``signal`` or ``image`` prefix is used to indicate the type of object that the function operates on. It may be omitted if the function operates exclusively on one type of object (e.g. ``test_adjust_gamma`` is the test function for the ``compute_adjust_gamma`` function, which operates on images). - The test function should be marked with the ``@pytest.mark.validation`` decorator. Following those rules ensures that: - The tests are easily identified as technical validation tests. - The tests can be executed separately using the command line interface (see :ref:`run_scientific_validation_tests`). - The tests are automatically discovered for synthetizing the validation status of the compute functions (see :ref:`validation_status`). Executing tests --------------- In DataLab, technical validation tests are disseminated in the test suite of the project, but they can also be executed separately using the command line interface. .. seealso:: See paragraph :ref:`run_scientific_validation_tests` for more information on how to run technical validation tests.DataLab-1.0.2/doc/images/000077500000000000000000000000001511411446000150115ustar00rootroot00000000000000DataLab-1.0.2/doc/images/2d_peak_detection/000077500000000000000000000000001511411446000203545ustar00rootroot00000000000000DataLab-1.0.2/doc/images/2d_peak_detection/peak2d_app_param.png000066400000000000000000000042001511411446000242440ustar00rootroot00000000000000PNG  IHDR"v[nsRGBgAMA aAPLTEx·66·6``666·66f:f66``66`6`ffffې:fΫ`·``6`·`66ې::```6```·66:ۇf:۶`ې::`Ϋf:f6``:R`zzz6tt`66``6```3333333ZZZ3Z33ZZZZ3333Z3ZZ3Z3ZZ3ZZ_? pHYs(JIDATx^휋E6I#ł)VKEAD$m)PPE73Hr#:}tIa 0 0 8 K;~D^L"/%X1^Z]sB>n&p%;_U&-ŭJ|͹ߠ!It_R.SnY8"i3|ޞys$Q [u'rwvsgj'[D *Z vi2@d/]jMo%ZL*.+~DU2[oA={\k/7K2S# b-/dWj}H XԊcX(&O4[i8T>DD<_Zh[(g5 %ZO܈W 3$"8*n"$!(J`1s*D&^bHUY*"]Dm4*o{kQtK#h:iPܩNB# bu}[o,\q)U4t+Ƣ_9^)ܐ0݈i8K`%BKl(RI4GbxX.$#1ԍ az>Vq,"RXdK4"JQvtLM[-Dv } &% aa!B@(׷$by1D^ {Ŕ6(;NJ44EdàFhf>H"y% $/ˏ\" 0&sJ*>ϥ|DbpqTJɿ0D^L"/!I4"t<6 0 0 D 3 ڎEKIENDB`DataLab-1.0.2/doc/images/2d_peak_detection/peak2d_app_results.png000066400000000000000000000367231511411446000246640ustar00rootroot00000000000000PNG  IHDRLFsRGBgAMA a pHYsod=hIDATx^ |\U-h i0lGjMLӼ*tЗ Rz=ÜʭH[=k&4wr~޺ڗg^{_}Rwc{'J)/;8Wg?sEnP>B<#C /;vJ&Sw L:JtЖ|M3۽i`0@  ͐?>J)-=+I>]o2Z1c[ H 6psl7FfHM}3[N)Cr}N[lqCٶ~# )SI [TDzhqMHu WUbj^KGayTT䗎l8Дx ]P>x[g2iHɓȏ#oj~̴匏~D֏ M$?BAi.WCI Xօ*l/tUV)CDʢ +4Z曓'0;;y'|+ϯ,-ƐrZ6T^NE|BuEݩ$#}ۺ5MY[m@RU蹹irʃk^CR@ѡ'6#s}ܻzCgB=}@vǸjd-_TUv:|3S`H{Vp*xl> m0 %[+h Qfk6jYH9Uggfl:Vg=6>M/Z>t3X[Xs{Tfocl\Sm\.U{IIyy쫏y}snW@JT 6|M7?{1=o77Lsz͇3S^.MM{؛N8Q`.6AVa@*]6J% jɎ~6΅mᾙ摤VC/{FjN2}עZɈE^&"[>=}7}"kc} f{[+ϧRUmJoFK*_Ȓ|NNmSLQ]&M҅_.7a=O~B}S{e} †0AVcm{f6\o2;Dnk5*#aۖkO?=:= Z/b|o+ܞg\~07}IxuT fzΉmCJ+yI/8 ;ICi jw+lUDv0anv(zn(PeM~wm J5Z#O/u%^Qj'L9!Xݐ5"?D> V2q?vTugŪNmgR+Ri$U6r9%nv\/źܥlw&!{x]2 7!\>_v@s()m:LԘ8_}}5 `l}_W/ߔuox\?zモAod^jSgEm' 12ioUg5ÆM6(t@P؋_O8ᄜpP6{x O>y,y_O\\ey ǹY.vr]srݐ~ @n;,\7R7 y?tj=ɕ似3N:V/!|xG!|'sΙ?uy]]]n@#xG!|x'6l r)p'qp%nnthsɟ觮jtoVz۹sfϞJh-|njrQ3PދOqEltrE9Ҁ.(׸$~A"P khqMi-=ڋW`濣ӧ"[jI%fj.WCIV@nd\` )< ]۽< *onUejVa`Ej(,b'm+ũ*-Ld(+}~3RTgj11RǣG0N%ǀ W(Z̀{aHA7Sbq7qPfo>ZTQ"5g'3s<հ;oؠ* `$ 1 Uaƞ1m1*wd1Sf$`zS„fK6j0Z&$T]i^LSԚ2Ԉ#ZVKnK3=$5z듏=E'N#LCn]$Qj.^Sf$ѓ| Ui#߄F `R-> ɗ 8N D"duuޱN7ҕΝ;5& 8]sGmmWD۶CtӍK\it{J`P(X6ӟDCs <XVB3QsO;q2~08W!0a77pA?a +3' #|eon8_yuDa77px-LEKa"*Z쌊m< 2CMX[23:]qКݸ,bғГ۶ͽ{-z==m6 Ob-;J{w lvut*O"6|jI%IkHYs7L^-UX*TkUH$ G\`?Jeƿ#U~VkTj|Ws_~g 彶z__c*E4_)jbbl-P~RaLV}Bí7[ +f#jLXp;PO<z] tJo|]s^a+?>"]׊vj$I7L_ԺvU,e~M_xRW/wfX)/QA|#7uf{- 7bebtl !\jfu/Z6hUwM1<&kjVvgtjdRlS݃ax:[I km&螟d}ͿCkm}HuGR.fjY=O\[RjT*u5fiG)wuau4{9-J5I*)X[XsCJ\bfoCQ9qBѧy trBWZW Zqi_լ٭.;~6 {J­КL_rMJTpm:#QyoGn׻:m`H$Y]]jFǭw߬t4{j[8bGۃVyAUvL^Y-oQU1K҉6vD?5o_Fz;9mr%Lm."!FnLIkj,*8XRT W )xO]h+]?l^P[F»0MLn8_9 s #|e7a77pN?a +s ' #|D on8?9nŎG'x'{S?J!'!sVO~5_b}PrŢOlK2nxe\x1%֫_b/q+3 xBx?6hUM1q Z`aݤfYZJ1ڻSo0B6:}uY^p_9ө2_Ǎ`on:NySLq[RjT*u5fiG)wuau4{9-J5I*š;xg *3{;Bؑ9qBcvRXZӤn_͚HD'|:+ےztUFt +H8Q<4/ 39mSHXͭvgJG3!U- *ZwaGJ&ҠB~2a}TI8[!qU$FkmRGD/Ggu '^I+*͏kGGv E.MwpZw;U)ߘeOsYxk2YršnQM\4W9D@.PMQeY)4cSd[2N#-\VoL8yx uذ=VfGݴ|(K7^?i\2G/RjN!~h:z.od]?/%sAͫc1Kvb;|Wmz}̵ПIϑx~bХf21ȉ&n*mlUq/lUDp#ވFoߢ5?3z~~ҵ on#zjW}ޝj]VSjΗɝ3 `]Ύ/vT5]5A}on;K5|nkX7Jru[ED5giJ]{vn_TJCzrɣD"jW5:ncnf+ًGW+O±;.ʛ(7^r+dʂm,\eZg>Bd@ymvo*w7Awywӯկ%"ELmymV?~OMkk_86T2TVՙ?qeR닥J&[UY`̉@lO2٬pë/4^p[u7}j%okP|4>У1'؟Օ[Bo z~]kYz-Z{^[ֽ*? =fbӯ@mV*La5jw-f͛WTW @fN` MAeۢj/5GˋٳlTC2aQ"jp͖+ŠiZkU"U-4`bw<&QT뮫uIvwVʎt"?WUI1] 1K .j;JLk֗5ޞ>QZ J&FUkjR\Ley^i*6`rZ1-k 7哲UR\9 *3{;BQ9qB+A57%۬Z-mVݬvUfRo0v tr"՗_g[U<6#_ʯM`jt< 2~bڳ% #ۙFKԐɈ-@ݰ %tAiPvm?܇gFm/URen:VT᥾J ˏ멎B5XhMRb^רh=8)Ї*c޷% =Kdu'Hy]]]4/bM&].yZ8M6*i5F}M(-դUBӿ)0F:Ef)4?Uk^1ɜX3g3i1vޝ/֢9 w7g7ֽٹgv=nr<#OgԖbXfn&Dk:ӧOw dOLNɈV"' Uتf:^P٪۽Fƽ.߾Ek".W~!\k3UkZF2Tծb1;-nMPWՔ\zWդST\<>z:k\|MTg_ y+b@-5eӯͦl˦_m-}H3}ͱ.b5cr0{xyu$ ؓ(Dծjtz:JWJV(c/v=I] i7+YT]QPo\jW۲yf*^S$hcGSejT^æuʛyH7^`;w{\ mۢ9>B#7&Ks6cRQK"!4?4l^P[F»mH;ܗdx7^>Rh;6lp%9T_{ M1&F8 Jn$aCN9SWW+@n㇜`d䇜,UH$Xs Ě[/?sƫ3+ؘ_X&Rh8 ~1G~$ שoO_yx7N8Nx7^9|*2Si춆~H;u[*2ϩ({èos*֖+Lk:s&TBϲN"؜~%isV s= .ӏZ5cғV2MͰLcSϱ K/|jI%IkHY7L^-UX*TkUH$ G\`?JewU~V5kж:}ͱ̱y>}9fSh *TU8D~TX^̞eʯ b0'Q[o\YVdMrXjLXp; sfJ kN)kz]jm{RGLz-^Cs]9 \r- Ӷ9L(ulfVpNs_͡x/%^St(lS)+^ !\jזP]QJ;&]7 }?ݹKm1IE˾:/ox!w0c2AkԋRmatrh3'S:ss٤.3&.OԭVCaRq Qd׻:SYްW ؽ%mzLEnlW-}U-fvsL#PBD5Vw-m]LL:+;R y=rn˯5Eҿ֤rebUv0ǿ6|"x0VskevgJG3!U- *ZwaGJ&ҠB~2Z*w+qBc'F7w+r]. Et{ŔŪ5QizEO7g׵zvZ~f9 &MEd%O+wF6&sh\^f9 }˻@5FeG Nn}8OsU:ZyWLln2'Vj.rՑnLEym.]F-ONw9zӧ2ibv>}ޢ&_3_h3fr,sYWmli}7d{+yTf21ȉ&EB6YT*nvo8|qo~3khM޲"am*t[HU_u2Q_[75.ݎ_ךinrhͷuAMjZaGZТzӧ_)LwVczɻ@m{LjS* `ygH$Y]]Fǭw߬t4{j[8bGۃVyA*WB&h,ޖ̓7˨V񪘂%D;/SZz6EǭSޜΛ7FR7عsfJh]s%LWmS;#g7#IxȞIQgO"}r |n!-FnLVm$RAK ?B-AEUC 1?4l^P[F»m8 {g8' x?^CN9SWW+@n㇜`d䇜._b'{9Gc_TURh|x7NJr O6͕ H"D/q̜=_4x/5x/~x/^0M!bz!9otu@ӹd_b|+G:<y~qs2<fMű~ѵrƉ_&O$⸣.bJr/Jrn# )'#s+ op+H|#PxSg~anx7v,x7=&<#s&~qY'~?^.4\$|x7O o;Uyq%9mw?\6y~J=7y#qp%nnt\X}[|䑻]\5js]@N;Oʛ;}ig 6"\w׺"vARhx&OH$v5gӦMnK\ ևcޞx!a҇e~ ~18|NqxyCrn~{wP+wr5p$8;ugJmvc;}JwFϪXo]M/6P1C3\8;n>?o~i=nBׄaˇ?.Й_ѯ~er}ٺ袋\m>rzNE5<w>O1Q7:|JWWjUVnޡ;3V*Wm)=*m[^-[jtjDC9̳4zzg|#LO^\YFsk߶Pَ;.\wd)=bꪭE=oSR\j[1[\V]v KcԔ {;Z\uO]g뫽c0"|' Eoʋk4o]j4U۴$go٦ZS^yݽdI* ̯ڍy9S_YJ_}>/Rӟq}-vt~y*X_^3O\yq=-o>u>W,g;nfScl ӆ?RJ閛.@jTNi^;. Wo"oTP5=@ѡrEqm[lku -1}vf1`}<=^ ]2W ͎ SyɧuF=}Z ȳF#{xҶ&,s'C? t*Oݭ%6sre ֽQz[c-}/[M֚mx16P G4#JU7=uR,^"w'ڦ`#!Y+uMhgT>z<Ќ|^|>pzxUw`8J ;Dor=sSFZ/)İ Af)Pm ?ts:kD; f=:mSqRsCv>y.ƎӖ_>@1=*oxIͦLSfdwf^ ֪RM֎;f:ݒ3w[kҺv#W6|'uV˦/Y]n/[%ݫf0toϒũQ|{"f?v}=o F˝3<oʇWiےT6O;E d6;dy|^m|*䰼u-k M{7 UM@]źk&1;w/qd5& o6ovn_22/Qsܨn 9(Y/b V͛[C]Tzjo>2_ԚvD{1_3k꿤@$IVWWѳi&/C6_X}m|Bػ4-֫`o&7uo˺գ7O 7>8VV)o+mdRhxySh0``#K.0G <awx/& <8xc xC۳g+iǙ~ڴi E$$x?<#Sx^ D"duuFnjrsϫߜfՌ&~3W7=w=_^N:䴣 pXqNp4x:3]ai?<gǝW%ҺnZt؇B١V=|k-=^:Mf~e&t}:ݦDzW\ xHmt>mʋk4o]jtU۴Ħؘ@}yͼyq=-\Z-<#~t^Pg>xJ[ 7$%yw?gy[K܈7jo l}2'-oOh|nF/^RkLpzޛzxBUj.k6*{A~]ŎӖ_;J/kyz.ӦʯSy Oݵ{ëmIb~i5:OW칬7(//O?pU]7=w_,qx7^$@ESȁH΁29#_"#%+ 0iJrڮ1{6< J?<ߜBs"|#@Lx?H$1եSzSLgM6͕ކ\a]{46n3GvfJǚNZNoJ}M{v >(}4O4ΛGfۤyi!fH:a+zmI:qK{{Ov#6GKSӛ;xÔ[d^S׾g!Ԃ]ڷ͔_2')`&o4S6SLd˾hS̴}zL$}=^zl̾Ӟt~x;d{Z5u`~\(N8}{tܼ.`:v[,uu)n^3.yOM:mKʿ6͢yMhؼ=jޟoɚz>zvfg0=fsf^}c|̋zi´̿Xef;ǚ4{IstfߴMag~{.|QsԡӼ|L}:z9'h_>e:d;y^nj)]r3-,,,,,, }~z$W :v@*U=͋ /_M#LWVAc*faaaaaaaqqgaaaaaaaq31=9,Eqьhaaaaaaaa0d۶e4- ff+]tO ؄ٲCXeaaaaaaad"aɖE’- 8%[qK,,,,,,,,lYXXXXXXX! ݻ;7ny 6c 6+K A^dgϞ/녏l9˘q kFCܶdv65hVkbušlb6+K kF #[[3E\ÚocpŖEfx ؁c !Qof>[֔haaaaafD ƒ%}oDFz;-,,5#c܈<^ߖc1`eycCO?}֌x"jkJ< 9,Wٲ#3[sSDZ׎qcl(Ef!*ѲZ7E:Fq]+;ZXX\ 1&g-fؼu;uUv_|55lc6+CX7ۛ6+R ?W8Mu ^ <_ pP1>{'Coa؎ znm _muMJ*}7 =$OĮ]=ؗ_ ,EЫw/$$&,,,o21vњlcVWÇcG t!v`;y=XYFrn|pq3["Nm7w0U*`gvffnYlYXW '+|+kR.f 2unɶ?Omw,n.b"afǢk@,U;{=cO\W ؜RռysWDl1fn79lcV;eaqs-?y<5X1ƍΣȘH1v`{o1'ZBHH^l撨3PZﳸɬE dkahH8J+ZCt_<;lc6G"ٺ p53[vEŭ+l_m]B ea’lYXވ j\=zt%L̒- +*C?:؁c1`e(o6ܶdˮX<lcVgaaaqMmɖE4߁/YXX 11v`;Hy,cq"Va͈6ABȣ`eo6,,,bkFǰy<B+K kFǰy<B+K kFq5M-,,,,,,b֌q3(bv5+c6+K kFǰy<B+K kFϞviO15#c<lc !cgV͚ZߚAL5y飞zw"""ty?/z={z,bkq/_0tP.b>}Im kFCX3b!v`;y=XYF2daa"f$K3!!5&u G0j$fk5#ZXXXXX\xfhq oEmm}۾1=߇maa0p{&gFC؎x7tgRgIj!e͈WkٲfD CF.asgn*AQ~Ęl6oư?̝D칵^UVh5-j_+$x؁c !QoAMoa\5%ZXXXXXbŌhaaaaaaaa=n[eM ؁c2vpAl۶ͤ;wz{-,,֌x Ú-,,˖-üyp9OfBrʡRJ淅Ea- K,,,bӧOcرH(jԨ/>b4YīN:UZnm~[XX ֌q=yu5&؁c ?|hsL0_5FașE`gnQٲ[,XM6-4j;w]wjD  .4&˜ 90w8~rfx ؁c !Q:ݻɒ%C9=A" `tC=+֬XXX\֌xš-,,b>Txƍ{{fD Rw׾Xw!ه4Û5#ZXXX8<'NN?±G=D }טql ~=1+7B ,,,.kFǰy<B+˫B8hpqLX=>>Z: GA`m^y#FaU8(y@\u5#ޢ֔haqkC3[ @NX}zJ("dvwh̽8XlǡGѹUȜ9w' K-,,,ncȄXti5Pظ}~?2Ʉ Ϣ˭p!K[&ơ`B(Z%Z15#c\kckV+&&؁cQjU^YeEJaӚm+r.ROO`XzdKhfbmYXX ֌x "6ɖ5#ZXPѣGv>8eG I1wBxg-x= (]iaaq%X3gώvaǎسx/,?öI{|V:oݺuCǎ-ѲJX3b[6#o 1d&\m\}ryW}?4ClmG}!mzR7z;!Եo6iaa0p>[zx o5|aQon5 32Fw3>[WF\l op3[!!yy[;uU0:< [Q76+K lA_ttbW#7լ`g,,n l߾ۊ;Ν۲l[qI|,鲰9lPxKbG]{͇K&Y\׿nL &-,,n]ܒ3[R$q5r>w]׳Zf9 Ujֲ] {Gk-[ 7ٗÕiaaq˓u~:~ c>D=|| >DNAl] ֟wk|;&gE\ݹOT\.߾zg^قo_tϸsk;׷y>?w~^|br?E7A^}΋+]cq۸ h_۰̈d]إSBt.uߨƍF)/Cs.%uzdzUƾ}||N{:k}~ѝsk%G}>s|}1mGΗ~z<:7:5wO9QE\,n]$8Ro?|A[?o|߾n+n4|___}n~;wwoTZh~q[|Wwo[>|yo{EG>ho1~_Qu?;.D}s|}۾$o h~>KQHQ;>zLrXtiѝwះKjGws|Y Qe[zntss/?jJOtr7}^s{?R}m%w>R]}܈p Q ֒%ގh: br>VFLes2]wct?!6rG\;:ךr kl0l ޒ}g+<cT臸cr|~BGLes2]G_l3! .|#yݕp;%  ffK얅a>H]. ^aZlvf+ ЫW/o+z\p(<$< 6#;BCMSx;/m۶y[.>_8^ 8lݺդpo#<c"{vo#~u²e0x`=fI8ߧOΌ;ݻ&M*M6ͻK,,,,,n< p % @ٲށXFꥯ)DFUVCnc}!\| KYΝ 00˗Gpp09 gΜH<9/~1EFFn$D3bl !L<lc !孍'Oɚqvz05:ܹj͈g/):S3_L8/H~:NΈd' ~ٳg+W:Gu~gg͛oŋ;WvOsj`͈7O> l4m l?tNwfYmHj(Q"4nsi`={'nY*V[2e2\ذaٯ:ĉ8;- xcD(ge"wٳ(^\1-}@%w … QNa~w?~wF,35k;X'LwIB|!ǰd"^)7@k@b.kφ = 0hHO` quHqx9X"2ɒ%C9=A" `tC=+׵5K%h*UT(Z(J,5j@arʅU"}Ȓ% *VhM3[+W$ql+ݞ}ΐkmKB\؁c !QL*M\EBv;W?T IoMFuBd+{LWhm>,)) '?}LTLgm˜)m!!%J;7&ߏ?(^~U|2ٲ(Xx1 yr ( ߜص+УKAHzDu# mA~O'~ΟV٣" aj k86VA n]pl*ԩSQv}>^ z*U CC1」1%[r{+4kޱKx;fj89%^քLqPDŽi㫥p@!x1>b_Xg{U\Ç/6mdff͊={c:G!D~"cƌX|96l܈c_%,ٲ *ʼnO]_^p2D1!`k{6q" =vƅ}z;.??ݗͺ4툘u~<*H]b"Nڽ{7iq׌}ItLV{ukSw~ )RΈ9,ٲ?H#$IX-9c˰E8#XߣKYtҘ7o e/7C!sL,ڼ {en( f.d3g%3 *!!!שH"&- *3#*wV~efZeaaaa駟[oH|7 "^ N?d`+4)5}WFDYѹsشf|8|?V|>ْdGQFqs"oܸѬ9QJDt.eV؎W޿v߾c9A8vu_7a1?K.?,N_>/+x"K߳,wyALewz|7.M7Ν7nbf$|#|ԩSu֘x/ ,'x|G͉KfZO$=*Ds|l%[!->3KMˏyOւ`X^w_0e<7cGbk^bz(#9 a{Z3fU}ppLr1ݍkn\>?1/WUXoP~9$t$p;&,KԘ,aށ>D5Mj5jk/G=r}-ZΓQ#Q]=z:M˟ɓfFK"ْ3V)*rV :Gv-OܙV<\X͗$q*Pw0e~άVdtoy4Or$j kɛBo.LBLewzC#>2*^y;~4oQVߔ,DTmY OJ 9WT n%=UVfM&K9!_LW&|H׶m[s[lE i<ӂ$'?G?אY ԚâO|c|䚍,c%SFx*SGYF AAﵮºaUJq5ؚ 4Y-?h)s@jѝw\ A&?-/r"@*S.ͣ?,c*+=?OQA}k+tCT$Mo >yANsQmzdK+Z Ĭj '\R]6y.?+!NV=nn*=2<Ə6_ǾTv721'wDF둯ōK݄%%7Qt5ɖv'[K,,,,,, u`֭ K,,,,,,,,A- K,,,,,,,,lYXXXXXXX!,ٲCXeaaaaaaad"t@Տ6ys,,,,n.,ٲ*ˀ+W1U^~:XXXX*dC|8p.hϽUn`^1%[VV^ ޽{K) t7neHd⚱飪͋/1Ui!pX读f4_Qը}5yh%UlU˖7 ~sLmL归6^{ Q'\1.gMXX,^mlׄ͛{[q,_K, R݀]CЧ<7} ͏S!EMTsuk5=Nº!4Q`o@ի_>L^HtqFqr_0ɰ'}i8./2H (Fxۈu2^QLC2l%ۄE/p]+鲰 K,=**GŁB45*UP4=&4Hե q֠GH DqYGA"UpOل}Q]{PZeViUm\WN1 ep+~QR$G?׋6aaW`͈q kF`HPOq1FG㏙?14㢝]Õ 4B*MHs$m2aUmo( a xI9=Tm̎K^x&,,b֌fD fS&>F\4;o׻p}cx5RyE$S s ȫМ@2t1m xAp2LaC>̴ū6aa3daqdaf)dy_ tU7217xAy1Xi Il†UWQ!L{W*c h|̢M-Շ).`͈q kF~QCt1jW)>!&eU0e .`@ܻa ք]Vl˜1Y2c92FokhMXܒٳRLI15#-6CHeuܦ:pz{8 .ԛrc|w<_Z|t{Ϙ s$,Vu^0Z/'פe|8Ŀ' W(_hkj{=]x6aa[had eZ WԐ%q|]yhw򱚮b WEר0^CנG˕pTx(rż3e9F?$תRm">|y7]ͬ`͈q,߀']tO zq'+ ے9Qq-$J3[$VuP?".`ɖyLYX"5fĸ]x hnr3}ToIL%D.B9~iK$o&]<ߏ^2ً =F>zLˁ!n?3{L>{F/[\w$S/3?0Ȋp|0~L9ɿ|ɿČ QL_21 "2< I44 #L,O@~ſ}20}ʤI?3gq[mP LXaIG@yș t~W`w7#NClEO;xgp4gv}o3w0*P+fb=ab Ip>ƶ̾4 f'3eb(/#meL2 ^`. >`Lo0ebȶiFsX `|߂eb]܅%`&ޣ+Fxܛ hUnT2|GO08)w$W8.J\"SlQ'4wOQ3W6#.001KgǩdcTZd| 1*(aܞFSnlRwZ,92/? le9< : x42?P[XmIfdXO*0:NQpR< D^&c(CHt V y[ (k,$z 3BEG7- ȏܵ#ef@鳪8wjiUsɔ%6#W'ۺ0O ،>n6~ iqԴ}?q4A(eRfw)<]<8 z'x=^SL&lWS3O*dha}̳e8|Ԕg}bR~O0ֹJ2Mf6h0 Yߧg:v>뚲V~#у*q_& -f4aqrQ1=hޕ¬o|_hqyΑX̺O"ΐˡkm=scX}iD~9S#c=fqykW.qd {^ʌrǃoA5X 8V#'ƱYw`gPf;gHhF&t+X(^#OS;ߟwv_\:_ɈulVld|7"㡉^kBm얦ΕɴK ;0ULj0SN\89gz'l_̪]u5F1{Ti&،?4ǶQYl†]h;pz OPd0Z/j//#a̼#fWÞiyݙILIߓ#3b=̘f u9WJ׏Kn֌fěGGe`/>כa\yTk~9SlDX#LITiOޅ]k;D}p0O%!0ZhTv&bEKH9ʌ 3*1E™g=>y&0SფGՆh,L1dY*dEԑQ> Ng":[A=7$ ?S=;S6:~PU/xVQ=네ظ{̢$~؀O&312I2=~'J!Y# |1?_DxgOepWi+9MNN%FjWdGFV#sڇɰc*"aQ|{Vcjy9Cc.q#5ğԔ"'DN?OR#:R;ܺ<#? X6+쯄O:)0ye&PT$gy#IX4Hԑb^ϳ.(gLs0MWzq6+#Yw >硎dX_$%\QtR\Ra" d4_Kc8 y x.% ^n̸{Z&։[o䚾Qd2VdW*riudIJJ2Gκo0ЃYc4dꉷFl6LF"}$"8wΐ>EDw3IL ,]ʊ`vIp .CV3O(OQ)J$wȳ- ?qɓܕipj=xr'o V̪z̴Fʟ(o.T~k' A![sEhLU|1? \'/^pF+Ob$*ZݚmCڇ0t-,hRgVl#8@ʲݸ#ޢQSc<4!I{rQC3SCا?3~߃Z hˋTErP򁿰w r2P}2GoшXSqT;U앙4x2uߨԕ)p* / u5I3yT9s6 KblOI43F~lJBH$aAs~B,G2 ZS>`9x}8^:l{گb~ޣOmʒ0JyJnҐ.C1v'52RÛʩ<_ 3T/,:3 eɬɳW.S߲"t?*t/Cu$Q)1~ yo]&*{gK'"q^fy%PD. ߚ'/²? o[#ZT1Ć!>L+yJ Džb:HpJ Br796dcO!vŬe|z"&g3b[Vaٷ}*;<KШ{AB+.Ҡi瑜nm" JuCJad*(>z;|n=H?c{ 0oebN?; 5D\0Fƹ&Pʛ".Xf%~>K"1Cy3G|WZMϪ2c^rjcXmU1 zXVCEN4f^CrʿI1(gXnuK8|ҔKi6K3^5I:qEZċMmOm(|r+OfFX$ '9NLld*d6||ZՊϮF[Ո7"4[8' FД;ӫQQ6DGE9Lőf:{B4TΚa\HSKJ XֶwQ!!_fS)N*3Cӡ׼w\޷u{ٱ~ ŝ堂;}29 DP*P9k6e?U%gJJQ{T7PdwHuAbo:y;5hRC 18;YXYWTGGed"2{3_,`#9XsK>pIЫffqwdc;=3m2M> qb=b$f ` ~ ̌L"j2EVp4LD%V%+-b 3֌x3J2#}(r~ k(\۩ ɛPIk̇ppHNLi%|~fɟvʇLvK, PH 2W}BWƌhnXU}6O`+}H=RbC3{O`b]R;raTB\wH(+*<_fAX4ࠬ[d`{&!5t#5Uqlifߵyw|r bȫ9Zlc$`h$߇u2K~s @Lh$C`uK3ql=!Zޑ{'Yr|5Mœ11]"m(Ӯ,Q͈ORp|=8;w\61BMD2U߮!ML*q'>=̓^2iP@ű_E'QKɏB X~9*n.r|Ksorr}{j b$~jĮ&f1uSOEL+j6<PIY.?kj6"H3Gϣ+ u+{v1)rRs*3syO,Ls?>a459 È4W6|4f=rފ*aXzil}sP(LTRIsEqpaNWyHPi9SSDB f m#P<;mƏy1S󕠼˥E$zOf`g3FreHؼ+&2%siPp%XX)ٲqxZWv<ڗ 11f"sf`Mʀ=7Νg 6ffJ d4Om #&6Z/RllO?b )I/ټ ۱gc↴K)1fOFM##pMq# +^{+qBR \{$XH2IԏlffElcOaTobKQIO@h9ey n-3얤Fjg䱣Q(&io3v$=GV֊4-IH9= |;K W=o%i86Y) ٮd%6`Gǰ1z5Z}όx5DkF[X3MDgֺ/ǓbiN/7a`?jq$/C~>pխhR[V ^_"Ybgx}vc SE.=-`*ŝD@S8C "!Ø- Q?!󁝮9LJ[f1D~ό՟QK>baKPȐ yC WGHD( > SL@2Ss.5S@l|jHMݾ䈟ܣ̫d\A$6ˢYdHBiq`5fIp2݃ʝ21=YGDejДdH? ~EUU] ,e 79+d]cce8#37$+WfZh|4CP5֙ +&_j26޷zice > E,;jJۜ瞼8љ=IlQ8~u{9^jIʗY2}d#*>yDӬTd:[ȿ4$;M>|*\HVXe*|Ц[\jgHΨ] 5Pl·ݰGdk}辪e%.L2Պ0nL?)["3,7_݂ fE85k&f:0Mcs3V29əPn:Y#RO!^&6wa78 ,+RaLd;|f<e2\fL_eyYP[$MY{v!##_8'Ғ'Vѥ$K={"_ ӧOG0FŔh͈q kFȫ^SD2h$N3JlPԫokܘR>N&?wJSO|`/T6QǾqoD,m:1-RSȱZ{;蹶?Wc!`dѣO\XNs˙ maf(gރ"ذ!\IS1PX(`/Ă=Ԁ$jj>ZK?*[P!"}@>zjqU q7|HI]Z,Ts&O܃uĞ>TdZj/b(> MeI]G]S8e&Y^y$h##%|?һQ5fDz]薙 NEFtpj3o`syr}RH0&\x5㰞V~W/}+̹>}Lz6TGnP=l>bjvv=Jb42mQ~oSYGq1$'ې㘕oT)_ S QA0EZ},_Ca$16b;>s;E;~^p{Y^<LAj~\h~Kؒ\YSIH~>F;RPUiWbOZ˚#x8JլfSc#[)ȧ!$&CrZHM6C#=QwEX]oKMBPTi Ye};4PdJmJ3G ɽ2/tg?Yk@^lg|&[,ec~u03l4gdMHA_?qR~s]q`k0t 5.2A.yh +CwFS.Ο7̼twTߦw˥Ӈ; ߊy4%ɣbܰhEAL&D|mL>fvnc,l:Ɣi{TMT{ D]&a'7 Itdse&pn`7@5_M0Oа`rLB27X„{wSNL'#N絋CSDlt*(">Ϛ #B]㠐EqsR %S 3NMV UWD*,UU 3vLw:vҜʶaUQCB=Y/y5NޜS<Ť5CnHʰ3ASnn0yϘ2\5LV1)PiKIw-g&k7Vjckr[T`](6r1)ȪbzaM 1 :Abk8;[vV;s 0QA3T/;@@&0'懲A08N;'h'mq'eRQ> s( [f7ϺO*p ݎ' =r 8;S<8U@w^[AMe|( i44^ȁnY,TT;ΛkX2|L`QyL#$VSq*e2?]\.} ?yt>!|L>CWu͘}w/L5h1etyF 1]aRq*:ܾ \\˽w'ƴo֯ys>u+Շu7]\1 Svx? o;uwX.DZӠJAM6y |!,FWCz) @z|i*%S Jx"CPO&Bn4χ|4`' o&u~1l]jL/*Ց0uxS3.GO338B-Gyk\l&a^v\l7O}5 Y{0<! pI;%Ng2#=\iKrMĶɅQR,{cfn?S8OAc>xV!`f^,j"MU6vt*JBŹ@C8(毫ebm]SGCʚd|4\rS,T滳a"qhϑ87,_&/kȷKqd(+gXF,` Z3- k,,[lTU[ ̙^̮-[xge5%Gn!əAZ$>XV -%/]gs97|ڭLԦ21Uv"˻qT(M,>3`G<lPlϛ'ydUxdrL&^/F6cfRAu#I,OΤuILo)kwY;ʏye۰$-_̶|u_iLؖr!%Y/E&o~g$JUa5i3ۘ^lj?*'Eqga]By7X2ZH%+RV&vefGb*kM f`5wC~ Η%M~wgIKxZ,)_2jwkF3PSMq,VtSBFH_5|tJfĸ5#Ǎl(U. u;De^U$;e#Ȩcz;eqXEzdOdSIjP~Uv .DҲ3v;qxbc<1?FT,z9Ɠو%[ r%o FN'(b 9_Im y5)ʵ#u P#>t7, ER6J|G"b.)*Z_&eL,23?Roj1g=IC]tE~K;epQ9d==ee.jVgD|ݰ ;vHr+ϟDb,^L+A'ӎMax+S^e$.F2^o[[$圼mHK~t"f# .@6HDՓx)N@E,zM̴; dʻ[ \u܄yw jDn%:uYwqS?`d D$dalW DxLj32Qeƽ߁YZu9#d.$Sㆷ~A=ƗEX(9k!l`;]xuw%j2{76jTr(Yo uƥd`<d` Y ,͗sp[fR>ɋNU %ǓEF$Fs+p&ʟտ$eaMM.9{ˋ ǨqPC1,n;QYI$Z7Cg)8=`8%͒8TiُreɈDgtbĎsݏj df;{DZ:_ 9qJ4ޠ$~"r⁑{K\PF~dZ(4E;o řWM} 4H祀UgT`SR>3v,wpafF^7>z bfр#|PYuGwvTK+vqP)y9*|TDL5C"//E7m*wZWˏ Kb<M^,X 3ɇJ5oĦ̬foP2)eɝd/8 tU|"1j׭!c㳠#+Ш suD(DEVDJ)!Ou'|wbIٚm_$aRnoȟfT5{"(s& :%Gϑϖdɉ|9ni Y'S8i(6gő;f /J>VggH S,gH69ja;^`݌݁"Fj{dpT2${,'q)^ՙ5y-kYmo:F 6Txx;5jIYXvED 0==)˓8oJZvRGSiUt)!y3V 4+{nmVYt ɗ"HM>[]=?#~|z-}8&fV0>0l|AOIFi. v79˼?7),6@,6_pvhxT}[x\<\}P~8q^vzZ_1=t$̑@]|(OWR-z,>\)|i`8N3ga^-SgIut+G܏Y7uf䑝ʟ"_% s?k|`z0KVvrG/WA_֧saG[~up7`>b]qs:xۿy{=Ó rGov`Flj8)\$ߪBj[_M9(nr ַ3n><ۣ\ߤ_X4p}Oj% }<&~]й9:35f[~™hk|I@&c>6T4Op}2l;Nig3ź6mWt̩OYȯLy_DY/UUgQ?|8Zq?f򡿔b}ʤrmw>]9m>h[>F6>[}6'HX~z}]8guugKmG~1S-~f:Gî+%7Z\۲-$K"m$Gݪ"bjv$x® lF`(g;{5 hh4 9Y$鰭{aXq ? Kq>Ir/%rQ#oeâՀ|4C3g$pk#m KNkte:{hz^8BG~811^8f D)޶'w*~I9>E-|P;K#ϫO Kh"V`Lt3.^fA/ǚIk4?.,W QÅmɌQ':d2a#5#? 2rQS'ɐ9VO)S|괷UVfB;DkP֫ac6.|u6db0#~xV_!-R-Rʵg5Yir?hZg V?E|mN٦s,lwV'7T(pe`TNSy^&f5P]s~XZIonfQފX>/2bO70MS;i^Y4)SCf̬ IOdSQM;Oi鮼U$,w uĘ8X gfoź7Jw)xs,7̛۬9RcQ66iu[M `zcATgik̜LJXlY;>~^~5zeFiyЬ"u`QYwч? Zl2 x!S쬤&o>$.W0d6rD!+8Oc=fWT =u $MJ V XB'[2rHgbxXDHWUuDIFP"wHy?Ћ$gߺthO{۟+d:w[d jDjbTNIR=B&3;q2+wHRqGk2|:Ju )%2>˛(oXUG{K# k[NҰuw"rdJl=9I\ +U[KAA2QINl}ykF2vOXTGF$ML'XZ2D"M~d&تu6¿Q# Lp(h9$8#R>HٚY-2d!9۹=6~U[ڀ'ZS:9p]M=], H< OǠ>/!'2h5v㨱#XVgfL''x4(sI(B j,7]H<׽q"= ]Ȝ's#oLId3̳^N)IFl# !9:+^W&`b6A>|*^ilK?ۑ'ԫbDȰd'C_.Ѵշ8q̠?y\M;ާ#|H[l,K|gZQGd]H3DH~`AH^f?`3<-BVd ŽWq?|M*m/OQ.1{9/;_vۏ|~āl<-Wn[ʷC9A0NgIve)A$W}"z̦]١|1eN[8V5f޹FJ|,[6w1WJ>Djqe\Kl-X3b62#NuWl~ۥLˇKzLg홪3TP2$sB>`jA&_]s+'~p~JK8ǹ L͙ZSwu]ܣgm]pKdjƜI`&7ͤ9N3{:Ϯ/0'葉O@P5&^g\zㆆPȃG!^89o9&4BSw2|Tuf8]Gbdx@q%)QOJ>WiPiC'$a!ŤXT8]9Qt2$R.d+ČJDudʧ["l*%?=ի _u|>eΐF֯!F狟$"$e((*mrSve_ _ C0~R Yg",TX_@X^?>+ !o"K$1L6Dru蘹țR07dK6ol0$TEzC蹺9WW3qeϘ?SkY+̽7g*wE~hope6=6c|8 2۾'ۭH*SE@D;#Xϔ e-"iC_~ԟ/P[f{kڡAfR",ي"WQlElf6tD7򛵺xR ɖ^ c3#Fvjr6kR X ]d9?J3$mͨd5c4fq!)U)q=K#a)oK,zSijCl>*v3K2왎X0ĞhHf)<3C$rC`D_r (o<4'!AAGhw !" h?~89-~u[DO&D,SO;:KוwE6wTfq wFYj_|OM?%A"c<˫wBm\z4b#R",يl٠q r(PbfKs]}OmBtßm"ˇ,KGEjiT]_ͭ{qP(f)&i:.:yvkYe' h`ZPޅy4٦?"Do_)0ĝlѶ<,+<3p $j:4by+D+ߎjI3'4j3A0>ӁX9Ҟ́ Il]HAGIu 3xޫTN1𱭳`I? ϗ_}Y8$J (},FyOڂi+ñ(\o!Ή|׸axT0*ӱ <\|e^ٮTkoe!9/ {z>|RDC# {-$IwWퟞEK%/RɅ-r"r@J㸞")(Pwض;/I1agp/܁sk{T=)L+̸nMc>f|ߛB]+g$f>viU #$[ks]"p׌ͪn&󾤫E#H9+Q 6[6"Mx K^g<]_{Qcj&NoE[`Sp*˷`.DMaLU`⻻k%.=?Qpzgf$g]1ePs/hAA 3p/q 3Ģ /Cp oN^3i!=gT!4=!>vfip?R<2$ lj2L&:v9ySOiPqR6-~1((ԎZ~.9Iי,H8/PPEEaN2,H03Iq&w{ h*r/XoGxP+KpT~Nn.ZyX*2=o߳fް YʄVU^r>f'8wGRD.'yPL9*fgX@ :eV EF[Rj%rUJ-"`"=F1"wrԪ5%U"OuF ] "uߋmQ<{*D!G0; _5P,?S| {y,_ gC Rlڽ R":V`8ݝLqD6&R~X=rևXr#7/7>-)Rp)![nj\)E*IHZƦ\2r:WܔkB^f.e|B{ٶe^O8tZ>MヴB};0Gޗ`ۙ۟a{d,]e!ҼBF8##5G>\l #aW$2-|MF,$r'Qqfے㼈ߔ06n6r°4 b",[S)V٢ɍ"#ua1~Ib؆0Dyc$塻8OehYq|\S󒰱 2G"qkrY F1m[jMɗܺ (u%z'"cHUU4Vm,r/s|5ȞH5"r9花|_s)_qɴJO .楯Mޅ+%S1=ڴ5+KJ,9@"5Zŧ)'hmɍԠ'}E,ED3>BD ]%@SJNAӁWo\#"8kA'V UC*E NWǔ)˾L_?Ч[TohN%T <3s`(v?'씴f.|*¯k?XȮ+05WS*q*AԡKyS)L"~:˵6b있Ȥd$GK` I V j؋̷B7HDͮrY5 qWJ"{RuyI$s.3CX Q"M2D\f{(W;t!Z+UCz_ jĸ1F>[7A^l5rnsmfF~K򩑿qo3IEOz~r^]xL|HrJת>9?~IZчm.o9gdɤU~Zq@Y約I>kZ( Gw$.`d.v_c^G\+6kZ 3xHՖALrdNyvi6x>v/,u'4d|-]MFriTijUd/&}[~:_Tu.gY~|SONӊF"U~%+9ٟì:Թ*V(>kVrjš)a]?.G5 ןϹ^jsc_ъ/`>O;;ˇf(ȭVG3S;ߚ@?:]?-YwgfPJGt>[QElAaGU aaR.6tGU݊c:bbLҷإa|adfhaqNþ?AoW#VD8R~_CT+\sH-6"ܛ֝W]|f419߇L_݅Z( ui N`c<Y󁬲Cv\lD\ʪ^,Lᰭ|+u2ψk5d{Y7O,YAg#ˬ'͸ͤYr_♏( fwPlgù|€7̌I_1RyYHNreq@Z7^[ySp^W|&2YfDo2|cl6J˦Ǻ8vƝ9^ˡ˨᤹)AU]ܓ8"1W0σoYgydͪؕʬzmDq|J<5&z6{25ۢ$32 %ȗ߇ǧnf!=?vz&7bҬf*v(]>-٫% x]_L>fs~R`Olsa0ȏEvR~c8.++*C"2 F؋4k0{j{]))`론d)> 9% xjWϯrIHH_M$!*ˆ HsIFj:6Q9y{Z%b"E+>*SՄʕ^;^6;0~xPduŌ7+L.2?1JsXrP}C~% (ڜJhppgd.}6Υ6v!P]E}e uoOnΦLEmo&I~3eYbԑ=oje%Ï5g49AퟦbR{)rȏԺ,Wɷ؆42xNȈRu"sF1@^i1(_ܷ$ ^W HU'ѓDj\Ht;zؼ,HהJb"S"9i5?3&H?IPhZVxUL[a(7mI_l61'm(3Qi };jЙA*>KD\}& P6(39VHL2ˊQ(*^v!kzCx^8GsXUDA>EZZ0o1YrBj,0b+B{` qʉm_w@eI^THNVd(ӧ IQϕf!L~muߚƱMY|/{50'+d_/ sJBZr)Vy_7 ,;S]ؾ=cf,7L"e"j|f"`ߠwIP]\)]7~A肿989 W?E11nq5?`ݿIf$źw_Kamt綦KI}&}N渷2E$7_rLL<+ Z8_25I,xaG{g1;XO{SSwkd *O*X,1YDDeL*.0ĻbZJ88oIc5 !ycZ}oqk0&<}[6f8ݘvSLn o)$r&-Wd3 <0Ͽۙtv57r9YPy2u\^* Yue4!٩ GLdVTqx o_ʮ1l&BD'3L2*̃be)(*. 7 1{+mܰ渞/3bPkTܲL s }0 z򙦌g[ٜV,:ŸSۙC|w9o;&t.ߕrYP!(oӖ([nm˜57JW؈" Z$Dg:% B'[FH:,Ш3  TT&N0ilS(JU2A;!7JW>O7j"KA;K}bxf()iy&7i+=StS>_를"f"q *& ~P!O]>~+N^>F=&܊mK$D$W(PbYH*noK2eМ'+2S8OeoH)_.|Vb&ߜʈu)ɔ4Ȳ2xc*3]G4>W9흮;&,Ҥ:`M&iQ11s'YRoE*45=dܐd)HWʯzY7_:/"2Sx:|VL MwH0۪ @*"AE~ۊ1%DibG˟(OQ'%? mDmے>]Q/;CXZ"! "l&0(Z=RWCS$>&EWĆSDM<+E7KY_$ Sö%zHۋW3P>\yXGL$Qe1 D?h!-b٘ǻEwX^@ǶH/X_&Fek|ɂ(ߥ;H~W1v+fsIw<̠A}A>j|y90\ l̺U;W9|9k%[31vc)5.E|ɒ-؄ ɇ [?`kJJbiHaT<{u,d9 O?2'( 91ȿ+sߝ8aVה!Di`Y@%`ElHs&Lr|ɍ\p>,?Z?f~c)#sHdt]Q82rZ1uL7+5' gd>)4|#f~~^c8z6/+q͜,k/0y yƭ3+dIac|Fg/x 4ueFrx%W=$xu$<^ Qj*Е"#ߞ52)9GSpM "ըՕr*iU2lXL2S&2|)w|w>v]C>Guw)SZ&Iy3+앷MĜgksZG؝g'wL_ơ11INgۙRIv}ByT~XC؛}^*ZQX,uN$p ~vRwá";'ȑE,H^ԩpP6_*OP#&ˌ MmaꄦǨPRD<.B9RZc?. ߑW؏o{E`?]at8$wa^$=5YF萼3%׾/r!%rPTЧH|wE3!{w8h(p>'QÑd~ލ{4<6/(;-j1=^_IJ>yT*hb*I*svJ0!oB։Pn۱:ճj؛스8uf q>dTg@gjLEw8w,T勣VD,4 lAX =9 Ӊl`V ZUʩdjGM3ؘD(6'~ҼKfɗKD<B.QdQC&N-X !4~ }N #_X^lyxk;/rZo5r*h!7 6`-2H7}P ? "$]+V_ErkifY3$EH(⵬t^f2;KkBghdll 'ߤ՗ ^k%8s7I{+6Dկ>g㻡v>>uE ]OW/rS4naL4pi$*AQfgѥ:'4׈zm$=Ȟ}Fkە/ҡdճse20&96ΞX/Y %idiEk(Fv3ߦf6εMOpX,c <^[Rs|nr|+YTPj$> elfDfb=†6J& ;w*EЙ9#c$oǪݠr6\`*E%"be`JX@BĒ{qu69ZPS% &H&w į*C/d;[$ L_w]H4I&'ӌFgvSDEH=&DH֌J>&史 CzG&d)Ff^DޒDo5d*7qW-&>B"z0l+gŨ(3Q^^9l ؐH9kAHM}^!Az|ì85ylv c~{"} d1=rId")l^[Z98yw[l'mO|D|{<]HUg;{,RD8:OC$=Y1Vb].zd [Ց,c 'G/L'6ߞ;5w$Eì[.1O|\Ddz<؎j>%>\]+ *ڽX|!XZH#f.W31b) \*ŵ"ᓭgVLdN9{iٷHoPCTɉLRafETO w" v mҪ* 0jAdr"s}?9Hu=:hDQGk${hyE+aԨgRAgiI>SWIyIG#ː٢V5j&mPsmf6&ƅ]P~T9{((lV̇#/Ge@hD8h݋iңΗdR<}QR<,߇e|lE|k93M +sɅd5Cx,Z}a!*` ºFe0ָ8r#Hw`/:L+Чb ?[ͪ;~9˿ȿ*VWIS38Кr#wu&tÄq8nl*O &8?mab}NO<5zS}dH@8L9?H=rjE#gaK2>߬p"AmɁW~9WLw_VB= eHv 8hqwu\6!YR#QnՃ'S3LrWW-plr9ˤ6rHw:nPӥu-I+MPP9mҬqbolʙ]I+ _`J˩={agd[sxri|<כ 8ziIAkehUV9u7!u 90*&-'Q0P _!x/sX]&=d˄Pw%u(${ 7,)e @9u-!Z=2(ºHmV`ia:&*qnSO9\*Gf!(WWoN {^)bmHUS[!؄y]*V$F%B3P1%vb[1֪6^~n%Cԟr#("uխ[~]jdhr$<\2"$&oa.9٬>TtEBLDnƁduiV :tyքaI(r#̳͙|"ZQUk"&L$GF1ydpf:AWBA)+C&sQ4w,fRhԪ?CT.֝`6O ńa bS~ 9b 1ҊDPdwT=^q7 5Mt%3 W`"ڋ؉ Vd*!$FTƆԉi"*_p0P3ZABVR{m3ƒiL$)4VVkE1ߟ΋$s^).7YD2}_ $|3>|*7f@ 7e'1m!&pލygss)~}kLďR'93#S]ƴ9b'?55gD&寣o+o6˱Ȟak=uV#aZA4+o)J|dyٽ'{|Ҟw}ȝ[ X%LeWFG/q܈F]gIu/qa Tڬ4yE2:rw I`y~ס@j12ZS"EpK^ɑ]I~.ԕ4,{sok] sCc5r/VmcG'a [_c%G!QXPz>>? ౷>sUx5l O~r5!kd[In䗽WQY)(NNެo MD̬8=5onu7eyp~kjL|i{g`ALɹOGsliZ'G=1qYKv}M}+'mtΔz*yq| ֍f#R}j ےږŧEVG(kJ"x fʬΓ!ﰱɿP</d3M[x$Cl\jM!2w!u҃ړQ(5oS"k{XI_jr /V9-&;%31x+Vd (_UZPG e`GfKⳙa,S;1,g$ض 摹OK;;ӖEp2 )MRZ$i''AS;z[%9wHqRoXU8%N݂}h,MbHHܝކڼ Xj9>2Ou(( e&7ǍɃ|`88JP{db{r!9g)3cT2d.p'9W9H6Ŏ<.hc2޷_!l…RIfH&I.$Hb T"p釓`iW5M9||XYHIu$E ܮ]ȸir<P|b)t%Px-˸spP",+UJ\OJAf=_1r9~ +SԐ۬~,W#|B٨Dv(" 67r/c cǺKal8Nq/)Ҕ((_=p?Gp?v|ׇtAlqsTK_(G+_\ e(P~,.޽{']QjĸEoB1#2~'8Uy aS֙bӏ0|"A龞P&=S2_^3MqqP2?$sV]Ŝ;yf=})0 2-bqK3yy5/~1/UE 2 $ އ_dSPdP3-u7_VuEȗoJ .%O]=S /+Ӛ|{>RTrb&Ӣd놻˒DiYKIu(?;E7N{D*b9·NGcR5fI]foLx6(HWN 2_s'͇Kzfgl,?,DДI>sjg|ngk4ky?L7׽L]2 <u8vX2)؆d4f{SQWׇ&6d֒K&6E{gdnUΜOTeޓ9|ZQ6O=[Dd3LzJh1 p6E7j;ˌ|8k)N5gr/SLjpJ;;\|Qnڎ^}@}O3=eН/ܕ-.肚K3ż']fs8p ! y9"-S[Ōc yQo mr䩁;:Vr("Y aGtksVY)P42C@q \SLWZruɌik331\sp-S [;JV* Bysٖi@qF63K;Qf^B2OvrJC'PLT2#~j׬_eL̕2P:?t=opm}𖡨L7>U|q6ݿ4}IUdNHqr%.)K`֓(bl2k䵽f+1c6(-}-"i旣 3g}GffHK`jjeY~`w/Soǹ_Yi &tm+-?X( )@k0߃H*SH[sbƌ{L:v8-\`":>jl %l;0{zou"(qazن;W:k4E~kɋr>?5J]ikĎgC>ي"E4]69|ʆ>GGED.`ߜظ8\W˅`]ҦT;[}Ys.i]'員˶vTd&0yϴ!Twg!՘R5Lf>!2=~ǤWZopJn2?kX3j3W0@-wfMD{TM۞)_eugG&93%r,ꀲ,=c l蚡|WK}S5#-jěfu\6Z(dJ|if8eFfB+xf%c/hrfgvmYv|}Z#rd fB8L]MA&9iF_9g`V*r4|Go݃035V Cf]Y.q33ZQ&)>*4qp^qff4;Bf8*Eo3f$:S,YkJ߁\43Z@(aWZ.d0#ݙ(9͛@cLVRt9_rWi%|/} gMR=j.Dz+9#8hE3'Z(o}P+{VZGyՊZ)6af~X〮k"]8tuPg(i}=&9WT- W\w% mB83A3::8睯8(Λc~S-2.4O ,h%&peĶ/sͬq3 r:z*/ۙhd('&LϺ XFs/zɚe63lfVg|TlQigY5r/wI%e^͔r %M|fw;B;tf{ɉn0JٲH>[_Yۉc b^7-.:d92-rg?w7p8َH>>;^5R`S8BSn H#hjf!L86hIYhT)0"ۦ43zΎM?|G٫Fdže_ s˽Ry$QYQ׫E&3ZKpX?QXr(,?= =9g9X.WO=e"Y\\Xw?gE9;3g6rMۘ͠5&fVgF(b޻5GSFK4[ X@PD97&77yy3k{|e7처9أ)n_ˌKߖ2&NKgr 8&9@RorV @^dV4:3ͷ]"1۫Y 8EʆwHDڑbdvA;Ig05d0IU`f#F;%.VB{9l_==wڧ{C 0cA y0_|@L\ /ŗ;p;==K.QeUߋ:q:]U2'q| .,ΘlUhaݵQn~d~/#+_}Mv U݈?V&K*LJ:LVV5Սy\q+P=^ŘQAw9 ll6rh*+YH Xүc;}s,3,k+rRSϓSrߟlqk6GN) e@v}::q$dl@'㌧]Rrijïgr Eysl&G0kǛx8^x3dBٜ9[uRP&xNޙ Euf\&J̇ pr$\  ~_IpoP'm{3+0^D)=ҠTD  CJ!;S6u-oCTP8AJ 1 3IdN’Eeײ*ixy A0}&HUphދmQ|FFE+1e/]p;D(>| TɣCa I=]P'[W=2 ;SԻ}Y%rFx$ːh+3?` ?;MmAdVеH}~ ҈l$8e7IvBO*)e"v/tvElOʌɛAǿwނW }ؽlP-9¡bsO劒<'r| cF;\; :P)յ%YiPUE͟6Lhr  m[~\ ,R$_+0y_vy͘1> =(' Cn2TG6x RU~ >H krjb9vGyɅc"D6djMkA<(3-YQˈ [4&2e:"]^Ӣl<.E 6ʕM+$|=ɪU!& Qࢧ`Ujc',K f{V^C4NZ1[9)q!sNN?ڑ$rd7_w#['Xu[8~e9Ю%bZCx#!'8nY¶Nľu <$,o^qx8%_M"9uVR|h;}i'\}v$y)9ZkWb=Y҃+wxuoH 6s/0,o)Kx u cfnΈC@& l1Riv4Fbglˆ4J:Z1\Odjx. 1>Ĝ[ 3Mhq7 ~w!;pz+7kM!@q8'ݓ=U4 tC{'dFFC2ZͣLe+jSuؽszDҼlҎ;;i~'/~M6A1Mev d9ԉҼ9i,/$Zٝ..EP& Q7=R,˭'θ~Z,MԁLl71b;P$PёDRTXyDN㍨,D$\rZP</.s!UI"e)ӲX]ٖ4F=<0)2I-]j0?Ev{XݒEftŋ3Y_'6ˤد_ƅQ c3v|\x ņ24x֏J*Kd[o΍i;vP/SݘT;dyԄcz/dzYLœm2989/_`e£"$xCRuvd qs&h,~x4,L}\9sqМϒuGb*[D g+@Dvxi(\Y̞#7!_@,ezfֱ \̳vsfutm)A(Xl 2yygܼ#+Zl/OK28VI8A{u"lG> c=h3+`Ƶ#Կx󜨐_0JZy$[rMjtTB rxvA`k33Ejqr{6OZ,"3!H~\l=woue7~}DP}1-O^pN-qwO`)#cY̲>z`ebqӖjQ9*9C37 a.gP$#5r&iiCEMX2I/kR2&iZպ#ˊjyg)Ѳ2L$˙N N Yܴ"CYq R;Rc\uu|,b$*7AL}"QiTx^aI,/& Օr|HM++Ʌd$kfbnMC1_3I0)9$NzN7P֣)"*DVh&׳,N$@:GO T c @1T ,.l+pMY^$$cz yȧ Wz/2,v9Bs6P`vW H] TI' JIT.Iq_\E{[O ,tzPӑraRs B/6lHo/͓}MNvۓɘ.Mx8_U#H'Mjk Ffb-1ɍp9 X:!ЪE.&/)Gr=^9ښ@i;r;f"V Ѓ~<8OL6HMJ< ƍ Q~." {XwOEqb.`ͷ6dg NثKu.YF>$nmi&)Rx aum SXJh)D:dPi^eg2~Ug\zMn;-%)}ِC1/`}V-l,o4֟u/euIfX.vIo"k8Ή"i+Y֏#QIu&#fD;ku7,.UD̨4m I5DO)߳,HݖlwlHȠ\#٦,^dˊSߧC3ו,A${[܈E.dۉ"P$.sYsEtyτ-9v+:"3̤^$EZD|j l3roOeg5'K((;^l@=,_=G[j4ɿh۔(r$~-K6-! -+jINEYq.Ws"5~=/PϢȹCC 95c^I_@Ŀ%EBG+G"Vх6&rOau}݋HZ'XUNt!єFkYNڍ>_wz*gދNG1NX -g D?@TIΒJf"Tb"0 hD8 daqfAZ DU `V%> lϸ.\;L_!IUSP<,z% 5xZDiOb L1xy= "Jj ZC"WAG@},ڂx+(/bDdR[J]uIz7p`xVw"%FTF7Qm}naM7/DKLGd;qw"˔Fׅ rHu^$0T7捗cvrg ZMٽd$eĒe5{u!Y'<z gsw I \({$QW3£`5@J﹆IU6 y2፻͹JYCu%XY,. w[:RC8W&jLG_Wn䔜![N&Pn)P&( NTqТτ82(HĖKEui!2|w~}*`wY[P}Ƭxw fr}Q+0L-Pq?Sr=*KFIƽY}"DiK4ڌ s߄[$>ۈdz,Ӳ<* i/''kV߹6}&M&!l'%IYm;B-̟vGup YB~&{U+wݗY픸s%#75>R;4V)9Py{\Oyf7t=۸FUF pL|bv)q&9u8:SD_ -1H5Ne2TPLo\'rwBmUqzDE;JD[S^ۨpw:\~rޞ :!#J2ԛ$[Hvlm} $7?EzB~GB,|7+vϙyXrH.]ӆ̲(jNgynUAJ[r!Gq\y[ץ_#91tpYS:L2Y{&[߳e@Xk|HQDnS41s98 &䕣58=-1E.sY-K'bE,8p$*=@pk9cn#`-~TvLv4r%v<_-W'M02eQa3;7r$bf,RtܐP(.Edh/Ǧ134xn?GO|^xAax(ـ36Pv<)^bPWDhKRcN%+Q!Jc\a҄W<v+`͘AWа|ԖRCΫEs=(' Ӗ]ن l9юmoK,;E)n=rY~LJB}sjGl^{Gh4&# U$+^++0cDKM̀3G`Q1[-D9~G>hiP؀+g#aYZ px  Tc!vKܖq& 4W$VwL"l֫ʝ,+/SMɻ)Mjts9de&VD^ˎ63',r{\m^,ԍ?; .H.;VT{ ž?|3*(g}eVRو ^N>Mrvy QBxW/H#r֬LN|@b?G6;*6P}{خ<2xše n"KuB묄v| |=ɂ2¯y_3;p|&6nYѶ1] .Vu1)"oE)xD\jTx yX9!$;ඏU(2d9ۧ+YިUhKgoגF|5́Q. yɒDߜeVD3%JnH]#׬䀷Kúd/+ 9qv_ t~U@N}xdf9n[:'7S0=Q Y<*H5@!j^OoV)mhmEH^%K|2&r7F^lȖe١^!~eI\S_Ϥj;Gh:WlڭwYS%Vw&,Ħ9RQXȁp|ז!E(s" )e15zZU_7EfmV QgZ^Qf=Z]DW)3F0*>U~e[2Fb7-aV,FHVIGtdo+dF4{=Y/gq Zsjd *[J'ޓzލ]\,n&^9X1ȴXȴ0!xMoӾ-\u~+~Ud9X5vJ$IB+N;8%򤽁lHHHyT,A4rOg;d%I_~E)>2(oD TēH^KuJ-kRyQm| Գ4ק%%rf\VbsrH6%(<f26<2EUPɂ8D=_@~5!b9z4% ]/;zrtY#MG%wo~ cՋR8&oWU+9%dx#xЂs@ b'L.r&8F#n}C=G3n$Q""Uִ _iplya5o;@8(SԈFGQ.?b.V౟&zwEnlcb&6a.'Xb $h78E@\c֣[{̈́,A77kO8৬b^H\+|a6b_abdxNS|\H*Ye&rȲ#:J^BSv1|r#?hxf5kdsA_gk C tʂnfm@ -T)VMv܎ƇV.8uɼt^PkbB~yu\vZk" ;#3ߢH_wxedHSbMGg%,HŠ}z'YD<;H'ƫ]s p|/k}9oǜ>ߕP8d^outErib V1f w!giܽ‹D,R^YuJFmRLDraq4Cd=N~d;Rg"өHN.OfW_ 8X>/&&7lkfvD DoUޙu/~Bq*ƕ@ОEV*˧Ǩkf?rѺx 5y}5-ܙ`WFp5{%I 7ΰ-'`P"qZH^#~([l?Ҵ{gw39bieԱPY=#m}5[d?JLv#)ٍ_LW7n Cc @D90b߀LߓD "!dxJTIVlו?Xk~=F$+:e5S [] cpdqr7+2)Q7\k>E d8B#yxsw^D. &.{-dEXkDYt~m.6 7KcH[K+@"1' 6k< D,%3|ORqCXV-dF(;8gc) XZfuMgk >drʪFv,$Sy-qtpupO֟.\+ V`nbɎ2˒&HEád$(T |{cg&mYu"7<|߁mfR%jY_}4/Pd3`o@$Qy2d][6;W\գoI@S9|M;m6ёeT#Dž0 ~GCLfw+S:ؗcb@~3KnFC=mA ¡ἏlUZlpqsfq3d;odebq@pH1, >K!M釨g/vo6V8~E<1& W֫fЄQ2EuNRkŏ}>_ݳ݈mJv#7,}k_9rMIP;F64[WW.%B7nsZ9\Y܍DEm{ÎKMl$q-Y6t:"7(Nq0IȅHb& 1ќеPVo(*ⵗ"n83+G/a;lRظ5s"'Q:Ɔ X$RDzt\ W""A($U<m\Хo?E!hv!"Q(@L$7Lc@\%7LVyEHƲm{6nF!K[zmzuهgĀ=@-f:׬OO֤C1C(jW ~ ߨ*J0fY`ONJT gj Cdkc#lbs4bVgOSeaׁo@[-xjdRXWv7j]V#m)V}p-/fY%7^(p}#o=HH2=(4%^ǎ?ku):1s7aqn#, /"< սH )aWEdQu٩%`ψz6ʒ {`Xv"3>$K웇CxjQ6M<ϛQO'PHT7nʣ^)[([g]>]ZrN՝l3t{LR.V:ɵ-(r&U2x1QU?2;#Uȸ(Nqpj{뷙1LW*'%H|oMHFk!s:ϘjŎ;LՖ? s}2Y*NUֿӯ߆lr땈>F¤C\?Gdb%وv֑/|P!9#0TMH@i1Np@(5ޝmv49V)δ^$W~EX)4/%?0D~ 2) IԼ3:2eWE|M-J9KױAIs> 5KmF*A„*"dXSS,VaH'r%cm̳:tHzM눝'|m[O7_ĥpRbyPJMf~f8wE{v2O7IQ,m$qŁP61%޴b> iouOL`HLUQ)TWYe@/bLqyѻDhyX8F\c\0.+]wU 2>dܬ W_ƒ ޘ)W&M-` lcSgp YZ,-Ddf$2q\)R S'? nYS%-#cO{=efdzIX6)xDV}ti5cM}ޕT_HB7}Adވ>&:ɵdi(VhƾBζs<^NCYn{% zbq@FMY0HGkjݡH\')44ys JUkc׳-$Ҧ$_9^K}^z{_^s_w'wL߲kvuC*fP/z$ug t'֚kuYV5k|e.[ʲXM٭F;]Ȥ{-+ul ߧB|_y#3F%f0/Xpv Բ޲fs)ma-܏y6AZV; z.P淘YF>)Sbuf[)EfYSv9Նޖ]s%3hS)Ra}c _oJye|ȲK5"ڔ >>0uB9fɀ<,9oŜy8gXfrwl>+nП1Μ޲X-1 rwGdb2f6˺e=vR̬aٷi21fV9XgbU|]9Y_}{Jgb45jhk,Aq,,3Hq)ѓragS0S-ujbqrtzľfꎃrqXVKkbYS 坱A"=+n sX?+[Ye}Z+,~0?'fc EpOZ'J,7?`QG,Ga~Dzrޏˡn ~0g7:'9Fs[9X˱g56RCMO)c9*msI̔sx*2B;gYWK{KkExR3瓘;9Fu3Y^͍ky>򐤷&곐Vڵ&,xP:8ު/CEb:Yۈ09mƲRʃ6K!r% 8-(7yG.c1A/͡='-AawfE T57q9ͪv$xF,\KC0w76.sk&ANWpb܏O ܷWm}j߲O\noV_Yx; |~\%WE z#[כ.&G`Jxy$ 2'ό띺_r`I,v4*SkhPs}\B;@ϮNTmøpݛ #KsgH̎8(N|63#G4l6DMf[z YUfnhǻP3lm!pdyΠ,toq(VŸaOKK RLF+ W̊a{tnAxqiQ.WYeV\N=mq&ne}sR#ܟvSNl-sHVC~M9Ο"ԶKY1v#5BzМjY epjm%;P;_/xzEaV?Ϟ>f~reLfzrŬ$Xc(r΋п.R뗁)9YoON ~fǶh$g;Ո0Eq䐏Lr-\X:I\˸nsi/"<""Nɕ4)?"ѢHn;f!h^GT7r!VԑPSbu OŦCSA{/K1Jt?7X-ijDFD܌=ADoxX) ewQ=@&&&T>L=ODt(8ve~Zk!vVlF <1DDخYj@|g;M#sP_)I䂤PK~K rY0!RNDMHz(\vO~ щQg4 ^ ov_obuD^RH1"K5C4"jf.GYM$AEĥ-EFȘsRJG8O y۪YsI)T_Fmᔒux$b91O© r!gkN@wΞ@F'2j1Ó*+Qp k>p4"ֱ|8!Tam ? BÖkԃ߳rߜftkWn#Kê"Py#pV$Tq"8@`yJ ijrQU*1cq{2 U^~Kpr8`ZI+դJ }dAM(`Ho,qQgU4 &jNv*&Nuf3-HK(xJ6guUS_Q]:ۨʅJ0rCH둺ҰTN|g -}q}Д h/[?Л7muhNԮ-w?^JN;'[H\Jj"OZt82z"&vq`V4nGtE];C lvx[-Mz>9<̊X?8>7#,%4B^xzoʘ]Qqx1+2l$ I4"ٱ!Nj%DHYJY6 TV͜/NsczMhxd4 ndjF:mE$hxJDp^CYidm#B3aa"^VW1 :V@p4q\Dk DHJ xCHf, != K2۩)|bt9GQ]ܚa?a[dAD )p Cѻdm!IbgB%wiug\UK\frhZcwf'ipd$޻J4BlLm"EjxvN#7K&ٕ>!z? ++ʹVέ.ټ$Ym䛀eDO]S/3ptP޶`"i ua@EOld Op55)/UbDE;-`m$4o@2\(ġYC;:?I-*ezp+r;mb!઱n9wGQlV3?r[/nca_3Ų jゎ4/⇁m88Xް5B!!%%jD^~oEV' *(CVRg~X)qA:ـ<.!hDNn2ǾA?Xx/_R+vRQ ,RY2IJAt7s=dR}9Vi A WA~_P-̽~s΄])@~cߟw" _z#݈֭m[ߋl4 JzLr%k?TxK'V;ͲJZX%-ͮ0wlV5QQ̊)tɤ/U췬VuW.㤘!5|;h*mYMvOM+ƶgnq_^URԏZ8׊%;2+~HuĬ*LqFmb]QE;M1#Q"˅eǐ}0_fVT-k~=fjbs޳u;|}ɬ,J MbK2WfnƬ2e5 N,9X uO]OrPvZ3o,Gsdt u/!{u߳f[Oaߛ1[5719ihAWXM,Zwk`A=f 3uQ}OEQrg"w,Ǥᠮ(F1;2cE?ҁٗY\+rJsh1kb&e[*s8%َu8|aG*Q1|TqwM"R/]ek,V=fV3>{tVfǼWsR5lẊ=ol)'gmٺ62Y~Cv>?fzA*7>^YXrI*޸NV-X MlLip7'ɻ (.組#a>>5pnr “^pwDڮe; `[5qMsFw·B/maEq}Yy\xڬzcsg-W:CHn1eX3S1ZkU6̷qjn.q3r^w['o0OR}fqV8a]'W7 rTiӶyp=HAbeA6q)9_`NYo߉~i8 #CSlxE)#q5~p(?sTwkv=hv濅m#Xj]Y%" l7K`r3U^Xey^Cª(ף) 5)egH[ү`s~9ǵEl )sm;׵ٲě%Py">$u\T0B UQc)XCce4%W^|F=|wCDѷĎْMZ=o;kIu%1lE:V_}fb򚍡shhOP_y@c(kY(sxrQ)2H^߆`GMQ3rcw 8unT "W$VNJVD 15)EF.0ڑڡM mCNln*N ]P{ !}o7I1[o&d7_F7 )>1=TsQN tUė+ɤvpQ\&;NI&a&7qi'v4+&Bȑdr Yw$_3h :XHA̺~d. LsYN:kKp >ѐ DG#(ȚDgOvސrΒ@/pctį@fȂ\G}޷Шmp}q{[U!1"$nZt%,x(qX`Yv~,~IDAT7ӉIH%ĝd^[D6@ڨ T=2iJ(>jpΩ1 Ji r?GlMDz-خP."f"%Nioę w`!mOv!)S T=w߀>Orݰ2"q{D(gs+ثА-Ro:&cPzxYݹxkL^ D@YYTɡd L%B욌I&:պ"J$[TP{ہ)'EF}lz:|׸ϩ+t21RL\!,/ort;9UU/uǤԣPLoyMV=e Q3  S+3tԋߛ$3> @hV/V)K f7ĢŇTFʲϑ|kܰ}PS$G%ұN: ^}G98`gMgAt*8p>mǟHNį\ជ"7Ni29F42;vEzŚLk;Nل[US_r!rU,% 1'#rteϏzC8VN\^_,D9uL/ܜ~3o٠lHJLHL~(U\xs^%qR7%7b܈*+veufY`Y fZ_e~`j(/\V8Olim-{P_mܲWtmraħ{E w\ 3Y ]z}$q7:.ס-lUo`^dYrA.d74徛B̦\%tlqֶː{CV{M2 "a1c9;vh\:rRQUFCf̷^Z8^y, Cshks$w w^OUTu1?݅:̟2/Vgk#Z3GU 1܌X1_9bƱ?nPU?{F&i:n8'۱Ծ3GHp^1edfHG=fɱ0z݆x̑" aŒvA$>zDsTaB>/ͬ.wǤғ^͍,Ʌjfj<4go?R}?s#ҕӟ"$R%G~+PL,f9iU_]*"]"_EIVLlΨRwM6!lreʼn]1Q npò mνdh)Lh/L*: , |-ES9""3ԇǐ5Ł(&D8'29P"S}?YmoY'Vɩ={DZ#L-*).IQ!$sP-אǐN)⡸q A;X·\aq'`!PMJ"mGhİ^YX3]uNR@vk"oiQz#1RV'+3#6ޫ?s-fAAG`Й1Ţp:H ҹa$ꙃz}9ڲT6A3 =O9I_e`H%v$"n?} IH4).Q1z"ZNF/5$ 5z9K F3kyF<(=RfVCd"gd?T_}IYDw*W_淓Kc&:N"91LiPcсFYz ,p_YlD4jU@62ĉ!!Y&GML#!r .Ϭ q[e*`^#:SFjM,\I@iȊ,1xl_V7Y49 ˬvs6#b@o}&o$O^/rh6 xiڮχ=F*SB1A⬋9U <>> ;XUO 1rȲdpNKcB@ʯ&K9Et>IBm"kfJu W,N!M{Y(wCJEjwd =fYyƪfvUXgs"6J?daSEՁQ3Xwt OgZ& EY 9&0 мlMڦ8T$Ry5kaߞzb4p/~7 m3td12%9&9c脜B@&& 6`s^Gb C{>3qaRlYЯU+;`A;iw}+bԫR@K_(uN/bdFAWtV&ȨM!||'帉Q|5Bou"}9b>S~b-ʔR`q.|G)s+VJ1,>@1C zy^N-V#)BZ,^fC!7xu}Y3g6:#tG`ˎfw7Y q^Yiz=4>X6Vq8YOg56=Tϐa]t2>#'`#]Q'և~mwaaԝ\w:A:&Of"e:S 'gVBblJr(Fhkw)^-P"`ۯ܏˂s>BЙ"3xd3ycJoX ;g~w"WHWP)~4ʇ pjq;Nmskהsx"XNa8DzNa4}J鹟cT4 gK? 7Q @ rrIw1wL2?mk~1r{2N0Q\=gW .![5__˥2aͼy9sA͙1bf.w0gnz,wl&Tܡ` Ń HYQٶ.U`ԑ:;>vXk%kAIq[,;HgMXu:'řq5-d͑;l2fYsǥH9騈#xѶS.8Y1WxIH=vך{q)ɴQ.`B/֧xsDC'Qv]U,^¤+ozd Y)ՠL:FCm~ooubLܗɐ\0ɕK9KR9X2<,ְXw=E*mvVnIG\M:2E.I",ԥwGSڵͶ+0ҫ19K֟FkYN"[kk+iÉ2pE^HqGVsU8WY~;.㵃IlǓY h5y \B}$|sk c^r,E昴"5U?3[ZeMeEIoU~B09?~uͫJzh%wR~NIטUIv_.I/q*/sZeWm6ߩ fEe\㾯>Ogy~JI)͓.za%d{utHAfY e-,Ϲ^,Rdбu̬MG|Έ.}f-#\ ʈ -;rz AD#*vy]/ڎ¿Y~W>>DG~hG,Q")f-랬@zlŶɒ>t*C6XWٖ׀(f!QdaMPf0S v|ﵛ"l DeD=Jviͮt]eM1H> 2 ǣQR/.j%ާJǶ}~C1Zj源y^ Ievr,rg".05LFQƒp+.S=]O*UTTMˢ2cyn`];*T)Gw^3YeuIYvfn'۟mïe )<ƳLٵH~8F=zhq6Jv&&19YpKsE͎# H4r $ZiZDNN:j(G Bô1g_Qt >sKؗb =mM ϦIQgg9{%|4ݛRNy=y9| yayow?ٚ;}#qrVo)| |#e?eÞhBisDIeNg\Ig3|7>$p|.ߓH|b{2qYq.)3eS' Y>ݿA'܉÷NrryfgF>7ii'B)ve&NqX#}xȗro=!})#U($&њ>ج|OQ>ntOHu^NǍ4o8DKMSB "KG%H[̻ۓ;<.#k[h4f5;fEXMZ4-YcfNQMj;S&U}uޛ#,P%ف$V:GJb^r׵H@Y{p<ÐDk{< “6ʝO&G@R;}*B& ҩ"q:c}Ag#7wx*!eux R^D|ֵ[ [S"kٌ$Zloq)/&P]' e|~ %?i\Cf=(3!u~HIndAbTbtGoI>'ɫ4%^ 9/N(bvMjرtaʌ?^ݼm뜜xD+9O8Qm ifO) zK'Hy1Ҝ|hǀH8^E"|p~TN'-xnGO3^ĺb9V:O Vn *}GJp}͋em+ y2+7Ν-"5ObÞ396W7g}Oʇ[0+xO=/Pa}:Q15Ďi# /8o!' Wj1 e^zŽ uS!@TO)#۰6ͅKgp ]́Ո2%w>4\ [h XK;R`.zgoJDV@9AAP -<~(L,xB%=cVL/I&!kx";v=8x6x*.[9tԭ<˃d@vtX?)Y:)NlcցduFOr=C֧= ;ivj,U+ A\0l ux(0 DD+,, ,z8ڊ!tZh%R&" y䤣Pb%|HMnwlK!bt[1T[Pn9q)Qj ) YRׇH E9|u^mHo'N2&>ԥD":\w!di)|Ŗ)S:v+'ޯ㕫".Z8lHCMwƍ@OFlG@]~a(i\-4 >'oN0$nENpc5i?D*bVPmM,R?sQD0%&m&X<#k`ỳ zs /)LËe `@+BdJ6C-? @qۇ ƒk9g^CYo|n" Ķ85a֟@{f8H2~u07|GRj/ $QT^y:Y܊΅DoGf!V@NyɎ}S*w؜8~N N51i@VFd$$)\reAPpqE?1"/^=xɡJ?U+qׯydϏxE{ ^?N%7 bߘ{2)iy0ɼec% },xXlGx2{$eL,W',Wv?NG-(0!!x]V0:-6XV/W:_аѸA,?U)fqnmY7?Td gFW8$.rG'qaaifSgpM/#eakL7Izf*#b@~; ^Kv:~m~P.8Z-H(v2Ub;e#rǺb,(u`NkXtg5-%}Uf4@^r*]LQT䇶~\ԐTk\CT~"R8,GmT3DfLYDĭ"ᅞuB0Sd7Ks#ʪ,WeK/{y #"5mO֫X#{ٽAwm4ggI\>'O #]ļBD4&_ZB`o/FD?̙GUU& n庄>T78 4CrZ+?R\aʑAp64ڞ5~Mbǭ '%>A7Iz3E@A+{cUIԜR}OxrCG#DbDOSo!@`<J, @iNn= I LYME`Y!$7a.pMɊ|BI=PdMkD!+;QSOQS<uA*~np錬sol2o(P$Pݛav(jp༛&ʑ5uꇢ3X =}%ӃtlP *LL_ܧQ=Cҟ{%'IVQf *cǎΒ*pWN[r?@GECICD K?#tGpM'[uOG`J``Erǡ)CvʚE9Ͼ dtөr 6_Ts:yAA,\u%W@6J7d9C3f5Q!A`G{'$':nObgk"fY–P(w8n4OZT{*{/Y$+/x:"9d"im⚀ܞ7q};IGYʖEoq9 %V ݫwM:;<)V @y(W dYly L.i`VQ$scrI_ G\rs%?Kgɖ@iͧq ʊ .Lng~$H dbyQ9l'ijD,y>}ӕBŗW9!By K.16r$6󽀠Ef0cm[oD-KVz`?) x`8C,I/Y]ܤb& h"}0¶DنB䓌Ȗ.ne hnβ|HTHrh2'z4S"eg2 X=gr&+ЕD\K \eh.oI[ u& z"ߟ{Y&D (4!fC�ၢN2([7=J޲:j#TPH]F,b5cYp9,?ru bCt|).H9OdHXG= %#:{4}oo^JŪ6ưúC<QO@.^ʢBy$:d§Ȟ%=-`8Q_PhT4 SBXč]Qh.`!eyYG½d "fȉ8^GXzJeKV&H=ulάRI(R䍆GxԒ,B(]y "ZIjrJ:> ZPD8IԋͥK?u\yjH,LH"p.U2*^ĽgYQ6qb*lGbӞCy\=FɃܒ^ոx:œW"JǙQiݩ|r738کE"@F"$6Ap\\Ԑ( mI YXZ$b_Dpc̹j,[F$1fuIL~_g_6n484;7LdHvٍF.>rO$5I1B2EB DD<")\x 5|4rE ~3DKN"&ݧvl pkI,>sI,@B2aH^\ّ{- *Ltw'R ґG Yqr'W`[(;?,egjH2=݄(g)uU@h~--bˤaY)ő54A$ڂˆ>鉀5Hk4m z}k [tC%Qn3Ό"K$IU6Fup";)KƼEôtd"|DKCJGh(m~nPNGڗDK\1%G9i 루Ls:'?w"&2ɖ,#`8@߿}N-7 fOфDLV.de"ba\ss4Y[U$i2]鋈˂dyt?NfG=ˎR˅w|i0&66*vT*FD BR D̒Icn6Ⱥ%p\Ars$XHovN`Nt :cZ@ ]/YV eBMl fݵ$"vح#4fܛQ| H`>Yš6 Or"s(N/NA ~)tfɚ]C< Fv`NRYIȕ)eh2p.N/jY o6ol{#|KM̆]EvϯQ0r +H}`?,ij,j}OGn%)=jEeJ'jg\d"9 {*h?Iz2 Y(;.v˳ِ,IUH֒X\Edy%w;uㅄT2Ig{q&¡5Y,_Z@ Yr'7opk-unZrЈhPne-\DZJP–Q62IbyG]Dg fgSMWVM;p#u/6'~nȏOd)0^rUƁ4cL<.:s"wW*UIsOޖ}e*Su\q>,rK-^(:c]T,ÞM]6r 7L#W鏧W2nU)y7_-.*eI* ~^9kJT@+Ayn7|s#)Q\WwdD+)hw{L؟<9 uCTkI-a@O+ADM# OV{2_H^,,=ˌ˗ c=hyVF.k{@{t#[@jy Z6#hnGOqJhٓK]}9nV\dQI{, JeŐ+S0ʁb^qچD)૶މ|_^D]Xc ZɸifS *rKobFqQ+MAxn,>)|IdDxI&d:\hdC7ٿi⽼B8EԤ"":C Av˲2\gP8 Jfzb5/| #'A)޲). C/I?'4Y1S$1z,I*Ɨ_~d- tM" dϒ`j|NakDψ2rU}T߰۳MuȾ$#YHV :ppW,9HJ8JMPYqAˣQC𻹆X⁰Pr*VKogyBŠu999=)9^MgɖW9?P5#7QU8_,"p%]`3b[ĽT^ "J\LL@{pNrhݗɟSX9mV $bYڋfl:FbM_`N3Z^yZ2ZD)pEeX$[!=g}ۤh<,s 95Q:\\sZW]BO2"aڛDG~eT<ڹ8D(q>yK1Rw~8Y/?N͎ jZoN K#z?{U] 4&wBYbI"rd.\o#ư_ dhHqDd"gC2BD{щA2tGxٷ6~JPj"_VLspLBv8:jҬTsfP 3k'! BdOȊ[ bhLCKc4#H0&!p%hјL2,y<epџ]݈S+$KTAXG;1YQlE>Q3J6뽹/AIW䭓xIL ~Pȹ,r)LDJ=B:\1実6 GJ'P-+ ONRijI-]Q?nL *)nUNN~zR|݊?MH"!)\+rV2x\OÈJq#1RCdxNl"z E*H% #Τ$+WC|Lpv% K9ˍ3?"p4W\ԮcLo0δ%՟ t&o" ~xI"&T38o}>}qE|HU?sXWY8߳ p)y8y !/hJv#VXgB0#1dMQ 8$7*OώElrj߀YY[ra9csALlsoGA=2$TSe!׭?mx<冮ɎqTH&^g]$t=Nl܆,dD\S8yl"*?~1O5ߵ(=eMbփ@ H1dI1FhrBE>ldD(Dr ˭J"w,r!U^Iϕ*<FIU˺H6KġcƎ)!$17m_Ko>?K,pV|^cB}Fݡsײ.ԟR\*VϐA-hTlIm.RPrW _.ds2.#xUmv2X~O,ޤ`s}˛ ++1pk M2R/+d'L+Mrinhǰ`-L ,Yί_ǒD*ޔFkS@ Sr)da>f5Xmv{խ\UL{ndΞLcmHbcEq_; !'T`f)(tHbĨջD]m!XП,du[`;IGdb,N^Bl8利::p?CDD$8 i =m2i?NqGPKzW+iN'Ipj&<ǎtdE"^R 8qdCmL6eU eZ"5eH2_f8YO e#(*x (,A7nbnBdZٳ/6 (Wq3OdODlPʰKC5z:U* 5DxM^ PC$)Tq'&&3Ռ2ڤ6@!ӑ fӌ*+g6ɛeNt(Np$c"*rx#;O ^$_Q 8NS|GD.tG3@Y(ه'*#z'Y<aP90415VN?;oڤmM\TȪGJ=/ i񦬐G_ͩQq۾xjQ1'}]?3({ɦZ;!Sp8COPw*:i&725m)~Awu%qwly[Q[5(=00zٌHep~,*WSOK:lO%Rq'.OmMoCu99UInĿ6%)GZ''DN(dG ٷ[ud֒G&yNEpIrxHdvF2 &C WNFq:DB>daOUPx*pJ.C%$f,DB&!tr#PjE+^"B̓~3Ur\MW)ڰ kZ6B;tH[6'\X" Z:) `΢*/W"n)ۨt/,FYYpe-:">,_b&kGHx CmC8Bn"~oQsz$Ȉ2oV8Ѷ2ʱw]Ǿ&S{Dd5Ĭ]ZDǍ۷H}D4;?yxIPpANrݰԭiqTS?OBק- )ɖDBeœe~om)e끘)b퓙,NSV@>ŌQM܀kUvHG-?I'pV?"K]$GX7Sƫߩ-ǾxAD;P:2c5g@?&; zJWH.(( @n=t/Uj}{d b59(d!zUei: e(y[ٝε㤤r1.%.}}ȾDFdmoefW'\>Т}2)Yx_GCrtTt( ꖟ:G9AKBO:O^pua6_Ea4G/VbRֳH/ wpQ"%RjNZ%3/Ƞ֏HMnLt_Xב_ϓzegߍJN=ٺ2JVDP݅hAYX1>79i4. 緔]RPK}1i8Y_,榑@NRR.͊Bb.:btDb윹 5#+U+s|ֹ2girY9Dr\\3#4ccTI_0@,b$fte&LHC\BF6H-մw"@0ԷId0 Q }DT\hH.Iȅ"0 9 倠utB8}}9Y@VHy,Mr91>@elh0#v8ǷtȐ85mǠW-DbؿruS#8/PŅَR+7YmDgF!e /yc7 ۑ*K(P- oc3gȪIxoݠ ]oktKи%  ໽Q-B(*K:iP37˛򂮒⺤TeD͆5>/v~偉=>2qp xS Gą}R3skv6 0f^&O$y!`;q@iŠR)v-c,ؔ(Ž(4eAJp&ͅ9LE|__Z(k30QxVQՁmê`r6tȅH5H/⍲_ء/ojy浆|$3Vsqs#elȃr#U&M y6+BCjկsr/_e?bJv#)ٍ_LXu-ړ\;. rX3=ې~]jW.Y\^ڟ񂗃3L"\1?|ne6Mr ;%j+ 9s%_yP6,nBOTv}؃rEg|=LuF07HIEJc$2$#?^>u=)̼]NJ{72zϸD'B6&)ly(BC׬ TkNDa{Ix^Nbn[n/pM*mQi0$.-$pQ8")c@Է8J>[]HYg:= f5ǙYGqCEs\Vuo˨ sFiʮep?PϦg@dߔ7r#;UAن띇˯6%ߟd#䔜YۓN8(R^&M"YFGȧ.s-; (Q@ssgx>}ڱ7\L$ZT'\(wć5ɢ"0j]O"]HTE#ZK.:Ng4KKk6WG#<"9?p /YquyQxnÆS-x Ce׃P7'-+_y$S6?;R 4 wCk;i2|YBDݙp3z^82T$%|#1 e # x0^T؟e:P̳&[R޼4 xyi!2>)$D?Re #qhO9UE)vƫ8,/v%YQQ LnW 5a6:1Bc O ѣlH`t *-$6' l;E# >+u0-.L-%,2F4%P8l0l}WAc&ifw" {;MLE$×iM3>g\qi1ʃn=لNwR )#kܺ t!J$")2I.!8'bLrgf  .v&3' DtSGk`YbD;]#]I"|uOM؆,yj\,^{m;r+_G 7d\OaQm)W܎Jp +U ͟ȫUh+2$ntk B$חm%jRei<9FTpd G'PnckU IhtFVO9crFIfPI컼XhA*CzJQ H.Y~I-ղ,Gb'ޟD v 4jL23OEJg3]>Ey9!p:Zs +R.AU޸5֭(8VE9S,cAx!l-\%H˒W.ًd} õd"p/O]:$Z =;7 E\'կsrϒ\U+ٍצd7K0kεgs8?d@c,2\yZr 8s-)4BY& U)hύELʼn jί|6r*`hEq7Qo0gA bݴ ~9lt|k<ǧmM2+& re5U@#G9rbKUJcrJ"2ُ+k!r'?LDžĂ7Y*_@ƅEfo;wHH67 6r1˽rۑuSNKVlO/! HݕMD'"\UDʉ ֯3ZO[a%EDMW~:@@@N7&Gn䪺r"R*Cd9"0ĊbW(CV2Oe!Wm 73zn>r ʬq31lHw$ 1KL$+r"@tKNiZ@塟HTW+~.+ՃvRCkŒ>9}Y*S*Lc?OF:KI8?Å\Mʪ@!PzϝfȲJ_ۨh*CnDӅ =LcerSV!B"'El*E3RK !:/;.K<N[ _CN轋uHbܩqvUGPhY"\ZXp t@P NœE^x7N54,NSFZ ,'Wvf.D䔜![4ӸL@Y0C# g粕$S8 V\n@5_Y>D.Dr:?('z.1;&NGJCF>ǭ`?%bOBܝ׸]04~_Y{h%5Jb3̼I—o*&obܠqc9"XZʲ%'pjze{]"g#*f"o9?!jG A>f mĕLλyx8ufOx:zp\Ʉbk$kQ$8sZPrR!{"u!"L4#Td+;tSDx\(3f<>SMȏ@_S9 5-N!Y:ʶ>dNr $d̪`YUlSwDU# c*-ue{D8Su7';i]j [̡ކg/R!;(Vm4#ΧAs ,vbbv0o;^#"&^$@DmM|-! -:)|݂ Dˇc~~iVC$̊ǚA@5<>'ሸ;GN;HmѶ:mܸDŗ\u$$˺rCpQ wNܷ ]Eq +kwd- ND-4ƹ#S(.@ }ZHs,Tyo+wc1w.RGaCkTZIR^j~O䕅MۧbZWw}8>ƑP? 5W @ZᅨC^$NG1=j! gPPԘ|}x%1˚ Dfx'Yw8i>?i('oKp^y.=P؜y ^nnझoEN$"=8e@À+c!#-/ƷR7'c"xO=7&=ԗؖݕlEy:` O$u -jw: %Br $8uKnI{FBqMެF,ړrv!0&d2ɋ=-oICK=|%(ExߋK#X9\5!ۘT)RVVzɩfR6$nx n~qSΐ ^70@`FB=5e<<iD?B*C?WD$d˖ޏ]y,Ir ~M"M(¼ee5.YQA2b~'ƕh+߫(֥qY v&vaoOJ;f*[OR*RvF!a-&8僳Pu S>bɥ-BJuЛP1rµW"zB( !o{jBYẈtݟ"iXxS-Skڌޔ?r_.5ڡMʕ|Ni"Г}^HV=y鬬MMrLY>qjwPHFyi*,^,|'I&'AwH:Sf(TZcd&ޣ~Udr"KjilX+āÅǩ~GvjK78G͋~4KL8utyi]D=*u. V"d~|Kfs3hJv#)ٍL|eQvW,${*WBː$YyێR,0rU(j1'Naǐõoq,ڒIDm +Ri>!rh9"HsNJDE`횒 >de5Qk~uZSCbTR?ÇȬeQ?,ban8 fE™8.oUo,m DE]\ 4?Ů(Ɋ CuV,uJYfP3(7N{-Uռ%8:l4!"Xu3"< /̻p'"F`*G-2 G IY IZ.qCXܞ T隅W~d[5Xs8llCd$0;Ҕ&*FO ( HfyXר\zFncʨ:,Dw,bу;r޼ZSWe"  Y3H25GdgRr_ìز\k>ŵm9ٸEGoxNqoE=XwNzCp/}+Y FbT@r02-KzT9@+xOnʇtVC]IgDA{.Y* +Y xmpf<>;Gv/{FYl/Pnsjbrl=,o1FHgV-+O{<)>w!^ 7Qԯ7X@ER@r31e5,3;e.}Y<ےm-cJ"Zȱ찗cU DI[{M4 YFrH4!./ 𬎭!HH @ ݋Sv)5Fi"-V%BBDϿ9p/{eN̙ٳg{)Ğé(}Az⢆o5L/lJ_FkS22D%#9*@ $挬Usm@x $֬s9;7'"`ڭB3σa۟ȕ L;-^a6_EmÓ9нB8 6 3B+ܬ"ASr:x-ݻAӌ~A `zy""tCr2I`xp|I_^9Ŗ@ȪgM$sw3۽-/"@D9gcN"lN ik6{,}Y#o~ >ôDAuDSX^EYQL"E)VZKTH*HXd>u &} 9D{ G7D<GBvژ&4M M1_~ B}@?o]q:KfR՘ ö%}΢U沮|&L-H'"9!yByH<$^wZˬg9*ʅ]X;4GY|E5HfLb35MĩЃB2ԓriȱٔDdIE"/BFHb]Б (Lvon5Y&5IZ#U,]GrɻOdۣH$'Bi}67pXnB~ ҁCot7$|vX0![I@ ޳jP"uht/;VRwS}$AïX+=#2^yөٜt ZVj9/9fȠ~?lȂ!R2_^gٲ=%. #q&9Q)'-ji`Ф& Wr;/IQ*4їqӳJ}8ٛIZ:$y\WO,˛˥}|G4l@{Y:a@Yh`k{e&Pȓ%гwmiğ%1-kf[m=o6,w#Z֕}=j ºzdAn3NaT䧰 /k7@Jޟh]A{ RSԙ16?$,GdM`'_)?eAȞ:$e9Op4 ʲhjŖf]-xܖED:_NFY,(L7!1z5<\`)ƃLP(7h d>-+914,N' uΘ9gKdFJt<+S1AQ58|td#ȳ!#p^ TEReNU+_xd&_;?S #yEdXK"o()תgS@xM9P6J>!+c=> # "sTkiNZ+Th&,=P\ 96}>@Ћ'A7=vQ В2˓$βo֞cNrV? gLjo1ڻXl;a6tFgq>TKp%c]"7]uYf HEqNk<,q'q[E+X DA;#h`isam =ΔEb W 8Lψ_aDw-DSwas _54 Ϻ<R; 4@c_i-sIk:6iBch`*< ̮ !0_qxOڑ@Ի_J/HO_Mg뗒iGsq>_,f˹֤,i:;ڠL4&R&>]Z J–J^H B_"v(~-?siPc.i0$E1*$Q`E-6YIğ{-$wf^m;&O2!ZˈmJ_FԷ=Vn;8NFYd ETZH, N8+rb T.!}{({[nu4w_`Naýeo ) qMsdaCΙYE&"ʪ^hl߫D#&@ar[Mݛu#{wV{(9,vi THV}9'n$×d#i0CdN=\^dȺ*;_$3w[aX 4brHLJYMY=wWBhP Ey8/ѿHf3 ?İpbQdC6CM[;QTcI" A@q*8dI*FDBx:q^ 3e91T"+Z^NNHUdJg@'[@t;mz;F5bB17HN6[Z~Tоߥ (E^&hn) 0*QKVh+Ff/m.u)&Qhw/rd/Y!)C優%9s?t|v 9ak)$!B(AJ mV5wyϪ)H Z"2k {$\F76SQJ,a  2MH YOE~fu(nxB:#( RhA!-U'&weL^lɠJ9!=$ QZNp&4csD؁ [dyED؇C}Z0WxT֯KIЙFrm(."4o$'*h1v W括xsn0܍(w?d𿉵hjGԋȾ 7dps-gӛ@?Qϊ9DUlE7=8k 1u)|&un8D2ImBVh(H-ڲ:?ڣu>IGJb} ׶0jSh&ew[qvϪRW>#!7B%.DHcir8 2Y?sP=&RQcIș<,í8uIKRX|lɘ4>ׁp""q28*ź9)&SDx4XQ-=i +Pc"FA22`-A[<Ɯ2kϳRy,W}H//Hˈ]u&[k 57¿(奆J ͗R;\Zf'_-ŪOwuypqx76,V^ݣt܆LMqGjd!g!CfZ:GqY=^alY‰gcBsUhfk睈 W.(ĬMoepO"gҴ"Iۉ4ӾO J?+D IMCdzؽo vòU{aڱF]Ķ8GQrXǝ ~')đ}y giy ! ?+м_ (ͬ > 7arߎئ-@ܨam[#hR"lL/90y2M1"ht驲;vjYG̪ؤR`=KNtwoy#_!"&X}6O!NN+I\7k(DT"f$) \`Ձ,WeAvz7H9]ycHۆ'eq 'UvjX'e0Z+|{ *sj U_n.:|>KR7Di,"5zpu{;]G|U17Zkv{pv?q)ղ~6颭1aD9 v4tnE[.581э~x9Y?-s|96W)}7_^gnUdQd6S9*zᄐ+ VsBdK9bbA9t F ^x3WK ļmErsW=ݚYomq-1&Y8D4e.ȋ@`-8ϔu-R>PsDO{lmk+]K=| ꧕`CB;DDֱc%KY˝|fɻpANٲ+<}pUJ rBj<ՒRLB/C옊=NUo@;`< p/A?*~ G`Չxzyͮ[Dd-Q:6 adZj"˻K1qI#j D(&¬t}jD%=Hv'DUI$7+ηțar=bb><:!2l/A/x#ye]JiTrIȋ9NV]|lxyH-+QGIeZE2 B#"&ny֚R9'"GH"r`_i(ZB]A%4Vv#D}6 'Y+XW6aXTh}1Zg9%LnHC-d '?ʾ%uV\3HǘHF"(1B.3s%R#ʨo<Z*&ۛ-.Gœyv~":j{ Xڠ8-C1PK4\;?*JmX9bi1 zoʑGc /rG11wd4t8mXQ<16uDd_sεu2Uy9Zo3Oǝ8$pMϱtJL&e iR#(a Ðcq|k" ƙ44Sz٫"/#Gc1[Z6M=:ʜ/)f#-m߿3IC;GplA}K,3{[Wpkِ@dxzHxjrb\l#jQN 0CLu'V]ِWMNivAP^O N|YN`_G^f%BX~Ѧxb^bZ"qn,pVtD>EDkЙaC*yD:xgNKYXqSK>*{ -q{lnD[Sٓ:*]lfq"߽({4Iuon,0]iR &X('#OK!82׷:~!Gnovy:9| [ pA kG"NB*p *u AKHEe< ` '1S"l' WOO%&Z$dڻ%Pu0'}̊z,qlw49|.ܵ(QkGe1CzpNA= :>죾,9yUfݿR#8ݴ"_y"e lgCge8_Ot7,3% lE:6y''<(N`{ew+ 2¾QM'--"2$o=a6F3ه24L"(I1F>nd3v砧m$ 2;Gj?oַ/\ϠW "tzlgӯl)D-s{:WoH$NW?_/RQ7V֣@]A9,( z@YIp׆C!R"HzEF6f@TKT P|5YJ|-8ăM6A s^y9yQc:NT kU GY6zЃpS--ET`=:b!5:ompI ̸i$Z,fQRdR$B&* -DF_Sr"9Y@+`c~zk~7[pf/-ҺabI~WAFN\D_D l;?2E16TD $+Ɩ|09y}9Isd^j5>E^_T8b[$_|ɨVDJג21dK"LNdܱz,D /鹿Zu(o:?Pvy ~,zh 0Ku}Y-8wd HZ+>b14l ໋?nT@H8NOՎFPΓWNݎ+[_N^B6׉)ҥ\7 X'#I}P0/:ő6K6a3ov}z]u/T69>U>`92KKp)h2/'y>G_>gv pBD|`)`Vf99s>_(zWؐ3{Pqa$wAdڕn+¯C;_eH!PGISL:!%En>Lo)dZfFYl^kgtZQ3^IIؽ%ɋD1&W7MVw)4)HJ znm>}G)_NqE[qpil{K)؍>'3v\WdTe>2luNڦ~a?iDVLNn6M}"ϰ}Dÿͻkp_-%= $6"IDԖ!3nHdSؙxD85+EHW>\b}8O،nbfǫ_rNOZz9H^$~-kd܍s8Y-=h }:'Ih\Nxb^YfhbyI]3됑Җ"; dzmYs$?y3\F${7qsL)>tE؏e'@x'\^ {CWβ.Δ;7yWBD..xשZIĕcÉ}u'9+ ]\pQ{+~!)׈Y(Drөs0% Ok d|7y8:'J-}Ф&x#K_/O HMw7G6)V] ZZ;Do[ZRZd7Y Hb_24n0YhޖHzJtW<~3a"`;)ؼ 3H !vhRymM;sHb'["lm(hzMrJ}؟Y;HU@qyж*5` )r>A([%9.9+գ`YƅQsYK} @dq |^1\aSkRrkԫC">*,n )&Q}n/oQ$G)J1vHXHY SP87o$4LuAVֺrJ9fsQ1zw9!zVν ]QZFgz'9=kglєM|w̖v#zVPx?T}^b߹8~xz`=@C!xEnNنGΞ%UP4δ4L"0rb9x բ3_j߇öSEz Lo h)EqY Iג0,)Y9FPZ+_aS7 %Ģȅߓcuj V;S9DZ.!`O)x7J!/qc AF<>EHڕ] otAƅxV.N$ "Ll$6پDdJr:?~ q&H7u8$;ù廊Bi\jUSI_$bD)6"n*m-ɧVOQqx>70: r;X/ܹJjo3v'8?Ph+tydc;Ux;"ṱrfX:EFEt7+Qy W03=a7fȃL"]ߞiL2=O]PM_!K^nKϾms 6~hStZequy:g_ǽQՏ#xnt@$Ѭc^Nrz &{Kzuz l2=;v d挨U`&*U8ӡDp,a` RgsyլQY&t狆mV1(t7մHAah~$|I"ˠ% S((,'Ohi"L$7u JYH B)\vl=jck|+<9$sϗm;K`H q!f][>~WAm]h9"STv_YaIGDңHfjZlJ Alk+<}p']eNAm1_^/yCIs|f%k]-&Wuɘ*HƎ~Q6NQ>9fBtƌ櫍;~GQd"{y9ڡOpFwXsHvܟ6؟"@GqFZ~XKHBŇkC4;{6U& 07z #tK$+='[q4!&\' Y\dcNpCZ5?؃# Z@ bz?F}؜ Eqpԏ<"3"`X xcRK4 3J; %3 {H7HF ț@湒y*_-D9Rs +_#/ $J * lhRסjHV@s7'YND!,by'q~ Y,qVv.J\1"eʟ`z9(џ*~"ml&MJ@jhf*KSujñaWÝ*HI@y3h X6`L/b:BCd"mym϶L^"("orBfPeWfG^$[FG(+b Ҧq Gbb|Abgl| # lod#jy'[gRKs$/zHj݋ȒHXI KظGkXy颈ȣ5䳼K过%`뚄$Vޯ*]':묹cj'U@^4Y\"t@2&[")0Pl,A"cM "owɘC !Ӯ?<#ٵ\"`@ܙI˂*V ^!M"WD!#/o+  ~WdIˍ2|gH5^) O|'2wk,+Cg۷>0?͞!jFd/ i8g|Iʯ/lsL[$,'wp<ؖZ(sZDNe_nؔˠw֞ƥdoA2nH=Fr|*!fMύ9A1}7_w#'^('(l{%6Y3\{E4'97E㤖k={D&C%D {(9=O⠝'9 L9gvz2NUwQDӨ,}p:+tJq֊%&oaz)t79yz~Ýsl>Ȍ#Irw 5-8kҗ7%)9+ȟdmDts呐?:Ep#^D/9z}hzX#摥)X_1JC 58˫@9mYy@c!zgF27px,bd̓8ֳ>lglt%KUy2f! s#XZ*Q- iX&U l)d<ɶȲ15戫ǠLSjYZHdݼX/닮(gRx# VaoaJ<&vZyR?-]xu5MZF&ym돣7:&*y~z舨 ̏mGGmGD8!*:#' 2䈸xD}xnDȂ,0"*h'6"F".+('ugY31CjXD%9"lWvDwo1gȐ=Ջ^tęLĉ[Y~֬xB"u}kD86k 2 w2vD6m`/^]̺;QvH8" :n+_wfy]Me<@E'_":fn:"bC6D{E6l5lሊV':)rY,IHrHoWO:az:F,CpɆY^A=0B>1x1yDĘI+Ozqʿ҉_^kʳ:$Vdi]k2r%㐁<Lèb00`\7 +}I9UmaM1ܺFcᶐ繍0nm9?f|J2 7?p|e 4nn̻3n b #cᶉW3_b>hb0z[ dm%=0z[ Q͸a7hjbUf}:ncSn o5wo;FQQ8bf<K6J[g(f56"Zu.a40 m-9a܅a俟`יO2bl|-lTnw=`?̾K02_6e:r˪a1P\c%s5Ckf}s̔>c̲PNe\3.Wj+-Ā0'Yu,|=ð7b <0ArBCèn5{0.lO#5M\5|@]R08χO[2x]n㮁sOYj,Occ.~f}1z/N5>~`njdS?pp)j\0q,g&_84&?杆Q8kc 76Jކ96ڔq@Gf{Xf/s_7'X/PLz0^d_Kr,:>8a6vl$j/Ǿ+, dfJg pl`a2V8gp(eͬbnLOƏg2^.gkb])=v^h4"<]ˊ(KI0bVӍ)ȗdKn(nzn<!v3x u(ri9!3PBយk?͵ K 8CUVv@|1OD%Jf-(Ήe/ƛ5![c\V(l k 7m #4gu( wX bz vZ V8iZ?ёLl˰S.\'5xR<)) QQ-IjK'ɔo < vD–.>Ìd|0w9|)Osp6;Q^BY:.*im@8ggc-s)z &=@v0ɖJϔ}Z2P$\G o;*LV> )8/cٖ`epXgWk>f{%X*:kyWae$ !؄R t\1DΏx@ d}~}.S_^ΖGDU4wƱYT YĴʋصypgZҒܵr>pato8v>rUg=^J+wMݼ3JeًIؕFUD6EAhi\+I;FXBٽ4:Lסpvf啵+ĪٛjgMZ4ƸN^.a'pe͛l07`nrH uG%ܟ7+6QMg81KRi>(o[li9fLd<>rJߍצZgU.dkV#l~'fǙ2ˊU,n:geD'43uO,O=k,Ogc;ye n[{eS~!uí?fd-_ZhÍDƙ1;v~?06} +\\3=jz]5íaUFK]ޝƴM2JK,oazi=Q; 7b(Z-4(fH 7{ZlQn'M2Um\TG=^6;1%<{nA2*m3=iYoI ־ n؟nYeeK޴/WeHc%;e Oc0ş{$2WfEzP0?9%1~Pg2<7^ fz0Sl,452@pA52Y^̘e#m#YLotWkjmˋ$<[{3ac=ߔYIӣBJN,Uf^oy{Cuu1bzz=Ey'u-%_MP/vQFeK^#qOjhH5>10ySKĺ.f{M Je".u#yHjx,>n߄;ۘqoj8U ~Wț'ׇOË<16h:թ'R9WJʆ"R^OUnV~g}H9W'ȅ@gI#4Ȳ gWۨQ,78?f0hB6Һjl偠ԾK·/B,DZI+4۹G%zKffy"c[qQ/rY>,n̐ ]KNXQ#83P=|d|]Kj`iuF+T-ROK;m(Ю:y!Y~hk'~Cֆb@cSr8~H=@=sPpu ͝wMN`;<}QwE.6?RGO ;y5҉5Ͼ<;.I.TA^6_sX(9#mzrX׹XPWoo؂x>Sکxլ<')!Oa-~qq.#һΙyla _OF{sn|9iLO3z"EJz'draMp\:sήV᫽M!%+ +=zc!N𧈃 "D,M4pNpG4^-΃ubv\'s.KՃxJJ"IPKbΐhB%f"בFH䎜ahOe$)Z#HYE eXVdiX |K筹}3 ,ߕF$ԎUu| 7ofh]YD#l^K@ f-1iqŦݟǻraV& >0{ P/g}_$0\ܒvhݜ."}-]KDo2,+|]nWHN}#{p8~ \TFܹ\E}Z <ɻtBQk]I6O\=Ad_9 tH<)y\?NZHܗz5-ji"ߏW[#8'@\ MMcCe8ub,ZrAԛ&ӻH> 4?Y<6C8ehi5+R"ZkXs-=1s)SoIENO{in(m-5_^v=9=:8-ݳ%OD~u?K,/H.5JV2N .k< ,Yigp&qa$C9Jl-VaFgB}fm|z׃9{E1gqrkL"}g iS~7.t@ s8O!`;+.H 1f;=ϬݓcFm" &1N9?Cr=ⶸb`0.-:6\8@2XۂM/[;ȶ ͱ}3n6\#xۑ .#@ʃM` cZ4d SMRuKrDVl/[$%sV(FM^hŭ jPx8I>ӻe"dy3":% s=? (8&ES6d]x dkY(2meG_t{c!K$uToofyN;Y'ebm#8+,E'7Ubr^pE_DӼL&~V,HU <\!yoz# WuTȭR'bl|ELʀX)bDR&2xƃ,p<:N!Y*{ br1 c"-2rMQji\:[|W⛤6yV ՚ o- :Kk gQV y%| ?q\拓T`܅&.\Njt>[>Ir>Ejt gycn^yVk>2aWIrԮfɎ]0*I)@Gwy;?>Ej,PΊdQVR>xf,9?iS=eȃ*8R:u%a#C7QsJzhSE /D[jL?*+Yn95?N4GN[-5AZƹ}c<~3f'qQx]-Z#q6 țTAҜK$>HБ7J4ׯ1Oh>f!.#Q:&Q3'&0MXYй$ㄭehd ܽ[d+ɠDtuYd+՜loADdtB6ԟm>,>[,#!j>w=쇪=(d & r+eM&Y߲_Vq`3Y::QkڋQ($mIQu fG{ZD+2GtfC<-5vmpyrû<+[U9<ّκ`- "g~13m~+WSso_I=݌H OE¶g}02w'sgUeO?^ϖ&d ,.1.EsJE)_Zʻ8c<|ьc #?&\'iP$xzD;`94Apf4܂uTH6XQ;NN&Xq^+$!*i9Qus&PZ-ie4 E"͉|E(V&7-o2oQj&  X״5k9QDRw:o8ŷF Z/Ni*Az&!ƴ CQ}>_*Z検VPuѽZBqs0䃷߁v(Um[6f\CCЮJK$w|R}#H-1564'vix| ݋zxU(HiݘG=RL>ElMN΂gۈó<B"t@ ~]/a&xPymc2'#K}ۭBܛA!V_@>앆o;g$1БtN.JlMR=Y ^GˌXm~~R<$T4LOmEB.mA%U@3rDmd7,*RJ^f56 f|^k]gn3*< G y"uŦ #M4G1* RL2+&_,HmB#'a_-YOlhSoIMᓊGIֲ;O6?y.M"͔ 5u >L! {NqAϏeyكKy|rFW_M@[2q1"EQUS-v*/ٯe̿+u>![ Ezԁ??|Ec؉h.t#*s3'ψ"u^( #gAYP8/'w qƲA8sZh[ wpzp~ˋ䚔Inǭuz4^`MٟoH2E^&t=!j ~7&qm>/[W""&(_WJCD M,785 ~cнI*@ʓ|z']{C4 Yb#QEdRH9iVqxl2eKvp f ;,,"$m嵎#불&H8<y ؛/^C#dV-?YgcQņ^@D+NBns,_"bS؝׬$_HC2?i^{RB'ޓkJP-l ,enΊӜ/N+<6k 'dgG˙P ǒآ]V9 !\8|fhd[Wkn 6fq eZD;-fNОG^c ֆuUޡA&D&hd c+"f%[^ lPI7]'94K?Ff>S!ptbxtӴ@4!62Xdc&7k;,UpjKr/!zZ8p;-r?_z6)]Z7G?ڍ ࿮:XMl y $G*+i 6vp%;t&bMK46PKJ Ni(Ü0dDp{_\@*Gq !O2䝒Pq:[t뵎Kms m2P0!q &y(EUәhMϘW26u 9z :.і6F҆’WMHh Q䈜ppJp@ãzt0s~j^bHƓ{u%Wʴ-ύD2ǰS;W$VV9,o\`.{+2ee m>l)t@kIj8E GP ^l lL)ޛב'^)[}K }Z2N8ձ 9Qnt L[&ķaETWr+} VTKCKo"$-U$![)+ Tv6Rèl5SQn,[}12vEZ∹SF8ۮeCP3,}M;#~/u\v N$>$SK)0];%v#*R,VK$rٻix=t~ց_7]7ZU3Y=<몐w4grSyH:g:I-rK&%SUUϤ4g EuW*oWSM\^ܴ/ӫӫoW?[kÄ5IF%4yGslUش֧ʎPݒ`IOP\GKI[JQ>LGqvX B7jXq3VTK8sL}aċFqYy:iȘ*Rq?;Cmi⭦;"ub9vyHƿ W/ߟl2w&^G>=oƶkG0̋^W{QC޳5yA%JF#'4G?!vFV5)"wL=bˈE6-hɣ"aZ J%ӑ++`EDPӫn"{ʂ&Y6g`ιi2!z'npŊ%P̎o8s&$ZH4'g̙V<-G9J:@+h5#ܯ06Y*v"[}y_deJ;1ioh:IՌ3C6ho:H%&o0t%Zn쮩oY^=xY dͶG4DNχdy$[d1b@([~- [+f]a۔(5[,4+- [O~@aw2\7X% Z6E{.ĬSpCID|Qkn|0rnx$vl {@*"?BߊHL/ʋPPGvN(EB 9~:14 KSZ5a1 knTN)Hzt-ҩ#"'ZV `uWqFcxdgũ_q*WwGQ{.Kg)jiOQd2$qW ~g>FU b66,N&Xy ÷?V`rDLŶi!퀜y/RV]Dz~þ7+G9s6GB3/̣m8g&>p4G6k?yq# ~F$vˆ[,y!5Fa_AS '6C8EW\p|C=4kgy9f~b[Of0 <ݻKߏFI?fsذ{. ׌h;U޲_TߕLzW#gk_CAص5{AaII #kxJ˃h\c3b6K%BYı 6I8Yw F)NƜ>!1LM&p <.KWu-eh{9rlQTv$[w9 W8n$.]N.=*hyD$SԊy2wwF#!q3˟`UW%{{8C݋(D]QIy?rВ4_Cbߝ-HײkwDAdO5"'} n͇ի/HUSEDj bNغWwbd)$ItNc>󝅸G+%|G)KJ(^3-Z!o^m ŪE"K_N%`U>IdZ3 ,xl?}J;>nTŰ4iO0m#n@UD(]4:f3a}zߋլע$YO5aZs1tW@'FKQ&JDZͮMG:m2SĎd ) ׮w>J%2_"_KV]֫u:qWW0j$\gH̟̆hiPEJN@^O|E^IlvMfWtFɈ3X | ׌EGta[3j9bh0eE^---$#]^f@(Ow")_CGz{8.2An(F%1quRyI ':,Wˉ'k",Le܇uJ"Ϧ@YG\zףpm,ŕNJD4M%X#sIQ|sbv '9 AEqO㠢/Df6-ϡ`ueÓ-Iȡ֓INH̗kƴ<ӎ\_$|ҫdzdR+uN-'[nDdcZܬYbmgӥQ2 L#WxܛWWD!w?aN4ik4'7]^N|$o Gy|'g6Brd7H.K%L{4&Dx% ˉc+FĬˋ>W6;YAEйY|JǬv,]`kFqك)0D*HIU0>Ɋ‚6":IPgePm%D{ &w"EHl)$ܢ0<:DCcx!i'Y!s]7LpmD&AgU<=HTsĮ$ݓ$#BVw͂$8kKHeh_G]h`Z!Tw(-c0QQ8,sFmjIgְ[%-Ńɫّr_,¥o5yWMǛKm=^&U(ӿrzOzm_ei"ISzJO'cdkL'YP9$2CjZlK8|TvE7:f< ܢ662B4ex!(XE淫OnRFKj$&5X|֜#!ن[ȮtCԧ"nҪyh<\̾3F=̰"S$#~X0fPH-$ qpAA2ղk8$Ɍ2C2,/ *pNm=kQ.IK}f8eM?SoZҲ9p+4br"`^Lk4%V&-I\+hd;Hh W+~J"6g#q/uID/&?\;PcHX}fɕ;c zAج{q>1І}DQOb.eRU466orka*M*8TrmNWfV(Y&YW} Wx _0w%K̾Ҳ0fD)o$C/NlWxӟO"?$n*lqr,'ry9L㷓')(]@Ήc,M֜iLdS$Q6LL{jo&# *t-&$hub^o|_C-ι^կ#gY,P -@4r&UĿ('Y>9숪on0qfXLT*$?5ぅ,(3On7 R7|.&/Fx2eI~+ }FQ)D"@pg7qY<1cPFd f$ ٨?F@*apE}B$O)fH&kGׯMfi9:BD6NR$\ARڄHNn0xEh]__/GOQ1Wc$>a%;p7ɖP 9D`^ԨRϱV,n+yQNf!rL[6%kEMc9Dp,]/”i,2"oS4Æx8oOs8V(\%)vo-۳؇$MGH!QL}PjK"FOH LF;Z@\F 0'+/oۗL4RQ"Yf>ڠ9ve*cJ4_ݍsџ"OWZϯ[z=[$!^e SMZ.(MKC?aE^ 8/o)uRe.2C֗ 3}c:+|$qZ؜ s E\wy4 !`ݺ!/yYGMԜe6@\@+ove]3Q%=.$m=E[`7=ܖxiR9'0j=ս &JF]anA% \IZ9KN;O>T1pn!2N >y#$gkF&”zT`GvN0=/IT  $%lR䝓'U{x"IzX/?2N|R/>}.⤾WI-?jQɛ"r 3"wq$k߰&G_N"G B&yØ>=Siݣ^B>5 =Q!?+\cƃHi.g"P"=3WY"aZt';Zju@}HKE;ڏF}\M?tZmXxVX^OSͣ7~WӐup]|lHd-ϗ:)&$F%6PͣUBvizuV-4c>kHܻA>2%ycXr$X:7K ;P81lt- W}%\fs s6ҋH睟Ƿ{^{Dp])]~;d+X$Q$Krÿp58C%"YkQ1 ghǙZjz} ∦.~Sҫ֭D1 m^\hBEdIPF+-#B "䷖DE%N\oM(r'f&Dqv+?RI ԐgCIu[+RdD;ٿi${, ]֭c7v<8hEDޮMγh ~\%~&O,] ..=cަwơc {Q!~[s8/sL0ŕrKGG/wR(j=HX y %@@\svjSKOԃ13'`qw+G0ʘ#@!h$=/k`serη":8! PzHY ׆ϸ%T%6~9D~3Y^VE :m#&+<5YcᯯaQHlbs/w1|DKG@dC'4MIs{YrfxL$,$F%!X.skM4I"8>/QmV"Z"q$_"$ xSZHn,c`#A#H~[\$yKaɛ `;>U`C=Z:ORODcI'M(v/GH]}L;MЧP&""&.`[d!9R aHO|T8ߣ(~יwi7EB*>BeXDD{OcHm2%"mpfi1&LxS6y)HL&!ya.EUˏȵ"Wě#Fz7ld1ݔ##9DXɝ5FL'h|3$Mqx8*Pڹr҈J{DKR"pٿ'Eu4\D !ci@ Dy<47>bK%B+T -[1: NF[Zbs,#I+6ڞfG \E s5yzpgګm>Kql&aFݗճM4gy!-$ g@ypL[9=bz9\F|yo1^-`}=k*Kx1!y8cZ\ @+Bys95ɫ$Y\YʬEq!O>A83%/oWXxpI'|2gj]r=FȻɛssޯq y,{/#`*+2$kv'DЖwEvC\'dgdCOqˑw)JeӲ# h2o37\$r*VZ-;JP-lĶmѬfi c@r .=ˎC88yv@K.5@_D# Z6"N;t}%Y9."r EkY@Bfg)3+v -'[dTb- W ymJTFƐj&r\y?W{:ËE\q=ǻ-?Y-ɑ_Vp;eЖ ̾T_$P5 DF.׬L9̓MB{2q #D^?dmH3}]8񈼋k+493,FF2fcnLO-?һNgKE  ;"cnyCEX^I)IDAT&kpFW@Fv&E׷sR}ir?o::%VivxД^̹0[p/|Ohq6'1Sq*yPoW2$+Ѐڑh$N+!x(gJv\d.NڥPЉRBlD*g^e|=Wa2ż9#L~WJ`)'vAlYͰQd9,7m3ښFk3Fw-# /ij>NH%`"UQ|(ɫ#ֲAC, +8^MTh%$R꛻ |2Q%DVVR+l}e}i@KeƱQMփ}0צ~k4x"; PDdq=C]"YD1-JPvYJ&mB`40ʓ^?^%K"z*֩Q/&Jrŏ+(fD1LXܣgBCޠRJ# .,&sNUHO|6]RpJa^/d/)rm+Kg9*6΢ĒDs|V-˫IᲦd)l8 ?f^"fZk Ƅcoڶ]W!0YŲ$|5O69s{mL2l(BD۬tI\&@. $:NJ.mn:0Dh٦!l3  F9Q@"Y|@͜$Dí{F"]$dd +#^o?K@&'  o_lFKه$*ǏQHZgΓ\*y*aUGa.Wʻky88;]Q%YW{ɶ-?L϶HEeŒ dcx#ܚB-``uc)l<97Y Gjqt}ܐ &.ˆV^н}M&)Gg|?&ɛzQ-Aq^,ztM{bydPq)Q&هnr}ⴜ̮i0\MRXcA](4d=)Ce*ltP.leve+ϢN|~弎|*b&I w9$c#T Եrpͯ\=}&e۴qD؆Q6KK7!ED"XgNM~~9ayX##;Ώ̧WUzVIų6I$.5"`D+# s2pon'ɴ/:Ia)V7o[xVTsџy*I\y VN*)O!'auY!Oˤ^/ing,_ԩ-]2Hԋm<|n(ml[:OqC1R8ђgEm*ʮj] y44Df(bo]d3 g7+$|ǠN*:iyg4C2@|@=N6( Սqiy%|\vh>qɉﰱߦ{h P:f'3HtOEa8@a#祜9,{NϷ9=YlZpr= q1&oyTEg,6:vXN Uږg^N^. ,cqшQ=L0'π >D|M,m!ޡ9n;:ohu(FK]aqe"v`i]N2T<% >qٚ"NM}62sGsdǗ00å}lnx_&¿{킷A{q~Ϗ:oThmgH<ˁ{=8wFЭht3-(Lo-܇PHZ7:"2(BꙓբL{^B޼H<.!) yoT3s2;j1|M37!hEn8-?"8IԔS"\v(3rI5&"NYb/ +$\Arbh~,6.6Fz8(['zF(>#!(E/rّ x#"O\>*>殾򔓂/U@?}yTELCԊ 7?sI2jlҍd&.-ToY<]±DҴ! K67,ukѬ#O2# 7nRè|!wUl7W`IM.#jm~d9`1v6&"74PZ~^ }EJkOΎ2n04į΍@" LV, ˍ+f yrDw!AYm|P)ED1*Lٵur!L&* q圾x kqr G@}6r&hkq.3/'jku0qnE$p&)v?pb %>ƣH8ZϞ9p]ɷ`n~pG I䊾u"jH]DMażDBć2 ]AItCU+ ?ǿf wDբ:F5 \#Аx DбyΦ_.wFdV"NzND"y9yET$o\yصّ{f7'|ED*ﭺ0{c~OӼgYlγ]GLN2=D]7soVYrAWd}H>d5jltC"ECX3&ʯY:6iViE:3Ye. dyyqV uQz{r~z9+\C?kLnZ)p:j䮮1/mlj ~=7-lw/\:ؔd7눭m^w<"sFT;lZ!$'bYM8{m\ ;XQ9yoO&尼څ5vّ˿$M"(79`"+; dŨxdE" ײv9J Sqf8AY9u=â>pkdDDXmߖ4 na bn1FūĮ/݊<7 g̟wep&"1I-'`Zefk"@i!ٴGT$MTG+2B)[Dˇj2/SO)ޅ$go6+Y'ɋ$Y%aJ*V(맵T̹cPWDL|? 穣+ݍB&A JuVB̒l1zw2P4^c՛} Iʡpk&fЅZ̝a$NydlI`^L)^=BAWO!Ey/'mߝ@$ 0>)"N όGV`V*2Ɇ/osdF"2L6[ jnʇw[H࿝[E"X29yGBs)NM NnȎ6EAHqIyNx'[Ԗc]RU}u΂ʐKˬoal*?7#զ r#^ GpcODΏ|[YFNԙV? Va=' V{ K5yΑMEZețiƸQWœS\iFq[Ϊ-OkB (;kL?'VʯQD4NE><:a|,G\i[^w^ߜ~T)Rz^ZWG?0T@iF A ?cyo~Y?nIuQ K0p'9~wyf[2#1-ͼ-y5i0e`ax\0 LgCaֳ3bmXmɫqa>wW9_w>jp5Ё6 Cpg 73gJCFOceTh77g\fӐMNdy=ǫBsMA0?W.P JR@\^GyPyU&uK+'BQE?|kp_Nţ܇,o5r9~W[,9U*eEχs"l]&l0;ɵ;&πze< _ C e`;^܊{ˆeJ#"3sH~,ϗ}ЙeRxJH=rC V}lULTȚ}Uٝp_ 2V( E-73-ގkխ݀ 'Hoӓ!OB T9+6s2z+VbLkz GFn30fV݁jJ>gwpoodU1rx0uM(B.?BhK4(G&S~OS!F*Gp(a?W}k52IH|//d6mx]kOy"ۉ~Pf`Fj}|-d^𣉗:rwgzAwuB!a:]`qșv-OB>1pc%;:!ȏ0efoy5XZؾFRuEPb/9_'_@\L 5Èaȟ'ML.)s#Ҕ;wC6vH˺3utN >~xPϖQ;2YMwޮ{{R?*yXڲhu9E+RF㄁| WеFmcnD`k/Wu_l#b 7?F3#n\zdٟɚj%SgW}L/W|ߖdOCFKdNat\Qk=KMOzߞvtO_tzz Giwd=gtzsSmF |Y!]x=r1(k7.5i0=[O20׮KFqfb˼զ'6-jꧼ2)yJ鯞7"gI^ X(҉E[țR˷,[YGaz@0B gYa_66>oPL15ǒSL}mf (<䓉{x<)³uwhQx9[rtS{O+sᮨm35\#<- /$v"=-rDf5O|לKJdžܑ ck>L@w5S|Xkیgx6y"ź:` '{pO="7`(1X^A=W鹔("[O,luÞAp|~ Q䍞[` tGgoæs5WdXw5bӔU9NhKz'?^6D_®Vx-biڂ`7Yo!q 7ĆS+eGA9;HRr(Zay?LU9;-Igv.iS7gJx9.) `dobe=C̺|u]3+*pbO;yD &K=̽ӛ^=[]Om$&}8wYGsO4}<Ȉ֕&Yc]b_1$3eEvE )m71N2=ՉuX)BwZ2e_mS RUyTר1?*Oǒ޻Bҟds|ҡdO~^2nȣ%ɓa'MkPT2ʕKZlx dKICP,d z&{C1ӫ}^A6;pca boh֚Vjnfĩ @\DT?sd'Sw" ?Juכd+C)P2 Sjc Gb-"ZN=%cJڿh_\$yb0d\mUVN9uHBCJa~"G=!.ϤeQzLkZ%xlmT|z|P H%uJ/F vե%l'4&i*d6b nKĐrrmF ⃁(3#CfZNE.\Whh}"9YC>diX?VX,#)v̝6bz! EZ9iE~ddo ~z¦8|hP G +-rV;w%ݕdBLl Ea'[K.8e0fQPW'.RJWȌh"|,ə"7/?E֞W(Y`}Eɗ(<~޾ /`"+ p`51k)MVb'Qhoq,axdA2.`9]짞]E6Y?Ҭ',l9 _^ DY/$i (p?K1| 29*c9شjA&<4jOIYnSݦrܮNJ)D0uת[1$r8y&Rw!q{'̚uajEp#S~Pķ:,+J#9q^]솙=^G0xiO>N jEdTq#ۋwWA߳Jؔ+2qɭjѦ=Z舻XݫT|Z:'tZo<~VrJ]Xo9nvp^>f{ʟ EYڱeި#1_]mfev{V(Y%'u&zʘlΒ^٩]eZ_a3且SPM#n2),Y%63Si%S-iVyy:%x~gJi :amx]>@~{L- O/3B&\+^^ 1-ojȣ@G.UK@mHڔQZ+_E3g&ukmUcAO"ء,J<ZIZEÑdWk:3,+rm\ nHj%*~F+{y@C nS<["\ `Jtmػ"|JDH__;oi>%٠q\4ҧǙ%ѰXکo̘; Æ8ꜝҜEX1qp#+093Xګ8e%9|וU~1틟0=NYP(C!8%j+^' h#ن]W4>Iu*[f;vO`zVy^3 $Yd}+n:kPa(XbMv* 'I`c |$)[]T`=(ACUN1yIŎ,ǒBuI"|!-YZ99yGQ&{[LWn%I䩭b𭱓e\1z?ů^ f'iSvі:e,̆)Q^!x;"<pWl.)s#+&G'wÐb!56 ? Y~O$Nӈqu1-=;sh݉^H40ύ&Mj Y.Q-!qB,?F~M 8q+Rem+3?D $7 S]Qx zRHFr> RaδЪkVXByZ.,BF[O)Sh3 K؈0rb/=qlQ$$iH݇狸|r[{艨jq\tǙFQQ0n $f `DıE$i|`"q<= (̓8xK׶8ӉDk (]}/(G&nvAz vLp:-HR].2bYSlO;qm+D4yi @D-S~gC\Y;TAm,y>ZtUW;?80IK;2xC$xR3vDb-2^0 x Ref _"0UNd/9'j&G\I"PG<f0o. %{=r!b@'c.2TcH⭯$x~~v !)~9W߲ڹi֦xd,<|GXNcF( o1yιBҞBg{bRh)'5P)''uv","oeHȧR8Œ:'zPOF|xdS\Brm2$#M;8r`JʼnY q &7׮ #sЄ.!i鑡y8L5S^Fu%G]غ:m,(MـӇiUZۡ\t>IϪ}~{ЂKD$EgͩB(I65chsr7bC+%BFV,- bW1x'X,>KR$ܹp )j4i d%»9 WVnOFѨ֌F9("XQO 4 Yid AtJk`g !)Uw _ST> gylJ?V m#$]=w LYAȫj ,99smTږd-*nʑQ%%>;PQX$\?Fx|oʕ&.4g©&3O#KȣʵHcH(oOs308en[MOf'PnȄRL~Cd{=1Lo 5°ur qʞs<s\/] BaE`V,$s~!UU)pDuVMڷ5|aTf|j_Wnr|&@{cg uv Eiz{E Ў[һim?Be"ϯ[""|}aWʖ'X ½%.7zn`s~.`Sl? -o# jzΞ_BY &sZvv'qbWp8=rYY" 9O@ioQ,$Wfe0-܇DӾ$K$~ա]L˖"#;'Tihihen[$JdgNGRljaT&MhW,gdK9"ީ&4iy۟rB'qoKBnR7 (9_1\$􁓕? gv 務qKmR7+CET,Ir8B&+[-N`.ehS#;"b$>l0X(TB%/uJ&reH TҀT^F5{7G*l"!6@c[8852V?XIDůUYP2OΉo/#4,_:Pz !W(d𼀄pZ\MH~D'U?6Z$_*~1ũNp+C'YajxdXuƻAQgxݥ}<8; w뜰}8W Iq|(?8 ѬHak驼_cê?iݹ^X.OvLcO~{ZmGdJRC"+OՊyǍ,o>*)RV(f/l<$G˾mox>eoRH#c<=ph$OYlWw?Krn0*@!i*t*d$Y+( {cL& jH/ICkQ3Xp'uAn*BAnp|~ D8l+yu/N~38nFP_P~M@1dX dDUDs%o;s$(:R_ Oqy[:b|9dIz3Ǿu>D x"1=]%T*s2=3qmI1V{ӲhQB2wo=GO.Mo4HίT\&a(VE[um$~W]BsS7GN۩yA|y vkj\Ōɍ1޵`hrW*7bC3_QZcVON!7 |v]&BY-EYcVV$7lڭu<@Pu< 0`/ ]y(]M:MK!з~ǟ^g֣#>^a$?1kxek1g]4ڌT^(@%s%3'ћ (=gieT85P3WsBN(,-jh֪^O) )<0Y$at\_ GcA..WY'Ql  WW/{Hvǻb>JUhIM%oB=Cn chx#7iT< \;˙:r,==V! :<_Y<_!=MNH|O?R 8;zs?f6evf)O%e yba}K蒷*dEBWfq[190V[WXsU0@mٜu.Fx(0U="#sdhwɒ&;POy"_bkfl|G p3+r؉:͇wj+P a|}y5^f|("mf(rWvv^v} AelNϺI'=O`r|^^Bpw{.ӸdHfǸ.Vb!VgY2yhW%qcEfph4Gx2l;q+"NYUR( {X"X)g)t/+ޠP%SrvO@9 9ϛڼ'\b]$) iPuFQM[QQ,7r~o2#DjYw齛ժ:ȼ,'E2%u ^ >{U\iL nk&6kyC%;5'c|(lpGVS˸Ų䧝wIWJa'[ h@q$g$%Nz&YP1Z Zrɉ{*'ntO89B inf٢f&q*|Tj$}Vs5]k1/NmxiGV@u/OuG*Fɇޘ6(#V˼EA"mE P;#uD8D@.$[{Vb.~$M)H::T91AP, 9"ch[!yNPGBsgHFa Qyl(I&W2&Z[hᨧ(؞⩸{Z <93Ak(z.Iy 3RAHlՅe <:ӲA޳P&2.~ZV$M!]O۹af@(I)g3Q⧑s" < ͎  c =IV󚟝G["|*+g>Gƌ8/A 4FPovG ӣ/hi\My?C;9#+LYgĵYP3M:DN # =S_$cm2-;ԅفUoژ!cKJ>vWx%n[ڜS\ZU8@ٗIv  qHˁD]eOd$$}ٿD¨nF}BG?X" y3>!w]RrQ>r8yFt]dJ5+RH*|?/>ebYt6]e6Nd|>BHj^1?T1{< l pID$.Tbz]; V+pMs{3r"Kk2`sm./Rv4̩:Mw"M\NYz\PT,Höh;Q| ˶ EA\co r{IBJH1l#>^aZq+gdZT ir͜ ӖŅde\ QNE(Zspbn:$!c?~/. S>|1Bk{f#_+#8[k1x.5F3 MGR/XtcḒh"9Ʊieid/dWfF퓷IfYԅ垸q<#tgFӈz|"05@)χqss( .>w.rL h,%Ѐ)'Lm\y|ts~1›<^:6XPXF抡y|O 3sPdf vaad+ ș5K ?O$!Iap3.BV8 jGnɓ\ rd$ZIC/_9gűN$Iuou%ݏҡpx@ɚQT<<Ȗ~n+ fX!%U. 3Q룯ݕy}1 ǡd#.{?'b ll#Fh$/XdIoq\x2Pgvf&au6+=:p*Җ5 ʳqA'}Ey\.5|C Hz͵b,aFA]U 14*9l<\JiE\o/]ϭ]-'JuqfU>Ν&SHyY=PAڗvڷK)(-՞A㽫17ֳ8b͍u!jp~| 8cCbsS)~远Mwg{P#?{9=L~#~d$寑djzP[or\E0_1i͍̇ +8Δ%ϛt["_$Q"q̾f:GsP>}5M7(sTɼ2&fٺ-!r NqQ8'\P$JG 6Ȭkb05= 'Y۪bÆO?Z:! e) A'' tjoz(9pD H:,É7:FX Ud s4țLv kA Lü'-!פti^Á,eO$2z2ƕ[p;r$ѩ|p#H_ċ0&'5ȇ#9Ov hK#5":v0sfN0}A;{Gl0gƅVXQ]mo o%ۚF#p@a|NYVz(+ܹ$7xa׏vk' ԋ,@x\F0uVq8. wHG} UqShVlg$"ǷS(X4k`sh~~z`@C}D=T'?ǾERnV|촜o%gCtaX[ DhAѕJ_"PɓJ,$#1R~-%!1hxsVB2}L-7=^f;o"QRA^1!(=e rfD%0q[BBOHRҷo \q-ĜO^EQhz}6~ٚ畠%RZ:7a^zv{*k$9I_*¤$zY Ad:z*R!WHD4j<]׏g(t;WcĮr>c 6VN^aV 'PɎ&\sEOF4q5W(?FcXpmQw&ZI#ҦЀnd#Tj%k3LnmvU:U.vd% Bd[[u?Go"6 P>I\4$sǵ7TƭT".W\vt C"KV-W0cT8 Z3` Vd<#*?dz #J%/%'fP)~I6/ӬsDUM곮06+U(WK)J$. kT3G=̼ޙ6S|sN`GJAqV&OZL&/"&rKezRQilb5( Xp7WW(vi6⿍{E!9A1-~p9y@+|#R vR{7cďZ*So<+-ıePbWEdh PrHZ+?ԄgKMAA^=-&k(IV9akd̚t9N1zޔ_4os ?Ӎi$o<76p GH]MɈSHF˕ߥGеz<}/R0I1iuqp倄 AC(A=.3C^L3/+Θ1 N%D Vc|rX]]l #hxj򜱺oh8t S]VGy 9a8W|fepIݔS+7iX+0H)/k`!&)- [AՎ|v$#d+F; E]u-, 7SGهή?Ʈp@:xTً9Q,k0 # P.ȬOZHЖ%7I(qM+NRUTBT|NHs7ǒvLP5wj!$;N*^Z)q]9|4YVL)9#z?F %RZu=Es)hg=չk'lnէq\pAlиRO's%jsWc$zJ> 8'?2C|%5K=f/cHkzhg9 ^9O "EʴN!D*Ef44(%ā!P# >lZL i}2|:i-IviOyD eg~΀K89I,VFms)F;?h#H؜$ q; |} cc4J J2 wF3Y[2P(olrj`b;?ϫAaUDtp.mس`xElx"? %J?d} .vLX .ۛkF-o'Q,2mbOJH3Ȏz}Lo͆uaomv9ؐۿVeٮٮ#$ "C~AhfK4h3Mmf$g /!WF'r˴!VgrЈ#.߉e oR}6cg[VXBK?y9TEȭ]MX ifVU"0CzEY0++^2sp}~%p{3kay+_+(,M9@ƷΝsTQ&[?#[+Fl,ߧ>xi2uGҏB/DEX 44 p"sS5&jlB6:YO+!kdqQ nZnb,6>Gc>Mɡ3p~Ķʁ/yȡRFz5V#xg% /-3YiJx&AADas48;“O)]Fa?$&{'#PbZ'Z$Z$_zjJ"p.D.#q .]X1NS SGJ|?_@dh8u<,nj ğ%ђ7Ng2,bNuPXkބTo Wxb"Z >ʣRuwXQCvQ9\>!o8/!K2AAÛ^wodhFCzGh)L{Vi%Hٔp~C"iPaIzUFfqO /Z7֫.51uk;38ԭ 2e_I?K:U? 3!|+fHW'U,\2p`rԍ-f=)//$9ĚU- $ ;V? 8f!\m>@ᙉ Fm" '8_JQg]GwV%W8{Vj V !zn{.#c5uV}'Mi` Ec[h=uQk|izȂЗ|+XaBm1ew|8uiI" (ŤLIyWhQVd{E`+Ɨ&Xk p"{ DKѽL7Xq@'ВBN>D;V9^ cN\.vv$Z"\~ J旞]Ox\ׂ*głWJhxjNjYO=2498q 2Ὤ8޷6ĬUi;Z]+t0ckg`yD:;q "J44&)A2wNp&IQ"1'w{*Ү#.9KȺ! G;4 iȝ YOŒlD"""|_{! E*$_,OYL4,PxJ6m+~|{"04tDuZ%_{+i DB%KG{~#,Oik8s6ր0Q;/!|>IBPJ#0='.NFEޥ/,CyPƩLgZ܁m֏"wHEŚRfynQ ɀ0) /u5(3<8 s '*sG"pڻWqm;֔m_Rgzx@MQM22!_88sNP-!{j9ӈ^?+^ eeST}MqDzgdʣG[1mB Mb]Ib@B/v2EULx,E!\HD^*H]"3-_]!i 2 VJUy3!5j1ashι<(勤:@ϸya.N8"5X(vq۸ ׎W^ł<[)!eԔb_O>4J+.ݶ*SBTZMjLMOmc- nYe4h(͆!i]NsVV*3!ju>xdz P/s k'wY:x w86i+&{bM,?WuN EY!-& ~^Z "FjVNd2 `"1!5 [.Rh9ŀ4kߓ yI,ANʶE=I#/x n#_ B eEtRCh_\<=G!'}+ Q$Y?B>!NJ#BvD% V(.Sfn'Uk)jе8n,:{(/\^ALJSTGRyNmS6MRgH NO|<=*Y(̧PydE8#r%f.N7IPh.mz)l"UYdje)}:|}>71 m-K}BRf~&Y+A\u @^u|< RIF,w44⿉%rrᾒ3BL4Ʃр}\u [-r 4'cWxgH.$I7B'{M%Nb@{#bD4!CY gsdbrq"U.gU93Vr^, ir2XYP.2܆Hr4qMUN΋d|-D?B}dqb:P )QprbQXqx@-@aʿ/soF25 myH!#/^ V@Hv Q d7,ȉk?f*G9h#Q؏ƿ K%䱅q=j#þIDryک+u0'~FwPdyƇ1-S1l^N M>Z:0gR]ڍvzUdIG1sQ[GlYI$M}+=Ỵ2dе(esл<|krLO*;bkj\<Gav?G^4~x g#οCNzRWTl< R~'^aH_%^VKy4fBԐkq:wY&h) ]/shSo;hRTҰ j-. 9z2^g/NC~.'`yaƷ~z.ٚ 5?iDo*j0sRw9V78= mh rLubt {snƞp[J^63-:|F4dE@ٖq5Z|6ٱ% OI@}yyϩwdDLMmf2/ ig>5e}WjٷxOV/ ɍ <6P6{rm J8,QLOm`3?}Q^>,W|#D:kp>3"YCrnK  ;_as-VdEn6%gfj"DžڠP<(伪wשz? SVuz,rd;Y6af>ڛ:SX<$ٚUϥ^ZlS.Wy(C`͈Czl0V8Ǵr8nZX6/qCiz#rՃd$R q#!Ҧ!\;J3= ס8ZQ1x?+6lx"F_ #ˆ~l<-K+,YJlcas,SXkX#l`adc\22^(K\0J'| O~U5,ﰬch> Ϫ|]0rfxN3"7o&x8`x.Y4bYK'èh35.s?5[ |u3fl;s8Zq>,nyXl|l|kK0K>Y qyIsa43\׳YBYbwlgY>`0 ,۬:wa҆{ߘ`xk3z3 37aÓ}zfE~.]6ʲUW O)~k_%|#6.񜱔:e`a0vun}Txkm5  #C||K_(шz{yZ,GS7HOObn# 3 ϳdBe : J|c>9hc~-לcԑI(~XG8qeʲECcanfAI.SY^aa:ecQ8ȻN42`Yn1Д2ﱨ=:zQO螺uXŻ,Xl ,k;j-~F1*lA}Z{4 PќE<>~}8NqC!7r뚜O̺JWs'?+yh'T(b'痔"͝ˁgiSϖK%\%`4[r(\%(3A HҾIӝ,U^ %K)۴ ]js8-Fٗ`ᷭP8֮/s tIC偩J/ґ19<C)EvsDăJ8iEPVHc[בt+%8p /tfO['F ~cĶ #pGSɐ݄~0vq|$+@`<_K͕'m!e[d6n<5aDMw\9s&+tg`ucVZ%18D+T"|{㧵͉ą|1*=kghpgmA៚[1K{ ѽyBʁ[E~<*5 iWNO)q.p6I-kBpd@BY9)sNy, օu$9ػBXN"j#c867|@% roX?\\eZd]W6uB8f B.83@爸d4f7Wh)K"rKʕ!n;mʼfudFqBYx? lO1$ק t:7pe$bNu)4()!O^e8KīSH/bZn5asHDuL[N= Pȥs¦9$Z"rr>bKNEt8qq Ήgy^z8#w\P7ŖE$Z'X$Yu!'bG./EEJ[?PZ)e@DiYFтnoAxܢ18,uMT~gap(GqNt' `Q>"YgEHbƓ{&x?-5W՝^3gˆO8ygyeWy̜5k)"ωU#B|*l/X(q3|Dj8z_C=0zT =cK S8?&7 O,'13^}n/MnO!ϑ"AՀyM&kӘFB;Y$}Sڐ^IDz 7ZR7@A,bB$NuK3奄Vޒyt/,>%uPɅi"A#1Iy?[.A @z} {]aJy [g݉$ʧBCHĝc=8JM)cyD!%lP+6{U' ;n>*NdY u98Q%Lc{)Ak#CZ [h^tC۱o WoAQ88(am1JA {S {Si+ƢߜwFJMx99{,9T.'Cpjv.Geഡ /^)I26ˀb^s`۵g4"fh.㑽)Q78s ,x=jG( -'m"ᴃf].]i+ +/x< oM'Cɜ;"d0*(ĨEjPHIK=_] HuCOx&d- X51.` ^c qFaW=-SuWŌ{]߁ddi`0܊4=Ѻ[.u5aSnnπę$Zz@ƈ+G؁FҘK#o^-y x#h٘UlާՔGA=!ʯ[~8un8!11^*fב\Ob6ҊΚugLoH;e! ޕ Ab 6lIa(Zc ' ]Kxe["://zf*azV:2z$87׺> ֧Z. r yJWU(7j ťG!QĠ58&[M}hCTwkArZ Y!^@eKvq}O0HB{?/09sq./L"KmH2:+Ĭˍ[hhcVA#Q$sxB7yi|&# k`8"k ||88 =Zu}^K:yD/˶:#mX[kDw9"ZZ̖>YwϐKSCU7ٛ O'x0~s l=Wˆ?SKAmذa @#[6.&؟۟'n6/QކH&[I`n~ϟx2-x4OaÆ 6lx [ÿz{&w?f~ȃ< BW>zX^GBF׈'+pCZb^ tA@_нlYwy" XF>z}9k WNNAb1A(6+%/ !7ǓRK~=%*02zu~<2z=L";+f=1VO~^M?ֽrwƯyK1:GN0xy-3 :OJI߯P"?tˆ n#( +p'N)xRdgq!O;aMkPq"ZNm6BQ0G$OF(]_5KeǍeF_wnj_5W'~Ou'Dv߿,QX=>TaY޻nLm}^k9suq+P@ŵZ\kqo/kq-ŵkH;ŵZ\8Ҏkq-ŵ"-Z\kq-ŵH#Z\kq/H;ŵZ\8Ҏkq-ŵ"-Z\kq-ŵH#Z\kq/H;ŵ?ؤ-˿_:-ŵ?nqbGq-o8Ҏk`= ;68ů+h &Nkq-ŵGq-K3okqjq_'o &5|[%^aoïn`y%esϿo@`Կߵ8/{o$xrߌ'k*Oĵz8ҎkMml+m+ٶ^({O-[}J:|L3K~N_M8"ml/_t9iԷ*Vo'4j 9?mm{ k; uqϚhz-la_vuæ ;dsTՃq--pk`3ث%3"]ʻh]5*^/ jȚ_>|BSv;r] uΫ~pWԠUͶ]sh?٬/J6= /XK1~%>D#."KtK0) ״*xl[8x'eMJ\L_e~eWۯş?㫖;u6'[E^Ckq-ns&/9^&؀b,_zjsGdvg;.V攔Tx3_csvVőv\mN֤K4Z2rSYlx9cy{Q;x%go%?㟴; ^kqwZiǵل39WkS3c\,ougׄSˬ>H; (eޓ,E̕Tkcu͗KMZtr/_6'f:TMFtA`z\1v6MNj0?oBq-߷8ҎkM쪂nWku_v h?nd} Es'0k=_}|ef^ϛk]^zi;]o}?ߔ975j>us+P@q-ŵZs>d6ٴle;kq-2* oQ^Wz#B헲4ŵ׺<.`G/N9hREi,}Poڭs7vN18G'f8r6Мu1 VLfŖ#7X$7o{dG1[`yB]igͼ{ݴfxX%mVf}x͇c)*EX>/oYC톛e GYtf7x,˰sv\f!f Zq {8>]3 [nԈ<}s.cP͓[o:bO,.d nâi\׬lV ;6 bdy:G.Qk;gOnHklQ-%e_q˦tH`=i0N@w59sQc>Ư9?!/![<jNpiq;lLr|e&>٬*$ZDY-&ߪq.d̯1V忸[p| ]t=l'Q"-& `.r3GG9,]{|,k,k<`ObH/cv p(1C艥HsLoˇp\HkV㥶OoWWĘ8bAn8M=&՗q7ෟ`ÎLHnL(;{C9qem7J[/yd"u_,>h~wpiG`ؘ9#,{ =$<#߳=8711]@{5kc[c>ɇhG1a5و9p^KvS l91NqCa>07X{Y ʹyam - r&&8#~y D/CuO,}vc#8jAߒcsK/~Nǜں U w>b7NA9-H: Gj8Z] C"g,o oAy^Ăޖ+qm^n{"eOݘs͙r0,\{>A~M" : V{(Fk@c !\P1?Q ὡy ρCyvl{3Uj$15n)}C-UBz9D># zsǛg_"R(xn?EмJ5h[y&$-dSCI+ޱîZv4=qw'ؙا'~YU?dKs S-9 z:s<\ aO!(e/MTx"올mMʤH{:cnor'$z!(DŽb 6Z : ;.G3VcBC2krDSL͌-.!tB''rFlxk,wY!-!=_oBὼYEc&FXdBػXaȩ xlE~fܵYz,|f:Kq< `V"c^Z8 ݗO&~șr&%G$zphCpL5ZV2}&9Rn?1GݨhW[ )zٓ^F&A%}6mm.~GÖ"Y vtl('QY" &rѓh|jk4 NWr ۗ31©1C;׉ׅCz͘&vݍ?n'y#K] &&A57me&N"|d%Cd[1,aH@d\_1.ٰ#ƅ8 .^_eO5 ]LgR}Q&oz毟cxkEڮ/4[kU 9``CBg[x%A`V%ZkTaDP^LliεS3 y>o3ПmN.]V O' ,WR5fvc[>1P`2S"賐qK9!x[;/ȑهM]4D*%ʈlյ5Ayz/2d{E@;V|z-GÓN)C%f@g^̨&C`Mb){v?`}FBNC(܃*mcY֞ԭZSPt և Xk_eHU%vf]M4LqK}[Z3a5Ǘ8v4 ZUxBK` ;ܶ"{NEf| =]ۅoWf"S(GH"OBGHc |&dM~!ө7M)A/9en.i fTER+1=\Nk=b > Yl`QVbNztߺbB(t˃{78U炻2/q/+{WDfDU "c{c0 PS 9 l]"VESX?峹 Y4(XB2oV~jHp2<2&KC\!VD.yʟcUaEHC> ˖cSBJm}ZIήQZ̆g-+s}9Z?kۘY/jK!vIb#qpa;u1k#|`|Q8PXqT5R ,Vǐff=POxD9P){l,b S#SyL@ A *򂬭Nj;_F|7~X:5'[wfXzi6&.BWu/_7>,Cqy;%νrCAH.u+i N)%@v\:'@_@#dƠJdmǺ.p>t ;3Yv/+{r:]U{/pmzx& ^ o2Cz{hNHN@Vʢ65~HtsH Uak$`+ HCi5D#߳]+oϹnU=ـ%8gZcK_KW"eNՠ-&"9pA%ƿ#-^?&>7\Ī| Rk1ȍ+d@BD$ CJa e7x*zϮ|HJ?$n!V It2|_elDY[Y WٶJfUCL* Sl+CK,?d%b 2S ǒh$k*= CLID*.1Odu*%g蠈0I m<oOK-"1͜(VmʎJ0+F2I ]sͯ7~!DUՎT2}j_-XAX*`T2h}=oqȗ|F[V%\1Ny<R;UY!X[Y'(3d.BOY4ƅ[K+ƧRKG%k]n&0R?W|\OD耍:=!ג2F䍟7ؽ Sblݧ!]{sգ۵j._3E!ߢYr 8ٛkೖ,`2>8kȇ!UR3&.DvIl>!f̉bS7"y|N|Of?K-,-1U֒}tHD#N@DG(k)u{"^̘%t 7KZSYZ (UˏE"=B*p*ɹ[նj_OZw}N}}Xv lX{)줂UK 9]=~{kLD@e (ItB#V s|%,k-/nEL,~ihҶ|-A #χEte`*dܬ=:Wb \eؤhh Rf$Bq#f !@lZ|8Oz!gM`MZ'J/ QZW|IH#qB!s[xr n#W(ѐViֺ}S:eS$H\_"~ &qԇZՌfsRrEdPĩ4u82;ˑ_Iď}"[yos|,kPv_= 6aTxJ-hn%sA|:w{ 2m5JQvs905Էx據CY6K3 m2z ϋHbz.Y XL-~5{ƪdal %>Ĝ ?0ZyΥ .Q>7Q;ؿ<$6+O/V +_;c;\ӋiPez/5Zh3~v]egLa5i^D` Z;xE#-6Cbژܿ%% ^Z?|]XZ*&r=5*1ߞ=wGe{UTIмȏݶqR{Ѡ8 ޝ]0')w7d; 1ZSLwİGT9ZPԟ G9"ף2"xs?*'r qQBW{k8iǪJӷ EOXǚߧ'Vf%d%}W~,BcL^Cl|{L{2ۅk\ocJ!$.aCP1{x(`ȑG:t ܮ'v-h?H ^KƌڮhK# $%nhҲtjlimWho5H{b"bk ‹LG2*3!B8 -.2F{?O> !I,/Q.r;xpTPBO,F*G9;U~3[xzҜ,^xf D;$pACYE;QN -mgѓO{N.b'ou۲~TU6? J+;GXUK @& z |-hq4HZʺdFVg3F+oPm˘e:_v<+H8!ats# Ek,̵r.C?t]aMJd#d[G$Cvas^vᘺZ]/Rt2Ŷ6T(L.12)[ #' ˑyfkojM i}s]k@@U&' qcnR;@?!ҁP-sE`)8 O|+<֐i~=h`0BFo2E[c-˙so*+nXLW"@k.E-"p[Y"mKhV)onf^ِc[GczL4ؐ zۓ A7l1a<LMdg.YU"nĉY@ ՟4HLY]vq꜒ĂJU_X,/A yO3mړ)ۆyU"N^$DXy_@(w.f!᣾&~2{([>w5 p|΍C5P"OGIN7/őu8KJ$?`Cp[[rm/mO.FSLC@;.BE&`K6&O$p.$S2HyNx!P ]!\PVf{ 30NRj>#ƻads=$f,RF؍}PGC {K," F@&+eM"郖\?؍`܏Cۼi4dg`Qt[ KCiesY)Єr+){jWBfX{ꬃeҕ"6IaޫG٭Yd 6 Xah"7.yG bߵ'cAƙj񆢒!rQ[/.4V-SOKqaVv}1 e2_n_WP|lĖ!uZ9>"NǸYєjOE~\ gB9a8|@_R ֕ge;4 UtߒV^XL׈ØI,`bmC ~wvRx?xcV;ڛ>hlv]@|0^Gxe~7)2O,#[Wa@(,hcYH7?Yh3P{63mc8Avٓ6HUX Ed f*!We#Ax;i-X",N{c|ݥKi{y\S+L; ^3ݯK(El9lj, 1^ H@jP8׵~iD"|)S'D JCRRurJefZ"L_0r0&ȑD b\'K롈/v5mb+}XY}H)ȕ;n3 t1VQm8b!p_%}Fd҂$ݔPwc`?)"/'0[TYÞUR6d-&Ó qX#HX=~%^D^XyV}*K݁7dLR1^UeqN~+ ~+U0s 2İG~oV%7C->Dd mIo੣J[a@P,\,R/Ty["q%=jC E?`1n9YJf$%hR`" n*!k}q$ҤXO [[6Q):y/L{H;QAcEf# zX)/dЪrځ/7Zc,OFZRUKѹK;=փP`ó5O܃s+ln,(hd>Վ۾z\HgZxߌxdd/z3)UdDAد\;L/`}`lz %?#N+ZQ_ypu|\KF`*w͞\cL42h(ZwCѭt_&)%g+M#BbqGx-Le3Q)0 [ܰ[ZE v +ySed6/*Cå ^r{`{1tT6<JJH/yZ),]Ӵ9 |>~Up0A}?+ӊVo?/{ZAavg$GKJ>+{U㰧o,X oMjN|`@|tIz.FXkɒ2a짱ԮCuڿHRh;Aq/;ɞ^Nn+spQKZ }rOqM%ߒ?;;=e{"e}Ͻn./w_;yŁ%^/WE}OTy㱇MDN9 9xx:ֈZ7PJ0]2N ODXt//~/s)99ZǙVhfiO\[3X,f2\D44$z8eg6z \S0>vװ[qˊd8b!9Q!];]3YM;&N"D٬RY xm( 0փV`(# -'uw7$hy\NǴqOOncJYG/=R-HשGD,Vc7Ư4Qz6ۻ<Ώ_ fHWY:J0h"%WېոϿA%<  +v5'x0,QBH@s dhc6dYsߢ% %M+^;zDV,;Z |XQ&32=J̅lWDvλe+g,}?e:g @Yj&Z^?w6*N*bީR/U}g3p L8 |(>! ( $ ԫZv [zk3zef#|I$C!"$r=Tjb1]C,:<}LܓK%sѹ,|!-;]gϳzY`f)N}S\j3oݐPoK}00NW:씮E97KXf̥~/c7 ΐ1'(uVKskZ߷WsC[|+zRw*+Mݬ6.2LP=;L&+x)C,^N{4ѩמ4,[Uhk ,,ʀNoGt~/KϞޞB&n)lj bvۡD%T t>4eS9r( +[DOO#$,3$1i@] IopA0;b(xHٷH,2rzL',=-qkJlG?"HF&kDKŽy|{q>%$r6/ j.41!m%!Qlv|\PK]vA<$д$'heߗ ҞG^{e0dNTeQJ0k=j˷lPMe=OeO  T$O9SUbШ, RR䁳OdqcĄhJn#YL=D]<`da>B}H.畓'\Q7$H>}[T p[U^z@EvP(1ˡw ,`=qhe˱Kڗ[$uYRs$ ;#DӘX :T/P__ՕoԼHYs;=̍K{Ę[ Enst-mRyx0Qe*h377u:?q$ɟ!|p8y/鞆!`#=O|e,Ag,};,Ec)=t[2&jzNi척ӸDj'F"Kw|5涀q־|QΝ,çz=Q#`[zYtv**|]Y>K V H $,3[rOl-cy6"ud}۲DEH#I=e7l)K2UOK~ʂ㈲֡{GU(UT{-ah3R<߀ LkʜT˼3n?#{a3uQK J(V2Si8:yYtx 2 ͣ*c x$j H&3vAvAZB,O@W"L(qP}qػ4ϋܳӹB0wODhU99FTmo[hK@{Yf\z˴ NŮUIo! es#A6[}TJMY/:D u3N 5)!R*\ҽ%M[F'+#pP7¢yY7C2YNs])ᅶ` ^|(om~i߳9Bvx{rMF! #fʟ{ W-]"в&:}'H8+c]ڷɚ.KȘ\.>OS&$ъUڗU0k"&0hY[y/]Q6L2xX+c8“"xE_[(!`Dڬtxsn-'ڔz9#߲dAMw) TZ²8P/k;amg('{ Tb M~i?iZВӔ|bK"u /Į%J|[lUw'bYn<9(e+H,8%&KfZ3%f~ BP3&cCb,bɗįGįIyFeUenɜ UYcu\v4>ۆYD} G+1W؟@* 4B-ƢWj-,~J |0W -I俷>q>#MKe7q/N [\G?d~lN0f(R[~L*'u‘UP-=m㇞Η)KGnUS(qHZU"TM9(K'dM`"t tU!L$%/߁'+i?V`1^m: a)П U6ePbAxS2Y!sՀNr*reJeeZ kSУ8=NaшsXğ XpfhSW&ur(ٙuoG\Ao y/"U DOٖIuW/i%|!JeySٞƦnWi$fwId3wK6-q*v!|9d=`DqR!$~USR&;>4k9ߦޔlq?0i_6-C ~4}'H{kH ׾=8x޷]A+9C^z-%^} -o.jW)HR-K 2.p(hkO43`q@EZ/#.q6tSa*㍞IbV%!&+Zxă}-P\\y,A!!e?P/+t۸(exsPl)ZE{h;2 lyr;޹=N%[44!hӋ-O%999-~ju0N Ch"$|ざ lJ;9|!|&{,$B!̧e4jis{pMu1i|;]CNܴ`Z꟱ lU;TPS%z5.nI`dX&02rHpKR: 9ǢAؚKeG- h%U*FYP@|~$u[sKyyqymsD>1gΜOsٸ_mw%9K4 -;L۰IlvRH @F/WU%9?3%pݾh\_[]*]gS1S,m(hY݆ ,ԗ$=㐢Gp^`̙/Y sS ,\ove"O2<Ϙ]_NK,z[S^‹9z?%/wJwd'-N/CצHAk0tr}hT{~ak/ ] X82IB1TRף/),jW ם@UU<YM%h;C9vQ#.ZcВ1>26K4H_$cGq%µ9̿{2#ic猙ziC5˖/!ld y74->?`OXk)dCy(XTW ӗwr 4o<,av|.3( kb~p"E8B%2dT}Y)Hse aB`)AZ;STN,Za<$&Z(daJm0'H!l]lHTul vTE=Jbd|aOep";tdvz˝ ,eZGU W.؃j'ȳwf!ewo|O袃I#b)MTc8.Xx^`ˡ(Isiu@V̺=l" t:}O\ >d1-qpo<U{ &{j}",$?xHlBwe9O-HT>^\zNx쫒Gviv..& Z WB蠴H@:;-Ig2X_Kd*o~mSEBD =&dq)؈/o/@3K,5OnT|7Z>JMbw;o}%,Nm!EZOSxY}U.iJPIhȎ[uSSTM!{1%.Z)iw|ݨb!ҬhT%O`*sGKJ,5}9f|>"&*Wƍ&y . *zqc RDtJDם,͖5aB6H8R=ζΩmy?BЪdqr5H׶7LC29~&( s/ o?np;?{љyʷddp$4ʼn-%xd:6[.mU<}΢4D"AvU+kn{!RU% oc $ulOe[xjD}ly@-=k*"ui c+}Pp J?^XLHؠV{.]ָ$HTǧE$>%}lq5nPDX-ꝓ( or[ D1% } -),>vb ٲd6)//=ю+cہntY]\)b2ud1Wc>+[3=7-^+P1ygb' H,Z:?E#_lx3]-[Zأ-YF"%s;67}vVyaq^ '@/V*x*$^T)=ʎ' l ӑ%0xЦ}.Y٤p$m -7:9TSa,R\FP&9ߢo'QCHge8dT*\+ P|#Y̽$,J`]p#Vkaj&ڑ)mw`}DοF@9!IZFG%U`([M=ͽ<6-<`%@821'a3.$^:=No%{C[@4m_Rrre;2_bC."#pҹsAr\QE7LvǢvE#c{0.m|A'scm D|~l0.ŭ<7W%Q2ezMģLNҟS$$"<>:`7.gr=雝(OR9@ ;xc~Ice\:=꣇iE;[L`d2hV5Q=ܭ↟톾']"MBZ0:Z;UR%QsO5K׽ݴ wY5v/}P% Z .A6~UM̐ ě5j=k PG"@͗2=OIKbODj22-oH )DHUIЃw)dFK*P9Jfzqۧ+%&7DɿM e%s#s[^xz~6HeZs9n)"i p-H7W^"WykA=r9*Ix<+_,A׋e"d۟b"dU& ڴ2oa Blq}/m(e,_knnwLIu/@!| F`Bk&w;~ǖentj5I廬ύD[MM?fn_}l2NLP <Vns) <;߳fJ$>jEئCLve #=쳍c-6 9g`Y,W YZC`ڏY軈o7o[7M(aT}D:] chmB&О`u.J4mPܧEZ̩$!;5DvSmNʀЯ;}.gUne2P ^-]NZS}ΕU5& /+G.u*U@bG^"'zBXB[ԣYqCᏭN3{=$f)s}4ڗ1I@ +s] 108}q(!krXlUWBAUC6Zf dEP|u:OX:¢IL@e[@@@|xӛB ,0CMŸxHkZ||Wv)n*SE~'kC״_1s+9$RɣI%TA<ވ J}!Ӌnxq䮈Eח DڵxIJ2OQ Jԉ(5's@|] + US }kGb* zQ:)\v%QHۂBdPݻ Yd.ς *_+rD" 9!U1 S &@}܍J ,U~О@*i^ke92XL%$+`- 7ߤiR"b80Իb/&qDPH>תMAa?e5`1?5yMbTvtƐzEf+[RUIe#4Qa X5nM@-@wHFDҩJ"q]QI9x]NX6#uS P&q߮?&' nE8IzauKk1; O^5:_l!BwAYpX`qhcK ÞO>%kYїqR~I6SʤEF J(;SDZ-A㹝 -bD.*=34-|d:[U;U|n(&;)q%үi8HTqϮbfn6ޭz ı KI̵yCiYy=f\bwgirg"a՟۝8!|L½ k**ST>Sg%EkXEzRwGI5o&n>p16ey/>q7z Wb!-Xxot`GFb*(VQ{?2|% ̩~Ω@(TjFt:yεebp@*#Q9 vdLV\.?eݠ3mSK-a1A5\>bJqX"] ŲôY@}[Z酝XQB淔9֭-C_& C3~OXE/ S7s]yQtO??$kz߿:ŷHa( rw[6[Ϳ+ވ@WKenny>mwd4U\(329~}!^2OiTDŽj'#85cW,~aW>+ۨu%n(pI@eD~&,ڎ`P'Ňb>6@!{I`pL"fya3ى$%cB iqa,@HDBQVjih!"ntѿ[vU;K3CYw`ޟ !7>~W.($c!Jhn1J3gS(G{萠W'(To`,g{4Jo_01 $ICzAf4(\ t['Od!+ϫpb%]Wױ)_JϚ[h ,@n@f[ RW[km} G$+`YQx8PAa&~іP{gz|kӝxM+'כt ^4m >6F&~A$x FZ3&Izׂ ܫxOvѬ 4 pPƢl-L`wÆ(Zsz||nepB=|;%6pTZSVuZ鐹 C@QD}I]!Oi}r#Y5GX ޕ.A«4׾%!)l9p[tVib:lLkʲ;)c,;y&1D9;#QIp11vq.魲MY憭-<2;[#7Ctõ `rUu8*#:~U ZRl + TFO}^X$}.B֖ F^gÎNcy|(m瘮k _ GDJ"~:oKd_6۷J"G: Ri[8gŭ&t)K?t-/HpH^^أL+o*cRR ا "8 -m`eT a?2 c5y0%avyAcнCFP 7r|N "~_8®nÂ_NUYH7~<2^ybq.A\aOU6r'\wͫ-7W"|6^sT2 pRxcZ4C{y9^ǖAK`[+U&?'˰;qԏk_K`d"h~f;m>5]mC?;b͆[ɷv؃ȵa XSf@} dMqNe) -3 $UEz*00hAko{]81Ș*F`'8:@&o꿭1cSK'>Ϟbo6&Qi2bi?Izݧlêe{L `p^ۜ̍x&c6&\KJhucrE=m9`epy [DRR0x`j|i9 **{~ "i1!QbM2 FXtP@$ѡJrFe ڍy0xߎ,cϏ$G'}5"\6h~JS8F?!z(&kC)M,6 gg \Hc2J>ԅ[><?)ĵozٲ}4D$®IL|mx[qҲdmpQ+UlnU\?GLM28.hdXa02jM$7)s:MsX-+vbRqKꪬ)~5~\e?ua#\>#|s'tv.d./Pԭ@4EhD:z`^jL34KµuFd W5ā!& moضSL=BKO=]mNPTmZM\i1n$.}8wɲ%8+klQH,aҼo(;+I,]\6Zx]Y*o?ǯ4E~ %*~3j_BX;T6)%D[=Ĝ*.乯pgղ.ysp6SB>%vt?ԩ&E[R&*-o0'N(a)oj삽&b|_nZ-U~[DE>G!-rUKΐLHuՏ\(hQյt^Y "`beX\GTJav{D'LP>Pxf^3n9eo& TcVuEK}d+\VSCU %`iFW곟LUdƌljw()'tjeZmU GCV{i㯏UjLܓŀ`cԙQ@Lg?)j boN A ̳B&КHJ^W~I y`P>-Ŏ-b:Ȧ88U,須E [Lp/Ui&Sp~%Je=@;r yYtaXYJD)E+20*"RcA?|dI.+U6 W`*F$%nefFR|Z\aY-%hm8ky9&5 jp^d[}@[dIyŊ&3dIk՘&_[ i j_mKiw X\m$/DTI;d27AXk8N "Zrt@K+\/I{x,l(NGFg+e~l/&zZ/gUgr[w}I>#h/蜚Z)КWO$t*7wଌ1z5SNGcWzWt: 9D{v&١2[؁S,gvd$i\ .$8tl&h> <c쯪\߻tSbp5vk)OKeøԑt$iCz&q1-=%ܙeAtjbs3ߓܮ{t $ĊoȀ1&!`;,լݜd>9/[YQ ]^9ڲ^Kopz~VڡD /`ie]mޘvԄRY xzw`Glk0l~귈R] h/}أ>ߪ</֯AWj%Ct8j]~e=,̅W6E_]d%իL]!-u;mE,:)~ c,˗<(sК @fs>O`EXdB:ni/0 ȲDDclzd!V&#`h=ReUeG ʞ?M`RXӼsmI;PUe L(m 8g[EY~HZs*מe:L%vDlMuU`&1? 餲;UQv2 'ks@Rg]Zl:Og`[-pe.|WG_Wnb˦lc9ĀQI^jR&JEŀ=}#%>xߢ39dow1uEܭh; EbZUfr+bSF/ZNX8{gT1Kx=ُ޶I"*d '"x%yMjNZ|IʦT~ӐWgb#VKĀX" ;`SR kBl`.%d0w_L4"]œ[%v-{>a'z>!~:GQd<7Rz#B LHOٜOnA@+]a ʤ&Ա@bfz@Rx{ "O摯ޢXUFI.8_}ffaߟ x Э J$!.We/V8\r7͹ʨh Ã>|A?e:sZQaJZP`D L*؜T?goGLk}?ǹ{dy,Q-S ߭7job;0k>T$Өɮ.?qXW;qE";zc8 n])b8{ś~;BCP"@NM'VhjG-aC|XWY/sy,c^Ʉ _>sX7/,k1[c6?^.d1g'Ij Gh1ԗo2۽7^a`ޒ9)l5eefX[$B[!l%UcdweSrY2B Ũg|20ܪzUcW9=4֒F͙<@kXa.R4~zj/B8?B#.,PTE@G%ͨ:6M̖{PGp`~yD1NN V$ms/i5Gdn-ʬfWg崰4"SVԖ8(ȜhUvUv|nuF1\op`L?Rc6F٩~DJE1 *Ktvr\!I rjԾQN+g~=#̿ &$^3QJkzU/Q!<\?lFZ Q$QHFp_kmΰV~pU:d6|H7'D\ GX6V-5ykR]$I[X6w#'z `msap3L˞a* h5neߵ{XU.>M!$DfY[6q  d pd`Io!Tx/@T਒8 iO]'KY̨>@)27Vb}عLHf-`0XW.e"Զo!ەa4Ld7CJ&̸颟,J0'{<@ҧ* G'߬c091x? юf֔mm =WupzpL 3tCߘFS (r%:gkl)C"]xz|J!{/k 6Kzfy {zc{/e{bR؃>AHk% (gqˊ.Wg,Yh5`%(ST9ʥs[ob b&^!ǖC&nǑ(qYoVf6]ү!l#{B` LH+gٱIq Do#1 GvyjbOh|~Ƭj RCH|9~<}{@p>bONr~LOkO[jD$/ ~x_eR?ewIDl ^',_^ۓn9 ׳Y̧D6G5W 4F,ise/-o2Fd9lt>nSDlLHKHw칕-TDd(6u0XPF,hm%6pMͭ{k\T*CэZ'v2GH)jn ˹|Kk6}9R"]$+c3w!̛6Ht]&r`;~ĩ[ف ݭ-= {'K`]~#/׊r]$4bu΢E꒜6{^#sQmB?uō|FbFB!AZ;҆0HCv||̀)"'+G4V$+ꉺfvm2sE_ (W ohːȊ=^EFT"YiK.T^ \X{VYfz=O]DG>JH#A6Z%7(xнTU22)c,{[Q0n< xn{2s|!vuV93.D+#lު]*rvKnsP5w"0|2lBKZ> w;l UZd{bzH:Cg2,y0zVa=Q(P|ǝ1QVG%f?4j73"J{٭JCh[xC51U- GT6=G ,ZUGA?n?FYÁ=ëbPNb:n/'9bR`yv~`^}r7[40 }vLƳ3q*p{e.E(c,a@*f qKRi69:qᓄ~eZv>z@ Zc|Pą1 c[[! =ow!SmKs+J[n('{IPS2nU#d"іZ4Pq';`@{-O'퍞0P^Op[i&Q`?}к$e.lӓ8WFYfvJhH?ؓti%#י>t=- p9:_yJn7>9#Щ @SxEJ_w6<mXFStmI-凰6v** o! ~UqQ\k6w<%6qA$z"e6p oq#|ʪL^e͚J{ܤ rY''ACYu1)C;}eT ry:yE=lA?#~e/]YQs+4gm[l%{ '>j;@b9j[8fģڮն5=%*+*+)p$Qe-hQxxM*0@3KZO}i!<Ok`" k\O)`!:IwŦC]aQ9O 8G<7 4R`DYF]GL7"A[)Ys]=6Ӳ\h]~eyje!Q&;i1GFgQ;3GnώNFΪ'z P*ZNp(3`Q@e?ӉJ@&[͔K2|_7-;˜u3)n RK(Чϑ>b´Ssj@= i)3ycykvpk9f3,)7j~x6Kx3P C[񌅎x#"qde>C.[X[&C Lba.'w-r?}oYTdb2}~!yuNLƹ_=2bs[l-R%,|->3mBFV_yiqJ{0SVGJiN$YZ {Ƴ[p@%XRCW%|+K}[a{n}= gCkD5UddWHTo.m?/ JJ&WVdL^;g%|Ă2`ϒ *dakq;7,U6ѾJwF d'NYM_YsNwCk1Đll}k$́ͻ8Qe^lWGZ˵4&.qe6?~]X|onZfm}HhRaURgw1oNX8D$BTŎk:U6ly}ԏwOrھ[ARG|OLb̰]Ku6WZP)\xQL.Rx(1QF/l)q2^bnT_ąr3g3/"-S".s['6iZ[2Y$[!lhT߶uvy*V㒹ma&5a>2@rs-%x.o8oNff0(׮~x3Tl y,hNÍx [ί EV[R/v]o_C}7~^!"&.iOK R1}u,_ݮSe鳲 g0*JkQ?BzqeG"ݱvikC\F4A$fHЗϲ?upeלݎstlV҆& {`G'5 Z*!leeKYZT+5- d"Oqow;]EcK7Ēipv/ e6IqHT6NoMs13,_NK+NEЪZ3 @vq8}lfѱCYJb\N1o'UF}L bL/؋ jy8OzY֜1)iE{Ql)/ Vpk00hvkEM} b(XJ2OL%k~7,wH _w –0N@Z?2#SnJ4S˾_g"q R~|U%L%|w16l. }!v>/Wfp B6 9נ`?ZeH[k;'J!:qbSLy5kGwu1s$$%KOA`*S~۾!$[+l4y~v B"il,/Dpcce&][eۋO=-fE9Ǥ?G9tldN&ߔ~ W7tQJw79!skWk_sLccT*oYM: aj*|:6,hb,iEfF㙽h( #Jwq>逛iu=8[(If8}p[2KE5ےU@:`QiNY9 t<|}J] TĮ\Z -ۭYT.qHaJ)@߷ ޶5;N}cOK)NA-x &%QR/s9ʎ-cKQ*sIЈhT6R\Fvע%5Xŋ j:d+s;-~I@c'HuJH13YR#On%ؼw3-X=kJKX7\l4ƕ2ycsgKC`LT߉J,GYg4i1dLપ\\|z']ٽsv<ɻGwNaT.e% Ѥ\ {,P_m51ɱ)U;&So!PI57/Aō Xݟ>trڅL!8X̚}*dz:n](5E"|Q@Ӯ[Hh Zv L=B R t~3YaLkgIUk}\Qp2 $_Z.5eKlʐO`@$}=:Ft(;T@v?=Q@Yy"$9l#oDbRNPԕI$(Y0>H2EJiųy,A ku‚Cw0GNΖjMFF8_p;Dn+qڂC`Ub8v!Q:T5k" d~wT6P+{v$uF" %|>kvgU& o CpIdLJe-}JٙT;6ʼRF svt,g2RTZE'[wE<]N(nk,y^0dž\ òY<.^8>"%;z5&dD$ݴxơga/5U[c$^1۾y.h;Nv"FeZG1 }8u/))CP~ײ fh7m Vc*P 6~k'=m Ul6zWi_zF6=ɞW-8}C;aI̭iJK%edGnvw;&+5_Cv `J_2 +sa$8[  j1&` /WtJ;ٿ+^d+ů␘M%ܞ4 lqT@:- ꣬PaK={+&ڸJy#}JTR܃`oVumjRr/=fwcRٝ΅y31Yœ*n;Բ[ 6`Dl[-pzekߙC%|5_";h27*ϜtEXT4A>Jd@&Kwrz؉A֩Ԡ <'цy^(`϶qRN%L@3}M$56}iͱ@2nُ* !QŶP3XgޥQ5X˞#.,]w.ҵߪƌ1c׸)V:=@R9%Y2+lu@h !)hV]f-F>1 Z a[Dy~\y>30 99[lZ>`M2-,Vd(0Ƌ4Q:GS@MɗG^҆$X. 41wU"s^>O_g^#ACv8dA/8L^d<" {vH!,1d;Ezݲy!lPvvg~&+=2gT/d%KXx1r-a SI TIOmAJ=|Gbo;AgV` ՟Wte JK_3H!>X岔WAG0HA$!G;Rٌ=<}+E(ĽY>Jy, x$ktU{Xz tuTd|HLJwuTӒ8&ZrJߴ A#md! 5}7ۊĜDJ ƏmȀ+3<NLE2 k i~1՗rֵ2=\U@ j-cϿƷfOSs$E^{D672 *tή(i/F;خvhśq皝Hg%R +u,yc::&_uA3q©SI|dWXKQ4^]k!IoKxBE. "B2_*<{NT_"{pQ\GOk0lW.ZÖa7M&?ϖ-dw2ʀSѤ+̮®Ϸ+ۖ(qSn6]ueK!l\%ص"T\+3 ,gU`[ܐQX%baCCY!?g"~fqU#gJ5>U}o+E~6o!K*Ig%|ȠX/x=GZpJ׽OĮޣQz JKQjfm?J10{pF6V<*X_8kZVuREW?n Ao[r';TWܫq-.ye?C쬒3V|^oD1׊6I\ul d&µIoȥRTYsR2:CSi4WiDo10Ɋs#,&-I=:U!#.gq$0:"RRbFA=k""dO"u~s!&s:?.'/coٞ5U,o,@#^ci ã+c'0omKD/EF *c TBE"|?]IJ'wl" \|-&ZYf-tT@I w7ɵGEGyEO#!,Z]ERRηmf߼<<MD$ʏ cZq)R=Y R/f߮F]hntAkj͠#=ƖE$d3peʶv2Tv2,/pԂgc*m%ɘUU3r;-GvCHYTP cgJa.V#A-\pzL'T4Q|%^F#S5wc3={/R払+ kc “`98\PP&v_i d }g=V'+;kboƊ95 #$H@[cw-i%l.PUFlş0*zL"I`wQk$f-T:+6krDg#{\0"n]ʅ?VLqؽT >M&Cuj"s7%l0$'N*25!aUM PԼ17K[1>8͖UzU}lK5YlPqYB۱; wjWA/)A6*[W!h4p`&>D>jQ{Q@1oڶ=n ǂ8@L"&[bؾFOg 1~w _mlEv)R0]51%fGHŻR#{'׈X>A6Kf |1f'$KI,ޅP_;s|Xtct6v.LcY6pꝏ :5)qT ȟRX,B$g]"Fb9PWY.uHDqxVcx/㤁财HpdX!k\nJ3 6oTtZ/8hvBi' o,-0yA63G ¬8?"g?Ċ⣄ՖuaXDSj}2x1 <]f8>kIiW[M ž\Dc!u%vs[`="59c D\]1OL/Eu}))k+:D_/&cY-r:-i9㺸P+0 Bӧdo k X4If>8JCwa7lO{<8\17>u2b'p0_}cfLs#ܔqmAlL: Hƒ:ĭ.`f/žy,`*>Ĺg 4GYl8`%'d*ҝ$Tiӭ =K?^3Q\V*،$QՁt5rJ?c,s L!eU]QɁX_YZƮ,vbf9N2fӿMrb,;,^>{fYX % Z|pױm{!} I@0 t^}xҳ]E[Hfq~lN }5iO)xƴC{Iim'd?z7qqX]-pyg+p p=+K w~׋ϒK+#7Hw 1}K| q^lx2TSmO յ!8lXKP!1٧MO8~s)vb3(}<~n^)[1Rf3HW}sg:D`<8ZA{U+?"8A$xފn [YD2Ȼ- r縫ց1["egxMw#c[lZ{-+L\C\5SBf!7~ 'UbN=i}h{Ddl xwEeݜ| ܝȎgLOvsشhI-YaTSX;U~CZ_,SR֞tT9W6ଅ= "eЇ&AK] &UZ[<.2[35Z$x9,Zd ^/..v=^TynwxdCWY\?O= Gb Yc&Dx|rԄ{H; {V‹Zn%1":mb|ݘkp~5O/Bz & H։Wy z**p>V#ۂ( )w'tD4ۇ1~|ߴˎ-c>PEQ G ZKJVc8T!VkG<Ґh&@8x^*^\%pytqɜ!?|7z;a1-vZbKLM[mC[ЏTΩJح({_Kh9MM#vŜdͱrY=f:)oZ14|SV:lڢ,ʋד{wǁ2ļ0XOMp#Nwu>*v.3 dm'\> N8>e(=Z^jORH%/?vMsoiwg #ngnpUH& "H{gY"X$]oiHLf'i̱-"XUa? ļ`ZsԩeNhC+Y?KgJPckH๳c=QXGd45` ]K\"@lC)PVl:iE"R 0'0s>e{Rm"m"HN :Z%c2A=!oݭ@;2qimRePQk89矴+8d AXJ@VIsʲ_z:)kT:n/bӼ @@BB/F8d~}nůA>eHYȩ/Tni $DVkv9#gQ RJh(BV N*}˾B? pvK4]K"AG|];i9 3ʆ)oؽ0(О#uv:ӝɅ,ދmv=c> (kla] qmCƏ/(ؕM ;/Chv1Yc+7I,ҔI4}eq:uڝܙ,0{,~GV/j[172Uɐ"`sq䃲HL@ l!r#T|NlgDL*Okϳ(RLDkC;"{;*3 CUVU*u4HؐMō6|D`9Ų+ЎCCY_H`AEi^9|u9 N yĖ 4rS+tH$-#&W* /HZas?L%ȔEK( #g%0Ů 1u.خgZ.#@HMokUtct)b6wc7 "Vd,bVHdAcaXq(GOtm0 1/p}+5 M`PګVePo[ҌKʟJ to 4SӇ{Zx %a) бEfM~1rȇdjNGe]6 V hgojnGh N/JY9 JDXo hY x͇Q:Dpo;eW.&Xd(L.)֞PٗY@6` @&^O Ĉۄ}@H)s"|t"e \}q]5lL:: ~ ^cH:ik5"ьzq 6Ʒ[6dwϰĶ6 x4 ) 2{[+KIe{%k>7ܻhϟ"O*k/Jf1"?u} \5;d'FHun|iG줏 C5F~O>f !^gjYP"Vus>ìs4O: )3XIl5GQ~WW"Q4ԥ$۲SyBIÙŧb;h%by+)s4,6 zKV>5Bre5 _=x-M~0d5~ui՚;ms@J$bgVHKA+c^4k0||`Wr2=Gl}$Q% ^T4^ h|ЗLzF.qEgK| 8QO/wm\uĨbX建Ol"[F7"GѓSLbY#xD0x ѰYi䘪s;wĻmTP8>Fr YsGLݝ*$^G ? MŒ'2G8x#@èo<he,gVV˒@N*n%HL @`oϖw󳻖!υWѐ ,GςHwt3Gf15H@'TyM0!GZ/bݩ>]8g ,ILf(OcG5q8+i1ue#4uPyQo:'DpRc … ,o[<L䫌 r_ϢvpaIǰGT!9?TtϢG'w2Ȑr,pbDxKM+k٩a!6^ E@4y";]sZEQIr.8_x@A"?tPai-vA H(qG(ZM:H"|A&%b$;ﻈ6BJ1S5<؃)-yvkOͧDf5bVbN;>zX Hh tc~6̞,/*rX6ҐY.ܔYx!ܫa$1t5-[ Ws|WN1-|y<TbNiΤ0#˘ ~bf'A;%mo`:uP56!q\4HrŖ0NN9{1ÉS \A JB>O@HL=eZNKKt;Y,ƟcF%rٜuo8uSXUDK_I~~g\vf^!;Hnh8 rR&jx1v8O)>Xek,ij&UJR TSxtE_.7҈-m"Gqo%pr3pUn3>=z%X]-"R+Ce5ZyOhgaD&;KaS6#o!8s _6SOL ĈY8e*.JW e|G5CgAʧ?yzXYq]ߵ|p"Q 4%e3e4TJQFUv`"J鳟+s./ 1<* ?Bp}Vn&iJe8\~pLȦlg?_o1.U0"]0 ] c?x*boر7lcKb7ѨIM4kI4{﨨`AQE{[r2Y,tu{vl3l=#T<:E2v@ܤ}Z-q[:gͧlqY-byiv̲4}ly߲X~;A8v^⎠tDž6"֦v"0zbh"J}Ԃʸt$9:F{0bP¦'l+y^߂N;OFr6*ABZ"M*H,wVSm#A; !hJA8ǒv^MԗX\|Պo\s~H"5ZWmNsYdg.Ѷ$Q٬8z=C+uOHN#RGŮIjJ˸G+s(Ӿ-Q= [`!-f(#L$c\ /cA:.FT3PuVdq1?NTyTo\U+2#B6+U;UjUw><ŖϕdH}J>ٚj+ yC_-W!q/pg_k{@ʚo5F濂RC %[a+|^$Fe>s([Τ GϺfq\:$$aVa_" |Ы"K**#g,6k. 77k^%=`NHde"=3%l 9;D.Na @TCW8<95,EI]S[Tz,WA[=?@=ô',%u7Ox[vlU2OmZޜ4U^7^*DpH>{gn٧6j\GǏlSOBh"S[b\i Ҩj k!!C3aĪZDĀCb-V_JWQpS 3N/ $Gji~3w=Q6ZYr 'ZbQRʪq1a6oVEx9_TzPRg6# _U$S>{3䭿M"@Uvrm;%y8"7 P۷%j#QݾJґCE"m^¥j/&x,yyg\7  ;8RހOh ;Se=]l; u;4[/DAQMpкv%fŽ{CZ\W.lg2VuC^cf N g3\ߡꣶmf'R!"/3qTN+u;Q#qv!PsTSEu烊Y6{Fh U-r|[i9ЗwrI0?Hjk(]xRT:aP WdjO( Hl/-eLV߆Q[lU3.n;<;Zi(&7Yj!\Lj{uw(!UHL@yKXv55NBW獻d*14dI_=5"*Iv'{*syF"f> >Ӝ!@'|R>Iry5oڼ,"Y(|FkHI[cR$Ɯ{7XE:pڙZY9'@l$z'~x̌Yʤ2sULM^dMJe$rq5P|$vq>s@՝H#6+ɺ|"!!^<, E-b)1"stI<7{9)_F)Q$ %{BKՕ/@_1A&ORμ i tTwk :3r+9,tB0AڄOs->Xkm>LS'+H bƾh=‹ ~|ߺZso=4yJ2,0ԘT~*xª (T Ogn[.P/baJ 1UB+P2-¨ݾXz/v"_KD۳?J$L|*1-SX{'5 &>IdnQ,f {|Q]k%.DZL@*L6R'H'Z s^۽<&ps6(Fi[*oKelȅ|G(ZZ!%-e=Io:b:j>l-Q֐X *;S8.(ޙ!&I=W[ho.&TN<%~~i_ 坰(r[apx4˔멽ƛW ?<*?M6i#Q-]H"na?L]pQ7ٔvdM=73ȳl$tObrXjŨJ89ګ6v==5[mBoĞDK:6dW^7+n=۲+-{}ޗS7 nw:=6ywaAQ4<ȾlY|C)/E~-;ȵԹ =Ymp6-?OꂴƧһrI"rܣS# Y'>pؓvCQ?vC8"f`eU*  SGW6-vAcs>0Cz#qibO9PC`䆪+҉Xm8YXi \k5m4qj5J"Zwy nU6؎$5mO~h%,| ; Ŷq}BA &DUWun!ViJPg+ܚ2:CO`x 1Ƨ}&B+R_q)ѡk6_h\P@GϨED|-?jz#[h5K\hXPCvgj?j^bOND}ޮ`C%LIҪ$5"h5ϋYL$ "sUZ.'% ao܉;x?x +2PVJ^7Z{ԷmnRA!EvGXVmN(wP!^eboTG椻K7vX\SU4|T_S$Q%~ˎkbջP+Fñ*T P>  oy# y#arlybTC溂p-jk-CR񱉡1O-!lyS\y e0 ZR<< pYvsum/,ZS?#e. RNdBi8JWSуMo{q;Cuuȥ Z#J`IdzClV ?TIןpxJNR j[ 9DE^JԘکzZAxMQF rPXXFuZy I N+gpQ%ӳʰ"U؊T)<͌q ZeF,PޅBٝDnuzԥƜuQmhy|m_V 5ovT <1z?iRRG8K|#-f|$*7UuJJUmWUJzT@=߱pCI@Y+9KxJlO-uظ6ds+`)~i vk-ZE_ɏ_ -*oW][&WCiS' e\{ŝ]/|l}{r9S 5ڎQlX~DXԦ"V׿!!T!  xtsvej%.ZXN,򒘒NB )*4뗍 'E" ?&BW2)Ď@ګjͳY { &:I#l?j #T{Rmr(WyƈB%t*v|@ĢQ'(W΂#WlwV -Cf4R_ZځvhaC^ȥi3*AޫX b%PE=׭DMGGYj|r^vmXN聅rw=I9rX"W,bJiq~a~UiϚ7Sv*AOŢpBW#993:7A[wKrv($dgׁ;Dv4ń~-j_QݻXrG[vdC[zƲSE|&a6[PKnfw&0HD}C[&}ՙy}!Vq{ šnH-xu Ԣ.Ky7FN,,QCj*VZFڝW>!sּg*f[Ƈ>V纅_U{`-xox\hyx*mQ+|>&p&IUR1MQQE~ZGO~mp'~–3J18"҃"T$/^ Tje6qB/ _ֺ*rQJIxzDJ~]znO*i3vk(ve]maé1F88hapBZK #xiYpJ*j!ɉ,T cٹAd3c̹B%DyoY<2Pn'`%%{yON 2rmO)ΨUjRǚfP36LnVkJA*BAs{Ɵ*AYCJu1!n)i'XE8^m [Un!RN)?fO%PNo7jMRUg?w8nm1[t&&גa^ۨ "t̆CsR,vQKU.H-j3|RT"D*1f-`oUي+J0K ۄ_tܴ8z7]{6TqئZZC+ +!ۣ^ˇsT'I-i rݺS@k Wv qb奘#=^U,TiiŮRޢQLSumK U;gwz$LR_<'zR+U(OpF\mEnZσ4bJ}ڕ9g7zsλh|egrm. ezeN8FbSG9{GB"_\w:uo@ v6M$af̿ &I_W2Gs`޲Y HZZE'(%]/^2f*#l%EuN{?u\= s$IݲY+%mɾb 9&8b)!%SUUDw%uKLڃD#`ژj8f mZb:0 `/MSu0LG6+Czp ~|ż7ղM 6u 5' =lnk5=5aTHw.1vcϽVq){|Oσ\!z_]dnfw; Tؤy˪1Uwq`kxof1q+[,~kut % L<|A*w:BR/ vm+3)!DW;SD@z4xfKG8_ŵUf`Ȫ$Zjw_5"gI2LPuޑ8!}x`XPŬgLس>殍S ]S0IG'߫wK_">DR(7{ﳠa ~ԙaU2!h!БSԕ`$M@o2GwUnyܮdw\6U 0iņr~J9T{-ET-7Ճ@-AB!:XCWn/LhLeuJSHDyšM"1DNlVb*[mZ(f |ۀ'~FB&R&9;Īv;+?˞Ļk*uI)Vτ)((x5$.*=:}1.=v/ *IBKN7(V\xܬ&qػֵ AU0Ltb@՞ VTi2$RyǥnĹ /*~6۳p9xTC8F* mwbb9[~??vُ` '2nV jD~W ū ~׈3\ڃAX5 rGD&uAǿǚvQ.!G<RzLZi z'żVXkHFeEpjs QtRV5JNع;U=RôZr,WmGP">7ަg<"qIURȔIVm;=]Rିn]ȝ"ޒk8j4?B-N :~ڟK/}F yDk5,dz?YQx=PK9$lTX1WοٮM-n'?YJ,A'Weؓ+[kRR#YҖ=>55?Um>uFm`Ӯv@`{'aܠA']5t*}Wlos.)g荺<]~yH(b+qTd ڏQ$[<9-[v"U0?Ϭ˲'X@[ԗ I9s>6/,V}PBJb1㙕l^#<<nA4_eؠ<k718YQE,sE!(J"AE<KI}ZYE«[6 KڸX"IbE &9WpłbT2P'qTČ \A:ȬUuVi zn$Dt>Ӊm1_t:旝$K0*HZ*lhhYL].q P{FY{F|qKZLj*TIn.Kl1i>S .łDt' zM$(  #(>D7AJBb[vT"#WrZr^bZ,$(ךp9>Ҕ * U6>m2SKL;g[ ^|ݵ`째띏w<ߵ'C}iuaeV'b$OuuK=8sznEĤG>䦧VJK*6yZ7wK77a8mO(F5>Ţ::$8{6-=uNa(;E/oAbUO|V0!@Pן _m₴P}Fdg ~jjct V“YVIuHؑbwu<_NE;7&ȋV5nJdM"6\S"-bwis}f.CD<ɕ퇍cMX~n Y5)>}ͦjmkcU._gV>ヽVe_~j⏤3 p QdmQeG'>KK GNHr$U.}m5}~mz/!ǽwO^U4H A* uY&ZN`nh/7q5v0\R{6%aMxk&+~Se. 'g("!2 D{p嶐@DrM'⑘H1o j c|@|dڃ+, ?$F?cY3[B6i 'ӜÑu\Z6ӭ89\q@̺m@TۼOnŴ&/|`~-3wjO☜궙2U糚c1Df9Fbxb3}DnHT(o-&"-{g+RX>o )snsk|m|@d=] @!v oN:Hv{WIJU8QmZѕ&Y,Y.L?<5spPÈ-6 '=59; | !u pSV&#҄- O 6$[@\JxM9T?Q Jzd.R! [ W+i)u GOQk]TJ rZvTGv4  w* }HK% ٫AT:#^{O@ Lj\s"f+?iYmvJ-6_rܢf'9թ=@T Kc>X%Ԭ?r_kVli;8jEwN)kIR Rg:{ GPʅNh6ֲ6l98oϪ=F\kδ:ٶd>z:XaWw2hƢVcv68z  VZʘn+30?վA+Tir*T\,8`2 {4ג @EjirڊF  qŖM+ 2^tFe HH8`f.\-܉FCm׮vv|9^\bqHB~i>ꄐnYfZp\WuP!:_ѩj v蹵οne9yT%iG($Uk9g+4! ¢m"A@,u6L+xrֹG͆ o͐5NTg+< G ӝV%Lɬ%PKyB:Oؗ9 _v-gGx'W=f^$r161ˏ}`$̵ I-IN3.x-1&{jN?ܲi۝V฿ CBǎix֚IPb:w Q2@y:zꒉH} _;DP2Cf#N7+{½?hQKڝԂV6f'/i%,{v lYIMgĵN iI3"&$d?DTzjNjx7.[ܧ|k!ڶ"cP&uI+r7,Oʥ_FlaC "y[jurA'ߏѰiAY=ՕZC,*8aNβ!hZdjvi k$hH㘥*柌S$.POPDtS_H@2^TK6}&XJ#*6tr:Dkهͼ6Y1lxc>+:ezA] ppXB%ݳ^Ql\sQOԋ!ZKr{?"{|F< ­ ,j Y|8 r W\hSxaRjK;"$co+= $TVF(*H՚mdyE?”jD=*\#gSjWJ/[Ϯ|\ɮN^#CiѺ<-,wKxLRʹSN7Lkյ}Hua逊 yeOVx?Ot.$XɁMk|>HP0@WgNeI@lTr\,U*S 9s LDGRi56ea[7mu@MT=׭2uVU#Y(li5c}*&'zC75 J!h!O@g07+a] skCZz o5m&uVɇH{6&"$ł~EfΘisB.e[=U_8%/ц3H 5 ؼc XXyp.A!Pyj\@󄔨nw?+ac[ܖLhZɛ (rDP8` z`u{(ke?Nsal<ςXafV [>JO\>CINDk\TŔ-[(:;e➷ԁ s\ FRbͱ^-{vБ$ AֳpO 0ʉ ^a(5rY<7Rׯ1}\J\ w+I'<-HEۺ"Y7ʩrάc!@ %JPP:7:AfZK!+=")%le.OwڿZӛI ǔ(JQTyț?7ڮF%. ěܷq o^V-RJ 0#}CDjEeޏ#SPA 0XƼjhpT{!(8St&nm WGx6ڏaJ01uXV!\-hP& K]tleBU %w[%7]N/*SiUKeg*Jpn>O5cxV0}p(+= ĩ}auE|cSmJV)yzIxfUJȋø_5a-svf"աD.jeշfI_qWcI<,ڋEJ}<ʐ{ԂGo)^Qh}ݙɤ6"MRYC?#1dr~ONB;.NDe`#+YMӅ$: țRU[ZUS(%CWAκ[ַ q|UYC/fx_P;q|;EK;bmUҽVl ԰H9?MI֚p;4j $.ߏ)ė]z>bq>})v2//;A$HFD_7{kX=}#i]1kԋҘ1 =!Lk̵v5jpӫpiL&NC"DW[&T)N!ogӘb=v6 %hNmf);%!(GT E|h0`MnTlBhs[ʔvu,B|[Fv&(XM!Ąes+^eV[yrV$.!9(mupTwT~% U$I N%88܄@<^쭍xZfWtJ[sL80'%OTH`F [5^߂e[{TTU4)fBrA\poB]*Vd?q5 _X D]ذ{C[m,@Ųy<`;J!kvZ3k,}Cd`A5#|-juQ& dUg )_ٴYMU{;iT1(*gZD6pȵk^ hӐ%C~"oE|ow3YE_#hmnOF4v>g~Hm@^ V 5}k\p-l"J]_)y gV ük@9?oܒ?ӛ8w˰/@zP%;Q54}-m'@sdshj[M{r;_! v6?D]ϴNuǮֲ"' ;gɁ cW {<`@ +a76Ş)t9ʢ'b jkO]oZ6Ŭj! -tI6wDYdz=j)Ye5DM]!Ål 'pTwi3_"C=,w],$4{E-k=B<«Ն@z(amd2䌗d[-lMqEB>TNj4S*j2b7=t%*}DO&sUq<2%Y ? dJ`T%3;[1?;_E%w IDAT]+]PHP@% 024鏅X}[Byr~ y%#>ajc?!46Qxp_s{؏P'Jj?  aSp@O>]q3I5BS~}-wyu}uq:*6yj.tAZaqSw[ #DC]S|j,BY:J}[}11=s>!UjXDŌ#cm #mڙg֡ ʜlYQ>kU(J|F8O?ۚ5n7]M##J_b"Ҧ/^b>{|SۃKZЇxs"DQ4-ƶ!LNҩZ<X7<=S!Ċsvʡ4*O4k g(BA@Q/8!̫ s4Eb#2/vR[wӓgl6rnHEy~X*#J,6YՂW[Y@'C[d5A-^_{>an38H6a a5X~n--i" I=uhN;xny@}R8+w3ȋlE2 sCV;]j 2d=j=d`+IPv׽h,g`\#U آI]r.f7b/jTGEu/$j&yO>G̉峷UaD^A_j F<8=q_:<^Jon.i>ivQA"T#z^AJ/~M9)u,tly63ʥ!F"Ɣc Nvl#uv*Z< %hT?f!$%n\ QsgNW۱Z8u"ȕ#F U[SC[% XJ#D,SLX׭"Juq~t3 S< x$qmu+ξW;3Dܖ׵_hſKι`'NFdvLB]Uu+z[T:OEcV8NKJT+0ZtB]#wZ|&omjPZ^OsG7nsS]W;U%m:YL'T7JW&OTPV9Թ-5ݟ)ٗlYZ]|ߺCk.Xgλlk_Qf*nPkcar oGI6?v3IOlu_T&Lg]|?𞓻f^&{*{P[YG?;_u7"Z7Q%r @LɧuHYK&K?gW&(" %u*6!# }Lm,mxSl -Jrg/{f3[N)U`PMs(vz+VȮ}D &l %wavgzˆpvo.V5zɚZҦ)Z :kj˫ު4_%Χco =N~vy'ӟV,su0{;r9 Cy&37 U_oGsK=^mpY`_مw!!;>tRf\C٣Jllr~з.)g8W{&8O-$.zaDu.YpD.~j.o8=NK(].iͶܞ6,LN&+Ol'ۇxY[ⴜ !$q+TU%N~1W[ wIdH(t;{g/-| D;$5mb}zx(K^l>e}= {޲KQ6|F@R]8xP`{9.<$AJ\7Ixďqr%VTIGAx} |TIԑ 62K{bx&m8B2hAdȝ4D7|~bCB򛰬KWԺZwxחy͒/xYF+8]w7ś^3A ʡ܆;݁>`hW$XH3!AC .i6`,bIb$eA^;6g5 T-CڝK 6x Liw0%qǘt!mbƘJw|yZh s #K> >uFҼoN׍[mVv?>*DRfmJ7U6=p /\Ǣlk;YDb8VT+e+ 5&EU\UdVAkr]҃Rq_H`Ϫґ8 Ve Ha"~"fSrB?)p`m9ŧ1mVy'+ !\%^h/ q@hjȼ>ƺZT HO+XJmR?aޣ  *)Dm}(B݈hR _Z!;/T@5,aFް91.9z{?E@fVC)z8+0翕?Je3RG.Veq+6A}S#~QJl~iqE\TK:mB'= –o8T7A1BbJ&u琈7L BiC*QL{z싏Fŗ*'0:tkSX[ɪ:EHFVC;h'm :#,7V@;̳}Dd4UnKJ(_rM3&ˆn O=,u_ΪִxӤnԆRk 23z+9rg6+˸8deSšZV9RA1QԲ6z)JU*arTcPS+$9B -RcyڲN=K$Ŷ"LaK4 |s*D}DHjThRle{ok' 5yB_U**lϼ6%kyTz ܳ$.rBl[9ț)'_B-'e?FZG *uR$pf0?v#tkS5FHBS {fB_,V#9I͸9k vDL]jОſ{6p;#@Y$,ʁbb qޗP*~%[^79ܮ}^v8gs'!GLуpB>c.T޷wUkU!a^o7~O?DV!__No8+YQdRWY=7U1ݮ3 `aq@ lz.țnSE鮤&NU%B$VspSe&s/cW|*Y+ =L&I,/8"ۂ}m!V *(]RY$&uC΂QvC ?$֏rTwM7nOPB9+3wr}quٌ#H1W[7xH'z57b^!kXRd::p2H3`Wn e Ut֋_A8lT!Cmo^զD>ޔMgz#໾ SRYX=F8=m߆Vva%T[YJ% 1t(emi]2YCD"J^\S 7! @~ Z1Hxn$ZfEHS[" `JÛr?wA~6!֤6˛QgIDHUkT26+úߥaQqGوc״w2:#&w@i)ɝB8ʩzD"h:|\+|kK ˖nPҕu\vIM8Cz=K=Zrol:+p|,Hc%j>q1mN?9_̳TE0=͊$['!R|$3m}"!GPR5^ehƷpG\+mG4*O-WH~;z"n,k !kHb冺V,dN.;VۊdOK籤mꑸŏ%owQlȤ+(Wמd%!Kb[_U{$ğK -"ؐ8Dž:!__6T`šͬPqŞCvN#xeb{`+CUĹhKBPX3۟ruv W0(Avk:3'U*${{8 _|y-2 J:+QG𿎿$P^>%v_DSO-]@*|v%َ;?T;Z  KN5,ӷvxY#PT..xF9 ap9 fHT P*8 nͯya/[W$F%iJj#3=øUkÁ۟Hrm&Le@̩N%P'״/Cy?yBf&%&fhY%}j*Ug>Vd#6*hB@|zL+⺐ 0Dg}f/TJh_ٌdщG$zp}${Wyk]^?.s d7fK@^Cb`YEq־*kۍƖKq5gzL6bI_Y Iƌ?YO<]*[ŲTͦZzY.obCsލ|=W1Y A$(J La)EĆ=֏l=`ڈl6v@kr{ Bm ;Y̻ng+WҴqh*6tT3Bmk| y+qξC,V5'ͰSk7odj(^tͤ>m$7L*AQ DBT|eCZ␩*[ƒK ΠzVKOkg`l$;Oe<#Veož6MUj"(fGo?]_J|@1TNhy̸e™JZwiNxZK?{ӎnlޭH-U(Ux[$ׯ_eYξtKGNQĊuz5"%R2C௵HjD\_y.:\N>R z[?T *nJU?jhפ4lMJF2:CHL?Dp@R)>o`>پ'5 xą牙-ӰX#%=@-Pġ>slFZ"nUW={sk AUO\eee! ]z׾vAr]2' >Q) 1po;AwCPDEvv V,0HJ"{O[6}/;?ۧ؛Q$,A(Kf16}@,uBumAR1.L?>?smNHe }E,\'$qWdO!p!1|jj`ovƷB5y+>Lk'^Չ @y>q1ߵOUi9UR0oLUDe7Zivix ^zˊvo"ebZď^9㢇35@ ~=se>Peywoi UwMڔ0TCUvWr$e|[*Ե2A*2ġ[ usj9ח C~C($l#ٓ,nIDTp. P;=]^4A~yn]ը*=Bĥ1!a\4ҝZ<"WrN*D`||m; ӫWOЕ<ڡ0U}'֫O-~^Ya;:~A@av % V;Ti6̿x| G\}: `|Hx%7Nޡ+sNZW҈1劏_&N*"gK 9|1Va)g]_6=8/V|\'W=ci׉#LB@,lBrΈ]3B;vs|V u%9h`M~z4ocicx֨H ^vku!42PV1fnAAvv Z_K!@Cb TU|a]!4Rlesmh F¦$ںv l.b'QY\m#٩C?GjykKUSJtNoNb"z>xsww,٣ۋD.[fQ{WR$T&Y=ɦ"}Ý0 B% 7УSY?1A$\Wy#IRm489콌U.6MeP ,e!xAj3/U!-Rf{-o`]]\t"BS~ztM>w}6hnw\gܜ<;\ 76 ̥-pTgA^S+8f5g vl{#{0-p<46JA(5JM`> Q Pq>lK^w+9? `[#,PIiFЉ43MFdZwDN1 DxTijZT^MY'PmyOO@;v'Wt>֜vuhE{.b?a~ % K@N9AdDa3ZC6+@Ruv[ɞZ\&񷏑T3; 1^6AګŠ/-R/,2-G6¡5ZUtZ"ezS9PA‰f O"gF@y)խBUOHv\R͗,*|f_^?V wĆ}͖׊d7ff:j@unWC wht:`*o$h/Uy"JVb! j%ym\zl|nڽbL] ݶJ>ph޹bm|j 9Ke!h_U) $bD8p]DI^\s%؁N~Ԓ!AdO S0}`4?sp _3+68ӢųCbAv}e[菕-p~0ݿjZӹ%ĂKsK;z-&NV'i=;i.D%E`T@p!e[-᜖$ŝ0ptPzb'vLmZmeh`]ͥ&kqLs`-be(_П9Fٓ~-ROHbX;>y~톰`~Lrwʵ,$=0=T% rǿD׏!%S* sx'H YӑjH׭$@lrZTdZRR雸PwNUZ葅,)sGd!I܊lby6|>чAQb)["j\K9jC;Ppnp@;]hɻ}L:!}>,S s:l8>F?" mmnݥex-*E GqpXS+t:,I{ MO"[ X-;-Σd*lx[dP5b;[!{˯H(F6>Dg_"^?QSiN$ȰHDw24bƍBzLdo}B럕j؋s(= NL]Bܙߖ!3 *B:i" U1=_/_A8Cc5H} S=]DAhg/1`$Fˍ-T7e-jMQqBʀsuyj~u­k%敋:_5s-[}ηd ^.}/G6g3K3A'":bW/9XUH ƤqLU@,fGMgzgոN1@+*0N8==ݼͅ ;Yu(0,RUFx W>ֳ"G[G] `3ar.'ڥg_`kD1ar$pV ::ԥg?!8XO+պT f< RLRsQrBRu BVvl;,$8S(lMiU%˨ͣ{: Jt Y-.5a|ڸ%K.`qGi&u\*)ko0yNHsy0H^3!A+r%r3]CA ^$ծ24dNd/ب_ĠK[jV՜ȂC#SrO6ᖮ.ܙVmQ Ve-};EFeyk{IbUXCJm+2>TGrZZ K*HJm廔gKx h$v_(=Q&e@HĂ"-'B$ܴWA8U ;&œtQjGI(Nm8Hd%z1M.L鎅m@xg)Izӂ]pnʌ僀ץʶ}])$~7uXSWT7PXӝ :Aq~"HQO1yO)dZD0F!S>b >b)X C PlqrCk6Hk,J*>ަ6y ܆}1PF;v!e^U/CY7jU@$ha$&ݩ?Zh,1}GQI2R"! N| ! ӳ"XQ#M | :XS/ZPVc; [:Gl*3ROcZX|;[B~c]+>Fm7b4HuiC" nCG/H>hG=, |u WǶ S% LAͲ"oq.^O;v!#N'JU!AKI+G֬&~%$vK0ڦ%,!oivB jT% pۖH+iIn}!{-"G*w?(LrWᄽ6$'9|2D_|J%hԂTeu^>0|]O@XRRd;E`s\dVdUnsop",9 fP%8ȧBm_V(j%j;V>k&Zd&yigܵ}䏀IaMDŭ$\ʼh6]~D_w:O*s$ 3_6UmDQ \A@nݮB~>fR|O5bO_짙o7YvXT ڔKe!~y=U>$s K<: rnHU-7eG^ԝT#Ʈxǧ߰-K8fuklYEK]xq.qU@)wPYLl^DZQw\0MT07>06i B(̜GJ*%jʽarߵ$1)37Sm:mw5'"#S0(-MQxc؍x|N,Īꈹe0&ĕV$v'"J 7%^ZkV3tH0֫UGulzg>60ojִB-t>vMNq؇|J2UԐD-b˿уwkbW/@8hjl*i!\W(u븞ShKpLr}xC:ɖj+vt5AןSȆv]@D~Fgz_.3ڋCv2Y5.]~[ITBlY >' {8ތin[ie*w. C A[W!u7Dc1%k%H$%wQWε+qa#aY*@%}"wזUbaVB?!T2d$i;;(W!k`QOdq,Y tT(G[궯= Dd Ռ?'ȝ0VE_`j+Jl{ O*Y5RWFg9w`${ ݐц+Zkl߭azUUDů>l?m]0b]ɟJEATo>1l!l/eԄɶe+}nO00NYEVqm|bHTUzrUy KԞ/9L gYV" F(H@k)@OuZ t9SVގB"Oǫ 25{U}aEx'rgds!vmNy􎳤 YͶPRzH\bSZ QUAۗ__8C`7T*Cb6?( Zچϝj3ꏱʇ[@= d@np#祊Fq; [ \y un-1k>F[x)D"[U *ԅ.^6\(?]@8H T V{^0y|jIcQ"Nł/E1F^J-}^T:w^os74k|v0lC d3[ 25ဝpAST+jp>F}TxMWBxm%6Zq$Wri]3yP).“x[y؈SlzG3=>m]) VyJZ_;O+Hj]G H Dԙk5&ؾEV~==O(VGk[Qć8Kdx 4nw/_ +]E=m]ۊml7]ʦwdlY\VK݁d+YjXTANН[TUS#qNo][uJ Ca53> A -'Ւ `NuThO ʔ ,vTUKrWj3roŤ|1b%bomAR<7Pb\fwV['\X<&#r eNvt#JAxSh.cjNۡ/6 j;8O bMNw]ntvN=8oA8k7Tz:7*ta~-܄m&HV9Jk1zI=kwqz?R0)P]E8ٿTw ,>*ԑڱX/ lvm/$)E Z+ƊzWr?I^|K5Rv\֟|=!+nn_͑itoh#,d?Y@(ZZkV,vGAva!5q6"լIዄ/y!lH%KU/ "yt/;(l#rkk|TJ9{Ead+9Y;/žW/jTSK9-7$hsmoje>GZLĕRGّۯgo&ɵEj|(=ߝ vFŁ*Y{yv统ov/kw۞]0{Bl:-Ŀa(I6'q0=L<"ZIVI|We[ Өx zιԲ0V͌VuE|BƒTaǹ^Xy:YVP"i8ma#rH"J>z$B-ZU"Ull I>#я/*b3zqĴPr.ljؙ^*sT|[#Ҕ/E@[Wm,#u$BG <*j]Ccݫآ| %A-$X'^~'D:Z'hQG͞7! <,> g1Зeҫ]+XTf ڇk9h^M)7 ķu݆%2ƕaJ:,!8;OȚ9eH^K6Q_["++0*Ox[,"_ j8zI!V_@_g'/sZtVGoOU qpݩyV H"fu5)ID?řdwmP,(plj͚ߠu6">d?v%K%FVhK@*jnj[ʗnuImnBDoxEP|iUGT"T7R lTLb^xUŪ`"ZWӆ>񅀥: ewXfmLbuK@.?d6-GK :=[I(땾,!2 iJȭ5SlWB7H0-wE`+Rz@_-wp˗j uÆaGƐ;;!`SÈGwݼC̵: Hw.:1@%,\~CDNZ z=381-x ^آe4].%2*ǸF٭oPTzφt9$#B}N0bNn+0ڪ+mCQyф}ͧ]Բ'?~}Q)J9Nrݻ8 %"#,Ѝڵpn0SdCnLWy|AӗI ~u `n`?n0[Ph"N=+{7߾%LtN_[_g 8~u62P˄jȶ24twհ|V(y ȁBQA\BBv2AlAHdlI*gåtn,ʁL43RjThWwFr< ʬ vlД`,^RQG [(`]PR*u*FtK딱v?\ꞨsxBk_f5|OكmC>Ss«DصwQ5ys}J}-gM'<=H` ЩENm*к Fʔ v_W]7 "C(QZUՊPIQ~NV>r'} "[%QKWx$Z4$ǮI/Uؑ$SBk4?.ObG-# s`Ux͉~Ug{mBw`PLvFպ*#n ZxZD֓;RņaڇE{k>o[/=^ Bb{ jꞨ<ҿɘ?֔#S!}vh߈Is{_+HJ:XI@x&#}bbh,ت?18gJRXΣ!aۣWSCy %T|IJTQ498mE9, @)p >D'5ZrjcPo&[J|n:_9t%2/X3~<6BT T?%Ԫx+Npkj@"Vw/o[gCTT}7a4UY7dO<7CY&>prEDX/e;ua]ŸzeoAB ycezq!I`-}mՑ3-_koX>LɊZJ@˫oI&979+=mz^l5aU] +ܱoY\>ybB4eW3%RԦJ9 m%~-y{O:ŧ2:#-,k~y*I/^*1R~UwsRmrz]tb_ N?uZ6֩ 6o| Fx$>t l स=_9Ox{vi@z۪ }M@kdYݮ{l0֫"Ⅽ ~*cV;SdsIpjeg676ȩh4%*0dB{" C}rc:) W;WwKɮ8G|0Oj+£I D&{>|Z3گbN"{Ax9

    O䶲mZ;-loM~:[H#cp1cN!UG;շ\Dt67"M*d_?2&&e༭_EUkWܻؒUĒ"O G70#Nmg7q]O>T\pȿ\&rWH̊vo\1{-pUȉr>,뾱CSr+q|d꺳ߒ g#Y,v~^-/}ӧ#3Xw#%V t1_Re)HqITiK FUDn޴hFܼn~U؁$)+juQzUϭs[J !R}k-2#lF^3#!Z^uE )^S?U #oD ~T]U*UobC"nsb02u꾨-ޓLJfreiB{XScѲUȚ1Rmn/+%Ę V⪠u>k˺:tI Q!FlSm~6DP(K-+s]Sy .A($ 2٦ݬ~_ I%}LQS\"B]l UI' n35UE(?ĐgGVp;sFTx.*Lp 'rO$7#_tOxH[ZAk׭D$7 ^/][UW)XZFT$j.pEM DmJ*J,(INZz7+{*~ NJK KIa> `AedrV-*Tp\uSw@9 @F'u:L|܏tTP *`OQ<)I$T]kUeDT!򒨾PDᝧd  ndI=cjjzcȦl{(Wder`஼knِ,,*LjKq+d$HĿÿrF#u * c)gF0&tI&AMA/ > vADJ9_WL€\ }Ϯ|M,HL &^ShS`^BM)J-urZCCZ vwnqզ*PND/FA.MMN\j Z.I`9hnA[H {heVEœ+6%vE._:uS ЌJv=/J'=U\B]ubpVwH#6C!|A?Nůo#vJoH_>D^Y8ԭ|޵1nSZE"+mA4F3_'rtkS,].R!ߝ'GDLkL^w?{FF˱$2Jz ;j}]69Zoh8 N|ZZxo+kUvV1 wU^ Qyap YU-Y*vnU-+&JH޹c m\ C5.;c,1#@#k[?"mmj͑zҍ`@0o~D}HdUB$M\_?|AF]w0d(zs5x ]EC@"2>5PP0/Wd,ZW81 f=s\߷q/RWaw}{MI>| : Ukdڀ#?%9i/VeP&_악]ڎ5Wa=h v Kd#S#HtH4>sHtohc#hrvII;=*A'&s}Wֹ!$ZqQf.)^lP6+zF橄Py'ck垚N@䴞]uGh_eS.X}Y8]?c>wYJ, tN^jv!mqcVQ~-04cmԆڗf&p*LK"2AJpi:hZkֱK"He)ժ՚$=|šda &uzZ]FrԄRi-nރ[`^{16._nt ҇Oێ,Dٳt-n1 xAjʿZ|-ugϿ[QjӋ$I =\*?HAr5*,~3cs: VKY՞f$V2#7xY'aV>1֩2[[婅-' 0n:JUm_片h'A~w;_qQ!,;!+^8ic;>8bf׷أ4iB%z&E̺DyT,U,9FPQ, 't0O=i۹CCdE].j?wJxw1nu.yнbVJ70_9ߵ'B~y&r/eAo=?1ןS=r3U"*/YY1T*L*r@b'U!g߾ h~laCN}B-b" &)QFV*KbWm*-2ITp!-%UW3t"Σ}Q-q nT/_.$Od_Q #\eR}Ddzż|`O`^Jm Jd&[[ ཱྀuEB#oa/)c))a-FLo7HF-ap5]=m"StkTO{mWr3=ݖF /x(joFZ{pg-{Vh=\9=.E5i?W{~az,v߯o=0>9s֎2rq$ GgJZ(P=^Ӱ9fY} Y1)&$'*zp)AV0;JXț2<mnđS!>$(kt)`ga8U򍄜w[=8ͻs~tZ7}Z#9a!m@`3k4Q h50_e%j٫-&0.e|d嚞1Olic>d0Ժ zP %#.Q1G,,U+7q}F t*Y3hTxqO`>0l\V$,PԠө;9x, ",)< H}me7O0y R \dv!J1 \C:ַYmޠ="?+h!>ǫ-ֹړ*X@>>i=/(_]t㌍*Y}k61O;q .zg4=)oF*^@ GƟQKo#~t~Kkv 1Df3t`DB L8']!f#Z찼fyߗ7֐¨!zʅՕjo3Y 1$pYpUL"Zt`9UOx{6yӋD%DP~˂WZ(q*[ 2 >cj ~psjHVɤ%Um摂:~"ԷK#_ DнhS5+}ӞEo倈ąڬT>Bգk4Jr FzSHzWU9ÈW*ֺW<̅Ry զ$ѿ ,!w fImŘ7,v(8{uI %K@BޤR) HSD R{B(!Hkw=?{>e<.Lf U `Ӛw[M o ϱܪU`xVm\bJ/ѥ S5Vm/!5yAv(eHcOS v8w/TI xB나~ec^ ?'s6Y|J3ӲT\V9Q[>2m "ua8`,@LbhUNV" v/#n >  #x'|68S %v}ڞHm>5@99!uev2xxR u~6ŶYEؼqSTe'` U=y Tww6.j xe8IK#|>Cq˾(zw"bVu~}Vs#تa!EWk_{sX5v"m |%&?3gmj.=?Xt{$Zꔐ"- CmoGX $\ i|m3$̯bn"Bm:69Zymn-0OetZU\ GH:Uy(IވHV.G%5FNIe!`V˸ONSPmjY[dx~yj::|E(TRĚ $71q`豆]cTy1s)sǚWKAkWTypBJ_e7n`tMVkyUŜ XH~Ӑ!ک,|#vL!Bٷm<]_M#~grg?\_:=HNQʐ f0^Jthҵ0ؒ<l@kΚ |Wd`lu ЪBm߀vww~+J$Xr{p&5vKaenqMMF?5jD,EB Zu>RO 8ݫW).d>W$j'/ۼ+8}uA6֞hkxDj]q,l;h= AHe5WGm..6*F XF"6kAv_c!) }(3AJ j^BםuY^<ִtU9dC#Z;זmmKc.n TbnYB/{8! 1}(PVR0)0%ܶC W< Ac¦tʰ?aRiV  ekmLiW]lvr${3'i] cSa9~W*]~ȗS>-٣3d IXµo&yjڀ-·f)pvgGLu }eP#2>o:sFRe0kރ(C1O(>Nuԍ Skwdd*)Ve,irC܌ k| {y*]uAd؉kM Y4FRQ7iv>ú6bc^Sh\&avn[ZX~ _ =ޝv6ueHAA?} s~BDlz,^sݙ?'i\Npt\CĀks'ķbAQ{>%.%XgFGd!腹;_ uviBQxd¨QW@`isQh'֩UI=X8GX loҊN;m/nO[gœ)fo[N}9Wz[ XVk3D~U,Ug *nؙU}@]θFܕH&qZ G1"e<%>uDx{e6w9 44],U+ KI"[鉽RCT/Հi!| 9*pO;'(ejsx%W!vlKaAE-t; |D>Omv"h=6=ߑ7}S=R]A;9:2 f)?ZjɩwE4S1wԚU@zժ~yGXyN5C`ϴ^@#R$_[uKyǢw崜n؝,ngG틐0yKVu9b$D+ki}^ؓ8Oq!p`o&o+/1%͒Gk92VwII"KkaD'q75]6gصQՙ@*:%$R戵s bmw /h&E 0|X@sY?ij[Kvc b PU)dK8\T "6W|I ?x9(PF.FOpT17:, aηq׉%Y^yR{㷌(me\- %r^yWJnvԂ+"4t%%^YR|SE 8]Ni[ nyd/gvFv XS@T]ue$$B.ΚY{\'m{-.`FA$C&֘0Al}G@^{ z/@k6>o'2ZyVϾ>cSHqط\}%/+Cx7Sً"=T*~!H6 ŗ|與֌tͷ:BO-bUQ{$펻 vQBj?$ *!†wN Bx)]>Se=IyJ@ u_ JE[B ͛.*LvF/$A i%"9ĭzwa Z.sթ ?c,|w?tn䰬#x;>|۔m, XLޕ Ӏ?m6}M>ZcG`NE|؁…$Njy p|'VLi9ѝ22k By)ЩfO/%VUM`Ul9}4<ɿ"\R5xK::;> t D6+J8YoUnDjS`K: <-HEQ‹Nt8`}L}e-;*}Dg' G?q{82}CBH|̒3Rt$e1x:jC/+e}bjI0*9CAAU/䍾t/zbCd!ixG4{ګ]͈r{n9i8~RȀ@;oCRCmH ]Z V0@I :HS=I >keA+/^:k{9=<8(^}5 è3ss+Z=Fk^m`Yw7~.(|F[Y\ĖR}XB/Y@5t`Yv`l|r6څ=^TQ[KWLLpbZ>{ގMPAbSq (Bm'}_D\(lWf * lW)9gTqEb'p"AF mI#}eɪHFq\Ϭ*َfiQ=WkvzF>( G-7ؕZhh^)r%}lbgxu0շnY /1]Jq}{\I@>c,|q%A R>g#5XF*)@;8㈰$Y *I*QW+Y]1qBo-mG\ckxY e/ZZ:ydfvgq]$u=k_uV<Nk{ΗWAC]֕zֿPkVsi{2}zU"fJ HMĢVK@NS7|׮ŀ7pl<%wJK4:ksk~bG6kJmwzK/dY1 A߬Kt/=hA%8W+U(=L/W7H1CWDx8QcU;X|Sgbi(1E^+A~ހ0>y6 .$([qa0C6{V:jU0UfG]Yێֶ6 zPRH/Eޡߎ8CA Ih< VN-'&yπb'x%@U"W% `\9 99jpX@1׸$(ttKh2J-:),M knE7ϭRv{*o0ΒOXZC2](UVH8TCAntU`Pu$o{ۃK\HժJA0V8\7Z#@5an0\s&|xYm@ v:|hV*tdO~r[%^5>e 0wyڊ]-LqgxQ%Ol_LÜTy/Aa:058m!x4=^ q{"/>i%lv-dS\$'L_h D*Uh3vNs?'`U8_eXc(|EZR/I#()\QlR 0egSr'.w/ex[hNqh/0Ot`_/ڥeI]73+$MjiDp %ڔ_`ֱ YħPHvA9K1 qZ )\L kM{'b3bx];W6#ğveZTxNcTHV"9oS D'[*g(nv;WeS%A0rԪ"8ê2!k9p"dK%vMs8GV}F{:$lDT K@-0Prnsdq=;ۖXؚf]ƻ"L_ AdKWh_v%3wLIeY>4E_5Ժ?Hʷʃ-[:K*#Mk0笛hwQjntu+U`>ͭ)ύirL>K&?螹̭bE$ݟĔ8G8 BzU{;xnÀV)i! )Gw9)^l!R P֩eR=Gso!1,|_r>3/}`Z7GAj}@*6ju%"9wWD)#`PE(';)/?(cޠ5g;h)7/k6HĒ6qoX(nqv6ay}dOfr=٧ 8+DX|?}x=WRXtQ .c ITjKlOXM7!Re3|!ڬM $p4N*$d^z[l&vN1+b}dGG#,!,C"#UͫVCB lwdu$&ճ%3tVy9x+ +"B*#v}oXry׮{TjgV {yA7={>W' WTK@j`0rq*9,]n[v >TPgŕeWGL*V[񐾺'-\$5.uh:zYVµS ǟċVrCo_2'SnD(ZG_#gg[J]y6kZS\G>a~"79u' uQJJq"<P4u+)Ny˘>0>&): ,]DYS~J>"OΌYwsTJ,%XHu<ȟ¡d4`*{Nn~Wlb?$cm֩grg;KK)HW;D*PsdB )F)R]ޗ<MF| 3vbZSKF͇AE̞SR*pDCDN$#݉/#)U8>ZF|!B`D|A~_g,](W2I?JpJpJyD0CaV.72$:#1-`v lzLpZ$R#] uXp*1I2|ݺ) Tm.X+Gv+U)HP=gtiG"@"bKaT=d"A99;ٚj##CT@hC-OC+WRU^*@˅c rv(8ݥy#D89sQd-@8U\!S1GvvK_ aϙS=qU e]_Z%M,(6"?Sv$p~d5/p)S7C돪$.}&];#Y*M*%Y"dhlaTgIq?A^8".q6!I4iΧy`Jk [Law^;>N@^̗9,XãthU@5t uP_: ȧTkmfMW[P6 e;ut >ZpP[0?Ub*EbK$,)Yat^6K;=9\G"l1|엵kep("$G$09ܿ"~a Pi[f%L;Mw[;E$(@JT2q*aP>e)k`ߒ*(A'uoQ߳ZX$[ys2uDw ^Tj1z=Yrxji,ϗړNE};0/'cH3({7yو)~#{}] hK\kԑ#'ٵCa<$q|\3KvrTu;z-4XI1gA`T[0A([O~n9?lRHmji $Ef<MM ~Z+[I)yo`I}v;|ʔ=b3n4)gU"]' A׶L+Kƞ]!;ZX[-LlH~O&c` 6 x{!NnV3Uy\(o$^Dy<`Q@Q g@Tm!i{]}[˾+MX^k|G{y|'έ+Uաx{~ q]A'hvV)ߴFrRpAj`m9r8g)|HUZ̳D1=6߲{)OJĽ6 !׬nnRvPwU7ym>u>%$$6=O0% >;ӘWg6XU zR&/Meu b[U(CH,8;>sh4SJu\[U:-.*Frg<D9l 91 C+n>b5^9$`cQ |lTqȓb(z3YBpJMvl$D0h_gmsY~c4EnIG>N1с{0_Lj !٨*'>(U[1|; R,򖨑<50k_3 BwI@(o'A}T8\LI &ra&@Vߋbˉk^ ; \CO&i$܊/t6*ظڙl ͸kpbk%s8ާ8UfK 0$6C<2o@q#r:ˏە:c?L'6~n@\Urم,ĩ*klxԭ0vuMֲvd137AOgYt8FZ|Ð1>z !kkQNis f*ݏ#MZۭ0k;j4\˝3ZUPt$*:='zA,*6DN eofL4'>?Kl*ZI&OהII7Zzw =zXSU?"=߃Ir $ԲVzjRdYtv9S%Th7% m!^mpg%/:,#8N;y')u.TϮYϨ{^r?ASunKSn.&aƦcv2LTQ.#E9CB+pf}V'gD6t&*PEb\XHq9E׺ JBU v/ތJcI+ fo,jDK_ ҡKAI$!)6(QFP4z)+Ƨ-wl^ :vj[vg<ruI)\%&x/~>uZv%ڗJBĩ.yE( ԇ (!|QG#{:\8OU 9 n͖uQ]֮d`Nwz;H[.'¿O6 jiA> W%} T1 mNJXR@;chuJ0V S]'X|L+o+WFpuav4QϽ}rv71K !{&j(&k@sԟЉ{!Yh0 hmm4+B!%%nNfz^9΋f~4fXɵ q'6ahTdy$QyARRqTeZ$n-UŧVyY.ZL17`"!WK ?xc);D!D%ӚH8 C1&ʏ?()E!96]#)ml9 ^ZP/{ A.06Gvr~O O,e.ZG\?9HTщeUWG("r~R,( OMTNr]-X$lI`%Ty ǎb.:n^YXId”|KݱQ? ᏶X(Ai;߁IzS^Z/{ݖmDƎ"XXma=wF {kށ;Q =|yRKmYgDq%CNU*#DX}VL„ l}J$V}TqEhjsrEIxُa7xp+aْxzPC8 \P|*'7JTBSJ'Lnci>i\ 诮 rPN*?|Lep|uvEص)R/A?תu-)ڔO*\h \ŽT`QCs] o{Q ~~Bp'$艮s!%?2g*:eCbnPPR tbq?8!= c?DrV{IiL~+yw TjXt= )y\ƙG!kO_c͡B,iB,ޜ )R q:XE,ÓCyhT *[1fbRW39_K[nC (i/'c|,MdIw-~L S+Q~浨,AUInîEW}wT sRHGJk8ntIM}[J]SؒL"Տz9I6^cPPH;-5UJ@*D]r%JO8McV}n; LTm_Z؍k(jWj>j ae.}׾i L;jE$[޻М9_j?.s5 $/5ƪ{\!=&q1@*߲G_Y /V+$RTROg;@p"ͩ U߀T9@_kn^YC,5Syfr8DcA*],XK ^/B,hX=$ԟ=K^ʒ>Nm=%-oG_잎M,b.Wę@*sD ;QߟQ dN0k~/+3p|(<$:$Dig@V=ba;#owӃup5Bz%n!/n/Zb?e˦)1k[z;klrYklXNFu.1p;JȾ\>U6Tגy]~!r&h1#5p!)9PV{^m޺8赉ɋT96ʤ~A^W$fZb"?1)x7v~@l}'57Սg윳s96o9hP0%W$5cE)90'Ctߌy{v8.D8NR"Y>eXNe3`-ojj|yGi^`f-]j`_Ł:gѡWnA Q>Ѧ pNv&OXʼ`˞ BIC*܂SZYN)kA9D#- SE?%Zx2anC ndQd вdT% h6aFpnk8z_5&l9#I U?Ӯ<z y{mԢqVݙPsi)d1"YEx i6iyJzy t-*?2ـuzLQ6~H+9kf 8^G&?! PA%C@$qGbmʏC,jon5A/diydvPe Vw97aA4d,!9s۱RJ5wHImb_>Ԇ̭ц(.\7]Vܞݤ 9QA\W/Pyq)leHeYյg;W2SJ:=d݁L ?̀p"T9;[/䓄jN7ī[>Du|Jւ%y{,k^7P$45aVe/*b~`]ع'0Ss%P!5I {Mp$T}Ok1{Mdy"9͏UCy휻 _%DZ䭾8:uAK(k\7wƃDsl PdHp<b O%ergi\1/fEŅDāj IX\ݽkh1VSjݫCXZA rώF&Ѥs-daW[L۬֫$Ŝ]{̶㉥ShRBF8EBXS֬2؅E]D榨a>6e6𲄟Y3(*?u^4* 荺a|}sl\̼Xię??{ic*@\jS^E< D+d>Zơ6QhqN׏yu'~9ӺP[ xcOQ9#$y;ַYV8uoeM %}A w·){P0)dS2DR'wW+[.֦Hܞj0Q!+)m>wWizF;\iP]cCmv[.ʜOrI5-pTϣ#.hW+u;}VNxJ:p #Gp;5bj7D ܚ8n(!?#70% n*A:ssܞ5CvwZ~B.Ĕi$ J<ш{[o5F3$"Q>8RA(o#V{Q5=ưv~$Hުo U3V /J:9l~qGgKTNOe1>~WKL*^%|3S%6J>HIqJ*i8ƕ@uWkL]W#|gw[FaC4%CdJy eP~['[ QDu芙STc`/[x kuT\o Lfǵ)F ჈5;Y0TpXm3%;7ebr[s(93TM_,:I/x[˯a^.uo5Jִ?:VTbTj_&QIz*@D`D.ÇE=>ld{xۼr`L==:ةU-H A*>lo!JM-zd"%r* DekDyf'k6t%`OGyPmH*'ۢ,݅(+2«ϛ{0%J1e{Ħ48+97Z\8=Ob\@̙h)dxEHLk3mt\0ϯ VVTڕ )*7u0$vY|F$JDi׍" j-R";]U}Ƶd2%z89 H% BQ&"G -Ϡ_)ڼ7 ?*dlA3 H2!_);%?9 X؋$-nʟXDr^Mb/qĎƸ.oIQ'~ $;sK @XY\Bv\H6Q鷪wZw 8㴇?4Ń$a-F8Bh ةfE,iλ֡BKqoymh{nշu@ $xeyC˰ަ6J5sSN:ʄ}pK{׊30G͂'2JzRvBh-)t OfUV R bN!{TbaS-yy A L}p8cZ!S!=EE! `i#l pgEl9}q9Űr‡X@@BLxp>  t/x[X0`q+?֍P(Tf:xQ*D|Q sT|`UB}T`MsjXs>6h϶م˚{-Tj Q]I.r],H i3bb I oo's ~iC{EjsǞY@5U׀UIg)n+B疿\`-*<3HA`>gU*Z +6ZioHGbG+-7(6K='2DProbQ aRruw M\f+,pi[:Џ(_:??Sߙ>=͢e˹SפԺ_CPj#SGcv[=xXmZVDa1$!l= |H!%w,ma֢8>+&?Y|Cw2 d;Py="H"-@6O)_E\f['ŷq=NAupIK s>iKEx\ў4 j=KV?%A3tXRОxXn>@!9ODʩk 4pTo(L)`K##y*D8Bq ƙQT5i`C\!Bw,<,u%DUkSD6))hS ~s 2"K?X [t nx.!V[8h\Z@=  e*wgw0 9襖):;25bDis׽|r0ӕ$^B"ʘWg79R6$=" UuGTXK}W'|19!NbӄE=#X6o #,83d|VD@hGY|)_YfXxAIp"*5l[PBx}XRGpIcOgsK U#! 2fa{ŀ)_ Cx W$[їkD^yj ۊ;csH%n~+emAIv8 i|%Ur˙>?g Nw4_js-i> ?%]McR>'q \Ap{ + U"aw~`+} z8Xe ' ;HձD2q AlArC3+{hݘU(#'#}d=oh \9Υ uTX[fc$][AQ-^sXsz;(y"]}7 "xN{-by~1xm QkZ*_5na3E+5-ltkaR%e -f'ֺxȱ5mRՂHE!qhl V-Aa7T2z օ˿ '<%89d%~DȶL:j-Qk;:4FRܯ1vqQl8_I4bf1lіeGI|`&{QyQ$*pL31(?E9e1Ndxے1UWJ%l21vkqpr|e]O[F>Xcb)Aۗ&1%8E7lIl tol*A r[& ,͈h,\CT;ᨻC[Ҏ'kNy_V Q)K`p@pK_g$.oExwj[FG椪bE"}8O;\ rEmΤVo*OCyRWٸW$)czq^:P`b|QΦ4ǞѾ RS<1jPA5Mj% \RfTaS۹UXQ!gO%wop[;`VO/koE< l`m-\ ً`bUU|LwbArU 6UbY?"iYG Wkz{f='}OVAr+D@H6Mq/ʫ3;;uo޶}k"U3{V% JM㥎 p"bG$h-UW9,8sURqدn}]d%3>jOW뗰BV6,.%uC**Y,g)wE7e> ϭ=\Ok dkkB-e;H^:t4$DM@+RZ$b)NGH@H`+9t~ŹSZ;~fj6 {,8v,QHk{Q I+)椪(NAkpCC#?_E2͓iKj\m5faUfPjMDLEB(}I.ΣB cLrnaEAUN )Ŗb9jE<ШC\7vQ<"0"MB7c{k~<?J{^V"sKNT~W(q2cu1׍ui{%%|@(k}{زqz g0 a@ #-h?!+L[pI ^9c̽.5TF!sPxGd81!-|Θ >g/rDe]Gr '|r_ 1Vz+$H `/%H]/l BaZsA>;ljshf⪤E{]"HN ,77? AZ㛧 *M,@:M~')tm;N445H<% G8T1MC,kϊ3 r$ol+x `9YIV6ːV`ơdT*:c$O|uq#سAWrq^cl[15# f,Obwu-~>+!FE}A^7 '9R/-{&)V [oO y8*O*٢@{y/;Yd.@gu(#vu"l :??{=M/s-hᐶ tq!"b޵nD=D#W )p_ [6L ?[V#Sb+y {M54͎Oh2kNHZe t RZkJ^!n#U%W`Iu.2r6 ne?8S\9WTd HV8psOB̼Ӑ5S;6z'2fG'O"E!*#̧L͛,B_jUM'9dv` cW%M"m׵yXTrIr}}9y0J0`Tf>™w)G$1#=`_k3j@\dR2߱C[`1DÓ9XUz 6lE= (hU `;TUN=챵s;:*:uffV2S,υ0LʫkπF,_ˮ %~*t#O6f['&u2GUt/$ %ejcR]Fc?UKB rpU+9b}1Ix+.N*eL5&3r}|^/ pZүFNuk _dc+ ubAN@\cm\K p{e-QZQ ]BF/),kXd.u \܅L8^Me>?b }# AESLj#qpv=I`soYU'Hr̼`ÍL6e/͛3\(.-{o?_";̳|cX`6vkφGTq*Eͭ0۲ݯFNk~O"{ 8ʖTu8J`kQJ\ B-w, @ܧI;YlD*.U H2-kژG thwZpf{ͨdeKd+1O_2;,O.<Zn\2!pmbWة[-K:  mFXXٯSuv4ɳg-+K&ጏ}\Mjh(Б8Dqԥt2Blʆ(.1 ԣ*r4o-+8Bu7[ } G2AD*H@&h> ISf[lE{`Xؔ:i iEGcyj ,~sJ`"=KS~LA-7sv- UTTCNؙ>Uzys3>Õ%M-[5CPCU\SbHo)źJݝ߲%8_g< >?HK1*2t/xHoGvs3sPRݼtGApfK(2~qJ5?f 5qCP\kGW,5:1U(:W8Ak64(vnzZp̒iU^C[ͣh&UItyJ)jv}'V`9ZxP\#eiP [SJVVGsˆwǎ҇ډ]4u6s%{v OʊSn+ -eͲ8Sk :3dE0ײ@]B߅Զ6B6vik`EYB(Rg+9%ђz/iMj{s LgM@|s7U/Myas">7O;旌 ƃ[iZaa~Cr~UG^dAě'#"ڐo+! j/HJ_2Q+ygܪ(ƼҾP&P AOZkYmx_"hr]=ldOobӾ)yrnF˾!h /؇u,l,0&tsëH4U[-S;oyoO$nO ȨGu ZL ͱ ƜwS#J#ԀR„=~->arsn2\)vֹ[汅'}bEm!u|8>o ؏z2G3ᡅFQ3k&q{T<vP7t]K<1֦*oѧ8n|DW~/iQV8^F Dޤzg;QLe9ƫbBV1.X\D)ѥDQB5:n 9h k_-uGUMZvD &(T QmteZ| &Ogtj7河V= P)?!2[3XhV_F.]z[Ɓ HB3B33)74mI%,VKL$ RP Jl?E۲ZԨ _e -;#UU [6dAr!K>cR.:uV&@䈶-qX){5Z/,|n1γc9*6؍F~JM, R'1 Ix yϜPIjISAşLʍb7h fׯ ~m+ےS=lݭˏc.o@hÑ&[,)@.nBÌSe/Q\PGCm\][{毬^RU ٔyN,RzKkYDX` Q7%K-q1;19.Gb[?zAɿm[ Se'lLgǾc7\q2,'CNE9 aGA\$nW#8uSORLȍ sl$FA$ K9Bl빊"!W@z0M\EbܼL6d(f ^j/ @ZYE)Jp<ݕv! True;-{M-A`Ntb]yĀ]xMMDVLr@*2 ՝4gtr~uN Ƙb7_E5W[N,bQ^Չ[`։`pg-`^sVսםX0aAh}v?'G^LlWyA[86Y _  ņ}r@(`O(vC4wjYGdƅ{'<č77""Û=r:su)/},GOh깡Nr>RU+) 1A(rCoHpe%Ӯ$7yXIlEp`D0wH5HiMaZK0aZƑJԎDz٫(^߯0H| |sHJRT B))VR$ Ԋ&]³)R82NgU ŖbEwSGxnb}#mۦ8ߕMV*M_x^k'kw+7I"Cc/OgV[/i.??{ŋap|ˢf1/-yQ@eڄ PTHɨPO3T2-vu,B%ڜ\jk +E"RX 괳rr/8OL2~¿;LP-N,~An,sNіR1WxԂ?D&ABt.MKѥ >/U۔5#a"cPTNV)Wx>7JSAD#"U _9Q*~ JP5tU=ȲpvqL%nj)I8Hs B9 4دAm쐭loJ#"xwG6|kQf`;&|V~U#0=Uplvt֭貙Tmkj3}Bۑf_Ē0m-ciX1,Kp*HMks8)qMQ> oՑ9~aw)^QL? o{Ff0GLF[͉[_i-[8p (w|Q;q PXїNٵ16%AJ nHF&ww2%qaƇ.òpCXUkǡ\k&k߉C:' -$ ;{TxpB,`Ϗ*R@EQԲj̚12L&xuA\Qv~D4LSЯu NN(嬖s #"--R1~C[H`H"Bt|U?_KT:NW2GRo1o*u Zg{č>Wx8u'N% h# : q8#:eqʕ=lw-4$`CTHx9زX \rsq.=UyH@ Bgz׷ a'D43a-rMo*`e'mřa+_]pt>(6RpgA 6FsE|O*A-`bWT_T&koJ)ޅo%/1%UwkB3;|`Ԯ'GH"gؾOY`i*6'-kυ. 15 E\VN )Ǣ֛h> ӫm&=֠LRTI R@@zt?he*g+Tsp' ' nHWpvk7HweGRI$d1QÎ=pCjvRb,g^="6"SR)58ne|rqUbQ'jC_b8H!AKyjٕh*LQ+%-5S>hmV6g>}@ bk^Nr/ BkVZwZR5*nS@V#-;n(~d3G̙4A*$uz-'=3=P~&",nfpBPeϞ+t"vuA_ҏSb#UR=# PKűqc%%8`ܙCN~ijA+i99bXW] gU7XlPek=mU݊%$f%E,STZiQ{== i:ߑiSP I8<9]ȭR8+:@HM Q99H>dޕJL64ϒ<XV5TI0 UavYhjs}uͫo!.0)(ޘdgV<ǯZR;5[6hwgyG9ď{lրN۵dG8h%l?-tb]b"dŝ3O 80G_loV#1DF  ɩ~ޑ#J!!< I g5Vb$b]Fioq4Gqo?8۳:#_Mc >opW P0I]NJW`DbKn׷6$VZYHba(mi_;1vw!1rǘ9bEWrrDU!2!XnP-ЪW$Qޖfi,hH61v.cv6sQ?94#L!nIJ4IblJ$x 16(t󓟎x߭|`To؞ _app4`5iE bka*׏ʀO?c{.1$/A^>ךc߱3=ӾB_+k&d{d8\I:0;6 ٝD ?ԇ@ UܿJVyk|lZmp!ʌZvWlUJ fߵZVNveC4q9j9rJƉZ3iHLGZ;,C<x2}bQ_g-v%HM B\_ʆ|m"̖#9٤;M8q0;ѦDj0ׁ$\R{o"O³eR>F t@3$^vHӆx ȶAx 0Y yCĽCd?dE%!*[ ꉮ'[؞!L紒UPFnԚ,BÃ9u;J%W=׾sŚ=@Ub[5,N?)gl*ې?3X#P:r1փXTiV$}= X75bN2'>7+g   r4m:k7?P[%G0DCTfM5mښvCmKiWsa;T]KBe,<ʟ"El&n|#|܏-! k1˘HN7WC3XN|C*Z\哨>*L"N}CCb_GL٘ LRN"RRA׃ S&U)y2>C̝]țp7!(Wimƞ.fG94Wa<61 tFav&ezՆגJf8mm]k;aXy~^s&1%x{-] 1e-S)}եdE*c#xdb ĝ~TxZa>mϟ؏Fۑulv0W>2?SSAu]8#[uڅ-ۖ!*@pHʤJ D"h\`Y&/?{Y$_|NlQ(RTp>ʂVqh{ǿzq}A?>|?$o{S #.cIU 8>ʇ}I$@7;ΆV!; (a׾sRwo5lJ$z M5eFg{'>$5)e+OsԂ"{DG0o¶rֵl Ἐz}:5\w'{JY;ǜ}0ړ_mɜ.T.'61 rytyw髚EVǎ,{,(AHժTkď9>I6ݔ~kG7R Hq{%q%&0.~VԭDU}UE]S)IȆ`yݴ,dk.6$r GbX>EIw:뫡{D#T] 4U/[i0AѦf"%Bw:YjyUq(:)Q <Ė{痖=> yKK*ڊGp󦟅U"At >,>ڒw 1NSdOa" Z힕MU9ui AWjq>8׸~ -O$ @j6iJWUsX oy),ǀN"lFӹ$dUWOZA?LO l9rFrVWspTX]۲n?=`qj %4U[t ދc%KߪUɝ&Ա_89{~9Hze+~,DhՓ:9|7Brn=_Z,&qkA0;۽/8b;{?䢘OaXC CU;Tݶ 4f xXGs3D36ɰ=]J?nt%dSD1vTdx^7ii- Gj]Djl'1ΜΩN!Zk>F*΅ZQ|!hM{js, &Owg&ć~SئkԵ?(Ua\{Y鲝Bʌ׵L ozw!rUѡ#es,v *7w PKIDATCڍs-zo?JeAlnZð'ɑ5L ?V|5Ѫ#@v~XS5t7-D+j+kК(Ьp݀1 )2qn@zO[aK=@f(vWk8Xm [~)J@E#|Vތª8D/¾U|eOUx:p[]g}kJrNx>c9_훅1@H!wW P̪a4ŚM} s䆰e: $U!e)sZ:\ܕg͵;<k/cIS!l3ovQӊ&_A;㤜%RYe?b΍/;y/&N!@ V_,|&p4G!ayoMoq2Y b{Km*?  v" I/Pc)NW\I jG(H:u7AՈCXf]KZZ7Rxb>vV;6Ru-M Itfu-Im ic"}Dn =@@Efm< xcj /+ahn+),AhW]"IS}9dOpϟC*&4w D][.Wj^}8oJ{B9phJtgycTܿd2/ͬ gmv#~tkD%ڕEw wl47pNUhE=F3.rbߡF)a$v<r]]Spqw*Q.?o7G0IHZL_>GkG׸< ߻iX| )lx?ɀ(@V*bŬdPMi1;yy=W (DY>joJKa'nH+@ B*y{(QD*OJQk >Uzr-Yni"-m#SykKig*tM' Zθ!9@ 7, P< qIDirU$$<0T ӕt`ifzX;b"؋ ̳VHP[chz^f*wc,"0:n7qC׾dS`@[^TաUJbuok>acG>9-]2Xb&)aG8^dCtOpy :P]j3*Fv[t#7ڭQ848 KࡸT%N^*X [7SL2#O@uzpC˯Qd?ģ65࢜o¼o?]KPhVǝG;bf)21]:}qLtHY bճ; փU٣%Q0YOF78^&LH1Rw*>Ћ$(9 %'2`(qM! -;(ܒ%$Kj~A^Nwl rmK+褽<ѾrC]kY2 Cu{cp\e.}s1$V UlO2N $_- lKO!'?#'? 1ϙ!]D_%|-R)wKݞ`ﺰԀc~$%//*c&%~jK "=~qIbm@52^i{  ;Hz1kG|J[0`iwاǙMJP2b>ԯ*ypMuscyyfKd'Ҏ"z RHp.騗`1F=:GiI۰a/qO09VLp$pd'lw4;[vbUoyn=\ 4fK͉L> J{>Ӝ'&5ON*k|(bB!w)1MsL@@)6VjVj(Ue^Y`_CжdXW-zK.{qkKJr>6/S@5"-?׿0%(ժ_,LB"OH]q?e2߲֤-BɡQ1s\0"I24 # 0rIBBev`8dZ> f9Kݰ=AR.b"X٣b)^ PB P$5M\ vk9|L9T0i]K#OF%:jBD67G*yN-2/qZeأFH qteˉ11@t+ gvCnY6}5I w@^PjԤnAEtZ \StvG4 !Mj uT— x fl߲̾zX}1a|Q0E%+YJ@q{!{Xo8鴍K=j5oc.1ƁW;i×H7p:qCll^|*ug H=hxcboVb6ZHƾڠH޾%?_f舴'%)&о\/z9/bK u/hnMLlPhΘGpfku; ؞[-J:ۻ-G!>s^ާZ_w1Ü,p@T\Tg} jwD| Uok{Zh wXn˛q wiCvj`5G]gjwAx }h !g`.O{F~MB5m)PC}|VK;J5% ,TAk7뎉VI>ͮ4,im/Z$.wZug)Ws"pulqr^ZA8։tYO*Rr¹vcvr{uWg@ED%Nq-Ҫk"s 6}7ܱN vªڗy/[HĿ!GE"QnbV `8՞ouT=x'K1/,~x:pW[곾\Gh!*!hM-UŤ58 DS@l ru|^% DZ\eG5ρ0v8jA B7QQU5+eр3wܭT1;{ĦTwf.^@GvڍA[6Hac3JxL^ĖoH ,%a<ܭٶ,%}7<, sttSbcsKmcȭmi̫yƧ" TDPureBj{ J\j~ZE9HߦP9 Qu_N)$-Kz%:za. x?.@u|d/܌-OjOgc؈QY٪Psj O7dOq;{Q:>N^}`1%!@ZouOZ;U\*͡~$ȲVpz]DC @[m{5vbC9$P@9@,$MC^@,jhy^\م l!Td] 6iƶJ~`.xAlfv߼AKrV%I ꐊT;m^1˶ݿƄUdh-^d *pBoݭXSv3@EWG߇o#mVD0SA=\п+rZyx)]-혏҅G$p5\7󚰜 |S*`'KGCߢVrg[h&c lBQe@UJS P[EN`;ߕZZE.`@jS-@D3*ەψ4X7dytDiڝhCf@#pP#iĮREBx3#ӤL޵,`PUI .CBPqݵF3iCЪ`io  +pJT8Ԏ_}Zkr=;28[MU?L=%!X؇D0<&JAO_"4ɽ?OgUR"Lliz<= yeNҪ'QZGμuMGS4+a!S+8u;KeCѲ1pބ>Q0([UUtZ*fDjy+xYlHz9Fme@o7q`.:G\|Pv$0yp8֍ A}:TRC@Ea'yf\W_A؄/ ,/`υzYR~7x&"*8{Bꚏ$}InaD\T (JCqѵkoO#֓Hnş2Q?Z_\&&rYU|X>p7>ü?{@EWe>=ȌJ<[ϛgKtaK$%aカQ0`{zCUQjU+TZ8>k_]u[؁8Kl˟=9ޱo}kK/j7# l Y?&'kח YBA+gԊe'}kA"i:DUx]?Lg\ĺ!߂[mG-C-VXI$j/P ĄUY$P6{-9FN1smۍ-גkvVNKrS#;?Jr,M~;K +fS̃GsI;BQwP2oP!^Zkf3nIC umcH g|+w/l<'HZWd2NWUk 6`t) b<%I.e^MW&Ng1YU_ZɍF߯mߠ$*cu%j*SQqbs3K8Lӊhk"A2Mlim;6x׮\/aw, (˔9h2KCBGUIAdAϨY^O{yPL:V:pr|f:>f!>OcRlhP^N폶[yJIAR!{p&9kB1A11S[!Ơ y?N^[p;5Ăۭy,$MmI@#dˉ ӚkϗZ^$J-%A%v,kXuL59 k!"{OGM;kC `8"Guj=˗/n,c"O!<[9n> -A"Q%WW6.LѤ\g>hWoW%v~,z.k&2XP,8 va-^'Y6pxUK[<^{Z \AP؞mf[ݴ0Ģ*6K\UP9B|!M&J[/"&28T8bCI:1("4jQ-QS1&%wȭCTD$' Ε§zE*e쀷:2-3YՠvX'-yF0B ڗRE}Sd[mO2Y~-I hyJKEHW\׿y]G @yfۜ%0ޗeM^gqEE6yz\s`F*U$byHhM)NSHt+_UPx&,l5#6z^6/_Ҝ$@3z:Lnkrfx\^ƠT4&x]/ z-@ ~/=):-L'%* $:F]W٦mE/GG"}b[>%(8:4ӌ%}]ΧZo%siw^#OaUaOAbeuy6xGđT\DXw\L%0RLdsQg>S+8. 0Ba)U8Gm eXA !N lK۔dq-]QC$JL٧mݏ˻'Фsvuq 2X0&$[LzI$qeAj `SXi i .:'KX{I~l.lwݲܳ@+YKjJW4^-T_lunז2d{M|ssIÖ:L"`n^INĎq4-mK:$FOe*pGi,U 2޲;\XRe0Tqlߛv%`a9X! Rt9GꂯM<( sXtOk=L"{]C݋ԩث KU)IhtPu'BC7Uɤ=N[<25AfيDۃÌS}lۣJVHRYcQ (!I.EzWهV 5;Rn _[w(v#X_ԸeYXDD*/zZ|j cgio ]TTaʆvL|/P`5D*RDӭ^KIP8S]2ɖ1HJj}X_'֊ {ݱ\[r3 Y6j߈&}5$xXD-gmW_!9){ V!)RIcD+1zl/K-BQR.a! #ƚ7;,A?Amga!죇O0QsCYl6b"@B|/)]$b?q6ww0~aI-û`YEEKU~ϟId)) stF7I (MA^whٶo -W\Kmkm#J-*OU߽ݳ+۞H)j\27i+OD앶_( 9D-R2yÛ˥(CtHS~|VUɭ r]Ql 0VӼ>E=ΆȔ Rb㲹z`v2Nd!(IJI xIC>8k7+L ]M8">WZ@$Z#Vh >#%~JHSͿ͒W\o+!RYTV<%/az[yƦy Ubnww$(Tqie~7t !h2 vL|9:?kIŗ:"{h!vt9mPDܟ*弧ԷY,fv5}a); Z"@1l6a9CzO_ kIH$rC`>Z~@:`vTu鰈NUUTg9#/>U8w+έ\|uyhpxkTROQ QLaooϰ⣎8P"j{uK4 )OdF;wϊWiqNDl,ɋV9e~.mM,C Z \ ^vsħZjk%;UUUbh9A92tD`&ÄiD0THR /pb2͙2j?D G4"Uj1'vPJ,3#1YK\_!rH3@F@ vcXQ>՘ԡ hL%];SD>6aѷB|*sT&%0TVs&ŕ7TsYSf["C\%洊IbQn 䡚erWJR RŦ+HI.v7Q1;7 %"augMNƦR9-~ VB0#{..{D 'QHj-_T\K:ʪ%+WԙҿU]#cZ8nӇb&W<*Gi]]K*[8$vC]e`ސM>feP;".*AV*? EdBH m{_-Jfux_jl_ 6|Ib%8DSENL'!9#|.j'[<< ky_[: Dk'?U~{jR' %hIۗ%zي6HO4r(s`2.70{kK|J1= blg-`/ad{ ڰϩ6Mɟ5Y>ZCU8pUZY4/0k|] ayPZE- %/$rUI.)Tea#>[ؕSKb{ _WϗM^q;;v)#h3i~ԏ v[A+_Ipbʵ #tL#cRck7iѶp`W:N%xgfHu0i#Мȓ7C("@U9 /n&*pu-1.SGtS6c$U)1.w#8LrV NQ,2C`*@D+p EaTf{..8–F@w0RYk宜Vk4he>ZS { /=C]z`b E%FOF$bO+vؓsXǔk-+u*h}w}!sGxG@3.M8k1Xw珗߂U m#XNbo"_U@@+YDB4UiPkNPf05(jJ*ʼv'_mgTI77 _As$ FH}JJP\2_ͅa"*@v 2S HC}y 2 VrQ㽻T;D'{*a-4^)^>C$+rX;LwX`ZմJ,P(ü`W([U2 unw;FJ^Z;%ಱ<콀䜟(UŹ@u?clUTrrg'ÕTc3{!p9ugRm{2U1Tzw4y= CA Mj ?ZmnC|^!4`wA@r:NSUS6쀎S 5g].,c^ HmPTI *6k|]yXƥ{P1¸p{bvCDm>%HdcmbwYWNPh|ҲҖgi I .SWDtbyӻljʣ i4-+ڋPCTU½3l|p[`;Wa}e h\8f+ WudTc U5dn^5]P^O- Ct:B8R\j1,YOm꣮Ȼ&u`V4d8R"xjKǹ֯Fi1l pj_X r?(?YB3w]rMV]3apіJu^ ۩n[Sĕ0@ѣ2O ;u86BL9>ak9-ޡWuL%C!a lm k`AB^Uh:V~$XDWQ7Tu(B&*gL˩?Щ|E,[q>V`) c&ᓃ~\ޚG]ʞX['-n%ɿesC}@{|Crvw1l{.ۼk_ҭ̣K;gP#,"__)v& Y5\kMJu',kYw\kKٮE"Md6*P#+޻b1'``&J;YiJa Q.)QղԚL3 %Ej5KA&Ӵi~kvrY#"4 jKIZJ@UXVIޮ ʷs̠I%=Βx;3 @*E`xf%{C6yH֔Mj^m;vyz`ni ՞.%b޲@> Ivf̲k F}+_怵^3p^ ޠIs8mZw"a09n@u@U=%ů(mji) қo[3euٌaᠰ0*H#yd/SKQ%%g@'¿~jw"U QAp\wڟ@!R);A {}%Ggժk60#UUqb3V.l`jU_cy𫄤vKprRmؽڣ|Qu.gžLl% _9K,d e{2U¿@%f &*'ZK (nc 1vlXڱX&1(\؎o>TIFHlMq5>[GX/l6k3V?U_ڈ-v N"8`2~)8U+b3alP1K֋0ARIq9gSlah-d%BYOW_k?drWyB'QNEu= *SؽW Ԍ#(˘=oaŵ%Brٝ`Ul!6\mc1z3/(jK~ %&u+pl?3: =­EU7BJ<q#_gar_mW=`S'ɅvĞ{9ǵ7VW}m_~4yma"l=KaE'QNCR$zS'YŎǟ߃,ޖ癕*~~+ԎlQ3#>"ACbFLA)V5߶w/ۓD7䴧q8vSV|rnśؓ`[Mͣ[ZyzbEzA3ZdJ)Pc&$g.JUK7r $q*PĹ*FJ$usAL%}{֢Hi1x=9k]qq0$0S6M("3b3Fݹ֗@5\URw&\z#t˾>qŮcw;vrkC ˀIiSXV5I)yZ\_p?]SN|O4v)r35BCb[!2R BLQ_6!|K0ouP 0/K#/=nm263 H!6UY/%v0HDF~v8I jlӃmTQTh}Êv9e>f^9peW5i;lUM{i?@_.Q K|}ݒ?#"0*em絜%1dΝl}OUwtKK:q[rYOYWe<{y:Ѣ> rT"7t{2#WV;T i<_PDaIͽ\mm*r[LHh o(2ieUh=ao,FEq/'~nnPW*Z@0)G [8I8aĀv1K,v 7Oڈ_&1&M Mo窗ZZ$(#,3&)1}aHfeh9F$ 7hyϵqm ,g3UV;ᵤT N:o31b]mmj @ŏl{;=Eܲ( 5bp$Ya6A3]b~HHhk%%J4bcآYڃ$JAFz ]AI%20=>#R--6OBZ`U *1 )tm8FJ9lZĚ >Xv=Ș.kE̛bZ<ʖw٪{̽-&Zg'fV+n*!'bApƷṮM6NY\yI>Ai+3);p# 5m$:nuQu/K|U{XU vI @-96(9fS$Ąms>׍(xߩv8Mi^X`rSk*cHĕsŰ~r)ܜH՞2p%ib@]j'Ax7YHH<v9G/:)e{x }1mTvFՖp1>8~"^>k3SSٙElS :}8@ZOwڀF.IZm`Kep55v/<=i T L (6BZwmhJmia'q`^"rlzF L|$Xa,o}Ky uZ|1js͎Y/k E(`Y @֛\1) 3= 5Vy.ҸO\לM/Ta8M_hL%6ʹ-6z#EK +V#뭇6,|t[]Kc"iҀtCs]Ղ*s=Y$LnzSɣƠՋ~2\;[Q.{:-]iBʉT7̵f-*;Ηk8p)gSyYpE8 2 a-w,;3h 6Qus Y@mBH$U" 8쪸Ed]:U=$sN`K1$HX$=mclW& W+OKun7 vp& 37Q<.@+g 1b@>ֆRC뛚w9E!Ly1Q΍#q2rΩn N%tX$/a$ o0'1Ϯ;m}-:)ȐrU9wG%./cڹ3GOfE1宁10ɏ>`a Rg|)G zи~rFvUUN(|Ӯv0V?U zD'XĆ IPU!х_ [cO%f3 +꦳|eove\BS='C@jS ] >3̫b"aՖ}㸤-[bןUW|ʑ#R/ׯ͜9j)w fhvEim(judߔۙuVw,]@u:9N*qNmk8)r.PRynqdMՂT+? zjmf$Pj& ͋ZXj,,bиEnn/NP"kmRa$0Y&sjKeX1h;~W+j-H88`~@&Xbeǒ[[-M5{.=^ |e>ZW\fWݰ>vr8hkބ^' !`H\HkC,fj^{12G 6͓)Y-wtHV%JvB[B0˛ݪ|~Kyv0C-!*=ݑթ_ĬS ֩$_JcwrZJc>x32 +#9+4=$DYl EhE r >18$ݳb!.W.)n!*lb'!mZeW/j9O}Z AzbZAsρe;`74AuOpG6KG IPGJ#H\zٍOcs0N#}zܵY6if.dNojO'Vȱ.<QY7#SkG̣#~mڸ8s鼑vx$ W޴)2ڞljyg{(ؚ [IoNl8ǢHLuL%2aBα*TT#V`هposL-ڛ|]{dpА[Z?VQ 81ێlGhY9[*B0nX=@8U%qAoďȔk HJa&$@dx_{q*wU[jq!wNK΂[trekZe^"rY沱45 ˩S'4)QV0^6KF0/дu*/qr$!'㞸ZJP@u+to(UcCOT-.H\meK/;ҶMY %ہXxjO&0 E(UWzH*G1>;sۉBw9fvBe|R8iUg…,?Hԝ)} ~88P5gi?UB+{d́XҎ:TO9ް/$8uD=o=T2`g@U5Yq7baH=_Xǫsk ˗RbM~T+rc; *{ d0Act'dRK\X6<&kdWW_ɿOMCb,~ap ŝWwvk@y\ْ…7;'SpK] Pe[HnVw +D+:Ok@#|µܼ[]OۋZܾwA c*哏˸YV'}L91%WV~ea8Pv8L8#┝.ƒ{:wWU(h)ƪn[VM.]JE9_y-X☸&|]t%աTwAQŭ hTHiL۹&"+?,6E"q>d; qeZSt ha#-+(Q07j|M%6?:|86WG"g%w *vZ9j+HGyK/?e#2ilm`S= zTa!ĸo[N[v{xhKZTmReD W[P$vio# ܁v7NvE*n%_-ec5AétILӺvU|ܩ=M?Tv0 ]J`…ӗ*_(Y`(X3eTTB&"?%>*U%E{z1oqp#Rmu? 7[+9 \fu=hU,foUh`O|9W{5l7R^lf˶'~q>x =pOEpT1`{>jUO:VWw,C}k+v3-FֆHҫCg76?MimJp:-#Q~aw| ]ċ{$CW]ZTK-`5Fu SeԎ?l}E@4Epsb56pB\p"[ \ WF1] T8쥼P= R\k(`ւA2:,>F2hZ| lFnoS!l;XXN T*fqXXp \럱 I8UZgI"4oE 2[0a5]֣Td(T%4[,!PJL(8 0[aGsWvj) e)b053f.@sJg-󎭜b~ A==Il&InLE12Ԋ?1hP ?mQsgK@ g`OuB,QRۑfqD\= ,u,j_՜Ov$UOڑ@y*Տd=ZO27\2[I}"z 1|1S`>@V`d ԘN@cGT)bOA؊AINQja6څTֺ1`XP+J}y"K,q! ;=+FK4v/S1&ŸĐ#0 cIܒxYΔz6 Sw%6F5?rS۷yk#!ʘ^uC@{SPЍcuơ1\!qI]n)ӛ{It$.[KK>k۞wXFsqQ{ 4Nm7|HU=O˫[pՓlv[^O[گF'>   lUƊwT-YRJ*5(o^vo_J(jOa#ş|? ᒇQUG¶,VAG$Ʌdw߅g_d, $+eD8b0}{7{#ž:ĺDfYҺkR (EOdc KzU忊Zf,vSWD&>ǩSϋZm;Jg/-yӭ`WpWZ9/c̜շtdc¿ (xcUg?׿iǞi\Uthe*Nk@K(d[ J ]HZUGKm3t9%ڑsIE T!'AX%k :lzwή-i+ﵱ\ `G [= 9( QVe"I6F%Nj6R! ҭ:/CSd;%Q҈ɻH*\41F ~,lP%#E, 8u/3ضꏘ.$7U 1DsxQ?dRfJeOililH;1=_}LD@`AYF`d)m`*[iSհ.ّ!7ѭr,`'cRUĉ}b彖;$Bk/ K@50'SN̈azK׹+h|^:K4؊̩6g~jfӖQvzmz` #zjJl^ L eo&!";NSo'2VA*zwrzͲu*sK*(D|Hyv"j_6Ik=([2 e3yW6k[5mq}Ȝ~u/߅ #<ӊŷ ܱR*RR6i#pcs>\}uW {e,תkq|3c099_ieh"C!έ7iewr)sUZ!8J UW C@;iVMZp,EO>LdD*\8wҸ;mfJOˏvA;]`zГS=MclsH501yG j_sD >oφA|5 նY8 lw&Ax h$2pX{*s۫6QgVWe,1rן?R{g*FF:ۈ߫2F2jMjC -`'E ZU «L'AlBpƺ[ [mjU@Rb!qV.qLԚI<nrM{3 .=kATث hV b9&ް{4\A;hicZZ$```]|JkÊףKpv m$|ݵ\d Qrec7,Oɷ ּdOBH VQXWăԯڃjiLb%ooW+[$Tlgw~lwbZ f)Υ},%4u_3{6bOyƿqTS-;1N_Ilv~W6ӯw-gw¦|Y>ɥAe1+BK\{qrQH~3@X #q'^(?~C=D~Uasc6X5u `lڌr2cZpU>)_ӯZUEiS:UUHgϗZ7{L'5y^ bsz.+o&qW\1eoWV'Bj$fI¦<#ՖBﶨAvmU<[q# NgqA\_N?"HDmj{0@U"#GټW:'٫[Q eO`C D>`yly2;-ôzntJjP&^WBX%ټž* | J|cvevǴ6տf~Pho1?I3nȡBC!8$Oc ,e *U6T{Pŕ!TSA>謳r&,߃x26:k;ݶ/+ue˘%b$F$8젹*&$ւAHDSe* V &,#b`Kէ8ƤFk0pxFT8$0ݦ7a&ZP_ TΙ,}>07x Y|#v`"VO|YaUnQ\XI.aSQ.OCv!7'4 hoUOx+[qE!/E8]n,d!%@amRI^E$)a8ݳoڤ_:9|LD*8HBWDCו4O{/Ne)hf]ogYTC{?+S|q+_K䴄<]G U0Wٛ,dsӹu"n9ɍI٭X&Kdux@OTDp$&\@8b!A+-c毇ECpyNDa"4za;bhو\o[`g쌻U$ᆾ(WB -KC,bof%i$L9A)ck䱇yT[s8|C|4x-&(AT1c0n(lpS^VY_o}g[=sT԰N$A,٭RC5 X yfֶ.$RBTaiN8Kj)I(S[2<^ /Zj D5Mv Q$q#vvE:Y,R>BS5^iv=!֗\6QKB~Iism\!.OlĪ*8wH=jXQ5$ vl;|a=oS8>΄2eCv&۵0AgWx{6VT*S8iv[X&"Vi6eK(ȧ ` էAk*{6wR5[2T6Ak6YLy&>pC\촞5fo JGؓH,,jp}V!/'c}`*-QӺ.(N<(3}ލ&W®{F>q9hJ0RMK Lq*]gȭ >1D[ #| zz _)!vs̷oPL`pO-w˪n*^Zkɖ͇}哨:"wqk l<\6e5Ĕ:>ő* |yeA gB.@zwC"9-Q 1|CĜ$%"PC%"Q\g'(}Ҋl[ygIN'{D3 \qj"_5>Ur BHJ"J T<͢`G])_j1]Cg$ՙSCiEP)0 aέau*Vmƭ=$|-ug!6'&u:u`H]{ZdKԨ BzXW[й>(:ybN"{b6o4Xuxc+'+_-EH^XNb[5W^Eeѵ0K~-c]bY]W@vL-\6c'`K@ؘ )g?׿i?j)dH+gSCA]E`@ܟqYpRtt Il ֣Xܽ^X閇o٣P? FS:6-oEaC ]&bTkK%QMdMT:+Pْ zfds߰zN\XNC?]Bܩ)_&['*J L-Z0+m`.fO]vZiHck͂>FXX-Y:2]ILp6򄬵zhK^?*UګHPAƕ繕vʹG۝cK)sSp 0ZRsuei/tޥs=\['ahϧZ! d;x/%pԡa^Z 7b2\?ԍᯡv;l&F>T= ϯxuojG`U_1UĎbB-hw:̣N srQUhqAr&6q>aoΒZlz{}65X"3&l PH_FנtN3Mwp~ e(jJ'{۝N~}BihYK0MS7YRa/jNI.JJߞ"Q#.䃰'Ec@%mA",_˶e^ -((`%?Vuؗ #d96j[yf !-)scdw 1(6Np6S+\Azsj#"ICzsN5$PپN9;7¦zc tN": Z&ޅbtծZ\SBJHKŵoJT'6ňqFڕ%X鞔\[I9=o 9!]h%{ZIG"J-s5n^ͱ5_aW]_[6u_Qk8X|,! !c}z 's}l P c~#[kjWcG(U%j]q} )h}M tjem_ ZLHka!lD ppz7V{ .u\lp@ݏ쨓E״YO=AB .ȳc.j$DZ/-S]} R "مa$U4Hjݞ{<|c ,^~6Q+Иem}ZZV%YDEز_M" i5~V%L9X۶OojKarD4/伺RuSVv H8ܕ W&T)k+($7o[D`RU=`j]pyQ^6S"zf?oWͦ^ۜˬΎ6 \g ̱Co^"~)pTqdأTHD@0~&fRAm q^96ԷJt\JZRɶ< bcO؅]5t(Pǚ\[i^UAWmRuF}l5 ޿%6QDYLm\DkK=+ɴGgz YivQv U}*5U9j]:X}ZB 8k~n`*PeTDJU;"p# 80yKp@-7~u'Q4 FY@\3(k*ȹS]ɞ{ֈ U@)#-c=[{j1k[Xh_N^[S[cmKye1]Aϕcw~͛[loL K*ch=t$KDd#b^^ǫu3QXIXG0] Uî3m pT@JU Spw˾r8J '8nH1)ݘV]ծ~_4"bZ+X8# $03wAUxQ#˶ F8<7fL1}v0#>dg5vT?# FW٦}b|>:Ĺ:(_5a76N+i(1tR7B C6?&UއC%l¦617ak*W :0hw;Ӫ\EŶqx@7ߖfw/ZԦ KSᙽ^rSוybܶ/ړB UTe0Wtui0F^Vka~g34gV@{ι={MG(ĎI즍 ~@k:#M*yfJYmhh[*U$ Ucwv#,PY*TyWL9Fol`y ^6(7/~:Ȇiw""!b0֝۴ɓ8DX.ג=Fl#\TNsb  j+$ƅhIml$y_Ɣ7W@͙hus\|q./ VFYO T}:mPk)% A{i6Qz!#N E"PUl~(rE#RF{:v]p#Ǘ<7^FxHNfK2N}G\LmP~K`JLP‹][\c DUF*R+L8Y6M9uMX)fϩr*z$I2TCͿ;w{fz?]UҼנbT)k6EeMOR\*{wZ!bբJ*4F*g^Zy慨IÌ̬0264E/`gB HVzNHH MDts[̔sRtf@"1YF*|ϡ!ÿRͷ 쀯bѱz]-oa1nV1A` Ɠ9ty͸%ڝx"2"~^7riHE< 9Z`8Ji]U1,`z W P(feCHv()+ Fq;0h`AQ5o!llŘF+ή.|.w {w{CUKmqak_Z6mA+Rqe:j(U ʽIo[8k&@[JP ?ސP™f}/FV.QF-G0R+gʼ5 LG8srecgysoA'a w1g()"nPi9$&aŒq|d=ڭޅ,$syW',9y+ڝlSp@9u`r7OKiޚ^c Yֳm_z$u$a[故øE(77宖D [nE#$a\vΆaLŴfUߜN 񢢅<*<J'2'5|JPfj)꫑ +VJ!9sHj&!n:UIKۅ1 KwT'P#x?kTDt5%\?/W ?۫HyJFU Vڙ "EfMU7;e jw#7 NK8[!NU2H;xXyKW6d>n-=gtVW 78/ aUE`Wy=|ߩӘ:_s@d˪/Pw(xɏL޷4a\1y$e+r {+2-+ǯh/[e]r #[Sݣ!Z{v[.LU Ȧ`CDߐse$S\]\O;R.|޵F(gbyO6j ڼۈx?$[0r\F ֮XcO%{Zm@wܦ5^U Ӌ;RQ | Qr CR 1eSS9n{$:8zqTތqm}A *ߣ*!v=Z 6/SDaGH}6mw+dahbNT|1Go쭎wAJ$XIZ04neq q V|Y.ʝ+XE0*9; h?l\+n +d)č.RW`1F[\yf?A"?H$B>loc\"]EO gJUel4תխ$OHѷ2. -kO$*쭶0c@`~-#6M'a#^znZ [ z$_Chu.tgnnwPή `Vz'` i;;9vϧo[DѕqTu|*XKh`cV+][P{"# &Dc|-!SUg|Zq9dR[tOᯊ|J^{Oy_?'UBo^j9SjkNlp#uDMn@Rg˒%2 1{2ʟ1qڮMqV~ r (^ Η@R,%?2JE-#HD^ 8$6D6] *|P`ؓ9oW4J'إd(7/α *|Yq =ťYjNpmj.g1*_\UR_A{M4sbu hלa1jim GWϫ |DvRA@ۚdK p-^@#uDp""9!%`δڡ֢ZX"f?qr?SEBbjNJCC+|8OaT1,=+TVu+AYݿ *)׼U^ic\Amnⰼew{.Q׏ĥ*o27I*QUWOWQ0*$/=~גC|$N*sRTluGܴDZ?Ac}0,Mf4PS,qZǞIbZGb@KܿDp{8R ~6O?%vmdy|bCk uk(.=BSiy~L RA/s// $%hoV!FNy0s4kDX1VceԥA1޵3|2D"hm!TkT:*/zZeT_~|y dTmRͪYH(g]w@,ׄk[9=W\'@YqiDHt6Ncgdž-PIJ4WK0#='uz5 !sKR'߷wLcRݳ2jj&Ԓʶ!RD;ҹ*Q/Y@&ty1TILa6}؎:D%]1iw TkڪtS[,b%Nee<ߛ[tUOjkQB il5z䤒]ҕ%oUs q*>4GC(pDL 2{K숱"aٴ\ao8Ɛ)4NWj!8sĮ*"߷)$k1>:(d~ !?_nGѨ-+`sJigو6 .T"IrCvƮ`Uh6RS .Q>[et~ |Ҳ"`xw(txn=}ɞyoo3ؤDWMH !3c1hNʝ`D.l掠徰YO$+E~Rإ08K8Ū5nC=yYܿ٪J SdgG@c1f+][KvP#"el C4~-`6)Z5],9/Nrazlc~ŎE6 Hv(򋭊ke0Ar0Fſm?QĸH8cc`U6\QRan ̍K=}|q2MgK _f8Ƨ]{ܙjSDe"cQ+V꒷ӶZdPU[ Z M59ޒ6{n[bJQEpV$Z;fw;@|d",q%je*cIRU#6o*|~9ldO"vR)$4VuTy(Wv#&u{5-ӎ%W^u6ܷ8b!௺L`'3wg~5 LPNn`5]+]u@U}m&8-HL^^ 82%ҕd"fUA'M0 (B^; 4$9}hTMsIYO;,y oHzc)XϏڋJwGH|;*$*+3RuY"w"&@?_ }0ՎM(PJNŘHA?97z4A/Nηr a ׷V{l>n JT3}/BCOa C+1 $T-0fZRc bc1v?rN O^Zwj!Gp넀{( MT|W+w}iog"r1xc=1 D)[a #ϱ.V 62$d*l;zulsKXewvufW[<[j̱{T'#jodydeR@m X1P岄U$_Ef.¶nv BKcweQEFnsTdel-zE WB~%l{R0ƪ@&pPRKQƇt9 }5X\DGANBA ^4׍`'n80CbDZ4[192Q K84'Y7GΧUU,g`:k-!1#ȸ xc`PG*޷8^Kzsڑ$Q7ђ^֊>e| lu&{:VqrK;yBn8W\/_>c{8>-OƳ=0~J_ChKITo3lNWFTzo:|rٹw[菻-$ѩ`U8I7z$Pۃ`Z7U_^+mmPQ>[{"p&^yBr/Tv-n)R$V$c j UU=)` .Xo4=bA*R0PungRҗ@ɩH+'p4ZU3(g""J='@_BT{白q1d*\T#vVE{-9OA#2T/}C2A"83>6JD"L~oޖ92| v/N|v%۵D5{6ZY0S\ 47Ҍ,ks[ #{b9@5C{pUYQ+f}i\m6˹PTuJ˟tA@hϹM1B5I}O?=%F1J@oՉ <8~*1Ve֣H˦R,c{qce,\8 TXRe5KD`TMnb1&aΘzN溑k#SQ[;|ҙߩ+ |b PN('CeP= =aoPI$ ?e2Y٭ݘ*A"2 ˺9Г#~5o^Z\7gE(f E k&oYi_^jL`uO$947ZaK Z~ɇ9TSnQ(SePke dNfS l$rHUftA 66pJB V\hqnqCl` YtS6dH97QdM5V\CpL"Ilj6%TYek̕!.[`|_Y56`P\4+:&;@#V/}3'JF"= GZfFWDGb( @sM .Wu!R@„bS;-€loHwڄ'Bh=Nu4G3)5p@ Y $d;41e0ĉ:u6܁`t-H(Ux4U"D5umaKCґe/dE h@gD9h'Z> ApsVI 2y>+$#Z$Nk9{bЪP>&$VZk/Vޔ#O4=,Sw27{Q]x<[â׃29DD: nHREvKi?Mr=tLn5jV-n[/Upe+z )1Dœe\SM˟~+mKnu噻ɍEکbz0/9eak5{1?yؐڼ$G[vZČ %A8W@Ίd<5nL&2o}ghϵ,y2sF K/~@̷a=["yv{t$Caoߵaqg/ϻuoc6VrQ{?9Ί5?と8IMsMM~x *; X$'Z6:xT鉙8wW-]̢F.刀gH6כ*WK|֙S]B11Uf WX2ZKP:_tS `JՑDzj-@Yx=CSEՑZ+rr-hIKY@%KT Y}pFeyMzht |p({!PoIjk‹#H)mvzaES!!ٿg 3uȚ*M8ʐi9/ρ(jbwCpӵ;юSr?GV up|36FE Z{-a/Oʀ(~ ;jr]U.}?=g;Ǩpad( ʿ-up"S=IJ&xω<n1^ o^ acWv)l5}Jk)A@I朘Nu}KBkL ؒKP>ua.`gI˼lY$~QsjA(ZTS`.v$ETE/PR{U3OinZ>aNW#@F-1Q M؈_ >%r=+(J.#̜gˇj1 Q[GZ"UasEhf(|t1wȐnk,]$,G`%' ܝ8ba븐*{BoڌԳf&`!/Qx/ynlY!rqBL|rqjoΎ͓s#6u{Хw̏Z hX6c)8M8wS+s8I[k/lJws'~/2i"R'w@Dr* /!+ێt&C*b"fv+guLM[2-]Kߵ"6:rO?`P ZEdjgQl*JcoBLhF#}8ƢL h!xcN; Rpj4)|DeÇʖ`USB{{$T4V&Or)0/pDpF3HSKSt0s*CgRݸ  V_tt ŀl AZB[$9 }'Ba/z{FP=k;,l_j /%.7k-~ɞĀ-j9_V)Raz~g YU@9 挴*F6ʔK56'9@U{CRK)_t4 ߝ֭Q=Z3$6\oۛ R/P (~+ (NJ[@% ׺b=Gh PU5KD"SVk&שM<*2V&F:]Wwe- i%u>֏TfdiKYJxE٪Q]vh+CIx9~G)1jQ0;/h=ǡ&>pSzp^Vu,Ӽ=yY_Mu24^UMiVzcCw3Z- vg0lhbI Ŋ^|ii*Ԇ oؽpZ@]BLi̚ne;SwBsh5&YXzZ-"?qsz_* #: (0o[; WGDŰ8Rm '7T-Ut´e~fc9MՠZ W[cv" UF yԸOmBJyTuUIh8}/DtˎLFK/:UY{=n ahS#Aw,#@B/1l'Xt/`rδ; Wlc]$ڶB[ц Gp`s )"WO4s{ f1ecmh6u;g3lͳ9X ]w:3هE˲goo,:sUnoȃ9#WL\QΒ0D?7pYB0-nIKZÎ*&'; Ji ?ڃP5uUbv欏'rJ ~ I /!lxЙH8CvCƠhO[ؤ*'5%$ 2sNsw=8EBBR-gu Kd߁EC7PW@3(9܌ PeyjW/neL+% \yR6~?ZT]0}L~FjQ d3?wET͘j>TVBkMX o/8 ag0pAS#S'QTJb!OȷgΗt1vb##6@Ma*^9Br藧\6*ݵ Ɖ4~m|:{K=!O5RjKr~6S h$#Sۡ'2Un"<]k2@CvC,ikz^{YbIeܸDWk"a3 ؗv (Jg+[XX+`"%*oHYkӓt;_*jYDR'&{U^8&`@u7&=Ti .Db_ ~Ex+_Zu1K(SQauνݐia%C 6/2uz{1[(?qp -7(S=I i-s `=UswQ@5]nHx5]$(Ңj t)-NrHК2qp%f6ow#fZzx;?Ro~nOF VYp;i:u> 0\P+73ٖ:s(V[?Sϻo?,9rID SDNψOV.q̨)דE"fX`hlFfW5R)E=IJ܊'6seUxaz{ X4pLIp5V a>#qMhg<4wIo,o}7+Bܨ@L>o2#c &d>VL4_?;(۱78<=E~;Uǟa#nHWa)0o4eQC 6n$({MLhOFڦ\ V(=gZEm=˽uJZA+Lp{/Xo.Aﴍ$<iO,U$+ SJ@> @Rx=1yϞe$GRp; aTFBSqt}Dɩ%)XPU:g.LQ+S+TXzRZ1(H^ӨdupB-S)UQgܴ`UAؤ T,ay]_$ ZUƥ6y %.8M(oo@9 :Uւ9 RSEU'{!smB5w  YM32j);OPN#kPv?)=44]*Uxm *~u LpjGK陽>`Ӄ+Tjm3쪲 I:IL(&Kܳ+ B}N0S"j,j{g0WudwŠZĤ-zpPG tK08 ʌ a +/cHW];y,0lX;'սйT}#I() ?}w: ;BJ 96bWP 09 RU#fg_;O/Q ҤKlΧķ|5:n kmC !"|fwn}zyv7Ԓy6pHO:TA]T֧t/R7Sҙ{W/ grp\ w:7G}wPŕD樎l-j?9vQ$_`79i6s^u[f-j hYNň0Dq$AX~AΎx-H y^^1-e<0iA{7R_J:_P+^M)/)nUu"iޥuv#5ޅӼ&( >|T l,۴ % 3;-}})}Pr9j+-Enw.Ο.Th Sy[S 64$뉱Չ u3,ٿSa'7Rջ_ {o$ęl9']wg-@@-Z6Z0/X૪AٟH49m&2/ϸ:u-zE-he^*RZ[Pq|mh~c2787K;D 4+ܹ]λ( ABJWiUZ>E“d^lP|y~b'D8!8}Κڢ"ſ"I5@ZUJKX?P+RM\@6X@ U"&%:&Y aWgBTO"K*e#Y]VX BIք߿ 1 Ħʌ[o~d5~`0_R:H qE"GOTHoY1  K+&&kjCc'eOSCOHwh~)PWWEL I %"Bݹ.Ba~ۆsTɯDBʗ"9,|q+`9QsI c9"C$[4E~ZV1Hklsv+E=NTk^_YJĉc9IEX .̳u\g-G'6!Ę"]-U{0)PPJH96]M'}gQS6PHBD>Rm`\uV(H &b)2(GQgpAZ{7Uh:k0`0[bZqG WWq2!vM;뻩Ó 6cFK]ֽDk c͇sԖ!sA37#׃r8x8>Gj6a0%8PU

    T"A]SD0)p72BwZE6ag''[A"dTe 똣enM&%b֦:V(%.XG쇻ZRTZ9ܰe)f>wS&(1EJd69 .nvU ִ, 04nr\d#C;{4!iJ_W Z+WU9p$N2SR>j>32YOzza0È?roa岀h @lGȈkcI6eymƣ9<R편ւ|}.[aH m!6RZH'&&R5Ĩ> H` }oyԎD'UM0}k4;UO7w+$vmDPIH@D{C}x1*$VG Dht!Q}N$|JgӋK."bߝ{Z@Ug@1`jvIHc [KѮk@,bDG;7Fl`n|9ߏ;aMtG:dv9 $ޢuɪ˄MڹmD\wo`AG%*:A3>knicً~-l)o5dc w^~ۗAqJZ]RD2qn*Є]ڮ,?Ap6mH)yB- VTj)MB^Km/hֵlۻ-HWp̗x!0ȗ纍J"?h5ބ_I^Ǐ9jްfP+^S^*qj@G"Ý{ڵ ~l19V:P *keƮ>%G2ʎ~e׺rajpTx oj*t>ϊVV5)KEm|6HU'  k8̖D%_Žjs߃xY`EՅ6bH jA[gJ=UKۛ%jIw u;nDȂ;]-`EAqm?Pٿ#^-@,[-d~⮲t=ȸT>-Vm#O2zHG>^]Wb+1Bz )G~r>kr(tsL"[?U01LV"!HKKOοDڀF: X߷~ere&Y`Ɵ}8 ڜĄ@Z$a *nի:X*t$`3;=(H̼B5Q{T.h'_F1C ڛAuAUǏV'k*I%mRG"d(N_3cEPۙW2|@e7"|_ H8;n=F}5ڴ(>CU2\CTdTh3/Xv73THA-:bAUE~|CIBW:Z.Lv-xPBxd^ dlU1>su}{sCW!lNf2f[* Cz QE|DTBdgL?=x*B$}E2ss+Anwwp"'ѷsH"p5nmtE0s>LA%Y}9Skt0۶~Bg!ї`^ Xiѝͭ knXJ BWoάx rG*&ki- BDտ6Ճ@$ }|$Eg\(dpJ5 qt7-8eNX-2EroeuقhT!9IJuM/˩(:H hye? oMjC&st>KxU=_ד$0L1Ap _~-e 15ǮF_&t F#w= !ʞv~fݵ,+WeٚĄTug 0kf3.] CA:߾&LCW3W #5e]_nkڛpNPr}՝Lj Lqe7{wX-%n!WSZZġ _aѡږGI`sϙzD`s/ʿ=r}UњYZr0Ȧ.\\ M{xh3?!x%T1'jH`,;qTui[RΰVi;Pyްs[`is$XLLJ$jL;/u~}D-ybw]av$9Zs+Kv}-INA9:>uTwpgCHhD{sH- _"J$iy]^'TH!Ӎ}l/X}qP:x[|m_ |9qG#; du˖* U:o_"-vӼV|qte[5vMht_d1meګo3Yqng{1PQxxkr!֒yAb嘫_3<E/,KJBWvS;ޒ`,UN7ݘ[G̩z".ףJa%\H_#ڑG-q$Ɨ;"Bw굾60zQpT-/7(7 ]kyz^uU_mMW'SJQyb(1[}&P߃fz*d;Q+xblW!j[c*w{^&'۠R_۷CcO+eSc-< ;WӚzfسa,pY4)[]҇rC ?~''+Z`EzFrv6JLa-͜7w h>MX8 9 hWNL>u?>YC{ElEBMrAݸ3H*:-'jpXMB.$Ou4Fp0.cQ7 Y@ޫ5Rg~8XrV!O*lN$ $`aǞsmw=L-o ΑjEg+Oj=H\:!|c܈KgY{w2͡yk_1;wL?>u41[<|ڟJR1~mD6nTǹ?@ P J ֲ[ oe)I%Zh3DFU,Ш[v*i{2%B j@/D;9xXM{+;dO.SշW \+<@ +kBjÔ?UDl9S@ UqnTSNhռSƾ61]p|D5AyHxbJIe"@`H>Gf *' l Wsgy=/g Pڞ,Ëv$ ,{2& (JμoATϓ N8oWs?O/v]oD69s3PMDCP/-c Tj3&JK^iN_p-)A5OZ@{8&E3!ߔT7$<"$ub@\_駪cko~FQȴoS)N 5Z9Nok=K\`/ZZRT=k][续սZަpZcϰf9he{c;-[OΕ8A?$OHL@%w۠'9<2I C&RU,Bp0n:-t$vưo l;$@5{w MEDQ&(UQRIC-@BM tB)$ߘ ߽\g^.$+k 1%;]VN&8Gȿb:e6ϭF]1:8p϶WЊ~qre몖 *XE&@ĢM1j*)YAf!I j.l_WQKǴYJC-ĕ-| \gݟZ:5 `A=v?+)PEn@WXT*`J)ija~%V1 죎J]9 9Zn/6Ԃ ) v[H^%$ؾc'ְ.Y׷,IxvK<"<yq`HwkBP0uEM9 U~qrKJ=T5$U-J`n7 g!lʭVh;AkV#NpJiI0|JEGBl966S@`^Q g” "(q1T&&[zTG:e"P 90@Hw Xc, =`vEY+LUgˉ99̸ڽWhw? {+R/QQ#G;<0ov{&Lcwp|LN"J_ݛ`ucL؍oAKb!0'KAQF _Gd3NzUB^,j5nwagz03w-gK`t-:1fo~f.ðeo\_ P h9@Djk*!e ݇~ѱy ϋ759u Υt W쏙 ƿ,*j3޷*%Y]2!ĕHoJTu]a a eYn|rfE/ES[KIq{:`}'2D|@_xV )T \|2i e _ IJB@ֲ =n;oi^~H\($^k{x0ND,U*wUV8[[)w&j6"JR)F:ª]] |8J'[1bC`i ?TXKmji7lHO{.~XPI1$5Ci{~kE$#KE;˼{:`(s%"?>'4n.=y& 1 |ږN'9?)͘k!(3fz9QZHeU!rs%)v[0js'>!v q2xܒV)Qyc:."Qu(?/' ؋Y->p&tuBo:Lqhr>\RI׿S1)ƒe(2"bMeBa9+vͯ}&3ï7֥%wڪݭQ v{o!>n_ @kn1ml(Bu]/fݏnI'Nn&% [ vccʃK0>s*ZIQl_`oF.ڮ(l},v՞~s_ }؏$Wv&ڗ[B#|,53T{B1m$T+Wݚx=8oԖ&(wܢE1 v-Ŧ7ݸ#^"Ѩv6c|9 ϜPX*U&Ώaxm79Ɲ8>tHHA6ݳL yË͆pYe(8JC$v+cYߚn!EWLiZgY,DȎ&$ aR38kox[(B]"@<6i?YTDG\Em"UXu@Vb){ZYaKR.jIRĽ{LjiTI%ZZ^,sm`.@$FRI[^0.(FK,#lq778'Ŷ ?#*oEw;kX*^ɠv>x`D i<$@7is7n,A$EG8Q( Y,4myp;pr'd zLHBZsS%4mUJo cUoZRRq8By}] D&0(Uڅ3[j߹\.g-|7q*"&?v@5d"Nƪ0Ē N.T\JU/SбbB<# ; F< jt|ӖiNe잩Za~r2nНAx ɆI/aSj"iKu{<˼6={8[3HbɎ5nbp.Z7~DC2ۡ &q~so{;t s)etȏJWvssv!cA'y}CiK*ϱ#gsʖ:<AHm66q.uNēZ߁QxYlTz6tA_g-7\#fFϣ,NLXHQ|hoZQ6a͘1kōsS qzXE0It mD: VgI{k;lڿo+}Dq-!==El@XTE0kDF$I]i;=/ڲ&tՐQM$^e"Ds93 YSb2y5 N9:Pwb+;O-Kkvg/|[aeSî[oDT** 6u*<׏|f7n>Bn8,zo8Y՞n/I7`UvX5x,]Q]_'رUa@lUWqoIexuݣH\_txz~W܉2A U;c9Q(w`nbr$*f)@ e4U>,PoY vԸK?@I>vvxMOUU}Q۞ueӚ Ԅt&A`|DH3qiF΁u.*hwu| f@ X*} 0 ԿdR ؟bAϔ&׭P ViAX6PL]iJY;ر mL0d"p#`^ kZ/$Pě^ wiӃ" 5|yn/av-9s'{l o9tE^=ngl7 {4W]U7 ZU]}Mpr,.;S+OK,\ me6ga[sn8;M ᡵ~TUZ{#'cw1CMei̻c]XjwnfT9ھ2Ʃj:gL ~ FPG-d@v.BĤ/޳Ua/Kw(̹+C0)ċQRLUaXB]1OB8Se"J*mLN,\ѨNZmNrk%IcI%:%vd̠N 8] Dϓ9IR%!?"ׂZJ2!|~Cpki`Y^[H2( mIqX*PgsF>jW] -9a[?]Kj=j |mmdBn/ ey2z۹$X~ ^A+==5H˼ |ٞAѲdJj9b]^S"NmZJpi 7.l:O)TJB@xBH5kӌ*;T&jgCZLgbj dc +=6L"sdKb*$YZ=0kL\w+T%K8aG:*I׃,O]VNli+"޷K1}|;Q -xƉw"T;hEʪnyI_ $I?c0:e0&evnuhM2?XGdrIf9@fy6ZZLK(8A:*(`.b_,`j{9IjĆ|ᬛ%#E/@&ƙ1>U6Ze UM,lVRLB1Iuڐ+6vn\$LcmTi!|i6K!^wQ@@yJ$ <W(j"|Grr>XA̚ւ|fĽ a^&"cP<uV>~ɑd5wUBL3a:fEٰfp?[Ŋz3o8Q&PuuF3Vt{1KoX5CNCNqu͂sɰ<ȅb؉5otW c˷<]h7opQ4?ybT?|(cU,`7 DҾkt,I؝,FIEf-/P;@`mcHR-)d ,UIVöĊ=-.3nOUǠDY  sUpӚ*`]iP FQUm&''ڝ~=kJ& t!r-E3tJL'qEGAڊ"FS-WEHU_YrИ Q7-'Vکث2Zt& d)%G*mi1N^Yv5LS?V)`:*yMmqD, *V?OA,ތ} 18 8S[FGzQyOY2,_Psn@ACWA*̆ݬ琏L@KhGQa˙*K}C6oDuJ)DzDm*_ms@Hvßf3v*_UTg1Bňe|'i Q+8;QNc.kٛ8C=m5vl) 49rGyyZ༲fa6w(57k~w- ohWL\XD#G_ބ6:̲׺iͪCdʟ)1~ഷV7R3uaՃIL%2O>iy>U9vw{&h3^$y$49yYnnuIy LϬ/\{T4$T+ٓ9,,c_"&P(!3*ڦby05%6=DaYm㶰)ZIgX?.r_Nn)@K¨*T $"{{1ŏQ^<1j H}ĝo\WY%NHq=U\\$„_4K||Ck]bN!uv "Gy- F4 4yS[H.~gHzְF{ W\W ȧrK H#EZ"6x1H >?O4bR[נ+A?P=w5@,9ݰ;+4)I" XVm^U@ )J ^ f`6z+cRZ#w/I|WN.-@\CiD#Y6G/y$\+d0}+{6%>zyi,Z`JA@fZ- EJ$:YgY(J8Iyfiй]eFŁ %~& eF[H%EL M( oǀ 4s$e!]>ɭ{Z1ąEWE j'9ׁ)S4`ɯ6ը+םzf9ƫNƇtr"?ƕ RGƪmJQ5Q b|`7^T)^E,hHy p \y#$]XO,J2ê:H_!M#&KsZ.K_AFRAT;jRwڽK8!'(_!/'(~lޠqLbi+ym:1-K;uN=Ζ `ϊVc.N(~$"Qן9oݠEks5Vs0]ֈjrNpMTWCr^-b<ߒ.Wފ>I8d(D?@leYrLj;9ECx#zbԭU5nb7D8JBq4suGwL,ƀJ%{+]= ! A8M_Be_:ދq; ~s*1g1QuMK Ome#{CK\H S V9ԭ\j$̗纭_rЦ6=f{X֢+T(;Np4Oqd[+s D60(pbiZ7Q z{,dIM.m=7TuyUer[[iuk-pQAJⷕnW\/qI,o+va+97h6߷^m`2{~l1Q>rj]u Fݒ*@5֮Tkmyg}b1vcV G X 94[av3"\-Avv50#4hmֆgGZ$c !8)6-{9TP"^+_>T Pӭ:6/E+`٭5 ?9 >4ϩ6´swT! I(2 DjU`yrۂbRCTYF"D3bOp+p]-n,)Z_qebh{OU^[9?TsNkp("@*VsN;ؑH`*j}jݷgPZCVu(S%jPk:<}~%dweU ((_+о8LɈ∅Q*E¶$0c\]>kMGBW]@{Szii-e,&9&c*]6)iYvp/R%F8c޼ oS&w UE2GXrKL%f(@ouMxH;ܼx OX3ޯ1驇WtV ?9+Բ\:>#t*ϯ\sJhy`\oA0Gˡ>~r 1oChe Cz]Ǔm_ O/Oc/!bD'i7'{:ڿ=q~tW QRvY|-vnj+ʼ=IT%^^ _6 J>f `i= p0Al !-#r+ℊYյ %_"I?9OlP|5 EBA&S7JhPF[B=ˊ-f98MgZ'-V*8Sj?x y9ɨAum:HTQai>;k#nab[uUą̌J%6M;[Oiնy%괮Ton~uځAu!sXJ[mR%>)qԺdIDATQR )؛'.عPQosC*$qa&&1:`n;]Dmlx'%ST@KY*@>v2>|Z0 D~x&DCL κ1%C$KRWVނk*k !&ғM:jiLw©H&-S#oRimS;҃ cfu3;ڷY5em+*%5ua ZDTv@^V R~Ju۽w?c:1J{ wi-[Uv-6OSA@5ଅ֚*8L'jĄl0}ߴ{ۮ~ٵ%\W GĿDFs! U[5|As<>q=gjZ ,% aomʊ>h _9TGMoxvi):[Z5ɰ:ʞmRū8ԵyL#нkk hhy% }gɿt #Y/i]9U Vd׆3Uxm)Ư5MńSU؝9|f,ಹ."mVNdQ! 艹B?\zw$ ..]'jSqW9&[r$/1`-9i)Ei3MrèJBᜍ'J i廈W$K{+% 0_P쥩b`4 :dDOd867'Dq~X/,~A9甯OBDKڰyjNZ.="{,u?ΗrU/i7 ɿ$@ RKkR|mbz]0I6:&JP%`^FM>op" B 쪖62ų;HXmH!ܪ~7VnQ;s7BKa +:%*tAW_S3n DHn®Ek Fi1;D+aMEbC{3KZ""UIɧ[o%* aUavgAu`^?%>TuPe9~`ٕl&`ZTI nhm :]iĩh.|ObXTč{ 8ڢ>EiT<%@l1}`:lUXJʖ p5 ;kY|77$<_0`mTR riS_lKzs\* 嶮e'#o\T<kouZzWjjU XT$ aOCNiav нc  :"Y(5m<8E8BDLC(I;W]T'EJ$ Iԭ Nݱ?"GX]Hnlüo8\ԚT_ovv-hkL@5Fϟ[@ت@q\ 0MDYn#o;شUHo_t±ڥ7+@Y FkYzJf!$^a3oɺ y{0#ph  a(.r/8jTnܣpJQufŴ\ Da#&c| {mq^r-Vg@ĥ2դ䂄c#!~(K'^u-?XdyW5mX$8̍(Tun} Cٟ 0M9Q KZ۸!zH@n}/E#p1 3ݞ` o1cB(&pV`' #K8CN-@zsOuYdb)ZK<|s2? yZlvVj2ưTEZ ]s`ė*ETQ!1Y"m_Y ,)N%; Z '$-Ќ!lłANo&6#f!S'g a&!zGUzjP^ k$Qg09 7l1v6 M+:u?zq-Q>(u?ּ|z?e^)Z).(#ԺjÉuBDE["HBUW4o¹]GT=xVP|gE@@3C"-c =}g#1 Ͽ_UUw2YtmD&9gr6G)(|<Щ4R#b͔g$7jBd|>(3=ȧ{`bpyz$40.DJ7۽6ޣlaJT0:Ǡe==׷ȠRsPSlO2 z3*.ֹYT5IOA l]45V=/g*JYoޚNo@>Ek h.F{Z0֡X(t4s9ғ$.TV9Y8bWƃ{=NjGmKo+"4\ubwG i@2 ";_eWVaz*!q'ĸ3Ww>u9%Lc%&baTlK0S%kLS8g.5-r.&˼u/uHW'ĢHs[V[al ȡ/:]Xs E}BNڊ!>X۬ Bwݺ#34'OU $P'SW \| ib1 $R'XB rzܳǿ}.9.#? ..J|sT~ȉ"5 AZ%#|> Sq=+QDЄͨ(AεJK`McS> : 75hO$!߷ ?~4mݻwhiyl%ϟt[sr H WW@I$m :~$: S2 I.d\oX2~6~ zP+ HsȺy={𗗡b(Rt.p& m% Iw%񥢝-?jѽ^ű!>*RU<&.?:PV' (F5I1 R7DY1 >;n>SMUpH?^ӞGōm[[K+n|d9hxp( r}nܛZ T""͟(7#ZWSOKH}m.91!ˌ+ 6,7܈E _jGsR4yc~1K;֐0icbtv5.}@l2jcxe]K#U)i)}+K/F1j-M+y<@(D쫅-2ȋACVq$m3ʄ%Ձb4ñ#-Ĵ `qڴlGWr.{IZIΕe] a.sIgw@S8_! D>lxՕ7 DS0dߜ9PKxȄ$~3-Sa@;ICZv]b7M_'5Jk[)qjiwK4ڏ-JNrl Vſ*u]բլŖ5Dq/= m$O{oV1&tbG *識lu֮JĭՓ ۩Ry|TV^L?&0=+nzhhEuĨy佖$r'7SɠO.n^7Vw(Ħs~UYw|Kv)-76|1V_2Qm&;M|*`}"dI*|ɝ\Gj\F C#v}L94",h ,U )*MYlv5NUzju>:/֏ +Ȇ Վ0N:?g3AtB`SW Нep{ Opˤ:yQ.jSy=/ ؈;mROIB4?&S$ȫsP0lH4s]mGݶk[m wզ{|<~ %?C$WK-XЍRBvom#DPOpΥ$ 2MYJٜot݇" n# 궈ht<؁M6+n H=kF#I71?K5'[WDf i,bV~ekYRՁ:oO(U9ٔ*d xm,0yR y |ܵh&@cנ]F/H'X[ PC;-4 2kM\ߤ,}(뵖ޯEp$5#|?2 l G.|i)!,;5i35L*n6sDXVWU2h IB }`#·\9PXŏ9w&.bhq66[[e-G$:V&[P˱^Iosݟm9K?>:j8N~ fMTxȣQd4"k͏A)nx%+"bhOE$V%"r{fxFfb__輏$$31ts q}7e ->tjkR8q*61C;Iqa\%i.FZeH8+\r tNG,wI;Hy%z7+jvݷ͈^LPb:@[ZAm8c PAdI5z,_Z?9ڗaCl 4en-Z-`UPuߌp{=1^Ԓ/vnvlSUPtg'PU2 ]-~6%:#23`/}f86$wCRݑ/y %¢ΎpgF bA1a5{8|C->{e[8j=wςxbxѻ}-:cNe5{[V%K 5/C]KHTr6l %@8Ln y&GUΗѤe9gۛOH P %#HZΕ`/e6[b=^w!2^giYwG۪Z~FE T|R~QZfO~+&eݔDcDPX";_"! 4&D[G)A 7`O&YVA9n36!w ;ةE6sO";۝$u/6ů5 )A9~fn_fd^c?og`ZNCgǛ,3nd<">/^} ^|A:)=~Cu;oDǖAGIM_nx7=la7(0L8D JbFnءZ+*rbfu{q`r%ؾ7zbDn)ay:;8_㡍h<nbd}KF$aAvvh벜d.g$jng_)T".U QBUZe ;,攴zo=YZmV ]aV%# \ς#D`&XϤarR9yLJ_þj mm pIajËO >wmRj.ZyaI)**kYKO,LV`% lܴƮ@em*ĒTlٞXL. BX-{!@gM SIJ XI/1%a#׏q;4koe*"l㣖PǼ0-G1YWQ qSbY˧a]DB~{.E׭Cv,5axȞ!TIH wVfkNv18WHCA]Uz‚395$&=rPp"Lpg% m8Vn^*UqBf\Dt.Q|`D}s08B908{~5y$,}Eu?ڕ26i\s-@ i? D:eK\GBB&?gv$z#SpZV5;cXioxx~U~?`n!JgYީW\ ,#2Gڷw._>6`iyg}MU…9BuT"bJJhR)nl<:,1*!`TFZOB3 9ta{1jmfP7op5u   &"Rk{K|-p@Uy!0s)q\P[6 (](KiW敶 ;bnTID򉱸Xt^ݢ@ןv"%T5V-(^Eзyr|& "3;vLQCvR2G-k(ۍznF܅vAK:K,k_5[8][=` sfuߥ7~.̿.wJwJcs[ӻN{ხ`ըFWFZ|A6gGE"-*B]k"l@-;`$8?P!AP|A޽ t.pPUWq(ߦy +uemB + ?.im4ͮɀvÂwm[Omoz9I0(IQnc_[TI к$Is_6g̱7lv}Aq;V ]:4=jUL.WĤ:Y.1BruW8DJU8m"D[;H.hlSJ`kEwI?m aD;մp[vX,nazEoa*ǠAتSRvug)aK={;2gb}{ @#kU8Ui7beM.Mti{75 OmU@P֫Zۗނձ{vn{Z~ _ UrXK6)H|^}+YsO䐓QGJNYOxTmTyLUYiPɷ_v7hBL(Nշv ;5*#D[Y!G| "~EW^!xY?@*LnL9EQ)6eqy/'N2`UC,Bg/4J] R!c`:Wᇺ5Hw:OQaW+Lx ma"8<CW HYMKYxxQϒGVf&1ԐP>YJttՒ)WUv83'mE`<^ljW2}fNٞf`FJ˜ 67E-H@irw3&6]/v僕` v=0bYx)|=4@c)1u|Kr >:jik<$T a] ZcY~~ (ȶ oH]Z,7:/~+/ɸ/ |Fk 'sX`US%RAI)b NM Z`%U*=ݭ׼Q$kx$ j~G)@ߓoxTأDK/""6ey=zvJ+9M8 l2Yj~G-M5&%GjSςlon2-JDc=T10;Y-h6Ն$+vљA)N~ F-aJqmMcᙠKKm:+Yڔ>V:Ͷwnm vLF !B Q=YH}ih;,ʕ8*q)y09㉌hB˿%esWF'T& Sׅn SJZ8ԵI㒄(~-[K|U1.ڵ-jimK7;1@%l4OUֲާj|s~Wk_E LQ_*%nEPOE ~¹8梖Ćl*FyD4Son; [q伩*>CP#|(g]Y rTT6&D}` s;`oZ[!vt5P^/exۢ؛1$j>y,̗psH]߭-ZQΥQUwc9ZKw?تVS:~CN˖9n:> {S,!TCl98_(tοiOqpu ;8{+y/$ 7d)[v?'9R3E/EBˣ)؁-~mb,HlW(DU ʼn('ձ :ھip.mAݮ=(>(G !(,|XF#@U1'&V<*NIi }L@1 r}z&DR#]!<'8 SO_Xvdv(r݋# X{|8-Ḳ xr"_(o+v1A#,aNUP^K4kAQF4dĹ^m-_":1@^dLceϐV9\7)Rj+F*r su7,"u~K=R7 N @-yQ`mqŞǧgk[NQz)xh}-)Nɑ=TͫXuQ;fq[12ϼݱGDZ> *зEςZAvvCnZy%8^|N~@UtN nB,<8؃},ua/c ך?A!ב#Qԓ\_1%+"Ɂ[  hrsV!{-.`50diI| P:j=xxE\AQTS57U@ vM7[SefX|` .xakwvnks# :ַ[ uN`5z*D&-%Z-,:ov Ҕ8WzHv_ث-/Յ*'e ᑥ3GF( ~wDy֟kum5yd8r–4{>Gisru-MC2["O_hr^tΝgUI?O 7[mD-Pg*[@ ٪:>__L_JBJ$o 5 lZmQ{خ$!"寬v30%H~c \ akJ)Tq(1E DeS;7Dnujki %ZNs&RܤbgbOw+0Qcak x"ҭg.S4p[;(H0H,{JJJS͑%uݨ‚V|FoyrLQs&gR!K{ЍkmVQ0tCjO%113XvnKr#??!ll朣< -޼<{106EgRV! /^蹵DܛX!rze[o,s"ĠRHo?&Z7n>mO,OcZ8Btv v'5"8TLx+ƥ78^W#j2fWu+֨4s,f7:qMo;k/rodmb|t] 2yJĩhEuKJ萟(%%9!,`ݫb x]@U5Ok8|U?sA]$1HF'MU5.2ֺ~ 6BRl7rV%KXWO6c {W >zk29d>*HABwGxjx}Lcdaoi8| h5V,JJUZx^Ә@j?k/5DtB5Qk# rOZx?\]+gSv5>U<|ֽA{]T=tw1^N1>+OKr<18'3D0{!J2)aYoa5]Z)sr^H~Yf<&Ρ{ODpr`A؉TICͨqЌ[l\PP}WʃE> e0 Ŏ֐3g -Oȁ) eӾG*3EDT !2>u K*^SJףr}MOCrT9i;yU`'j ŭd$1%H葝/T+o2 ]wZ@CYnƙOb!>=INjIL'CáRwDz,oH.&e[֭.u*kϥ/q-Kc'28M U-,l[){2{T׊_aw|Haz~ܼ!c}4}XTk.g8na)aBOYXnЇp ` &Lvl$@S mb}]AUxdn 3IUJ$U."8Tb "F&U$S5 e7Oy-pFvh%럴PΫkUj*@M/h&YVd!:ex63dUJ|Ŵg}>K"_5l<5fȝsh\O#i]( zPB fizǾ;n'?U=o|NS{JKTV8%cS.QD?ss(+$ ;d@ Z`8s.Y 8x"N&zfٔ mZav*O~ba0 PҜ2嬖+Qqu(kb PYlaJ!IN~W͇ Ow,%fb#j'F=sΐ}Uێ]eG`(ڐ &v゘sG؜n4_ j|0濂řtDZJL0;!&:=LПDc]-du@O;1Sm* r\ $T#T|61LԒvި)-)ÙBp[lƅލ[q{N:<|-Hc%i{C'}c'u;䑖DEԎ6k姖y=7V^erӞ2Fk[zqK 5D sYa)&9+o?E[mϏVxk7w#r}C +:¯Q3=HZ1%>#Be9b ω$+-u#Tu q;PLA%5W1/,dAj9k?=b-㐇ڞj|1vYKz:#0$<1Ob@HpZjٞ"ṇTpJn{vAu' ϪajwqK%6▥"`7 68 AL\TaU?HeQ9Z{LB-IuJm(ӎH%vD4µ]uxg5yo&ҍ?aĪt,s2y*`GDo0HSvbA׈i\QIHƒRٱl8N A6s^*XF!^~])sȵt5H %wuc'R7E-f\ii+u $9~҄eM赪7?7oq\梽0cgY)<̄ͅ$D^ۃBF K+zn osa?H @RtY{˹v1QO&h*TRTo[(@Ol5m`SVnՙn(ȵ3Q`a`%&rZp>AkCb=`w4*Z'QUwS#UuS-@rd$D1FSd:ay$%”4 )h `X%CmHl; Fv p5! "%Jw}_*wCNMJ|]P=;Hs)d,%/08c?bgTxr:8S5g\+oʹUeNeRrQ[+rcgr4(*u4V C%':u|UYYF}O!&:+;B@GRmh6\U*ZA}ԟG0W']T l- 3)2'&$Rdd S_ >>NewZV)Θ~t9ǜls®l)S\$Wa;$Gٓy0=K.z}XOYH5cbz<(}| ( xU|ѫQA*DmTк=@噻YoJ&1ÃYv ~HMHU_؎3uk.b)zPy&ڵs8KE)NyqSQUca%#._k8$>8(1鳊WbçX›b!ę:1xʱN"q)u?EKtsN'zыd8D"P$>ND}Jsئ<*8K9q/IS$3C1Za"[^0@I,gh3"6N3֎_ݕsg||Ҏtk0~oBf#ۮ)T ~uop~vo]8#$dO:gZ;豭ŠSMCbN'ɄM"la)@ u. 'vgB>-_|sWd >jU !e[dq^#Q`@@js%E_6Jk >odS([#m!21=w> iɶr+WժBed] i3x L,׵̄TKiHy!*\?3?K~.KQńޖw$Ŗ?G<MtƠh $f*;(GĨ[7+/jC֚89V^k":UjuZ$$n [;C8LMZ %Ndc屈[1Z,6dHwOڃ9MߧU/(PݲIs݄"qo /~+*4,_$+>x;nGkX3vAt\ TZ ?L3aLnݛYbaS (u*@Kxro*6|%kbeїXuZ:X_> %lB\ܙOVVnRHxuհ/lX{yxl)&XE/_ F9%b04zI?Wf7TqQ4yWW"03f'݆B9HbCk9F꾲u쳕?R'ॽKp0vq2FJ:ʪ&맸YլOO~2'w% _^dr6\# -3Ѡ%|kYD38 QաԱS D:2W5tٶyWoczYIDily?YXy׹~g 9NMg %)F⟁!B hW~]z%.bX^*wH`g2Æ_rZ c?b _z.L'B^F&|QNbS?yɚM1Zg'%$p8`BJ@&_$4Xt H(P׏yַ I]J0o4m,M vױcMz6BULH;,gI_uK?xU1po]Mqe~_jпvEl^wREo[)M)k2w՞''G|cJ%%T tƚ5iζ~2[#"RլR.M_~;6w%'2O AεzXHڠ$Sҩ:/Xl}Y;"uiZR}{:Ln&qZ7;;3=^͏JQG}0*9"BL\1f56lgXE-;^'sGX4nURRT"DWذ;TJ< |lucPB;}mia wVmVa;يaw ďjRg[7#|HB|"7c@"!l'PbB1Q 4IN+ᠪRZA˞iʗ_Vw@?_FLc65={◓$NdZw_k{ &'mP7ubBk6jiI_UqԎ$9/,P:ǖL"3"Xn?3aSE!lg!& >deT˽&S=x($ɥb:"k\8MN޻##UXIKl zŎhew!$/0b-E)7DdUsoN !$D)Qje~AUɀ]~j>~4rWq}oSF(i,*`ـQWu΀]YmQMb?nYDzSgiv@V{nb;㮖2_g?o"qBv+Q#Fkx_!Xo~䳊⇖"{֓7 *`׵ãToR<O*;m`e/7+{ݴۭp1|jQ{rA'$ATmF-aL\d%(Ps !l?''?w۵kT~yAѕS0 PB/cq?#Hzf8&GtzV |Ȑ <Ξ-=[QR'u "$`TAGMM\*Lu5tɤ4% jcD <`[%I)E@5#UюտmvNmvߛvcr1s: DTic@/b+V 5ϙSRKJ^=r(7isY,kv'zٟlQb[!`,Zr u'U.P!ҒF],">g?`"",ؙ3 !6׹fYY0Y%:`ӆ-*$kēs{UYH?cj_lA$!*3[1vr>FᖒK7YbX,56^qRc!z %[#lOC~ԶT%_gܝ'Qk^޹K@v];sU"-[wH:J`q NM- _th ?6%9[;z[a}h- aUa$3DVJ-z'G${0OXq\awľ~DCxQxN,źO9m/`]$1-4tK\gI q A>e˜jcń.VQN}9]^=<7za%vԥ} ZZ|*ďZNL6?ok-ž8cQW8|0ExWM3Zr2ϙﵻ.V|j `|a)Jc׷ l-+u1<OiQZvbѕسQ>;>{sap1͂<Y93v&(Zvpg^ I*Uш(DJ7N79+E@嶮Z'+~]$W|;5w$2u@*(a)Db{HD6ּǜ誢mM?9Ie-ʪ"IG% 5UŁ" P}TUa'ix6 g^z:PYIb:ei-;$?*v`#[ f;"p%6ok3FU5j0 ~*Uv;CrCF ȴ|q҂OV\;wK#ؘɐZ 0MDFTC{buM?xi2?6$2TѨSN]+hdE{g]N1t ?7‡"ἴ3ެ%T ui*28W߃-AqžᄚgR^W|d6) PUm%O:8SE&V<1ܽT?JhG`*^]{tei}δCm^"7b'U:bhsrtZ^(']tU&q,Q ޻j~+d:DًH6u>Խ V2 ja`PX{Y`f=D8/LYŲ)~W)46J=](eaV{\T/a&H{r7Bc9ڄkk]`tuj7}">]$#d"ߟL]pĝMώ}bGkQ1-nfkKGX}/̈]^߄%8'Xlʶ/$57-vs||gof|W7P]-l"Q%awD'ZǣA%dA eb4gx Gڑ$i/<@i/H9V; vfI0Z8fVulSg[vA ߘXCp u(6$yJs/~Q[?^Ԧ'Ud} eKZh/Q71_!@d-[} j}t.Ɩ]), o82r!8;̣?" q@%hQA6T aSl[>>GN esu7g њA¡n9ߙF/S%n3C>(Bo=OU:ZTD{.;Ucc0s_14^!ڲmoJ0'4GT ;a6YG<060!ںYc"K1֊CY x%TY?Rɉ4# vGaKVD}4Q9ƴdua0DDې^ LU:#k8_q&Bd5ۭދaY-ݗ : BwipkPRf1>Yb%vuz1ZKf*LQde3ӲZX<1L;(&I(1%*Pfx6[ܥ]Pަ K ĤX!첟Sr'y'r ]bb"3&rn: U1d~je`tW[Z^IoIw3=<9,%zE?pLWRT3=ɋM1sl ?RCPJ 5*RݒJj5.tlh&{V'hGFAQ' lVxz۱Ibg0 _~bzs`- J}ۉM5w0{W"^yyl~n;_H {w;V\$*BW@` ֆZaI2Ƽ8 sr-~[o;>%Hse`ȑ8s#6Wĩ-t}7Ćq|6˴b3s ۈهY,\-8HdUٺ|AnZZ|%1n6TZT&tГC+iN#FjY,N?fVT#\[Y_I^%*?@zlWm:Ū6[o˽V-jH#.8kϣT*F8) ʆ<5 ZH8VK$x%:CmXQhSڽ!uCESBギ0ڻ݈U.=CװQpw_\¾Ja)3O71pazE+%rWfO񕄎(b#CEAXp,vɒ/nƗ˕2|ن|RX"t?QFƾD%H8K!eY,!9Ζ"b ` k]z k%OZKҶ,d쎀6QS9 얿D3Nt3C]Ebש]C| HN|l)8VvĈz=g!Cu!ds0ĽXuD9Z^ig HX%uFV#|kݵ ب\ Ҿ'Qƃ_֪kӝwH4x1,Q -ϛcu?:|"o恫SJŢ؃O-"}86}޴ZWG *:"zU1 W'I dP@@ޏSjZKD(lGZ}`6]*zH*{& rȋ?RBhB S8ݼ`)Ôs-CQ`T鬶X\60YY-e֏ :7;>V; `jxy%ҟHylGԵKG(% @^K`&B#2R6ƕ0JAD*|Uj=3-a-> O[Ɩ]S7 @1SU{hf[ [TX՜@AS蠳cV!5;A-,$BD&s"}1B-aQ8O~ 5mS"hpߜp 1[ϑTjIK%;Xk# Ц×>gq~9a!uDThgW80Z=HmO俔ʊ9SS ;#ZҞnHZkLX"&maZĽE>,<`A 8Xc^; N<pI9E-mym"1=$XtIlV9|0.8xH Ɛ7p S?,vol:XWVNժx8!JlJcK}3jv'c-Z$g/ڳkCO".?*o,v&sCL N̉4<`WuMh[g'疐cܬtӕ!ptW&0%W| ;q!㶐"j) $:Աn+j]rRlIi!c63?'$ԚG-{yb_-O,&9gJ~hց ,)>[-\|=rˏlU\ *t=lGY]$<旈KtɃvQ_;*D]34&cҰFn;)4q$wbu@қe Jb q_U~+v6?Z QWCN?Krݨ(oV$ZP:̈?2[yE(_AU544$ jzX,4bT-OY:W+$ %Z(T;"Ӻٞ,e :)4* 6J0a4SP_.̔@L9ȹU]"dnE$mͻc@RJ ={c~QLUEk]nnAihw= ZWp;ϯ`KyɦR[yh;%D W-uMGy=猱\Q9uÚ. ]@\] i͒a<ۄ@2zI6=gh#f%挜鏋A'!,[OD_j?3V^o)j|R7bAt |; RC /~WT}F!\*O3ZYK9~y2ozO9%TB~|FQ5!JiEU~7q`糟ȯ`J6Đz*o"qNTn+%'Cr(6%_6(:6ġȂn6WNv]"зeE#{= eZz?[-[nv-bGWutt뮧=& k^Ir쿘،'Ex'} 9+ݰ<.h'UyB, S@"2o rRUD߼?$D0"PG{cu|NG M t*s I⩫1\UuNk+30E'@>;f$¬oU63Fjk?Oݝy4cAB(1 6-{˴il0ny _HİΉدxUaSMsH%L }i\Ta=`gtx]G,ft*ĥ@ZuQC4LO \"EhIkVqFgc3Yҡ4vp + J>evrN- / ELX<؈sXxxakٹ]}@̕hTGL0:UKp.W(Xڍx[k#:+\;Ծ!}7/|c͢*Zɢ[JNT^W+I `Qkk˝|uY_y7IޱkZ FrZ_73J5c2T&=+bd=.' 24ȸg6.HrP% e/® /7,b.d$:pw ˋ\1&k..ʃܭY@We*U.f틵w7edMXĕ7XXmthuA9%$XU#vU\$u/-10yxn3m5nأIQ vyI䮹vAikkmMcِ6mp*y/t4p1Ǟc3,4ln"\ta/GwF[m- lcv6Pz!6ʾ_@ŎSԍ7AռS;`"P{bac'{֋kEzՆ2bZ+fAq<_z~˼8ޓum GL~j[@|Ŭnꑃhb܊ڹ Kڳ#^~|E#yOgG@7~eI6bU%YrqbOXEZ{$*>l8+]’f@ϋI >ia>'VLRbVotUc6gZԱ4N|Tyb9:soMlqL!xeC!.-)II(6(E2ZBxdwmoV<Ŕ Hڈ 8W]1lNB*]6OLRV) lԼ%e#}JG6@*{ƶc-XvM}Kd;ƾyH(|ku糀vI~GRم~|=\-%|\֞7~QteCB jK\P*hNoQUkl- T?x TݺFf  PwYh׷()jڰji"ɐ({eqG[f ጼv6N5usU_:`ZCktyuF{-nϪߎֶAdNVm!TZWM@3"''Ӷ5R(u׫+%h*ţs 7GKwxܢl(VӺpw37sOMcm*,OZVf1mN Smea +1J he*Zg)q#yUPPgٶE̛qnٜuj pO]G|J"a )bw]$R!{e)Ҟzb8SK-uH5d P+^]Vu}cGm 9dWߞ*e]RpEETT+XK pDƧ:GŃV>i;}awSC޳W–umG\ h@M^m}[w|9DTsz.`AkoGէ:ۋ>{ZDTtB"YTiL՚V8d'ڕК`Ly^%*1 umz 8-X8%E"NAGm+rr ٟ#YDړ~8OA6D q'Rd9߰{?CcE"y>-gE柷O[m$@L 8dSUhwĮ%)Gl^Pv,^]_Ϊ>4\EONDO*5,GpJ5Q*aƮyB5Z8FˁKoyH_CfEanf;xeCt^a",8Gk4h ۵+%,m.;) ) ({A"\,#_ibFpo*'-wE8;zy,FX*[moN9إjR.(ړ|yMxnqKBVE~MS GCz3;uIb5Ʀ|PkXޡ^1GR-v-3qw-h -ҟ )K*S*$ZIxTNNT_|f{Ͷ7#)ٝ?똲Yf\BT) ŜqDUpd4s1rhT&`WK\ "%zs^ۺR0*hh![^9-{ߛN2eLZTp}?RvU,;1Z]RjC _hUώѶ -),H'(֢t^tO}KO%. 11(y8\BM>Xړ8d/}SxS"&jۍfoAZpK -=bQ%1jcl7_k 4Ӳe{`'7հ{i!g) 6X8?M0'XTϨh=}|ů@K! $UZEVN_(=X}:qj J }h!!hL.UHc 5Ϳ&Į,i{h+SU |Te\^y8o9E1PN˦ʏpOgR0ynr#cH D:p~'}|-#g& vo <$ G'8 O@8DD3Ĭz9 lqGpptp †cuþ",C PE"_>ψ,]Sy&\}^1bP8t󏇈_N6] EDW(T5)sRm*=jnu,jj.Y?vvG j_mje?=ծR MUtP!1JL4oݘӜCɘ_RۯYK6B?]uxOK&l.Q*:"aE$;z6mo)3BX^ONc#lV_"s>3?pm?m{vFE˝Yk.5~+ PA Q]HXfUHTIq*o7,b2hNHą2,ou&E-t!ƒV[VmO`tޮ/m~-;lJ^sM;cr[j?~jp lh|fTPg ' żxhT%nZ%)ģFXTMoY%KmIFWNmf4XRȼkAmS% 6 /`gXr8'%e t'vI9{j*&|o?}5٩AVlp'[攏3ILX|cu5JnvL.eESe,Ua*.Mq&d \U5-^clsQ (DZ6)giw|ĭDmS"ufZYiw$pil]Rx}BWsH{8mwWw9ެTraVLLE4](Nc=s=o!T[X^CK/$|&{v6v@\{hrrk֭t ?WŬ6B_on9TOFmqάH\ h#g#-P.]`3( ݯ?nco!gX3<3__`L-#;_j* D>W".y%NlBmuny+7sK{S*vE\ Z2[ eTے[)VTSN^1sGEQ,E?G "_EgfU:ÉFV;]qrWnZjUȡz?sE5W+B+U 0&E'c{\C]++{'?od^xl. Ρ2ͼ_RlM4^lUk9 ^}`sEi+2M%΢(g ;*nyKө{4-RL7N'It0`dp}_)s+q ̀Ή`{ߟf"M4諠z3HL18mik%2VAU.Ӻau_JԶȸx75*QWeыՇ\ZOv+;^{LMP{|GOvFsi:? 6F4&CW֮ĹN~ÀlΝ W߄PP X <>/mܕs|g r-XuWRfҡ䒊zt.x?0`f}hB,ΣEkGӶ-4N&lY⽯]ae4%A\/LIx; I( Օ ;& nnvy] M,qrOrm/K^֛?PM>*BTMcE{h>7u%$8 n(_m;xL-}/b];Q27__cn+/^ Lj0*~.ύQ: ܣ"_Rg1c_Ucs}%N9*l-|++瓌1׹HdDIT^։F]Ef0X7ș@#O/Ϊ@́&=+]A9M<:j[mwb42v7ǠF~VM>qKUtBze~$&81RX}Իk,͟ }I9\L(y.$ dDPp=U: 8k\ a3r֪ZdYQJ;5¶ϥgT2KۃdN<ƞ39ܜ ;aۣ~iWڄH<ud4}z'Ef&.{)d-Ͽ~y j> |7\9pp @ؑ@.t"`k7Q W3uᘽ9tan-1ײ'H* v\^Iku 3dLۮ7ވjѭ]ۆpP`:? t߻;w|"oOz 4=4`fm~=VF,8 0PO\T捺2`t5ePv=~B'0h:A }'s|dMxE c/eeϚ]ct ۢ>$;aL~NPX'&w>,S.Ϧ 6Ị6*^& [ap,KjI.xn]DxLf~3ڭYriY6Eo ƒ^.-F9vU?$p{;MGG%E+-wwL } cb{#N%llz'[[\.5'/RIu0'Cb ƨä́oO#aK[  ݅CJE7[ePZD,ļƁ_u4RjT!^~W?"m DZҞ 3f `+\rzY5[%N;$ӈK3 9wIP RJ'oSٟ)S:v#HNq_PaTV%,L$r),ޘdEiB8)BuvjmG"}$"]AK ܨɺPQì{bUJI1`6`0=S ?Sd凶9!Bt} \QX2iEd']QOIskp]X8ukʕ+bpȼosY3)Q*F7u*"f8d? X,i VL&I igPv>;T[ SoUdv :A U~ 4M#wn Ѓ@FdjwPOɡok&0CDv syLܭ@ikŽw35 K(sUNsz](Ċ懍y_,{uS 'oH9/8&ާ;e)mE׵[n21A╫I2L|IT po6@l3؊ĕzoO l^mQSmv&zI*> u^ ~Vչ(Tlq`|)Uۊp^=v U(u5v'O,$)v\.RI@zNȯA+x=jxF.WVlaGReD*9NRbFwu06=m1w>eq5{*&scۆE!Qpdj(_i9GZ*vp7cnĈsmh*w/*mLb y,/ Jv(X"J0Y?[Wp)~s~H{Bί:v][38sjߎ zn(H@2$hחMc7tc鸞GϿ\`ƿS) +ig"/"jw"]EJnWLFT,>LJnop{ǔո37ˠb]iT8G)UT]*!cp[T9 ,/mz`I)2GsAhQdC)`6_`>bf֑Tvm. T7K)!4aKd}8>L1S!ƈY6!b/+x,M\Z=ԷA aJ}ݨ {p Zή &*z Wul4M^dmqLgd^vtkk}0>j6WN.yk'hƭTJ}cYX\%y>Mq:;kJv'8bwM/m5Y0$x;w\82m!F q:uƃ8+vYk56@?E{ރ!ws:z=Tx2a6qSu!,Ydr 4/Y8IܢOeQƷO y#+bcseV(UHkuj5Ef52йe:"}gb5ݭYWtEZuy`0k|)>\Uy`Nݽ%)]Q7Ele(8[xi=F@`&~[iu8RҙYuk'qgSξZvEP|upq뚿poRWLB[{qp㥓(çPUsXx[}Vi{s2ѭ~cՕcsrDbwEy/Mvj J_ ;=ڮ[?7U1FuVGSCí#.jcs7:w:SmiQg? @`ʰ^ו)'u_/cE‚eM7j1b |Hz7xV[EI M|@=W0w0 貥R;uEV$Oަ=s枵1`oہ B2NS0!ZGUC?6QySWzh n^6HdxA_I_^ ,o=';@ؾ a'7%N,۠<;ϦStM UK8I"?%: 2 u ]Y=nY_\g|]RsoѦEFZBV]`nAL<甶9ʤ! 8^[9v}R)4!$. 4ݐ&=M''AenymnO ܍ Me`mC]!ѩԜVD,heL*Ѫn*t׍iQE5@nי&nNcPn+$&ƒLƈ鼽L9s7gg;-m+xK+Ua3}S}WfQA&$ǏWܝAY$7u괜 yڿT;jZ׿} X41[!l}q3Ʈ% T.)cSԂ \.靴jʶx 4)Z9ƎFv>K_NY1&029ZD\ƂG1Qg^p‚\$ K^gڹ}\ 78 YGumHr|lλdZvWTfCB )Zms|(ʖ-׾ɉx,cUh[Ld"/߫% =1s*afy@! ՄCwLnuڮ @jk$d*uK!mGIdİuTE7ג/j j ً.a~^rUξɤ*LLX00:TN NEUP9 !Dc?Qke`VpwuJbgp"ی=M7Qu)Qjʁ csˉQNgn 6R 8Mw*݇Q uR^瘡CU&>:D ' _H{.`C-c|JMA~g2nZ]>-, sY*]ͽi.goyr d[/1/Ɯj<~!=84)y$(,30dۆi(wg YԪȴm1壎ߢ<|1_+c)RՓsA+7_.Dz }w@ls Fnן mu(mB4-'1Fͭc6o")1GVk!=l/Z%JNwI^z$COQ/DL9EITB|zp9 ,kFʐ"g+jϭfD [>{^;vJ;'2wP+;t>q-MYL*{᲎9W?a)ծ# |YRxC:"=`~Idyx?ov;ՕRɍ(Bg {ա/`e,읖 P*3vT]'?a^O9-'@U rǁ>1 cb:b*/̥P^*1EHFu 9V}e+ O^P|MpwMxfCi@ARqY n5yubRlhg@:Vko3+Ek8xϞCU5J¯ u"{}2f%F)\Ϥab.qОik2C#xe~Zsh#=vw!:l-=i v7wq:"8F]SwR:us\"?HQK䳼%!/_^y-Qhu["Qg Eo׮IÕܶƅ:xPnbJ?N"\Vŭ2xWs QNMLIN눷wxʗ hKd w( ^ p#tԄ|w :яe*wLKob#?W&L4f1I~vh(s8rU:eA_5*cq:o3[x$v, Q#.-WU 3vk,9Gmu_@9]U2$abطN|RqjN| !eNR邛9n2t ؐky;7yʔ}OcT8r}f|kƎ9Hf{|uRl-ӜQ<5A@(g8pe.6_'4+(6[Wp``uk.VA-Cw8g Kp;] 2?`_P+jS,y;$+WR\*D+[C|"r:/oq^Y_,{ Z// X<8-{w h,-V[W? _%Lr96ajkjc]ۄ$sI(޷Gq_L&1sO?;J>0y|uv̡_>5 EaF⥷jOrJy];SF ( u_8l7 ;wȽ'+`4߉Pe0T(pe+ժ˺uxI[hWjBDF},IܼMFNUZJ|kbbwŕNZ6BrdՁ|˜J~C1OpA7&dTRr*=qђm_|7Zy]Z=j"SQ|@|YX-h5j]2ͳ`h|cs1/lm\.+_ Nl0-'u'],y|/سjcL۲oMu8Kvʞw!lۭg'>FىN WvHQ9;ܤ5зN\)5zr.S{tC6?>fc 29y7"L"w u{6IنҌ/"Yߠ_iPÈjȦy-$%A.=M9 .Ϳwn[HzCN2ݪ܅gz V

    >6OsV 凊qFs^&\)ې0YlމV.Cvn D#lJ} L e?$Osz4e}/Gkޛ9v|RmOLrLN=tF5t <(&d*oϭס|`W&k1$#?_i`s[` A6ppfGaWD[ :l|?Rv<~^wQ&bB ES]JSC~5QV{h-6=]D?8ˤ趢nd|]J쓼\9c 5(G} sª(+0 ܂_Gc-nY }?cr5Azŝ@TTOoITC,S9-AܮJ?ׂgq,E)g ϧ5ܞL1շ33bo|>Ky?ة q e/aKlxĖ"YQ FOyžS#uuƜ,cXG]lUr{]%) l}', \]6É^wv%"iڔZx[9XVhR "$g[`ϙuC&'O{?5,\u6WF"o1xĸ費lIBԢ4mUI2 O9=vPvRd\k!*ٓ^s#Fg˫T&lNl;8S-lH)=l\%6Zx&`g%[wt zl}=jB*pM $WjӒ{ӲcE0:\Yyu /R7=w հ*~APmsW?,n t"q\Vm}8v4e˺};_.y_VgWVVUVVpKCOlbw+.;@A*P+F5Rʖ\h}ڳzII sR"v"n3!w:SY4o٫#unzlu6idrr" qF3|Ыz{X-*Yi/׵O2+k'uޭu5WN %L:e㖓wJ9QZkSd3CjF:? Z_P}ܬj隓 p Id&:~NtJכHJ}Vj3c(j[Pf>z]UЁ_a[@=)5TBkJ*A׶)A7v+򫋺};ljǰyVW2yy5|{2)<&=3\Ͻ0TVФJ켮&L\&7WHH] [N;@plobr_ )mb[vrnW:pMlQԹY.ɠ>!32Y:6l:j=Y?#Pl o<]kyбTFnLAK^㜷lkܖRXʜ|ȕ2\uOT4u<7N|2>Th9q|\c}ڂ vLrFR.Q ^E5+ ÔBtq"D6;I3ƣZ\=x#_ѝ cQȹJJP~ ~*`-aZ{fAy:1~05RFEj["k!tV: #R3גּP4Q&jvtK5܏0@5/&k"{9+ĺclw EoK>,n3NFi«Bp f qSꎚYs'ha thڿ{yJ5[1#n:&]k<țCm31DuW+DA$$M𾺭l zï.[/BخW|H廭QeJ^a t5֩PK$S||&O?z%]$#!lOIG`BW05xoKXىow2 CQ<‚G(=xA.Ƅ>NVap/!xHISz,01}DVA NpBT;fyld?.܋Tr26*m39ZE9x ?'LeYOEZ>G~Kι{2 wG--;N څ罻_֟.!q%=0' 2VLI?c{Wl&},bCZFAI9 1]!qR/mԕ1^sIұE4f䓺?b~W%wF ^RAoCJ*Cu{P X4Cฆb:zi*"`rg |u2틫dMjw2ٻ낝Zu[;O4Mmw"196gX)? XQ~ 窥nK a;GGwܡy^k0AD&|z>|G9ПP#y-D`i/99?Z@a /S0kɆů L^qG'(6M2HLzV ht$*310i誥}5Bi"Ck2*dzOxO UW 1 ->Yb fy>-ɳUVQ̏(64A[!s{ ӗPK;($BFc#Xyo(0-N킖r/tV|ooTЦC?TGFǠ{Z_le/*,,Y7LxD_1AnɆ?Um3-mRn)}]jM-Ԋ<\ȀU-Ӷ euc$^?Ј/Lw3Va+kX MRbukڱhY@g ۵^JSfu$ph+HN>/>AQO@sXl |CɧR+^jT (xݸKfSʧVNke(28,ܺRJ۪[2ۜE%Z@#3|U>Hç=Brx8LQ1wf`h#T?D;<4s\9}knA|_89ex@mS x<W`#M|`">c g, !gVC4| JD?BLfx:/Q.˴1Rb^{V'hMx=Q'V~.!G*<*## Y9 enjtE,]dJL>dJ,3kɝ47јwt=y.E[T l[&%{>74SZ5#_nPd?ׇBؽQp9¦,v,k$iw2QFmYu lB4t([0ռ_VZ:F@= O~gGTڞ ~ׯQ)dI";>XQq!I%JN2AGJT1d:ܖIocPXzv\w`L?~%XЅ ZIS:usHjᛪYeQ@7ʠdT\@W_V!)-ZzcL՛C[n&m!Y-|ui A H%ak_7n\L^VXqA^;b?WrvJu ^vsX@C5z<T)!MTr!ǡjċ) k ;?s~v*,7ۯ`r(>Q嫶_RrLCɳ)itUJ^C@ψe*SC\Sfln{",6Lno W6;\刺V(ޗaKG)#k.Z흁M?'H7!lȃஶĬBi?j1c}ָh'V~`Ά07I$Stiz6U_kA,\U У$L d;CP'ZÔ0<2-*iT7_TD]9F]UPrR"<ٍ̈7!R* jSD+ !"Ǡ 1`$CE=Ta+i/!b4 A馏;\Aljt"Z{w?po|,.Qve<_bP' m{w*=e&+c9ӻ -]4s!܊PƫupUIH}d?E5?GHM ?~?E䀻1 ^1azMeJdklt\~yA>.oќ!8KM:wL[ Ӛ-`[П$)U:X2Z,T>" pgt"AЪd_A;OwdɁxv sy ?gnOܸj[cwEY@@S@K)bLOX嚎rĆqyɩgI6WϯP0#zC6ncc,q箪_37UGfv 7/{ Z5ȩa29}S/$_9Ff@CT<@!*]*4~>svqڧo)a:qM0njV nlAw -Lܷ;o G5 Umq18Zj_~׿럏?=~dKޤ]5*ZjV{Ͼz9C]0:є_4wA\" -z2 <5_J|dʍssJʯSAk-~;rTѨ(]_=m&ױT'_[EΕ/香۸ -ة\w"_)s{kۭթJXdv@K5jh'1u%AMRiUfcf{BʥG~F D; p\yGcZ81:6 (V$EgOTڴtDnKUBRTЦ -Vk$́Ë/*c :Yfoj'?їqA5}"1Zg~ Hon&ot hM&hm)'SJd?<\!Ə{/k]wo^u Z>ʶx 2ۏ&DIkequ]wwmqx2DU/-*?CW<,(cS1Z w;/ NBfXuZgXwƼ\@E`(9:J7ja >yB:ݿiHam}a+s#-,+/8ZئF ˪?,lM.8Res<W!Ѵ "=vh IH0 sk*Ɣ}|{,ÌfDX * sRl*L~** yoТNybg)>],zju=C9vYgnVA`&ބ}@oD6j lMM+ _o.3Ȑ&|dKA .=@nÒ79R1oO}zgW{n"գF 5v9r/SUJD~6\YAnq9$2@pj,*bs JWأD:tG1Ev-N m\&ܻx6.kr&w ޵펀EѺC2 Эudjb5"7_Rv6J$@|)=F+cu\id%$-DB؈m֑l1k?_ }…F磽~:o> }|E w@n$)ZT{b[ܡr$I 3Pǒ;&/̛4܂WBJTHJ~` O2ow#p2?Oϕ׮STErL#QP?3뙇SJۢB:*#M.3l2cY_M\8J$L7˕gP3:?`}wTb 7Ή%Φ.Sɟ7)x%/HCr(kKْB_ ZHEmۈpk= ~.a#Bd0&򶠵ضEPV73h8P/4rp(?>ZQ%Z;GH  S B?]/+#7F'G :\x•@7pN=^sXRE θar@by@udhqJh2i\mJOZε^*Hh lyx'*\A>u{u='"jN @;~U2|ÛL8W5 ɚ8s}dpw@*h{)a1O&9OϟSoXLs [zЇն+572 z$۔>=HxΣ4@LMŐ$Iߦe{>o KT::wg2^t<+|Օ;pF:R αgGp9x @3H,xR1·nr%%]zyvU$Qt)SR=\'jUY`>+/njr⩞&JAK='$rpuI54AN'wfx-bByh+͜s@5c_r'$mf-%*Մ_O!R/Omcrd`saB[~fm;y 3'/j@ BgںHr0"Y>Sa /*?ͳ)9W%PF.FݻKہ U/GZ nR؅%,,WoӳQ{=^(EGbA1cnc A87IWf;mbо]:yZH\9fKod]ZXb+Lgs BaOԝw -s=W);VLe98WA,iXOCJ-L z,41?h@%~[oDwl"\N;mr_cZUG=ggWݐ1HouL0Y[/Hk2iH>r-Ps¦|4J1[6wuBd6Y1:49)D J?"<[V+NCRfgLݶ#&mتjwz7wۻ5J-.Jh 998dv .X; ɰ "i9;$ `I^ ”n22uA:VG΅h< ZfF SP:GL`dJ/墌=Nr8cce!sPVuRA/Kyn[,L,,hjb)^U|J<; %lSVwmTc<-\?x3R&RH0WWfTB:-J{Lkz 2>2/89ؾ-`>ޜZ:d4(L}/[!*ua_ú~ Fpb0f k*w_A1-{]@E nȎwNKS}N\^Eޡ7oҩb.c~0)Ӈzþ%$U9~=rsћaxbN>sxf-l? :Fўo vx,/wETCI^1 "_MNTq;ZgtcKF@n!~\o b VHrGp5;7.$/?;whd*p2pf_ l; &/엑1j|X׃ŷV'>wMt`vvH-=x VH0t+~7{ݠ: s7^LF( 1\SnjE}-Ar_rxÿoQ &%/}C S?<eu,uզlqZ{sgZ A+NHOpJZ*Iddgwɔ\o֭qv&Bs  AಊHAy ݠuF O#2!7C ?6{$bPz6x߯RzJ=hiD8Ci|m!L"\(D?d:0޾‰M5UӼ\ՙYހߡSw~=;呇.u/s\on+TQW*6Z Ղ sዖ/p[¶0j6!8y+6e-~ ʼw9a9%w5 6׾2Y Zx-c |Ma)!r enX{ =N<8 l.@# nRvcp䣩>BQSU*ars-sbMUgem .qI.9Ni*%G#쑇Yjn6Au[lR|>LCq rE}|zஸAk>}(RvQTCcv#{uFJ71C4Ʒ#F8ȿ1mN}6[|߽[+|!H>WJ{ݱz u6)gy m=bMۻ&T^941[ם^wڢҕN{?DZjá0^_~>z+9gTq0<xROJ#k'qwq0!VJDl`5\r~~sM&b> IZ[B: x2iǃa#jG5^cz՚vw?W?o~>OvXoQiBk@[1I[[Y!H&褋/fWIGvP3.&M87Pljt9gg]YMFWЙU+g!IVmR=N-f0AG6 ^w>g (RfOD+SA OB\MhLJN"~m(ML+gy_A2"&[<(H('=&x"J lWTnbhUZnv$>x.yd q%6ϭ6QgS) * \CM6a;$cC~|u g\i$@ ䷟tߪ)]SbEj&#*^۰7GyV4ߘAඡ+Sk`כ =1{V6v“ue;hn =#)=ML4L ?<cɀ,vx;_OҬn$֣~ͱ `0鑏Si.~D5V,$C O}wO}u29'NUjJǢIY;gi5bfm! Ҷ dHK sF.DqUH-ZB]ts9Gb o}u\зr0)LqexcN>0uU&:? `CU㥴qrȍ`N}e ˓5]i>&ó MRWΐjRTIpۊ5(DlWQ n/:_,=>:z8-]PX[xŘunO-NW8hXksݙtZ^ _O] cբah] {wᯁq绣5mЪ?9z_"]ӝ0:)2s6rg1hal<6`,{F=?h&߿I>ܮA9gԕw)n 9'MtQ6CdW|asB=NxtVv,Uf][K Ln3H5#ν,nZ& xR tOesZyQMijm Of>hn/Ķ\|9[V^5lK!lcԻIjiMSgn~$2p\xWw+dT.>F7 􍱅n='ª`ՎjCTw<]9<ҧXf! C=:7KrTa| u]{3ȕN1yo&fԭ]08{y-_3?4yP{/q}れ?Zupf>.5Q3w uT]s!|%|c`l2YlKqDUe|?==_$:b+x]ƿh*2 w.̮͸ll顊ĂXёIԩWΰ"]'LHyg[|έC{|;c#Qki;v3mnA9.Bsۃ*Ne2'ŸE%#|:Z#<2Rq?RTV28Q7 x]7b MWN2`/ *?Ryz& ^y ̂xxKbz$<ݱ(gK~ *ǒ;6`,ׂuVb!>56Frvsjmo/EcbV-8x}s|7Xz O I*.\~7LҼ( Ab f]{S[$o46E~,3n P3;#t %fg #ʒ@XWbrM$M|=wlG\&N:7,$|XןH{QwqX݆<v;ڏ*wGrtmH9Լku& :8O>VopD[\m[ H0uD`Jvpu5OhBWxP;Hug($] lBՉH'HXDIQiu6xᖊF2H2ϧoqT$e|cKY5{uh$y SGpM[@YIcWe}[WԱpLR(TZ :R)W^@ֲ|pn:'4V!۟o;p!5+5WEBD+1 R11z} s7aSZXPa\A"[v2;\7S+".]OZ̪@{Ώ$.*[oܮ\>9gr@=p!8[q{tLJmvR RBNxU(t׭Z:ۄxn?:8S5!F>{H) ql9i@)]-Igʣ2Bϩ]JbuzW~5Y E]P̾y|1\} Jߝ9YW?o_$n߻I=Ɔ=z -y @Մ tV~ ;4oij.<_7"-5n1lwGF`-)dc^\ldq2C0\.Ll߅BcdU㮮_!aIW=%?s8Si ֔+5 q{q :ia2nrd |T3XUnBŞHK,&. M4Vض+,NޛFm_[#ˌV^[5xe=U[빍)wFRwnq;ְ܎mϼ3i |ErJZ]+ b@wS]JJC͛ۇn'6iITNWPVp z| ֗>J><>'|L;b*(,o6x 0Y{ǫ}NJѯ)O3SԽU-kBWfѱ&2 K?Nn@mBra06P!SԥuᏜ[?z x0?|wڿ[9 ;GDL=)1 &#}n,O(ō/1wїF'ޫi );{?:RL?롅j4kZ3k*ؼ]t^?nJ^wtl4P ~Z͝UJ% T?@Ex>Fp "Y܆%Rq(Fqqm ք/"IYth`ֺ=-wegm'Wnb:e^0\%_\]K>մL7y_Gw6h3xC7?͠+-籿Akbga ӱ1x˕A (1 brܤ *XdO ќrl{L^wV*~TFnCinjbX2>aabL&+P(5>yEDIDAT#U[}{ àVȻʚVp(6L_ٺF$ŻKb&ɩ'{9, B櫰:Z_6vF%߀̝9;O L۱>]OzDo6*fS+.1P#R@~ݽʩW?/ E0k;deu8nMx:eE)݌نI}nq3o Q(i Cd Hv#Wj,XlOIҨ{C.E,eh&0g>[t7Dޫ)(%޾q~IrR]C`u)pþ8 g?Q1ŝǏb"xIr$&v>)j:J:}s8AIЎONg;uïtoOQ͛\?}%O}HWuu wq}+eǏd1Aͮ͡hOD~65ǸSa[!Tq#fw&w1pLSqm_-mMqw@)坧֍V'c#c_ݧ=Hr8ՈFӿAPȱ ٩ùG8%GucϏqk1]". qvqKv]ûUocFWќ;88sHGpȟQ˼E-8.Sou)F"_Qק(CJ\y_eJcAӢiYs_~?n1H/u{ՠa=[ S^9?t/ 77 ~^ەf7bHv|L=J V}A_9 +nю1|*^]i0׏HHWt)Yu5*c葒?ם261%]e: SzW&np!ww uu>3d׉.f /D^M{t"~:R)=*3I'aCy[O(+?Ũ; c^ΞȪ?M)y5Bۏ{`Wϻ ˧v?Cv7tL<qyۍqOJ4WV\0՘|Q\NFޒ~`~_U.%2g?T@2~0̻G;aQ5B3cri)TZ47a OԙE9XWWTA k6X 8,01?Cq¯rsUq*blrt&F;bV.'CAY66 e]kT .z`Ӎ;g*os#И 7>{ 8ɑ$q!4J'Gj2G N|ɹՌ>H3䂒>0cסhھaYu{U?@PmkjE1Wp]Y>٢*>r,ԑ@\qM^=?;B zm4_ogxMuPe߆t*E(+mil|{ Gޭ"QI;[[9fcŦ.L-Hjsq~ k0/7FT (*_@bEdcqcgRL/|rU ρMw:#/q2'AK\҅1z\_='!۵onY=+Q_~RהjƅytpWrBŶq5|4 Dŗ?}DE3S'q} mO#fni?!3G*^Nw t⩂/'207[xJQX}ʒjǿE&t3MJLmO\ɥ 6 pVVX2Br.ʨoTQ_()pzr)rF(ju\и{ 112Ra=MZA zjEװ%v<6jj%m@p OOO'̢±/0,T"ܷ5yX3Oa̠6X$Iõk>v1ئta_ Wo)*c$}[/M +?686Dk$:@r F ߇+F \A[˝Wf& oty ӱQ |x׿˨"Pv!o,K @laxra~Jp.7 ߉چe/v|ض|hL\z\[/"nLD}hvZIּ87>n%4\O>Ćv W ,J._Pm}EG2gN-F&9{>-4 (S0v$Ǚ xPKۤ%'0?ڻjd^3g)ڲ?[XpmJFmJTrs`z<:BlL^}pS,ԛo Ղ+bZr_'0k{xYC-N86[C՘TҒ'7ł732oa3$Ov7Ab\C`Н@L"<5r F`^q`tEfoy#fw01.-Bpt9OxG<\-(u -@v.N:WV^':?~D7Y5t_`W^˭YWyͺЯ ,ؽ0}&^fY|bA $&K>SKnǙ+)W! ڜeP0 U/W)|=/t) vka[`[pG^[(q.5M^asp >FBW8 ^hM {Tm!kᲟ5rInB2mgy?7{a Ac0HwY],J\/|kcq*WBV$b"(Cع:^otd H-h+b*3Gz Ϭ\o|Λt,vP?*]u`Cm L xn(^RMW`n^(tEu{M\"J`63v= ηwjW\ЖqqD;`8 ])9/,]WBYދӉUĄs#ǁ1ھ.~&38Ǵxyν,6ܮ)k>CU|{ࢼ$'`y}UWʬ>ud6U͹Ff ?$|uigtJ9nO#7Xzsb*cYZnўe?0uq]·ʸMWugyZ+\U`4W~?!K2k ݪuP }qbn0"> !܅ Ϳ\W2M8"ΉWʼ!S[1~r1z]B) gʋزУ:??ʌ}JQq@įTIתdu[Ql*5aB.N:s@|`0+:23csv>Z 0nmQ46;T+IDIùO~-PYH,rg D7YaB^?pe @-ABPSS_Y^C>l(]vbV8l srhAOqczn<ȼɤß(Hnp|Xtxc +iuX}]Ǹ։bRve⵷ѠH?ԃ*Cm&d :hCʻթ1֜ǶzЯQWgڐa/j 6YIaJ ߭0'{]{m3Ǿ̞ܡQ,SDE.ntʜA]9;3cř?y%- mA.<'7E ~jޢRMlZ $cf\t=ř(~~!Ͼ[i~=;"Ҧu31xi Lj._>Mը;' g`3=+G"5lY70,HIE)ca3(CU;xJB&w nU3=^] lJDlw1׹~2;Ie\޹a8^U*dO!,HH<DeH 8&9GLԼٞy6pҲuX8f}> ^*=(~ e 6W?n o p3Bw^FeF/GTdTASvѿz &Rc"no$HqV< %^mzC@*b c(o!p`gz6-fRV s(5O**5%C\='Hۭ~w6=HeLVO ďm - IɣQ%\qJ@W`}sty_Vn[!$\.tk9t$1,-a(|z3!x3<=q]y7cj)58[ L&qƹr!J qVD=|fd3@nW&鋤cۓ L=hS㫃A2>X߫0qW xb1VWko\vLs !diMYp;-qvm*V\2פĠ;@Bnї`7Lty1H9+]Թ }ZHoԒ8`Mvnu&\alJ힀 rB\tDVT^qLW|no 6|ch _hsW3+v*GSE 'b `w>g{P:6/+cax%%^Tw>y͑> 5oPVﺝȔ/r`E1xgq=zWM8' |fӋ8 M'u,'oAs8%8xsw~݅DwuBwr磕eEֹ,uA~6LFĂ3X '~mGM١yNTV荺)r,Xlo {STgzYTMkhKn '[Wi˔siJ"GRC6PvukhG"8V8cRx2X L= 5mDg}mg, k1ߥ`L |~cUWRQB.;we}8OxH;X7_ȨL4eRD!ئuxTpOhګ$qtZ.Y A*Nm[J`gt{KFU NW,* ?/~ͥlsP]I$7H'a+'Օs:E1Hֻz~ԙ߃5r%s;rt h Nj CQf(.*|#(@A-㪇J7gH㐫NŝNfhKVhryߏ\?z_QEU\sSk\P2U[6 bu \?B^ .[aqa4$XF6+}Z]L5[B.L+ @a?ޮ5a7H TtkТ3g + i_vJ%A{r.Nwn*mg_ߤ5͔jҥlAqgU:-g y!$nf20Q>VyoyMaǂ%`jjV)1^R+AH^ݜE+ g^(oHowLymYpKp<(xYWBZ2Q<]p{H+w$ Jih4q"LL3]b}rJDBL+/1DiE)Trb9.bZ]Ie,+K=oGˍ'ɍ>&M|9\G`}PaK5Egb<:9kTk&n`}?~UPE>>3U Х7{ vN\9Vh- jAOp nJQe2ͫiPpD FRj){c fA<:[`~4av7( w%TԸDM܇OT؟,]Qn೻_uY $GkutX;C:;/3<_&e/lHo_OElX3qKzn< adw.e"'G:kKUg0<}rh"߆DsF%w;V+lԣ 8cJoh40*}1c/ɛ ేYIVTpJ8AMP"ޤ2!v#; az(1]HI1Iہΐ˫QX z$d^%c뺟,6 |4x8?N/Q|R싻[&1QlQlNlLX(U.v޶mEoΡ:bz㘺-i;R4V ص=i} g<DLX}gE o8@X6sw4*K5ٵ ~[_H[0[\D `Lwe`-4MEfvi!vǸM{_JQ /~TWic)c8S9*} RxD_dzTe6؃:*1&1lWEYP(j/LPl',ȣsSs_u`D :u{ ,- Ͼ)G :h1f ~P.(MMjΣ gDyAMʤo/? wܯdX4x??QgUQzpoB}|r:0=O Ў=bH][Z`UJxƌ ާ/D,LMdFP M4X|~ķڟ w{K{y*/yN\'!LЮ3%Ô<@|62A$yvo_`r6C#ƮEmf}c[d"Iq]:$ ~z@WgR9^|1eZP\EEoסy~bq OwڥS~7& B=8W(@T93c' Dc-iAZmUUdҖNJfrckB+% *DmTMOlTY3- g9c$bC ;rf{-]*GGQ=XDQɒ77k#dq= 04^E3K x͛ pRI2N ż?9U`zyx8Q61*0@Eu")R<zWף.[[_7gPƎ`y`pGݚ\aA?y$OoX4-1VnG@yyt1&A }jP @P/XL]9Py9d3ӫʗT}ˉ\[lY*ŭ)'7Q;gtjXuʋ1~l62nW o0I8 #-]GM6p-DOy1A~yיjdg!ii:i2 h:[הѵs\pÓy j?_mQU&QP-z:~N*]46 ߥMՕwc@X0_eі> - 9M|n" \5iRd莂*n; p4n Lf|^A^Ě*Mu`3:㗎JO;.4{h5c͎PwU/QMH&?p$DJ:NLƤâQʚ2Ks]GVZ"x^u;Xy0xeN|gAkZ6%S 6^Cy J/acb}{ k 闿DrBG=l,uO Ge,1q3Iޔ {n^&p'$M>xU'GQu^یlO8ϰ 0 [^ÞLC >K <ޱ[ss* Ăl[Nn}@ˣaO2l]|mMUMmq$oἇ9nԹ" W7yg9ļ9Japoq5=ԙyLu?FhEa\:Yqb۞-?ַ/CMu1eQ{#x+"onJc{j5۟r]m FeDrgN:s?@17Ud3^ e0hs8OxG>8%|8rj%t2yv@zOTt ȹ<.hYJ$yIM* bvL*svX5?G 5V>VR?FeNrakU@,s_,5BڕLn;[sfzvo0{-:_^;&~ȩ\-H.Ԗ:Dpu>dHP :FҺ#u|'JP ؽL:A)b,o17))\;RY֬YL+}d?tl"` It!z#Ղ2mvKX߶QL&Ui|*]O׵ :vQ (>= C^{@B_8"Zqe;K6^Ik?襾yXOkJxY)ɱH3 Xy7G-F/j~i-ޏj=֫LsYW&ID|z"|T[ļԚWΔR[Yw*bV pW)CNpn>m8D~)ù"eEɌc=`Q,.s0!jjgߔ*3 Оc"OW S)U11zM?gS0KBn1JHTjdS5m`nWg4DXlV :ȯyK;Z_Dv01kUB5Ƃmb[ Z?Sm;P?紾]iƃчSU5vgPX 0osr>:\ eKU`rRg@=͹R$lMoٽ9c獰JRo+KMꎒ o}wYђ׎14q_]hGP{@۱̻1~5JkGַ!-U"6<\ͼEG6jS3$1DĺZ-cp{\kY,[vo` D7L@\%OSZ^+&j]څV+Os$?MxoJ{[8AcH"q̭Ө*ym~bK!t(Or|d{E-i(skZJW-_-x),U!l:кp[9|{^"pUe Ц 1ng{8WZāaY%%oBt= k,N{PqS"?YȒJS ObRTi  VAA%*cx:HQƶ=dg)<;̎SI:셽8 akZk-]3LJ*<0, \ߩ]< D TՋJB;eEv"4[$ P3~UH؞^ԙrLkQʍ@)I|c} !# T5pa;mˉog@l|mSQ \mD]\zn?mOdmPd^N֗Æ()t>'ΘhKFNľ 'Cv`*/X}[Q.D qSCƭTͣHZKH(ܙڳ \q!bHFbA%+l@&_=nRAh*@kw?.W,οKԉdb {!+ c DKv{yϵu8n>s/H-On;o}ĽvjB%Nb-1^<Ae{Ya 󙀪<};Dw;^+Z)H.@c"(lW6'O Hi[zbˉ֒BiT,BM:#+gXN=bve4wWU$^=4 ĢHpJ0ViG!3W(:;JS+EèjkZA= ?">EIÊb .Hl)r0./@caB*7#m]Ҳ=ZC57ٸ'湗 Feq(!v\͒.ǶH^h\]7Uz^O,އ BTH?Y&l?KmiC-#%,](Ev4_6*3FtpXîE/򑳵Ut*SrmOA\TkUN~[:-yᛝqdn{Ǟ:ěG}\ڤ[ ?7`I{Jkpz|_MkVZ$'[v\f!4*kZD3s%0)BvY FIk +LКY h'?&2 *E@欿29l%μoHF+Ya<`lhX-`}#}–TOdNRԢuZV[U=%% kqRuY4Ns HƒW;ȤRDJњġ*}<</{/4y!NJ|wTgW؞iNS' Q0@yugw2Y@6kv raR{u +$:|89@ӁwoRЗ <JVq ̚iݷۃ $hGBBq.V-wbckV<1-G7mh#<9'!; eu^o_MKYpe5‰U`I2/}ݭYm(R᳏&6Uʝu<~ `Lz%Ѳm*0 s)|"lfx:<j:xXT>)⥜W?—u^JP5IH- 1Dnjs֬%$㨋 4M`NeK@!G%MLaX6Jpq| kP=QQr˞fMGI'!%Qj)$ Dā޷BS뎂qI@~/ˋ.FMgI|U%qEڐR7,.= ^]<AR&'y؝,W 5+0:8MFM\ s*%Zv8! ISb_ER߻ٍɀo80 0$UIhx}5Jg>Hb~@iUnKս*(Hz; BoY㔿[4 |Nk 8_P *i~V/ IP==6LLC' f218zr*Yė*P֫Fc+m <ú‚ĆgY&~6F>C"Kj0/u-e zx:'\$SbUnU>MEÿ%~;2cEHn- qtnգd} pUǙܟtKUJRV,gUaґ)iW%l}Gmj{5)cP6A(%nױӛGvk*6H8pGV<Ӎhn0;5m^\Z!VPʑКV''wcF2KZV7A!:>\0ؚ*F_ š\ҧ A 3uaVjLeκFO>2|)$Vİ*]|\IJaٺjfJn&`,AA$D.Ț[Y~+|Q^AMKGGdD:`Y v#W6JV+7'K>k4OKb.j{8&\p!'%D/Kظ}.WϟA`U2V~> KҼ}8zs[+VwM|@%9G;mվJ>-8q}>>p oVDV2'-ϸ$d)Hߔn7ς|Z?m"YRBD\ je+ ZT`y8[ᒫS+3'؏oΰ3+gS3fQ)yЪȣ5\*) R,5Zڟڡ5؅_?|(VQ3!QVp9X LT㭔y?a޷eC{˗6'lX^b' !Or`CC8 hZYœ䲹D$wt>O|\rW11u'p7Ob; t(Ə#| ̷ܲO6NA>66!ҩjc;w *!щ q W)2~0n#Pn6^lJtF=mmo _nhௗ'g]S,9#en/!"jS(fR扶WjjQV^ f%/r|䳩6>.prhB#.pV}!ԣ+umFQVJ<=7 +3j1&i-TI牵kvdXNIV!)UkҵުX֟jQi<9PJ\-eG`#Ppc7 ѻ9bz#6Ӌ+!"oj&ah2]"̏419Pڐ_:E%\ɤ־rםkьYȞǻY,z%oާnIiƢm 䉵wYP,j݊GUELUIlG8蚅}M4 0-EEWJH7G8_v75?Ogwmj+=됝 P,Q=]/kO_'}aonA.ͶESH(Eȱ7'"fŇډ2{W=Ξ-Ic^PZ؞?&q*U-C?Wvg,<<p"nvnFU$+;h<" "Ua2p4>mSٹPLPJ GTq,?LZ8q,A6ز'c\L?恫DR9+ # J駋Gc+ƅv\*Bp(c{V31s_xH7!&U~ci2E;w}6Egz*64(l76TM搼NQdf{Z[ajY] t #TH5 }w9nJv-BN )o}u*&X2X{s#IӼSoP{0S?h7jr SL8ݹ8O9f"I"|w%uRXI`(V!pQRbLBIV,*!NU瓭-< `ܐ׫TKXÙ0Ԓw3,k[5`VD8|2̄d ݸ$$yydܛr&C@~8޼Zc}flYIJuu\uNVi\Z %UomW~";dN^/cL XiAt} Nr(ELz [|ZՠJ .fjEBL (+ $/ڑ-?r[@TKشǦ|j*I tnYRA"5*r>q8a\'ٳ- ; ײui?v=tL)pW玫C8&`KxPYVqR)phW - O{[ 8]˹Q݄u 8%󉱀;D,{Nr9*2&nci- D%OakMD, |wǑA-l{V[ĺZ-OSc!ui淕'u!;SŞ`b: ̓^"=7F^bI&AVr4u=@ v_[b ,Ԫ7#PEQ군Ȕ|wzy+_4uzq۰gyCǵ~cǂw%눋(G-* ׮jRޗa!k,.Ω`_'nm%tuLV)orj{Zv#'4?mo|{F6.)iٻQV.bfmC4&͊Ҿ9Trvbd̓GwEG'GCfZxiw{1jfM{p8&{Ʀvݸ@(̏L~1UתyL!ڿ֫%+Gs"Υ`>#$8 o`iWxUJ(ހEi @SƜ6ZH>e`g09uΑ=.Ư}#}- R~?iWHa)\Q-\IXVXm}SJ E ߜjvj{4RX ~6":m#?=h7OF!H;K$ 6~ǥ2j~L*^݈SR%NbgG@ZPrZǒ^s,(%ƪ1b`2V[uʒfr je;ZXսڦtQt KjZW[fy2мD,_E?k,_dUҨX?u]:X6{LF*rԭmcN5]S2G`~BB0{8cG x:8,X*%GBaC+A;Z)V%B_O׉ϔ }CFkRؑ `,sBxYmv}YU2GۤW C#`:me1Q5l9~&*58nHVչGc[Dk6"J2LJ&-.s_d4~ƞfuԶײ5|U>|OA ?Q;iZ!X}aAdrPF㣂:29n[r}2Ί( n8VY2 r%}rV^di _,% bc \s@g-G1hhзd'G|dFR3T6"a6Җnq zΎPAeJR9HpM6biW+j8{%{W(ˑ):2V5 4)?y[ՎeKozٵ011% m ~ 6t/\üm瀦:>RL 6I> zg_98+RA3 Zbt:ZVNbhq];;y7+5=qPg(i! .j ,g[W'PzY0kKžʜbw'{'C+QEDn,fh"^u=؊kO k٬۟ȷ=ӉnA*!UJ?Pkgmֿ<./)I+&R-<6>Zn Omg @N_AT׼> ی|[Lu( K,jK@E[# Ez)\qVO֨g$ڛ`Co'L g@JME-~bqq̉v>SM%!Ě)/$<$fIC q3XNRQćRkW,b!mOgAFڋ~[8~z휛knD_wQpW8L}Rg"HfKVbqJUEͿ 0#w u߸[c,Gv#:jʇ)َydhYrOpl??mš,Koi#~௒zOX8_ 1%yu4О2CP-[[.޾̓,#6 0m#Ϝ :!LTr'fPxjroXۿ$RUq^:@$#;qm$IU_^{j{9'ֲ}Eth\/%+[*:'H_ɷX-叜9aYL1$2Zͩ'rn(晾!~[*vOA+ K Nl`|D*&A@QW06 BW_k^9VKҤhlw탧|P"ѯqJ ZC8 [TxRc@^kqLc礐\#Po_yXի{M-^jԬY1CFӢRDPC@#ՙyGȎz~O m[DFZ jgu툆omHBƖt ea.@#C`4ݷ' sn hƒEFM^b'eD9XlgO(Rgv!* )n]L3uG6C\h@BHӖ$ rx`(~#,O -3*dELlP:HV%gkv%똣*arbʰ#VC"֪UũrU[Z!UfKY9.{b`+"0m|- 0eȩ>Ryj!vjq]O("Wnx]u-M{o%rl(hׯWTrb$wɿhIqƃ)y;Hm>ڪ .^~11O,vkcy$S).)ey_^}/٧5$Z5\U=:<=8ɵa<,$&D r`-v·R%]&eC?uázsX.l䲯'x4[,x~-nO# qoÃ_|·&pXƮ Rc-DesӲ7i׃ܾYjv TsIUі;%ؘpi.d> 8>^ȀDq=BNzE{"b*ɶ5]:BӔ 5\yH&sò<ĭׂ(73y8*BǫZmDqheO?/yß٫S[tc;ې'37ghmfL^/TW U MI}gv@HMG\ryA|]ᒃ^7^O]vrI" b#i!55+Z庅(aI:pneY9Vח0l_SijQ9%[ۏc*j$$}.@_`nrxr]ߕ Unz!pu`2;P;$;F<\3#.1#qMz@݂ !TX~ VVQ-ln$i{( f {V,[<0 {(Q,AD_Btpzc`"KA x|F x5z0H ח},$Gw2`?LR=,-^|?m>}:{F ( \#;ek:(25<jY vc εf7g-at (RcSIsZu q#a.ߞ-bTķ$ι ]IB$Xj&+,slYMB^4=PY*k%); bTemzծh+ń0߲@J 2Gt@*/ e`vUiX<ũzwɀry7Qji~ C+Z(e`33, P!WIU¯s͂)wvLAQ"W=TBŁĂ:|ENP J,޼ZȲVE̩1ejرy-a@-<9eGqe7ܭaVT[Ix6nLw޽V h,]h_xѲ|~^HgrUI6'QѠY+_"cX LX]>U+,;Ծ-ݲ%Ěbyv-gGa,K N&*/"'%%ZLc>x'VbZ#\xTtT|diG-Y]Fb9h#[\u"TqKa<+yD>ݝ^QW*ԸQ,e+[!I@U5%ף2 $$qD8b^}%'6M&rK^OrOx ˟Ocտn.7w-r-!r.Kt~WˈO'E:?螾Vgim%5+K->V;Z}m޶2!m|uHpnm!E"JnP)0LxT")q5'%6Dg(|^n>_;%ּ.cdx߁FCOe=˅wW\Nlis·xT>t9"p p T]/ q2̵%Bźrgh{,sήFmS%K/b4ovqR4yfwr-[%ՉSAOtT'V|RN'eG?30#[*'Dn1MG4V,i9 /E|dr'YEKoDX*|5gMUA\3vy>V@?*Z_bkX`'tIDTRD? Z~H]gZ뮜g9sȓ5l$,(WS:r;E-s0[nՉ+1N@Be1H7cp{Ic@r#wacRߊͭ} L՘O~u>t@6hOלLjlJ@gD``͓< *xO$iy jURADm'g;%Vvvqs:3p4} AL?7fڹ*N47-U 1X?Y1DэK[Ѫ%jF3yٮ@tƮM U&~ KMf"f@!t%{wY&cƇv-NAJGa,`$b (dwDS&e~RXQe,#D 9 m쀽{ 5gn xl: x9mHKd[TPU;8Ii#\plDU&k`àtmU,[m qȮRGmܵ/"Rn^^3Gb ]A2}Ļ!rHUvNJ /Rv4u @++s _i]t/"zl\uŠ3g,?^xqul+8-ϷzL%c`q@ku4i0 W"\'_-YN{5q+a1#RI>uV#.%?4 9wÈA*xHhZ3ə (v>'/;(ϹvAڷ-_N$ DL$%J($VzTvڕ RcgB8c3JA@gN5V_ۢ=X־'h#J`DYJmp7i_vq"\X z0Q`| 2%p#-v"n5IμcKb@v5 Զ7 ܄I~")FJrTHxegl7Z F]%ioQ^F Ȉs`1N6 +'[kdDny6Vam?A]9V+]0_79?qikI@-;ަo[D.c}ꍳD/;?ލb4"Zg6*eW@Z"y a+n$$F72. D4' CSxW@-7 CU꓏D|er%D]ڔIz'@yAoW|#G.ۋX.EeXuV08٣Yo% bN"m&ǵ dfWuHzz[b@ $ժVqJL7 6lY>?עBLp1! [ITpWn!ZKW7hy_Y{]e(w¿'Vl aEΖJ/4?ϦwY*)g+os_)t DV| iفrT C:% d~`;@Ƙ} A"ia֪R'"Q=TJLQe{}`Nwʑ0BϗPTڍ_^aq]hu,\6f%nMoWX*@ޔˎHs6 ٕB;|81(& 4a`ݞzXs,4v9׭Wj6?T߶!r*,I5:Ukbma:yxMle ۣ|W\h@$hrBRm@`2M5ζ^'XQ._2`htt\QUTN  i%BWS$5{e_"JvUZ%QVT'+>M! 9EAiV|VJE-]9Q2sonxƇBZ˚DHĞ13͓ٷ.f?zk>d0:cmc|h_aiB7}PGWOP6^ZEOKS={|GXd$ܙ3蚅}2LgOւ:&hu$RۏKݼlQֺEU "mQF3,Q)TU  l;h';TdSb6!SK JS1w  ~t^]1%&Y|;H xYγ%Ua*5VUv"t aq6峘H)њPg7[Z Vg*Lq1>{Zdl={{Ϟݥ*8N^>`vY?n6'7 p/c4siq"BU!(wnR|K@` d"3{u wفLZy':KPj kG@)lՂiO+@ym9[@bkDl5ZY1?u>UA6pc(o 0*1P%'t)6f2]E7M\W3Fyā*z h^hh\)ZЀ62`77e0K9(T]^_ 4j `RO$Sj| L?k7"Cb_ݴlT +6[8ِbGGg5} ]`y7*/ όCț6֨DtT^۞6WhV~'xC'@V1vnhJvd$!tm~Q-?Th[d@(DV"|%ǯPKNjb5\&|B'l)xmC\8UlKH$ŭAț4= qn`Ų u~n+P(a 7=Di @7JTՓƤx;{]t\EAJ|s,ic?SZ:fΟZ"ZEjљD."&xZZW>sDD Fmﭓ0QU">Ka2k7cI g).qI0SøǷ SBwZXTH7mӆc -g3Ϛƾhė8 K8i[?\Ssw{q9Ubφ&?V;9+UೋYv'UPm 4øt4Xǹ%s _Oy*+^U,bع}( 91\!w1HKcVj`J8 g(b'M@SD18{[l]:Ek)¾8ѩ'cG|o?cQY2YD*mU7{)vW*4O7VTJHLfy %l]('Vu23%xբW%y iEiE܈1}GXU{\XW<1mJΝ|a#t/j~k\H 'O7DU ꦱnYx_ _nkڟfYo4%6S҅,iIIJx촥ji=$ RԃVkgmoVm"C ѐt {[&j[mn]U7p)Ub-*٧[RMjDQrsRɓQ}w?3a(q #.`f]J 4g OCK MfݱׯSسK>#CUk$^-|͟LZ p4z2 G0,:&a*ԲƧJK4(UR"]u# EuP]vKM`1)DXddccD˱ZW#6+2Y"Ůaxq:8}CZ+;A}U]9QT"M\7 DcĈ3gVݛFB4 B"R1;Ξ5KcyG?a mq۝%0&گT*w߅eta-z)W q򆅷!8nTomddGUݪU՞kG'`~EĩmÒmKQJ|,s,NRPK7²%g9qv:RלM[\T; Ŝ*W85ejGh9nvY$vc(РJ5)9|,j0e #IW%-!n`Kދ=uSCMŢΫ?U 2u~4"2(2أOHdk5ŖAfiK=_|΁$#)>+Eȩ\m?QN1J3*^7AŪ mPfRguT9+liV@J>yN"O=-Q}m&z׫sq%: =ɥ֡H^Bq4%DDH7Aޅj2`]G;srU:%ZS-nCSt8dI뿰e'.&8o*XV@ yנ,NW-<әTHj/-ihM θC*D3[7q= † E K{n(+k17h 2GzpT~!H"x'{ŜA,uP })"{w,LIOX*F H2#P}t ]ZX́8sܹd^XK0ęWX\m aw L@IsZUŴv9[6* -9y7k[qEaLbQ# o,xxiD}/ 9K T0(K68 2'`72XN F)l,.yID\VN(s=]Z/o;=^[\W&#^=ې{pí+ y9piN#gGxN#ft$>]l JVٞ|ꟅϣO?!lKd)b?`gVg!l -(zƲ, yB?o}+/ǩI"l-ia3=k׳Ʌ*xY/Kb_ _\(آ~j/R8բTTUZ(J|謕(NE"G/w`#'ܱCZyhNz) xhT瓩,=A @-d "nݳS!]IF!l)L)D%$`l/LG3qVfAW7:erς-R )@$7%|PEʩ2ۇ7'K[QbL=)}:bS+;fz}2ɥKv$lrA$'Cy_Yْ~n?΄=%HZ/S!# hˏT`&sAJv=V! &m04(ʖegx7\@F U]3O`JL"}] x0/]Sֹ'Ll!#yxlkQxOOSNni5$Zܐ fH;l/Dp@(1J_"*A@m TkP"^?⸓: 5sy%>fWXrZb>+&-&l /Bu|U~Uo}}+|h-'>i3"gF+5-H.!* #4F}y%ΪÎzҮYdoMmj˓-cWb 7$T C+PM!Nj#$1$I̖}OQӋuKK'Wl߼-U*6QNs\Q"LN{:rorע;Tm2d=k\SMOc}yx,1|+IܞҢJaXץL Z!.tcc}Q^RlSPYؙ B8ŊU=aD9EIBp˘Z~"GzR8m?̴\j^8%p. b? eg17>I__NU3H:Kii3 ,wfMo%kNbK̻ Qv%- Dy `.m% vTS"knj?»T͏6ە̯ d* Pճ`QO~fyCP_F?E(]7CHL b;Ȟ6lRm ɬl-Cv@T + !"%S, AFb#iojѫȬ Y)mKVv} _$: ] ڪܝ*2>zB&%iBO"V`5aq)r8Jo—vY`lZYv̉i[g6(imJ1j n|6? z={ /\.0RŊ$"C]`g'0*im݈%lws]$w;Je'RB<ˈc.ʶ%'r֟1IM @r/$"OsZ1 *Ĝg(VC8"Ϙhc?C @(v,j.j6"6#WɇrN[<$gAxGj.2o.8  D(ä3 3DB"_9v!;XUWBqf|> ̠w>oP{JB@GJ0jYBQx*T 'I:O&Ǖ7knwdoZ5$u!Xab+06jkE[ 'a6,W|bIGou[ AB<\x~0(F$#f8^LrLIQ8+CI]xg~53z"!A{ԵE>}:Ŋ#:#{HԜְK_ _żN/Rg9-hD**UIjJY TIYbC CFm 9< Ek"j)ym!OT]R 4߶?ermoH-r^'Vj*Qh'!HosސJ6F4%H9´vl k!h- A~qr=#0BF?ӜPc%@HR4zj2}7ى% ͰWy2:w=(Ԣ$Zh⬔a繖jF$f#IUA~IO14&IȂGe2&kCmVS `  2_G\I)2ܺ!%e |4М3_> *v3"VܾaS+v U0gW5GAQU];46mjTjUOJuzWZW\ RZf+Kd<Wuj9Fӥ4UAѪ&l C~1HVv2c {%u9Qn> #ĞΎoSL]I\藺#wHJbPf7g#@@MX^cb* IJ%4Ɗu]K7`!pDf:urШE!2xJ %GYcm|A)瘝5o~C^K"! .붮w6%[+IۼEIIjV&fv_$Ma]Bo7n_Y&䕖+KK`7rZ'VK(ukFdN\X<  =7lP+DD#ږ!k%D#dUbW]}N(8c2A-5$ WbVaҟ\B̿y[Wpz?Ӷ];B6vL0B=xQJ4 [Gy=۟?OEڥ?bKeY¼.:W T*W I:W9iVmbݖ2lݷ, >I eDMp_Fi 'Xw6YOt/ֈbgp`jkSMUR|j %~Z ',j"BњWU+>6mk/3ccBVإ1!/ƬK:ve}Ǐz#1͕P3nbg~gW[Fq >WT%VR!JMkRؤ&otĵV9h0aRZB_ AN s[W(ihHiCB ,0Tu8yermP) -<ߐbSg׃A  )k"Lo-Qb`i}m}fxT(24g U'Fᰴu:1/ȦwbDt˜x~%Q8~0UBn1|vvd}^1.ms,Ӕu BT;;?  !_4%Ѫ+MwOX+mF"q1B~&ǙP8+\Ya10 bciDl%T Te`pm;Z3*`8(>g]֍q.mfq 0@%Q︠p_+Ldpzٖ-l{~#U^ kèwCĘE=-+%Mf-~޿/zg hs8Oep2UoPg#/c8%{sۊ7JfQ7zNuԇlDN ^p`,!Ue*_cIH,e$a fS%#NU(׎aܳ'8Xn^J%AciLzb.lB]'IΗ;IQaًmum*Ks5Zi!ruU=F`J[vкT> p!ݫ0UK$TQDY"bi-)xOYJc,ƹ7;GEdi`m;h]uO"a wX%Nzl3Ϣhdg Nrsq<#%e afG-l5=K "*戝>ci =k},r+膳tvk[3 ;vLplErzk%5G _Q\ hWWx"8hUT3=,ei*wH(ݬ?(i9L]6@x sj<ux_x2U)x5 {RM_+[|S@䌰NcyRnmǔfv+f [<;Wa3Ҡ=vZ{^1/ώvC _I-_~IJu έD 4&1Dt*@l]gAqP& &[U!CtUثYdZJlr+d7AObqM^&l ]2SMiybB-7EZܙ<s]CkjmI]$%x vnj޽[;QLk2r/EDCjGY?1]i4MA;c99Rkkup:b,O>! $]?!-s pl1=;8P#_hbέz""9EFb==u@ _A'뽛Alh Q=́Pj1-@תg3? VfKxP kݓ̵u!,r(I=P0*B%|޵[28~z7 K;䲌íf=$$63&F[tB:Yjb  UH ВVltnC*BuD2'ݪ); (!{ETV;J:Gܜ$7B|y NK?\9aS,Ï]OG}sC[vO{(ޅzZ(l5V<L'q %Cd7>kJ/8l攳)26!1VU%Ue^46ٛg'Z :Q23JyUė+4*"|Joc Y+2%>G33-!D/3sGLi;R=hf6*iVCIZԷm;CG7rsnCh2LΜji&aKtIhمk?MLkϐgSrcI _[ a{tnث_oBvֺ!i\=Qjh (>oS$͓QҜޗ$W> as}w#xdkg AH%̒-CS{v\G`Wo1'ReT:#J^ pa'['a0FV]ϟAڅoA(ъGYDNkR&-Ip{RbFMYf?hjZum:ЅC-nvS $c-eWVe3Dz}VhIRGGgÒv70yiT?,u.ko*[`gDW)gk+x?Z$j:P#o02>`ar߫1@E1w5U!(y{҃V*g:U#[))jT21k$)G[s*|"ʣd$.n:@br?0~072F!Ҧxjm.Z|con>?z VϷ7Nt3Le@oUpJD4Z<3N5ngg/?_*M..$D_jo݉< =ao0ۻc#Arbު {w*&YDÒ~A".>y"DYpcsD}d&w.͈PDE0Y2=Dz3Tc3&[{]c!3t tlyfW44m(D1ѭi lkpTBb oPɨ6Pߤ]g-Rb'Z󕰤lGyz'EE O#%琕AU#ZX &lgq,[ AO,~7QBIΒؓ&Z Oˎ)=8 2Gm|UWX; K5B;5?,RjJrG<S.6/ZxjwPt'| v"#r,n-.G8AeOGC@g7U59K&ωՂTgFe,vH P`H)jAu*'0<^ "4Osj>sNk-ݘ~3C,zJ@v#D (ݒ$U-ad0 WE r.ÿg[r|zm6kbvN,OPWP?XzDfc")q V'BrZO[p3yrX:U}#ԵHf@i>/rJXq:6"S5W$M~&-O\cÉE990AS\mw*v?jB'GG7kB:A_;2EnGpmZf 3B,9ẹ2vA\ 9Ui9@8$;cWqC+#]!qjz59??bf$ VGOr>K#J@s Uĉ㤯 Xͧ] JU|0JAAjU!RNp 9蛋i$z'),pJbUY-ʭ}d$vbys,}VK.Q@^K P7/}抭L#\oXeOLmuQ5B:5Qn/ze.KNTvix$c-| K(e H2֪4o$6*eHNd㞳!+syM":*DJCOOE0 CݍY?W%͙*̊P$Y4;3y,}fgGVp v}]?-crAlZg.sWKWOP#rܐskx[lіnyMRRU!,0;>ݿfWGzp dixZ&R^_ !X 8V&d?h 1uٚuʵrfoz[ZJ|,uG}a{pK @;Q9Xq:VG:EZ̓{znY R`ӥ1</["|u8a3'Ts ҂Q!."f`"[{rVnGqA:Xm|"4 vC~w >J{ƧB FU,BQ%+x2olW.Wخyfi%`0ӑ(8u*W]JܼR!biO"I@W܉CصtE ¼.ki;b)x+ B㬅3- f"]X +mw#0Wmm ;iAcڥ3eor@D)"SHW>G;oQ =Tv(Ym'7 Pјҋ_|n"),>L^S֖Ӳ" |-yV|1WE(Φ0K{̫ƞ{rA ]#yrl>[C)!bG8#>AWV{||uw 1lru^N*Ow Gcd0xyI`?"M9_kN~í6M Zy88b_j}2GfAzDKrqȶ-,r_vK!'WCڝ̿ z}Zȳ{ϞNbf޴]7Il ъd'Vu;U ,"ڊzڏ.ɰl_'>LaQ &C`59|ʁ~*r8#Ņz,g@pW4&g$X!T/h[Wp5\hfX72/K#]'\ wӺ{7'UtFzum1=iZnjUU(Q8Cq00su/@$r+s4'rNz[<<-֗E$琺֡<צx얾 !.R-$n!y{b{u3 4 2ک_%A(XKKZP6_2ߍ֓2KOeiakw48#耖5V`_mp Ɔd iؾK`/(. TIg`ʣMVS;יvGrs]".?4Sc|1xXi{99}a׊WJlb3 V$Ni5X7llrິCLZA#="&lSjX10@\Qߧ? |HL}p0,:/1T+K{զD]?^%pDʫ=#U xs",8yˀ9wϰcvX*=yuNU2s(-Q$2ϊ_cp|WMv 멒{]U+22OJ*柷қO0'Z) iAc(Шf}7kg.:c8eD;!]%Lu&K2T`D;w #)˘^]Q?K&vykm:gCun:zݼ6z7Y6G\;?;ѦvsDeso~˷ѩzBo{a|d7}j8Hm@I,1G%'vO rDٽyoQ{7wR!2i"PW[M 66\|g;ڔ_ى}UO0\-ΚfNh]Qd6D_2\UOdthoX @mtS,AHl0RRj*&UO\KC{:V2?' % y'c>߀[=& މ4S?=7JTu79rfh jke7 uqi-p|S |TݒN۸YOg>Eaq{|M7yW~l/8,zGZ_tCmО^bz򾈑0w7GvvN;d&U|ggݰt/@{ʧ'ֵ'OSU4O@N} HqF§[s\zaYur -7E4NWǭ--ϧdrr$gzb=]ΥdGoXwO;NbQ_mgݚ{(۠ ~( uۼQʉ)Y;NI8N}ci<$b]n̳r,?Z]L1tgpC&qSlKq;[Q;Li>SYJW-iβI;~Nisjǹs2- ;c;1" }z]= Iq.|`(_x+cpF{yapSr uMZ-Q=rnE2ou>~vA]BKR /`U+uq sTDjx&/0G-d^DYk:j VXZU*͊[wDu8M/-#`;JLc96T I> 5F`Na Yó@=9abyE\; aONY{b(2]Gא >DC=/ݨ`NT|\Ɯa}KnKfOe& 0]w\;{8@mKjS_7O0&y'cKmlT:AI*[]MS/\!6RqO!P 7FBƘoP5U Ee[P<p ~ʹ@RN@['"#rD4y"No{6pnMWNmEf# n䣫ڛLF bg|א_||x:k/Jڶ-<.^ۿD|5-h$0t_W$i˗?KKV$Uu >U+UJp8w6kZ*5Dq6y)j`ДI_*%TJ&@D$RJS'JFsӠPB-zoS30-{j^8p]{~X;XohV8|T* &&Z9L{2=NJ*qV\'kp;,kB?H*_w63 ߸a2Ί.>T|ܪ$n: O7}+#qV@@``MS"Z洛$@Pd\[ 'I  1U}!84+[2}#8&bUU,?BNڍXZ8ɀ{%?}LbڰV{7Z"#--b̩G f31x$ vyr۹&qu}lT_ZQe,Wv% Ǒa\p%,]->$<}ѥ|m+!5Hq݅专v,gk@e'+uܮ%ՁS&1J6[q zXpPNN"mټ۹luj+5\?ypoDJDUm* wcX'E0Uq(>"A |RNw)Q8nEP'iD~B dv5^n CyҫTq^ ²Q xh^ U6 Cɠ B{dp:)k 5  B߂*$7$ֵiQU)PeRi#eSU3 ykD X:]/=]AsR Z.P<`j5+uK47*]Fȼ^\!dOoTa ?oG;܂M%tM5a{9\ŒCk A YaV+qO椱;jĎ/{|`w,O[VsV&!ULA_< 8P (HZj.ΑZb7ک[b '㿋OX<=]1#,>rpByR}qZzVH Dܝ7y `ꙓ=-aI2F .h\!t6[Wt%(p5M,p"/_`lnېr Uȉ]j擔qʦsJ!k0drR$@DKL^_J IhU4>λFeR+ gTZ2 ZM?-֍5a-! a*_݈ va X_[½w{}a̤qث*S, LG-F8"<zf x5bJ)Q S,dHq+@lJ$+g{rψ;lu6vյ\Kx}G"$fbM_N_n}9F_;*h9@O 3*`U#V\E>ql(*@MRQuPKI:xgwww?#!ā( ],qNʍQER"Eml `"xZF8 ,:*F"CQdc@.@2i$Y/bGfۛ"Zd*0#Im_hUUKي9qڱi2vX([mƒ6`d U+6d~f 2xwx>kRbQ;KR5M"-sWȦSjgNip`e/vc"/W˹r>T?^!2pMlcJCXckͣTxU:=<oJFK9 IfK, `WEfS(\2v y9+\'0Q5?2օř6 •xU.Q‰$F nE[3U)TҴ F)&۬49[9y:L=,q3 |Ėѓ|p_eX6{yt4&C}CߍVLB9ck\՚WG}2Zq &2I3STIX"d#pb1ڒ$%ud+eB ud1[ھ0C&.z"c|Vhܖ`3u %(xd9%"ًڥG:7YZ^Ac5:& "ݭOۭ}! ;ZNWEx=cOe4ZQGXO޿^'vvs+Ю#T]P5{ʮmh5%P  ,dkHD Uң^  RPEZ?wfg" DZqUq#D5$TagBS"bOCUE.JXwg{rrUgUQ9X~`7Z[ڋ%C8.3AnvdHM]"(6LXļj?1O,YK50Eֲ* ,pOOr0vHFŴ5[W9Pv;S\-Mj:3 )We*A(Ed߅ -$$1GOEͫve1.-{KD3#BmI,T^6?p~s.>]"M#Q;|kM=ѰM8r hmj+rż1csr^HkYk!D6±7rf'г0 q fPaM'[XJ{2Q% A vޔڛ #iW ]|9;-gH1ِx hr^Lc-q-1ՌYdtF[4#۝oR<ʏa=clU<7U9vo2X 2m,skmpQ7⒥}I2Q)Ƃg}BJ=Ӳ2'3m,\=N*~|s\ '&}ZE!YiL9Cn H|Dԛ{vA)+}iԷ+܂~K0 ÔW,y6<^K ߢ?W@{?DEM*\u9I~Q/n?}iW*IWI۫퀂v*!H1Qhw<ҙl2AcA;pmۨ۰Wp: T$)RJ>&܉@^)m[[XPv&WE+Y'M2Z;Zn-Qbe{ߋA«&Yǟj)}{UqmSh#FNEXۗ7;} 57skGtz}B8gjiZO=LF+DuCݶFp]xYTlsBՇX՞8BT)r-A8)Q,@u'R18 8qgKKapDnٽ "=UFB9Ԝݨ- (FԘa5zE`\u[٥Yl'ҭ}-g`דؑF\CAkQF.Lm-`{)/?+c;nśڵZB `2מ7JVd 4>_+_}0sh'зUˮ,|qЈZ(-e=,O\k % BmM;Q`W M|GHmn|Ův0`(2y[ J$񆘭-[bOC!?8un/p`[FZ @"st%-U*n||jFA>@QZC$BFHr]Nu:nO@ WٞZ{#)N QG lMy.^=Jgn8x rQS6j(YվE? &:~rb[x Q+s}0MFaQLbKŷ"p'O,6>`6;zAH>S0?ޏ}UDZ#5@ 3;a(L 1]HLedvR5,Hvp2߶nhRDF$ܛ, dҨZrlcXC,4+ilܐj]%N4D*ZN`aJLf?K|qΎ^I,<vˍ9؊尢*Uy64’ؐdӎ[%, 7Mmm/UC;[~/TŅprUNZwT;]X@+7SC89-;PS]`%Χsim$@H ٳi̫/c1S@G;c [:*nt#(A5ܻiw粻Ud۷V2I; i6zpڀF,_6ػnͶss+䈝QѼ?d@սA?y}e1#)3Ȼ䝖>ԚV=< u02;Cދ]D*"}AEz=vhFm g9e as-N7I d%Z[HK9毥q2K白ކowslqiXRˎl'ANBEU=Xw-_K} ioQmvD|XVLJ%ϴv?㖐cNѣ..tQm@4xdaUbrqBYTw+1)k]I pʃvrICl4*լ\vaKXi9Ktg({9We#pm}k *7nh~QZɊD$en}Gg6>@uk1x1ش ls_;K[y- o~˗nZiƩzWvv")lK!u(J 7hkA{zg'-x#w˧ lHx+!wX6/`#^ڞDj@ @C?(r[Djq,&D#bν蛌D  x=C-jNu"*lnTsIk=]/"8ںeq}Q=<ۮڰAs{_APG#*q&O} dHOkJ_1N= =') ]=*6m:k F7g(Hx#%Zӎ\%0CrhNmX> duʊi iF,%ؤ3-}(K27T }RDT Y N~;cM'2&d!K6 }ĀΏڵ܌? f-/,~ b1j[ۭtF4JU(%slI|%2)z¤:pmuy㰗6YtmRk)uKtxy7\bQ숰Wv0ćw:=__UGnY$r^}e+֖dEt.u:5 \&ĎewZcT^#^ ]V+~ Hna-!AWTTQ:U3ϺѶϯd>}D !,oef>$/c{+JUjͷg;rY?"fjof[rdK7CW2\o+kvgrqO,չGU} 1cku)U{$e{? | 1AyhͪjU҉jRT[T 5c !) bH~|swSɓ^뺮QN[?g)%<@-G,|RMJзI]wЏd+hc)眽䁭)[sG"3$'XI!`U//3Y,DIT$;T8*<\$#i#c`KrⅬv~6kb[b`Bؚ1=]ej6Jr ę@ 7g<&*6ל'~gX*1䩔#e/՚Tr۲XE]ɓ&&Keۂr I_ݙ\ќ.84L6xΦ!bq~6V K" ]wLf=@iZdݏ05_X*s0&U]ߴ O\BPvfhpVAn{i(O9 ɻM˞Hl d]vר< B5i qSb@@);,<#RX&rKd}RA N^/lImltp4OdiM> Zqy9n U 4 ^U yPF:lXvU&,S"DJ`u'ڴ޴w^ite֢ӖD(JnId,?mGS2Ҥy`Nǥˇjʴ] Vn95]D"BxwςDXPKU'}D$n Hɿt9l7Ҽ0Ƈ>B#[SNr/4&̫>h688ypc]Kռغ,S7Z]u_[Ҹ*_iVK%)Ź2la֬j¶Xvgṙٝ[絯C٢bj@˶/Ū:FI_ɏ!x] \ҁbXM8U7bLoKC ّh~LE <&d}e%\bUhe!p(b# q~`"|~2$b췲5a%p'˚vCEK䛇wց"A>"TgiK,<%[v6͟`Sd $ƕrf9'Zho& 5ZQ&FƄ[(l$'N+.aG~~8W?H.o]?A9hG5*Z;c*;Oܝ,bzAZܱ[Yq_18!h\*_]c~DXGK!ވw,-fi/yYbqSa1RBRCEΧ ,! W̨l?*~@WbB˖f<ؒy DHQ>&!1.9)U%y|EmrS9=$VP I3D,ZӪ< (69`;BʆYO҄1!<<ŻQ_5׫)p汊?N1︛} Ix^+y=+a I";켆k\FQ/Y\42IQ^Sx䵝v8 ;$/yx "}iG@ I%̀٫?;vu8!L{r'x(+"|z/!ol< ˪$KoJxdW@$dXY g Yl6Zc<6o!m=Rkb6U:'s ) WھؾUoH%3[L *mx&7KT C^ޜ d;c-]f(}+U ҩeu*δ.f.6y[!v(?8$T*)`Q[P 7bRۦxӷ}yq^ +Bc&W0o$9H=p<Ϲ~/fvR )"cG%o)SUU PQk& *M="|@iF$x;-'{#!#^D>JkNJ$)~2^6pyN d.8OJzC& ]{l$ =JG? sXnަEY͛@Hs֛U*{#+/R[62Bic5k :vK6?ˀs(N _i}ۭ;a̹v|^漵8${0C,]Ĩ{u˵%>sUV ՕNjLQ Eu9s#=86eZk&c~qE)/ĩXT@KAm >Xa\ޛ]}q~oNCB!5칵-ACJ&DO8wwCDڰ&ǎO1ͨڵ0ᙿ`5Fe[pǝY,u+thNԩQ}," *I-Ly"%BɁm聑R&?~*!ӫp+|5lH/fSR҃|-v;o6K ''agS?u{oj@'H- R]]1K܀!"4md1D(E&3]ˆA*_GVOk 8Kּϖ<g i+~Ơc!yMDfwP *)1fiP}mlJΦW] 7|칏wZ; 7927UiKMG=e8C֜sKhw2O }}E|:tZmf6tk5[eD<)МB F#*`(i-?HXueyR! 6Z)`e_fN3e ]nRv qy+S˖i%P۫+p9yfel7%_-;cV\1gbe *̢ƀNZ֩i{yOCd=0jXk4|O6oJ|IW~5 s!BD||nX+1>s˘,7}JԈ_l$.V>*ڦLߦ-| k=92ߵ#kW[s.r.NOWֻ|Vį1 cLQPK0Y"IzyLk"9`^.e_P,R{c4_ݶ%͗Y H3`~< ?M>i纐ډ'T>L{/l8&f?EO@ݵL/$ֵOO\!&1*'oQ(Ę$eU:8l:o!Џ# [?K{n2,㟉 ha nR!p;egF364\<1*6tePi-19HR&;k K{+/$_q&5E* n$Ɩ kGZLoP1QBZqmaƷ6Ϊ< *Vt)~T(;rt2e"r~(z O/eYFB.gSSs XY+)WweLhʃvw -(B(ș0ಠ'×v"~}8 JrQ6X_7O 3#"HVn#lt>Jm6srV+B"&4vHեvmpJ i$豧,zF"GA'~SnBœY(◙\OaS8>rMmFO CbhMuN]yU=Q[Av}HЄ_*;w]].&qRY;M#!lYvaIlZ#4Zi״Ko&_" ДuD,#_7(dNOemd9*t"vyTC!IDnaYَ⵭n޿@zS$K1b[%M3f΁G}{6s-;2^W_ak ݈ԖN91=>I*X <^k*SbrŖOU&NO{8sV^L"ҥ@rL 06ZLPՙ/ީlpA+UnuZ't| CBZ&f*Ǘ;BKy,a &WNᕭTogN(dbjqj"r>΄2O`d!^Ȝ!_|oʶ>sX=7"{87/2?Aؿ?S[tV!6܄`*{_a OK-!3WZ U=D@JW>jI;Q cbCmu]<fz=bfCQwrqI'?7CKsȑV8y!u"7g 6{Y밪|U~R6/5a 1v =W߱|-ɰx0#cCS\yLkcĆ0a`Qo\M݈g:Ɂ4|\݄,ׄ"nj@ wYJ8ZYF!T#L4r'}IZ(hPy<* |LʩhƫD"!rIl9êNl/P 2Sqc0uW DU1PF$**Y%}R@N#{ ra:%I%!sCԊ|d /1F6 #U!9%jI]B$@F `B 9[k ۛ<^kj1n2cN㈭tږ(1VF<¤V>-a9=8b U6yˮOU@eN]1Pqz&KϷW狌W =Nw*dž]"9N u׻/WΩ9O?XhPc48):Ӷng)qH~D&yI[dk0XS+F8GrXG*͙6]1IvG!XMvaNHO;YgG gh-m#v焌#y Fw}-&+*I [6(, G h%?amȑJ$q}qNEۏˎ ~ϱ/AƢLuZk9aD*C^vI_sk97ŝbc7eݬ{SF@@:s X؃pNijS g!"1&fY[ЈVEl!F֒9!Ð-^WLA2a;J#'Rlol5=rd$=q+gVɱl7H%r "O55ćKu wR+ht^1ǐoaJ@Rxz= OmpR\7dFY8q:/\Mv{6H;:ącyj/L^*-9\l G5f %} M%d|ԡ]VgJ63 ",l'c9NSoW/;V ‰_R;"Jd!a&ZrW ߹!Ge"X?ҥt˔+S|SN8a(b_DNPԇO;נ.b#QmԇC[1 9ĀQ+v y;ȁykg&"g%dTSC.E@[z)S1& m9ӷKpHӕT 7 F;yprS+2gSb5$ _9j NRNv^.4/zikJjL@YH$%,[uʘ5_64m\q-׏H9Zdآdv@/u((]dfoսkTN`dej/C8N@[[+[Jvax1IDAT2cFApF )&K@ËU  P܅CZs =dybئ,xlTvx:VxN|+̷$$PȎߊq L03?BM<(R=OCCH A ʼ50*${ 9']:4X:B%j І÷ff~ӯ3v#q%LK[1is

    |+OV6G,Ό+@#"qU :GD`-mG|]H4%siZf;86=dıqX==c@p,t2/yNi9Ʈa1M4JU~9{Z @X݂2*C ҭGJ&1jR\ldԯ&!:3a#$ުf$TN mwa5i^&{ XY{ tvI6 bazڞ-խLY%[Mb@F-U&K澃cP &B$v;) Z#Bcc6sXZkT8[)X_='p/)>ﴉK7r1eO[u {: RՋ)'Z~Y<*6"rNitJůgPZKU:[PJ.g<9@3+ėn댯Ej@!= 9am l.;C!'k-R%jIV޷ 6lm6, UC@mpEJϠ_8"<(;UM)+9ugU!~~(vL-%?ġDLXTYXA*҇ba-S_NliRYl qxX㭋h=>(rKĆ_Rci̻Mڅy.aͱJ~ 82gYO49v XSa%m*[3_bۀ"1,WLɌ O3Ǧ$\EbKmRgV =ⷴP&`/`ú= "@m;i]"kg?᳘l-aeK!dLj0Jlse%0 β ޼E$b՟vDD 7 q< ]E̗yhyS=*Ia|إz02hz:~ PjQHQ-҃[TcNp Xo*T֩u(+ҔrK> O{#+Mް]'%pKe ,MZ\V K])^_k$^<m@]Ijl6@o⻿]*~jy̢p ٬ϺJ(J7bd?(0N]$͈*Cdra%Y a|;R.zxű] ܐvMfJ~-H%epNJpb۳"m7%PޜfAeEKa͙ޓRq阀tITiQcTF:(vw)(_ðĎG> _y@f}Ž sj#XE$=m|$TQVBBD!oꖥMnʰD*ZmV\趱j0;)H0$Md2ߏ1ZV/e5(E|H1*Uǭ=Oz=\M6`ݩL2ULdc>lܤ2X}OBN} *L2m1J"^Oe|ͱ@GUQUe(U2(e]sm*rSSQc}۾cVKğ !S1 cWmfL3& :k[@s[ /5.WٰdFLĂ.bQv/e0'v72Tmu0p P~>q,Ǟ-րGKpx zcUfߵV0ؕ?ĻYxa/0L Sld3Gbge,)8l&z؃X^7Ʒ]?yI>ք̖/nFUتCB{W;\Z痕Yۡ\؏yOm׍UT%\V gi~(|Q%Nr[λ }(OBG#Лc}d>F4 h=Y3x), (@N) `na[. ,,C(#(ԝY&k`|V*Slj$ &<27g;4HsVZ%K aKʏ%T6(,]/L<3tt^O_{H6uUZp]!%t|1b@"W1'8-Lum4\o1Dz gVigcu )0ʈ@r^)ԠTޒKtRV(Q)Eຜ,#1(m~+`E.l&}Dl,B||uke<aL_ h\DUdTXhxB|E9x_k;w+п3 ^q8ق>>f ʼn~IGvJ9Pܸj`ebZ<6 ,7,'2\)D9 nv7*E+dW?#jwA L=oWgʘxp^Rbg8'#cKYiOkʎfy]qb-sUFD6`algw&xKkJk~@$.;b22.Z/ubZWMe™z_IH+8NHD+@:YSɾ4[Q1sw 5Ȟ4TՑ 2i}wŐb.Sr߁"S2xV*A+<6 lPQBOgr`U\ ȹ|QO<ψ$}xLDM1Fa窣8$:tA-R6S9]p즽a6h %} HG0Hm Vjcz#ϩf%e,3Njv/e]>I|`~KħV.Ф{ځ UUJ BobmUb#Kh8{ڮc5]Dya^ TuUz]'vJ~oG}lvI1vw-iq&NHP- UU)i^oYN{W} mT5kx0wȠkSptǟJ3"^N~P#&جĖVx!y*8n2f"ѷv~ z4剁>4E6F_ȓ8|Bf[gw4}(3D:ELW[zk>)t ,K7r|j[Y+It|Z49wQAZgQ*jf<<vPl(K U vo0`Ļk'ӿG|G S'Gg*(=+ZIK4=x=LTuނ ~lWj+Sh^s d?c/n~9pp\"NZ{"Ŕдvl LYOIoYoZ按r6iAjTb؋8*N' .zKFsyMM(ܖr2 u9t8(9 |^c e3OLf`t a꜃J {Q{&#x E7[KX&Aw|GOWgf򼄡oŌ|XbX9 8]ʬ+y?5Z ]gf^do@/CǑQlrI?z=} m ~QK%6FYF3hLgS|!Y"dGi=d> IG/c_kJdpL5nȮL8{N H}GKB2y=ڎ޷TT9 slN?FZa~s V(ߵI ̳O{O?w|ڰVh6iHNGfu;//jOK (E|"[ @7WVnN_f'"=egka] i$a޼j]BW84Kv$*.=AW«n.PS9v D{ .TD2r0 R6cp8_<LE$i3YȤEBt>є-BEMSl(Qb#*{6C %B{ߠ@Dw81'v.j=+W)p= A%Dvp!]Y:dn }uK_d- 7}бW/"ӳCu odgrZzcN.AwL¯m"ƿ4!LCe7ƊvRc(G `F~vY6~ [&%/zU;seL U%~{d䷄r)&8?aRWEPk"U,UɅ Uv@ 4nݕ 5Z1" ˼)n 05˷ȖMd*Q) JLk+g^l7'cp;}"\b%[z!νu8Dx:;,?kHILK2Zs!PT@~b1W\* b Pg\|;h3mt.(u^bxe[ ۝\&[-AYf,^`Y9{kLTT9n1) QQٮ^lk8l~.CKu{0%ܔ]d32ș߀;Au{"@v\ m7ٮ5 Q%YiM 1)p:~,,oB6`e$`x.Fآ8U~Eτ:qd16SE2U*=k#T>TҖO+҆*%|?#@m9ag?,\0F}ẽo9 (T 5IC9R5y,ZEX* P9}{~:xyp'aS+R!{4סώȕ! X?<U:ֶe U4S ř*um.i~'.K_n>,qPV \5sMBM鴔#FZj9&R 'Zɤ/޹aAĊ2k-G`ۚVۦo0CKZDO+J%B[rtoݬY6iOFg²3 5Y Ow(%Juָϔ-fCg| !Ek=B x6DOڹ]vpXE{/lIR2Q_aX2bV=Z!a%?"_HcW6*IF1ph9rZ uXH+Sq UM9is.-*J7[w26͆u:XslX7psrP_F[p.:ܘzsd#*nߕۄ-YGLb`2[SQ-_P_$`d7J"E{wWT_N oF/2 `M;zUȾyюD1o!@ţo |1OY`_ѺC˝]Tk Wqܙ:CMDXjg.>k9U֊:h'JbDCQ(9Pt1iu&̻0Xb ,*{朻82gⳘo4 q%2o|\j+6mwotД 0䓪l@emt5=lIHۢM dԫ ƃ9 _}fYICvvIKJ&_Mw: G%ICpDNK]fwn @s0c9Og7DdꢈYKc/ODhu"l ߓqd_vkhnQ]7ת(#w,yNzKuLl \euJRB"Uh.|+^'#W!eͩ 9Kî[9V>E(q &?Ӟ+b%HQYʓi? O= yHPNJT8n!br݊DoQ~RR)nEdrXNTvzhYG655phZ"L9৵1M6(ގ.鐝 e|#Per ܫO;}\>˺l*5Lf8c:m“sgEk9RzإimޞN晗@IzSY"'ْvgј?OQ=`M4FmSV)Th<&Ng3lE0 ٛ~ܦQId(`e:lzֵߐILA&-OU%QTE9BysDS1dv:% %_eeZ e ةt}WW@S"12Hpj'suNplpē *G tӥ9qN( hӷmOVyA L̚2^"ܩ8S_KJ~|ormT2Ѧud Tc^LnZiCjK$qNe[5ʙ p[[-s ]Ǯ% NPU [-l1XtGJJGdتtR%T8U@zަ|s g36{HUƞ+m=w:bkyf$o0ZwDsI$$Dn%p4)]IM,x~z_U6|y=*PEC{I$ 3!*]g(E~֟kpA{WDr|$FPLcI>c~fڜ_o^L!S% ' N9K1Ah$2yr؃0#8wǷ5}q &H?4Z%덚VzK%T%TJ uŇ+-GI"ZSV|xGC "6 Lp,!^v∝^l*X]Z<5ZY.b(pO]ow{~;ޥm=]Q}q m Se)EIMՓlz>VecK| "Ļ0[qd]9:2sl o`=+9H 'E >&[ʇmq@|rv:Ҁ0M‡L2uqJP@OQ_&A^] lmbrkp:sH_yؚ .bkרʵdZ'`"DS;jE`HN`srZ.s~+L.g"C}P͵ҕ8k:x=++¿!ecKk%LIٟ_LC"P\/TH{5G}⸕F||* ADXH܈sZ{.)I/ZT"RE;/Ne,^G@$/< OP&s_=1,qcVoD^T&=iF`]Gw 7ݎ~;>ҹ^wI'|!!v`M3r%b"Sq0Tmf!:{X?ҀY{ΣE!ơ(qE#Fت~޶ͮr0l;WЗ7-#iXVhҐi۽0M[ !%E%necm+>CnDD~Q"Ma Ⱥ{kmW`J:.WHd'̗\<~Pkjkl"Mb,h-O |q721]hK6 Ng@a DA@wR D 3,0wmL`oqK19&!.Ɠ56絃U&Ō8 W+*Dc MG,a,?u69B)~b7obtx1E G9&zGLummSY?9gGlwh#^oY ΕxǦA؀2ѠLWI;.|^N/.n7&F'@ Q?ef**PE['pTGBaGD #ת/tm )D>ȼi:kZv6nki9oؕ1p)~BaFP4{y.a:$dHO;eS!" gi¯V1j[7;*7[c5giP u9PUޘLy9j {* Ĩ̯qh|!,91-}ɐA8C9y}f?࣪2jӲOVb^MfEٖT%jFY|op/͋ SL~ys_#fE%tPp*'Zgc[Db tD>+ljՃe#|qjUnt#Ԯ `D0$Mk+c(Ĩb9;1%‹56J?#_T+ a+Uۂ6_CU;رL\Ϫ_kg.:Bc9D8c<aDoF0/ۖS66?ˀ񃕋p^O_{HF}8E؈sz1QY6,!UT@w2߈u.9fҮE!EW 8[>Kw Nc^r^]Wl2~q-? nprO{OqScdsYNm/vv0RSLgEggi%@D@`.ݙ! ~L`1:P)  o3v"V^ٚȱ%e. ^)tXrUCjZzA ;e}ŮNt5uYrAU[ fsU #P'd_J_&t9\VveE^k2߲1Z2"Ex\ Z+st][-Gy #zc^ensP]"deyy#>8*2"l*C"8ߒ4Q!Bh;QB:EBo`^ Suꔲ5<1P%.#eUnq(muӆ2Ϛ/8ʒg^!N31yÙ嚜]*1p"b+pe ,-k|T-6&#s[9=3)_Ldr:ҩLr3 "*ݾGU/!Ȁڮ޶0zfLӎ_o*cg0J:P9cbh~%Х.ۦ|Q/ jyMO{ PU,y2GU]ZEŇ,Ӝ%VI>pN2 q"J Al| YҐLVb؅; Y8/ +u*Ve]exPʟ2A]$τXJ"eFk͒LA&Oy@Boiݏۍw[BR)#Ds !*:e(W*Td,ݳ"8  ILfPI bxٽDn/k7\ˏ0%۬*J`H0] 11_|X9 w :>WRw _Ҽtd|`\+T]eRdP e BTeqY8p.~U Z.T vXeQGh*?!N=Y!.yU-N1!H|$IU5-dHT]ҾpĹ]Aڣ!bR|+vE{.DP\jcj Xޞ4Fb[URL=cǫ="-?a[U!%\/!-qNV|`eX̸`$%ҿ0HT$@+)19}6Pz<}ɞ@w̛R &'vF 7ce8yx=w{15e'|;{]b,'1kZ2Q XP֍gUƗj~MUVc"9튝\ܮ05L}NkdGEv'ͫ+Vs9C;>9ZM J#$%, ls@ty spR'q9PBDި` S L&뗳{_4OnUΨwvפ,8짲lpzGL [d#o=d/8v]^m %yzG'Do!CBO/>%qK'wv@sh&&ckUʴ"&UF8Jڌ;K$0$S ,*^ 5KD̯һ5H\*`:BR*0'qվuJkG/]vp쨲/iOy3 j}2ZնʆIxSyث3vLH $(] I0"k $lDvR2ITQe_fHi*O$"'9;NHǥ|{Kh!nd./8c+vkֺ@PE;X|3?k lCqS,֫-ߕ YOZ4gl_٪qN[Ul?syeDR!㴯۽ N"O%CA UNَ-,m~MkvUVMvԘ1-`6Lmǐ>*#2k5{Tį XewZgr8k{3y /x`ѧm4E쫬PjclS9Gۥ}fYE?ߵV.&4_~- FpH4į6$)nFƣ 0|_e&@WxlJ[!YsiK?yHx8gЃdX>`{iGْܸvwڤepىErBDILVDOFeѧIDlHi*ʧs u;ЎEp[JEOW۶~́1 x9#ː%?ٚ80f;ؔO)v ̰9s.зh#7OhuΜox `H+Uh'iLz|W7FbT6Ob}eUҔԅ8hG9}RL փM/K1kK,J$B&)|ηGk5CVۦ!d#Zhx4ٗz3l+!A*i6N>&Woq+>qq ވ/E٤T*ɤ Yyyh3m<#Q;젝"\t3([/*Dwk1(nPVSf(  :-3~wf&]M2 iwrBû9i6P9Z"֎޶f-RS )`>ew[7LX7_?gkOJ>/|@p|NXuHX72ec T0pӒGS:ͮjG@Z*PЫ\bYΡ4dc즀Aɔɪr^|V/&>i7kE#oM;.HN1WfoZ',O}!h'qbyېUEĔi82k l2rd 9e:ePC[3.¶#^,4"8Υ. */ϥat2g+J_nt{e1MNi 9/'[O&6q? v+Cyl DF s훺ӗmӀv| 텓@y~U[/ <})P;9D]3CǎCZ^Ģ+Vh# 8dZaN E@|v]![}`݈fR;} D$"/'vBqЂvP~Kr; j4fZЊ!/qx="o%gS7Z킨;}ÁD[/:Э;)*"Y? D"d6@ؘ;0s,NVm*[6KLQZ0Y8έfsB>"W_|g,i*߶u/ zc!+Nywi^n,g0A$-?@վ e6׉EAΦİ6=Vov:Ŵ DaJ# t[8ɇ.;ji Aj`ЯV:H PQt#Ȼ zb `,%>aD,z{ f`sŗy_xJXi[49ldk,(yw X8zKDu&KP;@"%4d&z?S<4kmIN\PGt)i>Z~vx*EKHow`tR2ET"e*ixvcP<(p @NELs*5N?{yR;\vnu.f oʴpU&:2$ @y%Bʎ)!dh&X|Z>C霨DDÓ ć`Girll C-ff^Pwgl A/ȳ,YfnԴр:s(nzȊS6*RBpDE.mw6d02geH:&{\N{YZdKp2l)Ԯ쵀O2 [D"Pe7DJ]Ί]oG9 +]ed"Ev:KcVYQ>& 0}ry{$J"pצEZ!B?[7*AHbzBZjr"Rooۃ̫-qF%?g 9lʗ s%vt́5܌o*ۓSea})fCN'TlRqݱOʠk"7-;(E9[v4se% ZQ7YʒNhݢk O y3%C콭 ˩K8H7KaR_"&e^Lλ-sVbXJBMUA=1d΃u,\jX6_]701*^ՐvrKޗ5>ag@9ńƉK] T؊m?AȣL[[hw/s:u ũSť-w .$*H!?{3Z'o?/v @ek"r)ᮆvh>̪m6WZc/p<yόۘ-m> lxףUւ1A#8~_AsYuN"LbUB`I9;JxaRxF_;5hZՍH|[_ `e*+ӂ+Yt=CKXoG@OZݨ Cɖ4M鰡ڹy-3؏gi`KwA:'s_y~t*#y qZ%R>%E:C@g^(Fd,|&y%`VcfkZ7D*,&|Tpd[vSダu/0[JT+@b4DE;VA+uDaӍay{V7"[/ȔUID:3_d='@Kz\5", byB2h:i,Pْ)pJe-&*i嶿H,Jog\8]wC3zGm˶tp7-*-a raW[@ A>5Ufϒ8b&@ҩt?!%@t"фr,CLMvfW#$M~P^Od* fޡĘ2F|I9U)W2qj$ Zv nZ@IaeBQ@{a'+Bmi ":UOeeUw7 :Wl(ڰ˼_*Z$iSe0дW^H0i=V/iYB }7D JQH kCӓ;cqU#Vbpb>TUyKJ8fWc{((-0y:e_+n?R!R Pp[51 S.Os4OIi,1;I+Q}n7z Bo6#EO;б#=>vޣfa-sh)GBO8=YG=U-E'MwrTlU*17 Ad N'#tmLJkY~ ߳gU?P= KmQBOȹKgABt $NEPd!"3Aq7/v"m^~b&(ʗOXoKz@$ήA]SSpVG aK--Q#Bevּ?%"їv[`Ka.bXH庖!i xVZTfL;\3y4IzQu)*\;Js2$R 1vkax΂,V `G nwboABnW .BzD֞/CAkp%]d/#P :o4!汽g; S"Q zcƕ.;m!c-A0PVXђfLŃ4!de%~ 16Q؞,]\$c'Hl(a(AyMG \c||\W12nn[j'ӗA< BټbN/r?m 2JU(; 3 #cU5 %ovh;~"E1q,|Ge9LFsړ!1zQ2CxJZ%\ОY|UMмNcm'@I _8wZejRrK[(>􍅿aW%Ux$1I|䨝w v`s ʠrH `=)ܢĐU&k U[5+_c\HCձztRJV%fH5vYG5fG~ J}l#f@zǒ|\S$~/YO`DY`^/]Q& v~J Tr~x986*-\S*rn1-g0h^m>l=E-sest"x>F+EUZeWY 1sQwifC Ri\[ ^ƪ5|-Z_B o+TU Q4Љ1zD?*+xms/r-vFIKjZeų2e %%D8^)gb9XvbA)K {+{v^;!޲NǓ(Sf&17nZ)<[<[|BvR֦%a2pZ~J%\d AčƭL2;N?kShѕj̣xi͙:6ejW³)>@1KlҒP&Z9kZ^xKĭjr= gRp'xFD[QvX@#9!aQYJX9cljԭf\= ҡLh>$8>؃Ϝ3"LmMUKa῀GZڒo [$ǘ*]HmƦG("Ծ3R;ȸ8_cBE֐zf3lάVUpwm9uA[e9t>Q,(TLDI\C0%? NIoBԞ)Xz!<51\%ta$G0@j :`GfWƻ~;O ֎9͏X>^ ;,N;ڈ6(~ `@l10~ >ʾU'FzR_~"i*9;:wzZo]XpDEE^ÙE&M\I0au ~klRE'MtPW(P7Zܾ|HɒPx[" Du 9po'<^%f9}})VG?4d,1ZKD=srP%bHtL@5cem eXmk܁̙{Z;(6cO-,yV%*lryi\vZ2B2#8:bCUdBVe2Kx;k|*`R͟V`R@ݛV"eUK#P3)8 v;c#rbp;~="DQ@ύQY:3,Ukqll};<͋(sCjģ?$Җㇽ\L߷4cnۉ`~=:cW7םn&s\\",EF˙lq]&vp: mjksUlʮżwagM/ 'Wd1%[V#le{[ӿ &a6rOUZV*A5B|Qie^t]I(rnw\|is֘>uO 5x=&H">jcrYU @Ip5_TBå<\ a5&<3aKFAIմ^mRAU/biUE&T  ݴFВbY2P]/lr4v~!R{˕a”F2)@NhЈp8إrkH1%%L0c_%qaXQpJ7:Kޓ>n3ȕ4@||+V]$ ;W>g h@uO{I:94K1J̣ݪ!Gr7Wq{)-Zf>[e+[1}~ Fr>Uc'[^B1m\aRكV$j:2q / 7,(;@@&מL[s`c6Īg&ϻb_׫/2DΘ =~< /}Գ>nMZkls9 mKO"CUd"Qթf ?޴_9 a Hj296(sO-|sY HD{.u4&lt>/ eG%ӣ$Tf&֎f$Ud@ZJ jEYʩYU5Hef's^]n-Cǫvb6K lg:gWVs0~!6 %UZT~ c\7L'%,(7iʧadkm̷o%e"FK6Uu)mlOT!6{޲}?!-GYBp pC6nx;.e?br28D⬑+F~Q#PFggl1殥@`L NoON(Pf*1XFX|VUMcZ dYST[M|zoUt(e }R$P[_ƥ[2^_u2_?.*pQR!y  _bejǜ} rE98=sd4z#9%`qnV%}CFoV( iF ls L1.zUD ũ4ù~4"gЎxV,zՃq L1Co RdA;8$ʄE v*6iG7!锕%1GF|xBi+w\ƀm1hjr8Ed?5C"O | _-Փ_7Arv`g%"c3}Nf} 1"tui>ȲwZZIi!)Q[B=#]O]ka8oΫ<(Udd3Jg%'dmZKҝg/ SZ z;d? 2(m6JH*^&wlI$4?bEs,/UƓSv>j~iW t#_eηtNzM]a۳꧷'"m)fy|V5͙$/g2M Q,R"5/e**" 8Fe.g/Rnh05. JfzV/i|,ykz K TNŷ/b߱l=cg%^ (!6T1z*r$ #(;bɇқg~]%0)lSc +_!@pغ&mf%۵:jsT* #NY~VL!ufB &Q鬳xw [=PS_:"^*o1t^pj8D*^ĭ*DHF ]>Wp>0bkwQꯂS)7][V9/A=G[T/cNE_)1v & `&HGcDM,[%?jmSBd] tw/WD^al2*6*/83SmIYZ3O{ӹ1"UR ԘA csD&b?T&_e̋w[Rګ|@~2 "ιnE&_H:tfns|ydP1Y g9SpJm&&ݍl''r}OͽbS{MW IE_8'b{tǷ氬uyЋn{3%"'8bh2&B6_k2}R"MT$ol ']2JZ̷,OS泔X_l LUCL>ݕPyzdޅ9U[ZGNv2L_\n'HDL,8%̎.mE4q ZaqW/Q~U&JUe _Os620 5#A*{U0 DbC0 8׾|ٳ뤖I)@Pćۼb?DQ[͹ađ8 4CosX qװH?/-Wp#beF8D::`]p nߴy2SSkT=+l6u;cm}eYu%C-y[I~iwWvOٿ`hL;h5;pX{x7 SZ9=FB*] dR Իr8!È-DtLцmwC rdͩmҹTjh|Y[mWA2#[v[SAL' Ԇ2QkRԨ Nut|m KJ9d۝Z怗*dqKʖZ.,n1  5-FȸL]fk^ li.uPh*9e&1eۘοYo2Q x\UGP=FY*"Be2|BͲkJڍ++A ݱK[ᒇ֡tRh̫_`e[d|ۣsTSA*/+-<'E_Z7”9wn eL.QAUwx9 CU zMEW)j~aw#QS"֗q}|iXش/jjt'Ws0q"^V-ym=~SsDH>M>sײ挳kcXDt7# ުX5\ɀ^*ŗH\q:} JɴBCgCOK[a[s 0ͬ^luE~}lĒ ~9% y0B˛@m|m-+c F8kY 9%+;13w#Ռvl#ݗ`l6uIg+X bU߯.Pu>Yiਹen׿!YKE$ )(N8($@~ h+߀3B08I,Wx*~ȵ5ӟ5l1 -]hkWe"}. ÐId,%U le%\G1=<]U&$F ${ais[O&KPη* ô?vyK %~T"WY*F;'5f_ U ?ܳ쯞3ϭ GkZEX.a:bl{:_w^S? s՚y<ۡϜIhgwro=E6_hNB.:¸¦1磱6Vin$]ڊ @DP~=Ծm9E۔o[umkvK(Gd/ղ͂5X l1WGHA:/᪛Hqh-99NlT R$rTRLg͑"+~9.lb [ـęY~Mz2*Dt%H%{ Q|:H$)%!1E7ĊpN%&uLbLq'swE,B],[J|Tbc0rUM^o[GQΟK&I.[I`J 1tv D3T)nnfU+d,#t9.{A'Du_f*~I~-[yl]ɾNeU묞_٤`I$&nnnigΨ[h蜧.H{VU6Gi3!vws7ws7ws?Ӟ&"3"[H?sfg_SWO(#1gs61gsnncojMBfa!enc-_ֱgnnnLguZ3-pץ]FGwkOUamon򸻹o67i=#MnnnHpi=͝i=#MnnnHs3ܤnnn47i=#MRkfif[:4ߞ?sk>i_NFl4M\+;RnmZ m&?B-);ҚMnQIzmgᏃϾMomӦ,JȢv?]N%K'ߋ5v7hѿd;U3+vNXZm[f mӦy~Oqil`+?sm/EδfS<~mS57i۱3?gw?nn-ձ0[u_l!oJl]ɾ;?in&mTɿKm&mws&̃X;f_5Syv;)ۿBak_"5]"B.WL<#&>Z7WQduHaC$$YbQxQN$N'$aZX,eJʅ3`ٳg&@P/@ ZaD",‹J{67TZ7KA7Y 뮿oGtN+$+$cvd+|7lVnٯ?zۭ/ kf8Iyv ʵƮkyW[DI4~]cJAI*}]5Huy7k:;/˗cڪ-gVUUٺu+'N `Ӧ L<$#Дw!D@а@ jiN2 k5$ NxE`^zcIrر EUYF_˖駞o`x7W_1ġٯ/?Tpwm(dMAbzeh Rh+sFLfLY#du0UeLDV͡>=XqEhۊY3fٺod9̋^ѵkF 7!++9gSbvv!qAco+k&p0t"W ӈyrb 9Wm~qSSHx% #RѽeGj`bi̪;$Rگ^M &8<|r&!:_m攓/IjJ*^vN:k6;?׬knEfw6OAӴApRQԸh>;Z/X^*kf-l8+xG9ux@|VzvG7•q`Z{0%Ihf5v RM'-5 IhQ0*VJA_pn&= =z4C=0u O.ZI |eV?!X~G4۸p5Ud%Уʴ},v*ie-[ub#,"#c6(&W&f!:ue >>0Rw .6o|L`sE'|ʦ[xxcOKsf;R;!Y@p P`Ŋ_9wkK:Qd łEWC׫E H=9?Oiy繩=%}y<jiY~uȝ!k*$ζ[i۾+~U\}g۪^7TX7k/Ge äp~d Tt@L$III~V+U1ȅdއ83UqA!?aJ8+r_̸~0YI8I"i0 2gȒ(y)ie> AMhN@97S5M I'$F)\RX~uq6۵ԩqR[ \"y9IE7LĭR$I")ɉ̢%Un-cb*WI/8 -QԩMS66{,(0 dY&;;|VI ibXCVTtS FSpC# # Ce! _LRR^^ %ɂegEQX,MQUEQZ޽[]P;bsn{"xdU'. bȢX&vD2k*G>$ΎqjL7^1v8F_;w{әX1$ UU2e*INL>̇TE˭r$Lq5*gKi+l*>W0 4]/D_-p+ee( Ɓe Mʃӄnѻg~]ZIa͚?dL|7'ޅ"?"SRxw:N64~}vc DUr5)u66Ff5<+ޢ֟D!N=h# (jLȈVwj/_|ep&9QK*/V&Saٯx˷~?󯔏i"2gq3g݇fn"& ˮnir>x1# j$PZ7/2e$~%zʈ"A@(&קqyXƺѣ 'INNszƼl,Y#oISal޸Q.g^ ##yo_o̳OSZZkƠ( X@܈6-DSzӜZ]P'ī|k(eg;+ݭGWh:%s>˚5b. z:_x"Əga 8l2*?/ _qYfQ=@ TP MI@8i< u?h]42;vlcKi޲% i#ΤuVtڝO>ǥ^ɾ}ر}+^s53NˈdMJ8eJCNbbz`_5wzӊ-r:7cYV-Kvs͵V k IVڵk˭5'8&y^s5I)?3|!]T B.8֘?PX4q+v~_IP1]㩲IpCՕ/ֲރ?ao# kk{B%F gȋ].5NhfqijN/49u=&@ )B'4A*Ł*O/3/r)X}q+8tN Se^ 9k &]W.\)+ &r[mJXtB;kOd&b/֯gp\^bF2!zض\8xWws=@Д8 ᓛ~bMRy~K1kYMyjo9R(RIp D|mRGD |*|[m ]on IPJջ A' Y)⫱,Q;E(uq6@ B'41 UF@ M1j@ 4i ((J[ $Ry@ (6RSM>z&̼nq6IO`ʄ(>TIiu߈.7fpڻf%Iz?2c_nf71>~ʟO^߽(ocκ'J8?oCI]cM8 K̞|6cڳAlK|bs߇sTcL#;$P.ؽ nIny]%t@ +v)..f֭XP!-- Y A"qA53钗՛1ؽ[zk=41#3F\tf>˾L^{2;_[FF={>N,73ˊ|dQi_c|Nw/f5\þM3u \2Q<ǧkbx)>fN.j }᫒lm۪,O{o{oy̥-of8W> '3gʞ<vSDʴIFo?Xw=6|߮c3e&Տݩo[7cݰ.̇/3f>HffZ̫IrːiTYrxŹح7s nd}+ 39opɉK팶m-8y<#֞+$ٷ3h QKּ:OU 4BdY&@%t=`:eh@'42dY&5%$ U)2-$I0 dY./IR@p)b&ޝt 2>BJ;'wbeZSر9o!C e_,g1J8U ۬Ffa~|w:y#R+gξ46YiLl~=O?'_z~u=_Ov8-RW^z;W6V/ك2X#2CO|F ÔORa./LaYa-)]`DJO7< mT--Q_zxISw.v5mL ~ %3zDmZsQ.#>D^nڧO̧SVʟVvZmrvZ?m&UOݜ?\ ݳyWHnmŵy|V\- tLD ,$I&H]|)ZpY"}( $'vnERgßk2,241G|$Ij2q\wYUU|>4M#99_ B'4Qr;0_g2RRh"\p٩"֖hٗ^sMc)tf,%^?ޚɘ1qMan[ndyp=_eNI&k@nt/̥UN\tu?F/gt ^uoqYg\{F !3h֢'frZ"#5m2ImCUaҕk13td]K9cXWښ;t?aDl{@ 4 dNsYHrz2_U&`EU4v'VU0Xmجt:Y\ PWpdcjłjŪZXyrAm(u3d^7(ݻI'‹/`"IaÆM8EE%<Ø?~ɵI)NsO<>~lrIS/V“|6^{avBG0ytg&ס+ AdժUoߞ}QTTJv/>=IeKIy9LrmL"sw.'oy,{At7hk|:n2ׯ$n̙$]9#dŻOs9'#y '/W@P{|%~] F^G{Юk7z$#E 8x<&OD@ӰYWz:GK~0L n/W‰@ h E@DY0N 0 . @ feݎ#++*JhMX=!2{]U y _%]B$h Ue&:+%z|S0 HJNFrNii)(B~~>YA#ݡ<e@p0ȲivoJKKƂ|\.;͜@2E.,dfri& ^,d'U:MمiBNNߺg˖ݱ>Cʧ]lv)  $IBzQJپP!26 %Zxy@ 8xE@سg]vѦM 0 loNVViOΝ$J S}L{!6;~L^/nC-4,+&뱖1JX~?Ŋ,A=1jxUUl)UQسw_˰Њhպ=xCV,˘Qn[DjȲLQQyt~~?UUQMUb45lv$$aX4 Y1 YV<(J| A$%%g`:tOޕq$p8uY|(AFFqwH].T 8DHNNf ] @p#qA#''sAnn.رc$###(l޺OMvdd1Ox5XV6h,I\:zpvm\ŪT2\Ƽ/ 1gTe\K[~m/5c\N ^z;Rh @jg$-E6lp-冐b[mJ`KMG5+qZcÒ'a"W_c֍BQO?ʯ.aN.;8O'L auؐLΤT"&^@ IDAT5ŃSsk(22![m$#_k~DQJJJxӷ7K.~劸1I}̾~B~S-^ۙTE˵@ ,"N hbD:LD, WRZJQ Rܩ#[e )ԒKy~Qx 3o}Î/ċ'rvN=c8<:Oï^]Gqɢ嵧 sC2f6vG꼶r"= t C1` d> aw;.=ͦqڜ2HW_ciiЅDCp@bazh׬9k:-ZE.g3M )̻nb헯 "=7}d$ T'~dx|dzx7fg3 3~NaY6'я|-M(Zt:1c&pD#*D2 TR?>#,K ia,jM" R 3f"#%tߟRZe@_-$ndtՌΙOG 6SX-䪫X"[0>]zs)zh?΃.;U#Nlѿཪ֍*ZQ9 W^63i/Knbt[2'vωƿW\ cf3)ܾ3y6`nz= j :nA2ȊT>GX/^]p ݾϧ2ad1E#N㜤,'lZ)}v9<7z"gv¦Oc@ὗN^ c' @ ?0HOOK._fk))))/2ť<<<#<ЃZY AC( 6`t”,8@=P+08xq,^mlݾ+.:]Xux}؛uu=k3(pqeHuDZN]s989?u],t!#2h`~t8Brri E\#!x|B$IWu,I b4P h(B~~>:thPEܢE:thBL3fT(J_]oJ!!*i6^Aqq1놆4ɀqT߶XEv4%I\)(h8E!;;@ P|}>dE&55I4VZU++==+/jB/$d4t @xJZMwsc *^Wv"i,SZZ=#$ 99ݶ[),,En[lI`61LHgv?&2&ro&s#oT$n'~?IIcEn}ˮ6 -"χj廕+XXHҲeXV ʅE֫/UZ$WZ V4p^:;p^H WWF4,:BKjQr^we: 3ȲLzfU(&io;,fx'ez͜QRߗͲAK4 I]P"ހ jE7 $H#54͸>_gj$r>eYFUU$÷m#e&\W^GafdVsRR0 PUR[LգH*]MBcgFٲ`=,̖E] k?W1>LN(rfULNN+nwO_Ǐ2>y@4نAc6b_uW:Y hoR>uʸFV#rs[UU0>qfXp imu׶>vi|*=㧟~Z?ѷٵgMfz:]ֆoqWLj?>[|n*+5ʀS⫝d ʐd_Uز,[ƞ=e=QFa&IPa,[ޢu⣶!dgȲw^E?ؓA7x oDQdVn, ۲'wƑGS¥&[mm9nuIR&[YSL<$+K0< &[ٳ{7'LdݺE ]PH |"&KA0 }ImXp&9?v. h>_~?3<7]k[oɠA m9sf3nmiS!--͛F>hJ5ɎHj}bիXhF.]8vrKx LuJ]HQy5"uƺkpVB'49$IB2?c',KeCb())SOzb(2YjS+B {k݂E\c|w6E8(.Mi}/_euwJG`V0ޱ3,uc#mJNݒ_{K75Ar'M|xzpy߽w&xt>=^ɛ+/s#g&{c1CnCEۿe'qL#ك sGwIiA ƒؔ q'|ry/ݎ=2X ''26Xߏ(1"@rrˈE9΄Gbfr;[DiiiId}t]GUո5>W_:XR eD[1l AcƬ2'%ok6%.?!q޽xnEᗟƐס=6O|B[bo_u2'ۣ݁GYUP \Ӡ>V{"% uV-[8TY0 R4f蚆bRvVϊO(.(csxO1fT:_,M6CxG2xJ8 ld ł'ӼYJ^z2/Ϝė\=^ _xX{6-WkSdk:'3Y2 ]4A8x`tN؝yy9^>q7]7{`|9n;\pŃr̞~)}C`?xGxdU|n.:=E?<ɇzpϭZ =$,\ ̴`q4`,ذ_>Q]J80M&cZb.4 ּpSc)ꬨik44MW}hYCQSA-.fI{pu>c1牦QYC*wrß15#hgɩ8fRh6@@s.}Hii)=;GRO`$;С[6moFA 'ĢeɨrJ7~RV85yaI 55Ѷm[ڵkGvF6 F4G͜涉wpdedeY-<{{dee|ոO0P׬YcBF/0I[k5LEdd5h=ACa&-[dѢE %{6V񪪲rJƎ 0|1wt#;Z-Scqуx?g=UKNCm*+ 40VLà}z&q)n'1Ȳ7/`Ԏc[ޫ,ݍ<}3Ƭ9rxgcǛx\Uƒ֌9cԙ\&>Ǟo |HpcRsh7X6AFf&x~c;SʺД,l%MuO66H=i,NyYKಕ6y꺈Ҕ e{>o]^a¦bX+BJ5>"ƈݥgyQ(τ "Tp4ah0 f0lpyt Sƅ]|?'QDDhA$azXєpѶ~;'/ַ|!;ZG0<^oYN@"7'Ǵ`ќx[6 ќrDk9onP\O%b21NӌKp ߏ]|O/$S {"+g. wW; d߷j|֭_\EIq8ީO CJ4/Ͼ@VH`eG VlVC a<v׃n\݆Jjw8{=Qow8%}$( hZ{$ ÁXn!8&^( F[J vP[z}\|q9qb7Mw]4-.yiRPP@VV>͠m^߲#'E ^j 4 Ԑ{Nn7o_>i:/W_Ŗ:ڴC4PU:eI;i"I^>F6c2z45L3:£@љ:O?05^NqQTZ*9'/395 3+4XN >h.=Ǫި[~G[~*#Owu+U%u 4͊B ##T{eiL̈DFΩL| }*=nR#3Ӊwx; k/:np5-sd1/8a5ogyǯZ19COYsP (SIOsɃjK h<l߾4dYfժU˵5榛oLRRSyD5kv@SUeY\Dǟ~kmzw?@ذYpp7gz/̼/s _"0%7I#@BSޅ\7rk=5K] )*rDe'،46 /uuJm.cQ$~?LI3Ki}]\:#,X:|#@(tMYnF5?|V4^-y`ڥe?|(˜S8̿l e\]=Yw_'Ԛf͚p@,UC}LG}0 "o@㪗r|f9#V5lq,T,K4nGXchxa IDAT698 iTMRT1N9XRԗ)Bv= ` ]ӻ _id>1A=Ba$9UTL~,)A2͒C5ǖcU*+6oNގo7) pdgtrGyH ٵkZ㴓XK|o*#.O/Qm D#G'Og?kמa%Wrt><y/~={}!?EoE#1|+3:Nz^j5<\21cUg||W_q u?ϬYO4ֲL:.#t,YSU1b#Oyc<%{GQߊ,\KN@ ҿp˽wm0~|I=bq!\Oޠ͐togܸZ=~?"_xM q'j 4| G_ƢGqFه9&=#'O#39ˮ7= [Xٛpɭr_qLO< >ͱQwܩw uh>{y _E{iٶ{_سgxݣIiݍ .X#tbvOԲOn輹Me]&IX/5d(ūkETf9_Զ>r#v~ܔw8G`W={(--0,M[D"2u]vӲeF/B/wp8QY 9.|9o.\i\{a=5U?g 2Qkij/` ÆBHzQb'/0kvVB$:ۗԓNI 5.ta'0iL)]Ef9 äex+0S?۝]c,1Wc_9t=#H(u:%&QpZ4L2=r{͏Gn%dTxew$)Iy諵<qƯ>!rѡC`߾}ua|x "rŰ+ysƤ&8-l^`ԈO}l6DQ V#0ib&(2,{8x`P@UmHi#)aPQQdGv4MSAUUt]4-6 χ(BXQJUUi0M(ʶm*: 躉fYH,^>Aٲ,ǮEe7gCmel]Fh (Ld}Qx}"z(_x~m}]vueλ˙zmTTT(LӤwNGQﯽk"~,2nʍ,[gИ=0dLw8K7Hh+d~hR2;titLϿN׳v:qWL#k׳n:Aҭ#}j(ڲ*NV\x\IJN7lzn=:d]{UnZ6lقjLc;~!I]IstՃ)ӏULϴOٰf-׮T{{,ߎS#si1 %7 =T]:Ѿ=i)Ow 5ֱqVcS?VMn n'=(tKDs#޴jDfKʩ;a~l2kKѐKkiÅ(xĉ;.<즯|:?Mn^O~ᛴY˩ռSGͨQ9r$. Ajj*$''vqݤJZZ8.Aff:GEbb"iiiiHDrrrםN'<$&&R#v@BBBH#))Դ#rOcx<8:ʳj.vO?XIJJJ~:ߌU:Pu!SO 1,Seز|ƵV}3' O>d\i[0!)iK򮪪"))UeN}^~3i؏$ V|,--+/?-w^Mۚ&M!:iRXXHǎ-U*wfݓTI5n Q9N RU5wѣOQSo.fG|GGhnMLӡe뺎5¡XyT$U^mUx:c/[w2LB=D=U0E>~Rrr"Ad9m=?S2S#'+x/5Xy櫼5䘛H5=+nu)C WOɇc/2.ڋ`Mͼ=j,v/*`_J67kt0WtUDպmSYwm8_vp{iw`n+o}g[Lߋ.`5E{8;w>ff/qxu/ =kC mF}}\qBæO zj^ٵl&ν:d>|=;z|j,ANȣ˘߱sg+Val*NC,J2uϭl0u=F^u f`VsGxO/^W4rWI :s('xy< {]Ə^:Wz׿`I?};ǐk9SsG3ԣW mCQQQ%w  ]1`pŽuH8 p72gMhԌt$EH%kq8,%hd]V~i1h#?IjZZM>EB4RRJK#+#$0̘نB0@`@F d܄T5I" hׯt:H> `8QY `S/=}]@VѿE>A00Pg- ꆕ cT-ٌ5f(}N.I0)&_(D0d}WHCn_sŅnEW%sBG#bKnW2>T~+iXfZ,h;7⓯n 4q2vlڠ=>/GxmLͳ^"C<\ML<4DW" ' 'G]O?>'﬛֏Z8Vfxo>Y!'釘?ΔYi&ұsVQEN^/# TWjC^΃4~ 33pUP^^IXUqfc*hTILȥ}l-{B;CGU2םҗ2I2|MU"dMGEIMMm>,*[ꐈ 1#jk5?Eto3 4XLPu]R8ux{ߠ23p JLVz2FoW5齺OsOo쵴wnPՋ+Wd#)7#D6Ocd&cʻaXѮ]CS<qQ>{>UEɾ& oH"k@S^k0sLFrш 1c[oOK/WUU"BC.hoͪ-iS?_)n 8Mø\ {ܪWQ%\ ;z\$ˮ55~"0^cWU( 8l_jWG5ӂ,[>|;({) UW(ݷw>$5:,M͙K(!upX|zrYz7b8=HKI`iQZuTܘ:o'с68& ~ZʰK728/gΔ8}Xr}=ڏ …LNmKεK)3ܻ3.{A 'oUOBٞ)ܻ]PMAR $߾8coxsc6YR,fדpvH˳0t IPn(VO]׏Wk嗡!k{v!(Јf8rdG !v$Y%Z.nuE5Xr''y} #㇟h}INx.B.}+8' ҫ+e!}^+~;vcRqj&O O$ȃdsvA /8ރ- 9xVO Ͼ6It3. "#Ү'z -j+Rr:a濿 ߅pgOZAV"aw]`cg76ΤH) 1mho(q`,KІ_EK3ԑ?y 3i\ 1]MXx''_$&'_{q7̩ܖehʒO9k?1`{Ɵxk{F/Os%r1pe mM౹qbǎ;W WgxZ;$f-ڦG>vYF@NjnR̉߼G1cQ!5QBkK䋢QmKD gE[F%82sN8DăB***HII9j$8p &#OF]t#U {X\S@S&Mۃ" 9&LL:8P`X:Fii)rk#І.=EH=@p.f]-S=)#Wׂm'ncSTڏkN˳MSr60 1!{8 ǁKyc+O-g*2]X7ħpI.ttDDLd䎰gy̛D>Z55b4͸Ӷv:hYѣUQ01 iii||_P(lw4$ 2||_D蟖lQRYJ)<̋O\Ө,mЈvt{Is鹖VO?ғhR_L IDAT#/慈eρ{]zԛԨ[)Dz0kj8J&g߰&ڵ'{xC:͛w}<@K9#6|Q2b2dֹ: %$pdtcPu.8r1L0zݯirAKh mu0}񥥒kl5D\#-;0j6$S}5Kpٵ)V9.*ps{[4M0 uDA t;].hmhCxK>9E09́^4ВhommNEl/U!L 7ܺ%dXSP5[J8+He@땅HsThȣ8e&dsGPZeĂ5 <O/!Rm-ƍٳg9[TČK(8FHA [k6v8FǸ$a h!PAP5kУGC- B[6u9Wt 4.,c  5$I8vDQ$ MlY~Q%EA44Mk!E$AƒiT &^5(`SILa!$+ڮ灣,Z5ۚL[ȵזGw!deu"/ "tȻԭ  P&8 1, Pf& &*86R=/2]Օ +l$[@&[c4 覀tB0哣5_*bE}D♤_~kt%݆ geO(ۏMf $ܱ,&9Z2gVd2_[M-2_'p!T\n<:=,(ټSdK?0XՏ|;?e$s**9?kCOXZ۶t%|CO^CVm_ $iE^wb+OJøjEj:EVYm2c !C~C Ė6 KèN5iwnKaۚ@4#fs=}tl6( 1RBEzGA}6(á#,`„tNW4H .@$jHQюSr ԦLfg% $'T׹SOBAp8@bJ:`""@Oԁu'ƴIވ|`>7ѳ!h!GșIu}aJD(D0MLڹṵS-Ô]i >6:(l߾rPS~?p1bD2NQd\.7e(./knB ĝnGvŋϧO>ȲxSwQ! xQ YNL.KI rV8eNȀna-WQjiqFcAp\lٱrv}z  6HҊB];wԬp|$QJ_$=t0* efDID@[vN T*{jt$Q& efDٚ;noɣ#JnB:$("6MÐ%4gh*&6jBkɩBz<2v(RNeg$izALCG `wrDHST!֟maLH{$b& Nk&az#8L<+2ЯG!:jG;RyyqFfu%J "bri-(8\\B7,+2<4 Qzgm1a7!j\G~޲4#kӖ%P[r|E5D$]M.;ĚœC_^-u %gD}]zOB+w;*yoZi_VȻ˧㮼 Bػ%kWt~|<2hac'GCKh-GK^T` ޠFe L#NssϿWTG)Ⱦ*?09mT\\$IjՎ"$TkEڵk׬P$k_b`&$S.A2,9r^Y8%.`ͪid90Vә3gp8p4uu{7HRqBk1jm$iBHtH;iebrH>^$ARR:6ly]"yXIM{]!++=l]ӪDJLSC=h<TVV6ZnkO|h]>(Jtkj|5XF5/ji{%// ϗ 1uѲNLӞauE [E_͜{&Rab>+N vW_Ǎe69f!q:! goB7| g h:رnݺ;M͆ ؼ>SyGk"KN$ ȹ4Spf#$IbƍtܙѣGSVYIt?sJJgNUQdv>d󎝌s=Nnq㕗2AjKҥKY|9 .̅KzHPr=*C-n6T {_`j;fӻ>q`M/zqt[pHqDD\oҥH,Yќr:uTgqz[8h qk#,4h &4Xp9lzӢrArAI5iިp8\w_>e? Y>/]x󫮮&!(DGBUTTԹskFDsHfuI?-ٻw29"%%Q"4ǔYۉKpd%)>*Q,]y|yhGAW봯͗΢ɢLZg$-I 0-;ȨfԙDAP"v愪 u=5) #XѭlN90YiKNJBꐃ1 2McARK(ԅ^a":d$$@nlMD߶EwR"$wD΀ Jlƣ$ʨ^6|_)K9s娵p \O0nlnn2 h-,G'"(R}&1\f\Dso_YN`e7de4MJ<"1Y9. CVwOIڲpDi e5&sQr5#mд+,HtDpMӰluTA6 ͆jqnzOaO_b6x+tkFݧv~~llkRSq.90xeFmxef: +HY[/00$p(2k21Lj$K_WӴxlI@xeO¨iһ0(dgaVeUN:<$5TK(*sϵHD\kbM/iw;8,#sH itPn_Z˺d) 3{7tΌ d t !"q=Tw+^C:ɸ4l#lS?%<&0!"2]9t4?LϺ!w@̽Ù^@1?kUI>RfALW:󣩛0nP!?)&zquLQ6DSr .d~lh?#tQq۷W/r%1N?2n ڷ䩗_qٸq<9YCT?Z2UUx< 2}1i$rrr5jv" m:4dv/6 pϩyHȿc[Y]!'Pu,0mCUV!tA l"7W0"0aTVy11EoU5_~5O1c1A6O;!bO無C괓M4d ]hr^X&: Vn+ddA/\v@, tVCDGQd%f(ޤPqX iX`sHN Dh Hn½ ނajBFbd+!{FjUH9"b{Q_uM0$/A;/>jz.]j#^se2t]w#/a">qi^r\!]hwG@D};RǣEiCzħoX$4h/VUk[QY`w:E%b mrtmqvZNW\}-{cNXz]i*[ % V-'Fy*|XmC=a/eeM69Wjsgͧڙ7d+Zn>醈4׈{:l M`M ԒњPAg6G=ʨ[2p5ܹ]?Cضv[ì DܬL.=g p]rQRpψ`"T b_/Ip: rYH!r p8f 1σG[aw)'Lx|#!{1v;PD^^^333MUy~ZYQ"=J( u!bڲoڎu]#;z]UUp0,gWRmѓh}'zo}%)g χ$ک$-5PHE7t!a rkvlQ)..FӴ?h[9%'g!DGMTP$Ђ5{+\$)l}l6[Pz2 #&hq}iZlTzoi}2Z> PRRK2u!CvP]Nr*$cAYus^~k84?4VjIъ98+mfY 8Ep^o܆qڥB-rٳ^zs fe7Vf3RRn3gNp) 1}nj TVT`.CA(tP. |'Q;&a1gOCyKEzZWD_enW$CϞ=cPXeh*Hj9S) IKHENqAi2l_D n cut8|'Z -x۵+x< ؜i Ȕ?їSܯ{,3?`G!Dff#;;%K 8p {aSTTDjj*$! P-m2xnRdL$A_CvW.ò=(di jR#XL$Q$73۶@Ӵ:}t]'==n`H#+32/?DyE 66$$Ą,=ę9ydg*Z,$KNb19`@(֢,yI@UGxdE iPF̍Gj@  a݀^]z{{kQj "% ]5Ɛ@} cA8X7юo' _r z^U`QTV}ne` ,HUL\6PE…bgat*t%NB8H ߁ay0PArD:t3@4(6,op&oǬ/ U ˰y|Ə)~ ctʻNuBhS1٧RZmX؂P#ܪDœ장?r 7mo]6X|9z.cny nZMJܸstIOC&:5E ;S-] .nC^]`OJSң=q?vQ?/ġaaV2VUDYaS|t#?{˗|OG^^|7~݁f,fZ>"14M:iH j)O6oL*>}q~(yֱ\Dnc"y2P%ruWsrh#~^ivFawMy =/{& c;tci>?qQ? )ST1HQd֖P̧x\>3tOARR0MB:H]'$5))d)H( HBB"tpRn>Q?;ԇ DhiDq4ꓘw}<&= fO2,ǂ_8A7됐5%!ܹ0jTdܞ=5[/'h NJf.g} IDATei6+͆,ԩ _o܆ai.ZJm۶0gx >siX!VF$(BNNEnGLbuFf:xyƾ*-ǰPŨ( [naϞlo!p@!u6 uA9Fw"j]uAgDmap. PMr';%atu6u $ <ǓOf(ڗ7x3%@,o܍mw+}p TWA;Μ9sX~= +4M*JK(+//%U7z6={ J_9╕W[opLjoi&n7={UU%55Q-HuJ$b 7ǧm} +цQ ސʾ 6lbK/í adfdݬy6DIDS5IĈ#6MY~^>/$Z&0 gD/m Wcd$d%{#n*v'$c?;L*k[U&'2C(9(̮Y]uU̮3* I23ÄΕ?nWOwOL yo{N =缈0XꤴNԛ:ՖE.X[)S_!%6&6UF5Ƕ^AWk"t)Rh` l&''uq.o9"xsU"״YpɥG%Gr͓_pqk/AUs!4 l^lMZEгF^v㉹d MQК㓭lDg{k9Zӹq" E9 _ө~8Ŵn_<͠9gy?>d zr≇Q+YW3{owm{cwq 8<(}'𗣇pp䥧3gÄN㩻v}V>'ss73ထw&᷌հ^29pR֜)waV@ҙ ER5@S`ఃwPޒTNi{EL1M$l [,\_ń>e4Sɾ=!'^ƶdO"ySӒlef綧9҉ SxQ|6DA [&FD) @C:Ss, KO'lHw-%SߍRth4[7\leoͅmteqN_Jɍ:l„ X|96l`IQIQj#77Ӷ%NBޝ>G &9ղ,Ygj:WoL~'CݓmÆ} .J o?v{wp\I5:31;|s;갣0õ} szH꯺N:XSRWe7sK]܇>8϶}Fu.Yfѫ}5Kֱ 80-<%_/ÎkEw>~]vce[x|96c:bshW^̜WsxzqGmtԉ:n:n݊[nqc[1o!.&ϣQa{"n1C] r|#͔<@p9wn<` i2lPBlyBa.8$>sXA]m !#N2m+0Lɝޫ|Ա#_o$ sC0WFs)e/^E:9_=9{Vt )Зo߆gVaOc}t2UT&GASZ&k7,ҧ?*~?&tlpy9mC._~5 d&pP3XMLJTՍFtIഷ7v*\ I8AIn7(yE^mgP5x BѸ^' mPFm=QvP@7p# N:^y / Mxܨ‡oH(58}Ɏ[E gH>7衝\{U߇wmSXXغ8#`v?[?}[99+Ϣ8Bue-tէWsIW=! ud"oNU4&*X=^2v׉]IaRE64SP: Ht@&ϡW6؝KV%A]]=<·5|p([)֏U EY:B_o^;ޱ~C;mcƌ7ߡ|ߟ˿:e,]QVN D T¶ `\7={;Nڏwζ᷍Ed"Z5XB #1g39euK{kaMdd銓 b5Y92˵mph nL c!-qOy6 lP@YW)9+AF)nmkLVm^O~8˫eoYҡĚ SIЧwԡuw5ZN0`h79$7Lgf+;]k'C6;/S^zضc0iovZ+]>;Xΰ!jX4ŴMlO;Qy%r%2MӰ.Oyrjkj(@@(@ Шp8̐}Guy EoHFiY;~GtB8ؠD+<'/MoG8Ȩ4RVUUBPE۶m4s3^z aHYf4f.{!|4./),8Ub5DUUGjv]{B~?uul }?aw+7r =~6b6hmrѥK;ƌC}}=h )BQ?ӎ 5֊*^_V*] 4܉aşes)\3+W V#۳W'/u>,F fNݟ~=駟,[#${Qz_}~˲zFhq#{q[5N,fo,#J3Lߏ1#aDA"KA=yLuu!Ftdx; +vc5 0 B  9` ئ !⑴ XA@ 0 #J H=w, hEhW\Fq.xK1l@9Ur;CK=7)*a,P-9v#SGupK@3WFx{8}6e$eCFf3/{+e ֡sٌ90Y`w*5 s:xyp){}3ms>N.;@^gqZ L<8 > /y̧`Sܞ҇fz#yh^|~F:oz*Z5M%kP>o|*NiMɇzjn+_\W_*kj6/55wS}y{ͧrfN(5^ϰca?߭X/ky%,!2f;u<ōp!/5`yeO!;rf?IP }i e&=d5*uOe_qipp7=} Ov6!Ⱥ3||{ s΢*wxZks-(=6嬵AGxyܚ\Q6ؖhcR]yH"}͋UYʼn0h=g|W -KoZ}l."ڇm1Ts1tֿ_G^8zX޼&さ+%iÒ% Ln-#]tj)F}KU zuTN:IFLŝ0!̖h2]g7 矿"<.?k?ἱefxɼ^[?aF򄳱A((V0p3g{! lvutH )n׉οE@TǗ^z=zPYYKq#UMh5K+aLqp:IrG? WW,mmW#o\./fI}QwNbY~U$#JED";'m5c3IKLv;bn.`P=R]9%F(G4"iBP:wQ(;NLz;u=މB6EӰc+^(`XChd##WMSA $NӍ.ўLv:6T%IN>pMcgkOb)6_|!pAɛe%=ێE6-￞ǍQ1$hl`c;GԱ-}44+Cbg f\I ȝm&` )~"1QtoD @ӆFe(Uls싯w[kIarTDskw(eabH3Imaa=J$,̎O<ހ=1?g Fk϶m.v+5=8V}QZ*\^BcXZzaʨi??,`䉬r5~( jDxC6rܩu v}]֭zld8xu/5vyyUʠAG6ÆP_OR)EEcB!c Մ>0~?i<@c*M6m2 A5]̝3vɦMv,M8&ċ;)EEP[r:Duu:&O>Yʩw֪*Dv J畦x׻DLlۢNiɲ3#X01 9nwz}>Z*+(/-[J 0DFضM  ?fro-ӟW^es]ҕ^^jE`Y6֭Ej gюp{^Mw<(BaCdP,"-i&EE";0V\קlDHb0}A1s>-[$1 {&uHҷt CҎNcqcv"B!wG 6bD"{m, q).LdUrye̘1}IBn1s.廐aɚ~>1l<ʬ%B`1-QycF|ޛR \r% Wge%?4v۶MIIImۘ %0#a!zov>&Bz>,2)-b!#Dn. ?l=\P:>N:=gB./u\`bpQcwD^VU2}UrAOgߍ9E> @ձ =7"QMA,x1E]{8p }YGyݟϥP7n=q =0ed'L\t&7&tΗ(Q>'N4oaJvHZ!5^ HNAS6ꞮsKs@ j OÀ8;<^EӳMib&Mqo| ud8hqsuਣ4{yɀܽ>ؗoRS[O.+Tz, ӳzO ٧ Fbi#.>t&p9 M'Μ҆D/ZP@VRYcY4j픽vāmYKțP'1IF'Zv)RфHѸwjΙ('-d+3ԺleIDJՃEcDVqc(%jA@^Y{ ?P za0\m4iR|N-)a[~V\,lLD>(дbM{flOa#ȄB^[Z*/ÇçʩE܁5oß,#{76oo.2r76u<8"2p꩐'gf͂a̦#0aYkE0m4]<}x*7TmFٳgRd֮@FIKmUUUt!I^H_*'"ЧO5!BK'`uN^ Ӻq}0 :iVL ZZ^M݆ôކL]r]` |V %I"ly> $n𧽍޻UG5Bqn@FCBmGXgG ǹ[ͽnvX zU,~=⿚TKX5Uq{@4vԆʨxilZVKC$4%c/>|^~ᷮ]ezoHG-2ro}oɑԧ}{Yׯ%PՖZ|xpL}l۶P([D'd8'k֬UiCl󑟟/S[y1WdT܍-AzF[(:thEW`԰!W9'r˽0|8ؚe6'5k.u_ W܎pd뵰)(e[eT}јa0: Nzmec`ϐ5$ IDATlΛlS^{F ƍ~fCu6DT]:qZmڰ勺"L%ID, BXvYWWG]]]Ҫy6ldXT[]65Wk6mGA[pmc b`abF=BUԅy3N,[ Dp\2]>j6%: Ǥ'c2kK/#M.<g/kŽ*tRjqVFeCxpr}ajkI0xpDu,n8b%x]-' ʚai㗍޷"cEh-[Z?@^ g&B!teІ6՛t ӡC"IςL|w%P( i %,ڷSLU՟uq5vٱcG9 gg)w.82JΫ_A=]?Z>6nvܥ]q7q: LFt69(L[Rݏ>wOyyQAݒ;?1.}\ʂwu6$z3/$b[3nf6Ѿ[!~I6h1/)Ky_͚<Ǎs>SgՇICfm~_ {C£Ul ,nnNVHѨdѢErd{΄nvRDgYb[H^{j奶MLv՞tG\2Lea˴T&8n1  %;3RuIGGUb-fOb,Ygȶp*,1#5:;>M9v4ў'UhW'[{є=m믶4A4Ŵm}" h筷dՒ%u:TF(6)*ovMòm ST!9>gرvhNRe̜/$ ^ W_sLK=x=ؾ]KaZY){4MFitP6iwx1#\vl #ݱXګ1ҥp}6#wJMWn-8 ˅EdCP^3hC~4m~u?vヘҚ}>a4 !0M3I|&ʿOM]U!#cDQEEQdO.S6cFR&Ueu(;D~C1MɾZ˲R20pe戓<V,6=FGC*;Og*V-(KtKiGVZݣհq/uYϓq5Zr5'9 ^ߧEzfnc@ ˩>wUU E++71g$~@Q~;r?_kcu_W5?1j^CŬ\M>JD˭s3'2vA4y$,XGs=}kְhM=[YoÏ1㜳jF&x8Co`̖{wPg oǥ , 6@Qsx;P|UaZ7*Ŀٳ'={dR\۝I=1jڙp"dړY{u:c PQ4EnSc*T%ܦzP V*#u(+6:%Lm3ٓz@Sګ}=dfcϮbǎTVUq&cbK /HΧEdzvto/A!I{mz0q"!BlV @2;;eYMMcS3E&Y#.zH:>qZ2H9odMu@]Թ^6bLswp2[Y 'U`A)>lڔXzt-Zg 6|t}4<7G}I2.7Ns Q9Vc4>HyRWЮͱZ _ 7ظCrMQ -~.<5bw@0Q[%ǣ!x}^"7?U'`DBolVn?ya&5[ԩSRNEQL;ߣ(iҡC#B@<ҁpv܎?4|/,zܴT姟Έ΂UZ]?ɕ0WZt^{5*&L¿e:e3a'O͇x%,Kk;05+kq 5"x}>\^;5h׈fYִ Ī(`S4Ρ. ail);-EbtkMZr'd䙛mSk#h- j!#lqZGݵMluN3o~Rϳl~iܹM61?ڗD5T?f`]˲(p]2ueb8q4U͜Ki_e%38|g5+f2 r)B(t 9nN9%YHDfkYQ]'#w ^A +*Ni6m b?Pal鰚7Ə[o<^CK.!4V s&} S _./(n^\:1jjl^zIF=~2 GTw^{ק׼<m'|ix[so˲lRB?rEWn߳/яֲ9ﯷbGwp_.略r-\rDK/eu]s?freX \}djL؆6RqG,\5+Wѳ/p2ߣ.3OtC'jTZ?Pqc3OΧ2xYyoe[ -?,xױTwVqRAY*ר)r-.1m5yyy#'oO9~%0 ct\,^?NAQɑ# rMb|Ml4>631$c:h4jgS2MrRN^Knn.999='''dTlsnj999x<-9'Ox7[rZrr&Ye$7}<=7/r_{/1kzvrK_N"jD. #jӭ} Ey,E?LeΜا7Sx <'dDͬ`>^_}SWҵ7ok$p2Bn+SNiptd48Q>Mi !6r*gaW\˖e7?] >Nz\.MU4>yi6TyYsVʅ7_͏CLA\w[|[ ~u?9qQG5?y<̙)'̲߱ffK0 SU-]BUWEBsN:N? n~n/W~w5|̝vIg'p_K?3NQ]OMuޛgɗy?P Ц: /efISXg$ePqUl:Q mG:L@Z2T~n~we`bx< D`gKGꊧf1:t,Jpdl-vK+R~`Z;I Qo8 E !i;Qcͥ$dj$鯩I1 #JLq"M3/h*#QWKkĝx}sP^s(N0^zRn~-" G2hBaG_CG7|? ^ l(n*=& 0Mモz[tjk@Q\lۦ/RCЅ߯3>|2b,f*xرÅm[oWز@סKΝsymY䔖BN=y)Ӆ5k(ޛIF}ױim+=nP4\yk>Gc^})@M:Wd3wGrsմ5І0 Ç矣(*GiD8蠃ׯ;4Obd6ԯ;v&;(NUEHլЮ$+Wcz9f$[݌|&;P>y(E9V$2<w5 K7aJ_K[ש[tyl *xeVW:G4zdy8j>)Lba4ZL|oogEl>Ǐcǎ( w[tw/+ljry3]&Uuѓ44cgrrm@@wLÈ`ؾ}ot]odo]ϟ?qF4ݻb1}Ð);vQ5\wPQ-[T7vkl)Vw7E1r(jkuzt1iW 2[8E9p4}sƎdzFQU |e vQQa3po8_$PWWK(TMmmxD~~[e!ǡؠ@pN>˥Qj<:ӥb87:H(Κr[&X]{Xz0OFc abV`9jC~C0 Mϊh4a;v[2:~Le@,"OB]ղ0m| 3u>]8[{}_4=:>./tsj5̳M{LӢOl|e"?Kd‹a}MBoIZݣUd ޑq&5Ztd8|c HjZ [Yٜ7?^٠5r(C8G]Xd gI݆6Ix*/{Y}>NGWӷlƞQJ(H8˒)j%M-!bud8$g5!Lx6Hjö*|W`WTKdf0m;e²,ڵR=s~'4qtΫ^jzNs^^{ݐ zHjSPPDyyyĉ9tLˡ:Bҹsڵ <(..oxaC%=z4\t%F B&DŷkמҤ񯬬t8YV֎v풯* knIuq˻*>.6Cqvz&~&$m1s6~͛7ӯ_?LӤ]v lЀ#T=:zTw/v=f8?r1J `0._ z b{2g 8Ԛ Hk߾}%0p+ }X #rK{Gɼɀh+` 6Qv$D?fo6 H$Bz;ѨAB(/o#?N=j yA @Y $U5.k|1{}^9́FiـR@+J,X,gDZ]EP>+5[lQVpH- O夫A >OvyZvQk镭lvذy |6 =:wbф8hnlECR1x\f4OeP5 4Jm䠇xS~uT 9OuIN8 %t RpL',`mNL:nKueJNМ6_긄Kݖn\RD""{x4MuFN IDATh?mhC,t]3(ghJBWlD۶vo j|vg 79QD,O7Tugs8<tqFy;)q?ɤ-fMxH +?W3BP{5KZFP)mS(lC#_Ǖ9-`Mm-Yvѽ B9/.:g@ t]GQ57s90ԛ-V ~C}ޫݴYv(c֓ӹHqmb"}ߙ߇Sew~TyqU9;7ȵ 946g{|7 8]{c]~ oZ|c?!:4k׮eɒ% I"(qD$!8N:}vjuMl02G%xGQC:Pb6Ullᘍ1VSvZG mecBUm˔MFu lĊbtDE#帱(nUU x<lj"&|K0M4UŰzײmeIǟn"¢>iB9N >2Gr9.6U9yQ(jq67BtNd:RωqO";[===RR]v;6R~ʟ6mگRvbZpkcO]ZZݸ'DĴ mm@QU^~m~ nZh֚ X1v_9afLߺ8(s좫޳8ټ#N{x1Gޮ5=F}gm";w0A݅wFI ^?ѹﭨW~V@(ٞE}yg | G1-F&n=q.B8L̜>+oA?ۋ2j~_}NKO$86ggf5s6XXa6}zF%ʇOݹwSu`җr]scoSX`{Cx한5`8H6i&~ھgPX`v,Zu@ [2F_|4oHR۫|LuZ$nK8AO%=Bºsx]_oS s4Џ%@BkmYP**׿[g'uH=1it!+zM!X-hC1sa^"&o[nśiFMhꗖsQ&YM=%LWGLz%m\KgϮ 15׆=ZmGK4}򷘦Ն6!=ku:uhÚߩ H|!Fl[Oĉm/{&E_uOޜ %ITETDA0"(3P FTDE JQP ?zfvvw. lԜ:U]]uJ2C9gZ2[Tԯg7FAOhhs d-uVMZVYc+JoJ?gtve2ϐX'sXԽR$ HS) Y3,cMJZٻ7-Iuh$$)҇=сiyCy!_9c[qyG=F/WM 71gyXtvV׳|pKޖy8v wX/ U_vsc2^4 #!)0 @M»ӺY4M [u]Gr#ˇɎѮs~B6IFH>ʆBp*ˡEꌵ_#Od5e׬Y\.XŶr8yti__EaJ+ƍBCm`䰱mވY j":53Iq:HL0mOtl_jqسIi5]ԪϧS;4|ԭyp*߅]ǹ?ػo6J;.*,PC()t ^ߒ8J0K[e7v0R皩UC"#ir3D. o>B_`l2'9,w(G*_Y_t?R.!i8bcx<\`L] З4t@JGF=w+/Pw6)3Zzk><{EH=,}.$r9~=m\^xkQL .tCU!y6Lx112n7b,mZ$ ݻm An{L\ cMȨɉddf aD_ AS.)~?IVHsl$%z?Vē o^Sx{ނ޽  c| x7vˡOȳ-?*UO:ݻwocƌ H.;vflV+]9151ըS?'o#;yu*GV v<:o+E4~3TJIbӗ+.3NI$iѣG/Z2#e$<byU &=>2 + î‡I!քY kJ#)y^xN8b/"Adt܉]:s9Élvq=|n7~MG hxn7-Ft4C]ya 1enܚy{?n,?ǰO5FχEѢE ,ytp!zAyAnJ,;*B1ʤ0߭ޑ~ E-f͌xfoysPYпa1RRY.ܬXvH(OUaQfr܋y Ugog=8ǚnWq<`;ףSz恥zb< IWX٘n۶-b4%*E8=[1H2c-rPǪح*!]*f*MeڲmiS$`.d.i $R(dR'*%!RyiQ|g@ ,P"R!iH膩i5n_E$n&i%LwOxX66ݩNyWҞ!*c8@<ȿL2E =6={~C\G5n1uMь$;K{]g7q tIA *w* ._ϋ-p 68]@fwdPOjV*Z|SĿlfXYj*֤ U07BftTٷoI>"[yĦi8G:6o4nܘ &DN*@Rf kطl4onq/LdB^/ _gcE<2Ҧ%m!%hօ7­sˬ[w6KxgGu} 1%ԫ%aa.Q^Bg+i \U~TbYB=[cXo膎_QiP:l]N$1jՊ _]ʠ*$X<X uTa4ӼIE⴩$9*(vUbDDn% BC^!RBѵf;\frAS!EbL_5 ̕;IqY)_My&U%P[c_Tŋ$cXU)|z6ǿ4kJt'q`w_^ipV{;*z>\{mRoy=zЫWyy"0>oh"E:* )N9p-h)\i;<gތE+~rѱM2%oל{T^4<1 =bayUGPUv'Áfwt:ߵLycsy6+v07)4/fӇXCXBtSlu2'oިB;ԩxV(+-]Z֎X_?wOUxʊuR&'3gEez޽{cw Bտ e(%=<|ͬ/2ܜ|lظ|!ٕ<7Yh^;R<ϸGšE f>x^|$|Oһ \7~GG0k_1$AUո'GJTVfAfh. 0 d@ʘV*SU'b$`R`諙r0d3[b% Kߔ+D #'ze7"Fm[x 8V3TTC=d0$]['}vk~0'x0EkO&i{rosY׾3dž?" e_dS5?{Xw 9 Z𸏕y(|Eܾχ}tm4ZmKlXP@'ڼ򡒱"<^B=[>;2 E=gЩZ"5 2!Hܽ7o埩oQQxq9~˯Y# -Hys>Px)aٓ'nuy)M8yKgp&)L$q/3 z^;݊ |p2[/ q_-ÞsgT byP8e 4v@ˏP. hzwj^B(%,댊"(up6JŲc$Q,RʊSX|}ZYa{̅挳ڑw/醖D. },jLG`(Mro݌ye,4ڝߪ.xʛrn+8Wֵ)L<;6nɂ?{;>+Wt=d<;5: c>];$g㧭ECq^O;Vd|QE-doO,-\)l;y:#u GްR4Ef7u FrfG%XǬXq_RҲ}b™~9cú5辋Xշ>Mw,x z1ǘ0iNa7Mywmⳙ̣`@;~r!=z\7߼˷EZ^#1Wwƭ_0šL|vr2٘Żw3,U_y\*/ϭr×}2/mIg~c`'Ϗ6w}=uK=xlSIϱ1E?9y2?>z:yxh4i|: >34n|CYW -*na&aU4b^]kD7W`^YS oCXXA8Uvs昤U ??ŋQgnԆS9?5pI8<8t7onr<߆ߜŢw>ګ/BrϪY3.BnիWc|$%%a` ;kFM 4]r}j;fA] '9=p@xp8(,,rZIaK<ݎx: IOOGUr}fƄ(dZ ИRU5|>ȱZBU -Nl6[:m6[xZdeff{0T%40bX[4G,ZQb8 ¶4ЄkfrJ/Cg'gw}k+> O] g^Ώ >I~;+?{oO o9W\ޫ??~ݬצe7?ؑ$w^nߚ jw|0v孄5=HF"3tܽl gccؓ/ +N8qmR_#@rj$AU}UO 88xtЁ:裏YM`GcaLu9yjgwӥG'-ع{;m )lZqS澡=r4vE)jq cQEx} ^z6 6ꐖ&X9Y^+{+Տt;3zƾxw&dkҤA=-y7iXNq} wg2ANc3/;hq<5z6 [1$%\ۋw>!Uΐv<U`\z?Ўe.~pKۙ0jW}" uO]YOuCzG.<5.xy<Q~9>(;VU\5kz˪pȑ}/ӽm/'O}7Ʈ~ruA6+>w_3AIbӛvևlXI%2Ï>KS>px+Dnb G+4Q$tVIMIҲSnB%&%q~I֌WqԠa% @a $t!Rtuf}$ T\ Y؜.bz mǐ ߊjnU bêewyPvTt4Cz9x=a*V;IN+b6W"2 ]v Z@僯dT۠um]IMMK.AeŊE$$z5p2n"Kļ]GW#3+)aI~λ\r%@.hҩOz8IJR HLL$--Ii+|& pDĺg&!%iv,frxG/NUUI2lUz}TR;ΘCe%$55R9!+3goNT[=8%jҞMOaiy*o՗zmOgβ ׁV]<.o0MѨE}^4C;xጾw=3M%Riu$jVmkVö>"c 2͇n)ԗܮ9  P^"v yI\:n=w ܋쓷Yƕ2òmg['S%VKǜ)նl>e }w } z Owc3VVGp0VOs 4R!2YycQeYUUDá|p!5$qB9܄iN FJ.E=6r 4]ۂ fW)1SrKvmL}=LnrIL~5ns5z|| CnXqsğ1\!\~@g1vٷ|g>ńol6wʦ>6o?8;@*focanY,9ۀ |&h{ Aj>궾g79\*{`|0^av7aگ'Π'Shs2o]b0pE綌r mb Buޞ6?@=s7i6}:pC&/ r7k*4<T!,%> >xt:%^w&iV!Î>e>Zx%.'qD! [#RzujZBbPָ}.a£e~#?=6w] ^T ͊4tBbXPa| ν"RvA-:w_ӬASrX:]oLbQlX:K>L`vebC0=V]C(B T+;p+wl7xw8ƸH6!piEm+7}7[ΧF\+w}HL*EQž4سG>f YTm*b3fqsXѥ\dn=n{j}Ǝ#|~?|'G~לwIċCeDzwrqɦקs7Y܀`geZqn MyACG3 \s:v1w.ˀF`&+|[CO#OO>8б1`'F2w=Ѭy0?\([Р&A" f~A餶 H "~a T9'NfaHUAZE+q2x e4Ds|V%f:a-AlQoƭ=j3~poFGfen<\IN .ė#% ".Ȁ"#} ˻q7_s[wdB]bE qYMP MÐS§VFOP`sdDS|r@ @-YFNF+Ħ%l]5%WG&pak7FGu):PFuwEDžU8\)KL?IHE9Yor71e/x)&_MCqrsexj".F phd} Ka:.%{]GV>lZ>nfu˖X4@U,؜V6^ w7upv}] 8-3/XgCr!Ѱ vO_o~CN_"˺ =դx݈aF>_~'ߙʨo"3(ҫӼ&c'{ +ŋbۭDQG.O\,ThPuoV eem枉pg/KVOp9ʕ kjH>y}b-'R lͩP.XZ\إ.nwq8lU~".[8>'Kl6|@ŐRSJ`w JzטdTU6o̟vfWu>^Fc@*i,3@QJrqtO9Yop4'4L4]Ʉ0=0J!* ?l5 ]0_<~ t3%żan=]S`#ڃSz)ɴvg%~ `OR߮ w:]::uJ}x~} -|cy1nVц|n*#3ryo Hbs=wFr,)7l :~HA' FR–h/B?"+\J;D::>HÒ%KM2Yd^NIAAIp"r$lq:55z?u4}T @#'td!~l͆ǃiѡۑCdB#s;2p.PEEE|RFP_EʖRII1$7W!99]Tnshckмμy:\ cdwb+ @ddDF@Ri@WJ|B`S2eR66= ulݵ21Bqؿ zs`8Ի+sSxg]s=q$8Y8e86:Qϵ1/cȈ^Ցݪdէu$l j7ˮ^25%ej^箇pE=ٗ?d!MֆIZF5j5pLј1bsWtjgQ #S^4>w>S bOR;&Տyޥ);Nkݿ^Cצ#qםE<`_՜z5:y|R#4/(A0B`Vq*]ˁ=SXvy!.%,ūǣƸR!:(aEXuxbAfcҦbx&xbx6nn[UvJ!ѭ `1 QpdX,t PX6 `*vqIMI&`Wx%~͋7 -B@sc: X<= q /̌ . аzy#- ӓ"xy-R.LCI#+=%X)$xkk^@(d̋xٗ۸LwuXҷlad$[\pAŋq\\Qb]WZ(6Hp:kWxIHN.X 2R,Gt(/)ufnwvǂA;Nl6[K_Í7$GÑ&.SK?"UHPkRSSmBFi {l d{}kZԭ/`j ?,t=^9=AӸA);wnM:я"44tin]ݠ6[ǯs4W9 My Œwpm0OF={3z8:^&.B#3rƽ"v 4v7MwŭDKJI3{3q IDAT&hv}\P7QB7D1G,0=rh>2X1MXٓ"뼰G\Hы !ʅ:WWBGjnSnQbCgjda UAA0lP!o7 l0 yDՔk#0In0$6""j GUh_s##\n?eejf @C!H@VD+}UOҨ4FwIQp*ɀVP,XHݿZ vCX ]1]}kRPOj,/@sYP=55gEiWky5IZT+>Rd㫑v*ƞ=Xl(lFA@ŶRkF.ZQr8Ca1] H'R0ܹs[%"hEHg&ҳPv @&Xpy0Pt!FB*=B4Rh$lê(|?DTG׏Q;x׏[3=FҖb]HȨADFvD<ݻA 2&H#/`Qq)H9^ڹ`U$}뫬sBUKJ3יGQJ}A3h"u]'-<59V#\e|U0Av6}'i >_XЋ$T $''5B$L8TdwoX# B׍RN^O(J$?kiӼ` F$A<`JRSN_ɣ _^AAnFP&{L|?,{H*N3l;-]u=6K38opoK~gtzkftL|% )~ϝ$r BF#y~jr!wˆ8p}8O,s϶@ hnt߿F^Wьq!"RȪ!WUc,; \.nO1:w i8.?FyI'y0l.hpGe\~k'[GvLxu!.I 3>θv>2q4Ib<6yy뼌z_M~gv UIwB ,hj(7^TUx]U<G4ʤyd͢`C5*T]b?N+{<_bh&w,n3=IGNh wI=+}Zk ɀ)8-QHQF 3"y.h1;]@DŽL#|o~EF ٣~V&ҝ`H2ddorH%cu8Jpr'|h)݆I W`n͒>ע6zZ)혭-ҝКN &[me۶~.hLK/֬<>O:;:{+@SvS˭X,o c}_81x1 #$%V зB:^ :Yjv1;e6 ;: Sad*a"0 ֭[+ Ɨy<}%ք$+{x w?=WqRJ) G~Pk܊~?RʚzRʊPT^/ZH#7hS`e"͈>* !$*bǫWFhh,qRZMb=2*n䱪=|шU^R2_SݟzwDu ØvD4mFzGeDx6\FK!OKхq}QƌCcZOu= V蜟"b-,\sCc\wpCr95G 9<%G1putxq8=Lʂ@Ҳ|1|*wW~{pcSم]w/0<\s5|=sꍐYF#"b=Bv )doK>/ iH)0@K]qe")PĔaf+$F. ۠W@ˉjCbJ&UD\ԇr=)DZ*LPJ)&I@V):O R`,*K J!(4!BҮ܊<6-ayk?3ΦTS̫ʧT2 O7[5DBHRR)yMe-@8ʑn^(yɦj;cdk{˗/FkM[^C{"vQXm]~p^|cg\ɢo˲j#0AQͩ@مFC$8]Ǖ30pAi";UG ja$Gu7F Ϻ椮eY5mZ90Ygtm;sdT կkڛXEzEes1VәFwHc l"ablX/}}y#Ps\'m'{9=Zabx+r/Rӳa^ /=F>}BSN).lavmJ;C9C9/| @[3S d=]ӝR%%+ѓ '/ʅ-"Geϩi)E_'Gxli',-"Ҵ,1ꎮ%+JO&bECV)њJ^j!E?`$Ҟr*Kte;2bnF;{rU#[; Zm!Ewʇrp҇UQ4 bb@chKArc#wgߣv!<=׬e=̣~R=i؍}\#xZ>H)$-d,י`oʡ< 蹶۠D[+j`JǑiQ?N$[߶%?j1辷˃F 8Xy([>Nnh9b:6*iAJ84jdKH 䋠%4PV( 1APvKO;=2[W>G{j|?՜q)dV@'O^iNA̞AZR̟>K%m6.bZOdz) d0<\3wae3`(tZ]؅W8B^a#z@FZV[="|ٷH{:溟pgvuF.K pN]I~>G^ |&lɇw&S! ~~fru!ĤAOH54?͎C3q5g.T.P,y?7ݎ̗}~=wk]tw]Aϼ6F_}-ѥcz6i_=9eJ%o ]ދa|onzt,Vjpזb=& /q eW=krrTuv%A*fIzqQcV9(,9=a1"o]w ѨbUgugbUWu>_A- . 1,h_6%*[czi{%[f貪Ie9 6#=pA4bȼ7 Ii{l ^|hfP[!!fC2,`d9%D,,ǾIt{%P6Q\:-E8Rk)酖bN -% t.4Lad<n iXXG њF zP_rtOܟ :A vc$_@d0GFQ*a=ei{=k26sƘGl0`)>(o>{u)sUt{c4+`paP!|Ct&aYv-txenY?:λ‰fsx~u):U$+G)">inR֮\ar1D4b{ax! }VXkhDX1!:pJUT$_~dvo;Ice(,L5?:}>&3?4rgv?w8xE>pwfLP>'gyN/=<"Y۴"1}>zLln3%`pppF94qYo|C9啈 #A".P^t[1MPv̂U3i;D>ZiW$h%b%-i/}#n K5Z h!G+-×q].@;ن($4mؙ6Z~HImDO;֏qXEX}Fce&|2+՗7rK~)4f[]OGe6\UR4%y7 S򑢖Z{5]unJ5Еr=Lsň!8m,L_¦1s9M ̱AOH17Tʉ0~C" 0r.An8d (P h  K;EڨQ5|k,:9xw?zZ[V̍}iC #5/d?,qTK:G*hYWԕJй,>@XQ: mD'd 8^̠c0f 0q! }nn%?oK DR$N^H^N>Qdk jA"<|;$g"~,MIJz A_?/mk(Jzi{>^ObK$>iϽ1 #1xZSmϺNp۞ӥ)7nDضm۔6lkǟ;O ԒFZ{1BSO뮃N6VrY$$RIvldr2xWn#F)T,KıcqRb!eY$iRb!0 R-GfJ&S $r?,$y.x'V(fs8N '91VaJu@! ɖ~0(OZ0mRPՏdyr8N"3,"OV2iH&@H Zē-IǛXQrrXE,q4q L!dLIx2L/hiiet!3= 0\IwF(`TIXPzJYg1JjsEDZipŦ|mзԜ7cMɵ+-=$aO^ҽ\ϷKf#Fid!|>XB,sFL-2~袪'bߖ?oǖ 2.a<8( nkϲ{xl=GB.an$7c8FʡOJRèy8 mГsXx͡qt -=@ iYh-B0J `fRk>>sjIl )-h]n$deKc{?t1~FzU?j~r:|Cۂk]DWeOoE_h.f (Ewu_;JRCKeNazޜslݺlyG%Ւ2m@s 'pǝmk/ ӟ1hiUSqT j\[XeA ­NTIvZlȠ1?lŋ'ʢ$K%;u?s oT#joCtyϞ'9\-8d/mMm.BpW )%}}} ͒bJjͥ;OSwPfdQz41%Z]#NfLhy֫YRV3?`/͢9?Wz !Qx V|ڗ߀kKҔ=1`n({KC!j3'^l!R~tp_ɥR~"|0lLcA9. y0;`Z EDnbJϝ=.z6(WGXpU%oj*܀ oz23|?R (?gx<, IDAT0DPGNPC{Q2n|A+5 [g-s6"tTo#M=*&-L 4=֔C:pV#Sş ij2nf=uYSqyQޕ/ύŽ΍9BsE;+™b8;`3H$$ @@h Wl(D/Vy r a!p EppiNjT }t\S*zn1a[Bqd͚6eJb^ Ց왏QZcoanRH4.X$( {]o#D(G':WD;cEd:ʻL"l?qK<_@%v;'.d3@]q7}_+8χhˢ:Z,qvo^7Y1tOOY{}VqcJs޾hH&1 bh&/;E,aAIKCl`|}α|3_!1'$pwӎD!OWA'E({X7qއNHnx.Jgzd/o/.,)ǭ=G>ebmA!7lm6>c%+A؋,҇ \yg;WuqIr1p'ʤUkT:1y\+&KOٮ S5V7VvI@gDݵQVlDZIZfνD\ fMhTSк "K01CeCfCk@~.B Fo!viڭ)hHSrG^G$HD96B J!@*(8jǐE9HmC(Hy((٠JGym)& oo?,YH8袇n#0 a0DX= zOZJ6Q88;C=¥7m9B kY0uoGjNNܱ|z^7[$%--EOʾG< q޲'FCKj1ٛe>;'0a*! Lлm+O=q:|zr >ٟº9sW[oa"j)Z=x5p| ,3Mf[X?9ϱSeՒp 'ٶ1k˵ ]&HlRVt).> A_eم]+hiI&aafeYx֖h 1݋;?ȫy-B1cۻeJb[qR6l،G#7C0 l{OlAc9DXE |c%DF!Cl ђ@Xe0:X5Ϋױ=Y ĭA\R!iw1%n=~ K~8榍zIsoo8EM!sYM}["ML%0IZV:I^oxXேˆA-/*<6mNwȝt>:SsQhW'VV̦-{RW#9':UG7ǑaT>OGzMwmڶ=GhTq6MӜq"ݣS͹B2"}w F(qO`;acÂwƺ8{"C{W=KV8k>qݫW9w7_:uʦoZEDZ'?o>ۗ䞿_^,u%oS/-y8^}0 [Y-,YGn>?~[cDA]qa58v W4TK Dv(8]m:Mɹ?ϾϢC[?ϟ{ׯ0 ZZ JRW~pۇrMCc.ٽ\YW6,nTˣߞἋUMP {"wcMHv*<[-*EnJ]զj-TނPvD%\!]u's*k*' 0tJ*BLطW Mw/~O%f(&I.P8m H1KSkqc +k@3dM8˓n C4*GJiPX͓h|5R`5>NM01eJN춪^|#jɡ[߾]V^ˠS ;/XHBҞq]=Qa|kj%) 'Q#! Cb!;)H3H' z/^G<9p-BLyڐ$7.BJےuE7·HDI!cq@j^׳^‡~|+gw]wÁz?] n}N5RNT[Mb`',ߪװ3!?`2Og2YXg#/V ϫ}M&kv _ cTokc W]?š ؇wwaS;eaqMM[a7o/]˦IFmW[7SOLa2cu a G*U ~JQe!W7~Ԕ~+vCC~/kUMUիKѵJK#T]S&qTL\I!2oMUw:SoVVhkFfBΦn1S֤{d= 0[N&+(g.)kؔ@Bi(@cWT9aU'@ WT\*aQJ CO<}-r,9Tw7ğG@[ ƁQB< =01F(l(#"@Tc|HaE? rqI- @7/ރ;fr؅#G8: IO؋.zo߾}]S߾ށlzL!o>?Yzx o< }mʶ9oTaԜ B:Q~*DjZ3KHQcK!*sBJ578Au,2ȯv8 Brϐ(ƚeC^d²(%Rt IרJT1-PTMlQu,,H) u|9Lh|. di0>>Fַd > uZ,Ա l:e&.VO-&fFdL`(zh cz`'8!@ʰ-@Uu>1\k-Bi[D90 qJ I˃} hu–TW0ë>}W e$"|9a yHđ Oj fyp0mCJ! c D%L7ʁRHi&/(1JvHѿ>.XP6"WB\DG{Of񝅨L}m!W2@ҭIҭk7}D>o}_}'??{'#s8.|^# `_ߤUh9 fd5\w݄Ǻup!.\ǚ.!ݙ+57_\# . >p6A5 F}ur98,A4}bNÚcn8'T Ҽ 7=WueȚ $[@0Er܃AΎ/~!cԌƟwo`"q3z5+Q\,^ZLjyѧYX,Vb=i:H)(HC2:bb[}$Nb`{òcXzcp`ljO $ UJjiE QrK@c!)~@<قQȢ^Gip3! r6bvs=XW (IZb5Ik *RjݥlQ4"\ETh\@-hif$p71V(xiAr&ՐBJhBYLbuA(VҥLI!WZc~t;,]1|{~AtG a`q8-!tC8~1@=Ǿ{}H5e L=O#,ຈ6u}XNa.aoA&0Q>V "zr&J Y n|!ﵠ,#]ّǷ>E쫗L;@"2Y[o `Xa 38;\yqީ1T4 1CGv hKdݣ M5Y;kEr5߻ %~jN~z{d+|.qo?<3@r'26P8@qmG;-xܠXr tv.2F&T0Nţtxnԏ6267qaKocaR&GyGyBM^8b`(k?]WOQ++S8Yұc?%^ Ő9<[Tri7!w.d2PDzpKX6A<˖ʒ)&%(EiqZ(e@E *&NȰ(+t@ԕ IDATX-\{-^O~E["%H Y!YMБFжI3y ]t<$,{] _5qMޓ"Cķd:zLF^cFCmFIY0)ibaxbKyl#La8?pOGXXgr)x.,CX2ܾɜ՛Y}i1Fh!2  &6qx $W LIgoկ>v.'aTiaJGQiڶͶm,ؼ٦Tx<$˄$F9멮KQ{45m` !Lv}|2H$,UwXI$۶ѿ(FtDtEDu|*Q?LӬyEW[O%qJƲB1(k I &НSkPAw pCWndW'jp4K#{9ڦ<['>ͶOEIK$K-&C{Hznek( (nq{q\H,tHȷtwq\Jf8N۲AVހv*I.$8Vv8 !cq4I{z /w!r%EsJNv!4HF0?%,\m 0p݀5yII'|۷p1uAn{e6@Ty=o޼Zz<$&D+t.O=\䄜qggLFbu~Bb/L;슆ekg~#HTH@2t?zq-7~O?{'IUϩaz6,%Jf$0\bb⚮Tp/f I`wٜfwg'wteGT]u9NթyNhlL4 l;k2cP4#dcNa 8h et"NJ0CCCJ"bVb<[)^rfL!~h!D Z~еU݌aⱺ1:,H9 4<hnF4ZĶ_Ax`qU&퍔kt--ͯܕ'ة5oS=V)bА[wD_xn.ӧy٭uxGqeGEkR*SXMC ջn}LkK0=A`qo>Uv#u灞Hc+8#k5:]pKWLv]:SeuiJT]%3$Y05̝׃h# B(4  -UT玌t:<tFL3CR"(몊~auo}Gj L ?@aH/ׅY]ȾAtn = )㠲&HA.hD: B[1+Pc-I>ba>Mj`t2 ]h>\|iId,F(3رVŋChkC96=;o:Oʊ?ώr`X ڜ4dД8m8[ h߅ 0Q=Qmf&oRkH񔉫M$(e} M6pl2-[G=q$4IkW* UGQ1=J *p衂'\)Oln3߆}5/w4~h+WWTm_/Nxk C9˘C Xym0#F{jqUƪR\Ixɢ 8@3VBAh7Xݵ>^H}@U̅zh4d#)R'DRVƣ^ Bbfآ2p78 \[_8Ym[~_IBU2%_t:aߪAs3 њO?˚z;P )i8P;ep5o7E\M [=K68FG'ՑUpB~yODe5Ub.`ho|~cUNaX~'}8(¿w킅 GQ΃m|)UVo~*9dS+ z/bąaܹs_^zЩEșdBh.?~ [rMpE7b ǰԯ+A $RZuHZR|EŁi/|j+f0AorG _Y{{~Jx}Jxh}RJШz ByNml޼ySOa /'Ll޼̈֝y` (&#$*]*~n{nC Ɛp;xGd,w?guxS xaönk[p}DqKt.cJ%X-RnU%pyDyfčSWJ9]κކQ`6H"%)Э)rs4-IZ ZP{Es[6C{+jf);!EyDSi椰2>4329Ds  А˓HY"a\߷,:GJ1;NGDIbf͙{ ѳ00M |{ f\} D iD!ڧKbT՗"6h-цhᅨD(%r0`!A@ G -mI.38w\-=pdQ'컖ntY2uͫG Rd _Wvb TM$F~㏏HJd q.Gꭗ6<$̙oWz[*8X8dx9^7ùmq/V%8 /9^sk&W<)AA6ʚZ Ss8en2a4yDNq{ttޠ2!^r޸D\4@gJڐBH&aYPUkQ r > Si s˷CCzb*֚x<֑ʳވ6eC^X4p9fvI& 'Ɨn_8nspw<ضm{u=ykhOmw?|sNZ<\~}Ekٛ)rypb`ARrCkӛDqǤ%δql@Z&Ґ؎VD0f +qIUS&(Hmt] J[,*b/w~|';&/ѕtL,9ջ[wjg^];vgOcا+5zm1ԇX 4N~MC[ q{|{4ʒ[\}oųXa !څPq,CM"Y"E)9@l#_ʢ*"՜HS CW}8 k)d0%jhjF &,Q*4S Z^BMlɶٝև&ʊ!y 6ft= cͺ#/Χy>d+ Xw3OkaoOqŴgfd[ƒ?s|Ƃ÷8p^f2x(ODR) m 51I41/m$RV˖s=sϚ 9O&SNo~3ۣ͛)ƺڵp%x?<8pF/w O=--@v27-x8̑xj{FGI깦0\9>ajok6 CCe uiknc{v{pWLxj\|07D/D,~%NZS(j !͚:YS8n]cBNVͶiq?X_CYN0K; yb/{ ;h*7YmL[RJ$8sr2R3s/>@,ȓ1a(iYh-2(LS10D q cEKsy$~x!$b: ІEP^?)Q 1btuv9sDmw}l۶qhim{Ou %yoi:'s=n$oЗon\ю8f$SRj\\.oc>>!ң͏?B&fv6qa#QH1W&1d6^sN:rN¯GH =QUaXȨRlVj KYV)V)|x1jtZ0`(3-5T_qm[^{(t9bt94.nLC!ڔQh7)"kL萈P*Ǘ]F2t1mD@[ !x'D;ЦB( 8c@KIC d>_'/jmT|T3" 7gXlKE9>h2-3EQM`"]=va ̛NrSwn+hEEY]Ù3S8+gxq~`~5ļz #|U]p{7r㇑dxH>3%KWrMеxf;z|:p`;!lyy|H?44} 0\N,] -]1^(p=wGn;w, ߇>o?"7^=+V1njUֳ}Č~abΜ{'#wJh:5ktuMt>ZH-\?Ə~NtLxۛȚ_~{/~\^\q0V!e,_C;Gy .y\ve\qśw: }&N3~H='|Ӛa(@Bhi"^.kWs̩}h 3/K>:"f b(k_ N爇6D_5*t#=-fJYfF'=F܋kZ$^Y 7͸n zaDw{~|#xᑹż IDATm3lK{ _2qMߦx<ʀRpep/g 7~|gcwʱdIsOm5懏La 0 R??> CV:`^=2'rE˲᭑cCqOƃ^OL`ǵUn?}i^da4>~8 ,ʚ7ڪ"#3'OzŞśG£ {:Pش: ?)L?X`8]]̛7lS8vy81~{\|E +=:تtt͘ɓkje"l1IJ5̛¥g..^~=k׮z6lȖ[9rIOW{Q,)]9\&磔B`ƥ_7w~87,N(ET$cHJRjΩ_TWAUdhQTk$BUnc9B*+\TӅ8֤1Kpkڬ>lj“P7 dH)IԔWLZX^Ϫa7 -$v, z![ =a|BS#=dRц Hcഷn:n_ߏZI{]/tSeEj!` ?}+s6i\?L6Tn0 ̬ole3hZދȠ;RA s[qa+^N+zddنR|>O>1 )䌥^d |e公tkZlw)cASlĥ(đ9d'>֡8_*p'< 5%yxM/pc[,ay u<4M;9i_x v♕85'ih SB-455q>/YR"EܙgN2Z-&DhE]0w!J߷|\<g +蠚P^ V=+=ӈrsrIRRz.AHEfֳ_jR0>gsfAS?0PhQ{50д+{nvrײ7qP.ǚ5k0 }m{GS}tu~]18x +䮣##LOss3--.B#leRlj{-ض]s`Ҝj:ǶQ QF" ϗvٶdkx*ejDFoI,ÏTŀ]KN7@߶~:` l=t:!3Й,?tu=:0PwUkHf1#9ERdz{&˃k SxCA"XtnLfD%W"'>syTk Xe\+M&{吏~zOJI,81b1X,cJ?O6ex8Mj5/ZMkK saٳ6aFZP9/ )E䨤8YBJJ# I1٧9Ε -/r=ϓ͏z6nyVJ$Zl59]g{ioY]WEƍ)V6T? m=uHRE J1~7#ic{'l|~4VnOm5h n)HH$ݻ-Ȝњ1Q&ÊyiHBm aD^` h% R`Y(c @FN fViIR$d\,T YR>Zٟ#lMɹ,?U)ݵͭĜy] aq4b RU8;wwEYbނ-ɢ,@57s^܂$`&>rml1Hrc fu|euC/Cn|Mdz\w`%|b лQ8Ѓ4 =E^Y?:aӈbJ"B3QZagMD7u RҎ(zw9#7p1 k?p k.yio|>zg4(nR D\#X n>HF'F} zzk}QՃGYfco5d0.hBaWqJiZcc? ex6d峰'YxV",+FC)5!WzJQ($AP<tUd7Z7鯑,[b|Q~2z꼓n@3{ܮF0"UjGCaL:C8żMa /; 'IRr&El6"']>蹴4Es_op,-tRIl$lMbmF:1ܹI sv."a y,:zyw%OL? %oRnD8@trse`;(S qُL%0::0v?B z{7/n YyߕKV"~HBU 䀄*t%#į~XVkpK_5WoExJ~p蒺f:_~hσ\|'ʖ:=ߏ=OpcY>uT n 4֦ mft1F:`N3S_ A09?!(e2}zKk5d>y_amc.:;D1i$ADcxƊY\sќwB/DcmW}!xR W]uhMR1F*Z Ws9v1cSyl+ G? :l+H4N0@KZ te' "EOT *aDiB`"lŇVP)U1CjDI-Q[h袪k!QFtC2qRm.^3dEUFd}8/:A>̘lyf8yNػYeOM~cfL&sSs8ډ#- yt#ax4${X@],y]\Xg #4jZ+bh5RXJ#]$2DKn>h~~1Σw8<`^#Fr:so-?rȊ@V*ȧQBU6-&0z84mf`1!ah+u֙Gk阩xq:rӓ~z%)Gp{GΗV }X9-Ԉc)mmNM#Y&3](.l#߶Kqm\|+|Q,U"_|pя‘GFL+8yg\S0#Bq/)1~ԏ'.!/)h~uM$W:|qB%?#T-`$xVaŶ=3=Y2'"ܓxGo/dڪv| |Bro~9:֓N$}n{\MRYSSNa Sxeޒxldw TiJáǘcs}lN<|v7lUW}˲xeߕ@k8,^| A6nȜs6yJ7Pg=IŽ TVhGkJ(V('4HP$]p]LwyvɻxX\LԧoyODsj[Bҩ2iG>K7Gh04}}DqRHuMuhhzuj]}ߪ^Ʈ]kѮ.R uPJ.X|$EcY Z/H[tZ|: {{n.84[K-zhdc#7_j2KE)"- 3Gd8>{a4EU\ R8+VY>_MӈeDD[#YcE#za` YTef۝vX"QwFǴ$:O".zO8*`ο|kOdkp7)q Sh B‰'.7j[fuF2 }}]XüsUgvDGW,R#k 罐RY>D_]*:;)7VkMsKo\_[w~瞴ͭ"Tb#$XطR`nKJ BšEy+Ez#br&81RB`PC3v&U5gy;nHa =|!qbDc0j^vѠlIԘ.!fصuEu9cD*4Z;hgyv&k`[]dzo?֍?\׉v aH#!%!N0dȟߋqa 8 ̓"Gny~h;a.hi#{G'͢D450P}7 dGm9B"(kyU6xߧ?@c;f',cx]bnc'7{6Gw݁G}i߇B6%Y, )%a>98*xX/sY*چaI$nR\WT؍$u3aF}ᡇ?,EYN=>P((\a6x:VD_ĂnnwH> :kY1Wɥa34+3~&2BRywy5H=lj3iiYs⹬\s۟O!7S㶟UKxb̋/'&LP144Hg4PH(kw5׿g:Ivb===vVm۹s'ӧO/a;v`̙at]ڶ0~_abA.Xx1 d˲ x^H&3LGGG*N#;ή9S6tH%@5`)EPQDєG}DQAE"Ф'B l8޽wnIG͞;w̙33ߢiD"2RbRyFU\u}6(kj?봷QWWGၥ:m!S$4Mx1Ĉhs'eq\-(F壕j! eQDiar{eBcm3O͑ &u$:~SMA_T2Ge`(tUD\rh$Mf,]"!T**ؠCs&Dd㨽Ƽ˧/|?#c$ :H&ܗ_W-ՀAͻ[1 0H :hf׽i_z^ Mb]7ѢFvF2ԽB$zS`Kgp^e5n8dRJI~CIllF-`"47H힝؏;dpV$#sűe3Jz|j߉Guw  uvi#k{D{b{b!RtoAY /R^[oɱ+K:3fR1mŊ4ifI$˗/g=f6oD$;\yoɒX`4wa֬Y>_,+dž :uZ1mU455/uW_a)Ke׷dH#H_ZB!lCxkD>Yh̝ؑBQ71fFH$#@+-ණkS4Z[[1b---NUUUż˖K,V#+o{WJz'قzp0jgYo!P`JTqK eT7E/_F  6B]_U$0)FhK<tm+U6=| te롐#J)h|QܕTҼkJ ҫQF%vYJ CsiDxaපqtG:=u'KwۅnbX'VE7@ ( N~rN ÿ7,oc۹: &疺=ME=$s.^UїDTR*^1@uyB,#Cлhe}o^ )θA< Km䪛E8. RkO;FXEʄHƻ^_?j@/l+?Z̙};}޿#,Yc/Ơ$\):z\Xx wy+V6;Htf;,Xm9-HdkyN_o hۗr7൵ PxAÐA@@z2$V"` 24Ah(]M ҊxT2&$UuU44P9 IΡmina4]?Lӽ@i2d?ykUFrO^>vHf5mD"I*DPlHͻ{6b<_ aõa,B$s#xv.^7n__܋[ MFiw#IS^\+rE{ެ 8pGqG{y#_F:G @;aPW/29fxmc?}lS4 #0:G񏕏 Yy3Fruuu-[>D{o8M n8)%B!VA9M^ ,%ByV{ OC@`@21O+ f<}I 2H&as.4C[ӊH@fEӈ:@״~(:_ED n9y3ӷy˩޽$(CԖ':@0y`嵵OyA%ұo~1$) Pz5g^-r}w&s >1[%tjxDh:T7҈ .plMڮntbCw2' ֻ ! su7bRضŋ1MuI~|k:WixbΝ;w߶3)7j$3ygL&_٫6:̆ Sfm[t pxL;6]n7GqFI'W%NT O)" ŷx_ZWn=ش/^h?6G~#4ɲ#ͳol6P IGn e_;G 1MٯQ ~ijj ѓ W=ƭc069hx>2o,F$-ڻ3^ ; ]|}C9pq""L7~Fp ̘XOU4Hrhʰj}'?uyŮD/1:q_44F\kq\ZZZR[h(vp/{CJ6F8qT?ڪ 7'Kx ퟫALi~$0/L!E@u)}t ߌT7PR!=t9X&-6j-@LBA߻3%uau{/F۩׌{Xjz:5(h=Eo9@"EFrt񐮇nل~5X4Q1`ͯ+E`yCbf0&0\]7'ΫU\j6őfσHcS5)ZNApR5 yh zp@eY#t6&Vn8RǕ~Lg~n'! u*N? 1GG&`N^>3w%ԩSwjy&M:6`D~.ǏnTj~7쿡P Zl~"h 0MsLqcs'C5|yř۸? )a<DXr%6m 0<0rʶ5.byM+ Wka8ۂaF+b,F |O%@-o>AJiӁr(@9DžwPn /r&bv5\a^^@6~o*7LíwY;} @~}_8d^} j/>wd4ͿW۝D?&s9%tЧSᦟ]d@=#@Y=Awv4]؅meY{,Z^LԐd8*qJ cv!9=" q1?N:ijĽ^/?L83Hr>^z&[ "~nCg&w-ln})U$25mjCg5qEFPۛOޒ7܏(| 2er#5pX<&J֫gB߿WRw |3^qC;}ow?PQ&/%1)s|D;K>iLT>k46ĘX0o,g-K*eq-/-8k?yG9bimLJѽ5ɹW=šMJ_9ewQU/[M3T{_o\RpoH[\xʞv4 F5mm(`7F8+)cFTq93e\-)YT_()Fpʑ{m/w>{AAhu,By@~@I!nj8q@p<GfIvU2dْ3#_"[rf ID$әLE˓ cJe G.;qJ\,|mh|WNTߵ%aG?Ǔ'Jb-܍5ZٍRE c0т#WÖ|IUGAw_A0tWKpC'yRL&7#T=(Jh`B~M+5֋Cah;~<;K1a„Z^8&455ƎSO"S>4jMkl;ds8!@㞻N Ej$X[Mr~7{LߝKd+拓:tze˖U2e6.bǽk~g= 8BCh@A9R..t7jt+pY+8ϵD.v|iZ9 D͠^i:t; MBY®iz,NbjZ׏0gN4\s \y#*Nٍ1 \Õ}Lb*{a*@ia{ASs0^d"RR=hBq? q"s+Ŵ*DMpuѰqLZXUĕooL1ݷ&KqwѣQ[@/y B!z!~򓟔iW^2wjV"{g.<{$cj0 Aw73ez\+FzPZΥ?U)6WaHMJEƑZR)~ ,~~zRr˹W>#7|zK*)خ 6ˑ\,H&H%r\pޜih'wQkREQ7\~oj?~r/f̈*Lc1-p}m+aڙ W?ZFI\rF5doj4Ԅgs=r K)j';b!E#g@J+XkhZ~,e 2e/ kx\{.=c_?XCA]-9\^v/ 9v Ua$"O#MGad@Aèjd 5 LBBDI!5?`{~.9Uc>u`ϏiꗯА 4Qf鸠 p !-구g6|^cDO Y p zc -DӍ ܌fZ~ ݇ejeP $RaBOğ[On$C?֢9~pڍ" 9̬BG ,Kaxy9#i;M'pq;plED $,xȡ;#FnR>auXCg¢.;G}j)ړ46iLPwA Z[OHM=DfSؙ$ݖɈ0k"u$ivSgyi̝5az"A&M>(?{ >~D#rݛ 9{J+ӂw?M*~m';g|aygO]>QkWN:D"A0d 38I>GjT&v`)@ Up7PӲK;?/z_t|G*QsW3y7 mJee?ܖbs5Zz\ޏ[nAwh[&pr$FVPѳBg|^nŖ6#sp/'c ;9KXt@?=4L[L zZ6X.~*D@򅇑GÒkvÂeY~vaeyDQ;I8 N ;74-4M>O#pQG3MOkhp&u+_4mǞ3*/>U<ƶόu[Jvd΍U4sF2Q%(F_lX2ӯMcڄz}˶WO>=Y.⒥&8x˓ G&?p Sq|Y0YW*)o&fU 2喙ݚƯ.;pMkr~a IDAT_#G/++×_^˸ >ΞWK O݇Op lYLF#Av-ȝ~qZ uՃl'UA%,'_cԍer,QT& !9 s1{\r>45"O,])1G&+ H_C09LS \w1HtCies(A& 589 +>f-DD&vW c%< k>3F Li+gi !eҐ('vX8Pd 3C19g> 6"JgxD3Md6k " egJl+eIMxz=60'fLL'; 02U_CT!%<{hI1Lf|Q4i²rΞM#v/*)Cw=H9[lRiϞsk+o ,~e5&ֲvm;cfGn8X?Qמ`}K@UtV=ˌ«۩kMH2w䶿x/wnkiޚe0-)c&qڱ G3nlz֭'4r 𴋘:njj8vUӨ}f(<U?#^)EP |߆´,kNE*= g~J鋉'Kkly]υrlj8!OMw?d`P_d uvBQDl#W "! wwVd$0[A=b;ۦlZ `"`n5QVZs= P!h% >|%N. @NgGE`ipRtel,W}1JvP3ʓt"_(vJTRU0TE 7V2{1HĭXׁJDKK9_c,_22\/V+T>TLT/9+w~K"z@C_ݽQ$FU?!?m)2!Q$T)Y_7xRK,d0mB-]u<'~ircB 3И-:s]KuŴ/$~w'c#9gÖeYi;3g,m{_8둝9t2d OD(kLdP`%0uiZcK&#w+ߟ7Wh @6JQ]-Yro.Ha41A(b:0@5 ϡjnc?J PN0δ[-+@&;w+}yBDɉְ[=W4"“)TŒah Œ}h;CEHɳ=T,vO.s$T@G6Z0 h\~24LG]"7+[ I+:n`CYR/hM9ﷱ[{N-5bmF?fMCG2-X fnGC4<а]Im僝ndy=r{p-3Z5i>2#DW F "ZOl`|9>bzeګ-;+2MN9x&?._>b6뷤=a74M [8GsٯscvSՏ/=-E,{gesO{ \^̈́؅m`^GˮУzO;g73f4 \+V߂Pbd!j&~{~ Ů F_ AqH-U4@ +Q>TYWh}8[]ly Eٷn!":_A_{k$w:!ZD8RP:D!%@]D.BAaKT' m%d̔;0;x/"d%(k߿x1Y \}J)N|Q\VKsU׀]QkU+Z6]*λB.[*F z@ /@R`08qV8\{֟T~PUAƢ;r.tMㄅS)Kw=-=L[][4Mu1H*EoǘQ{Ԅ 1QRm\$lㅇw ǐ,Ex|&QyH;yy"UT6r=QNQc[oAT @G7MdO}/7 7ѵ i(!--7m@T@u4! X##1Ѐ#HMBEI dwcoB#VU;$ t]jHIIZ$Pzc&pr,["PC} ۧaV{n9@v8f$z+oԞSbCGxGyO{;Cw,Y}Ϭ#vWpoWy5 #N;o+_*o+o0cܞ|.]%z6<?y8qKlzWPHe;|O=y .\SfΚYmA؀X ;&t]g˖-44wgOaQUV諵P H<+#i D\i2 yqթ*U>YWRѫlJ s) qrt]'ahHLӹT x.HiڀaèCK` ( b5x8 ?cywn_S,B쥻=X0T[ !sI(̴QZdP_UП`EI>-8M4^PeB(kfQ煥0>v N:,l{ҹt)LF_ ;988eۙ<#ϋP]g14551z(E咵=O0U`ǥ'Gkj0^T҃)EMU,ݓ^Aϵ]nb9c1#Qߋo̗,:l>>m]r ׀W?p%ѫV_f栴EU{G4A*DsE w?HiBp텇47of&Rtuu!Vbĉr>vT~EN<@0硌Fಳ-T8 Cpk4FS&:X 46 A39~xBξVo袹+Øt %LQPYp%JXMy!a 􄇔ZqHfXխb$;h 4 =q$7yyb5q}d`Ι +F2ȜLaN Ej}dCd&Zai"ռj{PB2ihVL/|_"7Xے>X}`%@J6}eTYTvp6Wm+]ׇAJihN72V^bq¶?eO6K.*Xl|\@PoJ0y_i=_y4]5/8e?'N> ۶yɧ{y%U2:Y97/kק~Zv翊9+|"nϫ0Cw4[*Fն'  =h%)U *T_,Ͷ{M.:}_!3GJe_*sR)cA.9sb'*bXXGO;~'3>i9D"M6cEDb6dIMvECu~dpX#TN%ȏC#)Y3a4xt4EwmA$rXl7Ƙ:׾rB*p0s$:Bo9*x 0t:(tF0!tw!< a[hU! Ȯvd=c4TcqVo ,i R'pP*DjЫhh4ZDCFԄlmdZvqFt""Qj/Z$GR_V7k9J>z-4K},M gmP :D>x'|@ lu4S!hw!z<]4K^߈s~4ap4EK' k`Wh9Ru ׇr kQ p}ͺ`X/9Ly2axLdԨ,,< ,Y?uc1Wos*HU)N/Mh{LCh/5D,X4vfNmEct-&\U'M{ N}W; ^Xg[x[Z|[r*6z 8H!e)&M܍>c9,b6-j|DjyO稳/{yy}vv%Ȧ-WƟ^~]{1_h1B@4tl"Ч?WNgH=UU}Ó)ʈ|}s$i2}4xwhn2lbְ;InMZEpPm+x8MERgj#1y #@uzئ4Äaې8°55D2Vu"$EVpާDhVӐA#A<$JW$=R#Ncm跰U-JM0Z["c!N%TTXIA̒21VQ\ܼ'|̲*r-ZT* .WoX IDATI>\zutUK.?b1˒&(dsO\fQ I.[ʕK;ä}9AϡSh\;*F!5ߒiPhUUȆd"*m-ȎqHx!TWxoddrȨ ;Q"khlmCvtBPDes8BI$W;8o>;dw{ (DQ#"(6P!k@ )MfN/wfvfK >k^3sg5L8=n7'[6fsgMo-yֶrsœVmkq466m6v; 6JchZ.AK*l6dYut]Tah(J'(bbχPH>@<]g\HDLK>5Ӳ+iI" `vLO֭Vpc \z4uM UN?D6>L,Y G0eE3!TzINv^G7v=3-(Df#q$ha *Kzٽ}L)c0OttjMO29kq.cۿ`ta;!`\YE|s{3v?MoWϾ̓{.'P~xɧpiyjG?<[~ᅲ緬b/#8N.k-?[R9_W9jDt {0mESۦ_kOUЦkygj&|*C4v{bGM؍Sq1`p؁8E>K*pEj)s2&_PL}H;97*/8=ŌB!HX-f\]){ot"L= Ӈ% VU1jH"Ms2nFTӰg!9]Wރ)8{'Øj PȒ^X vvOmiWsqa?M8p`f52tG3dML'H;'f/ʯgL ѷOEVyYzMKKč)nѲkf\X!M4EhdMO7~wjCEsR!ŢV\8I~X?.;mvzbq@O{{M,M!  IjIŎK@% }Ga) 0z6T9*5I2$Yk¥aEr_Ud1H$Myz֡-RBGhȑ()dr )e*OJ1gM&/wWEUfd$ 0t+S!!QfçtRiQ^-9JmaKJ3t|U8n2JIFn;ye[APu3`o_۟a'YBjgFnD*G*/E)𣔗 Y}m. )}ASQbI">LQQL@wtco a`n`?eE !k׋aJ$ٳg7+W8qALpO~׿5ƌ7 CX߰$38{x9%[Reypf͜|ԩ ͆.Q$5'¨QZ?R̲_0NSMaL` 3FZo^mfj*g`]03عn5"ڪrZew1SNlTIPQ71c/\kײ|l`w"pUY/}iEutw7߶3UUe׮]Y&Q:a:if_cd2s0>Rd;Z``FjWLЭğ}='H3s$&`EĴ˩鳣a$Lڙ!>%VqR<,:wa -SӴL`"tJ400nf{dhʺ;\Lz!EAˊJ۾Mj9k/]bB퉋:?zq qw3jD-XC}in؉nƉ P v]h+@NbRQd7wl_\%)*˥J+QēF7)h(L4]G4$;Mwqm;(lɺ0%m/]QJwHwkt(IH@sVjWՌ>[Ѝ8ɾI|΃tx8lF< `M*O٩^G$ԓ޶x2@ApUX?nW>2ף0pԒ2eLɋ@`8jՋ|vv8QRRVֺ)H4F'ɺM)-3|HDaw>JA0~XKC;ȮM<;IqB:Nb[Dmy)C[GW Fc&BLQˆ`ƺsŕ8E9. ښ[ݵ[\.9˷v`'&NIQQgu&ÇCukKyEHٰ[ Ik9ņPU]~zN9&[ L]:3Ǧ@V~OQzmޘiywZivIT;]o pp@&r1'iBH] eX$@ʒTJgxHu,5 $aq*WE(=IDHn*I 4xZ;x"8=A""c)fB$$b zμr+e#0 t#p;UA$'3gF1f:].ǸG8M\uRy@9?[x39'gYQMaO}=Mg#FDP"Q f[Gњ -Ɖ.'ZqvǠ9v QVcG,AuH;"Ew0`" 0%qs1xN>㿿 w36m!p3Ԧe'o*\0~ZMF]w_~H$hvAe7ݏo G5ʪ{h)#$SL#;v7gpcF 30nT)G,-O2n{3_-ءL-4h7\y-6[׼ˏލ}6/\?A=ӧ3{l$([qR>{%#N4 CRXXHSۘ0:v CQ@YB䤗$)OX﨩}rz+[.$@~t|BY-S?B! I22 LZDTmL4LnﴽYctsy ?Eݙ'~La!2 Jt:0Eًu6}UvM4.\nwgy&rY;k5g`ZRE[}dQ}eUAr31TL*:ƓV 4=5Rc9/̛6.=eGx֩=W_I sKR-9}a9ykf:dN|aY,x$S68=櫨H뢎4}e۔kk1bd~>jB @wV0sj*]hf5`Ԟk6tx0uJz0iSmRJ~E r>8,ڰ-d9ej5I-[-Φꆙ鏝' ߲1YFdY2@HP;U~g FIiFlL-gzTrpgZaDM=m =ƖPڢ'F~~>yyyAz@i \6s2$`mC--7H1zad32췬Pe@GRRq}ֱqKOBОUV聰@ k,BU55RF]>hUn"*tp]4<~FY9a?gV>9Cۑ%Q =Ȋ rBkBE޳q#2*YZ+/pQ 3kZpkR<_+ kA$9_I ZȖy C|yu挧tDc`&M/Sa:j8RDQb$مՋ"1as"%$^$ú.ۅ9e,q;"H~ފ0-UXn ׭cʴ5?kG6^~0[6`ظzbM{3Q|aӴ'{FI G8~m[Ά%lpꡃǂ%OfJssͩBِak.=FqI`/p0T"h67FZ[ڂx(J?4OmJ^2qMmG1 Tnˆ#sRw>L_Ay~O5kh̒ Oq Ì1Mx)**Bӎ Ȃ`(Ǜ%"_wpOkӆ#ߪQ;h4I90eRo|_<ۿ=0.I:EEvy-ʘS O7$6Z$@!ssSX,-{[wP5=q>y\6~">y3tXQJLǜ9h>rxB=SLfĈuٲuk4MV^˂N-0O(_=@-#kF..{ O֛֏D{[ێd]~XN, H+bNKSwp}]I\YOh,%tVlh&0wqGf>A$ 9r܀赨`N0S))a_,UEB1gf̖v+)Y0 ǎ'IAd@[e! o5"E6 EfUYaoyBtEya΂sȷHUH%!Q+Y=wu%ωN\eJqv˅hrpRD_s5?O]z!NldQ H ! d0˖eP h7l]l*$QUxM5{^$ SGhC*xGw"mE!DGLu[at5rJ @BLJKON@Oz[GK/ĢEr$c x¤--/( ,o>v{6 4MNE Mhii5F5q"0Ǜ)(XCql Bx<7 o/ ߈(sPTTŞݟvj-nA4&iLxfXCW_@y~8 {=y {wEQJp\2` ={.x'YbfcsLk8x$)-=]l5TeE /~Sg~JJJ4M3^gyyyIGGX,#q!@U XG$!R\\f$R%J{*6@ wn6Əcl 3g8r$$A8lMk'ZSŹ e@E NUge /9܀U^k+hJiĨQp߶Gi\ahQS ѻcѯMVຏ=ʝM 4> }~-ګ=Ы On>PP n@ˣ /ld_*~?s>W7)J˞j#ɕa a+KL_yk kžlM/rjU w:n<4 HJA|1[_bU7Ox\}dԔ9v8?aS:/(}P4I4՟#w| )ޠ~43OCUUv74nzhyYLWN+fmmwhStSf.|.>m$SMPl gͪrݥS~Q8蚑D"\w~>X=j\38uP~coc7ǧ&DMV@g&yvٮLR Hh&epٕ\ݺ*(a dV*K}qZ"i;NfImWt({䂑$ ,!ryPvU$&V4+P\v}fK!%yd  H1͏DIH>D i]M -$6KN| %KTm91E8k2^a!#1&w_ݵȅwӚYH [waaoQΡLL Ld~>߮H$f<\X% [oh:#;7pg_ vR.` L$dO;axqlo"1qg[z{E~Stϝ̐?DXxܨ%p)!K$?үJ:jm7|sF4yf|OsÑ0NQ~?eeeoUU|  躞~eP2vކdz;8qg,[6BuurN/7߆CgW IZݓidR0$6m; kxg)nv&SQq?tt,n$/**  gvMGX|O_iH$.=q]wu`O2wn]]L`AUU(`M^^DP(D$vSTTD,h4&I DHG~2M3vgi)!-3C9p`?EE躆$a1k,Zݔ`n:1ڵi̝ 7aqц Eb,˴3c$I"(`B¦$A/Ofjv ̣ K .~S>]gYy߄a(j |1K @g`_/AKQdt@o;QS3n à>7/}K kˆ }m=hí3:!').sO0r8\}) N۾ 7|P½ U,,}'/!dVR;2L0a;"v )z2o|s~9 L|EՂv24{PV"p#ނgz)ܺ6R8mu3LJ;VsTm+~w/5a_2:뷇ۂR6TMQ-F0X\}OxjuW9 no#?s2*?쾙&k7TwŸY7(L)Ikyl͙"ۃrf+;X}vȺ?Q|Ʈ8q%FiAi?B믌*}޸+'NSl n{#!5pOcx?5Y turr( }.EGֿ#oo{ 0ٱ-~~ \L~~>GX{tv;:䒋)2if\DF-Eohtާ5`%-W7Æ~'4Y8c(?*B$41wPވL]joZw]YޞlJQJFLEn^GFOmgc:G p]EHDX(Y8%OEVvRN1`ߜL쉕b&>~~k䝆>ǣ(@Iz:KE"ň{q 8s4B6ZU(JLǴ $1čH;F*K)TPYFS^XSgƆ  D8HI H܉T(P"*$Ң҆k@U%LUBD7u- usڧh*C:(,>nw%Y:枱v6?zJ yva VW3S&Ϭwa,EY] LU[Z3 RD SA4"?9c C:m-PZv"H]Ah^}9߇Њ9ۉ.De1e5zD1D8}/rQ>ᨑ$rImlظWًol>dDՉ] [Yl7pCΚ:{;͔J? ɲL2̀ip8GQKnd2J&In^{.ny6p:(xYtvvcII3gnbȡbwRQA8oTl! #iv R;w'@NL I$Inwg׮pݔ|6ZZ.!?_* ڗ(/ZwӘ0a$is_ғsu̞]E804P(qb1pB BYKD"D"p:$IGV C l4M˰$I"LfWέʝwI}}Oޥs%ٿ~1fazaxl sXYFcܜ0L>~9h="+h)>hM.gwsGx(nGjN "a 6j`@ES}ic3uf AK@ p .4v:7}-_C: 0G+@)#'ஏWMduǃ,̞=)Sn2$:xg8TG)Ĥ ;y09 a$]{&Aȯw:'[᛿Hl{ܔ$6Ve?cjDZ#HgD"@HWhBE  ԃc嵹P)׎$H2 lƗ0S5M݅YzP1DWWY,|lB{ٜ_O4]D>}53A0Q&Y}(!SaA| $srgYdY's-d7 ڍ Y=e,鄵6Z!F3g`cnv~F;o{V+S%[q ebp ɈnpyV>)9oTsg\,o7,Q;vҗ$ zm =t(`Qn \3`2Ⱦ͆T omOhÕzh C`wژ7*sYT'p&e5~6Hd%Ɋbq^ف G -v$45c;@7{ެ5Ge֠"h0qr/M]hE l0*ZӎP4:GQP, .Cw4ţH8-?Gк@aB_c\TUR8@`Ey6{$2}{w v{ KB"БndPb vH.7$ݤ}stTЋВcv" PTUrd5"K(#axQ-gE#7Ua:F5lKp:@ȘDs` / -.2ƍ~nTU5^K3WIցD"BVz78 Y.WY/4.4-a9\||q@T&lgٲظnu CB+F -$ŢD"BMttʕ{3pBUD7zn6眳WAl4Pf!pxPNZqx x! -0N r+WZߦ;'!,楦_HXkS7r$IF6,} cTr%v(+&N_F$VhHKi7ҾiUE!xr@qϞ{OĊ"Hd٢L2BiNjS 9"yT$ "u,X,*|R;V~ eO"?LTUB o2Zf0 }-S3LŰȲ(;-T(JhrV_e.3 >޻a2?yY;g9Xಠ 3g 1 c ,joFrٷu=ULq(eAMa Ɩ? }a~&l潰/P7 hr5 /A[w̼L~ 5C"ggٻW]AHzI)od3|gk~u۩3x[k8k$n}yԋ@iw!e140rNeg="8]{ןdUܲsV(eѤoqÖorHqHo|*1DHIsV#db-?twn>ͱ5?m 6}g;ï&+LuOD;|i|nyt+ʥ|W\p>ߪ>Ξ@3k#N˵V#ɾBĸ0ȎaBXϞaay]aK?DKIy j<*,6.P_~c{nB3Y0_x7:ar#kl\sDF{hkkT;G NUu%[6m~i!͕N<XߴGL\6YJOH3P6ʹ}v,qճY `_c5߼jv=:J;?]}` ߁O,YzR`L\79w0|G!a] 9]65زqhd2VHMĒc*ʶ޳f237@ BŽ "" ;**)KЄ53Y3ӓ _/u%ӧN:uTu?J$Uwlp]ejOKơc3 4mEQHRD"Oԕ Zy},zm/hen8jB=C˂~U`xQqj*nd"]( B>q\ 'W"Rh7@1@)qB–&DK( Эa;g/~u_@ٞȸ6mzm"-#`?3kr֌6DmFiF6_b D4@).kކeƢ(2grT0-5EY #c{C Yp]TKEV{uEHd&({:R%=m %UL2Q+gO[65X8?B?@$0Xp{=^j0o IDAT[g&4M/ >E|GO{1kW%m)tӋӺ`# mEEB:::p]`0Hyy9lvLq.:tWs:~UUa\8@Q.0"$ohksX4GضeY=*Z7MŲ,E)-4MCӲrI2 sofܸLsee~soaѢCioOr(&MX%9lW_nJT-g:C*%I,"JD"Q8_cxԝӝ`YV`[>kgj4ne#y'wg_r/חrپ};+W$ܼCFףh v};|Ç &N4H$,$٬Ms3׫ 1oN6k#/YIkk'Jl*cU9ӦBJIuuuOA83)(dYL )6[vY~)SfG<8'L "&a&[nEӴBo8}0xڶ8 @hGsAX7x|D±@@e.#$~lr9QDz)Ӳi2δ eʨ}2r0Mr4!ŀ$aع,d֢47 Zrо@.&淕/)M!5Ԑ-QEy<!!4 C&Ll6a kM6ic!lEQB[VFN;̺>/W?o/?OXpeeAqPlLÇ@R:69iHl&9!]c5Ӽ}^_p<-:= 2;uN Nypԯf~Tc39vzgD 2NCbV^젋䠢zz0x`<П;'ѣnh~:>nl|-\q-?=@-Ts=(j\u#m}js?a-',ѝߙst-y#/IG:`~# :ц$P#tdɢ3h`_{Wӏpu+$ * DzgǍQ$9r:'GN.wXJ~[T9yH7g;! 1u1˲x!VяI(7 qu~繮h_;".L!â]Kxፍ]+Өa«`WK(<J >{ <st̃'`3DUuVgC3Zˋy8Bkg&:]6/λd;1D[,܉IPt}k_ wosWɃc%ZoggYG*r va9Extyt[cFƃy/ ?|&q9L7`ˇehN;JQ09+C:mZ}Y篑Ɍqw#( A0f3ҲHtFX*%M(ŶM\%MclGT9RGQBh#v*Xc,2+h}P7A.Vm3hNcFRMZUnDFqm6eU8NРMضuٱZю. H(CF4#c,m+G[L<4\ÇDd2AHRzv1XY{\p]v=VxYz5cʕr92Lxf ysw] bgqL,^VV봴BW.6N[@mKڎZ@yu  --+Deؽ[l4s5*E XA5n[E `9ot: Tׯ={~ȱʢEe87I&PY9TjoaC/.lZZ;kTrbX!l$!Dmzf2Rttt?Uֆ^h ( < SNe̙tsξK\pWon{Vrs8oX^"F[Jո 8ЦFqApkuwB`a'Fǡn$XS~3x6GYH t 0c&/ectc9KUy/k .xA|Ӿ~e9CBNY~=}m0I WuKfϻx)e, PZ|Mׅ`ּ.JX7X,tq] ?P(c5hd@iŊP&zLAѕg Y(YtͻtSvks++y,\rd{=,ބc|iU!g]ta䁴|rޱWJE䳓u9C|חE&~=?oWo@ҏH̡(faaw*ffz$:r [巼ԙqRp]1RU["{<}qi/fC˜ ( hPPk%nBAٴ'?_Pp *f./yv a*nLAJ:FQϯ@bjqa{N/-֎aaf=a*tFh yaXfcäcW1iZR #y;?bj0kڈ""5+xikx紃LhHF%0 1b*2pVTK:~jC^gڼŜE؈HVJEXӈ: GI"$h!fӄ/hˢH` (~+LO9W2us N}f֭[[ ! /PW6"tTap=ɖϥ91_rQ4ފׂP3?: gX ]I$Xa7TÈ,O#?p~;3f׍3oTBFapyϒL6LXݽu:⭧ަO.)vbm<ΰt i`Ԩ;hl: jj46^ű?9Tߞɜ9]yă9찭#Bd2$hh4Zht:M8B8۶ioocgc߅(=:[OyٞL-6ǚMd]Ɉcذz#ǎ6Wax{r@&Rn+(fY!Dn6  G7}uE;`뺔b=$pt8` V^o§'1ԛ o/&NL*=@2pїi\7M9g8yV)VO_BŽ` @LA ܼ4oyAzɫ  er(/wZ6pD;mI)D"[knj"YqBѨ8Ճ>`gyݎ2^yKzLT  @u 8|le L89gK Z:H**immŋٽS03yr'b9ە]4YUŠ]H=|%toW\u%ئM:gts//o*|qPr<3KA|Nte_;O/?|o./=P@[CW߱՛8hH%w\3}~eo-Y4,zz/Ⱦ;Ξ?Um띏X[=ʊ0NI ;?͋=_<N*(6-v!B2KWUBxs]Int.{; &ul~.ɤ1 [nMcו4xp\kqȚEޕ/肛.t6\#oDžLK眹c WX$[@\'eSLv:WUUkGberuq 4Kbxa`_5DkH 9XElH)1g(pD}( Vgy*;ð^2t-)=.Ě9 ~2.izÖPLS-q7>i )\|%\Us{09h.]Ga0M~Vd3+2klc?{og|7^ȑ3idڤ5e]N``\1(c]'7տ'NNc|fhΙ?X$ esvihN>w=ttnj^^r>u|i\UKgpcKސl%Ցy5SSD8 T%\"PQrQp}QU67~}u 5w ?U\)H|1+ϛA5K6gH/|P_CW{3qtM.SQ`$ aܒd|x~Ӌ؎O/// 'qG <Y ^ !ɓk-"26W" m vDqw|Uȯ8]pew=N H"|mWh #c)EfB#Ya|T՟I9dr̺8ђ06Q9r,^:/ZdM]ǵ`bf]T@ݫCSVƱj%x 8z%#obQ @ƨ 1b:8," -Z֡aB5G1w Rキ￟=|sclX7}Ļɕ;(AS?ɣS055hhh(%z_?x`_/ˊu|Sh4J  Lb& Q<}bGpiq 55q K%ۈe 0H&_%Z{M#FGG\1\ʺח]]}lZ!NCÕG?1zk ͒-[<ɘ%׹u̙3T*eMnE5DH$r9RT!jGGGw5Ju{5z{g$ 暏};9r8v%s<-ނ?aX=]V[[%\ `[ju-q76}D,@VG0>`z/mDϧr9Gl`a>r=!罙e *#no:mZd 6)gE ]եq YvnOG[w;e+~ P<*,M-@Gqb߭aa>`mgт_eZ\3-ED jOO_`$W2\1#m`Ŋ}-}&)S;#t@v4& Lajb\|L;tRStR*{GmW:}g.wZA;kx|baq#_,5ö붴y8HUe7G~ym)]7F(K?w8Wqovo'`R1C%nJzs3GOuбuZ7g6 Y p ^,kV.ً`؀r ,"L&g545;BP<RWo\i 矟~"{ZӤ>>>>PU_eEZYv4&K֗qGTT90%jct5A(NJp ǞCS!gQ"X*afW!w7R-c FM !mMjHƔ1; Z3h,N}?{~p 7B-+JF5x [fi="!\3c ZeA4@4ߟ:0QqD kV*0MMx aje ϓ(T ډؖq#MȬP2Prf%^FL'lM|Y" Gs.ϻr/ьsWv uٺuk3 V4cƌDyΝ @qeM# 8Nkkk+4`׮=υrԟ IDAT#9x!4-SbYWPS$\C&"3dr;Ted}|ۻj1((^<_z»?8FoP_&>V1xp#[DY {ݻRWןӘ?/wΝN<,pP(D"gF!A{j2~b]=?(w5\èQ/^̶m[8c(\vLoe"Tt%͂OaR}_׮8y!sTuOH2sBXFUgn}~5/Cz,ql:::q|o]kgˍw"r}=i`Ã"^d zM"v[ = j@{_iɼYAһ^gYVnX 3v nyZL2k[t}f_OBoPN[ӱV"*UWѼ?_8tp,ڶ.ǩ9cɂ5vl178I&STTTx_ÿ+5~~:_VO2x֮[ϻ.s^\I4eQjuJŞB6ə f9T \U+^%{tD* }N={M;O'&KVkYǍK"%^Y=y};tv3uB=7?&w`LYj"^T'^+)6({*PPq<본x嵅^ Z{=?焣GPS(B&3G.:P7yEKg1$z jؾ9xsg9,]  " 3ZG*Wp ۑ(4<"3z n^ lZI-8%[ *M3VF+[3@G+b/0PF&%bThkQoD"Ϯuvk 6lFfs8,XӀeQDJmH)޸m .$"FuD!=;| Fbn"A7^Lg<فz.pC&j'v3WWxZBoj'ɯ BUa皷fޥVfܹ2^cѢE\{]\u+v/q`Y`ȹ[`Pi(Tw?駷ߡ2Mkj6l8iu̞:1 vw24l ۮ;7Dԇ-q滅:ƍD"Y*+46~)Sɮ]s;e]q)Op,'s J~&h4J("Jke2.+>Phfu(vErc8˲bvQG1f(Stxϳ7=kRvEgǻr89✯s-0[y˿> 3_R1Ssݕ?`,Y<8#GxϬD"=pO5Mkpe ч){#?G [.EK/B@Uav͌hQ`@Y~rs`G/sr}O\=̺ /X߾TtW9q|s=#/KEQqmCLӮ-?S/#Țaw⋄5$r/o /`0~;.X3+< 7ӚNX>0`@=]Ǵn Ȼ"C<|H{޸Z*Xz 0FC:YAJ0zzs0p`Duj^[ʷڪ9EB`ϋ6nDU4xlG :*  q3IM}e= ̖ƣ>t g1Ḓ|8WG꼩HӲUXT#k%CW/٧vZ4P/ʵ_>1lᩅX$,`6cA5Tѵo;k*l҅"s*U!#@tCA(!vӚp3o ,ӯgf1=w cW"BR X{v-̂&UFV 3q w'St>!:Vs'בyq#FR]C̨<|/SFU6j$S*m3l6Yp(J};ێP]ܤn!D7HGlpL a7$x2 9 aDII搕vҤywJGI8ds6̚tj,_.H;mXEɤqM%F !InP6_b!AX s$Ђ6QH 'lm86#@˂ "\yzWKE|%x۰a6l'>_v嗓z>Ō8UU0?qBN{{{!(\0,ŕb¶m1m` B曓嚱mA]n0² tf-;drLw D9>8R.>3ʕ1}B(+ &N|K'kW-׏0N⨣ɳwܴhYj6I$)hr@]S=uu5|A)%|sf6MMx ލshhؾ};RE~ _&B2n9\vټ s_㰓^eGq*Pv~Ky\^^G9w֭`͜q "~|йNJ|i+V`ΝzUpcͺw˾eww?$i5 t]4` m\SQ$)RceuEQ\,S)zhK6kp6?ƕW:]rMS&չS^N_it8 15t >+Ӷ)M_{iHW`l[v ^_06Rh}9"wOۖRĶ}76lNn׾FP c%dSH(y:D*\3)]l"R9Sr|ﳎT@ @Mթfɒwq(tJ?I *j5yf9<>>o*mj}eeL~4ee6 &k9=!TVx\bJ\>N~?h5%x`TArzuB7姰)(_?w =qdm|RQ(+9E b:.ueZ_%Tie;PR[WqϽMb3dg_,o86)9qH4|EUt]E34|P \ZIJ9q*ăZ d7j*\="ёPPg`P缓#l29(ו:F,l ΂W3GJI0dOS#"UG;UN*ɇ MUNAAEHF( VΆ u̜XJv2 CxvPݓVuq[ {,'n` DT]CV=%jo)6T"}pB2VAZqßNo۞gQO롻9Yz4F{ffk dZz'4,=^F$# "? ɲ}XeKs BS4ׂ:;~- oC .Q0Md:[-,5\+ bD Q&>#^Ap{;N &#A r#N\ @&ڽA)`6,rJI~p|3ٕ{ nÆ KiLRf ϔa477|݁,M3kҲ˥2δiKfo;xn>;1nRiyvϣXNA.CUU,[6Y "9aÞ`jI*·uC.w g_N|.Ǝ%qf @\ 4M4UUUq @<>qqYU4M楗^n Hf⩕<CЮ/H$H$TVVS@}:V.=4q8 ]yg^Ɛ2 *XG|lGe@Oio4?9g6ƍcСlG+(FH'MT{@/.Xg@-[V=^@ zxLx5?4`f! ].$$& QomРпM1TZfwx=F7j U6ysi|r׼|wkBL4?.AgmTU+iZ{ivzwkÞ{{aZ~-HkoNfpSgP=kg(Bn< /QE"Tu/[6;xŔQ:zϓ\5Ck/F$wbx SD{ hD6.0} \CmȃqRLHW"$Xa¹ %ͻ]JtU5p4BA Y(nMu·YQpJ>R a U:q恅Nz#qD=s"+80wx|d~fp{g?{;K<5y'滗+dЈ aoqL>JwsG0l[\udUwxHpƍPKSk(^Uq0j{T˨5~Y,y &s ;2AJD~}jw61uƑMMZx}GSw^:27e'$ň76^ѓrrg"`Ū&Əǿ}w)SZ@(uD^zcfL_?N\:k|]#+6a&iibZTT\WƐ8F"A1RfH]*:&7k&e[(着J1r>Xշ|Oq35u-L1GF5qoBtW]3͊?,etϳ|z#ܕzMﻗnr%^|E>UL]oܻ}Itn 3W/4t[CυeH%C}ϛ__It_@|RzZl~[J "N h+`Tk8IPTymuǍ]1_`tMI&;I;*̢a81'8gY@6eW2N?:؅[SI&N+/PpAQ8JGT+%QւƘiT_<7H-[ډ6P^~,2v옆m[C"qa+VM$l*O.>V*(bv[g V lcXw'id&ƍ0d3fРjBI G_`i6l f̸ZA:=E8r q Y$˲f g B>ؿT(uw|\յ=uzdj-z/!@&!p!4SIhI @z%tSn`mɖbѴ39[{|{gg?kZΝKnv%.`Eg R+D:jYF:8cq՜cTU2^~: /쥯Ϟh:/ٲN$ H rø\so֠S1lEQ#$*hWG lQ߉sr_ޏ^"&;|X=L}t$<E'_ Z ҵ ^+WB]ɸq_ a Pȿ23AG|0o|<>x}4J?ܷ#7iGDlxpS DbbI_, Q St2aT>Z!yDMEUî*&X>.YL:0 @ƚe;k.X7nDCiҥ)IX6QZEInZn36)zU]Ɏ+Kyy1۶SY96^[}Iē˴?PfֿyZ)15uhYL\54wZL:%)[D"<27ngwKЙ4y lmdA0nJ=\OaFeM#&n ML=R2:m&yi [ׯLgB٨)kW#< yjcs]=ճfӾ}}0c"5ݍ+l0icF+搟_m_dKYs(ckFz?m {>"UZѴކ_JW[ Yn؋%x2[Y'%5c-DbYniQv7.2uƄqiRv̘>BwUk((@In?ˌvM-Sg%xr6yaZ.'4o555<3lڴK/N=3# .VB(9>fL(K` IDAT`ƄBfU2"7qy:}4s*]^CaUɓ8h,L ~5)~M/aZ c񱒮"XV20F@_% П$O.; ' 2Je>sBdPl$=5[NSrW 6OT/T7KHփH΁`1rNIlLΆZǯv} |:dU,;78,ɃGt/`Z^ 5cYf7DlͰSd ,fib2A26fYPSR$Ƶ7 qfWhg[{x{Ѣ2+ߟHOȫ>'PA}y@(pw$6};;i㎡m? ?hZopzI;˷x`ivaW]~MD"❚XIZtHQǀ"}`X^J(JЋAZ~H L|.#Dt,#MA}zhL7bG{1[|>G$66/e }[8cA8ұc㞟ફJq0gىp4qݸ\.BPJuXt hD",g""!2<"L4?aDR@vI> H{>''dd9s(KŎsLU(, uR__Eq/|U4ɓ~I:3,^{mS68iDQ\.,^7XtN䵲O PUI0M3IvZZZZ8H+1qi2hE\H8Z˨ElٴAL4 EQhlL#YPfJ=9UUV,+&e%RӒǎ ;n۝Θp"k~S!0OgTDѢ{iL (>ƗMiUtJsxgp//w7,˔2ٸmô,|z%;LJѫF?%b٠>W~<_MW^OW[/'wRyI?evEGgBmllK_^~r+!ӕ9oL但c89,+?$|`e빬]!G&;+F1 nvN(F,KK6\~ ?p 3͈q&xp~sh4`*^#8[' ݻəDQX+%lmFF ?q)xQD#qp"W cjjĦpo[yqu#a=5SO~@+jڿSɧ[涙] Ad6rqgւ$i#?-5w"H~[hsT0L@20tz z3{;@u\ߌ|Y.i@ԝEҳPknnͤqxƉuewLP8u^R%CIN9:%ZwaMxl%ށ}$3L K $d@͖hֈR!U AĔ()J)<7=m4wwS6B0 TYLeGX۾q)eu;I+IZno"M<2hMQiϦ[:e:vXN_PZߥ3sUfp8LoSyT}vsе"U6n&a2h-50|Z;TT(tN Pv)-/"DMAhܺX:-`0Ld"jk,)etw!u46ttaJ$-_?~#n(iyL(႓'sUȒH~g9%7-S篯wϭ"Y[ٶp >ް>`]Y%€ɘӰ ] K4C]O%;fC`ߒ?X|W#K%dfRrYv k?DF y__ ?{)O/8Zmm 6,VL3 D1n"엄GNt"4),la&rX'&+8{h}ͼAm=L0r4fgN,aG6ׄY*7Sgx:m H2!xR+DظdCXx1 4\礃^+,i(v}!%p+&K_}za9fk'Q=<wsD=J&cP ?9۔fMMGj#4!@h !1, D4b9`-َ{I"NU c"1K'*FhLsV7" !fϥb r/SV2 6&ӄeߡtd\~?ٰaC a%* a9@T2+˙3TUf(J;yy|D"{ho/ =XA(.e׮#дDPdsd%ٷ0%y vK@m(0$wɌ,0EG ҒCzZ233FKxBB"(NFdڴx%'J2#a{?h n`]'>K}i:s=\wuL8 ,Ѿ߬yJаA|{O 7B@5_4 @8No Gqr edLDQVpDPU }Y0IpOAf>a1y<: y1m<'CCmƒ@Z*ǢEMNB2 B̩QMiAd=a&V}|9X0E7\8wlbLgvBR6H)sh0͜LJމZjt}7s э`\\ԩʮ Θ{0]ABT+t#';-fNYhk`YFp`tt9v/<;`|m㿴]ȧ\r 8j<>v`NG!,}H/sJ|aN[ n36i ƔOTJYB?qĽ.K80N?DU%ڻCf 7Wzrc XI,YVӴ0)la}66k `iq3!1S|.f%M-= "[E n_/-kkex3H$,c&va,Ӆ(پ2b楣l%ӟEExD  A_WiNo8w@#KrU 2om'Ž ?(,D츩?E03r'[@8D硨u䥗^bÆ $[K̜r6AӴn@8qD*+Tn  `nw I-ZBMD};wLMwYj2('$'( ߝ@wJX2p,X,aijDn'DPUq44T0ub듘0! X,[%gOEb)Ê~iN8:@39i@HaT̙CEE!$Qw৞_ӆ '?9j#0 l G&s(+PP=6Pb?+ A0UUn DIB YQ5mX]ߥhBq60,F 0 rrrf #RKUկĉHKK ]]]&Q eIL43ʛ|=9plȝOHэ0E~,әfIX"L;^o+) (Z`IfCaDh.;p1qa VN$( X1rHJXh>OLed *f ;¶:)4=Pw!DD Bz"([#˕nMO>04Qa\ I6hH $y9p%a_z"9{F]Ĭ|lw Y9v{7aOl3ܪ=}xӳDz\7NTdxT$CN`POT<$[f@Bno?S1)5-B jYyR=qI #g):&0,)S&@8/̌tɍˮSDZiocCIQ=cQ܊Ym..rs!mvs 2yJnQ]D9Q _:G+k8Rl%Y򯟍|2@z#ηӹtit!E=BR=>|{R|,Kla@y?2=q_ϲXl tTB!ECkj':or΄Jna M+A;c)ˠ6 숥. !5UKHhmp4%aL4{)I 9'xcj$گ9i40_,$e{1+8汆`IX aAK;NDvYMy-sf!n*L*LIlkJ_mcM4xоBfS#нo![_ .??μ#uGŞ]ZȲA* OGi'Q\F $7׋ TSP7KhL__/^o>_ GDzKVs9Z333qN~xЮĢĿN6%~egᒥd k1Kڛ+=pbiɡLzp' yG8a׽(VZzwELᾅG%# N.lFBA}LHmI8>kZ@ ɿ&5g~" B1F,F0Ћ96`8RNbJ ?@p`o/I:'Zl, r|.pzXp{bz ] FCe&ă;*XnWMBu0,`*b׬~m am"k~H8 a'2 (Y-ġ]X>>Ջ)X%?^{Syl\;OSUd9: VP<ދz=[87 IDAT+# aal^SC{x>r 'fjO$;]S!?Rh+<47~Gϓp챳u3Lgݽ/>JrK-Ò>NYzo_)u(oBv711mlB] Z0h:BT#FnJK#kY& AMS}]{6%zwҰ=i۳}<{l'_ DM|U:;O ôgw@,x^n_Bx<%5tvQDEI^(u,X(%3ߒ&sD#I"*7+'Oryɟ2a9 Y0(#TBf0 QXYvA^+<(ʩwpߒAC_r%ϡP(яb1Or]wp„N(+_WdKieA0hMppMp×y}|=-XxOٹ߬\]Śv_>ë? Wnた^KKk>x=߸/ky) kq,yZ \`0ʙa޾ť""`JOFd~k-;% c*Ɠ38ƁB:8,wydq[-']7r9Q:YIuL0X|1E[QEIqdpPMk C(.qp-y-?nU*!+/?~vˬ\ .@@VTҩ4 ?$('M;V " 0e:9v'5Mŗ^&reekillb,+WɔɓR9/r޹猸|0X  RZb\H dSFˈX6OSU:EQHǥESk JlnI ]h`Tv&ލRHGRQ[ę;FMgZ.KQFn7Zcg XAXPG b]D2yeA^J{[:pw2<[DzXA7߹pL4.i3жڶmfB{6f 6]DziEKcfhz/c6Xx&(?#Z~WBYdRZIxS~g\Xa .eZΟm\uupEX ˨l.sAIRN30c:K8OEܠ[ ta"a?Z41\0MeTavNԃ83챇)2_T?1"rwpwrĬ/ᱻҢW?D~^}Ξ{>EL2'P>Yه˯1ˈ (օ(Ұi-| FqGqՕs䑧2{B ӯp/.{I3-d6U۸7@+Zb6[saɒ%T5;C˗kz5q򉳈ņfQJm[8a(9'9Wgz*Dt`ϻ w{ށ쉃"&W}`T{g P{G7:9uh۠Oa`xdgJ="dGx:: gM>HBCEMݗN* YXc?7^y"W!5UVf^U%{chY偫> =9/Ggbx))~|9%<4[NU^zeR;ѯy5Cװ}.TgAj>l줵+~|9q;Gdfq3`gŅy~Uo?۫x+X;Z³ۯs1U.Eտ_>i呭ݛ_ rsK=FǭyiK77%˿r/BiCsg(5\t#x'SO;#!݅wrsXtf=104q2m|ܻb-t{8ø`Y{yt[‚?zg,8 ySͳ_D5Z5 {tߙﳡ.5by'LdGc7}eeuo󣳦swf;AdAi(sŴlXb1$9c+(atuuxiR}Zxi|ķ0, 3nrhOVdE#V/_̜ÿZF,=)AdV{Knn/siJh=a]lZIU<Ak{ٴf%&M'phѱ( afÿןi4b%; lݴ{5PYϗ?8ӷBQTsI}x=9s]7t8|aXE ࣏?vSYY1 m?ÁRm;[Q=aBHϰ|,%N=/ɢi=}E Ǻͫ(frq!wW5SYRI~N!H"BDGn E y8vjE͎ML K&ALShl򒛕ko:&(jm~`Y(C&Xo b{="FȔ9۩ҍE Bb\bm: XU]N{>3j*=55q͚̒7 Fj IGH$v Yl nL$C~ _w ~~52NZwn'/K#t*+nF>~y t1Yߣ+/MGfso716%b,]!Vj F4< Ewz-ffV:GL9.7Ef^~iRQ6 6L]NW2.&?+u4-=߮ 8_\OZF#&(&WSH H<,9jgz+iiEM%1QO@Us0Xh4Q@7IJA'd/ab}P*H8&Xpcv') *&tw8Q?IYYYyjx]GaO(gPه8tv™gf7@Q}\zŕK=ܙTV_ͤ CLkf̸j*ǍS3GҦ=`tX3\p,^!#;Q}r߂}pL8 O~,c&3&Hw2" ĎΡ|4S"'lGG`l O擟kjo@WZMfͦs;EZ](~>-gQ8s,=3S IPQe'XbQS{pq +׵R^A'W?w Ψ"0 7X& _Q\,OE )iii6MDT²o5׹ YIfA1udLKjc\}<7}Qƶsa `]L⩿?;)qQp]-$[%x~n"5s7M7^bԯyVYH}v'q8͛'i_=_g?=̹%9.Tv܇d9hcH-JhVkTl5)ȥ-ùM?ϗ6b ,`ҥܱ\/bt_OVnh_kw-|[%~੕939-ϴ,jwso!XJI&X`m"p%1> ()3ٴs6SQ=eSDzV6Yy:@`K8fYLIdʥ̘&a)X2%RQGn|Ōyh'lY&?l g8Cl _QƖn4Må젹a7}n#L*t~okdhЬ6͛7 eYlذXaGy7*THnN2F@-Ҋ XSx[XIn6A@dJ Ŧq37N/"-®fŝۃ0tZ<$$ biƯY@ &2 .4[t1xWý T|i% JzTLj(~7іssgiBo YoE[g2 wcI$,WK3؞#o] byH=EByj`{'&M8DъP/ G鞛1=2},_>`gI܆w!zW3aBqu!dL@T}:z2Qs-BOSYuc* KGwtJ:FEf_;;xDp 3ƌ _j.zQ.-Ϟ8w)Q6uAهM&_6KϹU Os1￟6<Ϡ X,K$d\2D( ">z(ᰌπhF6(#8NN9 \2CΩKuEUE9 71uǁE~$qEM>{g},1Ms29`)>/L768e8K!芺)RIn~_};ťD?pS D~gGI+$[nb{S;(˘A%HsK/.K(M&;n\=ݞkI#?ؾ.Ͽ);ԁp[)Vt‹STəC^vdYCn߷$  VRyqCmA1'&: 7L&6iR4F6n}0YFC'&x͕h*eBy긓&q%9[ֲSd>K/{KO"J;~5sHuI 3 \`ѣ?'ԛ>a^y?;L*m 'rJ"F#לV̺W]3"bEiH3S{gXz9N:>s?n9_!xcxxwPnsox(Nuʬ7,y5_=cڀ@8&[釬);?R<]яNJXpsչG ?XHrΐR7߭ү?W^v9y䏼;s8~ sw93 BSS 퍢Tn֍3`PDℛd.m^ ?܂BwRҽW܌0D~, +UH @S5UH /Jܾ}t9ўLU*#;۾[PoA zy$mmY?>---՟bX ܕ$&=kl1.% (yfQTGRa)K48ˢk{h* 0"qTE]c-YYSAq~15 vH+IPda9b@@w*^ER% 5NH`dj/}%!BUMbUa]GFY5y, 5@P6y5y8l`*S XYl+ˋs JdG Ka=: 0rRHE`N:L+hq,!BXȦiX,]*1|>LZ0 >׋dǨ=A\4I"QUT>"W0BcedFu,k1?Xv@o/ 7?O:][pī3X]o2&?vީGpީn흏>a[o5\mlPd7m(哓#{u `ɋ0  zf11 ݜBМ.a7.y9~a) IDATYH l !˶B YV=2Suikr J ѨQ n%btqtZa2ӯ"%EfYV';%R)<&=4z^z?=Qg?Xyͯ8`0V'Nᨡ455QYY`׮t4C|TsOe1o>e P(u]2<^銼%܌뚼f\pvާ՟7>Y͚Z.^ɔm|C0Ð>L>] k K=iY8,qKCv KroN"HێMTUt4][s;V WPRǓq#F[MRm*-4uf(+ >K e%-m@_B9Z=_v.`_l0RW,Y,KĢ1dEf 6j* uMLRw*H$œf;xAvb;+/`Gs1 h$J^=8`>ёr&G$ªU9+w>I{Nv6k_4M#yQ&PRENM-KC8l 1 aZc. S@4vo W_iTVd̰15bZ%! KsaaIG &EH$BXMĤŴfTe}wRIGC EYOCXеi0MdBB$n/Xe!HqLȥd3 Z/a`)r8ejX,HwWXnDN' `*Fc"l/(&ĮSev$YlfcKBVC(ہ6/R"(XA52nb5䪐V5]1(. Yp,h Z" [t j.7\}VJKfZ@sW_ 7ܐ!\"F$!'W}4ueDu!Mb:x۷wS&1CpfWM,3n؏ -]Cs#p9@ ctLH-P@e0A $!"!H 㱢`qfb 20,ԉD3nd&M YvI^Mw g #\k/_ )C<˲'ƊMhࡇofСwwu",C3+xpzZ墨V̌G'.ŷ& _|!cG$ 9dE3Mjo'9I7!99@=j%`:4$ rf?j)0 ` 2+YVd0|(O3, Xd&$DdL.wLD(:\A]ss:M@BVn DbÄ<؞,8!ci1Mp~D[ . ?ת3?'M[ȭ Yd&bTi}k 74qMO0jpI 2 ;Vwpmlz'N:]4i_GeL6. Y٧_{ݙ?n{%'1k控ߠ^2$GɎt`@fpڵk*,bviL舩wL'o;so'òiP1nTqkcѯ|l#_:dfQcyLT9~5D䞏'ѭ4p)²R|l)r)-F&izҮ{ң_dّUݎ#.g[{5|A,]8CQVrh0|["q@FZdrh1' sE[&@ܮxbt|=R(Ʈ!"K @"\Nia6iBTC4@:qA4N 4:jn2MdI%4'C8-dnM}YP<^] TBIOGMS:%ۍgk]؀@4ϵl1gӿo_~6wEn{r\kW[_\C}}{5S.~IH;a~8ʘ,$oa{<# !P3ĻvE4<.`QA4$0(@BsL+STL[A: b鶺%oĻ HxYK klЄH~X2-fIjѾ&i%< ,BfweYHB)UGwǣvœg^pvu:$]BQ8; uHx(* ,%bBYY8U~k{=X^{.y%NrRܞiPWVH(icd jtYmGuZs?b42o NUUV\Iyy9ݺ٫zb"=)N'2c;JDpYf[s6aiiTaMtd6n "BǾ"Dy%MeehOZ,to`y3xPp*ڏQ{p`BdI= T7 sDaYj*f߃F7P٥3Vؽ2eF!\mԉ"culOqs}oQN@U?L"! wu_EAwK;@s=ܳPOgG9Ӳ;D:;kHR5\=GE(1 j{ՑKȓN䖿~x|`3&K'請Jl r}Ns4nK9U$?^$OPSMVNn\_u8p8]»:I{ޝY8P-EudA:*^HCGew_S[.w Rv5i Km_vuջ?ldOtf:Jb̦n,6#Ī8c@+G [W\n=[dfxU (2V8l-0AZ#Gm@ԑ`Zݰ1/Ur:8 GTU"0=2J+MBX55],]4W@W̷̊PB!DbGy(! *bjb"1i1pjk~d9Sv>` 2oa!SHE^k*tʝ; BQ$յTTTRqju@ 6reK$_ k:?Ip8zwee_ T Fu HK^Md/,%ڤx,8TUEH6glh&B4t0ttMGӴT(XCq$BeYtv(--%Ī{tbE?$(x5 )Lm"KP"x^AVv64דEQAPM[F1LX4Q]ٺ8iۦe4"eFn⼣(^s%L'Ojwvۮl[.e˖c6F8L)fN3?o-R?c8ߣM1b'NTUM[&Qw:{J]IUElZSveM,*d j /a,5$onGmFiy$~NQ+7M!{K.+l1o/\*}G~P2AoJ[Ƨsaν_s.ϾނꗾuxdPKD*GvsW6['\>]g^^i sT,~f.Mm_}W\9~Χ_s毫{Θ}|xY|qX@?ߦ.0!N|>vyy2)0G^sա|;)<|ܺRu\x0>{\~oaI[Ftow3 \jV~^8ӞK IFQurOغ?4:F4.J%sl?CJQk`zhaQcabbDb a€@0ޫ+n`:`YX9f{ѡp`b@wljGZU(A]gf<--bBX·CCncf9N CQCѣ[Q&Ŋ@=j^,0,3 Ѓ,*>K>[}g}~Ӛ O6˲zB0 bF 2-DPQ2-B"aU%(GUi͠[;UDfw𹈻ec49U:-Ѽ*ׁsbYN,W#Ѽ&5s>qB%w;TN ͣ~eXZvԱ`C3p;CTE}v%>F* ԲWXa#,Xd{NVW4/?Z+kYqj/ ?Y^VmX};+neŶm,++uXz5֮e~=+ VbYY+mc֭,++cW8a%WBzB#y#@i8$r77_;yݯf:zh&LQU<[ u,x}sTYi^zgrI:[.xv; v,7^I?%!?m0gT6\0tm1vpq$}o7 iO?|2هJ-4w3NwsWR[\y^AǟxM,g.Yޞncʔ;_v/4Eo3uڅ<T2GqGM/=v-]mOt"Wwo')<Œ2B?㸓.A]˹s\:0.9D>ZĆOWs UQ2쟯 䳕PC'#Ͼ oVjg>'nzl.v!/7mw?AX0(02NNʨ{x_y%ʖ`m?^հC'v,ƂqN7no#m(cqi!׮:vl G߁S]tǨض[ع} ;o%kYt:^_d{tX3Iz\#Mu(DC] IU6!$쬠,i5U 5](jz~fg% Y.w*u LnB  m\ ԥe:TFO8Ky jjhjjbGy9_e[p%e IDATi;46f| Tؾ,(o׮viV#ڪړn[XLGM"ѽq/'+9b׵fg-] hk]ijj9c2Z_6,@8HmK+7J]S-C Gf%)^aM-00irD$ydH49ݠW^43´] loai` DžH6ln#RBKmȑ IUD);KGݸ4n ]8fD&vQMV @T]0H]YudeAa.ߋy+ALk.[0ss~$!# >"s-m'kkNwAԠ|Bwm2ZX6aB^ +Ϗ6'"赺O8@4Z0\Xِªe}z:2\.}sA~~>~N'Ӧ_T|ifћw4ȌYk%3_jFa>N8J9_#AhR!] ="st]" I#$ LY L3$tN&)uK$MSS566hiiIABpP(D("%?mBCNSS55P]# Q[[Mmm&LMM&뭡&:FjkkIijj!~%@9yG7[RA4ZZZ{yV0sݔشg Eb2bw_3gm٠ܾok?~PKLԡ[$cOJ) ^6HRGu@W3̙PW{5g€7d)j<|2^P3fjUReBΪv̎_ڪ ӟ $|v8j'A8, $a0t4MJOBf~*&PhW4]r6*/L8/ tzYmu'gQԌf%gɧ]7\L#/ ֓]18Aéog3uP<\9t^yY:a;y%˶Q~=y%3r9Jp3__̨pɗod!쬪m'֭_~ʚrA <0 {on`ո >PC=:p<~ wfY <#0 4MG4¡'4RO,|+|hMO?!}w?k {ppo3~x+U˗|-IW7=m(-ڽeGbC5= ㇗}'~lKbta?Rϩ $,un\K<eԄڳs 3߶RU%ݺBDAb`J%2>Edr 2jls8M,zťlٴ`s3c;CL0zH].6YIrJJ3氣PΌ_K{f,gƵd1t6[M1(]ϗ)'BNvk׭Kضm;l (2 d|tcYO0aÇ (/Hu|p$BP,ðy 40!ta CA RK:Or쉾$1囩(C&M-T:uA=quF8Ќ!cw,rdTqw)`RĉK) O.I~ JЊX-`Ti=`NmI-Djf4B y6Q; Ԅ#TC5X#*¡ 7ilYو,x )ˏ% %#{PSFbEHq VU-`uA"18V,ѳDqш!F"ocW#FA6fB]X MHqxwsAq%%H-`g50зo2~'+q]! iF3Opgf1Gq9$Kf̘ŋbvh,#Lss3`X,F4MUh4%Ip'/nnwpX& iN<$EF=p N~O Jp:%OWLn ӰuXCAny..ϋeYF 6[HR-@d8rb!"2I3y&I#:'Ӷb, B!ZZZhnnNI0B$bF4dYf֬Yl۶-^t㼩Wrc7?seGt~fVb5|*shp<=8a[)+߶ސ}*Sb=$8t0"MgLّ.]`80֤Y&@>tKk%wgIa,ts T 0 -W`G"I68|9Lϸv+EPp>e;c6go~ˎ@=-b+p u!SU+1\{ Z9mq'wS.(.=<.. հ|i-C*>h>{"wUmAџ5See3O;Vu9d=m*㼻`u`7*o1{[/>-)|/x>[zXQD y0e_`>H|Q_3r}2xeܓ/ wq9q-릒^Ȕ¬`LG2w>csxN>V&|k/Y_CzF)uƎiS/<Ǧ_g`,N5g^ᅰѹKKm.Kk+a<['rť7R]@UdIGT 8pgx2Ϙ;gr]9kqءbEYÊ_jѥ+pO;//[pο7X& &nWM~wibW}őWǜ'μ}(FJRDw<Ȥ3> Mr..+vyS*Or-̚An'*k×Oe,~=\z55\}\'}U >8@Żevo&d3?`T:;~کc5D5Lpi_/+;7Xz6f^gȌN>&'owiמ;t/9+bjRN`b )VA;JL'k9`$v’HtgYd0l';{/UT Uw{KW ^svğpFO)),BaQ[2y [$ z@<+$<,U-V!CRdm'I1GKqo/''*g[ŨQ#۽8EQ5cnPE0O#ndhp̃Uux9 Sҭ7%>*WJ"J7cQS@a^}- {fI eZc ^Žh%V8\*rHq)nѽ/[A }*%[A+wKI~oZ! *dF$M)b8 K6=i"Al/ 4 a{יJY`˜ f ⫈wB0Q8dI0ZIQ-sH>/8]h]rTAbۃw9 ÁdEA~S)C"7#OƱx<;T =Ĉ##02H gC*D1$Kxr P +ۏ0#GK3ѧ;ga/#JuMMߟ.A /$0\nx29Urf&ҜrKq\tIiȲLZ)ښtL"l pxdm`rs#QIQ=wEQR奛a)$ܓ$R^|=O`&c:Q| Ȓ ň8\.dS'y18x IqJp E,AR|dy~4FHlPnt!i0`&VM ӯ@rss ZtvYS Q:wdxRF)};N$S$iP(n w?ˈ#ի;-Bn=vJn):jc7%I. -CRSG3NL4i睳;,nݓ L%ƛ@}ai\`d((6Yn{P1;Rw"ܲƏA^(*JlT} Ӗ_{# ;#FQtdu RGL7; ]s(kgܹ&gΜH2y9^xKsֺ gRe't?aAL8 ˌ>8>?#uIIt'ؙMRs N<[J{\gSrg?I]2v$wApv=}ֵ;vO=wPe9o+$Lwtݩ4Sy)<~uN+_;e~D{+WǙp5'OZqJ^sBFxY?1w P.8hwlk6=S#TEσi{5v϶s+qgo6<9sΥ]8ORs>ݑCYsݸnTco~'\o)-ww~{q so6'{9f|/Xc7MG逗?X#7Gd7Wyu }G%"Aϐ`R ;eӺ XmìLeh7zM8[u[lD` gznk3Yٴv ] EVHL,0mCuP6mG:Jy:,:h y_tKz%pҞ{ ^5{m )d!E {$ !2Wed a-q2Su0O N l{ 3 l\duHMr96`݆M 9 B!d rn}BvC\GLhݺ":^Xm8EUGwT $r4n(۪*k)C~.Auy,bcba"cAH}\O*.-&FDc$Aa٥irχםhIr_"Q3RQiXq_OA i p$ C`Ӆ""׾BXT/pg1=̟wNnnnp8!cU\ݱiRyz9m'u..ؖڊQ}CnnӃ@ 4hnVz?;N3[-f7HЋBQ\@rTTPQkA XנP" R7m7ϴcy<3g9s9~(dth4K_VR>umB|  k8.f&CY&|K M:@-/%Ln?#գ'bUeT=^|qOs響NDocD/0ib$d+!sx͔#ʯ_\X8}gu,Rpԧ>EKK o.]ʮ]m{i(puK=cC ( d}dx_m$;r} euPT]sxY"N NWgGQN:=Te\P) UAE^ɤ7\fE7Rl3 T8@Y 4Rќ~թv,xH0 .N7K_a;'8,Y39 fLT)\G$ܾr_&|h?z+z= Û 1'N>rǝ8EMg-Ot0G!D&70m 8k=.$lMq{.S&Y|?s}/py.yZw w?k>t\{ΝASϯ{yi"N)ԧ\asḒHUZI;U|.!0d8ҋҮAE@gtu@;x';TUQ] TRd 쨊֗:<4lSe,ޓ2q*fS"Rrqd,Y<.t4|< 49}@AIY^Ԓ3(,oi{Z~AbhTx&W}YƵ҈(ذ-[;p4ɮN!.Rw^ '#{zuQ4#w +&%d@-LSg؂mϠ!4Ŧm qRW M 2ʕ~}eafT^ґd iG=1uabvbZN[gY7PUf_>]A}e_\s%;v+=8ɔI޽d fK&0*;v @Tʥ..V)` 60'"}eQ:6*֠:_WYvwl-\3<4;O=P)nqBQQ3Yt@=tEu=&%3:麨 n|{8JjsXsOKO7oFutC%8yCG6RbIlC/# ~~@ xRbA b*bYYb1ACʬ*2ֹxr''SAJU `&6<C1s~MPQ2zt6 %b MdÆ4+X@42lۦ3r4m dҋJ9&E~pf: ݵTV'bYi2бD\ J6"$Nx/HD`Za~a`t2X$c!2M,oAdR̛ IDATt: o@8,ތ#r}𱏩_qZMp>䦢j ,0 yFiؗQ -PVi? 렡-f=kq9 m4M#L&rw3l?8I`;XfCgg5R'LagٸEWRxoqm; %:. nZ>Ŝw᥼n=V:_}?ЪoGŬ\)_K:ֿ~$*'siK<|Sf]ʞ72 0e"{L[ctwRYƍDzJU~뺎a$ɼ Oٶ=H=WdW,ZUBn E!JhѢ+V}'k!/>S/&^7!HEM-bv@d 4M W_AZh:7ӫqϼvy`[7G0(aCKΥ3US(23?~|yn ߜ/JjÏv~Z?o(Ȃ߅*@@pX'KY^&w =PbMqz|-~9_UU6Mc!@*e'4jpjgN> >dɪhZ=3_cƞA8i2(❈l־cf4G*7𓓷cFVre yr'êKA}MkvsVMoeƽ<uU2/^!4{D~k6ua[2'_v훝LPȑEҝ!8Q&ԃ,U^J+IS' M}2l>3ÖRTP^nJо!Ύbxa0]]JFTu\ qˡ@iG=x䚐) YzNN'T˩r̬/%҉ԥIaT C~ O QݱaTiZD 5EhcAiDNT4T"LIt[ pqC-NǬ:cFBIe3 UiL ,7LfOd[\F$QZ 砢K1P3I♟Eu#e} Vu[YmdҌ^E~9HNz{B11XA6Le]t ) EcƍqSN{k:hcƌɍeY;ZC=w XE6yAac3m. NDf{1M^*+{R[RzȋM|Ş?GöO[!抿Jp(J"/w*\ٴEٹ Di{ǶE<ț" ZHss+ֽIɟէpm#]Z臎"tl~kn|>v-e4y${aݺuzz:u'w'?C<.0MF$ՆaJ*N}rWu9!J۶KD~[ʔR6 >dY8 ꧞͟Y~7cй~)~˜2ʦ?1t+aD#Bƕqе7l5kF ~%MbYލSYYY҉KrpiYTDs(W֕m(λxee|t*+uwujh9F("z} V5 MϺ@LM'|2xp砸atE˧uP4WZ(߮r C*J~ƃ^hrpMrKA?DzsnEj:nibquMXheyF TE'g_GqGOk6)+ `ԃZAh[9c~+C{wIzSH e9TD FDU~D(u!4uoԑ3lYzy+kd>j*|ITϯˎ#ya>t~-m_ŻC $)3_:V-r_BGE}pE?oI)* ۊXr" zo@99u= >qJ/i=P32a8'@:˂zSnEPR.*JPŵl$ƀVn7 -B2IMr\w!0<ٴŨl [ U7dMu$SոDvлcb͝ztgڎPp%NLWyD!Kж4l7l߆ ~=S+'؝Md5h=)1cBэZ$p9{m["TaV---}`ՄÃD{o'fKk{X[7ѵ-^u<'Ϝb>ߠ`$ P]]5rhl Ʉؽ{ǛTUV%Wp [c޼grwW&PK~ʃ>L:.`fӴw,Ī=sk.äS0>bzD$a\Wz/ c;c,/.]Ü>El^\HfEqil{Ϛ¦tMA 9!ݛ6`UaJs5ͬ9 l[4h&@}ޙGi,M/` K,as]^_iڿrOM~O]_`zz2uҫ>hjD} Szok_!\,ˢ.`0O1Qu]* ۶?KoDwDx>ui݉1cx kGsZ{S5rYdi/R zP#ip u_f tRf\{6&M^)_N9k 6Qu|pME>ج^r?rs 5/Ggv?2G*0Hqp+uR,>݁UU򾋥<@('p@Smz޵5eY-mj[^x/cUQQ_8x Qi9DU#y/. $TJI0qܔ7ei}UqɃ"E0L.]rټ߻vpAE9&gJخ}ǷXRch\n?9:Jfp D[$CS߮+G" @3GZ$xToOeȜCm\7ojZ Ȧ K%AfJZM `$#O |\A?Бvj2;@M%s+nB5}49u4<7?1C wgJք`zC Lcg7} G@(ڐLAtF#4fO~]h0 d":t]%JOl%_{ϥTHA+q{n*1 F6Cӛue'm'#4<eo? .tȴV89GM-֖19?ߗ;9̺7skmmrA0 ^{5,X= 7P_AW,Zx KNuN p,eXyL {`ӦBR%K\SqBUᮻtni50z(jᕃ~CIo< 2. L>;\*P} WP Eo]9P&h϶NF$oC8WTuXQNF :'ȸ88 7{*6f\((ŋ,VqxmS'g^kN™ Z3uދe{Cˇ<6[?gD֬&9`"AB=+ʨD '_JZY(So.y{_U,P[H&5/o $Rzfma(=<%, ܭ2W6g..<|7aã<9=P(H8"܀o6셅xgGgd^lc'lڳm],Ȕ#Iy~i]79s>@uzkʂ9cM#qؼ~"Wn$S ( bySM_X߻*9.?PO{\uUL4)~k fx2p7>w}`̙TVVEOᙪz'ݿkr7DQ&U9 {Kf,'b qcoWܷ<$g@y?HYL5D!^Sp3|sUY%L )qWױky-i;sHwӣ8xgAX*0]4_=<r1̙wG}ʈJ}8ҵ9}^ ϼ}t"8y jzѶD R !Hr ʴdZagxj,M5IԘ%ToP7S \MA@ɺ8! [~t&u;ׇqm @.4-D{/݃HQ038"n2 !8#)]ڄ a A7Lh#k}}(a@:"eVⴸSIVGdM?~FlhL&H߅8!eW-K˰zNߠh#KE3p]hhCQ*K,2C>Â]r+(<1NC~RǑ4,ɌCq>%/=P)dhQ OWXx9&Q 8 ܹ P>0(zP0YMhnB &=hZFpaՠ]os8v3) &ͼVB 9u,eo`sGqg a& O=|˱|r/^L:;-s0WM ʷO"|ckx;H,y`gޓ'쓈9ν '/Zc.?,l9P܇Bv⛐myqEX6.oX7,d,'F_MQ 2)>LVsiK)4-Sk"da\^: IDAT/9p\9.7;؅҃of]]WCY쇩|@  l8+{9Q)e>Z^tSB39ͦ.@dLSApSsr EStgh y\ !V#e"/O͠7ZrKS[q"xG 㢠e5|5iPC@PtmԬf=s]ہՇ̘JҤHB ܐw(M26rDSPg9']e0|e;NzDm8j I@M5@U8 @@ۭ h'B{;qI\?G@(!irsuԝ^̧]Ͽz7X[IS?6th/0|}n`8'1x{Wٙ]ù؏,N,#MQSUUUB!4Mgzζ:'KaYW2wgػD\֭47of {ӦmdݺVaT*fB)-'Ob;ilX22"yHªX k*׮Ah b=jj =Hk޾ ֝YO̞5{V׿!'4Eg Z<nbB0MdcutbA:: |vl!P]tZORr=,~q.rƎ{=q?ۙ;'^RzJ>{zSUpht^.#b̝ +W%u=8,_8Tw)a2`KU 73k1_R,-<_sxQUs~̙pI7?o|cB ^ o~7 .*SJ%⡇Ga &ʫ[NP^R"|;Ʉh/=5!э7upq^}̚ VI} q'0pؼe';CL{{7fӛmL|paolā)wD((TU !^d}ϟ-9g(¾/oCjPIPPNCgM᎟=1& Ux_L# PUa"lBO/,ߪW=Kx"SJ9.:Uc3(~l4/0T4t"#4hTi0 Te, &~w13D_Hh^`Q!6h׶T==PBvpiHwtJ<07,WޓA/A~Dο5m4-DwTL mGڈ ӛQt ,MVݩi\j!4 S^;fLPl*00Q>2M2+pd& G"L#\O 7Xmii-K]_Nuw6֋`8g> '_"/rK♿%Yy8R)E! JfضM8Fu2̠234gujz{E+ihȑ۶)@W_KKdر/{D,+m8c曠sA6R-Uͩ@ B0ȝqkUxb]; pܧٶm4EӣD#47IUu$R9nֻs$UU5P8L6! Q'Xp L<{\4Ϻ?hv>ֲ3<_px)/V[Ap㐉8]Yz5wf„Vۖhzr}ru]4M̜`vZ*-N_.<ʎ?:%V]|P[lC.+~G>b·%8tKL4m`7 M T߷[@~*b E-,X`Y]|{y3޳LT9*n/+wrm;ϦQx?аH$@U#!!QZ`|Ys&jښ\]q|@V4ZT {( ]"q ޲dNN,pVj4@I !@ڸcq*zDQ5z;I5g,'OC^y:y6 [-c'B V9"Na`6QUT}3!LSQ3M@_w' (f[ m`@vc>dip'"aTUFkF 4}&U%tO/ s2$ӅAT/}l]zã3u,N]#9Cx_7ceRij0F~DL$PC*d/)7ʈ Z;2o'4McӦMȑ#m; @)̙6u~]aVWJ{YSϖnPY fë&P 0׷=qG m$۶~,JBSMMMY!qe1k,f͚wJXZ  /!fUj @"E4JOB׽ d]5bg'j" 5AY:~Yf"M&A ]E4ƵLOkٹM!D㈠NYVl ZPȕäI8qRyzKjw'Omc]a܎4d8Nn/!L,8}ʩT*E(0 RT (]WLs?sS[{!3&a,+3hn~ME]]3==3gΟyynl4ͼ_wpKWhrQIfQFrimBUDcc%%'81,+OImmXl@<Η|ULx/xee%$ɼJΆa RQL mmm̛7J2KI>{|rA瓷zHlN?^y / %l ӧ{i\FZr"IY_Y6PHdH!U:.{bilzK8'2VE-&EJ {;;BA`%9 UUٱcaz eyrF\STVzC7{|p睥dilV);;K>x[Bi//.;8.p%e,__@.,xp,gA9}Q6j`gЇ`x $^}_PW_ Nc7/J\Ӹ棹+? s6͓ݞ~<۶ǖ|OOϔcK00uB-ؗ@С0KS:{p4 M2SX1dճC xس#̱%ZA}e?FC>Ć݂s,{^ a.F1NW83XDyХIͨ` DBEonؙcXf̚5W^ZHwӕ˼y^jkØJ.1c֭y~bvtAaa55ZQ\.)))؈"惯MU[阑?fgvnr'Fz˲$ dEEtDUdL]GVU@~vvT c2J\>OckUJu+sV!UUuT)Ҿj# yD۶o_|Ilx/cOOfqgt:,5~gyM>}`T>46 ֭S5 m1v G0b 2'>`vXƎM5+ |0nKo_8QеDN{7L 7"<z fͲ%E6NE'7*p$@䝺IuCH|>8Hԩ֏{wmćF<bh"<N9 ؼY`馸vA 3gFM< ~tDQ, 3_ Z{.As{8jr/n(.YQ)ķ˷cUuW޴Mɦ Ӂݓ3AJ>QVEY$CmG)Yn&8#co0 C%konl]$˄0sz2:R. ]2 *1Hv/b%ؓP=tΪ" ЗBZ~'Zѓ.=tb: تͼl/[K^i_餧{INڍ;É믭gOi){z udCP#=3dl"y!t(f uߋ?'GFU(R\Ec_¹w)좸(Y5Bcii/riFfnx_6k$DH4Ԏ*E.<+k=.f%X.['IaBێ7FQ<8{?8$IC&Kf*\I)ĭvXؐ05HiP6Z!2UT Xhs\0: Ue)AE@5 ٣!KVӔrK CB 5d l 4KbTԔdh b ҝ8 㭯GԮ~ksFy~/+|~O /;S>ۇHٍl#fb4IN#;%gG&E7q/G؅CE]iH7J; AV5ܘ= E*=_v360!rH:А'׃2[Se]bڐu\PP HvD#D6VaV I2iP6?ϙguh6`5t]m@^!Y|!޼y_>Z5~ pS`dffHP(Jp42f̙339I 0\ IDAT|SH PECٌxt.g8U1hQvQ2+~(Jd$!GD% OE7])8nNM{PUؼy=;wDHIիkHOQQq?|Ǯ];y4ә@Ev;vnSWWnҡC")lDl9揎cRTySvYYY u=JR" -Y̲hRR :v4=g} =5qǜ8tvŚ5kp8TVVЩS/l$p8m"I2ᰌn4 u^}nXF8,P$ jjRSKhpkkl8p'A8klvnYnBQ,_|v !RR4 ӱ{{ K2=BG:s8j l^ GMA]J;o$/=r-IM>(EliXY5W7q6-K65 ,u6V[BRm| f a"+gPE_&iGcQzUIBPkUA :,и˱? +, ,ҭ^|&M f -dž >jiBg@i{Y Ús?T2rdZcða0c\p~a0HxŸ}կ˭ sBYdRLt>NhmM0 I3w[D5״]E^eVЅ3΀-\g+dx]˜1PQ R(*jh1|~kKkÀ+/ovx7usO@4W=cVF9ԼK'YE*~LC'5'v4 tCp9! ˕܎<8S.JN2}#e.#(pv,`/qGyz|q1gv^j.ՙQ5[:]NGEơ})ӻO2!㉬nx!/r]ZnrŸ۶S^^MnN;s:h́`k-y"P֑ulmEI8a\<ɰV\SDD7Fv8omq ?VZMFE3GUklKתH8Ӷ;Fc&x9QҌ{%8(aMP$ 08CkwS,Tt@4q KΡ$ceMtBFnқFdfd(LBu6S–.0)Yd̋4"]#M6i:H2MM2$3AZd&@Aݽ Y}9A *,/N{-K XS?b3z㟩|t$#kE#y;%Hð0];eٙ6kiB鞌`w91jꑼT̺::(IA$ymfKrgbaj:R(Bz fT!)c@)# _Gn\IㆀD9e;euQH@2 $ZƉcGGH89xf̟wM!ܸqs뭷{_\.^Q(\1eJQxGK qi#:ͻpt=UU ش)Mf#N4MHGQ` BI\vv;.+5 >)BSSnHR{'.$=7M i fQ2QQh55uսϺu'BȨq"B*YCgд2ElJYɦzL ,r8( ٳg9nBXhܨYkzz:ӧOgl-ƍ w͵Υ1m6]GvvV!'7kʹ̹Ϸ|WWWe<P(@CL>IJijNC0hHkR컜߹m0 !d4-HGsd#NHRp$( Ѐ0)QW'a&-%09xl^r2wHM4UUn%؇VpJK8|p7>*ټhG~/k^-H&?> [Q[(z믷(%6OM/"Z$X5Xʶcӧ[T[4AK6vNrhO|<( /K VBء0{E}QbUW_[\KUOV׬1Eg[ɬi,\b7> .D曁`KXI,^ ow[67O}}ᬳ6A?dž+ߟHEr%.VnMmax8q";wF vY^oϷ2@8a~D3?Cd/z#%?q0e T tfǮ2vAQn!3g/orWGi Yv^:EdR3 "a*+80SrTY[pPuLD*߻R7e JJrm=݉HO%/PIC{' #@腹3=7T! *?F,zBj24aO-<0!D 9# CQ12CVcpKAk^hsX.nLURM:RD\@sTD?7QJeCo/K߈}kq}Ŏ|k{Mw&+++׿ť^ X~_yn3zb~I|ALロ%L<9~;0a-l^z]uAl/sXΦOΉ'HFq֬Y 0b#'|u6͛zjvͱ ֭[Yx)guU|ͷuN+nJ&LHHO<9[nI8ǖ.XGaĉqε9'8Sеw/: C2% 1nq,[^C[ՕA]]KŬd9QV_vadn``^{PU 6{4?!cR0 |y|/yg^pl:Wa2#be@1'ӧ[>[{O6`v\ {gt'ni 퍸?8{vxzH&?8|sN*o>8TU+`DeJzEov2>+ 0~?i13N_dEnbok溚7h}Fqq=##Ԙ1_+1jy=k /͓֏Ȟ]ol$nF{-̜ !%lFgǴ Y$ROeM˲[U{*{V+w:HVRxDI4s3S ĺzc$ֵi}}=_~9׼kqS ZJHȒII.rIrT`eMva8wE[\|EyJf| :76K'f5`$g&z =t]&eOru2ys<.p ,R A'xkۗ\TtroL}xヤjaj'PHgM'z<ӲLq_??4쪦>(1rh ~A/Q^VJVKl~}r'k} `5'vZdYLh1h6h&f0Qω?/'Em2H΁vuD.$Uqmjb^aJ`ZbvL c} UIZ$5O:x^"&.HDG@H2;*FƝhnmOlHSf qˮ) @{e8yuiCp$0 `09 UF%)JD9'Z"r$Iʴߎ7 *(uD4ڪ"L&0!Q EDe'! B4x`Bk*I: !veo仟`&ar}{po^D& >4_vEBa0F|ni⨬Ŧ)|K>=>RV*BHaC C IcW';@ !w錑D0ɎRVb5bG8v5!5Av @m&riw>{I(L,@h虂bb4ij9_yN0OG-CKEuԆFnl(U7SB.>|Ə܏B~<-Zϋ~<;8[;=6mZBgge{,!%\K\P(P&&G}4!ݒliهS&|Ʉt0TMcSވϕW^̺gXfb1B!jcÇ'|߳gOzlpСC̬1pW$?S ~3~:q2<)wA2bXq  @!CZCӡRRRBΝw=aPPP#e[&0n'2o0g+ga{: =2;ok 7Lb?p#y1ԙkJ#ÌD5ʰpJ,1 e֤E›o?N#0 Jɐv Eipֱ0eL钛O+uxs.";ʔ9iH =yXWP:!_>Wq-4/<`T Ĵi*,բ ^|QksRl@L\;s%Yf\T mTeƍ6~㴫wBu_ IqѨ7kfpǟu fQ%w|&囹?wHV#&%"ZN՗5?sI1玫/ V"?_NGG#)RgKZ^|mz1PӎN=7']͈ɯPB )~y!szru _Ξu>yߥJ8q:qlf+ >Ul.زrzMr<՟;ѩ3 ŝ eMym׬h">ߖ~ vK8!.>9huGMjjTU5f&s xX}C%f-XXoK>B%\[x.FNYķ(5#O # AkJ"}3yOI"u_qBѼq FĔPDm "dJ9O[s}Wvn|)v˜-YĖ)AjH"? CS`/m nre$@ BQ&#RXG z[M8:NƚE:dI Hl2BȘuIX YBf|snI*Hh'zV&.AadGgYmDF4?LA0~n]ln:\zQ{d&+^F0LlpS#!,_{GG+ [8-KSUlތ`?,a@} Z@BuΊuqZf,A`$ !@Iq41M'Zf&7K5T?ȸ3Op))3#G|vv, Ycʲe⽰0OʷDFFF,o&77ч{AtNLlEVCRO(" 8I"#2%"q +4 5. .ias!=LxL0MZ31+ ΄.IY7~Eu\wmst*ύ;ܳa:=N 훈#>ߏǙNm:?oK|w*͛)--%5"koOе]FE@t7>>J",IR`_mG[B kG3X|.4o#t;Q/ IBzx|p$8! >yn8zBw@1p(q?Xᛷ1!ՙ! ;fA8.xfE ;W N>ksj;vaWmřH鰽k% ΃=Pp1H9}QriP᢮FgWm t:)`50x Ǝyu](TUgpݖG(N `#5@0#dgX!׌gN4:7hVkW|_/Hjߍ=;WPכEo[yd67| mv ~|i˭1SWw~fy?߿:/<:}:s5rؑ_1eX)SőSW'.8k3|[zubTs OL?33_:,%3&s^G2b n8\p2e"3-~pfs( CT C3bL3Y o#͜ OqQ[ysG?Q[67EH8e<7t䆟o`S>I TM>%OiNWn6|t- rq\v؀N=;pǵ[̔9xuc}|j (gB8q(OOʿ^ʼ_c9XYܹsca_~Z.y>:(Jx/1(";c 3+)Q5]3¨,,Z'"p+ Dʒ9k'͔XW'G J降ms9)nlcKeII- Mj,q)Krdyw\mL5iy=u?wo SIQӁ IDATI8)* Јi$䰁a1l jܤk$B bs6hޫd T |J-I $\ dL!N$g4"R{~Etr ́[o&ˇՋ?_k0&ͿσswTԀ]EH MP=ɁLɄ& U4Qզ[6;$!WբԢh%,Nʞ:$zp,ՂF@ CYD.# LPtzhDaџwpM?}{> NE@E <3PGjVʼnm",aI]&2BI "G2A2,3`4CguDtri?>0~USo_8sڵcԨQ.kt9\_,ˌ(~/ƴ4ӧ{&v͡;fY* BUNQ%<|iAm`~͞={HIISNAV' ñyס뿝ub cq⣧/"e][E]i+Kәy74J|~`ɑS!Ta`O5EVJ12ؒGֲ/mT }VAS=u7L^ .}`(-&^AÚp\7 DR`9@\ vWBq$Ҽlrk2hBN[f'C 4sú ΃aiElqNn^Z J#9~^A$} F?஻*iiVܓOj+ȇ7`~~T`z7Hs;J\DĈQJYYW]u4z z n¶m8s[B$j+g~HCMwز'@=) a;hOC:TAH(@vJa""^,Irr29ѹFvv IB״#.>oAtW %d{sxq*bHQ 6킞E09o Anf50},rҫPaÐ>J% j0g__| ,oۙ?9 b}0ujQ\~Iڊ{V@_޼q3G7LdYEo-dfNZS%cN† VhdXTB`:]x7ڃ~\#yrx^hc8gV?@HR=ZkJhpA\2j}t oPga<9=&=x'%?}OwrTw+s˕琢x Hw˂ P=ś_Vs_W3jHn{h'79nqBx&pJљ r:xmT;ݽ]?qF^v6拊e<6% ozT3^`b,8p+uF8Å耍 /m72Gquޮ\}0%w2̻^|[u_fؖY lw,v.ϧWVmx(JH_BYbfBNew,/&ݧK?;\ߊ6\&\wr8g;%!cpոZ/i|yAxd%(zBА`>S٠wh$T ,f<|NڀNMS(84&" :d}ғ\T Ү1SB7#îL4eS2uMU N^ns4*Ő @X봣AVMI)*2!n b6Y\ Ks44B1US<6)^\Y]UMԇudIA7 tSTe쪌 ||vº>eP&{zRZGߊQAZ_Os}:s&;ɅRD5]nRw4^FuMv5:qBNҩ3|(!4$A;Mw8w]I|CLDp۸?'w8J,7%N᛺a$op >7 ʀc?~~E]kx\<>?0۲WI,sxr?} ],[[&UӘpl#l8pƩf?d ;7%?=<9KZ!ZUWWg_?ਉh)o,bw:*]Slv7׵|*œu{/':m?~LǑgөs!a$''s~# A9x˖- :4E}oQ[[߉dp 2~#RҾ;5PSgZ{YENX?#s_bŊOCQ/3i3XcO7u\Z m1\+P,Eˎl Ff z5` WAE5a LБS3mp,X0t̾%ne7y96- YVgd~2|L9s3 Q .GLRܼw_ͨFx@UY}u;Yy] |H=Q3BjgTwd1휕LFJx4&29󷁸ڻNRu=JRMɽGm @ Yvz|JE]|t׎c})H&B3 9Ikvn$Qd!!'%!<.ĞJP%?rB #lh9Ryȯ%0-jI-;J؉D`Psy%;=f61QlzsU(L`ENwovuV>ۿe;pz{g'GU9>LB v삀""W(** WQw nC@ H@BHu2s~Tw$I&0|>ItzϩSz~}T^CO\})'"q*W^.:V~=oxsIah 9-`C{mKSw2pn:.təG_OF`u p>82Nz ڗ٭Mz#Á^ 5u c:ïDA&0 l޾+mF5$Iu%@;C>'x\.G[[.^%Vdy@'NXs{b]76h]׋ֱ^?p[@z.[ޕ<](M /H8ؚQ,+3τf gIgG7FǷ"eۘYҤXB蹍rH8}%bg7$٫n5}pEL]ؕ>u*~4BKYzZH?S׈+~lE#Qp<|OGQR">xLo,B)R_ Ahݗ +XYNnԷȒD?GZYZ`v~ľB +P՞3GTղ'8KWSӻ ZW @(W̘61y+i?#VN/Flj'FĚtg@Ut< AtЦz6wY&\  kÔ"bSO/܋%!m B&uuO BAc8YzULat2ca0LF d'gT|/a/cA b\h]M(N0F&dYn<3A8y˻ A2Z݁Іwr ٝDvz(EntH{/6BGhQEp{ Ƅ& D<* C. 2qiKV•>FßVaf[navx6W n-mx?M1Md`Q5lZgyT'jPhO#B(Ex{.cŊ<{j+w tp?%mJ_BP/Gl;BY5ֶ7%ƲB6e7윈l>s\wqԏfx'./|{P\sO8}E/V^[49{b^ΦvJA7l?O:+'L&ݵgRI6o!6*˟Ø9/7.^XN}3LZz'ͬiY^]{X Jtκ \[9l(gXs+d'M"ٱg;P>~/8DDdx}o;ӛHӛ~NeJ(~SdbϩX"ԿyÞ !{KM  %R!ѡ  `֎S*̀gW/:ŨP<)Ś=87' "Q+R)NwornN93;w.HQ)LSriYAni0cI{T//~<0`ɑ # tzHj2p\ !;|BIO!BwOZ3K(Pw-ܓ`T@i1jL0EYYRphs 7qUS}7آpª*Zп@"K(ta]t}S!d|hXNx _ X; cwܕ^8B9 ;'kKVT n"\NG㎩FnnGӄpI#3su 0/b&g8$W30::pDgsX-ݐ-L&fmW?' V`9HEL *$Ybq?xD %!cN5"NYUL ѩԬyg~lO} !l_ɗΚ·7=7W/Ez3dDK+cG[y?rW.G@ӌcUctn~,N<|ϣ\/p;ޏ.Am;| .zŴ< ># /jٸi#9`:d*y~ǜzn7/] ؿqƝ56$p,~}ù?Mg6F':#MsПlM>ߧVL=S;Ygr/Dkf%Ip>[Z˲vZ?(ܙȶmz{{w2wW IDAT wKCa[^@j^Sym/r?۱b R@e8pX€Uj`(Jee&<>LR_߀z {U4bqh.watIs/b[{u>>F0B~?o76To1w@Ο\Q~5Z_[/e-d5UhXHVBu贔}e'>(|m@nnޣ*us9W(YD rZ"W.)tA gPlWxp~#xB!5@ ḜɚB ;s7JjX Wŗ^$E E7pM$*@dLˈ\hkG2@঒Xѱfု,8 ?DOT UBw1c8^/ H iM\ aQ5nzS<|?XYY0Qѵ 4:X^]N`}]6oA4ԣۻZbG|(XoDRMpe;aS 9i=̓N1mpF8l\@"5LmwNY 2Y9ci\d"[0ztX) q/F+IGIW16!lex;=Ri]Goٸ!s>Z"H7iX&Wqclz25,wPt;{ky5L9 19Ϝ>&3:^_i|G\u-gϝH>`6u] $<_Ksۯ垧\sof_F˿k?7!3 hnnfݺu۶y7oޠNRJzzzdɃPitR̙3(bxѣ%L_auVP0 W=,nZ(MeR)Zi w5c,!-wJ%q1\WYݚ[N {IݛBcԠ)0$Ҳ|Y_ϡ˰6vcͭ{f1)κY<ŠsK[[VXe!J7WtXyRxa(d$NqJJ<[bo:.j޸W~r.F ml(!T*$8j:T}=-߬M+PlzA&NY>kug0q|Bi˴wX=tb]]V8:|J`{6Y}(8fd'q}+|p^K|__qs9w;a$WÑG^aj3,]#ƚqӾ\r'~W}#oZK9!SKMM }b00McJIl6KUUՠJ6˲hiiaԩ䶭W/V]]Z+ jl&/ lذ)S :vO6hhhtCSqhhh=*`)S쐸Y)߶HnT0 3!ȟo|#L3a廬F0A)E00U1ٺ:ϟ/ ŶBM>Yz8۶i)c>mvsȬ<*7qd_FJ\/(D9TG7^:{7[q ;O<UMjlhQ9=m%A)D( DвW:Ҷq=cll-sg}y%k,rю ~~r<{H?hP&7;rLyeՠzPhA"zͼK"Q FrLM54&FG\w0XgVuxV-B( Ϥ lÓ^Y^*ky BKeȂpJSY{~Oetx* `8)@|N^_*!^{n xZTYb6^1=* n6n*/2~ K#¢1nn-^zsoMyTB yԈۖq]QF|dm{*)!|qv;аqb1;Ma,0rӴ}s*=ǒR8NiPb uRJp]\4ǾL]S>si8`;8i,#H 55vWP'Cmzl?JkXKn~}8@fyy O*!xxEK!HEKbRL  Z`tnAb^s oc pKE*%hC& 4i'Ѳ/XO黦j(խ('@H<ȔyxW >3ޮܕ O?mazu̻9ʡs.49i P#é+JfOzU)hA&Uwt:pyL3C Y(E+svO[urXɏU ~qfþ8o$t;i YcjuJ<Ẉ`'lhC.2dJ@.׷rS' Z:'^.๐A0;}t co`劽)k.KtQTBA )B*#ȶȤ(;$i'@hl?IÕ/4&eȷl@bNnD3Hb *I84x Kjm ʇpts42qTy0`x\Ya5p5yY<_ߜ{I*s=|/4iqw<~zGT).J39xZ%KW8ø|WqǏoKym˭9 p]wx0d()F2b; +X|?|Hi(9J,tk0* Pְ7r_<7O:" ie('|;!՚*-ZD:.*++B)ł;!W^ õjw=Xo7/|X,+QT U)m[s:jsOWSi4+XbN"<!q5'3jqW->pW$Pu-ȊjiB T$El@4\p]@ юBr9L@e2љ &ZD !"1T&+<fcH"83^ۄr kY5Akm_Nׁ㠺z>$@P_m"!A 2TMɠQܖ6!=Iltu RRէ4#e+xWyqжgQSbƑ ~JrINN7(m*S({v vWz3p Ix:A55 _؉c8su=W~tED;V705.޵nm8+Mޑ/q\>ueɁ7( u\>{=< \TCG  Ba0%d3ٝp!S` ؖA6,4 m\wFA9dsw!n2;|F0<0 FƌcFpcwHj'xk(VwQP Qp9(<x,X2)(,ۭ>hD! ֊P/, tXHk+J#Ufb@ihJ75|8cA'A(+GretŎMG dW\SwC9'aR0&?^z=f g{07׋3M\G!, 5Ք,6lF"K[_+Qyh@K?5 8lG 0p+CR9sYEw45=x8Ho<Y ں eM@4FT!ad0@a]gţE&ixj 3>J -yo^g9`\ڶKz\9”;P]NdgыtW^6нIDM1$nۖBy3-1t#:hR)1~Iǀ k7Gbv]Ǎ-(l]K$σ Y{&B{"擣٬Oȴ ׶"qǿ?$ό@,T*X^S˲ex4 ZÎ/c>]km0jJN" 00,ZV%;/?/02" {,-+&kP!Xm7²+f#0B! HP(ۜwG]ᚺ+FRtOVRf:s8`tз((E[ѽ+vkZd.u`+~WV_}Ԓ"ORd}wւia\pqnÊ"')BWUa;>pM EضI2 &ibHy81ոBƢpeQT:+_J#I4f*<wh; w c!7{+Vaba"~-4ED# liPٌ\KJı`SyFE)J?5۪HZXD1]^J9TQJxNQ20J`P[ !sU;On0hW؟htmu ":)q|.N 0 OI3R7M4=ЅHe<ǐ=k8  ! :BC@љSsm4Qe?v[ ڌ Rըi@.d$6"@)Ј2LoS+}GS;ŝl8+Lg&P.zfK9H ]aYPA0)D$`j0hh{7(K# ȺZH$щm,ǑM}&!=Τ T,Z P9WF">Ѩ Ͳ(6^;9r tU9t1ۓ8T<#8g O(*B]W v@&ld Gc^S93>;aɒ%{»f?_ |^fÿy_MPYI\͟qW /S9q \2;~s?J^IKN=7Ͽġ]J˿f}uffULfg=Eoę5W7_Œ4Ԏ21jb$|Ef+?F>+YpA\sE/9a$n Km!;3 drf][슣]JA67'8GQM#bPC*ʂ,t&WCgr/@GxccﭦgK'ЩO6, Hfɏ+ME]a71;߹([dFBev^p8iLt;u>?9\p9q'i ,2mϲݖ6;ÿ+6z&a˖-lٲcoo}wCu @Yue{Gh]W{wVV1q<.].cl}T<f?`Tg~Ms1bxhnpdԘq|heq@ VKmܿ ;x N8r !g4Js?ᩱ8^ 伻%! B}G ;qj oֳm[˒M\Y+怏O|(”I9?ſ/_29oŲl,3p/ ^X˲X /gp׿E߹g]y_¶> 0|6˼_đR(8(Ȥ3KЊgkzM6ުfΞ S5>p߬a%}C'qGsyޠ|~`(wxMM lڴ 6m<zxWiO}EE@m{)%g(TJ8Vmƀ#%dryvZEJzQpͤ(.}BmVHiHXU?6Up&T'0S[u}Er}2M6S )Zl`X(#FkEށ|N"M)u4[^} %@\)eq:x_Blpb3Xzh}o.mg8vVZ§J$ʻHCÈF?]3 WY&:]itm5ڱl,WkPw[5O9XF9QH/T$@l:.M|cj*Ѡm ToHa&Fx ' dc=Zx#G7T<;iTXb0-k+SJ+ "mr*݈ t442D$6t8Ӎ R1!R;:IYY> 3KmUzהޛ~W')vU7Q'X6,;p;4no圛nׇ?Y{O(9[t7b]zmo~G3AbL)?;ΨoDX8@=<@9ٕ8r<UӝyNW!s3fʧG볯u]o296,/.K~?,7¦$︜Y?z͛}rr#)[/qeWrK8#=_ܴ3ضql᠁ ЊTu/Oƥ?h IĆ.V]?'֐ZE,d򨌋$ e1TEg;0 `$. qH㝈U=V4#A"u4\r@ F܄r7 #PU$O%0v ( ӊ%NTV`$7S%87=^_dzJBVPi1X1(dQh̼ad5T0@E M&f#@Cޱ1T>"AwoLmGct4̘E)Z T<$d@Vgt$ f EeNe9wnڵ<̜9EqG2s̝o8K+nxH>/r-7θ7!SlHYm6w0鴃x/w²Y=S*y{O>_Y3Lcq]9z>k_=$ʝsebL#䞬>l( F(,6B_2}c9\7ʃ|챷| F .J)|=sʰ}zORE@ S\u´{LUʈU Q(R ֧ >;]W@jHbKo3|k:_Uo<_I'jT󎓫*{o˖JI! z F **^A@@(EHQBIPRLOHlrysggvgvg[ If9sιyJ;6:w:R[6Wo!.쬎X6ak=N@UyY{عḦ! ߇e;()]E9KK0j] O]_RB >%=A]nkX޲ Cq]V25qp"\V!F$2ZrLP)F/1-Dh0zY1fM-6tĆ*(]@4LYJkC!) r\{(jFx[ `I-rg=J a$#1p naW1z)'6i ~0~?t4pbQ54|$b1^QוU|qt  `46"A|H1"(: i41}XQUGJZanI&XTa 5lfIC8|64ْFlҧ|`zbРA|'xرcዀJJ b= C=Yٛww+6/-͔9j3) ڰ-涝'k?GI E2z+Y鳦t|a_+`aL8ӧc|d{=':e{2n:n @$K6mŰE|07\kk2VG-)DAspCY(aa&Sξ.ᒆ)K̤J/i¶?fd7ysdf0)Ƥ#Ѵ(Fȶx*t]1?[<oSv-5kSZqG⍛1}ơc…wk 01 ϼy\T:6m¨1m+N"&5֬]C(g^8;?0rh|q4.|)S`$ ?oS:۲0Xz%i4ޜ!3%ahRyLfw\~ޚӦMu?cAYym+Fce;]Qg$-a_[WUfPWlD⾀-,m'( U3*PML2:pfe% ̘~팎v롤eY-ZEOl:."*?Kle!@6;eZ::_eB@<:=;9dzfω7~˩1 NNVFSôLFM !:7 5<#p, UȨIU6GΚi~86_c41 Dc?2ݯ'y ,dSGN4IB8JЧcClP^ϝꪫ])Va旞m6 s!ee]b]YSZf{vq:lGaٮU&<CM$]pT2i]'i)ˠ Y",Y[S:R+&E$-rCK94O$-<+= ô<Ƀiۼv'q==)./Y"wn?=;|pW$;I%˫aFP]dK3gd̙?8 { /L}nY/'tRg? }ٲeXرcSeA=w_̚5+Ez3CM75\ѿ~38#=#]vYMXntPN/&MW^Mu%x衇8&͠/!_~|+9u/\*grx ̙C:nFiE]駟f٩@(Cʕ+F.?Y^x>Ŕ>K'0l0jjj\x$s 0c,_ e/ ?)^яmmɿڟيsI򍧾/XF= xDwa''%vC5e̷m'u-qB B!Z&m1MR9u eS=q72\KIHOGdӑc-ts2a<ڀj6BvZ&< x!%֬КMߍW'޶T={OqP )/L9;p:6wVz3m "gb&_r,[uCG۶ ok;Oen6.$j(`F@B 8$t0kFyyyt >'K6ղ.f)Ibo皚])o=-5IEKʅֵMS2in$y̪uHFTgUŲuXqsʦw]ܴ9Aָ|?(h}GuBؾs* sZ ܓkϩvU}U Q^^%cXBL mk`R{{$_[E|/ X+=r%jHGاad‚4?Q|oֈUqu@)RnMmZTna9(ϒ/I \>+5PN2Yt9:0W1Lk}C򍻷$vƻec¦oY0U[銺9/Ş(t@ W$)Q^{.Ζ]FZuR]SRQQr+**RT]liW]kh0 `444Do]!1߲/ }|S6oѧMG6*+y>ƏﴎsߜU\c#sp/B}}}2D=݁lI: q|D\PB4(I"feB6n\E[9~}ߒ|:zꗵ{@VBq,6oZGeeNWoq;УG%ͳzYAcCDR{I6:)55;(**& 5MczdM&[ hƆeRjl޴2Գ9WGp8kR9RQq' h. 1|s.t5)2Xv3Af&$fVHm('%А T7geMU8I˹asA.ӇU🏷n?nS)ܔI doq+=gOԻޡ_yK >ҎcU=pg %%4mwЫ"-]Dd "wРA"73tn=a„n]Ǯ-,: ۼټۺhغ`e?Y.|C@e 2>|҇_O邙.| IDATOYO^[m[ў^\ʌDC{zsm1A)E0lC5Eu5 ЀO|i} F9͘fu],}Њ[b Y-dLJ)1j&<* gzZ8e=rqP3)xlۦO}re2fzmFi2+#wrֶm1b~HlkiMv(]g.g=J.!?\wTwj6;`b/g!Aɦuڛ7PVIg˶(QDc7KBxp!,^N`Ǻe$oy-l#SϺe*vF,IkU~ * |x ϻF1+ҧBFbGNEͶZE/8v͟/![ i$@y!(3KEdye]B$*ik{ͫ*MJbYp`}Iނ t%.٬.ʶ!$ ySue8b3ͥlevf/v陔+EB'xzY^%G3kx0sg'yrs*дVZ:V⵵CTJU\.9Χmyjmg+tr4MwCM x Ex穫M l1؜Ht'k@ /YL˰ιtz-BK.[ nƣ:q! ltFuCe!cc;Mc5]1M rc *I9R/ak<ʵV2[^R"@ 8 l4Ky=sPJRkgY!0$q\Y]4/6ڲ4V_2IqzGJI4% yInK"맽[ku;: ۗO>Cmw- 9ኧy񱋸O;.7z:s%lڲ^;uo~pc+jh^芎YG7~̚ڭzӃhs՗ԟ q_ثm!9ɧKyo>|G Xkk7PiKv4rۯ~akV,=Q͋7=ϕ\Ž˦?9;aDe5V7I&j#w\}>ϻI]O^Ònb`DQ,X4MضM}}=m#D4{N|>DBT$dmKTpDQǩM&'Q17/55a`;2B|3[nA͵x_j͕u|w#1xFu]Ƕq3H7XX,G9fJ)~s.o)фnlHȝ;u]׉s>RR\\ܥɎ3>]*& aAtlbLjhBauF`$Z*CAx| 2IiI%M t/ܰO@(A/A1}}vƜ;۶Vڙv\EIMǯk^WHNs +`l'ÿGq?^0a&Lrp4s5o^{ɵL'wv1\qd׿lPܯQInG! gpU#{.88!qħk`5@d`bM"\s` |eiᾰx1&K M&Fi:^Xswdelq~{UCusY yo ^_V[0C&?>?s(W|MgުM!8zN0C˃=8{X :.]B+q6>pV~1=z+X#I9\:j#7{pivymi>|{/w kGVqB$t~ذמyC~=s)K^|\ʒ-0GqDoie->/YUF\H8PeXE@8L8*X]eCޕ'ʶiY6Bʒ:b!TTa^eL`) )KzIjH$e [PiBJ7)׃8@{N[zJeZysvP<$H/O7@|gMmm=i !H^1d 6Pno<@qSzc u0pj67.Sʺ]Bitn5ʲzPJD(..2N):˝2į[z?7_=R bWqCʱ1h~iJK)OΔ9g1}y99D]$dGc6aq#Ѐ gjh]fAlPp-ń P3VER?Y3OY#@h>t q"#a?*8y8(D׺P@=~ O> nƬ.%N8XoYwN;2/.֩G}Al_݅:#& *qC]TpS:_7u*N'.CiLӓRU1_D2[f0P !E]H0ehGny̟$4}*T'AAǼE N쮬1/"x\KJ@[03_i1d0̡ o8;ll.8L)gǜ \mGACO>qHh}β[@h qƱH{g;$^`4%܅!ڋ޳3q"x'L81:җn@6 ah:IYSCKgCүу}S5wm[YJʮ"h6>YI_=!qK8u>o2異cC{.]CYo\rlD@ԽðN'ޤo W_+oj~qĶn@=c=Cl޴ gӇ|XO?uS&};Y5v"2.Sqǃx۹3=Yq,1hHY9;~U*7<*o=x nxG߹`>7i᠟En4555n=ƥo1v95s,}O>ccNM8?._S\TvZf;kQ mߟ7.oFE: ˻E鎬y#ɱig_ړA1\k4J6TAύ!b{Zo')A5CHД"f*YyܻwGPȚ;dzW@jKq%zcyB&@5̖ⲝ\/Βp?g)NI@h:H8|OH8I8#q jxӦML47|:w{V2t>VT`th{>q;OV_"f,q5P&|'6q`JG-»3u"+^\7`X$G3</o_xs;7f潥!<Wpx[)ӪS{*Ht:LtGMH("72u u< u;ØzJuPDGL8~S2d͠Y3ZKm!^C; ʁ|\rᥜ~]N{Ȩqcz7}|hIN'N5)xEy<nL@z%A=Hϒ~E*ZdU*K,H=+tcz(2kQ/A5Fzeˆ+.m[:㘴7qÓ\r}fフ~7G{-P%- | q̟%goCv pT/>Ͽ< |^^_W?:G˥;{6My\0Z #/7^KDWq$ #Ac= (bq眂`6CԙGNE*XԩmX36Xg?4vl 2y C> #CLD4J̀ϼ|XӿL:`?b(ri`#P#l_\CAJ* Fmܦ<(n8doHfwɝ{ں%SumQ)r,Z7}';룔VpZ"0zqٔ%I #(#=!M-v[{|cm=flo&n <8@dbMv%ϖVdJf$I$7rBB̰6-h232=]9lm<ռtj})g%q+Svpr^{裏>}sNzzn@$MF٣6|%{}#\ ?MqQ/YZm% t"p#! B:H$}gppYO#F򻻟!\ΥW|ϥHUˣGxo-}@͉βOQv1Ǚ6 Hw\$ 5McDcqEc460Ma'hX8eb](}c1PE{,vgA* b;;&Rd;î)\FK)bydϸK⸱<] PN2ADUU7mNЏ}.N{Cbݭ+d-Kɴ\xf}NkP mYӇm۶ |TTT++A 4-O碷my6wU7WFWe̙pP] @4=wEw [VH," h|ג Wԃ 5}C,\7$ ʋo~^,IRu>7nx5՛feYles%/16_espK-9s}矅;v@mԾ _[%$iWLiWDt*O?9k?߹5^\~މ+CPߗw^F#=*ܽ t2\ qlJɺu˩d IDATҲ JuF8!׶mg8֒Hkkm1tXr1*pV+ҔoݺD"P֯lYƼldX.tYnN7_yl[[&x7}L"i&In6i+W.蚆K\!HH*D>15,IeF5n |.ςxZn~LCeOm'[>(Zd{CHêLDV߉IS@b͚5lذW_}_|{AN(a=H7֭[4D"A,gϞyX:Q~[oOʊe/1tP.~H$,_χm)2.H$RA/3a,0 h$l݊ZQp82,,8RHb #i(#a4B b#sxb#4$4]Cx,gB0M3馔q4nw-3{ F$D3)$x " œu]h.È4Լ蚎Ԥ?X-՛F6o1rdqm%$ic_D"4OoҟsrIVOO:Q²,@c6i뮥a[GhzŲoJ)@:I'žaH(IJ@20XnsJ47G98-{ R]E})8۶7`pΠJ)^o,_m3)hmkzCmyvRK)?\躯ȡW)m9nKo:|w5s' H:t(Ceɒ%)77/ܓּx- Z"Kwa4DzBi~HM f|& "lYOytO%!5lֳN.9略k>'RnVy^ƓMGle{o<(9xƓ 7z0#y1jaM<վk2c }]yƍǎ;^/Wp9&koU]&\~ C~~87O"8P*Z7\}[:ͷoA3/gl,V K9䂇y+ :uv)|,^~G=̳~/=!gw~*^p@ R^@1Z;@|Pvl()A35c;6%%%D8%%f[8\; KplRPYV el7%ӾFB` (eRw,$Wi)cG]8J˰bPR /ۆޕ됵!DH|0kML`8h~P6A_[[f 2 8  h+zl _ fRų P χ4KƐɘMni|nYI/y!1q-fs@FTMZHP3izwǡX,9<#sv)kˮ—3Feh')߁TW@{AB FķsHML(u-[Ɣ)Y0x'9qO^dz]?u;>}?L+qR_;7k|z S=+d+ZTYnҒ~Y7Ns @MD:z.~?߿}8[7ҳ|8>y~(=G.]OTSY ;~+Pܗ?'G8?-?p.[rl@߲.hr~K׌ʼvje)wqO8y h$ d E8)¿¿¿㟦iNb#0MtwծD>2UFd!!#C1? Uk$l=5 nf㓯x#=|w'&N+Ke¡~g'/Ŝ=(ۑ+&7mes-/?egzrԁkC9ltח_YPj/c+-xf.ʇ0Sx{(:5Kfއ+'c=+Lc,JC4A}Nt$kjP>>CTUƦzIgZzFrI,.ᑿ:=`x]d}"͟ՙIAG!P{%2YK5[EG_Rg[nY'AQw-VEs"fF+X["=99Pԓ&E8oA\܅(gχp[tRXY|!m_Ɔ ` ۠&^C}4jցrCM'u}&]HpgCJ4_K2)3kl[6{(_W@P@Waob]Y{Jw3p5(I4JIc;#F&aٙVv}IZMD|[]؛lˀѣG[oMǯٳg\hxٹo~)fkTϹߞʋ%?a4=޾(C㫗`QQpIr%[+9}x_YgݷYǟ/~+d]5sN=^Cs~8'`#p~ݏ}͙# ᇗc޵!k<˒r:/!![hӛEӧ!V>#4 "( KҀ PrPQ2Ө_/r-.y ׸ƊdGQ^8={RO^kSsp:/Ιp(XP@ Uė{g- [oj.e\0w gxu멟[ BCc^ٱoxM5sylӛ-=L.V^p?71o @}t %pvp^MmyիۜE_ 7}8 7xk_nm-m-ءox_ɎF;cݢH]=,q]|3Mq\B~@"ayq4|IӸR~"#=i)`A>}>}:?Oxꩧ-W {R0{'yiٳ`_IPsphvda)cJ>ajg!؃,ז?O,QֆkMlrv5 D\_z|88KhL);6sd/?" =Y+ ;99٘NQ:ĶD2n^U;sǶͼ\ټV f{=W}?nٔѷ{׽~U珛>7g1u-w~Up3Wɥf}t!^؇^ Pam|cyHs>;WG3dTՑY,F:EqUT@]!Zm"|2ܶMV$ /FALGf8_b;sǙP+(󗙋X,<&*R>w޺#yϕu7%J#3_P@!D"5A} &9'}3yCS7D |Л? } Y]htɹX-ȺT~? MD!;9sګ\KRI_&UMϞvYH(^?#!!(! k׎J0r=\ ,^G_Ȩl74%2נnm4(mAcKՖo؝2JVL_ Sh3~^煤kqZzt佼:vY!\pdJ杴 j nEŤK'Sŝw LNlDums#g\iȨi 4hDBAtv<abtUsgoSF%e1kڳ3y.Xh:Ʉjv#2JEu/N(Ȳh4(vߦE"r(U+oI(Z-oۍF*+~ ]ZZJttMeށ#oNxxdlN'z3AnDDUEJ㐼\jHii)111tYZv+JȊ xFKNg>j'솚+Yt3XUOU}k[{E1\ Ge"#.Vʖɷ}Rb>!fOcع5$W։@rǃV ]O$ɻ B}YQ[DWoksz=Y[7$Tw$ialt:tz}jA$D6n- s”)EEEW[ m_L:m۶ѡé\aJyf]0jH_n7DvBԶ`#s\ h!۽0V ( Iv"Z [\QPAЊ^7kA@QWi*H~#8+ܱ=>ZQCР`s hQA7F(DIq v Ddzsi.CIdrDQƣ8#N@Qܨ D@\]z_KVdTz xd;hĊ9WQш "⪘37F9is-4B\ M!UQT]c  FQwz IrAd2;\:gEPNA2jlҤIш<3!A<z>h4bFdL$ɘ@DŽ~9rS04Bo?m)"&] %vA`Hj;B,sK,iqJD}GZ9:%g. yurEv8%ni ɍMCC"%+.$!bo9+2gub>2VA/qH$_@&D鍠㊌+6x i mz ]ސc"$bu^jD# r0*LߟĒ8u9΂-8UupÐv41Wן`+Evz5w>J~tUINN /D|}~>X3 2z w>Üg l[Qt:]Px_HV> W>>t~a((waС`Ԋh:Jl.8qT>^z%A`ٲejmʩ[w,U#7ʷ&o~gѺѼ;Mc?6{@璡 l6 BXP^`V]__? o8ks O>zhW r}:ÁbNZAWo3, 9=v=}b[naժUDFF 9r䌍q[!?Gwӹ}6tDDDvٺu+GaʕX,ρ8t?3%%%ÇrJvnYd9yĉ,$QGn@)N!+1`KCE!&m),/DGHlB%D9[cqQ8UJ)8EŠM"O8'6RBa>}EtYIۂP.RVVރ Q2br(PVI\MtscNȉcj:ky9B'%i:J(j8Tfs ,R;HAp<3y t$ŷ'0IQHԶĩ郱ZI:`Wu-9IC(fΧRʱ|͚t̂Д""-(豻IGGBEvkz] yeVTڋEvihAG; ]hi'TdEw@J),,c)qkF)(^F9M:#.MFl7b8Y\@VBMhB_ G_$:X<|0V4^]v-;v< ˲`07].z~!I{. _߁w(m=шz6[S Hwu4B4B u{C9o?HK0ӬS}Lx>7ZѧdFUF4o Vpsh!X5\;O_&jxip^5ϟԩNjCebMeQk5> ȮXאN +\t-U zTEA!H7M"h9N^V 9֘(3z>/BQ@DģJY?' ԡ&}Oʲkw. 'O䦛noW^ٳf(VAӡBLDq`yو@&?^6A/m(WpMhOû>u fDpujU#o}uӝKA~ҫBȯk}vZV\ɓII OLLP06^ {Sѐ῞l6ٳgP7ҭ[6]_"ڹ}sPyFҭ[L IDAT1FEѽ{ }d{Eő%'Mj9j*11t,#**]\ 99tVC}⒓h&Mak.AmѬi34STTlUYytxza;(-)%bS ݻЦM0 A26mLSj۱ZHKK k.U@}mi*3N35mt\9En])ȔTtw0}b . x׶vZ,hTh4шF4/a2x6BTTIbk30r <?_-/5KjeӆGE%1ڈ$mGdEWIS8gwuXUPUG!-j6XY]^NCo( ?2W9Zt:3hu zCs ST ]oX7\GB@A}^]Gޢ("0WB :~cY(5]YfwBk?>oߞ"JJJxlV4%}>#Xv]{? q1Ate^a$;ۿwA<w=EԽkxV^O<?o+ࡢh^_e3wo}ݗ;eWmݷ/)WrHNhα]<,- Lݽ=훗"[?70gto?T{RZFWx ?͚cﰸpfEBQ0 X>hW|t0 cGso7)d9W7c&х+R9(Cu5wD?ƥ`ѴdD杴 s=gY;C|gѶf齼 3+J f!D`<y4gz7tf^jYX{=IΠn])Q7N6˘ݲ;EpӎR?#ʣ 풰+Ljݗ[bH/Ή͙μ"YGR &w|,cxc(V K?.NN*TvxSqK*}Z5VVI~M"'˱e@}jRYlz.Y_L"##t#Bp'F}3 ʊW? yկ%_o+Mؾ};ǎCs1uzM=RԊPh/E#I?m_g_=ǃ$IaB*|B5& IrBaV"ynQ V[#v8R۫ۗ3 "Hjނ-h|2].]*J}s鰖c(K88յWY@zmTH.IBZf3nۿVkU nڵkHݻwKx0$]dT.|W59D8s4lP6(-Y1F-B>vWktvʀ>:96E92m3n/s[tڿ9-OMG08 @KV\gZcF&;x9f&ʙqc JOc &8J.&"yOWf6_o?y#J/tsݘC盎#+N4YQ0`sIDR5ԅgm V+VV`NFC9bJGNv:ˍV+p:Иoߞc$! 2c/R#\N$K\sx^牱b>_5ʞT 6>Tު,#6vu$(XK.A)+Co4֙`zT1WҧFނ@47_NJ*˧<eVtryv"Lbj!+^ (*X?[$ $ڷJcϾ#djZ2e'2d}GLƱ 6}B "<gKi)?!1AdOSO89L;^" i^7~r{9=hP#),Cy`]tF4[^cѠAР5|5W46q=xt"6s}~͕ 56]@qN[`,+ O1Nnff] I1<<&%J6qm̠ ]_}+ e>.M![~O+(,_0埒hm6snOgMv>~%]5.xi;Zj-u:<Ezq""Bp5yi7Նٓ_(=<}UFa(p.c/m6nOO5TNmUmլC Bf@+˲}ULN﹄`dپGӫixy_ÅFk`Os nWFg <&]oPbdɗ=Rg߮C_V{@.|\̇߭A ~e*]Eitt-#$S<;,D^{Iub`>Hyy9 NDA=AEPduJszU?gQyyyu.fsP(fsXzkj4Vi NK{/eсlt-h[NVE-sO!>~fOnǤGyD ιzM4 #lJ9它tnz/2*F.x"f[Kyyk ~[E2!]\;5+{om<r[so{>Ƈqɔe*.vيxWOtu} H`|-dG+o=71h*D *NM[ud >-ĥ ;*;h$K2& z]Jo&>Ƹ`K1ηR.n303x*[k=S/D+1e"b2t~6x<,'A_O|==:=ԧI9ob}>(MO>ʝo.ouyї|Y ɬ?N'ؽ}'6(Uyʨ_?.|<Ŋ 7 2 Mpb:Ct(ɻYHj@l)OE"XFԥ ti߂BDRdF֭YPG}AUUS>>C Q@}Zܵ(J 6mukV~&S~ 븃P`~K:\yjh$ZUUq8#"Bj󔬉wMת=HN'_hjx˲qNZU>qDQ :~`J^^YYYUoW/w|1.%;yzg9ck|B>9n9M\B?I9IK>e_ qael]w3Qn7vEQ?g, g ʿ:s_z9 G_F34|xHYY&DQ$??*:HE{m I y&Լxu=uIJJ?=no+=y$ڿ Z#шF+ (@VMjSTBO`F]`0T^otNIG`0!)*Zmi5?\}ENy0rw65ư 44ƆЧ2m]@51g>z$_ uȕCX] WKnj ( Lz=\uڛ~iL;T ] FF?ž=s0mڙEi1kν{+C'M 2R᮶=W #UK&@24\tϺǰ2ȾdN3StX3z$i!H:8<6b*УsүNconU08Y!bDF}S`m/"E"L:f-sQvj - U-K/q٤ITLʙ>wyiD#%xؕ: /|! ǘW"U3̰OG6Q߅QGHr9wtM)=G2mS뒖ʾ +ViW$w)E"13-"3 ѝSy;/[u_3 yv䙙/ݱ/w]?=0tΨCBǹ֙t'ϐf,ih$`\}(޻*`lۛ4Kw2|[8qUnK6/ќάWkf{n7287oB/r߰?l(Zkϯ&)ڹ.=g8kEnYhDPQP( l9Vz8=[cgdNi6Ƴ_ø㈉Hik(;sp=&xy&9478sH@fV?^R c>2| :sK^'EV+1p fNGk`(ON+y4du苛cw7'Δ̜|(RTRJ3S 0/Zd̝۰urQ^_DrVG)$fE3`_|u7w8Y^F4l7Ń˭ EADAR5 hER.Iqqqր?=xf_Ϻټ>g̘ce,>_w 1axp4R[_їI|Wl߳fp Ð\󯾁a{+va( m[0?$6=ל?q/MxL}{Zc5rƥl~bshvmڬəxyh?<741is4E~=~Cǯ`oy;vÿ3qD4 uzd6mͿ'x|Nuv! q+.a3Șz #~;K,{o >|CG7%{Ћ+<}hb{=3m z<7a}&&]Ӝ抛 [^[˷w^{p^I{=>sG]ddy } + ߾ +^ՁqAdթL+h ~mKxj63yPwNcފ% IDATU-"Zqx?{'fltﵐg#Fq߰6$d"D&9 ;q>ӊɱzAPH u Wvmh ms]S9|`g5ځCyЄk;7 Kv.a̓P|$t+y&|On7\x!$Ĩou^>\n {z? ;_i#шSD[PbKq R6Eq+N.qz1}H8;;=ȴ{?!*8 ;^@h^%,: 1H]k2Gw8(ed@&nc;(f%TU%>.,"m,]l{gw?XVx/5^ywhLtc]s<:~zWx{CkD#$PU^RRl6u:5ҮZG.&YfC^ z kt 5xYPڞ2Lo$W`'o`$~kYoe(,.;`i0ztyAmM+u\~@裠!:9k̏Ӻkwy0~,1'zsm(=v xU>BttEDJ3~yEN٘Ϋ//>uJ-˸c aЋ2RA!2T~7g?̯ێѪtH5ݓ(4eR<rllfcUz`*Y5av-͖<3k{%zsՇ#?~73$u/<xz>.%AO RLɊD4εq=UJ-0\_R~-acYnʱ5kZ|5b񳓉~#t%_^m;e #ムԦ~n:ÞqҵG̐eDíI(vdQՆ\TM sY55[-CNr붾+6y!;\GT͛yǺuh׮aWTvcxcjna-[n;FS٤u]Z-Dաcd<^˵sz.HNUQ "xh4S *W T윂o*CT%*oz qI &~j5)2o|A:W]:8f Z*5 ޢ+L;r~F4M 4[3G^ijeHPX0G9=3yzs|?)zƳ mMy@VД$6 Jg\0'Zta#1@ĩS);Wwv-L=qb՜<2:6( 8VUU{}+وF E{q5};\1֣sHm'ZoBTU\.;QYoiս y餴`8+/!6&g{yt lb2D-DGi%S ^zU9|[}sʓKuB&?=W}_=G>P86?'ѱ z9y=;5lk>>]g`7y\zamlM*7Maqv qԭܵ71|)`u #->o`=nfƿDZh;&}@|~|\A 8$7{468KÚ&>SA^4`Y8Q+|8Běټf=R55DӾ}.o~ه;zܴ19h;MT5cb-HTm/3CsR9RjFUAWMEF4CW_qvZzvQmAȋ%Lf)#\5s z={E֬xQNu02ktIBG,Ґe9Y{+xZQnvd}$!IkNU[Q YF N`[e<Oow݅lF ƻѩ$I#d*XeDݻmyˬ2Wdh4AIJeE򎉁^=gry9bh4Ȳ_nڈF$QG~f$Tq6QExB~(^0*77_0(̓ gx ,V\|6SRW=ZbF%--+fw7 dp egF4!`Xv,YkT[~v,Gl%/U(,Vbb ]ۆ)*(@2ѩM \%ٴztEl}M{]X MHtH-eDDe<,\5k7vJ`-t\[nՑH='EQ\4OO?Ri4?#9V%29wl̩йgW BG#`vsءsJ:'MNArX:TAY%RezGy)X%EQH-&ok2 MNRv0;еgwt@}BV)l}ȸTZ5T<śm D%Z.H1x[ V%x"W&;l"mZK.=NZ#zFGO98isnem"0wl&ufД^+ղ Mc ;zUnيf foڌՐֶGQ`kL,ر޹vMÔq71яzC1j8]eڹKAPT$UYz[qO>"Wd2NxbO1+vRbw憐j"jUSwիi׮boH,̝1{gR_QfCv4QinxZ-k1  7}7t[UqWsp{cUS%V3f1 Ch 5nPWjFfClo̕%|}$I ҩZ))Zap"*qĉ6"ܪ(RPP: VQUz(3 8סzVC%dUr{[QNnOpj~d2=CVMu9r`!_w!e ILmhm5{rԈ2ĝmL4 _n֚`65AѠ-.,}"""lcLZ~ Ś^D]h4rjgCQ}yh4Z-Z^Bp\UUhQ<\Cf޼yӉ(3bĈZa+dۮctiώԂM[ӥSk6mM^~ۺ1[^yEm4d{ާT~q]yےJ6_o|:όD j{Ю]ZyzU+]TTݺu K={]N:ϬYGm@+VԻ>ڵ}҅>(QVرct< ={_~),~5tb֦Š1Va#/PwxUۇ[R@=;D:b* bAX+XAT@7齷BMHOM$|ff9S<)(7[=1l!'CuA!~0(N4Ϙ¼y:aG=VM=_竲wVM-yEæiRNVZh Jih+N8Z< gݙ.m' i/ƅҴiӂ咬 X% V?͙9ml|ű 9_Oyfs˲l!ƦHz&qxZ`94yT9|:/-9{"-oz~ѻ{zkBX |׬7–@6{miMBҺ* W?e7v-yw3k¯$pmе7NikenaF5h;#z;(Ryh\ )9clk2GgcCܱN~o7?%nу ͸Dxлsn4SaoMVfUu>S; |s:|VQpH!F&&ft6jw.csWYi a`]ǪKuY_xBn~cܣO|?73 @ yDd|]'bq%F5tj+F;xtYB<8μs!kkX0i9_N'XH*Z 6>`DV<Ϯ;ػqط%]V}A P >i< LbRRueU t@&-][˝~Î)׃,:}ÿ`z:<`tr~m3I"AF3!P\([)gfX"OqD8)1*X,([K?#>>Cr\:rNf],&DжR[>XuM&Ȓ  0|U<Y뿲=xYBKsls{(_*#,] BDI8;}O_S@dLLCD@@@U\tK$,~CA PTLaPdV̞IdӫYFE7 Q, Hi$\fyb( [VPx3 QL{dRF "c~^B˲d֒~BؘbѢn,Co8`@dQ.TY4u,IFt:~Ł$?P󏙂)$Vyى(6^+mJgl!r?ö豠;@ο enaV}ljq>cεkFCFdY1c"֫cuh%-&rs S/*~8f9$q\8 U /ۈ7J4@Nݠ|Y @g$i~?#hy0~08,w#,[$T.ߗ e2iAo^]Nbܪs7W\U-| :,s2|"5)oB6u6w?=*\xf~'n~9BRJn! p.aIDUՕn#?[]$I=.Kd\zf `#ǏQF-O!$"N!c)TZ"#}L~9<>&Se͂_ֱ"zRwzfgR~}"'w,*w桛۳n,ܴ0[=e5݀tp #0]z4Yg.]\?a*ll.4 +wߦ$$%`eF(Ӻ+oQ]}؛ec :m^ IQ.|/i~$مSΚ-n=yu* ؉jT!/S6.|Xg>Hdބ[º3>k帾%-^$/aq0h]InYܙq]i'2bK WC>4<\|xd߸=)xfJbo]KB>jbhc$WQt nɻukH]v9Fy>4z[w\mgϑLo28bhnNʽ M~un&XC.w3AUܱ9ڜ-ѐPQ^ʼn43%$\/M!>m~dŵ'+&Ϗczx!jRh̶UfjS cH=?G7hLK;@iK-gqݾ}h3Ep:~ SC0h4ZV7I 4 IDATg#LJm Z86M^ .ʂԍ ۷Uv# !rίgɨ0h\KeP<8-s9+k3|;E \E8$`3z  a$b$PbHٕKvķޤbt9:jD­| bpF0{!Λ#FҬ¹nLznj.nRth)6ϲ$h~@ , o @N68EtEE# DY>i ,L]BUnILL$666s:h\7m&5G'Y^|bkx5w k~yQW״90t%2h(WHv1N1D9nrN4,(V8AUU9JM(S6)i;rZvrΘ3P5W};gM8c:]@c zn_27[(}~IӉeY8nf~n:>^3YG1puMLG,93esL}g2kUʂ_d{zkL!P*Q67 ǹ[lݎWd0 ڔNDQs*5ldeeq8T)yJ?ƀ'?+c&>8^eL_9e+oN~=yydTr_KwtɄ9S]=~~VFq`L\)A[x&Y&Bn\U']v)2gq\;ŊB@Ŷ~V7Itpa_$5p=c|U {i=Rrl8xl_ ,׻BLkOلXXL=ҳ>,:dKUVTVzEV0M5C#j<",bh, U>F/:@7뜢(! ,jA͚p mHKKB 7+ JBĢe!(Sv fgupk@E5mӱDG+z ^ !N@ULLgF4@DTlEfh3ZEǵ0x|ֱ.=7]G6ΣC2(Rb; ;OduQRB98UpN\WO0 $QqHzGl>M4ZN" f0g``覀` ;vj qQ h9`{/R666 zsKaܨQ8ޙPQ/NewU\0.WGF/13=jdY8a͟4ר>OPĉ#..`9ä^ڻ68ݝJNʕ =+M,cڣ) ieVZl~s 8p hn++ 6QFH)7׷\֭[cf5,CeKh?/(&`a#I^?UVA?#,^+&`{!;غg+!!DGEcgK,]B; fƟ^%8@DD8e"e's.7kCr2ޝwV\I|||Pkx0 U]/MΟ+ո@jjj r3muCWہ`mb{pca2W)T!{^}S2M|o^oaQ)Эtpx(E_{OΟ{&vsJpQ`zΌyB=i ˲e7BͿ;wZ>vƗ0qc/Jq&{CNg)ig=ы /)>xx--̞ CX'tD8 |Rl_pGg:ruʕ+w{-V 8\'"<.aH=FxoV EyhV g*h26)~vCEۦY8$YhC\.6TZvIJKT)z{>gDE0*T(َseUvX ;vк{nNgrȝMw>A(DvDii_Q$*wyE7sWO!"4Ql>aX#_ߑ#Ʀ)666Ch_ٳgIQÖ-[h۶mIRGKݺuKڔBl߾hʗ/_Ҧs~UfWV)e{ {/t}sۜ bY 3mt8$bF젒?LKڄpݴnݺ8~exn5$A!;tb-* ',)NBħUQA EBiLDQ,4}zt:don6""4SQ$""psqCEyskUW."77@H C` 2$p|dG2GW O 'ayu""{"D|LCvLNv6@HOb4 iȑ;TQrx͜taccsb&~Q ngwwy:5/QlŘٔ~|6s͛IW1|4k3UC1aܻt+5eؼWƿ5wofNcI>bQb2؀rj3zT(26qĉBKQ.A.[.GKuӉ,EM7;ϗ}]7᱘8L=òiĜ\^g}ĺ@v "do ՘0'Eс۩"2a!,ڬ8$1i&2~Ӊa\n5ZөKq+5Ժ2nfFPj8!a0[?ߨ޶!]s7?Lߛaʄg諟نñ$~|g&s|c9^'Z7+ψGݑY?߷ӭ[;A@0YGBIsi[ $"ġWҺvvGhןƕ"P$ 2P\N] CEAˉ`JK B s-)JC*h[4We3Cʶd5nPΨ_x'++ e_˅nl9橹~$&\x}|Ao&9 )nٍNև":BV>~۰B\\Jrlo؟ޕ`)Ukcs&7,?lZ ˶&ywH [dx0f0{ٶ(oMeor0Y_e%kyd_C6fآMi);}3P{mH"t,lw8myo9vg+" qh|~Q|6͋1Od"R1&dDdYСC?#G2f&Nȶmۂ]@呻r۽SB(o){y QpV[H?q>À!|g(Mv?åxsB0h"ǩ-ۀa2\0}l>"HU X&~m3#f# "`Q& /_G|.ʈ^}W^y%:: "7q.cOfh4JvlJ-fPq WIz962gV]rڕu.Yif9V/qt--Yb!uM箝%oRѸBҡY?.ᆦM _|666E}T&5{;8.x{Ǝơy:Nvz${w*5|)O=nORLW8)[A.]@|7YXUU DDD*8Q$'9]q*ÃT1-~넇8,<4&4Df׮<}[^vz>7kbY!7'΃Fdg,Ж4MGT'"z@{~7M(YWF`i<F`abi[bS嶾\?>Al|Fʇf+b9^FљϱpݣG28…'2iOL6S-@#Ÿwcia(]lEQ$;; lIDDmڴ)iSlll.˲6F-Sy5;:v &3q9rGmFQeм.ԤwGae1'h\dA qA׾y㆒ dovbxcR]$4dEccT(a@-r{stQN&^yDQD4DQ3mlJ }ۃ YeN>[:7dٴ?גdz(F^τ$5UiJa.ʆxVEMvlEɣ ~I3}^Ri 0a„ HRp<]ױ,@ ݯ?KcS=:״eT ۃ?,0l)i4GFpO.x!> ,K)Lj;;|GfF IoE}3,ao}w75_eYH3fŠf#Tۂ @X20 w_׃/aih-R#.jV0qpux>~z:A;$WV=Ϊ2w1{ڧt>\yI ~4߾B1N˲ ~N'vt̲kt:[5ƦtcWMHexTmo&[6 J,C[VO9Fv%.zXz99$JRn:ſSU28o-5iXdlguˡDŠxrCQ NZ͛7r!Srr@ s_ھ`6QjDUtS@Rק5.|2BU& apI"XO.N8v\9B!^n&~S oh q2&>BCB4Y0iN,y^MS*2GVʼn' C\q]>Є34Tb13 LQ `i:e` {s^z}'7 u#X:SDD|\DŁ8|= ۶m#44EQp\,Ry5::}IT* } `aX!.~-N4iB׌f IQUy״ǏzvhͿ˲ ;:@_μ*M\ _vr#j߇$IO:z,RSSpR p^#4ߧ1gU5wk>]lH&MSO=NV줟6*BBB-i36<n7x<7[_~±c.q9Qʪ  ^!-[￘veO4 Ymcfi|]E gEQ$77+%0{.Ϝǃ(7iܘƍx߉(J,+*6665g%<l濉eY3Mb_llJ NzS{{HJJ%Ʀ$] +8/婪*/zS| ,wf~5$;Iw*_0GmM"EP ApGo8Neu-# '_gsqBzh'SpݷSbZ ~oaQͲ,t]/ٓil^~-cߚ ȳB_ W?E~rglllllllJ gc4M"##K KFqC EI]Dس'}{vaâh{3&޷X1cZҗYȐ}G4›F2nի6szYKout2G~ϡtf7_5cݲ/ᅥS)ش"c>'FQ3$Mdzh&kpE\=+s-DzZ0D>[ˋ4vTmaVqMJa+cX"o;Шwmj8a^*QckccccsSR)#llll8 vHqD6GUXH0 ՘^~a鴌֘$ڵn@ptiLJa8٘2[G/A c|7\ג2iĪ"$Gc'064Q+L$ǼQ[Suh{&_})c=ҽ:wڐ;:IIy#rrľ)il!?(3v| ,MS%hjus9R"6lР{f@V7JA~7r11w#WskkX<2غ~6-AT{IDAT0w2 0MJrgi֖M2.Kv}7 21T+W[oV`mVs]߈=DV]03);"ؕސQ/K(Q>rBkӽz<\Zt: Zh`kcO_a͸ _L$..P^Iؽ{7^>Vv@ٲe666%``ؔfΜ9o|&++7$DJ gmHVVVAn4˲ -8%I"0q|(?Ki(U@4,A@?sh(WӴB|A@ӊ5H]NLH(++]u\Onf6s&ƦBM)Aeʗ/vYK,/BTTI%'P(IȒ̳'XFo%IT$Ls / e! "$ K"&Ei,c:aE!"]`($ ,蚁ȘNVVv͢ W,̑e@dSe$f8(j+EBza*G߼v%qw:y/\K.u\Y,LC^K^i^Y빻"f -!&0BtOahSDTfGl'/'һ=Dcnwn 1v.7,FƸ2IYktυ\.air`6.Kd+X3}Kag7?^I>q#xg>Q ;>G@ݫ{Q!dמೱ+صmlJa\L Ol."K? ",`(Ih[]rSAD-> b0@C+ n'N<e].WwZ( ŭʤgKUP |9Ȣ؟Cؼn5|=(daæ=!d#NL)686`UͲ c&`aJh" 2e)騊8JOeD1/bqI[ SjZ?Cand`02O!_l{˄b8ҢENeҾUԩR˲hܳ+mj֦R<4lCdV4kLmhV7yd m\~#Z5b+WzŲ̘5Z5&&^c߸ihsM *uVMnLyn(uh8݂; ~OͯDÚ1>Éx_3 ]8.`cSJ/֐YҦؔ\GILOdUxSrpE0u UNns@V-ؾm?uG"+ Xq(2agF& 4"I1czbΝH8dƏOvWp}D%ͥ^y_}=58ՋNgLCV,[MNf/ M`[iӬ"MH+OFkGP3Mەxij{}{,һ-X9kKvD]qKn{p=D Ax!'%< +ܑFњ`! DI"t1ߏ, B0-Rv~F~Yt*Th FLy䔉{t'I(sN0 _{\uQ$!pz&cJ"k|~ QVQ%+KMdnXP!hkS0-p] Zd u0A.ەAZjPdI@D,,A@@'-=H LKCG?# deetd"h|*> S# .GP<6 YYϯ:NDD]ƦıCSmllllll(ž=xiK<{8è^:Y^>EFwiDf#xI0߾L? #c4:\?[vSCp6acn^}U6mʓO>IʕΦnݺ8|̰rXSvIJ٫ M^O~]4QB4<_8wAŁQ3Kbrܓ_WnjX;7tѲE;f~]>xۻH]/[28"~ɐksiU!` 4O/IoLPvȆ_~ Oty>6OwrUjs_Z|x5[³ph* \͈KNG /S@*CBĩY$ұY8lRjՂee!2F|/>U]'"24`uW? #1M"O^3 rOȜ^|mp666666M5N 8rb4F9JͧD?c>ME#[x7lGdٚ5r}ÒidׯK.{%66ڵkas:D>r!}ZªڏjFËQ@0ػw?~n#_$?n_ aѼJ>WƦ?rsr2o+im҉oh ~ 'ez<4NѹA-R```Ե3%E,XJ庖UպtkG!8żyed+Q"[,yma3M'hZM7p} ,#3sC2m$I;]EQKUdsos/UUq\hFZZIKK#==t2I[JJJ )))Ool.^?glFUKoE4Vm=llJ .+̲,DQ+bª 9BfDM2vh8QӬ{WIҢGoG3qDBC:_nW~XķV"?@(cwUwǿンKn$\ %pK@ShE]:U Hc\3Fe8ֵTTF7F` 7@n'9qFuY}nK~~>˗/q&LJdyoR{xLB`_^:ZxtʪϹ-Ʒ|V9ACpGZEԕg7fO+aЈBqxmtttRO|ƀPojT~54 놁& hB|ᱚ؉xS4(y 4t T=i'%蚆L- {= DCGz'%h0t )]".젗[D*  1$B hh\CH$sEQz('x"uO uVSQ<ׄBV(y1lc)wmcxG L39gԨ3ioi%1$nv,h(x+;>nbt%75QZJLྜྷV.%y&,)7D Bf4G(WH (HO@Gj|1{L|ք3* !|#.2SKdhKxmEq>|z6Ӵw1Ia@:DбXݟr3iH'NffF(j NQN! ,H>}zW0fD/tnT|CI,4OIu|FљƟǴB._y¶uk M>wŰth,_5]O?]OF" B^^WafЖXBJPw}#3+_KaGs_c.C3#4 jwx-3^i/eS>YSN x\rV|U3Fkgһha֜9G+X7WMbd͕Jl4ϟOmm-fb̙,[UVىUPEُ{0!e{{Ǝt-'bh>`v-09Xo>ŐU^>sXxݹݦbp?~W1w}LəeY-{e/cVbUtlHkE[dӡwpeBF}"IiEh$8Ԏ*föCvS'v ~Ff\؀ tS=e-MOQ=9r߲xpbî'WNd .J=jsHÛviWFW!w^***(gEQEQM2Qu镋mʩ#a'xd#dgfqiۚ;|ZbHٍӎtd/ŎFЯh<,]& ll2#Ə m3fuV.\Hcc#^x!v^cxmj]B;!ygˇD:7z#;wj?lMMWA.d!i @lsnS+sſO2Zv=ϟ">qiJĘdܙ7Ǧz8(e/a"O#W6s{1.Lȏn ?Um`4̛μ/cK}N iNUD|v7soS'h!txƣ=jVW{oo((={\]RR2qz(i4&$:L+SIq|™'SSSDc/QwUTg^ÐZ,``?r'ӔvΛPfa9t$(i!(++'77)SPZZJ,C7L4EΘ~e`J*Fafrvg_WqRxgT'p8ͺaGWG˜A?LDm6?X͋o`!hĢ1 d`Tf`R$~G2XixrYU8f/1x$撝&+Ty:1yat9CtVD_{w3n`RD9@?Ɣ0c%DBݻ 6lsoE9}q(|)k׮-///>xo}ר(~i|kǓS-±m|eq|jxis;6,!'u+= +_b;2X&xqzμ,M71D #깠H0Wr;jZ tOfwwyyyg\07xߏ#G rIx<9"MMMra a騸\͆T Zq[bb"RRRnݺ;;pM6y[8m.H뒎D4<=C9>ïأdU-Xǝ uݜ_cs!Zx.| &1>œ? b2LkJn-ئa!"\jwNO&m`y:S8^1Nw}}=>,gH's1SNn裏vCxԼƭSSS;vwH#KUG5TJ6Չe;VP"/lP1O?) <3؅:Q4*:-_giM=:y,*c.խJE6C''g[<N@`^WN7_|T_p:r?o͡c($&4ۢ?O9HߓM ԉͯ=1 Ef΃FѾz &fwZH(Q1zEx]H՚wlb$YGuT;!k r1nG tJgvE;,2Dy&6b'~ zylΣ ȇTuĎwDEٸQՉ$X5 c)qI%Dz-%ZtBc-G]z>X3c\Z}{!P2mCghwbVFWbĜf'}ĮuD+skZw{msr Rh+ LpK(nЀ$[ڇ)s[o3J1U=}G,* i\''磠DB!:eGא Vh'_s @HgmS᫓z螑:Bt 09͘p>)oHWSWWL;f㎙+1,\8^K6|#j=Tct>,G`|6zRY!!sU{{j8v׿ Ez 1せ9 . Şo*ԈG0p3z޹F$'ôw4Xu:`ۘ1B/sj 8V*+;s 8KU|.]b0L@}HIcuԶ+M訲Jep^OGl/Xj4UbbY }ѭk2һX -ubAU+S͡eFԥ7!Y8X& <>_ DϣAJJ\9g:ғB`kFmۊ3S1gB33o7"XږDjyfxL~aܟy{D@)Y~:x$P0JSw\|c0c x7'zs^^5[fޫ'i,㽵XG"։5׿b-7GΝ+sguHyHqsTTǹv sB}F<>.ALC响pV"8۷m,{ƘWTpTkq;ecq)mGxNϗN e5Teq*LlNJiaؕw@=6{^-w~c]@oPG;J+1|ȟKSS;8tR/։5.6 O.G3R2Z9Nyō5ec_ {r!L.5x/2'6bo7kVDZ|#]6n Ab9Yە0 QSIKp=Y~;y] F}Fe~m׾1+o+mZ# 5`%tq /RwY$8ضK1OnK]ӓuVamsK믉_X$Qc!)K=j}r2BUjYa>p^Q}9>m&Ng<(S(B2X vHx8+a] w?:>.+jm,f"{mJЉ|2ؗ޼$7Ε6*M_5~|>87r +jK{ܲEF?ܢ`xu~"?!ZAmӍOloW@ۯK^^.O(.Y Qh mkەZ?6VXmh}bE(EbE 20j71Om\:a z 홭uvI .irh?PJ|7Bq|tLW 7DUU.Scڵ33<S.p"ό:R 9Q5M%eM߾<)xȲa` 3Qt<3o`P)NꈉmB' ;0 ut`];RL( PK:uyR=<\HZҬ_{^;>BT$Qʛ,n-Xp±GcOM??ٖ=rϢqEyRبdqc)m~ӛ7 ,nѯ_9Du0 ӱj6a"ݼ1L v ƘTk'z*#v?4"wzW6ϳ~$fy-g[7LJ9n|2՜;wub @\yskƢ=zn]ַE)]( ,&K۷e[EP cگJKF-#%#yT.a&t1uC3֋flDzu21#ݩ ݪ3(pARӮH kn$\yqZr,;wjۍs"_oM?e6)J_3@FzK9eX' %w!6*ܔ./׫Gxk6|]%F]:`}Ҿw:RY{{e7'kѯ_G!#=÷@'o&Xe/Է0WXƪ}*mv+'~7رXiiI"*}mvnmy3Du f4ppV &,1:pqvαد'\n.=2̣u4.;?zA}IGݩt$:9uD]Gꋑ>P_uz[+Nvcl6XܦC*h4 ]wsVׯeJFN]*T{xn][qV ZaYܴv'jrV D ";Dbˎz+ѼN~';E{pR C#sK9meyh@e;a.zbU.ogb.wѺUC4ZCZHuWm>ڰ.: VkV/

    6[=i&[cw^2i[>>#!XU7ڇqRR2ًbaۛ_1 0 0L$ō9hE܇#frٺo!iL3@VrH^?kt<XHus9 b?_CP taFe*%[5Bd6 sc9pE (<*7 hl|6hu.ϦnLeng--jcZG0N+as ڣNNՙ 5LR]sju'Wb)Y<`4EXȱoi!AJ9(_=Y+10 0 0 7'QJ`Y,^Cˡ+5Y&2F5e>uXҶB\jK7k[ަcEz{KK(/Ú90 0 0!7X.PN 0 0 01Dt7YVoM!fpgL&O#Esai=[mF#**0#YW|UTnhV_A\:3ՖL(M{ZXNٰj9%yE|3.'cjm@ؖҥX2~_@Je*0 0 0 J7/bgd${ mp DwOЎ'zP8C>F#Uz%Lcϥ{Cn6%i(ٴ|\r7Gw"뒥4sK:ʝɫ#P_iԣչ0d(JFMaaaVꫯz d"O &f pC@eV.:a1]^Saaa:*+Vf}li Jf\GzJsJaa\+ō7Iuϑ# BQ#,6guS0 0 0L]aaaab*opaaaabٸJJJZ{ñv}a8,7aai(ōS]vZ~ 96 0L'.s z*mGJR2 0 0fOdT뤙ko;{Lw'Nun܁?,V 0=֭L Rܐ0 0 7UUUNXѧVIP .s L'HNJ-uSxf8t4-U DS P 4}g[ogt,mۆN;MZƍѷo_R 0 0nsg\U=uW>dSO™A 9AB.Ď_cܿ˭hrP%*b{RGaS/'`ώؾfs^.yQ3 hlxA,=L|`PZ9n.඀rs$kыbyLLn);1`V qa^0 0 jf3}%ʜt0_:_2 W9&LJtOpe>xw<\%dŁ۽߮A 9)QneIIH2 +dvW6,0a'F&~\e6oKl雅3`^zކaa&ZrRvnSN)(çn#yg?6l&/ LQ:d5'-ߢДZ,11ALA tK-07=N+#ŭ5/Tf)USuС8hQ>|q./V)x3W!>>ΦV3c'$y9oC\+j?j"ֶʉ055R\~qW_Ī|"Tz2 Iv7f[$LH~sje E4,f|7o▵ĵ<(\̝}e X t:Y};^t2nxX׮7Nn58V[ئ|fmތ͏_1S0 e*[.z@ˣ͏ w01q},,bm-vA:}p3yujyyuXo/mfa!\Zju؈Õe ژ$S0#5HK?^HVe%R={HHI,f}tō2)eܺeb[ NcE8Fpy *#қ!u*A/|ʙ۰pԵwbri%ų!\<-خm|n_jy%m6cm}{. 0 00*qBEŴQQyyC半yCjj8ɱ+V[J\#CTjAET(b> bZfcɼu=O`j3-?ו<&q?[r4IaJ 5/À2oo?nBrK i@ 6΋FkJ7b3J2ZQ>jSZiMڻq\~޹tXcQXlN0Lf"||}~[(s]0Gq`yqV0Alj/DžkL6R!w),M {]žԶ뛵m/tm/aaA~x6[oƼST$ LQTS b 8G?;/D.Q]S2՜Jկ+FΖ ?Gȴc6P*t/?PVa?P_7guX<(,}X|"9c*I˝քMoO2@Z$II=vBҐH:7))RN}?LYH˚-V`1~X:uJcɱ7aF46i7Rw;woىgom"ƶ ||f1 )Eԇŀ[i|8LK5w2CRxLdt3ҷ]>1lRz3^~_ 0 0Ơ-u":ӫ4 ż 04o\30FqӤ=T^@%&/ r"S((x$X 1fB c&}yVhBqF@1̓qh?6}Zzc@>݇*BFYhT+lD\PbKܵwCy8ձhtg1Ϻ7Ɲwߋ_@g="i5.A\NnJS*0kqsqȅi F\hk^.]4 LRgݴa/j-қnR 0 bmc0q84['"//O&TFҖ5Z#d :Oij+›5KݞJR4ݕ"b|1B`ˊš)~#3 9¡GVTm/ˑ ǿ pKQyPzs3pɭLr)"W%κ5Mؔ+`f~:ncl"0`Vީ+)Ⱥe>0Q->^.aaa#^dma5)XT ~M 'Ȝ&`MlÊxfطo7>[(k׮E6 0 079DK=~ʔ?-Xq۰ap 0 0 >xWCPܤ}O7$ ͕)&`MBa;cb7 0 07GzAjRp^+PPxY5W.5Ba#7Jqa Raacn[_(Ď~ĸ|$T%"د1p. )uM].NՖ{4&ᓞfM2 0 㔩w7 0 07ꁉ5fwzE/ ػ4w~9=vzPڤ'։kP}}2Yq3r 0 0x"V0 0 t HqqD_LO]ؔ5:CHqcIJޅQgu6NTNˈƤ,90 0 0 0 ™&)Q[S_8ÊK&$סI[tf}Kڲ.b[)9[1 0 0 0 0p{<9$MYP_] [q *&y_[Hcb*n.6mŒG yG0 0 0 0 aH'Fƶ!6j4M4y pC:pKW$r#MV1k🗗ᆉww+6oGhaaaaVqIЃ 7cŽeB_O^>: N[aƤr.6ż''xN<wc?LCӦu m`܈,kR7xm>ɐC]e"68pV 0s0 \ d냼Ɖ+֡uiQ2.KТ aOeQ" 0 0 0 t\˗/dsܕ_ 2&q>8N>׿o~Pן'o]>qTn vcb8SqݵWᢼ' Lt-(|)_Yv(C.gaks 0 01nOF]Lzq )m{1));_MŎww⢡W_e]Ńսb)YQR{U# W{?J,aaak埅v R2Q2ݦ m^HaR YxxgIL)M)ݺf`P)xzыg -g矋⧟5ڲN=e&(EJ?dzH \WbMYm-#30 0  ZKI ԞcG=/Zگ'*R,Au E6G|x xd+'AZKH uȺnNCSPU >ܫ|Zx 9g0[(B4.~kw{R^16~| %B,0 0 0m =Chm(,Ŝry+(['k2VSIBDhM+Gq<ɒ(\#-rù%8Y9%XR\෍gyշu(*tm )Ӂhw¨)//KiCٻ3&= _{?'~)eܤ~?W滽}b]& Q7ӠDz;z22aaX#iPs8O1,0;KʚEˤŹuEH޸F=sb,i ͍ 4"/!+%wdKMo:dsD| S.7R޼a)mc{g\uIX' í=c\wxh&\.PE.aa#CoNŃ;M|]#E3mskח;ǿ,!@o^7w_9uTDu-ߺ9t(9ۄ];îNuu_fyj9K>+Gm5ӳp(h ,GfFPeh5keʛsO偓um=Bm!@1Wcg,E݉74DSn7@uYb{Ǭ⧑9+ Ixxh^11m/QiHIُ?# H)ls+f\sWDv./]1nawjg? Ij/7|$tFh/ KW)ocN=hHk|t̗9暔,/taW"eR@"|'qh[ rD4p ?}c,hPfufVdMrX]u62u|KG-# t%U.NqNE8]z2Bk]daИqBo+ӢaБ騴kMK蒆Sapfc/0n| #~Qt3&xY[}6|Ƕx޹i?^M/iC{Pe,I0 01N]\4xVrXY;Ʈǟ®? x䞘Z9 <]K-HPB. = RǠGi#,3f1k^<2h{ $~`;0=?_%Fzm Vi^u=.5X+[ uYH&.VH%RIUX(g$Q![)#_T@*˦iXGCFXkcm3B_rGBrXLS+nq㨑x?Ns-ݳeý7jMP(૯\x v$Ǹaab $SPqToN#{TC:E*'έm h /l/d9YPOW[|گT8Y)nJ:uX)Ft:e:|կ'sC s΅[{P{ens֭[\3;Y.M9"ay1_b޽y4]vs|+*ф]Rem۶i߾}H|cnpf.*\Al2PgW_eCePN2 AGA٢ uuGa.m$ $шH9srQXX>լ,q`M*cӜ&4 _&,Uґ˵#MRR7_j_EU8Ӂ-vn s=ؿ?+na&J˃#i)2G MB}z=i b=;Q&ryb͕rS$0ya<ʖE i)nBU޹0Vӝځԓ6Kw`'6`kݧBn;L+KX0 0oL>S!V˾+5ô#hp)d+2%m5)mvig.ț`y{Q~gAiV@VAƝ\̏9]qk;-<]~*O;nBin:0 0Lc_LN?t!VwܚaY/(Db`MaAb<㑮WސŒtsbV@|*M fS|$D  Mqr)Y⬙S0wd{XvzvA|YIJVWmScBTtq;g O?uai4iPq55ɹ aѢEr.ٳGEޯN_͔+6\3FeI\7U6ZQNe\V~E}[Y6c=}R7ֈ:ZH~?t$|&\|Xiތw)w?\rX֙b˗X!3_^=Nǧ guxvuB0 ô_zo2w})k_ܣN[v<ā؞1QT*a سc8oWVmi1oLiiiB{35 8{n;;"PJ]y^7Ǔy>i^OE]HanY[r>W$Q&eRb% TU3@*t`pmOXf<, sGȌp9_mPO7d.f Y0`˦Zon-E :1w,Xᖵ%cw X-**@Uv RU-Oj!*mĺzkFttpuuit$CMMMVaqԙX2ebf)S?7z(5iib́):j4*J߱Xh^~?;CV.łH@Ioh׹׈%̖WcJl7s&y-8Xs`!31[V0{l]kZLPem9Fa70K/Wd^!st*ҏ-BT( O[|N/9{8*inKi~Ѫrw[nHKc+׍pUXsU|lNKcV=8O*kqٹs'F1஛~-I&d"fA1U˧wQv!ֱ9\Uwop[S/D}Jjꑔf%R[0ؠAM[lm!`pR%&F>&_tii!76s>V$؂MksmVh2 kZl- bfOZ趕9ʵ34_yJL|;~Yh شw>9~;/+k=\RSڝWPNgAJ'8ijjjBcccXBvk0wC,xwUkEܩ8d(nZcHb,1W'ד fWL)9/m !Yby,KiwPle~#bE%dWY` 0k^ 0mdYɤ󜣵= f<,mr: #~ )NAμ\e_GJ̹RS1 vioMWW'FnN 1 Z4“Gj%xդӔ8 5%Unʌ*r BȜ4?V7h?-dٰ`UV~'V3nfw-bqTG(#p2*>7+1f=GOnce(ov:#0%`VxALHk0~RiAK|В70W]"5!=F=be E_n:|t~u~uBnƉ0!+n3pU0bu?¥W#'hrRطowTȺWO/”~#pAk[_ex6!/ۅn]0(wB`02N 9.F*L8 )m J ss-CN3?ikgۘ v 3m.LxG9fh0#W<@oX%w8d$eO$; 0 0gc%L~'߀HNMçG!S&.B5&7 zܗ (XI۾BHՀs{ )۾GCHIf >]CS*>9Sd\|;b)Pq[ivٲ kԭt 녵)(UכMe<ݱuYv5z|]M3*6X X\;iaCJ YpV.RUdvccWHFcs0(Ǵ=oaց]t: S~u~utf)+aPܸ:O֯ņi3Ư-&>>^qʎ9oeC[P{lُ4>n]-B*…4 rAp\Fb``rV02>^w4 R_l!Jaw0cB+$>W`đۉ?n)B.lLtV+ݵۿ;#o,Gu" YNT f*]Y#rzSs`Qcfi@8WWNndMD-[:tL6{7|#Sig.[˿󐒚\ꣶO)gϞ8˜[bݙ ,&Gs>j?*G:+R+Zv5#q핗ɜmT +WKQR @ 4PczXϛa:?8Kݻ Sc4`lT0 Dճ\`S9ۻ|7]tc@EGgGs5B̼Gb[irRɜ11ȑO[KGaqB$' Xcnfi@8WWNnV5VBz BHPM~~>~˔ط??a?;hm`STG،ܨZ!E{s޺c ÷?g{>֕NƟV-p R^ +!}kFvi=מy+[1 0L`q)g`EcvS~:| XvnbUJm&mQc<`iVyvigWmms*ϛ֭qMmN[tGBU*.m q2Y؉}@IgDL$*b{RGaS/'`ώؾfs,[Ԃܐ*05E2]2`z35lK&mJ &s2_0Lǩ( Ē_X6Q+Jסt]{$H^i6݄u;Ǘ8E?9Xqba:'*eP ZU7+錰&8x{0̳gŽmǦ R>_{ كx35=19ڀ}$\4-'6 ~(~EB߸EcQ>?e( q/E&Ѭl e՘63re~+\gaʇ>',\BeOeHϜg6uПVyvi<*AB k_Z~WOVyvi(Qh<`i g{ۃbN !&cyls &mu ?uƼڌaXqq8R^FczY;}nU/ƉEkHNJ[9d FAq>,ZAd5F6r,㈊eW!aj:XC˟mlb)9rK B0L!). u u2]bޑ/֠LuR 0L[_j&T>wop[S/D}ꪩGRōbs) XSVnO9beghH jB3CТ"uR?mt.G0a}2Qn,*\F3D1֠0[ǭQJC9[tLd tŵ+ z<\21ks;1H[mavð>_J8~C{c7cػO0 ӖČTS3aWcƍxWK,Q]]-TW`FJqY]>~֞#d㋸Sq4$jqJ&D{5@?{Ɩ{ \[3 +]ab ?_KYA BNJɫ}jEɶLvA `Xk gk{0Q2~ )ك1:Vc?*o.Ӽvwig3穴Byuz0Vy[)YZI<~l"\>Uœs4JE~yNs ?(sr*m.ϜgSΆ:os=Ƽpbe]c% 4 F꫸;1k,3`bў(,F4o\Q-yt;7/s!=X~\1zf~\ߊ*!YdCr|T\:뭷\Wšn0 ô_B|U^HQD:9 )cHYC6)- zݼnyFHq'+Wwe瀔Zuuuzz _C2 (([ 1lsv.t!tFqda3ȶ@ו?j -'1vJ&b$,! 1N(Bu :"=$gV8oOQ7Ub85KoX^;7ǎv⋯vz),9| {"ԓr8Td=wbUe~] saU]*.m, hY@I<~lVy2BSVKL f,vg. +p)[Q4`=C#kk"gQ^5y9˰h @U&bƮL\%%L!šIQHZD`T,:*eמhQ,=E3QN!9 7[n߂^X~7bQ zxGmچOB)` ks92O\τ*aa: +a+n=?Gs~%}1z@<.ӎC H0 MƾpBO||\u%ʎ9oeC[P{lُ4>n]-BVˁb@Mye|@H${P>x)پmĨ]_^JJї|>yٔ? A,nEXC\+S o]iu_p,\5V}D! m-(y-ӭe\"܎ilh퉂 TJћZhX?U7Vyvi}YnrssѳgO|o~dP[W?Oc}Kt/Va}511?9 @ND{,P3*PDPG^`'D% 0䁇0_b޽ȐVkk/ B{ߙqICOC} =^a|z7-؍'/.ًcHcq:>7_s5yb=#kJX` X8v[jcCDB z0 NeTܕD}"g}8WJ%hH4T;S Wki9ÐI>+.-l۶Ma"}quDy{ħwavNm1Z4_ t9]W)as3RMM΄q9tIp'"5C|߱h8UĥCZF KDZj|ţxӇwb۸n8pg: 8nRm+I1 >bKDůrPRt93Y|cC H|U3b~ ӛ{ 6Hh|Mpijg@(}æ| ¡'? 0 +=f68; ʭaa`3٥6g_̨`4EqTZXs"dMDZJ|ϗ(Gٚ\ EqRQAeJqѰƖ}OsOˇ_\Y}Rk1PXX|{.~>֭[q饗v P83&z> J|y8l<{v M7ʊ7- [axp"+@ZZL -7\#cnsVuNk Ǐm7itZt)wU>m+??OX!I槙MT;~ZZvHu2'ma'0 ӖGW)QsqFK03^=N31RwД`bv)kX4(B&krה\&74>3`x㍘6mz!wĉqg#..NCJgyӤAys!v0.dH | E*g7Ix Lʤ6 TU3@ {*iaF fžAz10wDˮk7䏘cm#D4yEbKj\h5& ́d~ w?vǮ[G*zLgA{Vz+ɍƆ GȰTh&*.m̋4j8 CCLJDuTY\>s#*Y30y5? Klf1߻-76ԠtqebTT 4ZS߅% Qw)s^~N9p7UG>w\%X;^ދo g rʥX098YWѕ]6?Bd3#gf˫1W> 'm`9O)sډy1yEai,GE?]Gk+oTj5b X ]58wCǣ2 0 gc%% ֠g c6~ΓysPU;YW{VO>N_WQy9^QWf_/t<WU! ״jŔOISWM=ޮo)/`(53;k7m80#`ZCGd(!y7ipi^ ە߿Zo#˵ҸŔA5*Xf5}mQP?-~7nj́ݭky7/L c dAm=gcضu? '/Mmڟ Nڇ6tF*'GȰso­mZ8 PCcHWyvi'0O姿NJyG0i!E .&9Qk _*oCcjduyۂy3`|Bf^11/iaڇ6c8#s\Aƀ=ㄽFmq8q?k˦EN\Sܪ}&Ea49w2o4%u@*t}a=U`d}K-u" +n"J||2s<<@jب7fD i}ݺv[:^Fi8m1;32sEArMO˗7(cs5/}6xD!fa Q~&!ڟ~],=^,`l-CDi-ipX/^4 #]sĕc,CxjB;i1I.JCqcW'i㵨wA'ʢ71X,:b_v KjZXzh6lۍ'0 ݪ?i;1+T%6ЊTk^ooCFg"ܨ7kgγK<4 Z>z{NbγKZ*/tf5K,dD^.1إr6e?F]`+x.l[֭[\3;Y.M9"|asw٥~&?%=dN{31pCGܵ9yY!HR\S՚ʇևH~ i  l7N!Sh(&3t7v\ rmPzV"s]PP!TZ={^҄U^0 G}Sg](d~_i”瑿5xs:MCc* 5c !ϣ؅LHo 6}=NMUz5_4Y*mM8aڃ~ FaLXų5J:#M356ƚc*7уC7q)F eŽ}xLu_$_A4j3\AאPZ5,L[٥Eگ:֐Ii6>scݬ>FP}Q<'/Ĝh$*C/  i6O"O;=y{Y/։Eo(0 0 >ݳ2|քpÕ$g4]\HP_Fߗhķ!axD"߷&߉0aa: mZӄ>72~$1׈hY8s<[L7 0 0fR꿑snظn.F.t͏Gٺ҆XUW#6Du:k99R 0L3R\DV0 0 㜄ƃrh"KzHʚqqFKzx@uUaiKbUJIc% ܝaa2yh֖7^(8t\um]za`$)$!e&FB$.WWmMi2h$LBV8@ô'[W$_2аϲIyܯ+'轏?614iD:96ou?qWK;'+|>|~zd\76~Ûoż'aa n=vAa7=xا=ViB[ QDWSMuUaiKbU>xDJ%>w~'ɟLK;'Wͯ}1wqkEA`l~>\{6ͯ#\n0 0# '9 .$+kM]-TUbSC=VVc%>1ްTLRM3>7Kk-mUMW@AG 5N⁖] Bz|ơ6LiV}cz+P$6z`XM63kc[7_G>e7M_8}ư=@3Z٧ǖo+Q}\gkg΋UaE r9]KuN<ā؞1QT*a سc8o%Vh0HC(PPUtDuyMz35%ECZKQcGy".&n+P4T#%Ou8QBWYvE$N5װɧn~gm݇zmT%f.\$;H4)mc#:RwjGo|R_'W IH,ڦ*gaaV؉z~#8Vܸ+*MwqE'CEH bほ+99p z`g Ί{ ێM2b}EHq(H˚՞՘E mP>X5^g9r A] ZJ m09nXoaݖc4Ӥ|JGJ\ "B= +B*2'6pRPM֦6@ꄘW48ueBrcOa2&u[(i>=)ۍe ؓF\aUJeZokKVF-^'ki<ǛVPiL E,|+1Yg^OaN3L4Q}^T;6U^8iҼO}W↑}Qy6Oj-mr:{߽${lyc?s-J yOΈ}x_WB^2IkEWָjꑔDq{S]y92XSVn/ i۔popAw#,3%e>Y"m|.EVt;>Hc &>);|+mڦu jd ts%נsU ճq}Т"eDq9-0דumqtJ&lG=k>Q&ZF5?W:''>dtү^ugt|w*=P-nBFU AMم]Ji*חy36m@V6J`Ml ̰?ݥ8HFar}Mȋ)cyCΟ P7+YRihPvvzugMv4GUyH (wDhcPl }D1>Aڑ*VXG=8%Gt=>%-רx +׉if~SP3db 0{wp5icj_FEo. y0 o&d[Űϡyн[f~eoS$^S;[Cv!֬)Dv_2R zJ(Yb(mzǣ >)ic"ZcBƲ'*", eX\O2W,rw(s8:pr~c>qRP>Iq0R"8 o0rPHs2-P(=fveJ50!5uΌkĺ҆aa.Љ075g =*S%jRd')ˊZG(w$WG ,O2@Z$II=vBҐH:7)FyysPN6v11O!T\]Rzx6J6m^K tFYk#Rz d]E,1{Q.yt60DHu嗐KtO'BXhG3QqJDR,]F;ՕKN;u `n(vE (Ykۊ_DCm\E i&˰F%Q'"WCHYxP0()^*NwlW^CƖ8{EW;;3~ ¦^b{aW8&-7ڲ"/XL:#îR 0L[3R4v"Lp I)`{!瀄Kߋ[܂ngkTFcwߺ}tT0+Qvx+dr~Mcޘ=~$iatUn<4x-]~ȐǂG0>m;"-xH>۔DL + مJ1@]uuK1s A+2mfP29 sB `ҥťta'iUI>] t~y-ӭjB,WYHnjC|J[m@=Bd~Ǖ!WXܐ[ 84_[g}arm>kؒ QLyBUb?M&kHQ7-X :dK.soh^m$jFi%*iU.Fxr. A}[EI|nʥ얡`n B|F!^+KrPqd!* Jbv#Qۨs4փrPue2E saPI/6enC%J;y_M҅~HNҤSnly]m|nUzDM_W.SʕRw XM`I|neJ7CݩtK O^'W)'{gc% \K. 6L&I QHY](n.#_ud:3 )bȰxڊu!77={GNKuuSĺ?얤$y֡\[/1'ϊ\En!Yx,( *G:2L1BdT(1gf Ci9NO74A#\RL: zW;SJs0׃+ ֠i8ꛦؼmP Ko>eɠ4oTH)i\Nx= cDB~,QSFQ~&8&*UJyJ#"WYbVn8T)pZJ8P/[㒞r.0񣿗s:MC/5%(!\5!W^g僨꾷 >U)&!i\bp#$T ħnbAV=-_ Y cFiCui2L#Ua}{WZ{9/%ZB&$m8QqnjmB\!d1F+dFKYh$d!DK1)*/1FiϾInY$?{cި_}1,7=KMmW҆5&9`s>\uߣK_kheY㤯2GԜG`aWa$ZU@:/ e5 ,)Qq?6VeCE2eM{qs/0 ô5?8ǸiE88֘"42&TDk UFzMbPb:P1mTQcPSoL8=F'|q4xDQ+cm$'ӚbJ#uߊij1bZU&+GjS"EsD,6/= GOQƣŴ?}̮/zL|kT.DCA1MJPVo޶^{y%1%2}nvI<^L CzR޷_n#j'5_Q1oz_d\uRlŸ1;y0v1n[(&VhHƏ=g?-]k|PkIhFSFA] 1*mNֽcI@͠r 0 0 0 0R8ƙ⦩K_T@9L|t\; ـW'YhaaLGtGoϜ?/D=jzDƋƓ@_ = 'ƮiR!ih Yڐ*FF}c䄣RxXHZbo! '$~WB7$=R9RSHR]KHFrچ=BRih^BT\nB8UEV'z</~U˷V4VVyLlwƾMbՖ' E$-WROCFR!uZ_Фƕ Q)Idm&U=9S?tM#a.yE;9h!u)_̛^1ǽ/NI+iDŒRM'yAĸQik-bU*07Yh-O̓46"N ;Q(~a8 s='x=6oެ/h8 ] l{ (ɣ}뵍 n0 ӖǯJuv+nhJ}x,:oZ_MM Sq +?0 0L{C'?A^^o_`BQ=T(EtE'e]=,4=1 0 iRX ,8po$Mrє ULݵz:*iBL]8 f MDMwbRE }{/>$8ϼ}Bb)8qN @ҁ<;qpb;NBñIJP83&z> J|y8l<{v M7ʊ77-0 sOHN4K<ZzP`s3`[2WM1[bSiGrz"!E,mH'փ2۝$ޖvē Yڐx&BJ @v!'%dO&O&O H\YސrW=i HT|!VHZR!*PlbQ^Qj !*X6QBCp@] j1UDE7xv5#V{鰐ݓgI%,p7^9.l!kr$]ݵBNNXȷ N&/rRyBnrLrCu;H rL'O$k}W iΏD-'{ޢ18 ~ &&8fPDJ:#0V⦔јgD+bKq{dC4Q^ _#/#P8 X6 i_lyu10Jml"kJÙYUdbL66qMfqǧ2bX`-elief爷v(/[)L do!2SbX`ˉ6i O[-7b5A i=u !VX7Nl:h,wy]oQKv̂MS1J=eͮkO0#P3 T^2g,N- ᚴ\:@="JKվFnQ!=_;_ΚOxW֬rN׼! \WKNȗGrzh!;6+?;!7Vz%)&O;MVhDYcċZH\dgix+Z'1$G*P6!}R]BrFC!g' W΍6OrN!>rZ^~ Z piyCr% Queߨ~" Ŏ"ց,m}MwIZČէaM܍~r}d"V=G3Oqڍ4$%9QܴLLzC;r GVc6RвA%`wg l523{[?wQ? DMF]7&h-`+ FYfnRf,5T8t<(HuC6cܸq͔6DC*eP҆rW# xF;zYNaaN=:8FWלbA:յhLK'! xfA\GH]M:- SG"BücȼlƬ5(Ra.LF9 uWm1ZWWaJ 5/À2oo?nBS:]FC["񾠛$_?;CQ x-4+GPzlyUt4tfyۤLX5Pܘ284N߲: N k`Ʋ׏}*s2'!HF&?Z~̴^md Lx?tcx_baTC(n<ޡ6EQO2@Z$II=vBҐH:7)F23EZK3ȷ8%F4 Z^2-&rE 7hX\.9"1h(), ^198S);.% 5% x, < @0FԭEǯ}P[.*ZgB[}Zj? 5pzn=:/_L-:mo{ԟ KGbNk s!kj_rEORVB9IDH B$'%DP!^HEK[!2PuJBWYt 0AQw.wH[RT\8wW!&%8!uyW !N''_*dGBOJȺ aB׸+?J.du{B~2\z{B.Kes^p![ oJ;)W[䓄THTŸѿvQ_KRXZ{&&ͮMژiۼat pV8UF-1{ jHH5ćUzkGOkwA#0WƬm 0^Za6ʑ$A_?ې^wa뢓ASr AZe |)D)?}ऄۭ /|M@ʗlhLQ!%ka>4PK CTT)6CB?w붯- UG`tM"XA@¬`%~08eKLKɮH2"kX g$>V!ܣOpjkRlh)n\1O3aR^cp,Gn8dH@)ȉ.5J1 0mI{T0$~'/Hghz=^xLzܕ#Gik<Ź>3;Y*Fj?"O48ũvGˮf$2th yPl[("o J;m %4h쳽u~y1_OvgddFsk/ ,hhh@qq1n6ϱcu1XQ.SW)Ms.b4ഇwWh8`4e/(|"0e?YzHnMU9l 4ř T/$9++qZEN.7nw#f7*ZvT]"_ft!swB c35+T99![ p=+ӰVM.#!ꕒOu>20!6ʈK|yOȹKT4j?rt@!j%8!R7 N|D jN N,C ) QN\ 2uKB%BUDZJR([Pat)g]5y%[)nȊޜ)Z#0EH(pd >i#Ⱥ(MwQ_:Rp{2goEA{i 8_=Rp[ZPd }>J01{. z a9@`N捄mye 0L%{>͇{l3NbV؉zib% KZ_YsCX4(BKbً<\ڒ*0 0mE]z)3탬}>p8֚,h]kQ=qMLMG7]Q)@@\h)d<9dLoUpU\0>|z7=s]ջKLw|"}@Yˏ(z\'t=PtW*bv?=o6}?o靽|w(1]\i ӭ5n*D߸3t{ӧbj%di!MMr=#K%3Mmjh斡\Fu MxgX-SUۥ ')5)z\1RGd'cm WZ1aoJGb:b~twÿ}ULI_wyߗ)bzIbNw: zqB 1^NL&yt҃rVLݺ`C^ʲZL o}{dr;ݏ4FݣTߑyvi"Ү]s*5R~gbe[˵glr*ԗy Pg /ga*0 0 cv#))I(lHIcLHHqq %-%$ A68@֝S3gR>FcXl@m>0 0C/@Kdg5(HysPhP+c&歞PRy9ȖIɓQ-naCEQYj6o,8v<}i?ts}2ut"(ߊ)kZbA)p-n̦䑂Lߏ>h N7Vo-ZRyO+YE)w1hjbZ-J9ULlS}S7Alei>_ߟt˚DzʗӧZٸ_ -z?RLMON6>]/ߋUz!n(aG>8s~-!R]QeUGzimؤ[g(˂- S:z}{o vQ_C^U]E [xXL&uV$_a^~ ҏ聂_9R*/{{u)}/_>퐘u1+x1f1%F7t˛?zbbcK)Vr]C5ŔHS۠X}YPbUFYA,m'҄U^0± )3Ay(eW7X I_klӋ$zslq0 0cE-܂~neq@d ύ@!Ҟc9sN,i׿--naaZOFa D~/B}gc% &Ҭx,)Yں:֡å q?C|Ҝ3 0L`֥X8y;h`Qo 12M&-QMj=F9?S:=>u7 -9Nw),mKKӭh.}1}=.qۺ!K24otyUU_"ot걺5_vQTM`L%biwzniI%^U7q%@w[T7 JL1n/O_IYkT|!ڣ*xۼq]}ke&3NZ-Rפ/sנ3\{^[S_OL{s>Йә}t}t+yتz{u֬\nyC|ؤ[Nc|][ b}H:ƭbmW\U6=kaqwr NKE{{%@$]޶Wͯ}1wqkEA`l~>\{6ͯ#\n0 0 0 0q" +n"P83&z> J|y8l<{v M7dيCӡ(RQJ&B?d7S._` msYۜe X!#]Z ͨ1{k\q--30L]a$V\,4V°T|Mr5}=3EϳD;{'cK .K0J|3f._W ȡϢ t=+Zpc )> WOnhЯ 4n.ǍTl-,30-]ZRspb<4a2과r_ yx{NtPAtSH]Wo5A.@"EwZQ#Oӿ UVarژOYE-Vws9{͡>:r~u7Ǿփt} QM~g% ILzvituiWc[rrՐ%ZМ>]/EKC#۾v?Gu_XүxD *=Ion~'$AvA×bzߥ{@d %OgtÇbJ+z0ޙpq#ٜ}qnJ[uUP--US_ZzQEi-ZgR(o":"w6wl6&x>dvv<ԺLXA?V<霛ujYpMHbe?'m4p\gi?8n P;&Y"z~g4y:o]>s!#,op6۔]N=o#^yw4 }0x(x`k8cR߆!x9z΍(xWT;_aT FÆe`ӒPPbCx:,j_loYw7&,\HkrDw+hぴZUA'U`{u`yѯ+fZ7u\AA!cvWA:{5Fj9t, 8c'NS~:N9 ;Ys7ÂE0ZDĀ[i{bWIXcHH7 7n.'.wUՁҜN uçZ.=vkP ߗ@׉G0~ջhAa+^G]vuI[7j9z0:F\=/uт B׺J) ?mӴ4)0.%X$4V5gTh$WQ|R'ߜe1iN{V_ZK)μ@hpX[Xvo(;@1|3Cѹp -%) qΨh/Ga$BPB;n@Oc] xS:B0\QܝhSD*|^poܯ7BDa':#ط4El5g aM+9G+P K135Lɾ_=xb?5)U$(F״RLHtƋ%JQr3CP44rFR(ňOfc =]JDZC;&@HzҎiF㞦5nU*a #kDA]`m37~N7ֵ4uy~*apxk-%՝gR l='Zp7Ga!Ləaէ0Jujw.3iAuzDMb!AAHFOqfl ɀ8cF7Ah8ZµPoJެ .)JD]G]ru~ 7, āAaMLܧ9G3 6̐4pעX zO-\NZ;tp;Jqe.mb8]uxv tÆ0xoV_>}] esݔԻPUZ-ڏ-\}b"*S51Hٟ[ԆHGAȋ($Nʕ{> ڼD*ZBs#$ۢ)|Lx"į*ŅQlO9RORuWkvpF=)7CQu3.zGhž~x2+>KܤarK \Rt(Hq:>g܀XJ8"P˃k`*BS 5[cNMG;W#ins?Æc{ʸF6@+5;Fqs(5yzGP@Mף))kVݫΘx<ń(lbRmoIМ77>K1p0ūΘu:E*+SgjN8#ܔb~K%FdM џHXG3([BE;ܧ5i]FO!Е"CԆ sr7$N8k4kv®vʯ`ÔjO7+V?ŎPmaX_4E?AHP(GzѺ5=T`!8qzA8~NP*.mYc tgGKvݑ@'IGP' &Pg8uV/=ٰi6̆~ʏq5qѐth:&xBJ wUk#ml KÑ!xlL7%J< %CQ-Z|f0?6?}BO۸0X,P5Ҹ!D5XvYW]0iMG+ 4v: DJ9n;w&~c %ø@vd k^\x1v\+ȴoivԜBH mKbr̨i7uZ~Ʀ"qq$a$uPʰ-6čR dc;氖pĤ|#0>M44mVIs9c #)y*'&c53}KRD(АXjƖǜ2v!})>ŧzR;34iJt :DqΨ< (LlDq-mo-/n軪ł.(>SF睱 ۮ))awFW "EEq ͹d.Na'R R:? N71Ν8WurЭBͯB.̋N%FdRhT)k*@1S/F%[us+M};cOt E.)^EݱxQ S|?[ׂbB-xo};D1vWEܤ:gK52aK=Ͷu3“SԤp߷8EbugL6{/D<6䴱sڸi4;An*p(ЋlQn  J37X$GHM^_Bs}(Bz7oc6GGp2>:DGBܝ{PTswS/@HfK#b%@G JsZ1_LX/XHݓd TzC~0uCpW =/ 柩 6_{:ʕZv9.y$u7`" ~ӹjcK >)ARdT˸q,r LWQ?FW)`gX>(g,T^ÕS]8?0 p$%B4pc@-n]N  )FoBòemڴQG=aJ-po WorcM?F_spp>-s|AbPN(Z(xa_V+|<ؾk?lPnzy6~ǣУ#!k`cXݠlOyDoɈAO&W_WB_`fxv-H'.} `,XT?n>,h% Z3յ* E._zxuZvѺd@x kEsXI1F~prC'"E%3'%!te>5:" {g[lHUe. =韤_{tŤHw&]9w^~ם-C"Ekm[&wa/Q6V>"HxM!IҔFb2ScIQp$AgRvn9_kHiax^sds\Y3n~%IDWmYσ#78KX#?HF]Yےْyor^eHTχ"8Fې" Iٶ)mAz*aioqҨSfS)|/8\#s96-K2}-~KwFlg޸6˗/\+sA$D(X\8xHX,|Ahgi_'_ÂJ|7Μ oՁ⌴ʄA ٽBj$҂ y |j]χO&X=]A\Un*gSc'pKBSt5̏lhLذ3Nt'+:FH໣YZOȝ.3ɔ彥 yGb|~H>?_   nQBH2mc{dlcp4\]0e74l`gl `m[7`B1P/mt~*% wU* nGc(PQ]T4xPYhH>C?5 CW˹7îV̾6aǽx43C4^ڍD`T$۝]#,f&h@}kq\?wEB%p~^=tL>-#EI?`Wh?#r9ZƯs/Gt6i']8+aJ+Kϙ»Mow1y >ƿᑇKq4*:Uso|dc;i C($}y#AcNb_څǽBsWL:=\gz(Y9kh!v1;Qi<_#we2nk>Fuj^}ߦ8vEr^8: 䅺GHsd.>E:`⼽s%mh@.`Up"E$MZaT\_^"NڴW{uwFpx 5?H9c8]mRq bd3K@NhA`w!즧<  %7B1ƿP~GUn*!F?6O۹G{^#CTCԛaW+yf_ް6 B'|ƽ_#a~f~ O<ϛn"C O7?W9zT˽oo!/VB|r6w/nNd&o䰼eMI7%E#U'&{ ĠNq\$vgHu9u ;qԒ #&ӆ1;]5$=ZbmTwK9^ֲ_lOfsq<%bHw]$=*!EV)Gڷ!9|xN^=u=HI'FxEvMLQ_J0"7jH{HBf^K |Z̪zKkhym;윘R7WSmGiYIN[{%kz:oo7IɴLv;4ݶ A=QX|bu|h m0Xc._   y%۬6XR4 `k8n#w#h% І. S~C77!dINAσ%1K3qאД)m671-Z)Vj C5~ _Ao\ 2 "AA:qxNuAÿUR| ѻULS7ԱK^we=?:sܨ s lɶ|V<4=)"]tXqvM%U[=9n6*Ly+?#/i}S.!}]v:m4 t&;kyvMN숁߽)8΃u?ν3{v}Җ]DCV ooe3\yҎAI!1WHKT"#f$}:o4׀Syi㜎65ǍƵrވ6GWsSL@`^O/=oYݏF^`.?@P@jبnX^%!zN}i. ޽jeY*a.ک7|ƹN۔7NXܠ Ъ~};Y!-b]k̸z~E'#ȤOT8t_u@i7_mݡ rw)O*^9nʇg`Pv"Ŝa)czq EWP@bdG*_ 6N& BTh$Ouğ28_opA.b RV  [P)҅[,& Šz/@Mσ]%,}? O\u>KLRWM&n<ٛA!;G D9p$*& ;X6O}Oى~|'y:n\Je'*vVIݐ8PZ?bZ]ʠ Aj)8ib2; %s:~]I'&$xvYL.y9Ic)?US!]鏤=Qq:mfL:`ݙ Wz%Ռ;/N<\y+)Rvɏm^ 2,_Fg 3s|-__KR$,O?vZ܈ Wf>/IѪ~9+N&teh/?clm-@CJMA;Jd;T :o ]G}x}0PnsRʟR 1Mjv]U]3eڳy ZvZHFuiZ]/ WfMveU2;{H:8dZ괉L`YuXmI .~~MZ53sv_z8MJ~_xKfb֫G'}_𺪔/|wpOZPvMWԭYNjP`50&"іQ(Kdmf%j9~ j*Csxds8pϊg  5 p0VR#Xw6ʯH>nFSEͭ6HNA9}7Ol<[];\LRԱG~pPc .Sˀ`׏B*PoPƏsإIh[o1ؿ+}P>l~XGfl{ h>Ĺuf3{Ә짻Osgnq$%X8Qkj ~ar7kq֓_ӴہQNd*9ߗ'XyR"Ps%4(_p {q+'ҸȻ't 鬚ü.+fwwU?q>_ ]Vzz$;fino{sE8Oܓk/q9o@uӤȜvXАtJ#v*ݲ\y+=]f\[LڗG"E*~8*ğD9oD}cTsh9o4ǔq\\+sttjy㣞w&~Fv F9zCw 5ɪ)U7YQ~xgE-ǪBS Pg 0w!"bx:\weWKbkPD/ҨNu3Y%yu~>vڹ2YQ;W:M`r\O^ f$^mvMt]z:-s^sČԫҥG13'7[ =>F+K4Uf_%}дN h~b5wd)׸ ڜ lV#C`]vܔq,.Zo)t<=t:eqLQ;nSl׭m}=`de/¾(7H~~X'ȖD:0m *#=7)Y4+TX{݅2uyI>V*  Br`;5FENMP]i,F[AJ wRUa7x6f3<7KZ1 , mCj~&~~$f4<+l*ޯ0* }aò^iIw(U(! < _ \i75OXrבoւRg c1@G ^]SP29q:Rwr<Y󴦇!^S,7Q`o-01vԧ ŷ+7Sa3oJ6gv)~idx~gLИb/AWBpFxܟXVHaפ&]qŧv.SqCg:Gc6׸}Ha] {!gL<ɇq>#uh30+aS3P9(8Qo3 +F Qƨl0*E@I(fSj0GAd_" A18zEQ;+JQ`4+QbU vuJQ7l)JP16i= _s0Eb XEM (vQB;ڹ^iN8vx8?:<#hFxiN<8\c2q~ 9@mLF)#MN@ 嗆^H` p'-]<&"4d7` ob53š  9JH=?JF/< 7;!#%7'x}˓jL{Q.kU .ڝT9`zYS>O2ao %wiV/[Sll'ΚC=Fwqy'B9z<ܡ$ꍳKpYy.I:=܏Q3aV4%)#7 fH&33dp8ë}/8F_0W MأDUʓˆ*4$뢭p80(l>ij θ/Ey;hnjG(og jB#xc ńל(뾕W}(~|cų#:~c`2boVlxc+(fѫ;5S}g=u.}sSxv?ţ;)V5-WOmTiWxؓ9|%cWSv;LP##獫ysUwߵ׸ vtliO`4Sh P<E(L0 KS3,eL(|¨Gl00Qhۜ9*&QhK0ΰfEMSQ"'J3'P(Hqf0E)$g(Gn(RHBL') (n&pu4%(c #skLvvi8MS?Y!t5ބ 7 VZIf'q < +h~ܷ'irB f6nliM@7G-gɭ\n.Y9&N ~pSN7o='plL kʐnʡIvLGx=i/-%qL&9q{?BN`w"AAp^p`#.&K*,>œqaXkx! , q0CL'$Hk:n&iĠ.>oW=OoʘJikI ?ŁVW~VυG2&.vMȜEu[m 615<4@1 oBy~o;2ꆒy%J&Iwb1k[s%cthN6\}BS.RǨ{fs nRso?}f frKW)WR!TI6:-7s:)(p; E-\":3 X*QMo͍-$vEjSEQT=%1Y!ZQL鱞ϟK(7(N|Pg|nxJsO(jیbΓhrVSA)sZzU;Q|se.~6E[ᱫ(B:PhB)2rޤ{U㯡9Ѹ\Ή3L mr`d. |WPfj|%z*(Pl6R}h lru [ 69C𷍆imR90\ o H-_UҘˤU|^fK#e=8Cڽ`Eҿ2^˂3~cpNtȬqߒ>΋X5 \6:l4۴z]w~iBIM֩y4'x1)RK.Oy֝t౟Iş#ryi[gI$E׍ƉAn"E . 1f%]vWงt% |lbM&"976{"io9$G)R &xZEG);/74@}8]%z^Jqc'@4X?Hh^rA<ϹXt ' m+m0,,Q;n$&5w%ɋzt)\3F"VW ~qB2cW .<&<ЯCNEܮѹZ<_8]64z.E"g%# }l{;v˗&/ fM)g0{_Ns|!6o'&:X <= EMuI5Ի ot; >YN ] p'Ryq7n z|'5m;8nn/yqc4O'HFNOOsi:-x9ddS}?}lc'@a?K%p/)rx#aH;.B5vO /('"2RdlלܡF!FcXpVM)}GKZ0dD'fҋKt]_cG v>`-;xfTM<t.%~}vϓ Hz"fiv݈;H9o}<']u\ _kU ^wr&Nj$$i߻χxMҊ6˥LQ6^n` Mt:!׭d.N Ep~ETdaҪyuK>OOsLq"yۊ1xoCUwiIU32ΟDH+1⦍:C(x8Κh}l.&]sب]s޸:m4rZut=qq1|Qx e;sϱd1|*L7s 6ar7u9?z ImAAnS Dtnt/߁SEߝt}:   UJA䖮Rd$&Pg܍Ukcq hҴ1=:B_׺JEGGÕ+WRAvb2x0q,*xzʇ? V#/ /^, uʨiZnA[CgfFKO~&6{Fa_0He;wf⛡ʤ'yns`Uۼ!Z#`=Ȭݑ~G/N 5n(rfn}zRX4/tפW*2 jym6S#~5"f+)2擤!}'Uv27jPgҰIݻL! ,7Nc*v5A뚨c-ĴufSH^s?~\A;ςūnAD^HL$ +!jrbK><=LQ/pIʛ܌gMgzit}^-a6\)d2ЈhD7 -tb/gpuvr:fx_R?;az}t. P[.Cd}Z2I 2S#+Q%E7vfHFbMI~_igH:K_]JkbAż?Yb2r^7%ݶyF;j\]Uv5᭯V>R4>*H)?=icKm}dLgd CK5xvn)^n*|q,_OFBZn<@u\T]6x>GbrlAFۥH'" }4:3' 7v4(=IbZws S7D}Y:ou!=)R8D&$lFќ55_ɤOf.[lw=-맗|:e.~4:Hגo9xE.*U]<{:5Eh V͹^S.~xg=Td1Roˁs>%ղ)dag̩GAfSEi>:m|yz 9osۤ~ctqD.*!ZN! C?4t~yizi)Ǎ.ˋ^F?=Boia=#fs|i No{l u=渍kݱ1Zeh=f-kӨqδ30O{6c0tU`~bJ~>!r7S?qI)zCT/Ա~'Z.Ds -Ǎ+N8tg%"qcP+rä:u 8]HUypnOQ S9Ώk{T}7;XgS6x)(oC7IG?A)0jN Gȹm}^%E3kLܻ4#ݥ.??҉RX7}QyDu:oq+Xr4ߗNV=W&9].&g(/~?c<,&F]Nyϗ"MmIvjRbyOҫnϝX;U6MX-ROu[}Wn[ۂA -Ikܿ_<8{w:!˱eqvޔ aKeHc7{;"bל6U bQ5z9m,.xT?;2379?b%9n YS4*`N\_H^.yJ•,=J|H[8 : 2Za[`X 1 hLjvs~9n,v| B$t+6>w{o Z4NyCim qb  Ըqq> FAP`)|~H~0v#x18vlT7f/ǕI6efqy)Q.}=#fH)ǻ[8Wqǚw@wc@U}̱:T_MC)Ƌkз3:Pikށ/R4`f[%o   ^؛E:h6HUޓ±[f,>SS/hq8dX&7nx 49P$"7@ =;b3Gn&[wPm<{ moŞqV?,Sشn:Zs(<xp?Hv@x BĆUEN~5Lj0nf[CYcplL;u\c=OjtWZCk(e񕠚:t&bTwRv߷O@n*.-)?|ҋ_e;ɽέt$nOH;+aD;R:m0,坁N _)MaM~U)b(*7h=D {)4'2ųe)]6:cX+ϖ~fUGPӔQы)m挺Oo8uo86Ezq0 ER(_.MQ6(",3 &QPg>6ʵ3,  JHa6X3 "K7 th]W|N\}ngFӲBn*@sd+`!N6ӡ\R U= 9# qLjPgapr3wGwoʆ<4fw8|bT.W6ЏBl%tfIs bbd BR0Jk](CPB%9<"P~蠜h|o`. F v^S}4ۆ^/+^Qٵeiho6yZ'_}:s3{H"6|zFhM[+w=*B㧔ws%cz `Rpm4)\pn0~u<})N[\} u p'-U<5x Wm8ރ0 aULs.w%&;]] UVACiG-']6Sal̙%_)x0+0tP'?=+i%nߎk2,n52}6 Ņa O?dqi*@`6PŽrlQgE1`l~[Lq1o5QfM9=С-y߫uY8F ֽs{<76̈́qfN=0.37uGpAŸi?w)߃xj=ՠ (uq tr wk@@WcEh,8>Qm6:.`.zqs9+9R9>ϥq +i=X|}w9Ixw^_x__\snݮAȃ$% Ex SWRr[Ja)Y-<nw$n*v¡̇a':e ߁Jt\qQ8!bcEF)f\IL9g׏bJբ:`E;#7S_JQ# ,&#ƈJM&E\g~Wh>"v8$M5~Fq[suTKX;c g]FQ3ŵ}賂O< P k@KEĤ!5p+(Z ۝3)_qg(^.[byxa3憕u m(^z{K;: ;f?Lp\őRy6VCkZRԽ_{9vpg*PT Fqz3NQ`2b3F #q> 2q>1¬\+0.S:|qxB"|lO ч"M1D LV+EJpQh%Z q3]iY!/v%(GFR k#إjk< OQi KNX[Tcgf#w 7~zS=?P65pyhgWfٓ܌\`u,a;/dh.B7iߠ О|e[16{Ñ #jr#G )*@1ձ')yg -[dy/CqhqgS+̦ EpOFk@gA3|MC(o(|(3(jlpF~(')-A^gSX׊~Ch-EP\<ᛁ2;(N)Dʽ3.X)EU O.9|)"m(F E\F3QXî|0@P>kjhMu|AmoqLhM"]MUŵD78+QMwl&Gi7k<⟺eš0Һ Oaɟ9U&OL&thRΆ%@XH!B(]VpD&@ bnނ7x׭Nkz1*hޜ3`~/FF~}^P޲gWJ3p?297Z},b5Փ/G*%]pT!I)WeRURq&p`YJn7iSl8P#cnO=!פ5݅ `Slo½ARٖcyy!ѹHirKW)A*0,[ѦMu45c`۩eS$j ۷o:u@ѢEao S;9~I=ж͉: ~| MV0FqLzp.~A<ttY"myR+HKN'?Kky}#A b1 %EmI1 8jN#:8ir|gBsc I+/M:}!"߳n ρ_Ir|_s6o2-I/KZ!Rd־H7-؞tY~m_Po#}] >~c3{d:oW%Ʈu-~?Ik?Ս+@M뽴t\~ޖM_I r@;җ$]قu}gsE&vZ my6aҙ7VN =d5I<8osޢa)ߜ ZmSISQ}ZJ77Λ87MHiUMwByR7#Ufq4ʏlIO¥(vXo,7$[s~Fa{Hý;Ǻg=ת{W"vgKKΑrKOҭ`~ )˶//']iv9ϜMŮeM?awE=/8nQg&ƑyϮd^Q %xCϝ}vtJͷh9I#1M9nA|kme˖IÍ  >dRoAfoSMzW)ipC* 7pH͝'1MJMn*ыfD_vd6 7'KA6X6QR $t¶oBǍ  &w ˼4\xiF<=Žfknxѓ-VXKNc]Z"`_vB$q>t%O'ҍVvXPNnUȋǗjΕky9ѣx] Lvr{ٝcmI4Twũ7صV,8>Փ.~Rz,鵟]4ov o~O1#&+ΘU "?Eq5"MT+I7so?{p|UˍrL/lj{ȚƼg]>֭6 ]ۜK}#?7wof9mʞ!E~:Πob>WEsk$`g]9׌|n~>bhX&$sam\w i%qC{oCFs wõ}=m6]p'5NlOEq  ?]C7ׯW2G6Ͱ w5}0vf~ gFA ⸹-ɉ&mOADw5Gw 3dcBK LdDe 3DvX<`r%,$}ؓ\CL <}ί;F?ށKICר;XvNFI5O*H5~yQZs ~Gk}v`>(N1g8|gIg]oќ楢"G[f\9Wc?~y#BzK?MwEp+ے~}YOQ%b7>4e!Zie {8/<|Dk{YmV2˗7,cV#-۴zީ%p8xޫ.;q>Wjpd[:cyq뢻ls~g\Mi9o\؏yS5WҧmyVǍ    U AA/UMn*Z)ݻyzFu(8Ua4Bd;!~ H?W:~e]<"S$Qy(ϳa~]wVR$#v>A52R]Iyѝ7l;澉jBoy߬ziEIî8n^++<%9W|R]2cϝ"]ؐ'wY;>qߖs%{qNWycYv2MTs WsPo26;w:@Z>63# {|]7snKpd~Di`ޏoD5R^ӤFVr(XS:ml|5<]u0Su  v*7HU)ANS~æoB7#F"-Waiڀ?`I}}܀zonɓ'h?yB7 uq(WoSlDhSN7w:o9_t О[̅IZO_UR$2!44qޓ~\1i]ep vL̮Y5"pd.\ Y&; O$ R$N7HZܝ73wH mNѯ]!'{rʋ8 u:Rdrvzs|\αhR%ޅ{&  Na3\lI>|vs.ߤȋ#^u]G?"o9}?wVqΜ3~}_Ͻ5U 3'""6s3& A=SVb5v2R~K(qxzzs܄=FT[Y7p)R6lק)TV-PhJ(XS VF+CU7hЀ! BDkA}}3h% *! 9}So>,n+Ǎb'Sˠ4)~1[o$ jBвޟ7ހ7nFArv`{K#]rJ\M^wdFH'ݩpPTK>20I f~iU !Ioij$4=ix,I9nsKpΘ/#z# Rs;C>{QgB !ڦ^"ھ!E|MV4R_#<ձ c 9_aGȩ@ik75ٍ20+Rͪ^th;YE۩:mK6kY'PϩpRaO)ҿyJ9{ci)]LF&$&sBc-9{("Ä[(/r-JOןUh!\bcUUzo8M {꽉[ +½( ȇNAAAx)ȚpoĒ/n5P00n6~@󬄎.$AAYr&&*$qX Jao'.^­ QPmk7v;o_3;*p:oTM;ovߴ k#Z,/ꉁ43Tn]֩ra2޺Co7y(iBdRĢ&0NT_!E"q5LwWv'6|YDavt2)ᙝxt\zx~܆wՈR$'HMN%,֒]_9ݝ3\]7>:O|݃y^._>b;zf̴.j39'I([+Io0prbNx;q+pwxr̸]'=Mdwr~_xKfwzPJ+g6&!!!Ŏ'&b{P5%Jq0hk|AA#g Us¾ ӤSŸ?~wnDvhArG ȩ~9B7ϟHO6v(^8nA!SlٹzM6P?~7@۶m}@NOA@0H qs{MΑG=; 11휗Gu$ΛZ7Λ?8Rz~9Β`!H.S:KkNr:eƿȥ_/%^H57x7ZOi/KyzFg:p YC&Tw ~e IﳰhE &=`Oҫ >&v"! IKI&/~ps0NrVJ:ooL ?F O?lq%22-ZۖϾ7RUJA䖪Rx wdAN8nNOP;:u Z-VF7q><*('1:+N$CP(]ȍCUEr"fi@ve 2Bu|:o~˟'c IʋvZg57&·cM#u_;k}^#O{ ߷H'!cH/AZ>k.}213{nZkfM\=jJ£H:yrk$jNUgFGii<3CJN_Ӂs|NΟ$e8i-ExP9>>9U ZKbp# c_OZا"儃3[B j9깩;m\ⴹ7́RҧޚsoTU*0<ة8bHMFΓl\q \tppLqq[Jk^J{mAѾ\bn`..yG B~KP$ .]H.{7"UA;I*!T  Ğ f3,IV) .  vZjn{oSh8v Nտ$&ÄGc@ݟʖ-+]A!]9׎mI? 4K[JytZνvg #8ŋaΐQ)D6Q)DOXeoq2Z.S#j?.S]>SL-]>9iԯƪ:.n^~4R=Ɉ O!izۤbxyՃ%Eږ${iҮ͸tT["?nmy-o}ڷ !TyRʜxƤ^pe6%q6g'σ"L2_?__-ȣ|a9cDے| o+r>tg>zԤ&N0IH\R:ื{;o<@ki:> ׭ۻJu风X\P|u  wETCtKjԨ%+qUht  Z3qoA>6 7kx)qrJXn p2AђKIbB̞:QX"9nyyB7 uD9[WC1EغE6͡[wأԩSmA!zOK{MRz`"=uRܝ<'@  dDN}_d͓Sv AA:wq`Y+BV-yT|B 6ڴN8nn]xr2vxv i ww ՃYN1p+c8'A4Byk?k9Փ~U.*)԰KuSD+EcTi)&Q8ΠZHG?F*/q"]!]עg si.sʲ4]4BU]G/N|P v~~>Im&}=gx?>:y9}Lw)UK; js0isn%E[nN|Ee,I6yI%AJi#>C^v|P/ׯ߷Jʁ  RhIhyv&N;lذڴim۶!CPza  w5B0,YāsAs7D^jS7ARbkP㎷wǍkUSŎM5iNKyT- M΃\;@Z#QңH;97卲WsgFw, =>ʋ&LşqvɕXBވ= R'sNz_WU;aU]62iӿ;m~քtXItǑqNT$a*Lo5k"Ѕ|/$eW1v?{#NwK:柤MmHIDo! -Kp1ܝ6qIG q nq oێ]F446ҥKq# BR*kFyl{ 5?S6w9hďpA!S~o-Fq# $A7TNkj 7&&yU z秩؍HRΪYoFΛ9˯{> '{r>EH<*A 8y[8yd(ASH/ ! ZNH7q~Ғfi3Kuڌ(_^wUW ٦+w5\8xϖ:ЙaXvtW]6Opsiy#vN)evp>F^I)giDz*o`K9ҨpR~}&_#MiAiMna[]z4]`FA41) Sq}3RUJAHU4 *!go_ o~FJ wUJ*% * )[TsFe:1#]E.Rqo֎e*f!)E$$]$-ȉ#؃H,'Fs.So}G~ c'=x5EgI㾺A2m#"T'_JZ#ңя"Ɉ{]]/ݡrJ/jwPȘ QyD~Ӥȸռ?lZWԬW"]_6@_?!u)3͎d.R8aty ?r2i7㏓ Z"GuZk"]6g>/>N6/߷JuA!'mӟ]k5UВtoDU҇mkK<ZN-A4hE;m>7F+>5^Ku#~gO=0G鸊sЌƟiBav}ye){;wjp +I EqOqR-W@j=}~~HCV7~mj]J6[f3'`R~ʇv W'NZnt,n;aPo9W7 E|ZjR|?зg7(V0/Zy;|83P|YHHLe eD  y lT[R $Tr@aIZ)N :UY4LX/XodhĩR l= hO&qxs'@'{AIve8['z ׮F7 u$eۏ8n>ʭ:&R9o\]nO E|̅IS;%&$i@;K$'}ȳsdr05[[m\9*b(+Rw Wg [vyvl~i ri3;kf]K\6{O*[SqyGu߸Wz$/CzծAUxΝ9᾽I9jZô|y|뛥e@M4&;m!n]DZʟG,eIcڕɨ]#I F )ﴜ6?7Z<,Φ[tȌZI5U'U.\6.˾9nBM .\~5 ~Xj[Gݩ5 ~9m55k tmAA p'-U)ƛ<4aㆂc ✶e'swr8lQ s+U2UUڍrXv=uBf3lL&l޾I=zQy8nA!d&%RYNrJAвL&JY)y:ݵ2DǍpwRՄI@Ra#V*Q!r#0)R#3դ!CyZ)΁|ue95ٱ30l?Gs=Nv4+Xmy7M{~_u:m^S6A6+SeIvڸ;oS#Jr}0#m|76FYIq*U13(s}y+G!8v.UkGz4ni!7Z%1LF-ǍVIJ&75OFݶ־oB ÿ0 ~dx98pd *xƚ>s] v>LF}jUɰTQ mժA雉0qeAA`͕x:EUr:}}&J+=_BAۅÁ@2[ĊU7*|4UaZD8Qfh9Mi++WF n.\{9,g }9ؽZ7k_~>|hx6x0sx􃷡M&sAx/Z\.KA:mgrzMIMy,>W Z } ? A{C5lس^eAA`hnYJxFRUH =AK'4\z3Jf_ްV%$.ʙ6?LFK i6 Bݣ0B(F"ō#e[:Ha4.R}CQZ|\}5,OfMgN:{QaEf(Q`7%-ve.R Gi]0v.RحJ "]0v˜y3z4Nb_MEuZ֫ :FBs//-xPg`)V)Ư(xv"RHaͅ)&Ha & pV/2ƪR̯aw F!EݠH ?/ }s- D)^:=dRQ  d?`_=-s}:ޅ;'hikӼ8, ]n̓arO'Are]мa}jߺs,c-8%4WJ dwI/dSyB Bsͮ#^RD NfD89MktƵ[cNE$9qEsL8Zg$юd "E$~>\-EKr[4Kt_uIN\ׯ D.5NDzɮ6~_.аK?Uh]?w2Np9p[κ'}QI8i{]J|vOF^&q/'^nk^||''}~w|]ޠ]6Ċ>yi-xe0Ge $u]#o6!E&_f̻5Yv͌NN뮔qy ʄYF/=^rA;XÍ-Z~ ~z>̒nr pw`cR&R#\Iq~UIr zΘ6IV( .6~Rϝ$]ts;!a3H{~Y}F $Үg8 2 r77*gDkjSj|6 j {^Β(^FHqՃcܰT߹4E`T477s,y7!#};^ ]5?7!⸑h`Cbyrx3d}ok 8y7ΜH yo'o7+qmFt]pa%A]`ܴ0p84<ھ-L]|?ؾ "իzOXr0#۫H%C  DV=>J* l&. r񿫰q^gH.Z4 m40&|*M,K7<vb8Ӱ+A[N:n^*T(`Fv?GfRYCJR9m.DsڰE{ k.DvA X*ƨ]l*s%;I+Ec[K/+"͏S?γYЀ]>wdHwez6 `K]QގZ&wJQ^S6N[u:mNKq=R_IDTd0fVRgI_`WN%I;EA'R{óU[0X^N9F*aHBoLFv?|AҪ8%ΛA^*\U-#I7p*VtjOvnOq v̿D["DY .9yXkA/  BB @G;і{7G"trɩ*! B"/29j2 wܸ-^agaݰH=uxO/iѦTkx'rG7 pki=ԡh=g!G}bqs{M!m ;$iwvn<-`@X/VgDvƴa'^oANwK RƔwf~C5 ]|Yn&՜6.dJ3QN~λ^#^N9nV`UjF-i1%.Q5_^dẀ"<>#9mvocOŤȡe!^8O-4no?'>42sN">Je" "{[nxY4͡X~M@>&Wc9OS4!uZ=8oy9r/7& 7܌Q> y'~${yf\gRXpmA!k䆆7͜Em:jSU*kHW4H " 7'rWe Vҧ۞yw}Í]ң`p5 <7KZ1 , mCjf  q F~~xpwJpHbBJ w*Mv!AAu~7nDe_pA` at=&iNuI9@i\H9?N,|zҝNyTl"2I?=IojĮw&Eccj?R6rn%Evȓwo(?T[˖w+2uC^-%vW6?NG!EE7'uOF\'F $S#$E\KZ&q;"|Ņ~IRސ=wqʿH9oGFZñ *X.7HZݝ7oryԒYɈ{FAA%4k :o|%GE¾\n9ZA!#r"o0x>,nİxbǃwq ­s7#|׀y3JY jL8y  p_G謾3⸹=&werڨ3ID@ NHNZƏKG#We;eseHV!5yMH_%|Aχ vn./'0m82NsNQ;gtXqRdL+_]Gwq7mGfKUyͼ\I.UBZN-Mșhv  Z[AoX?&EHoD `RB>n>EX.%-CΛjyhf꼩؝h,;|\,>|1OLR. Fs̮A28_ÑLL`M:';O^v,j:>=߷ʒ%Kq# BD`3g/c`B _;_ȰFAdFAwq|G`מpU(]<61_&_wT֐RyNm~ SwYaq2𒖺ד9 r !W!ȕVƱreIIg8ʜsS*ϜOޤd{ԋI#tYQ~VҜ7v$}!_&-._sk߂tuӣ \ꡒזf0螤lHƽIly4:q,y)%+O%~NNRħ;.`MEy[7eMgy{4o@XV߈c73õkJka% /CkY/FAlE8g!\~8s/\\zh .ESR DJ=q# ;9w$=u 5j>K~jU*+/|1Y;}$A7TNWwiùGq ~>9SYF.= QҮ8vQo榝џlUFlaG#qKW"<]!=7 +%U}z4O|cKnv oÎ/r>;O:cO}=A̟u:CbiޡS[ic*4| ;e|6ӦQ I|^'K&kbNHr&tAzY)Tb;o~S7H}Xut H"f:)R=+鱸H sDBɜV;cd5 9oT}^\Ņ3܊&>ʈ>gF%)AA;)[24-5 ?(l{;,Z ]ϻ*% IrOU)BP~Weq-^/^Çɓ'iZʕVZPT)z Yq# Νpd'⸹=ΒFn:Z-X̅!|ή¾H2gLHGT?q|]{<_˼;@~};,V兮'z*k-evՌ(Ů//89m>rGHGVK EZyf}9]z cϣf"GqUOmOH>cEH+W>c)S#"9m}bTugоSk⼹U?Ftݻ~gXlяB i7G\8  54\\aA!r+;5m1ބ7DFF ?#?pMX,P^=x'O>4o8λyf# mu?6pL 1|?|>s $ _^k~g B%|EFUʛ5ԛ RqqqqF8}Z/!]j׮ UT1eۏn'Nu.TX~ג&ۻJaCs372yq56~;p_AAaƳW3KS97{KkݡWO_ݟ,HuN{U".=, fRH|}%w"#K%'#:kMD6"%raHKWF>iۤHcRd>'qo$urHoH}z&}傫ӝ˹_[)=7-ݿ^/]>B .(~ 0鉸?I fwm5q;;\{Q竃[OuRLeTUjnP=}U*uƍ6qPZT6Nÿ<|Ap 9wێB|<Ņܝ94Fn!e'm`2hR-L~uضuRo_OۨӔw piYQ^39>~  o|q *Mxk-](SfM^:q8v9riXLZNҥKӴȬٳg%.MvFڿC3:YSy5 tPi@ЦF @[C)@/F|Tus|;CLQQh{AMrPq#OV7h%Ջg'h}dEO qvܰƠl12o> Rm<Ȭg%;ءqIԇ'Đ"JsuoAʤd',.=I-VO.ŭh-lSicqm{ry|ↃϷCNoSev5~ui)e-c8iU|׏T#{֋gۑ+%ÈyiBZ2b-wDbz45{YpDs.|zI>Πr?!]PMxx)K!g<ЀHOD 9r35]?IvՁgNe&uM.Mf/%o?QnߡYY/&SUbccvBt`Î#Xa bK&#pXl:QgMʵ1{C5`tj5V_;,x_uڰ aFA2sAnnYm-H͝AniaF p[][?gӣpQ 6_TF?p@W 6TT f38 侴ȑSCxF 7X.:MƆR iA4&! 7xR:'zo3Q69G,@-ߌ(L0ē7⒕;KƯV y?{r9_"~gQ%~)%O]l׼gH gUA>`Z6o~xKwےϖ¤w y{{̿7^'|-pԷH^wiz=8gN<4jB5 Z#V*<>+R^u~}f=ٓ*/:L:6 {s /mre.ޤH+ EN'q V>/.y\qSWϣ)8ޑn~Yi8 V:w0w\XbDDD@hh(tzI]x'G̕+Wœ9s赸;V]*#T:^/5'V ۞drYO`3ꨃ991PaJ!A8.InA!_VSUAAp'/rM9uUBȁ- 1vBѣGi`*tߔ-[(qqZiK%47솕f tN孷67qathFJ# &!!#wڰ;m4 b4pw3szByRn f2?o]6aztYj5+w=C]> ITE vLNP7O6'u:R6 }";d~2@v \Gu/RӋ˯&vtr?@AE҇w'E{=LxA#cRƒZmSI}MIq[u3B. ݧ|M\!f(҂A"ZZoujf'T63>.[W"e}؞% aGW BmuKsh]tׇ9V8|y|κ"ΛoY kܑqKš}OýKݝfNի]vQ ΃55xqJb|[26zi:NKLD Iؠiz~Oy6iOFA!71z߇wofygog'TmmU+.+ 6xdrH"PjUX"=aBSAgMڵi>l e׮]TeVA;@np`Mrr2-s„ 0l+0iW0aڷRM-YvU-ZtYڴivu+?ϋdq[J 09gǍTm&~51ќ5f< ,)d\$F5H%OKTCx zT ۮsgIn4ќyz7;W4>CaN<&玶&E{87ʎN_S#NW%T*v}Q#~Fܽݼ_ޭȉGFI *Ut9^O+gI^{8qF҈'J9s>}KNB;d^"ھ!Es9_MB2yoRq E %?xC7 ˗'׍+hI\UJAr %9W&AoNWzOn`IFsNuj$wrMNj. N )~]IYj7(Qc bUO[ݣ)Fyaە!G8/2UGK|O:[}bE^8qzkI{oGC H[I_ oUӻ)=_XȎrמϯ }d~ecNO"zYWu ,|)2?.>(KH?*߉ti= wsOs2sX>Υívi廝J|urOVhIk𶤅M=B EAi6ѽx|QM^>/ w riX16)ɥ]~z*iwr*#cKUjZ NƝ/K{n6UW)"aߩw}УG_>A6Q)FksNZ  ylq+IbC~"N .˗! sEEGC`IW,H{g HGvSeսJ鰋:;A^<ɄGW`\z)K9inG8IVyz';F0a' p<.n=[˙ϸ6tt>?.oЙnv\JZj6'NF8IGkV R$uodHdn צ9!"#oF[HS.}~UvCiǸΫn@:1Ҏ\JYīyO:8MKGljd'!'5͞ҍARoܮrb+9qn[/7/~6 ^9n6=TRf35`b6u!r`jFt`kVeh# Bm\1*7&r+j2RQm1Sk kF[9ZA!#r"ov cǍ;p(lђ#~Hq gr^dENl!w'+ӰAǬqSFu'y7Oڎ7F61c67&5ߊ9hI]BJ|9c׽ra'Lf\zv ;Rѭg(UOjv!>9YfG맽]6qyدʸH(4YȨrIGI[C~Mֹ_-[v$-gOH$;Vs y㞿y4>sI># }~LZo4?HD'v| 5ޛUW[Ti/"H=kl#vk2+jxIAkTv-LJOǍ:5nRڵ6m@2eG ,YUFAAr7Ij9pWmC 6lP|#ӸƠ6ڸ/KAl&ȼh¤X6X;+FA<7}ONӧ]g8:uDHӦM7 s 3rPZVDi//׫JF{+IikSYU3Q635 HU mr1=V0iy~&E]$閖ғtYդ"Sm&}H#w'+;zvSO١7%_ ;B|:m d͜촹0"\j]3,nJ7@,ɕj/*gz*5 5()b ]]׶,ꮺ*vc]WT¢XtB 5BH>wwdʛLrwy}=7Xv(7-M >|5771Y c gcCsfg;N9Q$eifKԖF)gL "ݲFB\L?..C$eO1. _\#O'ҳ/HF)7rnFzi["E.zT-EW/#](.$Fw"fX:_h#k<4U4jC"=E/߸uťy]pNIIȅߑf y"T޼OZ5Q t')kZ~71mZ= #nc& *)M,~!"=7OH])x<"u\vyr~/ہ{;4r:ސC@w[3@JT J} Ry#A92AיP#5I7fI͔:PLyS 6/ z+#` B3{1N !rDq @J5ga ///>Ӣ5|>رclڴ ֯_v%MEicD :my@M9=22qt3Q7ni7;?0 ${i7;"4̯$Bh@$)#Xj0a^p _)'9[.14]LOԎZ|[0ZZP:_΍BeeeXтiII o^spE=}QaX7]t!|Ga qgQ(Maq빱͊拱j>Yq7+njOM*+nʣOZ𢜊{1:`~F\@ѩPN\]-sc>rA4PqÎ4=_ȳ(S{j]1rNtT-8AG :EڶaT~_;w,~3qཅ0=%Ț_p3k޽BY݁Sqc681;pF-M9j,L*GNH'æS.NA@m0yT8 uEWF#hnd"={뤆F0DQA:ժ=QJ;s1"VM436Kί憱T]M0 0">!~UG{~g2rƈWld]((kԖaI7Mnhuȱ>s[pWn222`˖-0x`Y P%2t~hWpiae0tPXjAP}zCQuo *9mB =c:SkR]qlW|s#ZKw ]J(H.MKRdIy]ppvRwkvEzC5;vu)rʄ"ݴpHM#mz=Շ^w#$_B$p=[wMQ_E]yH:E!7gۺ]yH]J눜b=]KҦnnZmik oNCU2i[3Hs%)&RDo>ʛP{~MߤA|5%h%R"YNT%EuV+@)dgAR?њO摂 9wo}VۦB7X_+ }/oP, ?yRn=k={ X3lya dggm ,9icevS\cX;A PS:nS1Qo$m獡qIE>1}'qhl6GSSޘ‘й%Z4[dHѩîZ>6H}<3 0M_${Cwcd7|E&K pr{蘭2ģ(n"32xv4 8xaOW(l$A͐.OKacamΧw !sfT# $kZM.a%ܿH2W$_x<Wmw< !9Fn3Sڸp9uSD*n9m)nƏf87F~iʊagh!ҥDtuHH+I"/"ՈˡbiTzh9 7k+(~/'7ʛGwQE;ȶ^]R޸;N)9@4ճ5SNCx623*bZΕH)B=~ Ӿ|Zɏh7cΧ>@Bm"UKǷ&et #*}2MUU+ / Q ܀TL QןLeT&U4y}1R<S{? I)n6p_5Ap^Φ1"/ ZsXDJy0)<äRg1o>wksՏ Ԙ;NT-Vy,WWYFOBn7s.Wj}|q6ĺ^,ՔF4SzWW%K :j&E{aݰr0D[1o4biL_#-zj+cn=6iLiqu|vT-& 6hN{[aQfJ40Tڠ9 6h9'C K}PR.̞(—eK-m?XXlaeU k{ꞰuomC~[ cڠZ](GW+l=yžZx)m޶&*pV +r[+"q,~aV!-Ö)xݱZ҄@ˣz1q'*kZkȿXyB&*z$8߅#|OtԺ~X׃ќOfk306ɐi14/0 ӐbW)z9qntL='8mVa8yoY`_+Ͻ?qCn Ş^9&cj݉AQ"1gO( -I. {"Ŝ/wC(^_ةQT[kӆ{%I,9W[{/"J4ZEnSA t`nc.f֣yc)uYi40*ﮰ;; +AXNa*6 }T6CY7 {l a:OvsA za?/Ճ-M [ Wzfy3Z6 PmO6_ {// {_ y^]qjn8a ;>aJӅ=U ,7*ő)숵%u^G`v$m-xL0 0 47_<18u4D`ٽ9mxAxmnoͮQwa4! ^'p]e хQJc= q-ÁCA*emhuϩhS=CUUg2\l)-- ضm?0@EκupM/7!mh7-Į4m)y+ Z8?_|sHS{ﮦGt)7vr|hl9-C{PW'.A2BwoD,RMU;T^AZ- _X4dzP uݦׯ?@[n<^*~)?"PHe,N)2}"}? }tA"=c)ǽJwO}-S'_)ҕV'ҹ/)!FPaJ~ӯiIKe,;gcDzq"}s-/ف\>,ԯ+Zt~:6fо@~ ,t n(t ~ȭ7Ǣ2 T >2 J嫼WǺV5vok[ /̒wȩ<9p82!6G 5<(Larz&/ɾ0CqkG_w@ݿ̱'fnSƢ,%%%ILtba'TȜ1_qlG9CгPpUbˀE&GrGbMt94UHCh iiiBKy8/}CкuTu av7)Jm7A&J}HyB ZG$v+l7*rCf۬ Vi'U A*-U#^"H"^ TZ~/t%T[]Rj-7$6[-<\IYr\"ݶT/ȠޤtX: ȗd~"ҎsߺRwPKZO{@'=/}'^AR ?4Aʝ=U?4Ca Ȃq4BAZ CS])Eu>GlV#HsPH R *I}/sH7V~$2n邪"};]$һ-&c+)X옷7'ҋH/MX6?QJ?HM"|ջ""EIgBfkޑ;? c_W'wJdWَ"E7)UUn/J1=9,TP Te}k^_uVjT7ɊVi蘙P; i,AZ^&0 4$"T`ÇG5t[f.bsF^i8\V_m=`?r^WhA7gaJÊ$7VsPՊHyjn D[Օ6jqۤJ猊r?,R$Ef/ۤBbioףrUńQsB#cܤYFL]MV}LRxzlV>*]J wټ@yHzg吪f.#}[r?Cʠ>T/#K,}:LARt b}`H}U4O+K5 +m J c|8^#gAFC)o<}"EZgPL5"yH7WP׉Hoi+ZH9VE^wߺGZƓ$ҏ&SLʿ!ҩN)u5(HʝDF~x=-9tFiti9nTRHP'uJrh,FEj㦱wʩ<\o+{#K!8nzvG2Hq0 4vܤ&EFcK;nvܰaͱ5*xϷูߤv$vܬ,,Hqs8[6;naBSr|"2>T3}0x04eji,JUq#ʉa%#< Z'D>R8CN2OΘ9{ciwH9h-RW^bK@/9p=PQ 2s/H,(L}[%gY,[8=[6}'tc8@#uN;ҩ^Wv ?htvAZ^Abd&4O|AR٬ QΘ*xRoz#3EZRE럗I#=T~!R49Кɼ]Nq}B䨚1nDK?|Ay!3=_>_OJΘ_9 yrƵ"UrIW/o_"Rd9Oȱt)FV"&'ܕ=iOLÅztrXWA#eDHZINu^ӈT?rGpE;H5{41n˨Rt7c t͂.-{$Wgt,p,aa>'DOOOVUY K.s5Qc41V3 &]vuPw([#!YKHU:N.+96Xh=өQ[=>4mK4_/Tu+-L.sG+=AA u?Ev|tꊴ]?4!6r~M_ 4x X.6tSi)M\JEjR]A"HEe5QU2r0NtW}'cHn3IݑV5-G?]"?{{_ж챑eyjuzZS 齗SgާaǑ#g߷_HUAݕޣMCݽ Fx]kqQ7[r)N_vz"wiSl%k&Gz9Y7TuB>RnX1  LQ"ڔDbz)RC]k&Y\WvqW2(evq0 0 :%6^x!OaW*&A!aiz"b7 tt}Z;J<5*}=Z"M2ݣXq0 4R]qx`J 6mZn~>LbGm7+o3-ǚ-z 5VJ@(HHQAikH]RP .MVMT+)q6NuhJ[H%p\6)ܴg6N,Fv ۥa *ep.8 GRec)I6&֕R`/K.!idѕG!R]rd6 */j%_ֽ:.*DCy,*";$ֱ،Z;~7H}E:erT~B"//QϣuPJǥv=ӻ4ϟ#˔(_Fv |F_O&@tNnR=3^IJgtC_wD=cHwT:dL*Tp>PsPJikSkR<.QۃT]'˩c3ڶ}XHJq@G z?r^W4a8e1maiJT*mpf{ÇE>+%Jha&_${C_c yM}ŠaСCdbѪrAl8\zH1X1TOuMSqS[")LlV:."E"}*>K_hn*a6zBrbHf)C֨6xuHkZUz̢} жt%7n$]Ox5{+i?K[巗ov~/('B޶$RAuղW)Ha*+fuRq ʺׇtV*"RJq4ǝuRcX0գN]M"m'RKu3쓱N"kb!O#⎴9HyUO]>~D:iHFif[rXq JXׯVոFEYJ|M5Qmb4u1yr+nH`aI6m#D<#PT9^/_k֬s.U 0 0Fc` 0 4MAqcGUVVBvvUVȑ#ᡇʜΝ;Ýw="UHQJ S[QThl2J@-IJwiNJCRGsj`T#YTva.Y!E%-{C@.@R|rfϵCZSEe]3-7v'./rIusWS7h\E伷i=΋3>%;'ұtwNsi7o/DkD>H]&iLj_ "NVʑl6y>ˑ|PW5+>ItTy$ֱX1n˨RS;S<720 0LhժpΠ:t(̛7^ٽ{7vmBQaGJ=Xq0 0 @SS_믿{11ԦM)A1nt1G*ĸBHTkt8%PqJ"Fj>H=_Y"FJ&DJL\ۆ6 ڮz{h.N&}c:Ҽ?AkMeZE}dK!N2 $Β*dW%]sҤfg՝RVZe+HqDEVRVyo"<~{Du‰L(m"8hWReH P=O~c:HSi 抴xAb9؉bF5ôtzr/([SI%'qK6WK;7|*ҳ_GP[p -礷(W疈t|ڏlj:{ZK˿aÇ"*> "~#ҹe3E:8T5G9zJ(R)Cd<3oZe:m]j*m")ĸbRq3}3rhnV0 0 sZ0"]{p}w-Jeez *0 4$8zhnN;na5az\< :֭[?3\r%0vXXd s=b wba*zX̙3p wba MjSaJ}jۊiS ջJUN\S~H%QȲ0j[vT8PξuhFIxvHw(Dž"6LWd*7tb;2g?u'oлJݒGI}`E-ߟu:>d4OU-d7(ieꠇ~;C#*qzUSu "-R]?/R$H $T}Cq<.S<.S.iaչUQ@:`.<=+'Kz//'.JitU ~}o::6*iP"Oa={HgHQ/'.)r _ߠ{ͪ 8"L]XA _ʣs捳E:#uBH˼N+(/nnVHtZUa+ 9`7q:iE{qZTۘ\Wqpb(yJ~X (X0 0Lh蔱lp8 -- !##C曊hR 0LChJ4F{JVqov[`GFEGk;N隥=QXq0 49to:,ˎE5b\0-] ی8l`HFA=E#Cº۳ZåfUhHȢA=W)r{; :~RӯlugHo'u[4gy># O"EܴÁCT'~jwXi_wB$MUTW* E{}B&(id0޲[PEF+҆QCeHUXC~|U/T0bEWyhN;Eϰ~nBkHPkttU'[7 鰮:3 E.:;mGRQ_Na֟D:7n$56">cSh(1+};͝osHgģ-ү(qL p쨠ų\6R:NJ cO(<\']7^uNCrpI)n^ϊ}ϛ`_r7kU1lA ?yp^0 0 0 0}1fM7EP#ϞYV7腎+na+nR*nPJ^QLɤcDk(6O]_tEKeJ Nw0U>RtΠxE"E:Risqƹ"Ho9^țh94/l&#'Rt)S6Iso/ HOhKqC6itiqȣ+,RqU_%]*mI VTg6Y{3Ÿlm) &(UZn97b*HMB}f,өc(o35qUcvs49xVmZi AaE PʢuC Nj+)~s;DU3YW|JjON'EyAfDi~"3G1y*vў)Ս"}7'])ooyHUNZ*/M !).'Mm,\Ci* !Y"VW8+Œ;mwYy0 0 fQa3RGB :#/[fYFWkDkō:1O]cMR|PT2HRH^V<2FtM12]X.qi4" NlC:.Gz'=g>ɡ?Iр<:}^>7G1sf㉜ӝb,M~_92R92ۦR)"7OAvWgY=$Pߦ Je^6UA=ƍ_ԱǴyoq1TjwHأԢ,ibMN+žArԳ ksZی1=]f<lZm0_HJ PRN!}OyOi]5Ec]iCiԱ^:Nj"EzEӅFDz]rK!*?itRTix>^~ZI(J"b+EhE3-s@K ^L3~+ t<հEnPD9lX&rhr?mu v* (/uu71;Ef% d߅,FÁ[H9p!X?!~ce9.;7`>{wE ;om$#4'=_U4\N{9?sT@w&Hp=7y$3.[GOMaaa&@Wcv]vʂig-ou{k"TJ%Ax NܧgfМt͠ pRĚO,a9↉IuҊ13O,b}7.ՈB ʪS#aI'Ru)moEq*`I`HojCʘY)C=7F%uCӹ90˓D<>6YH˻g$ <}~zPw6SeE0)ZwVPQ%TVYg{qIUn )!Z~+)m)BCUOuAѤPǁTD9_+i,<*%ǦՊt)m2$ݢRB[4+s)R6*Tf hhrzb}'{QI[~''{Jf{9 s][vzMﭱbZnE0*u抯EBe"EnaG}//ƌ1ptÁwΆg +ofIS[]a+nSV~;m2zii $YrCBʤ|@&jE!fݨ(UoCpWbnX RaPoLr9T%Eyt ߳F'7?)m.<[ݤaH_ݧqx~$)y=ǒSDKD:s $Fu%]ۿ%9Leq*@u$(C\=RiS[IEZ$FRIRW+i_BW3PRAr Uq7:>SՕ7NsqV(C2 (M@iiV=]~Pdt>v3)Y>;bӜBW9H~LvEEj}'؊ѴaʿPWX]ûHYsY6%S_q] Rd#K(ҢJ:ʧxB!]q@ڪ 9uu-6*0 DR_do1cuA`d1|ΣO'Η ȡBw 섊tl=n}$'o@z[f(v]9ðai:8"GQ շ?ۊ`gB]lY o nz;/ҵhcx<ڗLzXF+n2M,P(%]_Mu=͡(VL"=,cbsP[ 1nv'ҥAfRߍFUEA#2RYi4!;E)mlcGT[}(bZ#D9OF*R1*pz5B p9jq<2,*sQT {,v9!D#} tOCϮX RdZ"y"}/޸F}| "=sRtvh'dhR [D!t"G/='zGt}"=(*Re<3֩:^ãIE_2fNƚx,%'rk㦱67oԑ`: Jq)R_K-0Al-#zwMk 'tGYaies0 0 :vNO> v> 3\qI,_ 7v L[B)|t //[rG^z۵&F /,*_'2费7G6 ā7 0Lc7q~r="Cў#EVZ߇P#1T\Kݫ~GjR@}\Y߶vSߚժZ^;y)B]ʭO:"YgG{Ej]oT)U&y ߤ}nt$15CUGVuui֥"}')Hw:N{<4D*|t.eH Wߠ^~uE xǺ>F^&'rkt՝r*>J*?!7yݥPupe8Vb8R@pZ,a8][ 0 0>.xb_pe`7 L:%qn+xhҵp`7]5\x֩ > x6GwbaU M8Xr'RCY(3bD|>6R5aa+ <-G]|C1|h)l6x ہ]5Km7 Z|U'Ed b$BZpWWwUN ʓlCeSy(`uC cxq̦/_'RdR"Uʛi)0 ;( zs[h{ۓUδ?ߣ֚F`[ZBI 9yFH#yJ? 4A..U~Gu1s/ba#f扤6 T̩M*sԊaa+8pF ʆ~?|1po6|p|!ءOTj/+n-7_PJ^aaQ_do1c 6aH!pmj|\ /6l>zo!;nh D]EC7 U8)"[UJeq]a7IuZҐ]tNFZIi?yH+ҫ[wH}{b/rKN"}u><)Ϳ:vypHFh6A>ŨA@1s<1n#JYfzU T1BjƨBh8/*n!E9bZHqvBԐح^RY=3Ft[% ߍ"J;"uH疑fbE(~EtAHkJ +R׈ݤJ>{ųA)#h ST0=zlRgHv:Rf@P5qǫFWCnRĻ9wRYqsiKs0 0 c']{.O9nG_\zz;LR{!=0!_?bzda9)3 6a`Ϟ=xj(GlС8`TT,+`*_;l J僛~9 HPGzи1FYF:FʛR8GKA.$<9/[tv)jsxHǷ #?=b|uAYz&v PL]"użAT,5jN@{F7@G/c*A9J@*@t7jtcMTjqyU:t>䱯FRCrE*-Oϩ{"EvV,t."y_k"Ei}Hs˞SDsS߰aif۶mҿ;6)OgcaCLH6venY=^AέH su݊1asM*;n.47n=#;S`!|0_~M"Gyqxc$S65QzޘN{o@yeI . Svk7N"11<捃 7=Pidz`Y~_ȅXǖ+;0 ģ̌137c W'h<>j ǠSU7EōQA3o{ du8C85~ ;;0Yd ~>)44.sw߅ 'dYq7'`p'!nPs81*"a砰0\1|]H%U%/^H"qa/ ͍t]{׊ *ϷעuRisVljRGo~ɳ&%^T8hR rزD~TkQ]FW)kT^/"6JPWj掩sGQ~N+Bʛ`7Na‘L ;_!jN "-A=2iH|dGW"qH7T}"!iGG"ENH/Ԩ+>ZF/')|rvRHiHi~:W5]^5JuTj;uYӑ]_sy!"7xspCRGgG5H/" y)e)goôk48ֿ.X@ǝeilrl럾?kK- Q)k ֵ&j]op $v32 Gv@3JK[ob&ջJ R*9HhA cak8bز* a|45]ƴACU _6r^aYΎy ksV]*8a?[O V?zo _l/lnvyV-][WC-l4aT-ҼŒM~a}jeT1ϙzq S[(WiVC jՒ!; ak VanPi*}_cI6T~$[Ha1*l= 6LZP͆ͻ2l=m0 lj jۋLTfi d}b'G^PYq]C2O#ϝ<+TqSQIӵe3TIE0g!ϴg6g23xޱH(EPA<+Q?`LM| Sf 54iGܷS g }JiM& +`&Ge5AՌ*F*Wu)m9+ /^]2-,K@3 ;8 s+TҮ]r]aI}/:3(Zs$M&7n?=MGMee%,\pf ưQf& `0mr.`: |X.kYb&Cft8[}sனy/B?YYr *RaÞys[rp#'xrXIP=6/g[b9mnWj(pI{ Dj%VDH">h8.L)m0.M1<4Øʬ@Jݚ)(氵PX2naa卻 l-݅s,+WJaöٻX]HX{G?a_mZ8: SfomtaU”"@T@¨uXz, 0U_T=bLku,ta>Peڤ Y-KzKC}QhJecT^a _' e4OP'*0u^(ՒRިυ#c뚪RESLI!P4TܴmZn- !~شi/n wAU̚Y0IVHCw+p 9bi8M@VNhs4'jV+ .?|A ~]p|!h}wK-g'tnv%2.a3mk6. `b Ē*0 cleYݗUV Z4=fŐHX˖K%y=`zGbaUcqC4#^ niqb,U?䎃ˆM_< [Y O[nP}QPߍGBEзNOCC:kͫuӦClp }:Ujpai!:򣸨(UG΢; ØfѿӧNSழua;vù玂-lؑê]ӪX l8j WJ5= pZ҄La82qӕ72æd: +r8{ܫærCnmkV(,өf쭄yvnM S 3VH%R-kpHh Bڟ>f"Fڷ8Q ͂"R%Xia  ٲ{9l9=[–,jLWwaU? ֦UΡ9p4eN{JDY]¼raƘ18zA QAJU>Z85t][zM)ot{:--Ѧy.EXXJ1ƄGBnvZ3V8Hs&2M|r o S0gE>=/䯘a*QP 3ݘh7>e}.ݧ? U]FBv' 39鐖mL+3G4Caw":̟+nOj]事r$Vl-b"F]p(35o$|eaaf5JTdW1>m55i"c$CU]nd,s_ QqP!Ar)~͚O'Fc MLǎ߉#={ֺ+iǻYPzUy9pNT xnrT_A*87oܐ+n(1'^ UnچiLpW)a!ReΜ91clMlgsOBVf,*O奲T8!C@~diMV\ #KSXXݺu^o]'hHpCU5Lupd];chy6|jwBEKsжm[Q0Lj~zSs/Fs#vy"a:?$RHq;XiDXD4@H6:UW( B5k2G&:GT= ]JΣ^T _~5z}#W]oկT|Umg>H>={#27McB۽oT%77 :k)stƀuo?y=ڴs-0!a&NwSa)p]ὭM`M"}F;wpּέ22D|aaq^3@b _/kօ; faZ 9ڱ:DtÁ>| =z5ij vQV׮]E$a8!4.RE\:qnp֭cMeʖ_~Dg*\li*nPJ^QLɺPjIK :Ǎ-Բ[G"6@ATksl #J}P`_ňˡ7y|$8Ե@WIwR2*A  `ZI4V GvchZ;αY_-L!ֹ·;{Cyyp7xw[Xz¦:`Ԉ U*H\q#Rv0I"';n㦱0*r*>Kfj|SJE+ [v}R$Y0 ØspAHVa\ޜB tڠC&Ac=j EЦ]Ome*tؠ7؈|ND!25T/0ዉx9*J:uй`K#M{IT k/haabFSW9-Uz s[M`\4WіfMAЬV@Lx U hhzr%1l^EqD晦ڷf83ɀ @fAhǧ2u^S8" 䠩(U4uީ>5SC|TØӐboyBɪOhAC S]KkG-nyZd]FY_d9[o0fҥSZybおJ_tE;1+na#> ZZЁЪU+۷/8IU^\{1pZ/F)Em6;?,B< ?;UJ_BըQ e [ ȖDRB@VKHڋ7R (O)oūl*\v:WFpIʡB!N#G|BˑrQv8Am&&Qwq`G v(ppn4™'쀥Xr1ZHD:M鰡ӻ뫟r"<6펨h7uCm7d7Yc] >Aj-y\BJ lI?Sj-hZ.ZLŲM(a7AaC-h-bT{Cqf2az #aJ?pXՒ6 ]CTlGSKA(FF(T%,Am{D lhẒu'Qaa+l6+xLlQ l߱RTD(SLZYwMx~aI]tm1A澋i ;na%68w̩pxh;z|Ky.z}`XpwRTMa 0Lr4V,Ԅ1aa_,éMCf ;t8YN8}#L}[NS*=Z?A=E`O "ڴ%.S!-Cv7B w2eaU)c@B/TV&Lu ǁiJKH]Jﺡw#mƮ%잂&Q0qaDO1_uU#;tڤe4&ӵ8]3^.RO c!չʋp)5:7T]h]乪 T}F_pW 0 0Ia(.O.ر}=U sZnN.,,[ׂ߳[kfN} DkdaH~Mw77 0 a)AN_tV~3,[ S42V1/~iȖe S^K垌ZÁ{'L@Օ7a[E=Pʰph8|7ZF@MN|~_a}ۨ5AG]d}2L}y|EU8nqZ·KP< ]pZ+Ez)^N)d)mʦҦE)oƌFm+E1:v0 0 sl6Bőmp>'aʵBee%ڃ4$J1 0wJ=q@\ua&UPRR;v3FBaa!|eΝ;aЀnp1o> )wlYVyjuTVwق.[+T˷v[Ǖ7`q S-Nna]hw{2>MxU5Օ52&6-bx5hjvz;c<4{ 7F%qYXy6<,jhnKEc879Ki4OuM8v+U*ڨ v0 0 S+V+ddd@NN :T s}iCLuY [ 4.aaMmT;na5۷={B~`РA0x`χB^^tM8nT.)wR-ˑ-W<Tz5UjeGUTPl ]yC-:]yŽV#9hT;}ZU.b}±7h}U6Bi$ZD+c$1gJHm0褮9Muҹ[xx6T*M5˿X֘R]jERXt%|ٗ%+p9S?,I.ht&iXĚ/raa UaiHOW)sQ8n~Z]6.G6v5\L}`xyx<50~RtK-gaIZOQT)jQOj*,VZYwd|x6[qInU1aRNM*)=Ε5ly Te heJu~Wn%R(M5?U/*o,cj&_s%r ޛlݼҴi,p{ͼ ƟKӹ.ak6Ae ,1_ 0 %<0 Ӑ4RAS$A/Oi_[@L 3y)eѤztܾbl٘Ě/raa *0 4$U*0Y:X[;#\҉V0 0 cvP(T"c).˔۔}Bv"KWwrA[f @&Qی1aRcu^DѴGXd)9/+s3|sW3u~W{vQfH.R*LlBL3&jf}H0=%OrO /wDr M Hh1:jiS }d6&KaaJ1 0 IUf$-MR+M0}Y|wkuN}4&ieV:<أIY ]L'̟+8D Ѡ΍1_ 0 %͵>|%E:6RWlA /?yTY&bb9,[1*mԺS+_Qmsf&@Rub8gvzK՛v NaŌᜏ(ϵ]Z"ʛQ4vKWɿz`:Ў*0a8^p `]Ooz~S1(gclk5SGXd}~x{д|(A-gaaa\f s%e8_O]ļup(B XfYSPB2{رce66lgwq;TTVAII)tACsO>T7(}O=4$cHUWCcgT !C ,#U^bT"d^Z2r#~[qDn>Zä:D;ju#e5@APQ'9~J$I~adoɩl)HκcW0 \x3RS̀# o }2限??WO"W̙3Ǽzw~ط8X[a.wfæ>-th:uNaaRajR[Mc7z7 st;cŽ:6B T|mg]qL\ ƒ(GA}}r7ct3aaa*aA _ _㋚2LGQEeB6a긎wG櫝CU8~W/sF:hj#"˘ac神?QT1Z}.OS 7 7 s|ςe",?SXHfaa<0 Ӑ4Qš- bMOP%3fl~Z/G=͸'3Hc3nfbV\,aa\Gz0{LZc2V. oTD(kb}ZYHE?iD;#"Fjs&&/UuEʈv3 0 0IS[.SqaI]PӊhNhưaa9i c˥/RN%x82 0K|"4v23Bcq0 0 sLR1>Sg]T@œ2tb>Sd^}Ǹ܈2;n/A)hzdY|23*67ݡu7XyKu~|W)sL7tTթT0 0 0 0 SIHdL7ZڂnmC}N[h"[aaU*15;hp>PD+^j(xd^.b}"bavd>ZY|2u>GEY"W+XN8o,7%~8w?$Ze١cl|6l~̙_<ʕ+!??rrrdI| [n2b4eau}{S-Ĵi<}H-[SтX7S|iBKSd1&PY+D+ӈ\$E[_i 9ͣHy-WAbp嚘1 T9t9勵l>3gNr gulڴIħ_~_a);nlOOS 0Lc7[oS ;n^X/Y/sHC|XjeˍG+?iD*,V>ZY|XhebOo4Q cq,I.Mr5_ 0 0 0 Sw('Y?7 •o]'OeZY<1LcEǭG+V+,V>ZY||stf ;n95:oͼ ƟKӹ.ak6Ae ,1_ 0  /PJt2c]atB׍9cqsyׅ)"IWl-2X%[0 0 0 0GI04e ;naa)UQ]T>+G+V+,V!QǤUXheb壕G+7)"͕UJW$27N&X3?٘Ě/raD_̘opW)a!i,]#-ÎdM3a\0 ",un-gaD_̘g$A_/>V>ZY|<44ǤG+V+,V>ZY|2WiBASX,ޖaM rӰ݃üeDb͗l90 0uwbaU*RL 9Ž\xCv{ZY|Xheʘt ʌ17=?KG^6K\bY-}Lx|f *>`0(̺iri 0 0*0 4$T6XfϞ;vp>?3;- ʽʂ*vUB#,~+ܛvx>عDlth9mZƍrJχYB֭Ŧ2`waC]_ԢE 1t:Ed~߸@ RE˖-/ʩq뭷ʩiRYm8Qc_|Xhe"F"b壕5'6;V^w:V#e*b壕G+?ތ117}տ](P*nص* AG^=V۵^ۄsV5$ 0 0 UaiH~- 2 ʚ#17Ku'V@+hm4xU.غzva䉽ጓ=X~)0 0LGj~()A|Xheb壕G+SyG+SD.1Dˎw>2Dhe"LQ_G"mtS]Ce:Ыe6Ѝ}sypWU[]ecp-`U e|RN1 0 0 0 Yl`VGraOr;Gn%E'Fba<cڵi3*UD#V~܅^@ubȲXy$<}rcPhQI5*V^CBmH}~c噣6Á'{0K4gW9ox158:mW.`G^K{ln/Tnvh7~Tx4sME[X,Z@0G5e}'w ;I 0 -I}ji,%VD43ˍ7C]o7͆8n .G9x1Q۸}ڶk;N~,8tNC{5Pn,¿?^aBn5kaa I}Rq0 0 YN7F5~ #%vЩ]kL.]jRa\h߾3-23ULҩ t ƟwNT 0 0;vԻ5RmT)^.Fp^.~ AД1`^q,_y;1v;?S?vCgǞ0nq?-Wd9jŠaԇ7 0 S{r*>ViS ;78;|(>T_22ѹ-!j6XԸNaaaa N"cr`ȡyB9 Om5/M7\:r{1 0 4e ԻFr oDo ʌ1Iuo0 \Rwba㰷SJIwbaaa9Zc"m(|gx<5Z4a';;:tCI}jA)W\!suJ۵k'su/F~#~ o/HvlT|fAPqÎZNm۶ 0L! ¡CzUvܤ>UaajF*˚ㆽ d}aim۶Jaa.AgcPKʠU+s.+'i˗/e˖ [;X||;z鷰x X+//?yfnfZ0uJ\%x\"'fRe0x`cc#̙Oiw5 SK~g0` U*R 0 S{lL9`Yoä ]YYaai4 h*0)K "0 x.D`_%xM;cq0̀uL#C2 ä*5h>EchWK~#x\7K$"4a äv<}*W+"]s[ov01:Rl62_o9X aRtaafa äU*0NaV heNaNR{;܎ߤ(N-v#0]yJ #kNdaI :o"U8lllllll,XqvaժUڶm  j{ѪgrfS!r@T9FJOLn*,_>i#‚#0̇[1U`0:Ɣ _'v?aVdr.N^B}SWZp.aaang4pd4s4_ - b/XRY"0L}Bb?XyYsM+ /kMK22m~KS}ɐ+K`\)^P1|=lWèlii\]{qGS݌j/",RV^~t o5Q1;eaUe&[p^nK~cL8nbTS!}`=agCPx`ۿA0L]R3VY(f r'ÒHLn__>bN2oN.RgS, H0 0 0 II _:S& +jIΫ>^OXs쪄Ν a*l}Pn}ThǸ4"Q0\aaae١clu ?l: v ak;!-Skfwu,pfBϘ?@(16+W|ɑ%),,nݺ\lM/,ׯ,Y_x̙tdm۶ada2W7ཀྵEbt4fyqH˖fQzCG]Ҝ%#W 0o{Zu<]^}$t6GL[j-5~̙qa0P{PZuqNo;ZD0~r^@Pq{JoEe1` g FPSy4|^Vmw?;naaahx3ׁe̝`ϊ8>Sdg=p|*~~\M*9n6m]9XΘ/b_֔San:v0 0 0tmXrp;>;婏 s,A fS2a ԎΖ9aa9ԯc\XoE ܹ3DaAQַo_p8R 0 0L"LŸY*ԉb`WPz/G6.9%X5 aaj ;naaDqcKO!GȖiЫ=  lB k!0 0 \GLyE#ŇZi A;G#(0|k\D쟉jOָ1|K:n\ii6l:lE}x{82G\0 0L`!|xYunOB!:Z sډV(6??3ǔ _Pȟk~k$oos! OyϷT ~#|/yT)aaI4 ̇/ Q.+`Ms7f΋x5X~k4Toaݲ|['~~+qc~=lD\ 0 0͙|)׻t iLR1̂+X[~qSG B3 PH|/q9z(k)Oo`2;rnaa8Gv`abdِ4B"o\4~7>꓄54eo4930 0Ls'FMf@Sa@&~3&ܼ EJ1|ko|9q7`s8a nzXh; wC.] 0 0LBOp\F!b0W|< eGC F'|x57 >5' e8 }$oI\MVV9F%lL 0 01TXl Y,@7֜OO(6)9 oJG2NCqkָ }#ϷM[b={vhر2۰\!''Għu&s)..6La9ཀྵEbt4fyqف@@-[)aa3gΜUaaaa;q0 0 0 0 Ha 0 0 0 0L#c0 0L1n>Xy3f[m`@UE~7LoWK`:m FH baab1naEe>v:~-0@/*` T>Rꅏe[abZ0 0 v0 0 S ,`|s!)* %^a=^+[%UP\憟 Kaw;`ϖ"|`0 0Yɉaa azY+Α ޞ9*; (`gy}v=ڗUG؏aa1;naI]\m!{_ynv#JRO}faaIH\ǍUVヒj۶ms2 0 Ӭ(ule?zan;mxw8R=e82\Y6m8FaaaqSRR"H?9 2NI,C`k[9aiN٬pfF9|iڮ.mm;p~ s~ E-пME.aaID®R-)SVxu^^{X0 0ML_ws&G>~_>pߘ^ ~?TPUUUy`pxwl-[oM?=C~ЫK]abS\\ ۷ok.Y0 4Gl_~}`+ڞ=r@2?J=p`>\t\Ҝv`T.N `N4mCLsG޽ڷo$>G-[\l*++M/aaxor(^fyqّٴ49utl\ Rʊ x큝{0hqЧW/3 aիWû+}믿˖-7W;:vv]0 4u֮]qSk?2;djfbcq\wns~~h]U$aa  eBT=ओOLܥ*3:3n nx7s6daժU7߈p׾}ٹ0 4n֭[jtt–O;Ugdšeaa =CJGa`:t ,ip uV0~x̔K`;#կ[nTv~8op0YX;v,Eɒx,ehGb6U߲ޑSDP0̱N7H0PXBpw AaIQڵkc9nFr]p'ooY¤')S`ڴi0wSm:p7)ʕ+ϖĠf墫blX}W?aw7M 7a&e֬Y!|޽{ah\YB=c/_VV5D}.-[𦕟999$>Q``dacޛZh!ĪT<ĸ@ R89 0ܹs[n%Չ+{GF; 3@^yP+alb>7/] Hg Qr r<$X{3L[x B蔗+ǐ.Qa*01c?d)92aq]R&6-G0 2 ɩꘙ175aaa#++ `岴&Au]NF2;m |43?Uܠ!,8*iaa a& R`z|PtB .` 0QpcAM\ͱ7 0Ls7 ႂ8xm۶qݤaΛ.e0 0 0lp6lP\zpgӆat`>Kaaaa251,,σ0# A +naaaivqȈyЩӀaaaafIj ,\tYC]ꂺXNcZjR4zuNcߦX/us`W.Ә֥.m2vuB{^vF$-LOZqSRR"H?9 2NI,C`k[jF^fay`ϱAF r޽aS[¾%ln蓳2؋}=vl%"p3lY40M(v RhJ@H} g Qt)2r6dPEEE!IS vN4Q#/䐖h 5F͹ pI8q,D Qi(ÊmT!y%7v N,R-ӵ9;z-DZ\l_sv]b  9Q=nƹ! ;B a ~&x$Ei.<}5n3_}y"=nalsӥBIDDDJ&3 ?Kfz|>pUaQAPEM:DoHkk.7%`="mJq_T)sviT)K."#0d}yQ+$mW,;E#ϴǏȹCHA;-:}]^$""hݻFqۇٳgɓO>,Ԝ%|!P3K:ȩȓy9/1VZ;' *e]YUg2gG=qV(76ujZY:1hގ~G?BꫯeY۶meYsJWf$+Peu=q5Έ(:Ӟ:tqY#&:xQaSy̅\gĮka9aMjn\"w!CE/UVɲ+Wʲ;믗e:Cc*9k.7Ůz*eΎz*<nB8yDmQXp!vڅO?Tk#ԞGkO.֪B"""$cܬ]Vocǎȑ#QYY3g`ݺuBtsL1rUR쪇R*z ܴAbtK?>_^_@m+nٟ,::9Օr"4F۷G\\(ӧw^\xQٹ3(է-)#"""j>Aq踦]׽UO oVgkofO@̱Z;8䈥>\ꫯf|x+,c%J^r zIe-c.:8%v] SUS1Uh/]GDDD;UJ,O=M&Ccb.Ǜ_dq:++Ing Ī%Z!1ǜ]5NbW=L2T#}qr8cpgn^W v'*WN"1XKDSIz@j|//m綎ۺ6jL=q[FEvqh߼K`(ݸ)W\Xl:s,xШ헫Q=v*j~cs ѭ[7UD9bN"" mI& ƺS:wf&0ftb&f@FaxbKe2T։M^^(1U|s@Dp"gGHkRپ;7R=>jF7gH屣WӵѶ]S$*** &6!={"ѽ֖&:rP3b QsIJ=P%W!sX岖fː`G=t-L1rUŎvJJ5vpiйKWn|N~vS0`#"""jIbp l1LMxT٢*r0^c5&ZX %=) TY8m/%R`G=t-ƼVKupV)K;7ŮzEzZwƮ)R5ˬRDDDDdN P Cc*9k.7Ůz*eR7DDDDa Es558z0=`!""""{ 0Syu-l_sԾ.vT)sLj=n6۷@ivl}qL""""jL0Ts!Y,Z*eήz*eRMǎ1tP 6L.ڽݿu&&P"""lㆈpoaW͉j]#23 QaJ6-ob6-ob6m 8lٻ}2STIs'q`շ"ps9EDD~i}۷i}۷m}_dUR5nZ;n].=5WӁԜC͛EdGh.^DbU@DDDDDDDD p *++̙r?\<,lxQƢr\>\Danr = V\Zn8v"W%zedv]X6پ}l(Q}- MZw>tի/r3JUBߠG]Oz f7N0z:ci0=jJLLDѶm[U۰qmoHpETUUɵXX oa(mfabhdI fgarYc`II(` ^{-3?c8K-X뛵{}(a̭bΒQ^=Bؾ1kobڃnx 88q*w)[#23UI5۷oǀԞ!uR{ G㇝;yoV;v߽ߣz?g˖-߿3݆~._XA R% mޱkJHDĉS,C%6馛_ɓ{!i-ߌVxu'0S6CEmIoz)No%;p"ڈ^6CA1ȯy j{e3<=s'""" ܜ#qK:|jX?P5';䂶hZY@} \9WDVbc8&2s*҂As&m֩=*s=aP{N(@Ftه7 6Ç=[9xVg'Kyٳ'n;ЫW/ODDDDILLDl8(-ݎm"bڹ=R%^m{^Gvp̄W\E[ĴaI͐米VvO9E@qqӱ?J̝8s]tEsPkq)uT)["Ey1d <}M#o,߳ge#Ƕyd[ԧ7艓/onS^GS_o' y'yf\r%r-(tƊLxiH|GAnv0ƙؗńXʗoW|R0e ޻QC^먮?wm5K%zo uBGfݽ\}Z(یJ?Ekb=f ih۩H_|~+FHW;MIAʔOϧcLλ=@z5fҽ$"#(˗W_u]G4*At}Q1!6/CkRז{`˒7!1ʥp-Z6U} 7]nay5ZQi ׆q1?vSnva+^hTC{rDޛւ*u 1Ts=A0dLĘ67 qus׫'&5Dz;ZkH;t%U5B/Ǹ<*b+ xWi>7]= |{ׯX'E3I^s4pJ{RORn"I|>, 55nڭ(r\e~:ZP6/05Uh"L1&lOo3$e f<^ ]ذf8`_]y~;j6L2 t) gۦqf T4 3S|_~ } |Sm=s*NVڛ(8q]tQ{cر_OGAѽ2ʽmy_GgA0̿yG< 7QΝ"FpĠ%uAsa+ˁetwՙDDg?'hc9(-Y5=nvڅT=ŗ7^y*՞noqܳH.G%Qn{D*LxYڈƖb )0M N:İx=n&j7_5:viIMϜ9?0Vۛ(g]Ԯ];UBn555rjs EJѣ=*!6Zv~:tR0m87Q$h߾[)D{TWW6CDDDDOo6Բ|-߷o_mV6 ](M lPgϞX"uCg2`"""URDDD7DDDDчJ1nSZRWmQ YYY&!X\\(b2 nZ7nu琹SN1pcH痈ʕ+*EDDDDDDD!""""""" S )neGf|]眈B'&""-28xټv֩goª+0U Y75(+|Q0N=Ư'oMWNNĘY[͞881[u/pEM|' /ն0}U?Koc)#_>;9XZ"Ff$A/z )z( ›THC)y;{?c+'#~Bx!""*EDDD!-3[ڈPwʇNLD{W 3M|y#y' uB}$}~mUW㓡iro7m 7Z"h#܊&>(Seh{wjAh}_9w Ϗ2˵gPw³=!%ӯ5k{Ήs8 /}+#^>HkNim4׫#X7 ;F+GVe< ~}NNIúe >_{~kӝxak$ m,ڱdže$LxLZ!zݧ 2 h+ז %kvo7G~is|>-)#rcs-juϠHw|V7.g^g35}}<' =O|^0얗z,sXܯ>c0 25ec눯 TDlDeZ;0zJ?ȍ8?-7g[/5Y&$Iy_IJ4OAHV`5O }*xde|r. Mg*bB5QGJ_>x9Ri @/Ҋ̞x&ϡzVGމe4\;Ӥ|=fϹg(4 Q`p[*0 jxmܹCǔ ¬^Fk{^M^ rޟ|%CrHY]vift]UM -j_n[l݅]zs\+Q}OG[< 9 bʰkkn3㳎-g+v[~[EF޷YSg;X3e u}Ɲ2dcZCJ:bJ{eZ}*;\!7FX{qrz{;^8$6gd:T-ODà:R8 ? G?5սj^}&T/gi׬ɲs6ʲ"9gEߤ& EgJ~ Yͩo(6>Ą`mWj/sFۇzqFYi&/qq^ YgTϛ''jWT/- xǻcф Fiy޿X]_ ϗ>11`&:ڽ=WFfd!@kΜDI\jOb-ih{D) O{xN<ٔQ 7DDDDDUNho~>/{v S Dܺ Ϙ%{Ejj* ǏSs=r_⼀LD 7;cMz(N~ii߭=WYw`d+ ]gFYzL}|דԽB=2H2JU \i J}[ž8*|ק!繸xniH߳GƔ${k<ҕʟ=KUo% w, <9XO{D5n(\wu0`.MT4Y x^<=;DJF"u!E~(=uhֻ_azZJ!H555عs'N ǏGNN ֈ8Oْ مfaԄEX~ۦ ]kҳ[78 :z֨T&D^"UkT\7Ľ2jN:e(/á6"LŜsB $TAAP#(2U'uMƔT ^4ֳB`4w^t .ĸqZrq\'4JɴgƱ^/Zn(ܿ;Q6Ծ"a: O֍k5jeg=uQ˵60|ktC.HYk>& F{%ocl"ݗu|NϷD,ٰ E@)S@AEo&yq\x1+Yd +b8/1VLϙY0 Tlg$;XQ^l7jBi*5|?q I!-g ( ={0unE>&ηҽ-MK( ==J ۽̋AH,; ,n[R6"""""HFTISJF` ?Cmf0d4C̊S*)8͕W^?()))RkVrq\E胉fEҎ=c_iZVҗ5;0e}طҾ~{v&>0;`^X~ͱç]W Rjڵlnc8AnLG)/0֬PdJ~1T١}^wPko0`N<)S~sHIIQ"k^ÔUSPk2N#,^A;d ]D N;Xvݏ2q[%2dڷoE󕨾PŷGǶ^/b 6 ,,n~-g(pCC_UUUXv-FtKcyQж{iޠn,V) 2vфg""$RܳUr"F#fn͛7jkk~FL֡Cu*5Fm*++߃ r8K8pcժUǏW^ԩ7bb""""""""_uu4JggF»HŋeFYuigBgB\_D#HiZ-Qh(z4WEմPiF;mQ.8bIENDB`DataLab-1.0.2/doc/images/DataLab-Screenshot-Signal.png000066400000000000000000006756621511411446000223630ustar00rootroot00000000000000PNG  IHDRn#XsRGBgAMA a pHYskIDATx^ `ǿx  b'j-EрxamG)DZ"DQj !"IPA&ysvwvo=;۝7~A֢:&xv1Hkk1Ld{0 0fI0!ZsthgRSS }q)%e7|N8Id芌ЩS _MRν|SfC{Oƹ=㓈cܑ0[ hga..|LaP?SXn2LOۇi/uD)w014ڙ:4$ s&Ԅji^6c۱;}B#zܹ--- e&B65x& UDmVWPUt4>Z'ӎ`w ?'T]c.yׇ(- M?q!O(6lضuV /Gq Fb# TyC|ҥ rrrlI_}:ڕOPƅr ϡh|u[I(iO{K#}OfIOm  MfF_<%Ly]h'|?Dc`:"y#lvw={t6It1ia{T"`x0sa0 AQ8l2D.bk<`/1?z8 U13AD:w,Ϻ!M=="yrӴTqbV0wEg6`kD=v}X:&6 aȟ;ZaNt?ұ07Oo}=4E5% `$` ϐM[SDw=j]n4<{t TO8\(;L=dB$ s _'+͌sLMZ& NXL6&466"IfΫa1,|wP *.a?QX lZf{ELa F`mO􈥶0 CxuyD4.NG[Xn#^,݌[bhmmAfCr@L,|(Z]8D X?>|~LP?o1:/>EǓ PqMN% |ސ@!aX>CEOikچcꈍeMW@D=ݺztGibg>PBqgQ@23o9t--'{_}5N;mzw"ӻTs3У[Q桕۷aHe a:2>c)/9C5ݝ7uZ<.RSd&,SՅ00H|Zo y7qN0x{l4RoOvxJ]x힧 a{_~k/hILy{hcbP> M H;?8 w0QOj_}<[S?8L j2of@M⤓NB=4w/BQPi1 &)Ɇ.ƁN8x骏ѱgjÏYԒcl'2CqxCq,no #1;Yb~0LXOCOOtD;'Pݘ{S__wMHqCظIם|N)'R#. : ۷!m{4۶}b❷߯-2k:YNrDdcӖ*+{:?μ RtODRrӱcR'J)+(c__xg.7^&^7 a'a<ޠrMy\o__&'-Y (kzo>ەI/'<>w _1 0qN07Jo5ÿ떡SG R 3_=9'VTܴMSN쎼sSx‰xwQS)kݻwBi.7I;+`! %15%eM~I?)xȲaFau 6W}#q1MyBȄ4L|˛c&ߝ` `[|E|y}4krV{o<Q3ۦ‰Qeqv.<\?<>o%֖ɽ lܫSο^2BIac/&o?t_+CI$޲ʛ*w5wᣲݸxs _NmyHi~^WDv*3ENG^/^(0R.O#/!ƊD1E I f^h!?SQĸpA8  kax|yO-V@iu f5SGbmyzȹXS+4>N<9)) סڵK5\"ҙ7ߕ)ot!g rl">72ׯ(]HN XL4;wqm۾pl"GS&l- E#%|F0 X;.R $!ip"chi.x%{DyM~o`@ c^ VX BeKWYxJ۞Ϝo0Ҿm _чTgfZ |OAHycy{l^#d7UŗqpoGׇޚ*@'T0Jxdc_ئ}7'J/QW7@۽2b*g ^uÔH]ioK‰i oG3|^'(vE`7!mrzci`KCOÀ>=38fKFP_?Mh<9&tx Oh#IH_"G`r@ X &q~T1Mt ~½ aKϮuk_4&k`]绬]F;־)(T!YDovn6 Ä @LxY+|?!29d 3sϡxoQ:_mVa+]xjzY>'~D Tm:'lQ17%+M |3 kЍ'o_,iKiAߧH#ju/?_o%Uft#qykcX_<2_ `mF;ho8ݏI 0 0*Xסpf||YWh&婥NYl;v_mK8D(TDkQ%&7>~XfaDϓE, HW}DvD|73g\$~\ᩭoq #]C"f-n\R/ڛߝga'ast 7q9B{O'u:Qh wgm7LZ{2kX' st~T{Z_1ڛn0 ;ɗsCއ= DU1OՖp[$ZM;ܝ"fC[IhIqá}5};ǹ}oQaF:*| 0 k<J_0N"+}/gc(ӽ1 }XEV܄-Jya9_|})Qi1Q}G3ZX-^H[?.^{+y `*;]/\aaaaX୷R 0 0 0 0 +naaaabV0 0 0 0 (aaaaQXq0 0 0 0 )$ 6> Jcm;&(,mqic(&96Gh5$߷kcL[f YBĘWa>Op bfZ1 0 0  Cavr+fYSҾ혛picsbjtM ;J#P[y!P0>2nrAm,qεΫQRVCE8Vbe싷"GExkaa&!ReETΧL NĒX< b./@27eXOd$ 5sWr)⢉ M̐/榾e)0 0 0a,z fڪi#]G%(< XPa15JU>ˀy'gҤmPimW*CRu[N7˹&׭:&ߴv^q=$̳Y%+OY4}hM?&LW_sM=f_:}1y)bSVbM 5=zh3?HM$d/Gaaa 7zD,`> a4âV T|,Lw1W4dZwU [{])sh#| ù:N%(͙/sb-NC}(zD1zKG[oԦމ(1B3QLVacgv9 ƕ8zK@26nm<ځ׹D~9&\4چm@xsBy/,RunjO[֧x1Jb L R=SEaa!qsqR1 Emkk;RC֗Wu <%eܳ|1 0 0 0 0ʕ++Тqy硱r!Th 0 0 0 0fժUJqsEie͚58묳гgO$%չ Mkk+<.]h 0 w-0 0 z<7ի0¾}9$6~K% d?c'N!aa&Vٶmgōh7 -$233u9Zjaā6vq'CLk֭ǝ~~mSqͷMOy74\ 0 a=t}↶[1 0 0Oœqymv--򚔜,=ŏ Gx_KlZJ,}=4CccV+?qRRȑ#!a۷ŦMЯ_?r[aa|ܤ}핗/:*8tÄwʋ.@AR+&&xd TUL6ZwM{WbĞ5zpEش|q22OH ݃xd;ㆁ7`"̼=qC[!>(Z0 0 Ä?3g>&CSSf>֭[%I͡Ç޹)] Dje%ŞWi*MTٸ٨paFpp-n,{|{ڧ;RU/y"m݊vܜ:n}OUɢ%ހO+w^ ^rT0 0LDŽk.T>+ ?Q*oHiSOcOu*$9M}ѫ'tmR HK]2":Jz&->r'$87=lM*ş-FA ))I峸gQ tl.0wqcO'O% |zNNh闅s^}GYH;0 0 D"eImS2q><6l|3g>Mq :oFqS]]d۹?2EVS]#RĎ0p44{[r:k  t1Il :h[儙CWSg*zSq`>zdR;\nR[7tN,҆a:N)4d,S;Ώd}[\r)nQLkm;ܪS0%NneD۟۰h˓/NF*1p){{.Yga #{m$\t0lܸ 6c`⭷$фQ!#+#]VU{F2rHKuq%1g71$';哵LKi.?-H+ eӵAf5 Y_ܢ֔lM=b5v W=QZudU"oZa&Bܽt ^1ny~zm>M7߆.yᅢe@Vaa HꦥUsv Y'a7 %]>\Bt##GO8;.֖;цj{4Z[S%ɝ5wQ.A',Sc8VڋoC.e]r.W/q>*^B l,aaB~?:6=8p,7 imc2djF@}^BYGOC>|茛[yHpހ 'gX6AXˑn<" 566gai𝔷 'ӶK7G wGn:g K ejr @Y*++P6 LukErkM!`qa= Yx ֿsTxֺLaMcS+mkA^3|^|kO׻_m|%L縛?}k}Ύd=r1)OzxmQ2!P{D h{+*ibKx e1 0 hwYN{9 ͙7w0<"7 +Vu?PWwW{% 8ܷ{y!%I eY!μ` ׂ̜S)#k rW߅wdE z7K ؾ7#cր.ꉴ 2^݂P)CƪE[Tnkp5Ui._R0j3FSZkoR^tKOOG'\nd-Frk֧I]9t̙mH:#YSps[r[˸tDtSѓ5e'{NǑChzclُM"){^D=螙sc#|kRsi-wYYsT7[0 gi''p[o.y'vr䐿 璇i^Oƹs s(߫W=ǫm4lry=0 0 ؊]<'|_CS&h9B-i?k֬Ann.z%1[@OJp'w:onGaj4|XV-h0!௼h1?4Tۙ db:6zȰS]sIt=9"f&ؾ};:, ĴMհi&T_=t(t۷n}o:1 0 Dm۶sr*njwu3?!y NGKeykr|`-x(s4EqӐ+QLmTb $&;wĠABz2*m_VVf̿2<8~6aa /7U[mEiDc[u3qgqӁHō:FZ2aoN8AKBه%N軖aai6#}ˊ%,nV0LbBOڵkT3$5N: ))):aaGVZsg1hMa]Xq;aRر ){w.H҆aa& NqC}[063M\aMŠ؁7 ôR0 0 0oK):l8<]QA8aMBa&~0v+naa79ODž҇& _]~4k[۽aacd 0 0L@cč`@jr3~62S+R6!=/YfLwrh<է(X7O,~t0)>Pv/n=.U+k`.JʽʽB7Ёaa&Ț=JUC#~.&.cnfF]#_i,똶N+^^ѱPb&7txʛ#G:6$@IIIE3qv}~QN7ؽ[5y"_0|2oč;K@~0 0 0  ]r! ]3dMJB5D|'DSVMyyyHJbx?滦o{Ogy2Eۤ~7}p2-IVn}͚:^H˽r*taaaOc.)~B(<E_g:EV,X-I ,]POw!PŬa(o^6D+ĸO7` !o؅t:4aպOq2Oo2[aaඅFܨ5ܒjLC֭M!p34D2V7+0%n7ݬ=\y bFK蜞=܎Νt x|N:b_`#=+f>㓬-)L}筘sTv;n3 qt7&ݰ=|0 0Lۋ_~w/Z6~Ka#\[tMԑ RtdfϲE*1_D,LU%nJb(=i>STe2iMWXޮ:|5:mA%w5D ߈IV:sDVa"F\+nKf uw~&n]'ƼOKb"Oy|#nKh҂8V)3 Oqeoraqf7вfOWQ^Wcί/ϣV]0u qyVL RC:m^ડ' t/nm)(VEX_(XDyՊ#@Ҹgjl IKMMcG߇ ~]t3O /Sٻ7?^J/tւC\88/&or i-|>a99Ǟ=zvA;{ծS0 aX yX'ktɇN ikr9z&daJ 2aIRιͣ`uڸ|_1u7ŗ6)0Pmm@݅yr+ӬE+;}/U9㸍'tNp۳]NHM6KX`&"$rq͜9S0 0LКW؈&q 0N03T)c2ZR0^Yh*fMr J֘q0<קJkm~~7/sw(B)M%~!*fAQcNH"pkr|q>a"llK.>\B jDrrGkk+fϞ$CҶYիxxީ:&6>a9D|{k>l<ŝvRaH\Г1Tek2"0Q"8Mz5ҳ'acwxϿz6wv^xa?rop{Qڋ2# c-5nt(,aa:Z[/qqX`F{j_dIzhcUO 9*c?W==7Z${os H YܬÌǓ?9?wk`_2~뾇[F q/vķ#)8, =>S ,ݥYcǗx?\ 0 ؓPR{cZ$:7nE;N"K"`yxi6߼evki`$a;\qE Sp{z\T|j-kt Y>ҍSorBM1%c$ܳm*DƔ> x4s02#>D _-\s=waǍ+D޿G k^F/eu $Wq0Lyqv|ut+!w M-g0 CIIJA-6xp³pc< r!wCzt_h:{{ _4)!=b}9\ ,AM"L䕘3R,V(S$ ٣ Bf&J,[ {nqa{ *UծL'kMtv* []jc=3!(dB#ěi?xJ |;4xF""9Q*U__/19,C13_lc/zC\ ouuu::r;鐢oq1zUVbњ:}MZZ%7*(()V+buU2&|s!p'!!u(>`ZQ_bЈp˵D1ϙv ҝ4t&lu ?EJ,xLhDx3GGp|-Yش&Xit9iρ-]>|pl˽ދIIIC78SOii[֬Y\ O 6%f1tꂶ\m246.٣ǰ33m]Wx~>~NDíomޡk-"p̹lFo34V೽)Y`g=ۇL)kiiWCݵ/8bdǮ]pLJg?u -Ou,wa&rw)6rX|{]'?/ڈ_<?6M>cc矯}lٲJ~(oG]ѧO鲪޻7klnFjmbZXp Ӑ#ղ gj֦(T$ⴂfB\Q]d+eu-+Qun=X]Po(BI"PDE?]!Br"̓>B%Z 0@.# QN:%Z=f{MhhhD./zzkhlD׌.: °yWGQQ ecd3a583 \KiŢz^4_= aF.dU2ry'k YKȅbG"n.(e>ӕ}"YT2>T$Ah 5oV,ǒ2؅F/s]A;iѥSd-j^"M݆CKǽ߹{9:.M&4QOmFrW'x/)+4:hѪgϞYRRR/rD" Zq-3^~xu:8 Ç;pDN8EС5buRW߀ʌ'z1ZrOs, %aؠ^хGYkBj,& !1c"ه(|dʤU'PsBw{Zu1 ӗ?CB5:e5LSetFA*va|txlQEy0F+m\=X\4c%k8n!wCH7]j0f\JbsXq0 0LH|##㶷oÍgO޽ԉr9~t &=߄MoE 瀢{0iطoGUC{k+}(Vir`X>]=ɉp<%ϿDٶVn —߄MoU?]IO'6͈,Ǝnuj/Ƥ,iB\d']ᾦ&4 g/W2*J?S> 2喫d|ԕ *=I1u뢧P.+vrQtbk).reS1 ?-2J#ܒR\ТorJʑ5EnƪxfOR7 %e*U}oba!Z[vWKnƦ}pw]%Z4`+zjjدp{ )oxÄ_ZOs?ݷJb8] } 7WW⪳OŠ-{pNߞ"l]Zbr nPRR5hjiŀ"Ju [o$<xJOa:΁[czWrJo!EX)+# (qJB&<=MX ^2J>\0 ?E|;Vw'aƟaa=5{p_/BIx'1֥R&9)}zO)p0l>Oѱ 0a#qkI R룿:%sɗPxhf Z0a,rE9wt1ſťzT|,r]Fy!Tjx*=+H)CVmW(A: 'kZOyJr  3۶o)'8A8.rt#mxhf0 0'`Cp% gDix7ZB#D/<Bm=6ɩq"d3d&Ddi3쥗%ZdJe Dn,GT,]Z3)IQ:nSa=Ɣo()slM[$ʱǝ(YTm㪘IR0[+1vb[^U+^\mV(yښFӆpV܄c`~p?b\y(Hj$^W?oTUA"OC["EN'`{L Sy4{(_ԐR?j?0 vۂ5GHE;P".? !B^ۉ0jKNIv#SC̵pӳgO,)))*Kd5\m#(mCNԚz@3krĮ y6i-^/洦M9=c1(BtFƂqv *3~}GBYXÓX%D+nC޹)}:VViPy1|t CVI[Z܂4m/Y:dAa2^M:/rC !.>0A@zo:bb%m7ʴ448$㩷*B\^cܹXinɚZ.If=Sm S\g.[V>rΝtHѷ*+|hMOG>&--U^N՞8VO(5Ajћ\LI xu[.#{?Ƕc>dB#D/<BM=ZAoThETHx~})|Jn:K◸􇃄k"~J'ua둖IIYpԷJ37mڄ7x߰xb]uuu:EǤ]ѧO鲪޻7klnFZeG +w"I(mG -D䡰nV 2s r`0 D2NފY fIKm6Ϋx{sQ1tH̋שa|C˱hbS~Й=뱿Q:L}SW`I(f0S[b;Ԁ5c'+{ob둴o<?n6|٫āɄF4V_xp}V=O˓8RMN݅M.v$naHC#dƂPTPHԹixT$Z=Q*EYflz8Gvy*[r'>=. ߿+%Çe|GՎ[ʐk1yy{ݔ<=w!dM]oxg9jK T`Y2a♀7=zu8:qH€Iqj K/FSqA̟?_11k :+û+⽒K۽!MKϔϰ'yӳH^dłюrȵoS>NN1㠟%C}R^܁0 EԮE?9 h|mlCx1Zqe:gbdB#D/<B[=u'] p\:ΑFtuc,\3a̵p['S %K h8@2u_^8 =J){\>;v%%>?qggcMi>ް m؈u¿nfdtҥ N;])oAN/Ff2:ت@qSV]$KinN>K)Ea40 DߠPfdw~_cG;M&4QOs 4Buq\*JN <8ᷱb˷:D>U5[ d$ ;" o *oawOOǘ+wˣPuGZ 8'mTł.5sJKq#o_Ay <MøSןm//|[*9mj9'\KO=G |?rNꆯ#-ņ)[݀3zw/a9}ʪXyHnDuL㏵aҥKS,\<+}.9=ge[LWHKw>z!W4_kwXq0 0s47M{c;Qn lp჊I$↶GDLWD'Z}9eY7Ϳ9y1/%^7hM)tb&4ȴ8=X,>ġyd.?w >Rܤ&srT䜔U1\)l (ނ҇.%GεHH9@J9rIi]`KIEu_P~&{ #3/NEFJ\M~aa{S.z ̑J#uh=D4~pTOs 4s xQi. LUBt5VsRgQ#k&<B#\s MzzF|yCϞ꜖#aЙ3=N:y 0 0Aͦl|Xk!Nw)ROS0 ÄUNDAJ5!_.z qcEDG^Cn=0Lwް4iR)g#)) Zֆ_޶I"[Y"$2f4)'"رcǎ]̸h`omySи~8 Y ^-"(ƤԡEtDM:d ;$R= ρpԣo't[!Bєq9"F)d}knaVK_H$\0t/9)n>lv2}N-=%rRh>{z 2DKaglIs| )NHUǸR/7kp='a6h0QZ)٩I-Uߢjзo_  U͢+jS4kCkk+vuyQ҄X %&).?h `߻p=>JKJJd_IAU[S+MNOڵK$PjjD>5 OʽոH?h{߄MoE?ρ&-M8p1sLFD󮅭!h{gzߤ҆n}}GqXch_ KVpm9taiO=\TS%ϱYP5&<=M88B_ Vno'ǝ;^>|awoG߿}oǁ$y]쓰oq)žt m[Ոkܿ N<O0KRv\{WgĮHkΩIH#rN_郿ǁ?^sqKѺabnׯz! >+_oE[Oeq;***};w:5;v}yz䞁)݅ ҬرK<̟u.aaFV [x3 Զ2)Qf"Fjԡ2,^QSjrOA\"Gh|nrx |qHaF{ƃ>F@6j܅S4`碠>(.ؼy3mۆBys nG\+/IKUkQU]s)ȐnJ-xWbH%#7e91֪#I圑ƃ0rrLɘ"^a&c'a>wbDWy:zIzQ]Rh%)fmZ!uZlUG8R|ZDU*%% zPTehuMvA.U?Q(4QO=E6v6ⅮFaC g"UV:J#H$|qfy@SA(9%Eȗ"E"!Z\D?<B#Oj>^9t:wv=oq1zUVbњ*A| M J1 3oVz (*\\sꈂ1ٌ(u0`Z!0 +r{yGP}To{OvJ oraVŃ>+ъ%41NH.RkqԺ(dH"E=Lx1 D\qC+onxTW"YG?3۹?2EVS]vSey r1d`Jr F4r2ܕDۅ,[h mpl/ix#ϔ)#JocmYll ++o3& 0C)݀ZPP}To^HoЁ_k.B"Lx 8sC,<.I(`!hss 4V`1ʛSN9EEEZx!#|*n;d)k兘Ho멁B~gĐcUSȨ&`YeÌ((eb9 ^k6G' ՘E)zZSA#O٠"!Q0aQ6@["iV0 Zh)m T6ЈF=fD]tW(0d:V^:3sC V)kGĕ:-DI/r{mc mHOmc3m$Dk|/7[fƍ8묳$Gw.J[oGzTFts,@]vhn B);Z"ڢ-eFF͊m YN/)5\Cv~T4%,-0@EF] "e9EӦCƃ,mrA:0 0 D|>h 9P"ņLq"?*%mJ>Vyޗdm$m܋@]1 DhODN8EС5buRW߀:yp 0Q*8hk%ț܅Qhj1de fr,)WTV)"Q2A]@0! xf"PT㦴!,|a[ѭa+~}/IG#]e\GɄF47x$JZ!Q!݄I.. KBT؎V(Ҵg\5{%ת31Ies9qXE4 2GfБf Dk|/w[: v R^C͈˃ݪHO2 8cDZ,ql9*`ɗ/2b9v;y9F+f(S K x>$Xx<ϲ)}AۭD,6ma$kB }} ''zm_GOiRZs%.M&4QO#Qޛka>t0[BAv*6R4*^]ɫγsa瞡X;{f9AHs 4rTG1㯭69 < ,\J>.qo ↔+Hrpidpc.EY:\6vefoLyͣHpY`Վr9^UnlV0 H 8k8-@Vy5kZ`oRˈ*do2a5;p6H̓TXłHE ɴAJ) |iK!I"4|qQĨX(TzLHB#0L0F~jc)~k>] zݧҭ.==sΡql'z5#Or7cQI&Y&<"(ˠ0S[*12< 0O~YZ8hZX4Th&Eʝ}q\Zx6ЈF=fyo֡ZWB] Hc8Z9A ))m2PR^ ;DOʘf=7B(! @hD|ԗ_~q#p-͚yg %^4~|u.'&蚅׊},2*a{~ 6S碨z%-7E;2t8m2z46vU[nq xaRHB h0a"5*Խ˶/G-8@\! @hD|T߾}#&P)M5&u0 $da§~qfjQθҸիZ tXH@e2#%#]@dJ]\-)WweQ1qjq(odgT_tȋ39&'Q~O^a *0^m[X 0#o:G[8N Z%g!-; ]Wn:t(qm2z4ިsmvn}[n%pZ,emБTCc!vZZ?Ҵk6+BF]seJ ˥4"2t ^<<B#[aaܡz[Zi F&#d4&fC贲QeyZ/M&4QO#@n]:An ƛCΑ6xxqWKw$$w?'" Mtf@FhTV`!6^<<B#[t҅;vر 6V8eoKō΃ux\ tcR$T67*lhjǍB#hܮ tLReR4؝ R8 h(.J42BycjYFKLqy8i`'fhŠaa&k%EoÆ.&!8秠yɰQ4֣Z/+V/1m2z46jI)%{Jd@l,I9a*fa;p;& :gX( ˲E#%: TAREbC3V5H$_\{f(C:v"<&>j,nAw\\RN1Y'i/ 01k> 3730 I$wu]4q]F8V=ť)%M&4QO#@uuU]XC7JDVHdw(˭[]9fJdXv5ơpOȒ}5 #hhss 4bbTZx:y:cRm;v/r2ʑ!gI7ri܆f\ 0 v:Ymu H~VЉ % WS-MXPp:}yRfAg>(k rW0uz. faIt$K"~C49=qbr2~dxhJĞnI"HO!h@h}B.  R$o4„12t%9,oHYmZ*' ɅT'+"ŁHs 45RtI5;y&lNTk3B44 k'4ig J,tEĦF >3۹?2EVS]#nHJݖSy9:t()+*Itm۔ܞ>kj,q66I+IkQw٥dLo4PlYU1j0E#A^Vc0 $c1O-*vFpIK(I- :3 ˝m܂V;HmDklrR\U D iį<*h'Tdhh,y-m&“٫Rȼ|3ꖆa&eRrbO?=Ǒ-@M٨5Sƹ7DYPR[_ӧtYUUHw567;x& r)X'5~hbL.@2U|,@Qqrg_<TҜB>שȐV(Qةm)^\ӧJ QĢG0"sɏ<R.Uv$&,I:"RPc]H8%eVap\§VdEs^%iI%͎7*tN4xLhDx3G7JT;JiM{JGqv=#^yiOs*"Eگ6OmH$g-ÂYRyJ`QHs 4U'iRT]!.WKs2Γ'*}"S_߀.]ґ)]Btddd8d5(ݮCo+fǂq۞?JBVyNDUq,V(y c1h)RgbʑV6,$_E}փW+a&.(5qX1q|r2~%v#) G*.qɄF47x${CꂮUmuR'A8F7aUl4o_B&!)MKUV)Tߛ0^<DСW9V$dVDk @hDmT h a,:zHMً5Y=!(;J4 b#SEoQ;t(vY io@u`^z/njkdz|< [eA?YD}`v~V|RiC씚fhkrKYtnŲ%p&saIpt>'>ݙR EͰ4ܥ&7%wǮ̫dDa&Hl >7m*-^O8k$E]c~>EA E@&qd2XI,Ce^2 sT񫸩?K5BsKJ#;*JtZ[ #P'moJGyaJɔCZ8Nf@YxߌPf"/diݧ]R8aaEQ5f`&f.tcS^HUHR,W.0 >b,.ʃC#ta:($uƮbcr'؝y%j{{'➐2gP}ToHjڇm@͗iHDo}۰WAKOgZk̸_[msx@^Y]|/\pōc+ ZQAV#ˀRN&+QA&hw<9JQ\y!`,xȹ셬1"ZͿ(@61 |h= OeymW<]+㙽2ڌ3)r~0 dvVQPze\,kHQ/;BOxɄF47x${4 ݺeh +aQl+/dA\+vCf0﷤$GUäW֩@ t>T?BOOՒFX'/ Y4V1wO%v7—tHHs 4U*Pͯ/]Y/jtNsΡtC-rARFsm(3nK9+N\E9Ae8dEtUQԕ&A˨s1w3be{*K]B47ʲ(V3}f=R€fmOJDQ=T0LMA W$.cRBWG> I8Ӑ2GPSRtmm jTZ)q*yN'SAV8T%LGWzdxRfDk7hm\KZo4]lӑI)s[!Kl߷Gggџs=? ty~tD?n jœQ;ݢ`boRįK7LyGP}To"7ͯþQTmKA];PwPsGw=kBr/}dmC ]S-tŒp 0LdB#ěi??qsbk܏zy7iqhƖsaaĄɄF47xXso6o{W 6ӝu84=nǞthe-R]]@$ Rm"yTК3Imoh+{wDu 0 0 0uhk:v<-¤Sf{IDI';L +EEA+Oċj *SS kS2Z峦aW"?X}Z Ä7]j­EY*Θ $w);uC}}D#WmDK`aI\xThDx2/w} 7A+tW '=Ȼ[ŎY}dU5T)J r2C,߇7`=[]UG_⩷&i~#5אk1bN|o?3O3p3];v|ǟ0 0Aii)-Zoiiiҥ`2I7E+/iBCVԴ_/*~zLb[B#ěi?߯}Z;m$fUxM&|-WxhdHE~*NEd/"eXIҬQ<<`-~FhRHD{V)-3`y#Ad(+ G 0WR&IadVeh sbLwLkpF<_v/F76gqq {_ZOԱ``~p?b\y(Hj$^W?Z*7XOAFFt#TjrH<#c kG*`dHX=,6>Mѓ 9|4 0kbݸB!yifU3M@ThFk^ 97U*4QOc>Z* \Z!r>m& ^ ;HAAt/ݑr]{R zU["y#}׍riAeP Ufd1&7?/SG#JPᕉLQܷplhG[6T54Yhhh́Hos]-BzgC}:VViPy1|g9\ ,AM"L@՘fc{fdYt+m)Qr&.g{IcXi5{#Y螆acyfҿ~zyҴˎ#hBorU(ef`{:;-`+W˿ePbv~*ܺpR!5xa6jOolj ZJCP]-n蟈7};x!<Նǘ"MSiI/ED~m>p#ﴫ_./۶o>8o8r<ݎVwEF1:okHCTWW;갖+,! |+ϏYJo(';Ew^55el֛Vl0~ !e`H7a搸vCUY}ߏOFkz: 6--U^b̛pVB `ᛕaW?T xRHcD'3h`=9VFaC}aΜ9TA57k: -; R(~l^*~i"#> K3S!e^/ԼD~3@VS/9Pm~ylɱOquڍB;ԡtRZo-ۗD/#RyҽG顏)I{2 S"KpJN*)Eh{QzzY6$ْPԂ#uMꗻl𖦻x_=wھtLO%I@TARZ5 5լ=l?Y4T׌u1}Ddb5GZ^Xp_5oxolv#Z|?hH.CzIJ317[W@VS/"}27ag9!.2zaJJJi8evUaE 3 ;TzSe1m 2b9ۋH~5Ak,mV-YH߽)Sh+JOۓL]BUBmL_1Frf_ °r0 ())7,8VΧS[md22.LF9QTSӥkM[B#D/j}l/7+p - Zy L~׸}u"! *Z*t+PgH1#%nZN9q*v!)bDH zJTg@WG7PJコ/T4"Ȭt6h:LUX^U>zokzu~AV>N"LM tLzxTR[_ qcӧtYUUHw5676cy!,[jugO` M ƴ-W&`B,(eM0(a1eB\Cax(yOCުU'5F٠"pSJlYl UbDd#gV0 (m*H~v2Ǥ IhiƢzq3i殩\{ .m8Uo-׋YP6LǧgFmZ,RX[f-2,^\"DaϚ[CT5ztzC&ZMܚ+[ SKT;H'$RGi]Q7q{ ǭ": muIy^yU6D"h&H+/⥺o}CI&!5kĄKѥK4e$#=]ZFts=]rG QQbFaQh PrOͩ,1N˞)kSĀ2 XEOa*Lk3y30LeFײ&-[O!=7Y^ o "q9鰺&z?zIz՗H#u\ʫS5W%)st0P7nX.R^TWVARD-h ̫D>ђ#+kmiIeo!!wXF1BX/* U7p;Z^JqƔ!p4*Y %RHk#E9CrC}JLye >]eDڧ`O>;%QD&Z=Rq3jԨp@DN8EС5buRW߀}^D̠m@.{f7'r*f>W`_hK71;eUXVЈF=fcz\YJ\[Vͭh.9nO>Umq(uD%Z"PRX9”Yy mC*{&R9O{=&DhKQVi0^-i*`A M,t>ɂg hhǢZllv*nt>Aӵ'qRz4ޝwTU|Ղ^/@]tz&Di f[𠸐/J&ǂ /@[[ZZUR& +5G6'JFeNWbR"qSiuenB`QHIZl_-H' @$2 Lvv9J($3 hҥth\w5UK Xz|$m؄>npdtD+]v#yA¦ 7(4~58H-rKV\l=r/r٘s;(͍ Y>8ƥs(s0 x$|w$X>a{ (:_oR23?Rz4jNN+׬ck.V-~븙ŷFD TФ#Lcƒtp'! g95:塐X'%RqQ|JVƻaD.%)]^ j2WfWJ蔔ǮCrPDTn꧖GKP*cj\weDhu;w=*'7\yfgfg){I<_Ccps;T kb˧ ƴ{,%aI; knK- dH卤ah\V/Ь) 9m}ARmDnRm8K8Bw9ə2),˵2Rޘ-9DfI]G1C@-a# $կP=SteP2 s3xG\$4 Km}u2I3LLfJ2z, iV3m>8HEQ` /2'$ȿ@Z7Mʘ9R.蝤$Kޟ$iډ[v?TRq-m͕m2R"W8ӧ]bܯpNm:aY3>+F#ӦvdU3$Rz4 իX`UJ.h Y|T'*^3+zGƍJ'ɺ]3T %Љi=Z r$STɓYX&35 o྅>B^-Z Hu5~ȝ}iD92Ld.'|"[*ˆ_rډ/َRdGPS߬+CxIK=ANd*1#P=7hDt0 0;IIIHKKCΝ_ tIʓSd3S:ᖌn8S$wNȺSӕa1S05 my"Ag ] .*E??Uqm ȅʋi FY!IFCEl,,bmD ;.uP;Y>O|d&vP! jTxr2r @B %lX:)/jB6P:a1!G~N)LDŽ7̎;vł4Cqq1^}UnϞ}}y~&F:w1p-YN%~C'*Ѩ'L඘GO^ŷc/| 0њk@y`>6_T]S# +4"e%i6yD\ԌڍXjZo@EKm@4n0AtU}yڣ'4Jm~˲ĄJ DIA/=ΒCg=ϩ4E.dEZߨ81dp4ZUg7Qp+7hDt0 0;wq-`„ ^o=N7Ȟ dMN 8 Y?M*Rz4ްuOf֟1#jׯFa]Ϛ B\?5jUTX%RZ"&ʅ룣M>)/&,1JNJcD)gAmZ R٢kV)VzU)FA$2SākT)J/^(LE9-B]fWUפj4zWXJH"<PN[ZPRЅtRtLzx0 0 t-YQbkVGﻣκ$& ؄bDCav4ZF G2sHOYP3IbXBMT{L),]lͲcCT* Joʧ5QZAȎtt"qW wĆ/~T،)z aB7^E6!ҫڦ4t8q5j] aa #U*4QO;0r6QUʱ`N.IXլX1P6\_{tktd[]] ,]m4ay ϲlu%limqq\,~o7^/+R(LD@>,79r:eN%d*#/<'~QSSoǜ*u =Ge?PKW3wh(9- tLzxTO_`ͷcOouq|f/ohйaIxThDx37kW&9F=UJh8z12NDpezwF[adf-Smp dT)\c[07iMؑ%3 "QRR2RBl @CzߵNԸKDF*&ٱUJ[ܡX-/, (juQ[D>QY;oz{c:"[Ycgdim@rdH&S~xs{7hVbv|^?dg9睕#CΒnPY ,Թaa j-WBUpjJ/qDnj| I"l(ެ \јC.#ޒM(@W6ÊTz$RACMg'z_I.iYd~Y%}Éݠ B2 #PfQRFmćj)w/J ھD7LGirZ iuMPI/}jz9 30.Ÿ PԊɩIt=**"($5ϪB7xlTH͌YpT_ŬM*!~f$Z?گ‚lW90L[B#ěi,:%" ӂūTBVJoaJ00w ^Q_ۨC{hl 4ժGYTרv餄l6yGŋ9Ƽ5*V RyhiQHRӫo@*hd[T}ny/t%ꟲ+s4QhL/E&JbMVdUcL(%pյQULK(X~ j;FlރI/ceijݔMQX7>\@(b䋖GHt }'ϾŶP($A"}}0s!wv}jFr}=[J4 ==TN))b>X&nNv2w*"jR/G]"u!V)idNo*AQEżXB`R*&ťښhlKOxݠ/S/3fc_csϾ1 $ƪ8xW__,<[[*T;:,֦G)xؿZ#}K_f+FOq ⷩǡӛߎ6jA߄eDCGSY>BHb >rDH&j=PW_E$li6,$*3jkBՙ8(ovX޿S#GW*~joTiEFzOrpq 7!%& xil M5]W䯩R4>~ӻYKV>U>`}t-jiފ_fQ ؚbu}_+د?PRl%>^e[+[+r)rW+yXMyC0r{fc$g}p;C4%%IIm !h7NRYVYsQRVU.ѹeː[(me1~w"~Y.(-W9YXmYZzf ҎFJPmҹpM2-D*IdPz %Z޿n)<^³*>x0L`{=s^/ԼD~3@VS/9@ QXCW`f߱* @:t *XŸmhb;]i:6Q{tS|$ݨ*-5ҋLnt'ȼ-HHd:[y1l0=5XYW t.66)1{-SḫCKsCH'R;? Sd}3UY31=Eu^b3{%RI#zt'[z%6;?}[iO9]@D;$ oT~S]M?m7"֟aW?J׉LWG*n;dj(]&7$8(*EN*cYn{UvŘ]\Ug>HsL,zM O}_)AAXl"J fzQNc.E EWz8rMgW ch}%+F$dʖ Jc^U (4^]&58H;!!9$3 #]{#tŝT RFYΣR9(RTˢZA&#6U^Eg=$5u)~ym\ǣSOƈ]{]MRKtt.@[oGz"22r j"{,,Fp׉䏝s_IVntȚ:ǡdH֓BӸmi6.XY,l c'Xe#'C+bADL7or+bRs}KՅda&*lWTŦ\Wi-_ԏyCE]E4Yֲ2I@Kx>❤7T"q4w %q&I,I$T%XW [$tFa ͭbC|]Rrw93tN3WyetGhW('.i,mP9ګLX<«ZN![e剫 $E&~P*2GLY@>\\UQ^QWىCm{ U{9o}YtАsŁױџ"NJB ߢvP1B:o@<'z= FYIo;1R Yo8-GaC<ʬRO!_@4zr&=n>Q">De.2 kдD:&,:HHD/z*~cЊS.EбUJ)0Hc@1:^G;q+GsWiFP3TH}69VZ0R,S̢_ȫ8#4'O*<&=Ohk]<E{% Qζcm2X JWWBuZ*Q:LOJZ}Iid=QrG <%Sk9|F@Ys舲F&F&?YO!ط~ؼۜ x>F)n597nDsc#Q5e j~C?G>K"5%.u2djF@}^wmRBԕ(/C)ZHz{P1f@YxUcQf=RcE3nv3p+f=x)/CI^\ZyH,AJXӹ:kpƓLⵞ(Ac z 0zT#E5+^9f:_[,ۇ@0LBZ:ONv,xThDx28V v,*\[1 U_)!_оqeSeb'"K/vdt͐2kRjU@cR*?{WYITHN@@;(XEvVum`YW6,XQ,vU`uDDJ $d&Isߤ }~rL漹Uii@ >ґweêrj`VmR"F.BW;͉NUr3"kBW@Dک[ħcHjy17AO"B-BI6F' Vc΁A*7 /|#/@OOOpfcF׿H6;u=λ|v%W/]=u⦺]v=aoWumv,%^o&=rtG;#ݷ[b'خl-Օ0|QjՍau&%~81g&v#Xʴ^LM=kr.h۪8|NW6[;5`$c^*=?n-䷒ Rzf` U(Erf HP;N\o} v>e.vmκ~+]WvPџEZ 5Y&?рg $Mx&ƋO!]p|LNQ* y3Gjӏ|ʢ<^Pz:qmCHy "M?Lğfʂ ptJuC;h+ǮzENwm]woŮFjWx]~u.i;nmD| ~Ƈ|Mf5=hH,oi<8.n;~aks q$cNӇ([mÐs~.xHj{ʍ_q c/9z^-uS|Uu}I_PP0ۣ|x- -`-lwX8'#Va8.bť`Q!U,T]2\ Vӿ *.L'WVlCӐRU{~fA]IoW@}c*oj_   _-sL(miE*j[?~L~O]ޣDžsɫLlX1^֨ ~eKplH#Va8.WA?/]UZTbr֠Shsl4 o^,&h=xlvFn/]*k<#t"^j%bSF(2r4XA5]BdV3*i%LӧWvwi[t84itSM.{h{vلڦolq-9=Oˤ7n4nS6| [ K9uOHӂ3bGr6_Omw7caI#x!R*CVg޼yU~rG@Ä{J7yle62f#pM}Z)ֳ}*x^h,v{V )#z*VAmuDB}lt9($wkĝ6 )6}BbNdKB~sKS5 T2V{ٛǏx@_E+CrEqs O. @Uji R==~ϰw>j/[>vC}Ul}䊓쎅ׂ|fӿckN9:nGϦFۊyee~Y'Va8X.sW_8%ԭRdd_ [H0@d[vy 0y"[Ԏ.鄉(k* Т2JɅMT(`&a`:EVސ@O@/jx`V)k7 NF-fnÇIRl)ru;SPIe0j!h_FBj1ggSOB{`ʭRHkgXo+nG=mvI?fӧKkw/1mO;ddkw#le+[V fN,zTc=l?ߦ~_q|}Y]=AXpo~{]!^z ZM5+HeЖ"6/iȃBb*&{#09_]a[ZQ1SsUR4E ,N;v- NDI!*ƵA>I:.2:%2M]a9rxNqGg'DM228|êsy q;ٺap]$FlHTR pۻ 'tm~6)_u,Yb}g+&OO.,2q/>=!9f/m>tQH#V EjAGvkiv7IXF&ʭRCp\|THRTfJ:JUG׸ v4WQB)`T־eQN7QE-TcحX[Թ*wncuDvv8DrߨDo dv! 5C[uumrkoK_?rSoJT|tBhubi\(_8~ d: gTfX˼As[B9>1=I˿uZჅnjmcoF-X`mg>c]/~qx=p{۱{vuu.pۂ+(((((((1KW_3L[hg4(YռXr馛8uQZAUT S` BR?ycII& WK*o5Υ)81!"<Rl'@ 8%tt/6#NW`sf^mp.j{<&vĢsiNLЊT L!' K)9ޯ ˟rŸTOʭRHkgXoz?\Wڅo<֮]ví .\lZa.;V~`DV;X~Cմ+e+V:\AA'@4ROʰ2s+:.|p\xۣvioo{&TX#ނM=b,yb\bepp)#o TGm\BE߆qP`8@5Ԝm@ "]̾BJMeUxKyY:*C:y*G yJɄ˕^mAѲdȑ'4l?/]g>D"ij5Nڷc}Kl_ٿ8κƳb=7[b\tRX͞6Ο3q5>;}loz vi?^^PPPPPa^ϭa?>5ί{+󃶲Vmݑti<1x.Gq٨%6JΨV)ړk-Ncm/e' 85 6.Mƾ>u3}V.і]u*$ptlAk]2|$*54 G;ե*$d}YՕɣ8dM+QZ.BTah*QjAQ‹ү3,39 "o^yU_g%mAÁciop=m5Ba\&${mB 煉)sOA='_6!+!3lKra4O9r" .y2YzO 5!ᔷkպ:$`̙p2@6+vM_B?;;f%vr=*5xvV)?$G'>b_GO}̾'jʧO|$oǷ;cCrp،{40"mc^Wm|{ +1ﴽ]txIWDW@홡VC+]Γu <~۔e% 8ョ0P@'Ƿۘg-YrUa[kc!/@*T 6tTQ"D.TKlv̹n[" UcuRt.]D> uoQKu(Ab[:7 7] lα_AC7B-ڳ{M4EտBnuO4,6!ibf( E;)@]6 ~zRorC_!4,>h4~]lpX煛uӞno6}thZqٱSH#,ƅ)W_mcfδ~쁱38{ٙ]]u;&ǟ:nAvЗNCayckC9Sa (Cy# 'bqްҖEտhLҢrRZvG|!ŇZڛpm]뤃ƭ81Ta9f;4/܅sZ=&:5-8-zUcsE::X.di<8lRH34s`./>+äm [ٳ?gu.j4,Xƍk}ƶcgδ9'h}lc+Ə|k8w^ / _2;ܙkַ<;3#\Y+=Z\ʭyWFA<-_VvGf؇OYBÈQ;^@YĨMcژg]+n (J riľT³*,dTTV.e)F)+ lKn4ɓr( fmؼ|y4+![㐽'Y x*=ldٍv/ VZl'ϵ\u@}0[r$1}`[,T K4xr6;qCm66Jq++(?K8eW ~|y e!:!)JqupZ2n8lM7R.>3ʭRHkgo \W|vO}gNFXG6,ε_kIX`}м]hNwb5VQvu]v5[p얼چ(r9~dهmI?^F4_ɶC3V;%rs=[' m._1Ϻ&Jm>a7 L mAAsn[X{Ptr<[?j _28|hBv^; !s5J]\ʓdvф%EM ۽=M .:h -5pwSUsh/՟7S&*}^B!Yb`dخslM7/乑$:1aBU]/$rҗL4^Є/w$=ێ6)$ OS=Km„[keb6i*e}}6f:\ms)gB]; 3_:f:ӎK7tǿer:4nliWt6wQ;j3.,l`h|9F[[K*ԑ-Ѽ,y)IO Oy]"'vsqҥYzMH*@!Ο@yz!K6WA6]֫{{{`[-Z58Lg{[V8N"EgRW7!.[^qor1 y,Ӊș,7ȥ=9_e׏2vsļyscm|L<Ċ`<…+tlɵAq%W_|/Y5j,+lٲz>-q}cIi 841Yׄ5l/|=u.υ[&߇sA{)# 8SsOoxPvw7x9oor1)c4Ei69z|kJlbCS^WĆʓƟ X,ܬg.6ydm[6ux]5:n;qBgDGG<Θ=+F8̚Wl{tQVn 6RKsʅ4 -`v4Ώǃ9y Pnx:z }2av(Tm ܊m]obm|.JlbCS^WĆʓƟ X,ܬgp y=Sg?:䐰XӋ_/5b.;Qv4hMC3㕏뒝uz1 mfXmB*((XwL P= S/l@:z0+*aPyFIĄm^T2)7~kͅ._Q$k /R_<*mUCN<]Fˏ!zv폴(/eT!ĸ@'Xh40xdu|eKa۠mާ%Kc^ ᠌e}Qy'/lld7+n#dR9\k%t#[oa;#’Fב­ُ^&2 5x-di} OEtlo!\'wǩpa#(!5wOkEctyYǟU+@1-4Z9G%MyꃲV&$RM˅qJ^L$`9Pe@({FRS~IvZES+mM6u2:lx=`${P9Pn3ڣlvKoɮzJW^]v.6~xauϡvu}E4-]^nk| }>eF}ƯY_}[d /t,(((((((PKI)p'E&HY{qT`7WTj"JG&E f Y~QpV. :hrmR,:Yiiw9#%Tq -AspZTE9wuv$cI{@9PG{ !B6BdI ef=~~/~do|~MlJOU{?6|3l] 60[hg4 UI.yU i1vi6(ڨaHYKfb|/3]郍m :TPːblosHk|} rPML5+LlvxUJ,kɄNA:(7U0 /lLmpDA?R G#D~(dp <."kȿP*OLE4G+5 X7\@3r1)Jlp3m+cJ'ǃr0lW&wYU˚'>u}he6s eyIkW9poVD.p'BK.vl48GwNϋmT_Bm2Y7v]cq#D٦ }-"L9o7=жo./KM0m5c\ U*[\k5%MI⫹N#EȼCl@A]b\Is찅l YCD:Wd7YRӟi>=>[ΰ*նF+;U7WAAAAAAAAAAㆊS2y0IgQq \!7s9╬ Y}p^~D5վI4 UnIB&IF8Zm[kaTq\.v{|mr`.T<~ަ]Wi i>>6slDKD~ 980b/> =Kx2%y:q{U}[p@jr8PKNNN 6$u⣬wٸ?6GZǼ+³(J ΆzixׁʒE#GA`BtPH(]Gd`1WHG^>>1!uD7GJ8wƱTYoIZBe"ok0ԊLʭ_"]ٱczu%ρ?8ۖw͵;gs 0ó|mH4$k=rs++Ľ[r$b9yE ~yv ǹ֑'!Az;0jV}qYF?hWVJa9L3nS`Pn)Ԡ# vY=5s/ls" ՙq"@kt4n/ʅ!yREs] Ʊw/x nr fq{BS&# 6<}}H=g$!K$4WDl)z;de8t4@B5yQTfţv&|L+ FsMh}6t&6:U jx*k[`7=CCUji2O<)}Gp璱FP4R:坐2ǮYACiP/!\b1<'cӜ9<2FDH2K-|=;D"8>I)+A`Ɉ0 |]`]'x3@1~fuXP$cJOʜ.sAAAAA;& V췻_m>z:oxO˭RCp^(cc񨲒|O0yHvӄFNA÷Ҫ} /J a;!eӄ Ⓒaŕ >A=*E޷&A6jqʗ'xzUIkHG6͟o&K_~ IA=ՕW["]FQ<4[@n[v0aAo훏IwAh^qs-g~}+߱~~/lϲ#`+?g3]\AAAYz酢 ά:cqK?5 {u+C1IJs@0iBkY{؉3e*ã3FuLdƣd5*IL5[C6gpnE12gT:Ƚ/rjC~iq)j\ )6l%:9 R;=G9-Exm$U~RK Z#XjF2voq.؁cniSs'IfX-4Cڊ墮5wAu_iƇR5l~6oڞ#S?+~hKx:c? my&=Ͷj+amv~=ة?K F6]>$#Va8p/o, U}rlbV6[ߌS-.8i0&Y ^ OSW}+Qt+0k΀ʂcZq'ǻZ M.pTVWy> FXяyC/cnTKǂEʑ$4AŀQd ;*]B2ǩJрMtRx\8Y |eW*NKG'Fu;(|61U3:!S`4-(((x(Z۰Pn xUITE@9HfH9;.B$k5%05s. {`aJV 9怚׭RHJN7}6[*5vl05=8}}ߟd+,~-Їl髞'<cvsGH#\x3:$Ge9s~am7[p6w::2hY+Yg.xK,jM}ҁ';~4b;{Prw>ۙ'|n!SۙyN^aۂ(Z+(` ѿ^7W }.pu3nXqRj{tbiZt===6/\+_%s#]7> `pkێGKt[\ErOa/:,oz~B'y}P6"t~>ۈ˫fwF|ĸ# dMcZ}/n=gew~C4iAAArͺ{'=׾?ʭRCp]oLTq(U"uN2ELU k;|QC296dkj )Shm8 LɕEOU[`vM_RZ,sB?ڊhz3yrаRhdP >OǦOl;LulacT [ m]]xlY\U'n#i4f.GV tULb4K9g2&Sy|I#r1[Ǝgu }c8{nv=@ɹmy[xX1nd_qӻƍoӦMӶҥ6fMlW:n}6:nZ+?پm9'reŎ\^hX-α|sovn/mW~n.؝f~^;OK=^susN<ζ˻#njimԯ;+62;헧XvvpSPP0Xѻ줟kͿؽOa;lծn~>wl݁Gs},+5?u"qׅo_ _|X^^*;VM#תMvHPbTUJzNn3m)؎hQP4pYOE{$KIzThP۴(>C3NID6 \xiV}ZL(LeS8}u hG;68ƶɰ/Qm'C*"#cꧤVq3q{||wv-Ϲ)((Fl W,_o3zxFwdXLcg{u.Gޞs=y|(J ΆwiY?j#M" QVՁق DFw.aD$Y QBt6)a WwKwW ZW ڴSEHn^57mNbH1r} Z&j gY"FqQEMd<Ux} !q[P@hT~u"mK9{6RU#YF%OQ b9a#Tc I R(km9q;-\A1>vW(vQnxk%C|&8|`)(((<Wtf|߻]qك]{,[7-?ZqYxm뭯~[hLQYG߃^5B:KcK.ާcCwr4q MF|{ѝwM]5R_uO3\֠o_ݾۋgv{M $0uö/ ۓwb70#q~oĿQZcVO?;gǝBLjSAAA0a>aϓlM ƀ{\ٶ ogܬ;~?іoYawnj Ptbq0jw}VoE7y`ڴ3f̘ {5CxF-9p SjQlh J}qfz6tM1єS| c</|tW{;m>{Io 41]i;pnq8 ZxcEh|m$nm▎죿񅺡; (慛q[زsa+nVmNf'V<~΁lcCYhO^;0r;oR톿n7z+mEVTQ"^5sIgīפ?{v?nGE\X-;){}}mb]eӦ?=-M ޯbTWr_61bap_q?- Į6ƝMϙP'm((ڥZPAe!b|<8.,XAL&p2sPɚI'G8*ȳO*Yj*}$Z{0_\2R;֨U0,AAȊg?ضd_,mUƩ6]bi f9LfΠƫ{_ɮ0N(D<7Ŝ輇yŶ;{v=؄l-6ϡniGWQɋj6BJ6s}h3]՚H=0(7Ϯ6ypnIj=8N`]1=( xgܬ-o~hz5ΎQ/x}ؾqlW?'>h_٫ `~48Z+.ЮUV\PPPxF]gMG 36 'mg, dȢW*YȶPEAiZW*›tAJX*PVWdxtQmq2yպ*N:C>3L9_֖{aF/ ~o$ٗ'\C!{0U0p.}w*@6eR'3fžEL%sU ?3pNXgg-c+0j >"5Sf[!WǓRҭas76c.<66y<ա+^6 V'ߡͦl]o ^i>s/ʭRCp\΍GgAE*DC·Ql.ZH 3 %ir5ȇy& dvd!X610X/|Ë)?Ƣ@V)D;#px5e Η-`L>60w.Hɮ!$> ^J5|Drk ui5_A1?F-mi;qӐT?|^cT: IDATB{jUw_T(vJԣ^9 +f"7}8.rD76C6PHE]Zg[zUa b٫OgAAAA ;& 7ߋ?l/{ٻdͦl#Va8P.n3~ \u"D,8E*;R}+/Wr@JO/G] ȀO1 ゆ\B!K'OG#I>PCz*#*g rufF*^G;9E'$ƾTWqC^%$cB r2ߖ[lcV3^ ׂӸ*I,%;X yUBþʟ=c.ӟ/ ?l$;yٜP[>lЄ"ͽ6M&+r-Ldqs AÏp(%=b)=*[|\ U"XWUS$BVxۑJ93ƒmH|t~ ks%7U*Z_HeLGΜصe9*f[I=}Q<)b]F ]-J) 4&_:i\b㯲 &}ٜ9sYZhZGoƀۧ}f])J ΆuiTF*!̡bXx!lq -vUrU sŇ|l.Fȍ*y3IkUPܮ#/hvRh]U|C]b[2V۩RL"l;4e.pJ~x2mȚ,v>^k!N夺R#6m-*[4l!{{\[)N1iO1VD8N])Br4] @Cz C0E.hs [:pJYNHNVcn ZPPPPPPP0,͇^}JH#Va8p.JQbA,YCRJX"f74@Xf/de $dhgE[DiB[`NBˡg4v$JzSҤMy}E1H&z]&Dlaw}u<%ѧFul?Tԋ, Zۣ|O[ @J9+Ρz=&0)d7 ulJ8yNyڢ/ q /tr9sG0VGPǕ3?yT?觤Ke<3:*5xv9Pn c'WPT ([%dHH_\`ۮϺ2ԂY9 ꊖFM9s"JN$ cAA5tac[>A1zUA}dӹ&š`-l`|\{Y˃HdĕMQUw*5`Hr; }a}s$d:h=I b.ҏں8CJ0oS5|H9N-H[ =P#ϝDRQYag̙4Iv eᦠ`=*54 G;ʥY(cX\Ġ*"\oґ_I-eEΫgjA#6}.hD.)+d_ptuuɭYdMqY< ZC>Rlz2~sqdY5"E)6=UPWw(j|{Rką9E+&Ab|-cJ+h(1E1‡3zM1=ޖ!VoPA(qe rPŕ6|&}x3m؈[<# VcSn*(((((((Qn x}%âZj b I&T *3'RA=a`pdUVYWbT\C]`1JQ΋l2 = ErjkUi-RsӮX̓!O ќ{I}:σd0WSط[RO&ړkdjY\n<4#T4̪.&vV'xeԄ xѓ~4!T5)w:?%LA4 ;A<ٖ$%*>8_ƤS@q@Prc]˲&[NU`c ?$,Jy%/t$ڑUP~*9tKU(GjAяO:_PcFnx7ƌr0<ٗ @,šׅ $yĉUŤȎ\bjME '魒V =F 7 sNE*kT޲mB &&֢a~p'*>[nhZ-E 궂8l$Fҟ"ϝ/xe񝝞|C]Dyc\?A}sʼn|*ēh~-ڲϙCnS&a[phK5*5xvVٳgے%Ko]襁}CX7/z[xڬY"kAAAAAA4{d͞v F,ӭ"VPHM@T(dPvdq WI[J/U1Q\H]hj;)dz$s&O"SMNЮ`CP̩71aImT (X ,v-R^>?722sULj4<R`c£9n8Ύ:g U )wϏw vm8 7#ypL@* 2?"e.l_Ƃ4i26[&v~d1:Vq])~ ʭRHkgnZZe6)K⣏KUȂGħ2vV=v[lҎ"T_l3&j/q՗c&5 QUqܰ.dV6V"(K\H Ko5 poC!Ys/>J]|yJYlZQO(;x#*sM,WlS I UL#jj K=9ޒNrs$Nu.-,y<=|-p4Q-W{`xN `W_\A1Opڮ*mw_zW27>੆r0<ƣcŞDS FxQ)3*\U0ŋ]ϵPX+/V`<^RZ`^JTk‡D>#B;e";o/c\[sh==l T|tu-BIH~,?_z{9^W6kXT'm2k]&O#b }s`]1c<wֿ㎒hSPPPPPP0ѽxtٟ_j{=-QxS?Yv>5>nNYvꐖѣ‹ƍ3_xny\e&MŹ4q"(Q)-U!Fuʫ}F0;vXaN؉|f.[&MA2-ē'e! ~Vwzυb| ĵ([n-)f|nb 5ABq 9B=b% 6 ~hPcƎ!fcƁI~Fs=߾6C](+eX694oM7/yjE^Dϲ~[W(J #aUI hoSm'\ Xu Fz?>n<4iz]̍-쪅 iGcgG!o R]qDT5cܱ/f%-y y{?`Cd[_g-6C^9z_9NK<;&S7qߚ>aIxLMLmxy G'~c %yuCjVS B˘6}\z9>.ɰ:$Ku'vdZjQԃjʿ9C:i桇:ڎ7]x}wǾo裏n"[AAAAAAH/Oemo8M?6<_>T .CAZ/>/.)x+Pfa۬Zj:BDPګ\u(YߢM0f ]E0 0ZɜdUڧs˞)+S5R@NCV4 MĸB/#}heZJ̮a aPϹU~{1R/ь=PO)x޿5(0g ў|H!M^ʨ}:N` eO(E:1O:v<̩(|0\ulVB и9Ƹ]!^?./bUΩ;8e_EuU+C0k.}hFkmƎT[hI4^\]رTaʍ*ʵ ŠGT+N1|Eͫ]3є-js1(ݮJ/H IV u2:M_WA:zV obZ}&9ԉ2_N rQ8n[v%E~cOvJX!?XsQŠ:( TY`[\؈%}$k l+ةݘ*|r<`!v891WI5eB_#8.y< vq)z<%+_YKOPbUji RMAėoSN%}lЗ17Va8Kbu,TeZ1UR -I'au|(₊TkX=𑞹CdBX,ǫWX{v*v`PTZVfٓ &Cv~ܑG ļn@%0j.sU1&0r)s mfg(6xi@ƶp9PTA4L EGlbn+ӆsuCcAc"$Mp5n#!$˭RCHkgXojb¤#_muW^EGe;vnӦ ]PPPPPP㮛6YzZ2o}5-(8+Qʩd'+@&[Zad,%],2 "yVhA" S*ooɷKyᜋESP)s D[#W̩/?نnib\ᇔE蔊:ԮG>ر|#T_^m RH-_'tH9X9H((8N<.ZČDG;7ۆ YvRVuq2jg\U #7Z gEbcRW zf]wwuN믾Ͷ{l;a{K^sh}`cCw&N;]4[hɻ4%!K9_ ^0z69ЃKR^(*2/YEie?=\=Kƫ\&gщ|$s ͮ*1 aXL %iE'O%:ZmRD KXl[ӋL,Hᶪ=P*E[C%b%<7ᴱXHLd}֌)66tAy[}&@=#H \4qcj4L6uRxq,\gGv!e2+`ws~#ɣ{+܁?6<ߟ#'V)K-뮸nJ&_*=-2e`1K˭R c/ϲ2+9nYށ/vY^H ب0aCUcW"3 =mBUSF _JC2J@&tUFk?(@;3Ĵ,]OТEfB8 /4j+Bae, sEŤKw7B?}RAיZ>d)m͜1wUMfƍNy JV'̭Z2ִ\xW80 F'{x 9}D#:yA2~OOuthQr. >I?GZ;OڭR PU26UՂ(bH~O>v>d/7#Hr(JW,m~Lo1BN6tҞʶ0Dѭ;y]hI4\pa/19>ˋs 9~.*4os"qlwfQN}=|rGnSK+:o\\ZpK1huR!b9|JϜҥvΝTshNK%H3hx9uTP}*@IɻBpsw;zrܟ-[@):s/|apSE"cO:ʭRCp3ƣoycaZ1'8npXTDpJ fV oLv(X|UQ#vlM&[,Urmvw hA8NXL@Y'1a9[ͣ$ydh%> #n{dq/'#Hkgn:裏mv>4Olwu`1[ﴇHCUjhvk,q[ޏ[YyRJ`#jS#A[*SOwl 1$wPY f \RcRr}JFDsν޹t$ ;妝g@bX?'Q >~ *Msd9z:#rZ\7;H3s*2hܰ62%-| 쇒~ǑfDeE,yԀӇɤcaM"I/b߹`>;+(Xw qGW;=#^p#_x%/XWfg}v};߱O<1l4>P[`O c+HDUjhvk,Md *TeEEj[*ct#]KiN  WfdؾF_]7 *w=D}2kV*٠qDF.]^͹ p@tmJ_4#=ܔX :r% p~QUJh?'"^)=W~aiA *ipZψ3tsòߟ#'R3_tmNvuٹ瞻+oh}ؑr0 GQUE5^tlˊ7ؓ^aS5Bb@zwv: Z uSv*R{[}BLly/D4B/F-\T9n?n\pS-AL erIRӀ/`aNA'F3цXad>i .b}+y!}U覝{R(E8+]+4[n1!٦F`Ǐ&عA>PG?`|<]eL;p9}RxNl>9a?l֑ۢ-b1F: f(~lkeώek`$FZ;RO*:FÎywxJ;w0F:rц1-(Ic^տH#XzŚ6/ >hV*PG;bҭN!.g.'Q ,C[~됮*|إjLMb'Y*;I~䛱 r&[ -씌nPI:"[-P 3sPrJh+'et%5lܤ61Z!BmIIEV 6 navJJ-{劝ޢԸz"I@;)Y0SxBN_ͺybH5&MmaW-Ϥ!Mm@ Tc}J:G@3(H]hi-?i?&Y7G؍밐lb>&U)((((((x\3>kzn}]y^pMUjhv6XS}f**xs]WGZ4 wNvC{Fy%"@&"u Pl*(۲巶 bQ! ZNzqcVIхֈC" ܮWHՒMmJoB5ޢ$m Czc"i_y nW8lTJ gjsڔF*$Cމ1`WoqAЋF烮f\vU[2ۄ  #HφE|;F7KQG u yG%nzky&FZ;V |^>DBשCE]7i asM<7r3!?BF9l+ny]rZ1~>W, >tQ;bڙ؃nX~OsrTAAAAAAnmxs̮olݍ,[xw 7?behPBueJ[kΜgW3N*.w.>]s#K켛g5‹M;o>j:/.`_ߧ+8`-r\e~|`~wW>GOv<˖/W %]J./Zo"طKԓBWZ-KsEJϫ=8n> K{0.9-[V_vƊ ڗ=»8Jo-бPmc.4^̧iNhO5Ogmr$J@sӍ]1<]>_$Zq%\O蹗xѪyfZy唷 mʅ9糐H٧.cjgitǮcH}$:`Z¶><^y18!:W\Zz-iH㢚M<:wZ~?2=gh 9wϼn DX/ 7 FFᯄnkO7{>Ov?[ .7?K+`%6.|'+{yM,Λ':eJ}YWVE7<}lҕv-/ng] (/6t ~͌}zTBQW@W{(rwPX36>Eb9k  3F'X:'Neݮދ mec,nj#bT1g$I;\Cx3W$:|~`=ftpc#U}\烠}4Џ?}BQloBc?q-ǏQǍxxw|`` )F8ƙv9?sn;ds>rϙ" %Gwx\Uu)r><*[#߱/|8bׁ9!e~GRS3xzdml<"yոhQq2 Fc1l&MT;s)l~?;9x|u2s{/~6= ɹѹ yN26ߙoh*&uŐ4Ix-];]F:<QnG;|3Q 6m6mMˋ,ظ0}tBiP[V!^ {M%{҃aD].`؆ ЉAnA.H % J9x9dP!X2bhhKKI"W H"Dzք\jǁު-甲+8mfyg$yqk*<4r )^a>C sQr':eU U*d&vy.>m䩣>`ty-†/X) 詣33ƽgHT * C^iC_ڡbvГܒȦ3P֦—GuHx$EX>jTQO2>z7 ymZȄbC- DDWIpeEm&NC>yՖ+n(!'sB0 qu}67cKH﬏3"+HcUa}}~ ]~dr?ЖEH '<VPإ9m`^KGu$?7*P~84U Χ4@uL5{#kv\u^yY]'+ɓ'N2ɟS;ä>o|;3{hRPPPPPPP0Q*54GUN*C/Ǧe|LX y*'ui"+d-p7 JBKB-:&$ ԟC򳁝2ί۲E]RkC"tvC^s9ȶݖtGC7ghJ_>Sto']vq{{b?׾ڞ6mSl4{뎲|s~6փ_{> .#Vss݆J Yxm4O,TqN $Y*y.y|]QHf{S,`X F CJ}ĦԟVF?~@]*tN]6}\|F*@9Sf>a Hs٘c+|{̮$8u`qA:D G$9>9ȤMѱg 0\-a̩6HB꘣Z˘X|R2#U_[/6=Oq&3zI_4|.C?Nܫ| z}8Kdr|.~x! 55HB7DRjcp싫g vlE qi^\-E.W"6TC|ԾPV|.:`7c^J{sn ѣE=-6.c\PPPPPPߎ#!<>xG߫Sb\[*6æ\WVpb YzN G>]tȢئ.ZR\P^' >:F;+9R|<6×;2*jIY[OIt&8@C,9pZW }&4DVޯ!sXB4USi$ʹ:If έ@FǤbWT?T \b2WB9"1V>XLx"6A4jt>ԩWH?>mH17!I,:Α( W!9Pmc|14+V,@̍8[yϕRrxl{vْ^`$1nkOʧO|V}k߲|Sv9|mYю'_zdb?Q F&,si?/?]u75ġ9(J Ciکw2Y(ƫJoJguŽ"U5`"aX7WmIiXY):la'%p6SRgհCLJ?O`hD "磡c>RESq %9Igr^>B]iW[*=y:xiAA&1crn!2!9~)oy*rzPQv?6O]2G!HlǑs 9 Fb)*U R/eHj2v:bN j" Iz.[SS&Z_DF[I{ة-LǝVb.RҺP(m1p9cs\s#Ws{g~ʿ9Cð*Env ϾU{k_mLby~rr7NЂͤ ~__{ Fn{p}Om'~+,o߱KN:f}c/.s:Pn_nԾ_͝E9Sa&l(A7EJf+I~Q&h IU39I}`.SH?X%ͫ^5ߍhUm_%WH9)Jox‡94HzNF{bza#\cN |.І;ձc-،p Kʔ fOvJ-6+(v*}Or`RO[s4|Ѥٵ2@fR.J+, Eݡ!U@(æïC}ii/:i[i5Y;sakوϏ'M@MAm0gwR_M_׀58W_5. w܃!Niiӕ6}4Ljf^K첻^CG7gh[Οog>K';~G..g Qjό=dũqǼNW09`drq}ԮVyιvԼ9wɦMgz/ς!k0^Ⱄ!\ (mO<|7(?ގ R %vX5fB!/" x,J_x Lm_BLGVgk+ Vc?TmHB>\Drߓ8@m Y@N} ],PQqݣ7i|(hUaRnROܑb Ͷj[r6(||)K?Hv9E4cf(6 $͐Wx}6^7-"V &]G r8p NlK}(.1zCjnШlZ8F8?P]y`{<717sYص7b?3} _+^pЁ|¾O_B{+E;S|]uM/|Վ}UPPPPPP~ t;ڰͣg/x7aa9(J ig ׽L|#^̰JJ[j\淚si2.tE^ '/|1}P`>c^~)N" 7sQR*"a4L@ FU|S >)KU^ؘ]+xDk(e`o..Jd}mBfӃdhR=r)s $ 8Ǣ$jlvMsKzձqk.Spŝ**±_uP_ !=MDsIy.1W2p3ky.5[^!3Vqqx]N!xPA?/t.|E.poE)A _OQN983̙;O+q{1D㦭ݮ|ӎ=_~kuVPPPPPP1ca yB2KoƵ-C'*Y##<@?|J>58R槿zh'Z>`H;h6I?>_z98ORpB@W& 9ľW'%#^iى 2P;EFW نo&T㆏+̨'rIbiz"#?'tkjW)φn_/FVNd_oл>LKeb85iF>V-X 7>NO~vwѯ~[_>p vu7. ' o=eƾv]1/79l8.ϟ[Ax+4t1Od E#ل2UE.7?ݖ5YF}xb:&59~>xJZ[zYM%jU2#N"_z%Sƃ~+5>GK-9>N)cǼGwj_!9|[#$-)Ǚ^|~3)o*˻ƌmu}'wiYg;^/^7gma=vm!e{nw,3#rxNcm~>y6{A]dvN}<~u.=vڢ=꯷yFʭRCúk !Yh Z@*ΔS1^4ZJ *|m '`ŚOw{G{7LTW^ĹhTRCc`Vzl[R"ru4Kת.`hǜF2q+mK$uLnjE*iK0m#{:6*GƸ<G:~+;6-6((xF_h܆L|RI P :îҮ>j.^,șfHο/@cl8,d;) q^x/3SsPxt7B擖sO9񝵜PT֡gH9>% Q8|Ao3)@ĊjS Q-[ϸN OsVm¾Oٻz~뭬{}E|>oϲ c^k wɽi6cڞvȶ/ lيeݿzW6z;s}۽R,p-뷽.=Ӿ:P߈Kuے9 -e Q;Y*6Ud8]բŋ"qj^ ƿ!Q*Hb:?/8ľs? F}?+jL3;zqK)k]Z9C ' ]A6y.^}&>轫\NY"w_Т"b46Nz&ŀ3Nio[C>s O4ӯs#l6W?poL*Aݞ~ԃ~`){^K"u<9.]OE1eT_pCr6j;ر $M>J#<\S އg|S<'sN++KSQ3\y!*x2̼Afl]l_{ͻ6snϿ,8l<{o[WmV}_n{キM>ݾSC[PPPPPPȿ̙c'OG֘2]i(xh^k["OݻN<;goxߕct7-Ya=}~h-mT2^=W2 q|d4;vn{Igl?>;λa{;ک>`ow?ǎ>27R{'WW^j/;샇6>p;;9;Mo[ni.3*6b/i]rb;t϶C ;dٟ@ 譳nfe:f3f^l&~ZB{neo8`;-\}zv+(og?^;c{ֶ++~}v،-,v,9ag[o:nz`=&Mws0k[`착]~MH"ym@]`{m5Y{o5Ůg ʻ[Nuۄl{dQuswϵ]:s.]p#vӷqeGߍk q?Ƶ7} ^zsiǀ*徹Km[`i;o6Ѯ{>fs[MoQ;}G;O㿩]r\{ϾT96ڥw=j{m=.kd{`~aFElVjnox`={'gj;njc+ںc=_1 1/y`f*Υݦkw>tv4n?T9}1m̭8A1gK=#!{9 Kglf0/at|Lgb]ҫrsR hsrg#p9~ӷl{^glyx]n>m{~~u}Y 0\.>m;;bnވsϟ}}؉pa)Ggo9ӫ7=?FC3u wC8F?\6iݥyu^җ>q ;鬛o~qdE^zrv^`G~v[G_Orhs{[gcׄ9o:nnnONR3^~[Oe`"kfu}mknym7i[g؂e w3/O޿optȼ⦆Ѕٱ:zOn>7۝[m?zч%7q껞fw?ܾtƂЌ̅'ͅ?; 71?>@-ϳWbϳWϻ}wlx%7A.\{#!:pN즇S[w,ܐ 7(-oo^8>ʽcg`?BNAO?\ 9o/go|˫ Gk/;6>`;ڇ칻NB–S>[޷8m";3 WGO(l|v؞ٟQs~/ivl-6Yt3À'/\ڇnD0■DϼAsvv1\9mo" \ّ\A|.;.,m6o7=ȅiv :ݮw/hp|{&{ lm}"`nttأ{l-& .H\l\{Xu>[h(k7 |7V=v}ZT" .ܠcG?w-6Ѯwr8AK폪/9Gt&첻3υ)~l 7[M~-'ۃm 7{b,15.Xjl=E^ův3ұ徘Sȯsv[B? stpEʅ+.mͲwFwϳ]6c1psr簽@bx-p\ΖvO ?+p{UFπy>c;炋(\acG%rϴ|Oҹ>7W^}77^}P] 7y\D7=q 9fli {bgj' ?~k'^vE^Ջ=ώw:}'_9q[ 7}O=vޖ-_nz~l햙ث;Ծo{qs#oz&oWլd^PPPPP01}RGpf-snƌjl߇bYokɝFݳB㺑hS3oy)nеe.AGn Y*쉼a~yN#ymإ[4 Yy;8M"%Ų߼M_JGH r\鶉/bS9n K?Նl5hg8R/PKmE_>y.݄2HO%Gt:R!; ӭCl+Rl%G}/x$99SᷨqJeұѸ'E:7<Ƈ}Fԡ~|fB7QmBIӼ5csܤ@Uqp VC/|j~TŖH9<^qy|~gf$7oTzRwq$9;gl\ҐcQ9@ <33rA-ydBR7lY7ǭyU[`cc.L4>֣vȳeƌ{e?9ȗmg"immfg[{oRL#V\AAAAAAƄlzwRf[;Z ϛ?(Ͼ;4f{nngol(oνsl^xzCE %` NYPϼyCs4H%+ /0Y㴲-^Ϙh̅ϣ4P l#J_k A6Yd -HsGe)p!;mXdӽomJm0ocf)@ _,xzp\}oK}u1{|'C3__`!лS%ϋ g<?iF!#A }͜n2'><9pђ/~1cRH(+'WHO䰉s/m屘ڠsJ`dQp6wdMJK=G$ZٛVT7g}b*i#_b_O8Lr%W'N9~?[[)-[d}+llx&b ۳H2v]ɣ?ю~D_XWr7~PHByаvT3uF$ Ua:(/؀؊~.")SDYd_I(Oos_/XNzU8_|cFu">hW_nA.o‹3%i^4L-~! ?*C¶8Ιٓ-|7)e:ʼ91~%M1vRV걩5g픱nX ~$ 9bWR|4פע`Q:egԦ{{ҰhS6ԖLr{6z:uIEE6!7~y=sBzrmch<蔎[!Z>/;ƞzm[G({zo̷;cCrp،{TPPPPPPᨃ&IeW_'~m立M\tOٔ{PAZ.*d@ &ܼxqO^B~GAâ 2G,}2(Dh $L^8y2 ,Z _q.l{~7|X {ӞPQUMl/?C@ *-h(aݪ9T'cNvC '*>GVP<^mƠޫa_MPKM5g8V' :?Ùyhc a:7V_\=ا V7')W|#V;p&XϺb 7M98&N_l?ೢ;L޶=k3_~;~ƻl\ȼ,){1=^%Ͳ g̮x'Z%}cW:'~_+Y?ckX9^EJaFqnnC,CbG9z0'o#ùsR[;rN̷D`z]gT:/s10?@%V8;z>>8^+z;u`~.9ɌOyR}%? `T0k c׼1|d$v8p6+<7˟;KpP?n8b؂[4W6I抋O9v٣?hŸ<^n.tvNDL}?qDgk]2oh ӐyM;{,vîw~aX_79$> x ;I3H<1wrʫ]Mll<`7|<;\W|vO}gNFX 6JfeWYyI&fB Q6\.?_A BII>g3$39Ad.ۇiP]`0]LtAtA!\{m`R.?S?i!<_?3fzR qn^\ Hn2pW%3a +)p7׬ U/V&Tjb$HĎ n0c\*ELCϹ X,4>Ѷ&q䅮dbl|e= jd MOԿI.k]&hGN;< Qe81@;kɈ O8ظ'u'X11,v:c$1jWcl З8TZ*[-@بLl*rJD9c/v MMv.XЄ0F Nqd!>R?5d#bX.P|08Qתvk+u ڭÓtF{6>{jH2 \ie\RɢU\*JMS؇>*}l o {R:蠃:蠃]¹疲hQ)GUoV)sr3++?}V99~eQ9AT8(x:q%DJ4\6!&Kzp>e֬9Lh"q/!1K+5H)+k|T$qXC$a8e?kfz ҺѮ)+KO,0:qgyzq+HQ%ԉ}3B6ַR3FBf_*e[me"_/v645oKM! >-%b;aaL$T?UYvCQZ ƻ-17r o#9`H 97G?To&@tI,: 1ѳK!Ÿq4Q{:lؗW{8䔽uXkWil m\!כ*}d=SQ#]K5c̣Pc!Ž|1Y} beϿ9'sY⦃:蠃:=8RJycg8lQ_yʛ_473s{蠃݂P\5@(83mnVI9DjR=]Y70v$+& 9WHb6GqFeCAehՍ:yp" #^uΤ^S*2FG1ژNRVbDH0L|4DtĨA޻Ơa7/nW ظKu0),͘IA6ݾ`gg'ؖE%O,5چAz> hvQ OQ2dwi ^6r@mm~c5~ u7X1@`ѥ`asiMՃϱ„ ͜Ti>q ,D]N b #}e2o߶%TEf,_sum&n:蠃:蠃 tJ=4hd6Oei, OL&MxGRHlHt@HdDU{bdF MN$7$NN _5N 0OUv ׹^Jc-&AT Շ6&gh)!w^kH}H)uFKxO veAu/J}b[ Kԍ:Xn C=b?o >L[.Ŏ2чV3d jc 賶/_.c _="OCPE5t|WM"ׇi}IO?BU4ߜإRwAtAtTq^O s3 ޜ+jq@6Umuɴ=c!9'7`/AND+oZ"B~^* JhW;|O}P]L J@T葖e׳qH6#{pR'zc*I>>f8/^+iۂT ~ن3E .\8[Mhw#qD7nWm;ڪ4Vm\ &xZ>m )% ([`]GP{p!|N>) 1 R]s96bOq儎gJJ Q)qъ 7)&:JEoA%0a8/쏿9{9A7qAtAt>˥RIɉ2 #Llz ŏD)hTĩň#l~"A~/T%L^ޣCLӤ!lmX# k[ × 1r|4D*FXX/+ucg~aTJ4*1Sj 1YB]BjlW+Mlma+>}T9^,QR }הW 1ov㻏<|9x6<FRgJ<^U_vo:x<?'t}D)`GO>]dN o R|+_)2tAtA5.zhidJ#)4L&ȉHrb-PQRfΚǗTI\oK6PoA{ Ҷm}:9D 3ĈhIq6#k9M9S}Obg;& SAOB@'a1_{M~}Z+ и7r@,ʐ]ODdvty}T1{uw<ǐq}V|#$CV!Ttl'ԑ ӑEB>XWW6㤲b)`bZ~חM5jb6C2V Ozw #⥟H4Kt+ !ɀH>Zka }mH>crλvs詜UZ\ycgN+'nG`ً4A5:)>7:Xd;}"}AS6J}FCˡ'>uba; MV LK5t.QpԾf_c}QiVI|a"oF3|T'ECc&pG!O^8sɭ`vnOܬY|[*'ʥ^'< 啯|e_E!CoۦC,Շ:rQ5g}ܲm:蠃!;mR$'k֮s9(9 Y+{J&+xmLDRԬ[I Vc8%XW:RH~&L'*kjHQGxAO}csev@ ۡ(W`ښCAyRU]L1x4}L~~sE(bPy>U TBbi*T'4 p vNY5|;é.DWOaz DD5zmU[6:pvw]q\eVj#&FFƚ: qUkC򼺬5<}oެA|?S1xvB5>>)* Wk C\*: L÷}c2(c 3z16 k >(L7cR)'>^/^\:˿O/f*sq Zꫯ.ԧ/^3>P\)='ǽ\r[q젃:蠃}<ȇ}_TMG2'ʴKI$31B„MD͌3M(`G*emH"1-xs)367>vNxt ojӇ-Fz 8鴇*ƒX\ɯ:߼0ҋ~ɧJŚPp?2FKU/q\ rE1}QXE,Z^q\?jNæ PtHiŐM'-= ٳfEo|_ Ko.Tesv!VZcU Pe)c~֩?tY! 敱͵?[rUW튾KiӪrfD hnϷ1#ȆxjxŲ}8 ,{Ee<?&j9cF?%'?(3FK`>1#O:a'щ|_7Y\o21SlaR9js/.v9qzrwTy敧>N@9ڷ.{[9Yzg7o7֭頃:蠃cxCJD& upBaA$+`aI0v^$-JlkB(zx;(K|'<ID)C ʉ%1k͇Qc!wT:bD>ЯӶz5Oh1rbJzo\ISZB9Ubzhcb2m]I b^@oVY^s9NݾGi-Vd9& Slأ>RhArhOb"FX7j͢*4 0%ڗϡ2֘˅3 @ aI3:֧\_b1Uf7A-hbr>%*NuDLc݉|-&vd:!ӋFXz%vz ?y19T|O^]oveb ^k]G.T{v9qs衇ٟ-{.{b̿˿G^@._ϝg~gkOw߽m[C)=r,eo+7JsE'Xs) eה?+v^W>z2P~'W\I ~+ou%ZleG|mUNZ-mmm}Kv[3TVm#Uyc&+@(`Ŀ9)D %)I8yM3&K/+qHe QqMsNdMdž$*]/)har`GDJXr e}6_p X.̓~Lb #Ij陮r+"lR1i5ɴj {ZVxIUV|+Y`LR90A RڢOUk>4ex-`ae["E j> Z2h*X!TT8ƟXuѣ\* tk}^|T#&[ > t ꢩ}6ߛڍ=F~Ɔ!c$3̭>0cZ?|1 1PfTɡ\I%"Zāqh\Ū_04OI{Tjr~vJ6nX:o\Bps1^ism&+FN:r)ٳg+˭ϥX~ᕚXreeS\|,/[fb{|&\SN+g^kx]v,׶eys畏OtA7+V(su9X9{S&;۷_ys[yǾu[yӏ2~G?Wp`kFیrb!z=63Jeņruq׽=^n鞨>U޸|C99֗S[~zC4W'1\v woY~+d7ܹj̝> 󪍣d?wXkxjv;O?;H>?@Me܁rgzߴ2c>\vdNYvx1=kcr.cDcX;7,]_Vݯױs1KfjRX?R4Xs_vq7h-/oz}qb{G-}pͫ[SX0K1$y|_TNk:ٯs\WnXxrU:O$+tްCYV^D=?)Ok,8I ?qzǐW[} g5"tqre{D+*1:?ƺ77o-o<߸Ǘ_7>~C_R؅?^\`яfOuW/-y1R?._w}W?<^qd?'#\}l^:ȼ[oy!b٫_rg$[|kC7 ~=ȉI)v ܪ:蠃`RNY\ʓ|7p\\*ьW+oK웃`#fzv`r.AR+9eS<?*W_rx:N6:eI9WZ k^`Og1 hX -;vqB`8A "4?Y02C2fB`n)}l=x ^1W˖N-vM] P> FlRCϫtAAVi!Cz%ro}m$-`gO1b}+vvL;]4Ne>TW U8}'Le:  4Eh}Z'3NOnN)p0Y׻ 1.}Dq |7VP#UJӆh#I^ H99ccc0c2?}Ay:OH|(Tn^Yl֭7mbr@7}U:nj N;?&[< }$GຂUFO/ۙxdteS/A#> TCI'bDxw /,SRtE Q݁4-} &kƗ$ 8vwh|Ҏɱ~sR1_ QM> 6XHh1s2 R'ĦM Y~*$S,VFi.vy* =n.߿ .mysʙgY=O|_6):y.k?P9/n |2p,n,WjgNo$|[<N(m'W3Xy["AtA8ۗ,2tO1|ꥵD6@bR)a.&1xW^rUrLH.9g:1&3Bg Mτ .KjL=kmcbOoN/5`:1>h3RuUDX (3U%ˡ!/aǮZ/'ƵouzqlM@8ꀏ[ ߔjBz-ז* vOؤ;Z|%NL=n =]&)f`6}a_. |Vh:0 qn!j6avˣh*(O2 2ۻ-0:*7J)_߂F?.dv,XRU6MG,a$ u*pĩNL$IOCXX vW+']{J٣Açc8>cFۢ%Ԗz'9շ±EWcW>1&gϮBGhM~;x{JMu:dɒrg'?~7~Ьa2D+}I:yYS2|ϠtMnhŽ=ބ˖*Lş ;w·Cw'̞ n֦:蠃:ODMc2 .KemN"P\郤#'Efyf2D , 'Go3q:T~:LH(o˩\gĆ njl^@ VtJГAIչ=aX1bu;M߀g\im mb`-Yi-ۦvi?^lr_U@ջ+߀uX'58+3BWK)riBHG5`?ܑxD,lp Y]EUtXƫj_dlh`|yXե\AT)Ѯ-4*|7?6Dő1eLw:<B5(dxŒxj@ьiB"61.{|?<-'Z_Glͪ#& <}ԏx1v9qyJ+h-[&c7p11;+su')VڌEyI:蠃:蠃}8Yno e{ ~0C)' ۖǘ-ܻl9@/  X|)w=2xaB~MV'NaZ-z];X<yАOdUOnܴ>XqOP?qŌEyll>mQGIsddX)zĥRʾou§^+YG=Qf} S &f7eBPdccK?Q)*%.7 ģ:nBY}eeU*C'>(OQ{9aN;#-m_څ<>Y)5:Nd02Z/־Cc]g^!!`߸qi{ H!'_ϣ̱~82N+SeA. }_/02>r*1gS1tTX.*v?_(K{P~#V`Rs.rcڴi/wʿۿyU 0~ʩ/}eƹK=`?DGv:蠃:耓^^4H)Q ^(t.0⁁!7g}N _ SVu岧~v }H۩)m%MԉX>*i?ñ O%_%@: \4T6-M@ro?'dCPk=LQKk-Z5K}h Ӧ-R"FL끁~8hb~ց~N}YT3`Zl{o?Ʊ }5ioSiF-_*c 5De7꜌ 9ݷcL^S{}1?lX@Ya@aݏ*GJt$^ ':p3w>%wkguLƪN!O}f\wOH P2_D <Hns8%b120f )T9ƤNu:>dΜٮǜl˰D3y=]5*>PyN#݅]Npϕ?eA>9Yfos_|qO-'h@ڙtAtA0zNu<VA$ Nʴ(xsjH2!+,2!@QbRE16A;F=>SW3&gޤcD *&k 5+Ha"T9 4%HEs"WC1Xb+?aUlC|T$  )Us">}#}V0 kWl/zBX p봫;}AǸ] j׍c]-'Gqҵ:>5O `%1@AQ]TDd lls81nPv裘=lU9Yq3ƟAcQsp`|ˆ1 ~=>+q#zHs<|׺{ zSGjÌ94ʘ1~|kyهǰwS`G19sQGs=/,G}'cXo۫p.r%r#8«n0sL:蠃:O{;Ѳy;a*[WeqV쓒2D|eoT)kԄ! '2*H873"I$1sB\&~*p,8Q!tUuѩ %g׻!?MݦFpSk fB(Ae1vR 3622G;9u q z;U>UybTuSo E2x 7!us Z1aE;Ͻ$|DA3/P#dV5 f&HCG?XVˠmF^ +1iZG$4R rcXٷA&;16|Iz᧺ėqlʣqmit=z1PvЧoGTrLlܰ!hcVz|3kbUȲ/Ƙ[!ֲaӦw*4j$(r=#u%#Hn#?6[9DZkpE ?Xx=XkObrF }Ȟg~ʌ3 pԶ6+W,:蠃:??\wɗvcRE'CL(iɔ>eGxLDnc6&`2 >3Ɏ/M}ؘ#qā:`':@̙k$c`*ZؑYBB7Ot*4ڈWyb1n# 6xr G\ZPL=7Le9e:M_ȃ BLX;*`~^Xf ^CТ<&X Ž@_1IlVnXݳs9YwϠc>\cMNP9{}2$LG {Nی?8K66Wzh:ڹR,ˣ^#~){mhWg?U>Lwa 4~_Ē qOWR)q)&M/?>e;?']a9Z'%vUˣ]1Az^h[lŗb3:lb7(w*߶vmS܉JqӢ;|k_$) 8VlY48b p [O>a ~+4R)iU_LH1?1Rq&lT'p@'_eX=֭!7e X86=d%HNHZ"D $<}-qA\ZIL&A$l!NmSh%HE|sÆuؾLISL&τ+)oib!Hڶ*TJ1!`);`?E  =փA=[/}MbY/?2TC˧%N!1S&G7z_k :JUqĨ`h9o74rm}|>W@Di Vڑ#5L&\߀}V!` Xeg[<7ot;JWM)4h|,zS+~(=O˾$kc,Q'+l#I.M/Dq&װ&MC1=b@L&lxħ>=+ih׬[g2f7flW1@mFۼgkC_,[;IAw~-;w/zK^|Cs7\vwdgtAt؀疟U\T>yXTw._7tsNR~Xq6LЌoɿZ)^qLI80ȋ I28 L&B${* OT3V,ĥ &DoPҕH8-#Vy:OFN0'Ī >I3'6رYӔR>ш7{wFDn 4O`p$/2(#􃬱U&mH 176!nbBkk3}t{rOI  $r ;S"x'(YƱ@h/5O` D@ڸ$g6~™ ;%۠萣7)Ǔ4/2fP#ŮrmE~48rG(oİX>&rL7'0 YIJZXD5? }'~]I'hdz9xzc]%9fx=*n,_'nƷDNk4+oE_{p;sʝݥRnO$cQ\"u衇(u:r 'qhtAtc8Xha_2a]/- ޵ͻ?.'y`Vpi씓$,wFD~8wK\H&H $3N#867$w,NjTLIN3b?#ԑd.b/`E?Ϭ&ث;}.z'<x $bcQL|ԫ]OlbsL,sTI(f* bUI" zB)aҧAe1+㢩5T;xx tj/{^p | {2/%2<=Y[}P5^#DaicI[3 z TllmcH$ ~#cz2c:}c0Ǭsc)!׸W{%wa**Ѯb"1!, 8LSrb98fFxt2+m3M fҝ& ߗ ow_&}PʾS-u[ynɵerM`rx7 /.gqF[)&rUtAt9sfWϕ(}󋏩7RK 2?rݫVZWruk}sOs'yd,%omri(G7ʛ57: Ia֓|d|Rv2c:AҖd^\Q풉NrO_'w$ZRKKIk~x=ݬA+8u3-e=rdl U(7㖧Oc*N?0w dcGud"1E 4r]d:AG#lKzOkLmP8!Rt,|AkK`O.Jiqm86"Snг@5α&-{}@{㣂e>UGaSm}/#6|mM;<}2Xuw_c`}]bM8bcG`ot۷bQ8&WۨKO]>+"fNP~xl׬`۱:]UVS2{R^|&xdfѤwm=k|\p=?qYYi\{{~{Ԏ{,|pYpatAtAEDL>X^돝{kJ7ng'(/]WQW˲|mȓ A/'@/,'a$RhC,aƊ&p*31'' m# p`r h) IMZ>}㘕Ol? o^pMT.O$dabSH29=>|)mu@95)Uz=;0;bJ Cfp3^~51 8F0y2WhOY'o폴 SѸEׂT4v>( ?лHL)2}‹ɾK)㦩>ЗƂ{~6o (SR@6`m^=b[OK=kv Cz v4rm:R:[Ou/ cKė:T`Kul_0~'>; Ĵ@<;tPO0~jl1|x\<ԋГ43MR_)iIwq=d<81_1d*Rֲ. EQbuGm,zݾw*~ekJc~ԶlͣQL.ZX~:1i6>>r_\6YU=mn~ƲlpcզfOO9w="H,8G <1')`OgČ{N{DN)cKɀ\ROԀQɌ>H$%ؐ@D>_g{ 2,CjA,؈_U)|ULB$_zէcG$ʑ#ǧL\7•`gut^=@0LR_lv}8!G\ 3~[`lY mstnC%)>SۢZ'TuHKAfՋ!O#R/:@ GLx*T*§ʱ'*8ƶ j Ke[C1a mъhx+&q&A;]2 l2ǰP٪vu@Pq2RTh81Vw%1,i1^屣E10l.Lȱ%FL0F}j1vG;|r6215`b2o2k ['e0xKA} /[7\n}~ٺO+Z;W7Xaƍ^ ĥ]ݶlOktA^k&7V<(C֔}U{GR7.P^IP/\W6l >o椙h9d}ʏnmM~N♼~T0w 8:M) &l*ڰqH$ԍzzɈx̐(DKo$=L(1Mq8)F?ۉ Ǫ1!lzkVׄj2YgbM-a"#lv""h%|c"Lkiu¶1<>>c@ҏitSj]z dzBԱ?*=B==PrBv<:{Jքt $lB`*{z>Ve;GPmhB7OJ9uA ҰBJ`lGORUu)[*7§&\f,w|('1 )(A|acƚ51P7vXXРf-v*s |>7 Y/11^GXg=oBc'/eeU$70FO$|LL`6Szc~W3qʄ;M$p'SʊqϗurF'"hκu<\x|2D_9d4c%2&;'s̀e| IA\dUqQqĮI IH$&ЉCN+PvBr%ov 'tc&LxDr&YpcOGPY/,x~UYo .Rl; AKKJzlEME+=K^3?u j=1 zMߵĀ!|@tk (ʇ4pUD3Ӹkӵ=lql}.MYKc 1GZGJN+3ꀬZ*]Hq6P.39|7lv+ cA۷cD#AzJY   yĄ#fxz5}Rc16\j:>w,g%|!o'3kMފ/}G4ǘ+mFTƺ|L䀉d|NxK\.G]WD/0qCVn;ohyW+ʷo9]=.ꠃGx,}Gi2پC&m֮]W>V~+^wcg>Emy֋έ<pu_tck*'tĄN9w1pvp=N=D9#Ve$`GW~%A/&%iA]1Ek~I@"&lj_(Ip;+(IbB@EslT[>;)TfCN :tW}X/qMoa]KWOkr EAS:A`22#вPc#5:64z1;T S?w2arLcb9Çb0.[O\Kyb٣ˤ\i['+;iVW Փ>Lcr?-`7~\Ι78n07;EvFT;rЫ|>zh?1812\[XNO*ܔ2Pg-_*DLziyQp?D;A`/pNZJoPe?Ѝpr[N/1U ޫЍc]xǬjw3*4cz`3gbzQ'xø1.ab24*hr33D4:5]wb tczƛ̈́LKUy9qo7&mdDMLkcNMQ9Sڡ1c~jG'h~hK4O(?(mjD.ꠃ:蠃s0wO~X\N8eʊs:|?j7.$uE>!e{ĉw= h9]\NxfjY ie/q c†c9Wul@;ၖr^ U\ p3|$?sҏ,6|2@R uG VL&a /}&q6sAu+˪I%> [pyYq g!WE=3F[}^Xm?lW:M#|T ,Z`W佺X5xT-.T6?X7g I Y>ٓk'z>|gHzJr[m*@NJ[x2J|O Z? j3UhEy`菧J`b-`Q4/XDNi@%$\6_8X$^|aE_0n`lRX ~^kecr%bg;|CcbRSd1J:f.ec >L ?/{eg1czN6<?Lp)lfrƿ/cªiŠ>v{vHQ¬%7~0rƤ}[˵-7.__~#R[]*^[>T:CJ>"hCtA 8?W畟חC>L9ߓ7Oyʏ|}'@ynY=\r/ D5'UD!Y7ݾr)Nv f9'&bpnI9-ġ5p_{DM~5o"%[&h8YD3&x"iO3Ht>5 |c$ЃK ayHO8n nЁIBG$=w|48\Rl1B1&e9Ayh.vr egBGï+B7O.JUm"]h}>#o1~ @iBS+Qwa}`q@ѷ<ڔ鰵MacllKysLȨO5mIH6}* tKK>;|d=3+wgXZ^-< wgaFhT:H{DAm8$=|Mþ7 ?&Hr  '|o6':'>I8#[1U @l36cvƫ%533ޯfUq,+@,mLPO耹Gڀ?NUFMڨ*șo>Y-0Ĥ~qה{Oߩ^7cC:CwnF> LF 1繽*W~/ ^Jux?:xaGS|K 3ߺ\_.ox,qԻ>wm축w߽Fn ',QLs򋌓iM:3ku;6JŃěj|6y)]ls 7l}=iR6›TJ|NIfXq+ViM(<Ƀ{LPX(AF\V: 2k͊.bae {brԋz\"PϓEF@ݜQ|ptɀmbݞGCۨCr?9o <k0ea@oħU TޠRNRLyIJ+\ͳ7KU}OXm߁kM'V2DF9߯>#aBvVPP)Sk ľ@Q!fՏ_pDRC "dk; SvܶH2a42vhW~-ASWP([r.n5:vښY?| ,^5c[d`\:g:4V,9`Iͯcr/ؙ[9?'ƾ#'+Q'0c[ܜ8SokeI:9x`Y&ff8˝Aʛ5Lo$ `hVM0ſ5LaFz&7lHX4D10+nfJ~D3oo$qh7.[_kMoVN˽ʇ:K+W(wD t٧ḷKyOCgVU>$mVN,1'כ*zs[F@'+^e7`77vWSn餏RaO˞c˛_O_|M7=vqyi-/n?R[e\P) ʅj#A| /.勜 o-75oS7'K}z_}\qrתMe!O09~hlԉ'*Ll-Ycc gp)ԘNjtZ'3$Č LEsK_UNڅJɽ^b?3zm֖ ')$1N,FTc句d^ᇜc"ʡOHHE$Z櫮1SA&y&Ρ m$v0 "$X}qmO,O\wөg|$۔c"1K)PX7V_OI,cVSp ҇p iv ;M}Z0krҋc/^-8bЮ 6S]г~#'ƕ7F1i Zg5yjclmеӶ*nՃFt[Cc컬C*Z/1> ;Dz=MlcU t 1!<&s~!'YZo+})~]uG"VǞob#R)T.bb&'șl*c3fn&^rLiL{UpL3y L0I~H6o]F11~(~Ӹ~b6jYq̜Vt+)~c?L{8ow.rXC>ݴ{p\Z]1bsӊG){{%s)3"Ǖ|区R璷CVn8/+E'ʿVB{"\vM9cז w2浯(y-ݭ'eA//ro/VT"/(P {'Y 0Av5_5sJ84եvA;o6UdWuxr\3pvϮ[.ڨ}׆v_=}rgKyUTzp+=oU`o"zI^o"]klՎ`Ѯhvv`Brn Ozlv 8^wϾ(^ܤş >/,`&1Wn0azT4 |֖3(ųʷnYQ3P~|ڲ`Vき%o XY~1GND9y=1f u399^.x`Of4s2 ?a'WްJ.Lã/03w+ f⇓}/Wr7wP?@$'$dEFN#CNӶ&V&nqL05up2u JZ~ENoR A (}FOOi (Г?eq] ] p߹QG'kb jࣁ8U  Ur%֬n2ç@0@(8ةAn/~Pc/:e_%E^$υ h&伏ۑ(kr19rM6Gp+ʋƮ]Fr^dL&'eñM[\\MqgI~Rₓcf N*o*俦|$y{9gePhL3as.rk>^'yn2tUژa>pE峗'0q^˯+'~i_R-:ugRѱ+IauLZXogmݶouzo8&C8n~)w{7!q^Wnζw]\G_+_(|7E|]^?(o˼%G/,o''4|ʛʑ g__fn*wT?rxzxs٬Nㄔә}[*stʉ5^Äw/n'y֯^Y}{'׭6dxU{-c1r 'ګmVo\6: oe@rN|Wxp{.mNWZ@eueZ_$C7?t.9:D[MɌ<l[_L c׭]cDPÏ(yXf*+WU)e"ELiY~_ZR:_ ~F^źoذYV^E߯dnWؖ:l}vp534s`RkEݜЩbJ?URXKi.mP%~GIS|D5v~CLp2 Rq ڕpqO)+ "oq`U[pժUM,|f?oѷ7|q^FU^]}RV-u$uѷoqJ-`݆q(nڨ}-bұܭ~$Zh{B}zI^A؎Pr߭Ug[a|'t1"b~5n~HetmD8~/}1ͱ*ӪU+[԰Jz406n`]d4 ;.V?r8{8C?DڻuR6n~2/Ƈ2>93rgbbK߆:&kx4y_v3ԙvJNwVCnXF>ur@LkeTՕVDt{5~W7I&eTk7 PDʹr~G-~ؠFVnKYOMkWOͻeXy3elo^<@Yz'Vo-튍eNl=D߿rY)ʦ[W[>_W'Wn* l,W;es\>{p}fy_}~ߟ r}P͉8e2߄;x`w?p7w_ek ˱L:k늑z~iV|l7`'R+u0+;r6+,^pKH|F*{b$i,LsG;u$ O`L쓇N׸P`}z9//^Bu9ed@-Qo~cm:vvh"k&:&3xơ,Q5+JRFlK=/)?~w<|/-gOǿi8tޗZVoYs+?k^pZvrыʺ)3))wX#}k fMOj%f3|dl_"5eXQs!:5wNnu¬c8NY$>~BOdZ͞M 'L(b 뿫S erOuѢ%~+9 c4̟?W-;9yɛiJ ttIn.X`Lt%n),90?x$-,\ "?88 L4sFgܹNx8`B,i.N/C&l+n&gcGq`Ky欙QcBՓLp]z6CZeɒ%օn]&ў5s?VPx0y Lh԰՟чZ.^|L!rl[y'|`gKd?R,} _p֍)e֬ZڿI ~C2آ ͇G㋾hK1wLT=[m!_QpCgE:ׇEEZgj_ɟ;g~7 3g [}B:L,!M],2ilh#<`FA.֘`ɗB@\M؏G(s3^fۧϘ!m}G8Ћ-nyޱD%KQycS4?cg,BGVsfϮY%[>F(K%x1VwbjlQ XA2nи1In-K89Q?]7U?s-eA۹}.2Cc/:rƢW,p.Z Uw&g̞7 ;Af힠oAM=c6X^}Ƒw.k/< C;]I'P.|ϔw[U.Kw_P_{1auP{S:;ݳaGrȜ?}7;|k߃zyExY"Kxꕝ%N/LR]K>VvxuҮ꿳:~y4'Nl$g|nc$ `Wy8?[.nfQ ްex wqI`c}?VAux)=?߈C<>"5O?_ɇ OOLn:K3\\4\{/(O=jAyُ+? '/=вbHyы x}pf;8'LpJ&IKI삙^Q1xlnQ? /NjhTX~7TV3'5IV.]:pmrqÿ ҆6BE#hDH."R'Aow"OIc,aD(e3l+K=.^L!j}K3$I~_VcP*_>UtlbH7L*8D7 "1Wתei[V7țBKހ*P D] ΄-[Ysu:*MSS*a} mb!auЀ Xԡ[PUq'otQ AQccdaVMoԸT 9Mz6wvGpBey^yY!A׺ GBL}X'C (qV1U/kn~{jYxy]YcA ُ*xR~ezXnlZ 4c&c24?B"D3aC}LKƘj}u_'=i4\o -9?eb7HE\ fBg`%=#?#dUhրW,${oYdpWv`O>dWe/{9',)g|Proz}?%ycU;]mx(k&8Bv߼.#_;;&ovQfg=kGʇYr[ғSz+F..C:K/ڱ^|M sOwW2k)Y6mݪ'呄mwb2J@[}S ëNZpEy[ۥm!mw{HۗHyljc)//''{.R~ *zz9W.|8BmgdS{\??aG6!۸+G`߃}ߔ# .='ONGrԢW~N"^53t;G'hx~_4G'L<ks˿r 'IΓʎ 8if"Ⲥ}I50S&e8fXךa43qSiɊc_Nx=#YOL$% ؗ$_xZcN"~Eb^9|gU"}١i#Ij_&I,1ARR ~@ϗ0 (dR$_ Ō}կ8TQy۔b|LZҒ8p!X2f Z]@Һ\ADpAĈMS>z|a}8SALEdSka>Ӟ(3` jXPOa"TG\BCZۥ>IF/Dgqmx5@Em>o!*79J%aoj h8vbei,#'eecmAR] e{ Hj _qC>f=={ 4թ7IOcѕ3 t71c§T`%|`3):+yxV0A{Lߛ|c+o7kt[Kԉ~ӘO &|k f zIڄ>?q 1z̛1XyF]Q=aܓ]K.+qZ2n»3Ium|x>ۺ;+WZ>v;ڻ[~i8MnNqS%+ٗ&|7RE 7}@Nۉ|~vѬ&h;j䣸wIz! _uv~afb=O^+ w'V񔨝Icma;n׻`"j/ݱ^c}^/8A?7O)_HSu刅z;ptOpD 'G;61:A*>.{f]1u;ˡb]I nW%~VױTRA Ξ }! /QOt)#&+^ҁ=IBԁ$O~XBJ>=.fM;:!8+a$QYϔgq|{ҝosgLfg'=Sb">A,_˄~{-b x.?!qU9V'7淎Inh grJACʻ_zr9E^ZZ~[Ur"\||I.o{&m,z{nF})R/n`s'pw?R;+V``u~TIܳwo=ⷖ9[ַ'vh<=>nLsE&fq! furOYP>gSk7}I}_/~|o,o;g_9ǖƭ g'|Ky3*էYVQNE'-.ܺ<6$ks׏Z[s_}k7K77t^"Kp!< _n\^p'Ÿ9&dܓy u\{0M#NWr/''dn}ʨc"}>f\O͡/#Ob^.$c'ި}~S IqayloԱ-zYǔ<_OPDiǕ? TWǗ}g]{wt`1.<ߺtM<4{ߙ/1Ѡ70 𣕐edLk&At4:mx8'mnh3,z1eO;Г=Aӯ|읅_ˠ銪/m&)YOcU?L' 76f2.zk*~셕 վrc~rQ8ʒ6TSPQT*h(_Rpk!u .+V7Fj,c\#]9`> ᨃ |GbJ\(F>٢v*;(eQUjkK_Eի /91wQ>G(( K#Ƃa^^a|"Vǫ/j}C5OX;Pc|c:?.$(exA4#0k<^ڋ%{b兴X38lc>ce#=c;cVfh&7㷀ɳ`c?ݗA"Kn+~?Ign\`,7&7#&͌(&xJ'Ә3cߡ-ɷrpyʤ W.|SurU*W AtcT0ti𵣛:t»{{w~=5)zի+_痳sVy3Y9<oQ^S>/~OL9cNșɉ  B#d -ur̉87|ԹWp ~=#4xՀN9neƗηtʀ{;r`!l7 X OHx1" #tCnoo壃}u$1ͽ"CsZ N#%`W1]Ni |۹dSU Z7lJyIcTX/0U?(vmڋ*G݂48JWSU(,I>2#{$X?ޮ>&OX_j- ٧\Qp OO u,lvw;B6=p]ŠK[=b9FoZkVS>xSIB1pCt))gų}#JDt_].;+yZ{Gr,D^'Μ@8 ^o 'hs^ɋ 9 #it9-$&&YĎGѱ*&׉$|{ZH#6ɖvDCvX?EߚWEg +lulz+lX O}\#î\rK|R0|;bȍKh||vyNj_w#q p{Tá|:wK:趽pđm_Ng~4_?O|>U_?]./_KbȉR p@-ə7=ŷ><9cYI8':GzG3iD')20=s-Gc?kKZ`[vT!'WȆB%ׇޘ-oc,Bf&m:3>uVt^cH}Ę&Qt'+ g-$ c^13O[I|]3)1+nbB&|xr7 .^¦NBj~sbsflxBΞ,t=-3dƥP'8|7UҡaBg27=qNW˓6?r`~r>;`O7nnW}66}_~ǃް.˿rq: 4Lphv:)T|saN9v9xh:zDŽvrI;Oqre"pV=`Vn ?|El(>'&IIн O'> i8bE1kT@? '}7l/bگ.\0\OR$=)A;иXdvW 5%5|R\(Pcb}Wg_ loUZպp,Imvٺq>MH0X!Ǡ[f>,hZ}g4חяNS_]/z y.l1("ɛĥQuܓIy5c0+mb+mwߓ2 c|ߓ>گr>u¬n\ 1?O+':/VN9t|`cO{WtAt7,>ʓb?޾TjWpм<'7SZ^{i;·9]IuPD_6`le%)ᄚl/IGF=g>A8̲]&*/"z(V#ɠCK,u)ic߆5ٳ mE?h3#^$:_{OvTSdƕF)}Gs+IZ6CJ+Qߞ vQ`Yӗ[YɬTG1}ROn wJq᏶E]GBUeV|`@_e;\`/'LT<[v]{] ` ƆW OMu%L^<}*O&?^i15sz9w|fb0)f†:4'VnԍzRCߢCOL񴰟a._sTgؿeK*!<;ݰ>AtAZ xo)z[;,[ܗ^[̚=v߿#rAOLI1':9S'Ԝ|'֑@$[!|r.:ys2D ~k+Q<0$ <$ $6| $J~$7NStXuRb7u+䢳1*+[}&||N+C;m/}OzLMJ}J6Ie;`6ɇ쵇9nؿK =x\b,jzAI >TbXbr!mH1>uJUy`7U}S,z+J;ײc'NI,Cs&K<~m{cC'cT>vx1zx"_Gqwd&zBmqqO ke J7V|׺#W&ΎXuU;.MX̊_+c!&lbR+o7󙴧v6hՖf7ϗG3( _d⧤tScS =,[7R{Q :蠃:蠃}7R+A=HtRSx3 O8Z /?0wzty˟i%O81LAm~S -QGLـqY&:u& Ӿڥ6Lh9hGԧ™WR8CvZ- "z 1R+7;tc VK]u׺ ܓ P3˶iAĪ41>+)S:~PL:!h jZc*LK =?ѯXXz۾ zC8cD=A9J9rogEƾG$'b:a:ѓ٪ 㭂{,_ /{pk>id↺0=D[lѧޯ͆3sA-;IrȂ/=Y%4O tAt 5Ii}l9q_}u-hTO\'r|~<>?/?G_|ឈya=&w=XQSW褟|_J%@N?'IPH$-NJ/KIb†D"918\*z$%fVWR]#.|8|tmX'9ԳCObW5 AG&Xps5reMI^ W? l[i'f=crմGC] ݎШv%ǥRQ_ӸxF{k,:ITlc&>Mb@ׇ-E@&N>򲯄FG` % |Ğ}3u@z(U&d A&{=.ˣ`t(1ӲL(T:G01]\x' }Nb=E1Tm8#PλTO?j/0vLPߌEۍ=SKxt\ǚǴ,wMOD2쉃`^qXq#5.X.99] .c}+&]G'e߂Wqdy㳏>3˒RO/o{PbmtAtoïگk*0KtꚘZ^;NĄMN$<Ǖ?RtbB.,AMulfԃ8G1 Cؾ)~KoccgZSR㪖ǯ`p l&QF:}iƶGl{mBj!fP: A-&FC׾i<=~oWDP6ac,yWXAϺd4: {k}K]Xئ,=xţ͘JL/>*rOȿ7WNo? o {R6j=ɋQ xA[iAtAǁ6LL[Y\~/U2/A #WPWq0c +| 3 e?v$sOAc>T2m؎LĒ)Y5mfܯP34Ewȑ`ʋ"/Lb",J"R|qyb=a & vPnĵ#3aR(#b(Ū;ncS1 kM`'9]yzn`څO 'hFG| i} #\ԗJ ® o깾z>pJaRa{u2O-?6,.)~}?/Т0GE'뢱ǣe_ʠm( DPzɜVV LWlRIֳ*1٘Z!7G,Ҷ(Su0kRK1K;c@ WiFJi!G_UU֊GoW䱑Ǹb0yˍu=V(NO Wazw*TiekƶX+iXd@!VLRƌ2rW/k92X|K}NS[~ܓ O>Mm{R}%3ʙGF^tAt'?O}R&mӞyֳBNzvk;*|ԮJ~ןI@85XNO2KVK"0OԐR# ؂U`߬3M3$-$$c׻('ƊZZtL  >E-WwL'1.hv-&" p<O<-$M:no<0,DG[S6$SȊळ&ya]!iQ r~ *q<^8{j쾶>Pdԁ~LqnxآkI[&r7oPա]GO&'gCVwB/XG >ccW!KCi=ՈlzC/_GTȉ6mQ'?=ʸƘ81Ęq?Ħ-`t|zōOvSb %~K{Tjr:蠃:-8k) &k&<=j[`3ϨT^KOAI+k"ILoVDMbA@Ϛ(PMR!AJ7]G"koZT;ĥdNT%8/KT@I* ylkntZFmv}Ƶo.h_bD_6]\]tڷ,C-X[\M~ @O[oA^'\lꭠe Z$gA"Kl4 |K8nؗevmAG6՗{˲/-|u6) & >*wy0]+q' [>)߶UaV+kb>.1QåP5 Vi@c#AёГo-r!?NKd4>ϱ .F8APr,S]RFDf NXyz~{u'unNCvr119=)rsj_CO%)H$+чt3q]Gɼ-خyqme|GЏ1"{{\e!1+墲sY^f2&|uQL Se{¯֣=,O>(i? c,C7VQNiV0ûrAsM?.;蠃:蠃v^sk)}o6.u0ys_s*###>|ԶpsuBec 8q P@z8TZȝ2|'Fz8Ĉ!pdO4P8\"aɞ|1)DV ':|GTl?X$Ҿ 銬Z4jtH,1EBi2R)QH}j<[Ęie?mbmBßh6SAiIt@ 1}ƠhT?3ūb_HO )Fe Z1rbH@.m p&+I dc⛐vHYn5uV }U`(P4q'Fh'|OzՁݾWx)Tᫀ.! 360V<\7OlGLKb2EX x]`Е+}{cL$Vǘ:<,K]x=#fLL`)ӏ(s~ۧtJMuuAtA> _?_^(o?)o{|{[˛ݖo >}eիO ٦uUVd_2%z5 u7#SxpH"nS_$[ԨHV69Yaȉ524l9zdfk $`l!n$dc^9S RX"Ċر"DK!3 kvkLbm1-di;>.}b  $߭x]U`ES~^+d[ v%v}&aaR ҩ~G=qH}TDEG @ol2/ѷS5H0%Vqɧ#ޣqQQ4+DrYȖ>trs,IG|`m.zDuHcՏڜ+88x_#zK*uDdLl>5X~1!0>DC?c~m;" 9cǤ2Q a&o9Acl?xxC} C%,Rߪ@q =x"LpBlˑcBm9|ـ324XK-/ʚXԁ1}T$Ry .gSq8EL$BtAt.E/~Q9]|;NNLx夓N*:W4=][̇bpԡ% =Ž84,XIJɑRfΘaGgedӧOwXM43{6L† 9f:yn{mAIH^)eppuA͖O)Wu=(D4_r3\cO_ʩ4s-p>"!  ݠUoOϛ*[3 h&"Xud30 ۢ3Ig8U%>3f+n/X @+FL6 ~`_~̬nI]F}%07R#"N uFԍ:DUI'hxKI|/f4%įu*N>K21mN&B?hsx }$߀-bKC/bS۫U[m LdaDpЊ+Sl}aѪ\? 0l1.` }GMK* Ϡ~`$dlh҇!8Npi9bm^sm3H $꽽B(ĉZIP۶cJKAtAt -eK]5+e|KXQsEwu HSO<du'p"94xS$! d@-4c+}˿NfD/0!ϐ}Mn"^(;ILCQc"xB׭ŧ.7^rp*\ʠ%}iN6r8ט'e§Dغ*X[()9휞&OBQPcRe9tƀ|K&oDQzE{Lv4L El+XڼU 7|Uy* (r F诖P`mMb`‡c'ǩTHڍ^Rۅ>0L؇B  G׸)WMM,Gzud%ׇĄd#4c}1j%V''3!ǵwimjb ћ8|;>цM\G>}{|T{ouAtA|_-\oro|/^x3-|SIJO=n?B\'= A @hd^I+@G$'G;BۆGKbH"Q-llbA/:߃LlcXY[ܘTX\tIS/>`[)NZ=޺LXN;us Fة`E;(q/L6墉MvO~8^ q*!~B+cΪ4vF+{$gQ> yaԍkEfڋLoo|lW-Vq; @6# n^.WԘI@ЂS|o#>WL8~g рz\&m>̦n`{0+]*!c#uǙ0wctS\*1Ø1 W {sHׅrn!Et5́/=k|0c4JfV˗YQ gT8쫿m;GR߽%K~K o!C:蠃:q af͚z7|6&ٰaCݥR$TQIEf|@NSSlA+:1MZ#q;'hdIMTt&prM~ĊWa6Q'e:Ѐa@ZW 3+&=OhxKXj)&UI?>lz%q?Y*oYa#DtۀJD@1-tmGI6zT>31645˴%&AQy`- p*}W0zZh>ŽL1tT%bOaC8&ts|U.TЕzD=})^^ } A۷ gWK}j}#9ث_#hH21c |lX/EvLVDz]N2OOԁh<rմ`7 88;UQ9O>RɁsaޯ[>qry!C]l:蠃:蠃p͜9sԊ+Ws( Z|,|>56]6=I7o٧^0r)ȃ gq6]ko.-tižĈ:蠃:'? .,zjys[甓O>̛7j?]*{)I2 N,c($MǗ6VDN$T}hCwd1GMJp~z GLW`I뮕?EՄ߶ z izgxJ=юnjl}*j}m)eGcQڮ r@ 'TdP1JO1yd<hvKr|XUOeEW+1恅XQ:ڢ=>26:b|7ѯ6 !#+ׂu8 RY ٧Vŗ q`* >B_Dc ^ i>imԁ~wcS|uDpf{}u5K:1yhJE_+˜~&#}['t*K>Ѿ T ^(>oK+e|B x`Arߎ<\]*59~,[?Z>reh~a`7VtAtA.zp@b@RNR"QH.(k#A"md9I96*$BbYlcЦ;v쮵jBs)zM=j7$mM;AH>3vW'z1z(r*Ȧ(}ҖB P A cR ,;O;)XzZzZ_UwoͺU^} %n>VN!zzaǕ<>#Tc÷Nu,p;lRM?{oYUWMfnEiwĥB8q!1JI,ՙ̐1C,$h7hA% ,Wum}9_uUwuP}_w~U~ 30BsͿ #m -悲 o#O@s1-lAgv,7<ٺ瞱;i3D$g@vO9ĩ w,!!oE_yoKO‡<7x p4N=b<ʨJ=3#YW؆: m$o*******ШJM @D !PbxPXlrf1"E&Ya[;*f9Ӵ6:[E x ce`NTj!v"Ozq+aO [bC2V9~ Qa İ|9z逳 |6.Z9jV76s@s Y\~!jiz'l}ü!)y$wczyм(M/INhk%& omGh|,/O[pB*Nri\`:ҩSw OuX`>RG{"BE\r#8/s\+Tf)aJ+o nw8}`o SNat[7U 2||**N/(F=v${"{8F(Zb Cʘ W(lCXla!dNTDr qe >[ )wE P8"'>X, V.`l}O\41P2Wsh-9mC6v*bJtj#cn^>ϜC,x޺ xhƧXYrAHC$'05ȥ`N5&-RP2#!;r)/-sd|I+9 8cU.DJ(=sij#h!Oq5>٩\q ?d<( |ܹ"bN'` FE`;Dy3NUIyG;Y+N}R%p'ď6 / ־{۸XuKJl׮އKqV٥Ί+u_j[V=z[EdPoˏ睴 rXT8X`kU"["(^p>,j7;iSKJpdo(PS3x~׾NCq{f1Y@)gmmU 6CCC 7@OgQP Z-GXAiN@X-L% 1ROsRwc9˜8CCqr3nrT|Tsشw2"VNWZ-ԙ#BxGhB?<Z-`0\+C&hpp S\΋1`OWkxNxQ^βo|kC>1C 4?A;Sϴr  9} .5ԒW{^|oΌUɱx  2&|"#p+Ywmw\؍nu[lEUjj(yPAE|TxX[?Y)0b>Œo`"U@% %(mrH\9"b{gqKrBUg?;B` oR* <YfomKں D7x,2#^XGn<1ƮDsPA|x@_"9I jKOr7YΛKE vbz؀ !<́ 唰ikByá"`0aO؄ c9 Y'j%.܉>kbls@qK AV9g8忛{7bnʞ~s.Z:8` ?gc9iV+c5";% g4><+nMmw3ߜGVpαK |=evӥACl*ZxvIvcV_cm+i6\agI&kWQQQQQQQ1e'AJ -!Q[%v-ɫhADg"Jh7WJ gXJjC4#\W4 -a.2x~bTŲ@-H)iƁ-h D3i8~M)G 1Z P >l\)X a!vCB, z7Gږxӎ9Ĝ!Ϋ?3;-Ş9gʀ8[ O{|} *n2)8'dQ7s)EޞF{+!n{S$u2ԛ)^7z9ʪ-Ŕ쓮M6P"5|1G [onw䳶 w=@(j,%!4r`F9;J|}#P/}Db7N;ru}ICx1g6KV_fk.V="뮱[E q;'%RSC<@X:) ir%hܚJo~Ng &⡀iy,E=KWW ՛  I u_i 4sޭ<811OxeYC[~;t1}9v~ E!.K>@@KZlPV)ɀҧtpP×ss"o#d0Ν;5U$)ц1K0f9ssD,cCBmc4tqHHkneѝۑˍuޖ`n  7@Ρ@o}[v nBc0w·Mgks: >pk_`[V ;aMs@EFǛH܈W#&J.+H3S (<ژ[_:6ś6 6cX/4q"2 N0`WUkݛX\IW:*******JM O>؎;hS- %G],bN{ˢŋPnѨ`bߡBF%^zŗbNtT/|-BgTѺu"Z$,*7aR‘ r]ی]m:_y|;Ʈ>I\n1}a5NFK`R0:sȓCmql8̉9sJZqbM y.]+h{|͟;s#Y{l\)9zp|[͜l5fڳm 'et769+9e"yoⒺ9ǠPvxOy{|"V,}]\гss1pMx@f_A'*3Nm-:0ƢH4mDT20N 7raEjz4Ѫ2~oqmsmL˭Rz%XvorX9ぷHKJ'ޓ]EEEEEEEŁ#zIE PdvEWڸ^Ō1p`<W_Jo(ER^{R&m` $gjG*I;@m СK8whxri# f,r̍8\c`.$A_(űt@}Mp)[PH uUh2n$ sD;)\- eoʕF#HA``FRDOPN%oC29tќO7Va<(AԪpQCN)bS>8ojϼo(X1PʈpL)_>E$ɯ$!6c$Ȇ _Qyp sFܡDrECvHhA;8h >s]XU _Ո Z2&7R҅I;188XB3BرOPDŽuh#;;w 1Fسըq@8ԫ> |#x8O= /L??װxN9Q8#oX_-F` 9+h'rh%mmCn<17yŇ<dgן 0yt? zB# =7 3)@ji"R$ܓs-L[pxJ3m6UQQQQQQ13|Vm۶orr!vLpD*-<zhpHņ1*˩v~ea͖-[Ȣx;p3j۷m"FJN;vp?C7 W] x.a g-5VO˕/ Z- Bܵ+f59k~؆u?WA}=Wb}s ay!+\:saFWx[7}qޣ{Ar{a4WB^yoCCld 4Ec I7+R2NKY$s }K3@8Fp% >pD`9sK8=c1Sq)9wn׃#.[:Ma-(}p|  >ı`\cܦ ~O1n>[,uy?s?pha9oQ r ;oa9 vƸ\ڻ;'!w&Ps=ˎۢxHUQ;xyœ߾c;[x.i@B.P3n҃17.AοnsNou}' ␅=D|bf_0|߿|zꩶd鱹QG/?zf_[n7/~S&K̩&&Cіt.@f޼cUY"@1W,,[,r N;̟U aZϜ9N+ܾ>߃ŋ+ 1=>t/K&+(QX 4x@խcW SOm>q- 1W/B<6 yr((^ATHTtg\J!;rGQ0%=l̍i1 o砽KYiP(>h}{I#Q偔m0o̩XmhZb޺W%0 ~a9'>F_0#wBϸ!ͧw\)\y,W]ΕX\Fc^0A!\@Zo=s@< \b\x?t6S x 6-"֨L6Y^ύ}A4f9srW^8ӡʜv;z|;|<(&āoƴ*ysםŽ^=A+m******f;veXE|[캹Қ_+* gϰz)QY`B j=sMXlbJqMA+&q[b*XsCV  hГQqTc}-5nQI/HE'ƑTLRNl7Cn)91$8҇})jp>!n7~G+=Oݡu<RhAdh8PDnO9⩤Ȭxd ;5lKlt@1S3pc%.4SGR[-|9ЫB\IQr|& ]“wI(@J%9dr[-歚naП[iD3Jr)r:ǿ3 A[*ž D{ {<y Wj'%gl?{ n!6q~UTTTTTT0J(K~a /%o"TҨ ᖅ7t &b |(!B?27%jnXq `Re+,8$7u &mi7ʅSQX\Q#NS(D zI,rЖ|B Jx]9eٜ[1a9~Q؈@3n\Cv\RByn!aiz>)6NBtK-Nj߿X8v-,W,Ȁ֌{Ϙ_āвoN/r9+nP>׉V.PW=H{S n8O_ xJLsG-g>|m}>O->O=۴i|!RS^";OJDq]ۗUՠ)Gm{D J=KV 'Dek{#gqQ (j<,9{[@HNM8I@*re Qg-EB"5(c||M60e@!<9,T8|is -{Aq=WZ`NؖQg ),ze^1Ɔ GQ9&C-;G7E[']X^诟.BKӄ Nu(6퀎Ħ;c71~s0N-uZV%E sbC?{14#NlGncQ9⃀#sw9 c"R8ʜ@f(-$k&9 ehѪhN ,G,W08sF~\ dŚ81bb,$y6r}(.fh -qfWszIj- }k9\IUKWH@N7EhLo)5yJX` }c*/:&}fh >|kT+goټOA?(m8L ?A9΅9O7lrB]xa 혃vߜŭR^~axga^{]~2G?o-ɨJM ̓Qx  %@Л7Q\!Q%O eEo(kQ]=aql; G偧§ħn@Q1' sȦXo6 4(dD.vV[)YP8>UqxeE8*Lr`J2H > pE,5~' ̻u ?yGG0%砩k-򌭆@9fTu4|uzQ}mLn`KNG 8{'*VP>lpJlP- bˣT [j7#'(8,6vQF M3BAk#2=#ЏD(ʍ1s@W5vy[ rq\Eqg[0fq]l~" x9 }Ϝٷyhq yx\(Ga{xD씦N#DLb$1+hЙTQQQQQ8θ뮻;o}m?+? mddĆ;׽u\n^3Vay~c ) J1HNr?z(\d`E,ċE']6;;HGn`r]\&+RHE}jBهcL~(bQR ;uyX%`v`h[@hIXͱx;PqlErD9\AiA@O]JHG6{2 1΄(v#/}РnbyEҗ nhH/r0AK-Qf,% 4Fmc!NjPżIeԗX~ (Gy2.!oPB01N+pAm' ֹ͢4x;cփ3n㩹,;dQ-[0G}āo#EUbF_*N:ɞm|M5bśG|Ƃͮ]l۶m"twƍ&*WW|w3VayN9|CPA *f@_3XY4:jA]{Q)nQ ^\*ְ㈐awU#]KFdyTȣOsgAXw#ÕUP0}91& aז1= i:~90b6/e [c./hgz |[1." ~Њc)sb,*fDm3p<Ж-rj%dDDFY]U&LTDLʿ/9+gHt ]2"+I|G }B6rヿ)4+?ϳ8a9V>`[r \![w瞐VLblBl8^Gq{v '7]k_=ݯdzE>JH$,5P &p*C-|DQ. D't"s Z;0a?P)R!QL :n|!k)!9Nz7^jp_ $} c>:1ֲէ,:@>!ϪL9>|`Qq|șMO|K` . MDUX Rs J-1.8kω({3G m'RSóCDO.7`oi5TTT-5xm{}竦?q_odjh7iOq/Pm`f`` G ~Jˆ/p__͝;͛ hSo5Kٱ+t%-9aQ柲#88%`1@ǟءb9%}L'suvR$G9A=oqy8^L;S ^bܙ~T3A' r)G\DK9@ KLZi\ 9tB0hE ijyqB,sv"&[W$@j;{%H11>-s15lGR. kE+ו( 9  0 \JPA9ΩJMKmB?4ƃVKTIq>Mn̥r=r>rrOq㈆=V4jH%sz(v- G>h/dxO~mҟXhϻy3is{z=OĞg﷮_?N9f lE@lH7?% L$ᠮCѓv)G$t- EJm\I|M,}SNu"l4֗wu\T!{[p!V%UyxO*a,uځ%7ތ. .n܉ A@!H8("Ł|B0#ۚ*^}1cY@ip ؀ŋۆ-bsʅ9E;αa,pIᨈ-QRB[r8>!¼7D ӲžиU*yI?2+DB=@ mȲ!*Ŝ` ruϧmf"~q{0IRSΡh\-R8vyHߜbZo7ٟ?Uwvkmh" |cCxU?ߔv-nvC6ЪF;v? iEEE&BǥtcHSQ1ÑE ?=I9 t=B})VrP3 C]qOG>iS7nO' w³b,(s ,ܵm~[vُv?OQ{?3`YVTTLzY)hY8SE4*55L5ςn[S .&ƅ=^ J|G4T؀Ԋ6#c?P| CV%ࢇ T9Y7{ K4 ؅Dda}-1ݹc;zAcC^|[NV)rO@q>DaH TUs-# h - t+&;˶nB}9}7cʳwl?CCCMx%EfƃVrQ⡍mw"b;GWsP"e,i-8ukj5D]lѠ߹h l? 6Q`@-- Ms~7uqi-#G7gj[mn}^_O7=xGwv&DC-&M#O1+m+mc"_q%< %ebPon{sHQb]43-#RY`&yׅXP(Tʓ{\?<, n?t+>C:C1^2eD7 SGaF:2Ǣ[taA &0i'7>yxLs 8y8Λiעڹ@m5.a'.zĂqFFӄTڅcktK;+G-h(.\L ;~ ×6o0Jعϝk{wаݿiSxxYs]ke[kWrE-ĹD}/J^[mߘ}SٹĆD!c[QQߙ>[s}|s㨳&_oG}ٺmEE JAE $̓:U&P$*'T` 8B 9(ŢY}C. ⇴Fݦ;3'Q|x9'ueYlfi0q]Vɂs /ɩyNƀtʼaćb O'=ea݇2"P#?a8jaKqE A04嚻 6rl@y7P渡8n8OBsa\"C x0<9nk,dE PCT5r$X@j7N ~/b҆-D0ns4-;/IJyJvۜ|NŌ^]lphzCg bIxtYs];07 KW]:s!e]%ak"7ªڥ~!+Od􉇍WuvuĸѮ|5vц_.{Sҧ"[gkv6t֓ߨe9̶n}m۶S**V9|<{QKoKlE0R]")q*T5m[)AѦ}䣾G)C,@!P7,FL%x+ P/넊ߴU+LL ǫdJ [wAnժ y6d^4(osWVsU8O5xa[[6$ms@Gca4[P; #pLY  =ZF|T*|չB`bI#}f2/d PV9莏:?0*38wcNFFѧņ=ݿx7gj[_\<׫U?~]s5O|@ğ\>Rګ/uϱꂋ"y"q8**g'>_߱sp Wݶ4};^{篿O'{~/*$Mu\WAdmm+ =K+c&3ǝSQq_^w8Գq**RS#ͳE~,.,VY *jT 0^:VHmYmFhh 3w?2Jr!u!TZen7dꊤ!~lsm$bgq}ut88?~R1/X.0^ePz-%-du.a\Р0 ȇۋtyLo>49⸆>Zp> 3[x10"H118}qDs%(,¦}\Jh!4Tm}EqennPAоa_07ɜ`80O(z5\9 ե\ȩx.T-v̗Twz\c an,H^S :3Pl<\QB7gj[vƻN?cc'?i;wj@g3ux0-KN5a `\vՆ+.{]oyŇ3 d3V_K۪Q{ɧmN{;+3;~h,\`o%z["rmsUο.Y}YJ[o>Y.׽,ƕ-/s;3"WLa(.]ݱ:V>NsEŌ8MSx⡧{͛L{)hڅNj䭢( $B߭[~ZOÏd B,(z` '<$gQ9ч,i ao8/dCtC6a-lQJ=1G_;%_Θ-y4v}E {ҮK( JZ"Α H ";D'> ;g[ldƭ45p+raP6t?b[a'`"`Ja-YP<ƂaNiӆ×z3p (7g#]z z'r<0.ā4{%9`ӊsBR~ ōvE˂/p9ڃڎӝmo~?ܷwS7?h{Ya&>]+;4Z- NMC 8]lٝ?q[f/[s!l氍lnm`Wu]TTߥ;vp Co͞c[&[`=ŋovsWQ!DF/T'kx腣;mネEM>6^5pŽZm߶-a,ܵ^~iw϶_y ?ږΛc+VTQa#^ Em[v^p]q EY[xNa?< oX9!\ d dkgĢ*b6_@.Nui#v&>fo8$m]sΚkuW]k՗kɷ8 vdz׆s?W|Wr!vy~u-}V>׶jm~[vF,9~rg:pmEѨ:L,kQԑ6gd}k"@=/POZ1dž;pk5ʉ\@W:;=*WkBb>ƺؕW Wl)pW\0htU<*%XbT{" C 0fm3 xP6-zI3JhmtS}j,rS,=zk >.M\x<%r A_5w) hh"!a.O*b.q<>wca ]v>`qIzD|yТ. 0ͣ̈́N9m)ߜa*u!+NRx,_+n^hV]j[4gߴ K׎oF*q¥7X8𧯳/o6P-_46?Xg|dqB7'd3q+~E{ñs #ԯn8P'Ej MtUjj<x3c~yJH]Emo^]SmQM:O+hklFbSڱ`豢'nVbydgE -vԡm1-@?Z\A@ȋo佀F wawZ?q7֙9sz$^CM)>q6걃%ؙ48?4B!IX.ڃ\66@0Ց> /MΌ^x$ iNЊ@?ޏ7Q{_E#ilG~ÅPZЮkb wvs%[}ʩ|򰮨0;]zowmo߽qo}Co~mn-h=#b`m-ö:e!߼a;w A-O뇾mh3V.;Ra~Q( ]db+-IAB)Sgp9 CG_98T!/m 5"WA+]d/@d=K!y٪y ͖MN0GF_Txl8Bt":yAleʽM|(}=xڻ g-cuǑR.>X ATE{Dryw9?ɳ*sˍ36O *0p%蒫o4B.[d7sNQK BPJX$$|(cl`g߽o wyȌO qѝf c*55LGG;Gg\s(Z PHT:ɧ0x{x4r^X O.Ỹ,xЎF1Ͷ[3=h/@]Bcqi24 !."xf]i'}GǘCG}H/ʙa򕈑UrA4f,Čؾɺ֣f*< h5WRkiv+,e,sة=c4%–elZ|B炷ixyR{7|y+F'7]IBd'x{3@^c%n$GPi8=.|/z.gf́[d**C>'lڴ)8-YW}kCM)SDq6ڈWl͖=^l y A^T2ȟ-XN22[ȀQ?BEq"$Dv$g4& 8Or,}z>yrIؖ6f89Ĉ*itq1={D?xƖ "s|f?}+قK88~E'+N;F31LۭR^yEEEEdqa<śyu bw}v֫atȍv׏w/ګ^yvGo}yιY_34]`o멨x"Eqne@Y6գ@alX-<:}QU’6b)b! o "QL;`1 T x m@4+T$=l,YcرNX dר{K)のDr-yʛH[P@1L<6kcgP}>64AKW j1߈)RjGRs @t/9C m˗}Cnvu3nWp/cC0A!>0>>XxVgϰz=|]EŞ3i {`ԅɢǎ9lׯO}Se{el䨘vyqr[lv }|};[uͧ_SSAUjj|[q#9Z"\9LNS++oqysʉw@]JظJ0<8loj~q,Mm,1O9|5w y{5*d/Z}rs ;hgL˳nvq /'toΝ;Sn*****wO~wyvs9zhw^;?vig۽wexy~?6ɨJM ӑg/b~l, dGl*II4d9XT' `unokI ?2QiEiƭR& PrTM;eG )lP+u[ۂU-c}K1xlS*4orN"XocK4lR[tA<4^=Bsvzqۗ ؇@3HiiNq- F oɿaV:m9W,X09ȸ :$4%[B; |c4@w474"_IpM^&8 FO^sxU{&iy[=9Ky;g=Y o笠mɊevM_5>c[l{!l6m?l3ǿzԯX5E]v*JCtT4EkybD(K|Ԟ ZhhInM,Q뵆~Qs9M=1+xk?}إ!2'@۔'*'F=".G[m]ch·H)eS8Q >8Ͻ~,b>(bx1+sL4غ 9#M<^/W-D-("9O+ߊr~y[~͹Jr͝/'_;?u|f?Cg7+WC9c[r3 A^QQQQQQ130lA{fOdγSWs,WelA;ȿ+ Vuv6v3sQo#_U+(V"дa R| (CѢ~Sԓ۶mF 8\ "FR.0x|Osr<)Gw"ogao8SF#]*ȣ0'}L*5OGa*s|; X* >}^ Mr@ V'[IW10ܔS-=ܰ|mSđA2>[ 70 ;-ɹ͜]IsŸ89 48eCd. )/y;E#oeP@+䈅'!@ʼdA;aZ͹$F\\fJv-@PmrUWLe O[),o%t>iCUJ¿=f+* 'o^ho?}]`|?ٯ?zͣO=hwm1a_mgMUjj<ť,޲ceBq*QTGa/eus0|^hͤ-T҆J8"tm7&|2oAa^ +Pm\,c'b7`̇3m>ۋeձAN 1>761Ѐޅ=PhAFWHENgȅNKЃ6H׊FAmJO CKyXǜءJю.%C;vb]l;y _f ?w?dmsx]EUjj<ͥYpYŒHrˢ:/>Q2buE)V6b5"v Pŋ)TE+6rPqiI S}υWbb&, 0,9?3"*%iiidp\IDD-_&}}Z,Qf\X}܎6R#1Qv=OWNlC眀&!Pj[> ][vsQ J(UijEe.ĸ!Kk%Fj:oK~z5g9=L V sl MW!ee]vyK1N]l=ݎ:x]{_?~=llE?3z0yK?x9'-b.hc5/FT䣈bĂĔW dr%i*\w@/߼P]x1yq[w~gT (ƀm{Cr%![wmU./瀜 + n =I\tm4[sCCq!Ct\:-"h ďڜ9'G爲rp|aZ>D\ඐ*!3 'X2'rNpnh ;vC8x<8s/x|́=9 lZ2vt겾ĮJ;fZzTEEEEEEc.[ldl6<Ƞ Gלr٫_;ꘓk|8pF봨/=Ym]){bm+(AG)̛>" c0M2#.se=B~xX$*{NC|\@ɐ:# (X+a4v~i2H*t(ru7y c0=T1Ѓr$ _#gaݑ>V6b[vP <cIW  xEh[hU f! K16C= EsAoJfaƀ2D7W;mi[KKyr{!rdSQ-6A!4@=Ż*iy[zx?qCvͷÛǽbq]J^^{saW"ﵵWfƝ 9)xҏ]2^=K3 Rysbi\=U_`t^N>d6I=5-TzpBFzgl##ܱCB>2@gv/t1@g8]n+nhtnRx1*5Zu[lʛQQ+b.vvٰr燆p{g@]\;wz /o߁ s,;َ`kpHza 2,m[˒C4aV#>.18˖/_c#3;ZsXy{d,۹Ov\oƒx#؉]1;>ow}x ç/3k8^r48wdC8fY>!y 3=y(w㇜ujvnh2;hElNnfXULήuf+nu.t;wؚ \kk.{acq '_u臶k/6;BhWm]uE[*z쯱TTTTTx@PiaѢEG7j]Pŷ4Hԍx%t wsEE U3>/1p,\%l=BtuwStwwsS,$.U..<r̟} ՚}j͏ F=↝4==lT;>W$srKo-v,9ǡA>XH.FqA  &M^<zx]2]bU8-r0{ yriXXϲ0`,yR91@OܮK9WEo8.1vŭ\.>Λm?!R7?<$x~߇J =w*;oon'*6!6pacvVf۵W_lꂋʖ οʮ qvO6ޱ{z.ŗ߱;nmf篳oåko+6\ee8KEEEEEE*55LG˸Wu#9{0}\x+o_DR<s@ *d*8Ѻ rPŕ -e!AE9FQ:6"ybc'`:uR89BfBcdt ^XζczIо5gAW9+ZAgNg|%O#3wo<+mw BJ]YiK/))(f8X@/2 6OqxL&u??V)806*K^t&Ф49h>P9q@ Lv?/<`\ Y V}L3J޼y5s?g߻.דnoA[paMj.[{Dvk"`ZdG\̮xǘEmvgYybx,j[zm kTTTTT<̤3)tessQ6@5*%YR|VaBaŮC΢|hrR-5+kі<0q[.\D 9 Kh,N,!t()1żp21 m;aH`1r!MN%ϘǨ-[BxɧX|&?q<>+Q34Bq‘NRN1j.pcucBlwR<Ƹ`mI  =Jvi cW)G $Rg ~dm3߃o԰N_7[hKi-_o?7A5O'|=ϱuO=L%?^`t8+*Z C "v+{ԈYs9( \u~\N:;,m×-GZ~s9.4Rp9ŕ\ Rdh  i\:oV?s^wv:@g;+*Lzf}#h/ ~K>exvI60a7;۵R\]- ,cN=b@Y'7APe(|o;oa83^4T%}7"ɑc9<od%4#7ŪMN]j }ʜ) .^1B3+fI$X A`Kkr+FP)hA+ɔ 6[5nK@k97֢ ,(9E^]"H4VƠ*iyVy-^0>mΣot|[wvm\Vk5'-*8ٛE=(^46ci.>7۾x%ΞRQQQQQ15[4UË?Ջ*.tY%^Ų",8S!=hƗq A[wu+a)0'u!_pf[ذMSncsV•rf%ږ7n[Z"AN=hx\vW,W0\8tԑS8(.Nlp(ƃαNG-![>[t.`l1>STDE0>,Z&<>(IG[[%xo1.L XؠO3 CbA=ii J;fZiU 'v) j@F~v㸍Oiev뭗jp9*VI l] aG~o`HFXt ' NO/"cT-fJmI^9:3xG:q!"熁96N !Wd&iLxS**=s:C#v.|د 4d Z~Q*-oE¦"kQ߰4ؘش2A믵/|[}H.]?mVcrUůVu^A4X******z0yƣ6]qSMHzҡgE%JwQRn(>EyÀ$Ňv|zbӓ5ɻ][nX8`"OT~v'y`t[@v>bzZѸTD Ii e<$Hќl(!b]#~ ]| tae@3h KB,Y]xΐdm~Q2-;ȃ` |=yWXD:a惠L~D4{BUj1LR'wtE֭[lhxCo@zV{Uǐ>1[5퉌wfwqWTTTTTJM ӑpiP*Y$S}B6.@+  Mo)RsY ȫ~ "U .8 w!hi=;Gz(d~@6@Q @2Hwhz ;Wz< K~515ĭRyHIg-刏`'9s XJ}NC\Ą<ל uk#EiȹůǙo˂< ߲:: cKzԾc[**\)S4 d J|QU%X"3Q ; yu29QQ\F'],FpEa0)Ȇ<:<&)' p&C2V>,S)ʢ @ynʷQ U"m1(:Gxx %C e*Q['RJtQ`"eT>W2pTyxqO.hb)x3j#6Px#Z)848<-bZߘz0ywoU_GE#ҡE&v^fMi SP(bAiuN-7e]lAڸIpA:!:^э(aG>-kώY?nrs)_pF ;s!v#3~&c-8Nj³j29rƖu,`G_gZelAm$!15aJ~~7h<ĆYII ܡihᬉ!ypc\#H [cHb+{ i좣ETXͱZiEŴx;Ν;IpO' tRSty<] Y % kctt$ ޶j'hI-oQ_|=Z 꿴gS`4mڸB `x44J-GZ.m,MG6VbG&SBq!<|ȍjѡ *p2 5`L; CB"7#8[L\ 3mKpilaO"_ #A;ZnR20@I*iyR n}?f]6b=^ʠ́z0yOƣo,(UFe<+` + &|!n@c_oڼoA~$R^(; 3 Sȇ m}P;G񹷾^)eg@ `@{|Ȳ+bE~ly +7<;'Bp~9ȋ9(dHjG'|po |S[WP f̞$t`%grɹe1w,8 9ԞDTMV}L*X.t雲l*******f.ۆmcll;|[eon:ڭiۊ %C*@y_~wm BqS ؒC-.٫mqR@)]I@m)E6sA{E2>AƜjIk|{ NOח؁)꛳?T:^}'w,p.A7ۓ܈>r;/ِyc.KFC@1e`)5z0: 6ЇM<B8P(|[8ncAEŴbJ 7K,-/a]W._ l8,UQQQQQQ13sg}ꆛS.{/ا?) 7 {-3֯w;LGUjjY;oQbHrrhpKʨ[6\+QJao`'|MiAR &sQj5p.TIN k|S<ݮ}3"<%Fp=L`QN$bM~"],ȡPwe.s'Zovn#k9r. iyi|a_ s|[RڶY=OÖX̥}{!4 V}L*~7%f.#on_]~xWTTTTTT$ ږ30N<էɾdm#9+i ٛ 9k;޿q=r[x4WYF_SzU=ڠ.֪ 0v'vqɘ, .r¸mGEm<@ʾĚ^>-nw"۰- Ss$>/]13̖BTȩA_[a7FN/JċCGMN6c9D`/vry&y,t4 t^DJĢDb@LDi[To:_S(?|S_>'*iy[=X﷯ڰ}ѸDR[EEEEE .dt{+{=p{C9~p׏lӦMvƩ'/ڿ{59muo~om7I`AG*m,"3+7^%zsA YP '@ݎQ|{26 蒧,x(SˬY0zQ.'Xlo@I­=wC!8ᄮA7o#'d&8WCҦ~d@#7G -I61Ex;@แ Ρg <_".-[wbP@q˕G =F,G~ ;mf, 쾴 L0IAt"63zs6@9Z hty_l[-]E4}s̱o/hn&sEEEEEEŌTξl%6Eh.;^+_총^ζ7o>h/@ܪξN8Va:<.?v($j4y :*IHY\^]Rȡ"F]E6G5۲e ]N:|`ǂE¶i\=U_`t^N>dn!GgOtl^8{sgź?jDs=ԃ߾c;Nϲ|嫢]s.r nMz+a~Ok~!n- ;鄗ޡa[x!,Pń^Qlp[ض}|}}t1_W]o_`>H@wq;`6zly }鵡Ahn?r،p!ܨ}Sr\o[%wW7`ďEƍ6vAٺn]wȹD߾կg688-y>O9 DwUsRʝ>^=xgG?/bR 1>ܸ^;2}e󛌍 Ap'v۾:릛nf.9&~>;DT<[`t&3Yľ3tCvL8+p.?ҽ.qn"L`J[[kuqǃrormomiزcƬ؟x;j?x K2]Ck ~bY{}c"ۚ|ʰuܪcʃ:WӞ A8묳ȽN?ipUO fΧ Gu4e 8BbMƞ}kr)\0oeS&۵=-Q+6~MˍŜtbs.-_}%x$*o_īAuғŕkי];elݸ &'s6|]&_Icl$?ή>1|ե7k/N:.Uc]E׻Ql+n{okA͛S,\o޼͋{ptq{Q[0=캮nM_t`>/>tx;kݰN]0I e*Q%3@E3-,;wSb hnN9\mɁ DL^qR "jW!usQrR?\ @m uc`sA*(| 1 yeHsyPŞc`E xntT(+BRR?:PmyoG ŀDaΓyvD[4+@,50dvzL3߃o԰΁p3of_ob[w~0篳oþlLLk۵W7.Κ}\pEi0`^y9W^ژd8**NbM]߿~Mr" ~w7hiuo^i Ə}n HMygƲo瀊æbTqX drj}k\}A]Nb䛓/Y6\l'1 " -CaViƸ@z˫d3V>悔aLl',iÉ2dR Zߩ?.o%vgPq X $a(.\W'5>(&Cȑ@1)*@Գn:I3߃o԰΁p3npYVTjmg.]ݱ:n)Z}]KwXq.3V[:1^m▨JȯuWMbaܹ2{jcܭ_ʷK_}dgo[h ǟl_};L B~ؿE cH.Q@c$IÚs1[.F. @sy)i(En-Z-щDSn?snix,*@jEvM.ƽ [6gj1x̄WrԵ7n¢ڎgTTTTTCK'0p4T"̱E 9YmOCO)̵߈ \kFNhw[3-OU@ƪKm}.^VNO!ƳÂmW;x9 :&x (~qLj'o.x4/[z!kϰOz}68v lrV?{˟o{/xFz0ygEW(. Y_\Em.`H@*^h {]# [HJft?y>`A,i>`2ɞ.lA^.q&44[4r%4"o!2.`/R=[Hz?yp&ca 4dVg Rcj]{naI A 9:O鋽S3^V-èou1C봭xK-D\֏{c\;܆tݶ.nC3n6y0_7I5vmy/{]ty՗٭^f7VƗB̞&q'~V}_ue* oxԀJ5۬&[mtY.C@$' {=tQBx(-[Ct⊋;#wؐWr `:݁0|Jǜ54(@sRō0\K[4T8[liaI8 B҇ذl󂦼؟ܱqb>&ΧV)9(^RQ9@?U 66ոCd[n~Enc"RpVV0<Gs.G>)1PDS@Uj1[dn!cцʻG )_MӊsvŗO2߹3\ϡmiJ}or;ӌz0yWεvSPjQGT$-i\iXHM=L,LTB!yP6ZDK/ DN Ve بZygcyPx$VJ-"=$8Z1b&Y˚+ s9-*841`W 6L?- sB&'1 , ȏŖMr $'` c$\h"ْN],Zq/h@N+6ݡ`lg8h)R*&`㝷 }ݳmo*C"Yn6K\1 8E._]Qpe|K [YH{deύp`S"8 %Hc@gD~o\ӶRV+(snSqCh4DVu RՄzD~KpNED* @Gy Ego2 }onԜoB9uEx<~wTmҼ CE)CB-Ҳ}J5 7h ayhb|]{Ne;I.1!A'c@ 8F-:Y8}RgZo7Ϸ?%+jۮ.2#e٨JM ӑ}iWBU% J$խRp4qT܃w.͠{bUJZA2w$!'~-xQ(}C}2|ha>"6q12y[YmK|sZ9wN!)lzt=Vy3Rc,GEkС6C@DN뜡"#mcFQE(f?r Q[LiYRdGzԾc噶[l_]w߲ }~]<>+ϲ_}I]+E o?\D݄y:m S ";1=Zrشo<8\iM̂ `O (sL8L)O =u ؙ݁xl{Fx.|dvԬ]6FldaF;F̞ݣگogp022j_vc7~; bf*55LGYУA]7l EYmwSLmrpʢ:X3G? I>hըLvP&|U(OD|Bv"WD|.MFl)-gk<4Kα?OSM?V#XPh@O9ByIR̲]x-3yVe=6'"YЭ؏z9r#?ly,@D`G!qaзd[V)0֘y\mt4FUGxE(!RgZnK_3dXpАmvW?e?q Vm{s_z0yϗJ'ljI:TU Y)ݜv•`NJl/^*fMQ\?߁Txgq[(\!E(S ToxW솶u\B| #h_LTrrSGs6a ocZ+7-[, U-B^?/{CD{m's" zEp[^S=Z+1&rK)] [$ڤ*iyVnl`t-?ڎU6de?4{Ag`7˙ _ܽ'8Q ,feM,|IC& J."j]{-.XXrZ?Z֑AR(C`[jù4T'$S. /dԡ0%pE>8x;t^+>./lDp8Nm: - y7hajl%u8N<7\qsp蔀,{+&~ :U:W6ՉBm (2N.|kp}w}q큟lѸ.yI}5M]Ⰳ1-+a/Ϋr*******뮻m*55LG&5il"-Hh>Z5 =߾ =0j[6?-a cm(eLK@@7s># &G|Tc#D\Rl/|sYǯnw{99\WB9,9x,E4+=΢x Lyz^L.*MԸSA'-g Qow̴N=o]gSzБo}[pȊƻ#:uo~|ȑĞtvG􊊊'&忽%Wid]B8j###lXo M~4,۲yDPBiΝ?o{ l۾Cr C J Ш=$euwlj +CCsg?bȍԮ6m[ bؾ}b"rmp \X@bض &">IQ wgc1w Ͻ#" mټ9[rlqy{Ν;09/鏇0kH$t2lFTe'ǹQ'8V[X#ز6bAl"mE\a'"8k~G`\a~(懔kmu=nC/f?F_B}'.$N>D7:`[8ozR[8?HmvUrav+lyd|;evءGغЎ:IYQQQQQQQD MT}s*m<8{k,te]]Wdi;eK9 _ت0%E6o.iQ*Gww7`οobWQ,]Y-L/_-@BΛ7bݳrgA}Ń\l…6j%96k8ႃ/P>`NSq^Ɓs ܙ[KssgtO:ϲ>X:oob2t$Ξo0], &9nҝ>6<4lkNx/r=}}㎻/n٪VRWQQQQQQQ1SQo#tY:Q-V)<> gEՀv%b.e݊˟vݩ^H7WtD pA4_z\R`T"wk )CR(;);_Mn"cg_(ؠ.ɢJsηe[ ]TO(} 0cgS̥˟=^[3-ϴ*YO=N?HMn7\nVx8S;ن;ﶟy3e򊊊N(mAm,N͖ūD%w+ (|;~ji6WWyp8;lg"ahف4XAZ$pY.`DK'So`Ze}E=zJpE4$lB.ظW>q@,pE$[' MPcBb؉[xC]d03$:6L}{ڑKE }Z/gogk_ [q>xj3-"L3]cy$@tdaW,@Cb[t&MmIQB BP̅JXl ɇφXfq5 EiB0o%W߿mtF y%JG;p-TTTTTTTTTVa:<.gUީ,)M)xqUܣ&hyÂ[Bb L=,{bߤ'>՞zv00d4h/FᜋF檐]4, D|K|!a7w\D.d_ugm$%k#cZP`< gF F"8E<@( 9j=F}c㶴)zC3B(ro\A'ҿh1@~L;E^zO?sﻱE(ԼXa%1(;))hT'|ZcRQĬ} ^cf[bEHێ8&ƦM&s_Ws=|=]{3 .>$ i3g L<{OM3X|y[B#/%+kmߙGEO2ÙgƲ?΁w햍ں;uە=~odsl]s%m}seWl g XcMc N>>؃O؜ٶ~N;%v6مgn?~#_>cOߴ7{`>q}sZu=G.ߺ.:IWN?7_uхo|_fS>tN]k/:߲7{g}K۶ACڷnO=lr{ӏ]Vo7t?o7s?}.:[Ӿ}ε߼siW=d o8^oq?gϴqodg/_'?=WSown#εp_2׾-U+c߼p17nq_4{?|g7އ/n5yT{;8z(6؀ "^Xb4Հ1Q5b x4(_73oݖ[n}?0;ͼiofCӞn?f&ם.Lz*NTQ]ʬT7t9o{Kgӵ?.="zShoަnCG߹t* [4d<}F5=+[:ZL{TQyt*U}OW= f}NN<޻$:wO~\ritoKWh~g4}LLx~G"s=Mf/;Y>3Ҏ;h˖-ԫWo`DF32`b,UFGVH*e>p=]7nPq}eI7] jɨ^4K9_GlN:0WQ-Pe߻=r+]4tӭ/-MJ5?E 7l)jx6ܬ[' TXNOxjf#肿,cg>#ʟMt||.y1ܰaWsov(Aғ IHOJYO=Q>n14 7^CFnG+7?+Uy6#ݫlًzn/=bOM61_Vr¯_="Gѵ~&?2;] ۳V}:dQˣ/62/?xs#YsW \HQ>r|hoыWYD]t]?s٩U_%p@"` q_a;u x~a} D)x;>,VTF4J`QX C6gy"u';\י+8{]֛q$szjdz5(^\Y&)GP>ixV*'*I#}bA/ ^y{t#B)D:~NymK5V2UԨUJdulBNh8:.: @38ٻw/oi/E[czRzo? ?w}ymf 5l-./7r}:wd} TNڒ1 dJ@_*N# ǕofpP/I6DWEJϾ[{xgo-eCuV,)c Vp%adK-^>-jJlk\|sBJ80-0e1Bkň[8H,(V#cHdxh_+ŘښZYg5*S1"kՇ;C> *M`x~5!}q<+õhs,C]9WՎG8;K T}pp@1W_cCQfyStIÞ'>:yKt Щ'*^9fOxӹ^'0؛xd%!c 0䙥,u~<ɣNMFO:Z\IydDZ.yf*,&==i/b#ˢ tZo)hi]yR\A;g*#V J+Q8e__ɪ)/.`RB?)Ac <ɥrFtfxt%,BZ-ZVz%h]~cQY!pb@P*w Alϓm΃WHՌ^Pw0`tPQ1"r͇U|pm,C[Ro;Xט yӒ-uFsS`왼a$N} ,uek1 ihln) jWpa4K` Rۤ y`T|$T[/X.rl-OgzRI$t\mv@>L&EtBO9>TXU1s\e5zn1{V'Y9q󇊪*H>*42{c!(O ʞeIΕRc m(l p2{;%?Cl>6Δ)*㕏RZc_7yyEwqO%tZY]SRrU 5pS:FI&ίO{ldZKIgu{IDATrb':35[ldު tzWWΣY\$L8?JBfbbP]l8GJD*j4N[͒}VpYJמaLvv!D2aC AՇ_[VyN]; ,>L{t)SGvI"撚 lR@222Wt;uwG=EJU]K=)nz1R)F{E24Rpԧs}vyk‚kndLVge]6..@O4 y.QܚHvNu>H6{(E' +tM2xhྍ};G&2+ϘfS6^趺"Znmvwѽ%'2񭔼$dM"%Vt: 6NBU+_gVFa @ TkN ,q#ҨW=**(?U+ueM3t&zpn[#$-pz&d&j``2rFXfH!v`tQ]?j[LU\.O.r[8JXXm╓ֲ ~77Erv,HÍjܥ7xY -F\`DAbIH/z_Zn#9_y9cr8-KCigEڹh*U*vVNRJܹUnr\Z?hڵ&% k w]iR5^ntEtkMfD=1Ѵ'UJ"*Nb_׫kt6_@s#5a@ pdSzSIv|T3Zc/0a4:3K$ Az0&N(i&kd6y~yr.l:I M^'DÕI :T;`҆+6Yc'yicҨC%zZ |O:?XǑBL0NLEp@rIOjH1(^@*q/GYs( [,wSʭ3m[8߁*@S`SMw+ťWEY+]+){I]"G}3yz DZEs*2ttm:m `+/:O/,)5طJ|*$o\$*Y.tJt˒iVZ9I*#7РN'yT\gRoWTDÆϮ'oW TTQ\7RŇS\z[u3:^ sjd1_U/5S; WϦLʚD>|RrՖ;M5U$udTAd.gR/i?f6 @ .: IAv6`})4pinN6(0Wm^A[)Ɣ->FNimTq5u9K:ҕ3eDc,CtHkAꫳ:(Ѷ:d8 [C%d2Xhl:x!p#6!*;^+')[k((;7 rM*+TJ:U(\Z&>rVUmDa<1V557S^Ɖ.,V,K~Vo߮M?爎]h%Z9HUنMoi2g#hhWE{ +k&d٥|IC?#r^r_r^|e_E/lwicqYmJֹҏXa+K׏8f?[^^hX36mzKsm8X2OmaCSjk i<JfomB 9##&6\__(++SW^ Oۨ+3m*h&?_H7iֲ=T\6.je;<-pQXmէ^a뮓m[(ͶGPyy>HO|OY+8"}|[Nac=%|h TWgXPdeV\t>TӨ8[<3 lpt8oB#)ݔp[ ~5lN*-Ai׾{ 8Pi>ZÍTm8*Kz&9t)::oH?R@ CD3Ҳr)+z(gQ)sW$KΝv/hОiiY?݉ۺrVe R 3镉'{+8DN2OU66RI/O;oГtLB|m m'akSr\kh5M)[Q.z̅SI8JWiX"Pt%!3X\BN'PN嗓NٙiEiL8#.|/\Otv\N!&#- rr)/+qb 0zPЋ)/2$WLhM7L7|+rϕKwwk+Ċ{LSRxR9jK"ez?< D,V&J} "A' q6LӘ~;gH7ݿ.G|.uVaS[A&nT"7Fpn;3un5T[:"uqf ]F\3"Ib]߁xmD;: 6)xn2"3)G7U\׎G^2]4[ЀzǡWr{vSˇJ% 9#DՇuFZ4䳠!Z9 7C=@I ~CߔPGO}mfB$TXX(KYcq|M"ٹs, ZdxZǃIV[9s2kV !ʵ st=5o" | ܓhL]3/لT9jaK3[ljtblX L6 b6HvϯU(ޞ%e8z69ӕqR6QEdzaŽA_o'Wf:)[靱WUJtqH hL(=?$g% $OV)1)YpϘҿ%aM5%^}>Z9MkkGS3)#t҅+6௱=Җ-[d"Ld"j&vOFAB&V2eשe JO.#WХzѿw%kwPhJHc¶tJDwf2x,ڸs? ֖Y&:utwҝsJ+t]鱋˟t?}BWSq4OgNycُ7Љ:vam[*Uev.ȡ[ё]Z_ v~KSeRݍ_m44^d*s'CG?לH 'IxL=N?t U4sjhxzӍ4K>^N] sie UVPZy۞X-Mуzg-qtKN;&2Ds/} *?O2S4cJq=ehX*Ա n?p]T=ڷ2-km*踻ޤ@nC>c>1Myׄ"twoyj\:{[Z*uVKj{\*ٴNߑ^|3M>75t9tsY9>T:F*Wjl<~ܾ=ek$b x4i#OsSYӍj5tQ_Pn򳩺O˪{VѽO V=fMA>|*{=L-H-pqTzn.wN=zPˎP=hۦF\ɿ]#uE6B*wUAUXX-%RM3.^,2VmCC rL"Xpَ0jwWe'oݱuuحC6 ېr-+(^"iƖ7 b '3M6~RQNuQ]ɤ :"iKt. 799ԾCGjSqNI_?*?vqՃCG v&:_}U;ˢ/N^*'Ymi1 AZ gRε%&̽o\ (|`Ã4L;ІUL՗붫.ߦ\p)I٩SҙYZRQP\|)q)zM 9>1JaKF ! ڳ{?,.5XZD*? IhѣG; dgTNc@&f'ڗIg-&z˲ZtjH]In8+_06,RHߘG&QnnI{ȕehh8e``[Zvd ؐS6l.]Ne*j}`BkYfsZ}/DKTCN<9:_JfJ鴑Sטd@њ:hϸ}\д* #c1Ok q5:ߞw]4hEV*hZ;^GRM D4hϧQFѨNwَán_}'1V\y,ZW{srsէ_VFuʧWiBR5`FV_XFF8ys?'63 J/Mƪ288nmX-@|ߎ P,pIV)@3LJ!QfyJ$Ȅ\WT5SCz5 5_nnω$N:wkPMqU6){wO dlY7+T\&[pP91Fo%$ \r"%ઓ-FjB60$ldjK1K]qb,LVIf6.zI\IYlgjk٤ljϫc'MH\t*&+;pNd880~t|O%qq-BEyu$_kPBcҊ Gp4j*Kk9DžQ:97axYKORldjKѹu];Vo')jÙr4{25MċW?L<Q~s&bIWKcD!ut|Mldu0IuI :UJhƁ9 AKvvE:5+ot- )םB[M E7BTXaVXÝ97{ʦ(+inZ9*@KE&z8TX㇙|׉練fݻ^9}٭4GOؙ}kkuWYQ #(D۷׼HoPَҘЎŗRgΝFnhl8{Y]o|bouSTo%Pc@vj ߾})tr,۷ߩwCm$J>gpG:_G56|zrT}*+*裚jmRݿoGg?Rr4ce6ǒG48 {Y{)vecI#p-Qh[b2l;tLv$ik$C8InQImY6mzK}rf&57vz"oYg͂AH71~됗EccMP]rM꬜t4NúaN UlpeEee:Eb"jrm}|UKa/ũxRW>Z'DbݨUs Ê.Pq };SqW^E=^z0hMA 7grҥúכԮ&Ӕij:TNڒ14v#a_mohqsD%ekTП7AöTitNٞ%a$v‰#q`O}pUN&mp*$y QnbӅ}$t6|-/}mc¡ݚsşGt,\ޥ ٭ \7zGǙTg41HRm 4ðUnr\Z?hڵ&%Z/־Vܼ~X㞱+$ݽڤvULF(C#8 T,:[ I>];:A1ѻ"ic6B,:Z_r5Yfm$דZ{R&w_ZPfArYV:}@TyA=0m r9ڿƛp+nV *-O}RrRmi|$=ncP>m Oc)1N*ažբWhcl0Ò2dTSJg/Oy6)ь>sHZ4z&K{Q-aL8/7\&t|KƓς&c >U ϠWtz9iE׼K7p?G~/0>Fӄnό}U*>QN-'+#>gVȄ<>GOT2hc)ͩHhCOMtXQnj`O)֘Q]>MV7êBO)II[C9_4qE*e srDmZ.I}L$2efn`,hj0#)[Y:7;7ѿmi" >l\zf)W/#­2D߻/݄42<#-MoiV"0&12(İ"AˁU-f;jAկO6=ڷ;@zT<'' З /;3I:9YШG& }t)DGvnt_!V*<Nj/jJ]x-V  <ҾGVHF94>:2wo5էXol`lI0Cҹl/ ~H\~lXC:8].Jښ8!uls*JBt>VU298Kςc >U*܊7h]Ta}@oLfd[CtrWDATf,ԓkL*x~ц 94_q= JG2ImGJ贁K\ёi~c#^c`B5AsJ lllA$5<j&Ȕ]j昐Si,Vrq^eY/ [I#eSA`,h 0#c@^rө˦l:L!]]E_dXu­$G~x,uikBcUpFp4eF %)bEDֲRfiNHmڧ}Q&l:wŷJlkBMD -ɥlf?OG܄Dˈ|$PߊJG2IH{V6!#_[[c!Fc`TCl\piNih[W6K8bTcK!|Toҗ8h[ޑ9gεz0x@|$lB\cz 7vEKςm{vӎhǁV~}d<"Z:<&('ՖG"=_2ԄH i. >7[sVXlJclTX_/Ϝ\~THT2gPTaG%xvvÎÙ 8, /=< bc >U*=7w=y]Htzs.;obSW*e (J\P(p5j^#j_:@$/=,Kl<3 N+j_͋jߡ#)lvԳ]5gM-O*Ϯ=~Z?!t+o?Z&('ՖG+Wz_W},1^ ‡3uߖ<N,C:~:PVα ]HbA xn*`+eNĸ 3|#WVvgA` GҶJZzW[#PVմ~fEuܪo}WIG2I½ac0& A[vI8FE&aFnn Y4ضJIS[XRm~CI$oc3Idٖ`,HVhe7uXfRmA[X'zbd"Ԣ`Y}"cLҹu.v(2CKSLc8\lth{iX=H|:m2rRmi|$so_[+>#罄Z>3{qVl m{0蠒V&qUܵ1:F)P.@UQQ>RG0VtujP`,HVJ0ؾm+ؾhY.g9䓍02/Z&Z.'ZK4Ӑ` hunS(qx=:J fǎZp.ڷwkkkkDTVT*,g#R.#QcߐlHrm F;v4.:U<`򛓓C"UU@bQ;w:Ͷm]hݼ``b4&dHc Z4PzfXJJVʱ K׮&%@˂v喁q|F./ ra63ZۋAl.i~~$cM/,NQVvV*rHOK7R2c֮m[m\Qa~%eW]\` Dc5yvmCfHV-0nl8nH 8U ( @m2rRmi|$6xcH0-GY2EDdgޠK@q`T:Bˢ\c ؀ttҀN"Gkc ςl*//Kҏ?֯_oRd#Hxj V)k|`B, 6>B |PM)MFM~v'wQ/ReFfmn9YiDƚ"@$=񑔭R;wm[(j54WVϥ~>ZvI ޡ}i]zևޤo5W Em 0۩ip]ioCi!ju͛[|>jCe?[a_nwY-Ug܅kd#Hxm kkYV10~M uTBǟB>쐰& %TZꌁHF{0#)[:PF"gWlU(/HaM&>QN-oGcvJfjt}yʏ?fnKvn#Mkc-@h@|$e-'jjjLAVٸ#i0d5~ҋC96hȚz4p!BbuGf hD4DHڄ G2Iҽa3BzNhKNހBĨ!8V)iTپ Ăc dc >Uz_]6ny᧚ޢ?[d#Hx\0;=yltSƻaCGE z/eA~veIt5lV)A5ݡH>JoL4֘Tђ` GҶJ喧SMtיyC"oϦZ3T}ZVd}aKGΤR0OjMV!K}z@2iEGFlz#Z/Wb 8bMB²Q:`aFaSBN:^c{hHBZyxi@eQAN.ee6Ui4Տ%T3kQnނAEL.ҙ#DtzԄO'z]M53铵>}c6HF94>bctltax#w'u'cG%iHqo mcEyy@vT\X}xr%lwθٰ~^(j^[Jw=_yhI /οGw}r]~w]wgΥovWVdhBA#LWռtsфiTZq`L|$T[ Ϗ`E Q# V JNq UQG"[D-dIWa#dϏ&[bc (ϒ%K:t`4 a֭ ϶mۢHu"geecyM6Fj<3]BYGSJ:yp>޵223Ur졲ܮqfUZt9CMEH3i;KLy1N"9%:56|6Voñ^_ȒWV^杌zdc >,;_->?M'}˱4/ֵiޥ'r<]G3oXIM~?ݯ}a'ukۊUQ|vpT}o}rq}B7O.ރ^t#%JWa+ɡҨhФ=wJ3[^XF+~sxqD2ڃ1gώ⦲M;k_*c%>~] R _viI+>YHWN?z0 2˩sA%o_(i++_lRu`m"QD}MС>}$K:/IV[0ˑ"ξ&F1#EΕERoFD/7rs[b L:N Ygqű ,D\ޝ z+۹33( (cOxOxTEe+*i]cNڻgxMY|ٗ?J/sK̢E^=AؠһuљiheL>4)?'ÄDDMvNБ r;tDHJ;hIoIJԩ#} ԣGھ}ri޽NJݡd"[NES_=_5׉Ng^L?7Cէo ,:2drp# y\'$"'ǁ4_g( W+Ep\zqBz/KHh_v؁u&*Ki7gqOUѴLK;ttQ{0Nҕ**ʜ½}ŌG m2rRmi|$8Ơ>E\BC^nb%w V( ^HUJt1ċZ2VO 7h9lptCߍ֍уwB/IEOLEփo|7nlXfJ?7[,l6䬣RLXn4rW;]6:h 7<Ӑ!C裏w1q?ꨣ$=]v&om2rRmi|$8tiM1+Y1L*BV \Iq`LV(?UV)+9̑71ű U*v0pSYQA۷m۷q ldjK#1pD6ljGj[10 5JjYRv1&[{*UG%/dR1 7E+VrjFҵI mAF gaXfB,,,rA`dFNq"z4hϧQFѨNwQN-ǀ!Q)/ [ :E}H37,W*ōӦ,- ŋZSR1n '†Qw8ԬPC [O aB @Oy* @6HF94>^EUHfłeֱ 5&Y9,:ZeePI(\yRrF֔`T` m2rRmi|$<{'\6FANNt?TlNtZj ^kM J@x`43_6̰F  rg0ɼi;;X 8n6RnG2Ih c@ncLCdbرM!7'ƪ UJk곜4j*(GKkMJ@x`H &('ՖGcC^(ط pg̖ O C;:tCUt4%D8<֚lphV;$66FDkXIAZdPVF :) H}`H &('ՖG%k+p6f5aCzC8PM+/V[OHt %4 J@x4ܔҥKiuׯ7)m2rRmi|$Z~ "[ 5&E|yZ k k kB߬Ycǎ5`6oL˾zVd4*w7SO;hϒ%K:t`4 a֭ 66O ֭[cy M6Fj%Σ]׈gjSt2{PL-Q/ӀOnGHZ/@d%/^*'Ymp߶N;ֹ'?GOd(]3[IEONߑ~uv%/0/&DٳgG>$fiu~Uo{><C*]N+?|\2HƗt&_8/` GCj_-Xm+EQK%D1$=1p9pSUqTUYNVFJ7кޥ/-kKiՔVsj"(x1v9TYx&yo6#u*jk?ѧoCs_5ܝ?nK*߳YFEo=zy < /N;xdc >•gjcslz+qد/0/&D}Uw.*۰ʿ> >w@}wLC͜+˩2;>)D/J~VLIݯ>'']8&8/1ve2.&('ՖG%eBL#XxK%KcIF{0#i[rө˦l:L!]|g[w]j((gjE@S򮬠Ҳ<ɬQ҉Ϡ{P}Ԧ}gj:Cu*(79@d3ʼC"dU k !&#- rr)/+[\o萏_GO9=Rǥ\ֿ(|Ԅ*SZrZ?*rPM˩!*l?߫ `L|$T[668LJ(6^-m $ /&m %cWp6]" *y_}K+Z_>vl4HuU>sQz M[kk>>?{6HF94>-i l4PފC4ChD&T/4` GҶJ%A;R6TWUQummݞZv^PC(=+6?uZ ܯgJl,6vO$۫+lҏvL[N }ryT_q53*O8O{Z R5K̪j:דF~T4C_uU{TU]K7^d#H1Zlϼ*^-v 4/&m{vӎhǁ%+38FΩjiT~uT[3Ln婪*vf/oo?:z}~aA+nص7&('ՖG%^YAifɍl 5)iK%D1$=񑴭R鹹߽;AW.sg" ?Qũ,lM ˯SӰ)S[o5 G2Ihc͟D1.^-u 4/&m۶Ҏ8 G2IhcO|JS^p[NHڛxi1X4dc >U3hŊTRP}v_mH]v5) yk< Վ~0;umh{f͚;v \,YBԡCi 6PnL~mu@2M[9++Kwλ&-Nmڴ1h 37Ca8 Q/g7C9dPN.eC99/2yD @3f 7)H"`7IV[@|xić` \`hpL @ v0q0@ 7͔ 7tRZaMJh|f;ټy3Ϩۈn^SN=4 '%KPqq1uhfÆ ԭ[7m۶ h>nZ,"y ޳yԈoiӦ@sgّ 7˾zVd4*w7I Mee 7 Qno/:H% p`MÉq6@,̥#gR Im>d-}g7f4o${@oJΟΖQRƂDFr(9R});5afӉ^XNO4p iZ<%T"nUl>*KwPsu6RWSĉꪫ$ В(kf濲tx*p>XW8<-p[N]6e!_gR w[:,TGʹ1dxem.20E%yN7GbD?-0LhHK\v\__ B&{ hC99tg߱x_ʁxO8$^ Z %3nCKS2gѣrh|a#Q_ޡЗ̓~~8 _^>u(;@N=~h4]Gުr֫qb_^UUE6m:GmPΝ)33h}8bo@mm-8p@|vKiiO!Jgȋp7}~zd^ѷ6s'dzD%s#;}3I~x|;;`s qƛ4ܰa7X,{@رlBzhL@6X/~߾}~Ud5Ř@M_dBD_5 |yodm:Ѡǂ ~[,M= *M'KC)==]bΜRsɥ:QNlÈ[]v6ި/{V :M4믿/۷7`oebգG 01DxSFFm@0la8?WGTU+JhGo73fRr=&Ք)t D MiYb 4H񧞧&iWQ-~[s`;MDJ-KU_~FhЯ?P?7^`׮]b(Jʛ={DmH볳sr}Ԧmz'":|8 :~mYM^_~IKKݻwW_-PXNT<--=+qn Ꝁn=wۃ BA\suSv04+*=Si9=J[NhQ QJ]NgG|94\zG_s_z./3nA=fWЭ8ľt&M^3׊WyѴ'U sȣQrzg;֒՟Лo=C^}x-̥N6A*7昫R̈́"exc5,W]F1s^Cůi{bI iET4}}\_L!L;pIUG\6[-Pla͜9s{챴}vFŰA?)e{!m% HL._.4.L˞yS^H't_͊/hĎ:47t#͘yso0$: '!/^;^z4pUir#6?P{Yzc0ODqK;FA .tWs r3M]{sj;xGQ͕&5&p?.[.5^6@nİz[hD/^As_ULCAx;6n([xFБ#Gʙ6|-ob8UW]v ۤi VNuml ںS-[sV|BV@ΝL]vrwEuLA#؀bnJEYz󩇢 t>O?i 7.C?-X.JZZhʪk胭-[i7[|Pz9fս4 3F-8~<=,Y6XHDӫm/: t7iؼk7(-uOMnOJO?BRMmϦL=2Q¤IRηPPR֭[G'OgI}[g -#vH^F_XA_,Lۄ_~~$>&5l(1[aE4.=o}E3;[..)6gԗO}䯜s(1uF/ 7.:O#6}C#7#iWY&\~qUwM׶p9/9nJgr OWѽ×TeiфP$򯛨)?C3ۤefBKEKHJ]v ۀ6ܬQPC[|C9/>t,e 6.RY5W?M[|d>m'^iք->< m9u4n)~paPӳνƻÉ-t.|@~ -I94wZ045!j2^Z~0-GtMO'>ANFOu:ݤuWW# ڲ?/oJݏ޽;YI1vb"o93iZԯto p @ܰe'^l'?CDIJݖ]>9+q{+O$!UMǁTܹ$ 9.c5kر&xpYd S`؆ٰaǘB;x` Ͽ|?s )~mAt䧀!!^cO 2N__p)&zd([x42%RncDSRn^蟯v1e==hZ&7^`׮]TXXhBgggĉexGFxnw'itQK;o۶mr3ëݴiH3{lF]zjcat8:>^8u)xI 01F x bVܬ^[XcSMHurgʑ~)@d_/);@~pR klIII !L سg4 Ks-i1Z0}a5|001Dx槜 y9?WG*եKھ}| R~?l1}8bo@Vl&@)//>!Z̊YZZ*D_~i >x/o*++ y#oˋv,XqhQ[T*ЌR@ R,}`H2 nOAٳB~<ϟRn)04S`Y vڃhIÉg'.F_Bw"jnD}81O·HK$cz~}oY\Dy% zK/ڭozb:ݏzm:YS;1 uKdp81>8 7KB 7lT9:53ѕ{7V8&jy lQ  J8OR$`}*GW} ` \KTt5Ԇ=z斚p\?% e'6V@4u>Ul&aN^+g]иs^g"֮$:w4GurS3p}iйJaT:zշmyp*M݃E{ƞA?^R#lt{\V{D QL+8zqz5Il*,ggSu7__5O2PGfaE4{DY 7-U'*E+'%d/}yȿF>WI{*э3y?=oIf_I7K/L{nJAl=Nk<ɣO y/Р-4j}8}~W[%|_a<"W7JH+0ow ~[B9V}w0*2XoitnPK30b-/A"?&>Vi\Jݭ)EWkVﰾS~1>{1*X\JKTEm|(_J\CΥq2@ܲD*ܫ3{֮-aiYOy6=b-Aj_*t;zKgJUfkW3 pAEI;ZnV ҟ}ƝKäBXr# 1y6p]# J`@{F|ElqpJW@?sppՄ1WɜzuL8ƝI> S)V/te1*sx`ƦZeve1-7_b!/йfeڕCrC[̮]c?^tFzPVO >}ѹ%|UAAg4PS=}H6ZnTnqq )5GmgWaͥT}aW܈{@h~@<`1V)} bWbUVVx'yyyFRigqg9pmۖҰ6ZjkkiΝԪU+HM6Fu1bXB 7X#'++222 947@J4c`͛RܿE 7>@Hb~A]܅ 7˂/_{cF- hza!:n,=DI;ͣ>LWjḎ9 XikoCQ!hYCc]iB]W{MHuOp} V^COm#:N&{ռ c'}qw~ 7ņ΅wMDYS¬J|vECt'Q{ 56`&s&M3fuK%3_@!pv͞DOLtNb8;V]oe0Ѽ>I53hhw'&}~g- %<|i{\zOoWOQgu9fތ4f$phQܽn{/w)YطMr=ME0MSЛWL827n.FA>}'$zt3*1Lj` C;pzbҤLPPi{|CW<=D}P_/9A+7CclHuWDUD;Cwqhh{t4{} *)6 n-jw)n bCoi n -)^~Qg /."y\ as:g*ܻ@Q#F f%NkՐfG~2q.ZW؆d@[66ޒ> MW?Aە}AgYmS}CS=ZBz"Т8ciI>4u>:@jy^[2 S5_5Aoݘ=>̓f-!+DIEEZ:hΝt饗}9l! ~ 9vOC @ R OuDĬ1[i|ED!qī<&{[ijv/'zXP?:k|-b.çʧ?_7qǩ_I!£N+ l1Fo ;O?J3"xkf:YGbD{PTvecαQOq߇hUaúۉBts͘ T&Qv0'$>*8IsqXxx| gpOݗMzC<\zOU):N#~iP> SD6H"m[$#j+dOҚ5kX3O?MzX." DLϘJb79"[/z5zoӺĵ⃩qV4AE bN>|s#<J]@]?訝{,nG]>+~h$tj1*9g\fݼiPA$fNQG%.4ETK 4azFӔC]l>?ÈrlbJ ~+N /SH7]vG}-Z$[rȐ!f=s1g*4ފD7O(ʉw6h/I C?h'O;`؅ogy&,X4'R[ETTki9oI 6qp'Be1bl!z>EQkSi1}QHUm5锖C{rs u^n\HUUFLbd;E+ s]A⢄'fooi~,~4ގ"[^J @[\oxȈFS SxѸ|XI+DzC/J[ӧ~o|8nr)=:;Q\>'uE=&>8D~r1/ y8Ai`uAO[e-p/hh=tx9X}98޽[ z-6mDwyꋧhڛӨ&kt}Gq$uأWa)@/4gBbꎕDݏR1,YNZ2]Wr M&\xg|c+>?Cn"'8p/^,onK6l]vrJI^'/3O^kYG5[@ĤLP%JeVⰍ6gk7<ɀWڰf~Wl6An;wRϞ=ug 񔗗KB!B!k6 ,^[Ae]#z94DیdQ vNqB!B!NEcw;K/dtbnVn d::^xmWqrob-X_3{6Fo+L$K]ʚm+~DMp!B!rq~<쳨Jzz:Ͽ--̼zJdxkNaTa*T#fށAѩ:׬sEiq o"WMɂU%l5bO$\{ 5nap yv+^Zu7{c;K^ӋԴ=j.׏4K\X@?d wܱzՅB!B|bbbxx DEEre1@vDtm>*B*--#2#L,a>/^DEX=3EOՂATd6#ҍJE&30;ܸ2ˆU,a6"5,[p K.y.444#B!B|<䓔w1c0eʔ .111L6x[GL>}NIQ 'QXM!@mmVv4b4@rJ6MCJvQRq>n9W\PK;&B u4u<A7݇ @u 7 N׏eOY9u8&ar8B!GzN']uB}}=.C alݶ 60lذ,yC;:Sh#=5l[_g]Ngoj^t]dbřʡtcLj9J^XB!BrNV}}=O=4eex #i >α^SЉa&>Nl DiU-k0~HvD:,{eJG3&1 {<0_wTAekJL;gMc<8va_rǿeQVՌϟlƚ !B!a3>ݻ?-7<û k?G{MجF#,tz{1&8sD e[aN4`P)lfPEL/xWaDJh%IDWDŽhۺ_*uS1|/m6iڢAo p,Cl.bV3gؤP"P^}kUDva~3zeq܇#B!g~cfsb{9l3-73>˻ヒngСaw\vmݚrZtT z:B'n1᣸UUIua֚ꡩJ**)/w2_p&@l6wӓ@~nK} W5<%XW nکrjZefDQ&5YrS&'{(A*#uvvW(z&"d(&B!gv˿BO~=[oΚEqv;TVVrq`0O<{hmݾ\VmCWe:< (v^< ;Jtꡌ"| !B!x<CT~al[<+Ҋb:Voz_;No>!B!38!IQVOwGYqXM ̋ _B!B!`QؿXŻL9';,B!B!:>AErCw:{q9??`/\3> ^|y~ 3/? ,1#߹  w_FA\p{!8Kxѻvn]BWԾ::5M"2'}Kjۼp}ǝF!BSBIVt;<  ^2>ols<ٯYpopEwcs +@'MFJ W>mX3]pqͤT\ t7x6z+QyibNd) : &YO5>tzLgBem#W@- 5WsriZ1bH]4-‘@g08p9p0Ih8cukoO~8o&;_D##ǷRۿARʶ5&L,zŞCt9CIFBsV֜CAB!z[>x0:hN%+_ n5l_&}Eb cGWS/,=;DW FکݱwYA7_fB('m/[7tѮ/dT\&l qۉi^;]Bչ,˿)D T5ϰKq^'?~z֔3Kス@tHw|&SSޛgwoߥy`w5_&ɽQ&< /.) _n60.&tؒHjɣix抷aѪn|zGl߼ȂtW<3 ʖ_7氶Fx^|O<= .;45ysXvKk/7gvͬ%ugf>}<osgqe14WyhEEZI$RÙ['9;XTcpe?*o~ {\qMMǶ=ªWґ9N?˷J09ctӣ|F/'GEs̼ #3o?W Kئ_Jnn}+,[FaYn#OO`Kg'b!AxlדҞ~iư6mvQ8=^W/x\ko诙m99W7xEd#7ƿ~LC9Gs[SGqhW"d.ff4Rv.o>U@L@.-nI&+(@l3 ȵU/Sh*cgo'QA,.⦻)ٴnfF5x""NŁ|z:pȘ>x!B3qvRgؿI &P_ګuүtK3;xxB8zkYXe"2&/f$L͌26-d1*v,I߻`cņ_}ӆуz@'(,q8qɡa*@V|e?GnbTdEt&N˰X\̸#:Y^1ۿL$qP؉3A26ks^Ctg3;żߑOc/\??ļE~=MaR-/4l.ձo_1}ͅ%JFߺw]H~(BjKyB\.:"f4ϗ2?7t';_}śųêw>ptyhX;5{Y ,nn>yC4 }gZn{W~£Oe͝ԯz?>.3T~z͌n?ɧ⢁-~e !6*7n֖°10xE)6k>CfLbXٽE0rԛ}]2;W,᭧r޸KH] =E瘟r[_?_jQ9 vnΜ\'DW0tWk 6ȮīxJo[  txhVf@X kiǐ;uYvRpvc}1\^ߜ#G0p؀6G&OetYT~>%{ldy=6bh<2 &(&MJ//Yi;vaJVrSb9r8q^~ _;%lf3RL,/)(Q4ĕH=zEް?-خ˭drwPqSl+We^2V3 FQZv԰9{{' eB!/NhI&MQ*!,;a0HkĚ8їN&p{̯X791Ŧ$Ğ0tH`{VvU 'VZ(kf`2fjπL^(S#{ځvèΧ#ә^Hrt5I\-x+ɌKy%㝟=c2qn34rҚX Dtz'ߥʟݳc[z9~ =^MђH Ce<"@A"1.A]t DXHIبtbŚ`Q Yqg1\#5:o\GWs[o{K ./doMuO)ϜI'n8F7Ç3.wp;\uL/^dG5?%^+]g a 9 k4!- Y\@>LD gw|X9kFb6aL~D&XI kϏ&Bq8k:x#GVz\}.n0C6;P-]lDҍٌ:9sYs=}~%7瓷;^l,x#'QG q<3ei>;>.Sm 761Gy6s7IW:N{=3PG|dDIٖƀl!ְ6 Ⱥ .IK&-.EN恪jaiXx!әze.+ߢf |+eʵi15cΦZ.wuAdNp{tff(O9T|OX q$8Ml$ZEemum+e-K:`*{Xejn"4bljqNKB.7`0#u >e1דJlz!/)zG"6z SmXĸzUf;!ii䄞^cIG1-9_+ֳpg3rh͢(/sanE.X9DZ$ Lilcp?yPssJ. x%B2]Oiee-hB!E>t0oOMz13Nd IDATl+>x7{r`w?*0yv.& Qt9ڕt O#8ׄєIvm{(>&ga!$൅/rC'1W_VD<~CtQ1oaj{)?T|_o~yNF^νG+E~Q~6϶ZbGlk;135Ӌ.L Q$¹6w!^X/I)@V)~{ tqtU Qݎ\rk_^2V 5j$ 56%#B]̉74`N@(.=p72lB֐\ȟل iCawëVe@+dAl#~{jzeh׀?{OZgsЄ8)t fx1Oݳ>4s.EO 1Ьx"gj/e'@Fa/X. f ;2lx?2҈6c2cH&=#X\)!KRVZ{3sɳ1G$R06:EGΰ[(Dgɹt3pD5}I4aE9@18I B31 w:K"3c0*F+Ĵ rJDI;!5^N'qSya?&8%%چ&Ara)}HI&5%k^O| ]. ' H_,A?:Ӊ3i CC|j N EӰ?f c!ۉI$w.NgFnafPço$ɸz"csxe Mu`՛q'R+μ"+d~d$'6a`J#'3xb3OeqJ O:.(:+qi&%'OTX^kd/.Co 6=^)DZ((:  6Ix=>8cf>՟d$f#%MrGҿw.5\230EVV4t4PۮA~x&yO$2& zIJ|< )_&bHc` sT"ѹ49:&NB].-%, )Bqv <( ߺ pM 1aXk/W-h+\/]5[M^|JI%3: u\~?zmY#xpB/eoZn1lX)R1'qb-B!N'C1XJ&okha^ WFB:)__mbo;4Vˈ)}oAm~5ڮkqXWX/LĄkKF !Bi82uZkCpU<OBA8ž,82 )=@C+ı9tY6UΐŤ\N\jЉ@CqmgPamoz_eL0-"B!YO),,TUB^xNXX/wB!Bq j3-/(wXf4 1)B!B!ix4hʐI>]nonh.1/kTX'(qv ~B!Bz:t(kZ[lB׶z%2 (tf [w=z"2N C)z^BUӝB!Brz F8l;(xMgYծ7}(,O @ z;!BtSWo!b,2Qqv:XЛ)jZ9MaK⫠nyŮȗ((ihTB!¬K=Vw;B]eLt!nMꏻє_/İ$.s}qx8 q0 x<^/6[xF;!"Fr~SNgOBγs7/ҨuK{e$|Ž!ڹN*3M0$:[v;;;)--t"B !_!D1NNP?uwmkBs}79xc/OV<@@C'* FGG&),Biޯiz !hkk;i!1ؓl.>bUC78|*4uXxk .='l+QzNݾT?Z(F&rr;UUimm HNb |MxZDF8p8MftOMBPUłl`0} 7PшA?ƒ@ pmzZ⟞F1챻_t0n#FP .DѡW `Bch[ ]OU Z1WPu46Lnqp/l^GYlڵ̟?@ lQNN'~;=:E4 EQa߄i_1U|u@0y*]#1>NߏIQ0ӅvAl6c<'.QN\tFPLp _3˳>K}}=PAUСh*=!ڍtF?QlV91t:FͤIN:'UUx>v)e5\.9Y6}{v -~~~?ٳr~?dggnh4z_4|>?PCcáRSs ;v˃`$+#xgUUiiido)z55 "lNOI457l1;dggmUUilj@1ذᦱGSp:NqF+HG٧$ ѴmWLc&3XC+Lu6_qäg&N9 + !!p cK#|(~<ȏx ;;;imme7`@Aj{0lRyꩧhhhQwGcc#%%%p8HJJ"77Ád:ɊBk{Ħ:O JMot-{yz<zwk*ttt:07RQ5 C` 5) 3_'j輵?Al=PTa`pZ4|̚5 aОF3/qa 2w+_f!Əi+WdŊtttTiimcWr *kPɄlfwiۊw}?j9حl Btuu{nvEkk롆)@}}=X,vc2N||`1{+7WUB C'zy9 ЏW40皦i6^?qn466Sk7 w!gcu0vC+ EKde]s& 7 B_?РkR̬#~u`,@ ?T _5evim'oܑT/?eu .[}bmR(WQ_NSzA=S:J[WpΡ]D5Bqٌ( :P(K'EK_ X~m>><=)ڬo6CbJzz:}`FMOбEѰL+/Q}555'/5k QtzPhjEU,3)St:O]A Ֆu']Och~ئ oنynE:O-5:{< QWWGTTT۹w IWP1@w )IMawI5[wi~,i(мmx@t0D (?'HQ\.;3WEe]U`U8;ٜS+t|9Ѥgֲq}e|t9^^`L5hJʫr -_I7@C~Aٶmw& (  0͔k.ZZZ(..f׮]$&&RPP@rr2V{^ޛ9 M QZlGSINLK͂` '%56lX]AiȐE47 *]j'30EXMU1Wjـ~_1:,hH5@_#)zlm}UpџlΤ?%V> ~wi(otqompD-. UUI[*IXFԋ.ó'n` 1Zagc#B1 Lٴiv v-ƈ6̻T0[c]ß&8c: ۍ>}::;Af`P3;*ϽI,;V3h_¨$1rHS-s1j%ԅu}::r@9Vѥb9YrŸ9VIG%Oiٹ/ff;Ύe's5Mv_= 7l:t{Vz*Ɯèp퇞)0iHذu;`Ӷ$%rL5{Mhmmeٲe"CAAهӧz۷S]]MUUUUUDEE1p@rrrNh^j!fΘ%S'w7ƇqbXGUUݶu<ncq'Xi4}߄C~F@@DTQkzTE%Vq32XM5ԣXhN"o|d> A5TM߅țF[>kGnd(Z+,]vV _og3j\;OnJ+DQjɄWNL$pgAK ǟ]F#Uh4U%؊9*u#ͭ,=-N`2QeBu||4ۍ텧ͨ;t[y[_qrOƟ7Ɔ%i 4C+WFDUP8ɭa xr 1N _Rzw9iƺuxZp sÊ01SR<;QmtgoҷlXooZiy6Eax<^*kغsvTUÊjIaa!G[( III*+++mi+5 ϋb\ޠ" چKa ٴu5u=}QXa39YwJUw:?$>9:8Lv| : fDVO¾v<" q&3V yqP:ɡ?/M=]X f}?pD=(F#¨ %~E 'IFx38KVWYF{PSj:LX30G:Nqv߭}{wRs-g׭'BRVo`r1Z!_YX\EQB477(ʷitEu^fzܟ0$܂!=̟HpES͂݋T,8(ʏ`9 l.炧bg\uii)+V!h^x!z#u$zhCmFI kxt?kƭV]Sv!Ƶx54@ȒW#e)JPh*/n|Yjġ;IvS6.k'"8l˒jDAu0L?; <3ss;~;ki|~, sʳ<7ROѤ\r @ij09ּ(ͪ/2' .B_KtD(?pn`ۨ[b_~%<!6]Rv(rAlvk$&AJe9Qn[o4M_# q&F^w;67s> 멯g|>8vK2Tf&K铑U,9^6+-EKSK.JY{'h' 3 i:/XX+|N&''Zz6)TwY !Ph`^RꯞxF RЖ՚SH eA5EYtIS+Tq6_??!x+YV5$_%˳xga.ʱ.nҸrtlglb'}_\^y_W)~=CZX\Ztt4ZrBiinHy+BvVHuC#57껰jր$t%). \,X_u[(ޱ>ҢҒSKi#m$yρߍrο IDATZ.$dt_jS/LϹ!˪06݆ ,^'-bp}F3Et!bpc|3}YYyyk!PnĴ-f^i6SSE39Tհ(DmsGz󂑖ed<_244D&=õwx]۬Fs:UUU~E|"[Bɍm>t Sy?VY%NinOi -&@R l?Zaox3͏\~bbP[ nU80hgI%, RĪUT[NyvEmm97Ϳf)]d*[^XqP}@5w!SZV4ZS&E"anRl^: }t{tMe"K K{1.y7ܓtL`oҩm*@[P$XySFExm ho-zϽwsmc>|f+yqn"0 *ٴ7m@]MRv=@S}-7i3 l?J}v***hii+~9(3H&oFGG$ҲzRx!{Q4Xcf A] l8s_c߲(ZJŐ>,)?\*<2<noѸwm"k-O '3m##;P-,$sfQ-A`FbH;վ3:t.A8B@kt<}ax vh߂e! o} 1=裈~vZJiа=^NOP A\S/Q.XTWe1ҽKr5 Ç )c} L(Vur'ݻQB ^T,PcU/: xxuRt~iyȿV\u ||_j<29SS$P5h1(= FO7VcvDsi\qU.pur*z{{ϛjX: kUH!MU[*x˓(F}W)7|0knGji6QlvyUU`Yq~g'ʔ4Q%[w tE)ǂ(I T UQ.f@0PN_=Z>2k{Q8Wr\aׯg4 ֯fB?_}FFlj6bd2ɱccϞ=LSS $ ;mQ^^!J~4MVXAmmkY}X~"!dffQbӕ,?~񅍬(~X22OT*tc O~^Tՠ`3T % y EE/K>́ضR!P} .=DVatrGǏ^+ãVLMM-xV!ե5?Vm̠=bNe/m{|%v e<׀TbXdxxl6Ksœ|.H<9? )wż۲Pg#6KÚTB|%̦4M67q1 5|;v/(>랞FH58W#O&MvY%A4>x+VΕ9[P4Uee[ ȇؽ Ͻ{SulްTUŶm9svp8iUܺzn*bHIV*n= hll7(H0===LLL0MP(DUUpT*YPXJIXD p/0\4JhXVRUUhi77lߏ"a[6@USJAQy턃!yI$6y (^Is`'Qvs7OMž^NA(x m"ĩubV)'Vr3G a۰+W.¾8ž}Ya/lld^8Leృ% 8> I_}(K}9ggQ5T²p%HHgnVȂYD|p}(') nFSw *(0.._,Rܒ2`Y6cSL`04ՃKsii ifxugi0C_($Λ D4r\ȪZX+ -82ė~kH w]_}BfAn@*6~hp-[Kǖ6E#OE ͡( )m8hD~O4jTy7+|0 ..ussi!4H,, {;͋N6^ݜcPrRq& "eU|cng]4ѽEϒ $l/P Wbo{l޿Wm-lbb~2濃 `6ccc|ӟ0³]X95nD(*ٯoGˣ<6[`=׶*ϟ!|i֬`ht_w(V:Z tgxtLU4ײzM+W\H,]Mss3555R);Foo/LOOs*++xI[y(öm,˚O-۶KbRb۲CýnQkUk TIrIM,ѢE aia PgwL\2 !4j}ˏ(f{8Rf-Eƙ"6 \4KfB@O#(29B aQsr SD.]gJv{$aۈIIef$G:C(0Ja&g,ł!VB?K.Cz//9{Ľ0KwaKtx|HNa\rpppxqC4t:M>L&foYŞj| +=ɦ5\oJ^;}e:Yy5= WؿK`1N~ϋI!Mw@#Di4ik.Ag-#5=Byۚwmʡdf[F"Kl !уbM6;i }ҹloo_U( 5v`4׀'q,tѤu3]"Ƈ6LиFˆX!\=@E}M}LitsbE5K1AQ{)&,g|N=<1e`p0,J(4e=J:&H߄P‡>eu\x<紒/@VFSp3?-Lfey/ڬo2'cYFm-׊ës> ;v CUULNN.ldE4|8ZШiMdޢo16wܲHcxL;IOZ2Z~[q6_^^5Ѝ:p)1L!m|J+!*"*|Hˠ2fժU&\:5^ (F}o [C~-hUba@ ]TJl~.UEAX[Ds"x{d{z*i vY;y͔yӗr%a-gc,i. F̃>TDTؕR[z5P,]ThsU;W?8=) XD>2A@ aM"mnqDĽp0H$$ FFFTWWSSSC]]|iTVVR^^bffn0@`AUQ Xc]4pi_ 5N=;x)Dr9 U0,b]!lhO2b߁!Ʀ( ! $W\TUw `$gN9–=x%OS)Ēδ8žeCpnQr yJ%7 L)Zu4|)/v!6u%sqU@p̝ HD&<#,U]vqu[(+X͝.ɵ,_&Ç(T ?BR%Q\O[`wv^>2@s33R(g,nE.ږK7^L뇋DZ(%ës媫SQQAee뫡Nh3H4GC|rO0hcߘVV- j@|.@H\ӟ"Wʟ|{#]~8D@zPExo.) >|J+ m+=AG(\^:Ӈ6$Jn(Wҽw~\2º\,T0RxFEz;BLdll\.G]A眢|oxtybXEUo3:7iDa*|LRfGI @@[~F$hR /k$*lzh3/|jh;FmYh:阴0tҺr\LO%&L"r-ZVJ>p;d.FE#4n]ٗxjdq [ڔy{˙'Mxa[o@@9h4u] L&|B`JXdrrrq.H$2zBhFkS+o~{Au2 NNEYD/\TQIW=aܰ ~_/:axKΪxtVUNLM֬n"e׾nSX4,:Pz=fjJELoq/>Xs}"%S{ 칠|)҆uAye\RJ1ӘFM~bADE]ZJ+ mcOOEFⓁރfڶR"δo`\s xA?ƭ"˗-|HE 3C$I::j Y[5+nCq> sB( h]'.HlX,FEMn3^Ks 333X5_ (+ RBF)2坵 Z3"2wl]*O*{ook|j4"~>KKWTUv]jQQ|T.hF8]?!{D.ؾ: '^4hS/]Wބ}Շٔ{)Q^h#:ߌt/<жm_gZe#l(>4HP$CJ*Zz7#DMx*Y̒+2-xPK2THuuem+׬0 u2 VwZB6fz:c9Wkn7ՕTWTqt az386mڴ ǺWq8888\:t4X,F&AUU(BaaHsj!(0,M@Uؔ0a>^"Jh_$:SJmϰwsב||9a{?eee\s5f:L6ZvlFJ4r?4!e000@6ſ B5N. $= Q#XGWFLAfYl=fmr\.YE$$0M7JЍ. B>rDQulʲhN2d03qz} w=3".oUw ? {Dn=rq±…THubxsA ޿B>O+Ounng>='flۦwhGYB~?mut`U[ #8r]w"&xS6yc4Xy%+VR rf3ÌdGH^бRH$8x X,Fuu5$IFGG_42B)t>gj=,ري&B ܞ3Ϣ*^1H>"<1 ͦPp(HUE#Sg<1RPMU<9{.#JHI dl"E8८Hhai!JuZ,oEz+Hg0+W"tٿi R 剀 !ΰJh+n88⹴Ώ^.>DVUS|;ig}tceo7Ay 9뚚Iy6pQ ]6:dlP:BiL&R#]/}1>d:/瘾?7jn_mo9v?D@ 4JbOQf۷og۶mqSQQ<.͋ۄY{7ѯbj*.+E=6tE(&* *ۀ܏0f0߇XT-EQͪ/ZU6d ۘ饉5TtGW^▆錯&sEl5aw_?@HǪ@'ER_+LR7M]k28glK V Q34{DJ*!l"#i4"˞\6\j6E)38DeJkmQ~h`?aP嶦[vvX_roǎ?pf'c.LPA6e||D"A  DFQl)%jOer}~ιi }n~'y_T˷mn|NN%g~`4ul;mUkpUigD*!jcO18k4 1U4>T?RsqN#MmCIҞ#{6Pkr.%\ fg"WQ&erٜ˙"z6~S2Cm}˃K׈#'>˽t%sUq7U [H/ȹNI妖dtkHOqu^FYa76]'YyF9frrt:[g'W{\h׮C1V Me{$!HN??07<]( pgb8Dgp\455hjj>fFz0%UAȫѸ+VP__OEEOH]XUUVr( 2- p {30DeO4Vi2FzgM}dc9f.gJ7P #  D1`p8L4bH.;|>Ƕm Ô-oO,AU<$3tڊ.LqqŊZ*b! EHGY$:`m(e Hp[W_,6]`ë˶HifEtav$UHH#?Rp;T...M=A f~A۩\A%=a_j:խd#zTUUQ(b46M[Xgy3M`0,i7}I7 ~fO`VЫ-Uӧa%~Xc2uڃȶ??gsewZf >iFUUeeeϷ, ] TTTPVVo;w|;AUU>OQSSssEl[{;؊OP| wPXXẑ+Ym333C?_бcՊVwT]-}XI4g4;D~ImCL:`6eYX5Q_ RJcY6bUaR> EEATlu,8"WMEE~A!e2)~!p2vevzB]T')e~&}J_J.Rbg/e$\i8}? ?;3 $mN=M*p{d,/ @MU /B!pinVT]6U$-#R/>DQ cӓ$dӵ[XMe]#MD񆢨~59vTTT055Eyy9r9RY?oق=#5&ejIsXB5;ֳ 'D>FP~j1C52^1\.TW?j r|FUU>ORWW,| Hw 3v Ċm*9/Fxo4=PUrFDZ,k6[AΎ #c1Lۤ;͏]zH;3¬x3fd9=zaJ䜈Xs=H)9vb |>Wn(M("m{Zq|%El|>:hmee$}Cw`=bގ0,%mNƒ#Nwݔ+'y';J3:<Pp8< g_sZmX'?O}PvKJ( S,Ok~b@0xU2/?opNP蒵oSMf_R, q!Je:\/?Y#C R-gK֕ș9+F[q\ .k֣k.;M#^C>=Q̱jT݅' 85o89;I$dY|yK2^/NXò`( <"9nF!FȋP'=[C)wMw GusPSS7Mox.PĨWfm6aB X&Es % xty$!'k4?ckySՄ\ LqlwŸD(Š+{ SV^nk9geYƵ%݁-- l;RWUAme9J#IGzS*Nq|3'z WƯdS|#A}iS̫WVV255Eww7ByH$B0d|(e466RQQqwp.b|!|$H\xJ tk֬ܯ&G*ݏN]29qN9^nFeR1'xrqY+ml\nkP#I"^N[ n`;W]uZɲ1̍zBlذA^WBM#}f:ZqH0¾ ww'o{x)/?w$n@`BɓvV jx<דg[rd`4;ʮɗٛpnCW4bv6Ư%ؼot "RKɍcb'0%orO6o!PlN˲ضmxx^=tpppppp8=)GU?ɘu;k9u-ըeR4Gm^q%p^ɢy.^p7"`8888888\<]Rj寀Cܼ#'#Uw 7&ȱB{eJvpppppppppppx=H?:RkYq=H~K"|U_LNN:xbщ;8888888888) s=oY m:nH|twgy-[888881 fYe9 m,#Ffdd)X;88\NQwW뵆"n؞_Gy*Rm8o^>'8) @Jt `C`8u6vM4a|RN~988888x<B+zL$rZ^+h[n}CXc?uPU.˘&"D?c@vYuppppppp8b\>aHY}UUz=x=g>DWz^w rұdsYuppppxN13'^ 0M,_qQUqg9pG)M(fS EE Tbq-:d%8A)}Km}+m'V'$F'a|K_fgsQcI)1M˲pNBizYW4yqn~ǐ"ab)Zx(2<6Gyy8J-XM53|plmەؑGADUȋ;vwJﶃks;B|l~M i?p?ߺl1I۟98888,2%I֯_ͯKX(ravڅe[|_a}n֭[wYkiKR4-M|w!y^i; MnGikjD_؁xEmYZT+-ɐ+\( .(Sg 2}ǚf&$ןhx郥l:QDyitoX'Ltf<0l<ӟ u^y[FhBo^] fr<<(ŽO%Q3H$IͨF`ݘwn91Ԋ'ogOu%գtwf~[_@`N2=cN7ZܰIy'5(8η< WрzXn% $p_XwVop:FT{%f:uJQϙUo2yU*T(3G >Kn OSԮ'_y{Teoy4DL"H$suq*>}}Qʶ(hѷ\x͛#NN8 2REQb@ uT^(nePe-j֣w &"?﯅4c[gFCօLsjO|[06:E‡+_n&w%F|B+˰zWZg>|uG !=G?ó}R3w fSqKنUĮpGZ*BDymG'w?gG|G^eZӫX>m0]kyP&;l%g2v_ et?ͦ_s<[396W$#[YW?aӯqKZl."?S)HX{ҵa6Z̒ҿ@eՄZ4 \<ڗpWtÚnےoa=1_?JV.}: eLb(^g4ZL]@-iݾ8}t# SRD6iݺw$CClh0_1fJ:ec}hjyez{.~_qyس:E?~pYOs j@"'2fD"^%ŋpi7n̓O<|hGC._ߕp͆Nw)qu憻K(V4*TcIT.@;8Y&=F'j*$ Gϳa^Nꖒwf//n6+N|t^#Z#D6zS˘x*=,x4go6ľse\ւ `ۉ۶Qف!hX%s:hd#bv!'F}kMtYb#BhS?8m=bq8a错,~"[^)bo֔n*e3~fV؇c#%=Zы:D"#Ռ K9m 8RIŢgr iE"Ic $)"c /vFYzz-.>v4MZWmc*#!(QSift]g50pf6|%.qQt'YiڻƘ*%ɜݸDpgcb"բaH>ާzv?mw~@¿xH1KHu-N\O!?F"H$~sͿnB%qy*`J%˫" 4p K-'*2$EZm33q[Gp0Ej!jrR6Fs%о!Ffewi;]{wSZ 7%VYK7e<98=ȄD2""J!8EXLo.hl{10'O&C}W19MK&=6lE@ٞ"T̸=*mdH$J5%V݂jfw͆PItf۫)ՄVBA.C#Qb`\FD~ PژKrz81b4Yq:\Q*](|.5<α7Fu/_D e&͘e*TZh('XYŊ~l MqEu?NC7 QU3|L ո,H$D6z3X֛d2:.;p8V˓O'Vq,Uy/%ۘp~BYߢÈ\l~j0jE_pn$˩[""9W^NSdv1 $VXߊ@< ѲE=vPf.BZ IO@rIkTp8Gb]. J(JO)# Y://tHP&'H$=RM>_~spv Z8XѥOiݕ@ @ZyB8ub-,^HY< O"Jr*N)$+[) 'Ie|cZE*@ Z˜,sfGLP)`LGo)+fX=*H$-44T(xzޜ,8`S*Md䴫v.`ўOfdѨQV6"֡b-;*q:7qk!1 jՄjaڲAD(>̺͑7POTdkhE{Md2: FEلA0 ZPhܘhsꉏ9Wv>q1ξm)+fc.FxSbK6hXJFw"GA89 &|")ׂYxzޒR4FD"Chj~;dd<A豾&*-+NXJZw4٫Y|Jc[Vuh.o>ՇvUݿ =ׯA[3?lsY1HI$;Kq,ޗf=E}(7s Gz4H$vk8q$hT !L_VѻJ&8_ C;H>C65V\x0s2IgA+u_K$DR%{ ^WD"H$H$\RҦHz6-7Z)2Am H$ v>Ω7T{AJH$ .C;p;y#5&7P~z)V"H$J9kՊfn#"eeev 5$ZicD")Lv')[̈́,מH51 5Vrh7a'ܜD"Tr@-TBj zJu!HEN'A t)gP :=BqH%XPdD"H$ f{]D"HNB &gxIc)j׳Ɗm&0}-H$XzFgΞ'*2^WE"H$f48y,jX37>|6)!f£Q$DDNmu5$D"m9yӯ>'SxIWj>2t@ i+V"H$D"H'H?j!h<_5ZF4oD"H-DQlɉ3$c4E^WM"H$R*?Kj ]O2CQ#TaHD"u Pb04.WP'q1DF' H$;'dq;A/RAjVh#a/KD"¢b38xcPXX;^fE<ܨ_6 %<$?_r'H$'""LgG%8F|`[+H$M.enh 6]b>~e9yFFнC[ի;eF#زkVe<ԭ3y˝TM`AG\D~z%s9!r4!DDuiKL 7f$DrICOxGPDU,R퀧raE9HU+H$ VBDQ$88J-" N# Zbsq!(_o ee,V+(Ijłgf4a9ιt}9rZ{c+2ڨʳ8͆0D $DrHn#h?sH2_ 4~ݗ3_pn$`3RW30?Q@(dJCfޘwk:\}C Ff$<9&wb"i{+)u$j0Ud@@/.Ay~6^~x^fl" r2(0^}RoH n, b.Jv?:_ e`ESv{j]rJ3,BoؕQpb)H&)Ti="sUWYq:rIDQdȑ̬YHII!::AUlbͣqz (Y:v۫ak~>Ӄ)DhhBѴ _:b"oMᴿ:Ghٓ8hW!Ѧ Gs/ +RuD{QSWHD"T`-╱OwkɊ˭2cy݄dE^PC0 >ۺ7R=SڽE42F^i٤DB wuՓ^ƌ"c:DN6f"ڤ;.g^Ɇqiǒ}1xܕ"r' m TU|L\\>?JYgxsL?:&8-_+s]PVxjxnM5f*^^3i+O 9i{_c~|"s4x(Eg=@07T ?˔5I+UB"{MQ#y ]5K+g2c<ՓiW2Ư$swfsןY46Xܺp|!*ф@9'F஽5&$-FL`h KO8>yLfI;@tXp IK#e9gV0i,NP4^ۼZU`IJL_+ *GFx Nl :V|9 "ya<߿ޓ(_s hb"q\ߔ2k&Ɉ`|:t#<‚ HIISN<pj'B2|7& `QZjۺBBܮ [sJ 6bAQ̛I B⮫u l|Eܽݽp(d7Ɛgs36-LmQD" wX@+c@WEr92 BBjPz:o$mīXbj\ ~1{>0݇@BUEAPy\8lCx0k9(;~f?;&$U81ONo~atP oA7ab-[3Q|ܥ9@owly 1jѕmfGhi5U`b4Ptf9w Dk19?L2:H9ʌ )xBGb}(5d׽iQ/ 4^z}}G\5~ZvS~|GN2QDt]ul>:h!Í80G6Xv2g,#tϰܵi#?jQFu/0bҨLҟyu3ʼn"wŴ.6Pw\UrU\ |z? <قP_x;̚j{L@֡UycMb4#+Ó"wݩQ!W<9< ߽c?H.3<ܹsٻw/@&ѱcGƍw{| ??ׇ2C{a#l޹W-BAB|-If ٭b-o.>^FOf_ދ`W)P"HA7p "nnnxxxRݝ@nS\\XKTJ''֏'CLaF7E>tSs62,ΊdrdjeeXkY!yy nFpn7QZnjT\NC Si:Tz*R͘LvP[ +=ED[+)J:wtUJ 6#eF3V(ѸꪩK@pX)/6"z(2:-nh2s 6K ! wuKy<kgHÖ؃zKnfr;`!7?|/@6vc|^?Ku/ȷsWb:xU?d9ّ&ѱquʫik5oͶNsߢy۹w|D|e ㎧ P*GEDN?!S%m۴`Ü:q")gH.h'~mr~[=wɟ& cٜ>}m /d2e^=NDh06s6BVNQDGώ8JHb#E*xj2I 'a\5) Z@PDK|NA@.RCAHcDDEUd&;[H$=vy(pssbWl6hڻ~!TڱSu-~CI<#sbōzI&ԁȘXbcciђO[_֑غԭ&۩X;h[bb%3wQȦOgxߗM";EDK ?%<:؊>@W"{4 mTa!~ѱDG>s~)Ky!6shN_bcklXm&zM%6&.W? 'XlźeӇPn%A=j\O6G|\X2ȽALڨT:v~`y3sG E}5kֲ;^8C xz+Ő_H14{qYY>b&6>^tnҊlR_H&#3vTN$8n ;N$A]#.=E'ăt \#YG7vIf*g̦*Lx#~` >O.[9>icEm++VRz+>#˃>[ ~MxmT7\m 98=%F#FKK; ϯsRkSP'?cseB[ a,փ/b\e,sz=v)g*Mא]h5'_-1d߶JHdH:[&!~6@O-ԦnCGж⻐tzb:+ qyzz~AWCD"'(O%(ݛ99t.˒EJW0$~6> {ͅq0S\vaN k&-ABG,yen R*6eMNeeQ/^~OL&C~/tFR(\\]Fy WGߧfn+7/cC#8Kҕ4hfvS'7 þcxp_`wo#-CPYo=G%p,3NLj+'}p?#gh\?&~]dAE4&߾^ZȮÿ%d WIxa cn$C֠Npt^;T?7 #yӾ]ĩ\Ԙ ?n? >d-WLc@]>oN7h@n#ez~Gr ~ݯ?@hi'BA& iZSy(f=x)7GGһK;FUr匊A#ҳ߯<P-.Zc~dz\Fto{3eLD CCXE!91PݞQ"H$wNOzQݠIt:a8ɸSlIidn4K:xPS1fX+/}],OcFػyU#oo˸NwRPq#Vm/7lKk f|>MB g9lH-*;{yh.fPf TdAÅ}H ܺq4Q(j.5o#un^RIIg>]yt _ lNͨ\FJ14m7`Sfs0 GqrQp_жvM(ങ)o_owC#.p]tWǰW zt؃vb&cLXۮN22ˆݶ yg$QI,6n9l86a';x JBy>s]߸Na~޳:hZ`t5ˊ7wBWRBM\ƨ䩤dXĀ-U"E!!.ZQqYR2hOzuARH(.h{G cZ2@B#WT{*CT!#Wq>$E1!O#JNn8x`7͔ @b c]lPۣU)EY0ͦsu#sIn 4N1Zqwr5ὦD\v͙NjֱckK6iXcuC~Dt{Ok2zz}U)M=7dep8XN&,!DtL K/*YFlOʑь( L!]C"?~4. /6D+f=_4x5>L77}%Jcxi]6ed4u|A}"BhR,A#س>7E h3qeq:4ڪ Mf~hH.:* _ |*T$$6ueo''L^:q:}f0{@66/×7hӦˍNl|=c1FSyA=:f(E/ԅL JdjE)4Gѱ}Gڿ3)@e5 W(AvyyN\NhP8JR\~;CD &boOs/J"H$ɿ4Ph()1ҺuCvJ" B.rbx\3TeW:F7U,6ʈ99l~A5R3K|ZmэB뎏;!s-ZDN(Jt5n ss@Fp oC3p!";#2n]o卯bjyWET%s=r[Z`عm54y.1rh(o/zZEٿb ?L~~7T["]Օ7t$i)Wl>p>>ɒj|ۍzðثJWVu˳o:.J(9tfwk{y\X%7k]<‚'3tC͠U< wåJ<]+D<q* ! K/ #9M+F;s غj\_P<w }K=dr'汫{Uqzl9zコG[^63 xc@}W-֮c|JF>xYN^T,v]ZJY*4l>9?-I2 LBg?|C1\ AT'D"+NÍ݃ )hƒC\233eeeWfx]8!Y^exvsYL~UQ`Lnlxs/ 6d>SviE~G~'@ɴm}|QX(}9c^* >T7v4dVvn;˵TbSƲۀ쟙6hՁv1SQa$:EN9MB_`z?ؘ Y 8LX.,cRyx ,EܰՉŗ : O|ύU`4QVaU9V -Zko$#ja٬H(]} $::mW1N޿YvWS{%\}F"}*ёAX-9ұzZjf2- ֏IDIbCw/D\UTU}̆87Șa(sQ z̦w<50xBeh(/m3qu1R ]fHv[,gM}Q=!6:@|8Jh7:E+I6ᩙˬ7for!`/F=ͽ&}=l%>ƣ^5hjhZT߬Ǐ0n/&L3(I#81 QNALkME `{~1ચ͌2V Q:zw.{H}!JjySKpJͬ؅ Zjb}8 Sql2]f ~~U_ߺzca8}fmw X V_)U93#&mNJQΑ? %SJW4cY)VCi qw104V|TVN  Aau3M =HIT͞AM$$ Jbl6w Gҽ=TU%z:)La S[(ϯħ?y-R+WDµѱ(YSn!HtvvnFҩ_iO? AAE:0ma)ΘǎKij*ÓX*>'YW_M?))!*e>C㣿Ĕ|v=W~k\z&g,mMy7_|B/_n3uG͜:|GpQ; Y";no|o_.^{ik&O&\)`m?2#>?K8s2/M0)o[ks<y7B' I6Z__zeWcN\O̡fw`87~ID8~]+cTE;"& 6,%wˣʰ)5|oa E3+n/glʓ,'ÄYŒ3f~{Xμwm?sKGwϏdgEUS-wڮ\I>&A۷j?)R=)La Sgf3My0dsV͖;5LfS]4QW~ θlG\~\,08Dԡ&$@J 1S8en"8ź#pt/~t5aF{j')3a'8}DVod K z K aP7="TvS/5!TB7ݗqhcG sY>(D< {U.*0Thh{D[>~}|gkgE+lg]WL;,8XF{{1'_9(X6%"SEz>nݐ(Y`\MǾJ Y<ǁf f➥azjl) h.5Z}9zkp$  cO4.Jw!Cb)9L}WUn<7P'.At”*#/lf-)$]>c^*KʪrhX2aH臂$IJ0 cT V!]Z>.XmRa UuSfD_ %#N2H;,^6m .W i 5$G)`6ZȱzuEEg|ev۶lB9N 9DF-b]E0 {i9E^wqZ@[#mY&NBObDPdAHBA| t}J b&kӯ@lcLY f;@}%g_8F0G(eMr(Spz z =$R-9 q/$X瞅\5@Ŭ)2(.h'#++@Ff@| ҵs@k^ ڨ%a?BkbnO<4$X ~9LET!ڋx>#ƽR,/ ^' ;.j IDATb)+SPQaIԁ\EiD96rVT߾FB<hZ7Ul3^6oHaccDׁc1rq/Ssi { iKS[ 3n/d|JqKk>)La Sx`wҩ!)ZQt"F}]5dӃ.Y /^̝wyRdBS~Ftuu DlxbiEl Kx MjbZ0憺 L`qC.AJk>G|asdZ^]OB !mD ,zQ,@I^Ȫ@ӳ@jFd-137U;^M%4jc(MHF?*?Í%U `T~ GaE3OUB Q+tHU  *;A0UD Nj}()3?k&%z<⡉˰;悖bWb H:P9T @΂X[!W!P:|g>V]`>0[C +Bo(BxIe}B3(1N'xs:4B6He^ 4ETT>n*k(S).I2 \`!%R(&16{}o㽦asO&04Sxw042JnETj]\Res8JA{';7Sk78 cb(/>ҏ q7B$’::a]B8į//[ŰX( &_͸'I6OX]pFbIGͰ[~ %sVB` H՟ BVSb\pLbdk8$0o>,B7 Y?DFAk+gߦXyc?=NS̜ar.3d^ɂJr=b M6P3*,6),)D([ τPl0:ʤuhy*ڽ^fDg 4 b3ɔYTyIJ4cJFȋfv0H:&eCx.QbgˌϳzǾ EKh^i'ԧ{yjl}AHhtM;8if3 R<}峬cX = k{)sɁƜ %P>^{e?K*zn"yӻIF󩭨"S{+# c^zzXt!H$ٷott&m뢢"N… `dr"oL#v9֕t 8XPj?缿ޑZ5Hÿ́eynM6"9'rş1~:zP&ܗt C%3`e5fAT փ Kj` (`  [o4)٧ \+L`w Y&7|IG0Kޭ֡mc8kAL+8Lx!km2~NIMfǖ/RƉ)&H$bPU29I,"d! 33 ġTK"zFŪ^̀Mg+ykvPorL(3ԬP$D&6BފmQy}OPȻG$xj9`$ wA y\ 'ǔ VxV6-AnțFp͈ul%c&hI,UY :fČ+"xtqz\C1 AB462~ydZZTTo( -"HdÀ٤Ǻk1 r<*9̘Qdb R"o6Lm76;{A(TUE$$I:))Gi#QVXZY܊fIP0?٬r޻ sCtc?C州s9gS9`Ga67\wx?K6yçk白,,[^Ocu)igo8[̹u9N6fs?z痞 l3Ӝ]Ȋ+Obs`S9w)sFh?'kYm_0)ǻFUM#y׶l'RPeΜlܸY"糂ϝ;իWOf3^H$,x^B$&' i>X,(x<RT ݎ 56S4,!H ![&>6M@3Mf[`(Yi2dLD=b9/9iG[V$IBT[FIYho ec[2c 8çBnT:$ ;K!b]!26:saɻfȓ2m=q`= pX!ilaqϺ:c色&aOleX@05% ޟnt%2 HEX}0 dCB4!l ~n:gt|Gc IlsaԊ}$_8t{B:AWa b&e\{>2L|PNrbvȵv5,-dBx]z5!u1>vf,/e/iVk<Lf5p@J&%B&dcx~aBYIłݤ`VJp(IJMכ8wÈ7Ǔ'q6T8n Ydnj{+.EHॏ,YțSX%Lۙm#8]qʗE9BʱxY;3^Ppeky'nLѷv$=mz(]7䓻Cz)W~f9%N$7>-u|z̘;yEdşՅ5>v6m΢`Cv10Hnb44=#8wSl2v-jT&~d/":izMwlEWBý2.9g>M6w ټ09g5k.nx-i.e$ixu- 7`]\<4La S]!ֲ$عs/c HpD/^b`p=LQ2Kđ LVǚ ߲Cr4b@Lt91#FI\0̀&5}THcN[3j,95pp?y~[D,,V/y Q]'l 9V5 K I?6 !5ZT$ & DxE+{qC:4 FÓNP(b\a(J@FLਃ(`) 'Xvc4o>1Q@A3$;NA^Ox.~VB*E1sGwG:'d5%,lsRΛ2/X8V7!: HDIPNF2PdYx>)8]3bR%;mDwXdbf&\텐ɉ9P&k3fAVnHqr-#\n3>E h(ap8CJj @z H%u 2IsCbbTKwCDq4(.$[83**j&OCIquY!TlW(rLW^79`HCQ̿X*\MLzDr2D͠%{ nͮ[ flFϺ>d UU)$*R0B1&]S"O˸,M&֧:)b^E"d%Z%?qvs lcho{Jq8bF62xt'c~eSq˄#d10$Z0PPPp(ohOdoK _\H%Ns+ܹeZL  LȘ6l Ee3d 0x1YLռZcoU1F?S0Bo_\K1[IÇ[++Z>E}fK^0^#~Q>OM?]n6^;rz`!;`nz xS3%֣uނpv^5l`LXVf"Juq~[-X;[X鰐f׬e̬u'|W/9\ݴ; Վc>^9agySH;ܝ:8ZY!wlǢ9 H$M^La kY"MqFJJd VGt{Z pa><~Ŋ| MRJ8h3@BH$2ql;{lFFFdkA dI%LX sB$ʫe]`U\LMw1A!kiµٰDh%A J[OsGC l,lO5!,({$.·BޢZE5$>K`̘TJ*8gP)A}ET?@M 4 0R(HRΰ> 8(HK2TI 8"L7Cb")!p֋%dB{;1 ]1D)c X~zU={ A*k@G!J 9F Z>F8?{'I͗5:ڽ;52,z$tE `s Wܘ,"(k%W[$RyR$6}j cah8 zvA$9S)8F> L @* r%XE(L䓉9ӏR7 gOAb'DGz9qQڊ/ j @4;'iPE?|2R1/Rw0cWĚ7Bd 5O8 Ey)lETv04/y\y R 9̄V~-XqVvlh%*`U9J!cT}쓲(e;6&@3 |+MY8&9H(`8]0ϕ2iNji N/))A~[+RHlמM`?,p/5Ռ@r`:ˊtY$-TȌҵ ?Pi3:W:pZ7B>r<=fzsݸr'kYru\Va@nţ Q=Vܰ`'D!Z83AȬ= Q%&#وݎ@=UaeToG6i-n)@2iHgL02`uLdRn^a .rŠVWO(WNp q\A{@Q9HQəEXB.-Mz?mKp\Njo:` ,6B?Œad(@"D,#vZ&`0=yr27O:SWӭ14MC4ҙ45{7C&!eGGlקŊd,"rl(B"_S`^!Od<W3iRMƞb( zV u+n֫}!*3cuiw (ea 3K{TQR`ޮ<+췚p4E#=@LU,bЭUgl4>J(rMW62S$3~W"Xjq w`7ILfi쑷.PΡLkf!O jol[ :Ui'Nj,J4)5M<2U52c=:`IiX'⺳i~P-%ҽQܮ|lpbѝ`]{%T$ Dž/r"GɥؾmVB$YS)in2]v* nBͰɧFaphc'}# `5b̐91,Iqq7I1o>+ IDATA0qAk3UB;d}9P]ŀC+w$Ojh;" og2VLHskn.Y#D4]dF7&^J`rpxmLC H7:p/0@/h}~4% DN3 ZfPcQ(նB!Ҋ\7'd(+ԯv' Ux}#kA.cSlrU LV CצB|\r@q79[sG62j7_}RJFzBWȥDm$ D<#FB@#&j%O@ ]Gst Jf43Q Day 09D_ / lYڈ2DC/sZ/s.?& F 3jR";lR口(2&lD%UD`R%1V?dpʝΊG ! ɭ(HsTbBao>gF>rfb=kU7HF&9NXKD[»UQQEc0/n.{MKd/c~Ы, Qeϫ!ιBgɇT+S(Gp҆ jmbuµI_o_nmל!>MD{9w?[c//iJ0͡OR[>#fx$W=_X@ћՕ4R4/_ǎ"_q.vfCG|g0FPd:qw#p;qZ}4.ZʇA_oZi_A?Яbu{iZp9JYw Xf_K_U<2)5Wm)ž=&wvEx9=\'eN5n-{!7ɻ $ˌ ,nN[1hX C6:i|>f>F(X5cˡcialu)3-UpQc;.XV^&xa֜\S$MR;&MziڊN,q\ƁBY&;UXQ L0ܳALk0.հŒTACB(ck9;I< >}&[gxl'bo ,f}~M J~11 o)sg$kEIC P'3nCxFyy%(fm~Ot׍ҏÓ>3F nᤤhR)"sAB O?!%܅e8lX_A8'4QH`xzu/^naaH`k4.pV~ E00 0yߥʸJ"cF-IְزhUJڅ2ݕ4\Iz܎ n1ؒY')lq C΢$Făz8d aIA3xdlOXiS=ȲLMe%#eRHJq TEőr \vkTVMcYuwHxrle\o}_{/8\vVSW K#ֶB*kh,~k *O7Oޅ)ff\FDQ>F#gI D.$PӟyfFVϯn9Pۄ/ EsR@{%>qF|bKcK%Ͽ``1iuptWє$Ӌg Dzy,;U7EyA VhBR?^crZfVκ9P06p[Xt͇[{_u5yjqGSy }*&N9)a.vK @$i벲2@xgU-LKLD<BCg 3F'' ‘FX$P>1No !mI5WR? smssnWwPOZQX",=."WJA0l*0zXgp? a̻i/{F:Rc&;`}]]=V#)ǐU!R5#h\9 w?ŤIaA0 2f(4O /EfmyFmA|Ldlge^čvbx4nD഑\%`-3VЦ#aqbf)`KO숈 N6zPՁd ldc#CCڧf_#9m"z LWXJQ}4#ֿ_WaN9e|@#4Hr`@ ťg;Ǻ6%p^R6x5*ʙᤤyi \,4~TAa x-Щ'KrVBL TkkY9 !Z!gAUe$\v %"cAhHvEE3I:aA.cma(rf+TdaXM9djICD"rUd4Y )DM?Ƹ椤eF?O%/{oA$L&/qhzKd1b ` kfв:JPb?:gXYs?0/9ObfGa[yU3sz)9$Ы\^)zի"Xʽv*C =''''93sI +(~>əٳګ͞yw;̦Jvc4^#@sΥ+8@e3o~ H(z<4}؟XYSn"ctRa8p?꺚*i[QqB,ig`c>=*k7lmt&*^IfXxd:5fһ{xaC[߱yuBm ,;֥~^!}<~+СT_cle+͌N9B>ɛ fTWWDZ/$HN[kZ /ܣ4|\^rmDHW^k_xdewbJx>$2or0*v }ǐTdj<~$ʙشɴSK Z.- QSv~œmQhⓅhv-Q'|oBh~.q}cیj[.^ ?FXFԜ7MFMzn W+(j^]<|rδߐ DMW Jski -ȁ!]긾OŘt|- D p1OvxҼˎWz=W]EY~HmϱYp- \)Jߨڭ5 rқHiPU!UI|ѿ))u^j/$(-`_5gr0?zA|/'T:jV2cTml)&XPTn< #qix#F0k/gVPMzRO%pVloai9GՂijߌ`4"Վ`V 5Bd30<*I\,2|x l&bdQl,\jzj@ڡ/Xg,@"GH+\S9+dlOD婰 /wH\x̝[E,rGGIwwyc,[MvbSP1G{}Ŧ-8d,؉ fbe{PW?yN>V_H56*[oO^Y--WleDz}Q.x@6Ce [eHL&'$Io8,JED?^` O٩d_997OWVAƞD F*:0T*)Ԅ':U 8{%<*t@2w}?=7rq̻ ̚m?nu6771d\S  Y|u_-q*_|fwc.`R{A0-뉭N`]ɖl9I l"9LˣݭXx΄iJ,Q|:1%ǕP>,O[ 2 D gZ଀6^J!E!?Q .)O'ǫUt?qS+ ך"J:?) Z[SzUl( !竦(XbZh`ЊA|R̎ ۑ$`t>%r­5ι6Ԩ.LN!Q$ J|> v*CYibplԳ ::"xCm|>f3yEg0+SJ7|u\D̓kYRE_]`9!ʡ,MfƵ|j}"$8T8gٺ\|ێUxWzXВO@H?M1ƳlR(̥P[e )ل8Gy|a4q`н6X瑛Q?z>nScV5rI?^5ղ?K)&JӡM1~ QKԟ^jaj hyL8!̓xЀnj|/2#Sf.LH|sBd*aR0 k\ę(MR%&q6Y'D!$*2q2mQ2q^ H2UI(rOodX%m zFBBb?o?B`.Tn>7mHim=hUt騕le6Yxf&B!H|> B88?BիC@$7{ɇ^fm! J?m:z(=@O)X `1\` 0&>M5bR.3=spj;PqӪ֚;"麃^x͝O <"`?$؛%=&fL)r]6.#@@OB,Bxj$(|| #AhNӋqBrh'WzԵua3rh5r o1H>],z#O]`R2AH=)9քÝ3LB[at;rBfM{d})ChjJ{=׎U ]!H׉9=c uEB@|_`Pwx/?5͹?sꪼ![Ŀp[]lo2ixhHR(P(-477߷>Lǜfk8qW- y a2FIĈeN2H* LGHgNjSPTjh:R/5S9agW*MH 048)`g O§Sf-QHpfqu\Hj+FH+tXDnX(t.k0: 1957iG=錺w eR+c8yՎF$lDqx E썋k՝Sz z kA3`QK:ͪl}'9|Dg9ưW29URE2 >v nuMπ 8^WTUuaAnq bېx%]qj\Pu^ 9`z?qa 'a2]!6Vc UuR8o/&WPvŴpV3"s q%o .)`7knjsBAer7+%F"i'AhmJぜ:&`a eBF(LE.bd<[Wk'`&U9r0"dBNAԼs$ Tυ}v hAlۦ> à^<P(P]]M2fll,~m0>62qBOg_f7XP`ς r$@S5C.ؔ#:V+VOGZ0 9֔ /E`CX $eu~^ߘ_JN¿~"|eti07epl%|kܮEUR0]aCiz=ywn5`ga1 njR.zH/,ď1z5Xc 4M\t%@,eYAY|q9n`h;7U_*[ݍPR7O-7a/d>'7_I`:iez:9 %P}<_ ")Kea4A*'4|bB8 3WTBiX3j`%9P|u=YT4 :Y?칛vտ߾Bn !<\8)bO o΃cSa6YBқzKʐspD'ʘg$ޙ5b^k3 c8)8nBLfFY}y3|yAyHi R!JrȄH ỤҜ&IЌHBER&xob$)IO =a&aCk!NR eYTUUy5U$&XL$e+[Vw͞= IDATvskU\.訤6:C_B"+K뮻HG.8; $: 3\jJ@g sҪޫटGBp-Qp\|qؑC(>,EJ5`aՂo2N@,z`;cMKF*z"g :p#H:t!CRCK%a EetAI}A@;X5޳ nffFiEr N.~V*Ӂ$r} WTI6Us0lfB3H#=:&u&f0Qc:w*/@"JSo.iH(=?K1RO`s )8/0Vj"C 1B Bײ>H1Q%)u17xM6I+]H8bW,^X%9uÛa.r2X!H dQB4y}aYBHfG8b1=upL;jpOOה⚎tOz"|Y$>@AȴiwAVx::"u @*QG!i4} t[eJ]][]le+[٫%+S:, }c#ԥJ(" (L mnbhv#tCҴcku:0~~] #H HpšI=\9h < nT5øjR-D|nZWc pO8$iXk*WYϨς%禑XHɒ%,BEFH s`Uu`{LLf@K/a,oc' Z9> ?鹲M se ̍*2oQC=4 ;(D* 7 Sި2t|@*k*jU_D)br*›հ>t~ߪΟpl@RF/On$c7UuW!<`-9ZslyB," CVlVo !0ԫH7C٪O@ޒH^K.kp"\+UH ^" tkԽ`$>@oZ:ԫz0Z+g6tP後yPu`A{e~1o2tVr 2~rnhk >Ez-Ⱦ 5 f )`;kD]? מXkֱSp?>?[ozg!8IpS$fк$zs u&o6\$L lKoᧅKy[q;$76b=,djBb 7(C611MKDu߬ :cÝ ͧkm[3QP_b3<9 + $xmއw͘(JQ Ya4cuU.51y&x5cuu;cjB|l%w l|.W 8!0 Efs)aYOle+[ʶmR5ԲyqZ@A x0*A$kˑav|ON 0;0>{DS8*y~F@ސfuvkX\SD: ވ/bՁj優{O|\Z7o>k@;\Z,K |j8Јl"fYT r7DjY~HHLBa%2}q1&9Q0elJq-npEK#%i0sC nkPdSVca rLc<,RC1&akeZh͈{NbJ2N!ɺpLu_)7c 36^7`1bv aQfż$0`]{Z~~^?p-Ľ$q6X zL^}yᑻȅDZx7!"0L DL ˔8e5#&iy" \/JAժB. _`֜uNa5Nd 96}]ksه'Tv|%}XSҿHBGPWWm;߉) IR[avƧX7e0B?8X`uxvc Az(d"C w (Tr# žv ei() 15m+4 Uf]gϑB /arīOiJ>ƨA8Qm$=`/+o_?ٛY{?_8_T$lŋpXC~l[~sѻ}Ϊzپ/\Yy}?0U/p8y^a/!9[/2Dys[}?kVo'\36,~ֽ|`S\=@v[/ Ur7sw+@8f+_?VX犯\ό}Te{c-u=<UN{6:::زy3g\<:::顱8du1 EJZa!4` )G ٵp2 @+t Yp 8ZzrCa-dnD>Fկ {`!*Շ)<9A2.X90 RMi+6lX_9Tg`.ϟ˹OW**7" &f|A8\,/AR# "QKQsgp^__>NuߝM66ȊNo6 ?7_bi}HrN"ApNQoF" q6g"%Y\DI!FC(]M[龷*j\Z+z S^D1ՠ9EԳGXJ@iPly @ B ״n gԥ kILA{V7NcraA&O~GHY+rKXɒ%F?F$.uO!b\L_[Ib:b;RxKacpr1}=|q\!n]<돼 jxÕVI0/ruln<\~*K_8_'2<[WH#OOk ^+Ȼ:#3>|uE|{;uS>?ŕwjPu)[V k֬<q\eݺu\yAaLNN" CJˢ&H(/"g.₟^λk 7{"f6|oE`;nɥ ?JNd X%;KSz|Di٥"Q^i_M5zuptMи_a.N^ _чǐ@$zF_ Xd |q-(̀f|% $EFW&*x:v䎆VVym =꼵H&u~^ᐥZWC yئkIX w?[:1K)w/>bЛ>;{0 j` 09-I>1^6$}I:5!7t`fj9tnTu2PA'7s[p#4of}p(wܼBth1rCD#<\rMSLpj%CafĶe 1,҆emR$jI1vvV-uM<=E*w]s]Acc$Dd =gt_,*yjPvWߵRV7 8sGֲ~|E'MԂ'Sª-W:&o  .&O$9=HyZeWG`>;I^ ;Onc拱f܎8»}9A?|##\抧q(ifƜ1m&QK(뻱`/;6<$6&6"Jn=h#V>zwM+zcGq% u_q2Չh}&8aߣVCl~q]TZiiٱtfT-4<9_[aN $K?a+#pIR*=*xOO:SOe<6`5Ee jɵӒD%}I.q^B)!!kPlY Õ[6 ED4ݷG#"R"vCKL ʊ6(; F#~;/3#`:)T4މ:zD ݽNfؒ{C]/tKLLĘKsǑy=:zFedp՞ rz҂Dw1jҌO)Ma2m`i|_aT*E1E1ɤ \aPQ̃Pm`i;[XoGa 2sf'LpvV=,Xx A ܅yy4=DMEM&8Y:wܳsO/f/&q\}%NCɋv? mBM\txx0A𥻮⌥h^ob3=ܿcwì#}#ڰ` {Ifm@!/Sle2fN4hckv%VK(!,Q1 451?(;V)ۣu]fYvEo/_]{ Ξʍtop񑥟HBp_CX(Zh?Q<@>GzF)ޕ8h)d%ג.^<,pjBЉgF W+aתk.L Sa]^u^ 4-DC$-|ZW煞"ޠ"N[';TSQaTKRڽ+a|'sIO6iu#yT IDATP9arS <;퐎Welra&υ]*.ֱkRӛ+٢C\!\r9\Ƣ&28Պ.)_ϙ,Bȸ90Ϗi -5dj-\ cA*3we{'X&+ƣeĩ Oolj[?3ڪ~CXθ3I# 2 &\JE0l:Ͷ䝝Cl/gq6bt!nF4w{/Üvi q! 9 Awe0T K+ kh1Q-  ;Qr6 Jv}UԢ;zt:M(¶m2 mfA("! _ɔeoщ49"T56P+>|s&>B meFC0>M3S2ޱtLr51E>`&Ls|W*cxNg/S9cٻ=zK(+[=ӛoF7Jdd9{BE`vX^"^};\|lpyI2هv,^KfQ3Eme55ʹ6R["c5k6rxZ`:6u"XFmヌÜ׿le+[ވW,#1<G6cLo`XPlRLC[g;U?:qq-핂cZXeXyyAU ` O!7tS,֫>) l " &no%[cRɸ&}Wp??(U 9l/~J1nS}SC4PiX rӣxr/˜B".^MNUe?BϫT` BW]jz^d1fA mMs|ɋ9c7-}=O6"to@Ο(~47HbAxքϭ="ViI'ګM#a9RʟF݅rc\t7gWA_c1ӮajWc/ࢋqQQåg)Lmy&*8#L#-(DyM/b(yF54-_?;JM ! kz ,7 s$6cU*;TyuOqWbdT+z 0FaOjWH+;>CP{ P69%NTOk P`FRhK .m@VaƶE\ۈ]"´p@>CG=if[zw*<'mER/0S^ۼ%,A|.IzBM&pn%% NGBWmpq><{!VW}b{=׻a B YA(QK*ApoSP9o,|^Cǂ2\z/͇/Jgew%K 'Oys{~ǁXPұS]~~l*QxLi!<\)RP @(,Z qĚX+!b@! @z= @uO. Wkv#y'|s]F3cFs@ϟǍ7%13o _K9>XESLC2(TӪBc"5Oאe{Vc/R&Yf:÷zJ$'(I͑\reA: ߹rMpZ(Q+KNjJ5q" )V QV@M=Vx(QRP!"0JqSI0RMŭ+)(^a/WW>rKò!O J<(q"}߶KUq=S+⺍g:z˻v\i>'LKPǶp!geJ=~:-j< V4W] ؜'d]e؋a0H-#'7>;[C8ج,b0G/䛿ڏ ӹ*}z )Zgxj(ԧ4b$O{=eWҠfXc~O}:RJ3geFg8t)h8ٙ99{ANSSJu0B.8p/| r-| _0V}qeQV1 fjVėݷC >"1->яWMz~zN<(477O3/d]tG%E8=.ZuI͐[8[0ߗhb)_|[/ r"g#eB \?/ygnfiҠr4JֆEhm8h笷% q u7qhGpg. AҼK/nvϠ(*gI^}#e\U'\ObΧ5cockfX`y[ 7S:hXʆ0a}l'G+?m Xƹ0_/,Tecn^yb٢Y%8e\•vƔGgxn "\8yll^c9Sā2)Ou;ȑ#d2jrQKVbU4!컏2ٷl vUK吝cw[@I ȲLrH\+(Fr"wM; /b$#g H.(!6Iy/@у"9T&t TDHSː,vxK>xAxkt̎K|/W[\,oѴ|mo^kd~>nA m ]4#op ƓPjjP/U} 2},cr^((,˯;On.VJ[>!c"Y~O7X& Lҽ-O#vb ^%>):&E8 dL {EՀ"hph􇡾CHг` Iei9mðE[h[X*.R6oNJ,d&~ TwfHc%N3S(օqsX˥@^ß,}sh`罤s&\^VZ1\<Ub PD{G:'L2)[vp1*}v[/Dtͤ:lZ )5?Ë0߭8NA_Dmcʠbe";DL,l35(Qq-]7݌O⺾zz5xL3-D}1x(EgqY:Z\}3^;㷜l;ޫQ`FZuA0:p'.? f<[Y^YٗK,dYv|y|8bٶI}=W\zt3j~8\ٜZS$#%8|>#+$[l5MK.,瓟Xtz 1MLi y=9Ȗ4H[>?cku[{GXj &lՠ]^,P|.?inQ "J.QZH L^LvjzYB8UD28rV[j12)ÆڦZ&~3iX= +Nz^V'.0չbKAY듌5hGa+єhddtȏ{[A!1vihXce]{ƹw/I?&lÎ}Pj#FR>zh;i/RpG|N%*kDgeL vka)Ҡ|FOj8E{>ݓ̀> my`ib{IpD& *5!uV*_?;  J %`_LAw, 0βcW~ 8kGeo` o胩1 A6t­7?:ؔU$2%)X*&4j0n@Y` {c \ mۯS5RyjBͻ2N^{`H#I͡&ՖnWΐq$ 8'3ÒT`ƶmq(@,@5panp8{&((.aE5tU5yM \ > C {tp}\9"2}T`tPl\QAX;YduBJcY=S8(nJHNE1\Jn LU8Xq)"k`qDOϙmbiM&Os>99{Lן?ŋ6۶R# N^b6wqDO$UtC0M+(tG $аI#@|Ih CZ4p-˅PR =:.l93|<85Ξiח|AޱEzF}-+HLΓB\&ȷ"2l@~.G)eo',&_J2c,ꉀ5Ԙ! _|U:6Z VA)]ZfVAD.XIŽ!vRrN5X$jd:1qqϋ:]-ZNw""x ifͽ!:z4xu+#_ezL*׈n#РԮs.pqtdf_ޯ iAOAQrDzT$kBKg0 eg."[2\DH%؂ϟ g"4/͝[@e$JZ_-Ԥ5$({TBS;FȒ% LjopFq޶àtFk%KxvU~)_ ܑx'iq~H7>tJ@|&u$8% &1WAZ?=и*ȏ~+k*k=BСuV#oz t]JN KMQdhZPA?3MM1[/ZebRfjYUf"ID{@YJMutvfC|qjW+Dm yshYCf]Z7E0ߪ"qG:/qM3+ Zal"^V}s 5J2`̊N ׊a:HbRQǾ{cjyKiٜٜ留O=ox@5뺸T;=?r F@QUK_"ϳc(^{VpL&Yu144D:-I AWi)4ˢ2j$q]P0 SðBNЁ)䖆z0þ JrsoBJ5S$%[ 3SLrUR4`tDלAPaB8 ln%0XA6KXک ta2 #M4 ղTTy;5#Mg&rW 8!7oSӛ%W`G%02rʣhSJ(c`![D g88+XaLB! i/;]12j'ɒDO/BMZ<;^[ܗ7Mlhg-~혦Ikk+PfF櫷(‹z8峲VXw]]:I{@rcƑ4P8m9۱'upn@s .Ra^ "תW ?g=o.Áp2W%`"W&rayQ LqhNqwLs[T6.K9~N Ռod,bCU)# O[yM~4 >:޶ԑV+{W=GÐ$u&eRLA&FmR`F! z .˨%F C.cO`5T4oK -Al e 6a.JsզghWx3xdwtYiBZ{OB"# _k-VV9~5 φDK5:1SDzM$_FΦP%$/WIIP٬ߡ!˱W 9F:݄XgugenOL'; 0]@N8)"cc)8lJ[6Hy fV1!7wQ0tG-uU&TG` zikЪ™ڼ{(¤.^R,595i5xte DqJɬex"fcvi>|I"h5` B^ Y CvE$[Rq^yyo C IԒIPc!jBBU[ZwQ=@Ħpt a[pU a]t#oD-^8uwUg@8ˠ*j,7V_ݖAg:4*ᜐYer7?8i ($07~ ??神gHN~/SwM0>U `p P޷{Rn@x˒%ˆ5;s4?Z~%wgI@{0rp 9A#[&+"KmƱT&%g cC 'uJwGgZk2!aM,&٪IB->{jXYG2}B0q`e;'uP Fėa3<ؔgϒ%DaxgN@:$kJ 뵵XFd8?%,{Zc) BQ@Q-;@J>rguc`&gVj+n7vyk+Azj-ܲN{#ᚥphG cn3τJw!P%nN4`PZɀNsf@?IDS -өXNM7k Z56/ WCC} }e?QD8^G8ck!@RмfjS*kD85~ǃ/i;'d j,+8fjTnϗNY,[U %c=[  I-aNƍV>J^P T(`6Lo8'k&I,lD2 9w\dqc51'Åŧ9Yۺh;"NIu+,[Icw/B DhZ ap,ܷMM%V^qLH7\dCsYّ$=̵0͂1ՓC{,i\>S+3(m @Ta-"1Ɲ::/~vÌ72o:V'ӷw!Wa\fd}<+|qQCሾ)b y4%6c( :g^F.~Pl6,L6U>I%vevRÎd?GzGzigytO7ύY{VsܿEIO*8NW݅87, T}݃!VÆvL鳭L&C: AEpIʈtce# 0)bPÊjeleYE\5*Tв7|v 7}7oL>܄VXa R}6!Ga *~ZYFMѷ"2- (;%(@rQɐddܧ5KO6󹡊Sj_RPuc&i3Kk =ˏ* x?#ᙐ(i(I#)B ՍȢ.yǂQJwgxY/l H~<E2Y`TdYNA%UŝB[ V~EDqaߵ-G P,Zd'D[A9o3UhknBxQǺn ɕ .  (g[?b>޼ӓj+~pB5(:!\Mq&¹-<ܝվ?l/]ihPH&#:9wqt0 }Y2S |P@5!",gقXL"[96m'RMʸZ"2kz'C ^VJU7dDGػW#r1ClOw$C`RhC޽/K1 O:>6 -2d1@N'Q#{p6\ .;~v+ٹzR- D1n{¬Y.v⋚Qv'IZ#*?\Glg~NPh"nvlyGQ|J↫0iJt$j}l#^y/XT }qݿPw*E c$QZ"8-9Łga&Sa*ozʱغϐYnZZ=>@-lyvw8w I,*>=%LQz >:#bU%;Cמ'x#teVذ]">fkTПUi=-af>{?(<[7^_mcTpgԽfnʼXki2Kgg'L32( h… $ hQ_91r` SKG0l)D1)=08e2`')8uxS)hm$.I+ۊm\sw\ TOFQR IDAT-gE"2JPcvycFDf lB40$b(RB'C zBW6W+RHxPe_P (EiٸΨc#JIk-y-f4+e{K3@+} 47$*UCS΃#N9Y;7PUS\y!od9- Ek]z^: ^uS3!վl#ka,=Tٿs?[rW"?=:K<ɿ>§+VrfmYڛ`I _i/\Ƣ)ڄW(LGK}(98$O~!7ͅ/խ?Y3ҳ= g,$|ƙl(} 񗷝o#l]_OvF>:@AU៮7\.;uٳdJ~O?c|ΐNwׁ_|5ѣC7б*pUD w|'}GzYJ4:gHe Ea]{vjb<*09 ?ܱ??daawс q] Ú,/EdշEE&...B_qț"Ĝ'=IX`a̶+MkžXVnZ9^9W&b[s]>гzH<(yIX]\PzԤD ){I '*@CSfqtKXKa4ԄIHMM $S%V/O"QCZȾR\?&FS`@35@ xlA>  sҚ(8>&7hV!@dj35n8m 0@E2&SBp7xl):^pDj8<qJL쥽qzVg@, V9O0: UZ)!JMLM#-?>$\aW[@c^ #44q`^W߻ G pm.!hG887AN 0Wwq!l+aqFd2m)SSXH)rl=Ь`+-f YhC `QI'Ɇ"+(ByXA0=/Rv-3K'[?/_kDW6-c(S<`,#gv<9dp  ÇѯȩY.}(?|)[{]˹QX|H8#ͯ$khh@uFFFz+sY`rO@z;(D[|=~#U"2 nEr:׷`Eo` +Sy,Yg*JCi`?lkh)٫fI;0Af!?4Zʂ:!Wz Cڳ[y͋)ѱ MpwD*Lwh\MMAz{ܞ}$wq6bw&9yvv#* z;ƭh] =!x )j0O=SOfVRjf-pv;~6s|r]sX͑*x}.dX'kIEv~!9r? !R6C |v¥WXNffD DSU>b32)μ<ĉL*6IeBu#ٛMqS"@s>nUXW= 2ÕS_h@N<P#7rumGQs`5v r8Ad$eoȲ O*G3lW(-gJyMPAq-Xb)R.ln )ˎ&&I%e"}qwj*eҊAN|*l6t Bp\h`]|b5.\ Xg%bR9*eEyQxZb#aɤLuylzǽ\C/⎎}t?~2K.Cv1cL>7ɮݣYr _)]VqBDՉ:8(*t)B-RN 1^iêb|n"domDAL#&:Q&.YAX8 L}` q> Vm[&Ô89s~X+H(d$u2H `2Cǀ)@d6YV@(E/J# qt:d _6) f"Cd-#bkX<ޢӅ R"}ZU /tq\ҋ/*">]A ;ˇs#$#R)R&,y~6.㡐9@ ahʓLq^ĵ*I2Vk3LW0 p>:셸}$4+񈬟*}E6!U Iذ<-N2̷6*dl DiX gt1̤!MXɲD~B - wڰn[-O81khRo#u-ZwV]Br&Fm|A]8&S]6>z8v >oM K ajnn>'M޽{S!3ta^i7 fTB)$FHC"!oEc>N<{1vS$X9tJ9^@vm Νw"Kt6A0] M1Ap8(--hG]!ΦJ˺`K?`{S6s>;\EmxggaK#a\y<* s1/\Bխp^ Z U~\Ǧ ?ۣ{&v-ﱫq=9_2}@G^ E9G~Yspjh+SZ*ӒKm<f6!Iys9@mqѱ'? `;[6`}⛥p,ӋmȑǷs ᳗s<YD-93Ngd ˷eSmF6c^ڻBd:?APD^31SxŲ詜*'RcKlQJQE\;sh7QIiں対Eߜ:|44+\}Y)smTzS/@R/lk:شy׹G {f*c{fR<|Ca,: Lvh4[_Lbo=BDHBj7`'Cߜ"W̐a>܊xbBN\B(@LMIz'"⛍ՆIV }f)Yؼ)7яwfLq*c nȒh0@W3v|q.3Hݮ,4*&z$<y4\/6I 쉑X)UvNV?C6N>^m#~}*'T@`^ė̍:(/}:; kK렷O ;/Bj} ~ ЉRLbh2r}40؉{Gʋ0'DTVYFqk 鈨XK:j-(r)O<לX{ލ QP{r.-K(y'G G5A<%WlLGEg1gCb” I$!lWbςf ƛL&RhDV j`Ȇ٤ɬI)TCT"V:Z:Cߏ3rR#5D)Ai$;x7OSq߸Ą9X6[pڰY3b)v70 S1B>zH,v<9xrHDQ0R ] +:̒!w%ߚTEI[ԽVL EbRULl!+ƏPE {G K0?nދgRKOŖ K O+gqey`p*LNggr I~"4%|njٌIQP*2ʻ|'`-)@}c *&HĢT%?ShT!q(p8x5l0f3|KDii)ܔd"Zs1ٳ:YHˁ[ :!@(gܯYBlB(ZGqKyaIo5x"v& IDAT_4#H̃,QI&mNr|N|߿.'4h= |6q>Ɓ͈dj#'ڴ5B>j-gxY*RK ĬP8x ) OKS>Q k8QݳHXzX`~twHTnL Ƀ]FD2;pn+\4~4 -~al vFV}Z,LC닀.XuP\GA:* G J罦#Ƃq^!֍F@z5`/^uMڙ:NZ+&? kˀl64ځnNÑGf7t9@}fIB$"bARUbC(SBCf<QpO̜jc/$lI)Em4Tn SO~Zs>;H}fm%833di:IҰXRdu#i*cI(GTF$B5e:Ԋ)f=Von⫎~[~s:ۇ奠p#q89^'W]y!op7{ILyfLIJ P)ɇ;ڼ-7cC1P%֯᭖QLf=eƝnaM~Clgǥxp?%ړMAa>XǪ> 9@-lWg`IH-Jg+-n/YOgMWN65 gżg#0W81;<] &짫>G7:ˀ$ș~ߏ</`0Sl\S@NQG˟vN/9)ec( KZ*V52B ۛ0\<&,J7~*&%ʚ ӶڞǑ JqayuLhxw2Bm`+363 gzĐH/l{kP=<6e**\d߮m."T~}!Vvoq,(8yW TOIq1pWoXbrhmmd2QXXHSHRE<'77ϢEv7FE${)tIA̯ Cp`BlmtPV%n|M*Պ Z20L? Arݫ?(t  ˒F׼GB_ mP9vAJc&Qa#1 uh`h,~V+>Hky &ybBnU?Vgu.gcoσm@GE;e ;1Q@߀7;I!U㡥_XoRc߯}0dRLAgIg>2™9":UhZ 4[3#Ipeq$ֿh.ٮ^|1SRƳtk16S9n$NxGLdATJUm&!*c"%*}ljBS?Kk[IPv{ +D@hFRN{4xA|2>ҖdJ  Rlv='ɛ/Bsdܗu3j{&;FnQ,g9=laېb@ C5d>2?(ܒ7z^\sgP_!GAX2 5Lczc.!n\`AB3eB]6 EGYq m비sюX5c-hHl*$nu-X1)EKv>vGGur=grS)cC}?TUE0SUI$S)O3*AUUvV0J$ OȢwihsLcwM#* 7✯v_\$qD~Lj5_ʚqQc)dr ?}|ihh //h4ʬY0A|9$rwH۟}l۶fG}#x"d!v̅+`k1esňDFG !O9"A@|ANb'v1aGC녔{9y,<=Rv S_zb(Q)zF;A5>t(ip##Im@;v̡{`gܹ-GFޥ87Vʮ|NF\D݅)U -Px<5)()A_6$&ZAݷ<1 >l]ͳx-ˇr?_T2I*{VhyOO} i2]$+ln}{LG}$'N>5>90/?s?QXѲS} VF* ղWO $Ճ7deA{i!jgyf"163ChCD : :vaΏ<zXCtQF09Ol|jJ2jQK&% )<{ϩ<1{,td @bBL z?PMF㾱οк>Ssx3`NDՉY(E/3AQIX,O'>ѯ!k޿xD)y)ۧCb"01is~0xz-+,̝_G01g&x X @k-i%JY?Zzo}Qa@ ч0Qw!ُfY n7F78.- @D4qkAK \7 9omp_Ew4PQjэ3# moeˬ7-E/Jn'% AޡD"v} ĵe8Cft~MG$>_N@M#ۋ{#,P%FYZ?]|:: \`q#6@nWU #ҍ'[%DMHR2Vl7EQTTM?EىC{_vFcM`L q5fdYBa51n~h W^;nN"y\),^i`Ҥ=,_>ˋXt$艨jjaΛ(*>#scLn}w˂;X3x};p&|GMgtϒ,Ӎb5w t͆A"JC.A`A _-Z9Xy >;;sc4*CwfRR!8V1V/xƋCΕPgxa_05/ 1d%.a2^_X/>℮ޖ`B!ljcuUg(`# ep#F8݈p\n',CEd*F uܸA =2&S5A%7UP>1PN/#7[ȳwMvr3ZH? RԞbVQ>.$%WmR*EQ~.wIęJB]vv+C 5ыd5)M/MR̎P()"IL<xv=jFR)}u!N,tN ɤIgĵ\xGw$6o."he㱜`sY9F|/~)3ysص ]ݲ \" ݝz}=0L7NyQGK/5>Dž!nwvC`)Bo,HD@IDڈ.9i[!娉ۖCA7?KUwHN !XmrKk d Mm ,I)OyH bLz//ƺ w:r 3`k 0bX_gWdZ7oKRl,9U&nQ:AT1B~3i~!Oѱ7ke ?.,ns IuV9-=B.I8B:qS!Zq)*$9RB(hhdB&DhL,vuCUdMSAv~2TUƖۋdU|D Z{&4P8JTBW~>h)6^J|v3FXPc_?]>&Ͽ{\KwgG=Y[ʍ:KOu٧?YپtĈR1A b=hd{ͧ ]]G[Yn2LF@V.f@_h0wKL[ǡGFTa9#V!kB0:AD4-^W!H>vnRdRQޞÉS`dzIi& *OD3^\J\,D>j'+os 7\Ȟ=s$b&h[ l"촓Hdqm'#\ᢳٌ#>dkΦexjE4% * pIbz*lAF`ѭZȰ _aC IDATґl8y"˭dhjѻ9{NpV(9pLqC}L|yu:saXQo+PHt_1ޢBPT(FTnJqm rkNqMJDY'C2 8Xg !m23Z1_ D lo:)]SNM­"ax׿OlhWQhTje]Mn)^+ڶ$PB 5LEKd$UJB)%*dumȾ&,A*&"BO9P3!&WВ1/&^\7Y6im84m&:s=>OZO⯯nadeg; f*|n={u+Iޮk:s 3*s#y4x1A gHa-2ƌ륱m۶ٲHĐ!C9j}ꩧ{n:;L@J &Cd/1$FT ")m{b!@"v(cF/H!H"4@>ZcXdhB&k*˼ KޛZtǬGDYa8;Ytn .o5K.YOd۶qQY]rBК]70 k鮪d9;Q5ghU™HQUˢT{u[lڕVҪX,ɖmYp 7liB q8@ b'$0qor-꫕vھ;;}瞹#H|vfs|ܕT A.|݀aJF`vPqSt` ߏC0V*.%Kwsׁpg<〵=p[|' 7> '/6|~e2aeHt arN?V6SO Y IzHL@#Kgxj/| d7Qٶf rDWA ?f+&)J{5b*{kPv A~sP]p(#Mu{޿/o53ēiBi\UuTlKJ[p\!*qSJ~{.m+weK6`|\T2~\nZJۀQ&d-{Nfٰ>vg+1ϰX~Ι1}m7S' \A('.d2f@a?.ٹ87&\~-Lɕ_ϝͭ\O:RRwFXm'866{_U|Oz-T~*x4(w*DB8Iw͈iN~-){L?Ώx|v/>˵?D[sxp\pABS13q;O#Tد4 4?zk c (*yۊw oBɅe#ҩkU jZ$C.3 uTL)dJ Jj/s?_)˗ԁ'*jL}]4ʙn)*&E= ya4PO¯dDd_w;?T敕2t_;/_ަ La9afO |²]>{/崓:lsG^^ ?¯9 +q;vR~ө[yKPC 5PC 'XG"-[ƺ"ݍiLOO344ĕW^4###'Q._z#333_EDd6)X"T1ϝQ g'RG_h?^#˃=b"ʡ OVj nC}՚p%R%Krybkjr&-#'Nj`_ Aa]#keOn[%*sqS:םV& $gsuJ}k _JB1 1,Þ1FgwYrٖ/;U:rЭAρ!-,/MbUf6ا֡\0W8~f%pR/aFMĵ&pV\IJKۿ˥;ȣ7rbAߴ! p${X! Ӡ;J! JG9L ȍM;o}=syQ*o5I/^OJ-eɒ\8AW e *xSX@E 47 O,ޠKA(kIPԈxYAΥc&mu+e컄墟Si1a|?u\l&@(Vh$rvyI$tZZBTn {wsC^1o{ɼ66Ą48 a 2_v_) %~v$v:yv~vnEE$yܯ8sE_9ttjjFVr f(Dww7J%lǡ.DQN;4?s9muuu`&---LLLi͌( =*Hu]Z[[,flذT*ƍa2)UT7.eQk 1NwQј&ZПqO^`K2BB2r ,s"ȜF@DM05"pA^ŝp)Մ-< {2-i\ƻ>Ճ723࿿}TuhE.wz8x:(a0B_mBdYR>r|TSdd[g)LoS)PpD5f^ EQݓc* ,6K̔s8V *b Q{]?mia D}x[I4ͥɤ%J8w=߿G_|Po;!<(^i~x܄E_sxC^q?^ e>>3x+%g{yөLÑ<}+>3KYDuj^8aZQ8ضM*\.:S.?qݻWyl2֬Ymr֪ΊyUQhHREt:C6Ų,vI\T:q eĂ2QG%Q_f6 s8@ yM'}eZ滆fg:KJ\rɽd k=/NT)q(x.fˆ3E؄PJy@NE;2=kw+9߀Ol \ãC,&Uaa,?Aۈq.(jQ" ļf c<ȡ~7itͷHἨ?n-\q|UF%\Vv5ՏjC&T.)azztLT5߶gݷYü$_99T\4A E i,?-Gp;XOO{1'!>'yOᶍlDE͗ȗ)!VjNNh<\s=<# F1鴘Hǂcr5Mc͚5[my^7~δ@}lq `L] :d"BɁ髮!uʈɧqI47Oۻ3l](/,;`B M`-pUUg׽0vNh31IELYsns&{e(Qq 0Ý3F&7%}G dRfz_ J1p=*^oxs#]p>#~3pq\Z3~MDŽ̙2~89ֽ|1SFq T,n K.:~@k&\QpCH ^Q^Oaw܁<;<3\q#Jdo@*BEQ ]n*T$6`@s 㟷ŊYW - 9Ζ{*YIB/-@,J(ŬGղj2An;G[\\!l4mnFSR"?/}nI;eCQ཯_ɟuM8̔8r$K,义6Fd]ȑ2ɤK"jO_+211N xOt^{f/7fk[Dwj^8a<2 ,]MI&hi4Mc޽zׯ_"j1;/ ʉcU̇{B~3"'MDcӀ |uo[դ-)‘I[pi{Kswcc~Xk䢥bw f;k}$ "<|R;O ;aC~VxqsraFbd &Il*&GFQ N;BRGj}#~E af4xmܶqYTO'5P*9 fI 7A_ 9sLQ!DTy`86[K_[؎=O'/vֈu 5PC 5 Ј ۷o4IӄLL6Cz6M>6nɱmyKI h][La8e($U+c&jE?c^ ?zd@F XJcc2o'Mȴ= ԈGPB2pTπz!h*CcҠ83ﺁ:.f׷3jBLeE\nN?XX4;v4M8 #dEd<]:\G`k8oO"Ȕ{J쏎wMuTyAE]uqrbS~Ѐ-p|bg3 s`b  ~Ϊv}P]P./09ꚢluNSI]o)|0U-EHbwMRW Hk'r.O>C6+t-6/`B(=L< /%,jÎ~d!Czэnxٍ 9H(sfP nSi= n υcK̓xw?8 V8Ars ?*;3g,LQI`꘲e\G,~X^NStADin"Z*hnT%])B)~*h%.ʶOm-I+b쪂QH\ED;˶峫\pLN,ND(LzAk3q] A4Zue$zDUZ[ EDnvgdd\.ǖ-[Xv-B;wi{i[J ԚJKzl8m)qa/PVL$SXIA(A^ȭ/ /@ic6E(`@I $"OBm)AJ=Z'IqgrzeŤcQ'ٲt%ݯ`I'/`jJMIakbAXs\qEx.^Aȵ]&4nFa4V+"JGCd2Yl?8 IDAT4i&2"]+OKs _aj#yB9?!l@I eTdJ CnE Ƚi&2]UC@K}B*j y>QW'\L7񕏟.(d]E(mm0eYݷ#( ١3:)F2򕏝Krz.OL Ѱ h:^Oɉ*l5PC 5Pom&;ayΞطoeY88a2v4MTU}D|>׽N-̊,FGMQCP4#^3Jz1 &R6# ֍6yIϫmfľ.h<̄aWjb/,uǚ % Ʒ mE,M2hSs{,]#H[N⢜Daik [!: _?HQ05Pn(^ \$A`xYw:/2Nl^ȧ?Qt7 JB&P7n@2[ \?gn_rۘ3Ls!t@ @+ĵWL#ys# I%S|bt0/v1YDפ1WӷuƗSC]1.oo%kME.Cc4IPfn.Dq(I'01,B n!Vavж 19҂nڤGt( JuA%z[`J'G(CO4 B:$Hm _"˚e$g&u[\]w|R]vodqf ,|&2)q?y߀h,Y1Urma:彟w.|\aaTr6 AX hjCU\yg%U<y MӘÜ9*apt5m Sǿx-?{q=kG_VPTEp5PC 5Pˇ:56{u<0M6lSO=Egg'RUefV__Xl ^@̯EDb `.t.3DsfOnJC#$yFYZ8ZuT˚Q#% 瑆 ;q)X F= m4erp|u9u)nISzz.'C4\1*DE1>/TFO"u\,Bví;)}(_?}*> 4/ś8!U rj'P:l;ߐjjxI MLΎj^MaO<,jd j]\B!ϸ؂c$@bKT%%=^ 1.P$f$Sm=9O?S̯A 4*^L!I2!2?ZFd %Ut=˹fՇ;uaF8NE:,%EvQ,ʨ$}~94#q8o{A Umd8 ;+ߎۮ5nf^B{": Dqi \}U B.̓ՠKR,@qJMK3qmmJl/ͩ^υJpOe#1??I8,~OǟT~,u]z hA vؿDoACGt* R(ExΧ1J$-XLLNMs,s%}pl|&RFs,l5#T:j?Zj^\b1ZZZԻCĂ Xj1AX,F.CUUh Z"H$fxG<'.hr֭[D"V+F 7҄܊Q?@X=DybʊOrA ,9`q%dk`hW}W/OddZNCxAfᔔ[U\mG, %$i"V %hi=_Li4?Sj 1F$)b$>$ 䭲o2 "YIYh 3 c*I"a)8nK_oImݻ9M{Xwu-oDtஅ TbWŗoVtrؕRgyHϣo4:s0W#y|5pϯqO%gi ؘgF3ԷzxWpY?(: 3A;)DD=%!01یmX_6.*X!VP5+cs`ɘJ&c5$2M $Y,Ϥ6}/CмP1,CNQ<(T+:^vިq5Nq~|g 'qIp) N? {1W>v]LN.uaTۢf \\?> 5PC 5>~`AuhvSS n󇄆N:6TU4Mr f(BsssP4ME!#q}6vF;)L!%$ Z'ؽƦݫr aV! ~ߥ LJ#U/obE+~:ޏ&e?'tl;9C5Zj_A{L~59@~j?!@MV}?Uc+_׿nu)gP]>JF4 1\ P˨>u,” Xn9QFSrԈjBMg.hPC8꯱(;ZFZخKՉFsҠ0 zѠz1EFeZ䝷PU8:=23z8JՉ…B:dfIK<|j\O;D\cbW(]&U mX<_ۏqr{ۏh&(2N=zG2 M3wR5)R&p.k9- 4jd<俗0t}Zuo|c!!bmy$&ɫXd7]d2~_N{?V?IDaZ>O!HF *I4lN 0L\NX1 IгbJ(k T.=GMWAK."m,$ylP 5 B!NٌuxbZ{ՈVTu;\x!,஻iS7X޿qMS0YFB;p[<\B)qW/ :h/ŸEb;B(d q S;6?tt0h&8N +R.JSQ4!ISD( C¥Su ,'#*aBZJEQ<\M頀`u&Sq]Mu Ew1eB2T@QU`Thl7t x˹pm/CCyyOBjv|>bcNr^G8dI=C9.3Da/lX~*)|c2'~ (PNCбp#aP4TE~r#cp01'[(y𱷭 6TtbT*k&6|jj7@GC((xW1x 1>>0)^JswGh7n=RxUʞ5mAH3T B MHi\0uWqƻ! ?Wf%GggMwd?TJLDЮz+$oQ;ax .,ͥtkC ybXPUӴDl"f1< (r nUU shC$b˅oqĹIZ"JضCP0Ihxn1;UOآ@AS|?0_cB1\T+CZ .JSe,PIg)ORRH ?XWY߁0"շ[WpR{s8Jp ?4@P@ZLQ)Dva'p)mW*2[p6*ژwM3Ƣk}4HQq[uBt%Ǐ@|!,h7/L>UWNg8_dxM#ĺH`&%ruDH[1l>+,ޝ0s%a >:n9V"f}ۀ>Re N @(|!4!oȓLmfgp!mP.J܀.$ eBDMPYTe;D]]4lz0t6!Y?#JYEcKF<0b,Lf`FKUDL!GK8#udKzIBI⺸*%\>R\.MM!TUaz-h5-ev.,$[=BB*btb=ώ`aFC>Ukd݂@yy/^M(kj 5<<s3f'yg0<S]qG3<8b8 ߞ?&o84J` /wJg%ndvv>S_<=1;-Z IDATyFc4Khm3ܖ\Og{g%+>ez3s޲n_-e٥*AQcńM,J FMјQ"" ².m)ݽ{Ϝ9e|^yݙSv=o||Z/\>Z Ś0ëA\s_%Hסx1Ӭ"'L5n< +/*ŋ)~3kc$AMP$ (k]ݨC`q.ljwR-A'ܹԧ.SaUM %l+Wi\F"A,!i܆ss+]el`iw) 2CuZc;4\0q=7hoxu%K7@ 4@_^$J hc#K8ݍ$cH1ղ\Ez,dO0qi;m˾^cE­uK}wAIX7]7^,;]?rBלwa8g^e$K~.=ĺu/?&?2?|;:Gp<8 iԍY6#=y- J'WI(U8YjqGz@;6$m#dX*W{,QX1~Sk.3AvBu A(RK'A 0,7%a3DF \|,Z|ycxBnyA3xyyf<s!!ͥ,L:wݏxm@mΔ"g^Ezf*^ફDJ$y)Z@ֈ ;mMEVd:rD=Ue*h 6fKQ.HvRDwhr]*E-u K"*[(B<*BC'NVFϷSra!BN eR5q/t÷~k6z$Aj5Ѐ dF7-$|G}:C|wsQ#⻁h~iXC48׭[ǁJ3Y ̈́L2ttL"Deٷx M &F+,Ykij{RYS(rP_!7ڴo}96ImMVf\UkUH\p]M!tNJkkPJGGWW;$@oŝ*1 -Wנ !0H)[Z?V.-Wnj+ ~R%k3jLkocv>?E<E?l<0E̺q*2VxE 6I#Jn\ MܕtL):ADGiQ%7>Ibl@qʤ{ܝo[f$CUuU#-w a. =sS:71q{OW?ʟ/{c ]ʽw.a 5nr g7[D/~s} * ,MO\${ˋI JI u$We˶|+P6׮LS3dEyÒdj֨Udr | g𔳕z!/FG'*XW=^'ܶr Lwogܺω^%y򩳑vrAHϼ2Ԑ2ļ^]AT"9Pc</Cly^-i9OΟ}DD[o#7 t~}7< p7grv3q]?B̔ `yu sEav0|a` 8ABɎٲEܲz5oBcЍ۹y$~M>cS yHvYOCmYA=wmۚ9r4$%BwmsۖRu@RU$TaIzB0 ΉC9J gAh1Sc4-㼞GL[\̄OD:*1ZQw}=7]wR=!?Ӥ l`^n;-\ONs*M1=%~okp=ԡR؟@Vaj8iG ש<1}asz {ȁ*TOD{utJ`CO`SDkPּ[.` MOZ$ҖA*dI2XW5bdW c9&fYaTȄtH9GjqڤmϒdfنէN{{ۋ}hphh| *5{asxX>G/dq)͎.QAIs(D a0OVo$;4 'yeHcjBLĶmNLD׻YMyF moe߲18:_p wu/?[&A l4H ą"Xe$U;&*\vV ,~/:I~`y/ngh_&)>}}Hb ^#W^٬v%dց}q'ݵDn#ك؆j'HҺ I1ϘRvS ?5[6#@jW8!&@뙃d+E?ѩ{a\iaˇgP@~w۟~pl^֪ݿ!w]'w"b' WDa~$q ^eA&e= ͩʱr*DQhMpji ԏӨc5pbR= 4Lixa^"džI?,h̫d2ܵ{yYb9J1ߌCjZ 8%t9@ 4@ 3ĈfUe+_8( Q\L1p0=D0Dnw'R4mܹsٸq#_IR|೟,~r-8G?Q/曹;=y>(c˖lڤr[xMHOdWqEJ)mB1G**g2̈́ *;U,%;9 Z__I)0ϖ}2[qDZCܛ2"&r;~66['w8FV#8qtMhF?y;o$9AKwr<[:?䅖ŜǸ {UnnK/4= ,Sp]t잛rQIH^-!kw] ܪg9bah9H-p*Xʠ*{xHʷWiEpk{X hb`̲A$bQ(}"X;@KC:,42:3M/ȶƬV%g#//rP>SJ &cDD7,#aۂqNv۴z8GNٴQy9.`ܹȜ|J`%d]vWq{VZhhF&Kx.V/~'w#G/} }sXm6O_~y!x;ɮ]ضY+Cҳ [[sdP< 38Ld{@2-$K`P$ z.wg#I˹n1(MHs;> ʃ҅ U' nM ltDEOd٪_t^pxď5>b̬xVZ׎Plt3t~7+WsH2,$ۮj[+5} OI\yu^C7Ch-?ٍoY_?Oz7`S6FC#+cY>(#7 s)L{(uU,DPÇ0Hy &HL +\Li" qZYUڕV(&wy bYz]W*_ LX@ ]3CvC:~*IuX4F" D2 h"\8\,i9Z<۶gAZimm֖fbFv 4@ 4yUEvE3Mj [3_o||yʙ_,_H(?9t`;z4=zJ_wuٳM2Y/DjK{?!W}d.yH UvCjX,9g-oMww%֪1m~3PfP]{pԯ!R}~꺂|| b_7>DޅPh:j+Rkl^4ƞ=K(8$fQFUVyqǞHE(Y_؉&R[aȞ'  rp>pF>'ǜLJׇZ$agcYC8'.D9;GCs CNa/M7[@&SD"^=`k40gNs&é_#q4Լ,x[D`} IDAT)_IQDS&4c366I m3:6蘗iNHa,ZK<?a 4@ 4sW1=UqΙ|/?@GD`PedXAq2Dh Z9GV{cٵs_wgX4|?]P)?)nTȍO9հB044]G"C*7TyXTUKYynv"Iϊ$)6"f@=oL5l7{0ܮ^;sܝG}(8<\~w?IW![MAbf=l^nvy[qԫ;#^ڝ|ymv_]`Aͬ}HoP Ho`]ay?%lOOSd9iy_M?T]m"/02'ivؽ,2n\}מ!ؽ,[ڡ e޸WO7!bq륻~,anX/7m֧>Ƿ+7'&g w0Fh^RVCJa)/})CLFmWY lr)@DP+SGD`j NLXT~9(P}0վ Wզ:_T5(%gXmeNL'&-[ʢE 'hA!"kA =a Q8 ї455E cc:t}Gf*A jGFfٻwW5hh`anhl @1ȕnv2"Eot= FԐt$\ɢIWV<B L0;//+vzPV\sIb"C|Șp2ُdb9fKMMr8 #+DMv!g Xe0ܶT0HÔ+!W4Wl" IV[Dkk##V*5I m<} ~Q9ε䮍VJb&<xdcOkDn6caњ;%pI_Cw~ A[Ā!Sqۇ(`g& \FUz K^A p0~7*:44 nd>~ֽxWA\T9 0C<dfC>UAMjse[{Z}QUkJ)6cC"" v i؋Lk$?4Ji_m2M#ɯ-s;j 0T˿xy5/T> e'9ͯ@m(,z-U4pADԏ>^@ϖ*xb%`lQȪ\ iɏ]wpչaeWa)S7V^gmN_p̸OHc5=vA2)4i=|]83| Ţ$"BK K IR& v H$! zT8`礁l4M-e^ٻoRu^hhYNz|\gBGgog8].&{ٸa9po G/=#aB&&N=X,"xdZ,i ɈUlIZ b1$սS sq3oiN2|t%t/Kq&8uǙG@G>7 ,8 l2_`͚]<$!d}a{BMHUDzH#[9U;0EUUe1C6Պ;n7Z3hQm{aH ;drٙr Diy;Hx XB,&EyDlWͺ,қvrzl;>#x!;,܅煟7 vϚ;T* "HDD#_G| >G.m6gf(L{N  `eX<5"S3(w{4zU`, #+tA7h ƍf[z\["J`ͮ{ނ:Gy>^GK14S^pYor4jrP&Wfy^)GP,(Kd&e5mȈ-yUeDs6gy}}Gs/v{[7^@!h@ 4@P0S󗑙{L?<:*FBb#IHB;yӐ݌Ī[vpӊv.ºdatnx&L3ꋆ$enK}+߂79aov)S?jA|m2 nAFUs g{ۧpW1Ix?kㄓ%t$xUh1VdZpU/&5QiX20Ç&ʴjhe` զZW_qhuU+Q"*]40ez5񙒸*AF,*G>fdbضZWJe{-`4c pa/,fb"ͼy=,^Q˺h~a߅<[ *y&/m%=c;:}`GYƲٽ$&v=4M:Q_L__孪/s|Q!ˆ{lIj!懸EaA,g)6];П @* (X vFm wLy[ >jLԿn(EY]J!:زslٷ3fav N"lB-ЦTi"^Nl*\pWymH@ӐZy\ytҘF(Py2Q"9}:G 77IqYhq;%wȱt>֭6stdM |Wi;mN/k>XIgl>$ŊhA"mm̟?Le|&<<'֧>WOOf9Zf:8('\eka+nV) &@E B',bnbO[?]4- .k*{ ^~tK}C}-FV ?;ucɰf+ 4hT> ]sFAǫ*wuJ5FV#43hh&hYZP(O&C{Ktyz]L%G_R^n:TU|>TL&aR)%;&Z[[I8Css3j5$Bi䬍`{洍$7YdxʯV'oyppDŽ4CP}lG1࠱BFvA$^0I(ea0fXl"CrԵAs-2B0.2r\2C".'u( 1Ah@S;gshd>ڻ Cw7 (u/YC|eP*.m]90V=?4UTwŠ-v 2χ.xBo[*LW3b"A­ud""׍DJZ@~k%Dy:6Q*^_>\}`KrbǵY(?tA_F , u ^]י7W*g27C]s q4 M;{!BtԵCSfxxAhhf>Pp Ftu7D0wugC&dǑݿYAgcciM^,)rs+VmJ%)#pd(x()70s 0sy kia{xJ~ U% O9|Ee- t;)^a%f|SH4 Gؕ\ @KJ)e*oyip$9p2y v/v.Ym 8}1Cp iMY+X NSFf`o^$@WK#8><0_z':؆þ4W-ZIL yTuP8GS_tv<=iq4ΓJe <3VHIL衚Ԕ{mDsUy]xyYf$$;t/ʡ.@R249!rbJEskP25C[3]"F <[Nl)]8&<: ̭qtu Dt P7EkZ{"5uggm0s?44g&=Mu2jt'Onq -A*cs|*_ȭhu95"Œf] Es4,Cw07&BQ0Ɠv` YNȯack#~ ZH,NS,i&M#iKX UҊl+oPXBۦov54jjS!Ȅ@TDD}nsX])+=cjcTkdR>(s tK )ñFz5ϊ(ʩ6WAI5lw!Z]ߵHb3: {<2ɼgmmTkJ91tYAhgt8n5@ 46~nuAP&ӹض8?HssBY01Y>@*= FXj gʑf_ 40z`M+߅$s*OF TTi$Q^(+}\3lDL;x"cJ9h6H59 # C򨵀֖M*C~ΧG6\'mh!o.Dz['ؚ$3><N$PC6dMApꬻ6swrpMi7m`;\(}/BgӁMZfܐM#9rE8y=Ky^D l8ZK;3c*xG49VR9*A ¥H*+#s\ RԼjFo L?ncW j5Op lh1!쉛cl1[?{&Uy s4a$@ 1k/ί Nj8`ƀ P$T IDAT,8I59W眺ՃdU9[{~đbSRD<>Ζe=[(Sjۊcje@U-myTJ--ZRPJ "#r(sóa1ԛ$zm~%RcӰ "Yx8)㼨h6h3٤#ᬡ,.fa9bTǵ]F.I|iq_=6MRC< C(DYzٔG U9u9_Tf/\rHrs<݀9hkf"M!1O@= 2C5;AT!EPFAeO'\ {{vp'Ξ/=͡]"3(cO1in1@.j%,twys3?ahבK/n8󿩔{`[س+9.tE&{ضs}ns `!&̝N hZfTԘUP)C(FQIq>ФMi?hQ+zaw+k6QdbbJhM$D,j3:Cۆ/A 0g1C(xUJ$DY 2"`!&b.ZKFRR7󷵴vL xBN7O2---4z{z7ʁT͍@ۼ6h6~kƂHEX0¶D26R+ϣ.<GHr|'Zwtt|Rnݺ9;Di,;8A65ʽ0[BE&><8 vk(+` T{EfPR. !Jfu&rf>w pZotW'v8.AC/c<ʫ_oj3y>_th٣KR%=^+J.xx+`wHDQ\n[pyr!?;XǬk'H]w}5#"U7e(e2`kҕ=W^c9J}Fbjê,hmmvU_KXΐf_٨mO\CFjpQ.磌 7tlB5&J9ȌDR[#/RX" <|rCĢ } 3{ ȴK0b-sV8t_M9<@DHObq8jlf~s:Zmu[^7 t>!F6rV)׵EGV0 ]8R /tU-FCEJ)ASFmFmE$@(l'IyXk m>$2R(u;g5k=BJs1SǗt/]UɕdfS[G8|0|0;~UҩWx-T0jrm̺4oMd `ixF2pEz1l an;t!P9Or?+á t ! =#5M}[(W/ X|Mţ̯TO=u)kZ(mGI=K`uW>T rnQwu)%d0 ~lga WEӇ[jUvXҔw |X)HL T(2y"K[GZehWE6=b)<4MAYD"&m & }RoHx8yQ(`)eZW^+Lak7pc\f,6[Dja ˋpDjXo@gJ@T9AT}~f|aȊ t4ɱpDD֯Rk4Z#حdc$g"֢YfN:jf6W`8W)j:I@zmFm<^4b==3͗˄IZ "dTCX@:Xŋd5$՘P+[d4~aJܵލ EֆY} blik1+JNn~ lk[t8?ͯ|t?? ,đuj$nCP`fشigHJ<6{=.sN ]isōw7î|~>"/9J[IgH_WEdjJ% !YI4FxMW=}`AliӮMrfgS5MjVjDGE~$*RCBP׈)G%뢠)Ukg^'p ᓨx$ [u fa<4IA)SO&(ՠ\Ge;sƘt!Ğ!Xm".Sa 1EƐo ̛0LfLniKə|Ok>vϜWhDd\ A5sxw1ɪ|ym; GF UOj"N uUWXX&j`;0>Wd$RvVFmI8?Sžg?i38"FGGٶm[-[cmt:MVCA:ZUl6KRi>VH)d2u("J>###4 (r2 ǧEN`v{.Ne(şgxt˝r̌k]PP$8 DjDC;ej%FI".|\ޤgg0 ;3߾Go0HkL|q[$ZIE߫W.e;M+I=uX?971o_`n)nex9NDC] ue``|~\cqULL'$5A҅ :C/ᵵ @5jY f9t&EmTl.jp(ͮGƀm'x EpyذWQH}w:z^u>?sղl2z=%hvA]Q5'䆞>p$,e" oU.pc%eiI2T0`ʀJL 03'6Ѻ\kBpD@`IͿq&'D:>1ѵ]ј<ȩ)ec=]3& Zyj[ZG TDӾI#!2Q@@7ԒGOOMHxef.Q-Ё p:h6h08LO.s m|ru5h`YLZeYM- ˭"ֵZI=#"4QvZ9p" `ɜ#xPK5yk[ {j=hd5#aPXʧN-0712{ITNctaƏ!:Pncm=M~))fʠ8j 1.!f ~5/3⪫^jhJMhLS.^,iR0Tbifooر>b)n$ 0|/VZ==O \ fsu~wУ;MSyH!ˌ8~|;mj)3MsTA*!VSDhl:G "C"lP>c3yU?L}i=]'A@*Q gI}dQZ|_fƗ'ޔ{y1-m>N氚HϮ 5Ý9) O0)2 PoKB(ϓ;N~_C|>mF4j.Vq)R" U+ $I*;C:IGdԠ>d~vmFm|/8cۙzi￟￿_7ߌ*7e3;; 333ǭq~wPo#`8G E\;H9Gn|Ww1ۘͫs "5Tc7./z1κ}Ce $! }C\qElI]~>|936ֱ6W 'X;B/xnuP>__`!?cpDiZOJ3?b>+"g5G2v zUW?\km\ik7iO*mw%OkΔ2%zD榟J,:VIn}l/BF%}o>VI%H:LJDzXACӌC59ZTJ :hKKPb[!q;oU@u}VSLRռ~jhȷmrS)?@""IbN,R" WNX=8χT*u>A f(hP/ SdM22;Kf骍6h6~Em+-R4R0;kjif'X#cikt\0O#3;x6` E*-=Q7tfƔBLt0n8M亄2*G -@um7,wEr z냨|^S26Pp\<6eU&imBNHȌMp%Vi!i.7% EtixIbBB9װ\C(y*WMYK6َ Ew[br8b,frɃ<$wz&A6<ØYQT}tJv!V7ДsxS dUiiC?/+-m}A[7PV͒[[uȮӚ"ʷqs8Q:u)B@E'DA O,KiӦxnD}!G(SY.QXtշ[S~$2*1$}߫6h6ɆT bE!: .СC9RE$Y(zM' q܄mAGhS˔SZ"&5}ܠ~0 POGS}2CR;MLJM reA5]b3,CCFiD"rt6S`_sWQ y͛-Lݭ  繩 ! CI(wGq;Ǚ9b?;} w$.a"{3|UX0)ɿ^Ido,{/[|5!}^ n%4x#r(5/߆j# IiVd-ym4oQz`,ӂ[ul8U.C>ͅбcWiB Wl- G0'5 ~8ܰ(X4qs("m!JЯWE_1r< 7a/ӯMoO|ZXn1eݗK4HCv[UH~.񦝃XDd:L͎"V4@>ZŮbB$-l Dh!C=O&z{L\2 IDATb)e؜E搝/kL@r> \)b'||"joR[#3)XbO~Օd9C'sϋiŜm[6a(mA6anL|7v!b+B?j0w0s$0p s@k"'^gFmF/ 8Svi߲ rѓ:ka߾}Qc@'ԅנ83|ڃ6+ =!*iAH=(T#&&JLLniU!+r=&v"GYwp !)bq^$ E˪m_I6xK0 -p ]tl 7{ ?7xd_W>G63u|0:s.|D/;8G4ͧD,VM@N!+_ubBeJ-Ӭ X>ȍPv!M snʑ%M/>u ȼG #^dJA-yP 0Dz izUN;5W'8Ue-nQo M BB(|v| $*z!j@VƋtw1;! ژk'6VkTRW.SCbQtK O-9".vϖH١Ld9n̵H 6kbֿs}uHz\V${'ǚGVNǧWڪ`A:*#PT-7" Vf:^5@1:OxNSKY6{$)o;h6h'β2nN 9 etD"A2اIIxnM@+#.\{M"PPdD|"v,Q8w* L q0$,ht`r{.Ǻ :?֠{m-uA~"h*'24_#x%z]ޅF5XiSof2uy;`!=e`Ʊ LbbA,'}RT̸!T2flO9sg _w>!<7fH蟤\VLg-CdR jj[cNyͽ>=yf\ݶ 3J=.nX!VWH$m\`:28nlcll<DQ)M-a1r> Ld*{D H> +D !޲,Ē'!db߁VJ[SdRzORta>w:ս$z=lV#LD(\y]f<0PwAa;gBx·We){zEo6Ѽn"fU#L41…ĵt#yy(nbGPrATijϻq[@Yݣ/׸NI\{*B{!*lu.|.6rtF*(LkA> -E#[W!&9Y;7ăo?{=HܭǍZzhBBs܏,SOn"]z_NwFYUN90cNu2jGr ?7ܰ}{kCT %#M6L !q̦p:zƎ/su7M%eК1= !aXfr2 um;J沼fi)ś[LQ݃;Y~A>(扈htHtpSR)E"`E&2u$nOCLbW'՚R!K}5 ae*5TNϯ_{\GŻow3OLjɵɥ%A4k8^c:r:U6lǶC]ّ ##|k tAz$9nĩy9zzJR&Q* *LhX=$xf2X=aNtՒANѡ Gϩ,HV zySnLuyu= Z6ujE.'ϱn6h6^h3/}K-.㦛n^3?"4ApX|>zhS~z㩩)oe޽g`t Zp'<>TfJ$hj9(B֮P%"K ˲] X=!{U!/JN0(CXP\&K)Bم>z|vF9s3vt.Չmj5lAoJr+EJ@\?iڨH]䶫l94@6C‚Kwͻvs}ӚX+IJCoOd}w&L&YfёI$d=v{>o? %ϺͶNl#mFm6C*iΝ;ygCԾܵ.7C>X{#ަrVE].AE=c&62y6pfMd TM-Ї)8`vYx)`qjrߢȀ+[40nj}sarԯ%N>0jeNU`J\H82K17t|'g{u_OQo̮p2УT BΧx/F_Vo0-|;lG*ޯ]d3[ذFE{m.'@d9qZ7WK+3$ȆjK $%bqXb2B RlQ;sJ>ugP.GĶCC:c\60# m<CMb_پ,27ׅ_@ :#umFmGX !p)-oŲ,ӟ$LE~ dzzq=(yyuf`a#ېIft/;`rEfQ,q(ҖׯPp!NB "+vS4t[([PuZeW,.>?S"(2Go PKNPD=vS3zx >6@ִzmi#wp99uCm@9Cs-J8'z|&B[z \ZFߡu<2ˠ6fݪ9~ "d:!<s ;៧8HgD'V tWGݼUeRQ?O'ײַcqO?@rkJ9Rq[Q.mHPc|aֵm[ iJ pܲm,uRG@hφ'H!}BDH&Z&JHRay1tYН8cfҵ F:t,B,K+TjoU%smr[` ERAV4 x*T"YpO]4'MI%.2pa "֩Tֲqz{{zC/|3D2HБDz:ֻwn>e˖UQ6h6h㥁u7z#?Ħ-gc Aww7sr J7cNإ%h+VI=.54"^,|`xjhVA?C8m9 W \ʁ5mps0d`Z᷾OX*|yS Fgf"/}`@sqxv q$"y6!(iP@l*/-N"$=dbLQ÷fWi,rنKՈe]}Lͧt_;^<2{z;KVdK.`1cBB -7@$@rBH(?Pmq0&F6.-KU,mN^wf’Lϙٳf3g?y]B3dN nnTLi%K|ܸs'7<-qd+)r, Ehe),]z^eڶmFF8yMɱmѱq.#27{a+$X+ŋ[oN 4@ 4/b*eض%lظ%8şttlkoEju100@"B\Zq(,vYG'cy&P.ָ U!;\R֢'/{iW GI:@%˄IM_y8 IDAT; "r!6j5e )9?n$EVmn^Z:RKDuLyatj@IAxi>Dxw- shejjȺ)\U{\x󶝚/({dtKJ;֝?7wAAQ@ 4@ b-8;WmA\g1ŒE*S" iXFKK۷ ̃drԯa~zQ2 B4y нm|s8zmlk}mx;,oentsaeP#ʗCx]UnDDy/q>i3،t~RU;NJ5AYPhw$4TATLSQ kY{/|xjS8p(|+dKێsil췩˾e-&j*ZxuI$f kAmadd>zi3EQeL[8BNqugB*-R#P|Mk7C@mN#M)ai}h02rdجTI"e ت R8WΟ}HC+%f6QV^{~Z0KMa5bv5]EB* xΝ_Z. ~$"B@i [xbD=$!9"avv0 5k6 r)$y%,w<+%du=? ͽZN,UaAP-jCs۝*m3`u0`b`V?~Cr-2͉o @U6.p2ĸmZ:fY< ]̛Qo .8⠊T甜'g*g#?gniVDfI$[1ks+ eZ(cd:HD Qh!I<"5$*mTl*s,ǡS2BXdڶ>"~ v {ϜdⴴT+]HK/eʕ j>g =k AXd:x3Ojlb 7o[Έ 5"f}ThQRsV߆`kar1ФԢ̻i.`=fMA180bQ} @}<^65D}gc *!0mmrnIr֏`3-ðed@HYYV,B! 4/r!Kd媖!7Gi_O"$AId!UA%RH:b=IT֡V[uRi ?cevDGPyy'x괴13SǪ+8|(kV\p^# 022zAfgӃؾMSD,RHQǺh~}{<ʅ2A0Lha;"yzjYEarbRQ< ‘VZ۳:-[򗿼C,#L*X9ayc6xL&iDQ a| +&a*UTDx,҄;u Q0TL١(g^[M毋2ʖVPB^""Oa\PWNZ,eAIS)M!^"KK׊byy|]Õ0?^wO.! M"$bEanVw[ Aw[ 5⩩r"XUhL}.!Z[ 1! `Jgcp[7_c? pK*eg,icsO;fʜ:UѼZu/heMsXHȫ)XA:<$C0lJAt ˖Kq3+ 4֭^jҡF j[xya$NI%kUyDt(8ܴ 5R().06YA8|'/>TIK&=eLO's$3LMOH" cc,顭S%c@ 4@aУjċ;Iԓ霚e ~QMT*eTUa-T*&07?Sgjjb׏T(uĉk4ömLӬn5E!033[&RT[L&[ °誀Fm:YF (0 Xt`gdP'w]N~CYwͰI=&ϑMa/"͹MaET:ȃnyh3v R Q;PaA%$u)0m7Ëzyb*tF|ʉ6"47#h"d8 ^9UU6%Z;~k#@/>hj)ǔn K0m8%P{7^yAi3&H~f8"T6wn}C囟a' (#89?a3$֔5+঎{xb+ g8$RPSJk&yzs(42Eb؇ҡ pʊ[Nuˠ FbwVDLJAP4n9n D[zqJ2N * o+Q#4 PA#TɺcKpB`VP']S͑9Gh[6ſs+!:#[&MUZDnLB0 (P"x4Ȗwb1(B8`]26h3| }طEpnž2ܥ7)ݤs-p8rWsrwݹQv\^^m}Ie'q۶F.#Q.y)=DiJE0P ]\SӋIdPP98E9wSђengBOPϵQ%q E>33ZZͮ뙠 extɝWZmg?5S/!ʚ8K㳔xCZNj[[ }L;XS:_[s6v>⪜mAoh٧Uˀ XN5HkbHj Һ4 aif ɷs;4P!ūZ CWxAy6ǟ"o8\C{wp>Ϻ@^cQX"YiVK Ky s"eŃ^6qpG=6b婾lcY\N/ĄE8IwWco/ظa=XPfFt 4@ EKHں{b6NUzfƿ7K/8ꫮDAe 4@ 4X˛۶)JLO31>L:5ê5E@ѽ4tf j~o ;W ÐUa4TPNK"pv86/CP,⃨ MaiA` $*P@ja;,_@T` 9F`%= KF( sǚ^7K5f7)GeIm{ S ]mAij'dIAͩZ*c9w?d}SW{E=^+CSNz4ʁϬG@#%n% !t ȘpB./X29B~^Ҋ b}`W &|{% }=pZ! <|]tw=SWn0vN $%e رZz֪{_"ZIkpZ&exx2CR @=\I$mA珯UvN>G{DuccAVVhnnf%H}a4P(KC 4@ 4]vq( \ (OiZDA7-{>,[yv w:2(bDD9|T!&fg ,1<* IDATVܾ.y!arrJ8 tD` Jsil*( 4Sˋ #H՚5/P%U!KeT+>Oށ-m$RN-_:(?w,gA5wD( ¡# Rݝ"֠lN?\Na,:GvA ðJ*$\GT,!A~s߀p3tzfi 71C*%Z#$Ҝ5{ Q Sv .qȑx Nm뀑6MA%F>L"X$҃XpشIո/Q˳rl#ͺģTqlUqP`VKzսEw%̻'tAS,Ԩ>s ]uof5qe5` lTBAA((V .u!&2W7/_{v{^J{;LNkl|)CC&MXj%֯'σb@ 4@Y_L+*MӪ*$~P+\c~yTK[G[e}{81Ī+3ϩǏ24Vĺ]8NBʪ)Vi $艎Y36֒Y'RYGoc x,hzq~ESr JDC9PuTp _#Op9MrWm3\hp8Ħ8pɋ2iZ,,{V.1~YhhWU@}X ţ-ƛn Û 02wo#L:l竹5 WOr:s8LOOw={'["qH{2h%nK #<@oc 3h6._OZ~꿑ї^P"XaRa3&v'/dm=y[ ,KfII}*f>eOk)( $~Ƈp!WFsn&jҭ%=t"|eyjfdZFjH=x:L~kO[(s9Hq:/uTaa;m '}weq':no3*O}}?r9-3LNa:N3/GK> $)hih~Q&0Nݏ Ҽzncƶǽmᶏ_MGFwFz>6ɋ|uυn2 G,d0M({mh}^VRo]KB1u(;08 %__D ;94n#/͉[ٓZ؄4a^1I "֢U}? o?%d׏ A2TA^@|zY[|5#xGuUH {- N}/ "NZ8tK!TxWV 4KmZO>^퀏wr=|:Ɨ0qw/cPl?߹KF b1/y<|W^}LUUVXΥ6>Pb)ŵ쉓Y!#VK^'hh_tV&5Of1gA7lvv88ёKd kB҇1e4^ӧի|qFFFx  hMz1uMbko`,*)a\V%`RQIhi۰u}yK>|F~zu&*QtUFG(RwܕfM"~\©%79-K 0Ė̝4EgGG]pVےlϸohamKn/dcrm?}̞B_@Q`Z f 3uǥ";s ^lt{(o<ˡkԷܹ)~ݱ5!5؜@L ?gk8Q{zؼ;/MRy>a8hM Pd2\\ h%rK.*^(\b"D!!g@:nq$Pi!dQ*۵@UF/U > ΄Tkl4HDƒL Qgwg.G>]lu4 I~gzy&BWT:c[noF"b_~?vUV#8W\qyoݻ)JlڴÇ{n:;ӨajJ\ZWJCPaGu A D"oz֊ ^YTlYͰaaY&.;l~> ~)3<S"s;Ş팎?HslVϿo}2M( j+~E'f}s')ij&sRJ94v˦P6Eί|NQ4 Eb!(jb1 GrG2jTvB{8JjUr`a<\yI*n|%Ii(X_B$$PΒǩ?'HؐVU FvJh2Y)]':g .ǁC 0<"`֭OLNGς(XK/D(|brɳ*|cǎ~k 4@ 4/~Keep6_&͛^mܸ;ꏊcX}"3K)}+HeWr}ۨy_UZC@Y~ˮì,& 4<m&'#X"b}b s- D1! aN%P*&łLJXtt$y s!Qrb<˅X(+Bon.fgC~Vs.ktׇ{ nBG࢙)С  8ygh N"\2eƳi8ѨOz^˕ 1ơGXj%:#39z/*6fLŴ 86Y\67PQ ދUh~[a-5?(:n##EzL!*xґK1_̓{N^ Eرj4Ҩ_ ܤE( N@ t:3ձ"QiQS@,Q/ 7\?KӚy#̵ǩ`F=NGxp_VڂEj?P+ET )^讬en:L# ˃XlyߒIT^7;- 䲞`Cg{g*OccyVQAӆRL(֓IuzR1ƩtYJaQ.SL9]F&KAN A:D^lZح؆v !^(~q{0$ۓ"i<9%^z^g?K^w=ѵ;)AcxQ.79q1S`:T $EԔgajIGxuWv%?dQ ZA$‚ڍ;7"W=G(2|\0b5 k+z\' Y‘/1]St;{nB^j̹p~*m3=Hl#^`vh)t2 =je_%JUsq嚇XZ<3gm}[-GImj^o" Q K/Q,Σ)cy̠'_![;^ہ)vgm@Zf|qW"/">Qf(;>JETL Jŀ@4OQ)xqH^*r^ LH^ Vܲ2~l.go| ]}!]+؎]D*yhY̐yqP˲"$4@ 4/lgNbuR) i/|ҝ?b] ng GA ~hvOs9r|]8qe``yy:y~@U@#jn)5>d(|Wit:wds!^MwR;)[5zUdi?z`h1ŴFk[a,G̑@SR*< | S_vI7 `܇Tm&#z⫟?>G7pU|c5gy,, \hQDu_<붝pu V/}eDR;4%n3SIۧ 9"XޙqW[=ݳZGd˶lKޱl,CXC. r @H܄.p$-l `b /HlY־K{w-q骑%|1IT:uTLӤ(J2-<$6 uK-SNޥ˓۽8핼u7X;ʭ罄>ca ^C.492z6t ?'n@.}׮ZenEkS|嵢δidod/b!.JD7X2b7/+ 91&# c1-%,ncCB9M5DMq"RE{P_o-Ћ .t4C9Yː-P, 3fcZ>q3eDҥaziR*N;jj5G ~>g]N͕gsx@ C2i󂫯;TOF<K.欵kNyZ폲g4>ppLe9|Fƈ9`IsdvD6 LNglZh+>gYc\]N^~>;s;v)ػw/cc=H-Ig/d YB4~"IZ ph׊oil1BUr\\9AGpxbFbTWXO_RpWdi4\l8_yPKk+f&$*8ws]Woϸ:`,QSղaNJjUgku7TM_aS^ǎ=H'"Lʷl|j57.85$9RA]aVԷ"sKjYzAA-}1N~P]0难̻!rq@gǿ]E+7 IDAT~~.9o˳GohM{14]39nVBCѣښT$.#*FFPLވA9f1p+ YUTf&[I(K2cШ9 S8~j%+lePuT:@4;TQ;=T $`ԗism9#.*# > Reqn:Lp@/,4185׬gd푟O~3}})eǘ}vl6_ƽV\]J2|gĮx|iI ; /s=.0={ڵkO`ބmc?VH+^A:nE!dy+ϐɆxARJ>)'"؅$1d;81?9^g5;Nxb3!СQUؾ=[:~o.>~ði=l0>cDm`&@(S܋v}1>v0П|nfDv`ӥw/ \!ZT%ukwmGʧBcP9RE. R׹BXJj,sr>q3o$novMе0Z_ոM` ~Xekb3@5kzId4[|jlUi%4tvb{ǶdrSm`% y6W5lӡs40kt1"uN ,ѥIKI#nՈ YuI0L[ :NT?[3BAϋA=,Uum>,Npz\)o}y%_Kg`sJ+2 1LLTq8͋/;7vy/b5Veٻwm fdtCL&KYr):r([mX\Oc;v|2:;T@`&7|p R+l[lZh"5cC4MXAfP?Sh I|$)SO76 ` aaݿ ە; U Sq`a=X/0 b g `;\H\SP{P匪Q2omomfnW3.`;^՟;a•a3i]3:m k·J3Cpa:]sOmo@] _Cz R^7?~s'x[y/3~mD5ʙ{I~5,%E]RB޴4Q'q 'fј `~xM[@5r@?`Nt <Mœzd 9ݡRIV%&4Jˠs}UiNXCyyK&^d[P0BuaNʎձ 幌 xXTk> ˣ˚0`>g߲ad)Ȝw\N(8y>XsGNۏ?nVY5krSM;\q٥LNL208o&{2McG{vR|@o?1ŵ mKZy5Zaى:hoZhZxF0>#Dۼ 0XzSn7sӓP9 ׿2xB>$E[x<帝 !.qt Yxx_[S/-{nG*X:ReupUz; Vg:{ۑ&j>_#m7g<E0Ah݇.l &=JVhW%)z}^dQ?beԾ|3wڦ˨E{X,` \, L*#Ht62yZ]]:ks/IU_HB%T2Y )O۰9kUtGn#O )k{ ~׹'m<\s[j mKnRk:?ZӼb1+TH _~Jcc=ٸ n@4zw"6 ;,)@LҸǁި#}]/li27y|PQz] xDِG5=, l20MLBq!cpdgxѵÆz @ߗG(<,{1]Tj.؏X(ֈLXk^B'Bw~|dzF5ffgydLsqzs3<yk|7>μo/䍷~^|n;#σ)n|f-AWI}d]UCZ }8̛{ۿad"!S*g`|&ZnzǷy%7>kׁu1>0ekV6yK?o䄹˓x;sksW|aĕe/R}( 3`ly;=׌nFyrV ٌVd;lP?#(,5:jmuYRmS!]sа vP0RiHWFI4:;OǦbA 8;ZWPn"wrx1v|ۤ^L#yb Q. V76$,D)K+5Ci&"Td[4ag+~nB܀M9N"= cfdzA|[#MXH:$q ݥgIV[XP5GX~_%EoP垅jvr=x| ܳQP&] t` 61_ąGy;B?LhwczPhU\\sڠI`pp"m mEmdXCWǧ=_bf 8A](-BO:, T[*GmƁ#Z+T+_yl:^zFle9\xF8rSG<'3::c;\ST[[hZh+i3D\\.7_r% t4/}~_*T0UȐ`V14T+gɿyww=*п.H0~jm&x+sV??&x[8qA.ipUWR,=sX64 XGAooĈacb]֯_epZhZh7a 0::_=dz:$YHJ@)$ Me-э @dX@09t~^̅>&c0R&QS']6 v|@%GHHM y#ÚdĈ_- &ToO Ij "/d(<yQiL5 &Ӽ7h7ߋs_J{!MְtWE.4bbY&. J*ՇW,p6gaS]\בfduB"Iyw r'('Կg]+M.ra8vƣ`3,4-_M|uj^3-lzȥYbR)NRY8),A"1CÐ30L{LBڬ lz?F@ƜW!y2"Qe "aYA’n ̵1)`0;ɴ0A" 8bLH*UXHk$cLNslv区Ţ  ,SGF ؀WieB8" E"ހa5 ^%S07Ih2!?LZdŢ@g2Xpkサ;oMik?o$.ZƊ$6^"nT*WL /d5]rfFƸy+n$JI;5N YzժU[q-B -\mFX !`ff)߲ez0,! 8ۅ$nPE)XN@!uLNrY4FÑ9nI|B1XF4%$T_g#IljZ+P=#Xf0]ѵ% p-zt~lsş7_?9N![9mHT_zjynη Is`:,b:;:oz{M0_2{>Id^F"缈$:о:iLAlCk3L=g˙_ۃo9L?*^q.Eyv&YL/kl%YOL7ꤒ2el8$aF:]gŚ1l6۠dfě1HVH2- B^uס꜅T/t[2HߴH8W&b0݀D\P C*{WRIYZ5qdϳVU[?{8AP\E݉Cmh33>^M)u&EpwU)< %NR b#. *Ym |j\߯p,r\EfP, *p3X<_W\rzsXN@R)E=k> \= z{zl7Mׯ硇/{)NsޜMt*:mZhZh[ru뿸BHµ#Tfi<@>( A 1sd. C[rW|AФLpl|$ 56> O6iBñ+y-D6զI[FN[!fʙ;FTՉeH_ H>b1vOM9Gٵq$qx>$YֵjU`gi\WỪ]P'a;^x~4Y_';$,ŵN2X} iھjPWs՜juU?k꫐$V__|sǙ5[rl^w/z:,_VV%S[`m(NXii d&<YIxWک͘wb[ȊL5/"S^ Q7fC C.Qd{.*]C&Rf+>4p8 %϶v_t 3(#cP#IcX IDATG3]C{y@C`= >StRTE)bG]dEK5L8Vz -zPp$_y©«u O@?tuv\͝w}Fa9T:Ǐ`bbG?M&I"S[[hZh_1 àifcǎ1=À$Y*'<$T #`FpAo@v]\pB;Fʝ#t^PHiBN^ %^d8r ӪUZWJ:W\AgYT9%yfSYpavZcId`\c::97` jU5,R]dajtHJy'ii&ϟd6@K8Lu|^_&4%q5IVJfs)@XMG;Ps9ŧ=I<\ƛ/4{vz;ʮo_~#I|B9LVݴ8F *q>&~5 ɖXTrU5B9D!,1`k-{a0m %k8ϔomsnKoE|rfv_U]nn!0À pMICp`|]L%&F H\iуۈEcL/ E*N}1ECWpR<v`ͲvW})/J 3 ˗-K/ᡇ ^K.tZU#l%;IWg'+W Ou'LXB -B "ֿb!( OT{MfOZikR#Td]tT}vQ댁#,%5IE-[j_Z! `#8꡴(p. csUǑ_jFo phy׸bts.DMt22\Æ;2]JCPK1ƭMd&՚|iVG̩IjޟES&M(scz:H?o0l۶{Cǖ3׶SKrUrEJ yX0P7 婵 ~ѵ HYt$gu܊rjK*gQ a8g:Z Rշ! f% -X5+ Hp';K)j+,1T7dxr5m~C|V߀[v&m`xtBҭ1_RŴFu4JOmgyl@ń^(b 0bzz)az!4*ҥ*U WN1 #S$P!v8I sEBtmBUY5_nA Үs8 <$!v\39sFx8;8DXnK3E ,(oW׫G{z=ƜcV:>ߩFh /=+;DygsןhAbFI, 'XLR.%7U'-v'bf*AG@ѐ+2݉i !ݭp'Rph"Tg*l:Zjbx=l9M%F#F-+RkHj8:ړyImNi:%F_4"ر'kWIdTq*UzaA$:"(2 ̳eߓsJ ¯3D) X@W>W>v#S[>eaQ$&Ͽyo+VU>k sM$O> .v<)J%\7:2M4 B -B .xviX,djfggX-3??$_|_s!ǰRZÀ!"5JC:dT?kUf2 YĖtM,ҼV^LkK'f{˄ 8-]mȨժQdzv$p7Mpxqn?B+ŝװ50WQME ¼$QC0k4mPXAOꄳ`]7腮~|{P$tY̨9ɨqI fY*M0%4[w1ޗ4_B]ȋ@(90 Arrq bm  Gb:p)9!|'+τ["~q{VGET`!dhC+lԧ& oxu\}NI'&&-G<0i䚆sW[hZhṈg5T*w^rx{6?m%z{{9pZs9ڳ7r54r91M\.< C 5:::GA>X,>mmmTU8@&!7)z["ta0 Ks{r Hnb=а=LiV娟BCѫ\q§œڦEA>_$?{w;eMgדIs$^bK 8.:ejGsgv  M;iTXdnZh_wr0j3 iDh\.Go?}! ('beaQ'uT4*mmzRl8 E͊St3KI#l#<ԤB##"L#`z._Χ pD#aK͢^~W4I. xUK*bڔj*s8864zLH𤁝sb\N7H$SuJ 3rhĵ# xx>'ueb R'I*8񔀸2HU`1 Y#\S#g7=WQHe+Z]Y76S (0.<]ԕr} z!t/S߾g7}Vek;<08kZ6oD"~ `=<؎'g-[,c,RaTZhZxY%֩Ta$\gidlf\uNطoɕW^F<ϣT*\,.rJ% ]CVYKFIBf*@FF }i}r.ڂs }[&i56$@^vэ|(׮192ĺĂZ.!K Į2c229NLm =ȚKqǫ:Eo>}{ ܷ N#IB' B%YYR9Sjb 觱}"WyLZ GvCX+$hQd>BI %UA֫>B0!$uu,KuXPm zH6xEă sxrĄ)S"abB> ##¦"%^  qRvdI##TaɈŠ w*E㤵b &J5JZE$+v@e>MPS4“yF u" .2̔q JšVsH<xlL6LI=C{{IJXVmLMuẺ^58O< w:BPQ&pH2q<_5 \.a"yLIE| |^4JxӔR^CF|b`d +Rf=#s3Wކ44˘߾ts):4oG^N[\^v<ǎ`m,>jOA {Ɨkk6F;B -B <0 L4{ >-aΝvҳHQ91>j2Iv u&`47w{9,;$ꣃP9l INR}\NϽIeD?lH vRHd`. _΁{DQ+ˉ:;6*S+/c G͚z\h.zI WP@:&UN)WJR} 4pG'(gH5 z_3'sUG#WWSj$MAeL.t .V^܈˚:NzQ5 fgW`(s>,a$S硶EƮUl^ r9V+Kr5,J4ybn/e"|q 2c؋ *j9Qr#ۉ#vt[EMzAs;tds&Y%%LV{6ν~*X~=LOiM$ TC<2W?$+-<IU/X_[N4auJh FJE&@R3΃>NX;)l+@1$w2tJsm~`gKGI>AHbYBGk 6g)>q۬a]G(+Hq [&Y},wn,|H]/InOqbՑ ǀPVʐn!C r#Tdz0r ,^rwxȻc]p‡Ҙ?jLj΢`Zi2GB46C[ȜOȐPMP /GVl7t\yPoCB tIT+m WӦ̬w$Wy;<+rV" \__2`m0$lcc# `c,d0 +$QDb63==+9ggw%l Ig9uz~jHu>A}ޖEDA\1,IQ20܃Ґec߷CZ-A"]^Ĉ#} >n2_hC-nbQ Q"h^F  0#pIj$ՆtTeߴɝ} (03#C`Coh Y AooU,h{vgffGٵ{3b[q;/t铛B -B /r_pK=9r QE6;KLzD0Ra?@6*S OO~RGsN|Gn䭔"V=B t.6pJ䵰2rphljg&%<$%I͜ڦ9g+N:/.Ո(t4r1E}> h@v%4RP%=V^ F>P;s=aKyIu}&ԘZ2 qΡ z<8!MLjWV&Rev(׬C8# (O"ˌjTbڜ0|&c~ CWi˕.ư0L0#:QŤaJK@dK/@P=! .ePaxd jPy^aB# Ͽw|F'.ݸo$O5+J%A>on9U GG8B -B -<|9qq>6 K"IjS2'D$QFlKcɹ6v2\;0ßu-h tD񉺑DӆTTCX:{YumduTu.oD0IQ%ATd+ 6e5b%v G% IDAT?D- fb^ǗanFz)' "btB}}B` g”,u`av^3KtI_U f#qCc`kW$|q.1BI4]2٬m"94D YX0t/sE2f8C~HM9Z6uò uo\b#-0 p>E! ӒȢR `/A#Q!KlC҆1`H*R iA+j$>3~p]#eG8U)i ^2T[<T|ihJ0&ֵ{G_Kͤs g ҃B2V//w}>uоӅ*o??9''mtt?/'6QG [.B -B / Eش $!5!yRݟD*ݺl5y5oIزAa+0FD'eA &a_DvLڷL\K+  Ps xr80016@'.YgwQ}e{xͅ4 iĿE'#HHr5N4]Eۗ8Y+:R@²lAwnF"I'#TNB_].lj[^R5R7jZ`834`'"la:aGة qR>$QĈ)QC\Ba!JI9F1`T>D=h"Ǒ2%Dh, 2%3,0W ވdd#h pap0 +"1p&wuF4nU>20w; ̄R^@OGR>W?v|us^S=N9ؼew,{Zq8 x[hZh8SZ*xGikkò&-tw/ɦM^ adXvi$aN#H24RŴLH~DcHML` 3'}Zv P4<^Y uPމTZ~sHU{tЍ8jsmENt)kFyYfJHҽFy IPe10;B~zD8_~\}0AFH0]#P©GAy*r<}'>#ς*>x1,#V 4F ׋ܕ&Rr{"dT~Xt x}Dh-MͦW31SuyZkƴzɷV=RwDPɒ!ϝhtƯ'rN^dJ cPNdKSRad bx4'~1\Y|wR[7%^< #m(0 tohCBm()i`3b;Ryyz :kxM佤FɯI(HQ:1JG/~5s|/Z~֙gEM~ )!Ï!|߭ZhZhᅄY !Owܡ~XJ"fY559re,TQn8gV !0G:U!pu+T:[7h%2a6*#M@.Q9SuULRo9 ,ͫb~XoVLǎ:^s^DB ^hHҊ]@(j &ߔô?N Sjs>v E0}(&!C@0aS9 ;\I`!/{0|X i8$)/z~ 笳LOϱn]\nJ6u2 `6 }9=04\CsM!ҋ5<0\H ^ODŒwWeCߒe@A`H"n XDh5/IM(lDd* mfadUs7rj(s4*4G FȔXX U@oT/cwd^~Di.z,9vKBGz1J,BY+&+*? j6ʆ 2\; p ϙ.TW'083 v^"Ǧ7o -B -𜇂wvvfI&LX,uExe HL&O#GRajJKzH)h-X&&~:$!88]*0sگ\jU2шwvj/MJ꥕N^Iqv*,G\7y p$sNٍ5 ( fmu>!|VD5" FyiRL/ idw{Yz8> O 5#!kīXQ/Pk LHU99<%IXUL1,/XtvE PaxxȰrezQzz}21ajN-sm2H֤X4!&lz\IfUZMg:d]40h Lu6ZmBYP43a0S6P(b~aԬ457w'2+x6X !$İ,|3a@*S0oB@rA@׮yB҅ʔ9AbZ-ixШ+ hJ{6C!&n4NS?vmx;+nÕU8&@:!˙AQna)6R@P E"C}$<mY߹ayAjQ1ٕ8gc%X01'2 ̜ds *iSĬ Z ֋jOc/M4>h͹͹F $ɟZ 6!rh#Yt"E2cԄlw?`v OYnIO^Zq4 Lφw@"cڵỢB -B Sb=77O[[k׮;m2̢mT~zs9 /aRq]B,rA*A X}Æ ضiH\7:B`sHF%#j$է&|W׹NG=HL!o0uiCPȮHRR+dHuVHwThORhjĤO *"%H0$HB޵3t]GCW&t G}lJ9FS&X0J 0 ] H©swGjC}F> ?jXlfcV[rP(*T@Uu'}QPO j"_+qwsC)V!64qUM.B~Rix0zf>..(#Zkh¥sh TJ~ BY i0R19F_w6 4MGT <[FlN.[{UCv4%2KrZܵ $mjADη:׹z$u28C>~f5[͇N1 rmw4+*g"_' ~ZoR}!ܔ0i\}ZxjPQ_zt<1U+{ebYܸf&&&ipGsq? *5wIz߿IDQOc +^R;B -azfI?{Cr BǶ뺋K[[dE[NNot:޽{q]t:Ăq(a0<<Ν;f||(bffiooT*H$d2Gx 9 mHR--}d "ĉ*LZR&  +'w;?2kVx3:ێeʝf:tь}d6mFҲz% lLL ȇ*QuN."׶Q@F_z01K\J瘇HB؅\G>iVsȕA5տfY#%@[͙g@V:@=Rt#&pziUS+$HxRCp$+cD65uY4[*"O$6ȅ6eT,.*?Emi9ǿYdJCA9/$@ьL @P!غq@zE8G@od$B;›$[48MX844, a$ahs$m@yz^$(Rjx_k9RzmLV x*ﺻ=?}|쫿;ﵿJr ¶m.BnqSϠT!q޹{g&J|/@K4,0 ?`n;b{_ -o;::9#ANY~¶ߟl矿{ 6aÆg}6oy[h4 ~kX}~ꔬ_֭[TJȧ,N RYnߴѺuO\v7 t.a:$pw%Q1wlp,[kX8q#u~Ml։$ +@*[dy.4sFy> \<0Sz/£[doF*ĵunO Imҕ8RcIr,X r3`&^6v߿xiƦ d: hwJMU<9JյϫffXyB5mkxOφ]D~d[/'̟Fo:'Y1 a i>uѧ ٦c4ӪV5M MD3Ul'[ 2u_b)AWh:bB# *k%)Wy,HЋ̱"@1Z@Оc1@(,4I&J$ҜKoO.ߜ+9!jx)>~ @sBe%0Zh^px29#֣\s5Uc `7ۉ`d\ znXb# WMt A[AC8LP%0$l'5HU)c@pQ'vq }w?m37򰱎 :,]Tֶ+h' I*Um!V(ۑD< 3 Gf1"nCI6!>ujb%u%}:_#Iqj^Ud;'߇ H*ueJuD ˆ=6g?F {لSfZ p0r ʐfܥ!Va\(W4îGq[i-} ?Хe_^p% `%-߁a[h Z^0Mh!ẮR^`tG8f"3O'sq'! fs$LB*u{᧣Vuy@eggƭ_H8PtkܧItw?uEMT-+ e|w*s %_ոU]nƉTEpgі`Ybph Tx8VF녙ƶ__?^yw]V>3p~>$e~Xd}e85C/ιnxL! j^o>6ߤ~#W d閟'q?²f CPso \uΟHUk@ZUj}|kH2nC&nG:hjSXցz3aOJSl47m)2KḠ)%\jVJ-o7͗(j +0da?:ʖ3W`ënTlK?ҁ6Y6gIG,i'I`Wx>˂oS*AX,7ן'WC`mUb7ǻ?wAq$}ZWו!LW\7m`z)+/ 8nأ&_žѧ62?cvSB -B -/p=+uR? g7 { ^B]y5$#mŽ `[G/]|{]OD1m2U8848Ԫ#gOHI\ʫ BL0h9̡C'T:nO}'"V0Q$k/k$e@Au~uT\X7 2'sg]ΗwOiخ#FsgT0r$N. IDAT?~XYN0b˧"~d#>F뛀0>S؊dUvKKTin6uzz@DH8en8lM.2j섥 U?]ePllvH3y1Gt˟zz@g!͹ro𻿻߷qlC#ხVejE̍C3Å$7gk=g㩑O$X*;s5}-<#xm8A8nӏ]|$IERgP`Y]'@/aՒ~O]MO'+Yd2.亟]O8t@_o/\pLF|+rcWz򑿹=ESiEl B -"/V 0l0-G/}u G[v|WDy\4g؃dQurvqjuT'!t t3OG{z]xCZY"#soRJ!Aqk apcB©=0F6]Hյx3pxTjFfˉC'~K4L6Hp?0,KlUk1oͿ^ʼn>_EX{ʯ?Rƻ ܨƑs1n@/ş.K+y_63Gӈx'&#VJ-`?_}W?.!]n:0"Vwk(j`/Į֑gt44LL#H0=}\2tw*G#˪hMlʯVd. ^k&kHҪ6MK)mΫFS:ijPJu39QJkoZ\[ysgA Ӳfy_x!xBʂaw1t≇K};X~rRtvCW ) ߻aX;ò,B -[fi"Pݻwozӛx'Hc@l|QX[9;{ Vuwӷy0g?GyՑa9d^(qv4D>6`gf|S`Lj9&j71:0P\q I&%$wA'\ζwxcoZw?kau_#N4o~oŻc'toڠM8 Ըu88Zs'5#.g[vrGsRnE <%u5!iVYFzYʑTd s362 !2T=_MR4>GS}o>N7ȀAFjL:]cv?6L0,S t ៾VOW0H~DZX0SS3SԋP/|̲m,tݣ$]3⒳3VI9t:^m!0R$MV;N:|K #rK8!zzxld=ᡃ[,7Uwp];쿊T.4B \򠿴12iA\"oQ $Ì{hZu -Eg!yZq,+tx?{ܸwDZU^)"m>U+T&NcۉQ-ҩU9ML#O0=_.(EB kNmғDȇ1H틹;e9o'7TPJcHgfͣT "eT,vN!͠JN'D =ƈsup5ˎ}O47>3 \O?ǧ_s10܈.:GO[nfDc׃)%՜`aDS BySb+[Hv~%D_zbv4"AL5M\>Mq75)y='v0 4tW)n8b,^ettmt[ٳbF|==|ҵ9%U\xr\ǢdQ|%".ǕL|KkZGO_Wl=/=u}}t#N4Ǿz3g7n \KX\{Ry&2RH ivAr"-B -dhP2goy1!XjS?!E&l] :+e'26σHIr!UXlT?8]iFuc6\r^i:$F*b2ۇ4ĸO ̂Xh# xK|A:Ϫt٥$1yG*׺,.{]cXz8J,?dLmA%.;헯91U8Â+WSgw4UB3\/hY"lZt颚+M<{X9Y-np2Db;(7]Ňr9w=z:'\!*? ڌ.",6JaYyRِ΀f=d| D $YSZ8`1Wk^?9ΪNvWPXzHlPQmrc!kn CּNA D50oЋ5WC;sakS%4ք]yXC/ DÐ5-Ȥ}Mt7y $L.ɯ'|.nwm)^ңx,l#kB֔ՓT#ŃT3|wFuox!pK׽$Bu/}^lbleϿ%\r]ki[*2S>CIJփB -B -Z/gaײ~_֭[Hk`GBwsVIU:Jb%hO䙰!Ûe$1-7.ق4az< X [:0m]*8*#>725Wm=t:}P=1G-lVxnm;[NsY^ҰPU+Ԃ8dQD/~?'ٿu3qy>bèN$![J ͝ojc۠=Fυ6kuܺFeV2QTQF>F~E,1W? [~4h(I.hApKDy `ծnߐӣT8{vޜLJ5$t jLidHCG@x6TB(owۨl2~^/յAc5k`xu J;G'xGG-1JeBέ`;+Ch8Fp ƪdIèZFTߓֿ]d0Xc ye;#o4$[sF i7F. LlZIJH&: ̚M4t+kFq:VV=vCaCWu޺VĤ8Uoz9UR_H~/\Cҵߒ!! d* 眸|wxgo`)]wXj@Bu/>~pcٱ?22'r\&c6D+Zhk`` hT<[nncrr˗sR*(<0᠕JeF(A@^VQ%T8[*u >& B'YP*Hٳ^bӃy`YVg2qnVrm.|r? oH&:U 5@OTC!PaҦoX ^0 h06kta{jqnpYϑH>0$ZVfi\xJyH{-g@DKr%6d8r/SMN)&,ׂQ] FxKdNVC0 bσW ] Q?Ke2g۾;u9p<;sIzW{9::er5s5N"!BBr=K`8 Y+a5.^# Ю>ls$" k)QY ;I,={tNibS~7}u ) ]2.l" CZ<:IsS7&ض2WhvbvZ.@Lfv#i?kS\\fpP/>^$;+!QDv$[A\ u† UwgF>Ϯ 琏RG척 Xhow &B)q<8kE;$_6\'N {N09ݝW{gN`gJ+;|g Fk ~d>\yH+.2}g=`h&Ye%}׶#4?CG>DV*qT}$$)N5:XB+\ vL!ԼK!`j&cM²oTK;iF1Cn -Md`A5 I'*de҉ sAa4͹ƚhKrؘwg gH6m$c) L)7+H5Uf[ϧ)|o΀j]M=b/Qc)z@/d 'R=9`X㯿?ύ'WMҵYf[%̻^6_|-܍3Y>~TwLht'Fræ@-B -3 ڵkٻW%FOWX#}ePɃ$a \&D*%I'd,BFFL4DY:cL̊(Ț"%Q&7Ҟ-ۏ:=*`O0`H1M4'*0;NC vǸD7)ҢvMj5"p.m,r lF4.B2hO9u)2g]:ˁ=rGLNfٲp= ]Dv#6g}9 p=7q0tXDw’P Nc>u ܥ>E5H8fR7㔭%-Mj"2{a},n" ?W<F<ѹ>u].<8O©8 L0H"k"AN ] J/a16*)YS xT8^Q5x)m& 6}b}+D`ÑWE<~΀x?t'ůM;aBKdEjL8|1w0bl? ]B AU)€VgmPV5vT]̩0 uDrUʗ?"aE`'8]y3׿9,7{ 0'Ngo/crR"b:D7f}\ E@< c`=_`i&#SL;0t oׁr iP۴1E(ۘ.?Z&Ra*9d+H49Vu.iMZkO@ੈz|j4 k*P 4R~{-qBܻl zj&Ǡf B# ž,xZ6Gܐ!T([|NN!縎XPpɼ#r]_ Yu1q>gu [CW:iXi/G7Cb2M'tgPµHBs 0DJSZٖP*DyF50j1 KWQwUZDT-G䍹`j VPRvj"ZZ:弢/e0L>QrK"Qytbܑ%[„-Q+[!*i@9ۭ Om'ygo` hvYF]r F Xe}W|gbYVL3N-'oZhBaA@\>) "4)w [Df' Ǧ[4a;eS.3` (?"Q;Նwg̜ Gh*_EowKkՂL b!sef ž*@# vw&x"V)so=?8Be3n=m k} ccek8vzJ89vOY>E єh lAB{'`j0"H] Ep2;Y!^5kl.Fm-c0U~lL>|5W!4Yc$ivÎ0588IgWDB$:"<}{ ] :VAK /muTͅ6"/V}Sg>Jޯ#H;Q`h <qA]s5{2y $^|ݹ$gjlT>{cx߫N2[b-B -E(JΝ;hdfԸ@D! ƹz5tZDs%lCVWCxM!m .yNEz Oc}Dz~Qd$r<]2X6$j'{N܄0p*ff9Nю]YDž[hY o9eGp=]߹ڂitTW_O:x_+?xsg=]zjEFNQu=K#~Ii5&txlشB -,xN*02sC5{6h(lVLh^ Xhl㦯]˺{yٙ& &5Ɓ?]]='Ȟ={(m) p4/USk,Aʈ|RprCcȻׅvXߪ >6DZ ְ䬭Gv} 7p {8b&eòThz~҆I\5=$xH; ZjF_Ckiy͂FLJCC4_Y1xA)&PDWElU__umQgh/լQ:VO!Pn `g' T+<]I!idٶO 7^_sOϧ߶\ܾ6?qo㦕D+:KK>SyG<J.$qSGט,wdICg)=L6meB -JiM0^gpﺽO} w$]~ 8mw(:NM?}k]JNdhx簓xcn6dASX,ʒ\Qh%UmSQ0T&E&ds> t-49fVv mą|cm<<,)]c>p_uTN݁#vgo$AסGL 9Vړhr`P)O^T\j<‰虂m9T4U +ptLtjrD:C6kUuNÊu}h;K3ul)s0|ݴi| \}J촋fC"RPdŽC0!HP eꝲ=,fZl86*P8luC v9q15n@=@ :*a#/brj ᒮvh6@$zr0 bl7NС{8B}=K ]+XjSE80[DX䭁 mbπni&s'5MBDG%9vIȪS߾1?_m~oͲ?Z?*2ڌLMUPcF%ҀϷScCO[lo4IPs4\Kalp* SDUJa/0)7bD GHOXFLl4éUq%>qJE|-B ߈R؃LA3Gݣ?Q7sUs\F8h ̶~+GꥮΫŀ0ߣXfci/ǭv\qI:q.wKyegpoۋ\p'G[&'pZxKE;=0"q(:`dcUMCOё!tݝ#/QHZf,E{WINyrI8ʼnFOXu c:Db^:㺘l jE꺁1phi4ҹ6>sCy[haj5 xk5xf344Ďlj',ciZ ض=GfYO{o&m72*[k2)ijV^B,02~ \${qtր>;'Od-]KҠ!Â,LۈX}XAT2 V*#|ZR)BH(:dĸ9y~cp ~|t|MW\sϹG![k/BKqd#t($/JÌŰL11 , 2 "Tq]Ա1br?(B -}crrR|bmhF97Syٓ?K{LH!"s]({{y3~կfrrA* ~; VorKw|jo<::*>FP%U2+Gվe1P$$ے;.2B AY8,o!qE籽AހQ =غ((}CW/ <.w܀ঘ&)%ů HQJrTpÎ}(ӈGcN>̌>ӻw}#]kٺ:K<] rI^l^M,;bش cwVÒ%Ds8Ӡj:i0>9j^_fIG:%]P+yRMͧ8y,aaWv}{!a! K *JnE5GJҩ!s| d- n x{ h"i"jx%$d\1L'GvFdz} Y "r~_odC\.|߈~|]R 5D*E'iu=ƣa\QR-U{!;P;պ[/<^e$֝4gՃ=W_wȥO ;K cZ1FK{XfsY<&aXV~ښkAmzӯkL\XsmΡڴ%" >V&l[B -p@8Z0-1t' %Pida7cdv=r&[H_# Ǻ 2 E~J,Z FGz`Wel "D~bYlC*Oɻ86e]լ8eru'7&Neq߃ xDSs݂LoqaK6HQ8v&YZ](gE]BV bHuIP e)A`wpzS&&yV0ʥ?XL%}s͇i`1j ms2X~6.amb~|Y/qtl vvVo]̶=cB¾ۂ, "Z)MYa !aAwN^3 d4y]1h4)3"9򂋮zyVjw!UY6E'S@2)?R8uBSƬi nW%Sffќe(8E[u#!eZpPiwA.E p4NAm 7T9` f1a LF v"pPi ~P1HX+ `u?.D74S'1|q[-ezr^vRlK=93|Pq}󥛹N*aފk4k' ,AJ6GD֚XMH>e"{_"lgz`dVJh@eU-^G6A~8=}pω8+{^iq&A-a_!ș#~1x0VX~Ģ2޼^|Fl" lU"n"yĤwWLT=lW 0?dԩ~eFt5p Y 5]ܮq`RəJjiϭ3UGbEGLO] J՜(5_=Ewy&23@Si2Zȶ~h>-.pLjGR]~?5 #ZbAW.-wnv6lo< X<'ǥyړ B8_\|qWs l7 _LjҢ&Ա,CHwSK%*$R:՚ۨR.y6z: g_R @C۴%dC9j3M;XFJOZfDA06EZN$64nR XL& IDATKe B -w3=>?@?=F205M<>Yb/g9(~-Ly)g,͹^J~#Ǟ%&n>0"@rJnjZGd")_*ٷ"T_ yNS沵ӹb^q?;|Wp%@,LrNQRЎ 5>;IS)`<\$Xm1߻vRNx^r&fΆK5Ov]V^<ܹ twK$ceG&xxr$I*;k,"eU>a$CRڑE & PgPZ9îm|)wJ.>;8޴ gQ N @thr!¼h5݄%Rjcm80/  $!= )/#tr? aj2A{eTRR2oe m>L:PLNxOk|i&o1 ktc$D#H;ѿc܄N#G.!부_@ ou ҬAU' V w0M~Ty_/Ll4$Q!ۖg$߃6X:N]M+T5 XYIGa~TM;ظ};Ym=^ol@0/7~#Woa"_/ZƏ?"1:q#ݏ_H_O搞f`6q|8ZhZG9sA! ]p74Z|#||]= Щ0p}ԃi0>عs'۶ 󥕼5J1PRJȜԺ6{Sogw2aw Ghڕ-k3e\LLSMg8R>*X94BB f6Ɗsa<Bqd(ؕi2^8:]k/?A$5%e*9E919^VmBX,OgU3sw6xh<jX=CCOv,P̤Ii85[F`hLzl4en 0"W9b"J4Ө91 q]T"pֈN/S+bɲtjW=2Y%&Z‚Aм`RMst R\KgA@ruR"^f2D)0/9rE?@DGBc!& %N^_ד5Q IL{LW'o1S)OkټU'q몝2zsX"͹Rt'8ٜq nGY~[vM27색erShv}%Se,(\T.o/ SStbȵ5 &ۤ6YAZhZx.{Y/i| a9qB"| l"f*!-A`tvcLS?7-G% *bo8'C(#rSk19hf/xlᔍN(lu`0 xTC[qz$"5! ##e ]c,R/jdޞQ/k zD0 9Zx:zڂ6-@Jo:tbcH;m~+-s5[g eۖpDJRm a?t<]RniiTW{z{̟k_]Oe{s/jR]6nc)5URiq:gt'XN6%sI.4 rax/̇^w ox1WoX󵟬bl¿t~ڏ_->](~B[*gH -B -Zݽ=OHf &Rt2`b@:^aldLXLFMA%}lE,^?0 _gg'ժ">RU.r*# ѸQW\03=NL.w<#܋s<WE4+rv<%@W.mzOKDMm6XqcXoWK~/kR$~oW(|0X}BH=CC.}}ʘKU U*mB&)oJՂ$Z2F^j ?&zL8460tk(ĥSVIu>g|e̦ƣGe2\09<]b-&5šxYQd]!_^3&6l000LjЊCdsk3sfw^rɎ! !JX|cO#kU;<緧#Ţ9nghvܥ\|R\ܸrocS'i ?e<_僯9Mt|߭\u;ˏ.{!ġ'ׅR|ph"-B -CXw?pLgl5(=*UjEש&8ժdޥVBT>AV4.Of֭ (YFxVվQ"=`5F̪V2/:^ΕuW L #J^Y>fTm1ؤoVXTx$p윢|2Y~?y猯3yÜG.ejW{).|PɛSaaTVuE5&5 >RP 9BV ę>^o~8c * zŵŐ;oe(ol3j0DzP$Y3&kF};As!d5r XX}ЌN}oХrKDU)v (ih-A;2Xd@KعQ&ŭhF};О|Đ,:Z_+\T i+ҶT+aUhvQB* ]6fY Xu /<(yZ-  ,q/lRopyt!\{߬j+L(ris8E,[Q%syMCcfq1[=ܸr;77GG,Ը+0 t{z>q5s/5k?Do~9.ҽZ亅ZhG8kr.aUVIxH8n#8x+U7)d2tv Цi⺂A02J,q>A 7܀a ~_%c}CJ֪!Qɫ:m 5:!:& l,L5?D_7X循m~T^sGj!gz2:nՎwC(7 ž]<1\vw 2s$*?RqG1 Uh Op.IQz̑mQ] y.{Ab,;F]gLxGDim{po=$&h@}<4yTDN1UZi|.N(}s!Ph@%@v24D+.܎H?tDd%NDf5弄',$;a8_^…-g&orQ=/տ>߽\j#ǰMWʊ" !S/ɟH_҄9CP k--:O`W!" 8~eҹhg<ꏧ`_^ĽbN( .x@q/\Ϋ3ɽeɫY'BݠϦfDyQyMH]cXƮ]W .M+9x4?WsEja8-_&_ &rXTIq #{ 0n#>FmG>aU49^UJȔx"{y 4G.K(-FJ=iV'QcQ* OqEv5h~A!O*7ܽކp!v9Ĺu\:s &>vwod6w=LGY ⵟ/uC^ϼu -B 0l UalӁb˖-?oo15\ EE4l6K>/| BS6W*#ruyы^D\fFeDUX{.T,ׄ6`p3,O̡Q%jdʰLE!SfiMmKD|[񠟓"\PZՏV2é 3Uksk!McrLsNDFyKg~mMƝ}ցq\CAA>/6Jqv;΀IX |h׎/Mǽm֌)r!>=Ezq*P}xfIf4RES A%7/BɽHWu.{f#t&R'Ŋ,*]V*v4!yUd9M.35M-c=̔x g4|"ňjK2ekOQDFK`X`VsԹ&Y8h fBFU*DT1@6F6YK.83M14w*a<)rA9e>ɸ%f V9y(sxKk C+w\?;NV<=9J#i%Q!,"{zgl λx66 &g$ H(9WܺS=BV|Z=]u[խ:\{wU4'!࠷ǭ[XGR?1`#ZX2E@*/ ke˜lUQqF'U1kTEY\fLImbw` v)1?F2 מBI}0%S-\+ YJ% ^K7y%d 4!q dvaӏ'G:Fju!<p @kkL`p?>#tM= #k9T.QU$voNvB7ә>@_ǩZ3&T;x-'<y}7S<+oY8~6X{yxw}@cin /$^R,ogS *@X[ PJu2G<|}־ql2 Vj,ՒN[ vYcDHeWQl5brZ7/gsg\ѹIjc hQ\(jCKf5bQ+m͙m>"n.U|Q>mbSQ֙>-.I͐Yr`#5h^d[.Ad_sV[&$-T ܐ[ޗ\X[<41n~.6ZhK7p(& k9:C&cM x߭)DIf=D2A1=rdkd=grRrƥp1fKr&fw/WN$\ι2ArW@U-Lky ~]ȵtckB߄dOi<vֶ޺dα\$ Wir}^{{gTGt- K–TDŽ[}J&V'rjQ34R?8BC;y9lq5{H.Ǹ V t7;}?X5[۸+Nqb(b(b(Nd 1'9Ld lna,7&YJ] \C>v,TX3)_{"ؠYIX3ɻU`3mFj S@WB,yR fu-X(hȎoQg<ҬgLM"PD9Yb "%Yc[sER)/>O#&9ԁN2b;+Xr:<=0r!3^00'WAX)B壙J#8' U ƕbLt[Ǩΰ\;B0ۀ{aeɄ[ې̴:.TeX#Ui~2g[UE+͑zI[o7 l?76\p#d7HY @/ˢQM 'idP0H"+"pBҖF^ x^~4Y  _j dxB4Oa[SO㍥H(50PaQp\H$M:ri|ƳK8;92F0>׫JI'$k) D#GUu"IMWtDCLEsgszmkZmmt,Ol{?~>_pXW M±4Wp mϲЉeza gN㒳 &|iǏyr!ۜD`8c߈::9 ``V7nk[Vk²[ؗ!nFqmdYT0yN`\3` !J m[N+k_oGB\ԩYZ<L͡+-۬}"[ V<ߚk AU6Clc_Ix>08Oy1Λ,3B Vp^Kx!.j쑪BWBW6Lpeǚr`QW A]$;<MC]Sm'ų>,Xgbf- &~'$C_$NO*wj+k69ak":UA΍ᗩxPHN.B rΞ>A< GӍ'YЊizIX-{q;5Ǝ(ea&UWbc3wq%;؜:{swq/3Sw4bHO}Yѕn4wĭI }Ai8٩ 0\Ӈb(ضm[`0Hmm-+Vm9sPZz[C$(l…رeνR)˭>y~@ A;vi5H_*pu@,ؽ@l LZJC--V3РS|0,eB d:d;Utя˨~5Lu.ɝAL,.m2::q`䬶 (A_ @–d'҂7s׮]477xx:1OrIKK,^L&@#BM279$m/^_x}p鯑CM 9֖`ɚbnww lkϭc-CEBo`rv=MOkMC!ȣ ,-S Ogz]VO4υmx rDQ!iá֠;o^XgkO􄓼wmeuJ>}TnbssC1% U G8&|;0uߏ(8mFQ 8!iCCC\Ya$K*CC AJ x~T oo^IZ3RR\(7u b'͛w&[N˜XH%,D2g} >Jf@kk?'h!_AIfXmnBj#駧lٔ~%6Iq.JL׿/fj7s`'eQkK`35dۅSY'LooG1g!al`ߋ R=Ѝ0/B.^ޝ3J Z^K.$*7G~3)B`lUҐ4DWy2eB""lS? ݥSX+z77$FPY-3Uƫ*8xᢆ 9P[R\@N©evy…/g >sZnEɈt*{IRQ]|'/{G|X"Ko&qܲpW^0^~R`?&4q)Kma/^?4#dzGR];Ňu%?EAQ>мƇeh|>CfJRm1RBge @>qɞ7!@MFe[ؠTD9  W*g-AS̜@C` |tC<&Ynxxz]O<%O< sXz$65ˈ+=վjK^{ om>+oc^fv(Q)!v*"OR\,5،ry㬹-Öx|gvNVc#jl GȜQ@Ç;5@'Kz`D}PCNP1|lG|h%&FJňhw/+pE *ρmC XNL}@Ӷ%9O gr^@(\O ѺHy5Nͅ(Û!bpCe(1JoL Z]vJTGqtg+vi*@sgM>VLX%+Q[gT]1> Ny`_s]ֿ4s)Uڹ5AdɊ}24썳M3Fxžgyz4nxm q>GӴ=iyoZ=2 q$ <I. {G(>RFW0PUKww7Դok}EQQeeeGeSiJM |>r{Pcs|_tRYY jJulw ŪU\x^>-T>^_\B<`P9 ІK:|N2*8:vB.cy)hIb߰KThyМbTaQuYY l Q4J#0h`&p>p< .^Wxv NƑ={.ݗ+`:~wwbJ h57Nl3oVuIٹo4F^cՖ9lOF' .Dδ4 Xs.Zw`/r|ZkMM'fs51`81G{IȒn2} f^B,uVظq/2x1gCW{tSTW]Fq(36&_t%?g0~se-Y6u~ 1ݝ'xCq2PP|>^fYf ]w bH ~cӦM=efϞM.# aB4MZ[[ϭ8X5d{p8 s1}\45O/iJБ+%< MF׍!"ӡK}8`{ *IZ6ۋg'dWb*{%dU2Ul86ZfľDPk`(c>ILTheՆb-sֱv~ X&}JmQ^|f(HR9k ?FgsSXlC%ZXe#k͟4!R"ocs3fWF1]TN{d }bH3 ˯Mt/O$؀͐@_YɛvMB"ys/q *rN]VNPs x D'v|}In{2@d"h*5_|"Ó8ߚǍ~d w6XO7fk2J*j(v~飩sD|\KS=7_QuGNLfMlʆygn,;BdY"ϳj*-ZC=t 7l%Www7^/g0~)iPRRB[Z Zwܹ8pfb:MGQ0Q0[`o6F6ȾaգB:[2 AHxel;J"k7wҝPߖC7uRGf'v8RM`pXzfCR?Aٷ(>%T\ԯn`F#n s|FKizUfwa{֘/6xd+q g>`uFIpw ($zN9*Zwu)}=d _\ &(X;3/ȳ- !V]#'oAKuar (4<{1n\5~M 9f@ϴDʝRl5E> NȍvT&V,_RYE ڜvMN؆Zmׇv8sl|JAna1R.W3 r: @~ M Kk UJ`T#P4RG/ᇌ"p *zE%`y!a(y]FpڏTɤYEUg _\íwΊ|T#q_ֲ|p)87_=k/=O}Oo;7vܱ0 =}$sej綻_gfLG_eNDi[ZysCg~Eټ)؃fdHţuAkȒLjdE6JKo?U\CevؽR>A/rSTzLȐ'Id]&ЇfxTM:C8e%g`~&GyfTO:KWWߖd+WnàAr3ap"\NVI8Cm{7,O[yݵ۞_7EiCp /]ͫ;` UUk.B=zͣO@ws5p{<^5'u}RV[_&C{#xˇSAmIr (&u i%8teVQQY Չקhڑk(N,@88%vPngG{1S/9#JpsKg0)A#H)]eԏBq(MU~'.*=h[`AdR9c̼t`M30MDmy3iJqez@%'xϋy;Qe0-D2sQ:[ٗq6P7f =tww͠Zi,_|3} z %DY_ᄨtHҽ$ad ïvs'93WE7e$nŮakn{hKG˚@zV"KL{YUi YBV/B Pw.l<͘v|+km]ҴY,$ݰ 7Y}`ӣH3/-7D&Qfgs\l97 <>13Fl¿B]n#s۬ve^xji͹Prf~y+:'JY,fs+K\!+M>>>"2@CG,5BBBa;;2!ƍ1V 1Qh.Mg-PjPT*-45]ɊיN1fnl#/9LN&|EϠMR1/&EK4l!&{~"^ՖzJB+2d SWɥb:fRqJQ,H:0fʁ:>1 7q7 뀄a嘫kpuOd9ϧI;s8 :Lzm7UGQ`T]1wl\ǽ/=$<yގ$Ͷ}ݬ~vZ;|}kTobޮƪ-lԱX ECw{2CI8Aʴ<yrRw=ťAn?ťMuj-CLC/FqCU.#O{4EƓ#VP(ɴ'ȫ8nt5K/L8 (_i#ʪ7(_c;PTQυ7Yq7,\9SklB7~wZ˘vίfKYV37I^*F\ʑ ӹ^y5_gKw{1")ryS|Zƺ}`Y.dy T5d)F!_2ׁ >s'!Ӳ;DG-_8W83q8y1 P:_稜ؾ| 7}eзW7 B3._ȂygRپ}f^x%raʅa /d)kwv a6IE [^,3g&R3\D5V$zˈ;\H攋Ѣ٧? MзA 9P3tk7ϱ(W/`ڄ u C&RLKEP˔ %+y"a;ː׷i4KG](3`U"53o;~sc  1ER:+qUd&vyEzTUNMM^$t1ўF|#-$f{Nړ5aU[//w^͌ Lh5i6ߟ1?*~R>PEQ(..T*rNEƺC&tM/~or#UH1 +$G"&%HR ׋{ pkh:#"0XD4A&oaB6ARwš;X3%Mwh8^\I&&Msh"7:yҩ4LwҲ XFϝ8G=#zo]Sէ3k Ch%߶}yJײulނ \ƹ3hѵ.iȷʯ.FFm5A):+׶7,ˌ3/i>[;s` Xuj#3c^e_d?u-<_oX#768sܿOb^Bi5PZ1SϾUt!߿l5iSEx6,{e/eS9}x]k90&|p#jOe`D3-k=Ɖny{knbӶkM૮jM>9D6md&'9k0:_s`~g:~"قk1Ćg^e:48rQLg^]֍Yb ڳ9}0J%N:[lwtƺw%<2nv "A `Ƅ*U<|7:Q5[۸ˏkgrfUTEthFy#xLs_^+;|P[t;bCx!W1oS/K ӶhlxhQUnz3EL-bysR6hj0E[az;ܼXuI#BUm .|o ڕW6Kcg;E]kW]?OgOHGr?XΖvvgq͋iaM}dgNlg/x ttqgT 0f # i?PE(s$2Iip'$eU8t=pe8QoN^90~kMKwxk|?2۳ti&>TAG8ĦX-y#@\0>3Kt7I#ߦ-#qc΂sf~B.6otԇ3q[]fKp gax}.\x=kVl k={X 'D>LfCpN~lkU#V; dC]'(xEeJORlojQ Wx+z|yt& oI8JPQQAMM #G|z|pr뭷~hJn]ϡx(--]#ƌ3hoo(V #l?aYm:s#%%UEUC3HLJWeyfܺ l#PX(UvJ,nJuT _% {!8 Pf=nZĭSE[Y%57vj:RAX'B-iO>%EnS0ev'lW2Y`iY9Y4OîC$&lIPH[P>뼹uտZqM!Ȍ++I8/c|<7kXy&ˠSATN(vY+WillHZ찦1> H*a)jBp1 ɜBL8"-yMG^099YKz8@3W<:V,FRPfKIYx!x+!ңڣ `lWQJ\P1R@74~`䬟U2(q%p(9tI[8@6/ ԱYWu"I$*.nQji#غ?%o#xc>u$w|;Ҡ,njyt=Lym \1 z{{)))Ԃ)0|p5w%o;1:{(wƚg[jmYGY@`` n͇͗@/$! `B` 16FƓlٲdcXs:c]U-v KXN>}^ UgZH + b8Ul}*Zd4 ͌1z< O̐$9x+*f431Y 54rc8VOfe*~g =.ar+N^5,N4eM7kڬrcS"~f=5K GBtf:8<X>L 3977o7쏶$6E:~>&vEi5M%_73 fd^zxǥ@b"AYy)׾ TkaV\O>ɑkcRVs&WΡkNֿKşΩC{H5xg R7¢n=.LڅXahyY5g`팛eOܱhOg,9UBr$IR(E=a'p0#W͓9ma`d2IX2D 78Dͼ}C٧? ؗaO D_wpeKi?||h4J4u2diT& Os3կPH33sfGA"o8dSNCG@[QA˔ {y`vγ2d׉SwVe:1%PM[oy;NK bJqLr\\9ר୛~ea-_޳/~nX(T)U![MױBI"֙&Q283?+-lWhH7Sfl$ `:6TYB;)B6?p*ePṗ |qVԼCsX#rp&98{x3w3)  ZɚU6-n"{>}m&fq|+.gu"y6~}<ֶ0@lm:ȏ_:($'wi,\GG$';ѾkXp5#[?ۿ&M-~Y,LƬUyts[Η8Č)=dξU,<_4K/Ͻvw鞥l输YK \Kb7=40nu3y[cZawEm+~P9YabK7O>Sqع'+<ޞ"|"qv(;;v̂.:/LrP-!U>(0в +XbELˠ >x}CsͫfYnRIz_y^""~%s w!@, Mr-)FpTWU&(C:s܌m3IC9(#h8/TNSvq`Qbœ'l\+ZS qlK?JQbMR *eKw90c({kTY0EPgkMM3)p |[B Iuȟg2`3H; (~#4,2Ynr<"=<)r x|㞝qMͽBĉOIDm[ɖmԞ~ݟ\~~F&^^JFT)/>[uH2CE0 tԒNuY |*EOc g "J2lbmZzX@l¦%fؤR-\qE.)QgڌҴh7\U_8|o}&m؉U\}M%mZ ο$N#~|Vw3n}^Wp{,{3EIuoua@Ϭuy8k~v>/CMj zcs);d~cQfmGcA84u?I!5v4Ыo__(ݷ^߻ xb\k\nĮ mʱ ~^}WLaW.3Lp7l2\$2pfơ)B4^$Ia x}PRtb+ b(&6m_D-G~Jqp'͇D Wxvs={%љ醒F|3| XE>x#Q"h3I]:%pGZ<\ (ZhS1F`JέĐ `Y Anܡ8TrΔr)H| SŴ+Ph-ї4(0 V/+VS.TL`#͚84;:j4uMңϒEVUF'8bF8C"sڔViLpUpٵic{M]Ν3?:jԚKi󋃛e9Cik%w4Ɏof,Iy%XT#: YI\l i*<Tu(Dغs#[D!^]i.η3KmQ?ՍMY@*}zMLh ՅM$ru2m6++*XHÌhhMUt(c,ĭ+G@&Sh4}"d]E8n49>NSSȃm޸7.al']C/|EKG7f_^T,F˛}ΧM˹>9eH,7xKթPXQQ^~lC hCfcrS^"7m. ~AAS;!m\])7Nx~{^뾼"+\bA*rcxy1^XŖqcg|o!hnz^I^?\tzNJ{`eu]Ƕm  j vcm۵m۔e|Ƕm\e֭$I ר@Q(..Q.aXEfR,!Iݒ!C~*6K RUy(NORw3wv3T@ەٙ@v (Yc@Z2mƂ\ ~LFnC`4Y |b`?o*UO?c߾f|V-ԁڠ|O9Nxb(ݽ_<\teN|j8K9:ԅ{b9ؙGyL <5KnښЗ=`z˰&l13 V;}~xrw.v-x忽)d{n-?my96Q$߸D.H͑Rt wj!2Әkvn}{kݏ7`d}80Iֽvֽ%J;eN͕ u]_`ắ g&J̮:zz\Ij H{ĄpS`DPr Wy===P d&g-6LDTfi9`d(PCz6z8JL;69F2(fWFfQ%VuTb;  `$+ʑH,wT&D+QEK§n@א[~fb51j\5I ,1ʮ}BAW!bATC +W9աdYBO8iܣ0' $C^룪$*Eac :z@5&<9 WV6ڵp5#P X͆FoE$bk2 C3D!@4Sd_*\7Zpjqtq<W#(^xr#A󼓦dlVwrΗ###']EE<=#\sr3V~k*+j[ =*tXl+NaApJF/6g6q7< R6iT_}<"SSS/hjj"*)CX7#bdeo4X,6?nr6 A "`qLA<"g(mQ~ĩ@|y"U-UȑKi) b-AV &("~FuA, D2IˏGawZʂ i{?q l0vAkZ sΪUƍi / |gsQda;/\ΏB܎ `55l{p͑ dpU첻Izy5=Qۑ)!W7Tx}VEۺ)7!Ը,]m5ڦ2OEe}_Xt(+>Ub$ZVD ,rf _5M0Y@6eêŝ'wr=(Vd!@}\-.S)/k>wl募O<>3Z6qƇX`B)45wU!BΏXLXΏ7撻Rjթ7/455aY֫{z5r:J^,lv1Vk_rH56`tyS ^jlꥮgNc*rLpCU!bZk͞Z:yHͪc*0@>~sU 㧙4!\A0Mdzl8G\xvp &yhx 2 BU^|)N`X>5U7^_#3ܘ#.s}MĞA=WW1O\ \*W㢟p5F _Ӵ)Anߪ9yzUtߥXh pkP^uŲP}y&} 4X5 nR>`x+p܀nXa([AK.Wm+*Yz l`1T@y y:B=Y`= ja%ƬdR"7) 6AUXY1_t4!CŃJ2/ω`jX;Z^=}Ã[0*~۴^_':#:( 0"Ǹ( `g"uC*9)s{;#?[Xh)X= Áh\WPX%#w思 0DVAQu6هm&H.Uiƍ%qvk(a(ɶm_hjҰ,hj`26La<@LTL|_gh\"2X#+QΙdKqMyZ#0g:nYp4&lRg_gµfG5A54>[~*J:Z pE$-D=CŎ߉ƍ89κ+ac*J]/Qwa{"n'(8 Ő'jY|î65Q;l)O''$ NAP5O4ѣЖȭ?Ϟ:ʳ{G_%"0)E?XUc>پS߉񵻶wt~/WG0 مc>c>c>^8mHW \f] ,RW. MB_!ݞ.E¨<#_wf`:P."XUi@i9 9P^vA)fIb6\+ϯeu3-Ǜu &}7RTB`eDm~G(B'n{8{q^>MYY<3T͏mg[P$w^D U! ЀLH(D-~y>Rd(01rƦ[ocpߣo 3(oqŊ8uU>Sg  9gr;z.p[cEWC܏Q+9roxK ( >,c3l~MӢils4n1| Ca` E$uUcq4; ˓JBx3I9g15R1۴ dM[* -ϲ11Ci,T& hVpnۮ+X%wJAGJr88 ܥX3]JSNT6s̔[G(W)6ddt OT+[!OL0 VWVFXQO^Y쿥1{rPPR2F<ö n:uo6!A ne*b4ӡZli~:I(f֥RÇh"Q5w;[c˶cDB&.d.6i ]@م] *_W3}c( Ӛ' cR`ʇnE8:!q| YZD O>E $L !#k=ȟN @u oR=@WTaܓqWJթ/{;\U L*92y-}0-DIX6d2T!'#K ^S+yP* ~. %اD~ƅqCg}.A<< zSo>G' v*h!8 ]Vy_neJi ##R&Z(b㐻 #b&P m=!jj]sZ-恹L.naPr0uI[9K%lEcstAHwFʤ JrD,!md_} 0-'(ĭD$'rMX[mT=1 AvdmuK@։vIYJmdGbq Ze7;mL [έiP<(n=*F&d$T2T\L cz>yn>ʕӝNK*Z&W砦Bb1,"N&KC/+i5RX5gT*ERA00Ku`:pZjѫrӑ$sI*QiHūafLM$ϯrn)VG-MeN,!28A(FeI ;7e)/>˽+=QrRPjLݦn]l> Q-NMWx8A5Tb/}v>9{&5VN=^(gCz=[.5 [9d1u4ʃ4SZM@wO+n/ŀ8 Ѐ 0;A DLE;(!Lݠ+?\? I0({JV 5IgvN,1uk3J5MVGϴS-rX4*Ѫa720>?Ʌ#?n!֒%1F,RKXd8Y?2h`U^1]LrDxuc2U$lRXQc0%ي:{\_,"9a9fDcyIZz:KnhP.ڔˑqQcnK'Ӑ$=CsJ-d흴dhBwƭ?;_[{@㯞l^cz{r>&-QF0>b5Rgr< t4t9Y~Wqy|Fcv9@O+ٟ4,(0!!!<2/~x1^o_@aLs?{@S<8ԅi y./o@yLh" - t(0u%,d/{ g[}6vf݉R9 s>/O]\n[0q0ܙǶFf:irF=vU8#иDPR&:eӴP宭׍y\d8kȳV/:"0 u6 cD"%Uo4kԙp prC0{U%WU f'Mƃ+Ck+`\YS}i4sTTِꧫ !H Ku]A04<Œaq;eb__W翹²ZF]iVik{B "V.Lz4WY xe['ALao`ΠPgba* D5!  Oȹ4D6ku$_E]WT XǨF[9%KQ+7 YtI({:O7F":C+L[ݛr 1t]ɚۚmeYjcB\(r#oNӰ ~HY]c%fB ҵF韖zzhO9Ls=зέ6:2lf[_6H#g @GZ\'qnL|wnlAZa,'# 1|e ۊ_!agD,TWDu#@8(6q}9Y%Qg knکk1a#dߠ>F=z[˶G (,v󜻞nF_L@Pz͈ Gg:E)l ].\f˅5`WX^rW0]4{±(~(3=cӟ۩W1.D,8qD)(P;ZUfW&2)ZJ3E:p ejpb%]*-i恧ǚayM `NI䁻 `j.)۬)P+0ISU\ 6`mK 2B  `iKe HwUηVAC_)EXjá\[ӠsZ,gĸ&}QcU?UZuL܇ E /Azi}4Zj\>iiF䡧¶}"LJپo;q˺3/sbxK:pފLG211q&;l<2)7i#-.M6q-P.5w?~xxxo"VRNM2Ztfւj32SЩ+|-KIz]!6BSH`K0-*(ǿpcnzfz{ *cjqY8}oXIb9Jc#Kz BE5ϊe=b t=I6fSHbcb6}yE/4I{MH*pfǎe\}sT;{(ɮsbι''MPXYGlYƶ}cڀ}-e[Flő4g:MPgwyFSߵzuw9Ϯݿ^G)Xf3DmU.  >uWFS: {6)xŏƭJ:E2Ou^?>ѣWs5SO "%ܿk ն a ]ʁY2,"ˋr QSгtfɔc)gʥTCÌOI &V]7d D8,յT1(HY,R[F'>+Гa`,PmM8Q] yg)#FF2(R̀ 3~w@0)]=O/R4GUY) y@րbtOTcrC,qTJP7!m?+:%~YnfE>*o͹%%!M *<ESoϿ {v ;yw19vrcjK@}ু@uѲdyDS Q?X%bftC0+K0lUt$ :MgC0o6b\_w82i.{i8vU4ȡuKJ=0XSO{]АQoe ٱ2ЊȎ)frq ' IDAT%^^UnW͖3y!k7i׼zftV~EUuLIԾM= %7ʻr fwԨ&r8FCGyZ ,UYuMԥQ\ 4@HmTk(4a ʥ\EUXz"i|R@Yxo%XLE8BOW1d.H!zt0nJ u3Z *mNp[Ъ eL|8+RC'z-|m|s/kcom#+\GiO@Z^cP'^+w.ܼ.473[Zh.!U[ȋ߾h)8K;@b-`tt#Ya (?D_Ddſtm5pɆ4R 4FfEduuK40]_h7IUn"6&)"`-@4Jp%ELe&r#[aQm% K`{_o=^Ƀ@<ȨɆCn j\V%_}C6M RaR8xwl٦< "֩: ؛p8x`@|jo[hZh<3OA# .lqTs(G˰L"n8w5ORBۧe|,Mqh>|iJds]ѵs0Qp9? #qbF;yOד-9FSe Ex g]^E':4uId MMw~ZFލL-d& +fZ@x;ԡrUTB/"M-jpk 0-L`B<\]7RH0̰i'Rjh|WPRe*$rCIQ ]ͦe?-24t=$I'd)2AtG 4kNy tsM".@KY-y"Ϊ*b6z"r{4zOHc>Ǻm%J~1`^F11n.R`b1A@c4ԩeD?„F}4軝Z-EYSbZߋ"*7^I{eg{ȷo|}Hi5=0lꧽ̈́"333Nپu[{t.zyP\3pѥ6䓟B@vvINepۺq5=}aM\.Zf-B -\hCZ렻{i@n>(b)4lU-@'h6:W!wl6;Jj{S K?zH rlIr9K(C{ Wp޵צ+w3::f_E 2Zŏ\ _ϙfQ7D}聶XNz/tpґ6^g&:K젃]/vqEiPGct<.k-GkKhdڦ!V` 15j&rwx|1NLT,4v;ٴzM&*"Lvo]h lUЗ)6V QۨH[j|:aIeгfFXQX.+&㧆d'^bR)_: U|Q$,@jπTkYV΢&}NRhgڍS7>3+:6(uz!gl(irCjIDDS;&)i)׿ ^]kX8$IHRl[_;.''1T}\YV/xf煫DW{wlyNU\¬q:{ @Zh#.3P[K\mܴ(q]lM( 9{Aqy:0rWCC%Q 8X9 85|ߤHQcw|,IgA$wB6k^4YqnVN<).ln_eEL4ay`#32Քi4R*VJ6D%R)nZs|dN=SU JIHIoͰ6{cd3fŵM`r# g\lD;>!S<_܀z΂ʐ.[5oIE͕R4vizj^EWxFfB'_D:RHM3]n+r3"K#J|K ,0:YFx任LMq&4b\ë"-y%<1,g67k9~6kCeĺ-FhZsXQ)MNM^ƑMq,b Nh؅^uftuqC:wWR'uV4C2I\wGd*$SGgDbU8\Zwp ih+Ix ՘(5М6dOʭ<2azM>l ?J׷ccc$ :;;d2 eί<Otg^cpv\=_B<֯w Ð  L$;zY`,b-B - \2bK\ÚZ\4Ya~ 9Mܸ2&XxgN¯|\| WmSF/] 6mt,~8ظlHdWW&^d t-Z[+0$7y/oe+a^Qr2ZKKQBɲX5Yv9#T}FQo]a< b LLI~#"!s9WCEc@`&t"_ {Mݞ붰Ml[5Z\J> 3L! Z'^Ftcg)+B Q)9E# zI *+':^2ܼF*vdWj-L~{F"Q&U% ]d0B,gժ)@`M>L*b0,h &LBVc1li75՗JQ6*H ʻ5k&f@+K@Ve$Z_jLLL`6mmmr9LW`Y^;0š ]`fA*` ]c75]ܿc#Wnm!ߟZk7i;6zI0 ӍjTv\#$-sZh .a?u-.ِ͒9v['+N|S|jMc;>z? ,;Wz= 9$ !P=GE" p=F,fqNJJ3TT.+FE㨴'?[,va'kC&If=T2)8F鼕ފB =$'kT^qTԏB6*F]SR;/8_7fǶpC ƜҺ4"G>Zj"9d |F ]*u!f$mV$ TRʋC_XVw?jU_?_|%~ll%`7rÕBZk>S:+ڱYae.Mm>A# nA*W$W;qkjzc!*mѨM'FNd5D﹀i I I]XΰTr1 1͐DJFj1|?Nh,^x6 'p8_Lt 0X7=聥6i2.U3#sM?G/(="f{0$kvZ닅뺑277G:&͒J0 6rզ sާ 4!^58󘘘xa4Y)t|yX € =oZhȱ6&]{?yѹ9 -LU£{/>!.="ZB]Ï0ؽZX74 {qBx޽J$rJ;D&ZJzq3B5#eSY'襐ti whMD*Ҙ-}5lŒ_>aI!R+耟\_ ֵ! OB JB>y} g`ނy`G҇)_^ \N«R D'LjL:+ؽ ވ3U 2K3.*ط66Itr@2NCv<P T"/kg:\DF} Y}|j 'Oƿ* FߍvLSWL)yf):XCIL? fcPMX/\_y!^ ̏de/1_[.:=W ȜI @/}i'mMTF%qVd\ 9WNxQ{JkHTY1HY>J]32ľ4M5ޯ:a#TKq)U,+JWcT< 7_{q_Iޣ[(#zHq"fT&gg)F xI ,jg.I-$\h2| E@(%̚I\ 4@74*= $:\jRiE,CaP°5X 0j6T?883] 3 ! K2/:TII&Fkj%"#@5I-QIbavfa^ɅJ%JH$H$ 890DuϏ# 7 uv >p:bKucxn{E5#}X `VZhmSKiXG[X LM)u?kp5ƫ9^)ݸ!{7eLCFLDE?cǎ7v{{;jwL&]wC=i|# _Bxyjw=y۷SNq뭷b+ٵK9 ,GݒqYzFk*z =r#-e(r\G8uj4QNɓFe0j^xP׻?0~ 8;Ɓ, $*TT]NX ж>jN2:#9ctPi?]1:rxOW.Ӵ}e:uIRsc/^vTEqRx>QA#:HC l9Nuur5ON1z>RV,F0҈fZ-^=ƻ6kz*Zٜư鐶pS'9wÓ>291cCtL̖Yc!Jjw!4f@QzHh_!ԨI|L4 $pFXCn,7ou͆rXd޻-Nh[:DNZ.8vgPE =;._Z4Gx!e&ٰp&NlV<4;7磫r!T-nwɀNs/YL]I8Dnb )޼ئM+(8pwK!8|׮]˹q[^>|BJgk,A\8{փRPۆ,5s=R+O Td9 ̵cXK:UY"EVMa}YۄaHSh<"Hԙ̟ޏ Y*Mr7_5&- (J w'0Q)vO`ܬŮ[hZ8]GSЋf V|wv_I,!_*r^lIͻX~Daq,TM('n{^dV(-<7 IY|_,h0RSVUY }c\<9u=OÂ`OC&Vp艍l]2W ɨ7l&ru%XW'@(dQh\r I.~8'71EcP<EؐӠuC,a:]]IE_I.QR|O,:6wn#ZN{#U|rwT><^yjtD{ @[dH$e zQgh_8ASZm5AlpQkq{|[T]!4ilv\lW/Tp&fgڇm"!/ QӨx)j53Fѓ!$!,khQ 2֒ǬETJeqrm5 *bݬTRrA"0p<׫#tP&D b|{c,UQttؖK|%8 D]m KX5`3iҖ,H5DaJ#ʪDaSG7'X 'Gb>K5l4u=>L/Py0 EM,;FΔ( 8fޤ3H@gqtJtKhY1qq\}9;1'\ܑ -yx -B MA,X &F6Pc_{ayzVħںZkUP oYlIƑ.2 ,0 !fGJp  (B eIzə$l!# "x`a%$PQJb`GAi6'_j| 蔥Pʃ 4>xq KL=2$M[2^!irנbAT/x'Q@+uWϰsF.E&GCuȱ$%9&H):.!y$FTPXldd>0Soj,0ֳ=mx k6r%hCQl% ߀4_B֨V\Ig;x*JDId?؞CQE箒\~$eMc)Bt\W &YȳDpu5C SPmÊL\-ߛ*Z"w79&8jra˫<gbj.go'nd+r&xQMĩZh!%i KVť4TG3jyԅw]}2E+(sC ѩ&~Ҥ#!F*, 7I*fRu[.UCT5)XG*ca]'p B_1Bp21:`'H#4y4500D!ӕ.8-뎎29+g@- Ah!geT6Sy.aLPZE<By*a;?YUf>G,W S6fCHgbTB -!u0??ΎeYtl#wf hBqʟO~c-Syީ}./뮻I+S:#k!U>F\rP/- !W&iD"eX&~]pIbHTCN#PQ;E8Vd Ӂ-!gyI3@N&~w|h݋vwIG96fe[y?*F@ a+2<OtQްLlKcXzqNe;u$lqI2ʜ.9UrcDceqZֻ xς'^rvb|7|X##RkE|"s\%˲5rX4RH=EU3-8·>]o΁> p]Fqu3 ;)C§$nyB$0ۆSJF}r[yHJ5Ґ/-!DQ`sȊn//E"_sr 3s yB, EuUjF|1'V5b*ѐ,{s4}irC@ub]XJ*!rh_gK/qz:Y b\6Kx讎OAıjtZc\MlKf;FAc!+U]DHq iD5MCӴ e}p]Mf7r,@'|AHVCia ѰI2\_[Cbj ?CCBӨdq:*sa֛У^:̹T3-B -{bXqxckEFw>EWˑWu&gws*冽:֥R ua]o 5HP|ZMj5HGdG,_GpFF*˜\ゆkRh8)9q3QSǥHah•p In\E\;,U`|3yNt?JdR*W;'0*ɐ%A`$wy _5I5 ^1ʾ7# S2:գ1SdK 4nj^@SJHcӢ H&&%Գrfjm $D+~:$m}lhlp"zd]pIӜNȝ%Wph Wxs=7̖uػKrt4mB IPڐj'O?=ʎ3N/+sI603 ^QօPĊ&b 9{eD5}ɣ1e nF"czSop>z9=Od9Z6g4=z9hIR*Y4AAAEוIm]D[!!gW9BӸQ\=D7Cu |*3^yMOălâ?1M<^'T@(aGN 9)ъ l?cRq4SBu)/6X1ѵqkX7uB^+oIu4 уȦrZim6ML̨.r{K](/ +u)͑f<ҚL )7re:aD6+t<_0:$Fm6DVcPbjf}e§dR!Lb0!< ;U..B' X6h1 [IrY|:uXL`Kj_304T^SԽD a v'Mҕ{#ZP=7`bbSK,-Ve~|2akO?v@gI BJ*e44]GL 4440w+, !2oo\hZxECE Xi50! a p0.HLn!yM#k sm߂oG638$}aD}TfKtToT>)t^М0FZR0p_ώ妣0?*:R̨1F|Xeu4:FZ#T)V"E ن Ou+<1hJ(L$5v8`U|A6Q!tFjw|3?Ķ{OvpN~q(x>:.%ӑ$Ԋ COGwQ5-,aa;w=u5gEtJDLV>q5K:}!8Rl A=P7/q[̦g{egM֋rL[28Zgdz|'Q L#ߺj9 OM~ <ۢ^)a)X*gU)2,MRgi:Ydd2hVj#M<<:~J//'gλZAO[bq=1t)V$`(LaKpm ݲbHm iY:!{6!eQۮ]~K.QcB!cE-l 5r\*Y D0bH`Y"\kQ%N0D"a$4f\y'o?MN_ÈFk+/> ۶Qj%r,-谆o4O toaTXbw<}[7^LgR?yHW&]xuW;v?Ih@Ni'sm0KuyGV߾;^Q// 3s45MhuJu*u޲y#'yb4otvKjLsC8,n;|^c`ju3A>Ӹ]zxۘsIINifɗyӚִ5퀚2sGY֬YC5j*++Q UD"[{_툝~ ”pXHBRrXa$gzEg H;V35&LT;W!˜@ \}1Et܂ 9P B. ĩ\pذp tX(Ŗsu%S-MtPD:wױgrX}L^[ͽ_{@,٤lck !B,ƻ:du{;b(Э#E8o:878T} p{z2:Ƭ9‰EƨP,XbU@]19p!.]Vw4_7 9T蜞ǖ{HHUHw4Hwڤ:m>Z2豺ǁciAu_ [v^,Gwxjqsu6YD!hILɇn{_x|C|;5^^糽e>_2e{|g/(5 IDAT׷R3 ZZ߾O~+VvpIKXs 01Y/ _ilDu^`XNizu-oZӚִw;nm]VirK{x> ˡ6~ݪ~f-['<5kJjhF*ZiE3 jURy$I,ˢMӈFc-m.Wkja҂rR#[ VjbAl~Gmph"`}UشPT!Kh*n w >O< }W~Y)ٶZ1GxJiD8Zk)PѪ)`j%qx5<}NBuc,m/'9Sv!b]fFb /sp ww9poYYr{Uq== ^hl}QYV;q `H\ǝm0anK~`5% {Xo7~.BhS_.U}9?]r,sa֭S uxmK,Gl~Xk9Di%+Mrຳi_vF%^Ң*+8T2xSH^>8U',m{-{ˈHt[ #^h4,8|OْY)D{1zG p~V,3#O`U2Igo<$҉u}[GN1 ]]Elo=CZ14N_X$KWkTv=fJŪͮCE9͞҂{dzO)g^yWoO^g,sW^- +;<<[Mҟnq"~RMh1MƣiMkZ^v܀Z3.".{([oШ9扼#q)U-3 7j"Wd===wywttyH$jN2Z(dZ`<i&rXUm1*W1yĆӅ dLhoKuuuT (@&!@ِ2n@26|F;.{S߿( 9/=ܨfUImfTwL#@bEcVE0lZ thVj|{xN.ms~DIJgk6Bk6,:xl0߽IFv}I )SᆞKcsQv#4<_;;RK,tR?*"Rm g6@AO|"4xbKsٕ%b<{ ;g=ٔZOgI zaòtY'ӥiw w?>l޸:l]h'Hڶ}܁ <]2np\scQt"B?p<7\2Tw:=ػԿ?'r_e?<25]׸\sh=L^Yg`r7=}vAM>_fY@ m~ִ5i;~Gc md!;a8oY/ u4Uc5+t6\RJ)ۼy37o|'mhukϧJ5Rizj*FOI*L>d\qJՇO~Tr3V@ xTsUmKYM6x {HlcIS?~<]=rI0l +#@e@ظ+UeUx BK|+`/<$nvV"$dlǎ|ԊE \KJTO.zHiH[og~EAx5-"rTT ;ay.n5??|:T⫷e1{JGXOMMu_ V/ ޸܋+՞ wwg{_n}`]於I߼Y<:ڎ K?\5 oyti5iMkگ?`Cx#nFI/JBtqAc &8uXiՎ.q͚5:t}yT>RSEfm˗ `j3АYE xNؾʻ?t]2Nc6^vz`"J@k=UpN|쫟+C[`dR8d]m3KB/Eŝt#+P1#oU5,>n/_s72{MoW.zx}"3S|۟Ps5 4-I're=uܸl8z"S VqJM)0qH1 (UG୔m!`ADD#-c&1+Lr3yt Ro>W yp<Ȁ4Hu`Hp7f,S< vT2@ Q&Ir hJe3E4ΤSҙ$Yf.jqTI7CQڑ~mɽsKo82]̲ߖVˌQrrq[wk?} d>#u5 s׳+nz 6-lzv56SAl]q'YOgh9mg@fՠKa8uפ82Ѩ'(WnXp pZ*@}YGQ1@ L?,l2{.g 3ޱ Y7/_Λ_%+߾>]lF|P}ֆv>IĄN-cø f[7Qto8?O΁s޻Ov]65uӚִkjs TAR8N}욉S7KU*% 0M֯_|gtK{*`VT %fC;[ |-R $ "Y$Q9[)9#[bedr1#_Q( 'a*O A$K/~0Ư0C {Y*Y,^oQ9"I61yc[{%U1[#%DeO'{] ﻅׯ{~3CKo`uͅ8Ok'ssoID;m'hwwas'JP{Nn%fדuuDv/#%tΕOM..0D!<1䭫7; n0ٝkh(z*׽1{ʾA0* F@=ʧ~[O[WO˗)&VE(DžF gY9`N/߸ `k~0/K2+zF##[NE ̥>ӑ$FR tCCDzbgR|3<'sVgW ʁ>3*W\Ep]]o7'acߺs? wj^ޒEx|scg_?cwֆv>[' Q64ZڱGM'_^'>#p?~džV]+,JiMkZӚqe`CZhzh3JP% 'uG/L<hmn ڔ0MUJI)5ZԮ{Z!. &5qX;SPV,NHˡFNk>5p uAU%M9#4eCƞ"`lT5-+Ω @PAP*仟uSJ[M&Wvo5ۖP W~w|vBOA5Lŕ?{ۦ?Ēl'JC~v>;x/t螕$P3*4)yPL?`8#g, #֓yy=%'=O 2|_|cml{D"¶u/kpMlx1*?YSYP.H4hi)yq ]:bH^ܞ~Ǚq:\zT|Iky\t#eܫrjs2ݩSm±4G$-$T u/)uFu.M۩ r1>O?;곢Pnl.{8]#y g襕z!N󑷟(5%>=NZ֍_Xg{R1>gW?j%/jy;Csƃ}:MkZӚִώ<Pap2 dBh 87m,i`iH_o4FFF^`f޽:dA*W&Q";~Dlr*cB} xkӠkT ס Ymk0\@}|Ye+Sk R=#T olwF@R*tS\CN$76Q-!XYփ*.aa&>v2u|]ג=!5 s'6baf[X69@ǑIn}5b}zU`HBEXv*Z +.#"*ޯ@6еY0~`ɡV]#WcW ¨э鉌B~HB`.>V95'oy8ϕ3@9"s}\t]C*{G#:y>9:^؎^尛\0)~ubQ$P[o^Oc t7`엍ȍV%BNYO9Txt8[<p"Iɶ[@rquZQ;%SOϧ9B9H;46؛0] pli¦BUw/>Ɉ ,w,caڥϯ|hiH҉y/x޵ݻFo8cαvZ@ǒYӚִb|:g}oq]eI1LwtR3Ek?Mh9?%Hdv<^2,pQQT46Tx|d_>ǫS XC*7T!)B֢-s Qu$l|U*:Vb%{!UN*0(㤁{8h :xDqm&̂&y7B"YG7-eVạFlc'`D-fV&Xk!ph1 S8NC|sG?yHL /u7g>}~p` bEP`isDMkZӚt2뺔eF''~Ut=8CC$)Z[yѭv>x__4>_`+`׮]sLmG,`/[!`ϔr Vu}'"˶j'R IDAT!1ͷN;-EأRŲ)L1l%<߈<Y=W&2Ai-UZ݇`{l<% 3Rӂ*!S}r\U 2Ŷ4Z33F:AgcQQq8>rTg׀Tc6>u2DY!_E,(6Q9T3~Bm˾䘞 e~yJpyoyybr;d?T :PԮ'Knk-_=q=!n;n~W7 :%bN\Oy|?Zm/ 7T|مo SۊȝmA0Ki!$hʽ<@`1 -62Sk:^AArRhIQ @#@1J!ܔgC+ ԞJ]e`J>Mv %Y&\rOB-+#kyRS0b3?@yl7'CP%BDCRRn <V[ b ΆD?=i*Wf"^;8gU{Kw#w8ƇMڮ$;|ձv\Ēqֶ-fgk;U'vЅRs%g i89̫p H?FS'g$G''"T pQV9yL!AN)bׇ|jB:; \O{9H~a#]2Q~>oalڸ!+8$t! Ϣ5,hLN ekIZTtTHkkTki(8.)= T<\2@NɍkqZuIMLU-`NjO1*g_9(,uL_=c@SV-Uć^Q:fD.^,}@m_XfS%zOq5Liܴ5]ci';UՋWPe!NfG&]%PWh_ĎLձNģ/yRȂ/V0öH csz0F7-փ7yU"|~aQ5iMkhǯܖksihBLvٹ}Z*Ug_(|1{7o \YcWX<3uW]zqc 4E @b"1f聆˶&Y 0wC6#吼ѪM ^(NF~ H vTf;o|OիV'zFx.pbDv;r:o?EnPhCP*ef\yp6Cba *KtrMFuR?&]A ւQyFx{l'M3% )Fd?Orx˃5=ZvR7^OkIo/Āg!ȱ_ `C7:"Dfć(-ieôPrnrS^BE; ,({A Da.kk=-JiN.VbAH `W DO .X,V̓z.)?=ZVM1SUa|yh$0dqaut:E)Y酂j+zr: 51\)]CUĢ-Tku$3|D/fS nՒCmOoرz=|0R N)n|B||Bm>5m8wޝ\nZӚִ_ ;~z.cy>/6F$y9gxxtuvCcvjW]|#_4nJ" 322B$yμe˖1<<3>>eYR(wCgg'셔'#%G r :O!IĦp5bCnGbG6b%@`Hj몴S @jKR]b[O^`b#6jsk"v8 yJ^7/_뒯lki渼 UIF֖cD18\\zh]:,R@ʀ1(n/s堻p8wOרI/{Cd[i{ Gr"^e6{һN)8"|ZΙpr~(Lq\){CȻǖc6 :F>)3yzIί_2c #"nZZS6{l.FIj+%q ޵*_Ӛִ5e-ff  * rZX,NQ'Oq1 ݲbxԡѿjv뭷ӟts97MԔr!c>=~pppGFFf>\E<pR9`TZcusن`UHj  0Ҡ\ͺ<,D|nmL8hQ#Œؖ(!zy X/VZL0UUhӷAAx(&jH\wvlm">{l3 3CzI/+F1(jo~YUy7=13pk|ݩ5л1oJ{3H DW7'UU2jZ;rmdN/=ƖCqrvVI'0 `:J`jܨErw"- ,W̟m/khE0pSo!jݩRW +#k^&oˀ* g4?U.\יPKt݁d|Tu‰gE;00LSBٕXm#C$k,tpJa]wr Dip{b fG5FDE9TXFWf^ԍ\E;OzEƾv)\ \ǪhPӄ%!INս>UcUL3_ñr[Jnh><#}9@oacm re?鋙aH>o#R9m?dÿ/pāW|qQ5iMc۶m{QO/.BZ[_>=__ũ)~p\.c[F۶k dXNAnQ6=P*.W[ *V!5ꏧ4F>/ήSOb*0e.UDιqJ͓AUΛ@PbO r.i dX9AJ'b)RrԢ)X p:G r|9U8>їzVk\tOWO)L+o߆X`pw财/j^k`DIh 0`:pT lsHPkT=YX7xiW*Ҥ1ねkV>JM`fiT>;aDDb˂ -{ALd[,D|-BԷtۡn~L"t3:H<3";шT8~t͎ cfW9a@){Q?Z|HD8^ dͳ_ `Xj=x[fKLy7̹}u6g)V{jVhkS=iMkytwwq g}K"v܀8LNMQ,f7m:.~L4MapѨMwqd5oh Ȏ(V].(*[u+'HMErH,x/0a^/}L@k-\_A:#[ '{oԦ PC?p}R2Mm/Eڞg ę{Z?EB3$X"XepZe,eC%xD$Az]+Z&)uzoZLܿ[҃u0w^N5ai'fDtVUF8\,Art[@"փ"ЫpdGZ[LPJ )' m9ɥ>̽M@IΝ_̏&*dk~٧:|4 ?@TJp*\M%KxL|u"׌QM3n).MaFPXU@Z૲q|+!2{7)N'OHr&$sii{I$:N)Jfvp* ֮M0J Q}'+`"#.zXZ}e]Elj$ vF?KZ*LPσ?$$z|ʡV!No|Ζ)F{t>%b :iu3EE( ~\'`jQ<þcZn+[>՗?lEߎΊ\*#΂Z7U`Q 5z~XsfMkZӞ =a./5f5˖j`Vz+{ZM L! \oH{j# ,y-^k>$t,dSLQ:zT`ň\aRxn&٘:^U!4!&U;Z࢛^1_j*T]M<] ^B*_6S>;ax$Ū$UhHV}+i)&jwarTgUUG9g 1^{a^8cL0A` H(4&jrVuhfy֨nݺu7wLi-aB0ź.!t$YWWAC0/JCMo# jÃF`jQ:gjaV+7;LWDFK}u$sNXrgnK6]{Sfxu$YGUBMP5xH..(IdԔ܆kQ3ڱ}vL؃ۺ3˩)S#]%YZc{x'=;w1Ɣ|pĺe~LqcGO \qMp~[p#i)uڰXǰI׸".,w;TH56!7" D;BP“ n/tsFD7geVKbnK]㗿<ʒ%S5 ȩq4E!a"S&JrVC?%tb  rsf<*A͝84dZqmXZ'+ lc`LV'B\vS4S AF+}y{͹J7Ʈ!젃Q"jǑ уI&nѤq|c 0Ia[Q%BÍx Gn6Ǭ^v4Tt\ &<ي"!I4{2$~ naJN棃6¦0z(ckTJ9 q0Z k:%:m'j<[5!I3d'.%"D8v3mڴg}Gj|I&t T_w=($:ɤ_z'_~_ H:C-@ƦMD"WVDΫ7kV6BPjƇ T16T /rCˊU !\'x}X9Г[odB~73P:uY#, M K\Ȫ/}'J:Xv#Chw󑏥lI+w3_t18ȩc# g 1%Z_*gӉnnk; &̇0Kz_JsNhp:ۍ!Buޑm IDATz_q>Pfm`(AplӮ"Z*}bc2%C\ zC4 Xo!sJjY~Y;wm^a,4C1νø{k-M&Yg?[0IHkAe]sN ’!`CCF.K"31=&O5Bu tH1HxtۃZe 7# &¤"!K]AY!4 JZf Sm<=l\gOm;!cʣDcNzAձIQ!U䊛Y(>;\j"o?ODwԄ"Us j1H6*hl;i RQ3=&1Wo"(aH^`Zeb]y$ u@p'X[tX *#0>>PON*E' 1kNw:?; ,1śu#c7*VmZ@dbFn/8^#9]o< l.<0nf*.ƷSwDFccP զȘtR//rhW!iQ,gVL!3ݸXi.0cc$0P*}xВ4)d^|g>oN5q H{ݚvmuo89v; r%ZիC\vYADKND5jGw\R9lEPMiq/$<î-l;hjX(i0a|+DzNH@\ m+wEd;J{:4 &'7 iTB1A_!Gs(HI8A@JBڹ9MN_L<℈HIudԎ4=$3' o:'5*yۍd 7ςcK9-'ZOl3X3lt1:}vY9]3őfhjsai:xf:l GruxTtE`~#|7SpMVy6Ζ$-cmP:mOxu&ز;,t]:؟ᔄ ~4C6QC$IgseDiGz,hs1eLPd2 \KgnqAAb/8|e] lD~x­MH>;F-x!n\URsXMؕ<@yC@K$slh]PT"$|ٌA=~BQC;A QT1POZ_vx~Q帖pLea8}`64D!II;]~d#Z2ݙx}ߘ=cBTf`\459g#ؔ!4T#A]@cu}oGYyZ?c_ѓ"8wM@2fEQEc!Cu2W&9p@m@EFV(pb1Ex(b֎ l n%(h)0yFz/P2Vy>+YLWM1{ 4X J+RCY@ $j+"D蘲6B]bM;(V=e1|,e8ja^[Ac IEiǪ";*Xf.#ULf?6gy_ 88􄅍1)B{#7*qKfGxbrE-a몑oQfȸ p 9: jFY߻M"J/6~nf */ li#x.oq岉880p \ F0 `d Y7@>wZ\zu55[B*g 5Beno2{2?;ϡo)-~Όg_Kr,x$޺::$VDHp<6p{PU5`QDXO 4( HP?EA,׏oDs!X 2T%2:J,⥦XW?tV"}bq@ I@6SpMWP@6P*;+-H9%mb< LV'>Irz aig,]Oێ _Nȑi dDYXY7h/&W1ARSsA?j/03Q =GE 0׫dVMiY"DI1tQfWOb*%9P$&Ѥ&+29x |I'"*T6 &"H(0O CA=jKؽ{bAmhBTfvO %T/] 6bd BID$z&6!{1nۺ9s+8{V!g%& 8Q#ypO鳋_=)=u 'oUͣW㴏0c 1J:Ě5kRm?nxi ~ìI S{uì9;1 7̃GZc?GΑxש*q޴b2wʜa%q`o4;ic՜9.9ܥg1rN_ȅ:P:vy/YOcf;_0?y_;^s{]N$e@uݛ= x"S`Ү.L$ytfӗ[G ǚhY$iPd(cɒ%\vevAQ~?]]]HDqq1ݍiO2Yhl&BMQ!3\5%N@5bahZ2=6Ģ0(IBp }v=6\z@C!mw3s(@DHPSGcARJ;Er^"ݦf̍,b L &֡`"PG.CX Fb8HNƔΘf51rؘXB@#Ce%8C1o3zSLԛN3a3=⚦ꀛwfζY<)Α1^.7D!핂jegH ؙn3;fnaoI>hQ+.5@lMe`O/f<]EQcY$.wdC[Z4 Nh>W#J$5ϦJI7"G[o;Xrπ)fsɖlDtd >r.=a@[ޭeMn.:mNV NAuEe:h_$;m0shUu@4Q"]Hsh^y!]a-t ːpAkc1H%ռ mViUrX{cкfT0{ %fdXTƯw\-IeU=+9.,,Lh)V.* GiHSV5_<_~u^.+xaF 5G?q$ pi"sϐ9̻_h>J?ETq=|Sʾf: )y ?AkΡ[;[vûRxXzyB! HΣfSO0nf,\E͜I:uG,2g ̬ńag7 l|ֺ=w JΫBG3<6)g𙯬_^iKl !+obΥ۟ö|әsXTw O(\.#pgŇPX~͆{Qg4-Lz0>JQFGG۶mKMH$Di)2] oh4Sb5*mmmDQTCvPp(F"a%#X9o12s Q!b:LSE:4[Kyj,щ%$fA`GS,ʃp $|^sF0$S5\Ba)Q4צ+76*³mS"!ru zÐtA kB9p3Ľ)AW]9@|f;" !y*ADXd)Njf/HL0'/\V2 BXssym[m-,gāe~az}\LT*>8a\}ěQ!n/y~n.ϡe+>uNfwcYdd#.b4%.aWV[} H0eZIg~.줤S{qUeL6fo\o3]6}UGx80~~,OĒ =!J]eY?زT#07,uR[[z|rQU5=u`в^iC!#`{M$a t60P" ]2Rjs#Rb!m1émg:x$cZb8KZKMr\cفE=⅐ڱvUT#ݎ*x<"!R*6 IZRi3[jAwd+/ S21:E7ldIrhd,Qpo13=rYw"j ҋ`yOs1g4 GݍEl>>X0=|m }cm NAfq-VPE~x"3$6t1g=)6A0$ԣ]PfzFJ.m7q-n$TJ kTZcl$ N!(G@M6 4!^Z;E$̜8I#Y/ cOy+⟯]~}Ru|Uz!.>g•f<0#9uN`cj:sRb(Up]aIFXą@5:)c3'F0OdîcJ<|)>[~=gqbgcKslE;~CƗ8tͿ+*{LGBBv~嬠b {NfW lv2<λO>ξ~|˧n+%WeN*۰cK&{=3"HLtZQotdܴeިS>yF jagHr ̎mɇbSh>l6;hngk>?}>38g|3Y{h"3{fݱI?_#mBQN(Mlއ[el (fũ>MP*80nE-R-> A%# '*pKl3|ˬ;'uv>o'<_PH<,$I^QsTu^w))ENhr(UeKXCXI^.HM!UHLϢAL/6CE_OVhAn)2E90 WL/ڊ.c+`{ΪXbb" _"H|+h%b<h:@ ꃐ1jtk 0C*hyK}҃w\i{8A5D\^`;`%&OVX+Kz9?ƽoc`@8edK ƈ5Ta`8F|'V2}!cƐk׌*0C]N {^EuoQΚ[y 2 ~hZuͼ  a/{un]3aD/: HfxS$LIj$$R]Exx}?٩!yU`0G&(ȒW\B4TlKOf*r.ذ^їCX;e&<$ycty%Ͻ5 ̈Mw"Ch_j ǗRdo]3]EYgVqڬ"rNcv}(\0KNF7V}L~|N[9=Q~}c fWDoHgS4 .$&1 wy{;ƥ'I2cڪ9Ӽ[#c"\G9쐹2Sy*qHqPZJM#, aդ5}?$KDph;+/!WytoyG$`"YG!QA7cE`0"DX% rX*4a9XD#Rʏ׋# Q;@1gZ v`);bpۭD!ټیk P.6ςmyئnE_ױMI0>)?j̙̭nNYY.Vr:qKW6iΜ[ cKY zM630(! 'ϝί<(JqBuN##} l@qQv_O<>L QC﴾Kmݜρ<=~3mh15mñ?tfac?p =beh}$YX:iRc ĺԐ䖯-/pH>s=G:x X0T#l ~vkNgtꨯm2L\_Z;P= \DϾ4?>s7 QkBjoKPn=?W=Ғz/%׾;gߓ"h%^Ŀg ڗ,XAM?+6ܼO˦u9Xo~ q'~ 2n_P㣿ptęsP IxKI-V}U3p8 L`Y^q=[*ǜYq^ּ.ʙ31 E+v¾^K?$*S8+Oo/c.i'@5}"W>m<9}E#t"_&}듎:V^5\3vƕW^?M|rihȬgee%&M7Ȩ?qxbz{{9a۲2f̘k8>ꫯp;ΝK"`޽'l[PPŋy饗2 /dӦME̜9Yٽ{wF}{^9V^Q;ݻwʳSL Pn .~:qytڼǏ7(\}<viPWWɰ }; (1 VRUr%h^^@ ۍD=iU}fS[yf6Áy|,|>,?YeӉ#dt:Qe2T7\6mcc(2WȗEw9Ks9p ~Hҩ$jXM+䮧},-皕(.*jl||*g }":8{^m;v`통l{g;v 7<;q WW_=aK.3<3W_}53y3gwaŊ">eC%r=vNJ ܔ;[aƄ< r)))+9{^:;;3|).Ҏ yX:m)mhmmDLE9k^ ,:00nx7bt:4tǟ#=.+r *r{sy}R(#?*Ba|h1[룱=LKWhL%Wmx6*rWaip=I۾ׇ磹y-8{N&Mg|z vZ1w"$v0:)":/7[6Gr& $I“d ]悥\oPS0=8hYp9.ʋL)->"& q$(n IJKP^8+ bwKrX;/‰'\^ c$a)(,[4YAdG.jƍ7bæ,YbI$Sf?+ KHrUΨ%tJ[qU{xJ@UU^{f`_n]}eQ($СCC.TB?6mʸM6 5~<9rd֭[3&hllxNbX&vؑQHHik׮8y߇l߾D"o~n&ʬA2 (^8q#Gn˸ۮ]6wygm|͌nQLL&wqGydD߿ztMp8<"#{?N6dgJ8 JK"]x6B˵Q 8I$;rAʚ;"_ EY|taÆr-K )z/Ji2Ë9ƞ5_҆7x&aF֜,OU|z^ xrIet]7P Ӳ,80yd&O~e\'XK7΄byPLnCtx$L}Z ʩUNTACCI8pʇxO0H$}GG4Q?"*UE#Łxᇇ&ddM͵.%r`X7G>q{SAXۆɱ-r>K+<{3/jz4w xgEqrlE62qfI4yLEt-I{_Y^ނ8)vdG~=7>!| hoo= 6aÆ{'ի)..s`zB$'+TiןaY Grw kl9qNA˸{#s㟹m㟇޸e&S[NgEz+?|)pN W¤"bDcXZ13..ՊlFhGyAIu\4:UX늎ҨO񓞑ꨁ(FlȨ[50A yٱcGWb``px|wFTz9G7u?Ǵ>Wg`GEm2Jw**MId$dD0;P5 ULL0BFD Ʉ$!6~1QnBtI6c2CLRb6R79Qj2NIlL R{{!2< { mhpn5lYѶwoV8>?/~?f͢M, FGp/֪B )ޘuk```%tj@Dś+RT~f0'yY "SAاl(t8n~q:=T7PwM\38_,S IDAT/}֮6]đ4|,97ND,f|?'YL_"w׭r0S_EghJvm|ߍ p#<^.n(|sH<(HsZFi|ǵ\6i @͆xhU"uJ^ ǻ~==e%kGSO=?τGh5#x+/s[H %ю?eTU `%!-XTSQɔDL!4)eGa-@֠L > %T${eoÄrj<.p5Y$UբYRA:VG"jH$kH =%.ߠQ^z_t*98j:w5E13U~KoU7c=^ ~c-+qp䩧rB 9sgܓ_MSI?gO}x=~$>G:994LRfV3'{iMRpہIN㭎]b`G\T]qfuϵÌNsDUAA 8Єs(hZ}Bf"Z(vhOd5SII4 XkVl)bƬ(3&5W1_TWW3k,bD: κsbSJC^f]a1b&MtH$hDz`0#4 hY}Àl1 H 'A{=yp\BO{CUz%j?'`:xuJ { #2j-YIy  ̣GO6E`9|{,R;(ado$Ley65V6uK!c[H/݉cUg1\_/`uUь@zB~(N#wYGґpXX/cGQ<]=6} L?)o ޢ.O0AXŧo5c"A/JWQ’SSc Vq=HWEXJЃח"!@ٰ>UtM%([(hQѴ C d∃:/X5pe`)΁Ezp*UUU<3TV!}~dוwR3b| `*ܙ サ˩ 777lIMMڮnmr O`m(l2n<1}c8bONd'/3k`mʳěe/+b,\r73A _?\07x=-|T 7{\#ϖ7kGyˈOc8seTaӏ_wyˣR<yׯgxeTX19y$>k3߮,B| W*lkvJ\B>oy<*;I.J궾0{l Q #`6'ԫ?}jjMֻ?I,̯Y޳7 мe~U.R{3GhN'>ܭ5(՟*JUA*R'^* 4<%? bEaa!=.W6K  ʏ?=+J|RLpO|z g1_~G *}f`ѢE|713EEm6.TTTիöO>5hHGCXw;|ƛbBӰuW,7X`njyd ?%;q)z^'zYV zTOG/k'BϥCᑨˉwޭɉ+uvvA m_d @^`nd;<PU,ٷuZ)bHn0&AO5%&o]=U^_չYngi'abv Fwkj&K Qw;os-ϴjJ5AGFr{HQQjvqoMU4 wAdk-[|1A"4g󐞻30y\ yi2V›/&uH}'NMMp.%%,>rǚHBFiiim^'d7Ӌ=fI!{P_zb;_a{\pz=Qg_Uu2}icĤ$of|]4R;\u3f O1 ;cipc"K_w4#x0' ?AElSYYܹsYhyyy?ߟ:)S`|̚5+K/C'DQ$++ +V+V4ȨQꪫ4iRoeeey{֯_q8묳")-bŊͶ%''3m4.\W_}իQ]vgyfXMpς oشiSc;QG 7رc۴:{,Y {Q8p '|2\r Bҥ̛7k6q;3jm|i,]ŋlٲ0/>h9??oy… ),,o'99100G4 ϟզlaqP(*8*= wFzZ5^|EKH$XN+!h ב}`)#5MŠ2vQru? uU̒M8L;71(|.?jn.BGZ/nCGuII _|EK/4l[ 7?믿ꫯ2w\qL&S/Vmٳ'<ì\2lilܸK/>䓈 ,]QkʢE7o^mǏx 6Dqƍ̛7z -T}͚5?(@ +WdL>+UEO>wޡ61k.vW_u]׮999SNwmsaa!ӦMlH6hԩS#|;@xh7:~k&nɊ+xꩧ6mZk߀i̚5ŋG=o{.n,˼ozٳ馛ZM}g" +_v[2}t-[6! .oM10]ǃ>5o ^EV h60vl*˴n6cYzeGy?P am```p4?W_}5B fѢE̜9[UhQo I[==pQ]Y##}{i\8m GO*.<%t0'%޻'+WQ]Af6 #U=zE# 8z8+) 8+x{IYƄ{!0nX @Q t\UvMUWW3}VDQ$11ݹFZ&TkkBbQ~.]):K@'%%ѻwX4Mw y=bIDQ$..U/_Χ~>?j2` fi/-믿^ߒW,É# Xl{eڴi߿10v3g999nL0^Q4&a_5|M#xhcqӒ:5IF8]l[/n'F6Χxw>Of//^Yo" 6̩_v2Lb)Ww#'W\vi$݋U?S |ź)g篓z!;#b7僇Sdbݐe9jhO>1(s9\tE5 Q4-[0gΜVݗڥ*%%%Q=#1cFB<@D_okp嗇y\uU~QVWǎΘ1c{ټyswqz뭌1Ax/KAAAq6)SpgҿDQrJx㍈>UU)((|Idy*sG=w,0V b|Av200h?۶m_999]mJDR㪫&T0=fۏn׋[X3-~6%6o$w{!5@;lZa avR]-cigc-ہlM)8dko IDAT5MzM\N>z+C{zPJXk())w`#H'&&+C1f̘ZQ=z4O?tcH4,L(50yd^{f211z({SO~k5j ș3gF]kx9rdXƎ#vXt)W;&##?[o6p0yd̙ 'r`/r8ɓ'rꩧ6j?wyaÆEs4>d_}]&O. Igƌ̚5+駟~Z]2]+"={lu@CV۷s-DA+,XЭ'<&QuϪ/cU؉a^Qr{lŁ>j˗[lׁ-|̖vY)h&u2^v ǟBIS4԰nM|[af3f#l뮻͛7dIx6<Vj@X A3&+++bۓO>n-bǏiLbӷo߈yG \g. "N33g ϿoD|&7԰سgOs=+jZoHה*rrr^Xp$ѫWk={$33ՙD$, ] b֭[{X勬AG())cZTTY,ѣt6/Xj?U!w/|ڛٻ%g^+hST70u6&f Z`&Z)qiZ}$BEQ;&Z ybb"틘={ʔ) 2$j qym߾};@ĉJQb3p@:ꨈ7H=>>._~y딛ۮ吮XKDvv6ƍk,pP||„ L&6l@qq1III\np8HNNn7ɲ󡪝=f`+qFZʕ+~~n\A?Sp3 \Z =o D$IBwݺu֔)SmWSf tIQz]&uIX'$$pqǵ.R#G6F"Z5݀l/oՖ=:l[yyycs1 85*UåjU n38DXrHVÇ7 -EQPqaشi.Ph;B$4h#FW^/""=z  R[[KuuudAg/cf1YSYYɜ9sضm[Wbpzu?못p ,:7XSᮔ7Y$ cv􈫢C 9&ԘԬFzzzHC i\D4ٴMeee!I~#5a„>Mhma2"}5jݗnM|?c7_]oJ...m "]XrH(ٳQINNf$DQdTTT3$Iddd0qD?xF|1flm!khX@F(Wʏ?=+J|RLpO|{Й.;;Qra~#0|Vt&b=tVDK(Zr/ b ,`ْڰHl Ox-@w'b!ւ `X޽qra޽ddda֭6A 11'riEuxd%7 T:$&it](:]ڸqcvE hHMLLlVO.+Jh[b6}GƖ՘*҄ǁ ʆxꦤDWPDJLְb[# M fZ$RRRHIIifX]ӧvZN?t͛4ʐ!C8cی}/jj*Æ F"mX-&_f-;mj<hɸkW%pHŵ {B<Q[!MXP^rHxxYn^{m39+0|;&!=Mƪu՝xŤ_ 킹^x< JhISYY1޸="2mX$tȶ/Ujjj"w۞2ZVk;hSEMW#Hb;G1>l0f9̃3Rx4"k},ZHj$ٝڻ(dff2aDQfa68p n &4gdd0fdY_~jСC(͛EV~)%,66.jγ_T׻J7BۄiQDw B /4iڿ(4]9oh mnjSC:  xx(jؐ"}rMAx[^`Ok ͯgmM?^~¾\n3پ};<s5JҎ?x->Q] \]A^7hFph]aݻe׏?Q`5+mx"X kAZM@]޽\okB 999l ¶EcѢEab# v駟F|n7G?rgtuJJ GFu0ak֬f1aRSSd˖-dgg IMMeɒ%F|A IӇvqdd2!eY&bqSXlbwh`#9ΌI:Xmx{U$u$I@hH34ߋOMl8蚊*%[A '&`GSݿr-Zp[15@A@x2c:[-HNHPh`7۱D` &I (/5. U%Df~_G@ch߫aZ0KܯQPeل+hՆ"կvhWkIvSz"XS!BO·\j.Y$ mAd_YlXPW`}$3V{n< eO?Ĕ)S]ව/dʕ\ ZCP]92OGY胱pw ܗnZf|]E*:3gW_m5qWnn.>hvu4sw$TvD" rJJJYUomĈ,Z}dɒ6UWWSOmr);63ar-m[1gΜ(ҳgO 4aG1qV*tuUUUc};իk;UU%-- łdb HDbbeFlt"IRlZu (aqu>7:|A-G  6f|ȚNEmP)$5ύZn_U4aX͘v p(>_HD2Zjj-U[Kmm>Y IB2۰M>:^jJG=߂޾*׋适EmP \ ׍GQE,eu^?fd2a6IX,Vl&ZWHJ&+vk#PGxjk*H6lPй]x?qոV+Au1cڱYLv*bc? 1=J~~>wxarǏ礓Nbɒ%a;{ժUY_~ &pH߼$I"--#Grsꩧo#2'x"gy&F"== ~(Byy9y_~\``0f`Xcsi`AB~zjc ؟<*A_ΚZ\/f4Z`zdBCvѐ,l*3tthhzܙ INMT !"$!J5MCVdBD}xy͍h =ż{۷1q]_@ ΏZaRl]δMhvHbȑW-uDGH$17Zq4mXGG"NNN&LছnjHNNgNonwNӷov tMC:N}LOOgĉA\.6lj2n8, vi,\ɓ'zxO*M;H8/A%{_l7HJƁmL^Ad9I`K$#68 6B!H~=d;躆sU_zs0nܸtlpX*I,O%*Ljj*=z[WVV_xbE]QߧOgSs3Ajh~#h*~e:1a,;Tk0Hpk هjeƌ,\0,+x2Z,SYY.IXٳق]V+**"Nw$#xK7HȄ_<>|8O>dx<"!"~;ZXHcHLL^{PtRR~{Bӄu=8ꨣ$>TGUЊ5k(Xn۩ 7pN#}vVXA޽۬3ʤIp:㍚"<( Džm#ƩO 5,4O#7AV}nrOz]4N-\ZZ7ئF=$կmi+꫎fcn\+Ml٣HhngnvV;&'?Hv3<СCK;`pxGAh$"Z5Kff&]des7o?SX7R:QM?k 1W '|Wzv \p0sL.B>CV\.iUW]EJJ /bX?MW"uDX7[刓a[ͤv.7|3cƌᥗ^j5qYYYYtMs9mL&fΜG}믿c} 0{c_磏>>h$QBB\p^{!ד¸qt EQb˜1c -- UUj<6mbȑ]Yر#bI#X`2fҤIL4Y"p۷/r uuuDu7h YlDɲfذa\ve >M1ӜN봴48(slOî'tv\̛7>LP,ˌ92bHl6Nx0Lddd4V'bC443g#%tMGVuɃL_Ækx7|͸3OI&>Qz").dS1aKw_Dwq߻hF"_Ux|xPFWScxxdfլ_>f >]sNjkkq87s{}gtnݺcN0{ϝ{|VVV9jϘ(СC45 X,CfȖ-[p݃5jcǎ= ܹ7rN'}}}vRSS)--e̙L0ARχ~Hgg'. ΨQ3gsERظq)555@BZo2l# yfmF]]===|> iii=S2cƌp:\Nwx 466p8̞=֐X髪BTА@hD'%K,4^{5B‰W L£Vq8L8R1?QhsgYRJIp1ɶKzWÆN\$*-**K xli8>444 z?;;W^y<̥v\vlܸACD?ed.hn7#33Ę1cnZ[[ K;vc Yx13gΔ_ dgߩX,1<^qdǏgժUlذvovJ`^F/nu0hX bm]8l!N O?^m߭ wT;+eϫ4c53GZJ=Naa^mN=ʢ˘Pv0Q z Yztn3u;̓8OLF _#=oOLljzded.uZFFFFH{7xwb?9\NLz$NT.H3ebYN7袧/Du&R5鸜#kkkc͚5]VV]D0q ׫9kǬk'WД>1V3ƬL25:ܽ/SRU@^n/t,zU#Q(rxĮS]H=Ԛ9nKhRu ?+V:e#oO|#tf22KD"6nƍpגvOMf nT a:S$7NU*6hՉ):3s8"۷ocrK]N|l-MjkVr=kH/E}1/mk|֙, 'Ώyp_>9+¨*s2gI߾S< rjiFEb ϓAMM ;cm4h4ݧ9 "Y JbJ"%%EReÖU'꼏섶]Esa5U" c} W`Ν;ٴi;wKe]@ͱ}Ţ2'Z:G֨9n^`.ZZjkk/\# {{ *V7QGK1P ƇOn;Ry>WwSAyGkkC񈶋:44?OamڈjSTߏ6݄  N᰸6%yQS/E۵K@'NPмo DO|{KEOC|1VX4&.%x5COI]vsN{Q] .s/?uDG`1 A=EVNFьhp-Ke.8*_|Qдiȑ#KMMe֬Yk&NHSSh9p~~>EEE]V$$k֬5~xt:;vՖZ;_bV\\L u6R0|:$=\JJJXz(oիWN^رcJ%w}7DSNiX;w.(;sRWWGssm222cۻ{y7Ϛ:^xf3r SL!==]Tl1j &X,F Rh4J*cZ T%؅H6}n dddFCg s1q(Oףz΀K8ՂX_aY"ȰmLYk{be z5O]H?tKsy9Q4_\zرF>FMUU3?ERr44C}Q oBtZ,ԏsOMF&}[u0B=a g~撑 #!x5NlK\=\ RR(**2&M|fAFZ ГGBTvÇQ^{S=!Y7qGA7pt>"2RRp+Iq*A|2(oUKGGJ^G:̓&vcRp!Q*\wu曢V]x<466jl63e֭['ʮvrLضm(;Hln**ѣjSRR:u*k֬ePUUEss3ödffΖxb6l *71cHMMe֭ޏb=zG+T*ˣ &0|IH<vnH z=~l&P(D$2|Hџxq>Ç9vؠIRt_6H.;edd+û'i|vdt=1t'<P\T*fXY .C"GPLv]jZVѥ .q5&;;[tł^/Geq_ 5L&`@  1 8v999g ^`8Ob5!&iJH}]t:l6j?Y,a>Hcc#Z_WdeeϘ1cy,iR$B8/TPikkhnn벑\(bQry]8Qz'c &B*|zyZF K/1d)p˜I ~.dffRPP@AA999dddIZZ%|8RpCWWtvvDSSW|+Y .s3eG?B6gb~k#zX˂L&Nņ wHJ%_O˼yhf:r&NaBcİ)(/sƣhh[Dј| /]:ډN4%bT*6m6m1zh~h?FƎΝ;Et:Ev222DK***8x¹jr~?lܸQiA$>T?&:Cf#++KhDI!L>͛7!D_RљJKK}:& A$##4, fr^Z'1O`0DFzq]]]CFFľ*OҶv<Z.rr3J%999L8UV%@PuNυ b4:;p=PdUa7/ս*x;JX}x^~Qsoy0toqDfJ%l޼YT`=vX:::D&*]AA`Pt`΄ $466 1 kJٳ=qHD`E__Z Q,(//XO6Ǐv;)))Zn*~TRR4T]]-).//g׮]kJqqzсQX_YFb}nFՊll6ٹs'Z6)y7(JT*)[ "P*9\M=xPTj+Y/s.}?K2?x[T:byL>.mMHJJx]\P)J";;J"VJFVm6۱X,xa9,)[c|m!~;g|{,ky]ļ ֽNn+cMxuQ9o]'.tuoL'l )$KFFj_drkZ(XLe A9~C#thA &Hed`"&L0ǽ: FL&***FDQ&L@0={ްw0UY Ǽ0qDy=kE(˦nz{bZX7xh42nܸ36?A]& #tBQ& P($vuvv̤H$Bzz:>`0fnC<'z1LT*n7F^OOO:BWWNGGJ,Z[[D6A ++n(VKwww2QW  55H$B___r񐒒Fra008NZ-tvvVIOO}>蠨H$B[[[^/Pݞ\AZ>0(S@c2**5bܸq|>ZZZ}E,###E8&--tPEz:F۝ܳx0L!jx(,,v' ;;{/ۉƁ 556ZmRSSF|A}V>ltvv& HbP__OjjjNpAjScii)8nw>P(8RRRGEQQG5ihooG ZT*zzz0L   ގVp҂J"777FA //Çl HJx^RSSp\fZ-NшdNn ZMVV( Zڵ|ZZZbE8&++ M p|vbn>twwc0Z>!6 9~8 O[[hN'PL^/~tB^͆ \., FRF˃X,qy9}-x׍qSY;)|I"E!O\\w.w.$PWWG}}=^2z{{Ioo/G/g0z-GB%: ӫٔB,$Hl4P)g`ʕg| xʔ)Tq">EOJ !3gNa`̙tdMى'b?UZZʒ%K7nGNf}ʀ^ɓ'~MMMjkk ӦMKGEEsf1a„aر&RXX$±c )xyy92's ӧO>aSSSNncɕɓ'LѣD4&M2}0sL4 ?sI1cF*++|I2dر̙3<(((iII ?~<TTT`Xt)@b>ψ^]]=Nrss?~<>ߢdO(1qD Q HL͘Ȉzx1csA㱿qyyy8iӦ%JŲe˘;w>0'cIIIr<$t;YVA㱶6P>s̤,k; ??d (sss2e ,^8ٞlHDž &-Z&ϟ?Lzz:555kaԩɶ'Nc&wAAAI= %%InGy$Yjkk}0}rEE999Iqqq:K>###9V+/fΜ9z 㠦&9'&ƍK G|6^Ң?3FAף:9es?obLDx6ffQ43dddNHONxGcrߔ^YeN,grȜO:=MK Jk!GqeW4iiib\RbR5 Hzp8֭[blݺVΝ; ޽[tguf-NMwqIXk%SF c6|Q%E㩞PDvJ}է#j[ SJz0l\.1ݦd|AY RgN>}^\e?׿(VU5ѿ).#;$_)_f}^I!##CXP{RoDn5YCkiZTԩSQ*zZ-'O&2k,"fb֬YԠT*)//H(U|?<6MdSNŽrrN IDATY=  {'c$j5?)g 7ܐs!33OӢΝ+)(--mbŊaZ fvh4կK$pSLIMT?w}IJJJ{E}s3)SST<㢃ŋ'ebHOOgŊ.]z '3j(ZI}_44{l.]*F\R `Q66;Ct[?pr$)?/(a,#YkG22W U Fuu5 Յ``֭̚5cPTb1|>_2͛Y~_ %/mQRp+Y ~#Kό,aVhr3Hݣu  Ճ,N-[شiu:сBnh,E"@(Z$ynvH*Jl Ķh$8?q'ʹjъ~Dt_HC{R(\kbąA/Je2Xk:EHdm~{6IAKk2222RѺ{̓LJ#v8|H6GCa9Ė9,+bIf8NbHFC rx|5GXБV巿˗'3!??|;nd]1TUU#x'E^/^,Izx駇|9'r֊J?dg1L\T*oE˖- '''|R'3cNJe.}_ 7t+Wejy$M|ӟ;ep8$Kop su"_e=o}Q/?29`&/ҹ%w($#s~8YҘ:u*N̆ ={Aߏd2 8v7nI ޏ21rVp!K/}d)\}}}aBH sшȷO>U8?_Sy ׾9)Eѭ @8FTVfB&IPFFFFFFFbG,#''ՊJ\<wT21?Ĭح>ϗ{ĿLb_၉12W1u3m4b;w&hZ-n4 z"y歷tZ-O?4ԧņ_dw}WT{X}k,Y֭[ijje7uTfϞsQv?яNkkmnFf3/t:yEt̝;Ν;m#_җx뭷صk()Sp5ӟTݏc~ӟ.=ڵkE٩T*~|px/_N[[orrrxG,kײm۶aی7*y=|;ߡ^ݭJqq1?φmhx׹DI?͋/8lҥKկ~%-HlYjׯm;RdWbd9j>[j 'o/mUT0;;3?2Cl6G4ا$scynsnAk—­~#m bI"#s%pޤ*ZmR}t:̜99!p>CY ~V-`0$zU*III.6h4hZIIL:BA0ݞ?D '&9~HII! ~pTt:ѾJ1 5 _A٤* VK ݞj󉚄uVEn#I밿,D1ggkgoko᫅ܕͯsxQ|v|m{sC\=r{2GQ MQQ{ė]0Ut;ƋO/"Ä2W3,8N֬Yfcĉf.\oڴX,ѣG6xADL\ܛ"s:PXP ?K HDrPHR[ }LHy@W4#df}>momm7D \\\̒%K$__5JݢExEh4^xI>s7IKKWM&\ۏEzR<^'c/Q{~s79,dWQ@\| \bI5%^1owu{z~=#?z̏`'?FF|D#ä23/eJ9Չ*;;[p~G":;;ijjtD"U3V/_K/c(D+TBEQ/τ"RgAˈ$- ˅VMm* "Fǎb|ah?7yY42W+bQhR[E&M}:8 6јB^$ '_M --+6J %|>6Rq A IC{R H$";vvvUpDD0 de _@u!Gp$J$_K#AIL=YIqOaDP9L"\q9賶c(M㡶;o1=^NQ*#GFFr>'jԁ>TsXc72?bf2Wr6NgMg]3+5QFm߾]Ҋ]`߾}VZZZ$X曢U$׊F ׋eK%쵵I*GoHIK 8?D;${<|Mv6lbÌaʞEJ(&JnڴI$?~mɫJ!OX/PDl>23 bSo.tq~9=P(l0Ӻߔܮ<.5 BE<c͏R" ( >5/v'>W~ܖ} #kA!6mgt0U?|yr.n|;f{Ȍ$r`}5PGA@%5 9th;c-Y}A6\q3?SJ#ǎdx$m wm'U $z" z*C!2I._@+7oԞz8,u?|xdWzĐRJTǗچ; l6?8D{J%>k v٨o6&sDcJ<͛'d̘1nMZ{$7Hmm(*:x?˗/)$[aqu21[lc ^E)!] iJH9wҔJ6!F_dž\35 JA5crj<(?O<(w,&Kor"&bgYp<-"O<Os5[ATx^޽$٘٬ #v\Ky2OF+P \ill4o>vR.}.li⏥Qvfd` Wֱ!BE̪,!+VٰY̞;BU;}[r.⺟QB*+òb߈:rxbzЊ*8*Tc__[nm'U-\ I*5`[Nm{{h~DIt:%RRt R3X~q޽&?Y,o0" QF>.is.#֮]+NjH\VށDA/=HTXփ:ƼǑ<ڈtH?ȈC)8MJ=B P(ADHU-q@cx U :;['07VLNg1Y=}mtZ̆-5S`ty>F4x*+:V[l8%jg]KG?>ԧ,*zY02d.W'*\ȁn|ΛMOW͋*3nm%ZXKF:S̙RD*=Y(+ƨ)g=NQE-GZd"TB Y}$\g>m`=k,N轡vsC]EE k PRR;#;L4 Nǖ-[DVYlӟDv;@ *Eo>)++㭷e'zRd8k̙njk套^e-G (C!cVVlڴIt{> ɪ)Sp8D%ST\_͟?+*5TWW{j `ɒ%ٳG:\SzqwoJ.41̭ vH9yZf( 4CAH (@%m xCVDz ͬ~-5_<38R0u@S0h}%#|k0o6?ٌE'jS@',;w"_xU/J+:f@622*r`=ORG"[`+ ˳>QeI;;_Ň"Y9QZ7m8V7KkzK^8?3sdk>ORh4*i,H%e\lRSQ+o4B!Rp~DRHD|fp8,)Y V$Ic ~^ Yw|x!H$"9y-bCAx^ђX,&^r$?W`W9iY]9L"k7Y222|],Ns'V+ICG#'׍O>16QC`tQn9V"LՇTS3ɱB;:s([1SG1|^7^JCQa!jeޞ.<^}(S8>Ϝe0\ZTL!%%HԃO URRB[[$$Z9dc՚L"FAFT {ƌRUUUUI&ڊ㡴Ĭkqq15QFb`p0g64izJb̙6mw}1c`<L0T J_㺰0~?dddPRR@jj*&L %%%YVR]]M,W^aƌZSNf2Ѩ0fB5| )-Mȷ, 'N&&O^q̘1ɄZ%?7n0x<dh4O +TWW'gUVV&ω'&&%' +++v=Yw<|>֯_R9h555y0̞=;ysǙ7o^fΜUUUĉכ u}/lقNcD6\B… dmmmrL>=)]MN?>y?3fL:O^#;ܕMwfh`2 ;_ {€5kzwq4&g?o3s1K? > .]|;Z_-jnyHSeL{d#{hk9Ρ|A}+ JRr'y o?uk耛xECQQQq~Hjj*===)1ޅdVzq5yǷUq8=HXI0|HYB PRPdI,;,k\8_EqlR\9G:W>25A T^ør /]f 7tް$ko  6u hmZL&)SP__rxx83f`ʕƎKQQٔ wuL5 ѨV妛ngkkd2b!++ ݮ(}vosRRÇWtR֬Y8<)) Ѩ8UVs뭷( AC޴u:M[[ӦM:;;tf"uZ, %%%#|04۩'Gw}D8PD=|Fm !#?уGٿ?cDk9o{Ρ"xyXs>ÇwR*!((S.oo:Vʔ)S:r{KjjjG84 g&WBBBN}o^:r˕0uTϛsJٳ6lXGfsj%3#׿u+eΜ9~LKKȫ-jEcrԨQ?&#|\)'OZ .:Bv3p8Nn79Qh4Z CL̖LxV6dp *&9bmL`V%'|K/u9CgDh~#ʁY֮%jd U{xF#l۶M]tt4ʹ( !%%("mVT]8** WqvvvP TfS}ÁIMMe߾}첲8t*AAAf***٩T*FɦMxYOCC^,nݪSVkz~2>>ޯ#G$77W/&&8kZ knnV9t$''է}Ȑ!477+Z$Ih4T*kV09: 醍w~I֯(1Z2 g[(Xad8-<ða2d*n'4oྈLztM: 7@П 31Dpp0Gk5Z]O5:, ;`Q12ǓP qqYz_ d2xx?J9rdGjG jq,ȓ:=&?j( _z199g˫a4;Z@)%33Uo +ێxU*]v_z}Gk,dggu z_f/q1?4?b!2OYQ׳Kzp ` KIUvE!prp:o?ŖnÖn#4/Q h͞9s&yyz:Çw -qqq3zOgTUU)JlV\1[pWo߾^|^L%99EhcŞX&N8L~TTT(.bQR+8pnw{}=ZٳUd=KcccmTrUWQYY8,Ȑ!$%%){FÍ7hllT9X,L0Ǐ+ `ƌlݺU&Zduj(ۂ(lXCl_{#Cޘ^Fv_/F70'C׻Am޻^|_D(jϋ&2? ^G6ٰ"xD̈QG-[v o _a%%%*_F6Q5 {l !%l6fU8ѷoV<ɓ+Re80a]vt:+Vjfggh>`ѢE*KKKkQll2y#h4Xw6d̙~v`ٲejy L>ݯ~'NW_F3( 0uTE6\q>|_@p1tc_XA懯q(KfA{,Gn6؁!V<#Zݫ^ 1ÇSQQqQ+ P:ʭ: LQG kD(xG..aQft\ VFe>:{^?v)4rH$(((kQ kdFwoOdBQ4 S>8C{'(.\_u ~*x}=6m999KJJSL~(D C=^ 66֯.2v7|Sq5[n9s(/>>^<رcdeeq75[oEZZb|PN>*ҥKDEEq}) geʔ)~ RWg Оd Cvy e̙`Z1R\\̰aطocƌCW_RHUpF/*roc$ ?дj@(qhbVX=G׬#`5SCN5Ł]Zj!!rE6WZ$EQWQDDD(xψPp@+T*\Сp1  JlNnn.$p8nؼy38Nf3;wf4@0:Lec 2rوoЅ^_$sjcމfAz,%j YgS*mqS5qZӞ{~iN*ҕ(7I9'Ž[M7Uӫ:Q;е{ȋ+k-E5͔$^\.Cy_]?KKw-z@p2~I^w/3Սp[07,\XwUn7h4B8xsEEP{$nb5r:t~8Vpp\CTwȩktIdUOYs:Bk'v CCh<;oWdIsV3vav0 c-Bkk&ݗ5ǖԀ+YVx1 3=$$u <35::P"""hnna"Bѩ%kpqI Fs*++/y}Y{dGA( A`n. #Evz^{|PQe(--eKNNgUdc矓nL27xC/{78'+ ?V4`W^TK|-P]]͚5kzm>@{uz>1c0k,^{5Ev/:g?4͛GTTiZ^u~aEz+]V|<ӊ|A6o޽{{m3vXf̘o~?fϞMRR^mt:oyx444W{}3тN7o%%%wlfܸqN'ĉ Q<Ş={>?>ŊKOOp+ b̘1~Wd`P4^ؽ{f͢Z| }@ 8jǨ8[+$< eI=|`7c`) +~ (,,ўo\E)ד1scl= @ ]m$POs2X^5!AJX˲ܯ=o*D*.eω7b09N~i^O>į*꫊444e/+qF:Ny>t."vwQlK/)N8$I駟VrJ_WWW/+xwe |m۶vSOUrժU~Y7hZ,KGJ] Z  w.d24yέ_٪Vy$SvүA}!K.l-%ʧx/)jyfl*l6Ǐk.I僞+%7n|"˲_ ^l6_I%6mB իW5ߡC}} N#**?Fr5fS>g @ҹ z fm}-]Pp@ AX, Q-tJc-ٿ}{@p5oxA &BX @  F#hD=[dX Ճ1%Ë 0l=M||sȻGx+ >rqQ;n>CHDEE C]]i Yinn0rAWdYF$im/SV$IȲ|4. ZbpbZMJJBUDF:9O`4Q=4|f D3Fz=^Z&!2fcKDSS_TƍAk@  xv_+$t: Cш@F͆V%!!ap"##/2-&u3r"aH@ Ss@[_}lj' BaX:کvGCC$uֱN'DGGƴiD2@ @}nB/#`i%|`0)΍2\ IDATg.} oXddFc`&>@,oV@ zJE{d/rZ-.V NG[[Ae *YlR # X*΋l@ # *P:)A^֐dUN@ \m |∊n~7{"+ "IR*j:º@  I99GcrUq$S_! L'# &*NXa ?0Dlp2 Qt8e tԷD`ph,$7t2RT[)9cUrni2܍ǡwlֱ0_ωwvv6 :R}zU* @!TO]q[exY?:ފƀ +cG/Iu$-ߛz/.emrŽ'7}B"Kji |&f\B.O1Řo_ǹiH Ǩ(<*t_e_B5˘7*x6M!߼{/atFfIc!tiI7eT*֥ #-CeY\1kSDŽEFoN`9,DOc ژdҢ7S4̾..U]yn焌JTȨT*dy!lYMľo)^*g^Q\pw*JhaݏLeY$?(Isb22:$Kp]8t9Y@3!NFti$T-mv;G xn,aPXDSG}%TT_%1QX(j@Ύ'&.;uLhFK#B.dky &"B1ejᩙ^2OgT-{^_A,F*hn 뇎UOR Og„ @#E{SWx@jزo@#HMMt;w^ |ƥ^Ml>,w_"fԳf~ ˃2Sa-rf{w/6""BiΫG\9Xm@'44f+nw "2&2"ބ\+dvpAwEqMOÕiܳBYɈZ-coxVMXr-/+d(!31ܹ^ zAjk0cl+kI-i95 jǃ,^Ȓ%KHLLr`ikk]JBR˖ӧOgҤIm۶M~FFF]w]7n#l-Nq+p{ތ&8hj2X8~t4:,fH,,*%.! G[+d$*9k㢬XZVIhJ,Fш]˥%,6M ,闰`V|j?gvSY]>*P:\N¤qbi}3/cՋ{f?B/S؄K %<"]FM[cPfLzDLx/csR|hni#-6MA >D*ZϏ><)O-N#!FzUFK/%..練w^6nHnnny+jZZmjXMMX'kiin*MkHCĀcG?_'Qh].O&T*TjM{W̫T՚K PÒlRvi&yjms_y$Ѐf\| AO }2U1G4[+$< eI=|hm^1dXAe9ֲ9YP唰$/Xw6Rjy{n/ծz44D"yw,c,"Nv?$e o+Dui lmX%.`>+nΙMlt/7׹{E& }DNn2'YGࠤ;eyBW/><7a-4N m46tm5*(ʹwܔj _ P_وBu is o``2rtv~L[[F2‘:==+Vw 6vqOd"((q Da%jzrwRN,X:yepk ;jqǷ7s-Bܩm׈ @ :!IN^ ш@lzZjtzcʾ*YBs1IQ;@eX,$$$(6l=9/2|~muUWW#I_|3eeO0]--[`ٰX,Bbb":I*o*<ןy0D- 6T*ՀXN{N\Ku ݢF\z.47\@X̆%*թk@ bTVqY2O>Lq!!<ٵ:tSQi UPiS /+'Nc̘1,\Чw\Vs /t.o y#g kG"q?ܷ!k11=+h0 Ɛ>* PuKސpq@ [µw^_ºv]سg/f}###3gYVT$%%Nhh(K:??j?^oNjj*j;wk/lfȑDDD`4ijjѣhJVV uf 88Yinns $%%aXlՑ۩}w7}zh"**Pt:6#Wk+ꏨ{=#"& Q3kꙡLh/^'\$@ /Gdz<>$Ib…];w.k׮p|_z=gf̙>Dz,sSVVZ7RUo;dʔ){gikk#=T^kQQܓX3f {/z}׈&^up.=[[[yᇉ`ҥL8g|>C;Wi䪫bȑ]Yٱc~S3y1tn766a֮](966+ &`0<͛Op:>P_}#Ѹ8JƎ;Z$<{@o vSvތfEeR3m[h C \kYFE%p@ Y|kt/ 62~gRIKKtd21zhveQF|rûoAR>|8O=>Ewg' 8^SSáC[՝5k7|+++yz^WWW3n8.bː!Cx'xW9z(Z뮻svITTL<$^|u\\~;C 9 cɒ%̘1?=zZ--b=\3̛7l^{5Wcc :믿YfFa̘1a> V^l#oc?5}D^1iMXGe7{w?32,= VOSA@ >›c-2IlsC\[jzllu M+a,[b- {hYk|驛9<NN9\шbֶ:-tS'NA$UV|onjӥڂ x衇zէ; )U*K.[o)yZQQQXGQEqwc07o^s曻}~ԨQ<䓽է#VKh춀یH`w=nvng]W,?/lm V\ B:5$kɈ xd#gNUUOiA=;Z(9;y۲3#Ghi:jܟ=ʲ vCe ,9~ͥK_蔔N"~…\_Veɒ%]nt^DIزe aaah]j|{Vٳ?O\*0 {O'ygUd7ydV\I]]]cǎeŊhZy:Wt.лdWY ͶoVQIzյ8lmYH@~V0M,6[[@pQjIϕ,֨AU*t zF:)XmԗPvjϾ"O 1!KeJڼ;|]L%{D±R +*F^ݗחQ?d1<y$'_nˍ%cWHާ_:WMg 8lܼK>cFnUh'6{> &ع@ޘĜӈ?@?| 7_rsTTTaÆu1e=fh4Űa:ȲLddd^ۊ hnnaÆ\j2}vZ(Vzۇj%33QF eܹ]^FM]#$@-ˀqbO@e$K&h9'vCRa2e;çx+..k\w}݆{=ym;#$&N'<$&&v9Ge>cn<ޱW\ɗ_~)wܹtMݎv裏ظq#Ej5sί]Vs= A/,,o[}h4̜9nk>|893fuֱr.?#.r.]͒ӅY=zts<}k׮WwAFFF*Eu9p!-aP8*Y,;*e "ay$f!bKfkGjf2ۭ8d?$1}Ʌ|'Wd1Vd 8Xk@ `gE iwc"o^BAwuK0iGݬPڅ:v<"k&rO'5YFhe'5̟>RI)DTrV@"` J#&6ѣi.f?JB$u] 6y<?I&eeTӐLL7|' #GQ%Ibݺu466r}uSLK,)?C֭[wWFVs<{CEsUWuyr[o~K<]B͇NtttyjG#[Q5_̙L|q>DF'괌+DJt j),Tلe\[r7^ _?Լ'lX`/p}y( /f{pZ(]V fQe?o`ģw0wMBk@ %^ov\WOyI$ckUS|0Su&4  dwxe[m @y uH7gL[lt#$ jO&@2;[(. b~HbO=>{rjj햑uRTȑ*vNZlT:%r7ty?qK|p{>7YFv+ R's˝sA|z-x뭷^*++YfOu6a_|̏cZ[[y7ZltΧkʧ^vmQ%Df;UW4ٳ0f̘NG @rrϐ͛7w+OgL>NJ^zizhD?O}.vڳ1cC&Rp,]CM18ݿ#'PJ'(᪑<(aI&4m]=͵F * Df\qKs?,2AA> IDATA>+;X֮kݻ} kWїvw^:o~Cyyy 5kh[x/Q>[ZZ*ֳjժsۻH Ǐrbʕw^ϟe7|U"$nCϤ阯i!/ ?7k?dL_=L1@{̆9ՀYuM{+_EIy1 ZҘ2f"''ҡ%JJJH%!X%=U4>̾5E "h0@ eTM}ZC.kɣS0*㇭JTfȼ[g^#X }BN92|CG~4 Y7wRpqw3ܣ2-Ӽ29m[q\{4^ʁݵ=)ZH/#KN5WW=# x=EfZWaZWWSȲ{G>.**g/a opSSS/W3Z>|G;_U z13 8Y>͖-[z\Y󔃃}:|0]w}VW>i4s{Co[](dYFTϰ?@U/!q bj i=ckr UT_9DGwU`"1iЪP"tAـA h-ۜ4y6ɤ$j)Z-0Ocm] hM@: @  :U[!߬ZɉP'EJCրVwmWکw#upao$DZ^v$-[?7opa]J86jnePW3M8*pRIeyǎ{N8qR] +?ǃHI(U+%)?w%WJɕ PqVO88сZul+续y)n~dnOhWgm1 MOxR2N CH6C[Xy?9so!'0}==@ OJ{[<#]oCDuI'V֒3-8n TVcgx)UfV[۷gvhKY67uK+su>HKKr["""Vl6fK(/t/ ޵kϨjn0{U>p{Lf23)J ! ޫ EA]wu-,} ۮ+vł(Jޥw{Ls@& y|{=wN缇O4^}2:AxxxХ .)lɬ׷nKK]=?NQ8]N %Ĕoɼ>j2pdm0ٯrl7 ]ߒ~7Cl7LgBCl|:{ {z]ކ٨CSe j% ɨ ۯY}dBkc2P@#7c\]==̤2AA85 Z-NIC`rً(R*ު ~7,.DKC۶GTT'Nl]QvARRRӒ` U55{^|Mٳq?[o):.h .555Z=zhrv6!6p=UVu(Lvv)SikY@Ci}aȺ^|#N(, 򤶊!ұ=Q}1o Cc7;%42IԗP$cֵ iݣ1CNѐObPNOdC\  iE;wahB+HԪZ,YSHԏ ߏsHOqA7bۃf;ǹl[CR[---yWyᇱZ/֯_?fΜޡ~7ts[uKʂqMմ:xkǴD2rfaۛe[[n,X_͡nx[J~zrrr}M{DoȻl.E/ ǟپ8fi<"Wc1DOܳ gwEeAo ,&pTV0),#:}trss[4ޖʆs$X[UUfv5խ[75|ҤIA~7,sUXXHllq?0`yљ3g}p 6@ nзos2h4H(66R-+ɺ8NO , XyPs XcDݬ6A3hL8C&|bMiiu;UU;@AZhsu[^z sKmj FСC9sf/_N]]FܠfϞ?V0nV3m' Lnnn.s=nI;w.O>dð{^|޶29_>lkVٳy뭷ZmgϞ̜9Zn g t5j6lhÇ3bĈ?kxo=ͦ L4uֵY}<55)˨>6 k, fpқQ3FG/4&.Y<7-ooJeضaICFUxZNۼs$I`0:F:|^A8gOMբ( v4;Hb6`št:z= "##IMM%--Qyyy,Zq.d 2222Yp!>_/yAzƺ"\ T7nH׮] n0;y'::϶'{F ޞX[yԨQx^>fs5 &L`֬YAB}嗍-[0{f]x<~fKĉ+^n?u߱cGl6s}k߬ fS2e~-ŋ{"2Zݎ(2mj!+9zýTo>dm 05mrȵ-j^łA)j0dC֧.jzȲ("s} <Ol B{,r栕;<}ѓ:wuu5O?qYXIo|xO|VZԩS=艏Gȑ#`۱X,$&&ңGQF1|p֭[ǒ%K?h4Ƃsw1t<=/G%^=:s:[x?s)44IN2bv9DiQSSCl#rOL&SωRRR:4Cnn.֭ Zj2}KUU*++$%NU,X~9 3/e6lX5M&Ço< y7-bA +hq֜|!$IٳY`dYfȑ] >UawΚGQ;YlූS, ?OuqXA[m6{V Gеkmٚ\[[#222Cݖ`tmv^~e?4 /rssu9-Y=Ou]. <@Ȝ,X H o]wա^EQ{˖-ͼn_$778h]q뗒yԥv!Gki#تOVmtN~v%^pÍAԝj`صk?< ,h#++'l޼Zú9l~n]$͛4{"4x2s\K`C׋x':\d^xV90(V0BRRUCrr2bu$tSUHC{K4cmZGhj1 po9ւ E EE=6L$%%n$I@dd$~:$3fQQQhtb(**:z=z"** Ʉ餬Cujq1͘L&^/uuu_zIUǐyx:x1RWWW(Jbzbѧ6Œ@w -iyXY%~"7/|%ޝ@1"hK؂5cDj</-wItC> pUU!''twE8AeeeK ݻꌇT֝z]Cףj??5>.11|cNt]Hu1s eH`u׼&s]3``o>sn@H/7y)eIgwV${\XN?p [wџ  pxܤ|!鴶r.x$ ÝN"֑8rnxpAHKwT:7%x5zHb#bbe\ vJDuQ??$ ÑUD&јChR[T@YOC #&ڂlB+ тlaB\uR^TSo%1V O]AkCi4r)FI2,Q2kΧUN݈3vSIi}1ؐKEhdTYzʤ Ny d4[ dc+,ҭ%k7%eWh8$ $j^[XpQSES)6nQMp425D JIFր4*7%I|ԕSVi%Y!&2,KHd,au٨(,š P!g  Ŕŀ'S6z*G >Ss;?T‡vx5<`l:Xk#m+Y>(ڱL;)0v!},~5 >\DH2=w2zq+. `ϲqRzYo`>5YLbx$ eʒތb.W-8J Y~)*G&j p~5Fe(Z Ro>ΫYS2]4`<hu[c/.3Rb*^AE+co -/z&O_+?p('%0Dz{ ;'p0|ׯd)"mTwYiG}\"_^uݿ(dS=|C\_~}x I/$sN}7?/hT=ѩ&+OM .b6NcRSzqӮ+`T<|1^jdDx/=)M$9Blx8^of GLr>_;dN@TtRI &X\ԓ3gs䞄jjwbl_Jgv6 ƹ Ż,\|u^(wgA'юOs;o:~j7zO=viܿN$Szv))73,,kjSWZkx`H7Vz-!z,wo˩|? oO|Vz|ɠCqٝ GOi=̘ܽ5! ك%|t+1&c$\{1_&틮M?#ɚֿ [U_5 OI|~%n2oWNi7f/*OD(\o:`[ܮ%@ DžCŖ_lgͪ<>s:~1Vz{9jz1'PK䈤=>Э!; *Ew #Y%KIVSs07Z@AE RZ {el J*G{:g9GG̽>+ 1o)=2̟}1.__ʭsycdmz{ƯzOV,ɭ 1d~Wpu Yza,!kI\?{}]75>9w?kJƨ ̼"*ܯi ej_12 +A- _E_](Rӻ2\^ ؛,_ŊMWI1XCEPGwR>6,?uUTͦ@}j$$!>i΄c^X8>.ʦ,?{cj˵_(kGsdlRn!Tу?h5g&4-e7c  IDAT~T A) hu2Z HJ@Q#z='onrtQiOvurp-=qkQei=_?~цI}5WA3#$$Rl20p EZ.cGt۽}WIy:#D~ E,~aQΝ. 2z$=ƒbB7 Wb<!]A dbue [_'şCj. 9g}q1ՏhnH2#& wzwHYW761]5(hZ(f%31n5zpi%:&0wFLY3߱'d W]1H3&q.#{dw,#oJOrw{ȳ^ݷ8 l[RSafd}H Ñ&,FΛ0$i-Ru¬J9%Hs>2d' 5"/(XӤazLEfM_Iő-8ҳdt݃=`$DAVӅ)c:j*! 3h4|N]l!I/n]A)\.jMc?5+' ͖4:-:Ə`@%!sz$ 5> WVYRWBQL;N|+챢UAU;*=EV~?ysԯo]~b*v{C# Y,V/<\B (TTԀ⬢j?( y֓W7'@+mcky PC`/srm7̧AV~&o*Vp[^BAin!  /NIQU6|KԮ μ @9i^S[h:KHW=TTTìoBl$'3s b~HײTc7k m|rlZi›C{zd xlSxlNѻbYgۻ[Jkg0 `Ú+`o/^߾+=0W<4uT]ȝ yyafnk¢butiP~.w@u|*1tWv*z͙!U-y[Y'jn7O# h޶p#5 ~hz|w>ϵއW?MV n_?1'sv @=s -RKFF姻;g<@JJ233O/Mm^n OG Ψ^3 dYD OT@)ʔl`K{̻&b}7_N󟺊Z;Fн{_ԼrA~Nw7Jhe̾ E߹׾fOZY5t5os(~mRUhJSx=ǗR/Lb ? (dշgJ!{׼vTT6UUzx<R x۬@i2<yw2n^˳>^G28i<'! ~ j$臨@ NO׿CuAN$IXݍ 44r"gUUvysβUqtEv-yXU'־sIWeY_;((h4"IOk4q Et)0DEE5xPWWGeeXmg拌hރԎܩ$u8~_|G?]@ѭЩ^_7  g[I9R@US+W1a0O|o%JS0kd*M(tHHI"> %K#.{o+!IL,_B Fg~ěhGZߑCyųuS hBZՀ҇}.v؜#5LgxC[vYRK d"VrxflȉtW v}3W|'Kױ7vQ:De˲T@xo.C)݋xK28jb5(Cx,C$Qf=Jt@Fv*uW9rb/!o5.<ľ)j;NPfYla~u@/Fg_n9:o5"_K orD@SS蹢k_Ħ:@qȦ NPőBNb"<)p\6zWְh(]1o譃>2~)J%4.Vg ^Q>B( ^g>ۿAITH{ҳK ;8q3lj߅{Cfu=->j3ߎOyin\C GCD$z=ڴ.\|}rZ<]{V$YEOmƂZAA8ID#A*pRJީL*tzB4:tpmFUQcpF{GҸ+3FǭMa@b.E YYCbbD)$l bt4S|`~ӸqּZ=osl6TU%**p$IBedY&22Yi/,, Ijoaoa|]/ecW<@ ?ʘ$Hم *#iIBh84kAp%]>?{ɯQUט ^әt v}EkgV rccmP p8ݭ7f_x(\&O8?֞?5Kl֢uVQYHpnS6jpt1 GU,H~#}S[B D}yJAhAՂq#7DQya!~{o20 Q 3KRX;ռmKcJF9s}5Tw2bά$~N.e|Wl7L9#~8:bYwgs= qIOjhZf3ȲFt:hZ\B%/up=a@o942LEJ>5bkD$-:Np"1nJde+ב "z0f4%.{Rbݹ&~|vgmŜWz\m2!1 @}9JyXzMM|[AM5F%ZA҂Vд'W~1g\ǐ[ۙa$ L?Gٿ%^?}5 I>K"]lx 1q )2qOO bɸx |񊄪f, |Kh65g=Q(`菖S{\ 1ѱ$uA'R1PLɲ?ۗ/czܽFĨA mb9;x7' Gh w+n[sfc5nl6,7!kAAg@%8CpN26֥7&Qy+^^6nItqb^; X̞ɑrKh:_jݏGvQTWwt$PN'v1ȲL]]Fǃl>qDGWpP4 =?غawߔFoW؅XG$}8&4H¨)h#-XV](ӅѢ Og$xߒs g4J(C NLW*\;)#WH^ZlASAy)vs/ױrGn] ߈d 9kR[m|-C7쥯oJg̬L:>y{8*Ȥ X ȚmY,Iu*c(>4WQ|@ġ+')K0lD`-  {<:?HNi`1~s[fK2 ~1*PFFc$,H2#0㺻o|54dRZ2v{}l6ch4CCC k!IGXK;x? e&ˁU_"e?[J)wi_|V;Q0ýWۄ:|7ʈAiŃ3w)M4m]S}Aoʷi"RRUTP%1=]]1EUE6DFaʣ/҄AIɘW&|2䊊Iz rX;c>ȸ])Sn^{_owP0^>z$s #>*<Ts ]` G_SEyv~M\p)H vKZXJkp4rd8zsٱtf_WfB977^_MIᒌ?fEor}z)W[pYZ}䎩q[o'q^PYulQvy. Fz)"c㶀 *>qB@kQffvr|$?WC}?_?g,rU6bux'5k*nU旒sY6ƃr J =Ç;K(+$gKc)vOYYp` V̘u '8߾%8~TBٵM ʰj~}~Emk+V`GaEg oZ} ;bOfniP HWeYne   (K/kՓY΋heS`K%., y 9,Z=3ۑvsyX0 [mjO$vj\AA~J jZ*!)#;%wq˸$bBA '1Kr "$lgFٌQ5;"2ւ   /y};=9..OFւ   /U_.Ǟ1U?~0   p ^]u͒Sjq(    RFIHi{Hobh   pn C(5j[]8`BE+k IENDB`DataLab-1.0.2/doc/images/DataLab-banner.png000066400000000000000000000411051511411446000202530ustar00rootroot00000000000000PNG  IHDRlkS pHYsRRDtEXtSoftwarewww.inkscape.org< IDATxw|SU{I^(콧 [P(BQy {[J[J۴i&iGhiI)zOͽ<6<$Q @@@@@4M@@@@(lDz@k2\qT؁^0R7%f u(,TiÀ@H(& h-K;/TjGI/#!kI1md872| & p$vDNbmVBϏsc;L_(q΢+왕f7wyzCeXxmr$+Qɋ I L{URM/w'Vƽ|Jq.;'pնa[n^F%JTOG/H8n&vHgN=)le]yt=.$͔Aϣ8r#E짻bP#Iv-h `2I䧳(כ:L"Oǀn^8}-}w_)aW^7]F|ZQw<6apx)W|HkG@@@(ŽjrJ:o?14F>*^ %kr YJѐX8y-?nIߓI$ g􀿇h9[3HG(gkz}.>b]'ꅅ/y vncQ 9z[;i9@!b+}п(d·N.C?ND4w-a?nS25gP)d,z Mh>U/ŧ4}h04ÀDȂ҂" ΥoCٍ8J 6]8y~e-1񳱘22Ӳ~ԁ8g*lwޔgo C4 wpUHNNzfu&H0h`yxlKOފq 8}5Lwnؕ⒩.\lvg^Dܞa6cXiTh;["<A{Ù3S3?BtLNnp!f=eeef#"< AA* \ ZJt.8 7oZY^ǥ+Wq3:| ΁(`@@@gA. mQ otАBCG^l!uNa`?pBHQ/4,U3TR8 @(a,<} U<<`G3.#af1Ut_E<ҪS(*5>b#fG@;iTr׿YZ6'▜YNU~yT'xoWRRF![!dBɤ, SsɤpU8εܷ~~ݵ:ޏ,t!S/qt2$|ǡY,wp;M9 bX L]41)2Mv8n/P~U/2.))Q#6]!mFkd8/2؈ESF&<AY J"J@aeH̓]"\G_2:Ǯ[i{Kp _N?;6*nn223mB] oox+AQa0 55 \E.lR1n g0B}܆ΐ}~z/d-W;UXPTY5$ L.heB57B֘:dVhdl=Y!^n~u2pU.R]f  d2 j"]`@Kb A"1k)KKRW#:[a?`w[Z_\ H$,򕫨YLD"APhX,FRr srEefeATLa o U/D0r/{ =WxkiVTz^ɑŧsUZLǦMExGEITrXu %gJoĜTQ}9@n-`yPc(* 6`\>`t E]iQ5 -Ծ*P(I,fC0iYkwpSy3RϮb_啜ޤR\vrMJḖ c us>Wcse)*QNA9R,be=:(T )7M)|'1`Jv_ꕳTVx:Rh}ee,͢bmЍ|yLb$GUN*2F@/w'BWA\M wN IƔteHH/r q9[nr@"狎# aِ_PTgdzedf!gѰ,NSU=ٿ߻'JTW|1@2pQk,,{5/_}N]`Z,uO5Z#r q-.Oh A <,wYl6fɷ|gՁ_!O ڠ Fgyx((?}044Ka檴KwϩD~}~yEZ&S$zLH!&aךPdj:Ud_9 2UeTE[5UjF䪴u@X!B00!).w%扚'gYv85 ;Df]%:e~8t!%x8IK.z&%HQ{41-7oR-0 NnjǷl;O^7UR 2*' -=z}DNbT*`~-X03j苟:v'\ :mF36-v8i ]8O(=;)dS6쎖Xbd uޒp̊= LH+; [mlbxw;4xfž YP2kN^f5aSl8+vVVȀ^ΝP?$4;Pإ2iټݿzõ}"ǧvl+P9nJ^Ta{E._xVgp` iL6K-0~U XC&LXQ+ȩ9jT?F_mzz+'4K<\i L,w'rJܜM5"UTZAM-Ci' r VtV֘|c|[J~{<8|@|>D .nVYezjjv)kh-+)=}=/ PEix62&N=LBD {u4*بj=Z|=Bػ"RLrҪ{BZe,=*kFfz~ۆ1~UktFgo`kV @"a3흨IhLztm^Kc[,SBCe 2ߪIeR mj7 ~ZIK\&ft~6[<"POVH$?aP{cCN@J2}V-c?s1p8Kr3ۯBT\.Hs:pS0MeM= +t_)3[hxa?JZs90(x%8Ax}rZ5Z#A0L&ѵKd:xBC`X^^ZL +M\^q'.1aOJ֧j[a~ҁNi,}XP.tZl2GSPpt[[:֓;=g4{٣EY=UـWtOJ/{\ShK s_QY}< ;˫icPAc8v$Μ=PU?L9-̭汻B4!4>hkA:M+ ; q-;6Lf3cu ydW/^s:ʄr1,u3{_%x:*ɘ Ҋ(|r Qq5_f eG#/Fg[ҮL>н۰K{]e|el9p[F쓏5 G á8~ix36[]Eba E]=6V%2iotL4UZlxO(ɬ.޽0qxxx[{?DjZT.vp%i!Z8Ʌ2]9g7ӹƊ =Dcʀ }5"esVgKqƾRКLoeM)vd3iX؈ >z^ozi7ye:Cgw P֚ Fr!t/eOU@D %wzf1pYFGqY6]뤭6 Y- >vwim/әL=?t!A^QD"55 7oEbqU^`* ^l,&V2\5 ҿD~2s&zA<:=!HJJ4FAWMRX\1Cwj>&].x֑y;GP Gǵz}`N.1HrdG.=CA.5v(G/kحWr|TG= C>{F(L>8z`pvm6`;Ej6}yQl4YƗP\V޽z<<1aDv^NcϾPlҕtopMk) [oRjk/TۨhT2w8C_9SIASH)Z7tKQ >sF 9Ӻ';mg}ϣ%H$5C;Hqd/M*pJE&6v}@W6~Q*l g 4\s!-օt:}!\.׮_AjZz7L8}fwmsU>5]-Ei-;5WWbwF}BKcRȸ}0tUCJG\b8/[?/׿B\%܋pbB~զHɂ"c0IqwN|wBb&XY\\۱wj٩BJ]lģka0jeAQ[_ͫe?jYLj-v+!&HsmcrrϥT4J\|]9@ʎ \lڋ\̌g?nu@ޭ۫΋dBƕPa0$Ų@P {IH+:Q:sk6iO"`A9YFNyY&Vg"ΤSE¤QXih+SrRȭIotc~ *,ZFM{|hO (򓝣Us'H5dˎb¸qٽH$.]{ /JUT.Ю"IaZ7ӍA=$ G::PWуfk%lwFA&A4VV3AdktcO3*SMXydᗖ 3ش'FBPC0jpDBa߻q'.:K)`.URX~#>U&Կķ,}w$m !9bilbbu{B#-G>Ơe5 =k+Ll5ևlu1UZ؎h1* fךi XLl9t^q7r* f,]F3^qcFLF"'7ol7߸ P8c%7>UPE/OfS3t\%:TV cwJ#/L\$- z%`<7\K Yք{ &^~Gb2;FLfQNkWZaEib>4*šq]Aݽ۶l"r >tFF8um͆Sg΢ /JSo{oʜ5a`@`c}׸ {+&  S[dgiD16BJVYA6x64:ST[E%RZnl MUrn$++m5DY;1*f]wdYa¥oHX%nݼ/:!Xp[9UVVБPK?0b?D%S廊hT \@0eN.SsCU>s#=4y)҉+ 0N,lS+)P^\wN s rN\f<父51Ƚ恨6qّw]j _}2|{Ç<˫y~ ITՆK5=1$L!|ȥ%JQ-73sKp5Pkӯ \ά4nvn3LRL㠰-.bN^M]'dI%iFA/=jN.{gۡZ $*>c-Ra`>{c4|Chdas)x `0; cFc6e)O!=tޯo .T )2$s5v\>6bST,v gm^ z["ųcE7FB~g2 1 ˇf4ң@"d9ȥ_Cbf8JRsl]蜔ؙ㒳ϟ5<W7*VFk,)0 ۩SoqB!lvw 8s=/.@LHxbxnF1x/,^\_xAo32 K8s#s_JL1krBafA~/L͗RsJtU$Y3wʈZ竷^sOH+}֫>tn\D+މ%?9̒\qdϧp b$eYRU ;x-KR/_iO]͠N.$RԵ$WS">Õ"Op?\]pCa3y{)[y{nh 'OGRѣ{7f~{+6]IvM>JaaksJ.JZGy TV">SY'&IEDDCf;l$PwzL&Tyu /N,@IY~w+Ou~M0ŭә"LIR?P!:&ȳWnאI2xꢠX;ŴU8 xЕl  M,a1 DA/.ه/֝VUdaʂݸz'};g+%xŦ5/4|9g`|4+}2k[2.ICf*uy˷q$ݥQ ?{ofTbͺK^]RqP7)?Xw޽Sw>|wkwސNTVkMd K-^kNBIRSl>$# G3C|jɏq+}}<6f7u U[CJ[e5cuCI^o3:,D(H)Ŵw_ ¸!p\ فw,-7`{ױniO(2K?|{Gy$ B&a{CSC|\ơ%;ͫ:Ŋ9ˏ\{hlUH쩋1|ttm^}՘5G߈f?Oj{+_9ā;op1;ȫF9r1}Gjz)YJ6k! ݏyxn=^0,jϩ$N>}'^_ٵ3K~y~8q%-md"sJ ;&~S!AQ$}jLfNehV- °Zꍜ< +1Xt+_\YgH'=l +zv`2ݕ'';?V[p-?,a_o䗞{x>όz\8߻y.ˣ\jT:`Iry6jS!@C WWZ^n\W+5ZߓR7/Fg7<.'@ɿye0[sv&p9es˞~qj]ԣ0癮RJ;d ->|D-O`W't?ON&fC=+JtL+S-W}Ե&.|7 )~6X]޶HJ 8pǔL6e!]}Bۮae N,ķvygǽ;0 @r8p ඊ'ip=W:WiѨ~}kC /sN\IC9\6=F#glZ-6lLn w̯N^2mTد> Gv{%z7Xs7ãcSh3 .~zD A"S($@ MbXt&eFFp{lփݳb+}{-8kw'6в/ģ{oȾ֜WRwr3>bҰ9J^MϤP)Y$S5*2Kۏ+2JjF-sj=Dϥdixj"ӏ>csl0,quݷ7L.ѨZRaj4YX:z\l$qW!R󲹃.{GyU8K+VlgSh1!AxsjWl|Z0n^z524 iH2(2?3CR_s6;Pǯou~5u MŤX`Ш(,&?Sr/G8ʁXFM6.aT8F66)ngG n_<]xK5vyz&[oh8e c *pW*mk+>J]=+V0iPH{I̓RkOg]ҽpBs)ª!0fLtB (&5ǯֵ[[%LrhN.\nn7 7 ~/@3ydϣxF6bFU&{)?ɇìybNKռ.K{Nd&M:ؕ4g%_|.Cz痥vz+>!Zva\M4]E~oQX>wN\Iesӵ琖jM$ʓ1oz\24sBq`}æiKFo(*-70KMd asBCү{-2A+'"Jq8虙SrR3 K+8r#D|f0،bʢ7D&!\r@KcIZa`NR1\oYL&AcT y,CW od=LUag!~jrWMOPZ5t*Z#W5R,+Ig>Sֈl5RJU+yO-BKIA}0uD(6^@n\V5^ClrvH++9}`׿]_sY| z<&$|݅uC r.lG盘1& _gvYL*{bp#u"鳱}!ahaXch0)~+7_/Dc݈,t s++/ùYw&/M2?0wQԬS| l;K19 02> ?w_9DX8Za@ ͻpz}qb*,_3BF">/rVFA*eެv;ȱex=Nb dg[ B&BvTcJf<\9T.NݝM`0'LXmScV-xfT8GNa92l> ѯ\L^͆Nr+,!HKӧ7 hAp !K_ݴiM/7>$B6xl:6K+T`61kr$ӊb%$5%ۃQI!t@8l ax//|" >Wyf0kr$fSW3|F`bዽܸdG{Q3 Nţö| L1 ;K@@Y&hlQ ʮ39NK4[q!:ϥ7/|t b a67=bLEz G٧`$T޻b,|\Cq#!UMI"d|5i C螚&e5*yi&iExmR$f]E%Ҋ4lRIB2{gӁ)zC%n%`as:uf`Ƙ4*yQp-6`|;OثS4%[ Ue[JF^vļgaX/ `NP/(BZcIשT*zh݅G iiUUdMЈ"Ɍ:6يq-.SGbuNb]["doG%׷C)SLb! FgjHiO fXߊa8jzs0=\1q{ozּ꽡<,~"Ԭ^hT22\6dp(pN^/v]lt ƼQ}OF M{2%Y<\wIDAT "O6oz\>.F7=D|"d=ŤCda! h%K=`0W!N܅/s  %}9gyJiyQKG%Fɱn:6pKu=8R_=_R+_a~2_2Rgpm& 7C(yc ʕ0UZ&+|"|.ώWa)S|r !v  [5n>{#*LDB"-B`1<P-'@F`=B 1! xL 6c (0+IENDB`DataLab-1.0.2/doc/images/annotations/000077500000000000000000000000001511411446000173465ustar00rootroot00000000000000DataLab-1.0.2/doc/images/annotations/image_annotations1.png000066400000000000000000004251121511411446000236410ustar00rootroot00000000000000PNG  IHDRqsRGBgAMA a pHYs(JIDATx^]ULI&J-P /jx{by?0CWyE (U H/ouO&gfIcfʾgg}Mmڴ)gdEWyxxxxxxxxcU^?z׫<<<<<<<<^*Wyxxxxxxx4wla^7֌U#D3e{zxxxxxxxxվo߾A+G}ݡCm߰ Q_W=ۢq0ͅ ?  l/ꑩM~6:3^$ԣ&֎5+>fE<<<<HA^9&!U͋W9>DUfںu_LCÇPYYY[[k+ޭ9m9k+WIUz8 4=;ve՚q{~ҫ>;Io>۝7__r[Y]2A&ST概%V.^?yGW6;ʗgAT()Nf3eTmYmm"UaM]+ X8Gw/^[WtrGݣ~ժzZtjg\ w>֞My~qrҜ\G>&Vmj0X[[`m۷\:Mukn۶ʶ(/˗-+,yKŌwg.Zp+Vk۶8;vY钥Vv9'''l޼}ACx֭[x 6^ھunzQG!?Skz +4ؗ?wNҦش:q]Wl-+m[>zmt"m [a@ Sss Օ7Ԥl՞3QLs_ *0rq 1SK8Q~)|Ǟ~鹹#F?Zsu׍92??_g";OŃsm ˷mDvc^%A]SMڻgͥE1Yo?BvuUΟ7o .C36_H[@Д<ӣTUUmٲeYYvh2jj7o)/(W,_~q#8n {Y]o8áSN"={t؍]Cֲo,n咗>ޜ[E+*6o vAU=ٹ}rz^fI MCۏ<}ysRt~nj79{%$kӾ삪_xiSpI'͘1o/))={7!nƚ3 SVv^VVS]S[)((U}YYYnYW1|5kVXݥK WXU+w֭qX?]ЂեK~mv3 >;w׺,t\۵:ntgeM:wPjx6ڋKN޵{`Yʕ?\-\ji3[uV^N{L2}$tnw}K*{cw4hME}k_뮻LS?яtX߽bóVWU7qW]%ˊjr+OxA>~Ezwڽ}:ѳgqq;&t_xh{ƨr_H7>;טK/UYYٮ]6GÇ34K7tVx 'l{xxXOJh׮.ܺ^{ Y9lj0yVv&]V^Ud3wC.ٹM6nJe Ojiw(-[ࢳǯ~g WO=_v R#{T۬TOl? .ZZ̚N}YxIǮW&'lH7=Ǎwaa~=X;4v ~1cN;4K9昡C(++KL:#дnOӝw޹w|f^Cuuu ).X*+UTo)ޞʯ j*ʷm۶%[ӧ`_3`ٽGw;9wΜ38ߎ.kLe؞=`@eev*/W/[M~zGWii~~/]V\V^nc9rdEEY=3N{g]hѺuz3{(^M- Zfq”6ʊTzKV[P49lذA_|.dgt5?;,ac˖-W7;^~?u?PVVs6vW_%†QW5} UW]tEԑn+_AyyEn^Mm}{]Z߾t駝3}kXGY>!W[S[Se6k] m/}6mڌ5}öm۞xW 2fYeee^^n7n4}Tj yӧuY۶mO8?nۗ5$}EsWW?X9/Yg-TWG4L]YձsqmǴY=;/ouso93{kڕo.])jv?5&j ԧ>5cƌ;㨣6l/#$ej.ZV/vX7/L/<41z3aDiiit!vkgvn_Cau`R4cC?.Eq#6rj:jהϬ\F};q~GYuv=uY9#lNUՒ}}K.1e,;?KO?t3 >gAO'wڵ+//ߣG닊>3<Ӧ3{(u9/2vwMvME[ymgnu^mȰ_uq}σw~zXjȐArg}Ϡ!QzhUo~S?2=fϞ~cҥ֮۶bEWvP=髗[Evw'doׯ:+{Cz)ث͊A}V7m9?]K~ϓ+(܍`qkYv7*;;{UGuD zt'*oϷ?rԶLUV,S^n h?gPEYUU۷͞Jt:mji<ߺvlٲN8a…'v3@4u /3gׯeRڡCB>]] 2 _}{ٟyp5#O8wgKU[6D[h)3 | _}mfKٚ^8^+Jg:¥Kƻ}#hӡSu7T=`O~CņJ736[s[6mKmF9ÜHvoذѴS17ǦMvذa}&*+V.cة'> EkU.Q^>jʿ2ηdϨ]QvLK۞iʟTseSLצc:ecw_mw;wW\qsNs4{qz꥿6<2S#.{5][^*+;./֭߿֯_m )Qټy͕7(l^Q^ vNp$[NkO}j_n*>1k0}GyVm:V>H`?n}7 ɾMجArRk`gtw-h?3y7s_21hެ=w-*,3{#25]դ7n4EjСC,Y{G?EmOjX ?+MnK˖UWkߡ} '4[ZZH/^k͜O~?UxOTݚU_-q~Thd@/(.w6`dNqs :ֵ]=(?wF]Ƕu]vֶw5}PP`݁m_0p`Pɒ)a ;dHư';\GT}6Ƥ~ݻo޼꫷͛7{_xateC*Env[t%KJJF UONQCz7O!vݼ(ܖ54ǖpX9N+*d&.x[|m44E{ѷ/WnjuM o۾!Sk ؾ}+of7h6mm[ܮ}W+ihcE~ySCvoy.]o|Cgkw}%XS{ ;{'N8sLSz}6UU)h_=ҷ6,5u^Nm5ߗUJ%.+yW]uUt'Xh6ѣi3;#slŊ4婼8`ͺG)1ǸnGbU m_TA]y_WpLX#z^\;Y͡)AoSt*~<<mU]Tv?׾kʣLf ~h GoٚǪ˖Tlz=:D8p^S&3îwzzd7gj+bk!l:|E8v@ѪQ[zyGG;GZ(xx4/^T*v*Mҫ<<<<<<<<.RC3j^K ]JGg`X`u>.et4+]j *..]RCqE6.50b.55.5qArVlt)ä!R6 lq)X}&A"K #H*o1>.PօRVR4Y0eJDCKe$o B2jڃdϣhXԠ}F]V]8|CgRJCfTAGǙ*GRj}\X99UC41 e8 QT*Y˝\Jȧe*da5Ɍ&kHӺD́f֫Nsz f&XSGS[(%LwYthMYTtKQ |s>#HitoR>Xh ecy/uAג n%JaD/sWuj$#j3P-Qv ZhjI,U 4 $Vy%,qFXȭEBS6Gz*Ih!QjAcMOᘤAzK *cBn() bzr#N!5i=L T*N55]H-\⍆$2X:ҧdUfE3RhHbڥID6 yUL% l, &&D00% $1J"FPfp%DDQC,ԮFXyV*JnY|(M-b,gaqĘ@:]ãTã J6 *q7[P&Nb%J&bp)OaɌ~U98Kq',$Ls)lMc2+2` S2a f8)CL}H#7\D0J&)zJiJ[cOPDQ:#ߘADr肀ʋC_`鲬z0J8oU_pS~nl#mÏ%7 ](PZ@ 8BhAN2j>kdѸ7W:CkSȩ0J<-5rPgӽf|Ӭa8[}b,WlW<)40j38d<,D`8l qf$Q8#sVQ:S QJ";Ktq,^a:^c)A1^ъХꒇG〧8 !,\r&[ D<#-'6Xe+qSi@ձ.NK.wJc:^nJU,;+._K%K<0'CG_mG+"ÔqDRFLS@fM4X /z6$Z,6/+?Z p@:S$IGD-&:,Ve s'J(3L򽑍U]y$UҎ dď/BcV,íhOY#3|EخFFn5/pNHίEZ4d@Tu eGGJ5S&dс3*ozʌRGX( qy ֠#Zx.hp,U41jL+i8yMa Hm^UitW5Kڴa66T8?,u!jjjsr?xV~,{ hE;UY˗+ imْmneG׫<<<<3 (Vx&RqCe*6@񄩧l8AR$rH~uQ6$.Hb 4s^SU_+\#լ7(gP3eR 3tu@؋35J1z)2IE> _>}W8A E_ |+O+T~#qh01-!Wǐzw)Oǐuo[M1x#>$y"ӷ4ĭoTTHC%j `xã!K%]tƪ Wni:9={c1{pB/N /~)_D-_wsQ> 5\-ͬW;2F6؀ )іcjH5q"QMLcUZALW(#q{9 BG}cI*IW)uiܘ68oO;S9Z Q#FqD-ȲT&|9JGcZZ8,*G\4C6Ǥ6ՎTLbԨLͣb_) ## CޏIĤ2Mr>c-頮1 JmLbRT(ixLB!ƚqscbns1d#8IA-gLu1iAȳFG\5⼲?Fb#S4)"&aqL)٘ZFT*?Y\L#Ql' T6Udp%FZm$b07 TDL4e:BrE|(2̹nU⬞F:v^+9m/WB9ЗJKI0_5$|[-& ].y4 ӫ}Qjs͊tU6U} _8VPjm 6^%,,*Y24dzákIP ňbeR2cQ1~Ipp^Wɤ6,1,[QǤ6`+˾,WW| by溆ڀI5H8phpNr(Ȩ=.&.錯BcN$<)H5VOc_KhRqvٽ;1זC>V_g.`sã Kե=A5:4Uޝid2=}YvՖVnY^)eMna'8j˔:n:P0>=U,)k|-s{du"09>3fMօYfvw ;rRY`پrҌ*Xb2#R0{`Vfi *`lzAmV?إY.5[Pbz$/f7 AI``VLAf j1`g̼6Rͤ3b,ayRr]j`8]XmC]jM4.z ֺ̔AU_ClLG0jsW̦{ތ. * Π$HOψzjR^`|ϥ^[ɸ/H^ECGћںPH2hB0Хwhu]jÑO/e_Hh*Fe)ZL!TYh.5PCU#zM+"I CT>1(khɠβ *& AäeӠbi*P{:D:ݣY0MƠCvQԯ*}ۻ3Qq- K.=2ᄏ)wp[~J[hfjӫt;h bsCe̚΢%Ot9 "Zcka%ʹ~W[nZ>p(ܰsy_&%ԅOk탟x eEg߸qۓzK :ILs~K1'z; C).QQc[F?!!H Ǧ$J9Z|O ]RjaP\5Ro2*z!нAPa }FMb8.K4hqK֛h$|mT2S7~uJsf$ .0:M2`Be#Ofh*L]uH ^-2m@I:zpF ailPxBb4RL͝U^t&Uoej*/uo)%aÆ=ӟu~p6T{c_{xxxxxd0ժ>obZUJzy6;ЦM3#ի"wNyxxxxxT] quCП@oB wF/owdee{ϟ;w9s>tYWe.4s =xrc,?Mp될 ]ǵtD:+DBPRv vݭQ:$ 2ib/aM W(gp$vt` 0VA+b,á'A\ Q\}kԅ]DV A#A^^ v :0\VHBo(6D  a,E6mSHpiR~*%⩶!_f4h66I,aãϨw]jP]V FĂ詏pF*fY`j \b!ΥQaDs58-G nbհM'C]`5c*]ksȦF @4 sJcmP3(MI2R 0d%NН%:nu~QWq@B-rM5HMƼ=Բ_W*:<飖aɪ9$ Tf._dbaə2h۷S[&;mf]Ʋ:/Nm*WmB1VƸٯt*r`cq,τ6ٻ yrJ&) LvU 2kGA—+TʆSR`83œ?63dpiXȏHi\pv1p NR.ǵsrq^W1d2 J\y|x'zGW5:5aM֫<<D-^hZ5F͏fW]U2VdW/-c;eoEɫe?!:?LKTa!Ɵ&QI468/FA.LWp hNPY]y ik؋SGŜ+zsƠWJy&_dUs-T5µQ 6RO% uzU[>#Ը0:Y3D> Z%p)VC5բl(ɢ·DȯbY PVaY(qW(E5TsJMeNQ*4e(F +5Fx}=>#fM%&1f20UU!Zƭ!_sG ><^V+W%(h^z׫}CW ͡WMsG >UGKŕ_<'hfjӫ4XZX&4w/lclD(]ɺ߳'Vg-lY1ڶ#⪔% =@1pO;X~C#Sz =3oJ {ʣgQT&*mv>+BOE=.UT5LWQSeHBvi/x ZFqOaF1LU3-ӫ8Jp8mNG& QZErXR9C Z|m\~2WHtb"WλOw\- ].y4Q7=*+Rx2:屗hfJva$¶cF,#@scŃ=$CHL=Ui8!"#NL=l8jQS0ҡL7# BSFOl_poFjW6˜+\AF8 dq]'ƄNf+pm2vqו0d4c少A{s6IR!8#?.&2xTB` Q8䜀IWp+b.#R!s5c]3{`) F#}E}{c%=}=|X״:z)}/E}|ymVZ_![=gvk&vt}˖Ǥy=WT3|RǍhyڿ:q g>0`/k2T5k./}ə_qQ_;iT2k7Xi!:dF,}f($e,ě2FiWu@2.F#ygT5#&4aFzR#tptرO=TtGش)??O9y\Daވ͠XZw5$K n>$ 7ap>J~\/b k~ >mf`\si?~;O3kwW cN?-Y2BE{Lc.&xx:ޥS{6=!yi"wa%qX.wG0I)$W繜rKWx|]7cY#~LFN+bT'dIKm O|T4"&8#~g.kv.WPCHaWث2g?/Q`/Pb#a:oIțxG^1 bYem1 k"*Di䮡4/jsm*J FD{uҬ.un{KC?$کrBj. 2X %O7' S]t}==D`'OW=e\Ѓ'>wD`=+։DCf.r]C練H؅&OgV]bL?~Cu{ /Nwp!A!Cf/U!Z{ii3oôRcJE=HЎRdJ Qr$FF#*HrDV!FZo⃚Sjt#ecC WcҌ 5 IcLH]FuHY D-8u㩧;vR:lRӶNʜqFp??>wF[7F=HW팱g]x5(6O^1  ~^} rv ]aIwK]iWiQr%ϫjbR0v+3 8лp݄%%C ~m." %KJ_ܹs}‡nxѰU.8sƐ KOO3w#}} "֞`̥̽=iqe{z5{XIWkF-LޙV+yn=+ݓ?~: h$tԺ1fӢL2Jc[믧>`ѢluUd2n5ΩV2'TRqwL=/<38gU?q}]W?L4<Ӎ.`GmIADK LͲġA_(]{ΓMWQHc8Ϛ~):56qȤ $b;i@_xDŽx#QV΋4Yu~!j3MB5 ڹԠK }h2JJ +\ʚà N5]bϚL|5񋫧6/sFŐ2ZܘOi*kIRQH?;Ktܲ}ӧ};Y`T)Otyoqwo ̟r?|g>?\S #_Ɡ=PquP ^Rd@+}%Ѷl]0;H.q:4]Ad^ Rhd+Ha>=edkH!Kۍl0y.ҳ]F*Ӗ׈.%nF*0DDiO) Si H Hmӫ7R#ʹ6=i15(AD[UEzG2@DOiM5_m#A!zբ#44&UH 1(eCF#uAUif]' 8@6 *C*, Pr⩿lW# @k("5Q)FW!CjOX;/3 11HD"6&Bl Fe^*`FS3R!}j@#I;k"-&zjHrȲ̳Z?[4ҚCOiݡB=#.ykmOE.eU=U <30rO'Ļ?~>dؑqıSn%s渇ǁEP8k{G3 KեKڡJ7-};lBup }-AӮT˂ w4sr֛98֩f` l#l,&uPª3^j03N l)HC{%ydxz}g fi 80CM0`FR}O(ڥfF A2Q>¥ I:4+P< *Ġ`U֠)|bxǥ'`*4lNJ\jl!0j3`Zyʠz9$B(A.4B-.5ȱU Co"iʯvpq;JT4 #KU]5$ʡ}MFT,W*B~. :nP6 k*Rlj|ī?עfX\.x;iƮIDT8K-rARC]4U-uA{!Xm}a1!x@M]jP \9bzW6f"?\ ~Jol5tД<`Aɼ8G0%A3p2Nէ Sv(_sɛ+zH*$@tã xasyx M+ĉq KեVMC=T`Gh8ui)Dk茼8TWħ4crAМ4ɏĕ$1.1J_ lr;[.Fpſғ]jP TmgS_@ `t4r8yRRb\uHc2h ,IO @Q4B" 6Z6G{Z"d $<_׏ڨ5mc*Bʯ8Ή?Ή} DP 0]r QS-t/ JS߉ 񙫔_D2RZ yu0.0A|Qۨ+1,\jd1і8CMI%1;x Rv6":ϥcDB CX5gԠ.WU}0:# )<Ӳüp0R3!735tz,qF"Ѣ3<ẙ3P2d] t&꩒t%S'ox*)TRrT;e&0s J 8uIԋyWS t'Nkrɰɳ{b=3Ϻ2 Uf1\ &`C;j__U=00/|k kךCb=(1_I7oL*<2 %#vTaueIMaEfOAg<ӧ8kE2[uQ('3-d2A2*G9}BGN+6jX!ySc׭1鯐V8q*tH7R \I!UFj*t1"U$A3 =I$z@ 5%WFdSFJK!bhRt9+˜wĚ%&^>ڑH+=UFZXY1˵ihmVGt>yx4?>_C4yKAdϰҗU}9/%__ztg>N/N_x|arɰxû}4q^iG=<T]jň^Q;D=Z0^p%%FW/]ٿd Wq5s 4EsM 3 (N*>&:ҐХRFhh,sgVc/\翫KW0" cR)pB,g<2TZʥ)\wP6.U ˠG0=Vxɥg0ԠrF@۶..۪ ]ψ\R*Ui z iK Q աKfe ..t\K gF{.Rr2(rt zXۥ8B$B]jAT$DhɌ]yH }b3 =\k_9v]H-:UJ]`*E0Q)3W&.׵%  Bx6S5`/yVnc2fzNSRYUxNsALIbŇg|ߥߠ*K Y@" bPڹ 4.4F  {p;jvg?x9+RR}˼_" 0u*c%)2^B2/>Tzjv;SƤl.ֆh#u vjdv$G+bb=$2Ȭ4Ș|NLڨk&*v+R_IF#]ef a-rF (2kHP6dvٴZ裙FH{Ki)p#36EZ4(A؍aА/2^d]F=`nY4&.9$ #FLp-&FGֈ h6^FjC瘴W4.KeIzAPU3 h_U @rDTSxB>ɦ}A8L#5h Չ\á FH)ZT](Hy(lo9Pál$q5R-+#MLĒYBbY`9R8Z*5J͈H6 o, $FQZK8]x1Xl Ȑbp7[B~C3z]P-d[}FmhSOaAA5U.׋WR O͗T=:2f:@"\_fܡkHZR>/PKˈ\ AKLXΫG5|> u)KYbOO5COq3-Ƞa˵* ACoPQQH2P(++wc_+U= 7H=!/< ~%gK<ٺ/YhfrW>ǂޠՇUzoBZ@kf0p3Vw]jB<$ga!P,j-5Y.eynTlVmݐ&JXe:$'[ic)2 *Oi:䯌:EZi~4RnPs΢%p~K!:ե8JI66e-1eZ]wK]Cen^&\v5FZ4J~ F* igQJqibOڜtYf%l7%(?/'jg8'RWi/c5葴'))I;ܥ:t}Z0BJڬIUȆĞIN6 $l+`;OFaKycV0oH냆LW]@:}AW^%ui7^jk*kԱV *C5F{7VmU%gKv|o!Xb3Ns*װqBr)4A,DY&1 |XB8d; 5ȐRPwðb 4dŊ2dh6@0BaeLF;" $SO]xdi30 Ȁ0,,Xp lLP0 %8x/Im 14A7b<(U-q! pA!D"@Bp 2c1Ht0p"r2 h䖨ff4I0Ԯa;N_Ih1K - A$dU,ԮkZ>j`|l?8\tk> ,J { Zu4.4Fj4X,ډUȺz;jZJ_vH<<<<<5 bD=Z0^ъХꒇG〟uq@ |$SuT~V2yWDIa(qy (@g]<v|QxMvpB (@h#*|";3v)mVkKDK8&26*BdFT(VNh m$apF{C1ʀDF%$M1b]} {XD6a"j#!(WoDJ!J&%!Z4 |$H'h\\E`O3WB1D-︔Pt׌Fc rZ /Ȇ1Ԣ,.T:jbuہ&aNWz(}z2hb-)oz/'|+;vi^ezҫv ::AETa砫^%5 jʠ&ؗ/*2UۃM` 2^z׫Z^=wk[^z5˘G B^u뛁ӕLyK) ^jOUo][H/tz&+:P-pJtZeL{fҲjk!r8 "ˊl↔8LTJ_ttK ,. tAd⎮5MЂZU/چ>WknrYk导bKřTVˑAAQ^ŝ29阩ؘ*ߘecVMYvh_tCVQLvn&+7(4/ gMLmgM5tݼ,kԖřK2n^T- j*v>]3z%1I =һ @MznQӦoĘbג Ey$1䙶1e4kD]Ht#EBPqt!$ }IyڌƯY^f4xFkA"J5)*AѭUIN1HK]`Qw@9⼾u U3 M(F"TC^hJ$*hvWvj^_/zUb)K"Vz 򛯾8f;,]3 ݇C/Fwָ/0U9sY9;=}yO޽tdO]ﻬ߯Oڿ6ݻ*hW,z*cs.XpἻ C{wUO'ZOڿr]|y\ۆ|]M5o),pV]I˫S;[SG\t(6F͏Z|s GըWg+oU_W( *>2cD[nÜMˑM]Ұ",023c t z<DZݎkFjkWkx-(w,**@:wڏG#K¤pQpBﺚSS o)NbjˍGs[P̈́W &q#֭U}K?L L{VL*XFEΫS@B7$BT,:K"%VpX% AZt E& qmo>8@RÂLudjY]b~ziN휜sr3Qr.ƍ'aؠ-Y7&J6+g+'smޱ=>VsdԲׂ.=Ȏ_C tєC#b*ڌWS.G  e@U7xJWcIrRخC ͘_ӄlT)-"/F1Tä["?R0v +Xd\*]nMzt4V&πhX,KedQ+`O0VG 3#qUjP5te׸{o1L:쓟 ǜ~U&(Uq˖}+D3 }0=aiOdw::vx{/f`RQ>k3nl׋2#_~N'gŒ ~VQFS?>3>?>X<>([G=0vW}{'Qc^|~}z7pãQ=58I sL?hʄ~n{{9ӟ^x!uSYGOJ{xanp ^\;o ^x'q8\} = rq@>%qOaV۳R+@C\@`4Pb@O>,A5P8q+SZX#?Dgu[Z?g3)UQC˟k3_tqx^Y7 3&:;vp*7x YLn8h*;nؑ<#S 6ŴsTǖRmdӾ`4ᄿJ* g'`coWS 2ga6XDi2Or;Achbrچ@8!lJ\ꓽp;KU< w_n[`Xp0t}ap[ObU8Ϩf5r 0֒1@JWS;][vزGkgOɬr3b; 1e:hRƚL< !"!&Xɢ!\=K!ȀSATqׅ<(8W `6.#O"9䗇lr\W.-/YmCT`.g-[ O"#_}4eL(V_)2Zx.*' 8)%B 94ᖾ7d*nQՊ!l٩ lCq_D}ME ~uUU0S:znmqP̂ 8V L!$7A9y)[x6i_ހ9NcC*Qh:'loït!UYԀ!#w_ +Ptj<}Q ‚􅨮") mShAMŧHfdeF6HL4cNDO+x8@_z>/o0)kS!_ -amO o E<ITxdD`&&14.U3Ԑ27&0|C5Dk(?$-g45:D{eϚl`r8,@Pc"KnY*C!~E$ "`+Sf:mVS|3UCu!3W53 yLu%RF$P umfl44NOiq|; H}jqrֳ_N9X⋹?1n^sx/Y'=󭟶R屏X|.]z,67%oaUcaZRQ5S%vzi>_b5l8zǞ`ٟ{,{_}cMM9AھןcYv$!`RvhR5 <9 @9y`J<ޜ^#sӜyU 9YT hj~q82xQ>+fmڽA!Z 4|+)FaTj)/%"=Ռ&yQ!2UJ1# q+dC<åxR'in`/ԢAG|Q΢lH2f 'خbAo:ť&P8‚ %BLUʢD6MFG] ʠ L H yyp G8QH{=@q@88"]t?NnJU NG}VwuC5F6Q>fW}d`:J,0Ws*_ǐ\WiYyrBP Dz$yJ[|!b6ƴcڠC g 7n[O::YLUGwR⑒ ]^4^c{Sxk0tMcv1Y4Ac^Z(R5;ɦL%6D`pU þe I}G63 l_V#"3dc\$\%WB)1J8>*iD־揣+kڎ>!a⳪6h-q8H[.53@O01։ !B¨818591 U5 =0J 䯈2 * 6ʠ3DG*<}uvDv:v]PfQrEϙ0DdQE ǫGFG%Џh3 ƅ EѠ2U UH2Ř\& "B'MbkFԪ!! Ϩ^*䓾pF9YRXa25@lFUUM QHhAH>0>ƵJG y9^;:z_q㧳ǡSZ :J!ƴ &Lmye;p ]Y{KC32(VfeY1'&Ʊ- }g<~ŇG1cUtAXr`_bQm fߴMص{>_59+jbXC#e~Wp}ߏ|tYO#ٜhEv x]N#B<ؕۀQI&o!t٩h\x™.5:01$(</3%**xJ Jq0dPm@>5S)c\ ilaX_7gU q"!Q8UN2-Vk:6F(^?.ٙキ-6Px|!#/K}/{l_ZQ=ul^Y?{HRu#zE宇Q7=**[Ow /Q'Uz|h8y.(G4dJp_c_Xq\.?~UT1 \,䩦Xm&އ^޷Q3U)8 9QZERe҂yYȩNxENuw,68H^Mf'S\(& jʗ6D}絡}_SאEY$ CAY%dSilBZj!x!_"nE < D@ԆDՠbxAmEpMef?l+:GgoH@\A-L: .qU=hR$x!b4UDTQdA8+0uTF2gBb [,30J}O I5;^n,Y|ZPDYmH&jG$WH(zoZ,ԮraSiq@ә:~iTNJi&/77M-[6u谹o?Yѣ)q@=_Lsoє-+4[Vne.yx 0 1v<'c:tOz~o~ aSNNE8yJh'mx&e;TCg:km۪1 =N̫̿;|i3ABK'JKKǎSOE q9G^vGѾ[K/SPCg '`Ud^x4 &E,C{ `/-42fRiDp+- vބ'Zz6}?Q>D܈ f3\b<&J?&R7?*Q/>":&)JhPt(GOu4FK  +"7ԵrVCi*_iB!,-4DFJBrMb?2@R3=% )5 ~%BHԢYteO]P?n%т!K ,=2M`AK Hs0KA43w>Β_6!gD< ]P *p*eLTe X-bLplLU]$:1Ju!B9 $T\e 8k5&~…TM4i7tө`+7n@iiOL ;yE:g UJc=ēWn1ZM$D<>*tXNR<)LIS:]8uݣT`C]8flߞߩSJ!kעms"z&׀RE/r'RW<14C^ef3|123HdfȬ#Ef)52#hYLlnkFfގd#Df>3Ьj#D#bR-\n2nDTM+fDui#E%&dՍ&/O}zgVYlDG8RvYdFH4"ucL/"152kleм*jC:ܽcHm.SXm44'$@]|D"|#0%,6r^07&ڬB$vQ8!vIތ$fNjƤȦ mj#z~3m>,sMqwt$y4j$@tAmftTsa^L\ksɎj냦ނN(Gd{dp,>0cA4Ũ<&Hb&*&2Wq!8q$I$q5Hu4nLZsc͂CDuFƴFƤE;7&;$w RSO=5vXӥtDPeKv&2hҷv=cY#ʄ.йu0CuUq;<]smnߣ"Kե֍1cƘeiTMW Æפ8jU7V 0Lw}9.[?h07`Cj/ _^fv }I֊犧}tǬۯyѺХROEIjReh{QG=*-koio-[t]t6!\8ퟸݤ'*njhzb.F7n$7RC^k#`d9ϻƴ$&y pDD,í_DB\ !26SQh3msD!}cREʗ2G_y?_v]1JqJ#D##ejA+r5 ZhDL#]-TWum!)X`( '3sHE"RHzA2X$}[Ym"?$v.1*R4JZs$$afH]/9Ku% Q!C&&akJSXSNJ`ʌ\kSLW)gbb#QH{FĕqveI#dFEODSae6RH:;TfsP"4IgƤՃ( 1RTq`Lp@-gM?$H2UF~bJiLWi)UZ=PT }bun[-*ÈBmUW֟^W7lĐ~0quD͟215)a ;2hOl8h1=zGX;=ӻOZ}] bTpAJ% 0sJ+n\a?PPM2* /-2s`  pLK5ʍăSD 3p jq.5,t) aqimH)h4D)I@E.5QӸ:6*e@6$rc]e6ܥjWcϬ5.eR5`/T6v- _1wgugw7o8zsfޝi*꿿J_v֍a[om>}ܹ=_"Gywl<"JwW^FWWv+~x jLL2Oo !s5Laj ܻD>+控>Lͼ]GWnmfl#6"O~m.r#i?5{lIH/J+^TY#cҎrcV"52s͈Y"fЪF'9IntA{c b2C\]gȚuSh_SO"Y5RqIfC3HOJbTnH[AHf]~H:jюU_Ϯz(kdrmD^ܢn!肂:m3 yt ,z3?9~YhHRu)E$:80|g^{~Ь<<ͼʱ,4~f3֖?Y.q# *݋C=;<1)jC6B =TD(g$;(: m{W'B 8 ]8~9[R뚻 G.t#T#ٍ6dm }=!oD9!q7$ŀ6Y!]\TRmW{DQ~_EXQvp$v iG""C4Wh"F̩ʈ"pS]RN׈nit3Yà0 |e6$WFc^  =WueoecИ" P*W5$9z1Jcb2 "Q\3VԢxm1:#fA5R(Q#2wR7ೂ5'&i [A#dFc Qq#ay+ J\QSYF4W6T0:+Fvw(HēZZT} ˳$eK5ہ;q&GE*8<)+VMmW(iP42vNt l|/tnãХR.o_ǏLt"ػ3= 3X3.5T0`ƍ``As`VA0Ewi{T6K0۠B pGY`*!m3e f rcv3m debnw9EE[GHMmPG f; #N.R> s$rT1@u@7Pp*¥4(8O3SWⶅ A #DxP)ŚoP@vD+*uAGT`R2Xb?Bulp)bV: 3t!z`oLǾ3&F%>1S 6c9URCڥ!FJdE=mRĠQB*e0Ul b}(r(H]mg$\%dcU뀲vR rR4DH{kgn5՘b%tKw}HeVC!_o]x&|0w7ugw{ = - WJ*8`eѡ}zqۣjwz׫vW]~?]%&׫^zw鷚WW͚92!v|nټ#ÿyUr3[TZcXO=ZLEhZ7] W튋T(]3R} |NEmQ= Y2l>#TDgjd6"3[d'K7qF"ҍsllGlU.Ҭ5Y]fÉ#]n6HN$2Xّ:hdFі̮ fw;ܚԓu_e$>j#VŤшo޹08al6CÔb7>",͍(cDmDq9YF4T;SNi,mbyxAU.R6 4IAV#bvT=FQ-7і-~#ɕÈkHEmJ6bEj.R-r8H`kNcvQj[}hNM4'$¡JcƱd͈Fc(1i4xդx4BHQ$~J(M|-1z7 yFzAQJ}BIyd%DG<1 ڶTW$TN2B1Hܦ<ҬZQd2ue5njś秫lznzkח6¢SNN\W8ԽaaaMt=ZN~'Tom/`yGtk̽pܶ_FpѬH%Diiرczjkke-  >mjٵ5f6GO^1.xԴG^}SxiưΛ=m;YU #UzGF{5 :5Qۊ<ܲ/7Mk4pPm ;ryτOlnOg=*Mzh+lց~d/mo_AؠiѡGc8G=Z*R jxꩧƎkTjkjpUyͿW݇a:~qæ[LH]5tH[Z^%v,xvl@9\|X2$bxl;YF\^30ebHV,3vn]sI.U];#SO-4I:0b3񙋃? "19m"aS1z2i8%n1R[3_lx!#9Bt`b;_/oDDpVM*6A%IҠCs"R[zI'O(:+|6lEn+=xw/}MVQ3$*o(Q) y,zŌTUipWF.Q[.d R $';S "dƨ.WX$0 W>h-GB ۵ #bBX '_0bFE򰑸m$o" ICkOcƌ1-t)ӨTjjjst.h߹Ð>yШs9|٧~~#>8`പܮцWOc\e=o4xh ?<9n/ Θ`z~hF$tԺaiQRTLaZ:k4m˶/[kFsa#;⦫E:ӣSGy'7X3sw‘*n ~}ll^(J(} Μ`茰uY;۟= xiSUӕ*)LqzU0t;MOtup9CNs az[避]c)ch&4ֿ^ڝI0 ҥ.5Eގ>tK D\J-gTN;g-g]ۥ3jjP>mpKpS\Bևvjx]fK$եI;"Tn-_l <,k:DA>#W{TE닖,Sˈi3=hit]j`8fPR- "m*b=b. *  ~ODbvp%tzQ~.)4NRPai;vX?5|}Ũ >FHE N|Yp׮=*6>_QsoZxRu@QjP@PPF/3gT5W~EYF㣇aѡk,YuuU5Uiugbl] ,stN{{)afS0Wvڣb6|ˢY :jVٺ…w8(PvUk/>:>_9Dd͊TBDVx)|;#773:lX;2a~: ;0GgZ2~@IO@iK9$ÿz WCk( !vhN_A / f2 5.%z#~'D J!b9FC\gm.P EXX(T/hǬ{o@u8@({Q"T'q.IAE-: U\Z *crbU;S. R/ILMT8,=e4%"qF_ :Q`t++\nFN&N/ם%:nH=Z|`C#Y37uJUӱ=Vx|0=1h~4_%cE%e9cr͇FvU$d0 Udf52 1w)"҄D暼'n :[T S%dU ͉V̩ Fx!S4 X2-^ x,>w/O8 ZQt)[2q/KBCe'D Y$OLo:ʡ^ejFb}'<~B ]pR z%ݠPd!$Zԃoݛa'G;.5(uEa8ƥ(e1A@ & mfvoONoτAcJ/ri6\~sp8i``F~p k\[qA״P{ZJcnv Z+]ʪ vcS %N*:xо$YR]W9݂#o~1X+U{Gs&:zxXzyx4?^ղPH꽉 3i ۣ##!O([⮗ãq1.(=w4>l\K9c zSmЉL9gԠl*$'91p5Q eW]"" ;ײAD08CE-:/>Uq !W!Y[ ӃwhP8/{0ܥvɊtU&0(@,SaUH9h4JQ|@CfX" D(˺r m*I)w'?~p!6KF`ׂR*ɄMHOOi ϸ>2$@*pX9CX2˜3stKoaQ0(XVhX\Š)CzgwIU86XDU,rc%J8 VF9cU, 퇵K ٰ$ `n5 _עo=;Utx)UqK7yLuEH/X?ïx@ԭJ}PW%\<8-1z融2 ad!]X@2nx@];U-pm$Tr5~|D[qK eE b˭/\=ym-cKjW(.r#P<Fnډ~Wy3`3}N^Dcd 0~|Ȋ; hAmqq^DȌR/|<%bw$UȸebW] R*>Ky`u;6y@)Q_IO;qզ'ԨجవY ^B֐; a2 xՏ Z@Mp^gTKbrI 5h &^>nO~ ,M6e`8Ҫ41A Sq^4AG^ fve1[<N"ySW5zonc}ӟICCcVη:HjqGyvt3Z*Uk^mSͰ/U@´ƨt]#ѲWGRYyypm\Q} lpou8ڔ_W<2ӡ֮]/BCG4SNN8y ^_}Nh8.(75|&*F?IT r"x p<9 ]jPcO-rkZ떝lCt%D!?7O3GR,XDx0\*wϸq)2RXsuj\Zgǩ*h)MQʥJE~)T5.װ!ypF &%^D- p C@1.SFt=@WѽDV_'>l΅dDF::O?@'XrmPD6Oh (Vݡ@ b<$WL AIAF]mGM}$ K{yApZwJ7%bCk̑g} ,_Z[o-tQ\gh /H$)F@J!! djQ32P }z98-|~ݥg]R$Ho4čZ :qi]HJl]2_8'3R?FCI& fLi 4Xdc:t&5lq;o0__j0Vxm)ڵkv厷!߭…']Ua-i#T9A3$GDʌi0hȩ+iYHI=I $FH\H@ῤj8BXNY640DWGcmIuFpL]6'ӢZ5]2`\X~ G3`fz6rXͼo}۷feaERvk#3p}(mh/rݚ\RG00aK iҶ.5$T'2Y2mWmK!_r ͺ6tf{꣡46VJ.e*P~1°q ;\RԠָm '}uioO#&z?l.e. ~~h qfRZbw$:Z<KFhdOMz_&o<ӊ- >jp:UveGo8Ĕm>$x %ãU_KH[e`ዐ!Şcql_̒am\u+o(3l1>_5jRӂ}3oCR6AcjnܸX Ԭx݈j3^RĆjv5 ReޏƣFuG)HuJ$ K.(&&>᠒:)M3W?l0957 RmRCjAH\=1W$ OtU4Qc/?P`6Y__Q1#%HF0 VB ,CϠKfJ,J8 uL&XKWHyWͬ5& 8e@gN2j(_caWcUfI!>AuO 4u/wo_k xvg=ã〗8p|Jl'j@DLD:j#PcrFv0z3]a\ H3(kc;9y%YpP;S`hmkqVǿ#5CVSors0Hn;u!3cD@I,) lFۘaBqh.:JA4V_:)dtT R01; PL1Sb* hW?Pwla4bWgDf8=S잦2xXۺ@i! "wPM| jB=z[v`/Q38")K *͠QT#XR"S&]Y1vDrf71z> V6,q@lKA  G/O.+}G @W(L!8udaAbYʼcNIZ% #]8 jyK r6N/7͈Ou]uHOnagT/0]2~PU>@g9![ɿB!28(R~E5î2f1N֊XH4ڍIሪy\xRR!4X{Qx䟄!x{Lu%05#alg Oyo\'$cCG7=%hT/YOBmWG|/m KfԐ{HU)Oi8x2bIpD[dl%(לeQ+qm#ֲkᙣ45AS9:5Yg4@8*z/PQŃYE~ ,Q*1:@+L&X$cZ:\Ztgqnv!"})N75c#})YG _8zT:fgoc_0֙EGffIu_ᱧHRuã〧ٷ3xc`aXQ x'2I  rwӶ 8ᱬ%tXtvW@HM]㪶8&['8'J!XOO\H u~`U"|k@J!E!N/-bxH ~4 2©ďH[]tu5X!N'mEz+f861y%l#N|Rä3OKm4i C:k,Q~WuU 2ŔK=1j2C"~ѥ(B4Ti4vy Jv@%x*CTMeQRKa%8󞰬:ZsMW0VAc"8I1*[՞T1L&X'>rQ8 (>*Ru]SyzM;"[?W8Л=<f[7F-^:tuj*t zKjKm|QǮ`:ycq .*? OjOll&v<( ݭq8'Lb<~(~lES<߿Wؐ"h#9ިq|/82|pqlbP:I`0C"p^}cY$+W4BI %q*hx!#PXk%欰PzO9)z}\gD&~LEg,AH,DqB*bȓbu-:Lq d_P3b<&9g,AplzY>!B$.UI% _h]G T[P'Q$ElNQ]jЪŌzGkȟP8 Qچtӄ$C g1 /NLz< s).! l5&vjluC^p?%%\D^]jPwb$y`ʏs;\7JWd'Qrg6!*Cy 9u8dy #LIT)f8|E8XT)Pcfyl G63YT $BP6||sN!Yj-:R3Z :A+Pn|sWu=%"GP400*:0(I`FGG1W8|bc`HcޟMzi&1 :89spH/)ߐãHRuã〗8\vdQlP(rKO|A$H!;^nEM9*>go-/'YTWc+ʀϜ("&,8] NV}B^zK+qy5P9ƥ:FǸj}EWAQ'\pIVETxjh,9+Vq@@u";h5a^Xb.ԭ_i ip0LM$$l'&?fz"\mk:QEF Cth{#6cb~0 fP wlV`>UbbCLFR쌙Aj᭮T* ҉8*EbB4b4¯ K4h5/КFOA2 wK ?5d&|%>SdNh8 C6 M߳[1C+ @X@ɞy{~3dXf|νgy{w+(xXh F|y\U"%b ,"ɆyspzeOˉ_ <ℵ},_K/.w}w 53y>;edBi4y'pmI*jU*PxxӨ?N}L'#=_?'o}NvYF3ƒD}Ltm|r^9[t- Z^PdZ\\x5QnS6@˳UH蔮^{} 6FU8 ?@ 1HMVP3›tVBq?_ˎ:¸aF01D5zDbT @!u[f)i'W+"8ajD,xsy7`/s=T0e۪\I:VE (H VXӀ؉:c?ָa첪>gxCh V#;+o5<c^$:dvl,/QFRKce8ye#9dhF8$wx,lS\jh*(eB &:c_& La \.QD)<6k`ݘ=I@ZagM巫i[!jj4żR5*k =f'|T.TAg44y~X&}V3p1c2ϼfʸڎOe埩Å/*6K\ rjf&4WFYm$cY2# `U}ɺa>ɏưܤq~̫дu0F z=|^L]yK&T.j >#!_w*xDxuJn;CܶzS:~ꑂ .|Y<1.rC޳Xcx:y84x<^F:FNӝYy24*k}kW|[Ǐ_?sª:Tu벃TC7J=k|UsFT']^2@ ߩ%W6Z@wc%kcnAf.5]wp!P@Heރ]DRj]oz#_aV6`@Fž&Am3չ>; d1,H˼`*J(&dqDbl Ղ&g-mWL4gX<Lk%>`5OBD 3b:hgvɘ@vUv5b?+@ESMs@Bw~2Q1S;Cb4J%F(Y6b+X&CDT9{S4gz$jj< w?Σ5Ix\J״ZUxUȠī &L:@=*x!&jo;A#9,h&{i` W'!Cv=.w[Aݣ_y}q` +3aЉT#27oTOtKw~V`2wƷ|VeW[c>1iN9o 72O 榮)]xu.~ EdyƲU踀 KN(aV񖛀%ʻ"K i@j64+8@5l*iHFPl R3{s $+h#b 2o@YJj,]iYdyF5aƢt`͵G[t<6X4 ep`˯u,x,xY/m[ӂO޿Ū åNjEF{Z^xSl{-o^k  /YbUp0t"Hc5$_͑w"bl@^MDh+`|pQQ09mnOɗ07mXRba潶$iul$Pj|uL cՃ_#->95ThZ~aӐd762k[>)e?+5a_QP0b7\*(xr gkqgu6q9fJU֮$FR\%]K\B8 O['1߂/nT1?P-_b8}.@%Xcb֞y>>oa􍈊.KQm`նTyOcE=ŅnDmo]}:#j7 bWR_ݸג1b,->@V ԂU7d0Pr\OƪA{>: cQ: 6%Q16{D(*.h! Zi^Z9M m@>BU9j $ m)my/W-ÎqO@$PJV^Ufqu 'e~zޘ_EZ1* {UVSA@W Xz}㇏:(9%[-xXv=6QPFc.542$SR܉wc>C\:q~.770#2& `|ap-W^;hk) /4>6~Dɝ 7Vu2PH>RKj,ev_ : YƷۀ CEH>GRܓSv+4`?d!ʛ[BKH*~%KrT/j\%efV׷jN^\[=HğOg- o*yf ʖ n%姟OY0t+c\ڢQBG&@I ]e89.2\AfN׮hI4v`E+u\蓏tw %}4F`)᪏#vcJ18BWx>PU-2߾V+}[5 8r@k"NJ_OQU)zLx Fz<8b6\*(xթ9^SFAw )c+3Ur>˭x1kBY-6*P]C?TDZc|zo|N>Lq s*2:@\S?.B2p*Ae]Gi hb{?UMD'+J g\>92Zäp3V+0zlUR0wS 4|>w ls%['4݀Rmwtq&xPرb63Z2\c]Mﲏե˒PI@#Zj RLQO>eb6y9ya216@g4.e5جR}U-=~8(أ?,я5coRcR6]nO#(6iR0c'hh*('w .eL%rJ>^uRW Jj1uvZyǎZ~pݺMuߤ 9m|8mS[ʺuoY >n֝[҄-"5䳥ĶZUZ!;n1V-йx' ["~TP0PU#ڣ'I_{uۍܡUW]uڵr-+VW|wk\ۀ/d1얿{ -ݳi U/j84Mu,:iJG"^x%/{%?l@īlюg>xUyd+?/o;GGwī2xU y?BnOZSΤ9EU'E#)H1(Ӎ9\'K)ҝua"EGSVdYb4c 7wЄH )ƲHR{%rDct!ŘG1R $vMꑸ\Nqidw:NGS{&KcCBrniQzDӟY'*'V]\%bU~7,b'5)n bEkeb" |#{:ٴE{ XO^I1c@Xa`FnF҄8ӆvH'Oo'-s֘I;EԞ3H,-O}P  fZ BgG~M?dW$zup|]$PZi@D"% ",ÅVK&jbɡ)$o##aY"H MOx9rP Ы#pʓDǘERj:T6ez9хdf}}$Xڏ<# +X_ޑҏ|Rz]Ÿi.(f[GE}xXO>!;w,zG F{^5g"ܡteϫ1]ߒ$z ]'*4+^~xY*TUдJRkh}q4q#q5Du£ƵܫN믫RCy_(HD]ՏEТBg^8'OR6Uk˩b^gTU{#R e $A Z9WmZW5d( $"5jy]a*dgˆ}E"ۃE}xV+_g!uig$Go$BO.DO$fHꁄ *-}Hٴhu$4#Q7Ӝ,-9iܪ[7:-tlA夜<0P21iw Q'̖NIDPx5twR ePFL)m{f<#;* +:gF̫~9bXҿGTa){ĝ`4RCSƻ]:=p_g_݂AW:g;c H#[~FW ӪŤ뎅]OHQWt8ZMȉx$:!bא µRJ24Qq.'j r kS75'#֊H`*md7nм" -ʂPzv&Yک`)oHv.$#4f>m=s0$ë-4{)uu@GT̛N?TMJ^ $d&CYWGp#h5mTr1G=-QuLNUvCD;f2LUF8Ӡk%Ҩh;s.$%8`-Y/#QS$s 4 NSʔ83].b+^94ʑ8 *m(y5Mx\:NXTϥR5bi)\]3G4 uc,h 2qPSbG1a[GNʼ˚~HAA gm}q6}U,i㪎u1t7?zz;{\g_iwWL<5Sc7wU{O,6,7it,1t"Hg7}}';Y/LxtG b^5+?AzEu?U3[:oџ22+wex1zیtwoFyWUoy9s;XN̑U{O86,yU`+h̥G^jzvP=#;:b^U[ʾt)] P&Ȍf7/1HeRM`"QUu2d~ߕ;{+Ntw)#Ar8jjR$xH>dm!{IYHp%wNXe$HĊ"O̮G!^N-7qV,e 4!kh$B ʲ2PH%Y7H`a(E{$rH!(G-R{>s}NVU-aiOΉq/%"19ɟZy: Q$Zцr2D~XtOIV9)3XcL\@m' 1 `Z:/9]i຾ޏw09=w-9]qxxWk91ʓyT5uOO믭675.z[-SAM_{YWP?㈿1z;;6#wmI 7 g(P,9<euīb7iӶNWX@zNC&U۰/'Y.e_nmRRyL(cݲeUp0:e*(xyٍIUyiꘘ7yŪ>hg7M[%Ōهswt/X;#05ܰ ?iӖ3KS^JP [6nOc^,ӎϻǻ׼־"D ".Ye"[eUqf 2/d_yMV*5Cߔ|"P]e亼 'O^WUfO > DT9 TIy;N2`DZvj=dҒ]9OMK;뻺 Y|UϜu߂ myûliߐmS]XպWz[oNzŏ~tɦMS97촔ޖ*:T ֡qAi ZCF}@H1e F["c&MBۀ9ՄP5gߊ|aZ[j^(۫K0=]ռ_7y6zrmXv+]~Ԥlu V0kouRu>=o ݝ% ίZ9m@`ᬣ1*(Q\TL ƆPUZ ^{J77&`iZO[ߵo/+<`qH3a!oP;S'wu5zY9w1py_{..Qo_mۓ/z/7đ\0@EXa|H5 .H cXzn``W{@O49=rA|6 m5JV'Y]cZ>;M낼 HS ǣ|>n~ Yn*%j(!DԸcİ Tƺij8pay`Q9oJ؅v91Ȇ:`!p>а}IcXyܫig_Ux<`C`\y՘T .nV_s8Ϫcc'MIDAp` `Ugx Z}I=76ƣǃ..3G{#kl9jHJςt_tL1}G*KBY7 ӜfZemCӛzUF,~d^r)oUA8.6$BۨҞoZ=5W[b^~C'9䅫W{NݸQVy (,0)G?|ezu`H%[h9oOOE9qa[ "Qؖ#ϸgwjir@giY<_ad Py_\s__r7KP}/%[bWqByJ @^Uo1P4,5f:,E)oqzd@AQ}U2 20z{0"Eph6W-ʘ"at#JVMxuW Jj41nb軃c|vCNgvw?s瑣kNsR -47v'C'U3qP9==t:ɩs{>Nv-:O,/tw8ynE==76nCt="m o>U0bZ:\ʈ XycŸή虓HQ<Օ7!3&ZWw!ͼ(W/^ĘTNK @5n0VHzymtz{"3CLO=w~'ߟA15Xx>eF_PbUr%괲N+r&irN1!MS8S ȑ/:W%9MӦ(+:ʉ*EN!wPh;sڭNsuiڄvI+ViԦHqok ڤV$#C&#^'NsiŦ*m->0ΘO##-qBsњHչ[|qw]stܙQ]sN<]{úsϑ]]{jO13C.O93LfM֧{{uyx@ 8sƴ*pϚu_J=?E;Gz쁫h&Ȓ38N?>o1ZY=0lMѿB3-̼š0r q@geKGo.ȷl:u,YrHk ̜1c359{͚C91} :~C#Dg_,r}ڜOlGtMk78끁ws_ ӷh̥1Q^n=ܚ@D, 8*o.dѨtussxW &KD.) :iǏ==?i7$@'\X۟YQ pwvOn[rZx1HԼ \qUk׆k|k> Wvw*qfk~Oۧu힓4yTS{f?gVﺭήgI%Rܞs@sn~Kz^<{k5yUչ}QjgB!UI];Ptߜ҉s{^>y쐹=/z wܞWoB.j*7}bsPk6iʽW 7 W*yI, $/joRd=VkMޘ'Ur@_oo۩jR`R[ l>zRUoy}GɁm_UF*((NJ ]2c{Cfw|ql܃sl`Χ?wi`{9YG=GTݱdɾg޹όU҂= )c1|JwϱyynLf:{F]m{^IU{}`NGvk)T_l7ɈPAATP00<3Hw[!|k’]0qFke* 7e<”v9<=~h7NPyr!@cL-E 0̮ePmhD?xUk֮Ur:>5[yMo~}5a4g|zLg=sΌ4AߒOϿ!ߚw|zwaKq7簁)}%tvݥ">d|czMo[99?߷@3;l^˕9Ww2>mY\Q{uvz6?зЖ%?o%] ]h5}K^v96:ƚiGu=s^mNDkTu -};X͵U//ucN dhQӸ<[ޜ('Ӡo)ϧ(bZ=l#=+sG R~)x.x\0ƇoHSڎ4)?dT$7j~4N((򯇃tMkiqܔ.lyZP+\xc˼ΫNٸKoo%Z}tV&5ZiGZT8,ΫbN{}6/P|%mS36s'/\JRoy^5%=3nip^%<V[y̹納92yՋ^^XUe^yǴ&V̫ Fe}hbݽinM ڜԓ%K>}ԩq#iKSP>GLN8GyR`^l\ ĔmTP00xn <2ni<1s+36Sh ׯ7i{Q|憛 ~qSݥvk#cy2|)Lz5|EN=|gׅw~P<\P(/"$~(#h?i[S/co7z˯~_W{}8mԻ6"ϯ@^)8'CueZ9R~ >\4wG`$IDATi1\br!G-c"@miFLJ㸏!>VLDU=ܒiӉ2oM1.WDz$F!Nn[8me;!~";4bYg"RF?|G*)@,N5v2%"hnZvPa\%@>ĨvbRBno?zkW JjQBVtRT=} >o$=.]hsM{,(2xpS<29oN0|!^]ؼЦS\C](a@0?6WL 0}2Q_3+rqpC4ԣ*< ImHsʔ~K}&yʐ؇3A wZAk kіrxl.=s.!#Wg)k9,i2ˈ2=N9q:!OqLϝZ'x5#)ܪ}ݏ j-oH6$l@( r<@JWNV]HQGVjrfnj4G`pdRy|F-]Ѻy2G>fqSݞlYݥ:8c!w~i-񪂑AW2ݛ&vS ]>Zt}2;sʥsZgrܞ{yDz,?0֔3^S{z)m7.*( ʼj4j}Ow9yj5𹾾Qܐט_0ġ]yL͜{JQoE};͙]s[% w9GY)k ~U#iՂr,C'RTP00w.-@6|'8ή骾kgu{Δ}5!u~OO}ww!;ן^=giή_ytw)Yg7"ЁO-yJww`Ztd%?ŝ}}' J'we:9`Im2s&}F }\_~9nd?R̹Ϙwi^}B)P d:mW Cvm&Ԕ譙CcQ= i6{?d6-8?lY ͗Q1Mϲ)EHˢevY6>@j L^"` O8i,j8o|-GqUsv3bvBrHơRWJHх|xF@ސHˢ&kHF d$m=eV UVCR+YxAG [p/ܶsāNo:}s;3:g~fgz7R%}{sAk{{_۷lΣ:|{5ܹ3s;:%M8(g̘vjcqoZ^xALKcO*< Q.i9 @=DsB{>4%1k``~ޤ=XO:;tfFi9=|i|wJ5pc_/GsOݏ`럺| pp,{7R漾̬oߦF DkTP00<;3H Ygp71aoĐ}ODT{3_ 2L< 9!f8D!/؎߳ggam .e*7 n堌\M_B6R>E>ֆ7O<&]k棝:=gco~֒wgP0mw;əl 1g%_Is6V.;Oj.PtȎE֍.oy=K A;4Ҡ}[D%@fq".-MT2Vlvh?V,(6j'@Q?@8!Xx2ܖlMZ%ݯ_ޔe9:gTw@Z1sW?׭XG{eRgww_qήDdϞsRΝ{W'vw3w-\|=ݽQ/Ox@ aX`(or11\Q{9Nk?<.CUTNΣt/֯͏ķYK6W[ί%鍣Xwy} XD@SЛ'˜CeS>nr /ewH[[j5i^%^U02(1:vXM1yR&=0ScwbNWN| 9ƒ&2Fnyyu|`)'}un;Vq!wsR![Rc4:l ~ p@Kc%^5b?5n;?mnW\R!G>~dOؕؿOy'a-m8]zdե<-o}K "<1)${y@:""[ڱ@8Dԑ3"GFt{q-uC_Q1,5sN7[ӞGynIT*;[% X1%h_u%ǓZ+*0B%:S ]5 Lz9|1N*oF$殕D>XI\GH">m}Y+fA\%r)80yVzxUȠī u75u?Gׂ!}#r xĝ"Z `#qgRA@W0c: I6){0Sj_pӡz+<< H5RjTO,F6" Z3Ĉt_8fup=B6Np^)k2b`6Wrv׽j Qn#3.lF!/ܕyQ2oUd]Ͷp!`DG P.|waOmH+o'̞J4^@Z˳-gy=id X.?US,—@)X!5[A[45+eb2QYTY8-AA/]66CSힺ`;cэ HcJv= [J "㿸t޹~+)/$^Rtn::-Ӽ|6+_.nf4< *@6>`%t "4xˢzH00j jGMl+ZJ~TYMTSP4Qux+b_z)/zˠ6@>zKrܵVSYk8/zu\ׯj"'k)I2jYtpSBd+ʅ=ʏN`P I8%D&@!RPe ^KXֈ)Ŗ*ZV04-.fic 6uYPpA9DN[J?< 8p׷[3ظc#k,3ٶx_P{]\R0 :&ӞT<\D.r%.c!8C8La;ysE$.u8 &߿L|źCЁ'gigAM9V4q7*P`xŸj X< 3q6mQi'^3{&[mb^4.lݶM )EKxъg ;=1[muIewJTMT<Q@cЍ<n`@#:ȿҐEi.\錆]  ^f)vojwJT@`&eiB#^e'@^eQ[j^b:'si/:Ό:Xa*jعjː7'!Z+f2n@o #3ʙ`k 7ZW]W Jj }Cǎ=5v?{yLɆǬțoA@KcOmO:K;=!ByA;ɌyMZ=f+~XH0t"Hcy@nS 1\I\Zè8mWv)|K}, sQNMM6,Cq/צ~>S׷C֮dTRB4LǞ r6w 3_Rj60 ,6F+!C Xi# ÆI'\ݘɳ *y Mc'0 ҹZ[6kӞƬpж -9 ̍B&6HđI{cȽ5X1+i* mZޫrVBԕLhRmܵať/j y ;yk/ペV Ҫ(GQ ) &yRs:z(Ws댪1 4VlRPuF蜦En~U2svH :0:6&G .KZVKkb?`dPxk徳 1oykM1y( `B< P5RA@W=^ӃvGdjo{Ʀi1`͂-7ÂGgQ[11"ީc/4}d",!|"Kc<%f |%#v$\ R>OH;EDmL".3j(g |1dOc +POT <+R24  y@ORlͨ eJNTδ4V N0 (Y&.6h%`ZD+I{[scp>M C~6C$H~^,C$Na8 ɜmԎsV\;-YG,˾#Y.E\>qgP /s#ᤎְ,YE UtԭLt ǦمGӈڑ" &yJ-Ji L e>H@hZ J̍YhCVy tW3oZ鷇?^xA(~i@0C'U=Z;o1/ܱ1u]" 1.r9^?|N^?t4#7ύHbK|k (KwKsʚ؄ojJcp}Xc>XM#zԘjx)Cሷ?9i-(x 4ՔS+P<xxy0fxA:o8@߬ vu<ޛ Y ʺ.&& b݌?CV1]J;d%SA&gޅS;~U^P3RA@W=A+gm)*RzGJ+*nVY/o,Nގ.ZeЦѡ1 F|m%'"~m 2f.gR(W6qX\[c _8!8mvQ|GwXO혹UBgu2? g`{2'd(uG"MmUDnBЖ9cQnH *NX\t;7JCD> Yi_㓛CDt1@@$B5Ԏ|5c;Z=Gv|dcP=F/FKm'mǭVz7 X02(<ඁ{m!wJ:c}GRɇnܰ|SL +bb>\*(]5Եv'>!A6Mz\F^O4=K5C%O "<-}>4g_q&m7T#|Vײt%9߻:*OVZzTZI}&f.6;4|)M0K0?y%fbpUZJhaAbqZ_IZړvNNC'ۀ@O4-))}2П4m!QbJ9k9^dxuDZ//%t?8Kz{޵LbJ2$Śj5O+Ҍ~aN,4 ~͞K5-9EU0Bʠr aFh%iH6k׺KbY?/h-\n\RjVcWbd_'nl8VHAA hL94DaK{L!dž;v knj&9-=SoPC4ևe(śwGT 8w&lݟ {gwݺLLVpr!L,A=WEi'2ʝjHJl9#Eж:Hp&oo[(zr6c>HOfpw̴n*CIJ ZO͜ P-O4,JjژOPeyܤ=:캻oޢjޞ$0lRt3X-[iukuy86oQ.uإjvd``%i4G0["]Jɠh䫱SIF녀NZ'yk?i(W6[`r.h4!xaNQM}{'3푇el3<`X4yu0#!-ɓU#ߥ6Y菪#Fz2‹#>Q)(xx^$]4z1|e}b|t.+ rI醻xiF,\K?%myjjpm%7=HϧɎ*x.ַH0O\ƉRލ9_KψjWIp%*Τ.%/7cFiFA4<~4? jK`=DMLo?mGˣ>p0 -Wn`lӶ1P hrYs3aLaHBo<3Kxh[:H^`k83Q r#0KCB{v|~XB`[edCnJ5OXA9>PR1JQvlk .7[Z͇FiځxZ| GjhxsZV_y;.:6]|?|t}4G^CxXFYMb yL ptӒOmo>l`f5\ȌH ~#oj)QQUyju3uwtCޘҕՑ?N9*|%Ϫ2fcŗ7)[C`W|ڑ/6WP19MiR~^sڹN9ӊ:ӌ:mj'iINՉWD"m|`2r;rڧN+:MVZupZuKZ}&-i*qUjL"QHWU넠mj XK$iaN1 a"uB=Br2s뜬*J2ĮP4mY}uZP&{OLucGeZz@{55qU4rR2dž>_vh]Hޜ4ND_B@5U$-F⿨(R׮ÓT0ڣFZf +ph7>Ӡ]봶N(sD6r\웓 ZQ4)|.9!H4QȜAd$hi83DUea Ә-eѐH^mXy&;!(8ia*"k O8Ew,:@ҶGw`GEقOsw;$<7<<NAN-1γ_yMgA16]|^+E[HAh[֙{ 7Op׵<-pUJ /u%i8peoIنp-S*oLd;oT#kfr#$@Ɓe *LӞ}G{2TYk`|o+,tWΕ` ؤYJʝc:js= DTK5.)WSKUѢ dDnoXn:~ԑ:YyZ ;Mi) nj^T6nOP ΘN0[ôrt avBSa^5{lA7B~ !`؎HS' laj՘a{ߪL4[yU 4,JqvJC|I"U=yptbx$ W@& QA5a$1}J4X񍇽n#l~A£{–G.ʺn}%oj=c_F M#IUNOxQ9~){oła_å3oGȨgCrz(1;.o;Sޠs8b8si-TO(LHwNH 9ܓ?jo`/p@HqBkTP00<3H`D d܉ 2D.'yn  ΂ 07f@il IY($G9uC:A+ #`,|\5޿KxW`q0bYkJ1U2mJB`aHJ# wOBmrP I〡Q %ZT'6g`J'`:lH-OnJIɬ~Rxpu@nQ֪9\7[Z#?S;O^ۗ/znۖQG=I Ph2TF+6;be o5o-˝ћlrE{^EQ1J HDߕXdT^5C+`8?m*^ |*c4 (- Rٕf-4Y8xRCV+0<xirȠ zㄏ5FG ӁgzRU0:kb ub8ރ;K,-rߝoh+(x08|*(erm0$2t6 @Uv5: 2 >Vc,@4?,xH{\յ2 #ij8u\x{^K%nK &]#~N:/ϗxZW Rda:TFRKde]NHV|#4V7"hD>gmyB2N-oegEr:[ 2Pp!V2۝)(b)DEB<1C!B>NK1uֿmIVoBR fg<`z隉Ͻ7I-a2 1vdOC`[ 2>YcZU%o/ ݶ2'LRGmQе1mr6U !%;(omaQE02s$z>6bK*5tDp]Oy2F%|uZi& `?/3h'g[yf *뫿*G@.o1fĊxUȠī7⋭ 7r3S%mhO (~8-4k#uKJL{_mdRUP!å12晛{᪽ѫ|0~qZt?WcMJmHyTB&:> !d}J2]xϦ[!@Au$\=޽6^A()M.0QaaC˝yn襾ͺoA1SI R@Iiky6 gD/P~Hm-,]ԕ#N*w{ I#^W g47~]6rl/"KidA {4}Љ?`T۰6JVJ:%hH%ygVҮ(ƀs񓫔[cM}V+=mx s'{kا޶(}IUXaSߔu1 ŰwGֳ Stj<j12Ӹ3f+1}M/8}zw,NK[-_>xjzyC6t\}!et~h/4"uϭC&B$`,`oܹ~_C^)}yͫxuk0mc֍Ӡ!Xhcb`nykN$𔯬2ҐJ.<@1kȏƨTkp[We徔^|A_~tV{LMlM]rie~r{=01oH]uwѾϘHߙ"1 CHt,Og*7Ӣж:*%}n8˵C|};@pΈ&)*/lh-IIPe PKrk_d;?ҕ;,`xB+ZgSB)A=ee)njx^QxAs\MǟEw9[tNWO t~/@oK2=?\sm>;|inot]s溞s:7^=_\=N粥=suwlg~$&UigHVLCCf #oh^Ǥ`tTP00pG" ɮN )Hf·#:)lR8͑%7)\4R6tq"}'4u;s8SVp1IYF Dd^4NI[ߏ{m :RqI+Z VG 0R8ͤp#II䶪N4EX&uh'1NXNuU$RkTb椲ڬ!)u+'j- Êd'dwqi{:ݞ+|sikjwg:p)'I5OJ=9)#[ss#C,ߝu˂;?:uN%97<^&un{O]{zQU|cOs)v(-~YQrJߙҞ'aގ'£Bޛ_eqHƞ^کȴ*iDn3W-MvSo .$]'m`VND: }!<6'c'> o[uHk͸w=Ց?_ќ &zƿ4o50klА}-SA@W go7~=љ}(x={?Cb4֡ \pJ;^E:Qe9SzCYr*hĨ1QW6+oEO12_N$D#O62/ɑGtXND$j# ^`a9Qt$W9]G猻 ꁆG"nodRDK,@EʉU6 PAܳT"54s 8vUiv2 i3Pvmĉ9I|DCMH޴L'3d0U0<09Qrv`^Do8{S;"!@B; ``Y$EFU\'a]|R汐O6vzR#eH~pϊ#;vVJDRQH< gWR9 (Q"R5Tj.SmPAB4%]HJ:HaJbԫiWԁ")". n)IӇ U?=0j,!5mpcj*(G_+T !nV㈙Y:}ԁO5HιqiO/~Q|G[v震|kT>|l =ηý/Z?]Gn}(.G]?t=敻VЉT#{^߳h pťG/ hcm>$\S x| W C&¼ wj쒷bvcH&8?|M6@&*JFK}'q~/6[ p1m߶OX 7 X͂@9vq: S*ޗKi+>4w;^54-YV?jo ms*4fMfHq*-/3/|kVB07פOJo_~69=m]nr&lRlڀA6)PG)}!nڬ Wjc! w7LU( 5*-SpEe^@MU~PyռoU[yWZGr  o5crSh鞼 xCTvhWgm왷q[ ܯe cmAH;E y[w͹훷QwZtlbu= #7]7_9T"Θ~[ߒ'U[bvT_O?&}ntԺͷ7Ƈ wַ&XP004@Hce^bn/ yG Y4p'U;Ƨu ߓgW,/,71F*(eu$ 0*J[6^#`T ._,ed,a[]n$m)M -qcdm#:23rͻ1)R8Ӗl`AO .FÓˏ!2P!R-gd[,ɰqWmcw'&97ݺ.3%3!i!AZD,d 5߳iԤ 3Bk(ZWJDQwެ)-ލk_ E]dyeHȲe88oOd(0;_iFr|P\e-=UApvY7.V*S.ח|MB}۞jrjR]̅D* _& P`_j7`dPx}i5Ǟ_M։ij+и<θ;jo+tTO .y6+ܰsi'5vak&~05=QsDꮹ10/<y-911?/~e\|O:s0]QQc1.j|Ni]nӒ6irN:ń"@x=ղ:MkZt`~]9QV$4Q'ߪ5=Dڔ''Չc`Uh:mwe|$ H4<5u?֍~Vu"7OCʙEu ^M9ӄoL4H\u*&UBo'=ar;iEBW=EGȤ}{OLsO Yw9weDm$B0s0rfnJ{lD5Ӗmgt}N4f~t Dh:E=,)L/E+R$y7N/lZcbh0fTD艑(Ya ^4i:Q9iBƵy:ih"!{M:Qs^ n lHtL|zVhkMht1 Put좪9E\9c} h#q\04F(EF82'[W'jtTP0`{ 7x׽?y`p9}Ĵ;sWBquϢti7vw^{z~~uW{jrnW=iro/.5g%U ; '5@,5eujO[Z<`<zIG3ï KgQ- f筻N DVS@Pm{wT\"m|jQM|,ٍ?*]? ٵ~աvss̄3^%y?NsrȂ/S_{H>YDn/9~/kwIJ/73.n-ng̽EK~/Kx:蜁9v%/89vsx6[_w\w}tȹɵUqT׷NLm|ަ4tP]"TF_w+[xR\H6Xrw6MS6 wme׮ڶw`QXHWLafy49+u=TϮpMWB"!yk4EUŨ:8(QyEP/YbnRtڂ>dy:r>b 8BbN-UV+Xn`dP֭T뭯`}į`09{8&UO>gK{[קC.A'cR HI8i۵K{^_sv`s'U5fӹ{J]<#L3up%/̻:g[.{pɌ+H؃DAѩ-SA@WmoX~S:ҫ>S 9<6J4<҆iz:4yvpoڸڭV9c޵`:ܹ~T]%u^Hv+:<(/[_%wu=; tsMg'Cdj:vu[˫+i[|i9#^>?iu9) fftyAWoیΘ[BasN5)/5O/jiʴvKVm' o\gNm'Ro"i椁q &qPq &/:yҕ"Y9i*tg{b^NJR͕sij S3 "v۲̍ vR'Kgax xІDb|$me'~$FHٺXysr$F6H]G$Ȗ`E[MQpҹ< ?1*z-pEj>QMOW3 YF%%8^Ҙx^sܪUIY94S*oDNmj+Y:'˲T*$-4ln‵5# f *.WH:7u7U6ӇtcճnJ@]%o[@D Iعs$d)Â}!gi/[ǰݥj7]svi͙BNqжZeIfo5 a4[jEc2*  w\ŇdĚttaV]֤?tbYP 5|*(xՁ9^;`fAzOTo 7,MbJ(mEYWZiUxUȠī .~/[Y9Uq7ӝ]_ߦL?*}RA@WX'wm}>'Y0yƝ3&*9xRPM1 F|SB , o7? ksd׷ºk.$|ed(KDˉ{h]w+Y0$`USs$cBH?=Dhl r2Q.EMFi5X/gv)Q6@0֨DA[mKַJ6Քx av5S2_E;[%T|YtU =z]ujȧKg/Oo/6kBzi2 f֥"qgwj5N5g=y4z2u )laX(MͺశקeP֎x !jьeѶ4(v}jؠ%' m[>G5vTmFc0e]RS;U䣵Z(inϕouv:,<`ȠW}bOo{a1cvS iBN0yצց1ۖ{w;cp篴vvW 9ջդ`BLʆKc:.ǫp|#?nz PM0M5|Äo2UQRYKk\wPt9n016s#||]=_7gUq OqGҷyςʷO-ƙU$0`qǩ-Mq.5ؼ%J.ojP/ 햗nTl)Lahàzc~{ +=~䇏!SV?]>ё.kU/g 4V6 i7cV'M7uYw$ ugY {:r;#%]\5(@!Vi 2i so\nn2נ4T[w F**A{@]!TP0<`̕l]|?|t=.#_1j‡c3Jj9T7ΊHw7b &dԤ,{ Ff \ႌK<-o]Mn%)(p]L,YkÍ0 %ivH|J^qWMwAE2sp: _i6E lK;$fP;@&k2&w=K!qMfXu_U؊NN=!P-צV/u5C֧yX۬" Iیd}Ƿ!ؓޱ(my`ƢO>/}.01+xbqՔ4{c[K=*(p` !W-ObRCoGic#=lտ nj g,.NF/Y5mCe=s` a>w~,<|X< A`y@CAR#a,ąϳ4(90M>`l35>Lܐ]<^ed(YiF,i4Mlme>hH_ g}x;x\i|4FstiV6Z*Y/6K.ܨOHAO%Q>}JB q] Lc6#-*꡶| G |h+ݝΞnŪ)Oks#- 2IP FvB$+{2R8 `yL 9$:sp[2/yI2-kU'ż-#[#X @ѹ@0-#x^]Qў”ۀ2cӠD-@lz~sưi] __1 =V+u ./<` xZt®呂mo?uW{g?ӡ ;W׬JޕJmhm0p dFjCī.^^vaWWxެ91ouqRttu@* p~. R "'h46ZYU1**FTߚȾGW},=ʿuM@d6x]gyeJiT L˸٣G-Rj yK4,ޡNyZ*N >Ġz5Z`PcS0 XuGONIw__\:QylxޚgKoOX^Jjm];2Mm5yUc/uOOz\yo_a `;ZJQ)j`Ec.542xz!%Jpw6LٗIfnh``ax*o[22M>EDZRнl <l7*ȍ $&TiP=&>h<=r&Hy)&ܨu@ v8[7|eʍNեS8A'OE<#yZ~z|t~(F- JH"NBn`ijn& *E4BSfc0du;lLovgJ )8 $#3Psc2PZ-vT1g),jrw C*N$-д0%mFs12 /" N6 T0zieHyrt㍭y ,!``y{ZLH-?;_=kƗO Ikܛ|O*Mw_j`DLKc:%ǫpbt|Y6.SByW]qt tXYjm,z 26wˢ9kKW6RB@ *R 2G歎9r8\^s-pT":\d\%N'-O\^Jg K= ;&;0b9\*( ('w^Һ->[O{K%_[<+}ɻn8`c:} }鲻; ٭ =:|9s`GEc.542!]6-D?1L[J[1q~OFp1v.ao\K.jPځQKH;r<XekMeT4TSO$'oXn(@\ $" OMBZW&4j^2/N{^̓:fNIˮTH樼 @7\%*iUQjlZ M|D{֒ZU_ v aRtv68KZ``9f>]VÅSLܔ4y8hMR4RGFBHpZ7A^A)ڊ}%Й]R3L3,4{i}ҼH9axB[%yvMBV&f('2o7ejB˲K^.]ЀуOT<+xIpZ镫{O4}St`FT=83;b6\*( x3r ^?I^o8]hpN{up&ٺʞlw͐^Q|η.-+)R!=Ebo^b6 'ik3 ҡg4`nie(ӮwvB.ǶOMw\2%utsª;Ư^4~ݮR[F@Umq-eL|`JmLn 0 iVk^GM)q{Y/ 3b udжfm*~oJ=/o@.Wd4@+zPcQNۀlj?9EZ+DlsEPj(~l@y]ֹkހaԢha-÷F̩jhC)4$`P(@ BU <6oy8i>j3֙ˍ+je S׭s<;պwxՄ*!xUVZveZ׾f]?k[=nʽ{V;_z\uω-=˞+gzzi3':81y 98ᐍ]?ԵvX}zO%_ZݕԽp`mzృ?C>;(b"8\*( (󪂱u;nd^r7/ښue=KyÏ9nw?{➧sw9>=osݳv>}Ŕ#W\H?Y>Zo؎w,7~!F}9d``,`Lo?CFXOA#^m(+[ ClɝQ@Y:1:Q#𾷆{|tp7|BTIyVG SI(C]SS+!>SHݬ9M%"7#;˥-v$b 6BRǤ~R7cVn:ƧM+ټPD_ Pu"mֶ0"V B`bǑz8@"0'"-f)K\!P 5$: 6 EL V d]6h}SW|| ?}hQ&[bڭ9yL B36\%##`fqtFwڪZCV J V39ø¸G[lvʢhŭ=S2X4 e`hmLiִWi/ӆ۪Iնko\;@L@_PĢ̫ Y U? v4RCSAX(/< |Y"G 2y9 l2zDMv}x9R Kq/!mӌsܐ;Lэy9逪|x`X3R0z8q!2/jI·j"AQR\%voY"7m@ҕ3qr4qr$4DiPN&+mZ(@f/sԞ'ZI!2-IRL2)Yb0wam?D̏fI_ڬMh%y( At44u27}Ņ36T~P H\cyXy7ʋ7iq9塒Pái^b#UMrG!. le]RȀlA##(YmgTY :oڕhij8Ph݈Gmn>^sWJ`GE̓~)^Av yUx:TPPqiJU? {  wWo:>WkH&fu0[X d8H) '`}LVs 88 ;wGBOrmr2 @6A" @Ϸ2C:|kr J2 rbD\Ka$>WI+4y,W:jw-[JhsRY! = ڔZTR4R*k!|TZ!;Lqy6㸫am vy6m iߒ=$'ꮸ 5X_%ۀ)Z' Q *Vl"U̬PV+X(&N5q|T&Îr/$㐥 dZ9R}B[@Pbl (vݑj^u<,!`Sz^`VSAX@Wl/|DA\jh*( ey0BDԈH6D (5Aܗ6I7l86ig(ByN-@ $F ;cPO4Y(c%iuqߨj6G8oDR4f52i@OMNٺɘi%Iq;، ZJf*>8Riڠ6Sa=ޘT{bt { PsHΗ55([ + o({h8>2~vE抔3:0A,Vprd6RW9J,É.u%b )hUh4.HJZ&j5*D>ZW Qy>:a|-{#Kr~WJZ7,<`;<ۑFLccb:Ί>.^+c/§tΏgBۗ< H/rѰN! S秔b@/6ˈ']ߩύ*NN]j/g'Qn>;MC,aQX_("r!.a  2x@Tj"1[U+C:M0ljmi4ʰFq\dFOC=5L:!yvl#Cno~=|j*!xUAAAД ʼ`;wR:YP]bpOpżNy}y)1wy3}L.<OH̸κ+(A2 XPPP㚔~ljzfRO>!ؓޱQ)(xr=q]==2b.j| |Z:6tzϧhD5Ј0 etO5Z?z_VB_sr#n,mqE! $Xg]s ##|uDU\mxҍ=P˲52iFcZ91Y9rDv"0#F02 Vg)y[JBӼH x>6rbeBD'}F#(gT"mhW†0 N .tUa~acJ gӾw_iQ^8Q=A hأ#$2x4@Wiu;ˌ\;Rt|u`h-VǫfxU@ Zt޳9\ u•H=[{(񪱌*((TMA @LD&;''je^UPu4FUPoUYբ;v6ݑwl̽9\'M EBh%l"_uq%yF?''@PuPh+&9Z\o0ۗVII>;9iTLdb=+ҵu¼mʁ9[׽h8߽NՉ& HH%&$R Hu4J;Eu:ݚ`+DP:&l#WLAY 4g`g?`R}ɗ_[tOgߣ{G/>s~ߞNGvۥyVѦ],x36[e>o+ v>pp/l[ u^vm>Q;mo%6oNP Gy;>o+m!@E 5Yx{b6F60y%O4 Tf3IX S !##G)}9Z:Ҿm$Ffnh4\xe[JY i=ٗ4\oʖt k/ʧqʳ>6KFMv MIKS(}CV +N%zBqJQ;tFy<a88ڣ)]F "+$eQILT5ïsxA]A9(%$i;{4y &oBy` *n~U`VSAX(ǫN*&/Q\W^q%?ۀQ|#K5D'ʻ 4bBr U4j->~0! p57tGt8{?v[MB8Fӌ )gKi4k =oK'[YR!7LD$>e5Hd"[R$W@M± l jVRtVa(U(H#M=#OׁP636hҪ >|9ͺI ``FDѮ.tUiLri1\h`;ĄZ=ڼUBUL`Ř]ц9VmPZ1ysPT㶼 Xg전ӐmL u)O !q7LÈ>Ð!d'պzxՓK`PU[C܈6+!ZP#å2*(خSAX(/< LLkR {9n&F P&-qbr=(I<'U#-(ɢQD-Զw! yi>̍+Rgm1/~b27aeC) Βt@ցz*ӑw%I+$(uREBc"0;~h:`U3J36 (DUe/4̩p6!G`d 4WdM[ MV Kcؖ=\d9$ &lW+H`r@2a(^fPRXWI S #0H >>[:(N^cKa%%bv\u˳ډV|H9# Y\V'`Px$oh8b:\*( (󪂂KsХ2\Me*( e< l.aGهTܼ 6i DhO3^mP_mJ6>a4rLΗ;q+$ k@]0!))MCK9BTDζ: J8v;0o2#\hnŦIa4m@WpMANJx9&=#RNd`r !Sa?.{?24YѷF+)Q6zQ["JR|L 7L ^(ħ3m htd29UtI\v4HgkaF%\^ì(T=Rrtm͍&{Cú]G CSS6tVy# X0BfxxQ*((xw4 YĄoTP00s GD /WG/MWӵ8@g5Hc8RY\u q|:RӷIV6N~})RIWg” \I[Gc J@ZgkAu%P!7q$qNtHJ4/ {S z!(Ԫ|Měfr!;Ԧ>8͐ Jգh 1 ͸1&E26[ Gp_ͅh ` f%iv*MuۻX@Z^UfﰶX+kýU+)1c3#c1ѥMetu5uX/ x9wQ-4 ve;4˱-_LE%f[ǨVǫ.BY^PPPU)l>̈Q<(󪂂x)|AY-xwj(g|%Ʒ!Z!2N8;)%XgX4 ]R|@ʝI)o$,WWFYarjͧ{H_!)[*IQm< 5 6%дE[QYj5}8QJ)uNwaǴ(儡ZNpPh[ZZqF/41FI[kEsS~taj8j2vaڢ}w8yᘼ 092-<౅,!!p2[P0шQ Mc:1ǫpۀ kuu_ruΟOQWQ(#:Ąt̖jDVßwQmt_@qO>up=b=z4j*a)#+ jAR:Ե"Jkf3rM5Wa*Ev$mn04ֆ|:RFXFe(劢 dI"IP*2yښj C(,?u EpU} QiP:5WZjj_U(tlZi<6oI{FVzD:&/,(o@!Uu"jvId 238N}H#KTWJ:{Iƺ4: %۲(hIt(**r N^KT-q6)ڍӍ@GU26F_HgiI[[b}j :-LJYnJځʒ7#J{u:amߴӗ:Uƴѓiܯ2fLǝ*zH2 4X?/JiM"EI0~RYl] ͒A_eDf-mGPÃ<%qwKe:|BX< I&r# R69Sr*y ^-\穚?Ƶ~+BT}2Sp(Ӫ?ڤ3:y-*b4]ES}ٮF*-Y Zq_&eڥB`?wfq2 !OY ;Oo[n ]i,r .#QFpSmu %B“,id SM *rsP'sc,^_uMh6{rTE0蘨+&&:1@UU-a*]iH@&O01bXyL):?ո_1ڍћ$F@"pU(B:iHQw}P1LQPW232Đd11Q54_Us2+.UZcOF,i <"zSZD4 TdjmTɈ)$BC.H|j_**t/Re|/5JG*(r\jQ-6P)l9S€HŒrM<Gi7qbڿX5EiZ^(ɔ5̉k a( 䨴A]pT*qϴ;^MLHftuJSmՃTmSwR&=MRe3j<ע28 zRNxiW:x1QtnM߱f|IF >;_,McuJ4W3d~t3;5*ɞNzbl׳/imخrJ[Jآae紹HZ))ʤyR03D\4'TdL3`}IT7!bEpFz#xP3=D)GJˀh=īe=WjDťfI"v **lN@-&.1xG)Y-YD*3UA L!;ޞR$<&]eIJrߋ$q6eDI*4Uٓݰ1VXGm̤+Y䂠uf:1DgA`usgcS׍XdW)¸:2,ӈ#uGKu1c!(gԥ# ei:?S˵b7HQ,mLU(*#WQ&e@Į4aE \h*.E%]S Ÿ_쯲3UR3[$4Rgl- KD]#IMQB2!=/se@˜E' !7%@rUݩ62%A`"*`}\.:UVu벃ߚDLVPWQi7⮌eI%,G T4NU&iL9bMtPɸ4-Դٍ/䁜\mZ~ xgZ*F~)X@eǿhkP4UٮG JBYdI6 o* Q.MjdqU*vl[7u*cLOo?"Uxqql3cJ4W38Nզl3?]yu.KXس_3O\t+3VjR_c2hpᔶHc)$-"[64H/j)R|aD^)R$FZ담_Jmi9/Iך\$qХ*RV݋[d@,"HU,Ɣڊ:dXE(2HѝX_$U"%yI* CqtPImDԋʻH:/Dژ i:7nSne="$tPJn8 iBJ")\eEJ?/->+ jM~Yۂ-;`?=ֵw >guH" Ec5)Z"g-pTC%]UGsqwe9GHϥ$q$%"pv決ቔpHy/vF*^:EdJ*C=H{Dhr@ 3FаIYeC鞣g30WdL30y7cG j'%3?_j)Fṷ3Zeou*3/[2#XjkO|%YvoUfV0f뜌i}1mnLBXejQNL_ުPl= 0k^0ގ\G4!i :112 0[h.2eTt~KЋ.JY}af^<^0_[b.b/JKb 5=cXo*c@2U:0:ѳM誵| Yi:*$Uiٸp,9??!EL]%L%[uЌ_Zax@.HKJ=y΋LU*V=P#un3dg,#rRGgdĂn?Lcmf3>3/3O+ߚGzߊmyX@ ;`hy$ Z98\h\D *9!?'G4I-t<_ UxDSȪnq8^pW]'e _@ի Y*\2-q4Qag:U۸ҥU墀W*_=o\[7u֍1g}%:UhgV=v],XwE:W"ԑJ4Wcjٶ j_ʘfԗꘌiܯ[gHRZ[$MNH)JktdJ:I$fy̔ԜͶ".zh4w"1 ssJLvD5fzFDH:Js*SGeESA"43N.z]tW!iϔID4>SE|?S$Iy`2IIIUFb,EnrH;ʼ7MúK٦_VS>y8nfL)Qmrk H.=R$PV,!E!F ZvVM/O1C/z굴[,,EqpU.Jb$(vKj6iԸ<ɜG$.Dm2eԸHˋ:%?)ڵ&Gvr3 kI[n5mFj4) WvUұnb@gUw<ٍER\$译!9 ccgq_7eo?Qm亥/:gL[_Y >ֶ~M_.{ꟾf_}m=SN[5}i0/R1@SƴE{W#ݶ'ȣ7ִ UicA>2.W*_<<~c̐ X1@Uxb?iLH a b`/ .hd`Z:(^4ܓF3ޟJ#TkM qLPGc;| g5fB1pz 21Y1f22,CC [3VVl +:TJ4-3>톝2UP"4@$g#x1/i"Wp6 xx>gͶzpAn't!U]EZJa`jZ"-" .[9{ _he o%RL8/Ҥ4C)JDZ?zQ[ROhzĹ3^.:*3g.:+3iO]tk\t*3I˩w+3#=SW;u%N{wT*]qb_)eR_c2h߱Q3)גS:ϧVB AajRi~K i n˯:dXh;3ҒߣztWEQ S˰ƛ2FfKf $W!2DH(Gq6 dHAQ&zUCx-Pkz>aK6*[!t\P6 g=XvL~:+ի_t?/.uW.R=32wyKB!J6w9#FƠ* ^tϬ?k_y\tϬ?}Or)Q,#RKR]tx3kOs'8gO7 9+BvRVU$CsWmPպ!`u0mA:ߢ鞆XyQ9$3: ?TG2l\r PsxjnDVuy@S'c9ض¶~j_y-m |iK}n;MT绗Nk[0KA3rWS;NUp mm[SeꂣڔN?-m Ga.Fj洿aNu^sh;seڶnlktkJ ;No/ߔͻLKPKuL4 ~l9mAcޥ~΅Ի%R՜GOFa_ e22T@vdZ֪eش vOg2燤x4]92HT5K@1Qd@fhvu- 'TeL۠dp1-D&\9 0fS[Ӓ9뷆)TǶ˄iD!-, 2k|upa{u@S &XJR8FCëh24iE2xlݖ|jĂ/\WU9-%iI(ZSNgUkıt6">TS"]t"7!Ҥ(}7JyS6]56H]LP8!R2 dufQiEN.Jt EkruJ5i:E ;Lo: ]6V`J{W d ]ԆG:uY!+MOa)F(&7R%ⴒw^|8:1 W+ h*Fo2cM/1 4X|{F61i;yॐB<F0)]]QtR{r,?rW,AJ: F;#Jr 9Gƒ$Q*#y#.'tTL<$ .h7;ڃNSkI(?_JjK)b=%.O@ۑxwҌPi%!PM{&[l-0Bףzp\Rvy*Ga) Σe1H|I(>Iu.FTg7|h{QgsM4!9$(r{| dv\V&U\| S p~B:x s$ [*o ?^XGjB7l.QK,I%.zW!RޘS WQEg^2D5vdRy,*#,t* KA@^E3Y/ MKhhoMַv]d]y;W!QT^ qQJeiEzIFOVMfg JLUd_ lQn\EsJZd|mNNEhdYMJ)P$R*c]wIb65"&!09A?MS5J4;"u_5hnHYE0UJ7  "k0*?u@S'cDwV2pcLPKuL4 ߕt@Euɑ$3Gv~)",TCH:jh=B?T!Ҏ@7!zEt&$'/Pf GIMdePv^ HbeD,@MʈB@@+Cڐ^S gl'bv=2vfZAr9$ⱶDŒNE+<b4cVQJt )0ZT;IKU@"Z;j8.* @"t)Uu^JPK%աӒUڦ=-VځUe UTt:@,3PP][u@S'cuN4 Wüu 4Z&@" Y;0RԸq'V g pZSiĔg&\+0À\VɕX L5clG@Eݸ/p,W )հQL, {jEcD(yw@xTCK I@Z-P%ZAJFTL&"%X _<"L:*v4 }- &8Qx#1lQ6.&zu^vh<ԠZdהi !jWGmaU'89U)iځ&YAD:/hD,.q0ZZ8p9EM$:Ex8F=juh *H, A6*% tBklBIYUI>Pwjkr]+ʧjǫr ǫ1 U+\2 uܯ22TjKgͺzan `թԻ-4_jJSP$;4<"m-Zth)"騽[JiD~M"m.zp6_)קDFHK@ ۘ"+Ĕò"&%]+Ҕ"=Hp,)*DRv/r"ODO"/ [u6:TJ""mKie$\BH[$QIT$2gZE$"+svKH H\:Ij{H-gyR$卿j] 8 W8vm5=O+ RIޫFzHZ:s_-.A))Jf*(%W'%U%.g9#:WZ.8)'*GR$,)Q4q@n+ GU UrH{env$1E;,%Nsjk! KSx5*hg)'̨~xIS=[Ɍ1Ƙ֠ԗļ&2yw[P*c1-Io? WISadqJR")N H"_QXFcQ)W ȌHJE5)dB G:&%ʨ7C)H2H$ tHϤVC[HA&@A_)w\T!b"L.TjRR0H甤h fD1I08NFR)K' P"#"G&D~IkI0D$dDR%FմeK6[zOCc J}8ᔅ-Z:bk*JW'學ҹٜkΙ{N1mK{\y 楷+*"ѫ1];c%^Ml&ƎU1zMp a"FZA. \EyfT7*:t t@a5bsZ/ܐA .2QZCCA1 0=-c-?4Fb2Ql@YWHm e@:1X1 b.(rK(όW>]h-V%U5{ 2#_$<Jۗ3C{\^iaWej \K_ZNx~ݢaoLG]' z.-e@mէs /Kˀy0*Uh!3ӒO=O!9I8nw^5  YUuE?I@?LSm6yʢ{~>-h qȪj!Pu~\|Y/S.6iw[_ 7Y뮸03pDV 7݌;U3y~UϚSjI65Qi(F6cMI똌i;6g}sҵל#d-/.WlI"5ѵ={@lB~pVE1VFi[)>$ Hx:GI @.Dј봨+DU, BeC_ի8Jy)$H] ^s@ R?U3JqG]m@j',dU+EՑ$ޓ g}S"EKfJjr!ʈE*-Ҥ<v_ P2"ӍƠRK +K0U:1i˴ 8\-io.v^r-EJP%Ґ1*vkBU/jGшT5B$hjU AÜ:k]O܅dt@' T4 (}?P:-9* ړO]%;cO4YGSY(8-]77v{Q+ kǿcc͌N)TN!13ˬi^_Uh},LS~cT]&cg͚(~L: B4E wKXA5@VP ERx>k]&Lg;\H(@=U΃42"i8#v4 b,TAYTA %; #Df~V|뀦N?(P~cQ+%cn[?U\U<Cq6`hHD1T`cAzU3VQ,h /B 5~enL4ḑq*E "0ДeqQmD*2SDM&$Af4|]ZAn-@21ZETX*٘|8̠rɤN*cqa5'4fpYpٿȊ a^|aSEF8 sr"I5V/ EqfC'2tnJ&̘rDjpc^TDTdJ5)Vƃ%iIxɓ2Iȝ z yWB)XN@clWBA؍*gnɣD;iɗJr*xB77JE&:xh\.M&piPэ7NrSrԉn14}J4Wci*1@uM: O0ZL!+,ft/nJVLI2~giD k7.*Q<+LB )3\4g0ZtB!jYEC#yd,UblzFU% dZUr%TƟe3ҳ ڂn<3jR I9(W?]BAD T&i$9U,Zp]! dR4 !jҌ~Eޔܕ&l {04МqdpS4AYIDF^s ř ʠP)DJAWՌ~&Li\XRie:QpZ_y%;2AK#Ra_iځZQ2Tvk:X4u:1Ƙ!Atj%cǫ.M* ]؅V1` ݴa+cA0NLˀ1=πhD/Ғ0CIMfȨ.Yb'<` AKSpƈzlh#NyX!Jv&8X$K=w1VVS! N99 ݪKQdF@$jA $XFFuZܘr rD5FR0Pl-MIXui~<9Yi4M'>JQrEYΪ*Qe?:rEȩi,ϫ9$Kd "W Ha% YHX$yÍUDz0/zAQY\])*~rxYJ ~1=Rr!y+8\gZRy0/MOA?dxYɽOW@ mVlW&]( @G!JRkB5dIY5@ջ[]ќu6ܕFRk” YJ4!ɳJ2"8O6"gLȪ ]]v|J彵uoZ4u:1Ƙ!AU) 48^ufWiO8f2Ӗ5dLBce 3yS" 4b\1ݒi7Yq?osˍȃ*QA2IxF [5z T< `/)B\ MM"3Vf̭(/y i8[\ΥhM24 @i%BQ&bD஌u6 P ??eZ*2?Ȓ e<,ɢv53t:93(yykț8@4JO2xcD 1znKGaF" QGj ӞVZi2Ӥ!.:-ZeouTJ̈́{2eIu~ToW]BCF4W_gczց̨Q`FTEt6o:(q+( iDUG5{G35xE3z޷Kq  O Z,II1 *iCPHh%!Uψn#ȣPRxЬ QshsNG;^-W鱛2d\˗xxRv.pHX@S"a\av퀃DRsEu0; im2rځL"Uh즫% G(u s{hzܔt +Sj뀷X4uetx7c1&㵒1@Ux&{21""5*B niȈ{[! WQƯ@Cs&u*󌭉iP0&&Ʀ`&o7TyEZAEpސ>Y"dF0r$0 ^BT ׏F#m(ϸyeV}0TD4.=%P: XhLaf O5dgOk A@@eg&vcf4Y喋#KE)0̕= PS邿Φ/9.Ne@̮t5] ^>yFB>}Jg+&nLAAK9 =}0]T4j7+pD~rmN8\eh\rl&X8\HTs o:Bnu~J .M*WQPGeڵ 3:E{e(W7Tܣs*12_S&3*!%>Rlr(ya]JeFx2u*c1CJ4WciJ}ɘf:*rD\uiHe'3qsSg^Y'UW};WMBqQDBWU_>}D _إ/022E-/Eiy|Z.ę狄P)خT)ɔbDKùhZMOR>Ԧ½Dg'e;YhH*kǫv4?c1y.rdL3~1Ƙԗꘌi/ ԗ +&,сIFQmBQn"ڎT;#P'OCؚ:G( ZQ$F,dILjSe"ʃ3BJ:[4MU+iIt@Pѡ&U.#ְ],U"iU;\}t6FfImǑvsdܘ!Tq=@+@kn&/K? Y.xx,Ke$γ`P:rҡ'~R 2 Y݆(2Q: 6Ur`5I@eڎ>`v$c%J:Mx1Ƙ!t׍XUˋ'hJe,#uIḧ髥p u- h;éRT#EFuqF ثXWLREiKShAl„t*Dõ?CMm~8-F2k[Ӂ`Z-EM5=+A2yVy%=S)1 Т0R6kό~N!LKlA=. YrM~f: ӄ89|*CXD1qŨk\HM#8*2IIikr`*!܀KqA3 rv89 _Si3MZgK*0r!2 }E<[@9Uu*,@gj&zaUDd* ]@J~ίu`gʡU;^eǫ1ƴ 1ĭ|959WciJ}ɘf:̤J@"C#o)LV#8J3il ^̏HY#$ ({Ek&"(N8[K&+?͂G0e$Q"CA&ɒy}@DUZbTM2&͊r/Ӓ? TZ@@ńhY3XD(8v`Y.Nl]Q:ypbpY|I߻ixf&&pބnt DfG(6)wCLځn6SDuSU4΁MVСUvb( cBa,#;t ,VN5ɀ)+WsdARF])*Ii% ͈Zt~P9\$<!m"Py|4QH5I6uT% yٲ?r6Z7V#⯴GӒ'!$$ɼ2Y@Evdn\E^kP%tXkIx1O@GAhbPCsvie,}K[QO-:L()z]QPy&9\TGU3[iB\y@ger@mxyǿ#wgL"kV mdJRl*ؘd7N0 FiIV2r=*m66r3Oo=V;{9}C: \bڵmmmQ^zW^ٰa׿E3}c1f oZi971ǽqe?Khw1m/?PzIȞu[fֽW_兗ֶfnkGncG/Ud۶/۴۲WX17uqӏ>#/Y$>~1[~@ꪫN>뮻n7's9Sb V ߙt@E R&,Q@=G~h6ql<I4Ey;T3uu&DȕO0bA"\D2,΃>@hdA΃0. c^SkjYdI,*y֣E9\+t#zR&r{gi;ZeMT[ÏAI(4IUIƣȼ*ZPU<Ǫ=mM}#p{qT{Omx+um;`ll[v57 1zC/l~c|ƍT6ZTF c۽mcF;z_z]MpMMk51앸lX cǎ:bɓ1_~G>7M/ºuxgyfÆ /bl+8^e1e :9 >}yn[=7n˞qӽS_簿kKz_cuF12mXqґ={_75;U!O.~=Mض=۴i]+k7nzu{6l=?wn%?T%R{긃|`Wiv@Fu2z,NmIb7 u1IYc#sQ 0ސƔgƩ54g7]9LWha7e.G1lUfҀOk,F<#rEqJ<@2hQBM#rd \T6=ʼnd0zP ΑeAc1Ae1SfN)B%, OXQVO|@Ȫ5f@S"Oq}B4 EX%@% b?D@ Up-,}H%s5a>ee\WQ}epBn@*QcFN;3-q0]J@JEyܬJ.&n9\{S;GՄATFg7OJS {B][eVU;^tpūWSONvݷʶ7>bSVپA{ ssƽqzM>iGgw;ѫف[=rq0*.IDAT颏D/ /|/[7lذz^xa…:^e1ex4Șg=fNl-+ۗu㦭ORcL vЊn9V lo6v˖-=O|cw:U$zKo?_x.Nem=alyuX[Wmƴ^w@JH C@U{c15_;^|ūsșGo\۸-Қ ~1mG>v䛦Yeļw;vG{OmڼGC9kНx/o2z!Y6&^>{Wì/^>}nMe7<?ʣU{ /[dIU WOcL7dһ5[ߟc8b˫ٶ/߼tU6ll8}Glökgg1Cm17m>us_ t_iӦ~uǽO:e\YmYO-{nKo /<璏3#:ŋWŖ9oQQ;|g lmPr-N{Lś?}WoRYU/ֶۈl䈉i{/w#ϿiJϹ^ذ}ǟcD󀯾ȑ#񺯭Y7~ͣw_d69rq>qk|ӱ_/?VR*>D1Ƙ!ʔF^yo{7pWNw07?=N6}xjSoڇ.8e[~=TuÇG/g_Yĉr/"I>ls7n14Jg=XzHppci"f?{%o7};=g{> WsOo}asϽq<[Onݺf͚e˖˷lyyX}{Nz՗W]uE]4cƌ38W\1w3/ ZF/D7& L+0:L[lYnƍ7o޼m۶R6rѣGM1bKUc/ oSN=#O~QGŇ?|ĉ&LTWc11c_e1Ƙ>, )ܯ2c1cUc1*c1Ƙ~1cL}W|%/M\p5L̲^Xpe7^<SWvU ls- ̞aE-nƴ<_>~vq-}ꛓ搛fsBFU_~~|?PS7:Bڐs\ 394N` cP3t 4%,<儴e'MY.zSθrɇLtshZ玸im-N:-l!._$:o1eZXx*޼kYqa#Uε`a(_9y=qt(.|WO&sM{:}T n *}ӓxzٔI+[LݨQ A@0Sv94N`̠`P_q#[xO{ӊ zSj/k~yat@E,u:Ղ1<`i* ~|M] 6ޕ]LZBj׋1e.c1ԇ<1cL~1cL}pc1>_e1Sܯ2cWc11cUc1*c1Ƙ~1cL}pc1>_e1Sܯ2cmk֬?cի7l~Ai1Ƙ*cc=vo۶m„ ,=zGq1{챣Fw2 _eLؼy-SO=uҤI-:bǧ}1ƴ_eLÈN>sS1ڹ馛oWu>V0=_ rcv~1ᡇ5j|~gz{guίIz~:s]3pʘN;-_w_>_߉za6ko̹xFbŭwc)U4UV??|@:r_r%ӧO V|%/^5L7%])S.!m]rٵӝ|5kq+'};QL8<N'R=8KNў:k\4yQrYvب-IQ]~pg#;d8^eL~Ձg}^W:ry+|!;u⋼_7x)/]4'm7g3.~LѢEsՃx5L#޼ovEXj#osy3.K{ѥŲWsBS*N!ݱI]yW7 !ܯ2lݺuĈkT{EP8XxO^uEꝨKꜢY`r[/5·w[OyNtp*+[YwZ|-tK#ƘU4wS=zq@?]VU4UV|'| '-.U^1:RUVWH^~;^8#c}s#FNwH1ԙSԻ}srʘƳz꧞z꥗^ڼy^{u~ߌ1tǫ1cFWy@c1 Sw",_*pc1rjgV~1cVݩ ܯ2c!횶TSڦUS~1c{N)_+-<`_=jժ߿iⴡg^ωT~/t5krmqJ@ <ݦMiSm`h漁n#mohA|&~ 2=`w>VXMOٛ_]Tޕt/Uk 4UU2^vM_eiWWIloj7o^c1)}j~oɗx㍗MV?իW>^n?\9o 4Zxֵ[/nyڭa57)ٷ5k5Օ. ])3N8e==ZW[V?tuq{wOnC_~CCuv-7-^;KУ;[|lACw_sZ̯Zqs9ל31k?ҧOeWwc]ٳg{~1D4f>Y8xҔeO+գ:`@ ߳fh5> x#6>^/}zshҭk^:ng [[[Kd,qˮ5k.87zJ=Z5iJ1cyUWUHjLqo˱AoтKn^n؜7myUo~~/h30UUZm:x1Ƙfw>,1C_պGhyoFX7nCy@}b"U͐1 :X4cKC QƆrxJ A_-ح9ov@Yl.柌1Ƙ:X4cF=?;!> ćb1@ml/>^vݣ9oHkm`t-}e͜|6ܭX*fi I͎Tԩ c1f0@J0)_[]]:?VF}+1}94;b漁zGfh*Q=*cVۦWNU0tH}j1Ƙ/NU,B9g{Fw;C_HߋUC QƆrxJ A_i7?=޺6T_ou梯:g.>{ꇞcИ~DjT|AiS\}SGB:`68Ų:UЈWum1ƘNUM2[J:^ki`޺CЗxiK3/vklxw4n{Š/ ,_O+s׫ݢO: :`[)oX h1j>pNЗh}nLT{J7]?zoj^cQa~1c SZ|SW9aB++^6eR5D4SӾB]tz(40pw_o]!}t=Gcs[6 -iԮPv7ޭԯ_YUGGi١zļַz\rذ-Uxk~{$f3(mч(xiK?{Уh߹ҋ vT};^e1@S!rhI]ci0WL<؜1ki`޺CЗxzM77nyoFX7n^ІxUpʘ"UnLx xU_Rn1 뀃F}+1}94;b漁zGfh؜*cuX4c 뀃F}+1}9<`hlxx6ڼv\X X뀻B1cuO w֕K[}[cslv\4DlHAc1uh1Sv`Voc}9u%/yoFX7n[Se5 <1-uh1S~ml/>^Lng ub`tA* c;cp0h14-sw/kpw_;i7?=nwXoK_eS.s&_~x,Bi^<1-uiD}{N]~U4Y۝9-ܯ2%pjgЯZqs9@UW?:ї~UەUs443j1J_3 WM(`.1cg?M[7,x_e1SZi~1cL3x1cL}pc1>_e1Sܯ2c?pc1oݰa 9ڟJj͗Ϊr+-&}>F)YGC3fj:FAQ vy#Um*s̞4i҅ɓ'|k"|ٍ7xoJ7'+e+huH1(7^{AsCn3P[KeSF6T\sDۭ[De\F۷o?o֬?2>[WxzٔILJ'!PvM|]{םԣ0x lv]I9I+6ZݺÊe̩j%_]#^5U+/|H,%+hu(o.;[Oj\?wnݡ}%O^t~ju(/IFy6}_ͻ69ڟFIS==4SRV?Iw[x57xomv+^%/]x7ѺI }mr4y6o_}A2>[WM !:tۭ6[7(zUˮ98ٺOI³`:XL>`|ƀ/˦\p페i_L[a3JV(yTv;C ]%7r3lQwvl Fkec1Ƙ"Y0cizܯ2cWc11cUc1*c1Ƙ~1cL}pc1>_e1Sܯ2cWc11cUc1*c1Ƙ~1cL}pc1>_e1Sܯ2cWc11cUc1*c1Ƙжf͚c>Jc۷l7LWt[iQ˅گGi2cS}_8=&Lz7?{ﭿt.]ֶiܸ~rT?ftc.~Qv9mݶK{fĉW\1mos\$:{Ǐp\|{ U׷nݲiS?9R_fe#ӈâ/~1Ƙ]/Fm>~7 odɊ~v{4VכFqA]W^wttjzۑn7;s dg_۫ϲcL-ٯSx7fǍaF9q;駗_ye.(֮Jsp{wO?_tBge|1[}xVv˿gܐd0ap c^ϛ7a=޼o;餷w\`^G[ȕ+_|Ӏ3lٲQ_>nڴa盚7}&zhݚCSڅD9pGN}?;SjTveg}g,j1Ԡn =6fQ{ oڙ3vӦKȰO{Gm6U ߺp{#{bt!Ot?e>7yه?얛_vwrˡ,z1uWmJeXQWZ?1wkYg;Q7ӟ 5vҺk'G fg,;anΞvGfR*Uc^=Ǟ?8Pp6WFWova{NȲћ_'O#:㠃h7yg2t4i 5]Hݑ+#FgYv@roƘ^0o? :y_^?яON;-uW?8?pA#w"[_]nر{-oCNcw_ՖҜ_֋K6;А[4jPJRWznUN rE0/W??]2FJ=ɴSuzu" O|>yXnGV쏚1^AC`owoC\"ބTNO !=XoˮEd_^Jo1f~Ukr}>1y0ſ77_sn>F !QrU~I*HcLѻ~ߜ]yNW -\dK#5{Q5vDOӏȿoT;m̞6;#[)[S9yt}]~\3Z#矺gGD:\hǾ53;g Ruǩrc\+ufDž+.ԩp^4;γx~Rkcj~U|3kvFM9vO;>ޓI*9_ӆҩ0Zuӎ|΃?oǮ҇`lty'aw*'"ﹽd./.몘{k;dnF6tXWRJ/-UqqҸPiWٳy^ [fKWs[ck)/1fhUϯ*UO;<ԉ㯺@ըVcٿ|*4=NT> fũb WyO|>x>.ڧwMSյ 7v^cGJ벘A&EEKs)LV.VꝨ0Dvj骡CaKtaղ˯u-c2Dd𑗭6{HE^8^[ثXxpߕN1_ˑZw5$ $R=hcg~fq]׶[sE]SrKSY:k|GII걺kS*cI.^uWew}w?v:mMEєiw>UunͷwgKѻa3WVBEo!uV1{mt8U5}_Nkk$̦yS^mu41ƘAM/u6VUίvΖ/l.t{>SO!*fom;NUOn5酕PK`ovDӺqwD;*Z-{ k1f03`T(!n03XicL yJt3r^# bc1Wc1 ,-^e1(ܯ2cWc11cUc1*c1Ƙ~1cL}pc1>_e1Sܯ2cWc11cUc1*c1Ƙ~1cL}pc1>_e1Sܯ2cWc1ԃ,睂q^1-IENDB`DataLab-1.0.2/doc/images/annotations/image_annotations2.png000066400000000000000000003231421511411446000236420ustar00rootroot00000000000000PNG  IHDR"K/>V\s51ٳg\РhѢ*4+|  84+ ЬpoV@@e_r\o~½Yu!{kެ迟_y,y䒢KY ѵ.D`4 矿ٶm^n۶W^:7jog -. ~aޚj:4v~^=vyU@@@gDZ`Nٜx'od_j~  [SfIxs5ڙg_3[_2mRv&x~qcUkw?[_Ev\w׍I[u%9LUCW}Ԁz*9~jܱcdžT^;v?|F+SU{/m箢_DUwIYzCִ' v Z=tW7v*tu߹47oq߹T6eVMɒxc:'n{4 $ojnzPB~Sਛ!?;SUy/mǿEXVАpߚQ:MB%\ug~\WwDo*kĚnP@@';w?_yUWfc-{Qx Daޚ|NJ]:xk ),6_y->{ټR["2 ~"ô9N72#N;AO[$T/m-ygq.j/E-. ^5f%U Jg9տhQV<>VۙߏuPJ=!P<|js9yK W_5bzy]\QjPQ} /t`jxV@@!z G.9g7rb)!z@j@j’IV__,U@@@Ư ƥ\sMDfΜW 0 +;;;~pJW_+>X|y\:lйspuq) cE޽UTT8 0o޼@[POd| 8LhV@@@=AUI!p ЬzhVxnV@@@@@@@AAdԩ?n]_n>dȶ#Uuf-hغ#~9)ٺԐ 8Y'tRիW'hscu xCM{X@@@@@@ (~cZ(ְn]ɉ'6bKQjgz +l[. 3f-_:Ԗ|F喦0_jcVjzWnGmQ'2 `zFeΝQyѢ!CZdeƍ+KK[|-~;|va=  >Yß^ےo9e/r73(%W֨ͺƦ_c[~S-N=eEEg6̙bM+ wQG:TieG߸rw3vm;s(.;8 8Qoogc֬F78mV)[#O0յ'.p2^sn\i1~WjtuO?fР#,5brRkW+5h|8uj6*@JKwgW6+-#㊑S&&?8ײ]MzT'L]HeܩpgĐ {Rw=0# Gd5F=)**/~1珹7Է-yy; };rxQ_H<+>$޴ SGpsz'g5O\=u{%nkX|Wˏ`t;fhA3$=vm㣓|ݙ^|^sԐyϛ=p 駌ԸM F5Q:lp"pxb} jDz dm^K*sswv𷿹ZjT6' RUṦ Q"k>BDwJ9 ;i8M <듍^z).rJI=\IV@@@@@]<":p)B{TN]z)b?_݀`m>ڰaC\ &Xvy͗Ҏ /gd@znV@@@@@!GJ?mܹs\hݺu\ D!~g|Jeq#&U;+0]ފ48 AΝ'QxoLC|-ȗ [=å o@˵u=Ag1{M͛7/d-zm+P@3Yqz QWԺuJRgR-*3 kowfBVZC:Y}sˬݹV*r9ƚoGG_snW_qn֙ysPavNVhk5hM}cTfؿLG?3CGM=s `Z)Ȓnv_YAdPYH O`[@K+6K$Sb+L^b\:X_]N4ķUkl,W j\k 404६e^z 8i/h ^ژl\r5wpӻKd!F \UREK,(hXY5f*EP:1O| WLvN+޲JƫeWj*5Bz G3.cU뚤 Ь}}(jZZF vފQνi{]s>w41jٖ@~eD>0YfIWld"U+-Ӏt$ܲH_.|Z bK<(H ŒH%rHo#& \K#mL s&̤I#?w- 0B,C\D)d 3in9*OFI<(hE$Y[֘╰0ɇ(0hmzliK<*(L(H3c9L؊l'a UBzƕ%@3Oz! %fw6aZtf̈Z}шh^?(We.|wx_QOQaZU 8 ) Taf @G˝{"6:IÓ/P$(>&߄$`H"Uz%7 mBT#Fj^hSJQ)G"FhV(@YFNM6:F-ރ9&gjF-x9."U0 9ɨRNwq#CWKLD Se&*d?qVA z!5k5bȳClHQX͎ݥOXyE`kBL՗)p)R!.@L%q&Fm"[LY*Fk7pIxR^bZ\5IEy 8DgM= L;r+j揙wA:M5IaP7)KMtiPQZK(f`_`O|hS3\w][)=6 Rb?:. cȑqᠱ"q\)Ŗ@޳!6Jut5EYiPțHkYe|.Gy>'87˄^:{⳿1 dO(B/zWϣ,Y~UFI>`1fOcWāy`flg| D~""jU!Z^0<ͺq/@_1fO.I5SPg^tq'U10*lWlr fB_M1Lh8<)W7X)0M$EB1ؠ?WU\a҆ϵ `*x**CL½!'s&JĐXKhEgՀl~|Yʺ]*\ݨ%CpLB,0 mZIz5a!G` }A:j9 Rł}(D=Y;s**9!v[= W=ZĴuoKm*|j=]}>+S%!M>]A_}}aijM}Bw}B9>+K&|+(Hr3*P(:T2m0AFT"}rOwaΆBI(TcϾ9\ґd$W'_ QZAi)k?*ȍT6Z&4MhlH]r>s Xejm:^c$rHUmfnwWU 0@xA3:"+r,!+@E: (IgCdG m/x J%z諨 EӨ/t$ E)!j8BlRy)'L)%D@-6aD ^4ؠ(J/顗@&0! ^f +%͂L蔊A$F-AEneZf4/*E:bø]\ =D{xiL'!.WBTl41C9Jf6_Q1f-OL=:7Lyմq5Uf09boڨS  Weor\Q1$40x-s4 2F2ܛQk$ F:jpL+ @ JZЬ^ndj5vQ^UZ(P UXuPPOQW5 ~%\c>SSn'' >+W>!DYoOn1ۓVK!J0&]I yя -Q2M9!4 &$=؀&\%HIAV -w"k B_Bռ>Iv?" )+( i (Q #q2򊟅Gy'0[`h)|\!J}J , /i) 8S|tԼ-N<)hWE`\b7T;WJdѢ0v;>Ec9@GF(u*w݂o5{AMÀ4,I%[2eEÀx 0$"hg`=WJ "+.` hP_tJ( 7E/b3.ˉ@$ʹf gTOY15ZB2 X*e*(#C}彼%U.y@2_]NطL+ > J쁪Х4(,={Hmo: H-)|s,oVX, AIc<Vۿ4d͖0th %M 4 d=^mC+45mglӝ^JE TU#-rm@T(ћ$Ǣ\+($at~SUxk3zL<$>5\!k rbm'mwK+j7z'~;H˔'KDK2ŊMt~%N(j-~A1U1)D^buS#xX_c,)a  T#icݝp2XݥJ/FazD^Wџ?CW5" SUPtOҦ5{r]aaa'PG!누pKЕf?"Nb( 1]:U)1@AR!@A+%"΀UD2&w @hC?)efh}m6$ < ؈9=C ,ixC n1h@K_#ZHKkrD9F.C5S (e_<¼t)3;S% ؠ™78I˺#cqR=) 'j>xL:ݣRW{-ǛQ#a::=orl = X=#?hF4욤| ?EQWXf[4fb <6~SȾ,?o5{E84 8p neeũ{VX5,X>+ KN>Zؿ|NM|OyV@yc+Y1Gzm6"xϫk`i?)g[ [0FV@ {0 >+P R^6Xu]?Fk3fثz[KJ#~q盭ŹDUFD?—!xhrϺ_SkDoN .^֌tKvݫ5ˬ- `A'#D =|.<s<Dgyt=88: Ԗ3GFУ$h1:ibh YS3X҆Im@f3ꭥ;:[mIr~t)&*F\dB.3 -R&TK&77F X%fHT ڙPj ziCڛF#PmPR%$Ƿ*6jRCAG5M|_lHC3?qk$ȓBwDW&-uI5qֈ?ٟK!XH'{龶RFifيg͡nBP|p#(k~;z]15: [ iz**]jY yܰύJ玼=jܹk׻pBZ"/e{Wb{rce#XIޯQU`y$U6gdOsߒrK-n!}JicÉ&X%%эk6\뵩#5 D>F WkeVg]IfHF%@% mWxKD=(H mz \RmLD]R5C4 %FY`PR./*`jKPƚmmYN~LA3JqhAy)GHԋo/^r!dMO?f8t)]U*Pלu%YaJܒpZHFܥ}~鿜GDb$PUt:S#l3ѷ( KCx%"tHq5U/4P(*0lFD o1LQ0/XT +g:$6*2 k&" DFb"mh +(W|%CTÔc`^:Z"sWqDHhD 4<$}5S$iEjFRK+%D"Y 5Bbd"*D,ĤL1,A#7%Q"%X-[QfxD6%;ƟϯZu‹7}B{Sܹ?N{VE`7=y!Qw#~7ۡqqx nEoC4pg\݀**]͊ny9NPp)w4t\Yyʂ2qQj-ʶz_a֪rfd4)~M!Ng UF 8,B(k;ɄS~O2uU#*iB窞*@2aۼ-,9#кY"LDY:MI|v!ԘѕgҸ~}=5*_f;K9HNhD6<<ׄ(]G*P. ɲmU{/ɒI#ה$C#JK-I2.Jq%{P+]#4Vm8ZU"Z_'wSH`zQV/͎Kԗ6.kLMD*$D`ē5"XPDžkTpO' i>ZO"vR\u?0L}ɥՀ?t3Р@Q!*aLA? z%TD>$FwqI'hy!Di,-h~m$8^Pg?%KT@C%ƒrT#VP%d"2i&vƷYW# 4S<ЦN,aF@GX8/ѰīM%-e;r~]/IEDj'4˸KըOĢ#%\RA:2FZDP<]bjIZ.DT'W'ԓt1kc_2ahwaHD'G5v4v6e.JT2ߓ4w%w@BD/&Zhu^ G~  o( Oh55W7 ` (0I"\|yw,zYf,=78X6K/_T {xYa#Æ=\6**]jCyvjGbnf)Q2&鬻?^+{֞??+ӴRRg wpFiz]g2jn@@@f^>+%𲿧[i!4>sP#W )v^&o, Li#DdpT?Rjo J*&%:jsohVo1u^il(Me 9ʹr.̙e3g.p_Xl-gZw-ZFKwiw>We<̻q.RJ nŷ*$\~ki#& 0I@6 ߍTBPB@_"*5: !iZ UD?zU"h_=( )o3€')_Lt\@`1!E2ZlB;(nlXUD#E‹L}i{{8XtK *An K@$[Vp:+A ےG{m]oUZ.l֔io*t~b-Y S_:jL3ڦRmrBe?7tU3od/6w^w<ɫ~ߙ0yrKnst_]'4Kۖmn5 Zpβbtw扣n ]p;风zi[aCuwӄq_sYf{G=y%+g~w9桞S]<MZvwm|?#%6!]qe6. .ϋg ѓ[N߽0G z<ӟ Qi:qhJ~hK3h ܵYS)`/Q>j2O/~U~:zzvWZ@@,!u.&@N6(?ЍVWbcC܂)@KˆD5D> }fW¡DDD 1yQVcR7ASPeKJVQìQ #5_*u#?( G@lG"XiP8VdD ̽ȔMC͋6R(muۥ3̜9nhvLO9s[K=4>j럝9sNA.gٲewc&.+W^شsӞ<Ӻ8쨡Ϝ3a̙+m3ڲfݻt[3Gn]4N{ WF4&4As2+A$q8s.N:gmW0lR]TJ[ΈX\`5gOOAC4Ӯ_7~Hg=Y.D#[İk߾~›3}{k$9uW"{@Ͱ fmZbVh@@>+ΉᇨLR Ap+p #(~t54ӝ-ZH m$cEo=KWu:LH!P !1jq!:Yjҏf>"2Z@&0!џ PEFi&QN&J$u~smfK>SN WcAF mSz_[_LB%ReJ^~i-5ky C9BK6-j9' 9-> _Ǥ,xiLsj^50Nc\ ^MQM6o30ۦ?߰΁_5"p•q> 4^d gI4foGU0pzoKt?'ϺjNtTvGhf02K=Vqa@ S`_!W|b0˷{ϵ;=U,?]k0 |6zŴsfs˖sO0x>7K/|g-/,=#;-)wO~l>zY^̒+#3hsݽ0evEMX~=a**]Ҭ[O},ԃP9uˆZ yfC%o tV(!iى0dp x !":Df${28oWW`20tFL=/e4ry͜?s3C0rҸdp{(:C G{oؙ3̜ftAp^K̿ /+Gd-R8oftLA/__9׏Lu7}9JiH'"P}3@%G̜9;n"廐ף}E`̙o%_CIޗmLZCXl֢ݖ׳_fH#"M%+Y:slV@@@>@(SAtPd:1(y? H |o'E !m"y"V!0@P*Z@8`?RKYK4늘bgW_(i @CbQ)IoL2j ;eEB #:yITGˎQ zpIKD\]kT_do]I"mt1ۢC=v&ea-5mPYw`tj. Y%my= f-#Hk93>@ #/4Gi_>;jԳ|B?7"]my./`ef@'WSrda^g,6G0f[m#iRiBZѵn-h7Ρ,kKܶ_\;`3^+uw-Oz}ÕWpe|yqƗ/6:<ʞn@:;2?nءါ͒=ܨa׺lcĬb*4ͰB%B|r__>!8TxWR-лwz@H(A haޟ}6[z|A3‮s9&Wo(%4훏}ao{ 4< Emf oYKݬprm]V ͋+pb˥|d@ag\1T@]6cFTJJx2@ 80AAXuAIT۽I @^H  % .iW.o0̙{d<9!+0@2\G| W0^nQ=~H5 4jUCMGأT.y{ FTTVdQ :#:c2:ů@co#)&3;UEŨڨ0bU  %UtGg^=`B!DA@CdE߶@"&ْ~oEtj q$O1ݛ0R6DVCjM>ea BXQ  H_A\AE!C 0OHkD58 " =qZ*0Z[TDKՠGU $b^DG/)R5(H!@e!46k\ Z _6/,=.%^J\Qt I h,kz. DQqIj6^i'.w󥄉8\@>*4cK@j(O2MwFWYpyD Q uueC hqy.9N%Bҥf`_08* a{j FF‚뮳rkw@@@{>>[T\;CA[+3G8BSp2?G͔hbc% |J%? ZAYX{YmwW)+Ya=ja?loR?-#-=P„6Hg~/MY60Y#WHR WpI-ArIs{aԫ%" G/$YD%iCCi0IS!є)\+vj Œm5RP_jeR/]<%P(eTQBApI-Q"(m@{mQ102fRdf]&f,.TdzYy4e=jA;uTlzߢ(Y%3Jjb`-bCD9 dB ^8JQ/ёv>2f`H: W#^t6 7s}Pu l!`[ b"R<#e P,M$;ѣqOl.C:%{OޯRYPG#U7fQe6 EfSS -@cA8(( LHfK5'% AcIc9f_] G*6. *#X($5 $05oRq}Qms]bh_?݌8g?z+٧ٗfQ"gL';dgNu>< tֆ:ZY}ܘ i(Ų >ebB22 |yEO>CO@JI H0VئԒe#ج'x#RM^H[d~;-~6yl;+d3}U`BSMcOe|0E54VD~'uRVLG$h9$ڤD ةK@^5M.L_$N` ٯ(+m5 (L. ]*?BZ3Js ҏt W{FN>0fAH`jX4]UQS1xŀO,>jf1t@JP-{xXਣ {׀IwΚugŞ8l%3_8lE_5.Hma4؁Dj. {Y=N{F+V{"Pػ‚}o[6Vj'˨f⃻񮀀O<\7'ާ$9^೻Q&k>ݧPV(ۚ!yu%WKsMfڔxpV0uzZ3RVfR,;) ;4,Rgn.InwAa/#*$OKrjg}d31Fj+| O[ӷL^~ߛ0㾑9js&,9s}6ʿt™3#p}彷rYްqn ̳=Rt2̺wa)mn9Ej'3aJ+yh"YF(J&s +EDd ![|=e1P(RV" K?LDQP/ӈjIA&QIFQ='D,m,( Ldo(I醸I]^S'By]|6!Ѵjcg;i5 *<%yK:ޠ8? ڄtts *SE]R@k}P+z :GbP)rL |CdaM}Wb݇~HxB6螮 سqq|5蚜Zu't9](2n'qr#a[={c^"m 9'/֥yLfM,rWγ_!,AAz ;i]Q!ejqi^2k곦V܂騐xi"GrGRJ(f>C7e2.^ R.U ddj+.LpM'kS{~}w>gI_f_xu Y_ΪM量!N?ǵ=˖G sksüC?+-ZNрkkPt'Of|1&]HS^cΫAWK:B>Ti^ݏY%%c|Wwy'uv)!z!+|8R<;iNr=FԲO&7qsܑ:wbW.M5n;vEnww3ˣ;=vi_ᏗtN 4?8˝'wU(y^A_hըUY[S~>_z0=jPa%N{PҖ961iG‡g\2s沙37,eOuֽT.9>N_7k+h@y=܅28]X\)A4#EYHөj2a`xv1K҆$JT֚L4K Swh\ȍM\\ JKh 3PMNJͶXұpFNO஀GVbtW`:"Mg-$A_TC O-"K@ "؈-7oQ-`h[P^ %T;AlkLIIXa#V'tG:7pmK^Ⱥ#--W:G?~sn}-nzVKm( j(w-QO`܏F3sNh}-2o1ZWʻ:gHY' RM}Ϙ7Zg8 @Fng/|GsKwMeˬ4vy-%-X~}^!L#oO_)6 /g(O5װpD<& %FTAeY%p))h1N1j$b<9'* PPW)K-ꒄRB_K/U##,?fZJA( L' 0iOم_ETsyGwpw񟳮NIvNܲ{W?]_b-Lbʙ-cė:Rs=׳NNnw Jopԡ=rW)/'e7si{yskhE)=?1nP;d 0ܕW?PtiH7oꫯ/j޽{nZWܹs|q]Ʊ\zP1 nT&n7RʫSr?vYkI Ÿ&V6I|_Bc^>N4H+a # Mw:*I(T{͹>_M啸9]F;7Im:-C:vL\3Y0/:+y`VV@IXg+DE-M=lڴu뿯|ν]b3:wьR) (0STD*9B0;Vf՗\R/hCj]}UT Wk#S{@ hSdebe-K-KT%Q%I]G-)a f5iYTp{O/~UPXXXōXLw1\8$cTkꄷ, &[=XAv9 CJC: QB G:=ԃ$DK:\C ::za8 66h5}w*Rdm:{Zm4sJLjxa2h8MTf!n4SO8JBPD`WidƳ~3;ώy[~wΚب)|`<$Z&<Zvy^m;E40j%`v2BH:@b$I HXJ6NE𤔈UA]@zˍT~h\JHzP~6{32JɇFÒZȻVk/[YEw[.]5͞sNY?f7mwKdV4p`g ntde}:=T)YԲ׶';;8l ~8D1"0ؕΝvC -oשùSJQP9->IJc`XSd¸U0>o2S/1M)A©Rz9VF`ͫ4m߳ ijޮ }rN2,Qm4VJe$J0R]0HҋjI\J3%Qi@0щTxKУ 4$VSP ݙm%}ɸJaIke3Mz ؆*H_`9YhםQX XpYgݿSk3Dc|s>T{Y3-مZv,Izл P :;))n( p b*C#PiG{%b]܊jrXZ* "ߔqֳwY-w-z%)9._Y r D.q0\J_djnԨ%GqKGI&T֨ý36W[>n}D1Yxe$W5mak$ID!Mru%'RRKD2EYL P_ُPּ(E!2=R"WNm \,25Pqi4 OJ6; P!k-g+&gr7 `BÍTq ~qUUTܨb?F-K[@@@a;;]':;*HI@m|reLr eFB%ʫMV|XY 5Ҷ*u_%zD6PՅM6C HI2.5F =jTRe4S_2%jCwI.fAߤPKu;Pti7 6>_ig w>[8j5|{/(ѳ6U^VAƫ{>o^9`K0Lmp\ZheYyhl}7ѯJV`Wk_H gPr V`jC_ {zZ!!PR>g2Ӌ_?(u씣cһŷTnxc0N7Žkkz)$5C9S@JW4:|YWsb-陨I Ed]7n@@@N^S0:SsB!L" !0%("H# D%B*4r•n]"<ȝbVS>yZWnck AGЦ/!ꉅj\z4WhaDBC&ݙ45 ;ulCSAР1!I6zqρ<-yfp3\vӣRqk( L 0SB 'aQCY%xV%2;ϛT3? ,4&w2:^(Krt˸j=D ɮC+P'߃68Hs&QptWN%A/iHQ"D 6e}hVv#/{؋7)%wݳO 3V)TFݏXl''2:74w eSYsu#JGmRjm+ ua_WjqFi=ՐΫHjpo8P4+{ɿ.JNN{1'z:eJqZmìU 8hS.ٛnC3pX |RWr;)C:MdOX1TVf |Wo>'Y2(DXTh{nUgt^JNU*G''PބrhsK=|0v&H[W?&=-WS,@!%)69b(TjJi'Fjz VRKbLz-ݷk3RSLVy< 6FJs_ŒԋHEBGeD2>m"_'re zԗJMkc3ʫXdSoϘ x5bF-q~0 Xe=oZ0IrH~QJl&h/m]&+SqK}~w`ϗ'"b[;jv]?}S3R lrXfc$+}P9eލK)a4wB&_1wu۳R*[>kȧ0q  if¢kpnF<̌Z,LeOo(qu Wm6eZ{gk)Ke0I>F 鼪4Ԇf]7Ԏ;^Or[j<,8MLaXJ9yi:Na/6K8 wfo3€C}Co6UVV~:=6g1s@P!  pApi"A1I%d4%0 |0+ujKdhUV A *P"Ԓ+Kx c@T(rX*?5$"{%  , З(R 1R&  07}!?4SZ@42Ja4hD K%TT&y1_kQP+諞@{M.epI[rfYSoixL2Ah9шiyX:= yQ=m XaGhLALABgTKd+B{[x9t{ϰOG;Cw66P !T?4!$#EA&b AB(HɪN>#E$V A*#n~}-OYlS.}LdȊ`5FT"HDGV s"ٲ3~]:*̎=e(nّ7讣@]E`N~R  D˕&,4t6[ |Y9nv.Y1W!\~ym )DK a [_DYJfX`rsǚP O6M̤wE'fD-adNm6(yLjhQ5f|aB\ e*u6`7;EknF=&>,Ԍ&X̀cVh@@>;z3q.H³B K,Wҩ DAm+rcڈtLH&pKh1uPd(G$D\DЬ,ҠLh 6M(L""[+b*Cl@aGF K yE/o3,J15y hDB>9 2g}{_E;OziAX%ˆ2ј2xhx>9UxaBhNb?+hHR IQ3d'S]Bl&TjWkj M%ecj 'K(5ZhHDKU7TVR' ,~8~!^=(Ӿf @8. X3' sjކTVϘ< J]m4:)ԬY$m]nD8Bh6mڶ"Gg^-"a2 SKGO?A8nmK~tȅO2ُv߳8lAMd]ثQh[ =7i`A`5t k@zH,d Vc,,ajL(6!Q#BlSɥXy1e.X0#@2_5 phYϐ䮪K t) W&yݛu'0~'Uޠ@YF}B7q`/I% UU ƥX uޅ}f|]}%4Cs/4ߴ9"M:tNgV>gF3.uDfF *ún()EKa!T(!$ˉDcH[[vk:(aR0.EP’6]f˳5n7Oi>M-Tm\R Kn lIɰqD]<цk64Bm4!*@ʽ3)#r޳QXUcJ?e(m ( z|zߢ pnj_<򅣾fQ:SM4]!HuT5Up @PPyÓjBB[QD$B;OG< TZ!zz Eڈj'ݞ-&)BkݙcۈyLH䴉zP A4Vm } *#-;j;07=Z=[p@q #-X1WeX|ĔorEˆ9m#洌KX-Eyn$s:!q][dF<~s~37S< h5˸zo2T4j/C7ut Z#|К0zi^ (.4T\Leqt.ҼV.9行:ydh}OVG̔?ic8M I ǢAgZx{CȾWc^Հn.rs/F}J.U uThx׀:]Kj;Έ*$ e5SQfl^޻_3~}VKzC$ JZ{֓o5{A4+پN9@hNmҵ5'FH6y6:gz"> ܑ?4S-ֹTHGqHF jmʱnC*Hux垂I_aPEOt 2tyg­_ (qtVOdMK}OfJ1{ypR=? %oBAJVlV_eGaHmOP->39TAr ͪzz2W9cp5'],%~IhV:-0ΧH ,( ~wmɢy 1ѳKDh/uw:,y qG’GP尯Nj{mԹ hpT/gϽ0wkµ*~ Q@̰ʱ߾5y,u 1y.b>+߆']xM*}Tg赖\飩'/ȒRJL#*pY~rV|D 7jI r[Ee,fm*ʉB/H5vL@>RQP||wJcF ʍZ$;˵91 >ԫ$:)#%O>ƀE2{ҡ{$bQ6'$Ttyw$|m*<%z稔ء^3JD1 r}c"`R}rk~:8Jw8Z cBw!C#ydI-f2]ǂ'Y#Qͺ:35RD:s3?E3r>{=PtiFѻcX_rK{d9K-ygvy{+;gAZet7*w?*zla%[MZfK?M{nzlKD?a$ Œ^H+R1sBP;w # $_0me?计\BƥA m>"M]VN$ͻi՚Z eeXi]Nus_~=wJzcYhѢqϧ(6)_3U8CK8X d>VK8Ė#1X'FDO9yKDc~ϧܴ)xP-Čd /Tj#S[泐TA/B%BGXï|`~a|z;)'GsGb/OJš@J->=Zc%5 ׺ ?ȆP @T"*mD ^y)B/ךARlҌ2Wvq FȭK *:Rh%Nʂ> )-}&+R^8)F^8HzGe@5D`J!n3oADi_t4<(xU - PwGm{F?"+/ťbfSu'BFw\Ƙb\6~AU[E}_j4`WM}ORXsGEOf\ \Hi؉h\jf#r.g1_@.Yt4#V 2J0 8GAvÞ9Vaf-!"(AK( $ eb! H DD@Նv+SەЉ@Rfb"5Ihۗ!4 Ӧmi:K}u T+>?J2E+饂Unp֍.Z%HDFZ.#$d&ůOGG]FxiZbP\g"D(Qqi/kM̉uq!jE㘈c8a.r fdZFi- ]w4pߌqn^mN{2 pPFizoV\pPެ=ޛuF*o/7'r@͵|;IM,{}ZZt]i5gItUQ]28s[h^PlҠ_G+A6|#܍RGpUSjրͦh|gBB[.v7/ЩN*eR؈I][C[ );m[?Fl79nO#ۥ?5imf,?6v>㣿\ZɄԌg[K]{[A7H)pq_6@&1 r}mѠ,(HSB;ҦЦMi2GF"+45m'DkiN0Y=)\lK9UkEtZYvp4 f.ݭQtxEREA$"Ns:GZ6)WFDP;fÆ00hvGµ+#u6wA&Z?ߛk0!5MJc A1aJ#3$& ~z<: H &mPq~ڠ, "%9qH,ڶ=zX|,tC B Bgc΍;~&u|$IeQ'[2wR:c` 'ChPҌӣhYCҴHqp,m?8 H踘e P6Q]Pi;0Y C:gdi FY%”s"P"( L9 ޡYGwn)t@ѹƯOzsOo5u?zpPZKC@84 hx:Ӱu~v]^ic7>m嵿I-{͂?4C[ZJ5Q#ߥS4bڽ-7R#MOh4 @5A?Cli)Kt;4NH[+3H'TuNП(y -| xD[r_MҶE96y攨J_2D>c2w64k708ݡY+;8/YG9ws؃fQo3c@ͪf6(U׻P>F@ͺ2R$ *2,`8 D =J#j!;7ڶWDj"H(OhOlqڷw,Dw:"L6e?_@ h=Jҡ C~ѢV3Gx 4b4mIKn'C-BQ.Kp(WMg~߆cF`[aѭ#nEDP,JZ+hzNN+|)t Fjd)EVqlg+V`ͥV~4-6 {Ib4c&Mtd!kyf_g5-'/h\,O `.ϿbolOgPkY-#|+ЬzH+R <=$9*E5b, W &`|WtM::*F)$-XĈ(-Bpq\qD鑖-QHQ LFU̇SE,#jiiTi\|!j,B@_)wOB$.t& );\gj0CDcR { "=8XzX#2rt[>Iz@GIn80`%9>2ۄ|GobGy,^h+9&-Ɩ@Vs][(}'Йj*La4"/}?M&gw6H#?C>KLtb5"B7j#,V[ &7A3 lKA hn~G{bx&Xe[G6r,uh6XMd,]X6#gFygGY"#A֔8aL{τ͇~Y|坄RKY6030A Xլ})fzN3c2k.m%Z=t@ X3ܢ1ӠWW4CÀzxh88QY=F(9Ȁ>t裗0UvYMKрxFU e@OcEooLF LLQ@; eV`Z%M0 R,2h Yx76;´o500-&;&j^ik>|pNM8v0;@ՠ_Z%sF:t*(lk@¸AtRRV Zm3@6ӈ'mqf}ჭUN7m{G$O@ Te[2S> h xiVЬnr]r|l4 a>=7>4I]k71rph?~ض@@eB@[6kC7S"w_80åӧf3;E11Gbtk"+,z(|.$B)M5&^laMM7ER,CcTŇ ۺ%۾ LHJھ.Z"cmQXbE\mP(Q k{?R +;a/7 V[/@f#fKТ@rOZr8m(P "x0e*QvVtTcGK=s3c_iZGz>K_QZʀk}LPsƁ6v tbQBKU$"DAeOYdvbVmߠPLpPhֈTJ9J Xx],JXXxQ/?sBF~&8ɅfD  vWV TT+(+BA"g"se8.L(T7eb:\I~$Y [b(nS-Sr(TTVf)Cdq[J Ḿk+5ܩ*:h2q½=esQ촼AT&xWtX?fL˄Ni~8 dh/D\6*FqeSf cmc%*v%}tfWkEV` $Q˿ӠPhޙpDa@@@@@pԂ_&~R@W"IcZ,{f~P{@j ho٬/R?$|V6 0eZ{s5]=ӣPTX}FyJX72*>xh 46m 6)WD #>P؎} J}/ipd?mfZ ; NvZlNѤFa ͕'y)S7>w[Ī(iz~?UFm6EuD;tRviwwZ|İJbalqFcB VjJ'w z^:fL[w$>uMX˦yQ۪/2?{J2Q#d\ByRltNZmXܬ#Hh؆Jt%#rJX˖ 0 ࠡѬNfYsIn srED=8{]jQ|a%<%,u>ׇƖn` jm$Ijy) Ы*$Tq[A%ĝtПܛ $RCW4UA(ّZ|+,J1-+iﵵ;eK}aGr6149<)*Ĩs'Xa ,.z6X ʓhee&e0 `?]8]5ܳF+Щf͛J0Se:.xz߿cqR,z4VUD%,$pncOMK pKѕfP:P"J{K2Q63}VKz*i05qQ؃&#e8^,? vӕn^(47u?4$VT[tThˢ[RM.aDK Q%$* A^tBTci k sRSh)j0jL]gXYFA~VYu^[)d0SJ(pEJbY)3ZܭixD2P/ZDP=A @` |ڃ}?H'wQb ~stU:-\ CMuDFB:+@+6قsJTkV$u$P"#3E^)&%ILB?> Fnq}g׊Ou44^(iy__<^ /R<dj[B+:.mڴ驸F#k%i_Ԛ@`\QІO\TFԗQd-DH}i,byZ?*#q҂]|xo2_''R5T &VYfלY{D {D*+QUNkGDCDs6,)8fW$4kA0#&ǵ 1hLޤP/g&4=Bhag#M~.=1>Ւ巚1M;&|dR ,աWF6]UȩBUEHEO8Kj Ü{FMޖC " lgf~\:Ӥ9oB^j[YM_NjuF[LZ>${w1aH#8+RNR5.-RۤZ|Kcv#h "ZYWث6r֤ Ck.B-hIXmM_lKNvwK"X(>zH4~e3IB_MuRoI6;KaV^ZWP6,=Nb L9|Q;5ptyarPiPu/p]gP۾B#BpE(G. s=!2l8CKNBl\b2t^3QBK !N-y{!WlBwz+! *F(:c,| Q EK(!hD!UR{H5XD1Ol{&E2kE E{ldC]M!/1E@CL_jyA2 N&BmXhK1^@Py ffM "hB/q5 s }5yRiq|6T,Aڨ:dTR`\M%P7ƛ>4 ^Vn91#|rkW˿4bnUmaGN>k޺+j" anJhCd_}< jC !KѴ9q9ΨBҥ!V/X[6w_]$\q;r`O]-y:/xmi Edhfnlܯ&zW3OvqPYY9ЂVϻct,hI>Ѓ#݆QErW|KKnJKh+5#3%+@` cݼ|Sk<@WDbb`{W)FޟQ{ll `b+mOJ+8Q=v4,=ua;ɲ(eʏOmbf04|sWmb޶=~ʴNL8%)kxN,b \bZgp%K9zL\sm4*V@vIfAY2EitSŠt5 */3x֝\^CvkSf ۭ}DԆ<b@<훆WR.Rw !e?R ~~KQQ_E[#u,51><Qӓb$Ž$]i fz]Z$JrN9$멡S?AJ X$+Xqb.\F (oyA|dlsn5pO-۹eƞ0VLψkj.IM Mb@PK Lʘ6 K=Cd׼7>[&}ks-lssuٞҝkM:[ ZF(2zbV,XM{"&U&Gg@hH%L4n5YfW.E ƍ&="L BS6HR}&ZbW{y& p) e^ra+M9Νaŵl[DZ\^hmZGI7k"2<%wr]v&-T&̘+4QrT&L9ZbB0Dk*?"W,FMX(<m_Sg"* kv+~cm%nIRwB>$ۯ0*ž~Hv dhFi-ǖ=$2Ew[)QeG&E ]m"T[?A+[}AU>~#R _~yC P% +EVCXp&^kLDLMxGϊTa;B.)A]?;R+vFO**cTd'V̓&\f;1ա+ċJmB}w.bTi3dݤ@-nȉ |HiV+Z({&6ɍ+DJO*a3bNtd `~Ш)'DĹqVCM c/rՈXJ\ԀUc xV6Y3(˛(,px{2+L@,.q eM'>8"X%U`ZQfUB^<jc'tP;뫴Gؽ_@@@@FSR+_M, ܹkD~aUCڷ[uEj. 5pBqJD+i&k&||WNB5А:?')'('r,-PP#AHdX m}JOر(( Lʩ>-7yn"8nR"J 7J;oj}c"5҄^VKkiV)/$ f[; C"b(յ~ZK7kڹT$9^LѬX2deͳsK5nS\V-.+0dC HRVhӬX1oPٜRZeIDjmTäeP-y2Al/'{ j*r\|O0B'vti k" +Baj!BTT|b۾^QP@FtzB8f#0D"(rJ/aM 4,D x.E)PDHYd_\D(,0K⦎3dD6`X'sH/*zb3NJ cW1K|'Xyswo.%e3X .'.ۥ zE6y癠C(aqye8PRHʚ"0'yZYz2q :;w =:>eK*^̔fzbBuo,d;ghd_VKV,Z#c\Bw tI,߈]ﴃoKhN!o^sl;9~Sb=Q Ld[FR:?!~FffJ#6*Z%ЉXDPgH,m;[bOQ#NFNȀpG7v׆Q`3U: Ӱ0'Y"fAEȆ+@@3c}MP@-yߙS` BrED~ CxLW-KO%{Zf ]A'UWQV/'Nn2v0V[>z>tr (F J*FSTK֜"CK,;Z-# h h}Ȏc߁lj`KT&Xb^6A\J< gRe{Z΄|⟛phE1m;?R "~7K:±O[Oۇ~`hQM:RTјwݹ+XP$<>@BW4'·4!\hI):5%B%"thIMz( s7{\F]0)X7je"Rg `|jܕQ0s ӖkXœCA&ւy }_ygj#B3r/ٖMB0՘$f q NO.]+gQ#ԗE&qVFdR9yX^j Eўiiqv7-Vi(i:Ӭ1V1Ho5{xnV@@@@@ѬNBs>y̨ͿWukMsW|7@ k:tM ^`ܷ"Ьoؒ7Z}}}]|¤s# L-/t-(%?Qd#B"˃ `,{OWzNwS1"^4' ;7մs ,)AAazW(TB)"ހA(ŏ\&sV$LH>me)k}Wk*Wd*"z`Gc B|E1B,߸y*-!B/lÖ->#mZ6i-̆>0F#Py7gEf#;Тv&}]{A ,w_kmX@d[M"ЌR3n&O|0~gy37fLÇ$W>z/H4"!s4 L"QDG6bh$p!1 cNE`HHKգ|82ͶGEM jba2!JQgv^NZDj5bn:S?ŧP@&VTx%.|P6팄8/.8^yS):%4tyeA6S}LFb5!֥rWjtBUv&l qt #4 CkPaEd@go(#Hy=+AZW -)1E;iYkRmbHeB|#"zyS&pX`P<y.9ܕ#TܿtsEEδbt:)'Gb Hdaۚf 0uDj. k1_^82* #D Ь}I}G^qbx\g7އ/gz$ JP߽#A¤і%r*_7D}RcOcZ)e[G eaPHbMH6FqYHҡZOm/ԁ(=Y`=@sy啶3(Եfw7V>aƌeKk\S'y̎ZD[ k%] Wz3{pP"g'Mbqt"hri٘QeMH7핬ߩ$d8T1x_VUT`yҴ>pF)1 PV ed6%xM5-u#{?Z暰*JyK|@% mM^ODITQjǚ8pt Ę?oajj3 8,TXG|Ƌtu:;&-x؝w +1Es (Q4⪸삠aHBDBЮx%PzG$I'&J" c+BA~Iii_M;z+3]'jU刿Wye 1 ^b(!^-)@ 4C8]Hpz+N/KQ/RCY,CAr٣K^NE3߰ (x 8K#oYա}^'!O(qitⳤbi EQ#'LN8i|Xlv~3S Hj_kDygi?Ry Q74C{vX.Cp&"޹" p}2]} f4+ 0o7'SAS k +0J-ɪM.,+ro))Ng&io=r#ΪU$W^)֑KKuԇ|-nЏVd@>7wr-)]Z>R/UMy)V"*9GOHe}U~J 8?}\TSڣ J౓o5{xnּyN,@HfE.AN`qnee%K{ke#.SzmŌO/|sW7'oune}\[We]N᭗;g Bnr;uxkۼ2:%xiNNn*ŴՐUz lmV`z둿[-ζZ逕^ƻcie_V V浭` 6V% j^D6hJ)AhSa(+"uΑ+{#tn޲ltQv(S=Zǘ/'.feX@CJY{bR~D*`wp!DsYR:YL[b+(omYwFp?;y1) Xl^N^nk-U/y\XyzI3~ ))nr˦"_II/h;ǚ3*٧#78W;*zϝ[:n+;6;W_RXV;X\!B7u;Kpxe}Fp;G>=y<405y%_\\{KWk ޺I!Z/"@Zᄟ~7[<V Xz1K"D kUn׭@_M f&RkhO=?:D*((O*&NkEue3 Ւ%ZM0q2HDcPf})Ь<YR.NXGpc#V*,r),_Qd־ЬLӝ:4+)\rWdӬ\sʇ:4W+5zohi3~^_%f}O頕ZA̽5"7e%n,[+\&N׌DL4˘C߹ݢ_N4gḇvYwhVQVYcS{Ό9Ya*ۦ&YV͊}F nhKwYiLhV@XbaQ2[;r\r.yO *9^Θ\_H+R)ę`t@LX\(:o_EdRE%mX}pFڸW߶bg!Yϕ} t)ly^rRY”{U|k}{-fP6e3VRoX#?#Љ-e@tbZ|Nw{sg%7.~YGm*ޞ1cNE`c-KN3dc˭[x}VүUt%VAHe}tmşN^\;1@]qlK~kJ_\]è4;;]>\ZuiJ3yv/9`DD[Z܎c>|g&*'01aJژ|ʿp)It􍗺fr -(2>y}h-C:+<یNm<'cjJFF͋qdKXl f]hV> po Vڷ=B3aIeWܞ">@$D AF-!6"$y6jx Je6vlfr \h;A:Lki׹kO 1UL1iN6iƮ 񘙞S5=AHH9ֶ&ou=\Wy;K+^8}Gt0 *Θ"Gv,1nڴQx3&TY)(3>_qMJpƲ '28֘tE6 0WS^Ql( smXх">~a3+sIƕF ` ed,FG]F%@A AX >§k,0c~KIBpع&!mlhG(` Z@w$)@#T=فڳ! d@@@@Ú7B;߻\ug ܺs/OTTG+|'bcEn.29ñνreW/Y=t̝56m+ICnaI{>EHG%]iGh/Ho{ɷwb1ݿW7}bF-]Q_Gd퐠: JÀf3w4k=B(ׇ>'~>#|@ׇVGtwnWL$ʼB#im6#f?x]G")nԊ}k/XUzܞR*vMxkӊKgoxkƣ͋Ǘ\Zz_iɧsR![|!{1bQ$+[۵c.3&[s;vu]iݵS%?\_Wvi}[~rE0j(azzR9LXِ.cs7s fJkܖ\=d^i)Aɉ]eyif߾\;ت*dPh€GKtԎu?;AfQO*O|ENJED">xL*hii*, )ڻWl[3~5EcnxR)jܒt#M »ٿIn% x錵JitՓUAVQS t/5^O:]Zq洷﷞/a@t[= GR A4?xf,z `ZBրotmxWn@UXer,Wܶ] _e~{0ܫQF2Y.=|(ѴXs- #< f3xk|# R EBVWE6fS|TP%ҾZ lYY?]J0pt`aq-ǹ?~N3\pGLpN_ygl臽">T'g-nϞ_/9 ~i+͝׭;S|$nԱ//'#XF9nG %Uui8T4+Au/揩C\nh]݅x=h̘*4JKEaFLURK{ QMmg 0ak'o>jpu Ќg N:Z)Mר?Qiφ:"!Aٸ2Mthu&@(Xj&j$-\>[8*3]VH6Qq,F,H{o+t5iԸf"jP(%[ Cg >b h$r=kr-!&#h=֌%" F':%irF_~e'V!Tj?cM"4rXϤ#\} ]piȲ T3M= jGW鳋C.w*]n?0>h0H9_BKE|d6mFNMO(QFNi=LEIn~*bDG }Yd}a| v^]sz]52~`/W7h*a*bkLg]VkSzM*nt?lYrÎ',6޺Mvo8wsO>^VUU4|4+A+{Z7~/&lپ:ϙ2)PIfQvϙU4GRAeHv5Q* ߄v,YŨ7ɂ>W@c101EeB6DݮOR;@ǐJa^-ܠ6%>e.z)c}Oy$TrjLKdhzb ,L7n5r"apTF gxCRVmCrۼ5zA e\?Pjw9jI;sۖw"[:r Β+&CXerT+Lw+˅.zCbforݏ7aahS6}$0Ydi=.NQpNwOhq2Uwyj0~ 2HCB8G뎭 =\sArYoӯ͠<~pgX"B{MQUrǸaW6?UA-H(9]AA.js„C{" t/&598VEM]ɰ:hP}`?W:t=HVQX!BbUWWB' bA$Nz&jA:&JW>o4y{ɷo%v)$"irr#WX&hB[]gKJ>{rl@)in`Ř:2:{XGJXQ;="-+ULv0[ӯ2tsE{Zjcc_s ^}`?6Z鏭>'n;ڕ{Ѝ! AJt젴 m-7)yیos^s7c_*V^R>^RhUiR’t1s/)UZ\iܭ/+)}$H;;KK~s}~S}_M| 6c~EX;.[b szwɱ;퐋cOtbNEAYN;-49>0KDBvkXB5fSh8ʇyb5f)cg$u q5ZNotgw߱zi(4iHV!tN1ABm2a*<[rH(I(FK9 (;EmTG;BKDB,"ju9B7Dt<] [bƟ$5( fzT/V%2^^B )FU' 2.{YB:t QD䥆/3:rgtMu UskȝRCv5udr6QߑS)"ƨ~uMyG90ӓuwkN -զ_ez犤Ol٠B ̈́ }իy"_ٮۉDrŰ$D*p i]-сPAy;ʺ6o'OôQiA~eQ6+0)O}aڌ){|;]اiݧM;{ڌi/uO/.CEfLb}J:/wxfұd2}ݏC2Qf}}YkYg=mG-TL*jА47#3ږܹxty'9u4mO%ax{yg-pϝ{%7l_i(p+]'ːPJ.h   Fǭ0M@hIqdC<h|2F%8!^Y=0f #hyxq5B:G4ѕ5{߿_o8c2F>4]tY1e"EXiRE4pCiJx t}"c=_MΝiMB0e[6nŴMp˦ :w]{IÐoM? v344?icg/ſ!O-\`[ܩӈв&4!W Z_7&#t ZOz2P͖M_ukQN(K 2-O3 R=zd2$ʺJ ɐ[sqVt%% aI`{i|!pScH8WHPFXs**Iky uNP, ]"/hYY H*,####%@ۣqO(&_7t bӍw^7w?<5c_vۈk_?CFdWi_/#f+8@$ⳠiϽ颹?}ީao_;maWmTږ}~{Zf4? x-M̠ôܺVx8Z|7kJ'V,WݬTN^_"^ֽљuIs*@5%ff`9B;Ea0:$CPp]tko Kg`J/"-𲍉F 0.:Zmgu3bN#x#)0=5ۊ8%K>k:bxfT h1GӈJKw֕~XP IKE$~c,w x7ˑ=UY |Ӯ"a`KZ%f0~`^ozz ( 5$>Gc.80+XT!KQoƴ;،bW8}&Ԍ!;Ѳj5~::Ӭ%C:h+ 1I 6]JUr c«p/elSrBDbaHKUCxоuhRd(f\ tZ,A t҈&c(:J[;(9`  OԠt-uֿo@3(ă y, >[[ a\w Wh:1F-R/uS0!O4 Ԍz݉.%}#UI"$ =@q5eB:Q,R If-@S+}(Hg`LK&Fhs88ҕS@ -b` s0[a$891xZ<=\'=; b!ͽ3Ecph>,yⰇq )uuF%hpZ*'FaTf@=+6m|+ J P 5MA;hq@;MfkJY!QxuS tIUTG3[ E%¾C)۠ 1.-BQI{ר_ ꌌ۾Ny=1w@$Fa3τ ":>42p+nVFFKn֯T*3b. @ F;59jO7~>-n_ {bZѫ0v5z`>xhJ3&R#(Nl>c"ȣ6%Uo(Z7Tf*ylKJ:M]v81O?f(/HUL}-{(ۊE8۽m^bT{{?!5tYu1kc4j_5tf!vw֢^f5QTpڛ]Q hzۤ[MGAӂ2KhKJlfksBx0t+Ud:uXn㤀pp{gѼZ\5x 1xY >gddd􇓒f}R1DE8^A~I cW~nn{1&708 ͈0gd|cPH@0VYPKS ЗQ,K9_>=E_m,&:XO!<h;ǯ[pYC R 18*{hj(|tƵNQ,C6-e x-lt'+i#FKQۻɿ>&Hdf G/r]s~/bZS/Kz;O4"7\IlRmxXIe^-6dXvw,Sc; 3%hhcڸQ;PMnW32222k{AZ~F̕B!E.r ӹ鮁K:ǒ}`4+###ĀQ,㔕(2;&mop`ha((*"uG9yF]Ŵ 茹( هzU۟*B";83)Dz:#ꈡsŌŒMV̓qilͅÝՇr!,~uyך8錴pj8?[iI[..1hf v=]RrFPB)' u l"^%mY#c㣿*H/|bhUBsl:3@c`@Y/Z G{[qm 0/"BKA@+ ߀Ǚu 'jW2x!TDX3&LIISz cXYu!i}OAO)jgGMiR=?M`P342]cl7C P0hZƹ f[z!Sa=JLjB@gp73AsR &Gi vCzbl)Zw#f͊\YC)фM*bI'1eUy,:nM.L]:%` מՋi= C{w=V;(.(x ȓWlNih1YEXF#, 'N7G[1 tw®P(l]tuFt3KmN`@Y'Dg;f5E21(F=^S"\)aEF`Q"<?=#$9gZ4 L% 0NGE EDE$!ѬRpjݡwC!r艰og! #x;Q0T9"ۑS늻HCC{ɇpQF+ux޳4|+=b2xCO!R$A ZdX:"/8+S@$4FLZj(h .ء4  dIq ⳶ %DXBwYKbh:Adٝ0(0-|έZ)$t//!Z̫V/5^ߤgxtõU/ ^|fA`@Y'㯃!`rIoSc_S;G{k2ICR"ŝi{SBcgJ_Y6ƞ o/JiB{Y-y)W{p%Lt\7FG*!ZL^xB?2L_ji]-c룒+ $GhJSNMפY&RCԤ`hW,䌆B&'5QvӚaS#,K'`tw&Ǥc@UN}6paYYv`n!zr3}蚟NȓII=81Woþ3ҼhbދƮ3[(vGLR[OkǍ`~8hMLEtUD\ O.5T ]OW".-ym .Juc ; )? [SF`"kcyCL6·<tIcy|izC{!kHY'5 H5JgX[1 i= U2YTA`EMP/ɵQf4,.i(ɻaPշTKYNu%_Y(C;@_DJ'JzwM(ke3#>Cp^`jȀ6-m?u:v{#Q;XFfbK=1{\Ľ>tmGpZۯ +z7xWh9L ?+I~`nXu{]c Ԫ dqbpn˫_MIjJ0lNy (Y)jI8uק|/Ҝ˖H0eб0zl!)%c&H PX{!ED+5`n)MQ GQ[ BplqLvc*5MP6ǂ6 ̀֏L F1L)j}2*3ɹ]&7<;ko/4:()@_T-LJ dnZ511.>ڙv2" Pru!nF6毋bYT.fi }ELVH'ڞ&RLA"i~0̙=xF{S)CL FhGeπ !cKB؁oX& zI/} Օu$Rk2$,)1a|ytf Ɨ`zC3еhA܁h6Rn6!$֠(E!;8#HTI&Q66Bh+tLkgcc..iEaڇjժg,`Z8K _3jvU.}SzFˈg6?,/ύ'R=rxznZRN/@!Ղ DMb J05z8pu_4@ecB@Ơh6uŷ-΀!'3b4x@>$ C͈߽ q@=1uBWb 1و@+E@5Ih ;QaocaY3)/xGdKá$λ5,awl'x `T Q Άڸyѐ[,"`x6x,{+ELj|vԋ-dQAchk1aKd:LO.hS<\j@#EUE:pv_Ve*Q^`…H jaD=J}i8ӬG(UXvRJ-~j9##㧀AςLf ߮4>bퟎ~4wCMB롓fr 39yЬ!|9tiVY۹ϫi։YoSY?t;k|hjf@ʟW-7`Qw\퍭[՞%<ӌ2T()XAiYOGv1 !:m 3z㸼B/B+Bw8+Z"t 0HI?Ͱ^e/Zfrz!6 C5 #$񖀌0j b%W cwo5Y%5( Ҙ,"mA`]5="#5vO;i^<GU!=8e9%FpWAV@8۝W3y^̈H@VGJ03"8LÙ<ҵꃒnN<;JKtwMcY^.tw^=jhe=j * Ѩ={` <}1,(@!lGea@?30lQMzP!^Qt=1/T쎖<2&9lX~#4] ?րQMAKƘE +1w#6<ՃMVde0@qƞ{h-;7ߋڇct -ƕk:fc}hӤ륃ҰIz`w0N(fsKҕt 4s1h+yO4=̀.NpLM>a;~>i0j jxC'?8޻Yo]xC x NxRȆxz(B,Y*(B4"F"Ьo}V6CX14{,xX"!(`ɚEv"S;)ATc:Te&/ Kc$cN6 +$TlJTDR^jphB -Qržs!0 D?2u&{UBo[!(}#f0 g~ael4,| 3 ,B&D/?`kvN$Yp"fvew2rQA\R0'&!RFqI63qdH{Z ʺKVЯ7f lAXT\\EaA9"[za5 1& ]O{/ !\/|mdxWz>[&8=]7WQ)jWV؊H쨬* yCÌ|hX[~Rmx{HSۙzѫm S^?^_jx)¡\&Qml"QhKJ I)Q{:Ii LO4ڻfTL;i{brN5`[:ДƆ =baw}1's7"$+3#á=ԖPtGMP%5^k N j6ɰ+CBR)q(|!F,~AhMifƫF[ww:Z 8f69EVЦzF`Dlw^H%A/fH ";P=(L$!A钆O 8 CCk1'g~; gJ}Z5% Bv(֏} ʌ\8EpnҥD#M7 %dBѴ+>:7 }HJ΅đ|Ԙ~p`a:|P=Er2VUMĿ+9=EF_w[Ѿ(f@UV_ 4+###c0aW5<?͂ap/4xw`X"V}e0 Ӭ3ܛ9;^;+&Ex8~o>GYwI/&k%mRӂ9h=KhfƞN3Gj3E3uRֳ@!E;S7;R^]+ͷ3*0ZHژ0!"9xaI2t]vs]xlh"hh-bf"8]st̷ hwěKnX!, mo=p{U4Y)5 %eO51w`T͛ 6GbMs_a吰iHIx妹1;毻oB͂ :Z_~ -}ѵ V}e0 Ӭt5{_y791*e/Vor% ޓ-鼏Jg4ÓqO҃f,63SrL}'u )5$e)UNg=(К)cŌfRV|bu_6m/yG|vyo 7.{f-PT_Xȸ ٮv Ko :`ZCifq٦WN%_5n Sc8?vLVGo[ )a_%C+K^Û9ˏ WF8?]Z(&0ED&9uMץ)!doZ҄܇09D=ٓqa;2!]%Tt96@=!`37qbn},9s/5>E5}{9oLM^;뷆/y%:!t[ֿn_׾1c>>H׾tYoH\o}ï-pod %f oB7U* M?;A`@c;'Fzիj^x=!?U+^`kX/8h;px+Cc[87Cba}kO`#bI9ht";caJLus*`r/A+6?sXc1OSn=л!\eX;N-:~+N-=uއ1g4؁*4ը/0a; Vy׭!̾%&`oVZqQJUŎ =oO[%׮oO[-ѺbU{7׶KZ6- C\aFXok&xFEۺXЍ<}4kA3z\;56깸²%v^vǻdݫ,X`|zPoߖ4/5x3bzfMT=_WQ6k۩32222^fD|Ib:DJQ, )`h tK$ڥg;{n#""Z DQQ>bd6BT-~ F#!W ؅b"Bhbu0WCwwTȞi3Go OwMXc/(ypڮewqѝfe]ߑQî[6Iۮ<L榩?+u ޺noL{~q׍_r%|Gɱ{k g)B@}{oZJ\2A5\JVУF C˭;4Q.T~ D&A%jW&0w5fRmDOmGDx!nfj+ʋenoP m|mO ' #p8lDGl&iM߯ M JıOlwu7HT@ݻWX|"XU?G?Ѓ>G6lT:CFIDAT0_ 3@ލン5`˯uO›4oy뺵gxE~-&y\'G+l M)q Q9릹7\h]9i&jg_5aښU|n;?\4}^,k'^zr?%fɥR>=pp.[=lY?|'Œ-[\ve ,"bw»K0n Mo7.߾;{ )yGG/o3ZoƒW m_5̀6nm?.¡kcĘG<=157%K[B6 CR(i2hDL:C- Mt"9Ċ_^_K1ߛz u?'`Q39 ]\2SzJJV%ΉB3)"wrQL[ ⢳˴;%&}[@Se2G9$#'E\CНSbd[NjQ9T20fz͗jXy>t`SǑhO^0WcjB'~ ZS^'U|±cqZCu/T*iX W`N<Dh `u 0!b?##ui.&OU[F2A3N6|=s藖m󲉗cDx 0p;|~;V}e0`@,O_ോjL΀9,s-Dstqďrx6 /LTQHSC2fT) Ѥ; )lR$3*eB]sG4\-ɏ:zjͩB)k՝=B4}  O-%P砚3{.sկMゴL6@r Sڮ5 rf ZsL2au8 oBckYso mo;/KrS#]vt20iV_Wg)yWqZOMn-Spg<߻w.>5|?aOOu}nv捵}ɪ>d\t-F|;˅=oiEA Xr$lN^x,tXY!P^0!QPAA^A 1KET#&!0 qˣ:t7!CϽko|[!T̨Fd&%X3&ZgoD'{ qNT{YHWO{B1;]pg!# )boB?2TRCjp - B`ja:) C (4ġ`qhqQB7f9xzHIw[>aX+t#6y,qse MsːAXe W,g֤`n3 7]GH[b9q" O,LjSZ,S~e0{Xc[ɒf̜t? ~#k.p/.Wy#ޛ~iW|>~_T{++nإn9 D83V}e0H- s:(;QTō| L8f]?_ql]ƫ].ػkB]݁9;tIKw'1-˔ճ"X~WWminȑw#GR4/]/lrUgfj(w6[7[W8%:RJ`_Nx{?o?'4IgGa|25e^bzc_Ozgw^F;$dNQ&ҐnÚ!L K)-WH[:J@ew`*JC29Jed B&qM!*ͅ4O<"JsofoyPiVw64ol@J3ݕѕ+mm^rм19yT1yXʻ͍Qp(cԅQl )84^SA \矎ޗ֫\&S}K*Cb? Bl99# 퉖va?NO]4.W&{̴1WX}3Lg& 8m?ocw9`@H~ ,pXj-G1G|m͜8w) B%?F=yDh+  Ǖ2J H|M1m^9N?w& oM,x^n@OI <GS $5{k Fs*>7^ ʯ.Basu9n32lW腰1􎥔  yFI0KCJ)[Xwp&9[mb [+58ֱ`Zf]w_uwƚZE8/_Ŏ?:Z޵n=8卓F5L?{X;GyauÚvMSg2Wm9׺Ez/&g12 勣Epg <q㪷'D꨻XՊ'9/hb?V?4w[lDޓ–0@Xnkh>n2~e0`ЬwU-{9co[bM&ߵ&soyً8}oݝaܔOrC]=r/wC뵿}-4uxYsppGziJKR<^~[wY-w\Z2%s#,-v8ԉy5a))Ɣ(lWN+g^dڙ_bX&5S=:eeM?0?ڰwڤhM9 !f ;cJ(f`JZR<4 iSRabJuw'{ Zn+'=ӳCz\`2)ͨ3Rߚ]}GуuRiiX?2Օ\fN/Jey죆ppg!<]L aûxD 6lKUKl}W]\Q 6 [E6#|^rt'PA#;mW ռiQԨƔCs^y2mƒeSp~e0g/ ?S~cWRI+*[89wލ6'zDaF s@KH!]rZzD%"( : :ùW.>x/4o(FO^ D\:@s-%<0 JMImK J{9mdlQx}$| l a[5uހ8kG t(8Z`Օ=@^áChPm"*Ÿ=tNHO~ .NVɣx#@ YPl@K׋yu#0d_j|uK ӱ$5ya0'j/P+0+AF{Y_2ǖ]x}Ndχc{;H!m?j wK᣽G?!VtK2818//^[ˍ,r Ύ 32~֮A/[#RZ2ޡAL \W0 K7͖ 7'1~{fPjUeXg\Wzڇ\zpjGLW [ҭb=:/3,ȎWCQFDQ(=PnB[h:Ÿ R-\?-&CfDah/f/ dXdoL!譖]x|}vf4gHDatу,X¸jnkMu08d!te]1z9+L'X20$3 ζ?R& iXx!oQ0O`( qHPz?G+Fewattᑫ:H"Qʠ@>48|V:ȇ O.Vt0<#s"yh (@h q\!x~B$$`yG3EIP,wtQ lK9G`dh8[\R7ծMum6zhgbB1`RDP@b|Twֆ6\fsчc͕pO5U-\ n5bxgGT>'濚 yL !rkj /(}#`+Z0A ;vqC,݅ Qn  .0vaBMh`_j<߅KJKW6KcgG CL222^ 2*Yh8/4.LW9u~[n8mc}צ!F(hsЬa0w1{NO}KwCsd%-҃Lh8NB O9ӬAEf49iVFEY%YeBL0 ŘpI0^DkEeyjZXI6K#ZJzȃ J}'"4礠h=p:Df%l #aةiZ92bZijuGkݩVݕjwtWʡU.ꩌVF2= Lp~4T z ($rC%vhɿ3-W6&mz "l *}v AC]K2?ݵK>&!T]},b< 6U@6|/3; 𐽜a+օ;7V' % %ZYkG@{bvdo3*x>) dΈQ',xp/վR7Z>AA}ˊ^,0?51 hKD[  '*+,ܴ޸6 =AO8mčnwoV{M4xz( ݛuse~4t/ OW3wCZ1cw,4+###`w|Gă!#){oSbB1B]1Ɂ0M9*Dad( +=:%J[L k#1 bkDQ=dTLT S^DN)TuFdl]=ٷQ:bRYT{w?5+bB9!UHXTc9#_1nc3cRF4 m͓PT4ꎎ"Z!eA*1O F -DPB&.q %q}1c,Yp0' ˡ_:~g,hD h,נR: 6&tN,& %>ehTv p$szm C"DaZ'!:I/.7;4tA6T 2f~ی=MKgYo\_xިhUe ||#jŌA#U_ՄL2222^j?#]3ȘCZ57@yetf"9锍63e&GL̞gڛZ1](ʌZ>16%fs 1Q*SV`fq^vD5eQLNGmRf4i5y Pz)Q>`O&g/jdW*:\FUc_)Ng~ePddddd*:xC@=RBt~m!Pd'JyB,m%NE_#.51 jس)a% ޘ8JA>gWH0~t#^Jr0j(;@P7,( 2yEl7Km-BOKFh-p Q`*k!\8:)+K(Y$$ Jܫ<.-SAP*=p7 \4^&zh5C)ZL(8Ye1H:RTInX..tâ:x]~:&r]e?#錣ݟP%G֠̓6To=S qT-X:/}x^DDί}8ZAG2222&Z)ۮ'yɪC8oS1 Ԟ$~TʀP㣆T<+Rǖԛa43ǥ,B95ș̈́)i1,"hcB !THs)+O㾩)ҙ14򡭐"Z5Us=:]{kqEO;P˳UT*nJ}rfNzAbFitKk< 0)k!_ f`]A9̼* >4 0WZbDzx=%sy(ܴ>jS[ݎf6;ZBmEŬ'eVq%=HT_R+ddddd(xƒnZE08 0̠b(舤m+c!޾D&o~ #(:#V>޲|Q4S{=EM㛉Lmo혨Ȫ pʧ()7p  2$xϝ=~َͫmKVi:xb1%HMrg+êTN튢I9!Xal GelVgGީ[51j]z EO` mGZJ\hGHٙ֘sή$ )Gŀz6xAsqѱRi̞׉Y|ho6>fr,yX}%ȳ\~*yɌw.k;oyW[<18ddddd BܟqԪ<cƥh@^XVY;w޾c03,]Zp~z<5/c4{H$67j2-«xkh)֙.A1f_ͽꝎ4fr8hUm|#Ș ?'V ;51| KLL!匴*<2zhx>v,_oQH%|` MLnJ `zE@;/9=֋^Ң`nͣoLsv̨h xqG0oe͏S L[f7HOA工K⯏ ɳ=' z͗j#>k>)! !\~K;O-X1 mqsFmWkjw8E2L"pJCXUOhcF% M͡xIH@c'lJbt*W3ZcԀ /) QH1ZJ%`0z drlvVBrf_̴,'@2t}4LTb'g%Z8& vW(MS UWlRUلI% ٣#preu$^>BM dNH^RRQ`KVY*> g",* ^" ٥;QK<gGc]w(%qY`BIcsf>OMFFFF Š5`R~EK9gGb–;b YW]{g]:g˩3&jEKj'G?=ٝJ3S<Ȝta7~2|_2a!6#)fntB[H4KĊ ~r;3ߔ si1iR¨+zFdOĻ(°htxIKQ9х9'Lp# J-!p`gCt1ѥNؔ)X< ґ GcjsS+XT]fVf3vFLI1]]ˁтsxb~XDQ5v9T-|$1ύ_ہ`(T5iR1F5[0X%}ٜK%7͌f˨~ybggp}²*ǝg$4ӟ.kg"}kjm巵^}Gw/mQX+OMFFF؞8Aŀd xDG\(SS:i1!`rj:D&X @O3|hcϯJEmydV` mDiHWh`DdjC>OUg߶^t^:aX5'1\p/ĕ R%ˠ/M^BNj(6sp ZqT{kUe 9&&i 4i599t(]YhfqxY쓶B _)WX8^.:24ѤhXh.3e,LHuK7+dC>s+E>/zaYg'7f|3?qmVTE*t騧U1hPLe HA`E'wɭ_XVY*3f̸뮻fΔ]5k֜}ٵGaժUY#gdd dܘ8q"ѣy9~9H_<ˀ'"xzKK?`,Y[!;XوX7GƓ5pZL$X0ACAxV3#0%&$ccnCnhDKUG6J< c/@3X5hh#0.dgł#rScG8Hs/fJYsu>R',O/@GTi=p)fo+@GXh5{SWz0'`rtłP{ ,A{,`ۀ6@5x"?*W]i2fOh Wlr1m֥4ӌjcgM?C><}22222bJZU:!B=M<*b1t 1"(4B!!732"hLlFX5D5XUb@ߠ0QC  qA%On_b5'Z#X9DSdUQao&#(oK;{CBAAޙ1r^҉ΥpaGn3@{#cq`yjZbRz՝Wwgv@uzy9 h (xNKYgw԰\eP Ӭ7`Gw4^ NK#U_4+###>Is;R|Yor]߄Д(W>&hb{0#e ?0"1]0]J㷤6dؔr1hWmNY ;i4l[R[}ƜZ|gޕ2(CR I=gG1hBc9T4v":nȗd㬔Kߍ>:܄Tfר>@:"fMNI Ptyb]fpϸ֌m 559]i2Űvw{Sr4Vc%?SSZ(H'Ɉ&icv=QprZUW0?####`LՠtG!V FgO)(.A*7oBDcՏQHvV-و\ !yd8z4HQBoMO J\9C2J(hd֩8)){8$̭/X0I"ZG|gu1l TA/ f  DR#QEÖBPOm׋ME@Qft+f7:n i1y) A;O'*Fԗ2ΐܚ =GV|dtSW6!P~ePxycmR1sxq+fedddOWuܷyE皰+Sã1qӕ6ScJ82mb61Y.1q&B%w646WaA9LmJ [&'sV O3B<: 9 =]0,m)p"gbF٬)uV 1sf]6^fXFG.#OOxLMyFs"D̘w{sz#S1}7S)7fRY8fv۪>?ҕRk:dG&1>b4sh{B( ^HqCG7aJ;E- ۚ2=xVǝeuk욁; CxOdZ >/]~_߉7pf;lH!iJ4 A(k uc ^RHSf(mˤRo.yifmKʢ(&_XҔnt,Ah{/Z3{աTviS?a^лʠ@fedddAY:B5yXD ޙ(=RCup\•;Lf 7 !2LGPC ZI M̈ .G>w[鈲/AX;yQ!.;N͗I/WJ~dF7 D-=d']l-G漨d [Bb 4L`Z$UGˠ@hx1W+Y#xIq+u ^bۼY }!Āg4R:PlPc;o M5[R6bXJDB3zI֠`&hulƦLXOҤ>uŔ)I749amI3EY:xJ!(.kr@Dj cTM'3!5 h~p7Zf] x քsב5V8bcPulV9 h/Y_5A ą䓻*C`6t Ώz4bX߆zgzTiD4A\8K  snfP!LI:U5*I׎+p@`_~UKjW_O.~5'<:îjJGD9vu'JvO QLMQ0%W BG 5 ![/,Ù>+LGB*X#كy%f[xmEW=Ze֚>uϬi]1yќI^5,^X ": K<3, H%$M)!7"h0IfX ;JKWa,%Ǡʥd;9s @oKc:'S[' .\=fvttF+79N@F @]M6Oʠ@e_oe_#pQ-̜bʅ@46+-ahމJ{ %DCJI,4,x$QlN '|i)ƏţWXnQڋGCgS~iMJyd•m}#8#_I~>[xa峳[LjW-7!xj222N $K) Z[1nh<7E&&w.XTYV{L) S) ^k\}xl6LIQ#9EEQͨIЕ H8*{S l pX*% [Qx!%$&9%߰,JAtL6 DTwhط9wo7mau ¢#.͑H,Tvc_X`!CkF[ZSkX}VI\EG#\ k}ںp^@ݙE$O4vNIJkiÝat<s\%|>g享Һԍf$UGˠ+u2kowݱtL8ⅵg)~6Kddddd >4Ӷ,\>)7BuV"~y^wuAj5|Au}eѸe7CV^^~Z8ڢbV?n~F25z3w;VoW,l7\Ԫ 4Z#^jj·^,꿦`B'XGo[dddd0? K|OPP0A{3ChUb /ܟ2 RnHgzg w)P&VSccRfb̏ doRWFa4?{RZښ#t3)2"Xxga]!MT!^I|ZgBjs#SX&3!Thꠜ/#xg+D.>K~;mN2,ʱ:o,ʒv^7on,yKeɍa?iʒ7V|,1H!&ϚÐ_sۄjF57.@]{UTn\r_'/j[X`Y/^=p>Ԣ;b,`cnaΙaaʛ+ 8N,_ Oy1֔ZEtwpVfLG mt0Sx/u%=)?EoWX|(\{嫷/ n`/ib]^<濫.z|Sk.i}imat+mٴrytqύuWA1w ݿ  -:G[ho+%.`qi|K$(3d014x<˃XC,4@B(9oR' ]À jd' sn(77&']yEy cZz 1gE!j{*JD'=ii{<#+|K ιBm6 I$)+Ti6 #W W6:B^hT qɲ?]ZES={ɲXZPhuo:=Ֆiߘy }Rp')3,YSÌSTyhoz{f=oUNIMY0 WXRLDDѫnZZ I:ł$?wD ukB¢K$~eP2cƌk̙f͚_\Xjճw<//?7&Nѣ{9/gJRV_S{R+P8@ȮI;SK" D `MA_zu/-@0=[p κ F7}@tDm>ĺ bT_I2iT@%T?1}Dwj <C4:9zhk[@@gn.!ՃaqΝK0}o `Ֆyv,pUh0qW4^hUw~a,5gA&`mjy=P\;X0 PaAG78jpZ"XP&5 |ː{աXtratR~mASg\ZߔTyeddddx!7HXy qܯAYaR 01Fb`Ldq]#B2)NQY4{DD3qva"2A`hA4JUydo!D\y]ؒ(WHݰBi"Z,D }seP% }Hmdf e 1"vFqK׽o}XqN)8Z #H$;Qq bW`uAKV+ 6(=ebTN } 4.ّU# }~swم=e tcer~eP\#U_f^PkzdBJ'OYS-n ~||#Zg7t9jOe V( :LoԸ(C$jnq~{{G4'YCw3ULg_8# ,w>v VrwRg-)]8>khrhB2(P1Mw7/Z)##c"_0j:R! 11G@< {caZ uXc'@إ 0@@H%L!#􀧀D/*J rAMp,@= 05 "zt{]DJpjv[-Z;> ^p93a$@Q l L#66@cct|+cnr"a}WX%^B< bVTSZx<:n%-Ug'L%90HS-( $%5mFF5y`GQ J:/#3p4(D,iw,ɽV yo|Zc_x~---/1xy"ӬL ͂tVż}t(\~ԡx͚q|d 줤Y`)eQ%a3pQ($1Tl0 W0vf= ?cGǦY;h bAJF7OB.eL&@}h=8# 5 <@^hj@ T~9xՁ^܀8 Zٗ~E%=?@dig#4X9BL%#Z0 z2BiJOtwRa!8@` !ESX]Q![.鄵T"(^5q¸=Qtq;zQaܘ(0nj0nH0pKlr;A Z`R2̎h a)'seiy)m2KU`JhFt'*Thi:;Nc3caǶmOh MVh_ wۣ]%^R3-]˪TXYPFshL=WmpWw)*5ggbtj9JQ_t{ adkIBwC!1qX!EFػ;Gd!6X%xS I:lC~Bq="ie\)4Gx`!6<=`300֮ ëNF'QYgƍ.SX`4/0UN7輦)~f5qMW'WT=\0qBtگjBdddddp ]Q<&xfFpEFFu%WVXDD A/=zի^U1HdUŸT fB BJ f(j@'H;Po m8qT oDA}B,0ڢqtz"9 1"/H1+NxJ׈K0/ bA) yUTQU`$ސE$Q0(J sQxMk ǂ d< ˠaD~Fq +ch*ĉ$ְ>AY9KSZ|#f+9t!IK*X,= ]}ߒ<l5K wuE]vr^I De| pWcӬ+/; 1ƻ)'=QIAVpP-"q& w Tf^q@HGaA5{Cc@+!$#6!Dq P(π QaF%Bc'd@M*"7`";~1s#!7ZB7yL f3jE% yB~ij. *wҾ3[Nc`,qu.PR*5m& ma,V#ae ChSv GkcKF!p&!dq2@0 \g:W[fZ:W2(gL{+V,_+V>|Ï|'=.{ 6 ׅB|BX%"##Ԫ dŖ-[.{oo&ۻzW]w_y{}k2ed r,}޲Tkku{>:6X֤#__kR27pJ(֛z8hAS[lKNYS0RʊS<#ҡ RRPϻ#SbLHnNtM,kԄU`ZR-#L12 VߚZ: aF$+;T;<]{CGO!=¡B uQ QE1C BVӓxAdo`<2φ|Sm݌: 3zX!<[JM% k|0.25E9IӒWQwK>9;JWu Rv 23kO3UhΌ%3\+]k47#@R@cIgC+Mlr"ׇW?/}T/93^8|DžΎo1`qu93 ,kmf\qҏ !T'bT0&/4He&a!YN+`605l`34l 7P%a[mSFeJk0AUI2!Y a;)4NzJP@A#1Ddrm!l\,tjSO.8|"h19 3 dAN4.Ȅ#e?'V:<ŝh..\r6Cpċ6A-։POHYQy=kiDzDKKP:WgH ofQ6@}'0%_y^X}%ʂkKGS2EoRT1VW}A|3+1s#㌌y^{ Gj~za5ύL2?] yxCI[^ugV]~[^ ͹#V5? >m>MZLI^֩DH;R1e L3Xm)ktƶN#:Ðt{ݛȄ105mf4_Ȧ1-t2#mF͝)Ր-fL4 ,OR^Qp-̎)u )dњJٌbgk6;ʾлL+!BBEߓf b-:M`ccr3.1'ozIPZO؊dmsfJ0yD[KV4wbb2碰=l#A[3L]7%p"j:DwVs ad wMK'#l?83NF>{?yhg?^6PSjCoOz,Sf`?\~յGl^rkXj)ĖxL lD&#7ؼEN֋b˄nwt^kFPSKCmsDe%Y\lT7dҴ*dva*JC(osQ{y&jXԌ'z{{zi#=y}y}C!\Y\yű1U=r k+VuGq[ uVfdd˫ߩ^X1HymWY߻YW^im-UԺ/|'WYuM>xGxaQ{erof\?gQq[X*N))K1<5\Μ(ِ~Oʅ7y7Q=% g4ϋRpLEIi2К?h8HsJ'LHIګ9ZzmX: ҉c! hCJWlҖ`42{چ2* b:q2+sjDj]&vcD}HXF:(dXWH tRtٰ)7r8=`ͅ46T=-v dG\Gɟdi2 &̽q5д^2'ERbL#%fӺ(JVx)7{ ּהǗuuj`"g#W^~za5 6Z1eYG̺uK[?>+/ ?o^+6_(7XsÎj#ddSI͆)_mrf{ v[wG!(cHS"-YHOc7H38GؕH6Ѵ {m 0KF5E_e*YORa Ӿ}bR }Taٮ.:wݍ8YMDaӱR~pfOŲ + }ު|:<2z?Y}SH#ٽ7SHß:xoe_:n Z,dSrʔtof, )CQzU݌\H7p݅ҔZSxWrw&1G$y]GKt1s#%nZ符یI>3w:&ּ0 Š7B6Fmm|(iq,2zI4ڇjժgWW!gGyu}xVl.رcȨx{Sύ?z4X5ڤ9SMmV%3$ ZM˪u4g4`<Ax~v,@Ԍ!e]lL(nk@_g%`. '8,.JIf.h/F_8i9DK602^7n\OXy]ۓH=>y?8n?;@^%3fu]92o7XG^xy#gWK*OO^}AMVO[S# XhR晰t؜1NK9&-̈́mKIԫ;ikry菉))RʖkOi'-@ʾCR$ (Nb+)&W΋`_FSղ%4B{s~Rvd`k*6ײ.v&F?+귶84I3֠xļkQ>bKtdѰ03YVt :gcr󿌬Kn!3L$%t %r9r75I[G Yܮ9hb=k0z%U=wlV^ZlVQF=,s'1j0!``+!!~t1"'k-xў(@~;Ȅ!tQr";5_M Qa6*800J(@t;8 nqQUwQpS}ivU_T_+Q?$=b E\7~nU*1XJP#{Ù `fLb9XhCwPh&a q)K g|/듒LAp&`4[yGʏ0\nx@ln.95uY忎2i& t&(D`;`]H fXբcRAIGjcӬo 4{K281Ȑ@x(c܌djL 2BzxP9"ʁ@ҰĄ ŒQ{ȯݕn#{0>>(&Y1L+Ӽ@hhKu4z铃}e[p8ކl@'ԬB #xLtLIӽMb]YܓN5xY2WM:&j26搐qj(#Jb#BG˓Ltr{Tl{쌴pO<;x`1&!O&` +|D_v;5 ˍH}^FӊIiX@63IW281 ;SpC8Gd1:%l@NPgh?+5 T(/ځVS,g/⼌2A $K9R ⟗f 1C,M2 U-dd]R z7 dE߅BMK XVD9d. Z4uє҄ /1u;' +t 55J/*Qii4142/y}n!gG"@| F+Pᩢ&p/yɜ4Je- X/qN8z:F[D5]Mcv|M`-d~,9 SK'qc IdCjQޓ t:0sFKOTj)TKݭa<.Q+CkdpV[nu;tʫW8khomt5HB؁R[v~ OeIvUGȠ8ZAL2222N x7|os⣱)r^*tj) )8H){d6Q@yq|OwA&mmp8%ehJʴa})8㢘wALc<Ƥ)?֧c)f4R&6V))rFJ䴤Vj5\&l x.f2v1o73}+XrbCL:d8:9ҙc%URS}40ʮԅ-}vFxG $iBK3F:\ &Do^(As\kbPl:wUVwDA P.%5"k)0lkJLBiȮ-eNv.;Ɲ.3 JMGMkѼb%("x9Onrp3g<kn=UtJ $">`氇AL0fp x0|2Z0qD`\8A`$C€Qy uHB:`E VpEpH0/1AphBc8` TFo䅜A\b0-{ 'B { >0R #5;t2/o<{@B[l֤D`\bhcWnt_x $L&d: \"v:b^?3dPH;W788Ly!oL}dZ |_w#dkeL\eȰ{u 1.Xc7Nu ΢@>!#@yrk$=^573[ {sdɟLn60p8ƚx*ha+/{ [z mUt-,"VQȶ u>-w]D @4<x>BUnzfMWC)ƹ97ik{;|@83SopE=p9:&pLt|gL8)j ^W1) T\T>s}r( 䬛뷰k9yuќׅ'%dM;6w{۱'L!;'/ɮf>g`or8o.0[MYދ?H g>qwrHAȰGM`6, ЖP<9GӇقij$'^* 2F:=Cv][g{M)BB!HFzHHf !D|rSGɨ9n5=i1:s~3.H.`'T9`rR3>7؎#rY"q2ff@&!/9'>rN"vn  dW8PrWBz7ۤ$*8 Y)9((yF60ȶpjN ~!"%ʌ 1rVnv-g?)v,{M&"$\.-Dh]M)n%r6 ]@8C:d!XEGqx6{HjP<|<`D{$!1 zM)i( 7 Ȁ0\ b0 GM#M &C 3H !F@ FJiF;6#%@}@8lt@E M!E ŀ {( .A>q AxER6@v?F^{Fo&$ >=P$" Tn6 bdą D >͛MwN"`B>_u([b0µ3< 5+7=nD,|<9[Hjn"Im$rS{7 B!.HRJ %a۶?Xt u+J\AGh[Ŕ~)f i+LW l>#wF|$k\Ac&}L u&]~|y79kmnK_82z"k"pFaH#Z@BGq#c |ωf:i[B8|{&qjb|gҭf2 # [D+F#!kA <^!&HYOCw>6?/ F॑pxC5B8|ds8z""@aP@@1pc$-$dP $$1K %F)cKvLP*1(rK:+t@+6`W*33 CtHzS%a\oH/@$TBQ@@y !. >UF8:K8EMO`Z *jw _CT9pN^磅d`ץAhjDSܤg qe I4D"cg"g $:#|Qt+j<wהgo !ĀIYs320.^,AZ EFMfP3d?Oȇa `LH 0,c$?bo!b@V0`d0 x@d@:z72JNa QG '<+.A7M`[&Co13RT@,;8qсQQf@e03"  cǛB3݅]P*n^Y B  P л dh Scg =DG!"K?d. .pu>|<ЖM =yP*n+;B $qn_v$B!dB!DBTWtغu a/^lsBĕ4~ItC׳B".I#d޽Y"AYBY !B8Yu;_پ5H͋M;o^xaZ=B!Dgk]{MY1cf1 '{2M__ !$?_B$'ϝ\hB$,}A$g邟]{eR!$28iMe"|"N^ ~Mny[uLewX밡*)B c_|\|ɺV4vگ^-]xQ:k ݰa.sYxݾqBS߬V 1%)H0cI0blkn65a2MZ$ɓS^>VNs5e I&Uu}LMWgnb8xt}r B$ N}?Ң;9?hų~ׯ>=<܈+G6_e-(*gu(+~ŖX;Y6O{͏BS54ClI-̍’[Ftp\ݾ0I[f$%)XooNo-$t,kuN_kUK!jNϟԫl“ٜX#nhxWLZ{OMZvՌv>Du>^g{uMwV4}ԙSoș~ŭq~CQ[Y _"\G{3dETsˡMe.(]ff ?&Oh2HK/ˑ ׿GGǾbtgl̸y?q-TEȧ  1%sVbP}.i5fKlImvUy5L[fd&  (7 cN'TYS%I}\[vQ,t ekGre8[>%eśf}Go?LWeTnBjycK`M1&3j;]*$%̨"U_D)+{ 3ne%SNq)S؃غuk^^2m۷}X' H_xˆk&|?~+{]x="Aϼ>EEЦŏzkTlI4;&>پ9yZ[['L`cǎ9!/;xϐB ȬQ6>zTutuY#N)i3_}|˝^fB0,rA&-sY0$9JBE! EH  B!Efln, ,!D#"Hf !R;{B!G{B!BF(֢"ٸE۷f<{B$?d"I0E>Nt(ˬ!rEEC!B %B$B!dB$%@ t !%$[KT|Ί|O gI-f={e$'//o@2K! Y0rmU_RU$Ί̂v 45 sMY"%}P1x~WKWCcE1o^+KJ+`&k{~Òwͺrqk/q!rw[ŬYmIH/$C PsDe~gggE~vqiaU5P}uU|-8 /pw]؜ޜRXQu%eOCָ5_͞]T4;{?𙽮U%!QfA:"Ӡdb13g@?<|ʟouV}u_U-Ɩn;Xg.2ͼvN_*t3; MOE"57λcq_Vi%k j%jLI[,%J3.Y[ETA)i^^_B8YB!Fv(q,_Q $|wkەӷ-b徨ꕁxf7?yYAҼ^Sk{{kӬUFxN͞0p>Ơ_E7(D#%j@1yeӃVx?&EENK]ꪙk~6P OƉ%3wlvwN1{eH5qBAvqfBě]ޕ<ܒ넓RͿh=7MgoK]qvvqi-y ^2tT{Ӿpyx_nSc 2@B&î9fbе'h#_#j-/D]~~=xa0T44ݾ^|l*PAVdb +C_B8ߙfn"'Mxq~(c{WB%nBěB]n ,bHf !蓹oN} H h(HU_4!ECtOC[ )FK7+IY{B!R!5odHf$B!i(B($B!ȑ#67x$B!° B!cXff !BEC!B\$%YYY%QYUPa/ 3΂NDs!Hf !9yMwEUDY^>4n4T%KpKn'- :xr/,!Bā\oQ:\FfL9晋{Ɩ,Ҹ,,!BąeO5+#еzz[|*c ~%%(^u=c@U5M-3.jЗ}5b6SeWZQdIf !"N/x~I#R_2ݮKsX[V-zdoZ Mr޷yI sPsSEip1JEvqеD]jI0TW\z` YB!+ʹAh QeTM3Ϯ|s;LM8ҮVgW7(W%B =חY_숿`$B'$Wo { >rV˓g}ʎe|3;ߡ 툷{`B!D..-[Rmdr_D<[\cQuÈ'S/{/= jVII _KK\)( @ UjPVIIB ˖-;7|3cQ};[[F͛?5>}̩=0,곝;RR+\yu6lP[[H3|?#55K&L0[Tg;{W]5?ݻ}}==EJJJVVVfff>},Zt7 5~s[:?csιFzorݺj۶m8 " ---Vyg--WWWGOn/妮b{7uTHvl[T ɘvXcd4gi=:؏>NV9 wCW5էySlb{uuF?Is"{.]zw^z饫/c̙ȑ,]8_ݻw)55~3ʚ:kk|@PW(lϷZ54zҥKn-[U7Ϸj0R:R=JH񕴗}舞8ă>:4PHօ\)3O?ʪ5g==|(PF55[UV{UG!559#ؿ}=MM'6lheĞꇷt˵5Mپ}Go}_~?ʿKFtr1R9!8QkwxKK#ӟXErqp71;ocTDjj446Oٶן4444UcO UW}_ܰ!ķwo_ҵ:ҩ"׌ݻ|ŋieĞK笛o6׼m?S-ZZZ?RZ:v촴N ZUUUVVWB]]Ǜ>ٰac.ه~vxU:uټy+`رc,`v7GjZJ NAZZM|!~èolnO__ztOy}U~|&|!~]̓"0?m'?cJKK-[VSYrAÙCf{*?禵4_t'NԩScckjjRSR:ge"+Ex]V!FGqΙg}ָwev%WYYIoEG9_)Rm᫯Mn-F]]CQue_q%ں#K;v|*˫})^[n1#mJ+aꫯuݬ!zT^HdaFPlMM]RR}YUk|FsCc݉'3T[6oA 6iחӆƝ;vL=mݺoU ---u[o,w<` /P\W33;_ދ\cm;cn7=ztA۷o+Ei**.>tHe6o >#= 7عS:*wJ>}2SS7< xէ@:ŏ㇏=/wͣxg]u~aEMӫ#U{}я6={566Ԟ9Q_[wh#ǎ[_-9ZVFub;l&}k Bs}_u TU"V~ݵj*˿X';#GWUUѻӺu먨.;zs})ݶlJ7#[CCcwFj|sbt~UsSá#u65ɰa< xرڶފfGb7і-)=rs:훚q'̋? "E5Mc}>}5kV^_ʕwfie;YYY5R~ĉm}:Tfeub23;]4uRm[?+/?s /.5kީSM6=s|Qvݖ.]ҏUUt;V%:55m/h5**+*7iln[S#حѺUVtG1njUgik[ s߲}ݍY2sϨzqiP}z7=mjHolz~ִxLR{n:(*0TM\knn>qᢢukom_عxC+G),|3w233 ~}eφa#JKキqU񤬮j?훛>tHCCC||:.t޽o߾]vxر/PUVV<fdd-?qxOW=ii)tsJ#Ż;Vp4A9h=[koٸbڿ^|tII &RӧqUD"\Bw ΖdN~=ӿں+^j^׷[CU"藧: ?}rw^2#*E0^eX[S#ǰ9#F<3~kr;W0p_he1?ңSi Ovv//۫졠)}rrrN=TnKKK{w+++)4htV7ɬ,N: m{異V#vw (l=pd }}ƕGoaao{=zDaD=R]{J>w/|r޽kkk靏5vUN,`v7S}yWYVYQq"ni,&;Y=yJqg gUO;cTRW?Voz?DuCeUCyUKCcSuM}]89m &oƵ+Ƚcg:/?sHƌ3{찊*r7?PEѱ?Թs 02kedN{}2 @m]RѲkoѰ9tcS|UQ} 0{{hhhJ޽{ǎ۷o1cU!|A~~>7p/+**{9П Uuf -^qÇSAw`ӡ~gK>"}oIO͞?c[;MIXYQQٷoۣ783;pɾ>)i]gKn|ڔSGv?udzMٷsz^0}ӷ3e:guY3ݵK^zm~WOk.^{J]2p@ZN;}}jjKμ7ˎ}vF^F+ [oϞz-^~6g^q3Hgen7|aXFj>D~#%233;"· < w%zӥWPOG?}яX {a?2B?~QM߲P)'S͛Ǘ7l޼Yg'4/Vg;{W]5,?D]eSSSY)=}o{75~sα 5/.lYC歁Dv~V[]qB19ᦡsys ]TxIlNdH>@]-/ci=:O@!(uU]< @]*5PW @ UjPCу/QZZڧO)%Κ5/D*·{ǣ#w%ѧ]UY"\vRYY#HJ _WA4 Fpx2,`AQ{8XPZZ:lt1 |86!js·ApXl 7@VΖ NArfUC7((<`I@vWhJ+pj>/_ 2/@TW0K1Wkhol[CSKc3QcS ^UCUfˢM,޴G7-2`{l!JJ:Q2 2u}bU^ȪV{/=ZkJk/d]3dTD[Z c- y%7:| <``@-m||xη}V 峤+fd_~-< U>O~c=~_̆҃cOWX00պg1Uy53#fS;N|x+Vc%emoYuťtH ['͈ H 1>~~#`Z}'Ȫc`PIV&ʔtҁf\y%NӼ >WƠmHL+Ik1zEu] ?Pc _WӇGQPɬYxMYy" @V7@y~v;ְysys+k"J'?zBs)^]82,_d*?sZK_ _W@h~ƌҿ{*d F[-gbi9d+`C3tub& V U:<@MY)餣P]:PU&/own 歬1{xVl|UWQA0X-@VeMJ49dUr-żuO#u`vyu2?B^S b< 7zU-U+W}l̳͙cLYgo,֑(')&vs3t{lsyPIaaaWp] JFp*}GĆ Y%@0Ȫe'z^jԨQ>u0W89+k{WAXhຠjYW~} 8*Lf*ZZ lamձ- @ >:ut7;oVNtѯ]OЍnvOK +h&%`P;dhذ 2 3W۷/2h <`RK95L4 y@5p]PN qIU" @V! a0a@-&9y@Ȫc`PIV&ʔtyy@\.Z@WsƣpJjr_WE 5)m+vY p4OlXUY"\vV]ua :۷ouUŸ_?MYy" @V! j&%@m!2/%YE@^׆ӫ*p`-qO>nFw],:u* J|86!dU-@᰹+ U9>Nam%- 9k;P4F]H7V&5|@[i,f˖- ̺GWijo vwՍy|3)[OFI' 2/%YE@͚c/؋ƚmc0[bVO(h|`Єj*X'hU 2%Lnn|m1|MRذ 4{l UI uZU|? R6b ^h `%k+!{%Ζ`Mx;["1^h `ur;[:*{% ^h鐀*$9W%5W*< DuZaUx=2%CJ:g 2u}bU^*$!\Ԅ U:uAdhr8ȪLI'y.(4aZ< dhr8ȪLI'w yI yT3m޼^A@~d#[M 2uy@&Y%*SIJJJrssW^͗Cg?9<#n|ЄU:dhr8ȪLI'ᢢ*///''gɼ)^ͩ6K5 Б]T-X ++PZR, & V U:<@MY)$իWR-#+4}QҔb@`Єj*X'hU 2%0yd*KKY J+!n0B~*VUb ^h `%k+!{%Ζ`Mx;["1^h `ur;[:*{% ^h鐀j4*⢪1tsמ5n\4ẠjẠ$5B ny@Nhhr8ȪcDXdU00Vdt<0X-@VeMJ49dU𼄯p:Y 2u 4*pUN0M 2uy@&Y%*S xM 2uy@&Y%*S x^ݳ|?oVUkb_W(rk,}ZyejY 2uy@&Y%*SI rx+L=EeJE *X'hU 2%t `7,[5^ś Bqzy#ru*Bt| 2u}bU^jEUVVom׿a|:wO ܫ*-$ LZuxgZi={Ob?&ԁZZ-1$d|> V^K[tYT9-;Ojy!m|rѣlpo۪fR]c6f,˚\i<Ϊc%l-ӺǍLj_(kW;Vg_gL,՞˵VHl1o\[l/K-C+;AVe$"2հL<(rYT1'OKc337GcXR;F[*6*vncHdڒuw- ʞʳL,xњ˽jYӭ<3޶(SkGjj5O,0ʇ0X-dUN0($DAVeJ: 'Xi徨rwl]3}W>g}Q+CaЄj*X'hU 2%Ȳ32f<`,{ߘ3c\cƝƲm ;_b-*y()}h%J*X''YE@*QRRzjW+1V($DAVeJ: Uyyy999'OMm]t땓 [#{um'J(UW8lam EՂ xkLz}YGXqIܠilߴ%ƺ񓳉|uk4k!o=9ڇ4IMy%C9rW^yGQ($DAVeJ:< 4aZ< dhr8ȪLI'yzU=ӧu ˕SNeAX[ A&<ʁñ(96r*g) ñ$gV5aFq1_uVeAh\^0~M -%` @ʼXdUBE}ZMJ:GȪKEVex 8tW\4Ǝ-fMNR 횂}3|@_%%%WذwQs*+h\;?ƣ0h`Yy 4*pUNEEU^^^NNɓySkнo1y@Ȫc`PIV&ʔtZ`AVVo /~ۼwr9^%.훶X?AN1Ȥ [Gi/j`0V^K[ Sgs?~f:ڰ 6(Y5{d,kBпxU Ǭ>g:߯:BG^4 F.fʼu XurFr & V U:<@MY)$ɓ'SEUTUss3ǎ;:_A0oޓo423Ss"Ӗ۾9ziQlmbV5bCyV5"5vor6gXggˆpzud)Po|E 5kGRPV:֔0h`Yy 4*pUNE3WEai>OUW#UTfU>S#}N˕8MxY%{ @X\9`AY%*.ڲ>(% `ԝ_=O? 5ѷiW**"; W3`p f 1X-dUNO,*ËY$<}&oZģu6%%dU"2UHBjœmZ.ᵹ}|lrqy@<xb3gAp?h~Y9˭1E{E *X'hU 2%Jd,`v7XU1jY 2uy@&Y%*SI0Uk~z0X-dUN0($DAVeJ:7-{,`v7;}Iҷ.ʭfhLv4aZ< dhr8ȪLI'())]z5_\ic\cY;Wپ?ʼg\+]hɓ'&ޚ?3%Ņc&%` @ʼXdU%Z`AVVoUuyWiٳ'|W9Zg '-i-C4)SdU"2հ^:77j)辨bNQƹh|#,YS붍~=2JsEp o0&OLURTQ/;w>0E;/I^gŖ=h綉Zuֈy9NZ"Xl J^h `%X`{%ΖDjZ"Xb]0{%Ζ ^h >Z:${% 1bJ1Q=6@&=6jE=6ǏgW{)*{ŋ )+ ̏{lolw7iQWRX܏TgNEw~9ҘfZMVbR)yKUo5faPtbXECAVe$"20Ϝ*u*S5cQu͵9V4) 2/%YE@Pz7_p~Z_ŋȝW ϯ`,NU:<@MY)D97< dUN0($DAVeJ:< dUN0($DAVeJ:< dUN0($DAVeJ:< 4aZ< dhr8ȪLI'y4aZ< dhr8ȪLI'yzUA,[X[!@`$:*G7N *·g5s8'6,Ȫ,_AVe.;!zS!J:_>pU:>Ȫ /d>>hRI!> *RbU^*$!0X-@VeMJ49dU<Ხz'?rݼEE *X'hU 2%繬.-ܻcfew< dhr8ȪLI'yaWwXU;dWaZ}'Ȫc`PIV&ʔtf]zƳָUjY 2uy@&Y%*S x^/ժ>g8,a_=jY 2uy@&Y%*S x^W88XЧOvi7`.WL:am%q>*JVBp܊˕ȪDUVBY$竨fw}ǔQa?_H *++yҢ/̝sD?DMJ:Yy)Ȫ /dPUl!JJ:GȪKEVex M 2uy@&Y%*S xM 2uy@&Y%*S x< dUN0($DAVeJ:< dUN0($DAVeJ:< 4aZ< dhr8ȪLI'y4aZ< dhr8ȪLI'yPCZ"Xl J^h `%X`{%ΖDjZ"Xb]0{%Ζ ^h >Z:${% IWQQCPi)ߣ>~8t TVV(E_;6~ėÁy@5y@Nhhr8ȪcDXdU I4C+dUNy@&Y%*S x< dUN0($DAVeJ:< dUN0($DAVeJ:< 4%`u@!2uy@&Y%*S xM 2uy@&Y%*S xԈ[]i=X% VˢYy 4*pUNQW_~̙O~`,NU:<@MY)pU:>Ȫ /d>>hRI!> *RbU^*$!0X-@VeMJ49dU<y@Ȫc`PIV&ʔty@Ȫc`PIV&ʔty@50h`Yy 4*pUN0h`Yy 4*pUN0/h& V U:<@MY)}Nur`ԩ,k+!pU9Pr8%V\0@V :D8*$9_EE5CU~~>;v|BIQH0wmx/&%` @ʼXdU I4) 2/%YE@B< dUN0($DAVeJ:< dUN0($DAVeJ:< 4aZ< dhr8ȪLI'y4aZ< dhr8ȪLI'yP& V U:<@MY)<& V U:<@MY)<jUW8{5X@BK-`uX[  -,vнAbgK*{%%Z"Xl騀質*{CZ".|< V=? &wG[v#=N0& V UNR cC"EPuG:ڬӝc^Nf[+YM2{Iz٫MmXK0ޚv7h- b/l7g#)Ķ6ZX̦>aKOqIL" P !` r%Y-5Ji[|ļ &N,e5Z#(f,e-uZ5{6JHYRhh5-{6+HO`7unuRNi/zJk-'z!Wawڏ-0αp& V UNy@2b0dUVQpo^Uêח=4o9ct&w XQӰQpV2@I'Ăy@ȪLI'ȟ->7s|>4gI-js.Μ1d'Z=p}/+!&kÖ!Vc" P !D_WmZ 3& ݻ/RE *SIɦO1łmlnu(F3iU8ҚjaWs`>`eOams)`\Ͼ>g o )ԉU3O7:fB^}r+3O ^J:< $hK~NF܏%osx$8zW^1~ʺ 6m:vkI4f+-`omt6?ŠЦE3_\kW/t;XPPߣGDiiiC(餰0y8G}|-be{87o?~<\?lrInmfGɱĹTp/!h$ZYYɣ-~a}A?DPy"dU;~O>~+$t'.)~HytϯWA:EI7 7oQHTUUUݻw+{; **U u>o߾hѢڜy qm[E *]'k֬yꩧ0a<&<$DAVeJ:xUxUrJk6ص Q`z UTZ]w*Dy@ȪLm'lҥK /dnhX  MJ49dU<&DJK߻wO?}ر}}@<` a|gկ5j/~ U^y@ȪLI'˗/.k׮phX}O'x X{,ӧOo}rr`ԩ,k+!p"@inn~饗^uu}g_Hrsgpw\9`/-@:D8*$9_p~Uϩ={ 98*%"(Sd)++{ǩ֭۝w}QIb%ѧUHBJ^o駟?}M{ay@m޼׿53fQTxM :o~.ʢv/%VcRV&ʔtyyijjӟfwM7]vey@< .N8SOQQ1o޼/E@< dU榓#G~ٓ?<`U7o摖ƏϣxA]?455}߾;233dPWy@R_屁YM3 /_g+;wnKXU 2%%xUQ;566ذaCJJ~.? UUO>$UYYY?QT^uUk]t/Ζr={{W#Xl 7{%Ζ{ @~bsнAbe۶m>]z91c:{%%Z"Xl騀質*{CZ".00۷/Z6''g޼y=5---T/bM[SO=EEՄ x,-ǫJKK]~ma4n5Ft"玹?\vb'!f͚5EEE|1bʔ)))o:SN9pʕxUW]{^KcD2k,}KY%*s ƫ< ǫ"B+ZgQIFY D/DIƗ_~E}= ѽ{wTT?7?&?_>⥬MY)ǎ۷sgEcy@&Y%*s =*^uyWS5bZ6U`jꭚ=m[.i%jYa [ѣ3o|ܹBJ'N4 r/JgWjԨQ/)>JcRV&ʔtKYWgeÈ&Uqz,4cA#] Y<-+<` V3fQgϞ :DI'hU 2%;^G혶(\5: r\gsl@UԤgQx>CM jkkYPS y$sIh&:D܉ne'%⺠miU 2`p]hE_TȊ*ÉMvtuAmDI'ѿQy,!dhr8ȪLI'y< I7-0N0($DAVe.;<` ? h-$N4 y@NXB4*pUN: H,Dv!; x$xU*lKI'x]P>9QIK&Y%*S x>h`@bP 4*pUNy@𚁿(u}h(餼GQP'^lP0(<@MY)r~`A4a8q" M@$~NA޽CS@,V ymm- jjjX@;}VJtg\0_;hUVBY$WQTdc]@nn(ƌF~^c/Uf h+K^SN[>yr ʝ*ί$<*ڜk>괢9XE7s*rFIG6-RQe'>2-VT<U4n8fڃUBI^J:Q28 ,E(miU 2%%ycZEG5so~s eʢij \TQc=Q.27uʿ6zFsfV}DI'J j+*{9eDI'_kc $DAVeJ:Kغg9~qy+U G*2~j6SedvzPihKwOF%}cɮBV%l]FP=Mj9鎋y,?*8@7slq]m4[ߺh}l(by@2ˎVDI'hU 2%%l]U˘0>%%m=D쉗"tKehU 2%%l]uyXL`G}< O!fN6߲E$l] ղ;'. L(MJ49dUD'\ !khd= -j%J: wyʔ-yG$XIB!:['1a1؋@ɉQ8wDȪ=\g#]d{*f$${9Xm5 7n$>Yu# fľ-Yn E{5&C{B{\@ge;Z(8:W9WFg;[:a}\t0vGpe։!&[Y֡X~= ۉs;p`9 @0uvʎ퇜Yu)G"VaaQ^8s5' F$KI <>#==.F!M^Ě:",lc;ݣD7_ӝ:E #<`z|hr+_)p:v7u8T|i{d*xr D?!8w;3R; [9׹ [ wZM( ]ɂfPZE{`d87 ؃m+\*GU=UUUo'rҥ˕W^ٽ{wu:WbEYl ١H^t>g9- ֕XMآn Z51|\^$B^YX|-]¶ -~ȹ(b-.&lev+ٹs+Q\g!aChʋ NM#4:#؍E\]6X?n׉p9w>J G(XGx/B _W G,,ưaxaTUNܼö 'vC o8tU{+,>rP;VD^Z[x]E"`w,'Bp.ѐ`eS?_ƹӬNHZ+6XZ=t/1v\>sݳ;owsy;^}pvнMae{1Opsy"~&9U4l8{;EsOϨ0a49UW ю jGJ7Nf7Тr IKy@ K~~>@IIXܠ+_bt"@BdDȼ "S҉Ǡ*5PW@544Qyg7_Ah=ƅ^8ɁWCı j, {;23| ė~ϾJMzJσG~!}Jnn3SSSz裏|M |>~ = S1cnk?X@Vcd5UGϗd{DӝK(}-~;f=ZFK "5Z-o 5 rYWQQE [;oH7Tw9_ڿ39q3b]  LO<ą^dɒM6ZW^o~ӟG?5\3ydZ'nExQ}ߏNh`vKm*Lyjj5і[Yqm]4wjvnYnY;Nm0|ʙ|y};>VWߜݳwűi)F}ҥӈ݇ ߃>s9zw}2jW=WPU#u:}`mqU?G/>-k3o)UM)#S|aMg|]qZZET?tb5U_v_꯬kl1Rtc瞿._ =N]oii{uvZ=o>} ,|--e%e =:sy_UVfi*/=5PE}mNr 㻋>RA%G}}}Js4Gʋ:Z<*;aq @;o*ܫ_7--%eMuM{ooy;wT,Z|)]6~?sZ(|weGS n[lҭ1;VVzyh5AX EE(櫪W?pż8BsSˮ Z^ 5UtxTN]2SΩ?{u-YUUu[3*+tI?ViWeXkԴQKIuFU4MwS !lZ4`=M zBWx]9z 9u'PEԊCN?QHKK]cK]DCciUJϗf 7mGw}TC$Ξִ[g3󀍍.yx̬TVgfw;>;lvxcǎ-++ڹsgiiiMMͱc(yW=3OnǦEOF޲ExruFNd|]emȩ+A~3]EU/ #>=Я}^^=唦KtxLzg{gω=Yu{"6۲tVXE{T=R]{J>w/|r޽kkkҢytH* =kaA|`*23yKV$z]&FजKLh~Qc{fV3knƫ9sβ26m;1bЧOh΋4iRK+UUٴh^ Ϥ>|?o 4_ə{|9 7Pt̙| OLh~Qc /邡"(\jsν{;v^8a„9o'wy'O>|xvvvFFFJk׮]n*X@\TUAE?@by&e#w_Wk㼹%, qm6'[#j, {xQ.2333dȐ#GqG>3)8p UqUA )O6[M@c}t7X ӟ;,dI⅏;omJzrNYvՓXs/jl8hf / u *50*5PW @ UjH"_\x7oePW$݋xpWG2~@x'?^(JHcU2' *{qyVUW['X i a<8:k}k37*8 @ W @ UjPu@]*5PW @ UjPuUTT0:۞G!e顠 ??/FJGBGS$AуBx#,<5uUfg=_MӧCUt̥|PWU fWSWWJcH7xUv`ҁ|GDȃ౺J!"g]քÆX Ie]엾A]f/NߢxYWcRWy8 U2JB2d{u>CDΝY7ƱX1kĤ4VP%[X\ti,N*Iv });wftZ-իeSNa:*mʔ `<@Uxo(M7f\+NgEa]zU=3^|/zk…<|Va.6k +/rMCڲ3zD-j˨aҞW}*<2rQDea']?e k|8UVeqãW%޹#|m}x66\ss;eM.BE}*ٚ*ʍsn=43Uh Ǡ{NypL -~')c$|A+n4 J^tgMf}XU i5T gT҇y\TlJGb-޽kT*VIZ+筛'%^Y^|Ƴ3/fxm̀{ czlnmkovQDs wmF?8@;0}L1%<˯1f/ɻW/7=IM#5ٯ7^^5JaNl5z׼Y7TDKM]ox[kɕ"QX}UB_ËQ z߽7n|p=%֐YX%ǟnt8w+G%DV۱is&&;]֑4͌YY?Rh\ZPpЏ,nC=abOo5Y,ִ5dd{[ۄc< mŅ c\'Ѕj?_oY/zlGZl o|w@n|ptZs}bWomu@/'85}nxkәoٺ _ٻ}sz=lrs둽z1ቹ\:G =3TVmH"솸W_:7D 'i[sw,0.ѳ@'ʱ"鹄q;0M AK7~TVo%ƄQ+>U7k&1a{qr[k)8= 61=3}xq;'c|nih~hTd؇b،ʑͿ/Žsq=KN&q;FU'Og{G;v +gXM$Mְ߯6T˖gOu}nC\^ >o=H'BVvoߐ2 ɱ~km ]bv/aɹ,{EW}oWty(ǎΟ7y.?Ohni5BcRY4ٜdoʻhhoMsKYnO0Դݱx'<='f&6qRf3B d0ͶOod\PUyֹfikWxRFӓvޑ.77<0oMiu\}NjzM{-g^vMuooc3x:7? 53g̘w1HJmX7Oyݤ}yR?Yk֔߅w= 5Cxko짥p-p?77Hpx.Y9! @ Eੇ~Y~(7,Y9z.\( DA4vXxQYeee,f,BLD\#!@oVм;H!4)h_}X(dE=j_b0{!oצM~X䩿|Pqv;=U)o"ok9h/oeZkh>/b_G{#NQb;EO;Uq[0`j^} si~=vyiiبZȾ3n:*zҦ͛JZ_~b;,;zDQl'/6m3D.7q"Ӳ18ubQ]VCϛ:#hE\˺=e,*mڬ/b-uMXM}7w??k\9sf4nE7n.Ǖ:uʝʢ$Q,u,3pJ0g6cZo/SljҾ=6UOfcOFl^T-$\./۪MJenl_zz<7oO?ϚS+m9g?8w5`O,_|e^-.P/پ|ےJzY;Ν+'is.ig3x1u*'sggQF*V]뜷x˖KY ьIl/z^&y2UU6iV4fh۶i ٳb 'hci_Q҃UqTbۓiY%¾I_%_Fk?/n/W7|kW[Q|Ht뼵sSjGʌM2P^5ֳ d.4dԩOpvvEZ}KO˪tVm7ńkW_[;*a^*mZRS*-[EF+U-ʸ_nYy-pa(odR&g+ yrMH?SMDQ8NU:N2`2odf,Y'?ϮFj(rOr5.`vԳzHFͭD'{-2#G8ةTabT-޲eyN,* r}qF"ڜl_#F 9KDs~@ElJTcm5<Қz~8>}Î*M,(eJR5=K5]:#њ'aV}߽馛DxHo#ѝ7a75A;m 7b<_S >4{H_i.5K6N466f9U.J\{F^tGdv;ܣ &DCУM&(L:$Y^|/ȱ,]UڴeM|06QaӘŰ>n i6JƄ*%&Wddֹ`AM%t8#i6|,_'"958Y?ueauiTn-;PW=UҎM)O߁&/_ihW'%f6uRn5kq(i1&AMs;+jm*m4keeeK-͂<:4 8S,zk|_!͂[d32csݬG><x3=qr{-l?~䉗*w:oBfi~<=Txs=7kg7&M 9>Mt[p2Mτ^ufJp<7KX`f#\7+r,ʊw[pm(܅YDwm%NM-ES̓{)uhK&[~Wf1U1MH<@ _5!შu w/kXnT :*zҦ͕ͯ=rpp4+oۖi3-=z0]7 f%'κÜsmmm:fΕKNƭ=:<08WVy w:y8=z4'<y0+=BhWWϫή`w<:0PʮT70*$cvl9':7з Kb-ШQB5mK,+0#Y9kx V|W(6yPRRLP!\ʂُP&:aO!L%px͕:3ig+Và[&N+-+JD^u+˃xwSWOʙR]nԄY@YQNX-WTl @+ŵ=o"U-2M*^M*mZZQS֥:yiukGz^OhWlQFTdbK%\C!\!0A~댄͎tҬ~n[&Ob5J>6 ,ϸ;ЃAC+?M ~Oj}b.CGM4 'fx݁ Z~nAC{"=4s+ē&Hf,'9q6౹6hooXG=౹jnS\bгT2@, '౹6g s, '౹6g60 +\bгQb 3u Yul4 ,! JDY*(/ofW=~E]-x7\ڳg)V[f RSrׄ4?3VxgLC+?M A%HrigWRb*6~n)_'w*A xV jY94 3" $s %$H<!O@ ?7`PXM4 'vzMf/1 xl. qOCKcsm@RpVгT2ۀtAZa :W汹6gDEkjjv f;v566_Ešj3wIHZ&urY yU4~njb{`d`ē&M 4(V LHl'0hQ4D$oJR1(Z}$QOBo"JpA(4+Re{}! =i @+R8NT2"ie!H(|e'-ڹr̕;Bz8C4A=i @+R8NT2RYq]swc١TeDxmH F|аi3eZXwZ]]ѰlY${Z"HpF%lUDuNQIDXaڢaӦ-߮O,] & ~E//`ğ<6<6`T0V ?y{Q Y'UM^E*a{%>Ye}UIbaM^OCcgN{PE?a=}rdJ1#}b׶rBhrbE.x<̿uyퟆX3K-7bM TCCS6OqXk]Uټ_'0\6J*kg5 iaYTWO?lj{!('&/Hwr^!z^"Y}+w\9q9O,ݡWdl6-{g񒹫V8'oΙ^%{1ȋ4%(a90rXpt;^YCnшV]'px˖KYIҨ3D=1UZOeEӖ/5>%U7DË(šj3wIHZ&urO:#hRNa32SF7ZaWZVվ^/J[G6Ozl18Jef4`zOF뼵sxU*wy1)0۷o۶٭[_LwO$m~m]eusmmm:fΕKNƭz*[́.H{Pw[JAZqEpQ f̥= `8<KJG3cN(I iАr}kbA6ߴ]<~㟚rvvvSNk  ]D iАgQl}ko|98;r>"78Q:e8|%YC>*PNX V~n@0h(Q&ɧAtT^Xf86UO}0̉$qmz.*0b >Zb5OIHZ&urYX!;|k75 xf*eIgOhyKLأQ\jhm(i|fˍ*#Id%ۑYK8V ح.:@IU^}t3R7=NeF/?e~?%%%O6q=ZZ=sO>m6nO..%!O@ ?7`PXM4˕yWzS&XVuvJKkZBT;*u*ISvO>+#~/>r(2ukebi((?䎨xV_) _;v1cp=*GB%</|8p+!O@ ?7`PXM7s9Ҧ͔@%҅umYT:/fS)[L;,KnmCSZz7k߻-zp ݘC7|f|OF/7"VD.& ]C^T9c@XK]+֗;u7'^xmr ygqfqMe.NiYEWOXYKdխZtE'Tkͽ?&Z,cO':t0>뷿 _:_Bn>N>}AlfBL :)jFK ک`jsS6=r:muAve^\!O@ ?7`PXM7i_&n]&D'T8ux7z\QxoWQ-ofOoN/*b3t>~Vy9׶%NFwVM3C"/$wuBaӫET9wer,JXK3Šiկlֈ /=tӊ޾aL|^%\MnjPBFb3pCޤY9Xbճyi[KvYQ9 wr/}s'yƜXtc>sIJ1gZ2{|U9` ouV)F0Y W'GYfJ"͸:v,HYb)! xV jIsŶXGխ1Neoku~VU*a$9\ cا~)~ђw+Xrڙgug[IIMȨ}/.>z񲲩_b3'lX9MK/BfQa=8O/6mC'+uKiu9u4?"]Am)hia=`$RwJ 8pݻJ9e ~7>ԤjI4|M{ pTnHdq˯m= CV`YJG)#y,\7+/C)UW:Jz]_Pscpvi7ݴau+_ /fʮ~k1zbĊ0hhV j_fÇyw/P'frO>"rzYޛU(*!WЧ)2NU3X0|H<!O@ ?7`PXMAC@y衇D CACkH`fC54H an0DIHZ& JIfx_1#j͓&M A%Hrig0DIHZ& JIfDȄok*sG+s-ih t9mE݃R  g1i2-i884wbj4s+ACb5 ,ъyr^'M h@ ݃J/͚JzBog0DIHZ& JIfx&C$4~nDҬ?:%fֵ*%lj\P:⤿ƒXתdqXKU(T&9( xV jI:׵ϮfQDg]RQMJ6SU)\9( xV j|<õu(Hhxcκv%=زnXKUzsSM!`BF:L1g.J=&,AF^f_'dܿ3JWe\bY&cMa ƪst!<6g}ѣ3x<ޓJlzJ\bгT.V(2u"~xcsm@RIF y6hht_)c!9榏", Z*˃<6<6`T0V ?zBR[k/qHjDIfM ]ev 7pҲ  9!0 iuC|1mG+2Vgd8Ax Urc`dd8(:V hr|Zs7a߾xbo@lN-awsl!ȑ#)+L^oOnTf.=D˰lWSWZ~/W04m|RVIwhf"$MKL|j?Ҵah)yՋzfukm;ȢZuK\vR}:=2Tݪϵg5Mo.)u=|8Mk+^WN)2QanCțt&n/YEB@_mł޽{U*VkooW;̃J7inq&200 ]駟{/^|Z־}T.:FujS—0Cp?7n.߶]⻶b5OΫ Jٔ򗿤ꫯ6r,]4T-yڐکGHǓI̸}~4>zKDTYFOl,{e``/,Juot>IXW4֪IJƔ_er ثvCjg?{PO@=.%U<8rX?}WBQ͙qʛ3ŽyREH;89/8sҠuJqtWMwRN%v,.qz wG+0hhXB;/~ݻwV5Ǫ0F0h(Q&)ZdZW^P$j}V,tQ:\cׯgƌFO:$Q 0 yr Ϯ=EB!ҙ8`.uK{c9YCGۊV6on7I}b2k<0GB8pHM3 Eiv4YfuY4̿˓^-zLLW.^\cgTǸ-^~~Ql ^4W WD/H'5W_}?,.O|AZYg$_JeRf>>hnn/\z饢 Of׷gې۲S jZ. YYj<KD$v+o*?s%{g*e\b'f '౹j?5(18o\"o=ܳgϞO~^{-g9TV V Y*Ncsm@RI M Εyl. Y*Q2o޼p4HY֪#l&l@Ֆ"cW _ __}_+\_%Ku |N`:SՅBSôtX6mJJJ/^\ZQpΘ1cRKcSĥGqA1D݃z2Rzj Ν wtV#A%}{yԛ>,uw߽[>FOtG{ODf[^ԔtM(V[f]:k}͛wW_^%=HZI f;8 QRR""Gƍ#Ž)Vdd{܃677>|Z('pV#4(V ȉ /1Ъ Y5୷޺׿~Sk$ HdAC 7[J7 AC+V.\o>^.u+l{Pw Jx>^D0^Q()SN ~B/,GS/:tH,'j?oySO^dɒ%'O#4 ,gf=ӯX;n֬Yi>WX188D*+Sk <gxXEڷo҉TU7Ń*6ڑ#G\̱Ç_}U:]wE9\9+0VTIћ@o,ʍ.w[|zUzVGϛJEirԛEi3?nrmb(6lx7?FѢ"t+HCo@^JQVCUڴyH9=zR=ݸq#X,X <(Cĵc" XKU(%iΕJZFf;@@lX+[UJG(w}WDv^{ݻwp uuu(MV`ʓj~4,:v, #K񂇡Wzފ7k:uFjYQ&cg$^ *x,fL[V{iQF(DB+8|7(Olhh?-J \ʓjzd8rExl}9QF~ii}[ +멨ԊKJJ˴hXSuVխaV<[2 \xcRV1jq u!O*3<%]rCݖRVlܸΕsЌЛU[o;vG }8cbg|3ϔCCoVVHTЏnAC$f4ʱՎ͚8=jg<͙|GqIY\鲯?<(6¶u #Ykp0F@2))*MuyROj|-#O^b5VxI4iu3<싋u7j9[R<'>3l)ݭ˓ZyR'4k}]vnY9٣?& RXZJ%JhΰC%K6[۪sxlݗZM/ж&YK _~yIݼOkԨhQvK[g:x%ٷU;Xf* %V#h'M *\C3/}Y=Ky)y!xmNח+ZSnK-P@ӦgiiC(/Ӹ{<.Hƍ[ZKk}3ӷ#tbqڷi~k]Y şiVROg]s9nd]YD6.kM>z#%B)Snk]3i5񕯭bo=g^f ػwvvoRدJgk?Z%bYQ؝CNmjSS> ձ?;jzyWiնa]YihkSF O AUBPBУGG?S\#(yq*.yz/ߓf^\ʓO̚ڽW{`.l~mx茚ֻk7՟rKDJI8[ k;vtD&zJ~ Y`4YV:*}fa3/~A}łتtV//~Y$ѕ♆ %V#4(V *\Ń/z{#.|x,xn_#ۡ{v!=UO$|ZXd4p_7KLԤf7gtkM+ze3X}>+QB:\=}91۰x١㵳Y:bXWZd\[ko߾\ֲgN%9ie%H{ue%ۻG(߯]uI1{b?`idk38t8(Z:fΕXszv4dpA v],8$&-l5W^Y}TK8-gpA#ٲa{ڶMsc{++~nڴkjpOCFYK=HdKfe%C=ZiebOyf2H,v,|N;۰H}:^ c17 9 HqoIߋ7 4 @+v.Z!l ZyR .vPDW rа3icA}GZ/Ra4O}cóf=dg'|if*nV à!1  9s\PE/5/@;4 PYdҫXKUgzeYF? lZn E+i-keifZ\Y77)s\6G\c Y" :׵3Y}Ȝ8|դ*ZaV LCslat=MDY2:8d֛%uu@46B`8vXb4+>hh72c^(֡PyoRey+Ψc 8hَJ^~.1hlАhf`L0h0$X3^%XFiĊ\:޽{mv˓*䵩7jYg׷dQl}{WEY^sb Gmm,;WI$q++CWڨQDͤy38]*ؘHjr^ݟs5zk0:l_~jYTӨf`, 1oB{Ik i&Dъ |NJOF 1l('R#0#LeP w~֏̌V|z6N oD^Q/i8}e'wC$j#yOC>_k<[+K`ʈ^NGՌZ͌:Xg-!/Wh0 ͱ90?s9X4J$2bu)Cg\7+w?G!c < y04===<s!YI?1cQ5HfƆ|XZht{弲/4ob1׷ݧF 5̛ՈQi̼ך+K1cLg7f>r|2YnPp5~GH3^>IV3 8R԰QFMD9s!gb xL̋&a+3!yTu[r(BkU*2vkާ90QxLj-1W% 0tx9:"gh<c(2W3?@lc)0?s1DŽmt儗г3"IDOT͈s,i@NLD竳a!sNڃWTRR"BpO|'f;I.Y@f@Pf,kfan@TD3"r Q݋}&$edsS(YY&Ї(}(oi@~(mLbI|Ԥ:޹~v5JgVvy$&tno|(O~VyG HQg$ܳmK?QZV/j| ȶ y {X.gC_,2|pK0;*EnJmB  H|'T6 1CC<,pyr%4!}(@ >[p= e]&"WtA_,g͑fQ3ZYdȒ_uY6J{G6?s  ]7>N* ֭[fA+_ , Dv>T¦e6_SX])b>Q4/$&$7?_0d45H wf˓y'6>nSoޘ|'7xx蚇dWDўvOSf@ [,qq~{Ӭ_Ig|qJ'^4#~ z.**9㧟3y=qqFOMVӿK/;ޢǣ-k޲_{hye۫IN> .?W`v?vڣO!XK]߈¸w4L?IK;{ zIwȳo7|']?N/ZL+O<:+{'5o)o R*G8ؒcY8qZ?KϳeAC-'kW{r?/oW6=Wã%sCW94n5x/J Mwh9WU|nY6>zbPFrsv U=ub&iXoKn;pS^QmgY)?[]8W[n-1|cLBMMM]w]YY(>=ԩS)_B-?ݵqMlx?kƹxaq֭[/2*++nQ+Z/Evwٍڝ\ZbqĻÛҭM/_Mw &cNJS;W~-+{8 Ӭ='q8کc>~?Ɣ=۟޿iz>m@Q|HyH\TV.YU3gV|shgǬKrѴӿ$6 kSET0r$_N:Yp!@  O mwq~C *i >,,)YYi,YAC@HriΕ3g)xkVon*dOyhge>E/u'Ljɒ%Ji +ꌄjD\of|I_fAPLC(DjСk FgJhb [`v"Q,I3Y2*x;HַkjʼZb|sK$ E:Y^IbBR6Dfɺrru–s~sW]>_ L^~wQ!z˧-w^S"[̒(Yqyiʲ*T⺢=xkui6չ~v5%[ឥ7.5/._oaITif}J*+u;tݴ9LִϙfX|۹33mBL.*V]뜷x˖ޔ|odƬl{YAwf@,QeDWlgufn=]]=WY;qǻx6^yw82(%:ocIѫϚO5m9sMewof@)-j_mgQnʳ(JPqBZKUofI-N;jkY5c-k7M.-"FlXvueV;OHPƤE\+3lj$6Jgv$,?'*kgMLoٹT-޲eyy6&/XTNzӌEz3/|9l˵X0fV;s\!R&FIe}]zV']OYj3wQoԴZ6/asci(iC(ÅLp,cúnViX!9J(|3]i@*\7 hS3ON Xfiwe?aO =B? NDpCrn(+H 9Yi֭* Y"*h/=˷/x]k簂j;WtO%HMyֆΝ+<4휳ELs Ysf;W]J4 \qEJ \gYb$Gp܆3WnTdO2͌FzJ;ɟEGYՖ=5/#AbԌsU.-\LfKf̚j=O}v>VF܆ybdӴ-Wh?c%sW]~|=xh|oˍjK9TEiтђ&/xBCrprc`Ш< .jN,f;f,\'hmkq9롤J2:UiסL#yz]Mxo˃%L5Ea}rhmE!ڹrHZ/s]qhC4 \‡6rPb&:qgPN$ulxq^yds/MfSn2#^RsN,f[&/XT)driJ:1}bU =.#q^N-fzHwc H=3.f(5yrM*ƱMz.y]vKVJPA}@*&Y#%YIY3't뭷%AiY. B[o}c Xd z ?F2r` Z,;5[;W4p rf  4\sIENDB`DataLab-1.0.2/doc/images/annotations/view_menu_entry.png000066400000000000000000000043051511411446000232750ustar00rootroot00000000000000PNG  IHDR9sRGBgAMA a pHYsodZIDATx^L)))%^q6rm J[e3K\ZYlYk\Wdu5e+fEjXUzypp؂q{ww=J<|}yܝBȌK? !3PkKNJ !P[*qu >2QIN( !:#D'ϲ׀?eKj)#{G<;v4`A"$~>b\-d5vn)?e^;a&X#ig k"*sh1~lƃRf*,Y'Y=Z-RookiHC xDoi)≐7XG~7M9֊lӼmCccEx vE&D_H=ʀm"Mn `WjjRƞza?b,ooBK vҟH2s a,yÅy3E|)&oۏT8Fj D'Q_!P >BtvhGf3P5BHe'… AB"/dׯ- |v ̜i_mI_~fࣻ脂022۷oݻ߮@G @-?tͷb Z5_ww7RRRl2,\0wy >BT|%KӉ`e+p-uBQr^k4ރw_ASo0|[QxoO{>Ѻzu˖Ժe FՆpVbqx>E\Đ&?wkx'߮*ދG^n ;֋hzcO_>S@n 5;cƓ~~koFFپɖJWX1.&!'W6 T߷WqV<(dO" #{TH+ڜX[ecXojј * eZ`5>~R`?wO2ű4Tu,{'UեxκM[`%̛\@^-GӦ 軪<)QjchbO$Zp}9ErK`;cp±U~Wa/m;s.@ci3wunNXZgCr%Ȣ}Tp6`aV7Epq~gKbNƍ H].;v?5Z]l,\ek֚3!m]2s n ,~H\v=I' q,\) <)?FrF/gm~գ}TߢY^+#+j4_׽y O=+7 P_e~SFekn66;pwcES吏mj9 >:x,*r*Ĺ E z'+MX,HRԈt-2cykp"^O2:}]ssV3~8vwEg/>Mni89LU%&-@^ɫNQ_ۼWF"N[6=P#?V^, cyDZ@؁ ?,ʧܵ;W6'+]|ד2>W&֫M0-0wo/kjj\r)^&z !3. !$֭[`[ V!`[wn'!qPU܄˽2@U{>g e7 B8uigLV#} ̮5_''#[@7BYr>;x}S sܐb5}5D0_|́IENDB`DataLab-1.0.2/doc/images/contour_detection.png000066400000000000000000001532471511411446000212620ustar00rootroot00000000000000PNG  IHDR lsRGBgAMA a pHYsod y4vjV.jM6mylKըVPfF5}kS8f~_1r?8' Ppz}MUWuv^x7օs$Ē6oIJv.Q*ǡHn1KnX]7n?1+_Vat?>)Pudjĸz̯Vи%V4w EOI WH5qb?Q,Y OýxIoXmķR'wQܽ@ E<6¢+i,HiBܽɂ`,ElamK6qy3n[ []E%"r8#-B ˻ST7?D[ $ne4VBޅHH|%wK8?+t `6F`[Joۼz;&‘~p8N prah8w(A 6G]yԷ]R,5rYۈa"ڥ4.}縷!ja%;86?qq GR8 є cE"cH +Ԭ^>/7m kR5{בWA`jñF~p8Pp u~dUW\{~N2vHy_b wH2G(ƕ1"w^~0T-{ϼ%ow؏v 62nf8YnDVnqq GPwJlL{o>2MU9j%?)=EY. '&˭>38W>!PQ.CnW[[WwK!sG̴eJ]GIw 1e8d:!lTj:\t8$,X lq ~UA VfYNp.plF1OU\(sqR IH4}Qz zTwͯHgYm߁d?Y1TWT" p*M5|W"7LDx2'"ND/0&" Q s(nV/GK3+ _# |sw!79BєS㳣$"p@GFTG /=C;~}Yy_AG,D8(6GlQELei)k)>ƶckle8eL u9H"w4r eYd 12XFɃ:/Y7ϙa뫿卂oE}̤!S |TWY_'o5-geG" R&=>%:z)@(.>5K?㩇8E l6 tu8Ll'O gwe^>1 c=O_Pp& ,Y4:!Li89; z88rw-*`FWaMSBZ _9XQ5\t|lixw玍g ")[Fq:ӱb+m.ç[ym:l׶m}Le|,..z!FCM=Dth<"-TƄNOlH##?`\Dp8,42#MقF+65id'\CqsPH͗{k)ݠuoO)?%K]鵪EJ(hQ8R *HQQWx}!uon _۶C~G:"WbLN7 *N=#l/KU6[*$nJ7`@@O}W[+&[hWGTS(PpOQRt d?lUe$/wM_Ŷ fN4Ds3uc4`W W}>EZ pwT"X1ȭd& Iu\ G!Ց<:޻tP7[+=] Hd?1LzZ=OSals{mC8Ľ!KOm(܁"\S_BN1,さfv߂Pc% 87zPuyڻcUh0:{j:Mrav ڱp?© M^Ѱ4P~@Ӷc#L5_Ir2p:6Rt۶t<ۺ'l[y> ñ5ϱaZG:qh) zRsLkԥj$ ߥMo&^@Sqh z0;8MB4_j2ʰ_qU;S-B&IBK"%A@ԽV4m)MTZp(})yD2Oirukڿ-~QQj=oSw-/o< {TVٞin=HU؎^{%ZR3nR[JޓoD@DwUI8$dWHBKl&Sz*Q5-˘~ߓ8lWG#HakM`8끎z83L w`|o+^4W#jS Z5 Y?;=?AZ7LC3Nn@eUÑS ]B4^h8:y>md FLUJ,r4XG9\֕XM )II@ 7);@ś K.H(H|%4S9 Ţ䃩PjN1I=8C:`W N+Tٸd:}X\4_;7^o0?F6es%Ӻm.PfS08٘:ɦQ5<@ ?p.=&yu8fMk(828i}XdO<~.92 oMpd =z`R 84.bLGJ:Uۙ'qGn9kPIiOJNi 2S(%G+@RB2_-#=GZwZdu1 yZVt)qK5]föQH)f0XȔvHVޯV. 8`zJk!"A>o4&40Lc8:i&^KIn˓Q~`Mނw %ݨa0HFrՕWLuc"mہ#QFR}݌ 2:GǬlFMC[\[]ZqЛmeY)Kk[&Q䶨/2) t6 PGIe:fJ/˔bHiTMtȔQeMLE\<2&r"?d8p-)_Hڙ[ ɻTC<9[}1x0HW c(*@Ƿj$g~1YUh;Z|58eٔ/HC!NdTn0.$SY:v2P"LF+4l+sEee4IHgXR%ZPRt_ ;'3AFL)c`8_8 II"[\Z|?Ƨl,1H6?/L M8dtٔ/ȯH!фor|M FCk p7 L\CB-OYLytv}1ٔ/@C!=4&İ?CEpl2VdҀ\~U T[مjYlJj"e!Wʼt΂7WhzOCj> n]HM#NOLeYD qW)i^m#:X Bĕe&pzɗt<Ű%x2eO^!$/E8Nvh;*'@w0#|{<dH*3Iхk(8<{*red:o zQ_pT@& 9PM 嫋7ҟ1L D SG+b$%JvAwHT$TO߸ob Pv}$ƪ5- !LD%{N˖{#?.O\Yy#M2DEM3#xg^>)!4n2ϿCx9|<*8).Bى}8%'>u}mqm1yPUxGcj+_p f`?vL:@(r59iR$! #1ҕ/HCA߆p.P*?ҴiNUlT4PԴh&izq‰w: ĩx*y$G@)N c{/{VbE3ݞt x},|,p?0w2XԃN#l~Ĉ=׾tʘ~ʦ,F2:IWr&Xj$fFr`׏UC Ër=|>`pA^r0M0KE̷mҘ|MAߌxԩ1G-uk53OhńZ**RJE G OL5OZfkFR*^Vlѩ&Tk\Htw賈>ݦV}QqH蕎+PѲ.Or#}ɣŸ}it;lwوu82 t¢8Q_KGD`?#糵oi~Lu>d+yL8eL u\m.m>rY밝6dZ_ uZLYX2.ps va_5TFPzo%y8r`ӐY54Rb}`5)P89% {GkC=?K$z%K-@L"" kIH:PG[yJmaLj`v:NBy4qQ.|.~~V@ Cf٩:)ވTA]fH %XSZ#p8${BWzo =|>w >1p$AYvp)7yEƆB͊:u_E0Ryxpk(밠˳Lr"8頭%2ZR,Ia&|cjJ_txؔ"2 '.|.ITZ$éN=Ƞ-~˜8S7Io#)@c՚=;*~";?>ΞT* ,.k퓬R@&"?0X%8gpLYi~g,.'puiDÆUN審FUScdHZu /¥kLK`ǘQ4CF-S77=_p0p8rS ]Cf ȵ [k. ^Cb$v2622ļhLr_H4p*r*4hyx +fL:9 ql"P"KpݸX/oʠHm$b=pfn>v~ܹBOK7tˆ|Ia*+ ~ =j55\F %l\xFj$fP@7%+ 2b@#{ <X&u} ^טWVƍNASN) xn'+{>DHR(I|dBi?؉w'~;2]j5Ha>In HF#iAޗi 7Ub8yPm\ l[!N)5!ı9>/!؟Ma9spzt`0HcA+Pp=k(ͥr%צ[pӤ;0Pzm:QaE5Ӄ~:B2leۖn`?t`;Sm`;~BhBh Gzpg[1,L!̦Ԃɞ_Aa{2 G¸y8eɇD:.4D?!T wZhZ6\8˶_bwin DGt)Uk8Bu֔}i9mMrg;N"cm[JBۜJD4洁MfI=ӵm9ƥ!F /'ݨG"[,KI8Gw3~~9L411jL\C$0ѯarT=+o Ǩ%Q`R)[!tۦԃ!KԃK٤pvd[(yρa42u X3tftD(42R#oLHP} 9#Ķ)GvDid@ 8S?&`;6?/6GR pI0=w#3#}R)ک4mTD);99۶ۺqSJ2fg;Nff3ٰGi~\Fj='/zzp(Eח]9˦3>+YL9Q> !g2&)^Ë(\#GQp(E>%![ soaATn'up纇zX#pK=8r5}-r0&r?%z\Nq8ˤ<5NBJ 1$Ƙt=r8S ]yBmG"NJ”z`۶g'D &I\iz<mJC|`o8|"e*fQj4G;pG7L<;!'"|vx]Smz(/!i!1xtb/~T8J69e8mm.S )㿋cf{oU{[R7ED ׶-&%9S) +6!NBx>؟) Y} Mƶٖ*/zX#pK=8rqW'ܤK]C7a0p8FrOIyk(HCk,Pw"wxxCppL t 9zd;lN+pn`[9# ~&i!Lhd/^zu B(n!quAT۷="TqhJr–ж-aK7DSa½wi'cN) <~N$P 㴂)M!dJCd!D)6[ANIql]?M>#_٦!ߝN ӄm8 g١r|>K=+F.QCq^uAi$쟎sp9x E53)Op 裠iSwҩ1A-8 V.vt/&6t4axPp_Ӗz:0%+z}X|tJ=$|;NsĩdRKz`G@pHU؉ȫ3%Pm>񖈅S=tM) N=?:A0/L*~\&< =-ye/هC!d)5!lFFh4B!"g,R:`{ l6Nnql&SL)lu }z!F.QN®.~cn#}d!?q5S1{L\C$dO \9T~pDyWDn;GzAg_ x 0HWwzt8Myx7/NAz4D 1;00մ09R8N?XSjh!9{#i?"0Bc(k{b7v/G>$ a計ۜz`GOt}SXgB!*{3;)F[B٩CVmKCdtD4g " ^z攄)ϡ8i]zٌ' ֝ #mRzK=8rGgavٞ`*?hWՓ!@X]0p8Nr?Iy¨i(H88zj( #PSOvcׅx <0HW#qg fl6 "iu6ҁm|N=M~mӁ^&ܽ5KzR0v\9Ə5mK7ͯ6RT :" F=Cma&y40!xTD4 4ES1tB; ChO-n҉DTxCX8e:BI(#.Em[ 6) >+ G#ay.SCF@ ٦!t&Leag!:31>OH=ܞPlΖ}=WIA R"?<đDɚetK(I}bcxr9IZ "sCp?pN1ad[?Cz~k7 Soi-}5408qL:PtW\G.L|J汮3cxAL ƂV.  2Ű&j/ʶujlm5MI튝]UCa`}%QdyտZr7 6%ÒВTB(%o 땖-RJ3L$яPrK%ZJђJ(ɸ_Igg./z{6Olxw`$#6&IAKQhI$ \hI@CK%钠VLV!p!lSccq Y SY4O!`ZG^ LU ]QEaG|_GB#EV7<݂^q15 ҕ'IsœLg(BSS ]yB4Lt(?|p8$.!Lg; DS DAM$B2L+DUCCV)i{}ɨ} $0]tz=TY{_JmڻS=4CkJa:"L/Se3,sA ,SA4.с VO+: &vu5Ȗz0 82 D\#tCG>בm-401,mϦl15B)O=ImqSEj$vO!,P W~LT q05 ҕ'tMo>&H>פlh a+ɎspxPHm@JCyɕs<_ zD*v, 2F;-؆~ݤ.u:jbΉZ2T2TE(NiLgN=PԭtT_9Ԓ%ԵXTjlkJں=Utu4~@ݡkGDܙQMAF4lW2Ⱥ[z~-g~Ʀ:gjo{Ke8f=>Gڇ!ۈjw-lzkVOyx &5|݂/;ŗR4݌EfbU}؅آcG=s aRw#n luhl L#KxFl7QN4L!teG4_eX40N'9NPݷmڢP=K}#I) "AJ`7;}TW^ +xhb?7yh6mŹֿ wԿ$~>77|}tZCTlPZc%8U< Ҿ`IJA$ɔnhHZK&qiǤHDEGg(r SqUAjoC%7ND;6߹@8f5otej/[QWB5ɔj:1$tڗ.^ Ͽu.3/vb6c. oMq0}+[L`) UFjx6XaJhh.GꝄd)f?xipwz\_ޟɑ_xK L1*v*. \q ц:%(-@IbrD]!/֖ Yvt%K>P)g-;ㆩa?M`,]pcjc4ne9F'G>ۗ]M;3K0'0HdANMB<cOmlRO^@阝̯7:FIB:^ƥ~?c$jQԨ榑5 {+KN61Je鲅&x}/2EEmQ2?t U{YXܟR;{Tך/`Ws\+/Vsԅ{;ԛ|Jz,\(tG/J+Խu/ Q݋.yE>Z:tI7p&^HLEz\VKvĄIj~Jbюt ]ԗ SoxA0JO7ht8B-[x|GJ`(ۨL8= ȴto˰_v~a?+Nl4cL1g1Ȅ3ҕ%\%l*ިC#aJJ uذqk. oǶW' +*UVڷ/Wl9^})=~LCXd3ʛ<^3P7kY 7u@N284%H_J ="։87 L"[|}e#liD~9Vި.q%/oʠ'd~j36[Z>B|{e-fmFn4׶Ni&-5;Gö%ǝضr+ǜ۱i8/s'=| 6[kNTc^@W`{𭐅r%_")l~M_tpc[4Jj(cJTQcr6$^pJ~Lۍ ^)>lK@ӢmW *V O8t {C0ŃmɶNa{5wx?JOvX(1u5i -Ch4\Һ WHl\Am6e43Re4ٔMg6bcf]5ӣ|0R&tOd*'Q8rGJ8C NEab*v/C4BqʬH2Iycf4|6\S`\dt`0FI<%K^I~,s*oIi\{(Z[v#~% >Q+/Ʃ֘N5KIJNAQe{RpLc˳?rq)ʰp}!ĘOl>#]6$ݗqrec")F.dJ <F% ::㈩a<5cj(T<L)Hn,Z C^)Oڭ4hrSnq\15  \$G ១JD|l21 \LQtBqd z^ +QTRzk 4DG.cJ180F]Ej:A Jrg/܄گ oS +IL)=_Kg*]$=W@أG7 iH!h1m)uG:ƪ j)4O >6G6tIR筯3qxRtL2Q%S~#J?6m?L84Oeoy252&^m6|Wa=8IKKⱏʐ hpp_;E}ޭ])SWWc 4Gje{;HYr7+G:a`j+Op ]/YESu7zTBt;?nzмA]e M?VWOVU^s"&_)_fHiP̽h?ʉ>U5S#QI{ao1lĜ.ĺ+;[& O\q^zl| v80HW >qlG~&M .jSzt0Bnt{@-)}Ņ=Jz_~L4UK1G]C]^7?-{Y_X]'dG)Jçk7 x}fYk~|tՓKJmva_$z)2S +Q#{IwGqZݽh>ʿD/Q''jJT@Jͭr9MԊeVۼ-(.Eo[W/nU%OɖsqsDN_jg]6\ZUM]c05y@MtC.v"mݍI^qTSy(ȇ@n0n`q!lu&-76^#>_yLemuLmm}#-4?["xٔ'}s^ ?a_é(35x_ԯEwW ߰ Wtx\<̭95>u]'T+J<}M8[@4|K` V(Ƽ=F_XԤsT%3nES*kDxqcF>̘7;Pp S ]yB̆[{d؋3||v*u\Qx׿&|=e²Hp)_p+|@FӘ#jkPʰKM}h'R*N׮;KWIKsz8ip3G;8abj+OPYQ.(_g%kV*N=zBEdesg^C6qlDݒ1=K 5YEOh,T4YV?2B^q$#%dDCg+D-P?SzFi_H$P?NKfHWQ^ Yx:;dJ ǯWSܞgOlU HlT6_Dؖ'h@JzNOAM/?͏,fc }*g$pUq'+[?~X+LwK<ݧ"R}L[5v(pމ:sOEGt(:UoJ68"v?_˩npb[BJ\=TT$̟p,_y͑]VjE;J$}3쥊~ܰ_! 9&m{"єm@lƗvBh%(g}┉ckL>![?oVsLeoasB^|ҿ q-q (G5*n:?RzT/66=ߋe<%mǻnJ5/LdT07!P aq{j(%AlN,y%A<|!!"%yZb{1 "KT:7G.e(WWD K:pdOaaF  ިQU7o dü q%ڟ^ + [8l$IJ.ݺgRגlGTRXI>)= &>J;t Q^ܠKjaDELDyS#,`Ȳp82./7 &0V2Ԓ]fi9W1R}$I%/B Pu!O2P'uǪz;peMUxx6SWɑ'TC<SЯpOOxۄ7wuSqYW1}t"T+}WyJWKZGZ-j_TUWTO&)ZKݾo}G<ӛ'2: O/Bnޠ)-{Z5LaJ\ݸL&?RIwOJF;whtNT>GU\қ=53Tn|"]8YF_+W2ey#^$[Y?Lپs|~|&r|3)/Ed8[+_'0е1|\Ӛ۰MZuϠ; gc'Տl@]DT V5 nBrܿLSkٸiV\Mm_ʾ[-jy~`0nV}Sb$*/# W:ڊ;}3劤QËQ 1Ʌ̥i׸yx_l9]Ñ-A4~_k(8B%:cq+{zr3v9 " ?7 tm \zuUwpHHP5:fD-_Out [~RX5PvߛZ$~cC)ƼQ?A_蝺`J5+_ȣ|h ulel~<&Q.lݍ>7u}^T f P uy7L-ǜc=8b*xAꝘ6wo,TwZw;oytM%w>߂Sſ*Fӊe_؏MAjyy^I-/# :1՝6U^zG++r\?GՉ@iێ^{Pez6*ipn:g?VNYaj{g(=osr&qy^A$i'P_Kʤjq"N拸 0!pYr6? eZVםיIϼ/2-ggQu;QN{ >]g߼ [2C߳+k>vm7? kbQSz!Pw| )gYX6 no+*j˟;Q- U" T#>?GW=wlN{#G/}\ .FF׶6§Dj=yfL 6m O`=Q PS!]Bb;=Gp( / dOgjI+2wjS؂؍8䍟ߧ'v~Dkm 8~ /w}jQ6xخ #\]LUMS2J6mǢhSucg"bRGwg& d{ۑG[0=c1@CW^,_WSLQ1pa[FBr S"pN %4_J6߶&2l3Meg3j[6 +sFC+g ˄\\ɮ V:J8#ma<؁U܃[**Z6񺹎TYɊi"AW:o0uMYix=٬/[پ3˱i~~>kԃa刺%Vͅs !7թD10@2PwA#3b)_p GV^i9i9x},zE\ƴ>7ͷcq>V7͏#>I֧~۪\&iy^15x*9?<irh²'j(tbϕ{2iTѶ/} miX W46ObO^.c؄b4wk(8lیm5x?V14~*+;G`zn>'/d:ϖHI#a;si~5IWtUmqV=9NL$pC$0HWG i]"4_`%e/2lʒ BdQɻ6 y.z岽إ#*P7Mx%DN]կ )VgL6mMo"^lm-Ǖ2RO'#= p/z*.Rv*~5Wuos{VeZFGW$; )yHiqxY:_ؗ$_R" SZ(S*!":H9[|Q2&ٖ3)$βY\sgl>Le*~8ʴ,Pv\'cهՋa+_=4a3*qjq;0\6{m;^w{vW 5toqߗ-wV:qcА@)J=ѩMj|j{tbc[ >n](w5MMx_G9n/P'p h3٬|5fmF#.yg'ϚNY%-@ŸR?vp̑Ys^o{eD4lUw2o<+/PU^iVW54ޢJl$ʰjjxlT~'ډ;A9tVRzJlۻ{biV/gMQONf„K=8#)|$k(*ؿȀ1LPԃl=3tym(.UW)(شG~> ) 9?T\{,ԯPe-b0Oʕꉽh4UWr+Vsh=rVy/DexyZ_]:6‹*YW%FRMk+aje#rZZk؋}P4ן<{*=:,6 icpv>C6i]يgit鲶wg+gx構g#ӺeZNĕ%4î!Su4RnEM0c ֤kԔffopD؍{\l]l7î{Ę~nne3qI.ՖK8?ۂ1fEO_/=8eܹY#p1ǪAmߴ2x/RQ+:]=ҡ{eӌU 3e'm*}ϧ̝Z7p|S_nB cDjҤSQ/˪HJպkUc"N&Sӫ۪YxsО%*xM2idEJjTA1q7NDH-i(C4>g"elh(S[Bq$)]fM#tMX}Xuđi]"g&CeQCfe\poC0ih.N㊑7v8โpVَ`*Ukf೫uICؗks^,cD05 ҥSf Y QPȺ8a}"L- ^aD~5ktn󤯂Jz4.]MjT55x#'FMC!VV6IQ1`rsqXyċsrEa(B Lۤr#*Yrŕ^Ge&"6ܶPyld Ǖi=cr6LEM2-#m1-'282-]D!kQ鍄:lظ~5\]Fo瘟CDia&'/ϨSu8r\]p1E5To0.C$n\ /oʠHm$,X0*o Hd߫e&: ը2F7&+z. <.OꢓbbW lO SԴ@GK?dQ.Tg/E(I@NA0Y5faSmlv;/~C_A8 ܆ .%o\ Lzc 4_2`mc* jՇmタw0[U$TŔqhK]:Vގm7D.>Ua=1{<,6~m]'p \"PeAwW0\x9ymSǧ8ve5qg8񾲭5ٶucTWߺs Sײ\5\C!N]=tnDhxg=!EBܐ5*7, v(sKjͯבWRl1KX?/Z)l"\j)㲴uSKʓ qc7lu,Y٠;/ƕ hڹkitq Qŕi]".#@IeDqdN U|sv\4)_pTryGt~D"=c8p#&rPp )XPތBOM]`"Bo2t).QE򨡐*uU( `ђ~7&Q~  q@e_Ly"cuRs28%P"ӁJgiIbP \ujÓN.~.+N4(@q?roUEI٢QrfL"2xhuЏ|Y Z5tbpx_e{1K }rFL98C)1sJcLx^Qف#ǐkP#Q|5#FC 9>']?V3o &rk.8` +_ȑ&mi,~K !$(_R?ɔF^mn-HšQDG(MQD-S=| $25%@HI}VjoVvP&lv2cq|Iz>4_X@ɻ{T!>vc2eĩZ`KfZ&?G,YV8D;cAVn&ٖSҨ8elY6ͶltL| Sƺ|!cT ϮL'ul_)ԅskሇ|a4xH!qȃ&xK1xG`"'c8FMC[,&ql1q?gXi˰tjKWoQJ},%LfZ%PS@Z"QBSRl1X*WZ*j(/˦)wY.]]-P.z(j.~1]+:-;t@8_˲l8eLR?o[o^+s*˲ cM3/7qPrL*WTΐP#Fq4-w q9q*ΜoCͬ\A5t?{c"h G1ĉ_LR6ؔRɣ 2G@=š`)ݍҌOS+Z-7 H428i-~M%Bp8a|5Ǖl3!KR) K1\Lt 9MLHQG(S5]B.ICǦH&؈`*QVLJEZ>V"leǓ؟I. ?MLO1)'**KKS]qG Uo>,Ib`hr8iUW!o`,*˘*R*y[Ll,NCd{l~>'E` qZdSy|sSZ?5p S!]k(8;? h xYaLfڈt`0;4xqŕE(8eISȴXr67XBkV&bٌͩy\kԔ=1.LWR.r"t8jH&TN}XL3Hє^ *tmV9M8sZivLw["S@!r`Uj>D&>EE`uV`I2TO:U@}FCoNLwJ|~ie)3f8n2IRXMiqV$ᑪ"S]7DomLJ9I&n9jsğci9QVrN^G8 G8z`kv|`Y)E`iK /¥kS4 o\%_o >[J/HEQvp8AHW0o"[q,!hh t8c#ّs& ?*]䛣q=Vp S!]Bbр[Uq1t_>ꁤB4lsF\glvLOŴkloY]]6\f?/3u-eQhK|hZK6D~FUS##w2̜|s1S]op8)Ր|aI6l\AŚk $''9 3*;ҋ|sQQةnҥ.TC򅌩鏰 W.čK%$ݠGHl!{m[! F˰?Sر-lJ=vR0G mN7FidiN=G[}Fr+TTab2?W-~Esٔz3Gmm6*=,WSJ`CG_ۊJT(U#ɏ=C$@#P=@Anj;tC>#nk=p]ʔZʹ\\Lk6?_qq,x^>t~#.zgc vrQ:͠i$ cHpc J$196Hr+p S!]\0 5xcJ*q03ZA4UEF=r5nLA<ϷL# 8LM"4LiN7QߖE¸az`R#Q 'dne-yfq5&Py|2?Wp`^h[N8M2LRQ \I=11#EV(mtCXQZSýW`fh :`M1XÔn=HSz66[q؎SlLg8iL6 ,;R qlއ&͎s|荱؎_Z\ug H=8/(FB[;8!'H&ʍY1Lt 5&*,.r(l ptqJ~`pr06|miSA~`' aJ=p~:bu #?PmrgK=dn0=Xe-nS-U`;2 ql#zi~Ͷ-`;6o-'cTW/9[كѴ\8lMu^Q'{{[)Lt lAUW+o_p&aGrH.TC[A/Wg{›5jJLޭxs+4֡QNMI=S֭?ٶ4)"('isJȔbN!0)قSvC2PvOXk{m7RQ@mw>w`Ytt\X':KGʢ 2AYOM!D&p8ڭn=D8i;ۙ2L!m&F*L۱ٶtfr:31ew<{0.SQW.č[Vn=/j,XI+d7 # H= D=N{-PfkO ^MBv^PP== o^QW##gx$q.^TBV;6-rlwuC"ptq2>2m)'`(m"ڶE l6 ۢOڶQ(bӻ1]p, ^學xӁgtҢZo"#N7^#pң&iq#osA-JՓxF'{0 3?n1#O8ޘzXx[[8g'`JCp+sCi[Jђ(Di00$Kۆ9NbJ5~p*tE)'9^mJ=NB/(~9ëDQEuŖ UהonMH_[!F 6=̞b[ΊЮ-`,g Ch N/N)` l)%Ny&gz!gb;&ԃ>qR'mmqTV`WϘ{AppFv%foۧ ygOg(<+7B=0)_5 iupT݉H5. ^Rl=4aa[05t?Ǹ#`pP9 |!Rpnb\~[8) h-x0jMCdJO-8 1~Lhs:oK=["o/I g <-Wh3(Z~kf|iY{}| ㌀Hz-oƟz>~$ۜb2malS >Tfnt&Ӆb:Eۺju8iٶ zcȩ}mmfsjAۙ q`=ptb,|mZpq8?&.†W`{pA3"-x.dNJ SbJ5+_p I>L7Ĵv (Nmω)}eṒ3)qiq8/4/H!NfsLq?49aKCy^7 ]0٦t`a0F=~9 G2F7Rt`zzFކEx8eikO<1IC&^q:ރ4 i&ޒA?z>N%DGEvL7^q$db0h=C᱅ml>N6?[cZw4BqC8@gK=F7lc)gqlyhy r54tFT12:J9/Ri-fgb!!86}O:ZLQXi8##L, aƇvYthfo4=p,^vLGD[0" aMCG@?pG@Pn0כK}REdX)^%I-h;Nm[loK7ph;N!N َB2'nl^ͯ?4Ypg]X8 vSzslQ'7ܹ=CfnSM7Ϸ3՝zbNnԃÑ/U -_QR9)Ր|5⯉SX4Q|aqokF߅LS>WWrS 0w8r$qDoԭ=nʼnMr˘b6#- AlN=`M$e9`ZN؉\VƅqlG:pG=4]XRc°d•Jlă]/)x _g\Ҷmԃ.um>3pyL6gScxlg.C%lѐ1ak(=?y DcC{LYx% 0=dI >D אϗN1Qͩ@ځ-j~UB `:C_贜t䚩! `]/_(mm~ޝavl~lOSmm2WcÝtL/- m]NmlgP< 74c&7\َΉ80$|!Q5~ ^wK=8i442z7.fdƶޅ ~Hp̒FSD6u4R7l5mk&[LnprN~'I;1T|͟LyhVbuaZp8GݕIyk(8Ñ-AH=UM qb\ds9e°Z&gۖz`6m[Fe۔Ȕ2le3m2&` c°k= X_TD~~aYzgv/=?L|+aT: SƔZ66$wm4͠柞61b -m~WIRῂ- ږ0'`yt GL;BH鶚}yRtim1}]wIYTsz(f=pF৲ћ"v/ ;v]4EL!|ÛT7D'j Y~>Sm1  2"*!qފj4dAGdiCj;:1A&$[͓=hKD{0%*FOULЭ ΌgĊ"Aa;S39*p8+e2տň(|(0]p Pat4_M1}]wI > ߌPX Ǖj$ mL (+Sb[3aٮxp>am*'Qrl>_M_Q`?AWлvLUC`#va5؟bnkl.o|پq*N~Wd * ky$¸ aua<6( 1h입Yw! RC!('~:@ pZNVc {1O$"Umk GD d ˴ϝ8L'`k4pSC.PzG\gFp\z`-nL~cZpWX{5Y˱k>_G=M˅ҵ $oۓU橠d! Lb6`M SKx-%Q =G |7QS/q;n̮e%Ծr]l띅k}nQP98)O\ܘ132jVa*i-. Fj`QYf3oX[[X(C ^fs'>["Nds;SW}se8ꨝ' ϶Ol~ćvy_0n-~NdJR >m=M?A:lَ/ZJq.$[]N%hv\<˒g`le􂦄fQ?;!}Êo{B?{A~ "|ܣ!y6%.Ne85@^me}]}-HPW`! Qyhjÿ7 7z7㫱ȳ75xfgk%Xt-ia*]%Xh#6Ά{@SUu4 p8AW_7su |j?{\7Y G^O}?tīQ nٙ4 f{sbdw5<5~~626EUX>|ӣ3`2Mqqmhiw}7`WD?|$!$@I؛tH$bzY[{ Y,yD S ǂm6els ٤!g S9ngŲ>ҍq6Kn3~U[jLwlsL8v}~6Ll?>޶:-N3h;V ;rVL qa ^-S 3Kރb?ب`?I2U?<<1t?9l[GiރT)8`4Dи:F >p)Yڛ]{ۯՖ+F4܋PFUS#" @p!4xj\c/cQ2)@6Ch(aE^tWT5/5\5`^>wp-t'9r/|cN`jxb)?=!`JPuớv@6=)#L=EM٤L1R8g ]mq\mS\_`hJ ) lھN]muٶz[Ub8mK 8i[{w'OIۦ*-mK7pSԱ=C}VvEK(醊Bs:a?H`W`;HCTOH=1QԃZFFƆ‰5Gh;ƹRw xuq*\C!5|myP!-Pԏʺ: ,GUC1 1&v3>R~3`=nq5l8WBYvvs@&UBk()iTq^񿇯F?OP»#|ot`UrT|Ɠ77>xs6Yf^3۶+ qcj(.i4qƱyL߁8?/~6U_[5e ԁ=b7 &t/ my-/ O49t95ƩK%hn7pQ t"<ri~7Ѡt TJ 1^3!4gxb?؉햞R K4? 7h(ܙ i;cyMWnI5"o4Lpͺ/޿ FZ'p'%帻0OxQ0e-bfxÁ"Lr$l3b۶*1Ź9~8)vkm8ئ͍umdͶU+-`ɎS6g`iتp}t?0E8͠mJ72 ϏtÄcD Ԃߏϫsʂ%h[ꡛR=, 8{- ) gt4Dg3C5*3=E-`tТ#e;CT4D1R?8K*p8RI//:ie恶1ՇO뫥I8E\Cp8F?j=;8$1;фSő0g7^6cj+OHÛՔ=cfcsgl[[9jx)emzm_ y[ m~ɶؙvm× 58idcg>ve"Or=vd) (reK90ɜJtN/}vm {|$ vn0!chtzŶES!Wog]ejuE2Ӑ%JĹ4aS 'IO}ҩeи,Fnԃp8dd'HpZ-5 AFC,U! LFMCAZ],&ntC $XQh70HW#6X-^ly}uʰ1Xm|6-ub\Ɣ+x_u͟i9l[ZFl!~68em6S}Նo =ң괞'1)}PjN7TE[FkV|v `4%l##;BqyGpmN=F={>l1,u<0.C}pXi?N} Zvh}~~<41F.p8'=7$=r 4arF$'m} 2sULyBG-Q:2Gg[F7MBɶٚ=-m͎isǛjمڶ2MD`;8v(qS}bǦ'pmf(Bx#3Ep81ȁ#{/ǃMHQ(D lSDa 4k {&; 2CB8G-dQ`{1c+mJRt}B#9`;Xh{lEAkd= %8_#qCc_Ĉ(<" q#G NUz7'n/N=`;.H+p8/ӕ$]7$L'L tHDA+IÛԔ-kkĉk;NY?g{1tA mCSLV6rۼ vͶm; j _!VV&}q}gm{[5u`4u\HN1pꁆS8jOcP*a9$VLw 7Vϝ{_JH`Sb;,a"z6sSJV7N؎}zAJG>|, +Y[5-t3.(R#mk!(+)i8m_|Ӻv6G^1t/빗 ]q Ɣze3z`nN om}ySQ,ԃ:()) Zlo䴁yӤKjo-R4^#wzp8u=?XD UbWhE.֗xqLt p81xeFȝͨhtuozRr.0(sh53BG0)Oc+ldl֣˘|om)m);^O`{%b[φ8Lel۶d0!g[ٖn`НHٖn0|\y c[' 7F :mWXLL+V؏eO=D9_#ť@&`*>ꊸG]K٘|+~ rl%i\ݙ#?yy!lBCAC!v;W C: psJQC 45  \${wlXmx o۶u3x metlgmmpuSCv6qLA۶fۚn S.)I%hPOD.M>I{ϯ DF2&mGBuH$mb` t F^XF!J]3cvG5"l>vm[qL melgmmpuSC~QyCLǦN2* nz]]ᕽH6eu0!mEjinwOf䟦|)F3o끶` P㠟ʴ+XhLn V2s{FXɴi(̋P(8G^3W{  #(5AEJ*mQɾJ>>MyB4 x<-FZ 7-g?Fv &oc/],Kn'<,Z&?$%3Z6?K~Zr4əVKθZ2߇ 7m6:W}Lc%{Ւ3Ir'kTXқRqL*Uu[cT97*o@WJEky? Fe_R? ]N$^=+N><UH>-yͷ|B5Uוׁ,Զޙ8=;V(xjy} :LwU0uح$8]I ƛF(=KkvS0HW a`!Ė9$rGݠ$}>(pqߔCHG S-]yB4Ltle8pyrlia4_dNjY\4?]֩,Y:Gx$˰LeYG˰l1gm73\b#cX*fSRadYֺ (鞫ʧC˖H?ԡLO)Py %Ce[I\!+$A)Nysyr,~R*CZ%$S Bast%:R(Rd{atQvᇵ?MJ諾ת<8>Є&syGtؗJHە~FsLT !`j+@F>h"p8iF7U#!7Z5-?ȫ d$5Ja4D!%ڙCay!!bj+@Gj"9P&C5>tj ɴlqasgq:AS&bsLإcLYV`qglYLQDŽ7C Պe"4n`TC8_TԗRPD Laf֙؂]_e#̹{r=jL]zQA}MjoڅeJjUwpZԕoQ[c:RJl²u lQmR@UM&jVb/պW6ujLJv.S~LaqeE;iM'+x@n;8%`a=+Op8yFw|:mUO ԈC]{cOp%lnw.{4޼VU~T\~\j= Qu}OK^^yW8XYǁ*}7s=1=9nPn\ p~WM ˄) ∂M8Ir(wՉ&h|Pva~#/>c:߄S1W~_?MOkO+esuZ~2C{A^W{1wjtԪF* i^5LIx?*Z\oϤ` PjѡqQ((zp8ih־9TilT >+##d(Ihds MC0HW0j +4W{:gӂ(S-%`^@\t߈h^/9eg65:ֵgMq nTo fr05 5d`MX55^Rl1j +4~LqL!Siu36f/;2fVZ/%^GL).GGI6o2=+k@jes)!3Vڠ@,)=<+ GFB)/%h݃ZwnZ p_5UIWW~Jex2¢7 ߏMs }Znު".y'єIYւޥAقt0ԇR/UwbyZG_K$H鐒/JsRII x9|N>}LE Ph2bsAӡMb#VKp{Y |KVaҟ?[8Y#pV6_&3KWo,\VT>P)6ft.Y7۶l:&lT󖣱3# X oD]9Wu_҈=4lg;8).#|W %IpқU;D!EZ_Y L CfYA:?MU՘LL(]\*ۤ1 $g-<@Z@mI.SS:u Z˰”.ԊVxL韕nP':.SezHjjc*Q:V; R/R7JSKlqYO"_F:8c`,*Б*w ]<3 MfpcJ4-5pbp,фc"rZ P-u@ɋղTCw#DOxφFI#46&SSF 5#`<ڱwz0bݳMQ'zHJe'{0l+V wrSst89q)[M>!fLf>d[lȽL6omtL7q:0=5+D:3Jg̰B4A>uo+3'lq`Jq[U*SnG"wl[wO^葩c#w`sMwSʼ B+ަQ':q^,5(vǵϫk1/xlB9>S5/lTuė/=?yؙŻ߬xOpFڗEPN` ~>JaXu`g_ƋB6|WoQxUh ;3~4љq;3JS[qBHbec찝㤣Tݍw'eߺ \W VKatЉvύSnnP_ W5 k$/b$W9UW+u}Z#X^U**577q &OB鋿܋f*m}A} #cVu1?>s1|S;*l<|P]n & ۱$GA7l  o5`}һυfxjTCxoIiUU]\}SkR?lA\ TexRKtU~WP{|pS9@0Te\ZEA縿tSTߖ/b{O9.퍲r,dH'~^W9=}Tm!枫oށVh9wu[J}~A9֣9OGN' cc^ij+Oȑ=,Ie3˲4yuLNd*˲e?'leX,wK6O/G+?T+4![yʊ /6sT#4!z$DГTwf$w.mƻ:;ݵNWc Trܣ.XuaU?Qub{VeDoS?fRROez n>J͝8k|NQ (2):jĔU]CG 655JP U>:xHMu2"D)}Fq1Une}%_HW$W|o*5--|A2O[9 أBUHKͬ.ö-brǕ},U" 0xDAQS(qx^aKp{Z%-Ogfb Y""6 W;k'`YXlQn**<_Pfcj@H5M;byJ܏%.:p|xV}Z5>D;qGS1fEBjDT?ӆ]tb6`M݊KGA38CpzEJհBdPG6z82;%T<_ -bv%敔xG5xƎ 6m 4FC/W*5wrp{Kӽgik\$cCfErפP^$V6a~#b+=8:v%ʖLf/Ji>aiqASx9e Lői]2E˴3DE\m>mcSQWJI&B DгL\s=G=˪FeXT7Lߨ]<} j0;6cQ|aD1xKy$Ej-F./*A`';PO1f0b]^YmzUB-6e:PZRtbMXOGhA&ӫ j..?o/ޏe˱x~p+SGPؗQ=_8> }" /¥kazރǖ`,^n >=.9p8F=(Ai4L[v%tS;Z{?)Ix)&?yO=? xߋ;pOXJlZ2&&$mE;Zw;[Ԅ;E݉ \3Q܏׫2KvbSl6wx4i˞m?(ms#.[ ;v0'e_cWo{?/!smqΙox|EPB(y‘g',N`5&݇-^">G!o{)ԄLa ܱm~vR(mk ,QغcvOóʼ7AjJk;a[v/4V6Ez6_c{R;9\/J }xķu]|zg-+{Q146>ك`޵.W# >&L1,ڦ*,!#eK[aZ7gozhZdre2)euh~2[ۢeZ>]uleg6`HVϲI&T,$P;7}T>OެeV&rĜ)S}xWgIiU~T5=[mV7N.IZM*4 RCe'n>:E5"o*]A j- pXV q"R(e*<<ې ƾB]ZGG;7+C]%~(2e²7 %xwujs$.u ޫ*#Dj :QNCh uѮx7&5OeyDjXDyS ]AƆ7A97oƚ%uqZT{~?W& ; fA V66g_"^PeZpeqq4?]|&ٖ3}ȴ^e*+2ͷ-g󛎇Mp/;R@t蜨cvMG/=~ɓO)crpDM,,2)QQDeX2Qy+P4Uj-L &}e+C,|qcY@eA0&1Ut@}k9ґ/;Rϕv8Aƣ(Ґ24>S[3Їeb.|x.GMP{щUi mqsM"Dҫ%ljzϟ7o3w>ۉڄWxe;T)ЄeMv* :10Ԝ7m26d@rS.qW{0wk0wnN J$H0sy㋪PeqSa;T#ᥪӫ7+zVg4Gm|emZީkg݇CydH:G{0,(-yD0P5Cy\`jNjElv9[yS\ˎ|IF69$zʴ>LˋLeӕ&.oZ΂j &^mo:C~zJ#kALƔVeKY~=:-a 1WgC&ay7>l7>ePVIGMj{).Qr敗@}TMKDEBo~r4/ 볧b/6⏏W@}O+ dtA0]Mo+yiͪķ_o_R ׯjwoT/n OxcCN>ۃ][-smP o~1BB.=V TeʔLŪxpT_SBԋv`KN\Ԅvٞsg+xU9j;nQC y<Ǔj0W_1?=8 l%[0A\Z>\m\Dp8f O<`9Ӎ|aޮ;-̫u=L/{R wr5jR٠Oуg(-էwU\>6v!1<q6%u)YЮ*WjVr[7+mRU[*"wQE.M+G-Vt&%Y Iݸbbg~!6`93s;`|/#_Ǒ7B<ײpؤP_sٕ9)kLUCʯVQ+NwiQf`Vr^8Vr§lPfR(icR(/I/Ii6lHZ P(lLV7n ᪴U+HN[!OuBhDPY*18KJgTO߼X멶,SΔ(2Utb1SZ%\ OH"}$})OYؗrF8z`S46h1!`p#KIdHWJWs "FO {u>O<((X vLR4|7Kcb Ct9"H_#MףPi,cA+0,>r'2+%a>^َ:'WF.v)&qݖ/˕^*liY2-ہm75,6A'@QJ B$%.ʼᜇw/\ƞtC'>!ɮ%p^S?_NՓſߝ5~Dя$1*Q֯zp;c:.0929"eO InKa~@k!*J>KȤuC'\ym((88’м'p <84/ chch*I`Fڕ_9gJh?Z0>{Tm%ms[O76[$ほ"ODL~1Vl^qX@EQ ̷>gރս{.|8~TpZEOhSˁ'sx(d&ODLS ۏe X45#A/M WA^6Lű!Rz}o;Vl: Ð! ɔ--˅ l$%yNإ-l86[X]&Q6y4R2M}²7rO &%۶n.ej+) YB, u< fx/ mwư9XDPGjtl}%^,3zJ5kf mcm)Aȟ Y2tX be kkQ~a)Gud0izjY85ڼm-h Q Xx7zl/a%h'H疸Ap7ĎB6LKK5Hإh((\ 8\.U~ h; P =_NUG& 8%Y?V!jJ]^C/aIW$LȞ.'_BsY"c2Hoإh0mKQe=v`E)?E̋&GLnbRuZa!Nz10w鮢 `^0du"5?>~0tX$*13mgH.ÂrgLoov͖]ʖFڤP2Kcnv)=d{_#li~{p-VDan]O6]*4, g6'i=rO&M])/HRAYJ~ E`y1> ~WPy J ȱ[8ѭY]+uhN=87Ԣ](9rvEx4 :~Os z kl57[UM뾊(79s Rey:TW^G[Egg 7okG>Թs08ȡtuifIeф5طb#ZyfZvۘ (t$?S;620b30{fiƺޏc>O'37dfVN,B2(ϊ[\ͻF$l~$S+gG#{QPG!nM-2f~ {^G2Q]6lQ-].r1UyrlG]%zu-SD^5Qʙ&Nl;UfK;Uɣ߼cdy_NrE5@W{6d'a6}9oM~/3QH3ta0|MKђџiX/Zԡu{jwz$뱻u ʃ!#(h߃שV]5U޼ռf6$ZcAKD^NrEt:4ALnQQ'Ok=^QQ\RXTSQT\bUqpw:t 'oo_ &QU45Ok֬jeo#QVV]paݻ'Wjyk R?Ę2폁~f6ODDDD =fc!eLO Fl("00 FDFaaao1+]Q#iF<RX5qcZdN/Jw"DDDDD0F+WH2Tr!ˤ?`sq4/:v49鳐_=㆑x< cI6ِދ Uʜy~lUT;3H """""O$! sѩ}~}(=AضmlӎS5|jܙ1sdZ 3M=-e&0O22yWNGs9""""5O>'"g;wf?tCNɧcJFb5$zIS7yHi9\@DDDD~:[{âR cٚݸ/߾ªЧG'dF[fs={22a$$H ?c6LotJvUz3jM5Sk.dO +]J{o̗WƇ>Řy|7>n %~[C7cUr" 3 S<_RiPDDDDL!  08kpùgB0wwZkƺX4.ߏYxY6u3*{c4"o}my)O)EStH.dH 2eJڭް~) JI]-ݥ5=;o\F"""""o"CWn_w.I7]6=C~;",7 """"SE"ľ0vx 콸HbdĄ1:""""SCi;L0o`0 """""aADDDDD~   """""&DDDDD7L0o`0 """""aADDDDD~e)b c6LRs?RX>6%)<6'Cc:ݚ>6㖁cc5fQ5c}ϣ8||5~S9"""z01+X9=+!~oSm谓/ >cFJ2l=UwK̘ڄM帙 xl~]1X$ZnMր䀘OUӭ9% b$%iHis1gמo4P} Uos[囌EXK?n"&'"<./O;`ɵNJʘ22cNGVنڶdVUC&jV-qtT7OP}6w%]mO=&2f1uk,|=j^=׬>f^sYkl3g\,TZsM~ϋ_vҲ$ &c""&‡j\x%j|/d5lh1} w盇Fcn<;2M uloMV U#} ̓cQhq{V!5qQ>lTcՑ0w~m1M52d6OwV%`Fb빼VgbndLl~KC. &qtz-^>7ƶozp^^={0ÚA{?Ϳt45WeL&NNF,E2jN$5X`ud,Z$DH_9c""":_K4# e sk';}?\og~k̡Ɇj3_Yn< 8n:f%S2&- Lmkg5IFM1hz3ZD{:LZz}nMCܾ ={gX/'y|_yk3q'KV`H32ǜ{?5XSTL~j[_TlX1'"V2bN5-a NB㷮4IINU/r\i<S%[xeܼwXb֛!:kc-ˏ32L 1<<ѹ{ߵ3j+Xf۪ 9Q9Tȥz0c9;m/zp#\ƝKTL04Z_#g 0\񭔌ͮxou4~ 򩛑Tكjsgx!'5#58Om4W.Fv\/qtz-z}޾HKk L4_|ܽsB97N3x~]޿7#äir7CVU ԹEDDF)S*ϟo͒-AJL$7 S''ԏY57xcC^AԲ-yfF5JS?f "U s~עSNS?fH_pكݚ%"""""Cn>S\tEk`oߚ FvvUBDDDD{   ""-Ti@5ETci>盏DN 7DDDGaʬƳ>+ ytg8Eo9"}CDDDtj8qbC@O5{챦&o14C"rKgyrDϫE`nk}q2ADDD[áCi߾=~k36=z| n{͚s)q̳|k0)g+**駭XWXfYN`5ynZyfl߾,۷/ѥK}llq l^"#"0lp"ڴne4?kTxǚ/>>l eؗ2#BZk@cʻ=^AMգ>` wlt@y!.D`1Ji1(k=Ěk<rssq"((*Myy9gJ뮤[l]wTTv#h5.߇G Wp;IHaW֜Nt-wҚ 5U PPZ>GV[sU /=i4֤1k,l }-+]rLY~}̳ǎWc } HىTFUW]e&50g;ʣ{,<;Yhհ(~ a EyTtZo7ʢϗbH<{nԮ)gW<\* D/>/Î ,\+/ng%X3|k$ZEGqcpɹgƲ/^^6HRwl ѵs'.?M6IxiiY&ǣHJJ2tlݺrۑ$CtI:Lrj%֜?0)7V̜9hׄn*i *q =vGOL$c"ۚ[g1 !(eap5ԼylJ]#hSX^{Gй:BO>G@` b5S?斻p"6#qEǬ9Ϙ`PS6F`.|:ԚsVA*qӯVwWgtk֏'r0eVwޘ:bb3þ[_ }oN#(4( ,E`y^*7RG@w\9s;?9 ipۈ>i]㛳p(V^ .,B $t,Ù}o{nS`<;lZg͹k/|o_F@Pz3 ~?݁R߿;F ֜guM0򳏢u]`P0ZubN{ F uQ=*b̀\Dl5"פxijBlU79֘r}1t܅cټnh=`׶ŝ?5Cg-[}ƵhwՓ5L.bHߠyw#+;O?t构{B؏TK.Km;]/2VFF`Nn%}/0s$C": .W~2#AcވG\]{&U Wݏ`d@e\ {Č " 5*];u.9ɣj$"$$97\}:w.WCYk>s[ ɅD}I,:111V)m e$%:kbugeYkM1{|Wg[˳FT b[(?d8;#oe[KeCqdhX[̣ٕop}3#thU~P<^6F٫i0?^qSD֢Kqs+f@~ѦWKppۏWXڷxg꽗s*&?5 rF t? 0qkpڟ! zvˆ퀳6?}h?6ǒG~ F\c|_@+W& ,",`:yvq'E\os-Ny%Cw6م֜|}[ Fy`0֔KIHՙªVA`k]GuRѱ/>4ނ=;BKv7DjAc#ca< K>%raTw=|8x8\3_}ܖ/nҤIׯy6^%KƆ  E2Y' ''\Gֽ+|+..FIi)­)*r_몮~ z#R(4@v}@Q_~g7͕U5+v^,~a{}kURΉsr†k+py1q0$u7uE%$Ioo@grv*hg~Vk8g<vƞ{C]%͔$?[Փ0c tMf;dΜ9xOO7b'o0Q :  ȰכݻnA32f8b/g_"<]'"ayK.]Xt\<$ k|wA~VYH~@ E1%̡_yEϚ{VymkWol[oQp_ q'ߋ¯o2+ g;vh3YGbÏ[gK!|~^|hDG wwwD{Fƻ\! $Cd^n_c޽fb Ɇ  .\O։\%8kݣD^mi3wn@}!]u&Cv8?>V\u1F `obt/u@T`'.;n&AY;"$>;"-+1a(ؠ3qh.#(HQIW kߋа疢,%E#Pmx[ǴUgڊ4e(y̷3k!e FvYq#N-=fg~J{s(Fl+C>}P/Qz9 o_vy" e>}o{}hqlp$۵ǡ=< Ъ}3>}׍YPZ{@TH; hw5 UY{/^aՎc;v$"ѹo9tʝ'j>+?k|Zsv E̎kk{> *EPT6.u.u% -{+[=G9I?755[=gX8r+?d_,l^y[VC萟_A-A8kJFn4 ߜ݇ 482eRi[}kݢ9x}f\C +:7o/5hFmwZ '=wg߆%8mr Gb},7ƈ'̈nU!GOogyzʵWv$&ę__0Eg5{0d]نlH|{^SЧ_fйsgl۶mHOO7ɝdٍ7hC֕mȶ|!V/{0 5_ ɿsIeP]Ub,eߤ.'Nh0WEY(vUQi|y"%ۗ`Q?.~۞,$" u: A=F#x )@Twl@#nko_E+W=pzj&hf{(Rԭ#a,-GoŮl<=PY "ޘUGNuCس"hJrfY#GRn|U8Daq1ӲnOk>:A|._vnr /jXzSNtocvuS?80r$􉵏a&xa?r;v߾5q?ׁd/GX 8sj!.C8bGET %  mcԶ{1PxڟP0ykN(:S. EnvџL2Xd-_}_`5X2KA= JN l~i8.]^ۋ߇K;?K;^_|UۥYe/qZ2zg?Zف?F6;_Ѫm[$ƺxq]᧞wkכ==^cqg<Ǹ#ÆT<_1{ue-_Ȑ(o`ѢEfoh\y啸kaÆ7B2sxue^ o{ ]ڡm۶fY?Ie>Zދ[SnՓǯf01f3dZʮ;}vz%^Z}8e$8.G +3 ʮѧkک:YLxB*Cn,Ɋ{uK2]/}O2;"sb`j䐗ωSK1PRP`XRvn}7~?~ԈCIo!"WN;d?͚U\Hq;"{1/B`#__NwGYuwZ\f~'Wplm WA\b[;q_t^=99p,"exexnL ޠuzVRi" Ed%Z Jc?FPQDBYFk>EֱAm!!VV]n5~B1s!;Q*rmU]}}{Ú0T/z2$,5h@E#((Ke7`Q8|L,Zy6"l:g"}H$ duhG ByTS`Ȱm Sd㵷V1ݡ\F@)we6[\G֕mȶ|!=5w6AH&;ѣ3}5N:q㐙/p/BPgQ/U]$?|œű(rw/ !e2r8~,^4u !˜hp 4<٭eaڶ굊ض1{Z_sF?3ƍ0ne5fHDFVgO!f~U#bHw``g%)X^=Ghׯ5(({nO > +EoGxpUۨi|J/ 9KP~ƿV1uPRR;bشo'rFGK%CҶn=J:F`Nb~/n۷t \ ~yw8]b _bzW! eAYl姌ό' i4c}M;#EK>A[_Ǻ 캽kdPBz*h̷FTPpG>|! r-J.@ww 6,{FD Cp!ֿQm9?~_ݏAI] o~C0glsZLǻUhs:D}>zOywpOYe683Q ~+r }K?dqmxYtoNY9 /׀9v?_ n?#FxX(V}1ݾckyP~ZwC6>_ q_Ї;7T zc{r$g4#M$G@M[]AAȾqԅ\Sr!<#0 ~] m7Ա=t\-[9ۢ5tyIC0>8"ĄF |!(: D@i a?k7c[sj?*'26n~›p溳g[5cJ#ڣh=Vg#𽁘{CDNJ8b~{1O;ө0rtkU>usO.Fa/`ΚsG5,~Ni332ې_{E 2u mjظcURE}9]1g/ Av_|_MmqY9o-}L|*\MݦV(wAr"g=CagY%6T _қi#?PΏĺB\"ߥb!1S$1qq3e/!$D]H 9+`ő]0h|٠$H۷7@mL~,2[пz1W}P;kP|^DQhD J-Yu4r 鯿Y?<:uENnA%ơxhKyO\} tmqUJ& >q5 ]}kl&Zf42 -kj|[ -1{qn{]lj~ [:C<Uw) y$9q1/-[T JFR| XX ~ZBs?}ʚ3,cPww_AՏ!P .mt Fuv0SWډj:]R:όDmBzvU%{VTMG s/,[ý1j8) c>yg/w9uN}cxsGۻy9#B d Jm]}:Dz>+WwŚ5kdA̞u e]f.[h^m Hxȶ㽾Lή1o[Щ~Y7PVvzvC"S:V9gVh=:tD !x?l޺}t_o.2v-!)68yciy 2ǑԯQ۪ 8=sg߂V޽M9=Df@ 61n 8&'z?h7 ;zP<Q޾3(!Qߴ1ۦy/\d0>Sc:='5ѭ4[zh)mj))6r&L=9`~ST#zcxb{0X˾{/SFxwf_"WbZ #~`퟈+82Qn㎌tsfttϷYYYضn9:tam\ A#6lD&@h>r'En]̆.J;on5nSrp)@Q6^5EK ?|2J/`ʒ>?kߦ" yל7q?kFe{g>^wݐ]mq}kOl?I+io9t=pUvw3#Ѫ31ebg܏杍>ƈ7\c1ܳЩ};d=fF]Hݚ1| yZPgu=[Q1(ȿFcV72*))|H"`H"-Y "=j۵i|4/'#QcV:JpZI|Bz]r-thLs h׶Sud=:*1X Ah{ N@Կ;6f~ػ* e[ڠ45ꂱ]cF/Ai i{m[E!OZ]GFMDk0s+'haĴj2yS^k42ӍGcl V~to+eGY%{6xs] Œ@t0>? }Oҙ?KN@ +ǥI_w%ʌ㈿r/2﷩KN I]IwKUwd<_\ sP8|1_xe69y(E^N=YѯU#aE%+.AQ[|8FѡU+.± C~fTmj"cۥ6t6v^z)=!O(M-6r;FO7b8E!>6)tR1eVF]](}YF kCO?_բg]pXPgDeE]]{nkXJyLYN&?}eEznQxSTiTG.D+SR݈d, Y%95֌w|}XsI2ըo~H+G#X3BvFT1z]{i͹2^W}q@ۃB^å~sNQ(Jl\4+=5]\޳rw8#Ͽw7On4`e0-WΙaCas˗x޽//>FcU HBb W3b"è {c^z$Uʍ?-?2cXR"ڵAhܡhKЧ'˭5C.@onGdTkumpt<$c_ǎ]ѫ[26FRѭK;t_rzQf$;ĢutPr1(` ~X]nWrk H NV`n`XϪ0ځYukl;=D\Cj/CٮAvg w]..jd݋o8xoE{"_qݏ6]I~ˢcAf }όK:pl| ᢤgQ֖o4F \jr]ypGTyfNz Dll\9og5P3\ 9߼iU!pd(;ψsq%K3G KtQ,`sЧ3V6eQVZ}D;0 ԈD?^&" ]mʝ6b:5rKrE8 א3>om#%q®CLWkL<61T򪫑0j|z;"D&׾t.E03]OץQ庲! ͉!dvy>|œY vl0/ [p@P[ţho >2G0oyZ=_5Gp>2wC}fhǪaL2LgrkлU/3AKzW] YXV=sUJ=y:kQzZa1瓏ov 4lNз#z+l_g&W\th<{o ֨1Wd8J |fH C$ѐ;ȏ9FBu!3m:4‰$ {ۋ.Ozm7{UL=˙CĞ-:ߠ^]aMOvuOkv?xgU2Gv/\S{߫#0&ڌ֝;(;XkF߃s]*:0QrUxlHͷg\rZu hS6H12ܥCoT@iPvK,[oeGȳŎxcEx[v-?q-\26UgNp駛gee<=r幥%A<|y{A2FX.Kcm=+!1(7iNm<'Q?-L(2Wk+H$R܆]Gᦏo5F)q^spKiwdfawz&I"2"cHMNj\1i $j ;ի9F\%ntXuܗk/j#dؖ7aiһ"Hmjw6OS&;uMN֮vsZn\ԞL9svNJTܜgw8H$M%(v), Og|{nO߇xq#iXo5ҏU?oaBߪO#xvѽ+ʩmju'f)JNd"..)[ʍ+$0&mj6ު`(9[u: DIw-__ Xۿw7>qvs! oP/ܼv$.E~!)~)G; ~S7gU1aUCvtMWCb֜{|ϺHr۵fQ)" =v\Hݶm̤CH!â^1 BgO$aX|y ]o/u_w?/yǬDi[~BDI3=c{6v-=}>3xr\m30X=e5H7V/ }G@~1VڢC#h0H&T Fsxb|/ I[JT⤨1˚s qڃ>h4_&+oDȞ9P0k7N FCpd!=ٸm-\ה޳FBam 3syn顐!r]Pș~)2!wmʪ+jZu!3{9!?$( r\遒ΜfLgQ!O}Əoe~"&4ا ݍo'7l$l)`PS% FC/v^{5z 'u﷮"5cVhk;۪8 Q!QHhM.CKTg2?̺KcsyI/4䌧UI}[~w06Ҧ5tj5DDD;`PSbט`Qu`,L0&TgL0N ~e f/~ knG9DNy N-`5j5E#!!#_ɏ2 Q-ӧULDDD͎;&<;&u&DDD-Dm ~`»H_`FԷ/aOQT\b]PP;)S e`)"EDDTO7b5UݛonM5&߯ۈwJJKƲ4 Ĉ1m =y*/M0f'^p-5_fP Q~81qӍۻo7L0He2Y?-D̀,^ F@@&Qdh ִia̘dlذ}xg)5gu~y-V}"í9B^۶d(7U'h04_Er |JO!m -6/uOR@Q&i/wa%Fc'kXwB-ƄϬ^'}!V&()u2.立IDDihT}{1ʐk לlܚk ~} V,/7ϼsf>\{ǏKĭۀwO@_VKQPPg < @#7oN7#mPl B ;1^%]9z<$`vzocf\T~DuC1==drΘp9gͧaj/S=U%v­\ice\h&e}5w^՜dTO{z+uͅ37`Tn "j$eQ Fi6P^VFRaFqa *CFFYkyaU*Ub4̝0P3]I@f,NŒg$XHZlK1)ߌUX0؎tLVH7Ս[emfogxhU^uxJ څijaٿ>W\Ȱ;nYg[5^aa"##ЪU+3| DDIGTeCQمxkV*CFz8~wHk =N߽ =J"v']k[ZФש8>2s6#af,ӌ3g}ڌ,';3nxzXWo${XvGUO,3j۾HN9=9wwh 3:Ʌ̫k2Ǝ1ɣ @GsϵV)0F΅d`"Whl¯.uzyUqk挪^qH$43E{4 ;݈X3!,vAagBpDx8f>"~&z*7cYy}U I&c9= S?w+“P6 u I-&T e5ZÜ/4 u-7xX9=9jүУ>.B#V$'Wnpe3Z?3B+]YU5D]"oڶY^BC0]YfD,2W:&^͝av%o-Gɘ?Eo5P.ڴnmWÐh+? V-"SjQT:#QI1/ƐD#SƋ0N/y˰ 3pg$J}Z~?w={ЩClJ]׀o8(_,_awwX%Içr݅x%vy4Ϸy~;:˭ ݔ%֪rO.,𢹒m/eKo׬s [zU͜UWK/J4f a'b\vr:dtzJddH6 HMtY2HυZ9 fy U;yV:VN/PN%o2/yCn+{[CZ1 ""rǟ Fii^!^c7]eE眅민,N#'I&`% (|65I`f>򦛀m ˵P[PIdc$Ti++` .̻BR O/$]uS/KR`ƘV]0`5KDmjn&NiC """Ծkزe fΜ`(--?bԩViʰf&o@|rd='b\(Yk,Ĥ9oNDbJLsWc1#iͅïaAD$_g|e n$\|f2!IPɅOf=o<[vݏ~wޚ<ƍ9s|ٗH4=oxAv:ud!Nd% q,`"]90}e*L2Q)Fa_F:5OD =x'0jԨ$2r𶗡MV8Kڛ8̑7o2cko&*c696LqHKErbUHjsrDɘ8D- ""STHHD$cՒ }Tm葧};<?)ww݇:5 ƌ %~W̵ׄQ9qŜ0) 9FJ2rss\̬oÙx0?a蠁P)ožY7ue2Ґ< [!q4פgQ1 jЦ%=5<Qdlުr3>$]gXubƄ%WM rfU㰯jQ#5"FSJ2nfsؔɅ)o< &_v ]w=8^]>¼p5pċu>I rWND Qjl~5#0чw"<< *\w`#"*ϼGq H2>g̞Y5D*>sZKo{8 "cAIbP9h$#YXeşKx\0,$W~g`Lk}}IʪlTiux$kUi0a=5Q}>ǟwb0O_f~HM:2l<,\S1jTt\ L0{#'Vʉ4hܣ`廯(*!&I9I ڷ7e,‚UF}z6I^BC1eW`\xw1뵷郙Yԫ.5ש\#a\(PX[V䇻rj=cؼl * s"jr7YBWݨE8\`Û|_#QG?+R: """_d ;G^b";s(}m'aSnk~6lS+ ʅ f['29yen_c։<}>;};5be ªD445QR o4UgwоU{Æݖ%C ;}y>K{؀g.7ʟXj٘Ü\۫6K+.ЮTNZOnSmW> FUyԶ_}wΨ9h߾}&{sGHL;s> 8 W^}^-{cLbtiHMND5KDD- {Rwԕu CqWg}^,a!VѬs^cp56<3hd#_?W_eH .2s*iĽ*I7{xڿGG{$Wj  1ѿC#6BE *)[>QĻH5O%e( P/@E!0hQRa!ň jdcy7n-T+I{8d`W}ػw[z7W\/R>~ym^^Gbk3o(.:z0^zX,ݾR FS1~b`IXQ}}Z٨Ce#^ں@݊ @:U^nN¾R8e ŘS1ǘ#"_CnA Cr:H#p:DXr $s~4"D`g_ }o5g=yw'zm3T-[allC g/#}yP#) YvC{;6 ؽn0K=?}N0T!Ryj8AA~Ӧ=6uy(*E{s˘յ1͌hn%% ְ`ݞ]y}܏gpa;~|Y8jkP =/{a,t ;05R.cVG#Wj LR1|kvs7Z'!D#g<}L3К,"B7";;ۚr9tSӭҦiuڻJqij6l?JR;՜D,0]:j.)4Juvܶ#%_-iiiԩYC`PML0wym/FAA5Ydd%Բȭl^:_OMC4D߻/08%0 "S9Ƌ "_Y~^y(:U0 "] "" ?5DDM輼JrQZf,7̈v.5/"FyY]!""""j<~H0$q(O?mϞ8祗W_}~-7?#O?5-[JVm~hjk0Y/5gf5?i} kʳ֭[7D`Qcrw _鿚eNÇ͵JI8}aViiC{F;mڴaADi$-[uVg`۶صs'ك񁗕cǎDN#Kr! Jff5U}Ns=ך,I7!>:$ߞbMU D``dLt9lLڅ![SMӗOg~""/ K/ͱ\$p%fJ&G `6YSDDDûH5z'vnfk%H*]"W^y%.r+p%*Qxk?x)"SĺMNz/$q ~-.bL"F(e5EDDԐ "";ȓɵf^ I2;\WI@ ܚ#""OCȿ`x뭷9; !IYg5@s(}6ڵӚ#""""jꫯ\\IEpEIq39=zXSDDD)p ""]LL{Ϛr1В I4H1j(kdCCǏ?'K) I2Rӿ4t"&DDW"ED8 LO17<{~2wNw}g8xubs9%NADDީw1~x\tEW]'IR!zС͋C?GDx`ƝcΏl>1|lS^ .3r<ˈ]5W}QMN0 ,[XnԴu|裏a&v[\""")<䗋%g|BCCѶm[?~,Њ+G;77׼pQiC$C~GAVaQrK[YNDDX^ OADDiCH`kƹ瞋s9 B֭MJff5U}N.})p ""II0;w_:Ti"":!Rgg ""0 """""aADD-h0 "] ""0 """""aADD-")cf#ÚClF8fZbԫ,O1戈&DD!R̵M雑Xm{1fLKR&VyTLHaAD "":I+Q> ּioM#%X8w&Yq'#95׃`ADD-!RPC2a&cb5% if[DD ""j5Dʩ\E,AJ^̛{~AD\1 "SS'tDbJLw.2Ґxkhcڵ/矛6m5. .Rb<&Mu`UR{6Y+QXX>%%%DDDXrUHU31<͈CnU;~b`k>~FW] NDl=Xn:"772d:wCW.'""j* +.Rv$gI42cNeckQ^^Gpf& 6m $$ջ7N8X="S_3 CiiًQPP@DI !TDDD)""/&72W^jʈƲF`}NDDgNNADDk!=҃!s!AAA|ttURP233DDtrCD]w~ѣQRRMϱzj|عcЩsfZw_:Ti"":!R|&"jX~O0ڵk1c-rrNCFұzj#H… duo""~]w`:ꫯ\3FĄ pWo-bZlyk ""ûH5I0Mm׮]cΏ1||Ac߾};""skɅ^W^yо}{39'DDTS%X~|Zxx衇$C. ""j("EDx$bI,ۓ[ٳؼyyXbx>QC)""]$26U~"44ձcG}E||<0`nR6lyg5o ڪWI Оڷwdd2䂈H5쉈)"NiNɄSw`Qi ""j8Dq,&DDtjsJ&jwW2 "C ""j8D0*rE&"S2鳟cQN_:"66֚>MDD'ҥKtwaKDDΘ`Qi "":Zˀ(c@#( wmC{DDǯ FEY0b"ߏ®}0x^ Æ­w^3ƌ?_{s X1(ٟADDDDD͘_r u j-~3&|i_YF1 T%+ l=!""!RDDǯrw٣zu} '`v1߅"14cԵ^Ink8D5 96ᰑI,_ #%8X 2+0TFnjFkDDDDD|55k. o = s: mŷ[v숢#!RFf(cHT9k! 0kKZ㞋౻nđ}qy&Xe(""")<.?|%[JO`^@dgfaбC' 0Uf4%H8 {y1GDD"=iDD&Fy0 CO'_.O~ { uG0 TS `W~I8#H,K )L1Z*OCȿ`K;2n|p՗{ƝSAx@ xm|O6#f?GcYsax\HNMٱADD-"EDx`Ed1ݡpٱ8* ZWo[.^"Ux4/\h s155>$ڌtk֮jxs(2-#"j:<}>;%NADDk`3(8"JRD#h-7/JK/yϱl1s* #iT ٿdg<-#"DD ˿ p^9yy2S30 wvW}mhx_m> x$&[4&'K%)"k0(7Ȩ(ȅ%(/1R !!6wIggBMݒT^ V%!!n<&MVyƢX8,B ""7"#0A!AX`((hmw4F~[GO^ILCODzHZ<rm9<~Fϱ&"uqNɄSLݭy u"j`4EqӱR#k3\IL'󺋌cdaZݭy u"j Z~ADD:U[UHK*P' x"uVBbADD-H9%*ȅ Ҝh0n[Q3Z)[D20 "dОyXjfrwtBZ&DDD ȼrwJ-ԉcADD-^"EDԲ1 "d"":0 """""aAԌɅC ""j8D0wg333Da/NVAx|vJ&Ӡ FQQ __.3L5WtbccDުoi}E}'j .]jM󙈨5XQZZU߬k6`](G*pALI""!RLj $(+-A}_| ƁСCW߳G8:wݻ!++ #7!"": ""5u]6(+ Z+']!((,AQQ1o[Z.Og=86~:Qc5&Ҙ8;FIy;Zb)3:| ;wDKԲxjh[԰5 ©~m89;Oˈ!RDD_~M0į_0 GIdeX|ťa(..A8z$nCDDt28V8y Fvv6r%BBB\DEh6pHGW :*ǍeAAz:D-/g^3`/]Oz==euP=ڎ QC)"#44YPTv{бC+" @{?hYW!""j("EDx`DDD q':u šÙvY֦c58|8 ]:c;̺QKt^gޣ`#((NiNe>z2ͩ);~O04\s؁=͸e;w@~~X!""jH"EDx`رcصk7cϞ=()AqQ6vލA{If"R^^nM[z7dkRMcwfx{R!RDD Q-N ejB5ʥUF/(SN%BO($IüUCcBT&O mj ""+صkWQ}qQ 2eJY 9ϊ6o>μ29 /Լ5?Jo!eBiQ=̫qR^^^|,--5CM󱸸|T򨦕i3C-ףzRP^&Ӟգ:C{|TL0t)_"" ZϺ֫j^{.$w@ݽIIﵰ.yZ2u5BձTǩBo5^z1Q}~󅿶CM4x "" "N \kO$Tw@WɅC2{!IC6mh.ڈ(meGVK2쉅C-SVO:$)Pz 2'*j^oOgO>5> ""1 jzޏ7L6ϸƷ#w >8 =]\s" Z!RDDT;ަ,[<3O?cn^ u^=JB\9/w@H*/SB}z  yy1طn(,4ޓUKu ݻD۶ػ3nSh+**2T&\M귰[2oGyMŭjn<}ΝkMyμM-5&ަIJڊe$6exwng##l~CWZccӦX"c[ƍ[~mj<"EDx`ԁC̴OS˥_; z7$5j^S_ˠR=uۇ㮻g=7ظBc۝*,ڶm ={wc1p`&ne*5jkIԴzׯ}qrb__^muV]ףqZS5? ""uԋ/hMwaM5/ҨFG?* k楡j^Bմ4폒\}ؔ=z.[|9ص+,Su~7e2_2I8%&n!#Q))}XkB=Ojױ˜Kݺ6(m<]^z%k3j_"hCXGy@ w J,$ԙtEױUg%PꬿP=.d+;W_}U.BUJP{)qϞQbĕ9ro}DG$Per8ُ:Nu]H5'D-F07XBohK^ V S#~ذ)˗_w/T<ؓ\iؔJ$"#A\!qƎГ *TzmU 9>:^N-2ś:{6u]] c`vU%H,O1戈ZߪDtR CnĒ%[%/&o4$$lJ7=u&[I$̘:(5ҋ bWyTLHaAD-> NM+牚:LRZ3aA,'@J1vl*-EeP wBBN{5y ⫯nĨQ?Fcυ Bzz~ TL[uqu ]])Q[uYI OD9 Nä &NFrjxߢp饗'.c|?7H@)=ɴGMqal/yӍR$ڌtk{AϬgUB/WY|~=/_;qDʋz.NeBcSH܊+r_jCM뭐PԱq :ױK(.s2: P阕 3P("j<Qȑ~۹s8j:󑨹4DdY %F:SےD[DD͝ +ܕ j*,v[g6ռ:_qy/A]S/^ }:l58*KPAdWЏ"XPշ)Nz}_)}N]̡O3Pi V%!!n<&MVyƢXPsQ3YNW+5TT NHQ1C|t;T6é/'z.z"oVϧyزe0F\kJFL>T)^&w2O*jm=jxNɄSnN)7++^Ma$室`AQgݝVT=On}l~F^)۶%Ӫ@Z&^ اa_.ޖPe)Za 8ܵ$֓i~<$S*r2T8z԰Njx QV0p`k4MA~ۭ9)p "" +ܕ j*|9,gLWbݺ*W+`Փ`Pjj}=ozϱc=}o.ƾ:~Lc#Qz}LB/s UNuU(tޖ٩}/uwMNф!**Ϛk221zJk4D Ƌ/hƞ={*ݕD'/g=VqZn_OC҇#''LAPބiz zj: }Pc`뷭r^mUnwwT{}oⴾyOu^ϾLQ o8V8y۰zEs F\Svxj8:-S۶/մ^'ژ^GBm[5ϥWr=}j^8hpUS=R2LBߞ}^B;)Nuw¾x[>;%NADDq$}5%>M (k *GG9M"g"N9ޞt&2;{]w!'5W =y7}QjZ/l v%m USTϫiՓI_MT8Q!iaNe©LOjX #O!߄""QhH4e1˚#ju)<ȁϵqPgwСv #mWJKK+9jtVV7DDӪAQPgyA-Sej^B/їʶejޛPoGO[2E=/5Qq#Fw@,to5}'NCG9""""&t匱Y}oP{ObX^Y e>_\\l^VRRbڎZϾuWǝu1& jީޓTWU=uejS(eSRFu#"j+R\rj޼\3j36t\z^ K!!ص+Ӡރ"77ױ\ɰ 'Cy 9é@{*v UGi;N졿e}ě:!Ry""ɻo9[TJ'*|}۽(/5QSfPɇڎ\B/!Ts衶Ey}6}wc{SwjQbdgS#(2D2J "Z5gvc\%%ع3ÇJ&""j<~O0zwD}*;zhKo߀\e^޸_^k/]vY[ ?˴^2;{]5/a{.2àz,)HN,SuUτSυPy~_M+gc )s Դ3!ᴎLiNezjeu {oPt2:u:OC ""LӦ]1bA߄|| е i$;qZR:t߄עo5to~w~o8DB}87oO06n =nS{m쎭ۻc嚮{0l,B\nj:=/p/nMtr*!j5DJ%xL 2eJٓCƂp󱹑/_D n~F~vizۊ*:k.2R.gJ̻rUOї9 EW}&'QϥGEˤGD| 7_Um}=W:Qʝ2=-zeN+X8-S}VyOxSTX<֔g1͖{Zk:/j}wNe^2i E?)z:0$Sw FBG,CJ~:h>7ÀRi j6z r6؛yTLe* {Sg{ TOjY^^WZuػ ˗_`~\}ׯPTW9^&z&j+s:P95s*T=oMCwjTigffZSէKQQ8ڶ=j5mw_x<4h<}>;%NADDim$'!TwG:e6Yn3jZYqv5-T3jZu=-x~[9& QɼJƍ[/8kJZGz5?J>-8|'n0`Yn+ϣվE%붿^T:Tĩ-SFN-YYމ%X8w&Yq'#95 jѫW"M{:Kmx0kV)JsJ$'o,jQP[w˜^W_ľ_[u&WXug!uBvlK ˛T -6ISH4z4`UWM jp OT4ȅˮy_C|3`U\ E *)QSo2jTS#ijpjT/rY?ˬ(j֩2ݢPGX5jÛjƿjK2*qz=?^&_}z_>-^^׾Lz^]p*S-ӟ#D] ]`u9 τIXݻFbOV g'.R@TX .SmQSQ<#ӀAuoiyUymaTGYON^;ر5gU=dA/S㠦{ cӶCmKWaTqZ}}݅oLS}{ۗp-!Rz);j "~lϚ;u 4#p]MDDD' :%y:쎾}}5Mo=-L*zݻ==ٹZ}{뫳P zm m*Pϯ2?2gqe8.ӧy=2cBqZf>PS"EDt7SR ]zظq5wٵ1b:&""jM :i;jS(ro{:.gUzވ?bӦa8~s3z:jzTTڦwZQm[b赕jzj^Գ߸ڢ‰2Ouh>  DD-AFS#bccD _8q5Gb1fJ"ҥK}>;}22fc``> 45)L0S3찻:NeLWgLM<,WކlSWϡB(8->+S۶N˜%k p*_Lͫc+eUOӞ8մ OQ[2u,/YHWd10d6cqt"j2-3СˋĉR肄-Q쉄 0mf[= S$z5vhecR2*qLQ] lZjl7U3o{3c2#AhLR1|k7>50?ZSM|pyoS̮,w6e^ti!gL=e r^y 2}Xy5=ubX>nYOuT=w+^z/E[-!JKK=(+))1]-(,t y}ZfׯCfD==V9j:6QVu::{&FSip{^[o՚gydgg[S.2kγm۶YSU|1SyV4LF<3)~W`x)kެaTܟ1 09}%Um,Ĥ90WdAve xU$%c1zHcIKKCNG}~ FC' 4<}xX9fNu17-StjL{`FMC)P$uK0mڛxk$2'$Bc>}qwSW7Qo {^մ$BՑy}ZHo4*:uڍ%KƘeN ٮ/ }Ueפ^nULȱRӊմ:uS7u1枞Ӳ_֔g׿uG} i U֬9\ZC4/ DDd&?h5M մXL\&`9]XwjL9 kgQM}Bnn5GNvǙgVon#I7A __v1!p\<ӒhaVD`)MJșy 5ٗ뜖ϡZ&عsX Lz.$K6%CW類W߆u^yy~) ݻr\B?NjռiiwԼS4 M^#K@Ҫxjg,ZU&L,ɘx~>I*eFy1$阕4^A(3A6n#}R'IX..6@^ wdMbQgkLܬo$ocyk?>j_~5մɇ[|1sѵU_TGβ UGyWBΤ }>/;دP: 5-k(Z ׿ߞfe:~-oCkPejm?nщ/j~uy uۂÉ5'd^j^E>ۯ?r{:L?>PsS>/T7~tM֔gk= z F}ٯ &`"za4v]Iyvp' Ւ H5&[Ogp|_-8 n>h8w4{:r=P2zpB]Kozl(+ Bxxie}ZwVD_n_S4$sPw&?Gtʨ7SR jJPzc]ij!  NuwgbcOS{z-{tG=Q m9=ee7uTTHch_ ]_x/P:/:z<-Sj[tRy);}IUT֭OXsT\3 )")ST̟?*c|6g3:L5m?éTj[zX55-ẆӪL?8!PզEXX(u7!"YTGMeBie_մkR 6tiiiDzb╔.**2yUVXXh>e+_:NzN}}W-ui*OM L#Լre>4oNCN:k3Pܛcz2egg[S.BBB5ٶmЯ_?kν4kʼLЩS'sGeeKG}ٓ9fNu7e޾LmK/WӪȼ`WeL0'!!q_z_:9_-ѧ_+ 9nӧT^uq0 ꃃ!ž={ЪU++ ^矏M6_~6l@>}< QP#KlaEaz9 m[#uz#>Fc޼_:NSmDw0rqNξ9`cDaBǤ^Jͦ&inƘ1c;o8P?>^W_}U#+|P#oF6m,3q0BPFFH$q?6jPjg4l10F԰mbm$T6 TP˶j9\n&[ž}U`8j,v cإFT;.KӅ+K#KSqJөpۇAbD!fٷ}:}jX=5CҸ)٭NIܰkr>Ƭ^m3}PĮUS֋U6E`"Ԁ9]+47(߀9( 1tjEN˯DBЉ'V$p crl?=g`)`38x4(ESx24q:c4v 55:ݻc׮+&%DgG-66 d[md`6J\ =Yr4}tV"j>zZ ~|j&!:v܋={:m8:cXPحלcc{|v6# $YHgdj /Ra9OG' P1, 0g|rrfJ{CEߥQ5uOkdUV::(#BV1o ˏ*1y=0uUgR~o8 . nmlFu@ 7uؽ0nۏ`8Rt8l8gN''Wa ={:M%ꄦMKp_"??~_)"CB\luuTL[8Ǻiv&NfUm4Bt%Z=gQown *eAؑe ґ P62Ny,CaFsMำqWQK1Ac4<::έƿL8 Z/<} Tn0vaOX FB|s;|߁m{pp.p&@VF+T8rϣ C Ԟh7^kNcUuS..j^\rW8:"ۥm$W؉]li-4>/梋† ׂ۫P*#f^t7] q꽥TN:4.S`i,v6qJ¨q5u)R1Fc -.څ? z"6y#{z0Ft[) y}<^F(eWg`AިZM8j/Ũ0WznSk4LO|=W91Y=L}kԣ10 @Xցz`эUc;Xz:u?ɠrݨK炨| 0y1>ܲ S=B o[v'q>ѣFuO=pQ{Qp!>[f>4AN^^*z/JϪʥ~K `"-ؔ4r^ÝVFeRvu|Ho^EM۱l&)I^ls >T̝1mb騹sa踰YFC~=;J:D~"s@%YX z/uK8թSiuHu\au0ZGw6$}b<e5˞ؐVpmp4d^zCE/kO4^znps5@/>q~750pu m|v61ǡO%:aطjij*L0]o. 3v,jo޻OaF٥y`QG3tsSuz~Xxjz0}إ0j2E*VXiYiHhƝa ?bkXӨL"9R+.~ha[Qvd4k0HMB j>S(>ƳlK\Qڌ:mz?u[1oĂsA8[Rln+^6| -\_{Obtj8iXjXcG˗R-\o\G'aT7NjٞaT7;4]Nw>Hté`IB:m  &B kHa0C: S6>OMz e#"J&FUTy&1 sf'4g'Ѣ)u4`l}Yf&j(oĬ(('[4A/SF6W= WE }ǩNO?'/4 \8y|S%%q7!}Fp)|(*ڃs7n4+/JAEp9sPհ D>C߳bO~&PhPXx>l4vXV9)i[f4k$62mݼyXPh]$G- LGjֿ`9 QIZyhڌ ^Où0I7zЍYbcldiVH(S]Ix$R?%/[PLp!3gJ1b? P ^b5Y%A='(])]TMpʥUB^XmT[J'4ibn9M6mܸ)]ZӦMͰvuk7yYj|Ljs87ͧ-}FHAhAqVZZj~G\X1MIIO-x:3uzQQm^|^cӫ:=ƮU?9.۬;˖-s}ֻAlJBqoɧW>[v;v ٿ?zFB8'-[<wɊE,]6Gg ;-8EZg1׶ְ辏5|}ǟZjeiA3J|ׯƆ p7M6Bz;Ѯy÷H0~Dn|fӷ!ɰ**4j=E1.rRRj{ ŭfYS&OXbH)@@г4U఺e=\tBf6ulCi8PKq;Aa>7>6}Ke7s{/6U<4=US1uʰa>{-${ぅzᙤ17/\5DIDz FX M{8y$v2yE͛7GVڐdahA e4.Sm`Sm8h }UGSjls=/#'go^FߟzN@ցyֈ-=?t]Æ1v̝{o5AXjvI~%0ǃK^6};vNvi3mԭ]>̨8V[;+Wv!8[h:qț-!CˑAoĀ蒒b.![HABgѢMe_L'8+&q"U _\ aHT­W{lzz9dC[.S}iN#G8F؍daBOocϞ.ذg{}4֩KPu۵Q&fii7.N2ʼnG%|veǦjί ٥uٻ]'.n zNNIq;e6N[n5:q-Ej*:%dC'vC⭷FyS⊍&~9XӹpANA!Ш=^;7J4 '8~إq\Y$#O6￟a8Gq뭯t Ir>ZǢ ۨ8M-[/XOty}(ծ-ꋯ#aTϨvz ghnGDFHh㪨l UَGԼN낅F`Ht)A8|(*{ns^7ܐ+o4AF]~hO!CyBHe[pZϞ_?} ;Ҹ'N:SBE1׉kȲNm(6z㚄,z^L=Sy[vBi| ,:: .E/Tp}hOAN=t0V`9bĭ) 3QO6b8lt ͛= 1mp뭔~ vcŊ`[ +A-nSAR XQRp`+^ujPٛ0|½lcgft˧z6ܣO:sO>U?3 ѡn~"\w 4kY<< fw0ew7-a87СaUuq/T ;u tt;T;Ֆz՞'h:z)8Xxc'm4.t[Nԑ7~& 7ꕃ:m|aŝY_wRG܉M[QAHkeˆro`4W`>}B-q;p5kcla׮|p)RGD!QSxíQUI>9ȷ:01?Hahۥj*ni|t}D"{uwu'|,(Ñ# }-^y(BqM?0t諆1ZȣH $'Gǎѷο஻K>3}x{w'6le1哨|ٖt\pZIq= ȫ=jPꨀH*l6O/S>Նup]p]ڥBvVA%90XnR-U% iocoWA?bn?6.tKSzv6)Gl4]G2A 4㪍֢E tف=F1w͗(.nm,NlmmqgO9rh޽`.fH-5 4֫6\ ]Y9Z6:}Kapp}:֯qr9K0s֟yדuf_S:icn;k֬vޱ|['%_W``9yC?n?:ꏺP{ԧڠWvqiT6xzCP }9v΃]Aqv:lc4ҳmxCqr(:w>MKxNBB}хF(*O~jPO-7yĂmx`8U 4QzbT=&؆٫:BN&ce\c\srX~꛷vR/:Or\=h +l['8 8-K)R+&#~`^^0r x,{ 9}zȹAquvi:5@LA 7u.tߧoocӦ.Ǐ'UɣAΖ|sĩkScaUT9y$Ը't}y8۪6,M65E׫i$j$ntQ٥砊zli$z qUC{ #ƾoJBNNҌjӱHKǦh#rŰyKdr   *"e8 ݻ5-F !7@@R$TۊӧR| 2R/m& 'ŭw҅^ҩ7QÄ] ЖzP ݆v6vi3KpN/{z UGP\WiV?B Fߋ]:@ yti ݆mp' 1vB=__55m`W'Vשp45K{gG1hOb~$CH DOjѠy[4:wif״D[ٵ-h;MEf |#O3VAA2EJ!zHjp4nMh=_ >\CK#و7&I;+ DNBv:7؞%TQ0ۨi,Ki$S 4p\N_jVpn?CiNz՞TUaHHIh$Dձ I0JuҜDUpMT[|ۯz7\y`]i{՞}]Ber>uTd#:@q.leiKtsq=b:ziH\!dF>_<9 aw0v?]PQnП>i(=y$A~ PsKp[Я7\`_äI 0af2w޹߾o4|]wY%/tGIt[Hud<0?p`9dQ9+?;P  !OF2\8͙dC 00R컺=|Sߟ.3=fxc7TQ^xKp-zmU;Be](6%4ڪv*wߐnCq}mhSTIqKm\/'8tũ`jAV-q2N4o~۷w7gQ\ w=]xQNJ3-0HIفV)3'к15?\}:a۶ |TW4jamhd8V᰾%[;Aq=㎣\srgX ?Gu] ,\7 XIocoYHZ"U-jg8.;/DC{aw0&O_{4FpU^|$i `ρ}f8]/Ù37/PCԱ 75%'{REOjGzcҋ o)nbcn:q0`K6? q/Ao-`q;:}C]_n4aKb5v _a u`PzZrs:쬨 4M#/KT<}gpfK)N|ǾYf\ڭ12.oCIvؗvKPq[jb *=6TnvpK$N!qZ@iP#a;a]N3XYtQE?C:Tq]o]:5YcN q\4rHx?m;VcʔŸ~իG`߾*#xDMdϞ F,^<KS'c1ڭI=>ՆúץD! `SF:L5ܙo]ȰLNv0~ԋO쁳8u Jr0,hpkk46AʼnSWшf8Wq (StQm9iC GI8nZqF>;6q֩۳ ՏSoҟvNXa&eч;1(XZ|+j'BX 0#q eOL)|_S_o 㛓FB#U1rg~t=\+T5, :u:1cĨQsbh￿ /|/{o8z=}J{|C~g `.HLۧrd&~v (iKsC$ O_l zXnQ]yte0,MXog ʶ:[NG@74:ct;7li NgnC=9u;OPze={b8xcV;[Fz=S\\TǬ袯pnuؼ$F)'[=wG[۸q㪫BPnY,P/`Bk0~_wthv $^ AhұAi^t.bxqw#_eiEAj*k0! z.x_j8So.;*=i^` ۪.T~Y uΞEGWֻH*4Z#(iT& cN:4~EHV]inBQmu.c`24h{bԿ!=}GUm:P$z=u۰C{ BxC!PZ3ǎ_'!-]gicvX  q0zƀSg[vi}NfoKOG_% {UWpX9]\߯UĮtNm7tUGpV{uೞR{I~m[/l0(c{ݖu<ʠ9ِNO:ZZy5ߎw ,]yTu<"AiNs 鸞e BC!X;ʫ/|],Mq"eL؉  q0zKmN=۪NKmtj] ۨԼv8$p8Tc$v*v^Ys﷪Q{EgzYaW{ 4GA~NquĀGHQPD[uG@npfϋm8:J]]򨅚.lAq0kd:5 .M|nn]6t&Uj+^TE?7da[;a;ڸx  Qn䲭>ŇHG 6\jCjC .iDrNXXM>.w^7zXs=uHqpM BuA1 ;=,M7 ?м)Kd BC8puz)a}'qzΣSuGSP[ Bi\,:Ζ{5a]EW{^ws۶lY>}~bH>2qUǣ WG8MQ8*NGBcqT;_/bguj C 1=,Gd={RP\ 7ܰ҄y BCHBi$٩ތ뭆 8i|l$j>t[t.SE$T{>F 1MTN;[=iz.nEe^wꉿ6{9# F)|N¶ F]:ՖêNկ]; ڝ Z7[=e BC!hnS|&wXs&DAFҸq|-BM3JbP-Pm8ΆḛZS~BOSqK <vi:^qӨ[{9nG-O 4C=&O^>{8ےշ^O\ i$gyԋFa&⥥:]wȁ`;;g­L֎/ yfq0 +`ϊE 6$Qa^~e+$ rVLrH(Fɀ9V L'1ACT ;tt sA+T5,j0@zN㸝QmtQ:v5^P:ݖzk"j^Xq5&ɷ'8MtFx utMhF+xú |8 ۥp$zٔ6\z~{ ڶ=T'&[|E}ƃ|>& ,.FMp'Xggq~Iܳ$ W>ȑ#ŦMwߙ)7lڂWn~ė_~a<כsN;Q;cxr6!œ{VjXڈ/| 5F( /80?'NX$w0ȃcyꩧu DP^j8v:FQDMEGT]#"ve骍8 T=xGa=㌪ӸG78|ey8|#NjWeC#QG$԰5M-Pta[Ux<"iamUskp%?ֻuu׵Zovinu &NR NHLj/EtI8]pb<35 eXݿ)¤"|07&N͛(DokJ.] B"qa括m[Ob#\ڳӳ b4Ps9\Tg L\s֞®ZKYa ه',qjǓ#Ɵ?;>τM йq饗Bqu+uB%nzO8z5Mձ^ z:HxH4;`]GTt;Uݹ:'{نEVu$cB/JKۆ;ҪiwmPG#H؍@8Smt:QH|7e}cQŮ~p^O =y[)#iVTpF%.ԜfMo^Yܾ+JRz ?q0"`)ؽ{7~+>c3Nz;gDnzީJ8:QmtcE" إVfٝq'97RLu=Syt|sUb>Mb4'QOs#^/vvi_Ulwn8вjivp\u>P#7[tbFNzo[ >dd#[S:Vǐ6sYt~港-mu =OX?3gH?]=9 _vkhۮLJX^\p bk*B|WVMm^_iNA;v=P;-Z9}%z9k-?#,*viv:".14=Ipdx)sZ?N=öjVuUaҸa4(Ǐ?vT{UG<^-KM;>UǢ۫Ǧ^'vBsWHN[7Y֙C0/gĄPyIw$7}yy!0"aƇ}9=_Y/>fGJO-<čg̰RSmvd,7"" 99YH3k=@Z:*cooF"vCG0:4jUV-[k1u BV'w.]ö &BlDocl -^y7LXG~m ܇_ 0ć+׾xFy-GV-QPRjD䎴O OCi g##c6 i7cں!Gb5OgFD _4?'.{~ᇦAd'DM^z5Ҹ\MSuإ1^>W7 6&NDat|vi, :FM^p;O7lXGz8NذvHӅb:cG)B#JKwX4Bq"%+iXHӘڝ ݝp7m]p_|8շ /؅cҌ܁w\~05J4=v[0GxedrX>fg>Z z6-)SL؜ %%kҠ^j-[1MO|z@C^0dS^zx:tNv Bn۱sgW+&Ѧ Wϕ);gN Mk\ګr#u7@&H*R|98 kSRsCnj^6A7ԦV)`ĎH*3MOBo4A)7<07؇O ؍[n[odJfcύ;"o^駟/6op2nn7Zu'ڑlϨ"Xs7}y}8񕋷s2iJSn{dIs ɭ E1%Zkdm0:L 89+ A 6B=0Cy6&*ϥD?髿VyӛgY (LPߵkXš%`إ0viN=zvipi]:JMF,6րenv.u̯6U5؉%?3*}vUX'S`q' bo 0 ЦU Ĝ:աus=yG؛5kfG=u_O˯_WŇͳѹSZ,Cz*9$2au0}o[<裦\=u.?DC}xxͧvp.*v$*vل*:v6j=uegfpiv8)_ii> cg#EvmLSmt[=fg:=V̏n#"~eh=^Y0ÔF+ѡC:qi߾=~G_>W~ }5[,Y2:M4IdsF4n8ߢEP\o85KPO^lCmVՕja=i#B6n4((M$!XdsKyxJvsN ;{DF>aKSEݒvօz+49sܖ[srܒ^.[-bŊ[:28Q+MUq{ǎU2h/ ={Z1g͏^ 0=s&x뭷Я_?+iJm۪Uja6lѣ;۠N:ar0ղ`B"A42oUF;-v6\WNۡ۰, 6?~AǮԡ s [T_%%kk94m$Q '׺ukk.$P'q4ప Ű=]>ʡzPTF~c~8PmT'VL,;7ad{W.T $w0~ߚҥK*(.Bh.ސNcT5/ :F$vXqa!#cu͢naAP5MN|՞veg 7>0ju`"S'~aFSG܉M[P*p U/A й] ȁs~ąYDƇnݶ⫯Y S'ۣj6^蓓|+ꈓ]zADS/cǪlY8OSV sA+T5,ĮaRcv=$ԃ Qnp>UNHҸם8=4g*=O$=8Z9؉Dݟn=9{\]h֗jkWNo&P%v:AK _n 2_~9p?^,̹kA7"%eIL_^FvP+>V^m?gPڹ(؂MH8مzJ unѢߏGb޽hذ L"Z>RN. ].ӮۥaܓjnIGy_/M*|$W#>':4uLH N޶_,{ 9}z!Ռ۟9؅ C~AiҤ N>#Gĉ BbsT3l|1FJ)]–-3a'B Ud^z/ Y+5B B"QC}hӦ 5kf*ѨQ#!vkhV=vxIpEX-'{I竧a5gW/W ى>"q'IIIIRST;4K:X9u7o~zm«4`淫'[Ms{ <1iXƝB B'jXЏAVZ?vt nHag:=M;`?m5_vmUjXzn:4݆Ǻp۪9C=5|0zw֋u?qXH3 'N"ou FӦMQ\\l>i;u$  ou;23Wɽ~2mX`L A]XA{`诧Ui޼Xm֜.EiŮ], A+j-pu(p5S*Faj9?K[?1:*#n:QNS;SG5l47 {sN1~ փVvJHHA{`Ј:jA;1~Y& | 3 vo]w));-m[MWرb)A4n8ߢEhabΝok;4T#C߂MUB8-a. Wf6liZƍWْY2=lus/9Xoݠުauˣ oIGѸQaZ? = G7gfgCC?7v$''[!wh& x W^V̝Bӊ9eez~!P㏇ b$s!imKUW}] ,mѹN*;M"MRG)DAF ADewmT;p[4u~]G=i^ڣG.n}q@o|8;J EcQGRmTlƕW~a߾VlAQz=sݦH E A8bժa˻w~KӦ%8pb#16PG)DA8 :T87"9:5̽ګW_qE_cРzQ݆uzWG4x$ś6=aҤ'x;We=ن\?z=S:qe BCQӆ751':]5 Xn ZXT[= 796!וWnGa?yߜfEuVbWz?_wo[?Ur4g׳6ޮ{uz\Ցʕ%7.Ɲwd髎2xpʧ 5oz}_ާ1R87דp}::8|킉 #  ABߊCoh$w0F-kn_ln> Hp ؐ6:'Hs`{Z#=pM6bLzA?ܳ$^lI8 rQI,2HbpAK儣 X*'eR9(ĭ! B BF~8^*\V}|'k=,P7/2 ӹ (LC $^d:Ndlڢ\ C꺶tϟ +\R5z;!u2)-HCYr v0Zl|}>E]xypFq(/`PMO8Óf^ }rroE[*B(H]:r?ex wb{X!jXd n&<3g4i{Μ|[#[s gQI5/7޿1PKS!!>94%c>@IDATýXXeA!$7ηh"+.;#[nolnn>:ۿ`8^`|?E8}K)di"·1?O: cV&u]kԛ }]s\KAHcq~{رcVuˊCӝ{iŜٲe2@/^]v6m̭^ Z6 :pB_&M|G1+W]}վq>>ߧ|/|VL|So\7 Oor8vjI:5*՗I>J]όپ|+TR׵@cÄYwفѣGH^^+N(e ;.?@egeej`nv߅^?z߯Zju?sq+Ԍ7MA%fC봲 u];FVzuS`[r?nI2Lo#agC&FH1%%% wm_SA!)AC4Hz7\k8{)Μ܆S?XAAA≰8ᢢ|gPq  OĔ8_ѲPK#  B<SF&   FL9   7ay  uOEꭷ޲B 0GB!oCA `ϊ aÆv0d   aV#;vBk׮VHA7d#9r݋ |yְ +PAqCP%FҦc󐒒$3.?>!SA F|[o^nżǚ{ƣu֖Fwd  Pk˭Ph:uy!! ԨS!VCA!Sc|=ۭ `qˡC}vSveiA!>iԨ̹芧L5t`Tc=E 6ll`@ ]ujKgtC NH!w|__~}'3^RRbY B@S6oPSd4k ]S^הFݙF_sX{Eo4˻ WYQA4`q9 .ĦMYYY0a7odK/GZA!>Tk706y36C()-Gd;?<_~9 hC}hF#S% #O@mgBBA !nXdZ|߷9o&,X`:2Lә9BNfeJ !j`>A9ы|՘>(a~lǚ4}&qj&vComHy4o`\>!|ghذ!FiiwGgggc͚5ƍɮ97C.rh4-oC = ėf%WAۆp&lT쭤*xq0?7lłCŧ~bKc5>g}}MĔG3!Q' ԑV#})gx=jٯE#ݙ/1Qita,΀5E1pG4 .n[c(#x\!. 1ŏ _UǾOX:CӦMѹsgKr,6oތKS% yc+#}٫2eI?L)>e (5irX1L{9EKvdcUt75Ͷl3nB3zsC nx>y+Dz.LכWBo3) D~NF5M[Э;z9ьnM0 kyGg++`|.Ip+J9vgŠuVnA9wXu69Q;E#}LgʼnxJ3Hxt&(jdLsDQT ƓܲO st'$-K \2y|+=s Ƚl2|]+wFVt@_;z3#@ ǓUַC۵tA"Ct>7@k BpHiUn7dp~okO&izkko\>v#W>UFfٳkBMz;C*-)qM)jP6t2-![nUgVt\nnWp BQQ5p`z!Y~-52YzG{%͵\Pk0܊ =m۶kgͷN9ҍzԁmEBih#@=co[5߃oa6=t.jzl^QGFLE!B@_!oppTa_N f)M$7!VS‡VL֭vލ'B[sED]gӈp,?E(_ߑ񨿁=>ݠตY#gjQB -))mዋ#'k.?wv* ^x!g<~I4i &Ojl'k)f}݇VZYBS#`QW\q֭[giC_s9ؑGi~!^Hӊ,ymxu;30i -xmJГPUNs2d(y;v/ۭ̔d Y3kƘ؂BNp~l6n׶]H8djnڵ I("oA#ƍ=.Yfmpt>/YZ{&z`, T E_/xYZ?C{x2e$Kl );T!qu^l"ͱcǬW^V̝BI;[l\Wz-'A`^Gbv;udݦ3^ Z?9޽xr֞68膉#"Coz1`\wuA#/ & 55 N zsxPJԅ UCm{q~hd.:-hQ7㧑ΖWA=qȫ {ʕk8@lҼi9^z)F!# Ny 'ZƯȬ gq~i߲mއO؋vMiQ[k0f YGRwuns}ɓ'w)'OBQI %vG;BkÝ1RcLe):NFiz_[Aŵ^kVДoFA(PNT B" r5 ww@fgѪq ::ښgΔ[AAU9 w0b"΅ NF0ShM*=SjKKKpQ>|' )=# Bq0m| $8aw0 8?]#[L#HU Bds!'Ƹ=H ĉpِhuH4&ojW\RH  ֔($E#_A0;4jqq۠1~pgc;ITlE8b u!]Qv6 AAyʂ $(ao]8|0ڷooł=j+V`ذaV,8>H?R{FD"} b@KoJ!O9T>E*O$}:s^F*Abs06?Ej0F 2t3݇7xE & 7τzDC?hQ44!T{y Bp]s R$#TeB  xoC"=ŀ5OMm!bDQ~)AC8 S P$"!"~DGѨx?Pe B!   aw#"<6s|y'bx?Pe BlqDzjDB9vENB)R EDG0 ko;kg  P FYgS\ÇOnSBg!{S(ʫ;HO1 B͓hS[x?X;~"hiC2EJ!;/8x;^JqɥWǡ /}ߵr "<6s|y'bx?Pe Bl)Re83%سk>֯`ǦOq[48PV% Ϳ&=nJTAH>EgHiY9ږ7 _}8 +$~oO?GN`Q|cJ,__`KI-DCH[<kO9j)R( YIABxy|8{g6>֍EtTrv?9.ކg,]/JCFF9j%`J)’)4d#.:DzjDB9vENB)q.AB'F`L) N@y3P6횁.Ǯ@=Nhӡw8u֭[UV OO\ b}&1XL^W PaGiS_, B}'#egϢEh0 ͚4I)J)$%gPVr%O䉓-j,?VhzvK19u"S P$"!֎H(uLA=»J΢Cba9K#8R|Ibk/աOPQ3qh'm/DEaUg̙3].LS5'>s+^ŋ}G^ŋ=yF!?{vďsŞKvD"-;:r<ĹA (J7noѢEv<-Kw.?-_v[Vq;msIgJ ư-hӦ .]QFYBk(O^x sykb~Ex҃. 1c +feA\ D*ƙ[ܟjnҭ_gT:uh;v ٿQeꬰ={agY^!vN:aj3P~?E4.; !'!\YF;9eѥuoYKтPdg}=`ܻ?; l}Cf ţV$%cǠ?b@KoJ!O9TEvD==+Ϸ"b FاHH1|⼛k |V u@Xܷm91c}K~W]d4P՞5Oy&'bDQ~\DB!tUTܐFMѨQ7>/<C݌_TTTh.> @a0d]F,]0!89L viʫۅG> 4p ?#+p,Oe@ٳ8x(L$I-DC?hQ44!T+9dC!4` hB{8+ѠU{l۷CvmѦmUiٲY%vDzJjDB9T~^^ďH(u}rr G$K q.AHh`\rH,~2Y3ܺs:}_6}g  C`4xŜ"$SAHX`qx𗿴Nc=fY'086S P$"!-R'lHH)R{X`9 +xA/D<\b@'Ѧ~vDGѨx?G{'#NX(Q0Hs!B#F]A" \ d3#(F9g&?? ^{5s1,gb1|=Co#JӆҬ< 8q@$I-DCH[<kO9jwZ!A!VCAA!F) Dymj R)O~G| 2 `dffe",RS]t"<6s'>F9j/SAbs0 "xLS?{:AAASRҽ'EEГ9uv̜9UP(؅i@0yFsܫ}(>~ކbO%{چb!!Nr %iܸqEYh < <6.=hykb&fxe 'cƌW,zAۿW U8v~ˊSXX={Z1glLAbԩnӦu3P~pCq.h<"[Ol+«NAA$:DJJwn;9kǐuтIBDy+8s~!/oD?LA=(,|7IMYb8 cq߶f|ƶ0(鷰I~vDGѨx?P-R G`]GCYYO5ƆB 6Bvmq . Gd Nԋ57o߆ѣG2jHPݻ-kHO1 B͓hS[x?X;~"hiC2EJ!zN:m+Dyy܉"<6s?hQ44!T{"%{)AAAs0y OD?Ç~ĮEPdlgϞŶ[RHO1 B͓hS[x?ʗHy"֎s^H au08`~D'?F'vX.R|9n-Dr)y?2eJAAW`طo? Sl56my[`ػo>bڕbsC ;xAU''B*_"X;~"!T{"%{8{ eee8}4ڴm={gj*z2}_r \z.r.B 6EX2%LYb;C_{%ѦUzDC?hQ44!T{"%{$7ηh"+Z;񏷱u63ܶM[;v4:իW%tѣG$idG3`&̆ 3gbƌ4̌~a yVuXg۹$,ɓzb? Ͽ;v ٿ?ze),,DϞ=3[l\ v iܺ@e?u0UVO>hݺ׺:[b&v)Z2O1̽+CD0bu'] Gw0x vmHNN49sƜ{wXإʨ/N :fN# ND9&??7|K/Tvamv:7՝Ⱥ up 0* y#DSvΑ'#mO$9j_9zh˳RSPP` LAbg>쬬,_Xy3'Z{tGvc^  B}&"F$c,6|Ԍma  P'NDfN}ҏsk}T5_"%)R<@dH  x4n82o | #sk}T5_D-R 'qZi=r bh8>A?Ap0AH j` AAA†8   q0AAA` B|wVȏAHdAywSOɓx'͸ GR%S2iȔ%F,NyU;ϥh d>$?p`yv9x<~9OsvRo5v:v;FBn̸ G^SMG}@d?a3v`6`A?oBEֳ;(2ZP#jj ?wX8;%S$\qpt>f&l?@M;C]WTTA8|0ڷo5zM[oep3zh+$7` jKmԃX4vCOB'\!gעʽcwn?.SblQCƭ](ϥߴ~uw/7|-XZwDׯņ %ro=&{O-maB@t饗ZqAAjO],ǚ<niM|>:7mSXy0/y]ɮut% ȻDr79xsh v+ 9u\gslZ_=weF}C>H$ ־Ct.3y%F㊖>>k-3t-WY s.jTmj/tq6⎣eGoX%iZ[بUw{~W?ݧz;6Qq0Dwgxmɫ  ?4kkuĵ"Q2|]- ŕtU)mVMRVcwqۚرdzo!9sœfcʷ*?_33dB|l y,-w1.>L`#*ÿ!")m). B=&E޽ѽ`̚5 N٘RVn({tKo*s²o9<}hKg㴿g/gbFcaY uϑxrLG0y$^|}K&QCVha,{HnlPnĻatL 0c'}hHpĕ2!$A^cc5?X09xD~y@uG/Ac=AlC>Н*gG@eAsŐ5݇}gK|wagફf`筛>ABx'оkk.^qb;=K;a}'ؖ&Pg8+д1l_ ŗ~XH~?Z,IobG:Mlx샘pc8A"AA 99r|v>;p9۽JR2FU>ƪ4tvn3ٖ^fֈB`2Ct>f !,B4t._6-8z/ʍiC€FxZ\׮ R&Uc{Vⱈ"z  sNDƞ}wؽGO7ƜMbRRIDRhxq_sԮN2G(l41Tge1vc4Cm7񏢫ViYhe0m9靜5qlM"[*]mw a^F!lŭpX_؅O4IjbYAӣXkڞ) iR Mu Cg o͘l8  -H$szһOi `4Po?7pQ>̓⼴i(T-ZMdOi݇ep~o-n񠵮d-x婋QA#i+›?_ps. Qʔ;I)l2Xu;U㪫t</y yKo/GabvӝMR}*o:[ Lv||ɻK6;4wC_CK[Chao@w:siXKނ  /BùxE0w?X{"! B9мoW)ڣmr Җ Hr2jmGܖg"G_&-۩Oz zÚY@ AAj̀C玑Ud-ueUd-7ap~t;d V) 'AA!l"oAA'Dsdw{38X-  `PH  !  B0H|VT ]w!h;4駟Z1A!#GB~d 5k0{9SA"N\z # 5E`  !  BX(..CAAвeKq0y v GqF=zL#`xab4ᑣdgQX:f=zꩶl^cSWu>ӟvطe q_тzLIHJJ3SכyzĆTE3>I\e+ ҧ?k:CX 9c-!j^5Yl6Řy?6PM'rt,7 q  B"x >9hLYF\̢ĭXW>f[ FjM>$RݳQu_$g[> / EV Ð:m|>CG LNB喞FEH߱}xmx>2iN",Tc󸯈:hӢ rQ4QOx[FeC['RfA(&a{U%۽lg/ ABw0z"}RX3QjNCK l,UA{bMZd4.ŨV@ 5Wȸ#hBZ:2԰h ش[)c6X/`8z\[x?İd£F}ĖOBRc={#'<7 l{YA#0p޷nZmƕQ+:7Ųeut^gxWQqVF6mP}%O{ w(5Rk-\aٛq}Q}Sʮqmwo39/DB7 ;{s^A^S)R4?ܜS2 e4*)y=4$w"7BrXUT_N) Zב^o%цe uy H'' <+ Fn_Nd_聩sYP_ho k/Mb}˂  [jH ~+ل''f+&6+&114y0`z DrWk!0^}~tDElD A^S+B4w0`D r6 <TR`Tx+ UE##  czL*pZhzXZ ,\qIlY- Brĉ8t0j WAAS!CᇆۄA B@H  )R=XUC CvHǡ B0#!  B    a Y-  BCAc޽VHG`  6A8VH!CA߯=,K#;9rD AA'gg{o{+jm2o45^>-É,x"ϡC=쬶jUYGJR5j]]?f+h_й .Sq0A!):QZ_%gKLݑ#f(=S7f?b8 #wFyiU3Sy9+STڵk'  :_0f<)׾CՑ?+@16lS}zFcfvlHBӦMщ?صkyq]w[ɎA lLHw\l#=儵h_L.o} 4@G,3UF#vh[<{#VYX)X:jn7N`4j tdJIhu?L[sمBkEY`ukٛsze(I= (FXkm{ (5;6}` BlTpG#;Ms18~LHgѢE7W_} :wlIHOd,F0 ʂo`beaMϚ׏;_hQ{!L\PØJh;OGߡYxVϞk:わ#84sg<] biK"Vt{<|9H-]o%bH-9;A}ԅUFT,ay}L[FK5tH=l_c VzlDx_x*=` Bs%wc;Q8G8Pv} ^$M eN4-J ! q@-ҲqK",G,A0h rJ"%  BxxeCAAa`XaAAAZ\ OIENDB`DataLab-1.0.2/doc/images/contour_detection/contour_app_param.png000066400000000000000000000115611511411446000247630ustar00rootroot00000000000000PNG  IHDR ?sRGBgAMA a pHYsodIDATx^ PTWȆ5F[C c61X@ffJTMZ6qtgtcb&NZup&PX`}̪H\ĉ1({9}nsNy~wx 2=pM:X$c_c[Oxދ.AD(y ؄R{3p}qV""$;w{VqA°(-N ұgߗ= ri$%%`0NYòMB&zzcaKp\f;S`L|'ʳY Ah }…z*gTUUСCx6k_:MBx 8\rѣqԨQ g9 &Wx"U M}@4bB9]-t?իW#11HOOXO}"rMB1<?zބ+7 ?nHWd|F*dXRu 4bp!HWC)r8gnY 1Ùs6D-,~[oXzi-,ay}>* +'cewbbXD+pwɨ>"hocgp/Bsqoe$}aB3-p6El/t5ٺ W#J W!8hFkZ5;BH|Æ Xh!81M} 7qg$L?w•Wepl'$̥_U &2٘Wz?'(.0< <-]WC&=gmow{|IS4%,řAx{nL6M"ߘ7f7#ضcqϰ`6.&JP,.ec ,\X1?cBZʺ7ճD4o[mL&3ys8q\~|@Gnj~sm<#y2f(3, Yn3ՠQjCBNb#|"Yf e)2#rEO8Ѽq=<A95\8~\v cFyhԁkSԅז9 ^3.ic1)HO/S21>kZ:;SKfZS6%رc eɒ4rవ"ksy_JXWw_kJi;<28=و4p+ڟܔ8MWs׮u[b1"VsoDvrN"| i7c{*OϘ1\3)CӄMl=2D(' 3P]%;m<զaF.d,ټgV:lQZT~|1 ^O-LWVצ\P+6k.,z7Fw{M+F'fy;_؂?]+ʸ,- xE1$%% Y|@p~1Yىʠ^ˀ5t-fyJ@  ɮY$"d ,]HB#"G>\迺6G`VGG$X Y }&k:QBHO DzT-z~%p!WJ†f$=Y(J~2VNae٦p2L._'b{_T}6q}\.QQ++? z=ﹻd&z0At%"{pE\rEG%xYqc#FH1n$>ߺ$0AWg߅EzG4zS( /I(߃vttt i &uAY$C;d.)Ywnq_J@?h+IC{*1J()ډ2c0aF88ͺG^=,t!_XPx>?(h2b߾R',zDC `sT Op*XYXnfM<^Qe\m8PlFJ(l[{~Apy6)uF1<T %:N@zr%}+ϵVn19cSLV3+Ȓɖ`5a55>Rߟ0{l'|"D$2f|JMs ^_:bM\w}!&VyIuL,:I"9 =k۶mHD"ܢ0w\bGS;pL(+WyQ9Gsy_/bY֫-b1c_:.\Ч8^WWcq]ܸq1nBzz,E&AFCF#G};fx$&&# śfIENDB`DataLab-1.0.2/doc/images/contour_detection/contour_app_results.png000066400000000000000000000323651511411446000253710ustar00rootroot00000000000000PNG  IHDRLXYsRGBgAMA a pHYsod4IDATx^p\aGP)L;1Pnkp($3E HqڍS|`;QIr1|cRpCTUjKQL ڙ\ }߳]VBҮ^}?aǾgsqY4i<3;==~ߺg߿o~,wՅ^ 'vtGq|r=<.bB?;B?9B?9B?โ[oɓzY{};n2yze] fƍ k鷁kQUU!l}lVG6UZ}'Z_SzwZCAsR=q#ܨ_˺,SPze2"̚|f2OGuccySߓ!o掔W]>B܁H M}n֔ۨVRntl3=M,e4___SgK0Gؼo(EYfLBGё`ho?zSMkC/+_9~y&WچAmTgm^e:xkd%TY Iцv|iWCw;j܄٭cX J?v}T*{ϵ矯\ U92ku`xO%+(DM5,Pom`j/ݦ֪܍~jZh댜e VA?륑[uVkm"!:ٝ%q`Dթn.l-vZ:5hY6X0ۺ&Y[+jotqw%}kRYؓ5%Tw>45m2϶\Q<'ug?ƹEzʼor=%5jD{poM>`\Nf*lYE]ZO3CFjaVҘ"cƪUet2>oh7A]=7j ښ a#-ɶk7nʿ`n&]}[xPrM7]o^ 7 0m0ר6ś]j֝c[~qPz6nXX׿~_){?h?ҵS3);뿂_`/1M ܦix$'}i~y^e]tQ^ZlsG3\m$k f' !/ًxxxxxx.O(جOK?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?๲h4۾}֯sϦ`ON:K.č8QZ8QZ8%|׏ב ֯ Z8~ uy歡_˵gMQˁ3$qW\:U>CRӭ|mݪPs<$G@d(Uʭt B?G ?5 /|˂˄ ooAMYbIKVVv3GQy'[@J:km*F۷ѩ=҃n >9u.7bx|Ul֧溑vE ;(F si8B1a0(F si8B1a0(F si8B1a0(F si8B\iWuYGx_ʂ:95 5ύ}j ]3/iW6a~MfqjͻʴqMtәvmt`Wj:n>S>6󵌲䰫]y\)5Ff^r[̻/SfQ7bS.gCKD5Ӛ~!~5ea@'Y0İ7d "S6YGwQFӃZԏ̅f\nGLzc1b6@kګ͉@hGg\ib-̧3\ޢc^O`>]8#:65))=TT?]>|,W>ծQ7#0ew)?wSƨLæf]LQ)QSv1)CFIŷuY\7z)ױvc5dۦ~luKNEw9mD?,~d.BcvނUSnԷGnu۰C*UV׸F}A!xǔ1sLS0#gG8{zXGFۤ&z嚮r5`kֶu^֪qU_8뾻:t_d3A6 V-YU :ėSzSvY5cz̈˔닦\׹r̔럛r\lo~C̏^J̖ r7>G8`PXg $yͺuɀSN0z$GCFaUͮu57`^e˃A\R?sŢ~227??5Z2f0ZGN *RᦛòRC9dT*: 5%݌LO_{f";VPLO,0z;?oj6ꦔc6]RO_b}ٗIu-g4GzAR44KhoC}jDp51A-O5;B]jLGSrvzr 0[K {?p(zՠn %Kp%JWc}A~cce {ͅdןmvhRFNF%7kkRLfԙWD,+3 =mDbܶ.Ŕ\r}ݔL^.3>ck{SygK_ ΔU:p9V:k{o?u}!Mϫ v<+~QFh5|w }rftɷ/LN5XΔ+f)}j*kz.U}U.+KGS= msKgžPySHU8=~ ?RC"fFp# BGn'ҥ'l0/Pw.U۶jǡOwThŎZ[~3߼rww>q"ec_:΂ѧ)oo) o5jȴwr՛r]b)Lˬct4s9aԣ3kԔՕ\1{t)]Fʵ9V ϕX K^[t@ڷ-Sw>wr LLt;\;B=.7d]nU@ړ_`c9CcyF#lNSO^;\~S}XExt}f7`XڢȰm 8껞kzGu- g6%.2^5qزC _Ƹl[V1BAjtFex^[ Q#Uf[6ҕږ^g5SN)ݵd-/|wb;~(1c9g8%c9 9%P8|]{f Y`L 8PlW_G/!B/-B/-3={l`Cy▙avkóOg8P 6rƳе4p@޲'S۵'q"cha. P(B?&q"cha. P(B?&q"cl s"pXGZ@ǹ0!:{T>mE^"oi"IEŒxq}{R3d,~[?~A(q8~7:w)\v3/iW6a~MDŽjҦ]eyCrgo67 3z-w&Rf[3ޛ1}WNs͙&Z6WnbgyC_:al]hM۞.0uiSF]jwdLs,7>Fu|o$Ո^ kM:|2Vb~8)o55sޖQ?wwnMΫVa ܎[+bzUmp6Wю8BNg4E:5 Ez|01#z'u7TױLٴVR?'W׸#y*ˇbzrxM_f mJ%kT MͺMF cMnJv2ba=DL6Tx@7^.m ե ե.=o>44'Lsn7c^sއjuJ-7oɫ_׹bPdk{yfw[2Ww!S|_jz}SMJQ=}=lSJhs}D\U~s"Q&̿{:m] -_V _T:TY^k&r] v栾?ڨVgdVՎvv]fn -աUԙ3 ȡ\>ߡUY!Օ3r/[A3@n5uu{[1u,usue>$?*3y "ZJ}4'#cU6}n,f-]fZč_P)% +t8G|.3CoD0uƺ4Y+1~1?Z>rbPU 7֥9='ݧTlU)yv32=݋Zuj@ 3=xITx<,RS w}kJ>e_&}H3oh _u!NFX=fش׵@/b8nU'/+H;z?W (|mZkS w{&Auեk6fKM]:Ph]8eпUu]m /J ͱJttΜK[hwӠѽgw|'̏(nP2uWOksYw,*SGpከ*{bm tz5m5KԨ#֫Fs6l6|42u+Z썯7ߖٷ+mj:~lI?e>*܍[Z y?ֲ%q"Sv֫Q}3%N+tyY\+l~o{U;=fAnVo -&,4{-azKϻ֥9/gٶKt^슓ςd|W _껙%8ݮ]m~mbyUw?1Yvs5E#s57 q!#=ШРuVެJ]L0~YSg^9ٲɧJkqJEDUcl˽}K^ -`ݕ \mg+*o 7jZCW(ԟ˪iaĶA@?_Ԙ=#硑P>烈|xխP׆|0]*U5N]zԥ['Q沜Vm͟oVƼK^hXPe|?~[ 705F448:r'knQ>u=lq9>Q?3$>?xK A OޓڂT͈Lq4eܐT*kAstE0qisw:R2 _tj©-S>Y}B̶=dw>OXf|0~ڐo&m4.=Q5!}nޯUwR-4'&\wI7tiо} sRm9箬L}GL٥ZkwgjЧܜ8-AkvҧVkz.U}U.+KbzAP}BPq{:6 ~0륆! TEV G0p?6Տ`ϩ.=jNUܲإjٻY!>=B5AÜp/{w4^Q'ʹ;._媻M{Rm"689oP0_= ۻ==էUhC7c&px(uwoZtL1Un囇SK=.2R;g;-KtKv=Ҝ6f]_c2_?Y7x|GFߔ7v˙>aܩ~ć6v{ջ`-W0]nӼ1"PFc۷owS{Xai"6pcoz%׶D4OTwlxEaF4Dzn5[s56sЭ'sY Z{ͷo/DTml+-3AL+ϴ7kN%1w1qر=K|v>6==y#gB?9B?w} /$##############+F۷ѩ=҃n @!pX΍M -Og?sPj Sertt}M-;_x p Yv+CnZo+2~0B`>@"ktݭ5kvkԍO@NO>-Ңan'uҍzc6=97Qjjjϻ)lb]qf6y5vj [I@-W>{F]q,ީ޶Ïwjn0=i-.V'im--O`-f:h6۴CGJ3I524Vic[-L AXO) V3+r-1OGw ]X3(2&[߉^yvqfvGYSBkiLJ䕉zܢWtnͶl#2`F͎w*\ڀX[Vв=V#ێk]"ś ]8z\uwQY| L;:z]tkޮCz }<>bsX({`SJ@Ƴ\vP3lϳJ^ ɺⰡކDT%劼r\?ljl-!& nBgn~}t8ϭ\LzOJ=q(قYIhK)߆#vq,䓛cL|Q8o}\LWWߪl~c&ݪ- zdb!Zc;߸V^9瓝sN2R nmj=K>۾۾5|PfqK Gx7y2yN ,eTKxW/Ȼjgm3uM׎nJ=w.{[ޜ.t0HOs D%ņ{,&mלd7iߡZd6GR;q-Ký ضO-Wt2koTc[ߕ["f"ʁFjY;94|P ʢhlnt ZbC&/p n,;0ΛȿkږyQػ\ `٬O~xBm5+~0Mh/Z?B`禵{+{{@~6O[P|B?yλ;S>{9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?9B?๲h4۾}tϐ.t c>-h@H)v:x~s~s~m'm=nG~hѢEaa7o~ 'MI{^{Mai.~B?怓z9iۑZXv]}W$ODWަ'K;;L_Ƴ:-+whٞU#ێkc˒W,σܴ׎ܢ6ӬN\ǯڦ&[tӇtxǵLOkk\K9Y8zԞ &B?g⤚WigТF#`*TBViceuxKh<81ء7h'%om~ז:B?>履" n~luy+m?f90g nz]wqk_Fc۷ow@\k/hǷ\<f}Zѧ%#ѧѧʢh=[bZp3ϸg)K+pSr~A |RG_WFϹҼ%WkE~ %~)>ь>ʫN2sˬow;si+_ol8ܘu2tr ~_«rvѯ'o۬4(r3+Ы^;LϿ mێ=FC2;M`Nn(RHIENDB`DataLab-1.0.2/doc/images/h5browser.png000066400000000000000000007104071511411446000174500ustar00rootroot00000000000000PNG  IHDR4sRGBgAMA a pHYsodIDATx^ eGY7J¾!I aXC,C K*ʢ$Q^Id|U D$H *dUqdKd"~O_w{}g~TꜪ>3u[UW]U~)ӟTg9ohXk{CCCCCCCF{?jhXk{Xykk_׽nэnTk{v<"$ ׿^򕯔:׻NWqkY;`E> qG^iD+i6T_?v+iEv*G߭=bB׭\8@Uu)f_Y1{ϗ+_Um^ޫ?|:,JHʬopl+gֶϩRfoʱ2f|'zJ3kF9qY;8X#w˄"#eN'g4|&ZL/t#5  JOgtԫX]+eĨ\Ֆ6Vj0޳d㢞i&¸AbCCF~/~NwSh\U|N,ºC2\%oCVrS y$س2~ f`fNĀ+gsNegl ,1\&K wM ֺ./cĎ Oca#0oVuXa+DvY)Sc\殔gZl^o1 &hR<6"^n[k_Zמ?׾mdv50&[k]l:,lBK%2{B< fڦaew:Lw-˲Vrj,Ly!x<bX"zk8F|ZhYk)` +6UƩ7#tumv Z!h2SʙnS4w_Itۺh(k4!:Z;p-;0s -oמ~Wu~4FŌ XQ;0cG`,jc rgwhOseX#-LG+]`gs+e >eLy|hNGke.pre,ƕ MD=ALZ,䆆]׻uv\ebp W݆ :rjomLЎ\e#\-qU] Bw$ʮ%,9m()2wB)3à+9'M9?,Z=~5a,r]i]Ax+x4$,5Aq^Ork]<sy^HS:iluV{(bR6-Zj#V{.vEd+srA0oQ)K`nd vahzccȩdM[o <շ%er :%,`Av64T:t\;<_^y_ןqɏ54 ع.wu]w5K]ty]!Ǝ<{ZwTQSb0gΓ?25ur"ac؅444]suWo) O~R{Cyl':\͛3ν~g>ۧ\)_]l-m"_kh av{CjI a2ƻb ,0;f kGz#ݴL崓0ﺟԍ,b%cf;7i os\l9Yg;~o.7Mm5/ry9=^7M+җ{VM(j3~ZXT>{g_`~unO5,J 6fY|&phhF<+ e,&"S0;Z8γ+0so{Ѷ/?IYToTjΚ n0 ,J1A珓h͑а>p߼|Weۇ?Ѭ7-WiC@/O'^Zu.{_ܳ\kW/3Gl.߾?bxqO-7~sN|vw_p|w;ޡߺO~+}ҋ/X_J*#J{:S.3;&v&-8 OU3`wClX$LpkqL)gLIiΡA|3-w;Yaj$ЋO-3F{r3` o #h3>I] jIKrweV§݀)GOx.T|21jyCdZ1ڶIʪc9:v\3dK47Rx* b0 *$rݱ\mK?Z~i{;>r[Ӷrݠ/_W&7?+y-/j"<9+as||VТ {u< v^9s6׸/< ^@\_.nOJvewN/_1ͯuBNc归4ԋvqIY1֡m뎗J _Mt,1g(ɱYax['ł&`dY-PU:Da155ge&- Xz֡up mLd+ڕݰQ'VY0qeyް\oWsO\n+#ޣn ?7p :׾|qW|yVQ'+a^Wkz$y:?|\c^ wgVp~]w}ӝ4x_?U4g/Ncyly߼kS^/h57~q;ݡI2?jW> r^mS^?fc}+?Yx_5Q{'u}Uqx|g`ٹv5ĀFXs;Z&[3 €)CwHszM澱XnctXҖD|3/eF>Z)j#vNh0R4JJ,w-NLY $< D5aQVfPo08&{S?V{kq+XS>xzΞܧYn~]zQKN?`'ҭMl!٣,./K?QI~t񅗔CuB{fL]-3?3-o~Kws?sK/sw#?:O9)q;Nlq]6KrO荿e]ם@4 >=[:2.E0(5w!ߧ?X{=^ 'ޯ7_ǝ$Uke?П%~W?h$>ᾑyl$Vi}bW}0xVv'Xeu8v褮nWoΒ<|@t˲1BbZk N!£0evlw5)',2 k逝6 `VFi0혶6׾^@Ş۷Oxk]ZiGZsYOo~^*Aާ~[÷}%i~]>/*^gAc8CPyqC{lŚzܯ_/RmuWo ]Fou[ua{FW|_;ۣuYOlu߸8gշ{fu@^M}X#1Ld<ȧ2rkA"ht:ZgX.WezLf$XVLZthX! &-mX&so|#h?@s׷d^ur򟽰( k*}o0+`><O^;x?{;s0ܲ\r%}Ίѯ޿;WB[Bg|r.ѥa2꾚dաV`kgl wRw[:6|iŰ{+'uYb2zd]"H72 m*g~Q–z**90!F=(VM<[EʝﶩYO9N'Ӳh1İ{r-x߾~\xjh0zO~}F7Qno-Ir[/'x‡簔MfDTq0LݠÖ;;?l:jo`z zz矹R'X%n{x/o|7j7T9 i?`XF"{r)yNϢ7a%6-5zHτ~VcSپlM&aFix0czXJY8s&x5'lܢ'{\8 5- oNikz-y%.4T%d\(%7Y|ԑ׼v@ӣ2&ARCî_S!$8ߙwY̕?l v\⎾ z1&w'ֳjac&c"wNoLVa}8Z(:aP_uIhv%L{ ar#ѯM"0DG=|;aK>[{ϐELŚ̝ Ϥ9ic^+g7; :lPq+LV.Q^(ihYX_۹dFg+x(Y}w܆:/Qv};[Nłs^=bYI2's1cD|@,uAdE;cKZQe1TsrJ٭A]Še r09ݰ bpѬDNroh]1u㵽+`k~}ɌX VdvV'fWGRvM$T5bN5F:J\UѹoeɩJQY|˨*ҾctZZ8e&I0/gel!r%*  l{Ζw> (s2-zT L&mYrk\p sn>]WY.3Ҵ7ukɤs 'y }ȟu $Ӓb2_QC9]r,^ܲ2 La,FюYfͯa7r1mhX`Bh^ Q/N(&9f\,B;;H[#,5V̦`}|WFK\+7uc^)HKsvhbn(&fXocJ٭q ek(DQgmTZ )<9 XVtXSvvDҰ0 1+` };]d˒0ҕ+w)́ޫFjFtխ.k`^抗ώ &gg.yXrXm+f,^_wP.kt ʺZ*n&V_ K$VÒ?u˲oGkt/jDWv\ ; yhˮU uIOڙ,_n*-R6eX $%JG43P.j4Dx NT]XYӳlhX% 2-3fVgî6+ Zr0jVG%7ԸYY<ȧ]`zlRٮI[+ABa b:6ݜ,: -s QyN j_ԥCbJY&2c40}a 3ɰ$胙cweFF'-;;KnîNV=o?mhhhhhhhhhhhhhhhh؝p饗W-а%vsPCCCCCCCCCCCCCCCnjhhhhhhhhhhhhhhh@ 9Za7GK5444444444444444h -аcOVrJh'tR{g;b鱳ƎBx]]c}k\? Ϻjr7 :ګ\y:׹N~Pw7UW]U>O}j׾֍O|[V堃*Ї~W>6;{:[/.w)w]e]w[w_)]u{|ednw[yk^CRp;;N.z׻ʍo|r[޲|_to^>w4^xag+ykC\W'xtz>3׾v瓫]jkëG{缯2|;_GOot&7):̅~ֵHϟ,2Pxu{_拿+N^d z0?5MA;tRKZ@!4&>1ttdz}[ߺ[-|E:<К7"]sCc]QЁD{;ޱ%o~6o'эnTnzӛvל5ַ~䑭O%13dK>!9"}UaM}Ȣc<?%>uI>Wu Nuww\z'89a!RP~P3K03͇;bZ,H-ʃzZL;6trdbY[j(GzA8㌭V'26l9](<%x;ϕ,~=q.mo3/vIo^N?/}l޼va//d`QFg ^oq[O]Gsgt4n۶ӕŃ>_u'v]wnڴo~s+Mt;;.';\jP@xr"x?կ~|t xs`qռ/| ]DϷN$(j|J?'W9ё<8Z >OC0@z2^~{}9g ~CmOtZ][sctGdX'd[_/-w=yd88/awM-+dћq~ 6Fo?^<(l#/=5KpGLÝq >bqy+FX,jSQp`(:r-W^#m:o.!l׎Jvꩧv I윸 oX_<.!g˖-]+_J0uv4'ʾ܃$npv y+_Ygn߃w A,q1 lt6عƇgr:.w|"d 8~Qw'@}CvR9G?.+lB.=͝DAt c9ZwiayO Ѻf}.jƐg1過~-uGg} ^u]IŇxZγMu9w\W!_ql}U;@՗D,] Y;z}3'v9&?C[#ΩJ_ѓ'$ҞuAW;Ν|  ƢϵC:/-[t;ueAZ|C0,'tEIfOؒ? ߌq=Z!h7=(yTq|#ͫA9_lcj`amև@? X X`q=wXx˿/t{5J&vfvx\JeI __??v̽=A]I/0Fȩ>.x-MZG'4֫gzի:['#_0,IE:>I&|%R@Gz{c^-4\ DlcQȜ,|ȁzN`.M 0^[ب/ ;`z烈>kR_qcZ>S967?AhkM8}b\j8Џ.M_2t11&6$zJBDvvDgr#' Ȕ\QZ~1?/9tƲ O0YFXzDVm65.xd_wОv:/Y ;BiGcR6a>_΃Rc|R Gp!H gWDNZ. lcu-*/ꔤ8^ݲ;$:$U~~{UKw{_>q.!3\_w&G:9HG<>S6APh7;$f"\r .ۭ&&k< RGМ׆q "z빯1=K:Ach'ghδ9p2whgÛ-@:!B>%YVch;&yP+-΍s9sx'Qj?mIe>:;N^{GAO3lX|I&ɳ/cXF` u!> QO7o&݀~cx'8k%Hjg>RNY+ڌUo _yB+!rj~t`:D'LG`G˹9#s?ƧMXm k|cgzub<kO\Az>3VplMKkκ dKLvkBm64xtGc:oL|E'M?9+DɎF_8fctRCtW6fw-׽f)jhhhh??vsA&?[}#U?aÊ! N*4쾘$<,`DF p I=trPh>A,F;b{U*wtt.)Ozғ:Z u[@#a"0A؉߯d=Mx{۝ 6}3G)?p4>=G0K/A 1Cx ,܎#>]N8/;KwUHDh&`MY A7ؗ5~]y;>^c׿ۿ'>3p.xf ^[BH[m!~K`s #AMpʕWyxK]Wݭw.>@{so+*sN/5Ǥa"x`pϷmWv> +#6{O#6D9J@&A4u׬$B3?3ݮqWGw}vH/hlI$`<|KkY>,ַ3]!8i%v@ %$P%Вp$WI(XF/6eS)EO)#Z %%C:u?fgc] v+ n|l÷^ƧOOGVpj@Gxx 葱5'\{k@1]l//uZXc؄ǑȲ]! 词%j'8]IP[uxH ZQtu$ v5>&3k8 h_Bh/tlצ>ݹY ^j}C6Dqe#a@?]__U٣|kW }r[5Z^ Yy_ohhM{=\H +{\:eUntˍ~~}]nrSnzMh֏>0)3<+x.ATh_uYm{ZAB$8P+@tq@Wӆ?]m7c49zc@u{]y3%N9\v _BĐA~i =iZBBBn )s1]rwJ$Weۥrܧ]]P.y0(6sM51A]v.(|oWI qA 4#q=ֹSFaT_=<)|QI'TЇ9 vN=QO0q/wyU,I 4G^dԈ言s0>pRvLj4RGX W_xt"OkxD~qYKO|_0W]87;{Gx$lK$EM:uxY?r-d5Jg<k =7ڍWYoNOȓ s>u=Gؑ:E?uZ^U.ܕ]wpl=r[/٥'>dg'#ʾ]#|32f ÌeUy-^O;`zm[ N ׿jEUʼFZߘg?#̀ٯ _&s:.] ґ}/rB@uzUޡ_npyu//7׏N??*НKٟrݭە#,z͊ߺ|;}YeđDZJAE _J%,?dq^!7EI@GU;ȧdM8BbtCm,ѐ>ԙ c R@3ݽW̳>^=yvYغx8%ls,;~# ]hy͹z،NseA ?ǩsl Ժ(dq!q:LBϳ^2m|瘌訍ku@x% euHܙ;*h\+8~Qi >Utŗo}I8-k %ß>:4h&/z+@>tОq')l]@D~=ʇ޵&nav@{:c5hOjOF@'t?1Dv=Җ2.<}c7y\+QaINm\|ƧdjKBI{|- :r5Z~ԮMB_?$s}x37j#:εZ t$ױ?Umux+""]M F_&) zK/B?Wk⾾mx٧^U6aݿ睾/_sU_%EڭbGBwб1'ɒqm[_{}wy9 ʧ/o^'?G.=zgP_{bPEKkF;D"~%KkӦUZ-GS煝Z/yftLaiܷm {zn+G5!vOͽ t._9Svv-sY%4r跌5;^~N+:Yصm;K;ҿFO Ep߲eK 4\dNW^{XK"ho_جe^^vƉn޽ލ\7l:!nû΃;!^˗,;abg "4*  .+z4AxD }$=\kbis9N~ˇ>rWtI ?oGIҸFv66=E?sۿ?N.}G'tkT*"&ƱJ1IiǍO3tcBWzzO\BB+iv^t3 c&G+בTeO|;: p.TPYo^6F6D¿%“2ofsz'֧MXmCj d<$1u7S# Wa~O>K_ XێlE܌Eh|ܵV(e{ZP"o|-zZ5c69GK]t`/^Y'WC9臎|9GAËn :.o| ~h&)eLJwZ˷o|Ny裯WW.-77ծ>.=,Y [+?'?sLgk9.(]cO?xO:tlK:i#Wc*Լ{]T-'>>Nˉ33:3 =g.zgH_t~[O3aP<ϜٰhGR>us9i#{7 SnwzT-N|~̗=^eG;1o20?}@eפkyXȤTv> ^S5+G"?2tgE包$FqQ{(c$kD%wkS_K/)Z^O>{5N9֦L0:㸫J\=_p˶C\CINs}x\p݃Aǟ:ؿ݋Yi>7,BZgY ?PJ o>-F$. }^_?vITIw}ZRʯo@ "dzAPe7$!;$Om~ZEL,L?&m5B&HIόa{]XZG1^έh97 z|$`w?}Bo2ѱA Ȩy|4kOtMc}beȋ:Ƨ]W:5~yp 7}asVUBwkvtc2]hp_"7^dh1:ziCc eM[Ӈ|ړC.{V =/9_1sqk٫UIcr^npo&xg)W9 ;Q{OvQHsu*hvP$aczˮGzj$GÑx>}~nEtg LQ~';6!A2tقO:v/Zͯ G7S"y^^>ma#]3D=f]!p.,0--'^ȿG+*Еa@1pIoyܥZG2slE~2ߗŤvU}kuBq %Ewv: T' W>~G§>m2)]D}}!Ryxy{^K`Xo7Oay`0Lk|<Q#m0X@f] :ezn5 PW:= q=yN%S\%Lc^4ٕ#1D+i$0_R`я7? hnf$$$x^+5<o )6љ?$n|w$1Wt* ؂fzZdZ2H .0h/Y>xl;> }չd{R,a?I]M6LGtkhA0Dv@FsL:6nx8:de oՖJ|F:".ѼY'Xe=4|ݎ3gd=FJ>"~c퓔UI]j7-7]?kO/Wcr߹ݤO5.2CʈTTH$@z ߃P%)FX5vq%(=ׯ Œ|&{P;|'fW?8a/rw6m~6?me.儫 yLm_^R0+J$/֬uuJU5ؿ~ e L|a up$Ъ$ ;~N?EΡ3o$iׄ@tWU7}԰G_t򊕄ĒBHOM5:"_K+hd"@=H"[x~:c_|CvIrM_siK? !eW^a[KysBGI)ßͥqo\h`:?Z|987_Y'ڭ rL RGC} )s&sBj>:98jſxdNWkY>JX]>x8f ;I nR7a|c+=qxGm=%c's}hc3-c1ׯ x"_t IFª$~#nyZ9FO/os#ы3$HnKkC@J%~%nO g%ߔac.דɝ΋Y_;};HPl;Ȳmī}^ŧWAuߒ:S S͢^HzrWk"{"j,i+ɥnQ3>,( *x;Ng5ݥaX[sI| HI%l=nJoJP}Iv7JQ#0/iu-욛EʮCOR%'ҕ} =,4zhN01k̚otiJ@"u},0A`=E#肻>]p"x |l7~7kn; c=W|ÿҳõ;vW|A~c.s$s|7sWw,~xܡ U"FIb/I _q_..;w$`F'^Ih{%dّB/DM,xfv2O։:K0o|GJ@N4U}0=33?lNSb(dM;ayme`;/c~RxD'tl$JhzThiMm$H2$!ЃȅãT߼~N{'~]ǜ U б{=8mG{7dM MwtjHOLũ`>3*_.oL/@'1=]yeñ#6OURc_Y${E[B.ҕٗ+vBկtr3Qv#V&ƨ2}(z[O^mX57)ԭ|;`a]H?\X0LF7i2KfaW}sv^]ҿ'RW?^Qi~>˧嘳{RC Nwqv#9g˶mۺW;ǖ__ {/Cn 惓'ں CݾݤA>u`ߴ>u@$ ` L!|8E; X..qI$ءDH̸|^مU# %zE'$zӛف$09I$ోGHIvHYP'c͵1^s׽: *%y,@/F,IIk'B@l1 uO/RNmh肎"[\Z >@&1Aduh'gDė H /t}v}tFv4ƇcQ\1 Y.qMhO.Od:r{bCW Dqe#a[nwnaO-G^r-\ˁ>$&dW'r$Ii^t _ˡX§Ni0ʮZC ^e ~?rxo{Wރdmn_/7օ9; бGRr7lSt?d__߹m<~ї,lS$*Tχc);Z5l5gtCc9^ M~'E]9kt5_!Wnqg{[{yձ[?e'|Q(me_X1M ew`.(P{ ydWLïdzJyZO28@YKq h/4f3E2G/<.0߲ws@Fxܵ v$IqJU 풻.;W$$zyE 1%)wà $ V*I`][^MF07t0;^WHZEjs-S[:9)H'a vJԁz̺sse =RBS]2^xwdG}tRb#І'1gJ1=lq8vXS3@5mZ]j4 ؏c>wҞđe^0^6׀k:uCsGCw 5h2d߱N _|_Ǚ#v!tў$N%!Ss1sc\Hi٣ꦫMTЮ ˫vG!d{bpد[.+}n8ˈkI{cww8=|V/;Շ/\C4$`$FOU+Kفst:zM 3 OvHrHLGVX&/~q [x/v0v#8L2N"ɿ۽ÿ3 cu%=ewDWbcJkc z%8~G?]_mtcxݜҋ 95u3 |^@_/y,vq-ɧ2.Z3Vmn dmp_c|F/khc;c XP[O xCvs8W;Ъu@/I>`n)6Clk^Y̩s'aC~ z2r-X+7Bt`Yxߠv.IDƁs\KYlү/T;Yh^㧬ךvIаlԇqKYwx)x]J|Ơ&) 3M544444,0rÎi)4Ƥ>\`:i`5|]92PA@1H7 @g:+i"Fcv#a * !Do;wװW@3NRKR<|ž?k`^":+[31{0 zH1"~ }o9:{E7u0;$b|Hоm$1%מ|OC|wK̡#J]ELv~ ڝ8O 5F>~%#Y/2%[Dc CJL{kӯl/.ӆNV?}BQ7?>mǟ>JddsZsk~a++~Ɲ  oІFa5#4/#=hwM0]>sj)/[$ac;ZYw=97է&W1@7 r3Od8W=w}ŏh?җ})dCI ,|"Nqfn oF@A#0/hCEP9͇;bZ.>\?({{g"~au?A 56,HS$jB~tӗɂct IN#>@GF!)>miB1@v2S> ͷd|$Sۏ_Q}6~sc&IbƸ}\dD׆kX]R6<%iȢdݩFrK7?#-ݢ¦ƘQ̵j<"W?r/x!|oΘ#?D0 px?KoAO-dI|<ϕr_.[^|%<~_;վ ~?˙IDŽnroFЇ?}JM9V-jNfPNOan~׽u]E 'I yI2 />,g?ix>,'']x֏,??/$rݯ0IH6_Hs?,t޷6<p^IGή1I X-ZZxD;(x~;azX;.n~roxO J_6jCG|H;yȆ-[t<V5_M7'̻qhKpL&8$M_sl<~+~sfd,^|VwdWh@Wrూ؇6z?/A'ڬ#%BL27N}֤D_cB|n\O֐ zUMFcȣd+>SrЙk2]ndg,9^! k&s . |ṄcC _]2+I+{o,Ӄ\cb/>hAC/r!&+_ @ 58tۖ7 mKMI,P<) 3fZ6%r <I[Ѧ/QhjQ!!D HHN|ka.__ݮ I~뷺 $;<4v ^< v>,$1`we]ࡻčD!gw@z24=3|V|xtv=WLĂZ2YLkX7^:'?Mϗl6_w(ڭDO;|#E+}vuKzue dKfxh٪`6c5w;#_O'2Ğ6;fWtT!haIM k}3>BKw|͛sjkx9?x?cObZe̋uOqHI艧s61JtЍ_K:ɼ Z|#Ӝf37r$Ztzy@; lAӦ? SB'h͝s5ѩ h vљ-tƏ>O/~|giÃYf}'S|I&t'>hcCCCCCCCCCdyǥ J/H>Kec?عw'Orc)_?o* 𲗽; h`,gr ¿ijAC7`  Eƨf$>'~=a]6I -^5s@]g'+]=x ,$ҍ :rN65<^NtFKcCYiGgO#G?Gॎc z)kuA|~hOlOqFkA8Oxɍ̻$vwM}&dV|25֜Ztu8\Y;\l^@O'`#9|Q^ ?z8}6z }xZV%mЌ+ -0)R)cTY+a|'Oy`FuJ~a</$cGDDD:ѽr_^QP+~ |7{[ڍs^ʮ IG={e̮;j  $^Ae$8$3$]7tΫ-~B^nI~]KHM AK@u)X+< F \gmf(ک@)PC aBnD؀Nx ۼQ;.C0Yd:&Sx$~|KHoɔsslNlGyxw%`In `Jmx#۵h>@^Z,KPlL}1_+㌉״юSkQ>ȏ|k5zqmSs>tG~R!?49f o+hKZtuN#XBڶ,<уl9$߂AM:vDwŹvts=k9C >8Y)]59hԃr>羱ʖ_rN|_B~bhVAK54444444׼w{ˉ3xn):/o'v_վpiqBs!ABO z_/1R [v9羏#pM7 ݮ4vc׍Ă$=H;d'D_T^Iݎe*:Kr^W-2$:M'pB~dOMdMZ7td 2(xMpD ]A7#Dx#Jt%7G@o7Mw\k;xKtY$#$qLvUfoz%n:sM?v>tկ K7vYcͷ|gFOӱ~<_}yR0@66j# +S{ReE_y5J6#/}@WLùuxKk9 ;օcEAkYkqnǏ}ֿW?%xQs=cדtgo|C6x͵N48μ86<y h랯E2̓9] hϜ')+~t_._m`},a_R̪}yh >~KaK{;<u##׵ 7vHv+\I~ح_ДD^vH|#4dHXHx}8f;:#t,P D%Ff'F L($) O$j vZ2|eYl/2SC>jv1 %Ȓ,|%zma=dn (/x҅H1916CK7 htԑ?@x-AQy8aԼɎr\;{b7Ez&qfc5&py3Zv36X󩸶\ Zr͂s +jdǒ1V\s|֍sd8љmIm>mN/h".h؏)십| xeδ+GZ6I?0L+9B/vbrtjS QCCCCCCCîgƓG 0} :4Xxd֠Gu萶xtAh3>B,"!I`.%1>OvI>xDIFxMLbF@#̑4r&/ħ=i]$ #Ht8/@XjA9O #= A'A tlIh>ta#r %.؋|4 "9Fg\IW[L1<ݮ oW^x-ϯyUN=;+6 b z z%f>Xsμ9;Dw臷v#;%̩6zUcgBIn5 ~ǒ"KЩ6.OfIto$fy@AZ0u֚N_֣s\N5/(d[\?l$-"[b\h{\Ckd?%{oGotJ6:$nvNEv3?MC:K7st ^YxI=6Fos5I < ˇCgOAڝR.Y$Zn$t;N=аsah9ӮlF] <{Kyȝޗ-alOH5_$S"Mw&*G}tT㋿|o7+pveG /V ^{6LiCϧS6Y?}/ [m晏.?_H̎ά#M j2$D& u LTgM&l>#X#`)I7\I$xckxg=mk F6IғmlStAGOcJ8kεCo׋E:Ǐ :N]NPG?|]{Ɏ=cGd74:m ad$c͵y 8ɨ祶͜)xG]5y @|+5*Qs9QoMug폞@siƆ5C\ <*jeg-K^`{m @qX*<3m%c'~qCPPK$Hfb?LN7A :}C;!MVӟWA KCBCpG~XE vؕ XcZ䡣@mC]l}!KA$utK$>fMx %dIxLqݯ'_wytO?Y*|;4}EuSWY'/}H;S{sqIXtYU%jv87߮ c聇kԵjmk }%so0}ma A_l:t[Gf1Ѡ7^ j4`suz~'Ṡ>AWV+yy9f>G$G''>sˇ<v.< CQhsѰk}{[v.TQ/S,Y<6<yC=`Ft^#c3>I6^tQ%!]_H߿ \/ _pG_zJ@BR'!6y}H`+NtlOCRH2?Zp1ƫPd*<^ٍDWI'<6f<vƑC'gUFq.eq;϶~~%/>m ^>L:]?vB~8z(|UvL#_lyMv@;Njn ИW;'C?v|> ;;N1VI[y@[3|"8Z}CD^`m+|#D˞5>F\cY@];tD+16< ћ[۲jf=22c[uB>"ѯhw=c6:[y3@'цOɼd؝sc966>2ޱ*_I/7wκS|R˿xb^/}LU_0}{($ = ނ@=>[Cu=;3'1dkmx[<~tL5Y9q:>  F+d'?2+8vqjhhhhhhhX'8LB4c1XzPc ax KM,o9D? XtAhLtN_%@ȌW$"կ`X;5 @}Tz@=h L   D%@ix H@Gb 0{-_m_A/'cW$?jJ񦃤 -P׶Fg򷠚l5W򋾎s_81Yয়neୟQ9| < )6>%r ~e|>r SBG6J1.A}jm?a? tƅ7|7h) Ggm;և/rc.XƪO_֜Y{X-n_s#8ry d/5ӧFZ%Dg5opE744444444TL0:kxN3f-P%>+twA@[hC\Mz  B[JQ^)N@$H>lt?h.i=9%IVB?9 De5/;]|Gڳ>ǃ,. +h. ĉqOos"kVZQ.&xډ-K^m#OJ;=>3;=%eז_C/ |# gIȶbf%"lvوszf;_r̟H_Nmn=Ze`3O6<űKjŚr&7pL^c07jdzAh|G/rȜ]dDW-4IFŒ@[ @aeӆ?$sݨ˷v{cr:0n;anv{ Z>z΃~AEQHapZ[i/&h@G7 juA#S^!K\cdȱlD/zG }vHoJ%AG{|fQ@Թ@N0+A>d' WČF5 $ VsIwfc 2jƣ1k3V- "X$qbvxLDđ??tkw|kk|`wӳ[@|l'a$&˹n-go;mi5XtYkLJ5ђ&G~WdjSk'K!O6u x~}GQI_lasZ@z`8 X;+,~ӦogñvкԊuǮ)|$t^<3 Xg1CC׆Dk~/я=1z<rѨѩ9]d#m|X^u-8m<8<') 2NCˡQF>7444$zQ_v`{Ӿ'_TNwlwSr\^|esC7}\qGo544LiV=+N@MLxUH$p`oL'tƂ#B K? _P> Ch$t7VGp~]Ї>#83N]iPGuɎ'< E`SЫ~c > ̇`UObG~l!ëO17vLa%^@`-8d)DVM5sD#~Z+7J*ч]_c؂ 3>kwS/^c_5VC.(l9|z$E#W? gv =Iz V%blt0@X1Vc<6Ahr7Ѱ+T{z58wdx"/cmዟvs h1W1{+Z7˱GOwl0>,;wln]_֎&+e s WV<z5^;kݜkKBD:5#-hrӕ;~;{dh˜o6 繦6%7_odBd:ׯ~cb[憯"SNn[?=I r)ew @Sʶ ;}\|eω-߰s߁Νہak9J4lt/mmuW mQz)/'1?23Ƣ?X}#tvYl|lGtrFyb]/!Ʀ߱WJҚ>ȎAZGr 96X%'k؃.69=9}M }sѝu't|ٝ/J߉N*Owk [z5cO[]@ G_hhhhrE 䞴[c./[kWIx]{Gc=F[-wt7`A.AsaӚޕ P]a]_s= `$$7='`cMrAN9 D txd_}sgѵ(/x :[=.a Hkxպ8H}sA'?ek I~A'|9I |ڔv!{H?xE>?MP "`$~# zmmH%c;J*0}]VK}#zޭɺ|%# }oyL bKNzd*ړre݇H<`ևv'G =9Zumm 6yhRݹ:5όs{ׇs9Zd=3<=c׈tt' xN.^tDC\Shrׇz%9(a^}YpN|y$߱56@?>6tJdvt}ƣ5^&)ҏq%MC?k Wk'oǓ=gmS/(Nz7,zMᴓ+I'Z}WN{IsO}ʱzl544lpl.n{~a}Oh~Snrٷ޽t>ҳkW/8=Szh٫ac->=ǧ~k߄I4lL bX[ )~D|4/cCx8xc#Xh/w/5xx~_$Hy]Ҏlfg${nI" m)vV+ b;3r15|!+2W,%z9I)ZO- %@VM72|(ڇءnsAt#dH/E~G imN7mljl /)|5OO>01~<V؄^h;64}5?kyhsp/%(Q@;X?vd /1.Ѽ8G \;=hs:0:m#$;]璒e~\yڒ 2mQ3>EdҬIwMki+q}ylK}`K|Xǒр{Wcr87ƥޱu` Y &)lf^urҟ?rZiS^L}#߮η.vӽ^_vDCCC-'^Ի_vJI zH٭1^m-n;7IVt?z< 17љl}oIe~Vc`~c֖ͫ_g 0@?rg~w?;y[Ͼ̍qhQbDZ9MH`$Vɸ_~“_2On<1r?L9O  k*)SƢ[vx\k6[Y#5hoFV瓔ޟ6?2Ah[?zY9~8nîJ #嵽Nf[/(ŷNas<_NO}AU85^e/}Kc>W6ا)2$v6E̓9K2 - A7zk@/a9&XGo9^ >W+5Arzײt ܆s5om8ϼ:vs>M_Dg%C![DkS15ZȐX \h#ǎ?k /7dG1tBBOĔ%|>ݳQ ~Jݹ%i]{h]37]J']F1}-ӎsՁ~~ZSeؠ-~ OcRIF$k{GY/wa˦ǶͿaIlRNtyy[s`kS% v{Λ?/~VYUr6vGW~r#N\"j N j=ù:E2^{?1$*0xԾrAlc Ia ITؕCփ'fK"ၿ+Ft'͛7w@^LJ_ # F7 I0OcmtCoG&$Y lMP@H 20G:j9g EG>9Gk<9$vS—R>2?< k-H0K69A&]:N]!WmM%PUƯέ]lڍE+;搽+;7ֱ6 u[]Cj^DC?umx*;_OWcD&㣀W%\\Wrirnof<̽9sr$:5\Gv",<3׀Wl$j6Mld _i2ޙC|t!m]ү-v9GGү6?l$RîrRٯ79{9;l+phdԡ^oB[Fr=?A{аqaOx|AK?@@"ùc 1tS'h(9׿?.s߿Վ>꯺@1zIctDH$OkIH@8 ( >HsctT*f+]1,clv!Cݜ &%DXb'ʡ40" OD?6v>]I^6Iy /揞WY+/5z1^͇JOA6nd\ـyFz<3MZ5{Cl^s5x m@s}8%>3 }bkK_c_[\\Gva^k D">Au5Os~8=HOkOsE):k~@o{Eşᡟ|?khhhع`Fs^涵.H m.v-X>xre}Okhy<ƃ-О$y) > /ANPY BF5mI dEM: :Ԓwݺ]=o u$u$gf+H _.9Ox[NG/G1L'!IuCpc|Np'dvCITK{QJ7қ\#c 6#|ֆwHg]C./ <<s:vظ@[j >>擬a5|)IEW(I0W7<3oI9d񛵮t"v%v2(^t> rY9w}GF|?6בOW̛unG9}\A=LDNŇouZWtl k^dzkz6d;яOxfu7l:ރ/;h,7|>9眳/r7lv54444\\ >u <&P)0 8u={xXw$ V|xy=emv @80>:/Pb>$L|HHҐ#``|#Gzo#Iwe۶m($XƇl2ND$x7 @&''lĚ+utx%HOpБ7t3 xvL'=b$t?)s#`9I_z_+Aįd͹DB:=K|}փ[@@K-c|}߽`V?+1EA.@cC_8zjK16@;6]R9Zn8SаO?:~&񵄊u+8kԼ挷$A$yet1ǵ,hACc땞U5=ugnjY/j{ ^t&. ɏ&)0ojhhhpyrXϤ׾Kc]j$A.$E={8o `)+r O䡗Hp'7VC.@m0A$ M*I-oy[:X@C!y$HLHtk_^, 9@ $ʿC J6ْ-}j y|< 2%b&C &DHpez4O =@6N_$ ||>$uf'Kr,؜q ~a~t3|zkMzs&~_#|/n7{IGcJ n<$~oA:iϽQiN*ڌ'3&5:ԧ/ >^Ȋ <} /:rL}|btז$1Qv54ځ]u > 4i~ 9윤ɻZaC'{ks9uh{CCz|̐xO@qyubw }FqJNO>~OKL'K /BP^,;r\GO>pl {v j&08HqLv%̇W$<%NWhLI2k>ѱի4ddW0а1kvٙW` t0̳c6X[6:1w6z+9tG2NW|L&>dCO5MBx1Ђc}du_/!#_hXzzd OƘ ~cw<#^jhhhhhhhhXe= f 8my8/0 ɹ"D $Mp x %~H/CC@ GPc^߲ER+?7]D6AԻ+I([l ]GA^cD`_>3.EB `$K_A,u`<Xg Ho2^h='jlO_ }$_S ME𝹢se2c+=61x z3mIXSx؜_M6[3I> H[o B| jh4v?#:? -֝]Qls&:&[EGc9v}sЇGDZqxІFȰq]?)~?^vyO8V{vco,~$/<6V$+9$TxQ JwiWdl" !QMovs%t-\ve]`3W$>+ ` T ВE^9_ˆإ?%sح&K`(p:5d)_uzl|6~ D_@V YB CDgs~N&{6vOB.~Ə.^x8|ٞhuk yis JGj?eȉ :>;MD{6GyI^>zH@lf5{߾)bi]&szb[̱yytӆ~<;tdx|Nxcs5?z4xiǞv$':obWCYt!W;=7l$PCCCCCCC:Z>!| yz`÷>%5LhyBdjG7u}{wK)\I`Й`"rD(>LG7Kz墋.K6yC*.05)[n-o{za$y|v6t<ȍ^'Y|(u.vJHo] C9Jd'J^IK"# 6$& vZ1|&eӗcM-d1$Am;M9?\mRcG֟Ps\|8, c+Vv_څe\-_;>/`FO!eԠNɺZSI$]d]k~Տh]Kdk_!#z>g~KXICkI5/>jRt}cɲ6Ӝ_kϱoZ"nskE4tt_2Okp|CkT?e΍ß=d*f>rˆ}2j ;'ԓjhhإb#a=ۻaB[+z_öpbC1=!-"ّ| / ~u%/ J9(<1)%uB0"Z=.$hmIAЯ \%R@r|0$OWT0O/~;d{-_įK?E6Vv6pJ$'z cBD4=HFA@]"D%$_d^s1^Wml?hA΍gvYacEu"?@O_2pN.Z?K_tNc|o!xhKq}>UKX 0_ƠԎ낟sh>B'jj:&˚Xc~J7m_Ҧ)k2zq)&A%9wxOr 'k-7ޥ/^AKW|JӕjةO:jOv5}ђWϟIFBK54444444vLK? /|P]] hgs5IFЉE1]4or .)yI'z O2˜:N>NJaHXFG\iδ[`z>I@5N?}ЧvsݨKƒﵩȟh\>F/A_/>uoZcCǦIDW=]|Yx6k pn>v>x듬8+&) -аF={藇kA \|!AAP|?6#O@$hH%RS@)hz:@;J &(<=:z׻o S>of>:$Ë$'С~A?+ \g͏]t"gtK?t\#~m2B؀.=`J_JуL<&\1d9O gfG>]Cbbcg:Z6СQkKoKpNs>ƗGgP+ @|O9Fc~q kO2>E\S+Vu))=/}I6ͽZ}觍 ,9szc ':z#mi'C0:xytsL;֗ud, !<[!9FVkScC}=9F 1l$׿ -˾9wskhhhhhhhp),*zz-I!XrC F e)%4f @C~sX;e7BeNJ)jٱY-zëE~^׽::|$ }>w{=$wP)IG?ѝbGS5f$O1nJ79h̉lt6'S^g<_uC k"~VYNq,.p=v6?,sZ3Z#sIы3Oƚ7'sׇ&6:Ƈl=s6z:3lE]qMhwn|81c zv8FW^2Үv]gkhΆGOo:vcZɽb JpaDŽ@C}#I!8< 1P;7#!~wy+R'ٟ?z;A?} TlN4v+裓ha'?>A(!yd/cg^G#On^Ww'sIs0ָ Vh0w|nM7I3Aw.g~s˯! oA_Z/ЖB5cY3O~vY्/טȱ|`?|fW|$h|ixg;{rr8V"랞8Vc5{y Y+jj],\:6mwo֞Z(||dk}Ԗ{giɢޮ!5Uvdv[sЃ^x9[gc/C':kb\FĆ<՞qڢ@[)[^0>v8v a\awGw5WkI }.0\ o\@"BP6EVpFCR^tPh~@^ P0 ϲK/ @vdj'_G‰\U+L3sw}DGEGqDg/ic+۔ @J,U(J` Z'󙄏Ċ_3":1-|ksXOd/1 ڬ0_ IJw;(4Y  mYcY_)}vuaNE?^L^8Om=IO֘5~\|isn}ޝn|EEG:Gd+E~zvE6kOzf(982 3!j 1K2_U-ΘGO]:up >~Xxis'2^Fo dD38F21mƠZ_+?Gvsͦ#:5DيΜO[W{t!KhS{l`ØƕNT|{W^gn?pҶ-r|5Qr\;o92??g_;vLeea |p9fэ;lKO2'dmT{)|2Ɖ1`aLpHYk05r/˃c))AOฦMP./"M %HN#( 8 >uJvNҼ&[G&>)>ɺֽNF/ ))26? |]@y[2GTI2BLo&(vI/f. TSS'Y'\BK'@kO7XNJ0߼M`kЛZ3ˎ4͜oIK[G7mٔ6> >AgENjp?~5/>pnYK@-Dk9ָ~mt̵ssÿho~̗uC.:}It0Ff{WK+v]ڌE _Z?~kJbuH>A|OO<ɍ}h <&I22dw~Ơ%?~!ytm%^W;8йvW{UsWv^~qr#J }فӽ(uǕ?~Yh[=w١m'/$y汵Iak9~eIOZ8[q:GO>:CmǴ]VAemHR`ވ_\?f0 \#u^BPFO铱6N$s/*'uxQn\vJz99&Y!ݓZI\?{xP`]1#^xa_`̃d:$W"+<vuH (=;^9zc[uz$q@>![c[P#9 I@&W%~P b|C)Sq,G0(@sN>cJFl>tdGj;{?s>>6 Z|>jv9ݱ/>|b$>9 =G/fyT3 cB_qΖk7NxQKAc 8>73G {rwi( >zk\`n]$%Y'8mY'SiWCkئOhGMVgG+ѝ<׹q]s+|~=KZk1𱎀`87&k}X3jvhaXr?_b~vl Mm e'M{GiWݷ$rms_֏xf맃vp\#A\JC|VCƕ%,Wy{޼ε_>ɹ(zמʇ{@N㲏=?EDQ~CO;w.ﰵ{qe>æM|[S2frEu]ϺGaré\6Ͼ 0Z>F[NŮi0B%e ѭð)}20+z)sY #t_ɞMOCCCNg?qqsw||彳`TuayZGkX[6mjKҟ1p2FA]RA&^N@q{߻#&'AE,C/ \Uq`ZG$;yuI;}$Q@@l 2+$1\ɼ%ˮ stmafAk-'jM_Ė]ghgN䳅My:Nyy#GXߕ̅,~~[GC|:V~5&:mjHovv~gcءFg.G/e /}/pXSxf 5]5 ɸoY[F@{}4u{]1ij/`nwΥ~|˟+x׿we^JL~/_}OG|zA=SUM>IZO?ѣ~p<< cy]+uN:>qLY|oݪ@u3ƯZȽ+}F@WzC2Ѯ9]w~SGƕz=|{KˍorOws9ueسtY[8вsa׿$o+gcKF/(sŋOKyN)eѫBK bk9~ʦ?YsZ8߇9gϩwkPlyRo3yW-\=V9,5J:bOf r8}LfSm+_i!isIc/I秡agg?.)ArX}r`Mpaa:g<@{@?h=>}[B-| D_òG`>4#v@d' Gg>rO@HI!1ASN_3Oo-{@XoBwn {%($?ů W>|g KPJ򗀕G?W24t֧H&|_2 Ȧ'݂a@b\:^2 p}g a-W+He+} ;$R<|D$?%{$'q֏9|xY'|L.Hz`xb}f9~\+b|k52><m1X/!hk"2\@vs1~j#Ss,7d Fvsydk>2tu'#k֣ctb;g 3 5js ]79 YЁ'[t/><+[x_y6NA[3dYC즋AO@3IHY,$dWr{Wz w=TSn}˛&E?ac YƜ<b럟T6v-mھ}O,/8Ⲱ g\SJ{ U3=߁hW&a>oիa;s'}m48u F/hLssw7aűN4q PtEc]``؈/ĕ[OW6h7ĔL^!0] um=R*2bv/#f6$mNϹݣ{w{sLkEWXgi7luӮSt_Y`Cwcxū~p%ۍȑ#-s@t)b"AZ-00o,ppw6mi{;w~a k&dK4<`nx4)8G?:_@&>7.|`>[@oIHD4!$`Bk__[1ON<Ze(9raBnצ>֛|טm̚i;\kdߙsJƶ ڲWcv'bW}GåK-?ál7ZVrsomkvw gtSU~a?|}|@/ ;rMn$u贫ɊҾ3?vRvr#pI&?575to|mn᳆=ێzk`q<ٳst|ߩIͯ:= Yj>N7w&,ޣDK<*:\%Ά]YOs]tqqKS[۾Hn0]>fGo#aÃw6n<9ZX`3n9tb? >mt|̀C!ޡځ^@jL GB i8pg%}^җN|w~g"41ɏ^ǂ+ؖ4I J95',,(˜ē:I:>OpO''P/~~ߕ+!$( Kͮ1p7.`kE/Ƞzxy}8O18t*8G1r-m/IN6+kT`k'}г.ߚ/Y>Җ2ӟʶ7ͱ%?_zɚSKl! _i>]Y5>L?zK ѡa뇝骐Gzq2om'\l iO hљK^}LUpI_L|k-|֧'_!nPplCYSṛLN :Б; dTLt$^|.?\}n[o{_ѕnmO³KD۸ϒ)@@>! F7f=1P+1ed7|V{>Nj,s/񅓯|~ &u{*=dݧ$}Ѹ~\-|Fko|m^Ż.ttPgƺOdojOȄ沕\t=u_7O.{p@/}'Gѐ[#6d?H.݁kspKdpMгS|U@_mX[U,S6sѥkAƾN8p894N9?X¾msOw~n3wǮ^㺍W<6gU}~nܼc-k^OoY+Ngmm`kk7}itڄuZYN[ vX`Llsܫ>4Z}O_q ACj~O^/KP`,9X;4wp.dC>W8+%^$n|gk`p"(Oqe7t#_ $ 1^m\(lH!B/ Mg*Ȕz_}"䲏 W!t$;鈎|ְD:h?N_yokϿ"?YGvQ2 )<:O.FOy-9BDB :m? sڗۿ=dhU+ѐ\>sx@ӿ2Hhh!/=d(olOstKc[/mcSԴ]EdZO{{ z*\z$PO4t1w=]xڨtӶ?vة/:'#ƏNm[+kGШ>ok>=ϝS\tw|Gv 2:}_?=OrIo=Uts , ,oqOHx~rzWuxkWi|hj7o?{Zh8:tJbt~n4CCzA[<<9w7 BjxtOQT< QCHP!2=C`]pQ@X & #x!^ɠVu}??xA Lă\pNGzͱ#(D:%Om +1>E-?p+ Na:A)_:-\}Dxԅ1xs;3 :/b\okK/|}t߬}d:W2GKgI}x]wMj#%c>Kse·]]ݚ|"!a}aNZp0m^wƍM;ߒ˧C/7s=d'>]'h.҉{5=L^x3S)$w=mߡemݼ$ h5GO#!õw vKA^-d'|h=O>zў~`/w-zh܇K>z:*Y6A> O==m]Btv?TBiLO'NO}Úf}|鋍xk%| qv~\`op+޲[G7n͓<ۍ?zp}&p?sT; ;4;H;;;;\;ȓ+.Q^8| DBIڠsg=1/J%%79 4?~5A6I$=kjJooM TtQ0_/#r{B諐Egq6ZC>ߣp[C7 FC *:}O l٣6?րޱ7Ӈnn^x+&%Ot?U4: H.]mke'+__>5q6=,H߼1X |Ϝ6jC?Gx=fYYK|`7^"zZOBYz2=B{=@>{Zs_2k$gԮ}td؃Zgo>zv~Gx ڸyCdC=<>\x{Х'_9鍷|ſ{U~h6oQ{;) ɷwT>`7RrWVrnX`Gn tX.8ma\ݡ_6Xa] $6V=|}sA$*xLw ]DqEOQ``Crj?5OhXE$K..]B |tx_V8?<iz+f >p`L(֗m6Id ݬ+~D?P‹OLgto^_8֮ W7 ^A?=ئ/aP>|zOk!`g3}/џ\:mW61<Ѕo =u6Vi9U͵ɧ]'Ʋk\\I>wOOg\5Y =Q]5O_j2-ac|>'۽k<2w>iϓoMgnd,ә_鋆|#q/=\|[+}7?h7F5P88xAK1,\IMp& ^: , ,xz;w^:,@ۡaYM@!tpWGG,Xlx .A_) 9dEy%Au A~G:H7?O;>pOyS@|zΏ  M{? l7Z4l,l2_szG[^ Jf 5Z> yU+pß.tn'.5F7~P<[>ONkdLo<#|I'rN<92'ևdA\UؠQ+tC ט16+(A|d|ן㒷@\Sj~I~u2󅾽˧֙yJ4$s%1XK{6͵D.X718$AJzeJ&v /\C,=Iw1Mi?D(zA^}@Nk#<@/%K9HG,󺒶C_ <}|C>I_02Ə 9NO0)$NOH<o4U}6t:.(ã=jނ=rdn\p?l䥷u+@O -." B/\l6lgkߺYs<Uxйj^` ktT=JߞhJz#?n:QjSxƍ B>㪛@B[ ]B?4(7dk'|O- ]GkO4J_>'|wE/zцmI]]~r4J:<{ ]] O*~tO|.M rrB ~3EmGKG *{Q;F@m_<}4>jɀMtkx!Ca#^Vxjկɱ>5eÒZ`X`?<9n yWmC 8<)@@A!_$ EI>OGAHv 6.'S\=pRķ7:vo!0'?zzR{UA1>tG69j}vט_p*(Wo/|@gcK~t}^ pك|/tF+I[oxS:0M)E.h=V(@kgoXDMEW|s|У=Zc@B63Vi49]*b9u4j׵k{dw={{=b$__kd-''I}bi+hu6F{s[S>n^6#c/4)ƭ;ӏ<`_5_F Odyc '<>Nu$_*pg'Q×8.y]|ݸhHDse[4x-)?X@ , , /ςht@K@>~  % Ы b~iK[@%PpPՂqx?IwI,UmLRyz*|A ,rJp@LKH @OF1q\CG/臏6=#X#XКmvvhBm `%cGȰև>ct=z]U,2iY"9_%9Ăď䠧{<=q"O<>|d$)C O;hj}A< Ak}c\%1}П 1kژg3S lwn\<o|m?WWO64d#fz)d+<7ѩ3G W8nKOOz%3U+< _Z`X`8O`~- :(w ު4A@L!Y0P`/p8</hx{Dv+LI9I=!+S{zmxD0A@̯j6H'J$# < (2 d<Z |p v𖜠?]y^+X A%\A ' 5`xGG`/s~a88 $5}kpkTv%qј GpCMxtaDd: / > $-^=8<6$`~%L5^mnڣNt//~l;~E 6z}[յa}O_ۏtnG.W&߽|ES膇qjt/= ƍ54v6=/;{-Nc=sŸqzKjvEرc_N [ouE , ,͇`vE9A@Gvp4g8ixiA<^O8LC=~*^ OOwH( .8jK4Ap&SIJS&I|ɑ@lײT  l$Ԕ!_F_"ЀFJ\<վ%NXWC& v]T >ǓU/4F#gd>6P`?dY[9_o= dY'|a3?A?HhؠƇ.t mi2O۬'gK6xdHcA :>g .ߜ:ȟ1-1666(x 4 H6$;:>wLsusϲۯ7xS:ݾbֿ{};Zsdm䳓?x]+sto67dK%HmM{=p栯A4 _[R@~wJJ ᝩ<6C??tt;?m^ {K O~&8ï \2H}m79X`X`^`ځYqV^\q; (4;szPa[{wNh *-x $F|˜L4O (@xHAXBB'55 @ԂeďJ{{&KHü6.1FA _CC3)d HAgstxp׺(tg._(҇Sl\7?C˟٬d6Ae?Aqmpf5_5\ _%O'2 ?yt+삏)+^~G|Z'A'5_&L"a rţ9?1l{mZ+VVy'djW=pom]uroz==c(}} \3Fo׍=KG(N9v+cxv'L.hO@G'[2ȯ|кGC k >j` ֊B{olƛ~0_꟩4Z?tK8.g;~n+@~):tFy+_9^n_W= N k W胛[Be , , YObþ'iu=p%-D\mN& dK}mct'W`S$%ʎO'@S0'P2I!o%$vK T>𭤇FaAg+p{`33U@t,P3}mxmlc[/ c-d3g9{ ?3p{ʊՓcd(OjS頶)Iyve('}7[ϼ@[ټ4w|讯pcoYdᦃ<0O1M+|>;x% usgyז>EkrMh&NC']#߽=3fϐ'>a/ }k=|@ÏjOhz=>ي<>9NkoOt @'`|F}< l4^xv5OhaJʬC~7c\o9_qXz%u/Hïַ7X}w 6fiq}n>Mg'oyMx{-JLX`X|>0QqQ :=I# !aځY¡%X@,ݷZy_>/h $B4OAs C_ XC:/E_mڂ㻿ހ'z-`^o RP$D52T@.s5) Gl:g;|ɏ1JLp#3v9T`oXxن \s{*1 /|ZEIO|Sl ya֓Js'ƻ}g ,֌<ؑ9kC&[eZO`im6YH6~x@BxϷhkNdYm^O %xlk 3f] Scm.uff9sY5[x뜯uŸyŚҧk^j?.t/L1{&yr%{Ș~{x/zɇ|!~Gl^ocOD~pkwӁ/=>\xэl WmL87%SFFo~BC^ZhWeS--Sy֓BpgmF׿~cQt176ϟ1itXeb[82}) ,  3 ?DӞI?7o0OVIF3ب6lC~W}omcM/G_tpOhAzzg6;PBB.`>@?WP篠6=y)həAyzyu?jE25L'>C8)ڧ)w|trs='Y%ߞ/9Kgk^{}Hwm`.vP:<':d9tqvGߺcm.} W_@?g,~ɲvdq.Nn6S?SG~G)cc)p+..8gǔfs͔Zy`5} Y2?Wc8|ic[- ,7L:u_rz+/!}7q_xz 4;M XE}s>%Ђ/cow`xCC͑E3FP`.@I% Y@<#z]>: \!T]';Oˠ5͜ӓN͕0* %aޯM~A>O~忂Cs|h_d{&|a7yp˹\v|Ck-e@>?k ֡q:{Zڙ5\/lQB_Z+oƇl26xp>ڭ1~u} &79kޘu,;Ȳ|-<~u>!!xlrݫk*x7~ ~p߳>|m~  =j^GC?ݻKZ<_ek^Y\㮿k}?>OON::[ٔ.gyzO^g* EWIw xы^Q).A/= K+ 8l^F(/8p/h^1:J!6tG?э_ѓ\AזJ8葤aR$P Ǐx!lCr}Wq] =Aw^?ߝ T ]/Yy LßD't %)};=^1RjI+[?<9~ȱO$zZr&tQe쉂s}TtK!,cAo-c|`=hVÅj+p'`ίk7^p\ѐ _Mߓ` l?OE</[o'{i=F!Z+z^CpEK bs6Ѕ\״>zk_{'33OySCk'OLy:&8o@asI|5akX|f߸U S?- ,~*x8h ~%;%h$u9fx6x ^%V$d9X v_b 9t3.|t'KnL?~D!N@"Pg_.>6: C_"#$6|%{xO}$:],%3M>|m|<1v0#' >lȢKX >³>~ $>NCKj{:B.-4@,s$k"~bp =h= h) Wssx!KG|;5psp5Ot"O@gO%Y~{:жGևdJ$Z+ؚkt(e.}J1^Zm.Z2ɭl|Om6>>/OoА_{3JP-1 2[Agx\dK֙yr=96{ܽ̽䦶u0f$N{,uq/B˿9+cNtK?舞\@|設v-b~ f>z$9ؚX/sJk580OiNOz8{AV豈}B>,_6 owvqO o3z2YIڂI z=<>K}I:u6|34^/Jr 4y#pl錧ClI5I>0_m @ _D$gU @l7zvƴt[.Dv #ȤZ|#SF^|ʧΟַZGwh聟 ^zNtGZ}ߝçkOx^hx9Wh|Gy5]1txm@g>~6YoÝֆ[# 4Wb|;:SwY :)2{N EEb:G+VhNݗ̹Ё|` Ȥ~ ZOL “oN{y2|i992fׂ'>raM"W<]o `/?md[v=< @O'Zb1 |&r8ӳ O"s?zV6G=qc|W$ף֛ďh ME!I#I$~%[b+2|,H'G2_~i<ёLJlGt\vGҋh=|m5Md(y=kLmٚxdy|/֟\} *h_kָbh˵gڛw]/zm'@>'Ϻٟµyk^3'ɓuM>~#C' _4%DFb]xO{.;ܻ =M6&5xvMZ?|jGq>6ȴo3 6>-p-( ҅Nn]7|ZtǖOzx9tbAfi>1Q|n3X͝uzG'- ,̿50ހ`a!@ơ֡X߁![Pb̓0Tx1}>) n pwd($mEЀ@AfN&'cY`]"y-tcl&}.tcBݵ/B z>0O7ttkz.zOQMotF[+% o3@ hAZk_i zW$g?Zxxʁ֨@yK5>;+lY=& -췧>έ1yho-\GEM>x s3<2W[&'^#.v^Hk-:&+<ŵhZ8rK.3\4]k{{;hoDC>}ѕv>hm>%/:Rss]xkSƸ{5#ȕlbj%یӕNznxv=·&j fyxͳy\|2wRv _wqT |ǏOc`=~Y/7<6 Z`X`70{~mxqXýZ pqu, EX@-6;$K􋰠+Au~MTK:AE^ggM:GKߙpP!+vhI8W̜3l1/c^WE@D˽1} $ 7j ;c؁z6$_90Hb`1=m(l!/H=G_}~#30F:Fƍ8>At@ wǣ:[w<cp |5Wpyx#(ɱ~|NK5֤Wܳ$Ȃq [<%m/¥>N{KҒR6ͫz{}e|7Ȟ霞5nٷx7z>қ|ɠw'@!}<ȇO&y\[#%{׍]lKo\@O@.]=cvC zc i򭝽gN?˼ $u{ oZt|m=-1Akݞ#Z>H|V8''<~0oG:EЍ\2ޮ~-|.F7֓{M& \{b^lK}c~k̿Z@'e7m/ , hquwwV;:pp؞u HFHГ)m?OxIm\pJV&P' ~뷦y=ΤtpuG/2. _ |#E-P yA/pͺ|_F.A?38m }j7U6G5%>_t?+<~Fk`{ ?x}=Fv}eFnwkG_裃g+xE|Em|I^έj'~7 9+擹y7|cͩ]5O}`?]{bm6֌~xC(?@~צ=SQ}J=iO~WȖ \a_'l:أx!kD}f|CV?{{ZzŏxaoćϬ ]zӳ6O>3Ǐ3W'3@cyxܶpS/5Fc,>;)X`X`yAdCCm`k )=ߓC'xRAOE=y%T~Ղewz [1ND =$c;+?  D {E͓=:<ޒO _xsx7~7dI P!BgN[mls6a;{_@+Ⴢ.B,Kż 2jrӍd;yFAdW^pJD/X{z"[bj\ē}~S3F_]{[]7xW|C6n w9ys>:'WdM=Y>{c$;[ˮ̑Mf`N }k|q\l7v|' <{ļugOxJ}c'W0>}Ogнl`/~Z=ok={hs/ze&?Qӛ,MoMGx=؂~/qq׸k˗)ӋNh|͆Sẕ;ƓN`.:{'òNn% , ,pCë+p1`/caۡ];8K[^A@ Os992mA\}9K>8ꁀ[F&3 $%C/adh x$>/Û-xi2͑!(0?76+@@@,?|xы%$G_ KI°}|֗< `[3}4M6c즳@k;% `Y4s8tbFP<-[6nO_xEW~1 @> Ogg5BK'| ̡+\&Sm>OM\pG&5m5늏[u!/)ZM&<z #xTlxu͓󶷽m%? s{޺)YO?l''~O/6|v@WhuB>זy{L '_EM6?o]+hu7/Wr &5K? ݟM'2:ט@Oic|ёg=JW~_/4sp|6͟&X@ , , twU a!A$9aa<ֵsvv><ۂ }AZIdCrP=ϟ>2J/A3̔@E,1O;pq9t{jJESDc_$N8_JRѕ1x|hNۘZb,1[Ac@mJzkhAR`Z룰ʓBׂ^̱t_7y=o%O /yW-!#&#(t+%edN?2W .=VZӉ_ne}׼5V7g SSk:v|~ԧ Y=H^Y^vϘi<> |l'ռ,<1\5@/ڜӶٽ^~p'JFU?O_3g<[K_`<0j>cC'Oy>r7ߵW_d%OAk_8kr.#| } D pV1:/]L99jh豈2KhX`X<- /wwaI@/I,H1`@y}oAqApAM qp䑠LC7Zxl |O>tGK7:'C$I$' 8 H0 OdODz b<a#4 sӑ=l,5q2U`94x5V֌8 r.p|d~2^?`]-~GMWPN4x0οھT7'dȗo#6IeLa ߒ|9v(Ԟg:2Yp^7[o|.GЁ᱗"v% ^R77ǡ~sڭtGv7'xa״963za}ul=͹Fe_]В+@moJrekz^Gl ?KSƣ1~28dvᡡO4pvRVB%t㪫~%IoE , v8䄠!VPpןVWYx'Nj xÓ(XIoh8AD 9pD =)"i@>ߞ!ï7A C<>! ڟ`CKp>5dH'9I+I xeaޒ9u4!_џl|͚=|'c xϧx'W /:e^*ް`_@nA!y<[_ov{"9z΁~tWдOuDL i,\?ck+dVs0NZ Jmy¡}u*=h xA~tz7^M{Og#5']{Ƚ{kLw]Пmj{ dޡ3hclCc s짯} GfutQ!|koz>fk> ^֊tߘ=j-_9}N#Ә=z {s_tLtͧ n%tpر@& [o]Q/ ,4m,8h }Xz|v%xj@e\-1V^'h9w8v`+<\@d ^$Y$$sh(0`' % ,GߓAӟ^ #藠P$OK@I_]d+`"X~g' H(67c_G[Rğ~X :/~a/2T+l'Nl?K_N~O9΃:_-{~!Or5Ɓqk_ɤ׼_~B:уNCq:~o.tVև~<Acg7S.~k\ye^|Sv<ٟg'ֈڵ _Ot$5Z\DUC\T{̵@֠pkO0ye <*9[`#?IhkktE'6O<^hMyFC/:䙳1/xwW^١U&03;4$W_69^+t2z'e7:p_ msX`X`ӁCF`!3C'[$E$^=$$e,GW:LH88T;h B1zH8X4 tPdHU=3 tȡ, 9 PiKO4p_L~{BH'WЉ=afD&=o zh(tϜ.\}m~C##XWZs1~>ֆ~P+7xqç>| <]dgoz} z'?Im;y'sxYƢi=  x|5'q<imsz9`=f]7ɖ{]]pg֦?V]}lw߷Pp= e ^и}s- .]~2jK V_F/ ெk?ӃNn%ttСWrk G$a\tqqE7>27 V|F| <~xz\:  A!]m-Hxk"Hd\CW͏Q>Hg{HP,/wȱft O?|O6to_.{n|&#}j\/ .0O.?SS!'>{,|5jkzRB/|3ONuf>G?<O|G_~cŧޘx2G{3/ZmXͧ{=$Mg??>WPMz E=oous=z`Y&sO |zKB@<@KC߽=̣g~+ZF~ $Ƭz|D! #A_G{iNheh}+ =/̓iA ĕ`Y/;T%sK} OHBǸԑ$6~}|lo z+9qd: P#G2_0ܳ>Ё>2g{Vb.kg#<{$怗8[;{ @ok~|&Zsm|wӁ o/OћMdi}Ss֞ Ϟ`-H5}#=9xh'uB  [\#Z<5Zkz~t4?/h1N3 ؘB7@Nn]zXdq;wfpec߱gIc?s8p88xqraa}f=ơ3ڻwؔ99~8v,ٳg:vzرƭd v1itv, ,C`*p4z7pAhAǘY)0^ي ]`Up&/p  <΋a7<>ᛧ|Qb}+B(`#^!Hj sloߍ,٤^|ۇjor'd/~ѷpI#%Zlеp/~%Gm7|:Y9ԏ5pGx6脿/@4 ^j~c4  N<̇]߸~{Lx6֭1ka)Zkӟt2&cOgk]yka}s'yٞi g<t{G F r$lͼI>AǗ׆hkɵ0=;BrۺᡯGS'st÷A<<|J1)dSo@xg* vM~ƏȏSQ7SVBߌsZs͸n߱q{)r8Dq͞x沛0~, 8z}M;Hlgf0k[xpL5=LX`8gWWWng[zvC@C_"BRÜsCGt8‘(빿:WvOs8T F?!mL @UgZAY ߼pgKd<m ؗ6z5\ PȐ!9)IBcJe8YLyxD[s[\q~2t@8荇g'e7I ^* x#cN E/zFCe8hN{5s_8|ۯ_9qh80n.v ڃ$̃wƙ/s!ήm`dZoyhX`{u|rt ??~ᡵ[޴1~5_oZ%4 XP%*9KAAR~ j;]6/xX۷o+/0$o_!_@BC=9x0!LV|t,(:>xC=|`<ނ.t,6 $۸'EcplTL癵BcvZ_ j/cx❾֖tW>Ub_ӗ dӧ] =HwڋAj%||࣋G/2~(CЙ7f[G6+P豈#Gl vM%|\?_M8ʃsm;u:X}+gWVkw*< v8i 3|x}/|a[|: ]U2mo> , ǍW㋟d<{]j8ƭ>>;=Ld+I(Y}2X#5eяέ^t!W| ֶx xUS>oֈ^<}沀>__@|Օ8e>On@V4d}yђK/m[{E[ñGڰOĶqk?dȫޜf+QasxMz=x'>%#a1rOv /'/O&c?xxЁ<<Ћ |OፗڢsͰEOGLO `3Ki|O@jsd>@u~$mcڭL>|x\Ȱ@y}X}(8>G9#sxfϡ#zj7yg}bcW6tA#㦝vF3O;ٵ>Ck\;H- , ?镮sy?q\// ,nUcysvR1PfƊ䏃_%$$<1Zy ><jIlE SbIth CAȠ H dyJ  $sC%ڒp|9q> %S1G(l> _@Ov *(Uy@_}~#ɺ'Ra:Acͬ8;h.f39|E?fyૠ |cqE_z8'1:#dӁ@ozO? +kU{|Qk?}H?{}OO^O;Z'@&ۿg\K3Ƴd x ֎^٣)66O~3MvV>t1F7hGO.yHuq~~ s7H|֒dZaYvT̳%[j\XgG qkg-١@`%-Mb軘G̰zróYv{_}cߎ)3a90ر {"qk+td< qdo - ,px[q׫rz챀/[$󃤈7p8sa^5 cpig|e ;;#+p(O8=7tQKFA.9d(~v_0BH <$$ Hz5}pJ=ϼӍ>t\$[P`KBFA R ->a(1+*f?%gk$5^z|_AgI\p3O&ցNlR?S7hn?lm'S1}uVz*צ)Ӝ6F<m6GNjź͘ѻ>>t#Xsjz-v>yk'y҆C&pCG>>(շ'I K&Zqq6㯶Ç>h>ή=>]'{ h?zXm]lRϵLOsJlJg|飏Ƽ1}aCSZc~ [|Xc+8p|3op >hIM+@l6gt>mn x l>f|p`tdyE{'灛Ƒ}vV7~.y\Wƭ>m4k52Kd7}hX`N W^͏<'?i np쐐1o%/{}B|ɏa.g=Kk}'#úzBE]ȷ6gtljɧ]2Vpn7%b?'yٍdwqN`4[WYl1wLnd^W=O6Wuzi ^Ab<7{ߘ|Dk Zq795n|3\ 3K6aqDnP;US9tbds}ve 6ݞ8p=t4%z$+[&&I#y/ ,xn=?OOzDЇ];?tK8Bmt8P X}SḃCAܹ73j-rhwxHh (B |s ;|PS :|K.ts1 XВi|љcihGPe\`F~7 lς-4^!PA"4[+x+Ow5b;Z5R̓n]|'>>^3GQoёc#M9l|i GL0g#yl k .x9_ѫ[O!hx1HhsC,2БiL~ dlW>x 1m^A[~KE[aќ~:Gףus]~ddgq`\.<k^d98^cr]lq=ڗdwІV|65|GN<̻V>dzUѵε[2 cWyk^飳Ӌ^҇N7cd8ࣇ'%RAgL)twg0/%] .:AY5aC 4wwؙϬII"/#9ď1~0O+/.T F@~_3nϠ%b/6.f_IOzǗbxӦ+?X#<\k{(fSdНhG (К+͟곛,v\'6:O|7Ƨp xƍu=ԧ#4.j|NPw=':Z6Yk.]Onmqzhf=f5>wcJ/=mLNK<<ych#rLo`mHӗN֚hF ?ď=Zk\ѽHܸ> ;`;/_*%y} X^'٪CU#S7;ۇhcO6c9K6Љ]hK]z_ũ>%|ՇfG R , q'˩|ƍ?wH|qPv(tsW R .r0.-pa9do,k<< pk }&c@ /0%Q^d дW|CGzI%W2_MA]`Br+++RtO./>?fx~t NG:lM7Ň U >2>B62o4 O}SӜlO7GGm{,t5#t7\{.z{@@M1>zK^Y|FMѯ=짣:mG_kf>}'X+8|7"y9c(͇|W$GMz /z@:FIM ??weqw ؽ{Ϊ , ,}+k;#xs3e vYߙW74Lc:;:8 ( O"$h(CGt7n}|>Ÿ :V2Fy`e 5]rpѐWjd'@_@pџ՜>_Cto[~YxAa5$<\@@o:G_6[GdcQ`NXoC?_:cN+<<ؠml<5\⁗Jvا _Sm|6u`$]n ͛soݧ_< Զc_ A< , ,p@8 ZhB~-H}6 <;{HpU3 tOO=}:;U _"~ӫb э 2Lj}K2h҅ %d;v NВ˖pɱN|Y "8#k_O7BGoƲ3@z?{mOE³D y &m044+YɃj1^:1k&03ֶNףGW}~8nmGXNߜm=Ξ=l-/1c\kYt``Nk~ /aKB2Gk&ZgȞr.u:P1Gɤ.mgN׉}k:~TGK'O.clًdtEk@O=?ͩ6=͑bN,rҝ_a/uf;Jk'9rd\Ȱ$X`X`0?h /^i`P$ ơAOCq>x9P㫦(p`G}ttG~?3g\$ ;*lЩ` W>v<ёJ [AO~IASKu6dc󏤆DY1=cj5~@ϷrWsR@vHğ| CrD>dia_7o`,9#})TV@n? ]xAoJkG4@{3W&ZS=tOxde3uc>0Hdj0S#ݒol#R@t H'sƬA>{~1l^&XGz2J:Џ|5QӚzo<ت8]|ෆɝՕ`O~8W}<+=V8pr!- , ,5As~th8:::w-2.X0-pTHF:+ht`F~~@'_2%99vhr/!]БeD@G=J^x>=.gHH'~0Q肇LOμ9><C"#XO jВ jj'GMO5(pb7zN(| < ٗ% }A. J[a+醮}2#_$%<ŷyZ'+2o煝Gف7SpU!،hn^:O{r-\9{bI+VuXKaRWkg-\%:s/W_}xK_:}0IS0&!Ŀ_6񧄏pғ<)eclc/\ᚡ'\KЅm>Q~d|_m|9p+X (?/63Gx]S/ՊA4lt{| 5&ۤIM$X`X`p.hrH~{S-x  | geAv2 88!_[S0C?d:8-(Q4:D`P rtjC>m%x pYC dCWl/HkđDy  JG6E&C8̘HY1ӑ#Ad1?y y7tټ1sC:֭][mDNg0o}Z-|OkG5,(dӡ2z3(b@pZ 8l/!fۺw}䓃q /x'Dg>sZ#\2|cۢ?WdЋ5g&荿nt tq~Xץk^~߼}M]1f੍֜k%/yɔ b?}+8{Я}]v_K&XI>7ytЯCyxӳޘ~6s]p>7D^g*  , ,y>@"{}Z$ /aXPcN!#0(0wxC9c }vUMx:&<$l:;>੎9d Xzj 2ntm *A8le7']W_>:mh`֥ //"2~[6k$V.@v͞ta]}qm>)"C^Ę1~dd}ߧd$$}:'|@O4t&tg{/<~dq{'W`=o[/c/c]d5}Z‡s/ w>|KiM7K& {'_OXEo1~ޞʱxO8yڃ6u}ן|~hua%o|SuYu{d9v=tu^FL(?:=}Бss/{EcSmɢ[́$q7~vɦK}kSVumuMƗ.tM~Vsƭ擯;e-@2Tv, m[Q'nǏ_{?/V^0۷nJ , ,(aCýAZE*"8ԠwW >;D tCC4`H l4S'`k<7zg=Y C}ic P^NOz&_2I ghAv|Awuz*=m:*T/u otVeztjaWk#$?&koa ͯp^ KIǸ$v|uozTc}B5ЦuҗltOk}pE{ݵH'jt5.2(yED.j4 jvǛ?j7'xXkk]\hu74识K6mGqO!y} I$A+  = D"۫^<2 \V$,vïh iTG`7HtuG$~Qm}'QI c|E|d}],z([W&Fw{T]@oŞ t3lRcГ1ۗ}tlÓ|`g !j\5[\ޛW诶V,/㗍 t\ezIye2}ċ->YCڔ\uU^4Ng׷k4=lW{ > ;7VM0aoJ |61GN> cފ>=Ӂ/9u՞ߣL~6&&`Se/.Ӂ+_w5=OOrEW_?2^{߽e?]p|ܰv]tUkqa kT ,3cc߰?xN<&Z;60>õNSp}E` |& |8 Z^`O`k #@!]+0/Hx2ɏUj׭ZC^ A}nl``;c~ǟtOU gJIЍ %5AoߑEW2Twf~C2$AGC fyzY-@3Ї^lIoxl}ۺ/^)/& ;%$.> |4eOx\]t8wFo͔lr&uVm~A] o3!dPg+7޸1Xugx&~`]#:})tT\m 8]Va%׵~dkdh3^7f]I9eΫܸ1+  r;>koF -ȥWJw-!|xҟ#_Ŝ1{}%@/ӇٮuoȤ1mxyXmv~ l1m|>BNj|c-r_oH3G WzzU~ZM3neõ98rGH;O"8:* Kⵍ^-2A]0Rqɶ-m,j6^r𗄑8DЋB> 6`@ !` yv#7敳U{z %Dz2錾$6>%ONj6i}^Hd\A8%zLu>;mwl><;?p8q+=t`^`Goȑo~nܷq͔80=xr4fj8tb[]gw>8v@!A`ZpϜï9eA󜇃ô3<\0!!8LS0#8P['[<++cCpN?;?jv=OCzC6 RoN #XDyEA@E$55/=&>+[M"]C6zd BdeXm_5@_ S[s6 c\Dצjv >-%2i16%It~͑a2 /{eಃ=p[O4jF^=x[Wzo)s6OIs-JR?[w@ua=MzuM7s|c{ BG{,'=[=14G|F.: /kFcNSVSj[ޘ~x 浹ho>':<~k/V?fGh{`Ǡ[c|<DCGgt%Cp=`G q{hk {^tv5Ov ]tc}"'agM#t[W1Ƴ#yjrS6ߞCߣys}h464ݫ?M{+U~w-%lHa;pи^$_ xfk&=6yt9tk؞"^~uO!gL=ݾzk6?kocFcÿo8h\xxA~^V:]SdI_gNd 6|m/Øu{B]i}!}_z+5;)`3rV?}\q83xwK醫YMO>\X.o?)tz$q{9X {J X &/=<޹82z޶F}lָM;Ǹy":0n..S$ɟKm=q޺ Pܺkkk׮'Zq^isb8myֵݵ`k5v}|Mz_g5ApXVtp |C_,7֡S.8H>j%(?\9+|#SI"H`C{/Gb(iO #уd`'Yl36;]q:IZL)'N$ вGiR􂧦_IVo6}{̧>_a'`/Z |7X.lR;6zVwIwc/j4lA.x¥d5P;V_D?6StЉdI/t`P?hc60WA<?jWࡍ^?mхOɲ/7n66h}9H`i]veӷL$sй6#m~˜ur-KqBzI@ߠQicpqM^xR<{ZX>Z˾_::E'= ]ז6 |֟ݴ~1Va7hԀ.~ۃb?[1~0^< I=C'9s.?wk Xs쟍o[QtЩ [>S8pӑq=c3Z(C >2Vrd9SMt'.ڋ>6Nnsz}`J&]|:ypaL]\O%ZpOIFrh ONyt3SC.`>}$5|F_@lA& iAȧRFOҹ`\~54wwNNf K1O>}n}EteOkk?k?Gd]M'4} @1E&Wbm=%iX5Ec;œOǃM#h27o~2lHx k{+?Tl|??[s>}酇nJ qV?秭WU~?t\{]64n̺e\]z+Nc>IG2^U//;{'shȾql-@ ?|c]zxѓf[ =<^Qc 51G̓| ` Pӏ*|:PA]7Ak+&g>nR1sZcnNʣ鯀mN\1{Շ]5?tK8.~ _߬T r EHCo;_}ay;毉7skWs>һΊn?:{qm'Ǿ.]ÿf\o Gv xivCxġ'oczz ^zå}40yK5mڻB$A P |zL o8=j<R'?kj6c!pS7 /`@[@PF}A }kG㵑 J&},;D@`d7YD= _[G _3s>dK^p"`wA::)' 0}Po5 ܭy. ́ @ <:Sz \d?@k~,l3oOkzN«foۊf>N6=$xVl7ѥc<ϡO|GFv~>1=]K b[G2d=&oלp)uHם{KkPͧ? i6d:O:V?g}MߕX2.PS6)'mvY 5ydv;A{ ~>x'/ָqI8a#KY+)_=[8V$O6^꠶|f#K`̑o8YƻFQ௯ ׸69 t푧zS1ٔtb3xWe=jۃ1^xXGaΞb9Z>5z]? |#ZѶo<_]~q}M,3h%gxή_%Zthڧgɼ}D{g_r]2.z4DX5zx^RS>N6@X17FK_Gk^?1'\@G -ӟhL]1nq47q: 7[.rwDï`N-8u (8@;,GWWg@ )KhÁ': r8 rAd('ЃpӉ *HOzz>l$O:`/AC_ʯ|D>Y|tA/D`kcs|*p3~0ҁ `'= 2v$'~*uOooN<Ƈ/Gllg|iLWGM/~D^"]0tm`qsxkA6:K~+K(L^i3}ø/<͑F\ tշvg4× @o/(:Iesd zkĸ#=o׳zŃ/KБ>/|RN7;dӯ9{5{֙=6\dߺҁы<}{ h%Ⱥ.~c]z}y:'|d뮻&GOq6;%݇}{\4b$o%~7Ȁ~s mN]A=^pק6o}4cmxɴ5.`둎9=?>7NwyYx._grĉa:Uw`_~W^^<%tX`kxpo?Wl0ݓpa?K7Ho"H) {Jѳ"hKk}a<59x3Ngtx ,6ŵ^K/%ڛ}%\Hlm>qM ܣLsiEᰉ=5sDQl$_y?ћ{H뫦3`VAKGC7%@oov*G¿Yzoha>~֐~LFޟSϟx0*K]@K~s<<{~gk:* ?~W' M.xsUm,o>o}{8<>ZucJb~)'[O?Ug5ƍ//}[z_m qOzƒ2G'cO"TGoM٫>sًFmn~!ǚ/񄋇9m~I~hAr|rzᓏ{;t“&<W3׸/|<:£Cd4 |\x|}5mOoo&Le7 , ,+|zh3x ȯp`ww<(R_ν#@ ;` eú1y4%ӟ4OK8l;A5^"/Tp%0;?q /^l'şlpCG~}K>)SOt%,ز6t67ǧ}_rTr .9ts{zP$K0,ihC7rq'\Hًptl2:вS`y<3Olu~5oj)|6ſDc#Ӿ^l}4tj6s](p̟  9|]zۋxK@t0okdn0:vkjsڵ\[ <̻]/IBtrљбsO|/EuaOkD&_X;x$/}:k 9q3NE|،oj̽B.o/2›ޮ52/^FtKޭ9:J໮DNp/91#\st3N?u:+7}_{4v&r/ԧ'X`X`#pL=)t5%u.HN'?.ԖPkGP"BBF`N9zu# 1,цC'J@Mt5@!% ^ /`d+x+lb1'*PN> ,aCɩD߳%vΗpZ3yeC_1|@a^7Y۞$F:^JN5}{Oh!9$Om8<}ȵ-8'\{?k!e}]> Os 9 lt͙'O?:t27Aoht4Fr^>/169>$_|l\%[SMFE$ nI5& )۴1uJa, fGfȴjS (YPyٍA֨:j ߻n{Na{}vΜs>|uu]6Zfǧmg.i^IJ:GB.> ~|5z5y%Q"K1I7A%>}tIX"/ ?Nﰇ9'Sq|٢/>ORI>_{zzmCίNp"\sZ 558c`;{^>Ц' =":sq)bgMW<}O4h=h:pHncOq}59 ?ۋM~џi+c6;,Fk\FEC^A0ѣna :~\]tѤcYdh+O5: ;?N-5лXO5I.l£I]bL,nhKk،M|hmung6xTJ_m֕R;SۊU7F\f7U9sr>ZtX`X`Wfdkӫ+M$VbOx-ūɖxHN$J6F!lK~ahDJLȖh)~y{$c󺔺^ v%>l7N>M%j^IZuI||ٓ/$CkK8gNqD _c>?+D^ WĶ ɮK&9-)3F>y|߷S 5q\}8:|ŅZCGhY@|6ŋ N@| edm3hi^m_OtwŧQ£ ؎<'T?Ѳ6ߴkuOQnO- , %56^?r I!DH~,4c@Gb/H6AyS:.% 6H,:DԌ1Eev ؃ Hl'du]:T'4%Ƭ9'ۭ>+Оfk%1'<blV>k9L~1P_sC6[>6Yp^S,*w`lcJ??0ć\w}Kc}ݓCp/>9@p'~0'ഋ# m|`_f5Hd8\bOst#\EFMIq`=dOk)uj\a8+|g{%;ٍW>Ӂ}U7b oO- , %ثg ~5z 䪤-q @[ '$jiJs#Y\XO8ЦOx2c^وX؈;i'/6쵡wI|HȖ8ͯl%d0G@Ędh% HB'RLra@-#<[e~O9 ɒ5oDF_t-ns~o ZphاMB5&lVᓾu<֔^Y䓡O-hҭ_Ǔ\4>!_m>^r| dt8y3@J {Ʉ3VO^O֗=|zz6|]E1fE6ڲ^Awy )iK_x3_umO!s1` ~q#{=ƕg=,ݯ+p`u*ugvㇵrQ'p-'?>A9IO[\7&Smxkp/zwF<4sa1u~Ч#kX7Ƀc5{13 7kٴ[9NwŸf?}c5?8G]^S kX`xxᦛn:*E0?O6?lmx%]m'^?җp ۈ^<nEH%LͲ0#9v,OĐ51}WlH0; >0F>̏҇_A#,+Q=b)a3FH'}zME\:xu4yBfj-xLs@<~vZ|i^9Zf{kDGkel=? }5//cͣgdeB&=}k̫Hf|.V}\?'R ]Щ'=ϸ&=>zco\-~'䱅 `-ѯ6CȊGۘ+ ww__xs<97>9ϙ/|_u?ƓW}oqc}z~#y|]~bm#9׭. ;/wxenT.;UhqVa#ۏNC<ple`&U8\_l>+u5ӿ9XhO&\qN`ks,aFS`3 h=-",yUo6666' 0VG-)B&f7||K:pP0*1`$O$MA'6 ]l;o ??<#Fd9J-vG6_~k1@#L||JF񊭃̫1WkFC?,QG8E\Qzc7%b&{~A ͮ`NWtdc6>m֗X=:v2^þVдJTd3$5G[ `yy֔?b}̧{־yFف5osPe A _\7MO]ѷ.\'l%?)'pͳ/x?6SbC:`yhZAv#] >ttD Z`l0V(5ͷZ_`nwsp1!`/;БA&>@\&1dxѹGZKr>r9_?3./Zݨo/K5/X]aUn->xվm`[w>?Ͷ;4-u856Mvy\9`9?iڴ<0KPlv(lѣ@H>Mr6hȐ@'ؘHN$~\I@a =6 >9_HJz # ?z~z$vK7z~1_١84!DW|=BiPKRLqCFMq-c;K'Ytq ,<شk@L+G&)u_%PIRN SBVHz݅>IxKy`~җbM; V͋qv&!G,@1ۡv!|~5֓+T> WXzdӡg*绾8}S'Z7_b!qc.kn Oعȧ_xCgz ݐI<=q0M{ >moGu]Sly> U'ܻ[ă.9/v|FÆNdZt[oxeyM6>ak@ӏñ }V:_5.x،G{n\vᗺN餋,n+lZ ;' vq?hgW6\oquX%{>kplY^cGvϝĮq嵇=GG8xV/6cUq꒼-\d Iqk/\$.6+~~ksK$F۷o?~NEB%q$X;VKzW"ɼqz2OԳ8?>n/l-zDwIz=Y!+*tl,үMJ~(bE6~x:3b ]ho>bA<g'pOQbn^\⭍?>}$.]yEWl;0F7f\ dsu٤Xk'-.}j`bNZ֤xoX^(л9=^rpiwa+.}u C2BO[˭ cd t.<ر>8~xvљ;q#1Y^xkaXCpd! ) 6 j>Qs٦y[lhrd+yFO<6Va9/ KsuL?{w׵;|>>#+_]8zE'ܼn[{ ;7)!탞YΓD+(pIcS5k .(]up2n;|r-8۞;t~80}7yaJXn8~tt1=:rp*< ?ɯ,ƦhLv|aa>0㶱ww<"`{qp"Nb0;g۞c>n9?iF5//zϏ{z5/ZU/ AD&Vc^_ JZxJ2F&ځIƙ|Il2HKw=.pK.^xԗH9kC)eH`$n9p}KX<")_;ߦXn)2K\$\UE/ _IĔE.~1/v-d~2ɰ&!&>[?yG#!=tz wM!S̡$Y8J b[Jb\6VFg(FgB\/y_n:ljCprLN`3?l9n)OM{>_5s`d?\ի]Q3nx'Wsq@n,sp_9+n~=|QflmrmKxla Iolm%06x +mm%K6͞r(0/zֳg 8lmdL?(8nS}IF)AKOn ڒ,I>xɝdP J$ gc.fO^ĊJrV YbIXEl8 ǏNߓ>Gsov ?Ρ> Jy웃>9lܱ J/|ГZB#;d‘jd Nm^>xs~M:1M}]̍;=Zjtl=S9`9:SՅv2k_ЅS?`ɡu^)iKo{ʏljCpjLcOp\mW?~y`O8m [%c^SyOU]~*Wq>®M;86 ,pߵ䅧|zǥ>MJRlnia5.ͯlr$6hl"hKnl%~vAfS&-]>^As esnL66%1`;[x.Ւ6*)UlԎxIȧ7['w}#lfÖa ~>*z2&gSgk7>odÇomcy v]y8',^ɛNVkf6uw?l??1x 5~ܨ6666 flk*6qlja@qؠ]f.E.ɔRB!iT2\mGb.yYptCO{̧^8s'CVxko޼=se~q 7fu F]l=#sޚ]/ء:q[{<{YּuH>=c[qq Z']|nܹsIa}8 + -͏q.GԵ]:[1WL bO6[ 2?x“oL2? ;lr_hmw gC0ţ֭qܸNĊ -> }[d@ܳ:>Ӛr>rt§?}x3ǟ_qy{*8(/[=0Xݳaqa&7t֛@[:Ӈ^ VSkkk?3:ׄX{V tC Ñc39l{n94*gCM;ǑGwy:UBU޴84;) -;qMB8Կ5c=4=9vu@ʙ)fu_>dk?pxߡ޵oU2cgg%7* $&Zԁd͹kdDDͶ6z)H>OM9yHE2ߨQ¨6 ^E_B~:ɲ`IF  q (^x~qM%M&{x x%C9ВWk> NǼYLh?{l=<9c/gx]|)M8v*췮׼U>+ V1dXx5?@G3FkN2?;#؃lV(S[+%l:LJVns8B軗Ёךƣ.4:LaGh^7v~<|x\Y5Mjrs쩏/159j8]Ea$S|Cx4=5J9wVpAn܀П <`nۓO'wwzxϼ=(̉wxα㞵'KS= O՗ǟW""-Az{37NSQJl%16 4 kc6Βxcɗ/p~Ew0ē+%s+ޏ$ Jn!!7^bvhtdž0I x<} < vJm?-٤4􋁤;bIx^|=$;=5WLSf}~z5Z@bcB[EiO+H~ ڊ+dyG6(∇?d5F.E СMOGZDN,e2ح/@V5yƭG8t ڗt곏.ĝL|ŕn2_x[ָ5fMⷖy>16e'*g']><ҷɚ'ٺe1Ojx%xKA[g:{1sMyko$.%n-|*s*?=|~4<5:o zh7wxćo#jrTв/h̭|1x 9Uѱ9A[芯{"eJsxjt6k^|T .x|/o^7Laiqؙf&chqUWc73pύwEu=[kw<^  ,Ђ'9WnJ ^v1UǢ7?'?m߻?yVK%<% 6$$[e3 'ƞBb!lm%m%MhJ,٧ '8K&F>"?|W=h$6!dA'tJءO CI%zŘ}xfS 铇ptv^}q+1W¨HBOUq!ӡ`>]gmf3a2ߌ'[lcz&Gf#[kEBOo^oshm0NL5Gθ#4W_L)KV^[@1L8~[5W>r$䏶Z"WAoH7/H'ءﺉ듮'*?=rpKTwk}웾&l^̉5f\=| M+v:(']k6힥{zz৿Ng~?yֽ^/pJs4 :ro^]u8khMEc.kB2Z/Gn16&vƫ+luhmЭ7fe/8?{»l[ou݅@۾m<_, ȫ>~>ӟ{x4_6֎y6?pfզFFׯ66xtCP ͻͶM49666O$K}^o\:" 6%D%HVlm%"r$A@ͼ_K_d̆| ~j՗Ap-` F/*\A38 =S\6v1wxOfOd%d^>?cc;q>e _*%gZd(KҳiLm~5g'djO_ELKr;L`7:C6Pc=6rɳ>G>ےk^mx\+? OtA+tyK[R. Yb8ww#w9[l`WR8׃PkuA:th쥟ly'&\[+O/X#Т!10#2]);V hĩ#zhZO7gb `]:Mءm ]k3txyhխ^7֢!Va"I9xx8䲟= 6leCJċL|!~1ieL%@~ qzʼn/j2֛d fY֫ 68t=WaGҘrwO rc~6M.td#Ex/# nU>{x=˘-F &8 v6F>:em8*|2luOc/~@C6mXgCt9m q6F|pZ2̽Ϸ1p/5?d 3- , %`SO{Mׯ%䠄a Z 1 FدdJqzS86% 6666ɝ1:%g'@o DGR'cr8狍Ϳ_Az81F]h|3fM Gd _Q -(RD_Œn񐘡7|̔ TTdHb3_+Ia?č}OῘѥQ.xdWg#`ǃI<}_ c2żu[X{+xr.r , ,p$œ?6Ւn`@k+6_$k> 5M$|z\ MǏWaٴې7F&[%;6dGoƵd<آNdJRgOIDT'ȤKJf;hPK^a^aGq>HJd#.tdIR$_q5:ԡŏy"bOH4tHqp^m|Ѵ6%`Sa/FuQ6F:|V@+~D8‮ )Pyfy9y65G6)YIOgOI;9&:jگ_0ǵ׿:fYHbLZ1&l{mƢł֝k[ėM}pBMbK&[&8b]1w_~ ,c{=3YrcWٵF~кAk=,?ă -Nh̗b~ )h/AO4lr , ,p }I|mUڠKvf!%.H$mmyȀ6/@:ڀ|{RɁwɊĥd/%٣0/?+#M&'@Gr62VĐ_bU򧯦,nM9I1c<}%LbIIV24_^ Kl|b]~ftH> ^M8Ј7(Yc2\|dsEl+J&}ld-9ЯN85hzN7/ŗL,?P_LQ<ӎN mO- , <0{"\ɇ%lmz{LwdCHHzG`LR`CmsO|nܡ4x道DH$^aL͒3x 9::'SO烯j[[&xУd95x}I< *%$[7I'ċE._ TrEO]t!l%j/hŲ䅽jb$'j$~1G|ܑN W,Kvଋ|@O?]茧 ȷfG13Аb.`-~PMxȸy`b96;ѐm>5?B1tJW7^̓k[\o'Dߵn;w$Sqʹn:;v,}qT E>θy}C&OG}٨o.A8Oi}ӸZR7-oh7<1`e \rh=AG̷uμ" d˙ , , o ̿7 ˹܆fFaU<6 d ;䆓LKK 7\}bɣd۸ w Qw}pd vm*y5:W!9khӃv#"~ץ;IֲC 2GkԽ>0q5aݮdW͵[b>{CA<M׬uM7yH e\ڭS6t/~Ej^nn;Ů9!>PF%[@d*dF f‖?ƴ¡/&l0O5dBxCޭ X`X`lx)H|GCH)l`F CgɑM64Ok?ޞH)iOСHlN2c#ƒt;) bZɁLq!v|}- IC+q/ d_Ӆ mcHDqz[젇oN<4AF>ë'1-Ϳ!`,_ȅ+6ix[JJ< [-[b`+<YGC|@6h,%p}Ǹ>3&7FLJb<ٓ-zкdC "7xɒ\w{K" ě.zdw7ko;Yx<%wu&Sн}xqu,cbΚl_mdA,&'Vj=ͽZ J9`9: MozxK_:M[oup/_k/7\ON*?9>X`X`lm%m}[}0iei q`SL~m%Vl=y"KDlm9xGG6/l;`>_вK<s5ВlڸOxr]$9tQXv& ^?Ʌl GF\ Gz= 9&'%$D0;ُxӍN^r|gD 4F.ZrPK܋ xmb_A(M جn}vuzCdislc>dd:pbw4\l)yAs$?]fm f/)gЃl@&1QO4q%K"ES@$.|Ķ| Z@A@%VlO^ȴL?Z11eN5g2ъ6 |P!{ k=3t Vz8ms͆bC:l^tɈ>]x:͡&Gk61,[_lf'9hv{q_kDwzm+6\s=8~ _8~y9'>a|U}[w\zy?7~ȇs;sunuq]p~lC(uMr٩Bl8?.{}=<8yNg.!Y_>0[[*lv g2 I6%i66K|Vtdꓫ/ǸMb<g] 'OR&IC6K+9P8]xɚ8%+z~WIclv4'}6KvGn 66ptRI ^}x~V,| B[Mƃm<Wjdh2:e3Ȟt.m$Xpt_sn*?ںOzFNs:#c/ڭ8o].2; $!~3hc~OE'u.I&ct8$t]³IͯQ#ZFC^k0:4p߮?rijGx؞pJK1KbEZ%8:<+hm}G|:zlT+hA8re_\:qu IV4Ɂ' *p-&贃F#^h0r8 c+lE8*VOOnsՍ~7}%?x_0c~g@g+H6v7>:ܶ}xƵw&cǾ';4>B?GW}W)?W;5a~>/6^ ׎;7c?,4'$զVc#kCNJJPT)x9Xz׻_=]BonܡŽ;dBgd x8`aNGD `}{d9[KD]W\q'<)g_f>~-=} Wd] q !>z"[M/?>bCdQ 'O|Ѳ__H!dn:` 3֚(EGT9' ݁L6H}'yk,=dA1V)6@*W_A|) q}h8C #N8|T'v xc};~cko[/ژ`KJɤd&N6Gbc۶mG[; /iCB\Gȕ@?M^WrV^:$@2@dU2~I%%w VD1kR_\;>b>gL{?98ŷ<}zȓ㗰f%bKK3\riPA8x J6'# ۜuA&:"7VдfmqRnz%S$ (M?A5Z2Ktt!CKbӓ_t[[hБ>k qCCub'Bp>dwX_&heͳ=yP`}?)Onmx -;i+k&[J\<imG7 ⢦W_rt'>WHZ^tI??_]8k`qÎ} =x#zWQn^AY'hO^gY_pAI#o;qkǕk ܱgcwط4#L?lXe 6kt 5k= ^x`׏5;7\} w`<"a{q4M|`qg?$GtAR,.hAc O1c3K FM.0&2f\G!6hg?z~1^}%$)dl 8|LJPC_nšvqF,a?x6']d=g+\k/8o뜏-[: b9h'NE &+j:a1sRql}cfU>8j_}SBUg8vgҧOlחv=dծo zc#[[Wj8ık ok4ߚ!=j=@1nL0~Yjә_1tpxƪ[d٠4u6k[3$ +/ւ+&u6? J9`9:/>MXٶ1_')ku< O~RL1nqy8qe[dΌvݥIo{zM1n56%BE+mb.qX*tfh$/%6p ɷyF*KBO6kHz쒼IpHޓC6%p%7cd'#%l'Bf/He\?l*Ɂpd o!yA&KL⇏ ]|*:E;Űml4Wb. |AGoI> ^8s'$$ Hxvkr}5yj1&c<٢w5-yd Jm+ƭ9s]]G5|a?9's/|^.k `9X'=֝n4dZW/FU-=%\sUРu 8>&dv^ޚw_ d䲉/*vF\;4 ^.r 6 0/$ءU;|-Fo banɵ>,vֻWc<&WMtxo -v:m^=2)to4ب֛xf>𛌮U-g*,@ |S:ǼmW75L8/WGDc߫ ;MkgוAÞN#'sֺ'n;nU8U}`+L8|ӽl@±SLZ{膍6s}I>%Ia'7_?["/C/dKņ,v@sC:x%|l>wI2z%Djt|E2Հnc|OXhZX1>}g}oE5`8A_q]CG٬.tצ^a [%5V]h6avumbG_ZƁv|xm>W5w9:ToA>'O;@5Cv4bg ~^S듯|cwT'[Sb.Ōz>_I?`dy>}l|zs]^ CI[M~7>뉛iON-}?8OFy0g }x`qom==~kǁ-G*tµ|cpϩYHmf%M%@vo'IlkvJ,lgm-9БyZFC#~Pk͸éK:r/AC&_$G& 0mKZ~wEN|%6~^TPH2'@#p6g6.1#>H^ꋿq^cy0&6O>>M6:~#ɤyFg|FÒxs+iWӅV|)|S |dzgۓƎ}m+n)ץMo^5m{7G<~t?ێ3:˄?m`ZssOsF9rh9I~*TŇw4;) -;qIBtsTyl)grh_h#}6kЦ؆d^gskmLP aKlmѺmm+Q ٔ$# 3 dAGOMm]MFIB.,7F;gGIY͘~ ɔDka\BGzNPA)6t-:^R&sG8Gk?zإ&7As.l :OyVC=~g1҅V:TgJĂd~q ~裫x]i<⯯.f/KFX[o[֏&uߚ{I>z K; xŶuМO;7:img]S}@ 9sPDk ZrT|!C!B8@%]|C){͹eCzR[t<7~:Ĝ;Ez9 ]bCc]>~}m6͇䠫ϧPHt )}{j_6\fm>~dw1W}2?Sy(ޟxы^9޽?OXO׼rn||5kG:`;X]g'{O_0^?;;og [NzCwxfα㞵N &<-5pW3vlWNg>`G?_: |jMs\qY ~"T5 Iq/@O$`Kj46’{I_nxIڳ)BcS\aK2m%^D/Ɋi$p@:LL($ۯyK%c^]^I~%V6$ί|QKNو %)d>(bG5>Kq}&zIIx}<fyϊp|%?0WljCLgvHFxE}xz/fVcGiM}|VGjZ-X΁>rǖbt{s:tߵA=jF?z6z)[8«~:бu֢5Aנt.E';.䒱si>&8>x*]spKk\q/O/l0'Gb=!bLzĀ/ؒ\2jCGc䚋bЋZ?gxlNH1;]{t׀b` cݑJy(/x}'7]~czx`.x|ӟ5{|zoVߵkto&wUWc73pύwEu=[kw<^  ,Ђ'9WnJ sG-9G<ċ-*hZ+ <=dq٨ϞZ ̋1~(Ј'߳}@/ŝMd;ڒK`}o}9h! {؉>\/Ns,de3~m];\=YK|$5m>|81Tآ/&KP̍"q۫?ַN x<|;_Cmqk# 0? b'V]kdͿ-Dkk|ptbHnO=aM4jCņOcMlT蠗t5Ef7d/%,ߚkT_tO2ZG?9LBvzђo1{5$^^w5bFu:=3v&:`N xOO_7)u⩠'| w׸34~rt6:Cfo? ,p {x`K$4[ɋMl<{j,oIZg PIqx d ] ԕhڋ,Hhzm6.lɖ88"I/|8kO〥0 6v=DBQc- G&Y ƃDu48<(.[=)z飗m|4;бKaH."|![lepbGۛt'8ـ h\ӷV[d-ٙ N@$$Jkp6YxV~z _5( 複 b:hɵV7:wb:#;legMs%lO|\6glg^sG'>- 9x9J|Mmvbm,]lŸ-lP ^61@[w6Ww-o}'Z"k!0w=?SL -w47q<~<@+`g/}k_MgxdAZXTp3/MnhuنYL9YYa8Qd &Yr"@=6l>u^2l@H$B&?%wx%W6Iq1'/t% 8u>{|_OtWA/j1 ]Ąmm%JB GN {%6 k!vt[ dHЁ^l \@~>[%{ةg,}t? "KF]/LF\6?xE7ylQwa.876[m ^5M6~F2z:qC'u;%&tD/F|_8?Z翵4!>L\ c~h:^.4@ȯ!&`t(s+ť>z5;1&g>pjx05Ą4qr)VV@ז2|6?Yjs.;tcL<<[)|xFOxjx-r , ,0_%K&ۓ#^EQt!MGIJlJLIؔ{"FBi.͹ q}v٠KȱÎ<)6Pl%ѫ dW}ItHAlC&%? <}:;/t@‰~ࣇ^66SȂFW@L4֏CEs&X|'t1"xŞƭI2~E|חqr>2j=bA1!uN7x_.h8&ۡ ;u)z;$k\[lk͢}ǵ .1Ěw=;sq\lͷ~N=~z"=H+K\wi~6C+Fba AǼ).xx֘]phU;xك/#x Vk+qrvmm| `,yH1}7nNc]lϼc͟ueDC1?"8/k+wf^>5qx\wvi/9ptH%$OZ23:6ziMr+>%ņçMtn4I>ђQ^ ؄1/}$5^FVoZqٯFFI2AvyEܲ|[bFdRx-{9:#xsNMxK'M\@>]쵎!{a=~Y6eiKRlh`KŦ\!.>Z䞽qHo܆ፍ>EqK0GS¦a7_ Ѓ%rxJ´Y|Cg<;8bvro*eؠ3<4%.6.6q/~x K;0N/ŚO^ 0Wk Ek=Zk ,&h3\It\ d:ZU,;6$KQ2~'Ė=s"t)QIz@^J/A#&tWQ D7C~lW)msMqrGE9+s @f.}iPCSС#_xh|k}B!|:6ŝ].œ^"\_]dщlZlK8bWKV>u~@u5dNŊl0;A:Fn>':>B/vuu|KE7~Oq_Fg>s`c|vЧ| C4d%mbMXy%OlH5:* 9%{>ņb.u ~4~xt(V*ٮ9Gl8ŖQG_?i\<ĜtYKtG1݃Jz[ZC׺ oO- , %u cXVnCk%jO&Mda$XlD78m1 4l8ac124%)x*&Ϯd8Kf !NAz_@8' 6੭j x/([7.BMr^+h }Of2ӣvፘ~AOkće/9F6/^h]3ו)~@'vGk~f^ȡZf#>z]/͟fko{|tI?&Fw10߿ۿ==++S~V^e;;@Ef<;ͳ8~>\B/zx;9dB|'8cxã3W:+Yց=9I6@K%CX]/pr>rtҗt\s5z:ᮻ?0^rg{_oǕ蟜T_7kr|ju, ,gHrlrmdm%)Iˆw~wDAbdhH:lW2\q6* x 5ېGg f&Ne\ن:x2Gbܯ$ %8;̓_‹=p%5b@^}tGˡ14lJVš;9MɈq1xc(@&W񐡰 @}x~~352͛9@L3FIDATF>Pá1::g WhA:`gsҼ[M&]ZW[j9gNOߡ* ߡk[h]_͵>=x\ًLpQ[{ŒOwc>!v|\-pـQñD[?ɽFL:@s_yxᕰӃOљ;'tڠ|uqE_1 6CO.9bLFkɘ-ݺSr8jS}h5lVh:`5 c =u,<`''rٚ=lDc]hu'm8tD.ѻÓ.'Z @gҶGZٟ?{Ʈ]6,892luq~s|nc|G|xWxW}Kxez , ,pni<׽- I  d Ο[⋧_G= uaS G>y6D/,t6%M@bb/Vlmɰ g#͹ _=) ?{>^2O^vgxdL,ENɇ'J $bG 'kK$+{]bƘr#7Ff1}6<!> Zk77%`<(f̍1z[5b킞~7mmd9wdOTI2-䪍ˇ< #y'zmoe\d|Yb&u\te\@5bY/h/h/Ә@#K'8lUث3K|&=a(]K䊓?ѧMd CF/>küM]C :Oxij=` yV[ѣSsCGp\gc.040[[*l fg2 Is}N*)ɰ{h$66X66j>hc_B`Go^B6f΢.!%p%Y.yWؔnc١L^d ZɒdZMIL9x%Xb]b 0/؍\ 3;n]vF1nhѐE0hXG2p[MN V+$\m|vK84x1}^MN~jGWLلnhpu;5ƴ'OE1L:8V8>sRF'>g?L'ns_1~oK.|h`uvGvMG>l>2n:څ}tm,X%k\;M8>޸!}+ضwػƴ5x0<>iuL |0tʼMsޚsw ީlµXO7 I@pmM $_ <ϟ^&%~#"I6&B/˻$͓ 6 rHZ%e%x$ >>M~ 'zEMb:d}N 0Mr p%~07'E=`_&_+Cm<w͓ ėhŊXEcNe~I z>ZkFϗ[ǖnE6mvf7:so~ȯE Swlg_)a&8-c%/V֙s67g/>Yd{?9@6[ rt'>WEFT>ژE?MsK}aǾq?^o@['\{m#AX{n7?wk CW;9hBkoac=2vN]=i8|)Bs~,p;Iѯگɟ8S-?C?4}7[[Oh\mCP7ZIؠK K|T7KDO)Hm6mm*4_m%x \lK>% - _b@GI }%[ 5^ $pW<PS6&sg/2ЈЍ_;XBOzkS'O8:(s@#vjC |%:Z/d3 |baXI8YbUD˓m%ڞ^!W"Cmk÷x1uZqqCt!m!+{]hE'լ%œh#[<}z1( O+5zVe'9|~|`XzxW [1^:%<} <v$Fdܚe|'x{. yxZb<~r-ͯ!ys5䉑WtY-wdzGO@r>rt_|ꓫOSn_nj/Y'?)t&u}|wv}zܲvѭO:tѮtdmcOu9ƍ 9<\Hk2pH7੏]S:OwdäS#W};<~p\Fs|7vx5m5vJ ǁOxw-}7˓![\OuS`{m.rN5+c`o,kpx͋^4^t|_<K.) $]z״/9Q÷.upel`,pFچۆf=6mމCI`8m䣕'+Q87/J (l%j:\š1щ_bCF`DhM%K 62{%-Řvϓ,vBjGl8tEtx2>:v>)n|_vS|̙v8+l6_[/l$b$,%jt WЪ[{dEVenG>uTI7'׿{5^r'7ЩƇz`a~_6GC1>;<V5T{}1ֵ6=]sd-lɧZçm.8|p9<99Ѱ<sKqdoθ$u}r~WƆ|7gd'ft+d&~|jt(f(_ѫ<։Cp%1:c-:qk{L[z\|5>?:r>Zd8V q%b}|S9|u<`dy>}l|zs]tLz͞ Wv')UǍGNlv=stb!y&O}G}wՊϪmg}l77_-v]y8pEH^N6X`<\ǁsA`9?in{K/^='|ƽ?3h#jkCl/ 1]6c6ѷW$$phm~4 vmjt6xid XGQЩۆmMDі+)#P%Hy:mЖO8|8.zz#ևn6_qtxА6ha^Z%bKg&ŏ|UFxtMA6?#W,I9Ek(e}|tFxX^t 9xPz㇛/;S4wty ,f_;|'ϡ3|1Ks25@&6 ]lhO>:5->tp :5{}c,[PѥvFcM_I/+.<l؜7hO9 O|7+nlP!˸KAg R'XAO{Ɨ~+ڹsܷ~Aїڇ}Pnߗ w>룟O| t=mO;VROkf ^7]~vgm{7GN<ƴ!URVk^k-αCq'|mXrsM衽㙒raIf𧃟c=4=vu@%v<j=^Z:5~nӖ_M7|7Lpӯ6ϒ,tzuKF |L,q@lKLl=!$yƟaN'l4x:/|W\ lLJ>TZ^5~%ֺ.BkIcw}ފ5~cz ?S9`9Q??wm{?C<|7=']7wxVα㞵'T\<;Yp@ǏΆ h܆}"#w;l%! 9s0RO'%ڽE&?/Ƿ%gdk&^a??+ d@boO/O*FJM?:8x_bӥo-#?xM'""C~dܘ;|xK %`.q'?@W !{Yq"g n=gç6rhC&rY+)tǍ<%;kӜD ^йxc7P@lY[֬5`0}ljLWU_uNe/[IXSwqqtx6ܿbS ?v]f/>ЈbHT`1o} St+~׷ {ãkF8sA>=RCBYphk,i/`N:`l+4hc>_' Fٜ.q֬ kӘ5WI{1neWӏֽ&J 6Q\ 7glMMӆ/6m%kMdN1.qW7جGx:Ff$#:0IK$6^V2N{P:]8tty D@mo3FہO 9ʖ-1?=Kp$#qMȐ_B-9ţ ZoN(i?[ؤm^ѱN\ԸXk8%s;:)lW5FE&7c\ DʆOΡ5(V56m~;CKZ]3ԧ>u]~'X_uLčMl 5vщ0wO10ō V:_}@GŞkhbB|cg/[Z%K[c8tⅎcT7Wp |iiG}xdYxkS84oNkn2I/F|\_{~O:~d; ox-?1\__UWխ{˟[3Nώ__o}[7,N==~&p~Svzޮw_+pk.Qp5O. /{kӖEK.h?d\޷zp<}ոL{q;u6?1~}[ͩ8gᑰJ"ͧuK.CCfׄbLa vͿ6~GtJ#bC̫";=taGok8;,Z~Х])BLH7񈧶?t敝la=dg>CiE^5_x mv:Exv!mj&s}v~]j㳶\;^ѺgB*}!==Gc_4o~pZ65|?3Y>Sy+`g/}k_MqxsZ}q_Z`GݡW?~|}Oy=c׌Wlϛ??<%^j[`lZ%~6p%#CmSجdBq!Tom -c/(H,ڰ; DbH*W(jhɇ#Ap$ĽDC$@+ӓW˜}%'xC2.e9G+Fߞ< N3tl I"m>=1]A6눝bhNzj! SkK5KLms-Gk$l4lXduH#>=h$l7q"!<2jrk81'hrJz؂ߘh{xҁڮWJ0.>/+dK}{XK:%=eOjvc9<6&kFok\M>5N~sa +}# Вӵ,t'Ojӡj:5joe)ţo(|Q>@OlqyLJ]ptZj)?^< z1 Oà?ӄ"5Lk|2ؒ/[),@ ,pVoH˫3 ,<ǿt8q36+_l u ƸͰͮÉ*ۆfZYRG6=~'=%F۶m;1n $n2JS+hK& ̔@hn76Cf1ld]VK0@HDA%`A=OFDqڒuI:;p@ flV:{xMp@|eԠХ_1烱ӧ_4M<Ť$Sir"O ۂpڀmŕ]b<[mhL/bm7l'8hљG|<)&qPFL rl.kILGS d/iw(TCh/!^@Wy'҇O~EgL?9َF^D׽R;=]dӘБỉYOZ Gk\|J9`9Z`X`8K7lhmmJ%6%6@߆Wmܦٸ6/yڬ+ Eۘ&Ck>:DG/Ј=d Ħyd;^ d7'Vd#S |>`1dSġCcS0/SJ.c[҆!F H/|@N4\q懸JCS>Ag'Do=t9H0M6k/%bGf$a=7J6WbG{\fEݻ'1qDlM6tE0jxѸ8>‹6Yj^6T+7rzqqc񐏞$l1hՀnsB'Bvָ6|j%? m:\tɬο M-8_Ec .̃^Ad+:S9`9Z`X`8K@F/ZWHz ,ّx@+.l@WХd/F䙿JT|Gy#: |h.><lQ,=tS_`ooyȁw^֬12>rŠqwk).p T'XX`X`fQɗ,:LFWmCnؔK %(6lKmmm෉h΂M;)'[Rl.)$G>vJ*YA{@#I!׆~t6(rtKEHa~O6PHgmmpk}2٩_6W z، /l v=9EC_ iG_*-[l O@f:pEVk։_D~47ƧX%[3xZ֔=b@`Xj5ubmd#:-ߏr]=lw`ú&k8~7a}cM1[3t4(l/wI=vF;hj䠏Oƽ z뭷N΅^x>%x;c9oIG_|K6jfoYW7[7y6xC O11{xiOp Z<3VcؘdkXsЏ^1$_ =p욷&xX{d4cb-)X m:?]K.Vg9J9`9Z`X`x98+H"dC+66xjI '+ɴFC͹96%%"H^'Cgjn)yHȐg=_!I}?&G2) (IF+1W-I$Ď, _~~1Ĉlt}y%xcCg.yӦ3 o\+{J4`A%tֆ9(q`bN4ZohĈ lR{<tcN^25E᯾_lGM7Yc9Z2&ZKbJ\^L'АNא1Pnƺc+N<ã I9#cҺvSO.:<Ї>48|uhlt6'9t=XF9v]/xyF|U+_adIs϶J>Moqf1<2ocNGVmjrO'{9 :7}\859[7 G^|zabvAklr<%ZeS-ɔJll%Y* M{OAJĈl'{v! j9Ɗ6'O/<^gm/qċ+VD{sl]|o4$u':cCs$Nz6:8|&>Ywءw=9 +ѱ5&)e;]ׁtmpGX=A'teq?g+؉-9l3E[fDL2=tk!FZt'uμ.OtN.1W`:u*[51ڡ?Ŕ<}1dcf^p/:}El`' wE!9z. o|2ZmP7FY@?=g1qb᯸V?Zv?jш)2AcBFclwW7 NָrIxO.O7i/\sͦŸG)wŸf?}c5?8G]^SkX`8;0666%G6S8ؒw ,vr7@KL$@!O_toz٢K$6I$$:tIj3j#v]2K>؂?[< Q/{D-vu6 IL%"F!)'Fxzm5`9É/`>3:zVO|.Io>ѱCO>i q5>ϗ ;įOӖ$vmk ~q<5b֚uC5&2 db_EB6! ͋kk27tb瓢j |+^Ɇ~zN3=5?'m 1?:;k]hň R͝3__?@Or}YztHMzOpX dW[GmcF됏㇘.uृoh ٤C7x؟|/Flf'Wؠ!&||w^Ʋٗn[k-茳C8_Oл_.W׬{6zvй6{*\s >տߴ\Ӣa3co}xɞdM >:l OH{é *x[ym]SbjsE{^X17qΦkK ]|={46iM 'Ye#“)6{^7!.ؔPڨ|s)|'t:NJR>3ήڭ#/qWϴg> O60s,N ؙK13%e5ę 01vPԓ=r/KsN/a&]~M~K9*wz 1=c}ƌ.6Ӎm`37Y ͱ3^1{qі{ee[>LxMO6W(pE^O+2J=$F>Y5,(׺~cɒAl]_t+\b 6CFqW<\t'\7O/1!ͧ,%@G<}Yg5z6_rw[׾rO*rM3_Z^s2zʯォ+o|EX+dYUF']&:"׫︲qaZ8ѻcң2[%-ڡ᪇Zoaއ3VJ]0H,p---xU/H%ɊP"g!l!mQ+O. fz Ɍ$EE7]Xts$^2Hx!z`f.X|NAN. s$>b$)O?SO=+>݊ |K,l$iDKq?s 7I؆L'2q#mj٧W?[ ̰P!cc?S\ِc|_0D'c6+P{Ȉae6 {'ƃmvXkh|6mr܁8z"\u® lĘ' v=k(母zr] |ӟq2_.s@Km 6mr}S`:|ΌEgÿ\xa_Ƙ1S"ȰFdRG7+1?bdMȑ#֜kcډM  l['א0ITl`JR,=@+^OMRnOfo.HWhB)ljFS,| ;;xhx$'>?!|{sSv<ѣ^?O7~H>- $ʹV0Jd !t*|LDZ[lvѦsNs:¯PI:l%92&>^f|>|Ɲ-+cnÆbn&IC%q2;6Kov\8nh>⋘#q-|6`a&FkNpe|MX3)E޵LllԨm긖]b`K^Ɔ>| 3 2jrk7~n0jY;S Sb͜p س#j ?lXp:V^|O; `ᜮ]t'Mwv\T}(rO8;6smהEu1;6ӟZП1_Gc~.£ ~ONֵaslI|lةقuisxO")K"wn`96VM?ou|ss{s?|ha|Ga'=䲢-w/eexOB޶{^iP6saeາٴ*k7}#ehlZʎBT% } Z Eŭ Eh(&WEopH]v5:N1Wa??{%5J$yy'O6ןcIc$ Yaeǹym+ѕϱ+EQ_[)byl!vsG6(61WI)^r9I6fc6O?\y`3G̦$|p }EW᠏gӽ?_O{ecn|Sw/ x ґ$22/b+ >W_2xԙdft6 ~1'cq>tO6}d6$K&{cgG5'̫OYJT7!;!SNv9 mq4Mdѻ3Pm.&ޙʎW:VZ9e{/#--J3ҴJ3<3u>hS{ekʺMޱsv8q2|{fnEYZ(JuںuڅE'w$X,%` nɛ$Ɖ 8Vv)3oa8# |R;>й~eE򃝛vڔ\?qB-e mųlؾ`90RV컼LnoCdsCe62yCپVe?)W4ut_kxQ5]l9WZ41jrn\۝/&sĤf6;WPvչ/_Wv4hs.MJ}jHG,Z-h--n%AEIax$YXK@JԒ IXt[[8[$[E":IE5LJ_R H"n6,ԵD-rt#rpÃ^ |N|[$$6J #!HaHLWF$5Igp'k`ƒ'GYy_6)|X;RPNk&Ca</c.[}:sl)!'6slI?&pG>cN=9^eWanhSCzW~O-o8T&n+،d1fl/l1a>k˵`#~:E$~ԎL52^0u}d:< T9<)~;~-~h_~yt ՆCV'5_xmDMr$'| `A#ɥ?s6tkxm"&O~;Tג_r}}bt=%t LH?xgO$n6I>zEկ~u3'#C8L[bd㎍~]A2dl+_'b?a܅vtm~lj:ӧ]q؁763g8 9s<=iÃx]p*6urd1ugqbC Sn r˹ڹXSjX( XeCѭ }#1GOn`4wLr;/^sQr s9Gs}+\8ҟ8ꃛOt\e)QZ@E}߾;V|ރ-Oonjmh= Qu~8u|c<6Oxh57!=x'=*BCʮ~vҺN2RZrTJوB6ɬEųBiKV;ywmt'ẎkK"/xOǟs ¯BEǒI0=ϾS/ŒؑIJ$IpIِ())>:X- cO<$vb+6!)#O'IBTGBCt@6Irү vᦃn}Cm6!r6`Q7/Ɲ zl & u[F1 M m86Ĉ\cdmsɱ>و 620 a¡vpTX1 nXdGϓ{$$lצ1mHg+6EL|g}x~%-sN1FâSqL|fL`XfluAN9|7\omoo/1F q;Oľ9=xVǹ O4mC0IfG{F^_Amt:>63?Jf 6:kxs- 7n-BzWrUgY,tl=>lڿ./M5q]1޴ʊrq7gl^<<mٚu츸\}n}U:ƺO!߯98' SݣåfeuSU`X^[O]<25P<*=FB >O$H$Ò߷_H|g%ڒf ye cne tޒ}xy"yړeq.aL&ْѩ9I[L^1l%~+0zRwG$lY2+.6' ر7v :ɹk|sm$b{*\tYO@ /=Gb 7ѦŮ>8l:6VzbWs'3z2g2'៫˷ne2qCnug)=t\yϲ~.s[=~{?4U+_='Ц7ʊ'ʶ]Փ7e]+`׷o~zpټb{پ‡m}~h#7G?0CTBw-k3e~;{ӳqK=жݎSV]eB*elcP<*=F"[eCDZ״$P^'@XH[J2,_ݑZZ\["y䞜M $1x&&RKvSϦM'jrrI`aU;gOd$lKnƾdAe38ЦE/zQ$xFr-$'iD'~8*WBAFώS?6᧏/d01 g#BRKR3 /ycX1w(7ys=~+#v ł;Y' <_8m]1>(84_U~?ml$|clsו(sI҆)/1?,txdžqtNo /Pr=b6E n>vXvMѯ/(}iW p?z`eu!^J]̾XKָ)du2d`e0?ASL[T72yꫯnnDX󗽹M+y}Slӟ)wtʭwՔOv ǟ̮l#Ϯxl+:Id.=-ѽg>6W$m=^c~vIRϼXo:kmc4RmAڅT1HpH[[d[DK2,-DhIG--XGb9t t j ųŴkJ96P𐥃~Yn/ KFN0;Ɵ;9ϱ61c&#㕯UV5># 5nI2{pʼn?I$IVavAb%#frdN2o8:\p$aK%i7D~1 5>E?rܦv_pE^qv610"mm2r?qZO|\_pcO8q}9GO]Tqǹ~b?毹/lnT F׷Ӹ1n\e);|OU^ӻg<+|C*g,{)/x 9ӕO&? sk5Ξ,Zwk)+w!-r;Lr+Uؤ./? OVԢnٱE>ꃩ,-Е,Y0;DC,--$mH">OXjS܂y = {;@I6I$`ڛJZ"gb2J_TcO-8M=T%sXBjlk!- ׯ$Iz[XK`, u b"=ɨŻŽE6 g oYH[(Ц1=m0YI%J2_XlQW`-.Q䣿.+(\C#=I0I(K;%.|цc/!12&65tM Lq.6pݘ7^X|p<ѦO x+by-GGykc%p#+n| ~׀$G>~E438gB\)l/%l\P12ý]󉜧5#נ8{}8O/܊x v ] _xe>%q׆mbB9=sf n2ڝq㘬cd`C;;b56!cӏ7sԞOH]쐥s8#;#=xPTG^w/DofAzr؛gx+nci~J6Oz".q OYJT7*CdRJ*U:Jdj \s@Z$'Q[@P gQMMvlhS?v$N@GIhB>z;"'qL2#MMŽڹI$sIF^wDKbؖ豉NOK08/QK|"XH"sr0щ'϶~Ɏ$)Jڵx&xy;?*䒞6E7}(qhY#mxR嘟|_fcY ŏ K|'>$6m$K7c}XmlNi mmH@Ã70;aK,0o>AyZ\<%d./lXؼ>_5yk-">$Fi9؀Nǫ_8{q >!#vp/x8'CS'ѫv\nUTRJ*=d+Wl6?$Xþm#PYJ,p%"m-(ZT`O7BmIfSO$=m6O,-ڵ.tiGlOON"X \# J$P^K?<Iz$6 lxGL9 'Q/ $ztiW珂?1g#2$BH|HPbώEoRkwێ?6Ukl3fl`_?O0Kk7FڲaMW6;Ĉ) ovOr c/~'m0+|O~8QbSqܰ 9$n|-v7WɈ̎ Lm3tݳC'5vg6|QO<⵲_׋xZsR<<ǡJ2FzC|jKcz⊗;֏WL2wGcw`B0~t3ą_0A8!=.} a@ɼS;+0K5y}IF6Zط(x%ɑI ;'O}5,^"'pSO=>\ IZR qC򦆉$$n牅pHtr,x$;%cd^L-3!G OJBү=8ɜ `=yf}p! x$u6#IQ)",lDyFXc.Kg^S;lk>''Ƌo boNv$wsAsv8zy56[|g%\3Aj߫:?F~NxkƎ{Ey_`~choѯM?1E Zplx>?RKWyƖc$>#CrƏ> ^bβa, <Od}}Ⓓ#|+\9]rW~>Ox;X~Ӧn5y ymYmb-x\~ H"Oc >sʸ&=ͯ`n7b{>e!kZ9rS~ErUW-]:uPPJ*UT1B(?pw4ɥD&зfɂXX:(YDKPy ovǒ8WkL$. ~ y $s:[K^*!S[̫F/dm0YC%)⟼P$bGO&s( _"#~rxB%6 xؤ/Q$6`#NQd\W8a!j>|#sH`7wɜMףsm9mg#皈o t`xk_W#I yj:dlBB]b>B8HM b^N #I܋ػv)t0 e^Fp/49l~6:!c/>Gc% sNq0vm!H;jclK}Ə"C/jMs}P| ~𱗢O%V9_#r\_ SE|o<}qminu,G?>8ڌ vȡ;WY:uF/^rM/+g<;U{T[GuRJ*UT! ]@ X EųKb,-I&,^=m`X-IC1< v}taӢB~NJd?ɏC"XhK,EI$daI;Ϧ\dmH|&¦, zɁ'FJnmSStI`d8ȩ%0s!Wmx@MPI M\|9%)V?>kTQRI7$Emq(|SؕDؙ301|=q%G6s(9t;t/Yc7Β@;l`2O'{??g?f,5׋ۘ0'3tqt{ƜO԰% Vcvu6xO|ͼoň]9$b$p㇙->nwn0;<伞'Ď7v.گ52pyEOȓF]b'\⯦ܫ#}x6Xm҉EŠtIHqsi5c)JL'"l&|S+39/Gydd!RSӮcD7s~*˘%~lХMjM[lO !ctW /A{?z. B'>I,%d-r% ٢ܢ; z>ɤH"!)II2bK"ZF¦E~|t^lJIB~I ;IaN~]2m5lt9h;IRǰ ډ@ > =dC9d%2x$#m|S%+댫6r#>u6g+a'o1Ga^S{6,QKG⭆ݱs&v`4roSkB-Ո2 ]j{j6\l)%d3&6̗`deb.d#1J!yh'aǗV~2pkY}\n}g[xiG|7=fs͘%sL7xcL|;]7x n}k3}ƽVAc;)|n~\x .[_y]#yo_TszY_V_+| пUTRJI"lX봿)xųEE2>-%$+ݒOŴEq,QA0H$Sy6`$^!IŞD@QK HAp$&b]tQAdԎ71`CI' x7I0%'K2ĎjP-cn b`اfqF8K0gɊCsS(o֟w,IN%GGL\Í/Y+ yD⻾l^%Nl7PO[6smgc.};f9/?я64Čc&F't1"{0(yۛ1_`n8-#36\7r}8'lgi7c .6faa19zpL&:\kOٴIe.'|+DO 8JZ`&>Г6|!W6}dI£=#؃m7CɥݼE1Os]:r4ޙ+lUn'O>x,l87+9DVg>QT=GSPt+hroh߲iӦ悻k(o9pRYOW'_]=ɟ.m]J*UT&^ c`ǒ,--[:(H@n/%8[ⳐO۹v:S+8^:DEx\M Z2. DK; ῍"O-H/ac@N W 9K/ПWbCb GRI~iG;Q· XҎ:c s5cIcX!0'mdN q#&~5?ءؘxc,]Ə!p7>#d1;6 gx9)#rpc\7!x1w-iK&e>sŹp{1 zwɜ Y<>vg8*;[xv'[h.f# O%yӫM6I+]`I(&b k^MscX##{;d]癃!a'lF<0`SaBMzg >{DB&HQ^kc[c#Ϧv:jD'yקM\OlM? _ ~dɰ`xiWȫ`Dd[) ,grK{ݶgQ:]_GSx_|lm.7Us>rܓN+#m_SW^Tv^yOUSWS6u{XUݾmmp=2\cO;둙x&\U&̡K~OHӦ{X5mqϛ&6g.pibjy8 2{AL}cӢ9\zDMܬ$GEDBakl+x?BX""ښAſ8~ 8ɐǂ=9 i29Ưll gHS$R%Q2Kس#K"*Yu2|ͶDP|B0bC8/Ud$ o 9cD7IZlF13 9|I[9f; Vl?TM#']2n"f>%{[jc/ 62d?xDئ7v@͐LH "$f0Q%90d̸aª?_[cld c/x "2憱ILp_͎b>?stlg# ~wygy15|16l \pdÇ,6/𤎿xOrON 36!Ѧ(01j5088X~g966B\9@gbWa871Yq/tn|S#P0d^C=Y6S󅬒wNVbI'וx;w[ccGN6\3OYj~lkesZrϷYmoB?@GLẋtEg;ˋ#?ؔ3&>R^?v|W|c_)\.HR=0j](͍u=:mݤxg)& e|$^6]݄Jļy{ `ܻex\<2=ZFcg eÌY=K;nʊqÇr "e{1,v`bIķ,S)ډ{oä/'omϓ޽>M?? Z6\L9٘io-TLІ/m iB.=؆5s+-^} ӂڱZyl-}Vhk, k`man󱝜 mY#I@59z9׹:^ s-GIӲm.#o] ~ kI`. >' l qX?_M):|œEI 0N1MM"|$?{!:yo%XYxs6ē f:#jx՞/Y6;=IF'[N>f!>sMKc*94"#YcN6K,]bC?\\6c$dgla]?n~:>SqsnsrE\d>c^jqT批Db8S85;E9׼jsq@kt(;1br]w5ҝ|o-cxɈ\t#|Q?p bek'x?O0#sÉG[l7j#WLx +xk>C1SGGbF^5r ?]dǎvmt}%cc|C&ON!ȋ2_قCO{\#е<_BP+`WMT2Ge-B> EH_ƷOï+c,'/_nr5+߿Z 7?s<+u϶& m_θѦeexOڶ{> ,/wN& 794P-wô_\^&{dxkŊRv\~lgپaCleEwiT6A_mZn-iʶ[aR\/㲤Ȇފm̧[彻!wʚy0^z!ICe(c̓.M|{̵kjlڝ?MZAbӦ9\:UZd*Y"= fcɣM l v6n'I1C:XL[[ҝ>,%4E]3BIB,$x/tIJ1!AXH2Wqљnmt\b% qjl$?$Ye?Ź1эG&?O}sD3r(|˹c|)Ic6$b?TH nm&gSkbgW5lb <63Oӟoh1l/~,{bm_;ߵ[&[6{< lxb`ް'IR3yjX.`TyeL?4&t@bS/х8WR·3poBf= m%%r釳 u|Fm 9?щVb/׋8}~m(+ywtuT=x5>Řcl'xXbl}|Ru&^F'CzBq߹$S iW/\rlMY7ƴDxD&M񑲾Mˊ[&et޲u,U ͭ&J1lMtFpټ?C9|FkS;.K:~>`žrq?9)'neG3m:N>6՝f4w}+ɝq{o\>Wy_{i\ڥ}u^@Sds䑠O st,cZ/Hk{7vveW,%:u sEEx$REb-I]IudEA8YX[K}~Wb헐LB a?I}H8b%a8)@'>EB^ jI0}6 $/| _;BbƯ?aHLl"I8ᓀ:Γ1PmƢ]a) >XS_ qIrhQ9kE0A?<楍 aØ?c5SI4&^1f>Oxoo2PV+0"&;>S?lUNP8m m1☱ xɉ(!C9'nt&tg\_bnz׻UmE($gΞLOl_5׀{{[t8g>ɧ]c ?~6_2G馗 Oc $gNc~j>q`Q=Ɔ^I5sDӥ3ȱŷv!F/+<ѭ֖ y(0(pj׆ϱ>7l8'vxd~>} _(g.:& dsgx'&|{ )K"x\|[ˏǽIetHLU)~ $II4_ gs슷$0^,0"} &>!8 I1CST`7L21>c#W#~lC!b/x9cb~%>F*\)G\OʾXE#IY5sXk^b7}1bz+gv`atAt+]I IņL>.vZ[kѫnbjS?=tG=8%/ibiI3'/u]sBxcKY1q }Vsxb7sW<]ث^s- 1 [5!/C'_>z!uJb^Ac<~aT"Cm/ xh77 _&c3x$扟xz3d.1 >|Hg=}b2D[j/N?r:7LP߁˃?X<}(O~#O ̏ߤ9Pf礃OLփP@u_AkrЦg]3'`[pk7Fbl4|'%?1zիʿYqsk6RlPH G p,̆'|gCܒ ?z=a3I<;H;ߌ76&񲡢~~O~ٰq{|v>bZS*>dN=lMǵ b "8{ȸ 6)r0zBA_5Fq}>_W:gDZS:rK9}:v:`z'ӑ>rYmlN9|ǎKc?yJl9֏)E[=}bߵ)tёkC &z9F?[|\4胗z{PK\K\-b(n%E;39oi> :9 H\0?'\_oWNް{ri]M5hV:"p^reY$K,-%&FeI$RI[?^c<')9$xM\i$r>޽i'/ Lr$daP=}I8"!§?~AjxmHHR6ɭڇ/?OdH=aӁq;~6|J/mƜѩH╍m;v.O3mp1/xY l1tIaG~lCCC哟dC XIuM75x٠ W:f;tf@_EI".찍n8Qæ{gWvc!]3tXxoaGAk[o-7|sslHMd\lHFܷ.><^%Ɉ! |UBe1ndMԑsN7 KXƭc:1Y}ljfSս9,x5_f0(xU2Ȼ;7)hfXT7.g[ta+޹|<*OgP9~SNx,Hy=|4,MYgC*y*? #Nro95n/rFSWRoѾ}a$y@¤ͦBݢXBanآڂ:dAGN! Mז%#hËGc}K:~v:I$1d8$(sv$AqOBt~[ž u "|^㓤^ Xd趁G{]v&|_m~HQGm3va#z`R?vˆ150ҝؑ&v>Xbx~~&C!'Ldlh8j>6ElTf,3v;~mO&+t'~"64aO\ᡏ?+cy&(>>O@] ƐNU9ādt-ds"OZa>dd5q&> vQf/`~ݵN8; )0ǶczÀ_q u"6Dx 1 >~3xe3mcd9INom86|jC:5O5֗X#Χ,%@G\$.FOxלU'?[_F}|T>9swwgS.O=v_ t.fq $ H^{xOMj21trٗobd/EDo (Oui4OKtN-miQ3ܬ>"wmY4vʶd,x m6Wyb3nǽ=]lnyDmΘ, MpXV":畮sʌ,_NQ.-ŽdH~> uad$U,h--YkXHƓE@ź. ,W"֮-q%m_`,%L4 $v%˷$%xKR#+&AcZ(y''ltx%}Wl./,/5WQXBd#~6dډc) $| ItCm| ?x|"胑Mr䝫lKO(NN;l)X>9 ]U̴%M>χ>FWbOLc#,p Ǵń,_C^JL⇇e% /TlOcF^y2֞R/09z؆g,Ȑe?u;9 /}'{3>t5_,?v_'G6_#6k$.El%$∗^lq.!`C6$m ;0;c#O1ҎKصa`ث4cf]/00Gi:$g0p H &Œ,\ a9]͵l!r,b%6F7'6`[үx ۵kWvwHٶ'>6vO;2W;5.Ϙҫi}6EƸӣN(GbG'|  |$N<]M)>'> ;g.<,nxg#.x;C[|w.st96g|39vG/}x|gCn‗]Xl;A?}E=q#F%&9TЛErOezk_\t|;p{{N\?OoxSm+QrSeegnzAThnX#9R_qTiqz+VKlV:teI/uߗʽ'=ht&ر˨SBm-9pYZPSRbqi<+Nd848N򚅻6h,%l݂ѕ\DI$ : +aP+<$q/b9J"%r,WK \1H`%/x 6%ndq2g=cלwNVMzyܚ\6b)1 ~i Y~}3$ :kb͏9t0 s=o^G@L[I'_NW-3ogk|ӟڵ.t:7nj172g~}K:"H?|z|l–{# zS`ҧ Ux\{K, ]?_1/xתvגyKܻԱNc,bF1OZ?liS` &NğM|Rt й[w.ogw%g{/JZ&qmwrn*/w[sϳ3Nl:})<.GF4OǜzS E|CaQ/7łXnAl+@hZ gb[ɹ4h6ҖœWlIFw㒪$>I$'Ч- =KK$bt?\-^B,ɕ4'ɳX$xITU vCm\'N6.{h "#icl`5JPCX٤OjXPy"^|[KObC$:“Fq6'ę6ץg3؀-c 牿Xc/}fÂ& \''{\6KMq;]v[3g ē=f `C΍>*\wS;; G;|QGN+ïЏr*Eb SӉyt90à$Ös|G/6[wǰ8CM'?CFI5d\x2p1ji6ɉ]q=%{6鴡"K/^dNvGtkSS J*UTR|hYgx@{ʪWm\4]?-/yk?8Y#] ŮŪ̹"\"y--ǧC> 9}cOAc*$-"6S1'U/5Ոvć6_%RU ц_bFs ^2l(lJٳyb'11266-17l8 8Ư,1>8xo/176.'C&,j+6'\=6gXâƁNׇ9_DZ!foС[p7cCl*'^50Ooq6x{׈E_;qnx xG:S拢?F?b^ğl%nя_6dsHq'g^ƀ|h[|wl#+2XǩɊ;۱A}xn!/2k|_aKF}x7?kKTGٴqΧ,%@*UTRJ X^wϺ_u%+ZYi}_'V _dI0%a\!#g,_U%*obY-XfL,'v$jpJnp.iGOMHlHc;v-K ўv I fD&7d\_%|.$%'ـ]bHE̎†`_?'pBv:٥&aО tu׸`'FMC_43ǎ68y\CH^1nNy,>qMg0#R+,>$yF!zNOƮ/KsO1|Iq251Cs2b cic_rg&oy 9m7rux=d\D"-\Od2gv=6E&n&pңFk8!X)&+~ 613~(1Vs`v]ᅛ|.146]bAM]sáf__εGx(HQU >cRBN^|ϘiW }cC<}9WyAx~p\!r)KPJ*UT1B dU,v%~eJB$j `1ml Y0k1.A܂$<ڐE7[-rnM"Q@ᡇ'  |I.8Pp'wH:Is)dČnɨdBAg6K"]Z`T$-fDZ13b&O|p)l79 z`14&%vn%O_E'\|At$l1QWW8Х'Vt#8l#g"c[bEN`'I@s㬝0M?bEzmrI,Y Wr Y 2Gɹ.=qq1?613ؤ.@~K_xPjY;6鶙߇ljE>2O`̆X$o캾~65.pA?rOK:Ϲc٦<|ԇq-"#nNڰ ?)r6f &j}/Y_2Ka1|da'Q8quL, 6/lb-v¯̯ͱ8ӫM1s15>5Hyˆ^5}ٜ }|'?DuRJ*UT! o[_UmޱcTbk!m+ѵ0NaNޢ$AȒdu6P l6$'QXpw.х_"!LO$ڱ6XW("K`9$HICB$Q"!0G.ɯIV`/iCNIl@D& IP$b'z%>IJ&xȱvs(d|ܦ810)RI%OqOqQ30l q'b<ģO I\cx=|lhOH䍳s`fGs<D|6m\#+jݫlfc~N'~6mϸщf^vH/>;w G3{|(!:Ⴡ,ױq۞'9֯/M0BƔ \;\榹\#t׵ /5=`u=Fcx>5ΔL?sw?n]/9{VRJ*Uؠn% O~S~}oP@y$p$͢B\N1>ɟbG=|t?|$d _®"bt"ccKvIAlh6m~vz$hId"#0H@w$% | ě.BlLItCć &>$IkC~tO|I2 \6q继`w1/N$ym^)#qD1NdXƈ|CL8WVb,\ D߮M1"=elL$A^OАG:z&v 7=yM&>s)4xhÈq]rec$\olj76찧&5]2tlb>W#EƄV`5B1UPװ$Evm|c xQ_c;6c[3ؠ_M~5"]l:>GFǵ!njs:|ŀ`SxwlSY lɫ`%c>A,߫\rI#3x+l*UTRJlmQ] ndmAWK f9E,yI,- '!Ă-6-ފ>IvMRVl*jW ]mJl0KLX_ }jx$| ^28" H^A?=pС_G:%P ِs^Qt*tn2?`fW%^ƕ-I8L;N5Șd%HTf('gGb/6ƒ9??9mxnX6NRؖT\ ?[9ig?s}c㉟]SM&r]9 =]ɜӓ6gk3,{97qGL=Pu{^=K,|xd)٧1691jt(C"Ms1K,O&Ɓ]5N<>:ѧ8Gs$0|@xG_/H < zv:&{k>}b>`NñkSvbm ]TOۮ}}~D#8xWm>e)Q:` \з+-Y޼#Q~#e^־W7icy<عITTRJ Y\tеMg e$݂"\_3^m ZXpf]bYG^ED"\"$}xC'1YӓD_FY%i, f9z $6ƒďjIX$t*? @0$_bƾG6iCR+dě qd9Hl\;C'U|CFȈ]u$>cɹ''b{-Г7WcHqfS[^<1"Ƕ4nic]qʸGx'slI$0c7q|q~1~;&dž>v5C| }o 1ԧ>53%cdÄ}6Q~i-'Ϙfg|'>%tkv2ĒmbqQl<˵_|c{,tk?͵(m%WEBӣĶZ_>#~59Ubē.}6cJ)ci2go1s%Vt'15ws]3ne+E2::ڷlڴ|`.{Wʳ܁g<9jySVSMyOxŋJ*UTDYZfN`BY*pJoqB: ;,@V!mYKt.ѷ@W_!ɀ`Ϧ {I*$H,%X%rD IFl ?ɩVr*~☼l:hUbq:WP#Bc,|θ&1XO&IdLmtE$xGoWjS͚l8/3^^;>{R oE6lOYǞ9Cxx&vL9s^mIl}}<xJG"Ǹdk68)tK8z5v{S5lfPg?.c+wnb b++//8_v ;42d#56)/6ɊUrQ]z zK~9\6 jb'fNnr_?)U)x`bN>ssuv.Nx`uO_p!S7}j}Hcv2ō/'΍YB\e)Q:4>>^:묩N?_rw[׾rO*rM3_Z^s2zʯォ+o|G梉US{S6u{XU=mKc[:6vi:Uؚ uؾ iF<}C1]QfζIk<看&F˪x?ZXZhaކТgq$ibV ɢ$÷;$t^琈ZSuEE>d oZ,-%9O2& ?Yɦ?\O 4( y:XG٨KH/^*F|HHنW^8W ?RYO;a#=%HIr%7ocB'y*LJ^Ү N`8m9g Qc.r[v }8f1k#c<66/&zeO sZ*OeO|Sx'` 4苑nsCL`-:s|6P>8K 2vC6١'N0OMs0-~1o|6 |k7?`#o^صI gd6XFwxځl~}0:OG,x '152t6Ǯ~s ۹7؀+@x1u Č.mᡃ cÖCbMy#;!3\\{t 7&M6w:qcWO?|bS? L.,"  MLY4>ĿvZ?'y{㚍$#+ʮERv=*e{5 kӶY?.m_^&(6GW\^um-{7 {`c ]}x1+b׆},QG#c4V69beeρ=ť8;n.d6t`7T?ݍޝ$QճT {g~gʫ_.5k֔k6zEpmS"IP͎qb`qWBbќB\Ǣš.<Yq$[tqX` ś}56M8pkչ9Oٌy/Acs-&ٔ'>F |e 6q3v(sʜZ/=ڌ.s&qF&c C<'y89wϳi_O!q7.p>8QfAj_99en>GxC'j=ň.as}k#k5]mAL}HFXkwE"N,Y+$!F W$,YMRĮ$v~0*O %6$^_^ M!I ^qx&܊/Hү81 /ڢO!|?;aN!m3t:GO~Dv>e)QZt.\[LsS}-h>ZܗlL-۴b0˾~O#(){w&+;7hDi:5С=e~xfekʺeL;@dңB6-m.tϑ1*;t+;5+4v;S3}u^@ݓlP&[Ome'(cgꙝB5bx~_/zыE(ɢc^_ Ŵ7 {"E5]iaM6 >zՒ{''&Ad-O ѫM_wR:1nƚ lq-8|מF0`B3n⃗_d3OQ郉^v4T8cHUzUYjՔf4t15'ȪŖ5[D,jo9C`vqR<өN?{@s|ǘZ]qO -s\cb_,^v6F؅9p81bm9VI>'|xB􈳶}[6>|)9biƊ]Hy;SHdØk{1Zñ8#<)ȱup3n-B΃[Yֹ(N('6_:OLdޏ=M 7׭6.{na#)4T_8T$Ld6,Ӓ4p^?ϜԊεR-Xg6li坙ьQ?Ѷ43/uvm(#f*b]UJ4mݺuZ e1jU m05ڕH $ad,ѓŹBGe$2Ɂd&2$w K0o*.YKpCs&II6&Yrp~x1^%tjO"/aKob~`;:`vm6.Fd(䕹(<(rV;$C¥ WS }Q7v2lkgSp9I Avm+d1`,`c'vI>2Gcj.\[6G7~>xg+Z xb)1pKby%ymͿ(7tSck>3t}C1>566m 5ɿ܃wM6~b.cgK~k#*kQ=mlёD)x#8cy{^Y\;bX_m|v2_Z ~ӏ^}H|s<9 >{ذE?L,(Gq2gxnňi./ko &>.G>RֹҦ|sQԕOZ;? kM~#bZnm+x5MeC@#ϴcIvw73# bW*="41Xw߽M\ޝkwbμl&XUȴhMW|עŰEo֒ ]% $,_MB;ŢE={XpCE-X`QJ6$J6P<,~}_O6Lr?-Z6\.:X{j׫1w/MMe tLԼ6m޲e~U:b #e|| -9mdžiŪ՟WKUX,ye#k[J)8 $YI,%<xP$L6%eBɱć~ )ng#*㥦O?<,N#t*XMX\B>$HYDtGC_dLjq/{tymcK{'hSƓqoTN=s|j3%MK$6,z-x&u%V,XY[$ӭ 6a.Y''NVmH 'ElVooy $bGb&)0eOx}m]XيlI*gِJ %|(uN,ٷ =׆Uv$ɦqj8j&8#ML'o;ӛ>>KKKF|ŀ>x'o(/v$ Əg-L:'IOg06:>xc/b(-ٴ6D٥?2&{6R46lFdဗ|||r..t{󞩍Ok_/{˚8p|#w{ 74Oe>+ws`)Xœ/xr?_/G>m/1Pil?^׸㜟to21G q"8㌳BΘFty٧:}p"o||meϯTǯ|u~Ouhhہݎ2й\T7PF[!-Wwe&gg˾|7>54m5)]KY1$&k`<}gV ϴm)B4՛ d:s=Wx>i3g9~4K_S~bչ*eu׷3P3;-V=K$B; ʯBZh)! l$ ek t h׶d¦G$H$g!˱s & DJf I9ٰfSOb ÀɊAlJ8ГxsHbhI0E_M%I>{.dNILZq9U6,faXD^%ė =7|sot"6kĚ^x<i"QK^D Hl%nG 6+؉,ܡv>ؙ[biC<?=t!&}`ؤ? fgZzm=lvdWs_#g̽'I77ad|fCdA}t\Ƃ_c~s/y=b s>kybBb< tV 6[x@0']3܇rmY7}|[vmpX!v/xW}0>ş\+|K#1J< >qU633ɼC[C}|RvyxEtn=V~7gfGֲЙ\Duawy֙{ϮOONj<=P^W_>wBb|.+UKYtlhy˛{vlNƍ׼m# Xl[J#m6,Pd!G\ǎGRma.q nѕ1&dҊʕ+yA7doIv3Cb ł]IaW'" $>[C6lW g僯\BNǞ?>>|[vE<% CƁ^x]Gb1C簙!K~l? 06O3q.gM ~lrBG~qwz5c3θ_⃧0Ji)qXazZu/pA.;z853dַuyntW6;.~B;쳻-e~:jIⱆRB&qc @^xabQ+@8H$}=fͷ8Ɵ@A9@pް@\Fnͱ^79ERd mA.th(X;Vc[aa. ]sNMvv$i$.$,+vؐLQ2I <,l++NbCs (WWb#8Y".G./$gd3FxU^~"y3AkCf^\$櫧 / \GyBqΆ 9[Kr2/G۩,|#uGK/lp^~%!&+RZcx`b>5m~<8)/##y7xt''9wmrΏ`55ȚkF6<'㾪߹#?-{ᥟn+`*r~?ڴiӒtw.[/󝖦͖c OJrm͟JK^ dXɴc gcIWX[ [[pk>Yjj$Q Ŷv2גYrdmy}6%gZ[K ɐd9 n$  C`^1=!{F?d%Α$E+mΣ^6KW|dG/VD9A'iP}|5Nx9W޼#ѭ.qc|07Ćw:)) >.FElMņfG>&qG?/n $s=D'ҵ) ##VbO=#=}H̵Ku^jEg޸ĝ7 vI=|8X|?b œ0g\{pe9V0]x2sނO 3!Yi+rtW9o'vdC;_n~Ćc0)J?<쫓@O:/I1 # DZE&cx@q6D`&8ş$1IROs6o7dlW{J2!V^M O53TSHBH'}FgK:c? ^z$b!.bێ}b I }tDXav^K<ËȲa<-!FoF]zmeWnƎƎNQLa4N|w]?m|w31fx' l5fAdLCJ.4/j:ƶcb׽nun[s_ c>iOP:'o!m #C䌛\/9%nNbfsrĒYzJ+Hv)}LE\e)QTRJ*Uzɣʫ?X $G%o$gq,V[Z[L[#x ~I:I"X8KtB^'Gtig= %JxU.$W#LH.ٱ'/GH̵ӥU$tObHYN<$}=x"%q"w]d>9xi } ~Jcoc#6&46H\<;6cŖNp3?< DO\l?6SlX6'|j$03/m%'sX~€=ѯ$]IلW<ė~A?꧟}5< չY8Ole +&[d[>~򗿼xzNB-N6]6%;%'zrqGtW_?"r+S\! X\s1׏̡ Ův3H<~`W^r)t55 n̹y6v1 b=gV5d-2Hv$6!~ϧ({K~=TRJ*UzlM7ZN[yJ"%A۳gOYJܒcɷSx-X8[|[H[[[l'!ևǢ> |x--%ul#FbnX$xK$l&q"_"[,O?| Qf .ɐ|䵷Iǖ1JbF?߸>c!ysHסgž6QF/nI&$C8S"| Ě?x2T;Lp@2$9314cøp,Ѥ_"6XHL'\Gǃ`L+Q9mhEm r0}Dxe3  Ю-NTRJ*Ut'|$"~IEog }aY[ZK>W[,[Pcl1@V6,•' ~ m%j y nj}::0d?{-aO*x%I BG"Бw'9Q!K3V!V|x`I3v6?:'o"Е l<_V` C$xD67sI?+|{~q.1Ї']k1;22C5a? v|QKr,%&bB>ՎȈ܃u*mƁv0t40$EĻi%Q C>&T?X5 zOb ">c“Ë2j!*(>ҍ c CO]:OاCkAHK?EK5aNG_0k˵72ycl15G/`׽x&qqMâ/Ƌش DxS J*UTRc|V fMR"/ r`Wbg\%'C¼alm\*8%9i\N$O<9y0}rxN2&|mK<ѷom|x$)bM4LzXlp(bB 9;~X][|{c 3lvb؞6OiSC~s m~%6jgxa|w6OLȒ񄑶c>Ō vwíWɗ4=5(^bk5k\:2bD9 ;?CW's 4+.b8s_1? vVTRTRJ*Ut"Xb寣؞ص`G/1Ȩ-%xzY!ëݢNfvg..HRbMz>I`" I> x s}g^H4NlFr^д_= و >~svlHƍ_$>xu],X2n^hMOC_L65[6 'daΘ[Ɯd=!ɞ_`%w\1gWRw6l r8%t,d\I6716_ȋ\;yb18s]l P6E7yG,dC6 3=ڵmÆ xE3'&xukSpWĦ>OYfs.b~&{s󒌘1WwxA3:&?=qlt+X3jE®؉8$ѡ-lС-j|I ES=n9|,?r .oWv%f[nyo F~Gʺ ~}N+oxwIysUTRJ B"9IQ",z-$ Y }LcNd͂eq- ƀ IdQ"*iadb\?dbI-#<C $KIP>#|(YIᜯj1K!pDe6דJKL觃-[ /$'GKL@l:=K+?Ƃq3V&z<Bw8x`6dXoOkƦ&one6ǰfI<o|Gtx鷹Xx遉Ɩ0'Á$a1 pocL񒡋b6فչ1w>Ok#/fԚ5kCP_W\qEy{7IE|4 E;0gkذO6f13`v,9ݵ?1u_SM>簤6_L|ivfK"af,!)#Ozr= ~X뇑׆DZ6dԱ/6gMNbݹjm>sl肕nԙ8>)Kz5\s36MpґE^Gk3yk_mWpy Vt[:A"C^,?Թ!|^O/mۚJ*UTi1hy˛{vl_J _J*UT)EsiȹXiuh'{6m4 >??L2Mݖ<*,'S_o.׬zY躏S~p򯈳202=І]Xx경{/{:Set@؆]ʔL4:Z6]tu ˺hlqeuiB]l"[{p[Ad+=ZΓ>^&F˪e]9> -Hr 09\r<@hlJ*UhR9@yktt{67 .{63;u[J/|<;3'&7pr #G?+mLl鷙2VƆ&W6OiQo|tp)+ڛ(ʊ,cbs{POn ze7fPwL6 c;~KzP"~z+ytX:C EKM1/Et+U },?96VP[UgN8<Ѳg m_RF' 3Rw-;|)mڿ./Ӳ,;et}꟤vnSٴ jeюICkˆ=m2}g'fH[y\W4IPYaTG*Vc; ki jY<*UTRJq@Ǖ'S*7rʴo0YM+翐@6IGʎ em_A4QNƺlMtFpټb%hٚnp{9\lZ\#Sv:VvnkN=VZG76SV5ڽ5^F:;{-޲egg,MJ*UTRJ< EHy'@%e~G>Smʿ|{'NRh&xG˧P7&HmڞoPv`Yc`|C'f"D`Nmʊs<ԦO|shv:J<1֙ zڲ2|ygf4c}O- }vm(#U647hUJ:-ǺGj j j j j  EH>'$#Hy '4?6/TQ7^z l[LT:e&2ߋ'_Z`YV<4rLt]+D]f{k >\J Aˎu}Q\ޝkwl2. lZbUJ*UTRJ"|lV54V./#O)ͯϦuKh<{˖vWV{1J D=sa`U/m09*B7T.V*TRJ*USZC?<媫ʷ<<88Xt^Q`lZ6\6o^Vw[ݟd_y_rkmH m=dsi$,+Û; h 4w|_gk}Za/[nyF}.Z6yWf~UfvJ G^gjO_u앒ַvn_$I@Y>Xu=t.5 #i6f@:ݧ"W4mM[7uA_R^$β@tc~G[ݳJ*UTRCw@]yoIN8U*g}vLׯ6]G-IdKʌrI,?=~KP!2#4vwaDfἱ}qMy&ݫ:|fszToæLqfbn+Z=8A;u6%RցroD·07JcRݻ7_ji]:+ط" ojs d*OkVUKEx]t765Rcϋ7 :u"2YQ9`ȻDj˜ˆ&Y=יIj0t4yOu&:']8+M_pHKI+t}'i15,HWa%w]jazCp]:3Ͻ~"k}69W7^lS)3╭fs=6^|U}qjH};:|NmkG&M 4~-lwoLisP@M@Zzu՛~BRCx$1hjo"e]g.sxylTGˇ9Ɛ.fOs7AZIFGNo{NvG{6)X:sCiUWOܹKˤ{.>}()o[4ec_u)\szչnrɆj_da"ujmQCOñumTĴS_TEr 5{**Ä'EPWf>.uT)5l߯khgkou(5hʠY;TfnImat-Zi SݚfPe+eK&\͓RZ!ĜMcoXj -E$򤊪EU!dʛԛC N&.B֡ƺws3*Qd7UڼlƬN&p&:haƫ/@ @lڳgMe믻E`*ǞOz9>w۲k䈴jSMYYZzI!13IDATFCdqsOǻa|Eݛ@kŎmѓQ$wd I-mZhQ2!-"jǵΧ{Μk+xm*xA"@^]빊10XՉj<u&:s<~=#zWDtܡLvg>csۿA_{0AgmcxASn^8![; _2-9y <p駟hڴiZ`.SMajFuMb({ 1  0Q~x P'? c:@%@#P%_+NLD߯CmذAVRkkng?omL<q޽ 5}t.9 CC;?o39A'O|:bT @1L`5~O|B'x_VV5k>O4c 7Pc ڹs.BM6eFQէ?i?v>ltɓݿޭ:]˗y2@֬Yw]np'X/ a /ʧђ6m]J* ((&Dq۫;/c8cuEi6'wh?sI|:jtP>IW;d=3zs[vbm5K˜-.IޮYs6SV&oOCT+,n6Fi1_'ܗCJ7SM=Ô5r[sFeW7--z3ᾗ|s|s_#2d_֙_n0'5οۿ?lxtZn`h}y|ݙ w*C83ݾLp'&H5#l3y^73k7߬Wz6e7ĩhRԭڔGZ{܁^5v트! kE׀]tFuԦ;ۯkTcߊ47ժ#H8@rv"{]*Կ3 bW]EnUETثD6.u4sDKi{u&:Fwc. [oy6g-kSS..< ڲ:U?]vt2y]׭YvP2JwڰeY6w-rM[9d@́R[e]ԓ..˵ݴ'lyudZp*A;w2瞋O/zCJ.M2Y& s 7=\sz"Ӧ^Td?NzME&Ոɍ8h@OEW!ߟ偠H *_uEx[\-_Hg(0|UZe$;tԮ8&VS͜gu{kGՑ"OՁhp*DXgb`L=yMe7x j/O:!MgjYn{YFΒ^9Td9 le2IgC-s[-QQMG^PԦO1L j\fѭ?̾i^{?t&y텓tf d1Ϝ(77x8_K<ӹ(DJ{tGw;5ѧ3Ӿ53_TTV9#1דɶȶuۄA142A @$&!pLӍ!،&c/Xt Y?PY &$(D}]ֺG,ZwΓy?v7mQތwso˹s^iB^7%nH x O=t҄@H4i92\[3TNe;DSN <[)_we~yוk}tn: wۚ>}XO3G5k4y<3o:r*6;!y]I2MSqHU늵 e䴬J2qnxBx]ZHe̠4mҔoL@H]leό 庮0n}vG>ڦsi"J BLƴ4[Z/kcA,dhɷl ,r'%̙3Y  ߯?:>[{5X64Y3sn7v6i TyZVG/-=Iyy+;LloPkhи֌}7b_Cnj ֒gr^r󄮔Vh hʧ֥i˗t> iZnm]*AI.lxVѮѹaO &j2LuT6 [~؜ܹsy"|-YcƈyA5'u[_YJ7f)u?֍-lӷ|en\|^8rμLYtq^l UҘ=3Y" ]?/|] v AcScݱy 6׳ [/{^-yUs(k븳Nzoܠ\uM<.UT$MK 3`W^a3e< R?:h璥c:~o<^}UE"ٳGιrw3@~^m+K-vrN \&#@֮]:3mnrȴu%SLd2O"LhٶIg<@ ߯~ 1-,XSMarKQzXe"H@śo'|R۶mSyy:(}_uOeeZ@>@xK? &3|/7x}1|q5*@  3?anOON?&n 2 tA ]SNewȝ !clܹSouɓw[w=]񻃹 rUzkv<>c6NpsͿ)mK``87r'me󼩐C3gr@`ӦMv}Ca#&?Fr܂v޼s䣾7ueΑ18~6^vvvަr3^e6׶FW׼2A?3۽?>>c1Pwu{a~v/gOmtQ4m{~)=c,lHqq[xՕ16ߛsclP_mb&@W\vLh8w՞No/Pyo-Ў~9zkǩz6i0/ɞMi^`)(kfi싫u?W_tzMy&?/p >uS|0_}'GLqG< -ۨ?;NM{ҝ8> )2LTp-R sۚUCN_1W3M;MUMM4Ie~3>ۨK_svrxNi`pw>pr;O{.t7nͽyYRp"{/}W>v6WJwg?B6.u^KNNm./R(C~2#tH[Wƫ $_㵭颓*A}eo5ʕN7iloÛz4o粳c^}x9f]Oqg?_ofw囚u>M]zU:ǹۤ_M)0j=7Sz| Zߥ^6}8?s9RY\;k ~NiO=.=+op9pX~(R"ϛ㰲2!a.;m~H݇Qc1.M8t]rC,7t+| ܽh%{kۚ:kYtygd_O07f'yS`;}_LtItH]guXWc`rM{ݬ{U8QT^Ź}Rxk-~Ya8A/j/}{_o҇w'o~p'syMi$߆}2a7R7/ϔOrWeyLOo9ٻo>B};7ݦ}Y}k;mm~\pv?BS˶PNY_7ޭKX:7 o\sP7cnve}~y=6cn*l;s̨"jҝn20A8ɝ#t>{jXQԽM߫D Qs1Jqb#E)gx@jTk3^ؕma~>N^ÝeO1yiwbS:x:W.`(]2ka|?ƞ}upTwmZ9ISIL3ɛڧGn+>`A[ ~g?j]n{sLng/T_^jcU`(i:{u|\ץY\]2i{cQ<.r~Cn &kEdK?mQr֕}yNIwNxvKs@SeFݥ=.` XnV{ޢ'C?j#s7r/u{Ys}I>ԑohG-trVް)Ѳ<}̽H 0ke'~5^iTsreS>̍ф&謯n׻67”`Iw ̛'8nfVMTa9 )2"@>|So^<ѽn{~;MyPU{GSG[SN?JS*kok@Ӛ'|Onݖ9faͺG]¶Čvr M ENRĴ"w1|Q|@sp<i.F (uSό%d}ݜ8@k:3XC9+JqObJ0;nx*v6lJ9IjeP0?C(*l><6ܮŋ;uZdlLڙ[F76Fݥ=.` XnVG$gm߽ 5̧l2E>6O/z~7zzI8'ٝՌS햹Ltzt9Zh\-۬<ˌy\k"黀nKŒ!ݷ.;13K/݀Y-Y_cw :uwJk`1&}> 'ZwםU Ƙ<{; r.c}>ePigՉM;9Ohs2c/$?CPcGɖnKm֬UunxHIѲCF7FFݥy 1m.` X#4>6eeygzCԑjoӬ&i?;wTp,U& @=unX74_L9w07ρ|MTH *x}X#iBk?Eʵ&ivÆ+_wglJs}?l~*0LOQe[.N9q;?̳3FNkkkk={惂/={DV~򓟴~׽fB>6md<7]k==Ra ?&`0A yjڮ"<Ւl}Vn -3gђN̙Zyq1A͜9(+nL01]Fa$ۛ|[jyi[Q_20,0Nmy0^ۚ|[iW +{㵭QU5 jǎD@jõ'i r?#2#YL/gZv{hx^z%y䍕|o}#ٞ.M7^ueFy-.:Wk[X8TWx Xnx Xnx Xn&S5c0P\w9CM>]555lNg6B~{s&g>hI:֒VGLjs(]cZq c%csWYy/c?b @n&NK.u/Gyn.Nt_qt;}i_kZVK1v)m +{t ]rC,BhDhӴilNzE]ۜpoߡ%)r3eA]s$]:ԓ͝o-DTVԔf5j96cD8IM^}Դ)X!yre:Oq59GI&?5X([7v}_y|9iuzk q3.M iC}e.` Xn+1it$Mv6噼wf͛g赛o+Su2YZeFuԎঠY==j.C"P~g  WMsݭ ~Μ붶CN}4+qGΏFu}rY<S[MʺރB3\&r.Ks׫37]ǦiZխKe\4:-{XH{17 qsm^䘠1s6wJ5c3Hf<*Aoء#HhT7oֶnNiӴeSZι)Ӧ!7k@(oVsBvd@pjUVY+ֶ ,'.u4IDK[u)*딫gPuk"VNZgLJ\Ah̖n%Zؙ[F7Bsxc.3ϝrUt ~[ɶcVW}c?{ɼRc7.` Xf P ڹs&;N=s^O~CIyڥ)S&kҤ/sR]E'=,7״mFrKuºG_fcfu!CoS"n]75.#!Po榻/&P.sm {ȹn}M}DXV<٬5a>˪ʾ/]bgN~ڮYζ}?yio"\bnoN龓i͚5Zv}zDF7inR Hc7b֠7&uR]rC,\! @%h=:ȣtǻSΝSOizxOK u%u%''4vƳEU ju:7p,nTo*1 u6o٩xW5iE|g;Qv%sZW"֫βvER؟]c*T|^\[u]I׷nON̋p5ѧJ]բ l[׸t]:\ѧz? ~t\υδy@'}I5~+/g0tS2M{ڹdoٖ@A{|HügT~I} P={ y~u_sX({衇?Ox +ݧ|eYsMWWW]d?uӳ m;r:u`8-J[j) +{''/y=Ӣxҭ|s!&ěX^3]&_f\Ifݥ!凜rhˁ?]~k"ui`ŷ3jzzYթ >SEx2]uocޯ2ޟK7} ]vWƵЏcZ=fItX,> m=l4a޷5+PZڗhYcnj⃘5EFޙH3p6-RZh`es`ȼfӺ{CyTxL@Ec$R;v2Y';#&b:UUpuj?&d&\ȶ蕗V1{u Oiuk5S+ɣA^ݠKSɶUWHnkbC}eo5ʕy,3kƚ5u[]A$ ͚yMeyyK@z+޲֩o~S>WUM*0}&T_ec:G&!OesbmZѨ}a)BA}=vvˇ*YA)Vٮb4ЪV Y **U%c(ΗKiubRk hCo`}:u GP 5x=kִSҲ[/GN8I/S::~ypɖi4s֬qFhM>]{챩L3Up/X{^ߩz Y=ѻAo-@.i5- mEU-0|7*ފƹ)rӠz}p9̸wgZ8tn:(n@_hr3X?tHyrFiE\x6SA|K^  "[uϑi5dN¯ W;>X;Nh`fqGq ,^ĻuK+'y|r]lb8# ^l"?{Hcj$-my k$ێz]mu cIkۑ2^e6׶F^_9>ٺL_m@Gѫ6_ ~a͘1Cglnzн?ktCP^rP/lƐX2?Ajcٱ|w| )d , Ҍ(>57פV@ٌd۷53p駟hڴiZ`.cm6 iPMP@]555#OTW1o~{qɓ'?SM )S&\J2f|-Z̙Zd6ܾXϜ9¼9Pq qh Z1~k馛:-]ԽHyebz+?_;E5/7?cPzC}Twtw[N:E'ΑN13g0Bm ~_R^2@㬷WwMfs3]tEZ~ Ǝ7+U6 s9A/ɕKҋVu{TwLe)ֶ&o6}Ԩ-fc$VtzSszM~^zUg"w{$q̔wTʓв ïԴ'9I>>?I*ʐb,ٲVT/m}t30tL L/HLw~rnۑw<&8v{ݩor>(2~|_Og̏W xlk沾ϏWk[X'2+mᓭfs=6^|U6Ԕ>o}mpE=:80zfk:FOim ^*+,0.ZR jT]}Zr&UkQ]c%97F\UYBv6ڥ:{CVs eZJ$ZY$lL9q}~ ʐb,(I ǟp^xy;ᙧt֙GWVN6vB셄CP [6i;w5ޙ}27fu6_kա^Tt+/l?KgnHnfmagBEϹVZ:|GUV(_zuʋ87o<]uL 80IAViމmSun|nzBÕN]5'c}2a>wϔOrWe%[ /ܧf.gniźnzKbI^ AFzCn?;Ur6x`M]#װZɵe2mG flP_mb&@%hϞZuuz-}Z04 !=?vM#myϑu : 4;s3YѩAw,niE[ڝFUO~s3`n+Y?;S{$Aw n5:Vnfr;sۨޖUьt6aeAs>#>Us]բ\yu:t[Lfb,ݪr%z1įd1N{$#lH*>q^W]{|K #ji(C~̣ o՚5kuK[m^eH3A3f<@˶Xݿɧ#悹3clqgr7^۹܍W +{㵭QDB޻Wæh)>c&6NiGڭc0A> v ZMl:{mwa5r._]OQ9Z}ث:f eʛ/L͗t| ;v+SU}2~Їʣ MP] w?l,n))ڵ)+3`VB OPcK 7ԅ6Zn.` X#Tb̓?t /^ґޯS֌~#gghʴ=5#yy;8gGnݦ¶1cTg~VWʽ%v[;d:Iq",]0jxuN'Ց&b~ f@!k/|36J--@k:3XC9+Jq= y6в*!$IM+ }H~ek<&l> (  Xn.`8>}cS_)L2Y-:O9^O6OonޮwߴWNW;|-D- fψL <Ӱmcƈ0cC$]ynZ&tsQ*: ʪPs/? _͹PKU7T]LNi kOؤ5v1:jm77˹$U~h~(smgZY)=~i -!rNx[U $?CPcl[•Yfsα~׽fH=#zW_/2 aD?f̘|367wO?_z];]?h27]wIKM7niӒڪ)+nMs3]:wF; :l+y~Nf`5]tm1^e6׶FW׼2;vɏc@O?%дiӴ`]p6 Gjڮ"   Ņ 0A&Q J30x N܌W +{㵭QDB`lkbgn]a7D. Sr3^e6׶F^_  !w2YFNOmTj@ @2b 0!@[^oK k3gj͒vig8 S>^W0(<}  1z5rc>@&HM&@`(@RXF=xmkP_ɶ(rO&@?/+ n3~l?ZTժ'MI;޷߶[CN /ou7<:sl?~k馛:-]#-~~ԓN+N}t}4CtO>mk}m7//tu10F^wy6mI<.mN׷SO_9Ou2頮9|wzgηaj*+SY`jEDksQ]V)m%Iz/&j.}xrnʗ6}M=:8)f?F򾒗e?|Y;d$aZ~r9Nlͭ:3ռ~$-mGHK}eXz$ƫXWFgwv;0A"pؾ]ӎ8¦<wy9 vzeaS3VFuڹPc~Omn~+xxӜϫ(W iS޺U0?ժ^;?=#ӹ +_j~Lm5~9RBys=7 Vu"vy1{sG9SC_6!lBWlj0*Aoء#jSQ޼YnAO8AM;ԩsXiӰ_UYagCY UVْedcm+̈yΒC(sVj`{Mc=UZ涟~EXg;-m:;V:CuGܹKˤ{.>}()o[4edMe`tWk/kSm5VUKEH!vYS4y_eYzmº+KzmdWyoj2]BL9Bʋ JsiU4LN]:rky܄/r;Y}?9'M}=qgJ{9#OՁ(O*8smoN2Y`f^J{tGw;5ѧ3Ӿ5B7)e]u$ fEämjw{]vJ1_+Y?;S{$v[o,X^)F7mb^3鏝mZTwhU_mX*W;RKUw`vd-T|_̵\'u]Iת^t_:~nʗoV>q?e>L~ّ}Ѩ3+g =*7WnP_P ڻmM>M3fp>fM#<2gQGN[ 1ZUe*&%Ml:{iiZ79o]57gLcg[vxUެ卽JTYuFҩ-0 &L+*HEZ芵5~7&ϸ|nʗw{jy|(s, }aB-GGE1>Ob1hghgۥ {Y3gTʛ/W[3k"P,m,ss28PNLAZ y;|boޖ E-' wnݘgc:U믊[Ka߷^wR&v] JۓͶaZ'Sr8 t~XF>[{52Y37/OtU(*u֌?lEb_꭮5myf\vlnsbmZhyyQnp%Z|DPeV(U̟LV I}Y =7QoXX1T`~jmm緜4A(Y}nYu -?/\ӧkϞ=6믿? 鞃ew{B?yVOnm˽{JKܹrnnamc0`$]y]#n&tsQ*: ʪNs*豳,=^_=;FHkxW2U<L+uLݍ\{~ á?71 wugi-۵4!m)a\i>s>o͏Jݔp}QWٲV5K,|+[OɼGR7]_Y~}3ŅЂ0 }J=!0YM3gj͒b=s-{G*-˗n&H}JL2)'[h>p& 5pnG5A}uAM4Io9xPc dM.?&[^yI8ǝYz #+M넓Nyp蕗ᙠ:KsP_<#]DA}wM_Q__1M :#+I[ꁗj1R_VuI7U ekOŋvμkun´4/Q{jmmst!Q1S+AHJ j|K u5j;]qRWaL+)07f\򺵚L}s}]Y˼Z$+qUwM8[ <Μ?1ux]x9wde5++\_KM wGK/u"@6hx<&]^ز:5/Ó%ըKU2: fh+WOgiO+Z)`~_mNfSLW}S9Մy XGG6oެ_|1ɬn(n"+h֬Yiڴi:ꨣi3oٲDŽ͛7O颋.W_O/8iMfQ5,0մ첱z!~Gk_l;nf I|<[&X*7pjt48ح 5E0# $9*4i6(dz7uwn_6fy 6d2d?&,>;>}#'?xMZl3RDƎjEnn\푐aV^mzWO"&pSѢnVeթwN:lyI󚢫RXnEA  9UYagMnY2d˶q֯hRwO~4(I}jT|)o^8fYuenW2o6:u6jysiUT Q =#y^}U=闿eR?ꨣ飏>ZӦMKZǤswA~VWm LٮRb<"hZa[e-Ze]ɼYG*mK!#ڕXf8Ze˞ Vo-Oh4L< I)S3DwwYV,kWUeODuC)d}|[ 9˺a5>\ʺ>,s&uOkwi e |pp69W7^lSaٲe:lJb ~+={h˖-*/O*̘CV)PqK\uML?hgg[Νx?t4uYf 6~̣m d @`2- !,~۷}&3?pwDP| #,{ns14iBoORŇ0@vٳm amf0hakAhdLhƌ6d[ 0DԧO|"ɬOحdcP-`"g_A#a~+_q1-\O[n%K_݀Do#)F-ѡ͛7_j2붷ۭ@۲ef͚M:*6GqD:[n[O _Z/rVY`(ڱcMIo&Oe&g8FPcc}tǻ cϞ=nMP1 k O.\8`S#5ikebv6f;ߥ~650hy橹9>]tEi3'c$TMY&5E͌ʚ)enqrWmұI8!Vl_δO+m;gߦTO3?OZ/~<_z 9 @y/}Fؔ'աƺMV;p`w:jm%֦ZiR2QUݷ"9jUK7bj)SYhsBe,C܃ݪjH @. idҦEo\*OhԩpȂd9ܩ6 D@(UQꎮ@#F  ԩQ}d3RY쫪J\3ڥ@\=l .CD)? (ݦ;?ܹS۷oͼ\l |`bo~|B9)ߟm֝S7L~OƧ~>?u6C=o]'zg\_IǾO|5U5Κo)s֋kݿO$Z]s9a>>ߝ|r7 szuM0Q5`}#OyE0N/}AZT_>%_FZ*X9]ui_ #jP}g,1t"k abԩ^)/uPBb' GgOVAw\=k>pZ }p{lˢG> |5+>rIٳi3oq чu~p<Yw6-L:hsms璣uKXR+fZ9}9d&J=YnL@|Q郥ߦjUNebIۅvrUi:κ+_ZT]GuT|26->y\z:#ⓔU(3W/>['/={So_Oϛoyu6iݿ.ҹٟ 쌕jNXg9N;"5ctCuit1gG`Й/z拀\'헾!L70E_]˛f3O$h[^1UuVMռ*2$ɺ Q5U;Mȑ('O^ɤyf~ʔ)C\}V+cqE[O,F?ܧ=8~^v>ɣ2u7e/UTK.O3ݼ:/~:w:=mN&سPGnY@PFKPX_}^DUjihS,2W:ejVOs,Ukug~eSBjmmx]64{l;`Zw]v.Y/^;:iq$͏0U}uUzstnUD?.OK<lzlMr jRKهwripL=kͷ.iejKlSKL ?~r)c\`MՍ7Ĵl2vZXogmٲE副XZjMCiUWT®]t2yG:p޽{͠fi%lZs])3JAm۶]۲u}Φsl2-7IIOzLK:?NcK3rC;ҥSjL-w_ӚǮcq2oz|r-,<0O5 ׯ'h4;/}d;m* jw3!]J G(qJ G(qJ\ك>8`wݫo)[ڴ+l*a׮]={MeYvUv.m۶iƌܿX~= 01VAo֭3gM0>vasc,"D0G(qJ G"m*SM[̦hʚ6*n"kToMy]jVQ.%D(?@1+_uh:d?{XYv K߾)dPl@Q+עjm6_A [+r'N}tK+8(Zȕ/:)Zv mS&W-Pmǐ@PL70uj]tz-*wLZm4jo4B@"EtZj[EN1ЯJbkfRUW=f ;rRtJ (X_YVtjWU@j^ިZͫ˴E>*TndΔv iŀf NӮYD".^ze>2w9]bE` TT8@%@#PhΝv8(qJ G(qJ LeFm1(kfl!M*kڄ'䜗:Sqjd29F49w3S˙e6 3O>}gڧ 0+}R]w1bmx!0bjZ6e ԶOK#6pnW5o;qUR I<'kToD:XxmiݨZd1Z-3 TjSW:mENkT%5ڜP0\L>QSެ54BFQyr5vjC/NU˓nc:ZZ/uI}U] 2eQuu4jOPN&[] ohf_UUi,ڥ@\=l .0|]}\GqY  1vAĻԪCj=[w̺0s_!ɍ,*W"7 䌒EP=}ٞ%$?e^Nm|/pۢʥUղ*[dI'2 z;|]M6Hn~{N[\mue7 3x&@(ֶ"1n vtEJ^Vn&I7TBƴ=&ƪeVyzn#ZT_>$_ 8 @W{=<HdQ]c ϼS_ Ose8vUSEecwk~=8we%}O:v.-sLǻI+F@`$n+i|[$j$w..Mj!uZdυ H-F3VJ?S9l4O\iS_XـS.T`i5Yꬻ*EUˇ B 9*sq: ?Ӡ]BtwFs,g Te> lrxun٦7niӒ]vi6{Pغu̙cSQ5l.X^Ry7j޼yڱc;p^s5tLeٵWTf۶mӌ3~zZE>j7Q5'X?N{4?ь<(}WDIƘ)84(/ G(q< L<tܹӦ?0@`B T:1((J G(qJ LeMQlcȞ4t +pbmJ  Vu_mAj jpЙQۤOGyz{\n@~yVF# RFi'8@Y˫Zo(o*dEMDץX[M|ݚܮI~F¥EQ]EOw곦m4e[ ̘a;u"ӹwt֩QS YMZm 2jF;yJTެխ}5#Q;w>!`|Uj^ݪ@k~VW̻CܔUG ϴw {S-kV9wT_\qhs[VAjQЯZD>*THΔ -5UЦXhݛzޘK.T X^\=f<ĹN0~| n^x}MoҦ%W]aS vٳm*uV͙3Ǧ7nԼyc3wkܿ8˲k̶mۦ3fpfc(uJ G(q< L<tܹӦ?0@`B T:x <x@%@#P8@%nࠝ@j*+SY`iec$֦||E~h0bjt\ vBeMQl 7gG6}U]@NEPr^]Ěl`(DDt^K}e&uA3PZ*|wG)-,])l̻1E`LETѩzXSRm =b5 u\+׫j@ҠXDiY\-c >eݍmYl 1Q OlV85MmzJUw&SgoZVfK˛WjTϥvaYOh@"0@N5-zɴqdj5t6YVٮZsUW=hVi^c [7\:ml+x˞0\qVtd(JF,ūl*cxOsV˝4&Xhݾc#oe2ZU^K`]cp \}qqҍ/J 1-w h>WRH{``%y^ *l㉴})%+@%@#PG(qe .~׽f(߸MK¦vڥٳgTf+oA`֭ڹsM0~͛;vPwqkqc,ˮʦ2۶mf̘8p{Le> lbDtМ9sl qƢ _.`@#PETVҥ=&kyfjr̔S[W&(C~7!/C% x@ hT`m2%mnWThppЙj6yfjW6oU}MqX~2ʐ3.e;yλ @) UW_VwIUYagˏ(]U  )C ̔@ ѧKwUr5n/ݪji㪄;*]ulO"' @sۼV7a(C~7ϸy7(P¢kj9I*+ltE򹪲A!?ԛBD+ڥ~[jiS_Z*OMh~gcsۜ"S>e]!2(!P:T9uqjQ{C\e[U- v\|WN[$!?ԛCqy|̔H]zD\Du\g˛{.f91oX~ʐS@!8;C#vnރ2zB.@(]:5v-bj[ѡƺ..6H3hn0?ULQu D,~uI|)s@ }^j7ĉ :!2{mM7mTZz#֦Z95v!?r-CTM}jH=V'XZ&^Pv?0sMu~r9Vʹstr.À..2vA3\  r587u6T ;"ֶBjmuְuNz DU\g3ߗcbW]En@!^K˭ a7kG}ʛT?+y?Ir.CD򹪲͹˵ !~N@b׫abmj_E6=fBPHww4ν;uld\DQկUn!g NViud:Vs7Z:2:u6"sc`-2tSKVesnĴ3PN䯮W0}s.K {롣OnWAuW!hhSTi܅[eWgxC]uln߹l 9PR`޸aYz5v mmѠF Q*AZ,Uוf0F`a7S=4.[QC;njs<)izdqȾ Fys{뺜:f0]neH~>@I!8T87pEz{[Tao{T^g(1td_$ƾ+}D'΅{(cnt$9ֿe`~N+]Vtq`6~*T%Zĥ=֍ٝu.ep^o4jRfL4չ˹ !esN@#` HL7o!7cɹ95hQUp-ojI % KN}*Zuۖz{acT[3ئ>;U {˹ "[AŹ˵ zN n^x}MoҦ%W]aS vٳm*ݕ{Zʁo.Fo4Qnݪ9sT*S]e d~2ٸq͛;v؜8˲k̶mۦ3fpfJMjeP M2:l@#0Q[EYf@0ss8k~a77Yj1]9G`#9l=m`55V2:Bʝt9d[mӬ?lsR-1ic$(F]TMvK+ڤnUr:cmEUV~D~vA`3U V!M*Wۛr/O~2qy8!鶍%?(ڥjywO@gb3@-I}~C#jjݑVG5;j]m6Zhj/rOƉ+S¶Tu&OOMI=f: DV:v#|۔PkZL!Aҕ;}nX / yJPm^Z3z-tb\'MCh+*udUkIBՁV:ѮDK~VW:k8LFoەMţBm8*tn[.w?pd}Zoh#0"jwک]ԪukQS_wneXjU*L~CjTo_- ~6LPGU]ۺDw/PYgg… mrx7^lSiUWT®]4{llmwVrtuV͙3Ǧ7nԼycgYvU6ٶm4c wll@#(l@#P8@%@#USYjYFkryf2ؕcm5dKmJb4H/I9FpeW&ߔ nyjڜ54evS(!s\?!%^GJL|7]&7(Z9 jp[U- zys6y4Z֥Tf}NZIF f2UcMn*YOٮ?u;m@jSQjF}-I(Cn(l9asZ?!%u\/ r587u6mEXgo#Z*uK67UZuJjYW&2V# IUYag26^"DTثw`G n#sUeg}ιjuj {ټː9ʦs1~R@NlSwsԛzܜԊe@Ue#2`AUVz]x6FNe(_zuʋQDѨ ʹ޲RNGM վȦ1ג$2x$Yփ/\$aPCԶO^Ƽen>1 vDjG9\WG*.KjQH{.?!݈ZX2Lߥfi< R6>MWjkTlp%Yvep9ʺ s^?TR֩jy|3@kjMrYhoܗv{ J-јHGӴ2 ƕ2T vJ9]G$}ǹr·7rA?p%.2X#\dP2`IjnjS(1nԫ*1w9)C /2c!/wJDMFR桲Hݱ{X7mےE-iB^pœKl:K Wʐ|.')֓kP`⩨TuGenM,6]>rI}r{DW%/!RƎuFLm+:ԘliEpBX7`ѹ.4vuԛx뒰Fmy 3vy9; U=*y_S\Qr-+\dPJ`)oVOl.3Kq5A 3;7NiZ/NYœs̚ Tu%PU%gtT=^RB(ShVlҊx^j{_'2x2ֿ'z\ZVYgg… mrxun٦7niӒ]vi6{Pغu̙cS̍v3 L6nܨyiǎ6'?&βګl*m۶iƌܿxhRӡZF&IŏJ? X1h @%@#Pagw[M5J@s @#P8@%sp…69W7^lSiUWT®]4{llmw9ѳګ\f۶mӌ3chH@t(qJ G(qJ G(qJ\Ygg… mrxun٦7niӒ]v97c ܿx tɓ'91 b G(qJ G(qJ G(qJ G(qJ\Ygg… m߿_۶mӾ}tA;M>]{Lbs2kv^ׯ~v;by,4sɌC Ȏ޺u;8͞=[&рC^Ӝ9s k ヲwiIu=տخ=;_A 75&D-Ȋy{ޣw|[?Hf2N :^u P(ޭ>9e꡹X5붌ߛ$޽[fͲ)a4u8a[BnGfLWcSn$ߏ裏ꩧҞ={lPӦMUWWgs/讟F;9C͜6E~q'^xAm*܁T6Ieɯ~+r)6^ud-@u+:)7i'Tz|o,yvZ7tA0V41s=ٻ'cSû>r?/ CܤYGΛ&͟B6~Uy 75ܕ6pwN3Gt!(&2#4rroo:2 32E]ܥ *l^8ͭ_]?}ekmTϗx57首/Ɓ ܿGBYc21wNqYvvQw@oS& A waDMYn>3-C-co< cpLݾٱ瀝K6طC_}n>sE:mo^4tzƇfv.5?*ug"qM<9>}~J Q(OmjZ]ھLrf ^Ǐsaڼ;'7[omȴvc!&ӓ[Q|-m̺ML8&3Kpy |W >JwLW0oZf-Tj#ka|YL~ۢgI 72&)g>rI.P`Gmlvu^g|C~uLA/!֒%x c1n77|Sե9S;.ʼő|~<Sh]q.17/k"Z+t*sSkZq|Yzf.1۝Zg7f?U:wwQt هSuR'۱u*Pp87_rt[l׃^B=ۯy ,HM[uoc~U6jٗ~q~ah]nuN1/LV˷ԐWw9 <6'8\k^1Kƻf9% 29^wcoZ@|GteIeede@6֥ M@~fn+i?ǘ>6_ԜNgB7K.\ѲuT Pbw%Z)gӀxPWL#N>S!~Tko_V]^wieS_|7|/K"Z-h7y}SKO'@^ݻι-67sRS6W+ ߇#1,v- 2x& .Թ~̾弆tOfYTeC>bZlzH+:(+ҷ:v,͚~*w>_kAMKعS?\ӦNӧMO+#0?x>d| 2EC C;wҞ{4ȣ5:}cKGIh:*zۜ_sg_vv-mttuk]7LNw|3[a.`ւVx%W}6n^utک~g?725H3"^+u{zZVνI-zǼ9nÝF 0x:i[9]/>EO>~}Y9km},w[o{#rZ==t6oQux۽;~gy\!>g<7(.C 7g}|>wYNuIh%Z%m֥~r[٦Pw5/,|b|?u[F)7}Ε]:1B `wEj͗1]pԜ{j/ MlU4?)\>GNHsp…69G}To" ʱks2A~XSNՅ7zEl}f_|)_ yED_]bSm/>A䵄/ߺJ߼n~t]߿O7}A ?sm* <@H?ҁ6W_v[\"*i?|߇|ݶ1祾{+̱~BW)duםW__Vnu:rdXw<9(nyE6T9mJ/ݽ~~@FWW}Yݻ uG謳ygsYZhri4|g{2dȤM7צ}s\Y3q2uw#o~ܯm1Oʶn }zHwhQEqS۶m)!y;  +|C:Hw.:Fmw׵}A;zڏw93mnٳgߛS;e9uV9c:̇Ӝ9s4e'Q˵n K;^Ѻ7A;qx yщ:ifvw_|} u;̜9wc!,a0;#@   7Ԙ-J$~m@01IGq|M RcM: Jicb?:(ڽ{]bgb=&cb?L3c=V?] bgb=s< l̙nTveW@ xf͚>8 3m߾]oN9͘1 ~b(\{u1< n2ey?sksNw={y\M>ql^SnsRJQ]w.+/s(]̍P (5uk2ۘzLWiӦcݾLY>ydH mdIENDB`DataLab-1.0.2/doc/images/import_text_file/000077500000000000000000000000001511411446000203665ustar00rootroot00000000000000DataLab-1.0.2/doc/images/import_text_file/i_01.png000066400000000000000000000267301511411446000216340ustar00rootroot00000000000000PNG  IHDRfLsRGBgAMA a pHYs(J-mIDATx^`՝M&L*ńĀzDh- W]+Dqjg-jڊBbOA[Eanflv1y{3~f6X}EQzΎIPf9tHiC8७fVbµԧPQ UJLLl2de?.z֓'O8qbyc ?#u!6R԰ؼUj*)W 9!hA'.N@YuQ{N_{9 uuv4tF:묳d"cǎ)քq$-8f{(c\Ȯ0S-ň~( R :xFU=}1 vaݻvWQh~:;ڏ̴_Z'^axEp(M;  O=N^+002Nl)9&&$ aEo?/׃?D$-&q%9/OiO'#/9'Nhoo:À>!,#E͠W6fϳnbn{QTFPu7d6SL!%sv֖2tLHi1Ʃo؈t]ѨmDݼjhVZ҃ye؈*n]ivI @[ʞ1ސu pmnmq2͓dLS|a݇|DPa\6߫̋8^ A:9ϔBchY3l9W$Ieu 4|λɻ5RBbCV䉚mo_y/6qS g53}"W'xEaDN{|[Amt{;W1/ ufh-؛;y|]RJ.?Q/+w@m~fj DWJKK}7&Ns$# ?8CDHDJ2VM9_ZF}6MMrEYz}eO(1G)bsWl~GST EbIG_;m(BA4?"&dOm}ˡgˌB㷿yz޿Ϻ2ɇy60$ :Ao_XBRbOOO? Xk3_~G7Lٓw}ʟYx7^Eu--mx S%(_{5}&Ztk徒%ZA҇۾Yy%.LСZ[VesŕSQbufh-\:iÇh+V((FA(HEM*+ְ!t1x2wcxX+]mi.uSp{n5EG; e?~YI$c)gaG2ȈzٱkC'}n4N{(+ߧ˞v-^WH)72g?}XlūZƛc6{Kw,ao4ѨLLzd;DjBWv'?~\Ap1ӮL:o[lik Oɿ!;^(DNP.-ḇciBu@ׯKSMN]lr͵|"K{lfPiTW"y៊^0c׮S"M4#2hQp~F N>6vmD#f,jE[L؁U^/kM:V} 6EFNkQ[Jvn\QMpy烚O}f/};/:7&k]뿐94Be|\)8p?8XEqb$C&\;6~}fR"-D]s\̛(} C@E+acom"Rwyr@*E#t $j>)z-2 ~Dz" t"??C.h.>}>CooKk6 <]/}wj6vCmj84,yg{<@/ENp.A?mUy k9Z}@ 9\{]ا˞tC3n:7"lO`ooR*Ƭ׮ sΥ_X:?#Cgi/q!m !"e)=fϕZ1# P*#q1|SB;5HȈG cG+?q\fͺ*3={wTHfo_Gy|%5%#]Obٷ_$޹`ّ(ek~߾3>m@]؄[B$R4#n򭪯,O^݉^{>)\smv䃲y=AYtxnTL;\2B9< pD@!FO S7]YȨZE豟O2EX0g,":?ey\Iϖٓte޹5HLfv/icd̉dɔis-LEugL+;Q>b^cR2ϨcUoܩ2>c5MˤfRa\w6Z!<F}jo]\;G~Fp8Sl?bet ,漛p| a@)뽵;]W#ɗ4~{LiZ; /~ƍ9~b\}q_;쳮}"{+OL11%qpu4k؝Nu2 -ۘCJNq˘~i,SK+-b&&_`:_ ~\v4R[h?ff ^{"~ ѾMؽ(ҜWXBh|_^j'Yo׶1F_F5`G!#+&O*`'aӫW?Uҝ8C G(l$tʥГq^|^@dR^W";Ʊ!6L3.0ˤNF0^bdXx=V9@6o<G2i0O?:j(`s=w}b 0 0 0 0 0bj,qpL L L ̂ 0 0]"g g2xxL bPa})h+8* W'6 tg%| t2ĉ֌ דa~D xh#G͋t'dșFGt,p]lz,P:nhv9G';;ېYMwddt{ݳ{#8"I8ps %{~[$!]T;(&WLelgq:rsJbk?@F#SN*/mv$1Hi5AR /ʂEPG>rAȽ&߿A\ 7= ?'CxꑿI+;4@4TWWGdx O0)d)d)d)d)d)d)d>`. A aׯl 0TΕl na7$ z4==P˞uSɼ{줴P&{" 2Jn_{Lk,08E~DM Kv؆ktMv[aew/L/iyky߾|׸n!ϕ|Qnv]2mlR>yo{+#6͡Y+6)dyo*JB]ƞԮ7yjd/-Zj& &g*s..J/抲 ܵ$˧XɫnwSraYgMKm|dx#_fm[?]>9S'ݮ;( *+,c+/V>rͺhry~߫U; d/7DS:X1\]M.XAy+>KGo"QcQy˧B}5x-@Ed\3qYٹ}郿S!^H4,a(Ԡ^qlذvwl֋e)|ͫnvY.ٟ0V+\tZZ6g2 " 2j0:}^8ulLtmI5*YOxxj"^ғ}YaAQ-wNCiv|i K'Ъչ)TL\-| :kꫯKFxw z& 0 0uȐ!r ``$L L Lay7L"BWQQ!``;w ݎ;" 2 r.,(3` ` ` 2r8VCK^Mת(r 8]03hXy}tyAƦE{e2 .3{ldXT8<ĕ"],7@TUUM:U.ɓrW +Jj0X0OK-߾EʪY(BI4JY,Wn!sɭU5\΅n5k\s52!tQkPRPgAW+,-w뻋h˖-V'n_]\^oDf  vQa0ϊ7^R[ Eh6Gi~RP;O>h,t ƞ(-T N[4ك< ,^+B Mv7o_S S S S SP+gci9 `.gg2222/zO\ t:2'55FN;1`g礬.G@^#F >> 0zg.22=9;//޻sT8 +x@z{:מk2" BX:eҩ#WuJ&A@ U'?M. d[.&JK,r`(UeP:, wTcG'ȅ$\K֮]+ttuuvunhEUࠧikk <3YY^ ?sCK**۪X /BrֲVj7K^erL2(@FMF[[Z)؜rEVjW7UՊqSԜU+r3Vla}ԩerLvbWps]fnz`:]Gv5?裢"u)oT*$ &"a8vtȾ #ݨ UB&E1xOX_Φ.a~47ٛD!"'(ڐ+Jba U*3]\^*@A0v\ JQ1YZHM+<_8 R=3S&E*Su]i"nlt`/(jt,v5Auu̙3uD(`֭rYuviR%7.meq9<3GgdLb{dHiэBIp6~ g=;;(ԙSLqCs#hYϳʰ~S61|`6miPBXP"wi_&6@+#k>V?,exW1+9Vbp6 Vf϶o_jp?Q.ƞASw4JA'`5p%)\pkذVYP.*y,)q 9<%S\1ŝ VA]l7ضf9^{1d2%dpdkm6GCOOOoBsbRbRRBbq:>Xn=`(N:uԩӧ"[` lʢ"y†Q:)[! 92AaEK3MSO]dPf>BxL c}ųydY GR(7,c}%;ve2>.Ӵ:K5"kgk{V WzNGlsG)PcwnvkǯglțJ=+jE2Y)x^v`6-SOLf d-伢\Mц6;ČeA\1D8p?}OZ֐g&z)HLQ"7P8@3NʥP.-1jMˁ]`L!Q~E é*k |"ZK9:Đ {CX!m-lvalKyݷthEr$zzg_llW86T:yGVt2}%ԕ*%^βԓR٘?b]S%7Neiڜu sj9JUe՛ytp4gWyҖ"κ]3:.VjNɺhk'X@XJ9+Xʣh)-%Q9s9(;|Zq#-Ey.UC)'*l75Yp IrͱwkbE ,!<"=l,=ttRd1|Ak:, IJ I¦ĄDYKܰPd՗ήN ,:Xy($Ra_MIԆEC t!ЛtֳJޯko)DSxCdպ\3Eɵ^s-Ч:zb)ӞgרʻL)Ho|k"W)g+[ k"`uu亱f%/!} \) vgϻ9 *fι]upB %P ܍|lcU3I{w$fd7n׮]rAO]]_ݽvC#mރlZp9gMf߭9^MJ&  ;ԹSzt,@<! `GZH!J?y@(XE.؜$-99%%5%55uСONhC>F bCyo /U#))FUTk/o)7Gn&סwUTx-3$:)M|:g [JA~U5ʷ>u>7|kb>NV T+#h gn}ë́;(`]}3W79,Q؅YeK ӧO7AoVAA\v+\BYマ랂ƦE7Kl)]"yKDМkFgȹ!5%^z:Ks3p)AI3ߛq n!>HAbue2` \/ dF2z{)$6thaÆRАB+*6? (6la4&3(ڠoͶ腏y=Tl_ iKh=NBXcRXB174#)etw~iݵZ3AX}xܽ^P묖&dMeH}B[]EfU^eUsvHI`L >p(+g(mɢK@{3}kM]9#ʥl罿WwhB Gkѥf++M}"~=rxʚ #;;;//o͚5qPE]w?odR"h5SV; 6Z>`ZPJseEr}F2 KWzkuL>Cg UVWC1H[\0z8hGfB-܆$QΣz0`,.wE, lԻRNظRpӆAB*RgClP@AiH2S(e[P1x+CPi[ڒb96LeۦP%&yy:gufdy-%͆VY.dz]fVS98.,\?\xnf< 9r߲g_GZQf:u(+{&,1w~lF}}CinB ^u`@r?um*,[ɞݩ>W3Ҝ,fyK2^R555_srrFIŮ])(**BB)b㻬qU"7gʅhVΆ0E/{S .Xq'='Řl4DiSv<#t%" ~1 6 8ؓN)70){d`m6E5, ۯYxN\߃~%:IƖ&S53H W bomH0w[ou޽=ҥK/_^WWG)aF1fUK.=qx~0 ~eywȥE怱H\P(K3ԑ_|:j(>!9Љg'm?%qv6ʘ1c,zF2bJrr>( 8iiiw}w/:sՋ'xY˲޻\IO#2@qƲcU oi zoo8 v` 1֊,q MgYX,qJ0?Y%` nX*gc)XW^9m\ ɓ' ,χ.R&ϑr 8ֆGxVl9 `-7͒S :u Ao̘122x22֭vYX~0Hoo/n)d #dvwIENDB`DataLab-1.0.2/doc/images/import_text_file/i_02.png000066400000000000000000000503031511411446000216260ustar00rootroot00000000000000PNG  IHDRi~sRGBgAMA a pHYsodmiTXtSnipMetadata{"clipPoints":[{"x":-602,"y":-104},{"x":114,"y":-104},{"x":114,"y":648},{"x":-602,"y":648}]}7FOIDATx^ `T՝_ <j (l*>Pkcn-Կ.}ͿźPmWj XB֠خA&Q|5@Py%ιɝɝd~{;1s7gdm۶/oGʡCȑ#raT{LJ-sСCeĈ4b!]>C{:;;[i!d5 $]9ڐ!Cu޽{N2"NN)O8QX+;drLyh%8=/t$rKw9}i /x,9whS*5yQKjzltKsGCe[','tRwoX_|M?l:|^[ ';aK¹OV&O:Jwj/xݢ9_FICIs G(cGȄ w;::VL:dٓ:K1pI0iЪ]4tOc:L:|<$#&L(Ð4dH΋a )~shW2o*)~ć3ϲ*ϪdgD޳I x#=ХQmR%utW4KkKot8QzΙSL6 6L>z*SF!mdҽ3SiR =NI<~S8c9Jʱm3f9*akG(v'!Fpq$^8+[dK{eM] -x=+ Ė)%2 fչ}񠯎J_/vcĶ=oՏOW=#/7B8 L%Sdұ4?Ũ*m㍦$ ~qʄY,Ɉd3~8.a%3رc=y݁~`,etOq\Y4A퐆Q}BhDx#0]>H|tыt?7ꮕ̓i߽vw;MŁi<~Q;Ub={Ζ's3V4|SO깞Բ)8Oņ9ԁ?N9y7|K&O9E [6seuQ2Ś^}5m.ڥ7n7>s/Y䝘TU=?ӱkv2@g5"rR6ɌP-Ã<^}?I^{]et׿K%r,k̹˞IS˖5g0鈌.r%';^Y;̾glGk;e#r*ٯjTBjtGm r>_\\):5oў=-uʝԒפOV;].%^&dԨs\L~I;޲^ᒅz;y}ag҇ ݄WIqٗ~l_oɊڽnu_݇N,+Q0+S%;'[-zirʩdOg5TC_g*믿FΉ{ŝr~8^u,w塇7TowC?޺UZuToJlXPX$Sjz'V%ъJ0 gل vBP_(3ԹQ^e„3TQӡv U~mԫ?k?5G><$蔁&OT=ħľ@Ҏ}p "oӧK2 8]5w||_kx&̞u;Qrє rdirɧc=&?4Cy睷%D=UE%&*Uq<]cn*IpJ=&?^nz%vl[ouݞJGWn^|?SOy_6 {(mo]G%g^dk|uɕ&>N+VVwdp8!9"%x|Lwp%x{ν-w$.mE E jBKDz;/QmfОe{s}t̹agCtg['l{qѓ#ege_.Qv _˥:S 1vzQɲz%0&*'WWLLf_w۫زѮs6/^k,,szMN;4=bz=0|hA$Fզ&ߑ\3wM?'Ml/r=b̹>N +z9zp]1 :9ֲz?myEzt|?KGGZd[^󟵲yk`8C@I:ΉW4UcjaSuY*Mڟ+tmo߸W p&Czup^_C=~9T+BS{+D 9Gjkc.܍rtqKBι bLyh;-\}Ծ%deywΧ"-W̥pWlwV/|Zrͥԏ(E6e woj_=S?fle:1~BWq]U>z|YX:PE ]E%2;C- wᨱ9/\Z1>١l5L"C5#Z5~YQs>HuԸj!C5o쫳J$WS";ي#')1c_L?/j9O 98p:GsX"e%_sxhrGeҙ$+;K.LR8$\p\uaPtקKPN$ՠ(Q^t&CK]pœ}2i{^7z *繟Ry!럫~_:=:1fӱH72d$7!:5ISo79 ]=4< m^1վ$9J 0w zyqXN.2Ր'I0ϽIǟJMbo(Mx ['.$Er0?,L60T&!_ճ=vp{;l#Z:V8ֽ΁ 샭5W}tNkwyYժ+]tPy,薜Y:̮qǃW5BoڴrmxP/o'F{ܱڏ/ut$<[^Jh&=p1i:ڳgN@ckN`z;0eMNݫggm /w~mpDFלJЯߩCi}@|'$S/PF[ =:?ZoqX:\Dtw?> C T -6ֶOFчkӷgӓgQ l1Iu"Jm,㰶=[,FxXAArv?=q9C-PbjpOG*]PB`ad߾]5T5ĺ) $!av%jrLRt}nXlC ]ƻz}]Ļ{؄u>}_6fӬv Gjƺ׆J}'{v p{N{6&thIװWކFD}+!mO ;q2qƫ e69Xlmu%ڭ9K4ۈ#ON :uuh<7UD}+AvGqqf'Sf%cmbOM~D%vkV'W;\D8C1C3;m8#΢c I֭[6ߑBm٢@X$ 3`@ 0$ 3`@ sϑ0|S"aLHFJJjYTmWJ^^]*u]⹿.. sNR< /x륲QJkkTەf:_f4J$3() ITzU]WOtԨڮsJK%Z/hf)\S﹍>JmNY, nT85l}^Ҭ߮[%ejymrab|k2Zںގv,~  +)PV\]s}δ͵0'a՛z⦬)[VҲ|aT+Ii oL+y a}mTud ^,o5* &Iچ/,lH/q$,YpׇST* jY6JѪZtn^kM׮\OS:Euߖ0ǭf"=nb@tq`G^B6ny2I0Ƌ좓Rըzmt%a0Y9jRLӥTmi&*YFJ,@[Ǻ\"ɗ w RJT6SjYǾ[mladaBXeziVJc۰꽔K:j""Bc(P5;I\#uzB^Bކjm/Ʋ2iZ>Ix I QxZ J{JZKUQ}NkԬNcdKU]%}-uURYT۸JdQ Y 6Ku&fW5NCIvf68){ )jN5+"߰ۉ\8Gׇ0=^dk/r=~dɦzZ3+y)}54O\7l0ikk}رc2bĈCA}QToʙg)C5uayWcO=ɏ=Zwy~ٛx% HA%YG=C> ߟ !a Hf ))f= [R撼kb<1P 5es$(Ҫ*i,0iί͛+$_φi{^s=e*&4הH^j}jKT>m,VV@J>2f=d*UIRWpWLԸAoT*뛥kgW344,)ֲ1JUWɓdk-[&/ԲTʮ5"U۫X+z>LDmak&I>=qq^de%TYYYr=5_zԕZc a4YO!SvɢRY3?L(VZ1eU|gImRJt抦۷@vTOvoȐ!rm4iUԱP YvI\bJɲJdळҚi{HCXk洉5RizVv*j_b snղ?1܄jN4Y*Ja5[3ˬWȢ[%5c-/?sP :..bs`|ӾXLTbܶMQ^?tu' _;E֔ 5|-V g #)6]|9I9E,*t.$_o'Lra=/cH=T@%G]U5` sѣGu h:)((h(ꃪ{u>_ ޳xaZnڴi*6HhA>030!a nܬ'n~$= T'nZߗ[27l0ikkN] Z'W8B*}'=9u$kM? ap 2h ] Z*)9t萝BGswމmWœ=go,I5*YVEPVcGY/m;ߒd>}*۟C'3Neߧ'))f= ȶRRY hՓW@)D}i:}- 1{b(>4ϚN"$c>$2m]Pz,k*ź:Ns <&_VT%ۭM5nKe͔JK5V#^dsTϯ]ˮ:+nasVS|Bkd~E_/$۝FNf5| tK?TVZMJ^gM eIҨZ1_X vρJniquhc"+43k<|)*N]TYd\'JݟP^ Huz>瀮3ݞk/W끷3N%P>nHU,]*%O֊LRYOD 8՘m0Ni.͝=yVZ~27g([=,f3亹Z9?_gK4 ն&-RiZ-;W2ݾɯX$X bv6H$mIkdO?=~:0~G`} 09C2{9꫍ɲz_vO4HIM0 GB%=m4KMI,%5:B d_.>] 5bsZe{Uv5m:$|e^`\#%%5KI*f;v;<]-rRwmmW'vVqKoO$5 RUsMIDN蠸'xdVJWP-sbCt9\/ՋƲf WdL |lZ'JSCsc2~L@=$ǎ^{MT_+װXvTOZRlWl=D@ʯ*iV5ZR34Xm^ )s ]g=D;1ޖH_=16I93rR=K{+HҮA.ɮOdm[5FjWgtRT_ ^'$lrytM7UdXEU@eC*F_ QuM$Eo~*)ӽՁ[Je3ڣxKѵRV꽶luz?DA'2j {TV}%tiRz_keU"8ݚBwC.٩z|LHwYzHEtUO[ d}yj]m%җz>^cZY-erM{( 2Dn4iUSrf0dy)<9XO4zbHfJv\m''C`=TqnEznM׮e BC Ӱo 2u^fw{EvbH?ٲ7ڡr+]o$׈#fw0+'5f=YUOwTYO0ouQ=8jTbq:mϔbmX͔;Y*$#}i\2|KrqxT\Aìz"eg宄Y} rΧ3H2wҜɲԄ⼩/+dQa`Mo(z^Țҕm䕉\!*!QSԸjikvS@ӟqX 酻7! TR&U 0/dggn{ŷa<3gv`HEC(d3/w6Wz7ɺ{/szv52RJ~dTM~e؈WVb8p@f̘a>fT?CxIz}括dRt'ER}b90W_'jRT^.8MqUmEss:MvCMzkeӓL8Ӿ\_S M"=@ B*sdbEs87Zv;婳Y9فxgdҟἤ&ڵkApCW@_ڭ㧱 3 vTsVQl$IG _?pծdYQM B @egg0S8J&dGmmѣ@4ȈuMxa  $ 3`@ 0$ 3`$I}_wgg؆.cƌA=H%otIv_KEwߕSO=5⤙a@*1wSETM ڎɬˍ?-5 3@Ru++ 7H% 3@j;&kfwdY)o{Suq!2eӳ M?O^֮a.ߞX~^_/&{^+*ɲKr$'"aHCȗ~S>k0C2W~/ere ɓoQ#BW+ej%cD fZޓ[[K)s\,϶<-:JY}˃_GN'w r-tծ)̞v2f{|zseFC}@ouwFs,KD |$Cm!꬯UHɲ+埮4*%C ÏXv:d^'v<@f̞#Ϭ9wUttXew|+5 duf:wdaA`6]0YJ]y7#7[eΗ"0 ^9M}gd˫C_Fk/ =/CI-j83*^q 2{νnFYwɀ| ]-Q}T'zG*D^w?+ٹ:ҋYW!A2jhYag|1k[VHXݿKSåe2H]W2$˔,[wȷ3,C y,[=#\[L)"{lt& aHs7ʁ6y~2H% ekdw* UEw.cewOW}6.:c3@דHWH.'ayl9E'w4%aw8K}9YrrN]dK,$1_]N~) Au /Pn=HQ s}8]N-{ WCnZ:ekǥ_^=+眔CҜɿ%9ȑ2@mi{HYvwEk딱ó䥃Qz'ѱ!22z?ʐoɨ_L0eD¼ٷ%wpl}iC]kSJnW&wX\N/3QMSb+!ՓawhG oPefknꪻ)4~u; tX_n?])|*}oӵeɠ'?=1'#/_yL>cdgd.]^:r#/ ~U2Sav41R\dGw91}jeT|wNsgw݃$>sZ/v-E%? }~KoyV4;.9jˆK{_?]U|POP &Z.&>¤94T{ynb|.j~k/UTX2&a{b|f=\p˖@ϰ*Oo/;D2k"Yrur})[~q\{R&.5q0S(̒΃A{W2*κ6˂ #}yU咠Ig-;r*v"z{;WwWms?\׮sJ[[.zA˝mX*迌I_oi(>{r#/mJY5k.tk;s\sdʘ}Ȏgw {4.N+'*53<z&KJ.)굽^Yn%qz1yyN{#_o KDH tm۷ӋRE5G`|gJBsbSSszf?#^l|ds}7Ͳ>MuIM X1 s'O!s\1/._JRUlwXO3K]N|takՋm~HʏePNVWɵ!?j҃UU=[2&Og̛7ʏ'?z%2FYhY(#j*S0͑>_ȵ]c- 3t~̸AG?7̐?59>;}K&Wbپ͝l>*Gw륽нvi\;.g"NnOmJ/xHWPT Ci\O䮭2m+aa]uƟe*?_~ף-Y(?n\/7^/C7f Xu'N6| ,ٹX&hx;.yV~3^2FY`4^?=867q"?^GmCdH^KO%' G:q"W zc-m[waVr]r %GBcSkKw/S3eXem[}@Uo_uz5@ݼ=V C8ğ9@ݞ־v/ Z߽u%Vܡ2뫒DlװLWWjszPOY֭O6M&N[[geH9r̾Y蛑SǎءbQ_we7t~_n]~) Au /Pn=1"ҷі-[H$H}}I4gqoȋoe痏hG$ 37v¼vZ_9H3S_ft#a'Ȝo⁄0`Hd#gaGG?xd0 e?5`ǏÇ+ r1IYoZ)$T|2f̘HN=%0 a Hf0 a 2 anoLGee']l*[f՘OĻOĻoOO07ɆF"=VʍܸRn˼OĻOĻoOWZ[[^z-#G---/Rz>0ߛ s?ں"ތx3͈7#ތx3͈7OWMy\Q|]]T<@0".!ތx3͈7#ތx3͈7w|=̻ej?KěoFfěoFf)<ZqS@fěoFfěox/BlX&?y'a5mۿaz3׿!OfěoFfěox/Bl%WDdU/j8 F@x3͈7#ތx3͈7#,i$zV7Y&=fěoFfěoFY?[YsaKm,Yk ̇{\T.oFfěoFfě"+sJ:%*W΀ɿճNUi\gCDx3͈7#ތx3͈7#,v^SH#,1K+,/quRO^mw#x7w#x7x+sJ%Y+:jkkqƉu𒓓kc'//OO #_ZP.\$نzVʍܸRn˼OĻOĻoOWخҴ&aF͈7#ތx3͈7#ތx{єT Mj8Ư )+;D&]{CfěoFfěo4q=Kfa]=!7#ތx3͈7#ތx3ESR9f4խ/y`T=0/2 ěoFfěoFf)$VeL7m׭X_Qפ/n\.>fěoFfěoFYh Ub07W,Y_ˊ tSEW?bzx݈'ލx݈'ލx;^)0g Mƍ'KNN<=D;xv;vȑ#o"=`B 0$ 3`@ dD¼߷I|Ք4fld㼋%++.[f՘OĻOĻoOO0R1z. _e/~nqG,ݨy!x7w#x7w#X_פ~`/0WS#t fěoFfěoFYhJ*_0/d饃9O^!2=͈7#ތx3͈7#ތxxǧaɊ:=YEAfěoFfěox/J=i07խ/Y$s"ěoFfěoFf)$VIx¼?Uz*'ލx݈'ލx݈/J s+/dܸqbSHꩾioocJKK9Ү&?. = M46`@ 0$ 3` o2YlA|qŒe-jL'ލx݈'ލx݈7ǧ H}"f. W+kF߿[nQ)K7e^'ލx݈'ލx݈7ǧzWM]bKί5{aF͈7#ތx3͈7#ތx{єT?+g]e_ɯ&̐ 7Cd^]^7#ތx3͈7#ތx3Fҿ94խ/YQg gwT ތx3͈7#ތx3͈7oWMIO۶5uo{00/2 ěoFfěoFf)$V]\_dI[+Kئ/n\.>fěoFfěoFYh Ub0[+i^_ʊ۬vWX~\6ĻOĻOvESR)aR\y%V[[7N];yyyz vA=72vXiii#GuDz?0 a HD?|!_sIENDB`DataLab-1.0.2/doc/images/import_text_file/i_03.png000066400000000000000000000511531511411446000216330ustar00rootroot00000000000000PNG  IHDRUsRGBgAMA a pHYsodmiTXtSnipMetadata{"clipPoints":[{"x":-602,"y":-104},{"x":114,"y":-104},{"x":114,"y":648},{"x":-602,"y":648}]}7FQIDATx^ `φ;*b hkiJ(`Uߞi r=mǖzjzNўZ֐Ul1,xJAgdv;M2ټ_8fg.3}O<#Ñ#G[o:tN8afwʼ :VfwN:Gn>D!W/o@z.d)8*B~NhWW}y, C6 n;7' 4z[/<#5j(IJǏ^S,R1^2XN\ jfzRvA"e%K 9to1uR%V ڗR{%ΎW*q"!3o:`AzVkk]ރN:BQJR=J4 &{C ~搷?(YJgחI6昧!׆tQ6 N:qn̩ 8R&my%-ݟ^zTWX"x[~yLlˎ;Θy ok?<~ҴU_kxX_|- `2JE)KOCO9j1f3 o_QeA,Lv,I6>oi|ng 31ѣGUfSJgOh]|Bw\eQ:r6?WTׄ}Qxoo={䓴׫NccZ=zTE7I7M>H5{Cx71N^m7%t6@_]6ǮO0K%Ձ8~)8cՉ5opݹ u5% jרCJ;[;69.u.?yɅT'h (|z K5 ?.8WN:YڹV鷿}Nud{v*7[}m?~BW^}U/W*q )uS(0ΙΥ}6<ݡ3[HTS$qa{\zgցʟBSЀ-G+ m 'Z6<^xy}o^V1'MTX%32h6ifޢh)06t)SbA{o?w:[[|ZouX{~1i]w͕vp ~ 2$(u;;?V?͌wǁ@.nAےzsȽ2*޵"{9>/2_שO\ >9 E}?f/X62U\ʟTDt;ivw~+}G?X6%< I" > ةxp7JH3f9 gޛDnfucByI]Xޘo3]wJ!7sYӮ*XnrМ`H05է__'l*~rM/lZLNz7u˙ 3-y0˙n Cf0a?k Je=kL7OKsm6.]nQCb_<=6u8K if,gjbm1n/k6fmznz]kbTH e]*W,d~,SmC{ ]ظ,R amF?/7UGn+_r{( 9U 1l }ЋoSY2ڵSocvYgЮ;qlj?my6^+&^w-'֭tRY?ƝgZ3ƴv6?-kh֦7oԨr7 פ9画sbhgY xQiK3Of13`Wv_gkx&mwWHyRw?A7v.kn ŻzCoS U]<(~{ 6tix2zۜ< q7Pr<}ol sc{ǽSuQ:]:̳[anm⭷f0fؚy6%X|M{(6aS%YNӜkeX-mj#{DK[MZX;@ALu@o'b.}7>6V.L8EwI]:;6gMO˧;.<}i5c&o>bՃnp¼=&6$o-5/=FBo067 ޶z54ʶ~*n[y%Ay9B6zǩ }V?߾'+d]c׹_,{yg۔܈o߬)v:]m/뛍4hP?]s4T5 8CW|8COץj(oz"U*YqO*pm ڶyS&ݪZf^*ǹ¼m?-sAK`vi_a%ȕAo? Ysʤ?Ncs_6Q=Dzږ0Bk-fǽu,ȋt,ºa;;F9s*[3.wsxtCd*1*})vԧ4E:7ޣuK/S֛L s!mrzC&32ӑMmМ wPxo;?\QV=Et+8 &ɚYmI@vzěJe)}3Ez[4W_ 00fUΤk2}mzSf䩸KۛI(/YFxCayʕR*`(ՔQ@"v>;yJm[c17`;ۚfR> YYqĉv~zo;ҝPg<mϓA1+{?g3; &!}q˶ #<@:7=C0$ݻwQ~&V.;3$#FX9 3@  `0"t[ `G$K@  `҈b*3-@f K}4@ t"r_n'sLWkRP; N5c'Y{)sP;騝(1<$7\f:5T>}թz~v~\}{{W\1ܶ:At8[w;Pw4b>ګmN2@QChjC|n]nO&ydkvLj~mu7 o֢nZx|}&^A]qf9m׾(+lKGI^N _z%;Y8[m#6Ks2jEɞK'@v;P;Gy ?Ɨz!ğPE1rxh'6)&ۏo~84XdNW_Uȑ!jW|~J`tOD.8yyU?F{VʡУ@vлf?6{ ЋUTT6o3پjad,yę.num50ۅ-~#ۺdg0]/F9^U)}l"̾@MGu|-W_g+"+tmy&>xw{ x85"'9ko=ojcsӶ_-  0??rglțAںMѯdokD6;H?{>ѧ:<>`-HQyq@XnsdG =[xJ⏉kOkѲ7E'Ud xkqyn_[ۿSӾ41sr<_x?ڐMy4}o<1ô&3Nq?;'s~\dձI9 ن "`0@f 3H3>f sWjTuuvɜJz :۴Ls{J\^jŇzeߥۂ]-ҪV5LvxkӅP<~8 ZWH5Pn]dﮨZTb|>ݖ.vv-{Vg]FUiV7ɭ^0c;rjG|C[:f}m꫽יTymeM[3V-muv^y9nC>o;ܿ4?:~|Iۜ! P^޶'!q[}AY/68nd=`ոPǏh3-ۧMvDo Nj ^7iytgyOU֮TUl;]v>u7Ê*_lWض&V(V[h||D[4f}]lOǖ-q#گEs{|.ɴ\uK_oNدA{1p6I!'(=J+v2nۓXx)zN bZLKܸ3 Zx R6ۀwt'x-h{#&kzmNs{YWVĚRK4q,9y?CS̊f^RSfh&4o?jo^댮oZ8~) N iLdÐ NڮTi]뺤,sPQr`sU ytnJ s:nzB$*ה-joRˌ)wL.1yHMMҘ5tH$Y:Wj$mjż'Y,>H5 t1xROvj8n'anт-mO'g}{yI f>&b>&mY.]wD3l$l&BmIWwfgLO%qǙẘiA?m_;}M樂 kNӡ5 ۅt)6KTWdt,SPc(&`3@ pV; Y%P0by.@̻U=tC2n.;&a[ =Am+ 8symYhKk&qUfX! G E^V6q~[Bl[m mc7{6oqrՍݼ];]m:Z:\> n_j[S-vD)6qD;{c ><͖SR3Sz io|mY";7H+Z)>qyju*&m۴^so;Lg[__/5wV&3shƍ~6)7LpƦ SKs_lȅzV~ۗ[ha6f6I{FB~I:lmW;An및h{dfVÜ؇ @@մt]8I˥_; t3ZnyսezOco34eR6bZRko]}3faݼe_ywmkgyl-Z0EQ:1tX9-ÖP{{C;j_);;4vjo9{{UL qQ/a[G_ 5]fVX n}c#&N $Gz_ (Z@f 0(de,rՎHFf 3ibNF>~ǻ[-\NݖnOh/ yТE?Ѧ3if^ٵv`K&icrN{l=Q]0N/߱Nt|V'tRBͼP?FhS)34~Y]4?:-]h+[ZÑ7NUJgdG|_'!+ٽ mp[E!xϕKAnKrJ;uŷkKD4>XvTm^)ˣnifܠ]JX,E"U/S}eDi˴l@(`_UΫS5cZ\bW *|2 WGy3ky6fbje3<jIi@` CeciĠs}3TZRkwzW4Nըzӳ hE S*[38wafvbNon8hPcr8}jF|3t&:ͫeY8: t^io3&Vf\Mǜ ]~^iwSd{bZKÌavuN͖X3^7u׉kO6}8Du{,FI-Uu;Pw}+Nƞ={4|p;L TVZnd SO=>Nw1~z ^zIS#>@0$sUŎt!;+9d% LS1tS#+G~ӟƦMfr>;xѨ9bSdIEEEF܀B17.[L)qꩧꦙ3u8|a^:6i$(|Ġ? si0AeQvy,<)4h8'N2?Al)y0~'=1ի3ߍ3mRn0gϼ N>dצȖ Jz-7@Æ S_ΨnW\vӠ(&S`"Csb1{V@2}ŮyJ{SQb}hd){?ʮFUW7jPȺr}m@i{[hUۊ->T5jW*o߶VМ]5FYĭ/"NZWBK nY-ҪV5LIw5JJٮӊ ũLֺeVwq*q+5V­+T}NթNvUiҚ{G莆6Qתea{`m [kJꕌ9^rv *wEբ*U:P=Z ZGW"+p:V[[:^K]- ZEf5ΙﶢZOJxښ.,kj5nng꫽|zY5SSӯׄ(#ʵh$X T[ܙnkuJzSw;{]c4g^/N٭kMKh5u|6F"NNx74l8uƤ3YA5JMufGl} ZoزE552֮TUb;yS͞_%aEU|v[@mkúד`J8T5rֹNuiYb[4VjyM?jzuT5;u–3p׭ n·- L8upoJSul_I&7hj)t>twqI7viu}Iop_k=v^"_k RSGdؖ^1Ur5ck)34~ySEQFݹJQU*w[LpN'7$WIҮ'x:)Ul[XؓV[& Y.Dbym8DuQWqwf.nj,tpY](lc W/'Ȱ=^qfr[LˀWQv©}z58˧hFSܮ馺t5c[uәB^l9}F['TN9L9VO,0eW$t(Xkt>x׀!OgO7x#$gnjYOBg\;ݭHM .Tˌ)*wɦ&i~͹ջLeE Ƨi*̀17@Hx_9j:˴O0ܯ[XM53i/t6=W!i n(މ:֫BUp/L̷kIM`+ճIoF2Z$= OcOnsoGk6ns*8SKϰW3eLc&揋+Mœg$W7N۲Pct2$ 6N?}ݦ8J+@s.KH⏕5Kz>SUWf'Xv+ `;uۜ|9ǭ-n=XϻC7\2Uk YzulҤIv27٣Ëb3澗,cǎNsd]s!ݻW)@OS⥗^ʨnG c!|0h]@xy{ʿ9鲉v27b(  `0@@P/yCǏ)ѧO~N=8?cȳϾ*Fi6@6:i9)X9z ӲL t9 M[׮]G}ToM?A]s56%>*;+s*ζSd+Wȑ#1cFjnnְa4e @0W쀹]2?x`lvikݖh0n&΄ ;vإ:Pݸ.@Nuww6@8UUΰeƏ_-fՕe>ׯ3jTuuߕ ~Olm|MVt.l; ~O6/[Lxdta/$U/sXUmNX.▰(֫תv!4eIy}P:|͇ fg ;+Z- i}oˍtA[+ErQ=sv#3,&X}h5h3Y^.~3Ê*_l`m˙Z-_gϯ .ۢ1K|֘xWՊx-1WǔyekMk2C+gB:3AWɔܝ9kSsM%fE=0w ~{aJuYGiGuIl s/mkRFN>Y;nq%=n $ihSڙ43ĉpO5~H8,7.Urh[^*-Wm-5~x=&OWZU/)34~y֧cf 7o8d{^%L$f9r뛴v㌧χݮ/]LO/S @k RQ1緶u~9V_IМj9^sH_fպh$5O5m ׿ۿ'w$!h6&0`M->+v ǭԌ-YMV{!&7mf4y \ж}pOr~CoZfIAai8Wl[1F߹:oyď I 5Z1A ]_s:餓flM EcڕM͹XջOww.0jcZpLL|y @n޵59UN5_@/`Y?F3rLjZ^Mki=Ll\sia6vV׶mjk49X60~T\jK:{^s:ͫ3)W_ʝexqZ9cj=5Ҋuu*7Ǥ3N<urJa+A-~Oj\]pD׬7^Rqq{ 7=>:_΋uyBMp2wwklDxe]f's#_Y1?w^M:5y&,Wƴ̖A2fR`:r|j}PZeL[`mv9?k4ϧw+: %9yiq~˹gJU$77闶wƛΏ/w֣~?eúܛM%!̎/Og~8j*m޼Y'e*`Q0pL{KUt46}>`iqn*+E\t@;`]7@ hefO2 v 9yTLt ?mDu VS۔ 3P@f 3@ rEt1 o߾D"6s<ѣ0`;d *sL9~[fdZq8昘F PD'Np[Qё Eݲl(,-%ti~{Ǧ [%?u饗jРAd`ٴ*_r%7%h~QqǣzNfСCza,O4I۶m/W^_oGQow0@ūWC=ݻwx|/W4޽{կ_?OǏĉ>>-0|Oٲrc/ˉu+ngtӫzm3.cҞ| =.xzF ȑ#ne´4ޏڵKfJӲgcC{=zRn]v.I=mzB@L Sgy2ƍ7ި>}iOEB ZaZiO'}Ls^$'|z04'ax7=g?1MG^ Ţ>Hw{nRyb]v̍={hv >|XCS]gn0`jjjDljajtɶݧo<}2W&>*bv=&Xf˻,#W;*sf̘#膍 V laްa}ʦ[:2&AcLlƙ`~x i!]@t(2 ;vpתllZ%%>@0@f 3@ c~( f 3@  `0@f 3@  `0"WM4N);#G(tE$Qշo_@ 60=5l0EQw8qB{m B0J?^Çm JcϞ=:餓B0VO> [C[oSN9Ŧ] _|/P?Tw%*bML<*G SN(hȐ!v f*oijɣeM{pq>X?=X1U_3<9!meo.cJ3 0ΏIFV?Oo:^wccl׳owcЮE<-GΈM=GOޟ9NRc32L/%h.%t㢝K9ϻj4=LМOч>9j(;YxGՀDm{#RiovyBGO15w'dds|h{k =qwx存%ϭO0Üu;twhg|nj= n;Hoן~p-qcﶗ4@f>Ňk-&I?PNPL%0n WǞz]}mA6W\FDA^gJ08x,(Ch|Ei6|7hvOO>x~@*naUa'(gkCԧ,"|6iOH >aPR~0k lƝQJџӯ9Ѣ*5rrߔtv,BZZ'&vky3oaN^Q`RZJ"`6:zilJFW8Xw\k=A w+: MkMgoENNb3iβSYRPyo%zNs.r~OKF$[|2^_RN`vUѝ>/w_Wj /xZD?uG';}@wx'X;KDeةe@L|)1٩,{P?PEv~o9t[Dt"'2A ;ޯHƣ.оקsKoӇl?7:rqƐ*?󤶡oYZ򦝛w|X;W[j70~Ziej-vQ ts$iqdx^ /]O'zP:]%ۆ]N=I_M=6'0_puzJK^}F[uZ/~g)Wݨ;mļ^ۋi_7EWݸUDcu՗VY~tT/9dzJٶ{=Ooa䏥s֕iQԹ|JW=O-&b6*_r'6 G'kvw/cs%kE6iٵhVd}&ݿ\W|{]cۆ;~;HO77yiwlJ*߇9߱9w0-ώ)_>ο^yw8*:Χ5*_ @L\3 2f[D`f׵3o@Ӄ-z]9+3@y]@ 2]@^T/vpq<3Gy A˹i L^yv=e MnzĀ;uSyY}zs%0G]?57k5^tM )JZ}e&|0 {r6vMwfpSq4ܬ.J[[M_km!dv{~iUk|O0;brr`ZMfέulzd|DDO~"p8zt[4_;9SU{YOW9jQqymAOS_Mߙx7+NI\IU6O3giv I>''(Sq*ݤVl scOap(zؤId8p@C S[lD3\iwJofVC=bf?c:} ?SHln2rQ|5.!=NX[zxL_L&<~oϞ=:餓6lfd;3­3:"`cX.~(A&V.| `DVZG>b' ]=a Ӈ^XǏwo~\4jm /0{׿6צݻ5b;b<…#\(p<%CV<:wj<;@mxjUUIDTѨ3)KfM۪.S=3m֛Rs2_7WbSDgUc).˦ݠnTed"]2ɞ- ndGO@ tSt WgMRu[i\iG6M aQMWϷrEј mtP=3 Ʀz.{b5LвUD5_lWzVMu1&U{f\Cp^cG@ tI 5;a# hݤ t-C\T| S,Mu I NݵCƇb҄MQ{#*I4͌sD вM&,*M+3L+qΏLsLӽc.>qsuWXUup4Ҳ 7LThe; 9@y .GPBy-RҀBs*;oQ=U{nt ԼǞ|GPBy .E7^ާ`;X/#\(p<…@9O7t#Xd@f 3@  `_)_ iMÅ#\(p<%͚ecT*rfT/f09,?GPBy .%T-5]2v"MԬH]mz.`Sjƹ5.GPBy | S2*j^-[9~ci^cchf-s5ɻ {7iBU; @y .GPByKdڵkSO=f͙>=L{ UFG#0$׸|h1gmvŸkҟci A ʍ> /m6!ړWYf}٧_0?c?Bp!Sp㽳;wV7g<28-ZcW﫝1ۭ [anzq }:lyqsXaK[;۷oO?t GR\ 4nNN9c;I^~T0q׊F 7n k֬ ="esF WX@/e,7lDop>jF:,.U*_w,;JN())MKqC7ݝu#_JŮ:x~D;G]`J=#X_3n2k-7] 1NGm[⒌ ?>8θlT:c-nm۶|u` YLG'KW}[W~J&ghH4kB7e<2N7Vc;,b4HPg4ύ[]:}}0.uЛK)ח ?}cx _=rK]N/:v';8^)>|v0[kyh{Yx4_&Կe}\͡ԥ^|աZn&~KQ۷_g"}c0}:<\yg:t&M!Z3n_:mg̶#~\<#AY4 4rΦ +`ʕG6)|ZxW.޺$ sǼt424a.;fOkz*<0C} S-u^vQdHG[yg>`귓ʗy{:0cI5i8G+tFC=\Hc l̊&)?SH?ht?mgժbկ+f߾l-}9.χᅱf8w?^ROaNM׌a aBoO, N]&V3/l Ϛ_ H;댷̓&4[g?MG<} [8 75oJ-r3dUƮuZgN^._=w^| X'[_WfeΑg$iI0P~)u{¬}qQ_.O]ٔ2v R"e xkKnq:?Ic|3b47]u70Adw诞қ^n92ZvCW\wT0ZnQ4S,C]\p1% w |ƓOE.}LJ+,Z<3cK7Ŵ1-GZ#B皁|,ka[ 6n6?]XOyʰLw}3.؟W裏|-]Br 'ƾW rчj'0S͌5~1,M3֤kk=9;6E?NpZ;S[%O,l]X- }+/p12fEs;24 {Θݯ ?gydyxٵo>3,3SOsֻbso>Xe~%~:m/'^F)oK1ϗ4z |x`uEfO/)Blj_|?Fwz#Na,01b\3UGwR5[Fhz4`y9kW?Q5Sњb~iY?|3FqfYzɗa3ܨ~op[_|{Xza_-̙{p? zwÿuU$k&e^ iy0 A_itf*jQіKobXgu ]0.bn,S~k.t88c{ W{Sl o8ǴIc{czYff}{եί.|e>qq,R>0 dCkE=굱M?߾8+\sd}@`L?R 5e/ e!ǍP*vgtiS'j#%bcubT?um <\ɿ Zwߋto ?`XU]r~:,it._&\rŒy˶0ep+f?v٥7aيu?|Z8阹Tw Œ5kcrna?JCcTִCq6g}G7N[MՁ>*2}h\ͷ{J:U//\s?ś_~7 0gL%,n&7qaxsF5M7f+7h8S/_ϭm볶94FmX/琹{c?qޡ'!OxšS]0ҥ_(쌌?Zw*ZM)F5:.^m\0˱|ꪾ/<#f07h7uRf.eTukפ4XŃix1H,aݘ^ +X:oc:?2Le@/yz:;3!ApQg,IFO6Sזz6+E>} y;YhY:G==ftcK`MyߖOYZ\<1:0woT6ڔńu+,dmy&ww9 t%έJcTCWygSv|L{e41"h7_j1r9` =0:ctܸ(A^F\aqŸ`ilLh먷tƐmO}f!F2䯕f;ΨP/eYZڠv^׷*Km/N̈́14hʸAmhdc,y zL03;vHNN-n {T@T,w-TԆK;hgG>.iHݏ.mzn?=w.[܎88gqqsqqgOt2?ql>z=ó[lʩ?5qX.,}3/g~y> &W3*^gк Q9H%O3Rc/G[/v:83V4ürb8c<GuI*"-]}vrX>Ů/-q 2(8)Ĥblsef F>x\Yۚ+x]+aO"ElI?|86889z{zh#qoȭd&*$ vw\zKE~ B %@ he3c{u>x]PWm-~4#|}yOr88NG8CC[F~+1;u&lz{U# .uBkKk}k~EIWmIKD;<%qqf !-w!X&~ݣ u{84_Xkuwս88Θ=yƖpAu]fg B( asi7c63jpݏ%\R_\W܆묛oQƁn-mH{8#PJ8y}Q*FVNnriA[?x'\l5볯dk X2$ML_ҋϕ,(žj.糼V[;ʽLN{8(ᰣi b>U뷚lFcN+::|BEkaCu-_}/I,n͚znF_5[W7*Zy0u VO=1e }Qϸd=qqF뮻Shc 88N3r-avqq fqqi@-pqqŗd888 `vqq`vqq`vqq`vqq:?w888xk^qqq9ӯÎ1޴(̘1#ڢRZ+Vqqa,q.-ЬlEt@),:ׇw*Ǣ|kqqgtV0]ʌo̗7Goo-XS5 pgvieϒw`Q|3W&3r7Vb,zp3g/J4qqgtV0I%>4,3x&WKh6_NYqE9ƘIH/^[޳ ၇ oη&sm88Ӑ/ɨiaq%}k^ApCgqqCل_1e3 לpAQ4 Ÿ_YPw*?ԯTְ~/pqi?Ofg0nʾ.HXvqi;>888ufqq]w5:88Vfqqi fqqi fqqi@׽updkӞ88t38# wqG{{qq33&M\vC/7xA88: hw_=px ,bvqE0_>\.XliE:/ [_;}z1ߢb,f&(:(/֋19I׭K>+VGH뮏c,vUM}Y(+Kcu+٤H![S\K(뇜#qduT}Tq%uĺq[O8mwfxS?ʬ_pc6ւ˓p~~$jSDgtތ%u(&>g*{Ay8 u^|S>go:,x4*vA꫻?@8[jaCw׵f$zC|0+L۹~>^^'Z郊ynu88w˖-iUgM\X\תY4pʗ!G GnׄWG ͖b&x qk4_>mu5hsN+o:3wb<רl+Өu|Oe&^^l(Qf[|,QYc0M88VԆa^p5H.v61ׄ3íDN-ZefiJ˟EfSW'S Hu88rmi ?G>r5k?o^|sq=~S83|$ x:`&EWEq)&*Ͼ6jgq[[)htJ+ztH,{hV/b0;8N[@+e 3k->a%u|S5qT>D.[?kf¤ZeM}+Begrf7cP*krsե%MWcR13?.8A]ί,87og*+v kkC,[G!C#JS 1_qHkcu4z8㴕o}o|3>5V:lT880ؾ.qqqn`l0;88gqqg\0;88N\0;88NL0]qqqNzsiqqq"=N-p|xhѢp 7w])9~>do~Nr8>tGfjgf |f==io.$|KFW =#88o]0;Έ_+88 M8+3o o Nj]Cd,ЏL- 0X7cCb5gJkVKYYg}8TNۑt?$qq8irIơ,Xzy<\.<6*̽39NO%^~Vc|8\9JaJ|I8ʖ_ِ8Vbfn)KÝKR9ǝz7 Fb,XxX5ufx^^^?33S?33e/lHo(|P_Rs ',\L=w@('|2Z% qsK2’M_[*e3>|ׂ,KÒJj˖c :t{o7o^:r ?q\٤`^7l$Y.6iruRI6۷2!\0w1q sߤ{kkL-@:@qr=sF'a ֽV\7=̖KQdqB#Gkrd oxCګh}fsZ)K}/Jw]-'CiCVvZ'Z p'Rٲ '9-[\f񎷿=ns0wd3w fN }6%_L45au\q~-7u"J|{ߘ7$qF䒌e$chI] qYLKX ~Qkۼ|@ѡ%}}{kkL-@:@lr9#0{ϊ1;`]36o0Tr}pR?ftBgm&fe[73eq정rɓ^n*,7Ժ;YşZH'(e߽}٭a왗분Ǟʵcpqܫ"/]j.+>/X1/c.{_mb^M`yպ>sҸ8y52gd`Fi a͞Ke1<ﵶ튯]TErX?wx?kvkkL-@:@lr9#nm,`/Ulݖgg}55 v" g&t`kkL-@:@8.3gdرcGx[g۽b41!a969_vg +_>wwpqgS&a{ߋk~bO>=}KIfqQV9.[|ᇇn)yxLF!?|K_ fJ8Eʖ_ eИ4iRGݶYS!F;tag9.ͽq/s [:xUxl(tPJ@'cdN~gfjgf |fL3|z{{ý~Ce˖|0گ~p/08c=zSN9%%o|I8Ӎ䒌} 8[2qgS6\f㴇q-QMoo5qPٶO ͯm+!/l~1}C)+ZgJ~>VC䇼LPul~1!ڶ϶i6?to e_CjV1qC>?>M_8t#4$;$qF$8te8N{]?5i{NmVd5NrL-@:@8.3qC;?H_8t#6$q$+L{38^p~,^w'oII̎8N7PT0rut`:,7ԺxNr8>tGfjgf |f`yX0O=Tؾ}{:8!L0!aǎ+_ݿ]{襤0;8Ȋ&DZ`^veD{=os8e>WfN=½ѻ3_Jo o Nj]Cd,ЏL- 9z>WП8U~䒌/%k֬I)>w+K7_?8}p+WJ)/v-חl?m-1m*͛6769;ϬYFwI#{G gE܎qad3-M?޺X?޶>3e԰a=mWem4#m'L3L2%vzrh^~i_p{VK/dkkL-@:@8.3Vx{7@47/<Ҏm56mO޸=1;*b8"|l g-iw4X\0plhq'+Cf(_4ԯd5NrL-@:@8.3`Il2r_l,nw`һ#?9T&wy+~pX`!@7?tmY#GGCR〞뮻SNIw0T4sf^-bƌz|01makR~Wqem-EQAɟKũvȗU}ϧʳ)o^&'S믲;(^?G &.5G|D wҜؖ}7P8:MծcKX,\ir89_џb|Ge) \R0ղeƏcyYXs1,[ecᡣkg<3cL0~ zSsYݜ(K݌YkcԡQ-V(+r58#K8.ncM{?~p]mOWφkok7~pk7ӟl=CM`\~O8<`\¥&Voh?8+Qތe_ Tkٹ7Ǔ&=7C\"RYQ"l82wdž. wbaNqYXʄ&9yb"U|[ov],;2q\fȌ×? ]{'N '?ำk׼3Ñ'7=UMчxI҇{4D/ÿLKnW~P%Oso>e ,sO^>y-LE3+.4Ϩ?^^˯]y V/;N.oȟ|64˫ze"sʛW:Ǡ-B9P< e eYu&4gȕbiƒʼnCxBbc TV"P[;*=6Z7c 1$ ɫk|&uaW`{ΩLt,O|,|ણkM4#H G*Gᜫ>U>ztbԞ /l;5j->ӹXD 7B:[W4Ovgp/ e/|b+!3Kfݣt9rᣧD]&L)s{IsB8逞p; :Λ '=zX, U?ra;V`yN=^E##6\PV&o܇,cUV%j65۪m~=8x1+N2-seVF1PZ8DŽ:8c0g]GO+,yID}&O5L659}Z}#ڬ3XK}_G| <kg,e\ @"HǣEb)K FCbZ|s;OWZ.7%c[PFy2kD3u.7_q=L֯hJhYX7i,ee0Y+o(κZA"$7feX{>Hg_}Ve!C"Ճs?gI59V܊]uۏsXCL>҈k<αÇȇ|2>6>~- S`BD&>'W?ϋ׵fTon3flܢ){{cww'ŋOdϘ8&Afi@Zoph2*sbeeK!<} $Udt^uQW3'.(M:P}yżlbPQV}C^|yS<# [O@>-bQfn!֓^W\.|qyJ[}I$z"@u*ČW4|>y[PEbQ"Veȏb^թ:tyrXt(8]@좑9 33E|y0rq rSU[<ϼK|6eu4fJ53a+4rۙSFʲYTbU> SyAĹ8XNhI(_QL*(R̓T|ڪU1B);\lM0sIګ0f=|Wq=g4aܜQ J+l(C"S:qy@eH opLbۊT(ҕyzm ޞT'p JcOжyʬX|;(PIgAbsέKˏGqF G;ATu'x<[fh ܀CEV,fS@>]G|7oҕ>.c_b`J+bm,P3.) z%,']oʟp~ +'[R=t} ؈ A"i/PU< (+a'a,'?/m?Ga08O gŢ- b<^0flDu4B}"#q̾EP~)-'/S)q>u _퉴F\ў~~),zd'^NjN Aú眱 f'Q #-r>!խ\cBV~mtjG.c*E^WfTGʓCfK,ysOaʏ?)|Ҋ;("7.a"7mo{[}٧_/-?Da u_dx :Ћ}Mθ/gxłDH!cy}*`s/TVޢpob:G>U1ӫ y\ı|XV5(n?Va qgv@2^Tǧ !?tҗ53cډi!E2msQ(Ny'MW|V _oNN=^ 2qRey9Qv.u@: M!h2$r Uy1YYܹsեB=7F_B*MOl^rZ㴁ep* ߼uqeቡ"[qeDg E!Vbm7Kp Rla}[.U$L!W0I i? -'_B#ϣsQWʚAqU j>i3,r#B8g?~p]K'Kki ×!Z;} &cv3ؤKNN(3оPJɊmT<Ʊk y>ch8G,+^.!DWy><, `)@ФkgiAT Zv<y{ov㘸A4jtΠ\M9觰[n?ȏ<1<֪[1w24F(Qĥ.aOG_b睥륺TLk.i>s0g]Ȍ×? e륵ʇ^t?H^֒E?{gIEz_9c.}h mv o6€X>7CTV D|e1J4O<kYʅ`?PK,#ڵ8#*fBgɗDŽ?Um|Ҏb˟cesxrJm|b9˷B\#:(Q  ~fr8p_xȿbn_@ !e21ȇ)ċe4))U^O~~0)^|)f_. SrL(>kq]mOl)֤}PģyUeUU"OZ4;^|fCjzz0 |`OA?2۠vPVFF=m-5os8W4A+Yh>cwys!,:-ؾcQTƗda]zԩP6hk ! >$Ċ3epN絏p,PR:Ňřʐi]sC!8%ؔGO1$y}[}K9ei0-mS6?8|/*8םǩrʫ>gǡ"')o΃ڑ}Tf+ řz% H13W>^Z+k2}s[}Wǽ9|[* %cqx-^ƜzD`{|#=Fb(_/EEQNƱiRТrQ:[#`AF` bŗA85ԃףQfKT1̱qNBR}DJz'1,;Ři8 >imjXk秫K>0[^>&^H.jDxneđ@ǎ3q=se륵8)M|r8+wE:cqx-Zƺ|od@ I 7|!^ VM}y$C ҬXځ|NAbt^S}q3vpLɟm#PdB4ڛ)n4f3̪ oHךB/u~*l1 (/kJ'N;We0 *_LnPrs Ea\Ϻ39Cge)qCw󝾅  3:=ܮ%,b1 QL縞_yr?KpH(2GcFYqq6SP:9i$O'06,e=f[i%b _;OJ<>pNy1 8#tϗccyM&L2Ε`֌[Q8sĨ4~WY},^ $a_}t`B; ڃ}'8'uA1/o`Cߑj3>488q7tW /8?/\G+" . 9s=WW:͒%K\0 `P*g~>oCqd&M-GcWhWB (+qՇt}đf |#pR|lDs ֠i2Oe_Sl|r>!v`#v e? 68̤!%5>fɯkb`DEDQ0>N3<^/fD~^DLqQp7,MKb D,Tre@D?7v F+168! w4)ӝ`7p0K8h0d!"8Vy *S, sJ}/*6G~IC!M#%#f 8cW\J̱7ȯŁe$SN3;άz ]mc6cm1A[9&^(GHKȀ,@|DV<ƯeзK]ߨeW;h7E((NRo sO*!:N(.gqFx9Mqpo4G- 6rV*[E`,0͡>bV6ĬyhXf JQ~xNܐU%f,Ͳ3[ԌBE7ږ^nYO|$g͌>Ih esUDS귡0"e_!Wf32qF; esAybz~%F #DN[Se:ڼLj.8oLm G>m)>B8"QrI1QX~8̘elꎘȀ1rLCئXH>12Mϲ?+nbe֌0[VB8B]Nu̚s޸VG,<v d{,vƎ w.#Ku%+˛?oD^|i_ 揶`TW3F3q=s-ӣ8Sikpb>2Pf@1rHXLb2򲆊~3H"?W?o|S$ yeƓfGVy1 9M Q8Ă汳qD2`X`˳mCYm1V!Eມ%*t'(GHJէ11@׀cچQ^ sB1STQOW!4B/n2VqLAfmyNdІږ_˜gˬfTOI߭X:_eƷT0Pw~ mq/LJ!vq}3{Y[C"f_(p F~/C:m,a_ǻDŽC,4-Xice8N[pS 1+7+ '7!`Pl:|Kr)X $! |TDzh&2bIXipB<̨a GV9akOn(̌*-XZ.I߁ւjYo@L}vcU'(h\3};ꊨMTʍB >"/:p,䋭|hFBuC^wy^ǩC>i x0Hk Ej}$0_.L2A&(+S\o@ɪ0UMQ6G:f'doOŝ`vǡIX;E8Gv֘f@lIK2dfFrK?+;X,Hѽo#h&>K|䗸Qzk{}ʨJTQ,o> 1hk #|^c3S \WKQ4k(ic_gw4A/ILJ<-D-ᤠ$W#8_1kEEZOM#ٷZeҘ3GYqg%I22i va;trڧ9O>ТAY[)O9qU ",r#s-+5FdVFYF;@bE '2ύs8h0,VCD (N#?dCBPi_I>ai&֘,\*Z8AF'9Ec :jY~01 +y!/ydLh9-D#ܩ_:^LL;`mq!62ԋxƈ5A]2*M}mA~r_엑_~\nQq0׌ tQ$ AoQȇH&a}@Z:fW"H1S&v%8 ̊j/(a}7<^_Ƙ5P0+31VOwޯ ?b*u$_1bŬ! 1@2~ِ>[mO2qB*En]/9tN>_UA>Tq@Q3qڂ?^c E+,qNb@@\" r!P8|NcоLE-t}V4KQuO@,`--1>Ph, ό˪ %>L2*]3`G3ThXS[5a!L [¤[ !fVh 4XH57lP7F0jHݨ~,}_V e?2hG}R^hӐt^$Sfs qLh|A$k_m-^<>gI)k̫,Q<%-PR}W ߘPYiG2'7([\f DU@A!@_oU^[D^> 2"laNHdID$X.YDK~4Z;Nlژ5a5))~aQE(Sx6Bx|<ҤU8'ȅ2r}K~'mR|۷OEؼۣ?X#u@,\Rv*[#;8 EndCa5gJkX._nG^t/C}v$ r 4a[^ff̰$fb~ "&?(4L?YF@0GzE@xŗ3)8pD*T˩?4#oGAih0vkbRǙV(8fxzcn[sV[kXjClL;TG[HGsL^fZҌhy6|iyk99b+^mLns ƄlX8ԗ\O~t9Ojt;LBlf-dZ,?'A ?Ծj@䡃+>Q@ABa_bH1 <jJ,7 3[׳,1 av[;nAG(_X4w4M1nkey iW\kbDWK%n_:=vi}!1-gAYB]lUD*p!ɫ|XځU}5b'M9P]Q\*˹ұ"j[Ն|g(P8p!a.Sp璅ᄔ>Uz r:F>HӠ[L`(Z+JM7 k:#>\(C`CD#!- CDBþb3|Ifg[A8A#SUhW?bL#4>mBG~ɌsI$"i1p60mfܔ1f"/e%šDžbnYl;w ,3k0~S$1}C%.kĈc{ͮ7Wo,ƀ?% ?גJb=Q %36E0wyO[d~0B[m/A1៼Q2tNuɯ,/K+Ct e(~Tnp{8130ocOX p<K28G^QTi /! ڈW>2"Oo[ݚ]rA$bs'q"|$jh *DD(Z gŏ>EYP#Af;y,GĢ:9.^8(XРYK͋ *y4Ym%7$,j^ 0xVT+;$Gi7m!fy?کe[[/yW?GhKNJc9*c[8/˧8Ǡ")3kgQ4\~_;OzOqc,uAh  4s˾cb Y=,ZC!(,,'S~Z 'J}3|G^fVjN#NUp!їf3|[ҶCx m֠>&Aygyo}"ZJANtgr L.6Qf1fտڎO40f.33K_gkAK*";tPe Ce^Pҟ'/x>{^ &ЋXc+W$F,CǺgG7yi<NnXqmnmWF^7ߔތv8e/l(o(c ;Vu{X10nt7. l Xl5I !"~Wyf{R|ӄ޳-3fq3ɹ~%chIl/r@]C<2VWf̮m0B"\5ce EIbcŸ"z&5(E0Ϛ2;˷U̶c|E!C)^4cb!^v" G?!5c:_=eq=cXO͖n䃃]3P%[4>ׄDu7K!YefD(3݌xsӽ/JB$q}{,075~ۓ@q<CGeK_L-lcņʊ|y1g"EndC ^Uq;‹Cr|態';N73 ~X+?\l!/yP~ XqiVh`O3Q&kY)+A!Hr/ A\D y$^d~%6mXyؒ&_8u0k5a&?Z338fdc_ӉV ~eԃˈ<8$)'I؅NBs@jYz1.t壟0e[:c}cK:N\yANes+Kd{F1)GLJ/ۼԖF׍z,Gyt^ǘKF=Ey /4 ¸ 9g~&}\}&N5.]U8/gt2 c*d B{q(+ 7$о1$FeLP\"YqcZ@1/[JNS~ra/Y}NEQ3qڂ?^mAYk 2 AT?0r '3)n*i" "0q%"̬Y1fS1Soh?h}h[!G?QD%Fn,۠]6?7f|q>u:O?UW+¡.\Wե\=2IW*C,˟t$?n9úԻk-lփa~gu]&fn~7|? J u.q^1"{U6ʨ\7%)v0z+8ma\ 斿_`ԀY81.HbaZMr䗱L?q/GҊ$ gK! 9!"FCr|T)}+>2sx\~p-6&m씝R䛶%Lab0ӕE"D À2X^W\UD*}&q882ʨX*gK>S$ӽ+At&?^b^ kpy%lyqR8Q} +|Ĥ(/Y2θ'End㴅qx`+V< 1 ȹՑtUrϏI~Y|EibC`0)ƌ1[DHZ2,)%%(2 |.iѲ>8vQoDBS@/>Ƀ!@ Sȇd keK(O_<7w Ϭh5Vφ8Kmlk}1?|/)}ugUf]_YB }Gk-D?qGf)'9<DNv> I~9Yd#ЪU2 3$Z>ngk_dniך|)_\dv!xѩG }H#٧UlE0d[^/*'TG1]nN[) z8N[ǫh`@Y3P>C,s [[*!Pꥬtf8Rr dׇT);QXDbQpPCo/%r"8E!(UnY\ٳkI\j@[*D&x7;`?^|p^ __ؖ䅉> ^Ŝd h9c^F[Eb=v 5i Sϰv ^1 cj;FvYoza=S5ӾaR٬F p<o0%OxH|/ni yʖ_8m󨠁R`=Eh0[(͒q" eU‹bD+_eަg<32 -/C~)X7 AFcmaFSd CXϪH9 FLնh7!TYk]]ºgOZa,Oym.vsXafCi+Uω´ \|h}.צbK= 3xuc~\$U!&XM҇/h%.&ĝKd1^ƫ)K~f!}\#&u7XԻ-?zBX<x)*ge enz%WX2niK.ʡxj_>|iƹ9|9zʦ \n"U~Y>822 p uX_H9͸*9 n„bMym4*mib6jf5cHA|@">IOd0F!37emqyo !:VfoPfh{7˿mB'Se^Շė71Jdș#')yĮ1b;&N6D*2HahdY7 H >^A˭fN]b ߀ 7A^:9 ?cvYr<~\8W4g\R&qרl`|lSY]xf̘1e&TB# 7 \|1?lf[&F@b2CZ%2| DUV@yB>\"bېޠ> +ɆP'e̢" O@]t?̚Xf3g̜.~쐰<,8!io7c6u;T3ga#BYVqqFL~#x+)p(LN;zmx]#lN79(+fBjڜf?p{\=nbEK8n']H ͉@:׉|xiuC~>ec|{̾dƻK$smf_7gsȣo,Yu; 0·2Uv0gWZA0v(/hEd6o89|1 J[[~DBUB!j|1[Ȯf.8\#񧦩(-lȋo&ڧ0&H*c]D_G!Ks-]W@yX`v*g>-aRXO0hu+f7W!g (J/0%⧥v8QƌA|QT1,kI&;c[ȃ~C}uV]j7`AqR#8GN>c Lq+_˸ Vnn'!5*j3 ɜгƾ“9=[2Dy2򼜓VȇbYC&_% G^ ɭTWќV9\040H(^e|UE>h 1BB|1aVPK(Vt +epL|qM< ET1/mK:UڙEK@2 /qFuG1{kݽ2 {FgL|+3ˈTbVLǬh@cPm1#6@&!eXMMr}8%l͞>?f `U3ү5<'ȋxp>--kK@XU=IUѧW 4Qq>[YWם+SAt5,r#s-5&`cDpGx4Ȣ&pxqTܯL`-h2i[g>x* |2X,f"/ˆb>\Tt3iQ;@=m{rWL&Ǭ#mD ią R,Z>l0b␈U9D w\-_ioK=aSXp5}[qMfImf,$h7ԣCUjƇ6ӏ$Ӟe _p/N,Y`m/4cL^*u0;n.bӏe]pJ#hQ+܋t8f,w:/xi3}̣oup ~Ĩ3iƱS1* KS8y9͜֋* #oYzntɀX).'7UHPs#O7q=3v'p/gloЀ~" 2}%,GO38>FtkQ:糙C@a2eŝjB =8VA$FI+GE$?~ $_&1SwfAI2.CU\j77/ %iVp=iˠ5W}'=vab^}0@Hl魶i yy~=pǂUS:iIZYqfYƱƢ9l-AQ|>0I@4NHdeØOb6 -~|JXCE )w9>it:JeTmI `R|Q]ZK/1'p 1uD)h!A21y$"21Lh+T^|_yISNW& %$J m"|+u)XW“ć|f#1D>~F!I,{[fm}C=?V-ifj=41o sk@ƴ OW!+S"֎-ZzRL* @"r9|ExA\QCy<ՉAܖW> ]uչF vq=s-Z}͇M^cXz!\|ueY."w REk| 24}T *LjDlQ+f18 > $(o` %[ŅiQ:>S?!H"0#䥜ʦ~JfFSWfBmf̰⃐0"M /23&'uJ#hYL-KJ`B(BqP>Z޹<ζXZ8fÉK3ŷ-eJ1~[rdyݩ_^;֣>!ĩfe}3mA8S|c(J6Ŭ&F҉ O] u vf_k>QЖ0ヿ 5ċ~n-HPJ4}ɽ,/R}0F~f7=E~NPpraR*dV||: qߓ?7#o Z'LiYj Eɯ ]e0|e0|Bǹ##DQ3qB[9g~&\}{_aispŘs܉am@AP9fHAh.F\0իCn>R \-T\3ՙPʑN~1U. }!^=5/77 IZ-ʯ 2:8F@dY$1sf^|<mAvN6?jWm. PWY<=XmÈSЇcTwg ~~`eGIi) [>v ,@I t2agJ} q)qʒi^qy>28GSUpnD,tQx޸(pdK~65-+7#:9*3qs@'O%xy.// +Ό<sֿND`PeT3TuQ|$- t&ʖ" +Tk6퀵ank®M&[@a0S/YY͜bGHp"46G1e ȘAE R)uEŷLS1/,ȰaU^ocƏh5~ QKLڌ7 ZxifZ s{vtS4k'3c0@Lb固$uHs ( ʂʓGKIYzЏFh~s˨F>"72q¸zOA4824k@NJ$ie0D*Ϙ8͘>ό%CtLT"ƀqζhD@"4)Z-vL3l6Z;5np>鰸ȍ4)ьl.*+! %Ja D1Y%,1# ʗ֚y :0CbzS4_/"+|Dy]DnV *ߍاĢs4!ǥDڣr1?Az)yaݽ&ZaZ8De zI=up_!! xPY#")Lyz]l;iQE ~@|Eq2gHY~V\ʯ: ,ȧ2h%bʭbq3:#NQ3q<^ύXk0jՖ[ob\\h M^, 6 KbO7Gll. /,ˤDb0gQCB5 1~Tc͚Ye ̰:4J<| IfUhl4Vf c,h!V F,@0oA,[00k=G>.U9(W%D,v[OaݖwZt)%l1Ӓ1;M\ņ(:O?_'pm2{vDB=όQ'?FW(|1[6ۚ{YdNZStߋdĮ;9/l6PnD"߼VtbJN%kO/hQ[ W ӈjCJ vbv.;BQ3qBc ;Vu{X1jꥷ  <S{e} @}̖!Ghf$!bLmA|CY~RY $w5G5LBR>PwAk8ff4~. EwQEO|c>kxe eĈ4-m" +6<ք$Q—:AqSVrϫIR5caͷ ħʨ%e~?b'FlS󪕼~ -wo6ñ$\zQ "Yh݆_5qc\{NʓxQ䞮Y:N<e@BZǼ"H1irB$i(p-y!?Eȯ8U<cy?F|SX!@ˬ /SZz8N[h`ߒqŠ_ uV/.|}E_.Iz0h!|l5K ZIjjQ0XcF a cq6("ȋC`+%8'[LC#9Y7NHLqa!{A"5 Kn̆0u¦O U S{8f! (!tUf]1h?m΍j?$8V63,[oorE\k.{ ek7 y^hv^%hTF3ftsCgufUa^x~{'UħOevB Vl^zqk'/`N~7[q.{ QDn3[[(v ;DW,)pX&Z_ Wz\w]xO!%"˰<xYDTYńt7Uh~hbhd~S4cʃe9yz~sy` e8N[wQ㟟4_ePpBuLnҕVoA HjN}D1?H za@<:N0ŸI0B" ځ@aXfYVE L\bheҊ>{ZEc`28Y#v3CH!Ir#Cl5;D3n{GۨI=bc<͘僃L3GfqIa{T~hC?B~>fjƺ_ڊ֣ԍeeZM\\BꤏN̍vbelI{i#}E\\@>|mѵ=LDB~U}\=}5V>̃6ި! }O='=7.ݐܢ}L|̋Uf[i9gyf\_^ \(U!Hi(I,H ?'ti쓏`9 i~(Jqr`cGxzi y>=Dc%˨^F+yw.|-_~c_&O֫kȖ-[JYrek4k@`WE3lo"c/c2c 77P(yxLW⎬ 1^as>ĥ&,8F N 3ӪWmnXl,a9b6\-Xogzgz#qkXG ђ :iϭ:Pg jjW9}8*G̞2?}LeSU; YY6&T9~s#q}:QڡyQyYHߎ*dUYU2OhBGL3Bf -BVPf 2kݓ~O[mbʂY 1.`}Ctዙߴݶ~Jظv}ƇY:݌o,ɽV^!|ɺkeφډf3 PS*AOYD*mᚽnjhɥEc!L EDK~_@mKQ'/[O u`үc, ^1{*ڭCa }ʽ_5"8:-7"}Ps8lef:$Γi}hz*nǎ- n٨;& :nF CA:(oZ4#njgBDawp}|3&dml;] b!?yٶZ[1>kW6yX(} +Ѐӌ1,VFWFV} sX1cU(dmeF+ C) 2n03M{,Ї!Mȉə!/c3aQE =]6` E"H$fntn-eWClv2BT(H^?cM9jz5&&[=dxMyiZb@k|X:[P}~}Svտ(1e@_*8ĨxwR28Ns 4n<|+#Fڃq~巚X cyhq?j#%R1 _K_F~ mO9HԤBxebdmt:u3f,Zj rF :E 4aRu`egKcUV Su'pl5I2Ž7L֑1A>! ͘dF`sH`ĊX0QA1)> myׄYa_ć & N anyqR[m+c"5-띻)RD$1[\_}oq+v'!l|SOw_j/@>´g-1r~Cq. mT6bF>Ox1~F~0/V7&f_2C}/蚦6VnO\e:p"kLuIf&d \%8 &T+|йIrFԉ1+43k^谥+FqLIbYa ꩊbŧ*,XʌejP͘8ma\/Xxq[O0rK2$zBo;6k* Eoijb|l>@Ā[JRY⛼ol9ʫ4q6X^44"☪o >yo61os6;zVQb4_4<%<90eJxfselGP=)bFagK?,9x 찘l+=f~ȎR(執/YE1M_qey}eMH#XM/`&S:<ݒy_b5p_47n@n([AeFݱ DA|M>P$?(H9|NXu侉,[@cT1R~vny~M׮HSVA_O[ܟ1)8m8pѠ ñcp-ih4Hxyק 2v-3jf}f[_m3$@ABbe2嘉VfˌI6BYBcÏڗuk |ˈHR M'M3v"US?Dr 7"wUnS׮6PT"uUyO]?/=7\OfY?MdW-1g-T[/*m>>gi[lW?֋E@6B^e*Kz(Ön >tDG9,(1|d(k;}I(JX,-/2OX?= N35§n;:vbaċq`T}G,m@XglyĄOv:NQ3qڂ?^mAAVhq J$e߹ʑ?t}[ ̨؉wRS$J..([øOG&" E/4"OY8 +ߤLP5zX$xZpLj ׼NJ(F $$u&~3,i;ŕ.q_+ޕ)[Gzzy}LHg# i A2Q_T%QA08g~X}$i*`7WJ PieL Q"<2Z̶ܻ0[a=_FU267uH3&8 zn$>$maY/=zO6j"vڀ&>.h+h]%h9a mWmnc Wּ6g׏ŋVt49ۀ8rY7 (B&}>vc;^iO]x1gGؼ:`fXXSLf+mki1b{_󸇹8\Crg6\(#FP>7[n2CX mMׯ<@1AD&QI>ځQNnu%GLX$~MF^@!B@z-]Jhń!y`"O?[0ܱu[^vegtP{0'*v̜f@>E}B䦁0F3Stzx1ը4I|1V@ u# _M ͸Pa|(Һ^åt?s 4NW ъd#-Ug'! %ާWZ |Kfo0ӠfG$"h>v L O3V f5A첦r!?}f:}ed&Fמ=YЬF ҇3T/t+(m*(K^`LW<H|]lPF)lOu/u yA2~4n~m9yw= P֨|϶pkzg ReWWЍ4K'u}=z0. 77[|Nd!Moc/y(lӑ%>=y3OE~A8'uANhoaK]W|O^NN]¸9j F2~3P>hh6XesGus߈_|r^0P~T *BuB ZSU3FgfDOV0# D,/xy32V2cWΙX[vO+2Z>5~7s fikn01H^`> BEˤo*nD*>ȋF"Z5-}>]Z-jc?_{eN>ᚐL>bLjc>"/?@I?/Ѩ]WmbvYqÐsvS5\|k/c!zR<+E-J%1 vUkYqܘd]S?=B]pB~y:Om&>Mܢ>"޹R[rNaeJ38N[p2+&XY> 8Jˀ5i0d} ?&'pN3ȔT|ʀF13|e@8D0 OǸnҠèj6%Ϙ+y|Ng8m8Cɀ<|`dӌP-γ-~)>P:6Kd,Y4ud ŵмT.ys1dʐ[b%&*gv[!V"DX%N)'qi(|ᅥ\XilDȚpă~mZ* 1@0UEAbev%ȏHܿF(ׄkD! qE#nPAP?UҔq^ UF C‰n~"ѭeֹouC^35bBjË \FTF< D5v+> %PL zWϳrYy%Gq:(8m`p*2tNc1?Q>@i(# x D]#kmcՅ!B,A]ju纰$7T)AO=kcܛ1 NQq L`3?7Qe1]9LXdUvs]4 * leb -j[j.ʖ_8msJg` bdL9`>0pQҺx^0[ŏ`Q<ͱ4:9Bև$ 1Hx DB$/e YT'E'}OT!3Ɉ"@PL{u-!,L=xyL6c13mtjF4uB!|3g-TLʏѬ7D]b6JAj3h O׊8%X-Br),ee/bVAD,]8!NsmvcuT_q=GSƋ7wD1>6[⸆\O6/,(?q!J;PX:-H8^? ?|%3/m%x! U/s t^Ǎ ? y> Q&s.idUW1nC?6g9DX@`O!G3R|9a]EoH,!,L0=:SqA|}&I|KUig;(ZN⌨/KJ3CNe1O,IL@|=qnsBA,ltG;mKGu}$?2Ӌ7hDu 8M=u.OG#/ycur0K#fhCi~b~=oH:Vm@DRwcQ(8ma\pŋ㏕Ƞ4kIM/@,s 0|yP]f)F>FR,ʡPHG}Qǜ| ,a`,D\`qF 7[ؖb:TڪvlŸf4clk}ah, 56?0=le6?^64#]y:0yՖN|`Ĉ}=c^^]#> /M3g[-fk8$\YWB[ L:Hh~$֭B/Aytx-%"ld=x'a?60`q]kT@<:-yFPO]kBBq-81לff}y~e 73pOY4^D-8~ShF[O9 ,7 t$ho^;wUB>ibFϥb 8fJl.$\:c><Eix:l9&:N 'VMPFk2?H~lhKy}͸8~iahѢ dn1r 6@JC% ?E9ha2m滌%Hq^&c<x1@Uj>1j6T shx'yi&/E#'c>/ --/N /hbQ-Gd [W,Ռ 虨ܸɩ4ʢed4~tm'~40Y x"3žOT3nڇ8fΡyfD3[aGD>|s+E@=ĩ~@}@K>G4?|IV/})?MyvOQPgח?f\eXXTc㾑 EuHq2~T!אG>5I]Ģ-.LO&A) 81t?Z0B# i+h@3Kbi1Qi0Faf V-ǘʡ0Ͷ>cs\j ă*0UB$[u`[*%/XOu\0aljK8`㻕_:[xɏ03.D3A7YP7>q oCX2ĉ:dzgB|3 E^j&Q'00t]|-CbQ,1!RY}i^fک??O뛉x%ef831K:) []pzms´_m6;yb~4̵eKҷZM?em7XWݱL;sF#~P%Fu9p=Fr8'K?j[}ƆزS ?,Q&N'b)t|zF:,Bш(}S틳?:0͏&VX@~?ϫ'IF8N[ǫ.Łl,  QӐ?ķ$z@'5Gue+eyu␘UqNGCXDSC@>6}7͖Y6lkhbtM!l}A+[41G>zQzHQ.'S0f9O[8d ?m!vD0jeva 1WA<_Þ @LgKܴ< i0[6T']^Vy=(3P:0˧A^'yupcu qz !bY3 3}M(tm3Njq)v@=x}߇<[z侜SqХˬ |`P@Y"fiAB!1˾Bap "" R"V!6fV/1i,~,JyiF AH ~fyk&A$aR <%t/H=$r$ } IqF\"VK)=K"DP2=#׽Gp89~+qB`.%?cf6J9|n#9:N@N9D36}yqfiMtdF5ѡ݋\/۔S}ٵg&4mK|.n}D:i܊7̆aƷVputnXqd SfR 4\CLy.ԋE`oO7 f9 uRzS 5^z`˷L8Axmg P!FMs<Ň͌Zu~ 1ˋ U5r_/kϲ!^п3<9Y|&;xc_ϡsb}I~yc>,oP}W^ms?Nau38N{ǫ. 9p4aei4 `P`@èÏ`F}y00Pc]@*+0fR%"0 B 1&ْ#HY9f)^AHdaCl1K'ZV+L~ 3-KsC(rLGWϮ#JC* :q{̬3:cF9L}>u›Vi/ āO> ZP[T.^\$垲LOׇ!/K~\sNy8&O44B?p-"缃l>^XD!Qz$SW5/啕Į9ā" (ˍ}b)lP^>T(W\p:M8.3qڃ?^ua @"1 xHePe R#"#f0 h* @'2ȏ)W~smqAQ[X"mpC\ WCTYZVޚdGx\?̲[͘ D7ӏQp%LC e"zpeY@fsqatwֳ sshxlA롹t#mAF|h1 I+*4 lgGv}';[U`3u,`[v|ߖ00\vYC65P }D܈B i2uNaEF,_o/n_~D'(f.^|W,זz<(*Bku^O^y0*j];3*A2+'+yE'=\/?1&1e~}2J oa`G^NcBs8N{p P04hA ѕ$ }$$Ff:1PcW"a_mKh8ˌVQŸF/=ͣFdG̰UbILbtHE A>pɇB&hgڋ a9*PWU+K'gOz"oAGS+i&0 $m ]y1 e{?,~λ:;2̜S|lĔ T}NG/']%kZo~o"@4QO/nT*:awKNݗ*O1#GS_e񂽬]{'ߓb,)=X|z0P0LqޥṉEhSXɌ#IFl\l$@G.ʓ7$ee8N{/ύA@ƀJ,# \se \/>(O>!S,Ό- |u*JcTW4GL??SXėX*hdue!\qK*#QXA؝kA3~ΚČ4[r!GRǛn;awW"jg7Xe_oy!\mO1+7kbp $Aiڌ aIw]p],v's%1WϽόcC].aŲٕ'Y gY:䧺!O=Cc b}b -1̖7mŖ|~gYhyTj͋%ֈgxрx"Kb;O|XyO)}Lݰmy3f0&ʌ_I!*Waqs M?DqC*yTɳdyD&}OImny7}/LW!V)9h0c(mgmyqY]D '~L!0ڡ9ebG5-!}ۈ$>c+Ly򑦺 n2&~m6++^UnYGTCˇ0^$qOuQJŭ q>*OUxANyFrb4*o~_&Be|(?j\j073Bˏ4n@~LqMa ;WDz!8ֵ1JY$bŷ# .H}Vv <~u ~'v-50:yy-TwYKڶgX.;fiKk6_==}ǂҖzD3{ջQ+};Mt}%.Vֹ=a-a)E 0bffĖ. _&KrG̶Q. g_ oOrVx~U층csS/vv)u AÄj[4E3K #~ dii/u!ך:{~db$mI09f כνKTduu?3n[c)J\[] b9 ~9i/l:sW?B^:`żCr /68 C@#Ջ>'[3obG F?s a.8ݒlSؒqYR~Oc6 j?]r9il4 ~`pjd䣌 ATF3A|(/b Q7c=fHPڃ[|ȎcVBm{D0@K>SIZ/㏸t/KkMۧmlbDׂ!Gچ/ͶsSLK3dzMmMѱr$/y a;륩0Aa7^ P>Z(,1['1)|I?DfiW<$,X'rϩ5nh=C <◸0ʥا]IP?׺*paɟQ=Px>gl0HX>KSceAm0QO֖<:ːc9ClE9t?Ev>Sv  4 0Ҁ44 jlO0Lnr a9DEqNnV Yc`\i~m捶VxYg>"/8X'o@P"]6  ̬2bEfĊpxdvz:" EIahΡ (O9%沟f:Q=Ǻv>E,4uP&4h*f͛aV~1RB> Y\~|e-q[O3'0[+Q5ȍdp /[܀fm.%0 0O4Y=#sä0ƋF! b%.Z|ܡq6hގ>\z0@[DEmOt0yi#i ؒ^ϸ͂"eif7ODavQaQ=ŋXH{u+ `eǨX (*C>dʟύ< =B3%4w#Xc3n8\eaG/Ȫ2$bC0QD0Uaa9&2WT?&QYUffc&@},#P[XF)ĠK &1;pK8%nzFM[^4,yщe_E\^%:NN3DS !E?–4Q7A9D+҆5"]O"d t)1QwMisGdV\:uXՊ?ly$A !>'S~b|[է'.)o΁V^:/n^P4c< "ę)Q%,ْls"qj'՝Jz-rw:]WwUSU.WrWҕrVَX$5&%R8#Hb;?^~zIIDm`s{}ν;ϷK~졶GWd?3bhj*vR69.]?֟xC%D{jP aC>_NeKCDMH"#YsyOWg~H/6ퟺ=m5zϖ ,D9`ɗI&;OdZ\DF˾K#'m_}"K@U\|LJb&aw P9/ @}*t]sBuٚl8;81x tۀ~1өÔVM44\z)2.Op.BLpT+`-+nhvkNSMbvx7&|&YFCzʽh&&>C'}R~?8WG;39hZ꾶I@oYtzVy̷rs%egJ;a~G'wM(719@`'aV0ی즡=H l G]S@ĊT&/-~;tpW:puL)dtQW 2t`oM2kr<|a]j#?o7W?V{6D H{/qZA 2d>QhWu_C>=T~Ek/ۼY]ZnQqH]y@ց[C9}z3OOe*ɒ@ʮO#B.װWe,Q|z[5hXcwD=|ίm鈿3 'rwN$aH}\c\9?awL}XV}OeKv}.hBcW˽I9NJh43zYM3ьN}]] Kn S3lQQ`"(ě242:ʺd)(N*{×=r^[7j^1<-`Xyjy}A8^deZ1="?r%0yXwwNn(ܴe~@[]zeJBIWy.#_@cæ,[h8TPñ0Ԏs֟/kڔ (-2-b[OUpv]>tzc+d_ouR8\[c I7̃K_l'rDolPdM3#D>!O#[_]Z~kK~ ^cF>6nzDuyF}>M,H;S1(xLqFixoR{^K2ҋK2|6|\:±vRױQ`8K %V|l߶X$̉Cod2bZ'nG<[}$jЎܳ>kM{mMm}myG?0Wrܗl1~.GL[1p)|{o_dٛUg0|,! G,c;Zk=Ԟ8ya;g|/8`GwmjA6G|:iygXsom?^M b'|L)Z7{6??_|3{1l2U}ZcКn7?,,:-Ǟ(n ebU2iCg [2К,?ArNg (PJMO dV276RŲc_ŃDycWē9E6LV~NfpUvօᐿ=u$:SmVK.%_ Dy׷\z -C-rmy@s}k1N-cSK uwS Ec'هG.ԍ-v19ν2ďcvn|>eie}m%{? cwxT@%3z%4[]G zgFo+P3GqH&]QM 6a0,8 ♠ۃ- qs+,޹dka]UCm{]SX hG,z'vmmH|!rF22 \@{VP'yEvMq;nn|ĝGB\=ַGwՉ9Y_1tBl姛<Ӟ~a* Dnvcxc}Ş`٢9P>ٙʀBr>c}Wƫ("s*p}[ ڣ<>g̅`8~r<;Xj/Nn} [wJAx&#bRo$}m4C3O@#WǘZ'Wo0qPm9d@0&@=aø1ui-$g4:3Xc7lj+9%(MsSrL슭$## APU_̑C@@T-e@y 1UH-eV@[018E,MFիaexĜ{ϕIsBTk7]—*~vM;xߺ7.a+;~͕L)c"e2o,QNQ/:T6'X֎~:U_;wU7k'.=ю?ϕ}Wek.W~f̑ӿ^PDXRRyJsꗬm9/$r]yf >@=booKX:HOm>2t }cE@s>ur2Yٝ.ۀklG]&[H<17K5D'üw=r[2ߌHekfE^q(rst}``K>R5TEz"_Z}/fZz-]z;=P- 8A&[la⟡#e ݲ|=FO9$0҄ xDZ(̃~g0@cҎ*BlR8KtdllOuj@35 ݠmqj\]XRΘOWM{Dn2!(,Q)Me8wЭا+擥3# ۚ %Ecc O&?h0&mǜzN?HWjiZ6yhF3:=tfOعer8eTYdNqndcedԾݬT] pep#MPJ oP6쭭 @+;uG1p/&O[$d}X܎vc32ɲ2S %2/?Bux 2h 5~rw[3Ϸ{{ڏU_n;oj<ʭ?FFEZc*iIBRyվ]<ҞPs}V{ȹmRe^3JP ce1p-a2I:g 8'')?RW NT=k{ej2ZG>yG }][AxzaU ?dehMrh!=e3W6ahKK_7kDk;2Yd>3811lO~RwќR2 kRW_PU N}mCpU-6&7TY)WvCH0y?2؇Fk)؂ Т`"R_Dfh,3qƴLzbkZ,me*o>28Fی\$藶5vۆe64灀@ZtUnC;BE7;4fqİa@IsD5mJ_}|ܥ(bl:K:_%aa "6tc5Y-u|ujcF_hE)Fqa_&mltl>l_cur_Bd:ƍܴ#DƱ'6ҁـ@) %b3_!y">=4 OhFfWK(7ohPcޗTB`Ih|BNpabbڤPe'?Y ĦcqvBKONb+*Kڪ+ ,ɲLD7ާ[7nU?.m{va  mSmb#=lf'Җ1HY>z|ȆƷdfң_s_pmZ]'/ӧ7uCE&B^+`yf-42lkbo)_'D`,"u0?s2Ihr> +k&:!sLOv_,$ H}u<)sNy=c[u |S;C&ے `fH11ۤ Tm,X..`օ4.z36(sMv!|]_\34p;=4 OhF/8t|SRHc[7ԡ2[2_n'7q6N#ydkiD-+.O1^N4~=(f{XoJw⮭Jj{tu(FU|'?,^d_%%Վ.l>d"Ӱg qW̷oi.j9%R|Vu 6f<сa1y썟繀PPᮇI: SYNN}kCU20_3O*m'~#|~3&eMTX\%O~rYݛɧv L 8O##LlV\7}E>JB/'(I@DY`ch7(kV Jx42 RU\91F˲:\:8u׷"8HN5[6mՙ+etq7[\e~MƆ|%t>y:I!\=M~*[0?`ЇÖ\<4>VJiEL7orK3:#io?ҟ 妟cB  0-YatI0cZK!vFaʝwoz>^YRP oT :;O+k/avDžT5mBx͞([kb@&ӫN2f[3Ll/>Y[}zɊ/D`L+N+KF Lom1=|JBx,XVdw񌽘D/ -)زNE^lOߍ})9G铹ؼ>bKbYQ2fae|j`CV q`җ"3}8S㶽 ;٧Ly@ZH섊}ڄk)sJ!c`C'cuƔ+xq>=WKӲxF3tS_0CJq. 2";g;f/KmFj CGc[BzDq3J@Ddmex j1& 90:u,@tIEz$β4v$lXds=NbKzMşzf_;x) drK}& 50.--L-[%8KovFF';ͷSOLu͍G @=QFvtc6}󱓹]RW[-y+:l[H[sCuA|i~`ؘNꚁH]Nd-lv/s0˰Әeb˛+씹%5JgfAW>xr7WślyYuEoxډZ[ 6~,D{M} (oOO_7?ιM;ۡ7.os 0N}dQ31I[V׾Ε_P)W{8RNɔ6s%|yrmeτ0\}jL6Oj,\Vml[?=&Yel/w<&3Q>)kH`Hؑ~3c\~r!O g9 g|N s6'H^w|nʮ\q:zV%t|?qxTcpK1o03}$1}2 TTu<#o\7sfDm1_ EkdlsMY1?tPyr?l}WjOW?߶_Їڇ>vu~=W?_P{jnhz7F ^ 2$x Aa'h'^;JmP&KS8رW)@D-{1m$."1tlR}Wч;FսXuOk.x#$|Q-0R?KI t30ڽsC;>*;鏥y|wt,0a^g s"تO1؆"/) IqnףL=M(m>?>5>>w%)ǟeg43NVVĴu3X=9;9q{l!7uO&'uÑV U=QM!4Z +>;^HQ__RWZ~ZA[\WWW2_=}Kh?}{ۮ׷{"E62*(f[}p||L9` FAƿmzo~Y kǽ2V\j~dM-lh-+W۪s巷7}xɶr Lğ:·iyG &Ф_~1L} $ϧ!9[Aȸ>}?PWl)p4!Ãޡ2*(Տ׵C-~ܵ|fʹ9lozƶ~Wo^A^U{Ei6ꮭOWY]=Gk_{ECrK sh.}s[#̥Rj!wsFv"Esxz19rA*8G 9jrn=W[k,1rܝP}}Lz8l똽9ΠmhǩJ(r^$x'=r[Tuk$ۿlYeooz=ٶ~m@YyFfZMâp"1^H=,iv"4:SH3"edԀ {}A]HR ~sw%ӫzc̯Y! 1Kup8t`U%XU>z/FоV^@Nn'k< #-䟽dYS@.m-S`~h![q/qUwg7dvK/mxu=7\;/n^";ưNd=N4eǣyOysS@-=JC]юS =W }xбd[d.흛?v`ΤQyssv3m5װbl& Br1Dт/=\>mדOe&T3/^`y.nWNeɿRrcy|Ǝi`R% b Z)?1Sڂ f#Yl6N,@ފkN1$Xl#m7rB}= }4pG&\ʽf:bhUp ~c;pؼ|kyW@lq[W?ݶb)ObGÙGę'_@trڗM{es!q~0!?m5^ůzkkK_k N8LβH_<1ig܈܅93dldˆ#T4͖-nky/DF:ttvfK.x` +oacNND7/۪LrnM\J'mt vOHcӁsoALP ݱ=Bi*qi} E4F[2>=j qu }j ̦E{~p&g|(M17i7߅uHsN0 X\[)AxV , N[c1Y@WG̓`H`u.P/@pT,\N0LA&.-v^ru2 U&e ͛<~vtg[~C~{X@sw?ֱOStz&OV>R!V?gG"~W}CC26g|Sw~k~@ l%_~|Ud)3?;Dڧ#y9fb˳u阑恱'Dqd?;22lQ7yӿ|ohzh~il)Ce' "E5Ɩ/bcR| vUj_~|{Ы/|l O]h0 d,Fd&rnLN(e ID?sg.eνZ'1g~Z,گF7ۺuÌf4;+n'?M<~ ?~y St7Յ<#cF2/}醞cP $  cRUh-[ nc{khu @Y-n Vi +oVg. ܏~WWE9+0 Namq^{t6wk]*)$tC`ν=A&6`CÖؔ8+<[,㘬Km n<.[MtP'; uj['!H?%e: rC݌GΧSC#zgHC8<㓱_ԏOk<II0LUM%FNr#q䅕vO(e yaqeنҿM&OhFNkB}h[v7[2/ %yPn"yUј0:V6d$`(E,s]Ȱ )Ir;^zQDO$U҃zoW?Qg[YDuqQ:Օ۱/b4x5$o+w+YY/]zm5+۾edc_{}U vJtaS^@Y (IDAT2P. {pٷ[_j튿|W}[Y ܗ[eه>h/i m|@_MEFM0ÇcF/ Ŏ C~#||66*=GTg9T2F3`ML"m Ԡ=S w@[e1ewCe~2z{l{=\ <C՞쎲hV{*g|kt<\Ӯ$^uT=U`$<^Wƃ @A 116 򩋽dcs<7K_L@c:mNsd)TA=vRuӚMN plss(΅l.,C}rcaǜmha+owV6Urc~%|'iZ:#_+r|T/:nx9 :v#j8fL Z!=3;CuiJqNd:b5-Ǹ*hK]f@d8E\1yS|[߽)›6VPy횷H?Rȅ KQTv誇=νtlc2nHk~o'k_e/vΪ _6ɴD:j7b3rHH{Pe?pT_U>Q;LMaֈ5d$ )b+2%3-[1Jolg3W1S.j/hb7 ]@Q;ݠZ4Olwq׶L}x5 _>f4anru@J$C"ÐPr mPd_=[rI } T"J%މWT*B QQ;gqbYOyYF0{*;wE{/*.`tḼxԊ΍ہgV95_2o`}A_׹GO l/EKwj@SSXPd#ʇthKzt{kokGn)puޓ2UV\nxg}8`@ ӂ)Xf/[٦ }@dn|ӪPM2!:2 =~NPyX֚e@\)i^$vFƝHlgv<"%4F5Ix^e;seƏ[.2`ڻLAWݽ6TD?>8Å Ʒ ~o21x6w |rab2:m" /zi#dLmwtEq32Kj1ϟXA([l2.t܋ԋ8c}=2og*fj^T4"ĀPs:|5R?2A dlȰODX#1䊡в^BSڡX~']\w'Ey9/}6a̸wGcnw`u~PJ؋\硫TLWڏLl?t:q'snӸnh|~FM&OhFNS]?-yQ&yoݷ 2ϓ,#Y s:d%6c!' "dxDjq%! &'"}(YEA+YGg)@Ƽסcvu7?.6G+YcbOE7#qT9\8٭ڊ+WVCշFV tKv{KOjG\X5Uf]嗿^?T`y7-}>5NH۝gr1qU)IWp1tZVX?XUv׶oRd] mo^D|CmҧJ\]]n,dC >b[s@6Pyb6# 8cexH@ 5O-uee53s,P?Bppm.t ^}\T{S<$@Z7[Iy.,.(]oS>U&#}zD}d1 :fs:u_:z6W=vj~) $d]!+x ;.vm&ƁFqQ-0oۖ<Үr|K ^2-/19PףxyX;؋'cK lLxT] WuSlحe63<]c_p^f:G~{7Cvp=5jԖUO/hީY[B~Xz}Ia6g- nHcc:}4 щؒ =P eo)q uhKQǙC}I-TOc_i`衿Т4YVB/~T_ij_=6aWy7y#Vď\fˈ,k]14wLGU8wn׍8duI K_"#Ή̮xD1n;;Y({i<ȉֿyUNt7ܼr>\8r}[  %#;1^@e V)c1Q*l+?yDn.8Z2/3c<-*_! z<\bK4IwsD}v;@"8*K@!Si_ʜב xtq:Psl xVN>Yc=-ʋ|A0?<ۯgΚwk^wWPT6>tiˆ0m}/>="HF=)ؼRy ɋ?NISksU"jNO|I.?G-VƐa ,YZ6mx@soKo&fhn+G瑅)EtƆ,k/lγ 洹ejy5>(ܭxkjk4s侧~*0rIwX駲1vbu=N8h Ϩhi<%6I) oܱh2!ph ('gb80h' fH'QЃk>-Tok튛G煮cxʖxCi_ 1u5Ȩ{垲`_iZ~}kmB`zpOd+wkz}>b>|wqMz/ δCTȅ i,:^)-=K~p_WpɌ^ }ɤ;$JocQj&SX$bMVD B*Ϲ%)u&ӤZ$ZC\ۯo_8-W(A-HGyIhS_5[HsC%z^uy A okt~u-ٵ ;<̆˸M&[dѐ>X\i8A+o]h^{Ga#8m0t elI[9g R_~:;>%|q/nkXLm[:%C_b-9TSF2YQ;49Μqy,f_ ؘGO=7}Cl?^[$C=5~{=fc606x]kWTb>\MلJ`+Aۯ{AdvLJF>y}tN`^zd1ÉKpP[#̓I{v6" OJx ,ޚUQolcRǑ;SʻxZI>hF3ܿmڧ'Zg*/MD:Hu|H7|i$_^ QE?SnzcBgb__N 6A?Q$9M5ˮkkg}^ 4_}m'ښM{۾'XH'0JX\ s+WIW LfVC]{}}펲5xS/LKfYaL IcK,>K6G,b_,ca`2%LKmx<s $pqE'htؠ1Ol,OCvOW9Bɲۗ 5a}O(/Osr-2_ -,k (fz SCqhR:ڐcc/Gw|u˜ny̻n9%[}-|p:_+$ٺɏ" ezcv`#ZaxGlcw$3T$^ˮ,`zF,^@2WLܷǂԿ @?doS,x]|s _FR}"FrwT#ҩ0Q \YR[<_;z|y;r5t I}Iڀ :W׼; HG{6OhD)-N%m~_'8{鲋 k]LOeG^"S>8΀)=(y YHlMսnuF3+343e%leleOT xפm  $HVEx, s M6g /Ty ^5W(w)U^fR ÐGN]v:/PȺvL:y볅 (P}mϖBZK|k5.vkݳ{-(cK0lxΟ1a+[qKqBX\^NgYHz˦ϕ觫vW9mE<}$ ??ȁ!ưzP;֖}?-B|KgL0G=]3+T2- %)[zB# VU%6Xe$$25@W9L2% u]0?Վ9\Gճ%DcRTQ& #y-N]Tgwڜ|@vt #wu2sLıU(OGaծ6LHMN}S@W!\?GvD> XvfTs@7d.Q6jpKzq0| isAP7f=]0Sm %G[262RV9[Ɯg#2RΩ?Xxҫ%/(N*y-^+73fF M>7z7Y<)Nncr<.#s yK@MpiB& "uPD@vk;,' ئ>l7)Yc-= i;6&yhf$;Eqب^G`kҭ\E7' .3 ʈd6gx<YSm ~PbRY9&+uEu4O:4i-x3ZM3ьNW !"% hd+؄+T#U.y#7zP}0{"mԏm(#PBD`ȶ#OhГ28 LVΖڋqLFǺ׍U' d ൿO ''\~5r>bu|bI-5qe'lUmխ;ovuև?~;M d[67l 4 l9? ܾC} r*~4% @Ì91>|Pyymo瘻P!}O,*%.kK۞gJYb!;1=D/X['&ȡ(=:eq|s =%qwOcf'ө[mO<]Էӭ/eR'ь ,`'7[FVwJ3:M)}ceR~{vFrӡ` pԯrZц)}t %gno h#_H+?ttE2:|*6&'!D emUC%;`~a7> 8V9>@"#RFql1t(2mјs>f3VG=I4ьftz `b, bxcmK0GF2>͘ɲ%[۰2/qc{U*#LSB>౐ճe>ti-|u >XFvcSZ`~N9]dӻvrثl!EYlޅQvUmgW=6&&;FGHK1E?>sml6D?-̮¥|X]rKV_YI_:p?<me[y)8Ŏz~P.bBf}0UTX`%ROVX\HO4g_ݨ\ٖ.uEN[gF/8K[^C'tic9,n];vH(~PƉsۉdPDm}{:EmiN9:]D6al's >I1a;xFixhF3:=ҟ*>n&j"Xvj629_LI}u (@jq+$(䴸ե"|.1._dʛ|II,PuC -{ V;vsoj}>RS6wfsܷ;#bO@0>-wn\}I;;%c O/*s~n2~,8(q[߯`֗7*%_aFi s|'knM+{ 6|n4 p-9Ǝ }lg2$s*pA0I唗 }r:ophn"ucij^X-Bf/1?Hn| xw8sl>/wAw{6~c>pˆٗftFK_c7lXIyڸic4ަJy C$ۗ:^`g-&ggZuPGD Uwqw@U‫KzQk @k^wkؐ}$u0 SqΓ/c)Cl B_ɱu% cd]wnw[yy=Qq'c)Andl;cLJ`c6|B[ s޸]{Kdvim'ǩӧ9456ϴ2.cG_}5>]swDͧgM>פ y +jOϭz7 i< q?q|_z}6{rҧJ] xv})`EJ?} S>f?6!sak) 88f“ rl/ieg6M&OhFЫKPr9'آz  /1CNtَy8v`;+b_1<s}1 pE@!y?Rodg܀qD~En@*+폁+9@BT)y^zoڻ_Fd[3;-dI"!f`(wt\ˏK^Pl<2ʀXYϴ P~@~ۘQ z@//FiG6;>%0FϺ5#n.[P;V>V)v e}5ȳ>b8F9ۗPEGB0xN/1i~1:aj-ˁ@aƎ?_1u\__2~J/)J:?Fߤ1w61`rϧ} 4= T_h -{ :ܩLc2FZoĒ L:L,3Y~׎}?=&WG>eUyC|l ^,wD_8H=u^ޙI4ьftz 7VM% 7ᅼ1ͱ ,>,*BꪇWMV;*k4&Z|AW@#.ؾr6[J#u0J=<US}io~|t'SEȊĮ#絝{7hV,RCU@˭@}3_csK)Ƀe-jl\m]D[yu D#b`,͇||l91y]l_n^35OlSv_8Cx8Po٩O@מuE绶 vUK{؆ƀMy&}&RX;ub L~o|0i7"r6O/x\?Ozl1zck2yrƱk9׼y E5>`u6cc{ID {P)cHRl׸K3Ƌ0@2=66 p=TP~K4ьftz .8znY6f7ix!冚w;- 1 b6PNX[[u?u"3TF-hHda 0 + _-ct)Dzp/_(km5 珵gV@%0݀\X:bk&kE;Кv왕ĖmYGg=7cKWgUG hm]R2c̝%3hoe?=nWꕯw<\-^|]\8L6} oc !8j/SImh{nF[gŒyym @~tfۋEƎM2ES}'OU@{3_\p]+cd=òVOҰV&vM_i˯?PLv0H&Bct8v1 ݄az^n~23^G |Npzn*q %ێC񘦕-;rͶ?=d ֔nẏo9{yFg$06rc=f_ LX@B.[QG`ϝ,N&Q?!sN`X6X#w"e\ 1 nC?n'ϮH/ bH2 Ȗ,ؗ5^;=Xd9 k 0 nҿ|뾶*+YpWHǖ+3Z&]d[?@@وW{}6fمgaCȧGf0|B='wuF6t1gl嵐u`'}46"f6]57kLl^Zl+g|uVz&*+cs[>ӯdg>Ư`ۖ"bG±d:^CCIS1T^01te<5p\\ymi'X ‚=צWVARv8_uֵ}WFdSY18L bZH+yTX߾Pdjj+[If1[[ mk/v]קݲ0!ʞ!zKonzD{Јg9y <[NDxmuGы e]\d 9bMdh;/ql4 Jql:fh; hK{6>nz0{9+5 /jLR?]}m$#?PPoJU︯<[s'ۺsolj.%}y,A>)ˇ|:u&UN$ę.l u`i2s%1ؽpjCP1*vdnŪal&؞{ 8g93etT֗ ]3/GsmƊr vI3΀e:GhBcې1V^7 ?QU[V23:#ia>-$XR񫡞~+ HsxDp;I+@Eba5- $%9ԧb5lJWEU৓uJGkaG2aZc:LHV @][ ^lvj fQ;lEaO#-i{Xo2Ňdk ]Ϧ Mtgn uՉM2zcu7̃Ceee8uM9.m>1r[N с ȫ:ח ݶ./㇫/YN.mW2 'P޲8%ByP`\9@u$6'O('sa[12MT>2ɘfY m9՜ƜBנo OK20eGrkcjШwM姹 P.j"!:g"`mMBN, }l29 sΣӴr_d?]7i|얕 Heƽ 嶧d1 "XW!iE%V;CI]NvO~ĞUenh:v2^0؜Wߝ8`*|ʩF LOp}6u"Lm0Y9Sn3!:JQv*c:l!g!}s>Mn cډ}zS.8,;."?#<\(Czs[+Gy}'"z:BwYA|hLzC49lc/[J@lQܯGBӲxF33&TY2W* '*ǁh,W / NQ;+iC1e ..@m2 u)u7T3:F6uښUe<@gX[|+4M.M>v>>*:4_x쯣soY:x,#~TlNfm:_*ckIKYNe+l;دLmj Gu6`N!Î':"˒=Ek=V'b~SFg-c؁{=E`]}!7s}|eZʕs;8-p jb J !b2k B*yUilKoGTu+|\ܘ/lQdJ jP% n:__г."/ ,~Ѯ)dm/uK{ol)@#RLG[P{rm{n.n:cm1?N92lYZ`( kmv{ۗ~eO~T/C=˘ԥÇ;_5tFTGK<0}$Uu.<\Hgd#!K)=lc?ӣ-_v ZDO@;J]mDd't u*??djمǙ Q^|,u]A]s^mǗ rb\e>ڑzw9P4(^FrGpf2'vc=9sHK{0'>zA3CU{5f}xLCzv!>Ѵl4ьftz5aqr4ü @)Mɗzl6_3*?֡:,N8Y2,o(~KUj 5Sx2K{Oֹ}zi[yޞlvhIY0d3rp'> _ٮm]tcmŻ3 U+=6G_nco`Cv9 ,}0}b&uk1F켬,;rT?=v`¹'v<O?T"Co6]زHl=' }Ib@nCή>Vŀ[ %LH~\qvD͏VTSG;xLA0.l(fiI[mey|~ld];Ηc/UrdӧI>KHuq]dwRDed l捾ho B1[D[OPlgb^Gl <69_yEbz֕w&lMr[^u ꫻tO(ߛhcr<ݨ N{maFcCR\;?̯Ӵr_d?>)薥/茤Y ;E9N8MH{'[г2c, ?QJ,[tJ_R,1A7lV1LgV{v\W^]Ddm돕0 aH[PmT`l:l}O>yv/g|~WbۻmL-&vg<? -й-DSחE=@>;Tg{|'{ߩ&ײO"GrbKJhNeܱ-s<;B844>|"e!ch?-E;]NQ/宕ؐ(M<F;m)DںsLFd|^}r.߬iX1eM{t4. ;EΘ M3ьN}p(Fl?ْ7A$^d4K$C$7m`A4rS͆):R XeHɱ@x)$t難lzs&1˱ FplN ~ѶCmBGWl9V/>T@])\]./\>мW:S 8"6l<'^@m_m_=5}NkJsOvOoW;oG_j~A5mxP&ؐү^~:tKsPa\r|O Īmϒ'k K1y谶@D%}VsV?px5xH!Ô~P"5ngTN7-J >q<]FyT\.!qWŁ:3:][H1[hsﳇ0D A~42fH:?>"m67|ZL}81}`]׎|PNP2u 2]{5.aJc_GbcFaAq S!ya2p&N14sƤ.9sʧ }s MlZFy!/e,<3fBnйIѢ9ƂB|*@U=EKH>>tjĖ X#R;e7SVPgv+Cb[~d U҇:lI Sץsף^/T!ok~]չ8kp뮽[kpLݶbd pEGuZ`@&!#8w`Uī ,lmOlϷ~^{{Lg{6ܳxU9?攫qM}M뾳zrks0 `xLUsN{GAj{j(Nhwʼ'hR%H1_<'BvTC0Vq@¹vz5c"\HC׏`lWdk@s s!~Dԇ#>}%Hk{m+ {Y=AP e&l˓'5y2k# h,yFef4Cgh+ 8d d R˶0UN}I=#K6kG 1Y]Up9&"Cq@UL[2` kYPZ,C-;UO;򿲯i՗eX}a;LE裫ڣ.o.ZYZ[f(E9@vgmm|Irg)L1@_ƚ^=cykMQkk\=ao}Wg-:2顣kx[e$SX`6y{ s:S2e^ԯI 8HxrBs1(tsŻ~>x Ot}۪7f3nuaEc00f]d {;([cM9D5|l?,2HcPJe@N{0Dr4leΔ-i) E[Hd?>U3wzVyegt&,| `0携 9ّS@-pY5Vv ƶY@ghp#p$㕏2"aLbat#T_3^W]".c}_#zٻeb/(6/Y enoo{ۍ+*bg=gǗ+*kx"V6 W`cK6O2 OU +SNҶg+^>,/}=!1? S9NqhxFef4C&0pqHæ0I*&ۀ^t 0 '3Sf OvN }t%ՃevyG{\b6U7;5hl.,h O2Ё]k 6~ۇCWu_W^W<^Onؾj=Rsۯ/[ 2~k1/:dd_ZĎ] R;ZRDx'Hvtu}o/eWv>g^Ҷc _]*'R/6'槀Jر::uLڵh&S>V_[+3y5 I/o>XȏtǿӭPqSLôm{=u~!ﺌ\Z/YP ] 7.)W4|DAqnO/NN_iO =D=q x7C:õG| ɼ΃P2~ ]j0 \8}9)uE+0&F~O3B4ьftz ҟEX7c 2ÉɌ-d +K%zOuSMA$%'_!,᠊Ji$xg8hZ@*8C;j/.PݮxO_G|?~}oU]%Sug媳6hg/.ZdhGRι湶mUϭU;vͻnk޿=Д^~hMkvvVtF`avEr=wi9S)OXhl[| j-=p;b?(~ozeWזhy||{G>~%ҳ 5` f&vNCStlcW6\n:/nl~}}eJٮ~e>p5{s׳`:xr)VE5ߗ.j%Bg겯*GU7WmW %ՉaJCAb[Wʊ8dz!ecK]K}_{qV 2:9CYeDO0ū%J7,uCö lUB%mWGE'tu>![q2D_Fo(6,S#%__[^}oFg$;m܌$:iRJp f/[8ё|2Hʩ2 =# Tl"b\a XSoE@|kYFJFfjSUmw-+0vGY?~e]3>Ү_mhG۶vi{z=c'%B;1Y^E![[i.\w͗,J8 k͏+(~}1d}:{ >wݖ۶|e~u?_]Ne;ݾ,IK,5~3/:UeXxxzo#_y@9O|hk/O椭O@5UN}2>wݱO\M.\ceme~ɥ9vj\NQǐ6?t+eg Ic5l\ƶw=Edh}ƝQC㐯cpHs`z=P {PCXG}=t<_dд4-e;9dj-F{#&ǟ-^ fej5`S|em@}kO+CN0յcW{\Ӟ^=¶vvͅk_g/(j5½mU[ֵ+h2>~VvxvxqqXۗnc킳HEA;_yﺭwSmy{7on?n_V岳OU=uj\[WO̅/,dv}e9ozhG ρz<ovz,Oa .2^_V)KªWl:`lh5֜;dM3 Ϩ9OmLWtvtE5d*;L nd=7˟cʀxZ?ézbP2WzԷlK+l RKN_!?I %Gr# %֎uW \.Au;T_.@BRҧX:Mȕk6${Xi\l3ƪKŞlClQv) Ԥo*s61֖-:FS%+T}|kIvZFy!,<3fBnx|v (!ATz 9M0r}! 2m狘&`oQʜK:@`h;@rRZ"{ ̳rqQ< 0] ^e0-mnԳR!*k*3, rz_h8>>ҮxWbqxk#)K=g]woinuYҎ7ٵ=g}a.^(B#IJ>,^oie5B|%@AMv]XmK~>!,g.Trdw~PGej-~\@1T%cC/XfTy8Lɤy[sBFnbc}V6 /\'%|d갵%:Ί0vkUbv\>*F]C&x me9O&t#tM8K0_Apdd@jk,c`Dp8Oi|vSL[f!MPڏef4CK~g i=mݘm}Ʋ*GW&Rي"4yɜ)A@N#:%n%Rƾ)ijR1 sTH@O6ھ{j~n&O(s*s5?rG{_ltg{ڪ7kϬ,tOmv`s'ja۵vY~]s sͭXގ[Nki_|5,n׬hsKVkw:X~z+P4c{@!h>2T|Ⱥ8oY+ fzmn{6[N({=+P}aɽŀ%?YlKST I=ھK9W`uu0c{VϮ+jy8^.}$#ܿWrˌ @@6[6tȠ'8&S[(NTGXa<#mm%C_bގmT*^T urIbt>ot#bpA&3e#9? 5CCNr|)gxr_9f k6!+sl3.}12p䄴u'I1}+IyhVv*z5u${T=-2camegJ;a~G^ۀWW_rc@/ݔ݈?nny;N󂉭@dzX| .LJ[l S"?qǿ`,^p^K 3&ʨѩ6l϶Cu㾱޳=_t9XcmŪm=|qlٲvmҞr뺖.=8B: OOV7Pz\~=~vp}}:u G˛@o(ya@gх`'~|Ɖ6i3>s9v8/J׮&ć Qe q# 8u"l)F menvS/Gu|ܗl9V="rR g-S6[rl 9&O{,Mt"[ieWS;K{4r}4cgJ; o^@Q_Cxsg VGiԳ/NĂZ,VGxC[^C#mKs~6) H;d16cXZkòz} ?d}a/?\ݵ@}@[:ˀ>Vҹ{2;;ePKm'uXڞO*o4dWkk6ЁU5flC' ]BcrB[`@mK>RWmcWȱr!Գe>/>D_˷ˊ/,GT%&?}uGLI|&w ud#xTG! \㛅uΒY#;m!I EG-46N"w>0hRO}8oRv_'|yWv8Z_hf[.hF_K{̕o7}3G(7l_ %@ Vva ؾ;rO@҆Ro%KU ;LbE@-18s`E~s'搉H @-k80|-mJ4_ieZa8=ﺲ~-O_`@4o8lv >n~i_.@׶'nm{NbތaM1ѹ'G_umX]vƧj M^v==tۺmu0?$|.)Ьذ(6V8q\>YOcnH[e!hkKֹ?͎МCc@SFy"3J=:G?sU=?:}t9^v |不n|+Qw*1S6ou{e``fsl4)1NpKnAM1s u uũscRZe|n{&} eM[-ܻ=wvJ/,~P;܎uvrŕU/p[֟=P"n3fX]<λn龶l ->S`MW I7Y֥ /WWk7oeKualjdZNnfx ˴1na_ q:*P4ƱlH)yl._>YrLqeuͥL_=\e?ٱ!5g=я;ڧ;ۭe }7?YB@AK>uyndu1 䈝(T:WGYGɉ2p~"5U,Y;mBx˾l ^ }04~;m97cGmtWYg?p (A4$fM lHs I'`eևi(![}[=@&zMڷ^v;j[`Gښv7Tj-QN{-[?x"ü%&:}zqS[ޛzur?o>=c+e-ݰ&ZwU[:mM@M:~rzvk^wWktmEvXFA :wLC[o0KחAV/KHG.,EV+p2ZnYul.[n9k.JɌb?tԑyxՀ̜C闶ٷ_lQYnƶLc&vaV3F!+NkE5rG߾<}"at[e&uNJh h#8e8^@lq){87x=r|C@?I@@}lSwc/!2*Jii<a)rD:ljnn.ler q~Qm,.d{r6TYY;*dsLvȕe4xE/C,0쒸dI@2Upne%`; o~zx@΁xn;vdےvtk=0,- >@͗Zf=Yg]6%09oMqeWOmXv;=qd[ʞmGʢ|G{ϕmoŇڹm7.j/L|r]qӽhɭ}?W xU¿c]xQP}_k>QP@O1uc-crZ^Cu8WyBbs0ڊu|b~1LMd>1Jز*4YĥOr00ftbDQմ?# G-<([}a̵=Ƹ\˞K cRk[rӮ WH\(uwCcE+˩˪#< glwNu _ۢꘝ{{܎2{?`qTF6w/jOya(&>b;od~!BPcWͿZA)i|/N VΩZu]sA><>רml>fBU:i'.@%#f]1p[a2*:G}<"9-->:l  ';OŮ1+c=Ee\>|9>siZ6yhF3:=tgQ,}YQ¾`(dƛ5JRFIݘwUSfs e vpxfɲ'yOYoy]|Wמh7Ue?a ,˨K+-go/L2XԳ ޓ[?[\rslot[KKQR-a>f~Q;n?ۍzS[}p1<2y6^k/]V=/>V-;.hn'V-uۥˏw? 2l/ims7/%?ԮY{o[{^s.(_Vm7-癿}}VNE6p>hk+9qKF5pdV3G%x9Z'%T0)kMg:`cgzul rV疝YN>\sfs1k ozcuOG1i ,RCU瞸qڣD?}e=8,>Uou=LC嬾, 3C嶗 ~)"Ζ.|J`eƍ݉|9_-+g_m@跍[ _O|iv%xC[%ĤXD>ŎqM#e ,+1>PW!'LR8G c7spVrHP&y4|ZYWHd]xe[egtFK"`Ep~H;9aLPm^E5{ `!TT8"4łS2SY|塶eS}B @-xhv@Tg=νvEkז (hWvŪ [?Y*T,> XB?Ў'?VG{JlL۫㾖w$=Y:z 'X=G?Ѯ;totk6|{nٵh[@ydE;hY;چ{J#ڱGVh.KV+k޽cߟ~ݱ.SK4N|H{~vdt1DU=[IrHBc1"c!+WSG󿭧iy!ˮ`I3-sO ,J F見r o(1 [j+[|" xCwo!p ȡ/Mbm== @^wWI}Rk6ho\Uw?XKL2XUk kᑧ,7z(Yһ.vg{ڒOWK xg/eksbv]/Zv/;=g_(|ho?>~?o߿U6*4E.z|{=%5N< J]$g!uN!68_R~w}d%B2O P Te9X+aYl}(t<3~yL;k&B=9:: !mTv^\]0^u1]) yB.8` aMR0W~ WݵQvxhؐ ,gUg)Z^/-6,EGLca|pvl"]4,aNr{_Q (\WVπDhBT]΃Uaquil?u/c(RNq_C E.My= )^ >M=EN [vHa>-䦉sr#M|νR"O08,uH.:US!^8*WOh;-o^T7j2~9gFe X~kz$}A&&|L_<MTW&6"BчmLOCoh;sI`dM1iPh*%6!ml,~cé@# wD 4ٔk(L><,d3 yۦ~ .qא waOaG <ΚwR?>ÜHtQ4dȹ6#=Sz<zuYQ9g\8u_)Mk|,ũSYC6*ع{/l;vln؎^^Z!-0pȑcHk٫ Y2K^d0ifE0w-Qy.8wdeiu@%"m7 O)@_%jL:XFk_Z͏@Q6"f6*#gViG_) -%KcAraXˏyu{/o#UБc~meB̍.\f:s mRɏ|.?*?Hxpŷ2ᖫtjq5˔Ǝ *ۙPZT|aꋅ~a9elW_`[2GSgZ7 ѕ@}<.3.snb˱dae=ѧs0cFӲЖ/Xq-jW=г}nm×YwVx,sy~#w625X6UƘd2@4:t`U`u++|ݗ9mӭvk+s$~EHu>ukڝ톂t` 8b'-ҧz[k_*xys$p/]:x};yͩSddožeL$OIdV^rމƊOOC2q8c lG6^TN,`uoBh.&PSd+G1rwSDQ9Q@&@b ZA 4S!  Ǎokh܁ Kg_r}m7l?E ,#=>|YaQvߪ2`Qfrа> PœuɗuPxE[K7:0-^^%Dڗ{L_ yC݋:{{ķr撝kjY{bMV& 'ĎMTMՃȺm v@m'l_;2±!< Ccr EUя[t`U`:ȵ˼b@| d Dǖ؇\cۣsՏ1$7Nve] &JG``I;C) Y]Έd13|8W%4"Ūc,195Z~ $$2A#m?N"/뿂ȎG?v8-ftde4GF#n,X.#pFȏרgd@/d{*N6 kGWVKtkj5 MIlfX8`c;3رoNyBoMNl'N9us;> xfF`ɒK @hB#jj]UۚPjյw V޽!m=$nN+9ȒhE`yF9J^hQáE"/k.=2¼Csw3vs z8'qhq@y;V˟Qs|'Vcn[ TJ-"fzO**'گj?s{^?g~v_~^W^`<̟uX ,[v^Bks; ]%o };uOlWofuL=;nREE}c}ګ)Rx8αkڶӕ@9kgI6a\QFK~Q E~(;8Ϻ@&bPlj:u䥞ug8Mؚ>fq?Bڎa)[$g>/ 9Ey6-&/%-iIWףL8,"sYD*$[oNLY㫼NA&P/oj//-WN=]?ϭ}^u[;Ul~Oo}/s_Zۭ~X(IŚ~J"ԊfNTe}c?ߧ|ǽ'϶KzbgJ 0-00x˧ p<{H,\?h0t7l?y{}/&Cd5o}o%і.0K&-`M\=BR# /+A9.*Ug}<NΞR5^f%wl7m"cYJO2bW:Pʒ6 MȏaYf񱁼Bu8_ 82ckz,~c+~vfs1Fwp'vǜڐ-0zqXWFa!r msԓ7HPyOZ񒖴CO :o眆6hPr\8pM4w rf8la>(NTݫ{]I";2p΀WU/|.'zps6C9kRhjĖ1~>.ZٶߏȰ=aG@`q);ʢ1"6b(&;}ՅEWSS뮇:63&&P OMYR֗8Qb,;T&zW) e,][Yd , '4OhT},rzt]emdN @ޚ.'\dLF"6bS@FڻX<@k1ž-ƯLe}e^S̘0ל3v6]D1Ei 3J &$3քusS @N,o)n :_W'NXS=Efյn|0"o䥟CE%-!|u7n4Tw,ӱ}nKӦ(>@V@`1|m)Ñr#?l&EaE]_46pp`^&[|XQcR ~O()~]1e+v.( Z[ :+\<6vOlc$}2$ ̎Ȇ.mvsM +_<Da is)̗1o{䍴(СEx/iIK:8rFI/i7y)!MHɛAJ5O \f}4up~'`w3v̻wS|K;{JqwO~M2RDc\`y׵E耊?Ub?ڮwF { pG8c*B@ ,`U^@gyg`a*@7]'.Z&obE-^mӝ:==ґ ETpbmG#cd#-a*3@\9vOﴏQ,y"6Xa~@92B 57=uEЁ=Z񒖴C觱EwyHϴr@Ҝk/ 9IyQǛ~1ʪ_;8DrMt\`F߼qnnv1>|SOT.g _[\>~Ɵ(Ty|أ%p< : #.l֞m9#k8_Mg_Юv|f5n;Iv+߃C`LS'kWz}U8#)8\]:l_}M291pt0)GֱY lKŏgj;-O S-n>^e"=]J:#swݵ8TWC%3o ?Iɦ7찐teCsI_}W>.Uc5 .@]WeQ e^ "_X~{I$~k^^~|svЁrFy玱s7Ryۥΐ*F9;ʵUeA*;/K@?4=7J ?P|~-SOm>B&rm `>L-X-T\v QfuPl%zM0f?im WotB[zO[T!g^27%u2ɧm Q_|=ybH 6rqto-$ <@0uBNrLN82#2cǹf8(i~44T">:a4Ǯyze-Gq`kZs 21'Ӯ20KPl<"r Ik3u yO%sD?Hs<6yn<(СEE%-A0׵O_^#\mo}_|[ۿ|qu/8]0y((s"99+7D(SHT USvmՆ=%IxUXdU(y){qO*$G rYiI[Qr9'3vS1,r|t  9dAXjW+ˋ ظ,M/5KB돬Y96V϶ 6Vc"{g%C 2̇]RીAcc:6h>;[H_TX޵[9pL?}']0}m0d2>y7T0ӗ,+}و\}S@,$ԟ:-a~Xӱ_'AӲhs16:O|0ify.,x?YA?$,4ϧHyceU?w K"̿R7Ey~>0/鐤{tӭlO>^.O7}\;;cq IR䌜vS2&O®}>g"M6<;NZ TTB-"70_+5NeϯC]`nD:!.fx{YY=> ,\$Y\dX]$nu|J" H61ؖ@18O9k˃OXaY'1ǭO ;ۜO~NC* y&ٽ!1Dq}:#R 4 I8ϱ:z(o$zx}{U]u_N)J/-.-W~&,!O/ʳ*(ežtWb,v ]O,;a0Jz0:rH)]GԼȚnP^;$A,WRny0rW;活#7k.vNk?s1w&!|zU-G[),), 'OZ{~Wrp- yjU\]V{.G_z$= \dȺYtX[(.,uv XOnN-|_WXg﻾ .{&c0QBdpk__=\r;2PckysXq>I?Dz+d cHyi&&-uޗ5 [/( %;<[=O'c:EP t΢у3!}3d2Go$q'} +"ߨ3RgZao?6”kXf,eex-p0DjQ:"a7R'HS PÀsy!xFmc4?1i>| 7}+GKZ76$z^"9#vg~tGLnnnqvI7ler~e ) Md%Ja;}bcC64~ #p9rvxۻ{uU=,3?ShϪ6oO~J07 8o+@sZ{iyy9ۗڃNW-]ۂpzyseOWwV?k۞m D ZU7;`k?ml׾Ɏlu~QnHhz q ƕU]9Ucl@\WΖl>¢߀s@9>X;C=\{_|/RB>+]~aMB3h)k]orA)[V xTbOmZ[_Ϳ~~a򗴤C `~ lL-p'8PWKn#9wCeĹ.̹= rt///*p֜4.9Y@Ñ'lxӯ-LqU{0zrr&LەGKpI?ɯ)awϯSOj׬o;^?AOoXXco^y]߻%~fk; ( H;џXnߞzՇh< ӡdښ:7zWN.7z:k\|[Z1ڪ{f*k*ؓkh&j1"sO 4.B:cm7|ywO\ S.6Xv\ )mE`4m]"dyHP1tRqҹW[( p@٣Z4=T%c=~3x)&GG[|mӦȎ0X*Z8dE]&|1wQ|} RSBĘa?}u{ #rEƩ i/qq;h8^ďN/ }{%}cA̿S/W~_Xo~fe ƛ6F&́'J;9 Dr< &"OGZ@<35,{7a>HbM&(I];>! \מ{usgi7;zYF5g3܁.)R,E}\}~m@?jޣ^7ac_ÇP|'B6|cMl$aT6ӎvׯc{p[V4+/倳TDZ>@Ɔ&`9Scɤ }K#&G"gbUAlV/ņdKsףkܚ׀ɾGNqǞQk,OX&7qlhQMzQ=ikbw<)[(R7~I`;OQ^(}&Ex>_/b>GM?ym_Ғ1Zַu_.'7{7lxϔ'ԍ<4Г 8~&T9vΓH"`M_/8s D–ڰV̓o YdT}`gщ+YC_yY<5r!\)2*P<™l(l Q`taDnQS ʗH}W7|Pg>SO8?r{۳gu۾m}qڶ=>z_;MG~_޴u3W@ibRGވD̋ eG 5?Xb!?]cMvn^(oAV_"Rkb6U{kM @ʘ0O*,^R 9ʍS3@:8visVߨ~;>^>`3O{ߦQ+|ܺէe r1P-R~о}c?;Mà[ZSHpoӛ7ڱ>_*D{Vwz}Pnnh])8&ʉ#"0a>L^''ʷC]}) /jyys;7=ķ/W[J!ceX6`b.jG*G:o9gc~C$~Uq^ؖQ*j \~w׽6&@1p+λ8;UF,, L%k0Fi2?t7vV-lN{p?bԗHc}q"7/9:+ yd3kO7fKX<42W vszlk >~tLT ]xA؅ew;Q؄ToScMr KNxfzk Wř/1,2 s\a;:ݏrItl,Tc@.y$=T[p8OH@T:Fql3Ct{@3s)5z Rg;4iQ4y4:=ZҒ Cn{аq\ ,(9zhgXǪM$Ƒ]Z}\.9ek XoשnDr $Ҝ(cnB}|"%S=MJN#"$eͧc:ĦeuGUbǫw)_ztJ;+ Hhl\ =sd7f'E} dV%Hޤ~$O,19slJ}Pɕl;r2i<N[4R'cߠhoe}~{XyH6'gPu'L)vL+?R8a4?csIu_Zt*fq{U"p"ΎdRu>^,>ʞ֤zPZC&o~Ȝw=CQ&6e#(h11-pd}=̧|hɟo~׉{ph ?Րrá{<99imqqS9z=HGڸg_M;--ojs+2rz D9|'LJJs1۾ v'y{ێ &Ɠ-os`YH.]xI_=3-nv׭ ;.GAX wm嗵8튣U.u>@Y/)&L&66X]'6>EMZH6Y=aWK@{`d_9MZyhJ/]1];)p) aӤ5QrL"cε1]=WƐ-]-(F7SЅ1Թo(t g֡b@gN#13L/tŪY$?(.V5#*_iT'7~c_.l)xN ڢ`ibP#?ZʢFZM^KZҒ~^-y>r fRntW@ ֔Nhz^FǾH{7E}"oQ|wvi{vu[ۇi<{[ko:q4cAdy޲ ?\G7@\WAHQ }=PÙ;onG].wDh맴/T;|ڶr0aoa`G;,+{Ymy[#>Vןwo[5e T d #Pdގ?m;n{n9xx5λJ5_}sZVk}kli㼶q ,J_`1]nX0% yxqlIya&Q6&?@X:VLP}غeOc~i ȱ'A$2Ɣre8 e94̞::y1vJ}f1DM-!;_Kuu[:={z5 -Z-r ^@*se^r,MT~C'pc0bd\gn9ņh< фR8{|]cua;sklyS>.c0b4bL{k+!Qgm컌ÄIxK0CgsFhX `Ě}=#7=l6EEh;ea>M{vB(عV4T2Kns8Gt/<9oX>Uv͍t|"td̝7m'5,1%:Dgdx"?_ Mem~%.c0ξf-H dO46L(_׽ENB KL)v2DFS?:@Y1ٝd:Z)^Xn"^56zQ Z11_zdੈDYXR go=eIV%츃tg<fdZFt)ݕc z"F{ ġ{{X%-!zuP"5D WN9""㊃q^h/\'}M}on^U,ۂ|?h`t`S _+sͺgtV@"@Z`x%Ö@/3=[۷VJs׆ ^`)mZh+)XGtAu mv|Ӧ{i7y} DR(P]U;"ӟe1@̱saM)K0}g>)fY{3`'A?Oў޸>l(2x 9//ys,;":ϸ>f^Yt ep3\1Ȣ v:SpP1?dNji&j@#TǀJփ1u F(2gg 3ƦR3CvÀfƜqtHN29F8?3 cOiY=/iIK:8ޒG~aʖ b㝤ޗ@g 0 ]P̄}Sp-'Wso>nhoXp_|E;K_[1OQ4ɖՑ4~7[7ckj8{?[2 ]v}g >Wn̙UOm7 >c 8qVߺo7Ws i<_[-Czxs۾k;o^892߽km[^ږn~L;JoYwJ ߬GojW~E+@O+>k{[uQlA0ws'wvZ5p{Zv^S:([Sڦ;OnP rvs@0~,'@9ZGiP8SѾoh{ mgo>`X;c-h_#DZǻj-ouH-{c$OB C6#XqN*9f䁅g"Q} 8*6ڱˬ^5^%@f7BqDOzщ2(ՐUåR`uS5^ ח, Uz3lOzUV,"5+6\&hj| ZA'o)mzL~u<{_ ƸƜ-WR%ЭCLNdhC6ֱJ*~##eisryZw z$udKƿݵ۷!_ܒC[2 K 7E<4Edi'T X$z4#,/;F]?HuqSv̽?~MV+nzD{EqwKS:gmӺJ}tPX}D DweQge7Оv =Oy+db!zwWH=cw;[:w)oQq0fЗru͝<[ޅ4Au|ƷkY#x!x#3p䇕7aO٭ljjg g[wUVy(iK$yV!rt)q|̮ᵞa|Тo+fL`<-yҪ̚iMb\RG:Q~2vؤz`~W.֜a帓 J1"y2C}lRqFd6Qf,C-iQ4y/iIK:8t^]n拘g;GB1H3K"U'Q4 )8ٶW3ˇG/}j>`ܢcnٶEWZo?_f?߶~Avk7\ܹg%d X}wmGKN [3V [\veiۻUW_>rGioG__?mWQ^Vak˚kNsb8_h6GB 叕{ F|؂ ,xF? Mŗk'i?Ink`cAlL'V8.[ۮY}[ԶYoZOt`}q~ MtH_2dҲؔn3kG;m̶i{*"2<ӱjp_GrL:¾X4G_ h!%[{vO^g^.}:0Cdӧʼn2cq6& 4k6w [+<:y toرMX=͋ywda[;GᄧbՑ7/%E񒖴COЫ+`$nnqI9)<5=|O0GZiJoKO9D'xA'F0)3lo(`;3;_KoXDuq.bi*9zv^sXQ'UG?p4H=4@| qM#7sO.D u۱o:Mz1IZ Tf"McV+x߻kWynOPmor9ԓ7E,Ț7,\#q\}U[IbI'9:hR20 \cگ+}Lۛǯ)_%lKgugd1tȩ70mΥ*3vdw$\4 oFY ) gK; K3rQT:> ?iƖ/Ңh"^Ғtp}goIG/{]Wxvi_ڇJN 䰋sK>.nll^uˎ\ .;c?+Yޞq5]]OmZ{l۷(6_O)=gs;۞RkQ #" 0;6!8A n3W.6aL?_}?G[OsseA/v^YG[緿me<|N~HIuF4~ ,89}dQC87P7n҇}ي [-~Myo+VAf)A>N PO+ ]@W>iӄ57/6>vnkvW;)׷zG#5Չ-TW[L(QZ/,=W'ed]н^j7;જ̇  c3e2C&Ŋ{_6&̀&rnxnM\):w|})cs. ixZw z$udپsy֏-0/rAܔ1AsБ]O?L=Y`_v".!zg5+.BPx>Ⱥ1Aog%BD#!ˆ<5* YoG _+Y*^#h>3&9]QW@à wsS`yl%!W<3J1-6ĝ^]J?f`em\7\wAB"@z˷CSUB ysg7T+ydM=֩_2_|~ݹvl{W%2I@$u V痠؅^wH fi+b},UFѱG s}kθըt|J`'v$(*>o}9}m͆{io j7W'C;c5Ft#Z0&Af#NUq]lH."XQ& 9?=CgCكLOT/0FM]3>ڣx>u:16Cx6hh}ȧWߑ?tB ^á9P#74<嘒*Js|T*?law츥@붣׵]y=W@SjK߾ S:?Qe?^EY7xv+/j}ы=_}KU^ny~cr&ݻ/p ,n߶m븶s ˉ~?َ|Ǟ#={;ה`1R0 }nU Xff/M4/*9}5Q0:C5`r2bedcgiR+ONt~4gI>Gka ^~^(H`) xg8vu)ّt֜қ90wy.Uk)tYYO}P=-JC6֢mn:m,*z bkxށtXє!BI {{,lJNƏoJ!y2I'u 'vi.`/f'Z ZM^hۣ%}5ww}wn0ۜr^t6 e#HvGq>G'9?ϼqo]0ekhHhqqQ|Eg?nQb?mllyA+{qg^qQCm*mk hq|<r^cuŢ_Zvn[0{GGS `Ӟ-W؞i>kpq ?}9*ec ̭{wKiGV56~-w4ʗ5]9(b"yPҷd?bKh X 3&~ Թ ~2Cr2ֲ;U.h7|Tg1ClA >ydG/Ȁj\}+j*?Cl=Iw.T1Zq"U`n Ю9 \E=(k|R4ջb$Qye\ڛSMuPcbg[}2b<ݺؾp@9wxxe(J1ʐaOмoLu!KZҒ WlM{;>ݬk0`ɉc b9kݼ9heE"K@{i^'vM9U-9x 9@ȅgƷKC_(a(<ܣ6L{@fmFHvn[% Ja+Տ4DD0VNzMc.IwV-?\oT'oG-D܏;! PX/ (%pviKGv]߷{/jڦܶ}۾+K)Пdt.2o.Jކ (1p[񋊟U^ׄp:Ƿ[xv]eVΨj{\۶=I%Զܝm3>qugІذ"yt ~`oQO}y/ўs_Ȳ=xy͙+iyJv=5k\l6-c=n_[s}hwБ. ¦nSv;'`.1.xi10>kkNmӯl笹;-Ul6$c'g5vk֧-HEe2V6U,Sguv(]YD9(Q:4Ukdc3'vSeosu kxu5bv;7[y5!zΞyeQ短tQnǐ$`LX[lJ'W> s=laN_Ǔ:EUQޛ͙\"laRnvwѲ?AP:m3\ڪC1a.Y{K,MBX}7:'SY$ƀde(RMEN҇CF$/8=4_,_+Cps\0C[븎n;TXbCOgo( 緕#R[' œۖϟyZIINF"_Ca gk^«3ν-S'vC'fԹŢ^%'z.lw€T#؟9Ǟ}lPv햕7:7#A̶͹{>ږ2zr;ݯlGw؟mۘ~\D k}ʨ!>qCl):eHE6{#կq-aDN*Cua@E)ϫ?ϻt'*`vdH3)Ft}imys=u]Kj@t?җހrO-ΡUdXy8`S2V5\:PR8$BaDQ kC5g^Kɐ7sipjI𒖴Bp= [{Vߖ2 $WS|ᲣMw3^!fN+et|:OGghOH`BF@*M *)Y"5>`Nfח)+#s}e/oGeDWWTl͕I֝|mB__Y6%?WU'<['YOGN金Y+oámOH(L?OdpYlQW4##"}i ߑO4oiCr@CϘBK4}ͷl1<7>? tHG_)?7cy&;_ d b3:IOӶ}vwwimӧNo;?W>#g7 N 1 `|MzuW5=ͫNkNcs 5vN9<2D:3AZ՟6~c21T:Ͼ>JE?,.J U`N }>3vz:}gNmn/2~@6'hWvJ3nk0$o׾ZN}˾cF]xzFVmߞ`P:c_aUu߾}l"C*פ_uؕօy9{.Gh ա^F۴bWmW-}UǐeOkesT6E11TlU|Cq}ﺡ9:yvic8J]ؽ&Ru7\k"`#J֥+CwC5y9Lq1e Ww {ixŀt\9#e-&[0HIG9(cDt12RR,h!O/0/ФF<r"q $9׎D&<H1'Ύr|_t>Q}V~vsI{o؛;,D30?k,N).$IM]cq\DbLrF~|46磮K{0PHpd5D˜A~8sf3g1>Z1R"K1>"hvl)mf`JաKa.h7~Ԯ{iLx*3;nƵމ<틴:hX?>/iIK:(tF^D|<H9,SsCkI9">`NRN, r 訫\0L* $h`d ʙz |v|vĚ]m]5?|`M{aU][k>xB﷏i?tRy9 _>mUO۸D˜ .ƧL=ҧɏw2wʝjcHD.!W@WԎ8v5U\@Hy FT鴘Mo>[TY>qO>ؐټSɧ1{cշr:AeRt@u#.#K:4ia4F{{u90@œȢ?'g!E=@D`W:ݲ~e5fyH9Fܼ|˙%'G9DD~/m9:HhȰcvHY]h+Eu:=yy#M5b'K=x@TYTu(3ztP_~'yov"[+t::>eڄN)'{ѻ1EpgcF듅 O6tıKBEC!(jUSL޿ɀDZ_ 4>^% >t`{Dqx7dtrU2vj] vulUw4L{Nq dªt%'%Rrhjd#Udp˾~HMY1,Hփ+HL:hV)2rI<<^ҒtPq`48EAxF'8e9p5P } (0'T";CV&**<|Ss#H_\QpqɧoUuiܾ8emY|4olΣ́1<aH?U~}2d~!14c8u Y cI?4>DW<2@֮>Ql$v0X"dQ {dN6cy90: Vu@ Q&o51;[+@s~4zOx;O> ˦̒ [e5ظIlr{؅Bտi+]QTT,ɸ+}غ 0.EW;%ck'd (m'=;HKi3: ~?^ҒtP0ɏ0(@xe+gb`e{Uœr(E|Gs|'քr[KߨW$UX_+],rl8mZ,VbN<3Qf}/ 0m `㸸 \DP9}E226con|m+_t1>ybW_R\lxYՃs {Ɓ\Vj f['E}bW؏ʀLk3>s`e;Ʈ]ա5ba+z{vJY`U>YE$YUmB}.S' \tKK@A.fbi/WĝT|f3_hy5o[!6rPfR)?L=(:ay4.`)S+[}}EWBC҈^.< 9v"3zBugualT6+6A.ep_2pT54/yZ NDӱJ_dN;Hzbghέ0\{.b͜MaIn?;_RҦ=$3׻zLj_.3_yC}lݗч5̓Mi57Ǜ t6hL93@QiΒ*ZM^KZҒ =A0ssExc_֩y8xgωpLR\H<pdslgUےe?'G BHy"ˀ:sL&"_,"}C!n?~ɿўD9m}\qdOGkqN袼>^!REEEŁ{z87݀KD'2Wg'/+1/2o"=kR|}#"ѧQMkO3 ?|1+tl.l@{YwS}KO'y_xn 'zj@G,v҇y4_lSVWʑ:dڎ y%J]x Եd{0L@]?eY(ΗSDco`Z񒖴BO0:cL57xz|t8(@`Oqc!pN5Aw*N-9P@N~ݯ bmPNvm>#9ǺyU{}O䀩VXrc\m ~@X~ڎ2B`.+UX!k^\H)ԩ* w*:d8H*MImEN0_ڎ^9F 92}f^uf4 5ȦlB6'؉@1=_d5WL`,ni?)?ܛ/MŷV]^XUAv7YvۧVtn TŽxu\'bd3dZ_=]Ց_94MVw~ [_9aEmkk̵d=9z"؉ =MAQh$1x@rE\t/.iIKztͼ͡H:G3Ht9,x}_8Q9F k)8 ~GoaN&ىKN=&hVU} 6A< Z 8:5q\&&:7_̢ R 7EdBF'T,;yke"m3"Pf?6.l-ok11{_)Zy-s8ci(%?PTR衮hso DȈydp^v짷wWO~wUM;&4f=E]𝢲~s+/ݷn64CDR {@7 k{9eڧqigllxec-5|`saKAR5+[M}o8kUx{*Ϝԗ(<㠛yP51.j.4Ew؝%N;4f\LOwjSt7~kO;c7 0 ,F_TKZ`D)`TK}ު b~zSǺ` SڷK"AZ3y~ ͞~G]bl\Y/ʠk)CEW;jo+n>=͓Ln 9RK%IX}m#gQ{D$K]o޲pɒMZ~䫠qWJ#CQ.ǹ1,90g#Ӫi'e@̢vN{-R%@)X )8B`B7{P~Fl(:s'ʡ~(v3vo HA\:J mK}lXT#)-6h!&bg"@#c'尃 h{qt-/zRLY987FWdOA hC[ӋuP=ȃP~mL}nXcg9:#6 k#~2ac,_utgHYt~87-)!@7zN :Q3MF>}똬 bc[l/׍KܤDGb9cPF | ߃EPDf9k6Z!(` B j<ia3m#;AYs<@uC}>-jIʽa^sohkXҒw=[+_kz{04gΓs7)O1a^\.c@c+_ 09h`sG*7<r~_  @r ,!R[c.ci/XyZkgyS;ʻ IGL.0%Jh{@i~x%m˓8q? |br0smDɟY2}ԼRY* 8Zn̍%H~d􊈰Q}Y@$/zA"e>b^щNC!21_uc-dPb¢roIUJ 2y.S'Ħ(<9\F347ޏ:t;?˭w,n`1T:D]b#c+xdҟOűLtce=nv1̑IKZH\?^ҒtPh?{7 =ANn$JPHsΛNi;>WHK9ȑ-H~=&gC6r+:Gh* vp[hvE`{T4˫ #Ot$T%[1 a1>c/iX旕/1d=&c&B֏~Dv箓ۭ}qe彣+񕷴soR[oўډ/mϭ5fQJu"_a 6vJÆyA(>8u]#;sg@%F^4˦l&ETMkZPo]"@A~t5 JOtfbz؉fH0v@M|@O|hW@⫪,-= !,"2tnl2\wUǏ Z^Ofɦ;o`Fq6}ձ6~_b~k\ lEΨCz,'ձ>Y:.[mg/X4 al`&95ޢT(q*O=6W/6Gžuɧ 1âAMޘ2㜫>BТ#?~<4=_thG|q(sEc sIuD& @a gϹTEuT?HmJGe=42k &jh2;@S|c@я>Rm0^TOl)#%^֬Vo;?]%/&G:}hlo+Hʲ8$"=xo+[Z.EcࢌDXW4Q78}D(o0ƫ(vW6x&o~Z.*E' q۳ LvSwmӛm|!)*A}V0*{Xak}:q ~1"zL(,@ b)j (Jɢ3)~X}0BDLo>W@Ws徍hw~[m]yLBz_8B}4Lli<̩ h7^aڹ]\ kV_{j1ּ$>؜mن|6]>ۍ_RmL`ൾ.+7kkҧcd(5pH*Y,BAlUU=ԧLBeb*bA kQ1x Ec_cN56K];5Nch<냰 s{H̟m98w99˅yΩ4LWL/u܋##풟fN(}<ߘ#f<_eyI&-#P, p3}0c(NG?Ej с H'O7&:5nsbG~hp],uO~H3MĎqE?`Y\VƲPʲM؇DVc}fOHq y*xb̓ojk^0{39E]4`)jБWdGSCDr3u6Vs;l;"\zԞbIH=ysG u`3f iG#R>M2O;jf@yXck̄3. \H?)~oeSbx۠HUyooUM#"h 2L 43iؾֽ_,=[n?f='}׼"9q[KdQO;Q'wɋLjuBOmYWdb 4@ߖbdHp@A,m`Dd@\o-[+\J鴔LO?#u0eDWt7`9gXst"#GUxktA!ag>=52N*+7wvc jh5X_ ܞyU~|CMʌ$bkH}i^o}~ kK,:,ʮ~|qSZ}~^tr;æݞħOdVs6I}sS?U_TTj<y/{wi,Mwܿݵj v(%E ,|uֲj}ɜxy?:z x(>{JS͈-P#uDOdk|m1~[c#sce]Z좫'?l*|]KJˊ1Qd;՟L6{ץ\0Ӹ;#uW#CK:KzĔC񒖴Bp.qN"opFFqXdiHS1"Wd*ѩꏓw8#!"(6#y!k+ L1~L䆑v35Q&/2ccRGໞ`]@};u +6ӼCG:Jñ pWTYN׸kD6V^9*=g[ﭧi+R59]DS% `A,+3h Jr<٘,c逺5FθyIc7O/H_XR>_C<[5G(-C)S:BS9hmh"?/iIK:(tX[;j'6r ]}cǎ-Q+>;ya򔼢-lȘTZ_L̀\ڞU-11AL Yd"-2?k @Λ/h:]o*G[jPWq'ln\hC6NḱT8ߘ]Gu?~6՘|:;|g:dnS 2@yvb';&±]᫡y-]/3WGFhSKk*SeG{c>ÎvZ_l}ȸKZќi=f(yRR"W'#Eps|Y1xDU }Ts`QJnPhuD׫JۧonO=vW)N?&EQ}XW?zk  :!S&?E~g35euEn/U/泇"8!('ُa<(On " mmX6li~郍lPm55g)|Pc/* OY>=#ךzk'ZMmRQ em_T~l,̟y(`*=_O3d) P5f{f~M?qWJH'tp/󶓧Jֶ#s~O7)CʢW0qhl3X?]dQ7eIHiI?M'A?{u?x7oԏc%-{V%c|I 27`Ǜx3hK99n[ossG?™WDZ ׌CUK#N|8@MX~q/:q0~SG^qq!%7`pLD5 s텅6ۚsj3ʣM=|x hÄ;%L:yLLfOCd"U&*{ |ۋc`91r.:vsRdc57=CKky M\qU5sZ i?lNdL-rcLαyYĩ7OYOeyoI3ZM^KZҒ mzWk|׳qNbnx`7hIps:szyC9̼ 'A8:z'ʅ rVPD M4 X!>t}oy{JKx\(( Ѹ<%K^cߑG|{[sXۺoT<&^\Lu2 tDy3'٠* Xdkf&2UƝ?mNkTVQumԁ?[+À1ݦ Lᮚ5VWڷi/!zStX6~fz; "me0Yf?O?.sXvw`-/7`\|&yhK2g!]SYN1i 2N&.)kZO@ZdPZ ±Wqѷ&ok<]³?Ѷ=Imdd}^]lBZF~,bke;eYѣǮwwn6,[n'c4L.e|H798`]Uvk'S,` 3L:9חi4>& yҏ9":0,( 2‰ÉZw*v1QqFQ x|d%@-,!y+ݩC>`d≶{7UtT[9^Uy@E-Y@|Sf?)5n81aDp(T}׶vƥ{,}y85 O溄N[wRXkR2WqX@,dB-y "wpEXmQgW[)m<|kaU`ㅭ=%Wg~{a`z~|v7 n*ݙtoO0@FGI6!0*~vZlmQ[Pp2&/blspΜTDgٷ-^xE{ʫD- \}E)؟ ^I'zD. 0A;(;S':5kbSm bU;ՁE8eNjEꍉ}GzԱ[3]/q;_3WOfבX֏T?l Ăd=yt UgiP-BMӰ## .#l7Idh[*?ť#9io88Ď?)}7a</iIK:(4M @q#MNssƹчymnoi+K::qW>QHcr: Ȋ:D/M@&*,J|sL;8A-o,Q8@,2~#::@4R8ݻK6|+Y.ZQI=[.;oOÉϫSzEAw}Ll}%Q1pF2< :hE-JSÖU(`M22ڔN"7(j}m;֞ ];ui>G8,;=@ } :$1u<DzCrPW>pk)Ip/E<9HklC#XҁyӢh"^ҒtPqn! #MgVdCΫޭUּْ5>jxs<ۏeoh!e3$_ +w)US1̱2[62H^[IK3&F8uRo<%-&/%-iI`搛q8AYp,q$a_~XF"ܤ8ijgK?җ4%*.q|(HfmL5&sD} Ӆ(>UN6ՓvI]pu#'sFi7anjgHspa  lڅ;ž = \m)pQ=37腤~b!Չ*YXiK"}r̦!?[*d=rQ_̩N?+2#/vN=c8mSg%!CZsx?.o2 {3kx_OgJ.΃4净4C+*rʹ68\'M[s6pZui'm%zF_x~HK%- LɋxIKZAկ}kO[2rn91 +Kn9IY6p@yꦏ8F!C9ͶџrxH^| pۙcoeW7quwO[8S+ ρ +"4M2cRL3 )eVwO<̙Lp8%_yջsNlw:yD;Ϸ'_zc3-*!PBtA" r2eS7Ռm"tc:2" 5`q;Yheo6E[;~\  0Ue3,lo)-^/-uB z)=A{EmjU`Z6V~_?:2t|R7סXRA=ec? ̱E3]߫ YJc}V5,@hm0q~ 1A?\PO]}U3OY$CS͜\gd*Hߔe$E&A@Tz}ioZSaq!sH~ens"3yFE}(:PQÕ py-ߒCoɘvcS!)<ŻX©+*xpCzRmCd\X)잣x#uΣ/ҿ_y@D"]Α&b"~H!DNq>R.E-~~y!b-ǴՇiOgbz\G3`Y&ΞZ}{،)bE%/J12Uv?ԙUJک[FӜ>d 䱹}ƢNfƺ֑'VG`8}b"k~:\+ff55zFF~>و\X`Iehɵze|=kJy€L?C1"m0~KZҒ =q3*G&-s <q@drt^q|ND$fF`=jk|hW?=[h@& +N<AwV OpKT{o&#uijG"@hp[]5W0'^uxۻm];ػL^My(lD:d7 ~WPܱq=d0c{yy"l)/]9t&: %o/!lflf =3.,<;vs P^'h1Hy:2f ؝d\(Bka􁈏fDyXeC"pZ|@n~TURRОd,Kɝ֔<1)#x<= X 9 Xlϛ3tz}@?P6F l?ݳYK;E:gR:C.?w-l+a0;c/v:@ʏp[K}'b=t^S(u} @C*6O(u|k!XaN2.aǘpXb8 ajcL7g{eCV<0`c [׈5Sds֣l"(Я)t1 k)X7]wPjxkl-o/=v\8:GŢSFr3mТh"^ҒtP7y7;:PWC |F>-*Gc^`;88 dsN#m" P`= 7:Pt"w:v8Yķbrɔ# @c tP RcD61J]\ؠaapT)N/Xzr۰sK;I\6@DL lbzicg|\uY3SyPI,o-dTgll|XHMVv5V{h>u:[jY_"<2kP"sClk?]+gt1"3O40QPWGI7{;:ygǓ8,isĜV"˜2uƺ .f_U"(:E:'y _o/~\#ʘo~WF!R_).аsշ) uƈl$&)LM@ (Wʼn>(fڏyuX{ʻ4? l0~Di=H㇊};EJHN慱&iS{50kcˁ&2.vwmN7TƋ;U`ɱIf:dX|@]ۧ7 y?l-a'tޖX Zk0cs!//Ce0FscӺB9}I>~$84}:$OS)y'.y2p-1}]\}c[N8cxYEc6&~s2)KiDŽE񒖴B079/@6^>K@Eq;/֭@͍E'48ӑl:[1998FyhtbHȪ|~~Nd)w@Pb8JC*LJգZkɘP5ܻ凫gz1rmtVΈJ]i"ǹ/ e5~HYtbN8e=2~g*RgEyKzT(%:(\~Lvw>_lgecmh_\?ћ1Zy,; *UxXʤaWk0>]XHy2}) I!SeWa)^Y^ՉLr!_c:U~ڢb}jSwUu!t`>;",u ܉ص' Pc"'` * JxՏb^wK5@Ǵ7}KlW;o{ّ𒹣}n*ٳi4&z)yY]Eqnm=vĆmQfD:w:MDgʍ &eOm{in]?i_Յ=.9{e%~K@C9'?OsS_[2ٚ|ؑ6BeݰS<sO(w"ꯕW-!u/>^1|ܒް' nO##7ևKUg?HÈԍsAqထ0"#Q!i?ʄ24ɷ`$nENQXl+ȱ}c= 4y;Ǒթk+_[i'+DE OEN&E: Nd, :|fkMBO?>@W#kOy0R2˜<|) MB(:YHyOuF˘dr`Nd#@czR?h˫?F}MFgut5bl-Mŵ1U\?G4}iGFW ~m:SG#Ix/ S#/eƆqOdi3y~ti9@\⒖A#wig#+tMgp?f08řX@4P0/y#񚜹0/ԛ_'OJx;VibN/U(b`2CƒK]/ѱOE=[gZz%_MUf" ȵʷo-Cp|{IwOz(uS6}yO ƕ꾷?SG֯_~T WozJ7iDE]'}q!ߋo*+Ҍݩ Hg;cσH4O$#vicj/iIK:(tPWŗ|}d=-p'׭@Fu z$uI'⤠ǡ"GtJ}$S!z$l"OQFNnd"+q9ǥ?M43;e5釜r?S98NzZ4 ֫ .hff"Nlfj'lwI׉,]g~rY)ە؏ۀ޸:@ J=`VBf,dиsVǑlE~E2"'Ld[<艣?- a,@ှyM,L޹R ܇PaxTt녹.\cu,KE> ivUhd2~("ֹz` 2!akhˏ H79g D;R[;cq|%ZM^KZҒ }sALk7֙g^K@cY|"R6ϑ3)N&u9GNklG@ܕ?_V !T EN5R_9[h<:tr@jD3eGI `*wT2`K);E&~S uPqޜ!ǩoB`ID`uonk^VF՝%a UCDo /.ו}`=lg=!cIytL%S׺ \ c aY:@ C_ <)}mLkoZB=+@֘ĮI&3 dϓe8o̓L>20) h9Ӻ˅8khK<0vũ~]הE񒖴B0K)blx_VW@F3/^y49G'wr?8~+9Cc&7*vR8QQj1`AfP K7h}i"H5({}Fؠ>) Yd@O`o/e՗׀i[atCAPm+dk'z~%6??)r?c*:t2~Pr2skIrkւ-* u30^{%>`Ǭ g=)9c >vAKS7:G8(qb:M2,cd5{騾K8 \C%Vi21ŭ3:awH_tT Ў\?I:]#3aَG}GwtPiQ4y/iIK:(50m)7yv31gHb\@O>8 qL^(qFCX}j5#+zW{ (L_Jwv+Aʍӥhc4Ǽص!O:#kבNQt%S@ P\TE*ˉ*/% yvHgؾ+Y&1&vb([= mi{u[0he[;6}JbktHҤV۽ W2hkv\kd/Ƕ2 N'5>DM795&TkOYYʺ4֦M~g+T?֕!rp6GiqYɤkRp ;Lmа^,B΍!:]y^stGB´/%-iIQ|(7ܜssL^nɌETH]qqcpKk )N-Bp  ށsZ{JVpGV~Pr/hQǟUAu>|t+ ʏ8b X?`Gp `~m 3 (^|MS X*Rf5dґZt1/"y/+EqE/Ϯq<F%TưdK ߓWv' X@(qQ l^WTW%жٙQOI8gWrѕ2c<,X?ϢclQO=-1Tlox"2@7]V~*H`줞מP>4-ޤӴ6;g[ 9O GAtRkqlˀyMcM8v#Evc$>?Q 6i3CNDVd}I -~%ZGE,q$cYIf q5Y (j ,jD됮XKԟ`K^vw8(TW;[" >uGY:U.drq ~Tqt1z٨!s6Q]2}mhmBV~)"\fLر68&ɮvn_ƈ9 O'gUpֺ 鸀' 8cQb >SЎ8}+YWlmz<{Jt.i]Z3ım'(=U&}tʚ58/A`\ǑEa5\o6X}XOYi0!,"M(;2JL-&/%-iIQG9M<:PFXslqtq~!,/>+ #GT^@d1#Z:`^oϿV?ϵB?Yy@[Q$*"'#5*()_ԫÞRmyH:l?I(r{iʐV+AE՟h0"T19Ͻ_VLf-*2⟖򂭤^Uf)ta jT{W _[ɫ|Qq,+[m|-킵׶g~]EًMg:u->}:/SjlևWř#H/hfz[ۏo?y^j g9w]TzĴO$#2cΪz\֊D!P>[Nm]%ʸ@s]n(9Er~U^CI= $,<{>uBR6'<o>U c &=&b+ :M8Ý3FU uzHat D3 q&ֱǣL<}*J_)G}`]BZM^KZҒ -sc4:g;8^7r3Ru?w 9WJ&p4ƾ,UOXK3Z0`dn{?s5~vC/i7y+oU&[8}geŶ1~K/8A+ POn/9C=zac! Fއ\?ekbw§(\aڷZa$jxqVK$l1[Nkx]zSvh1 ;ϴ&JkXTGLԯ"zhW|'k4w""Kþd{?L+c%6ɼx9֮{7mx7DkZ,گ-e.'J'v CFRfg=皪A21xUl1F2掞8:"/u&/ Yt)՗Zt s%R=ő4i8P_%#%-iIۺu=Moz~Snq "/8QL4'Nʼnr9"y簡BIч.`_Ypv@2ӵ?40F/@DLN:bV; {E钨)=ӱ^" p?zT6ѧE?W |#[DV:aL ߘ&:##k sQULӱRiBGYdHՌoF_]6}әkuc64FK1ZkC_xI μv ^KXf f_lwszk3"ȬHnNLD&`Xcg_i8@#bQJDӧG7 OڌD#dY.Ӣh"~Tty{kVolo_DÎ9fq?GGq$10_1ntdF.džqrqq~(Ny駀iq9 h~\QV PX>޾ȫ1Q =DVn{^OWD1`/Y8`503&*؄>}OLE=/rfzX.I'E}|i Tk@]ƩlY+D5*N7&,~`Ze+&=1_thw։^HGtLŢٳ!*Em~W`QL T`ݓ/@kJ 1I؉2xi&ѣ㜫3p}CJ+‘K?rt@ZM^ď.i?3/W^7B̞?rS7/!󒞸ܒq@oEq#a;+NS]NV΍KXIs#3>L. = 7:SR}M`lek5??V: KT[}~~.b?l'Kv󥭽Dc '^#bab>kG $O="?l;C z:^am]h+VISrْ2P_UۀUw@C@@$$MP>OhS5+Uq)PN I3c|om*j/̴(hlQiIŶR(N%@L_uuN=%s^/w}:H֗cХ쫔pd“1 aG~)3= 0,/unCa\g8L\KY~A?Zx_8$?&i:^;> xL"+ wWr]`&.R7K<[yP"h8/Mhu.%Fʙ7֪rtڕF%-7@(D׊Q\:-al [+]; eN:H5-&ٔ96ݽ,r'_X U0f1FC}rhA $9'41 WhC0H3EA~`0ObI5D>bL?\ؤ#|4RD>&("H9ᴝ3Iq#kB,0ۇ^AhA ~d/$ɬ$fYʁ0B24>P/sQNlzisvMBb+% *5i4!%-M# k9H[-e (FKԇvIpNF,42Bi7a |`?՛_L! H_Ѓ+hd%b7[_}FpqUgI,]?9(f9r}Frӵ1=mSQRig1' HW>V_p)myL\L9a:O‰s)Fi0(CF1gƤNY}bisw_nheٱpU_@<<%h(m48ǀcc01Hhc33! 0tF3hߖ<'$SFR$%wWR_kf3?-XHyF6K:4{'ɘd{O2X #qqi~60#e4Eso|K~/[@tӄY`@*XUϤfVH+1KJEN VsD%X/ɨs^j8] ,ڄAn̤8*Pu_ݟO],0?OM\:,)+e{UYBXBD.oIƗyqA~gUS PON6S&]iMxfTA~@mT #15+̖\(tt(C8ɅC$v`PkݗCO:&(_K|Vו__Y}bi,7[o0c`n9B dF8h|tN_1M02rPcP&ON9V Ah}/5iEP.qݝN 9#pElBK"!p| O7ggCuvC) ږ Q~  OfcSGYhNP4ӎID,l@*Ck\czAX hgF{գۡo3ʥ>''Vi6ˆԓ)#i+K^e6 mB~ʼ1՗C  t@C2NC*J4vBh8flu}uPC?:&?ฮ|Qv3=n6ΎbA ¶'bט3`&201@ВX&2e*Wys q=)=0P*cgS~"suk|D jcdwk-(()"&& fIP)2uvjے<I?ߓ) H/&c,oiRX "8bPc9JH%MDy$ D2 ax,q| +3e@8K qOYd9d13Yr&CU2D2a g/0N_RK=]Iǔ~c iO{T08s}cɸ>6}ɾ=U/dC8G}.m^ȥqi>0ږqwfA!FAfasҶ9foy-|څ!=3J_u8%8=e|8V\"o*\a N\:TvS7\gah~o}qq%tݱ v߽ej7f&2kxX Ȁ GMm4(A4+?3"0W mG#e0P'=j>OIAm@=QEu:"Pq!i+AI@T!NEɧTpfuO 4k ~qO(sei2m|PAq˼S]ye(# Z A2ɃAeኟ*>2": ,(c<"kOIP@aUɇID"?Gd/am6qqXNbL)O#ڛw*HFYmHKDbيTuOA<|#\w:2 Nh 9 &“YgM\rà@NTmcWA\dIkF6K]T?[A^U_dF 4e^@f%*ڏC]{n6Ό1]K@bc}55Ϣn."lO|Xh I=l  Lf"1T"]SR|<.VE7dɗ̺ NO|P1yg;A%kLNe]+qȎvR "O=7FH!FM 7Sg7)6'?$ '#ĶҮf"Ӷ\фDrJo|Q j#>>)'@{Gb^fek?_|j1)#d>(#=,clDs{laʯmƃMi_<c0:yĺA}+Q)0ȷ ՕOuc%0ɇXnдd"_yAh,BCOQ\s_S)2Y5~=#b$2,+ >"8dy_Bc#!,qzÛfeY|Wg(9vVJǣl8oݪ%"ym2ٰf%iRf_??0͗Hd|YZ )/%G,( |7|ZۑLb^]oQz;y-dBr9|a fQWK''8^mZZ[mޝmOk~ 0 rZ_̯Bz:T?a\_-{2}C_S8F2/̷L酎t&י1+X0J9eckXh/VȂpgst iF!|Yq5(I (c1,, 2D=5 |X埩"Y30C1/+1*JҌIyzpD7,Bm]27Daj3剐կqr#N%>Uᧀ3T~@Ճ-L>6Df%BhFuq} -yRYDc?Ѽ8k\Ǻ.b8fW 8_t8dGz.Vzb],Ax$ վ`Z4Mr: (O1Ҷ[( e&}UfZ0`9(iˀ N/4[ %Q#qоϠURpZ B!a0GL%ϋRy$ lOǎua+>P>婠T&3׌4zF"Tg)S;*fQ9F$9f A9eHOD=;1+̗,<j)阥%*9鐷1 UX1uƨ}dE٩bا-hKs'W_”@cѾl-ĔM~5~;8$[lmϓ-γ_a$f]i*]v?SENKY\lI[d -4@yl}._ \+#\7BD$>"0/J>PUҲf~$/H2{٧ ~(T ޼ʐ8qڥzNgRA|+ȖmaߜjT3} gy龼rT_MGXv< c) A,s/ʴ4|i*S:y(?Uvt2&f$cJ `7!?LQ]: hgfGM3\l I2)!bfph`/ĵˌ&c>!ītQ#A51Cl%~K)S=Y&ʬ,K)̆/b02hTyB G}3KԾ4?H˗ed5D#)c"7pn̈́E![3ɪ$h?;Ddk.%EE  7NE>⨮/64.Y!ʡyPb$H7N!Rq KpJ,=*Wy%Oc*=p8^ IX(LiQn6Ό1]y`0`߉4堧<1a}Iκ<`T % "<3h(5V5"I3uת eYI[ArQp$@a7ĔnfHYQ7 *p@%{նe ሞ!,GPY) \IC~YlFubhCBQG6>3).efρ3Nrv㡇 (A )v'.&L_a%tH'HPe79VL%~Y,ȅVFun^8C{{C jJ4D2c^Yʀ2)-MɗTO Ste^2(LiJӹv3SB83cLW`R4hZărPQ0i#<+j_^_M pes`7E5+إo0!x3 '|'yg8#ն$Q2͚nf3u͉SO 0eE3;8^ŸF4 cռ/9av.WŅ7b9"eW>=B*sY\e?cd9$ =/@c!1|V?LgI{PmFٮt=P>”GinfJ[~QgƘ`<5H0xr *v1[*<}A~1BxnVӝ<C̢l4ኇ/yrL+hFSn&l '^4e9+ bA*L)P(D WU:\WwЖCWe_KZ(8Ìm\/Tu2N C wGӽEqMxWȃ844:/eq\yԅkNJep6”@mGc*:-~-W¨ 1& #NDe=éMD=ʘ3}Xpq݀N9`i#om,5(.";cFN 1Ԟff8,C VٔP$IJ6H'$l k@&ɲrd8V\feC~@(ϱ_)e2}CĚjڑTU6QnS\%H|glXA\9}y//a0.-{}*>>pmɔM-CSj9=PJ46kxQ(+A2bFZҊ_"N2t福MDۣ1G@B:2L0&!s li5+]#24`Km@E`l1αMQLAthXl"=R Ĭ%kA>{eV N~QРv.|@<"3ӬV_G\ Y!| I,J;Ec6 t"&)/š\bMK~Z1x^ .dJ;ۄsAq)Y>1NmT+f, d B|4`)T`˱Fo9V ,ā$$Q;Ft(.ba L8$"2DCMmX)qWVjO ~4J4TWPdHO8C!Vd*,@spq)ZJt9&i,'G]_p, &0xWi3KlֈC^ǖ~І|)1iC^|{dSadȖ*M"в+ʁ2XQY!/ftNy . k-:`h\,(*G_8hYY7 D]Sة(T!+<ͺ!xTn$t>7Y3͊jW"o8 2,(!b::SgKS5}Elrcs_Àn%3е $T4je0e_y1 F` c !5(k 'Ă>~G71+(#$s')AErY"YV̐1/ } !ȃ G$RRYkئjf/j&U~̎K7Gc;syV:kƾjߜo’%+p -vtäG%R%9#.+hN1;0y)8'Rqeq%S?a猔#o9L3f}~r/2iLdل RF*[pv'w <#J*eLfL|PTBusBPWO`M3c̔3<Ecfh/pX_rDDDLb/~CIG\Q)"Ti Mњ`i"LQĖYlrߜ|lʬ omG88ΤԅuU',Dl䟔?[t=?# ~2B=i-|&'eMd$"z/:IQO/We% )ԇnk ˖86׬rMSmQ!QYFݕxʃ-'ls28- Q^%[xu'P2SgfTf,L6)@ǘC`0fD  hXVzft3`JU  ~:NZ|N[E7!ޓiFVuLB$p^v} Pڪ,x83"[3ӸE<.JD zQ$]XJ4# ydq 3dߜwЬQx5 $8YP&Ti3U>p2fr#8^VK6ȞsjE< |FAyI4#~>!ǎ%DzԾ S8UVf,'_cy ?ؒ2N2L%iVaI2=h)ʢ@n2;7($Vrz4tm0!X&)}ONJ W^/FU5Ө|Y.ǴV|KڏQn6Ό1]as~d9ڎ5(b:϶ +|5cZ f8.AAVHe@>"mp%9F1\H|0!LiFٲ\MbFMzLv*Cpq%IsHfLK1Lhd8 % 49Ӥ+A0EI&~ "ubg%l-Α)mB\*Gx)F:ʢ8HNMIF[0Se&҄%_JQ^!GޕɈ/m@yt3ҾI._IvKqؒ!Q(s my]2xe`gy@5 U~a *8OZ=z{Jt_a(ܪ<򕩭doM3cLW𒌾FZ`q^q:-[aep`y,i`V>F>@!%! J$ Ox*S)Y %jNKjS "ctl$|_A\LAf] Ǩ”ֈf•P8 1^ k\wFݚŦ\?D@~P>ub/xA @Fd2^* ^W;điÚp@?2-Ǻ$1*L BәT*LBG:#EM X|q6QNי1+X0=@:4(`~ WY9'kHH4/nL"<4yAX+!B,k~dN$n<] =Lh[t@"PadAHDD&< .b}̬D3L2k¦"TBOʥ|D03ʈ\|n_3 8TERV~P^e@`R| 1ڧ_1P}LX,Xԅp^qCUrFqd{9^=Uu_L_SΌ1]y `Ӏ>0C@r@f_i$PQ" sӱ(9u4&`UsSVIp ]FU1%)7I+%&&J2|UN>K,nKI13[=M'^?D%²٤zOAg%H $A"bcr6lieNW'dq^edk4$4ᜧܘ쏓C#|Ɏn1_Trbڄt&"n{/'c ]R\Nvڏ,;xl0_ڗ_Hߓ0pNSšDz t,bZq)}8ʵ9l5M2 5C|3@e*\Kp3'[SZ8lѽ<_(/uiLOM3cLW`q H53ȣ*B  Sq+&gI ,78kk OQʲE0{KY(#<($#̠b;itqi$"T␙hf{R"U#yhfq)",TQȣ\ZQV>f$|*4L\L'jіeD`r%D(SC4?=PW4(Su(4#>Ī:7HDEqJ\p= qO%y&'+-A٪ +%Q7D3Ʊ*)Ӗy(n{(_a:6}eƘ`5(OuP=DfIІ*BT1Uaa.)tc\ˀ ` Ӄ|aTǐ+9q0uNY͔'[1ƌک c`.0H@ ~^BGB"l G- -&aÖ1/l1#L]T({V;?er2A!G2+f%8!2 aV>Y2ۄx`|Q'(u`_ IHFO{*Q VDP:i\h J[4(~Uɟ&>JP4`!D@.%,Tفr4γ*Gr,i /gaPg<}2 L_WgОcL `Z tʇ2iG1BD"niY`#_@Q1Bx(N1X0O pJ R㱺|[X% QysMJE4b aD4Me-E2#|<[,$L|IK+@f BJPBMR2GI8Rw GOsaQNn;2RW ]C8 W iTt!i}c MN)B9߳qezڋSOSP턐)2U%_\QH #IK)jkJ}u'%P>3. 0"k_[*EԀxZ8Y.hWqsg4-1AY^y֞PL7?eLa<`|5j09)b_'†Uf9@\J!"T F2# ag&y!)q@D,#to h%PQf,f(K٥4[0BdS0-ah@!yk2:w)>1k&b%r6E2cˌ0aq )?eICFz q5XD$ӛ2SNj?;H@ZvGL>Fڪp0h+uw)iLבݱ=Mj*uCՁ⼉*M}&bTG;iIõK|Aqr`) QƃҌ5Ӂ^3RT0 8uI ;`CJSPWA`R-RyjG)nCLf0 *OCI >-MapL3͝FmY>OLG%1cDP&(hf9O6JgI;&m*LB7)KygGt`~3BT+o[2*Px9 >,uL2 P=_eiG ]!WgƘn`<#1X[Q 643HHGxU:NI4eJd9Meۨ\KeD1*[İ1̈́6[a*$"3Q变m. MDl2Xnw}PY*rQ>''ѽ,CXemHdX]H2 檊-p[cշm-UjX键=[] _|+ΫGsm;4H\ӿԉ:3t &V la@8엃m)l`;o1eŸ́fR,ń)s>^ז`pbiď CC}vIy%wlڞgYZ'P՛4K)>3UjdEg]1tϤu/l78M&Xq,A|2!;mȖcQK/}:aNLve _lQƲ,txii/nEV^JhN©l^]Oԍ2 \:*A_ypUz} )r ׵TY5EU.r GiدK3Cՙ1 `./7QL9B92c$WmAI |)%jkw7C^Jb Sfh(C%Grȫ=9Ͷ]RQy2|3KJȴ\ h DiJi/#$.`Z a>ggY< oGEz*" H5SS=缄}X хX(?L(} F>ڊNa4&uΌ1`nK̗N>Kc1fz04CجYs}oGncȮ]J뮻$c+י1LKO}?O?L^lYi襏LAhG3iiPΌ1`Z +?_dL7ٲ&K{ЎgZ=ӊ=ӠNי1xI1ԉ:3t/ɨyIˏ>2?^>3iiP' $M&]/?:^txp|ϴ{3{A $c{f $M&]/?:^txp|ϴ{3{A83cL7𒌊^7tzc/=ӊV|N/uΌ1ݠ+yic6B7ӑ-c1 q5~Vf4ü,nذ!6d1OxH9l[c4-H˭ViL+gL/YƖcnmK/+ +cIuܘE4mc9ώԆ/' OcN sי5k6P^[b;uu]+jO 榀^jK=x>^ŝw\_,}{?45k@ fc˴# o뮊W` 0yQdt-;zc/=`q2mk{َgZ=s8g`hάYs fcsߒqV,XTl{".Zζ1Zeɖ5^tlv=ӊV|N/u }oo}qq%tݱ v߽e1?F 7cuoĨ3cL7`޺zMܪ[c KVQuaܰb#& M^lYi襏LAhG3iiP' -c#CC_:fx 1SL0c1ȩM3cL7/⏗[ˇ{39^3 WgƘn%cL34tgי5kK2b$c_ԙ1xIFE?ΛL^~tiL+gL:q\gƘn%cL34^g֬'/0f c1f _AL?%8o2z!^ˇ{39^3 _YV1fjh\Q(0OtӾ~HZʛHv&+P|`2m2z=/Ƴ_2ɶddzeMo B_OMz7eY06)x:q\gdȌ1S0c1}Э^g֬yBy@aIƂ #OL5x܊?^>3iiP7\gƘnfc1̚5yy@9}šCbΜ9_0.^ػwo̚5+;*fxk^Q{キla`6c?:f3N0#{cqCtU`2Y|?=gپ; ^xz]=y޻n}"{_?~?[9m7]ƿW'oM{:n|ʥ; /?t^sGsС9qXjU}+WUW]L¾o۟ɟ /0~8J9xcs>Ruf͚3f?n2EqƉwSǯ~PS;5[{b$<}81b֜b(}qo;7 Dg}!oĬT '$:.}auyٳW>+wP.9sf&~ws=-f V  p13?NfW;x'бG:;umb[lI'5O??޽?;Ů9'ss_ϽE9ɿXs52.qBl۶-? Ͻ o&<7;4SncXl޼9/ۿk˿˗/e˖K2*zqdC襏L珗L+gZ=s8g.:~|}܋=q޸bwNEtEqWy\t11Y1;[yI'?E'N;+|1'3\[0+^cXb %{\ {􇎉ם?q B??pK4oz%q~&fCIt)cg?[05Xu@pt$c{څh69t۷;.l(gwǟ'8{sT{cxCqœcbKIb9I(sбӟf5[/s(#LmGΊkGg'͙?ڟ?/Μ{L޽;ۯűv}?N:ر+{d۱s8^tq3mFNmȴzj9c1f:1;'7\>Lqpq~/lyiΘ5؈㎉%1{=Ƌg/M%#ցcu?7*ęk N=̳E hNJm}*=xǧ8U p/;xg瞋~8o{;vp^?կ~J5xL_zDLe:x8؊}<tq:qg;#^hn{_hۻ//?;f$cb/95}?Y?H2Ь;(fZc~bssb se{ߕ͉y/~.b3T.~Ga$G0kfc1=^:'y`{l'-O|xig.|q\rܸ%ONA?|s/iB_ fc15+.s'oMW{Kwzz|ಗ.M07־Eu'sbY[k^go^xϟήB{ǁbΝIoxg/mv^O=TS<~W~Wbɒ%y{X~}aٟY^11d=mҊۣMT3%}u Zpft1`f,eK21cFq.\x+╯|e\pq17o^˓ǂc1ƘX0c1Ӂic1fkLofc1Ƙ>b`6c1zc1 *Ν[c1c c1c:0ޒ9֯XweqÆ$RW?߸<븶=y;mW[EW"3=2en +Lnׯ[uv}Ģzݍ| >6kcf6-ׯW*6lkoLm\+Zcڷӓª~6 o96n75aúznb$n5gr{ uܰ<#e٨gC,kĘʹ̛^KG:m}"&_~clXwusOGi§KVF<͜ r6y2߲0Ξ?ۄ/kf5r3=6oWk%5bLfzav,x&3Z{Lvv_C#W+6ҺgP o뛳̸kXcEvfT{ ĭNϸkĘg)c$ךX~#/M+V%3mq߽[b˭b[nU7Ş*cI˘f6uWֵ_cLfz mOE p3Z{Lv 8ǂť*dƵGɒXlK<>5cD#bh"4Nbdf5eLmH̿8^hk<1ĘȬ{VewǦj `}ƖgEDQ]{>-m3|ܼ(5pfp{l^?eLyL>u]7k\u^jÆXdf-J'gd{dcA`of^#-us3rmb_?%z3MZi$1cZ{1cc1tc1ƘX0c1 fc1c:`l1cL,1c1c1`6c1c1tc1ƘX0c1 fc1c:`liaǎOdwSc13nmK/13|0!<͋9sĹ]tQxUlc1ffp]wY03yⳟlï{b9|hh(oϗ\rI>-ΝÍ1ƘK2 _//4rΝ;3LcÆ Y`z6_+V366[F31`efǂ_敖NlҎH)io^G.YNUc[cff[|+q~*ڸ;6Yl+TgKV6>n1 a6fOǗkV*VZ\pAʶcխ[bt^4ڻSXeKu7.'ׯN,nX n_ukl!UǪ1Vłf||8w{hjmce7lF9^Uݐ.K۷fv"\[P*tn]un?kMUcL5`gyfu4~p|!J-$qEhÆaYĖ[W-Yxu\_K'3ܒ7$I3fm ARoǍ<.^D7m ajFu;!O꓋.#].;1)߶,R:c#>T~ʸo켘h{rSߎߍ15<<\cfc9:M aliC~-Yڐ]wo*³3uƺUQLh6Aq~uhhyHoY.,ZP5v߽yXjyOmf= v\n1} Z3Px=o(/~qut8g-`3bGD!fTi76fX+g<6^ʙl^`2'|rlB჆13>;m=\2>^W_p/*\\P>83Z`[<KV6㺫!ǦSz8DʥI6^[nLfѩoƘAxM`s&-Ϗ{キ yzjRǒX5[U,c$ ۻ0{sI\9יimmc QldYE2}Y09Ny_~}ZPϒs9Vŝoc\6ʭ9ߩo'ƘAc,,M4}~\cfDoWUhd__?p򲗽 5-6ny֛01f:.^S=8v/~tx[ƍ5yM,] m,_~qWĢE,NhsƯK3;\Gf fcLfGIy8sE/zQY&/@,׿Y6S7|o2wĿ+,1-ر#{e^w)/~U c1pu]wyg\yUhſ7joʮ?)[qvn[yl}h,1cjST7KVރ3Cu }؊ps+`+ñaIEߪli w®װx gCv^Zl_ia0c1 Sy:s]wyI1c18yձq[ubbEёM/Cv>>ԌOpn<ܭw9jy}k`gօ7Ć ↅg6adov>[qvn[yl}h`^a]\:Hl{bk,ZpV_tYܽic13' Ϟ_58:R_'和іguw_L& GsF{i% wN$>AlgܛnLSv<8o`˓ݶquǍl^+6-u nt؆Kro0čo}g/-?7o;-]rDac1LGK-[U+b=K\Wo]tvq9HŽ%cA5G3tAlnK21Gb^1.%c1ƌs ^1?jJ=؊xIFdc1f%K21c̔ݜM_ekS+5xIyFߒёn<ܭw@뫣14G jojߢv>[qvn[yl}86Y,ìj݊?81cLGwl%cʞaK2FPGV܇#[V޾[q<>[2:M2|M}0]g'?^O+p.|'o>)o╍3csͲ c$ۗ,ov=PNR[#ǻ͛ U~/~_)z2c J:B#tga+έt+o߃dWL& lV#t݇~KFG sV܇c#[3أg 2X0Or 1cLG<^Xqy^1!m+VĊVoF`l\]ޘrq?jb;w+om}86Z<^bbi5üذaCϏua#솅g68 ;R|am ~㏡Zq;M݇Gp;ҭ}2mG"ooX;5g"LF2=bzIƶ'ƢU,Y,޴yaSPbo/0c@hpX ߉.v_Ւ}-s ,w2QpIޯ^=X.?贯]_AY/澯dBK>H|87/bm8fpklevws6gƺ+l%Un%Zތc13Q<]ִҷ?\Œ1?{aly1MwDzKf-5c1ӠofU^ukC(Ǣcݍc~~Ū8a;+Ban}ƙ]SYV{QSn|#>>ily۹[yh+Ӷ=<.a%G#]Xq4fŘ)F0cLW`mL`|bژ blo0mʷdLZ\2hǥ;u~*Cunܭ|a}v>J=؊x[3̦36caa6}fK3c,k%fpG 35S>>b;w+om}h$K2/0+$c\xI8lc1Ƃ/ J\ h >l}8۹n{/ɘ~x 13 ^1.$L{F6c/5xI]@Y'QyFdt>b;w+o/h}h$K2hxi~K1WxIƸ cIxf13=`K2h&;xď?n}8۹n{/0K=15$c\$ c q5̣%ߩ[1 ǟ3`%#y۹[y{IF+ӽۘ43Mfի-iwձ1qbBx٘v[21z@Z1a0Yy}ش46\vWĦ"N fci#-1‚y\xC0o۸:n[s;(>NX0ckf_uJ_O9W!SX,;~vzYy [2柽07$cܹա1c1ҟ1c1`6c1䧱1czk1cc1tc1ƘX0c1ƘV{ ڏ fc1q7Ǟ={wo)"M+kX1`XMUz#=$6_2u}gZ`y}:oþ>b p|n}<>uy 2㏯vg6g-X[ʬci[ܗL]߹?ߏ]o停=8a݇~z|wƙ/;3o9Df W3g/-?7o;-]4/s&v=8`aI܇s̉_uU*C'2?Lo[]FLmX;-7`ֆ3 rI]߹?'|?-?^{|u}x}pg?kl1ch c1c:`l1cL,1c1c1`6c1c1tc1ƘX0c1 fc1c:`l1cL,1c1c1`6c1c1tc1ƘX0c1 fc1c:0[V; |#7~$]N9h2hu}a1ƘL(ԧ~T˺u*k~c |77oWKhvk23F:5&yҙ*Xi_ʮk,򫻶v[[N[I~m{~#T窰>jOX'1ƘA3vΝ>}M/O<Juz8~ yxm)F;h"Rfd|9Ώ?.q:;˹s%>O=?Z缘$bӿ ޽B ɯ(e׶[x6?cowT ;k~#yNkqňNG[]u;ܸF[~΍q5j~+rԶWև1ڱܷ&~c\g plxCG1Ƙi]jL>o?j, U"&3o(c28?\<ބ }O&+nx$SebڭbtuTF 5ܑ˾[Rmu8M*ΘtxۤyC\v̓hjo=|A\rqxcw>>yyMӌps0Zy3mmvkO c ҿa+߿2yh5uesE>9Hq:9cn̺>.Sn #b11S{F~й#Xl_72JyX샙13tM05>NvHwظs16OF;XwY73~ƲþTDq3?.h||}j2zXK/^Wvm#nn[|}kGY+[WFK]CNumS^H^ѱˏ5$a,?籴?]coc1fVG?: 2}]ż;.G" >~`qל=@13in~Yl]+`?DoXc1fzg? _yU1c1F|SYվ1c1/0c1fʞa6c1a6c1fd~qi? ;v숧z*:1#|6/I2GC?wܘס~as˯W$Vԩ1o]{vux{K',/brK2Y<83Uoc3gN6esき\/Lo3\rFןfl\{۪W? zͫ9Ǜ`v=cDxo77G𪓫#c.o<5$E~K_bLzN,~a"ע~b"s=lysfǮ&վ1cs?xkţա1Ƙ࿽fkzL5\g珫d~:gL'>|U@E9ƌg__K X@mf-/Ko7g38OGkʿ>o>wU|*auޘ.D|f?̃sC|4,_* qmyW`Oe\c>#j=>\bC9+p_r|}ژnjo+ʤan\:ўƘ#Ѹ7=xGǵ`k8Ӧtm7ì/~=}qq̄|^9>qS_U1-6h$?=~bza$Sc&ˣwħ7]2DXޜ7Wħ;UxIFhYQ\[>#(7Q _Ot_wIlbOFܦ1{=O,d{:x+X) uK2Stj7syqa|<8eX}Sį/n}0µq>:ݐy0Gdt S4?Z>wU#;w?:sM?2~8>-237h||s c1cFcK2f͚/z9Z\ozgu?|{ߋO<:32ۗɱ\ooEgQst__hbLJ0vi7Ys4{ꩧzUs1Y0ci6G {f;c\/Lo/;%vx5tgNBC'U9p@ll1c+g Rc1ƴ»ʳ̙/wNc13AN8!fqI'׾1c13'hY,d駟L1cĬ_F#lqСM{矟_qic1LWW{}Z QnhƍÈ,8E}bpXih@;M6nӡ>Ec:ّaڠ_}efHzm*ٳ8f[r:7k֬JPr`fMIENDB`DataLab-1.0.2/doc/images/import_text_file/s_01.png000066400000000000000000000300241511411446000216350ustar00rootroot00000000000000PNG  IHDR]sRGBgAMA a pHYs(J/IDATx^ `?MBĀJUQ[-V(C־VDZѶVQGDXL &!';;;fOgkfwg~$(PPyr{tɥg#Wսͺ# ʔk׿AOtFIObpWëܲM+Cܟ_ҏ9ۻ533G,)!=!C: ''Sy ?>pq'7tóȪi@hl6_}وb^lsPSQu4)1 %x<$>hZA>30ގC>:ѣ?xdN, !R{g:H!bo7! PQ-& '|}W^v%r{-, =Pd%ܣ8}̪E_1^0f 9ەAK_mQV]ŏ [BlƋ-MkS ?î.{M5<s`{'0^N~;;;pZ0Jrerq8dŵxZ8ǚ'#=~---ήQǍ0 y } |*Ґlʴ{XTeт鞺?~%t(='{7t;o|?ܿOdǒ?Eq99!'NVх̿)ł6Y]-$ͪ_Xq⋬hUL.oX||jU)gDr;g1qZ8VǸS:{J/o93sg2m]`'e|G=~tnnɓF  es=;^_M\1'Lzu6(óUJV׿ٷoh ^g&z.}X͛G!;$Q<]I~ 3o֊"KD"1Bu12Ϗ=VStNPNtN΄KNW붾NkvG5|뛺8V)Wu# 23~K3ָZrUK(Ԡ._^x\; +⫖HB]mDK_\d$ 0` *b^J{X=*7lcc|UYßmq={m#=- }RӞ=XqCkw_/ri ~r.8C˿OoUաDтȼGቧ)KV7_m[=W/YJiV&o}rDS]_DdW(2 s:~|!WT(6 S, 7nX@D3Ͻ@%EVb~_7(0A4Ջ%òϚ|\7#f,-Pl1nxJP^ytQ+://>|{+yFj&ǷY?B Q@BSǎ3D̝\rb I#{Dg[;gg :lI8JD/P:PN{Sh\2/cfl}ETkk@a$NzD|F4OZ?m{xCOSxg+Ї˹E_7L UdȬhġ0mkFEZ,loC14LطocxT e(X}?xD',S*V7}6q?u'(ݱ9(Ǩ{om1d$ӂk`8)!|rs:VSO9Pu%"~?Yo]}S{>}oVk}tcu/>y"*bU"+x]k\$/1s؋čOL9\2a~i7n޽q1 6dhq_7<%W'D?ׯX:uXQ,-E}GnQXt&%Jn:EKCm2XcHwpL<-G;|vl7d9 gO>]7W-Y*2ǎ ሁr˺}]P0,[{2۷)xz\BȤ!b jSu[(Zok# A}g\w <ٟ+Vӗu^Iu{>;1{>e3ECqם?}v &'G}{,:;&V/t>B53XA]y98 Aףwfehؚ lq%u5\iGHF8nʭ8g$oğ gM]}忾e‰ޱK'<`?7;7hw.wXsdV/:e_r@#M|#o~ŐŦ" p"Bapk0z\0[A0äϜq}s?%+-: wΫ .B0腋YoEe1a,lƤvtR8d?ں]W\/>-7O >jSf`D߼˨mժ/nTk`1G@t-.l19dnUz6蹆. ˵& (O;G^~EEX}cؗ Vcpƣ݁MҦ4{dѻ$۴.ş[!E'M?6ڑgCIӪ)ɴkR,[ u5 6嵋]Ng_2͊Q ^z[de$ EEqp-N̠>@yO#T#gO}t '+6lc&&E8.Ub Lc"tmCPD$X-%'~hJYGqc0qxÏcƒG2ne;аKI1KGm>!<}-Mhj(a^Ȓ7xѦ$a uߤv ;;ke5' @ݔ4~]= $7X1!_6MMHC6!}NvHZW8,vK;vܣk|I #{[IT1ZL/$g8Ci%t!M6 *aqK4j"\E6gVᥗ^J?`C@@@@I{NLoI~'d'd'd'd'd'L 1cK(pk.1b?''GK2Md2_Y?EfMpTm?A&U[?:^Qi}}1[({~, QߒYLL {^<(g>\oUX{)/;#;_mXesZH֏mukkB-n䂞}l7( &_s*R!|IҼɵ$͛6xLa/\(_tƋ2`l}}aw o0~F0ic6n daT,~h#|3n6^rv7{mkKKΞqiy"7(=bYg&Y|%72K6FYEqA?W+4ێoFt/ ? JYƊ#%?(f8dH)51$l>gD`F#2"~֝ɤJ$_U?=)bf0J cݳaq"U@uL&*E~$~tDg+= ԲOpxco۪ɍv;2_ _[ݘ\s'5AF_x}cɲ~sE%gGݤ;$0Ȉ r;| "X"4EwO? 7P'}---2}cƌA@www5*׾L${'xAx iEn+Ip\QUl :pB!L ]崠 +EtP^Y7W,_+@*d; dTLPί{dQ^))*kGoWӲJ=2$?|SVhZlΝ+FUd>)? oCXeYUiU!j־h[;X[SWT.Hw$57͡3l x, cb~5JB7]6c>])EVpUӦ -W'4_\{>/~ڻeD'X؅_ZU(2h}tcȤ]r̚=ItG4SxV:۷RQΰ``$dU͙.N;}bozv:;O.V}¢I\+˨dn֘_{ucё͖uubZQ?CaM.v 5[9Ċ/RGdX)5Iײ>s0ṍ[R( " ξsOPXTlޘO_CIxi&4`(Ԡ+m})솝糫xYH)Ҳvm,sZ|Z"jjƭlnd@%dify!]ٳ 2Osi3' .?u=T3Ѭbf=Iİ"%eΗ.1|׍ͺ#dVڴD'#34#WbWSS3}:%m۶L@4     dNFuuLe…2ܶmے 2e 2 #O     ? $K(LxAx iEEd& 26WLP+/ٽGf%%E"QVYYmTlH+(Rz:fFҝ逸1c\sO>h{,*aa(Zu-S<"E5ʲ+Kd YJfk[Ԋcd\ۺu AFXB ]HAîw ]N8UVi&_c .) /^[o$g* yd4H̙3es2 }G ;Gvn/_uB8#K/%Ga$, Tn_paڋ\1}k, 82:hQN__Zd Lq؆}rRoN͗+G 2\L={<7| 7@?)M9r෵튇v VJ?)M9rxBp#tGV/HAo^ha$-1F6>DK~h@nÛRȘ*h[*چ ?zUUU?LB9ղ`]z_}-]}J?)M9+74"H1CooOo?X<`)`:; /V_#(5c#m0i+m`h+aDXM7 aR`1{l@ȑ#MF9tMsg4Mr VlFƚr%;3\݅:]\7E; &,2~ kEPdME{[kC:;:(N%ia*k0 #gg FOj+^Q12WJ)/ڴiZIfx.{5Z {y7ˍRe]VWWh9\Q,3 &-a+}]N3Ȧ4&Mh^ =)b+=W`rlv]m6aɢ6$ȃ5%0dPCA1= y:$KU񳣣!jGDTڐFߚuʜ(.օ*:8-l.+N%jyu l2+YwIݲwBbfdD,KYs̞mzvjWe\U*iO9v+s9Y$!V^@ 2xΞ~//Wl(FdJhKH!C_(P𜙕|ћ.>ϟ)`wW7][[Z"[ =P[$SzSEq4 iimoZ]dPa>BxNΎsS+Lъmg}黜tUWVJE1_7l3+PVc`o𤿘MQW" F$4fZTIMCdtEVv!͗c#jNb%nbimZyH|K͢p!M'{{D$MN0XGi|4 mXEޕ#;cFUղFd#:CfȉJD`v=}ydtuu9Rͥ2rEE1Β_wO\'/^]芼b>kU(R9N֗;WODSil[IO?HL+(DkIΕSeA1D}E`W#5C>223)Q]8{>JS)Jb~0tvtb3D ].~%fmbʄ߽!ΎCl£ 6Yš[:TUnŵ SERO(ӥwgh#9m+ [L RWhT* >OygY*V*%UID,[ӖlXZ\(p:*Ȯ.)<&z蝚-E{~!8h->P-aO.&vW )qyUgi~yW*"X-E^P&E 7gG7F8i[Zy +M 7Lu|r>,&P渔b :mޱ5KQ6wA[ʤƪŲ`R*@ߺw/ZS. 2cL6qLYV~B/Vߍ^\>m=MV]'@XZ~E$X*w)oS~nL~eZQEG~S. CYH rʝ#ɂ#g7TX#)b!ޛP) ,(a!(c[.B-!-/h ~" j@3Cd aKfFgMS@ دtP`cM ٔOIECTX sy(uo?{c{q _k)7ci||jp2lr >7@m}X^ͽ?M;eJ s(cSu5C9 HՄȏqb l袦ɋnE&qu|.AE. G`tE=HAװwI[ ?2LiE-|nc5sٻV7lqI6Ș0aŽ;䊙*#WTE%;7GA]yVDyп> #++wŻhKC>~e'b^UKd N 2>K- Y!*٢517 u,]t_)nMutE#|q^)'{לc.=0XЫe#(հicݤb;(`a'YXo ƓOKI̚5j2yٳe׭RVNG\f5n,_"yKDP*ӐImRD! *N)c(+CPTTjR-V/9bK I{DADł?A?Tf^Y_*8|kl4tipMՌANX K7ͽNt:b(|QA-YU|?-izUciJd|F=0&˝jvJŢ Zg$؜sb+4)VËnHre'(D;2g2I5Y =!#c]a1O>X7%)%~ELz?{'f͚%לhKGIŎ;jkk)(//o˔5+o.E.'WRoԨQDL^jp`_> + egdijCٌG?),ݵٔ^+g?vSI~UӦA > "V;3UaY!>0JO(,ܴWУ)x ÁNd_<#鋒\({;&ɕ#Ho~x\1u˖-d .Wy+V('#ͬllug̟ 9 {~f7/UguX5(kE,?GJ{(0=* SaX".S.1;l/.:)oT*f2 eԙ pj&clM7a@wpO>f2 eKLCVgUm;(Wu~vf2(999<@kk\{ڞnNk̇?㮜Zpg}Zu?d& qP潚gɧĎ0 DAO O O O O O O OǸd ,??+22222P($.3            EA`~$IENDB`DataLab-1.0.2/doc/images/import_text_file/s_02.png000066400000000000000000001156531511411446000216520ustar00rootroot00000000000000PNG  IHDR.]^sRGBgAMA a pHYsodaiTXtSnipMetadata{"clipPoints":[{"x":0,"y":0},{"x":716,"y":0},{"x":716,"y":558},{"x":0,"y":558}]}:IDATx^`g}?4ISH$-oTJ5˶@VvGFe%N`#7of l$1c$tÈj+MZ]6\DJB:N4i&}swUǏ211 .̙38vN>SNܹs2;#yÑƸ.kR;3<12m7ugO/ɋ_k^rUqj>q ^[7%qx O}Hqx{d0w2mt:עιcOk=Sv%sXWR=NDʌQL=0m={6.b\r%ܹsQ]]_ %Г@s\a%%~5.hj)\DT:y$O?e?;׸cJls PDfV VnoŔRط>T\r,NxO_qW/O*V3}M))L'Wԛk잞Z;=byx,{ >,a}y[&?gμg9di֙GB`ٵ,8}&,6d&fo"qW&{{4a;¹~M{ Cv{#W/~ b(Vf7k6[-k)B2V۠)m++ݠi6PyVc7 kK=q:j9$l2.7%xK/س?Uo1R}Qfl!64S>|_ke?Yj[q;f͝I&yQ_ݙ旖 !}?{zɮ5^C9О<<~__M sYn\}|\&%y'gp_[ @7$sJO(GMϭڠܷڪ&ug}~߅H݁Y㙶zW>zf!7n(̶ZR[/'>}_L/ٳgQm{;v/t޵*Uy<5KMlެBq+.Jl] w=djƒ,y)=Vrxne%MVyY6'sbֿk˪Faҫ2:W_~_Ȓ/bO%C/[] <py̟ub]̒姨;IbyC;ڐ]D>_g~U_3g}RsnuWoqdjw[3LW5$=f!<: îP?~eXzxohN8n پ /?ȅ[ך)|pu5x/, \||4S־2/ߪljfI|VC5:Ronm_uhrbj{͛ SnNfߏmT`޼߸gXͿ^~/8aZH_Wӂf;XyL!0W@n *?_=`J(Wo;6SVp'ɸ,G4೪> !1pڜDS_#~7n-S˧Dj\`YTf4;mkGEEp9[Ѓxy.yihЃt7ާjո=db :OhKw {/vW!`ՉLI׸[Y_|o{SG;Fol;?J*qYN:%cmæUꇯP0^XoZ1x]pk{1&97kȅV-gc|%CCag Znn}oxV;Stmß ϟ1Kv7L@'}QdHf;$P j>8# N $഻Zy(Y}aJ6ύز\E6َ ƭ> JUK7M^گF1~,ȭz6Ӳ{%cl{Vٯ늶ߧ1M=wۿ'//-&[r[?HZl;>Lc'n|OLf_O9\|Eu9ЭRwSQ0rnljS9n| b  ZYy}{1Cg{SV<צ f^bC/:vwԶe*e[7^_xՋQU]wj\KQwe\HPH^4Qf>Xxʼ98y+><_:$eE9aU{sr|oQQLf=Q%Gr'r8m,vZS>kηu^]eN;/7kyRLӶ(4V՛ksFLV1W:Sﳾy1qLN/\fL|4:>| e>-DSҦlM/T~,B'v]elsުb*_1'"B):iU'!,sx/ӆ}u9ח!/ݨ|zv8`zogucfh:wU =i7yǃ2,VFf{܏=KrN-ʍ%?IXAϯ?J#A*wZpavmj_FS % AVk`7 ̰$ns69D**;~ʩ-٫'{߉(X&/K}y!5Nz:mQ)PqQ[괖tΙ¾/̵!E4s/PXSy]ږ} oWk:˧}춁S9"=7N͹0'R 5Y2c/㺜s]7cxOɶ0;S}u}Bڞ:+L/>uosLv)LY9wk2 U{O9.͈x]0،QfRUOY1DDDDDzb\HDDDDT^$VEDDDDD>0`LDDDD3DDDDD>0O~bFIb7f$Vf """"":|Y3IDDDDDN^z)Νk&(d`LDDDDtfPWcf2y|E59zS26zR%uqiύ܇NF]NDDDDSQטbgZΠ5~s;U_osh&>6}djU.!6⟦4bue"""O)r|Rkts5DҎAjr dSG=oƀq /Ÿu^ 9czgԥ]x\כ:[s? ;Bk_TҷUϻˌN :"<]!d0n>og|]=Luڷx~~.FuciI B[*;S"1}zWZi2 kp53XFX# @]'LV>Y[+kgD?}QVBԑi;TW^0Ʊ8|K~urmq啯X}U@1zr?ۡ2/Z'VȌg普2xe#BaSu_9~GKp :Wpț@akwz#/ƒ[E,IDDD4Ud83i~/%ZY+D¡nG]r 3&+uȠP89ek:`/-DDDD[nէ]@X;% \(ڗ_:vvmenǬ.*TS*@vvGqGfʌQcKfXK}mMb磦4@P/Zέ;RG]/B!ݤ~. :L1l}"1~YDDDD3'~7&2t%"""";ƀFDDDDD~0y;w.Ϝ9c&(U%\bF(UfRU7(EDDDDD>0`#[jV1U0jkkgʲUUꉉ 3Z8L`g a߹iA_Cx(68Ǐ{.W5XmvNOѴ'rq2+6 $; XSeݻKdsnFQ@)6L;hҊ%ce3?&5:KY< [%eά>e:5KvGuUzUuXmx:o~S_Fx:YOmt۴l.ہ52UTnLԺ׫߄5vT>iQv}/e:vzCJS~%vvSy8y˱=Y2yeQ(z|dX Ȅ Z6K+u xLؽ^!K6`}رY-oz]u%<u`80wXazva muرE#+hel kdGlyݚ=RǁͣX#LuDYܨw?!)e%^wl˾4>|{k$nYy<ٹA*(]L;wznL\k6LPY"͓Lݫq \-wؑf`2 e xW6F9"u+Ѽn1>X;aT?;kv1+se&XRu8˽XdE:KcMbe[djtk^>a i=vD-_t;n`v7^ĭ]nmޔ/,DDDTI߇ٯs9= d<*A> :0T̃5p͒Z8|uwc3c\ˁdնXleO^AYYnݶf t(FFhUaPl"ܴz)9yd/ey RcG6TpI^n<`*d\MJu$ϺWޱk`tAb{0IUDmMsk֝%h=+FC֓mYOqnmIK0Ux.}!"`co>SDM$,;Fgt]u2jyy˻InrgݒA_"iL_p`_=ș `}Zإ]n6;#Py#7-7m\ݫa֓վ%0]۠_@DDDj```LҴ!2ٲ,?$*V-d?4xV7&""J344T 3MocebVs:S`hFc3DDDDD0`&""""f""""" |.fh괴d%`^`#""""'N0cS>DDDDD0`&""""f""""" |0`&""""Q=11aFIbef|0`&""""QVEgJֹj+ɸLa{x\i%fXwc).ݎ8..` U""""2ʣKΨ^eey`k|<}~\$eMvdh2UMؿVm W6c8Fl]__m*藥6׹mL`ODDDTU_o& clľ[x݀%2|7V؋ è]3e8 Xo_*'7cAJ+`\~p#SmB)ל3EZJcjH]N9^Sr>۴7ΰx!출'vHh݉}8} KphK[ݟvAeؒi5LIKki9q_S rSw[.me]FDDD4sdHf%C80T%Clʥϵ^8E˹qWnV˭D'YD7 """"0qӍ߄ϙ]wvMΚäuhlsZ4v[3-gS{Xwn6E&tn¶,3"8}At[֙`،5VMuڱXYE6Y.3.&z/Kj59ecmVo""""a΅Iu3Q LYt23DDDDD>0`LDDDD3DDDDD>0`LDDDD3DDDDD>믿LF1]N>q\pQpB̛7ϔ_SNNsz6CňA}QgW_s"ՙ3gSO ox)!*=ի^Yf"ʅ||L0WOLLI*%92X&bʍ,WUUq!A~Jʺهf""""" |LVZG$Q4`^U[Zgfdm\6M}[m')sbzS#vG2"*O0،Ǐ 6ctMA ػwIO.GDeW^O?m|<U]nD7`Uz{Ѥe|W%?#$ 6Ƴϫ{ |(mSZkxkKaf0{ׯ>@6KyMٳg _Wf27gSZ>vC-9mB.s`(os|sf\>xX.U'a* L mPF[wT9,3Q*ϋ0Xcg;~HX751gz_}Hl\r%IA3Xyei2\cFȹqYrjajd:und~géhbKV! 1COŮ 4}ߍ\+IV[:f'ýPԋ&/c2 O7` +θ\/&" 7oެrM˓}a5r9n_['օ&[qtOu6wͰa,ـ묟,Wm\O>v%D͝;WnɆVd58ܶ\ ['I<'>*kcm ]>8b0Z ʛU7'nSTcccXxl?Ƶ^kzw+ocց(O<7);w.\bQΜ9cǎa޼y[1bGyL/#[,2xL.2Q]]r ߐ-SO~8p}OZs;0ӧO#ٳr%: Ys#*rjoo/N8aJ( ,@[[[VbafLDDDDf""""" |0`&""""Q&.b:u .\0%D+yRGTNx~'\\Uzf͚eJ(W:@!*<MN.vN=-\P?#7?v\Bew^}|0`&""""|يU∙$""SyFmmLQ4`^eNlְ [⌚[^h*!*}HUU"D/R"}aUa*NsK:M'ekFq?~+Mq{>k6üb3܎XWnIxn6'wa3/Œ ػw|Eڛ LLL =vDʊuX7%m 09)y%kuOH CmGM"*g%cI@tIƏl]$eEr7aMX,z8O+O]gUingUv<AoZBT #&hZX3оmBjU`$O\Mdz}^ ;ytץY;6aRfN)KkuԻU2n%؁5Rlg)!JS>X XW<5rvn0bXVo.IUg-m mػzD:svtuņ72˶ƮuرğR"j&hzfFmsĖ͸&3CYaun;8U_lP r/lyW9e=`o؅5L;·zKb$eM8,j8y|6}gۏe䳆*Mifз,$'?LXc@$xELQC0*g1Y.%:s N=٦\OIxVSDگO.Y7gXD4S/mL tҜFcVdIVWoÆԨ>\Lq=G[yff m}`Tw0~oTBadyNS"ʣdea`T}_rVშkJto'<^Vvwa}V嚕.!4!h&hsOO6 EKIJGջt1؟Ht!S-\Բ oa`wk'R` K290,QXwl^յO>뉓7g@3yꤺaBȰ :@"`Mt" @5CXwڅMy\xϒ M7(@l7+ٜLg U˧n6 m/S'89K662ct#[?yNMU[^Mg֘: m?XDQ'OU@u[`D49.q~XdUO`smn^;Gj!XgN~p8ϳy=dx![SYCDdaafj\C|9,\PD3gرc7o)!*=߉&'s{1bЇ~2DDDDDes1H?DDDDTj~w~篮*3YOO9?u8"O~̙3f2%D;rn/F 3ϰs;w.z{{q SBDZ`t7r;rn/VfDDDDTxQ 0`&""""f""""" |.DDDE$Dž L 墺Z?^fLDDTD>,j}?f"ʝS⍷#""$`(S_hJa~#ॗ^2%.b:ZZZL ^{"|<xӛdUdݻwٳXzH߯H$K/7t)%""* &sId|{7, OgRIf!p6$Nq[Wբ6}XYD֣FAQy-qlƊq@հw Z>sd+Vڊ*ew<ĒZSXlzMXs_(W{ A5,XaՑbI%%-/Jz0ŽvP˚Y)uXeM;r8˗5Y43aX0Ӆ_e8;G> GD}~|UNT" ~i3N2夲o+6ˇV7V%Z`2æϙOrR;XMueUwXͱ !|vY6b|:!FSvj^ QZ{%htl] չh*.e9aE-slԈ`1| H ^gkj7n =T=}Ta[HDLPT[3D%211?0% R&A?0،;$R9?FcV\eX!. ;dWv[A7VMvoXQaQǒVcŎsZVv@{~Qes;w%I2/q6/f}رn#6Q{~¶wA{;4[ >xn1]*?+tHhVX߇[oSkK.AsD9={6կ~5)hq)ys1塲f' 1ܭD iƀn,Q 8^_Se|/jtk6g/^> ~?a"@\,3|˗C> @Q o}lMr.PK%\4;eWnfN,G؍֨;aֿOJ{WX$#u(٣M@uXV:M9%@~YZ d=ҬDط;={`Y\@P2̒6pɨ`xGOF3h.`Y4`vU;yxI5Z묾~MYh:lZne^jcmDk]{7`)_.ǎ[Kr'`rP;3~O C/k0>X`)8to %6 ~եD ]nZ{vLY(Gpߗ[jTg,Syyz(`YIXcǎ! ޏYo|?<d$ئd""wҕ"{՗ekj_BX]?Vl>{.|u;M?>QYM.;:O2<\ړ$UoG;HqY_!v`-yy.eøb?hpǓlkyF4Gc~߿gįN3w\p %ŀݾ0j,K`&"‘@qH0s1`&R3?" , 4e"IaLDDTDվȟQ)KQ>}X gϞ5%D yI yL7a&"""">DDDDD%f""""" |TOLLQ"""""rXf""""" |TOo,\{'^:gJ-x~a+M Qb܇;Ni3Oo#BotpMDDDD4J0߳̌eGiVZG$M_% 3eSxsശICr Z3-/>3D>n?̤*@8iEkb3?+l޽,2GB`c0Pڠ3[ٍ]v`V+>ueRU3߭ayֳTlgu߄7a*[eK<| 9\m~mj8MaWY S돏'(wrԝ=VvBݦغo+^;-el嗛1Q|ć tAcjl6ghT;X 6cTy!݇Meu`(dUc(mS۵;֬-&9({ΝٳgqS:͛7 .ĬYOv*F o3Q)Iӟ]v@4^b|GJH+_~9eC2H\j|WJӨ5S$tS)5DDDD%VSScƊ܅sflzR}0USN/ބֿ_cJ(W *-ۚV-o9 DDDD+pT_mxg1{Z,Q@\}bf0`&"""_>J8-0݄?evFc',eTp;Y gps'}ǔJ7q뗛 EUx䳏b%)w `nW#fW Sc_݀c g-XÓ^~5<pM ]OǰˎuX/kX)Չ\i3`&"""fQW/ũ^ćn|+]`ˏ⩹1q,sͫbrs[oc2jv|*)*ϔD×n$:tŀh;v|^1`&""">5^(c <53Wc,`Y=q,+n薑nK/}_/3`&"""{~t/9^|q\xx:ǜ9fI71~^aX$u˰I ,_imO܉[nȝPǀh{/?a |D a̮ N|2E<[Uhƚ}+f"""in`Sw`,\dtѴ`7mEdmL[yj]v  ލ..i3Q UWWlm!Ԩ 5xm;m\2Y Jh3St1̛7Lf"""Zxe(j~xpBSZ:Uwx;i& Cpy󉈈(sg8&&&L%wX`*̚}bĠ0Qe(V.DDDDD>0f?"""""w+3LDDDD3DDDDD>0`LDDDDĻ.3Yrh""""V|[*NLDDDDT $`f """"" |0`&""""f""""" |0`&""""f""""" |0`&""""QȣQ"""""JU_%""""TADDDD3{g" ɩs9={ gƬYL e[VӧOK/Eu5v;v 3%DDDD 0ڵkbʕh:u /6STlcccf*/lJ(先yyf*tgzWڔP._^ϴ OvGD95;,ƀ2 9ϝ5Ɗ/`SݣU)K rqrt&K.1SDDDe<[ /Ʊ^sAC>3UxY//*|oB`"Hi߯DU"IW%uZ0Q&0O+~86;UWWak0\5ϘB˅*|}xjx^Y)1%T\G>Sg' SHEj4OsEA/Lsy LVΉS1ًxQGOOKs19<ͫ'.‰NNGƍO¥m%~yz,CDD4UD|?ŜGG_2>bǍs`N|yV|3ϏϣM)^Ly=<Ξ/r}7ثyqؚ[ ~תUr_GLs Iooau\Ư|#ђrne\Κc]vxd?Mhﯛry z޾l?22|KP?ҁ@,uGH֓#}xL?rM]_L`-~0/J&e+߃/k/x۟q|-.O jՓR3Α>:}i.W9izky.i]qGDD4y0x4ΟB?ۿy3xc*d5}O!pfH;fõ~.7.?K^sI|U]џ`f_y"aJo$}.*|No;Gr|d{b9QrU^OP'~A2[G·v^ԓ ?;lg?煀U_6M{?m^K|uSG_`rP-~5}Qʂ&Iz'LfWY׼#d!d}OrSDǘUS}}l1YU?Ît EA2& ʉ_=٬OʝÙ1vjOcrߞ'_W2.;ޏIKFCdo>z'Pg&Q bGO?R|xy\yfn&3~RA2yȶBO@[}! mE+CrEQ åu7߿PkC/y.?)c|f~U?>ܔZ/߯ :غ[~\Mˀ U C">/ώF|ß'k|Gn` h(V&i6ǜx_D нW>Ospc$\ _97-M|x ̜?)`gk9] <`08ά&~MΟ׮9/qO2\7)9y573: ,Qn_x!~U |pbu2/J%Yegeźa|L B  eo2rJ=o^o ('E~UmB.C}>L?X=_&z֧ʥ?۬չg~UgwCxoN{%%n^n kWL/eid% 'Iv}^i>C&2 5$UMZ5?a:u ϟosLz6~~9,˧+N5›UL";ypkIW%uZd]rI?ELC1`) 0=yLuϒ/x>kOJ77\ qJ3e€ya\ )3e"s%0`BdMGvsa&"""kΝÙ3gc^y60 ߪiZ3FDDDDr 3^z .,ԙ .1"""""K9>]2|0`&""""f""""" |0`&""""Q}q3Zi`݄.^z1nb=hlAL؈OUU=b-H;2Y*G2_-ߨ "hWURG.YE{b^c{.7#~Oզvi,XOc|[h͛gF+a uV "``5b(w"mC[0FH44@aD0813GʢufY?v=Q ixȰ)@ǐnn$"""* &Sg,a 6*p/0_&tg~#mƖ䀺#C}})N ԁ;3nO\V4 Bu+-C#xKV{.M߇Yg,  M-`QVo 9ACk r[蒰KGէ^1a R̪DC=BrV4v]Pjڶ>Ȧ./HTNPMv&$^R߉!զa`n!R/[G/S$5#0cWvtoaoFu #V\iZh^j D*7}Ѩ_AgT%vX=h2RH[BO YYlu7nlJ{;녥\աjT4XkQ>oCl*mnmX?Q1Y:aZ]2ʓ@RƖ~3(FU$tN@Kf7-#ü]@@C*p["d؁wM#H;.ֵ-ox1Jzȵ=DDDDe#G ~sÎq kD%#<%jo ue;k2ي!_CTpſK#ooBy.Xzwu$PKΰ{VWp+{P^T|Ĺ""""Y3YalÆ_Uj5Zi@<KUn6/[M+3쒡vmД929 ttmD.XTZUԈF+É^BF}&">]ŀG_*}-ϟΟ?J> O$""""*{WEyo4DDDDDwQ=LDDDDD>q%""""To\4}MK3f=wGwٯJHOYG1ݺ=mԨ)؃sDDDDU}% ⶎtt܆ǰ?_j:R;mAy{r>[. ɸf]21~X C:k LxفcBЈ# U^tHndL6>^>;1X%ңiH:g[ڎ ߱ 201\ѫn1ͫaM6WA;*deu7߮WyF Ie|g-°Ė(Fd@L=1ຐ=#tU`Wd]LZ'FR&ʃu}8*Wytp_W d%CmEw&g@0%kZcQY={4]2zhX-+%C6сtH+Oڈn9a@G1D{P +AZܷCtp,Zwv!KV+rcQd<~p ;[ܽL֫vfnG_PAtPzg<́}[x}[9aMD4SW%nw ߩ@wXFmPT]}iޮ\-ADDD__'n&39uN:ŋɓ1W[[kƈXN8a} _~9}4-Z1̟?_?^;|r """"0`&""""ta`LDDDDS DDDDD>0zp{%;=cil}{cr~ŎA9(kTek}.;iOZgÎEޘQ,q>O}=coYg{miOkl ONt.k j{l~"w^]kȩ~?U:We DDDjy\ZvсpfcSZ<5Og=d?~4v}MXv>q/6 c4 `FZͺZgfyhOCtCq2.<7-F:JɉN{ǧ#hAhc72&Wkb]}\o`eD=#WOlh53'NQATpy!+qc1c댨<ݮ <Ѯ %sZ< H?z갱-=ʖC^YK} !zS@H}11XW'!vATfu&<3_ %:V4CۥgzhP_F*(֓;>T/ ~}+kwfutQ*s {;]oaEzleD Lܥ3Y@NbFڬb>lopAHd'k FeR a8بD9mg{z0bLsPn<|n2XךHA_/:}{!9zn)vVs7K ܅=Qެ83򯕵2vMD]Z 0zzMpkEF+CF;Q?ҥў`_=̰2Mv"5Ntv}.x7ng#,>ء[@Ftt،.ֳatcc?,qn1#:?V1Ra%钑Vm z,R&}M^D!1RoZc8-㘍x3gX)skcY !8$qHnnK24$ʼdٿ҅C}B(ԁ>z77t r-FZU-al 0ڑݱ?ȅD~ ""TtoX1`64tG1116}A2֐Q<,Y҅v]mh YAR e6ªR*?Ņu&nf+ +0dd2êMO r He^ͭ ^c~Xƹޘ {ѾeTMe݇|Ul<>~{ w.<6c&HA pX1Vr.:7JqBbl+Xm}Up&L;KF !ttK--M0ãjfFݠQ5VvNiG0؅Ѻԡ^mMN W|f -5l&H5[MֈKFZO B٢l!-T@b6[Y ŻKFLcs }زw$ˌy`)$i6huCRK=v7"0[vׁ.8Y.KDП᧎gtF;BK""o+>^ @vvף/(eAtA: a{t}M,ZI}REvj\2&#t۸Ɋ `ڠYgM#mvjՉ>|/ tJ\V^FXϓ zt>%TK͈E^.#+]}qAL7Z|]щPU-V_^o"""WuN|szN:ŋɓ1W[[k(k1ɘU_:14(\xly9""*'N0c9}4-Z1wu;w*۷fg w2J+$yU 2X&""b ɗuqܐ,&-Cw ""`LDDDD3DDDDD>09Gx݋VvCO㞵Hgnkuk'd]2?<ƒ~z =λ1W9P8˚uf S,u.ZݵM#h] D(l ʚ ; ~ 4ezt֓ڞ`UNDDDTf@ 8LOv 1+OG "}-ϟΟ?JdMf""""" |0`&""""fR >又fcsyX=cil4%.1~Dy$QިK]ʒ,*:L=z#hoLk-eHoCRhx/z#"8Čt=|<7Mc{p@x{Ċ%ğWxG%<֨h<[Q&Mm)~5jZ (݇yqvo Y#)'`xXŮA bKFZ# Bخh7A!=@kC0XvAݪeǻfR90oW!~+v n4ڮԅѺԡ8 2{>->#Nav_Mhݔ:TyDDDDP…X<ELcQ`Qz_f j۠ \u@*]2uWˎbr ]@ -*ȶVCU.]Rn6akt ) EV]2$SVGAB#ĸ=j;7ثe;SY}RZIVۣbRUM҅]HDDDUp!z_ Gf1ť<6k&Dӈ $0 t`gw=Vy }w. =:D41vvp{3&::6"2@.d_'2zr;\Z0z; mW_(F$Ӎk6FTpkeɅdUV#|Ƽ@}٦ڴo*ߛ,oSGDDDAս;q7ɩs),^'ODMM)-Z3FDDDDr 3ӧOcѢEuSi߾}އh0`LDDDD3DDDDD>0!ޓS |2T3?oN0G)^14$([UՈF#;sXO{b^c7ʍ귖qQ*J-7˻>PUnND4Xm#18@Wo@RrܯPH{x(*㶤Tڥf8qk٦$OgϮVn?:ډ־&GWA?q/-FhgYV&jϲ[G$ t`H䩃fP(zi{գNhkvFщ0D쬥o᳞ͬEw6[Qzf1s% gb?2 WXa5e;N2Cd#S3oj0{rA͗ooO [^!VΎK]j<~ȡ,BQDMIb}n&lFކ6؏8'J^6%_ՎvS3S3-u\q[^2R*ۚ.&^\[|W/M$P!Vܺ^}뺼xu߻ivݳ=j:L} [!~of풲wxϓ?zR]ǿ_=~:n t~vYyLd}? uyxp{qofg}?x7i9Tnc-Kl}SlCCwT}cDɺr1NjAu'>WYЈ#{- !9-@@"m1$˩}iJzj\ߋ.A{J;w#0)!^ZdQVV^}q8۪c]«/V`}{*c7뗈q{ѠvP:6cP9upx?viZk}뺼xH.]GT}It:b^R߉!զa`n|̴'˽~di_[5?ynɢÎy#_x﷼|^dʳ=w;T? -!ywXjXM %?7wcGB}oIͭ ]^I#C&#³A5 K}38zZdhϣKA}R#ŴS~s!*>`sGM-؄AD+%X6hʜGQה֗V%Ejfh֟sRxzo.'ː>oz^FXǯeLeX%*W_xF꫗ -G| P^WྼΨYzzVxبW6Z_#]w+'au5x%]}1Ak`g. L*щVs-ЪvkoS#:;|Oju\% A5i<~4>[wyQ江u| U{7l&ΩSxb}-ϟΟ?J?xQA1vђ˕3t3\9"@TVĿw!l(O a&b*0`&"*1$3AD f""""" |0`I!ޓmzRb~T[n8{bM~ŭ~UKdws;פG'ڒt^""B W 6}A2C4JuV' 1<Y-h缛ܸ7Iv~z;ղQtυ`Gщ0~1$˪}cJ4a[Agh#g֯Ӓܞv\ A]Cz=y-ڣtZ֏zݲh+F#ۋAEz'{nǃv/V{!c6Coi-)xRǯL2=Z?QU0juH+wtuԉ{H@x ?|P O_^u^|d2ۮh5TlbTMm~R~ãIiG0؅Ѻԡ>׾S$-+ى:+OSjOg ~RШ%GSrPfP1Z~\xVq;b!%]Թc˖>@wP2܎n?>'c{=KXDR@Drh^vwY.B 0x֮ Zً F0Kh5LM;B7v>s[oB.i.{\$5au{ mW_4F$ӍkS{9/^5/I㹼՞D{$CDۈ\֪CBMKNQ/G#旅z>P(n]rq10ѿHQgݔ|GE~W+r?_\0^;tw SwSV=/υ~c{=K@z^_BD3Aս;q7ɩs),^'ODMM)-Z3FDTAb1DU_;1T/DD9qӧh"aߩo߾ AD4X 34g]L73yv!"" |0`&""""Q-!""""t+3LY!S.z{8Ty|c݇=AT?/Fǽ>#OғiѧkFW/wbn^b d# j$F4ƃh{:땀>F;#ʫ2{jDڛ[?hڵ =:0U9ׯE%x肽?hkZM9ؖqլ/֑0ݯ^J]Oy ~}[."""*8` i ,d;'ESUK1ܙY@?uzIJ5Hv&=N_yR[2'Šܒz)r7Vz}'mےu?)s/c=]mDڃÝmoQ/@LC۷ۏw<w["nN[kfL*4FdP}Z/CkJVi*/Wam&+;^ -, 2]2:$3EvŨ\,r0ca^2|PhcX0=`A V JrK;d::RW]2ɲjjPWyW =]h;s?r麢.tL+ڎS2K[hf.b|܍!"=`AtH+dHWEC]JhڈnaJg^cQ[yEޓoG` w{]63"[2IVsk՗߬u`0ud+cZncw ""؞·{ рԘRz%+D v_/R3օdu湩tH\dU.lAXڳTl䘟#[o?qOݤbZO^S a1iWo5U-lR"*j=!SLF5\-ADD4Ts=:u /ɓ'QSScJ֌QY88άo=GDDD'X~N>Eall eϟN{΀.T,QbLDDDDZzQ:a&""""fX(EخʜO'QT@<=[?{Or{pZ2U =UH~2[Y iպ|\IM}kDsAouǞvshu]NfN n^^#zQt<Ř0c!޼ ʹ%=Y}Gٟ2ތdRxI4jy^(S B:EP.OhEWOhѷ3Oq44J{M>I1Ӯԧ}DDDXb SB@ .xzYs#hlWuv;؈ $|RsZ갳|4m+|IcG[QnH7ZmmlOǼV%mƚgt!Sz]g16}2?]@}@(XgӅZ07y?bbǂ邲vX^[e'5zW?ѹ#""U~~ܽgG`R72%* > BF[1Ҵ bB-hÀYw75*aG^ ٕeR߉A$;%3:rH@Nh[tޞv+C5f{"Af,gvzUΨ՞z@I =3c(,>h@2~{z=~V_dZ2ix7܊#!Z /`F+Ӹ\>* ,hQIl'WCGFL=hߢf0O-fGۀfH Gg?|;:QG490jCK*сۣׄ}b ը/4]F=*@.yF2&sJ)gKo٭s@3ZzM_gqHDDDWm?R- ܌~pyQJClhTJ`FZТf;:JPG0vk 3Qx}[d?5XN'tt9 CLk|tNuv/IA;Zvl1ױ8b1,N,g>ѥ$!U։!HJeG-<r`۠AYixor{1Dk:+2?ٞ@ PX d7xMwCݢrLxm %etڲ`w ""~qw=1Ā"V.D] 0UP \Am#MVpGT`d_%2zKb)!lv]A5jt\\h# vCQ#ePgf+sAd[o{{bYeEjrUUA4apcO[[U%֛Wn7U׆֒l/~,کޛ&ޞw/oR[;lşV DDDSu=LBSNŋqIԘ⫭5cTrw T슶|/E:lP۩֗(Bvfݟb1DE:14'N>}-.ϟN{΀dPww`YE`YDG/D@`y'e""bLr gpHg0SE m̳ """*DDDDD>Ϝ9cF(Uܹs(.c݋g^Ib{H;z3lʽ1´TDq,ۛay'Y4Oiڝmp}-ϟΟ?J{eL0H 3j@}N~#"""J€9!>9hcLDDDD3DDDDD>* `Gl={KV{VeRރW%!#=Шיs=b;7:yK,^r=^Zh&(0=2L̢\YL)\BDDDD4mT9sƌQs611""""z39]2/gϚ""""JI4$>8m^ea+} ǎ3SDDDT.Rb56,f0?^-f&,@DDDV?ٳg)* _~>3YSy6Qy/ҐLⴙ{MGc˷ 679sR""""*rK9_dМ fs$oم4$xl*r3m]Jc&bKDDDD3DDDD.(,Er1??ĉfd , ᢿDDDDD^x """"2W 3Q&3KLoDDDDD}2`LDDDD3DDDDD>0`LDDDD3DDDDD>0`LDDDD3DDDDD>0`LDDDD3DDDDD>0`LDDDD3ӧOQ"""""JU=g3JDDDDDkjj(9}ӟff"""""/'0{&B޹s066g… h͛7 .ĬYL }ʿ2Buu>fL?T.r=v|<>208xJ9x16oZ{W{0I?).2,^X|Ys=׽uf 4^yŮ2d{'*$9%K/aCT.r=v%X:z͵f$`G&Q9#$Ѵx`055=yDJK|G09f2i:tؤROj L ;qy44]pDe5~ST|x?r Gnef4Izoj!آOQfy=zQt8?l6\X.Ǎ=vH}Oj:ȼȮs󉦂A6>Drh;2?tdL} Ѥ0 68|fM;EzG|S)OqC1`.>eA{x4gWm7ŭ_zq[ޏޔ A a=FvIp a%$HA~7\vnXnd>rsyT$KY<.fZs~]1Ts\_@5D `cXY(*xVv|Ib7TI|ҮZ_ s1$upo| 9N:An}'%*n")xqdMpq X_y5*X֯ n]2,MͿ.X|9^cF5r}\[A[o^ɸ-4n񁔫x"߂_!v#nXq<ؓ4y -rò]Xs|/;Gp /&Apzf&]v#NނcZ<ᖝ&*$ €[73Y& sE×o׭A9&6 Hkqؿ8;׳#Mnx'CxNO\˟{(9{_>J`B+ݯ?f"*>q'e.7nAbH h|>Qz 2wbݏ/cLSLxkbߍ_kU@J.hYͲxMηZ8x%EP6].5@)_g V</.qC$mrW.GY \PUsD([駟[jꪫ̔_~f?9s)w&3qK&c_q3ETZ;T b^ŋu,3TJr=szXp)6k,x{gΜE]dJrK3|T 4Sȱǧ<6g)M^sg8OT2r% ~TdCW9~/\ɛJIMNrϱiY ٔMsk7FiAv޽{*̼KDDDDD>DDDDD4H 3jyvrGs^0DDDDD$N89sZO&(Aʒ\KSOԩSfv1xGQ~w __3\?8^yZ?0{cf,%X.#K\AfHꫯƂ tD-6*K/`qկYr7qLLL@={,ND?nvg$W;2lf?Ζ:};ѣ:rNBcEۯx*`(Lѣ5n8qرcU^^&0g+_|Q?Ixx5jh[SӜ'NjD\z1 [r>Y0p^#Q-G[װ o*GY-,xV&>p\%{duqy㰎yC/{]p:b^srX=N9]U:z]}*I)B1s G.fNt?{dosFa&X9th|,b{+hmp`.Ʊͱco*|*++ݖreyϴwnUMbHy`܇|޲IF5m ~FƇ+k:Q.N @nЮ|l͊! daF/(͐=ڭi.6 5'aVj " t ܡӤR?/R4y?ADMabmq[O<]Vy9ޑgKֻ]^zIo>.z>@l>jq^Pn{kSXylԛ-2w8q|dc`j%v%ٱ uιY0  FaMm3!|D}!?\?n&n p=?lC*R}3%Y8:gGOi"D6*7tlETǶ[Xٟx\MlK.`fs''h3) 5}O~~ޥ-7\;7wyz2AH!`Vf"Jd#Yߓd{,R|qK%3[7@Hc )+QǶz}[ dKgPsa'Oڟsj!>}JFTMJ-=vSC; H ?Rd~콷uC\go3Y[/;鎯96!VWubqo'3?zU_ܷ{6>V?Sڹ<5O%aM+T~d:u.4B/ɚx7n]*sS\gmLt0}zou?C:q? 'ک+3f9ֻ1J^W|$ڽc[8dEBP6Ӊ_WdvC*3Tg~C>v[gķos=:~`fS{;en_$ ͦk6[Y+kr(w.9ezqa)9ʝ֯zFxnp64 |;UD}>F8?+_frFOsǁaUQ].Gԛ>HxU{l\{ѡIڻg;nZn˳ z#ܲ^g yS1z{z6w'ue۶>vo0&0u8x!sBM 7+ |Mt%TMe1l^/'2x6-^)[+ҿ~o8sn J\fP%n"2xqK,2؟ f_x8 $ݗB`!Ԥ _&,U`qX\n~$[L]5b5ꝺ #U9yRu3 O EشfkANׄ/72[p^w8M4>c:ЛGoyK>v/n_f3 h |_?ö$8>x  ̋g_|S ycΕ;$C~uѹ.V!g[Y;jUPhɷa,o0i+cҟ/kŚ'tۿn/zAzǹzz煕꟫;.kl3ARi Nń?0AeĴ亼cTq,DAx^b2osPe"q݄5c|1o +ӯts)o_uM00 d;/vzPv`{Fye~"^`1 zdo yǶoV-&SMlB-%{6m _z;ovm{\ouRƍUԵYq<߫]Ͼ ]=BVa‰lg8sc/& /2ٿFqRC?Iu.$Y_\.-snrjKvFO`Tq}e';-XUn1 e<el ysyvպ#St7o;/1#c_t+T#T~pA{Mv> 䵲8bڛ8/xIObn˻Ul B{rɟk/=Yf ]]vDCDuj&ڪs5])a*S sٽ:Rϧ˙mWj)O{` suR?ST@:#o9 J)\ އ$1#ۚrr{묗zUfu#+M[') cqdFz3]7k>* ]gOloȜ‹tw v /\L\O] ~>T4>$[.պ]Lv}trr{*8E3LVw!V>{Ad8@ et3!*h/K6zـ}賿YJm~␓>\{~eQ\_x]Tv:` \ڃIKQwQRc{/RPdY_~ D_H͝^;ǜje\΂c`6^Y!oi6'"o=ӝO/9,x|wYzޯaTƓ/osz?wϢL71vԓ8JX/LoK#4ۋ/_wo_M/ޱKu >0'{sƁBj_sy :nD8ob҇(P݇>mN!S /ٶs \zLʹ\.0Nzf^~Q<+{{'@n01u7PBXrߦ /Ɏ,q~ُ6=f'x~ /@`f @`Lu(D`+Kb2_f @`(?/B; ded)-Ǐ:,;NHD PE NKv~N9[ozC *d{L}a_=b&qQu'@΂-@/;|,l8MT}әFױo1zΝ PmuB{8;~p7h;ES~chȨ% &lKxLk(}ͫ۶:GW}ʷ}w^o[oO`6뵅uboT>+o;:PNhQ/EBDh,]w!}kw# s6v8yqZ  #(2G!=(g @Od,pYQDm'6K2jG¥Я՞nB(}בk{̆Z vNsamDe[)sEFov<7v%0Cl: }sfn7%G/XZY}_sdSGT ݿ~{"źettQI{w;}]gv}_/ԴMLt}Y.Y㋎|1ҏw˦ߐciݍg ;'s~ta,lӦM??E<vm/rپLSufnCWz~0 "5ϴM8G;вKn7jj'lwl'@ޭѕ)כ r۞]5dMf[箓CSlXr2mf f^BhںvufZi7:`v+z\)ARA NRu-𘌸}%d˥B?@^=᫯NǁXr'NE-UiƧnԜ[xO*vk7jvy+ :2҆jeF$0NݵTKBN}Tc]"WB[9ڑfu-T鎊vZGt:՜l9ÔOݥvf%z ṇ'xp9Φ M8ܕM\)oʽиcV-k\:˴N3Kg_o7k|k22foLU̕6x7gؠvXdFQ]UN^$Toa­ ͫ|-֙j7x-#jYsڢ-Zۗi3o,YvfS̋PdV>mKbLWzhrGficFLFײFkD7{\Pe*+VfUaZ58 \Yy iKKsqQ nMY,a]$y^vUjꕚf[,ޓ~dlSb`=Z+Vw͸)3ƌcKK5Jі-S͆ȵgnokYkf_>8!-ZVmPc(5a7/ο=-Z9\C+3PJK{C:Z;nNb2/L8߸;3%$edCfX6JҴ)lGkS9k]5]˂gzMKum4hk8 &[vFzK"JVifľؖU|/tK>,;joCI?+~]f]gMhTYYתLe k@I+l?\Xn׌e#WlťPUHWWrJw(l,Y)-:;kއ6j5ͻ&mSZ9[EÛpf,lQO801V^6}N"_4Y);zr8m{׌}ږȖ bsK9PJ͵ qI𶷽M#G%eBoTYge_m8sA5a"Cn ( ,Wk;@`\m̙mk'I 䵲Yi g [dr6uf CZSt NR^/[gSa ]rҩZWjaZ`H)n \ŭwm\JsQsEwjvT.֖-Ui'#ZFGc9~SK Df$M[ݫb miJ+qf*ԭU%;P@)+.UΥ'U^-|Wm3#{fZ8-Zۗi3mEI>j6]Xǀ3?w?<ӫ7*Ӣvڴ.oZP7Gfݾgcfϑ6>uޱL5s+:mtޜ;]ڔi{;wӭ-YZew$Wt-k5er[oiOvM[Ǜo6ki)gy0ԔN`l׺iS492^j6DZv\s5dw>Q5 v*ǹ;:Ej$l,SūWjmmزxOę E8٫Ε-Z|-3wkjۢaMrKU[=v@ixjݡN{̲3D Λ+L8 |^SI4-fhIw=t"Sn;-7/Ӯ٦9*~)^A-Z`)n`-;USûș֜ {5Gֵ;6^r{vh)6W1|M*ݖn#tFK6Aě(n*b߽'δ9]gEpal@4!7wZmB[TmZSw]< qwf֛dqO2{5aBa#6.u9N>Z`+>̦eP\kOڻw4۹٥r5C-;jw/yn՝ԽA JnuMQPzL]v/Oߋ0?;˨0P<&٨;ӅDZ䔗Ț/lPzeЙĶ/^HM VRYtg&ۥ)5煨g.f;rZV](nqsQ]23 #X Knuµdj_m*2 k[ONdѩf,w0_on*/V^gd_k &+N-c?"ѺF>Bjy_s.p*=ǾژuS"/>fbn>t.KmmSo,̵u:iZ6U3U[p.я `rwQݬmۚU]V&sC5m媛ky \jbׇEjl ݋ 5mnNُN8G;lu~y.!SZ`H)]w̏hĉvj2{/Y'Ov0;vLm P|~9)x2">c% s!~rYv@i"0c߾}nr܆J ]+}KرcvZ:tȖ֙g }RsmŹP} Pf @`%:r^}5>}ږȆ9g3(Oc(yU^r{?f3߻YwْԸiY&,3?-=q曶qn&[sU5v @.N6$dlܸQǏל9sPkuY5k-+v`.j_òqg f ÄLPݷ^ͬPEEaf^ %G5rHwxw(dAJ-ҫ^gرRӦ3 [We``Lxigۦ3۔[\A Х۟9ܮ [v!(Rl_sнK}!ik6/X2W{f^fm[.-ny.۬f_vۋ')-k{nw04cxVjuiΗ/=fxFw}Sn6TmAH9P$'Nг>k22dhVn2m^Z4Ù\%f 5Zv}.ghݪH8^Fjvil-;ׄN5O] +5׼:&,KKmY9ڸ"`Ȫ\-&433m2mwESrӥ,r~fhujTrJy/}&,k hZM봝zx˓ ThòQVqə/Iw@&ϴ,UT\QMTL9G:*J,V =|$2~Yw[f\+Ao-Oh\_{7}Yե}V--7FT\BGF#mmݱע#ݫtYm&,4rܡTòQ_3?}AޏلnEcZ}Iݐ ə;M+wlq,G:+dzX,D)޼i+wh鮩)?{lm^۟$'3-\/i?]q -zA2=1nEЄe3T^^@0c.Б#G @6TWU3ے 3Pf @`a; deZf @٦Ml'#{WO^ԡ7Oڒ7RsrEW0'?)n W~lm?y @*j`g;m9M{$t-ˉyʎpZQYنtw6o(LN7wڱVjGozCfT.֖-Ui鏽m3U1W7tffhÂuZ{V99>)+xhl[YNZVڽj[L۷/Tl {Fi9N[n[Y3#5w:ۏǖ쳯WwoF,[6-8GKH+|X ˏ>zb- `n44&Wgٶ D[7Ujꕚf[,}Hר*iSn.S͆H];Vvkn]5wkjg n"_eot%}}mEE_&4B3@eلTZ Cp={%`2a??t5hܸqd 0lZj׿֑#G/$4qb'3 u1Jߘ뮻N;wԋ/Ç륗^ҼyRW_ׇp/3 dQ|mi$,_^w6B۪l~1СCDj罤./1],}ᾝQXN; fAƄ &]-LH6]?O]0A3}"7/_~.JԵ3-㥗uopO]ωsu퇜mΧԕҵF&+3 O|B.&4:uJuuune>-0|sKڲrcr|-|[nyzYtS{LSO!zO+.bfAh:~t0-ͦ#%{Uccc㥗?+SuʧΝz+52`2|) _sgoY#Fp˒31^ҕ+lnӵ´,e=)/#z{GsG`Lh6wSO///rc|D-t<;ýҧ>{ܞν\ 6n6ɧhĉv [S3_3fΝ2[#s7 0j70oذ!'SCJI#Gh„ v fBwh50? - e+{35{o+kMU#A`bx>4*pQzsc3l7Z^P f%W2>|T1Bxu49Nc3}l^8AhJLK3kХWMN`NLo sG7b޼y;yd;9N81c2ӯike|V[O)n V3slѓe՛8Yr?%͜\nvicI'"E'UNbp&=县“v վ#Ig m|l(@} _;t~sP{^xCoգa| 7NgOKo7(n߲Ľۇlqܩ~N-ҝOm?׏_~pmkߝ/&\2Bu2,2|NYb; IiH_cF뉧__}Ӗ0!ȆQݙDԧ~XLE-Zn: h=9ox|ݪ/Ǿ*; @1 ~j=A#?3M903{r rwB'2 U%7{{7&a/_s>mhRjTezM~Ϫx!v~|otϞqNY;:ǵF_T[̴9zq:Buyjx_%;gK0ʉc1{ж>[F/`ѝMM&e_{:ɗ+ >ww;;f_\˭xh{?qqKZOK(w< }[/ٗLh W6}\S,WNψ#b `gkZM;0w]nM'E= 5;uIcߋϑ>wkԙg_>vLYu/? W+R||Cեc^K_l=zKߎH,}.9ϩgj/^.SYRr|PGuTŶ{p~K!zntB+gjtCe6t'r9,:5Bgi;c M3%"kE6iٵ4+Ad=S_.%~~}U'G;:N_nݹ5Ηaw_L˳c> R72=f XU>ij? Cy{h'e̶-`fB{~/y =@Ow?- t +79'ȫO路:yJ-ͼcm z=c߂sP|Isq?٥>>Y֫ouLHeL`?frj{>YEtNqA儾2> x-w{r 5pEg9yvirLI[C=dOBf}›yZa4L_Hl^X I$m&uYj׳Zl'NWOWGKfޡN}V&օX˟LM9fݗECO.aa/~gާ#>Ь Inc Ma=甛<߈TKVn]+y_?zN~1E3 @֯_93ȑ#0aJo2ݟAZyuXg;lX2o9~+gO#:sc1ɜۉ'ک̽{B{^?WWLo'+%=|d<2a,s/8p@gq |O`Fi50/3 Lf@3h}MeC0}>֩SRQg3/b5}`6[|f/0+Mp߯I&)磴p>v!;;֕L`.  0@3  0{{{(JZGZ}1:T;VՕ5N|v%~ZԬUn"PcCZjR;~iԼ*C륖`KƠQZԵU+vr5I CkD`LLHmV6-ؼVV L Yf We4`jՊ ҥF^V oZ(MQCyu~j7QSr-\B4 (iԬ-u;kZ5rF `QF᭾%N88 yGΎw`Q>~v(W_} d@r=jG$*hg_zÇJ  0@3 (=zf @`:0w4,64vt4.[,ȇ:Z(9ǽZb)Uy*hPF/s; %S iwpsXpdXSog%աƆuѼo%2nh慚n==֪[Uv*&UyRVoҼ\V n2yS; %œ*<_H3ة:6i-uTfϛm=,CT_]c=ڴvjdTzm]0ܔf`kECҼf*X^H3ة:6i-upfϛm= A UjjjR}uT#ԣn'NϛL= zm4OKU_ߤ5ky#0Uҁ9Ѩf.{F>kE|E&?p:kRI y}Cj_oWzoѐ꜓qOy>qrkcZlgp؍w `*'Ԙ.{YGVGNf-B+yVbZy"˯+M=P5r 76ٮ[ۍkpftSsB}\|unloR5ڼK ny;y e{o믷ȑ#8qnM_J-LxrX5i$;b۵kLbPl@:tȎ掶uuM0-;u@,ݻdlč@]2!0@3  0@34/>|NH/i(߰ 4v৘K o460Lf @`f @`:0w4,64vIڨ:wF.:Nyc]<慢Ǘ uW֐[|mF;Q!)B%-V8Y)Vo^v,W{zԢZanU4'R֖qBpuzi]:[T)N݅ύg›)maN "PTjUjjjR}uF~:UowۉfۤZ]V&ۘ56tg[伆Ծ~ G%BR~mU]VK 擆n2\դ6K+VWW.8nu9{E]Fa#Po[(2S aNJM[M Vmuiq Z1|г\jACV8e/DZ{͉5K.Pzm;V d!)B!utRեv %^K[k&бIk5OKU_ߤ5k}P;] f]+K4 u5D.!9'&NLoVatk4}z:ߩadsʐ/lKWjfm2B+ySȭǪMk`?w5h}H_5ڼK +Sz- 8wJw Pvz;9p9'4R˄7DL_$'ܤm ~M4Nvڥ)S)ocm|b8p@&LpN:;:;;KI[[E @J3PDf @`f @`/Ç)?@> _V.si| 3  0@3  0@3`X2ņ;#:ZU.(ՃR_.zl[GGc,6ğDhPlUuf;uju7Q9\Bj+D iwpsXpdXSog[5ZyArIo]4O=Ѽf 7GyO›ЇZ5Kz"l]^2vk w9󶪩*R `Qz6U" 9JJMMMӉ2ɥ8UMZ>tiԵ;(Ծ~ӽSեnEUbyҳyCRLV.mZ;]5v6ժ.W+vAHk~IkCZm,pO]]毟LSrh ݽJ30i ,*5m5oVߞ'czNuբ 8Ծ^ۂc:jjY9Ϯ= =royMܳdj}u$7tjZۼ)C[U7k֪ήiAR_'Xc改b]&Rush®h dvp@esO~‘#G4qDv{&[\vmפIm׮]2eBq>v!;;˷.ց4aԩSi˖-z ȗh@1 @`f @'-LV@`{믿N/?/>|NH/i_gg 4v৘K oC)0%@`寿D /d@p8lGL 3 ցLeeH*,_])A8ǷQumTT:߼oys>:Ҟ;:ZXgשT90vwI 7ݾ)fXSog%j&Slu5kUixۭ-߼PtTqoZpk֪=|4h~`MqΫȫKrmUS-Jch)2KH3ةfM"JJ]ir̟*555N{TT9u;qzlgcNoRyQk[wH#|<&wg#)0;֎ l?mU]VE+v$^JNx54Tp[{Zz;Zn6}oy Vjս뮑 %%݇90*5m5[ފ%ZY^& ^k' =˥isvo:wy6⚥[O8y~Dsa6c::b5V Lf.c| z-mb~iRui89Isdz>?S90vho|loSB u߬/ 39'izMTn{T;ym՞maNfIwj}ZZm}0ԾBk7nari6iZ58CM5rfms͸{wy Z_Yw^k6/TWW픷>/Nu^9rD'Nmk_i1Fo^'ڼur~M4Nvڥ)S)ocm|b8p@&LpN:;lR_jZr~e W%} @3  0@3 (_7KSK|J73?]:)? f P~1; Qرc(Dtf @` Xag$r.[DdWsokcب!L}C坡οN2'+hn36J:0:ZXgRZ7!n+ kdBڤyqѼfrS ݪ 5NRP7wi^O|sZ5y~GrFiO3wM0n`hTuzi]N`٪*[w!B`RjҚ5MF.vʰP&Wi+qֶ4۝Q?E)Bj_e jlRKV/XRvmU]VEWHr}˭d'oVOdLTFaPo[(2SinuVݫUjj>nߪο=-N]$:_jR7@^w뗪eZ5&@ȿPzm;VifqknG BC!utj2g d4K-wn9փ97*7+79Ϙ5;]aO-Tm׊˄N5[(Cjl7k;4֩zߧ:M=Trް:Ztf#c0s=OGĉumuM0>u@ڲeK3J)0 .#Fc@z.0>@f @`f @`f @`f @`f P~Q; Q1c(D#Fo҇H_*Rv=d~{>z;mK7zV~B>3E'Oԁtq>s1~x}9r-  @۲2[k.JA\-[MX/-~*PuެݵW+_64 ujĉh&4kz饗4iҤpO8!%m3dT|3E||M=:sk.JAD&0]p#o><2Ͽ&M[S'? .@wny` cǎu2<̛6\4oᚋR57_L=NgS/xWTT)۴֥cZGLkP*LhΤk\Lve#tq+E \̴O'-(%<TdsMDR0o ̥(ԪnUN+;+vyC`71mEvPVe?Z.(4nu}=nO;Ӆ^B1cQ\>A@4̅puNa&Uv33P>oᓺk^s"}HjAzyp 0ZN=Y{Q%j_0";Eb}7_(o'|}r=#hR[䓷j>0dZk:L\跐7HZ-/_ԯL'E^`ʓ^/BA}Хۿjz"ԃ^0q[׹G'd7PhnHF\Wڰ|jRջnDv0!y2*5]WOZɋByax>[gWO]upӧl{YYrj׆'kuia|p[]$>uB`..' ߕv+dtl1}ǿ K ݈Bե;ŴTWդuw9huJ%r9 &suҽ6d_In:@\uh)wD4T_̿rCuyA`.KUkai'~*Ƀ& 4nз7rU1`0\tCz:Y4OnؠdMT?suܯz*ٶ.ԾAOٚ[hu@jt9j.ɟnw U{ki@){qla_+#חL)fL";,,7^B섉'TUդ쬵 #=n;KMBho#[ƙ/'i0^ ǃ0|?׉'TQQ܄ _4`2Y؄eedd~_O:%3K.qs$jo|M7n{v7,9RNe/çOV8:|{ )I7?sA`x3^s΄>=O5!7N!Sc_CG2} &7$;n>11(灙o ylnagݠ1bu:IENDB`DataLab-1.0.2/doc/images/import_text_file/s_04.png000066400000000000000000000664321511411446000216540ustar00rootroot00000000000000PNG  IHDR.]^sRGBgAMA a pHYsodaiTXtSnipMetadata{"clipPoints":[{"x":0,"y":0},{"x":716,"y":0},{"x":716,"y":558},{"x":0,"y":558}]}:lBIDATx^uy A8bS#(64D+5xޒ49z"Oۋ)W LS*!@3;ߓ9yv;ywfg3yw7<<\J"퓽{ʞ={䥗^_|Q^u}.ݾy{dǽsȡ2 NǨ=HvGGÓߝc5V4G92he}}}a { as8CC;L&M$&L``҄Y=M4y/)w\&9îkɯ`Xs?^= s=W͕+裏#'|rUev7xCO4#ˏܶMf̘A \o}k(?AF/oܵUUO=ҿ_)Y4k-> _9*| ҇`#/Vc'o n ?{~K]R{0룖_9:cF䲡˝[v?{P䪯+t7}>󫯾*|n:O\8]}9Y^yu'µ<%C/ߐ`D]ٽC <"^t|?=X~.~x0}Cby;ϔ~8w }g+4m~Z|L49e⡇kwcI}ڹsϡ`o;qmڴ)Fif͚Sc?`w%Ts믗WOj_^bҬ?L '*`xZɸqゟV ' &[Y4[pa8W>Yɨ?a8W.Ӷ4- oM / 򌢎0ϯ4dY_u|2%\Y>|֩܋}rܱ ϿڼA?YbEV~eÆ \-9'?9fu=?? 碊'ͭLU+6Yre믿.|2|MGr 7#w|-'e$Utm\ё|3cs:Ʒsrg#<KHΝ gٲeci[SO=xLtu#ֺ\Kw㦛n qu?yk,42Y\l>o/ػ珔qc3<ڼN8A~ᠭ#ή\k_Z0h9.siǗ`4I:G$ַt;o=l0>\\>Oݺt*ݏiӦ"znzoy[y=8"}e:i;.=.nuuٟ[]pk׮ hw:i-._~|+_ Qr{I㎗;WO)FouD5̢ yI&Jlk&9o޼ t}s9{4Awt;ںh}Mr^guVPq.Ii4տF֑y/ cE떋>D0Hsٗ/\~C"xJfyfa2ytkn|M4Is_ &q,oB_O~Rײ\tEIG?`mΪ_iM? b#Y&O@7 ]f9^)a^ c\myWWe~;{%:M&rNlqZ٤~q#D_L"Ze"i#zZÜƝҍOŎ/8_f\r @2 ~LM ?6K.*rⱇ~y'},ܢ>-pJz`\\[k .kd87i oZJd&ݟ__4Q79$`z/9zj&~Y(}RsQwnnuW0X$XOzɲO}?n馊eJx+ˡ,sO?Qx9~v€6MqJ%l\/H $@f  3cMQ+O2%2%@`W_ gDy?a„p@%@&wtxy4\^N;f u4Q6S$nYl"N?foB>q]¦AqZmph̔$og/r1|I>LC3~vџI>H\k&"X|pOP kwU?}|]VWV_p(7kȽrG^h|߹ap&UMJ$h+16g'MGSKn򮧷Tsxt㮃ÙИE=֌ct֟0ZO =$?=Z[iL8?j:*ݗ1]/7޹6+Nk)hEq-HOp֣GޟMW'Y>] &%gג% Ou(vJzaW.8(3 "Mp JL33'~ _G\ҹUU}ɵ=L5ry3|vY#Wo V-cqh'Oq^c~߱!˕jђ F\F &0cJ:N&w"[w|`q^d>Y|W]5KaNMgkIKL‘F6hC7OGiw?_$]j %߾F?2_ ;.7s9߷?_ Vp]Df8^Wgf#d09H[F$@4IMX3I^i?mR֋/ +m?u1R=G_|me' "[k/褻}Vv=nÏ\RX7I^X;*:_KNǮS}W’gy@t-?/lzjBmn'2#_z+kEꥷ tӍLI0ju5N%Po_v2Y2ZPjlD2'͈f5n+Rd)V}$-(R7oyHrɯ%ktNo>&luYouF<:!g/[^i~DFp]kϾy|fՠz2%a\M GFBeQXܗ>c{=9cNV;lLǑ_xBx]x@~jm_<% Sݗ[9;Qcu{/"3\Sjɪ>~MQ\m# }GOuS&bw_vO0s=_( I#Xr .jsE-Ak_Rn?\Q?bǷ<{!aL2J2NF4&L{;찰 5lMq|@ dh_¼cw*ζ>(&M e:w4RM\rgWc&kz ^UoXR/@YhܒZr9gΕr}sj%~Φʻo;V);u 蘶069(oXuQqs.B6oBfU_w#WiIɪoYվd\,_x,sl}>e.UZ}r=<F7a&K ۧSef0[K ߠ"9IG7$I%:{jӓ9 |WqzDu>xt=dj{IFse(%@_-!>Prp#ǣS;&B7: lXJo |F'a&A&ɕsָeՑWHVDC";n[ݾNVS>tzZ-~YT7  0W?bV`,YZY8,=TIq qGs0x{um^uta߿czlA }.L~hI¼uB9?ml@GDO_>N7Δ+V2Z|8LjFE,);b׫#ɘp|m{BY{iǗ}5ì-q6y8s_I\%+eΜ+Kgl}XUKngʭr&3cҶ=Wۿ1 Ǒ8$qC\*ߧ<_<5"Z#~`iՍ]mo׋$^ elڎnʌɎdWiH?(/GKu&<7kr[Ҷ~ גsY29rH_(sV HOVAާ 9=.bHN-m=-Q^/՜@K晛meich0k, ^3G5 FKGxn۟+CAY$@t3jG,ۥ٘c @iI¼J+nGEFwܶ6uZכΧ~,+;yDG7'v|iWT9[eW\t5<㣴c _|A䯙mFUޘ7½Ogsڱ/ WY}dfZ% Z޷pme%wZg M_"YRw鶙GͪZϭU3QW&7hiIKپ<edke}-w]k_, , nxq !Kd81:%تiMڲk,en{p tLUGPtwK@w+3P0u0H $@f CO=%chhHe`` \gc9&kϾoG?pyE=OoG툿 #c-wS2J0L: 9@'0X9&z{}-9zߎoGr$= %@숿#6ߎ'|Rvet6J2(녒 M8p._NΡPgW~}uy7ko eCIܒ#vߎ;߻d܃c]z6=< /-+eѢEhpAIz%yTګJߏ,]f}ՆN`jbUe"jc8]"+$*(5Kevw0_.+ ˮY YprBYَ"d$-?ugkӮg^G~)XKȚf %-]m ˚5k2e$n;oGm] MIG"'Yy4Ze⪍rL,Z)Aф+peke.߽V. / 6ݺib:=mulBc9&l5g_GÖE=OoG툿 #[o ~>5^uYGӣz9X^.1g-}X#kA6%:JN&vNP}m%Ӫ3դv``?,U޽Ldt_IG ]0krtr Ӯ/Cv 5kZ?L'N:(ev6{=sujaǞ~Mæ6%:gHׯE/E''pZ;*Ymaȶk-FUcӾVEQ9hF!6׿L?&vT3hm ͍n k̏?ӫWu|R_ ]]uU8$Dz=PϾ%Yg_ߎ;}u}ɅԞt}rIGdiG}>VnI'mj̭6{i-!_qh Qu]/_MO><#õ=|=WnUf:u[4 W6\Bk]]';QwHo}[w3s㷗/%s/ fb&v>"vߎW?,UQg_>;};oG| t~7h?SS0|8Ҭï7X9tJ2"Ə/sq2C&ө&&y뉇ӌGA>QTM/>[r><}#vg_E۷sٶmg? zH|AyIl0wa4jR0yPz{;o/QGI%EduPz{;o/QGIC#%+W[@}K,[%$z$P &̝H}:u:aKԧϾ?Zٗτ;offEN&̥a!|R<}#vg_@7)@N#:9ziG]Ij-FUϻ֟U;QCm7w}'Mm7w}'Mm7w}' "^+sgeǗ/޴]V%/.9ФMkpO|BV&Rt5 @oǟɗnz83YVm;K7?.{߫|k?Qz||*yWM ׿oDGfo~K۹S*&yfeS2<[vE5#vg_yY~/$twraCדּ$nٵ^^g_ߎ;}gTRػ Bp0_eDW* \p=[rv|{//o/oG툿Ͼ.ulتd=ks7m"K|R9|3AWϤrd`ʔdG}퓧톓jR\Ye3ϔJ5ۻWH+'c?>&_Bdx-9sϾ#v>Z}n=%U%KOm۴)?E|E쳥OI-:y{/ #vg_Ф]eI1q}_3ϔkkRyk ]whIAI(-Èztܤ2+LN5q&Қ( 4^FJ2<]'oe!v>"vߎ+O[,z{#iD.4\Q:}{/ #vg_y|#yG/^t\.9PߪU%>4 P8 HeN 0iRCIܒkϾ#v>%pKήݷ"v>"vߎ Fd:a39[Gh;Im%*vywӲjg;~$?*k}7S?-v|6׿${!@+guV84ip `ί\0Ok Hoղt۽jժ՘%K-t^[Zi 6Pz&:M2e,:8<%}-9zEG|E툿W^_iwJR'}3o Zdxko/oG툿ϾǟɗnzX_z-\L_m|%@kP w?Ѥ9˭L:Riˢl_!MV1Ɋ# |-"v>"vߎ+z#q/]x#宝,:_&}S>T*ۧo_/q2r,;5GW$}qKϾ#v>:eIY;(]e'Ϩ6)7Vf?O~:+r[p! %g{y;};oG|euѬcV&wYSsR}rڲ|]5SN Whb p̯Ku&ϧtM_+(&J2<]o)o/oG툿Ͼ&Mum$wˆGo(YnS*slQ dx/nv#vg_Ф]$ˁ!Ӵ>H _n_d%[E|E툿WZI [ɒӖE 0-! C_7>TQJ2 P(Y\sIiˢ,g0th\M}7P,###a+V%[oUVc,YIzmk6l⒌ȴE6m/sI|Lk gMNV;VU#:?-뫬cӾVh?Ӳj!'֟UVzUKJ2VnY:{l\7rYl&[mnYʦnFfJ2ʇ$("d7dIdY|\B]Ӧȉ쨴Kh-I=bfgT9il;l |zR5N[zV>}k/Ͼ#v>QK]WEjW+f/\$\캩ry$V:;o/$a^f f@$aܒ+=o龎eo/oGr(m-92#v>"vߎ FM<+J,nٕ#vg_@\ %gW{g_ߎ;}݈ ]uGZdx-9#v>"vߎ Fdx-9#v>"vߎ Fd([rvEg2g_\vߎ Fdx-9#v>"vߎ Fdg ]0 譣v|ޒkt[o;ImiY_u[n><*k[ǵ?*k}7S?-v|6׿${!@馛*I KP:v;{2..(UeۍLzmkݾQd)KoT,-NRvywvywڽW]rgMAſ/}%Zh(UeۍLzmk.J2,<%}-9zߎoGr(m̷#vߎm[K[ZWh;Im{]Ij{]IjB^շvgv7Me`` \^e;rA8w|+}sJ2k,HoղtbF&ܵnwu%@ϾOE=OoG툿 #@9 #v߆+J2%pKΎ;oC?Pdx-9;oG툿 #@9 t{L@Q숿#6ߎ@Iܒ#vߎ;%rs2$n;oGmʁ %gG툿!v(J2 IEekw2\h꜓%gW#v߮ t$̋|YS/,۲2X,[q.je-5N[jܒ+C_.ڗ~!P(o/oGrhI|Ɋ2;llMp9dڮewrZ0_̕X,'ԝ쨴塡ɉjGݪjd[ǵe}ylW۪VU_;v/?&mmW?s@8rٲ?+mkȳ-|u>4@E{Gy}s|*.ƌVZ-K,ndk]+vw)ȼixe״)rb8;*m9z&:ݠ% 7=;IgeSX{=sI2YҖUϾ|*yD#vg_@7jIQKk[fO-KGͭSw0l |ߒ/ke&vE;o/{a\%gW[r߮};oG|t>%rM%gW[r߮};oG|t&ܒ+-9oWԾ#v>%@:(l zK/oG툿ϾnDIܒN_ū/j_;o/Qd)pK]Q"vߎ Fdx-"vE;o/Qd$nu+j_ߎ;}ݨ桡1;gUȶk-FUcӾVEQӉߋ坈v/?&vT3hmo{lwӤyppP%(*XgK߾]4wYێc322[j,]I-w۝wII>▜+j_ߎ;}݈dx/%SQ'oWԾ#v>O%ZzSR -9ޒ#vE;o/hLIܒ,oWԾ#v>%@>l zK/oG툿ϾnGrᖜ]QoE툿Ѝ(26a斜]QoE툿ЍxJܒ,oWԾ#v>%@J2<\gE툿Ѝ([rE#vg_@7$@Iܒ,oWԾ#v>QR ghhhDNkGY?nU5zKmUشFUvTt"QYbty92RIjs>ϑlU}7pCg&̓200.AQi"*٨WIεqي4ndd$lrjYd1v#^[Zi; |-9;oWԾ#v>Og_zKΧ"QAoWԾ#v>O2P숿#6ߎ@Iܒ#vߎ;Cpd<Pf'N -92E툿#vE=OQAncbF=}.+.|E툿ЍxJdx-9;oG툿 #@9PWR#vg_@7$YjzARp\%Y߮ };oG|t#J2<(-9]"vߎ F/X?q┰Y.ܒ,oW#v>QWd i#%ve"vߎ FSl,w}-9|OEN(S/oG툿Ͼn[Mq}3:ە/oG툿Ͼn.,|"ve;o/6aF~<%喜O߮ };oG|t#J2<(-9]"vߎ FrH/X7$Ãܒ_xKn]"vߎ Fdx-9;oG툿 #@9 0ʇ %gG툿!v(&[V.Eݵ9Y:L+sN▜]"v߮}5: N|EIP\-K5YA˴D._#k֬쒫VR@$a޽2a Y;S%[d2wvmny2m;uyqKή }2ƿ:Vƿc%@q$aF>#NL>I|LgG- eNNC'}]w|gݭFu\[o5}%LG5gT> mUm:>zǟ_WN:Ǩ"~v7ſv/U}7pCgz1͗)rΚRLֺM2w\/w64@>hBIݨx]z?M#}tek;Ҏ}dvӢLJ622[j,]I-ww]T*?ZL+.i.e״)rb8;*my pKή }4sI*S݌q\v(6=Vn̝Q6۽9$ܭ*||*y;oGmʡM s5e^zU-n\VtR(&̓ ٲԕjQN[Zܒ'ZZԘ5W%m/oG툿ϾnԶᖜ]"vߎ'ЍJ0y6a斜]"vߎ'Ѝ([rvߎoGr$@Iܒ#vߎ;%pKΎ_+[1/;}Q%@J2<#p&c;KߪI|tJBIܒ#vD%@qQdfpKή }?e7S/?I|t#8"lv1;gUȶk-FUcߒk,ىGe;nfD:>MjG5ӏ;v\Ym? .39CBѮՎ>~fig;~L?hG55kmW |-Q;oG;ە/J2)KoT$%7w+C_e?ЍxJ %gG툿cە/J2$n;o|"ve苒 ( ,Ladx-9n&x< %ve$(.J2<#v>-*:%pKΎ;oC?Pdx-9fE툿Ѝ(2P숿#6ߎ Иɉ֎ʳ~Vݪjd[ǵ\۪xi_n4tQyqfy?*g6tڭ3f6zUW'̃c&}H(5EnG5OՊmFu܎lql,Վj5k *J2P=ە!f(J2<]QXo/oG툿ϾnDI %gG/_ە/oGryhhhDNkGY?nU5zKmUشFUvFqNQI.i$mwQuH6T}*v[eim<^?Ы:a39CBѮ)r;~iG5OQӊvTy?Nv kUdx/nڕ%>2E?PM}F/%SQϓw+C_ߎPڄkm&nJ2<]fv_ S3V>j+o/J2$nٵ/KbP_d^_čg_^$!vE=OQRIۭq62z-5t+J2<]3}œIDS?oG툿ϾnDIܒ#e9zIs<#>f?v(J2.a-~PWNo/ە!f(J2<];̦Һ5\w}*j̊2Č@Im"$nuyI|LgG- eNNt5v49lVڎj_fՎjk;M3}FQCvMo|2<<܂ʗ?t/WnΧ-w_b3~:l5g_7pCc;[~Ѿ^m?.Ku}_͊cLzcKO31w\yv븾mzReGR"vk;F;f(Iw9+@ohYwLY\Ge״)rb8;*my pKήپ߮ }QaWG-oISڗI]QF-zJFr7dڧd]()Ynu2 sQoUQ-)qy\QIU?Ͼ(ɰ+r3$H+j36a.*n7oە!f>, %@$[~p@QϾ%j糯?Cf5oCIFgcWRϺF5_Ƶ<^FII}5(Qpzy\io?h튿vĿN*OXgGY](Z9mCoGbыRri*p6Д[x8v;[5F$5f>$[, ʔdxn+h|+g4)UȴVF*jԋw\LR桡1MZ3k}GcIM}u4OZv uC|[W/o v?v^3/_IC'؛Y|JJӒf累G|VԾ|}DpTe9Oz6a'M&N,-wK4ˣVޒot*l-i=w%EIϾ||NDyUf{4;)pw'S)fMqNoUZWn>4u=h?I% [}K:z1K:{ݬFGh?/izDIϾ4###LLS] MŬtD?IܶYGRo_Iw[quvQd'g/Kyt8Enϳe?zGm}:Rs!,:ZR?it]w}߲'*Zst]]IlVZ.Yg0IvzIy}][E_?UN|(Gm˒bo$NI_1XsmtNc/ΧOvqy׋s]]0 sjK6.Nn@Ug-QzlN:iӶKۏJ;6Y}8EU[IqE剿+FێK_罋G&&L+~Q,IIƁbh_yN~~<\5~IJթ}zqu(&EUuK.郵އmآǷՌn#[ثz}<<ǐU&8x2<}ZVއv?MtQЍJ0VU;KnTU1kZ[4'VvyuS/n>ϱJ2hl Ըĵ;yLo[Xdx-9;oG7ſhޤM[f-j8J2$n<}M=n}54[6{Īܕ'/0yb%@quu¬$:9߄iЮ]SKTqmח]dMҿ㶍9})kF'*Qy֏Is'϶ֶ'~YjŶQylgU?|>WM8ghd[ǵ\۪xi_nf6񷷣G>g*v]'m0ϬGe9l%QIdڶ<ԎdQY}ZzzUG6>$Îە-F[GzIt6~TޘE#ok%+N41C{,lxJҋ&]V&5Y{=NuR|[wu2),ߒ&v.ϱEQNJnJZIJ*:DטY.W;sIZnU9>$;k_h$%P7Ku=hԶǦXى/<&+ޏr}v|z\_n;Q^z>b$]#=z۵O'|2I׿ko[n kʌ3}݉ hhR G3Ioz,'O2Ƿ5z⦒ʊ.wS#htN{饗?ۿ+R˷1Ӻu[n o}[rM7&<:mٲ%54XG䠃>Z7o,ӟ=r9#s̑38ct:S夓N ~yy޽a\z{;oG+)q+rI;Fb{ߗ/]QO?zlͼ>X6mc=VN8я~׸qD u|꤉!"ozӛdҤIAbO_T[h#<"&L/~$۶m;w?e׮]lMAկ#k֬]wɲ Q[Uy싒;oG|3i渢 ?e%`f3}<WQrnx}v׋?i0zzjٳk7B:i2/I{M!84m[Ew='{O[B@4Y -Ә?~5td[FֶAu}T9G^@I KUҲNGQ5[mG\i:ʫeI#ر#\;Ny炄G鈯&%i)20h&Zf'l .)_ha%jG„Hz/vZvOzкhR褵: I}2eJE7M4CGu~+1n~ᇃ}k[_Qe2 Nۭ+#q}_}el [Ö_:Bq aնj&$QV 6mZ;`DڧAJK#tdUL)>= Acg/j~yR u>xQ%AGh,KZǭS'}zI7?%c0祉ڗ*y;oG_v̦,o~YM M4ivEu-M(ݏ_MbXf'K† Fo瞄 B:kt] :hɲݞ0S M%TjR>AGu:9T Ěj &zh؋_j⮥R &:_z:uj}z2}MScI{/"a_nmo ywQ?w+̺/굂&gyf[떣tXbXK2 %Z:/Yۃ?)~}uSڒm#E;w/7kI{β>$=vk h wb$QЅ4dWJRujdq$@f 5c0r0H $@f CtYyZɢ`ZYCK^+y\ֽĿ=qN+]mYYgo2}'L6n^VPJ6jʫD._#k֬쒫F xc255 "meh׬Y!캁w&7|6:Og~5p2pYq?VՏKٴq̝]eF-)$EVh׹Cwlp$0 6Y+}4"J:+F%OEG/^-u{-RYJ~Ҝ{,^.V q eNN]igҹ5t<j6S.X:CjƬ}멷mʹ騫_օW颳։z 4Y{sGf2#zBZ0i}uuv7~5Q+fϒ %ӫ}g^^FVJ*S}9@*VP8@!&ɚtly;@K#DF|&GFŷ](r/u|b~v byG7F >+3E{reuT3$? d1ϑ;G>U]x KǎU_#3?FU?_Ѿ[OH~˳}ܸtykʿAU7,&3?t}lXn\̵ s+)Ɉ\.[~.?"Zœz? 6 :G+R3/p#OK' /tN,[T>zdn V9]V. l7җ Ќo]t=& .snjʦM/CY/Zaƍr6H_A\֫ v$dLeF8Z0"y[1n@ A| re]Ґ5?HSH4վsrrAx;fe6N@.ϊuڲVPK!gq<#>uzC";b_t@UKVMs?Z{ o\vgg;IA!Hȓs A ZN1zkEVFO߿|CA*V_-\__[prgg4&>vΑWG4[f]XTV3_>VPH3ƋW˲׀:mz8^ #]4 ywS"ˢ_dEʂA;wgLbeڴi\W^yE&M7<<,Ǐ";+ O a40@QW*p謼"(~޻/:kxo㟣 %̇rW|űg8qb8Nf-W_ zE=؃e=υs@g}G#risFC G|xĨ:Iz*:pi:(Hub޽{3EaGʊ<[cޗxFt3r¥6 }O裏s=G⁎o _V?ayȈ?^t~:v<#//[o[lR*@y?^{M&MT{G0{l44dYK5G\G?Q7m~[xͨnU/rkƎ;:H)'}{oe߾}RTD /Ѝu{=Kiv{:} N*{i~Pn٫y!-C=4C^ј6(Xsм!)nAY6{EAѯ}]bM:ևa$Ǎ'?TIENDB`DataLab-1.0.2/doc/images/interactive_tests.png000066400000000000000000002624171511411446000212720ustar00rootroot00000000000000PNG  IHDRm}-sRGBgAMA a pHYsodIDATx^ tcy )Y+ۚ_,{X^e4vޤ/.que:Vo"ZQ؍\y-V&bY/iQ2fYr#J#[>>$3N?S}pV~WqՇomrΫWQ}]Nޅ ;\sKxUNN]yտ.e>|n^p\޾u)s?yww ;pѺ5 xg&C][/|KRw} uܕ}/֏ıc{Q5v7-r x-oTB[oZ/AKX7մm>[&eWī?)Ǘo6K/ohQxZv: {q;9?w[uڊVex:W\}o}c 7>3?zq=K~U.beW;7׿Ƿ^\s&r!6~K7W?4>!}ҥ֟Bv_=kaݸ~|;q5ט?޽{[oa  T* !B!ҟqp!B!Fgd)b !B!l ZXB!B![]KK!B!dK"B!B{Doi<ֈ\>&B!BzbG?^z%\D~o \ ms'>nѼB!Bp}(x{^#\wDHʏDȾj|wšCLJ>!!B!9m'^CT¡߁}{w+|#x!9"#o$ ǖ eB!B?m_Zu3m'Vgjoww.\7|$;?vۏCm.//m,%6Uw+$bp=ߊ^NB!Bc(GyݦBVOS["_G>p9_Cs_+x=;^Wgbnc@يs ;ZAaE!B!W™?]#d]~zO7j= fEDsノx~~ |{U\}՛߲WB!Bl/lzY7gD=͏}"xjb5$ #budAgaC鰸%'ObSKq- &ҵvƸÝ>>:WՅoYVlд!B!;핀uiKҋ?W]??xa]טW1+x/ociNYZ<0*0t$o͏W0ck<ormT1;ZY)Hq4H&<P0~,kϋ|InLzr]LOZ1٘_4OB!'9?ܞ=twoaoGo,UQrq͏㿿U;Q}b[?^s3>Xڠ;k(b RZZj:bjYd(EXj}5!w͉UTx7/~|wp;>~K/:x߻;|yG[n1Υӡ"|c&/MM[cxj"y6d} U,&mD!Bّ^5-}Wpnk/y;߉#GƛnKߺg<|z/j)~܈u:r橡*Kfʱ9Ӕ0FM<Ә:5RF1:Y]j)bvkg|k3~`p"'r61暗EB!Bv~8R^#ꪫp~G+x A2z~zb1mօSU=tJf;p:bM~IXV{C<"\ɓ]ncmn 4vHLl3C<`֤zg:ÒYT)xo`N[FB! Q_ÇXW=BJٚo|аЇ>d]I#$&0XYZ]G!B!K4moMGp뭷_ěoi] !B!3o]!B![om̜B!B,"gb !B!͂"B!BȖ`Ϟ=B!BE,!B!-~XB!B![oB!B*E,!B!yO?o/ !B!øj B!BB!B|#%B!5x)b !B!l jXB!B![z W}ঽB!B_^{5\#B!BHs‚=%B!BP(K{ {F<B!sN!BD] !|=XB!Ϩ+v!q9Xni8.˦xi~B!s(b !őGp鯝{z$d?~eK{?!B E Ilhm.~W}6[ ҵ{EpfROuϸ3o<|a,.>[YY{uB!t%d^tɞ5gpק/4xkØ7SU4_>}yd34}ջnkȚև1xʺ5{hϤ>ޣsG3xjc!U !Bv2gpc'B[E~8yEus0)"qѺ:/ZR}xœxV*b&qHE-ZSly3_ECz̈Pj,][l1XT~BB!lU~vZ03$W"Hё#1CX c0*R伈QoKvNb4wohQ&3q$HO:b:?bbĊfB!B!~\ޏ6(b I 'PFFF0wEa55&.!tFt#eMc2Kႉg$*gHpB!BZ֏1[]*QdRqaTtͿa,`VQú+A~1;).tQ1&z,݆垂Fx8hBJXjHI3pco 6>=5&@䠝539LLͣ\bPB!BH0+oxc"֬ufs !=90!c:/bRi'<"Qkt u:~q 'TTQD1:81͇MQP4rQ {#B!KnDY7SZE4[–yN<; ݕ8ѭT.Ϝ;wΞ;=B!8؅M|ښ7G詉r4%B!wۇ"vSHl$B!B!3=!ڦR8]4,!B!XBȖWp`/e=W7{!Bc޽÷^.f/|?5sa=W7{^B!x뭷(b ![ ?g+}i7^x&\~'CMWB!kFKo^? g `=5 j``9\O{58!B"/«rѰG޺9 /ZF{/5lvzwױWS5 : G!'>DK_o⻻C5ZF a5ngE͟!SXfx Np5^8}]'"?+"bWHsZC'tUҧk~p~Pr!.[?%'1og`dxh;#qugU{koxeSn!N{N7[RK# lYo/ɻ|[p5v}B_MXBH)oϿ&|oġqi~ޔ T5q9uF;Sc[;+yl_㬛#fa}7KiUz:WSkVvM}Z[%c{->k!utf/>ݲũ茣p:Z:ӏv{Q<2Nnpwp7~O|oYB!?%}8{ayş@sbƩqor7&>q+_ʊ/|IDGt5m|2=sc^/n8?y prElp ҿܛݒdO)Vۤl[> BmIi[DZӔ묔N;] 7M~KW!OqKj)mT%ȯ8nz6V?lNy8 O!yIK?1Vt~9Zqiw|/D>>U< *NeAtq'|̍ ЬΠI3p54.LvvD/ҙi }ԉ[WoHz':} 8ksf<~8B~?o$Wn߁O'MOPqh[2xg:3vhY/ נZ/"-ڶ^kUK$M !/K!}9C74NsM묤sVb4r-U6Bcr5Z״/K>_ژBkEA&~x2 ٬5'Nf-7ӌ/"&~Ϩfe^ěy!>w1JwM^+7?_JL8we4+#bƩ8&z|8_8nSW{ɟ fS")ï`s 4ΖC`\{7~}{fi}6][}Y-ڴB!W  H0Ug/ b Cj?e(U1ĶN iɟ%5[G0p.\n/zV'U׵~IĄ"."]}_i#o<= ^xA8&/hNUִk&IY'U=ZyOeO:-"Ɣ[-o"+u% O|O%Zpv 4ΖCPz/^5_88 _r\2!reB+?ǟ܏]vYE+ HH+ً)$01XBWr083rl~7FS0ґs4EHXC8 !B֦"֔TȤ@hLZz,B{;57C S.!trU+&ͣb[X1[M׈!5yefօ桀n&ew1k{JȆS3c[S(*'ۃ-פum9"a4ơqB!OW:1QEq4Oׂ1`\gˆ6#a1 Wߨyz:[:]"Q4$RD#2+ܙ̆\V5/CpIS 7fMۭl|m[ol}Nk&Qoѻ݄ÐޢO~eHaKEk 4n]ȣn[.EGbl1矹?Xm;a5B!={bwco7#sY*nw0nܪy/h}Nm ?ß};5 )f[yۼFGw!Mt sB!{b{E(w-\\3?[KVQ-M#*`w*Fg^n%z%s蹺ޣRB!l?(bK"($M`V_K[g{3?)qs蹺M!B'd ǴFUλg0MSWy߻qq8~>As蹺_C!}%B!e%B!e%B!e%B!e%B!e%B!e%B!e%B!e%B!e%B!e%B!e Z@PUxwrӸgwMKx]|wNKm-V/.>~vnT;2ߦm3޴f^l疐ElɁEzA,abhRR|SI0 GUUnW~ !ہw lOg0."_Wg딭Z/xNo6ҶLoQ`'}8D(D- I%DT*̤BaTD\WWy) Kn l&Թs8wu,ve?x5^NSX/g;aۨ `'d=PĶ >@1tT~tX^ !ۀdҘ ĐL91MNabu5֚T=Ά@'dDpB!"a6bӛjbF]yT1%uvބ4A̿̾fL^{øՎSG9,µ"8"ʇt݋÷'.yZ ׺-(=ׯy"8?/;SO-nR(T1:1T}RDEp6闞pZ̛8󑒈(x*"We\mv 񊉳2Ǽ)x"; C9 YXn}u cF+꿀`IR~u=Ț1捋LJ1SPj,cH?LF3Wt1_pOw!q 6FoG=]Cԁۃwb{uߒ@g乿^9_>X<1/_'q{Ӱ~ g5 >锭OB =YiS5M O`0 $e(PZwՙ& Ð5auLaWG&EM񕧺ן3YDss(Y%WgxxX:bhGŃ܉;l1kO>&}^qi+{z.5y6ēO>)'؈73?Y/3s:ɕ*j?zh[ăwŏNõM=5M?ziUO4-] aLPn[龏9cƩx`#iI^Ƈ?-"mo Mŧgm@Ϟa#;$ࢮu׾袈0554*:L*x< W3igcIUTܡD)jŬGjuiL{5\y͐}0$l3|Ә&Gi^:̼zfLsgYVu|b|"fmkb 7{U fo)zbҥ2ķ[A: @@]efW> dt>Z Ndu6ds_?>-#™ Dn{%W3HetMŲ!=v]g.<ϹGpimi3 xۮq#_hCH;i k6?&N}@~Ia B^OǮ]g.,3)k,~13jJDi~:͢BHE؄PWn%7k'5 V͇iD+'8K;iFL[1,2ݵAou^!A4/št ewf+Xtp$DV 77\6A:-))4C!iL%l<1wԺ"y<8Ֆǂtv_ NG7}K.a߾} z2Gw%O{Owى})G'n_B6vljިa4}{p+V 8U)+q"/3pz>5-L!fGik"xl-*F3ry&}+noOF(`IKDT&= XBN"vQ@ ch%}O)֦rM`VE3bB2w"Bλ-Y XYu5!dk@-c6˺( MWmrB!B E,!B!-E,!B!-E,!L6tmi)Yau ۡm lMe~tL>˼kiۺIXBiفANtǃjy|+}_6{V6d6hjƼ3tXBi;=wN=##ܪ/zُ~mL$mU:~V6d{L9"݅"Bsg:+{",?NXXcjLwU}hkE݅7͋#n,͘F:&o'Ybq8h({ڛ8/zO[VH8iIhm#eյO}*Aʧr1uS/, 䞚b@ ?YYot`iҶ~k7>eh-z? Z)[ݗVm䛞"/򲪝:,CW=ڏ|6/__>gqr?#;XB;3O~=z K{Wg|vޭ*"xOKN ≇ wxb sj,U !E Q-!7Eϝ>#OKay ]Kum o۽m^6"l|Uo=%Ғq\񂜯{O>ֵ3$3A.uAdD&wϴO A~8ғO7H#tJa<DRbbAz,FR XYYA>a|Vzf=lB!Wg&z$cB:X,fOI3# mƮ! VM%{^6;N0B!5DN K}x/A맲\U dҚ{ƐLTXr }U ք/=50đJ"pBֆΘD{OΦhM!Bo^lO;`Ƙ{TFQJkJH#\~LS$J"GQi s""8X[/=ę7q#%f^XD<geHyFrDt -2e_k_v'L D51v+ӓ 1RJ?\`ŧ]c KRmgom8> Ƒ(bލ:b#&B!d]t8a0C%;R̬T29w E8eDBr1=-ɻ ja 1Rl#|ҫ.l8&xf)7+7~Nńg(>(6ƤWT(FGQϊ' ){W cP2V1599/bTVZک3atX[5%zjZ! HDY#m@A!BsU ī贩'PFFF0iKYd?Fx(-g JކaȚ:浫#fR7q 172c*\:['/>" dIV1?+=ӰB!^{Q(L!mM$ȋ"#%ejU0w(ykŬGjuiL{5¤z͐}0$lcvRsD̼ͤzf̚sL˲+Er hIPp͐{ z_ 2j띡V:[Ų޲Ӗ[O  ? npuyQ J!B!}SDM˜("_qTѧkL0PCmBHQ4dI}焫/elΖNWH$ o!J8wfaFsP) $k6/1LkN\@ƥJit7iUvɏ.պ2~c fNo JIvJx_zAl`tN kP_ݟqF1:815|"vThsg$lU 'FwUD,!B!͠%$ڡ\(f/` b !B*b%!;8}7 ?,HB!S%B!Bz-{J!B!7%B!e%B!e%B!e+v&lW<B!Fz!{K6bL&c:gB!/_gvE,͉ !B!l(b !B!l(b !B!l(b !B!l(bP(T!B!+ElɁEzA,abhRR݉lv]o* b['ÄB!= "x" -Rbb\Dǒ[HB!}pl7,El # ;u6v+Bja+q{X'd'Pb19k$|N$Α'Nl+ޤWHneEm0Ng!l'V n ٮdbHz> I; #xU! ֬/=0đJʗz }ц?BZGi1p 3ߍ[몷Nz%Y]c[z>ۯqBE=mŦ7UKLI=Psx w_=/\H;1*`&eݷVVVOX5[i^Ti/ <"}g}qoC^3;a!;^fYwlDl|TFQJkiqS FF- _ c"."YhV#2*MDDp0d}ӓ/<dq#%.^RD<:fWp8+Rc/R &ŧ%oYDQĒ* 2/(# E8ߥPzMub,]/mdKRK^:8ev"?-ůlq:Z˚2n^L%LRRdzw;CuF6^@ ?pXV!䵏 I/^\I$@E`XF㨘`Al|7呕o ުG9ZXOp0GUU!rB ٍ cTHj"bt6+Dki",2"d qqf<';3ngF媄oX,&'P|Q(-I7k;aISYU_nkZiAU1(-s,u\F1:zuza]6/ϊEoB&ZvKdMlDMu @#`d=CDPᡴ%0 )Lz"!䘟&L6Z*\?`cd_zd93C9 {qjtau<+2O%`f֊AC]么c~:@=E`|A>x%ւ&2l~l[-Js ??ed`ޑňŇub?+ZCpz$AHJ7٢Ζ_Zkw>ld=ףէu5άg&##Ny]gmT u\)XN:3 sEgLOk7lEl1󋫎/QdRqA_r>wJɇr{;5t~juiL2rf4¤~!x͐}0$Ŭ|Y/= %*1#Mm[!ֺ #S6Wְ: AE~'Zlw`yV~TK^WB( H$"uGvX=/RQBΤ+kbMs˜(pqѧY1`\g6^!ftK CaW^>'\]5OO1-)Q4$RD#2+L^XYCiP8cYdW *Cp *Ym28{HaVuV_UZ rSlpxBEW65C͵4f(nZ%yUe}XY:]Xe#9i:{{̢_i<BZщaC-W:^ma0Xn gVѝl~Ǭm$bYcY*#"ˢ 7HړÒ%JٙlPĊ@B`aڻEԌɗL\l|n*dֿ8q:G y̗ԊA ro-ͅi[8eUe &|&m-1!nVgӞoz~,ե1M[/%on]6%prn"8oucSF̓{ģ~ p o0V`kti_!"y9.ȀT8&m#sITJ7,_}6d`iҎnX hbY#Ytj1ҎJF-8|-1ӺYz"8.R&^ k(6y%[~IŠُْoP8ӯ>cyav%׏Bv=YmQTn2 pA^G{devbfK}qi(FGƢ\.>񰜏w.8":2H:.2 ߐ~{,M3$AoQ+{,-[ ˁ ?A2!Z&ޡňka,/udJChZvۡ:@7hhlι$vwd~}ճLɋaؾԏdMѺ}}iK G^K"9ZgOȊJ*B±8ue_RwBa  <ҟ>p?ve]G|](QL7YhL`a0堻@Ν;gρ_9>(2ݻw3_(j14d *~Ew6B!FǢ:N|衇?Lk`L9Q^](YWl*i1B!"BHS@5'EI_t;!Bv *bbB.PB!B2PB!B2PB!B2PB˘}fӼbHfcI[M;V&߯Jڡ:tofj[w}uT nf : U'b;9 ,(b !}2O82r HTuR f|:\qD(Ē "NAT\8]vHW7Q#J@l/ LmU雱f6T*JV& (b !ɲX~'d0~)0"=&IΥu>)brzA{&ALjU7MOfB-+l zHGrf V*@TN'tVHʠ;q̏Wᵁ]_wDf%5zkbjL1mT򈠌EcF+;O3$">+QnM,b<"e-\z3kV ɫZ f{b+g0cyk8}؝v2:wO giSQ93:k$)Im6עΖgA )~O>ϑFVs=ZY6B1"e0eH2Q̘p+Q$N>33-6HO:m$zu_BHBKQ8=|h0CX4rt11_/euٌG\ }E˅GuE(fDik(i,j•2Q |GMzmQ-dr5Qf cTBu@uI,S 2>""cNa J"''zmMg쉼9W!a=0B`}na:g5IE>'Ϩ;39Vm (dPҌugcHMIB dS(&l*էpD{5-ުTuNPs#WzؚÐCM]Z8F˘;&kO>H}vζ ~~"3kl?NB!c"НmNwSɓ81"`Ș7"ғ<p'kQLSu~aXJsfQdRqawB?=,8f&;sՆ΢<*f3)wT z_X,̨NV5plB@>[קW"ҀUɝhSrmκϬy=>!璟>&^ kK`|N!]ԙR 3 |6;`=j_jI-=Ll9LHh6bZtIN 8Oq):4$wiyi7$uM։#+BdH" cIϔ]j6VakMCq$tDŽ3c-Ƴm_%ff ?A2V*z1v'/]Ί;3UGCnHxD_ ?ӿl9H謧5Ou},o $*&Xa%ڶ ِʨ sLɋé EaLG; zM:39έפkz~,ɟ'tV߻_&@(Zy?=|~ڵ˺(9z9 "(^5;9ΝgG}L^uݻLq>q1c3l lBecQ'>CşÇwg&o{W2ro_Ca&dV߉oKzpBl6;3I b~VZӰB!.E۸}+ ]WP8D8uhl[}gP*L6^3dߘ&2m ʼ~# i_ybՄB!>&60xEzijyzlEl?TngGa fA]7Eriih^YG\Lqb"B!BfaT 1~%^v*va̎u_C!B[;;P &SȖَ_7*F3cQ];j_>[/}"G8yU1[L`'("b/C8DK!B\WiO;%a0C%;R̬T292 E dDhBr1=-"&TQnb"΢ٌG@W]ɨqM̨\fEb©p GņbҘ\$/i(r7Od5(KSE0MN΋@0-%NhC" D#"ҶUgQL)w(x{XB!+ī贩u'PFFF0Y|Pᡴ%0VLz"!k阑&L6jgR22&m#͈g]i@\yOMaJg.Πȭ!Bv2WU6lNREaj ik"Y]*QdRqaTw v*=&BZE=JԚqVzԡSBczDDůܫq&gk ')fQ=ZΘ&V'-bVS3چgzC)}"3Ȍ}l^:[qI/jN(gy^Pڟ :'|fmo= Ӿ<(Z?{C*ǏEf !Bv2W=NQb6 c<|Y;hD4cB !l6 !5GVPX9&e,zNttE$iH|Cv1j<"Νm؀ǥ!9i]WX &>r]tZϼϠz) i_imu7`Rg0+[׋V91n?EŤ N(;K. wATgF)EO+'~_K{ <صkuفN2&?*&0XY;kK6\E4[B_U~;}Bw%cvy?w=[?0W5)qr֯]B)`e'ÕDy,j:@s)ORhc<*D7FN:b٥+im tRgf.BRgGi[ҏa͡3h];J3Bi yV"c#>޲6/C=/Rף>hj !}(b !}ʲ=3{g=2##"Wd\xʛp̆ݡy_+y;bfAےX%ŨΒah2T-JFsF87 eAҒpC^t֞6"˜APOy3~s{PhXyid鴃]YHDXuDML3="t{OXkțR=t:,_x|.,g oyX4/!&3ΏRW%'U<;"dʥ}lg'7NzLưUVd,uPeR"uǎpUmyxXQ[ca ?$bjhfԳdlseG;#i dRI$玣Qz-zݢ ΌDsLK@pxv֓]5زt&"9#eCZlj}if<3e_qCjtpLV[b+,Vuq•ݠɂɇ9k'W43^fMru;hY;FEg9׆4y!ʱѱz!Ç4+_ c$7/WzRO0C` ![Pj jLt,_M+"1%t\wúo~jQlB!B]k;3y_2ܽWgy> exg /N/m#cJɌ D Nz'zfMlJh3g !B!gC"fNnȊ WЅ>/{y[/oFσ"~Z&/#w17@n+x~l %YMԵjlb6Ԩv$B!+ #nXTnݑk^Pj2.yie4&t"!u}¬)|#yb^7а&!B!91|^P&=yy~/˷k0+A/#2XcSoe}"%B!靈59CFwyT[\PD}g`𯏀Лul=5&Þ ̬>=_$O"mgcgFW!r%L<߃_Fn6}݃^~/#wi4? E|I[/wbtpc NQY\LU>cŧNj78VwO uW: arظ0tNbu{I,.Ɨ<=um !]B?o/y'c׮]e;o{Smo@r`yYh}lӊ }u&Wm'!|ݻw *X$kF0wj87WEU;3ѣ3NkTPsp<iMۖBlt,ćzȺs^fRXdvU E0 Fۓe,D=c#`0}[U4O3"bw- gZ)Hvu*ƞ9qJZNZN;h0b: Wm2k^8韞Sgf(1[.gwږB!݄"vٺlE 0CdQYR UT.^,:r|jQmp 7]ȯ[9]~p;+XoA ]w&TAn{+r}=zG$#K^F NzW ~CE.`FR[8"a5}yN3ՙ2 bzKR'-!B E,1ٖz,LS={X*a=mLm ץ`b;F;uRawyFT:~&[m6w#b0Bɳ5a"f9~w ~q@ͽ*xV@' Z o7w̶%BȺ%1{ Yb]9ݙ0dfaLw`q*c6L;E{OW0܄`їuX̽$nlwQO錩Y axcQ)M!"ҟh݋V5/u=:HcƫQS՗Sao s}MX iQzoT(F%afH2 ctWs/!+L;3Au~g1kKRc%B>%#Ç vD{8EߝG!ݙEyyMQ*!D,aհ1k[+L>3K*q8.i^RgkB)\)Mr^P)E_W0<|B!}_C`[bLJx!BYXB[?@K!B|O,!B!XB!B![XB!B![XB!B![XB ӃB!E,!B!-El_/`6~BHGT)>B!;ؗ] s {l ;[n/;SRy p]Ll!!8n'=B!d'GIz ̝sAO%7.6Rs)DLz~Ml-UK ٳVpi_!9%B!;؅rq ᦏa7s%{reݓ~۳[WgVo`Kֻws_4'C I8uY4% 5!B٩vMק[j>j~#}"Qkj]=xmX=wsg1#sg`^4/~#~6؍Nj_&_1'Nqwi4!u+yn-auu_FcM#""sOPYS){CX'۞e7ޗ]̓/ߗ:aʥ}sB!ddz!늎Oʼn!+.\#hHW<9&~;Hq ~["o?;'Q^4)7(/w,}<?9৿T!\/Z?cՃlgFQOq8̯pfM8.m3韵פX)1!BlH6y+.s:{%TY{ώ 3C[I|/[ōۀ;oм>0{YVmkJ NIz2v('wf`u#v51]7"D%5;U5==5u-ll?}oO^/""I)1!B[sb5tA-jbzt_~|QK|<3>XgT5ͨ 'N3CtyIM"t8,~Ĝu?H']34%&B!މ؏yo1gfh보F<68b?h4̿-९WCLE|[͙;[] ia|e?!n%ΨZ鉉Z8EwÿrX4^3su!b9yr?itFmѤO|]6;vaԘ {~003<\8>#tRc8B K!B/CqgF:F:X>uFLm#aOTa9Ƭв3n fiav?/@wLǯ~sm4? Ea(; c)|7a{uחD 9+Oȿ)lt$7x@U[_wŝ[_ֽ:띿iǬB!ҿ B^ODž.;OOTh*~7+MTOcgfuW0q˗/۫q^裏"ثٽ{=#B!s9p'>CşÇzM6c)|LN5D`/L綰%B!d'A^>FXȄ1rl|jm&BAa]!_PBFЭڧ:#&QT,&'%p:0%8@,  #<1%O;CrY븆*.v oP$ ɇ{LeL!lXBH߲\} '0exjqlqDK@$T*Lʺ:b%_8QIMжqY$a *JYYt*nqܷ_ί`g8 y9pcr諷)IaD1?~Sc 'Et8neB٢PB*cqR)ދg :0'$H&QjmP +y p%B(x|r FhGHt*{s^{)egqۍ!K|:Dq]*"⚺BڵKH[SSpjE*$!2\Fg)Hz3VIFb4"٬!mV`WH`hEDVڔjA7OJL;IN"sF=NdQY-R&׺+/pXD 9_>S_؟пIQ$Զ/OeܞoY֭ntyLl=R˃qK-0,VV`TA;o=XN/`6xjzO Iw܄B7|O,!֜ =kΕ@D ъQ*JN;~A3i*^u r]0<4ͥgE&T3sÅ3uf=1ܲEUFE&$(YLjR@#`*`#(* K%{*>:j}㶚KFݳ8x1w9,!WM:kei9z>fKKm̃w6[Pv{GCVh B5,B42,Lػ%,È_XJ?kp?J ǥ[l[Dl6yM!>ey(1V "^E_hX-TMfQ#l Ch9) 1՜.p!5v\#haT#_0MO/Ȟ#Du-/:g aG%/?ǫfΜb}Qgegp .gFgZ6keĻ?crkfj׃44".rzI 4g8$j]Je/˳G3R=er%n{<~g1"wjpO)nj XcxsXy\4 _)|ͨ\T=5W3%0%n`f K 1/WBւ"ҟك}"Qݩ**̼U:1'sѬH ;Ӫfݥ(eiɹn#[ 4y K&is|D'QL9a)c̦ꎾ1>V[sKc&\ xs[marhh3{A??9{~5nZs _A{Wo%$WFi:c[ DVXFU%q*^ؗ1)N5.v^BdďE]{G;<]i$3"REǙIqNWDaw66rrJPLID\O6e82y][D1CNrɾ/DTB0ܬcF^VhVn#>Ik%AݸssxsC8#Ք=$Jo NgTĬߵXͫ=H:fL f: BrK8>Z" 7=Ν2ӗ>V BȕM~v'&Ek.z;S:C1dkq}Gh"nK!w'jBz3vc&ƂnC|v iK]널Zp6`%BX<6> m,ab}U6A)9\U*ݎ[ݶCBn G5l94fǯ|4c5K&BV;"D8]B$_AR̆ H`ׄRO0RP}m@1: _SB![\Hc:r^a7DK|$bzƮ53vhv(!B!]kwLV͆]͏S;!5 akjLa=#1V{1m!πhؘgAB!BHWؐuŃ27dE+DD +f8++"U{҇lŽǧRJ&F0if%[F}E)9fO 7.b "0P[%_a򈠌FFr D,|"%)e̊3M2l"reO<㝕EjzF 3:T_a2[{$ !B!lH6Dފ;r0/oLW29r=GwR yi`^wHQ&u`OcrJhgDe51=ˠ]7]ɌhTJ(MECnÚ2lOz(CK44ѨZSq$HPE11ҵHBbz^B![sb0d1N'PFFF0$͋δZ8F˘jSvg|%6Lܜ*gHpwTɩ)L$Z\;s~6@el/&n5m&Oy!Ӓ߶K_b|" ^B!O蝈 DDDyT m}(2)}mC(9yENLVCLEխ $ /j 3kgina峳z1$es-I5 ࠙/ỳCMۡi^:Ӷm&ep1k{=kqk0zjfρ[@ӆk<(}ɆX^;|T LJ3d]D!rVP9A̕eL wrUH-c]/UN!t1=gvg8F:Q>̖W0GªE\Ǭ3iuTpfÝpZħaLi|HXь4򅐚AZ CnIɅVe"QrdA (_(]i66a^S\uYpQU#_^i,Rb}-s(F0qzDuhgt1FcM2.;#!E({BGwIw8a kXs"sӁC7fU7Y8/gjc/xק|qYӺu%kBő"ya†-ii>κݮݼ{O]kEpV{kOt3N~ZYKB#B?o/y'c׮;o{s ҀY]f+XXD+l}3tW0fG'/_g>GE&W-Йձ vImcgPq7vW}!qQ4Sa4K-C(ݔpq4ӳ[TG+OUY *wx_NUè|sȕg_>[=i^oȟyΆnp4y5yNkX0JpR/#yMӈ]׷/~i:qէ7s]\CO#B8w=[?0ćzȺs^fRXd(`;Ew.;׏Z(F3[*[=Gp! gM*Ǚy\'?w !u*aѩ_]F]7Qwu\mw˳FpׅK. I$Ns瞄z>^gc} Og6Xdyq lR!Bed'QH"iAz9fGEXeBU_U,HjgwCyμZɋn4tn'o6e&o~)B=]e̕>&ÄB΂"51]R X\b8q z "z9ɗ[}y˞YF1[>V]g7D'σ9ZUTuX-/7JQdn#~}6Լmms_o8C4:jZ6)Ho sSBJFi'!͡%-էN ~x Pv5=@ |kc:;x: ܔqLߝG!CEBvgQIk "iҔH9n&1m c/T g6R c=3>+$m_B;Mv;{iS 0B! ؉B!BiE,!B!-E,!U1ݭ͚!B E,!B!-E,!B!-E,!B!-E,!l! I 6e/VQ0 =`T 34 G ϝko>PB(Әu9!B6E,!䊲\} 'ONajj OU"~S'u,b^x N/Muw`؛ԗ(6rĒS5VJ"fcH[6($ǧ";)qM)7/6*[/I)L`bN5E$)<3ΌmasOxpl, !&b냌%L Mc[z2 %cۨMɖayTN&yGVVtNC9ChV燰QcY^O~g=Өz׿OUBlMqsB.ER#ʨhSK0ZY/ Y@-Ok=*EϹ"f#QJHy,6RCϨcmg*+lRd+1YƙpA\].aF\KgǑZI8pfl$&0lB#beAF$ fR5_m zJ(D}#[/'[*Q,wkM[-:D>{/iA8ɡzaGgUqQ_g޻羨38pc`v`]~kf_xgqLV3yfRBr1==RF1:a[($̌j29d(F3qGH1:~0uƠd&'&mep4#mڃP&,WV7~ qk`qU70F"B ] 1-#3fqE$dG^/!V E-sD#8v}Lā_Y/fpe<163r8>?EN{kRYkA+7FUwIB 1 Fږ=:2M8=83٭0ǒ+B!dk5թUo~k!d8SbV~k{Ohؘg-V-N%A6FiXIOܝ{OEZmS]+<#+C0[Ì>懯&`y.ag^+pG(F0yț j!R%(L3 !YBrK8>X@40J8w66jMl6"BP(k<>HmWJv%J5"eEċC%&V 9ïq'Vͮn[JVӗD"ϯXY]ĎҫY'}T/>CQoAcϩO'A~AW% d3>:~~mW_ASqů tmگp:b:husV>|x #BH?06?ǟ܏]vYHu pmnFDց f+XM؞`٠3/vU1 cvU6˗/۳q^裏"ثٽ{=#B!s9p'>CşÇ;ۍP l/ݞk_b*id1w#B!d{C^B-;B2fE W1B8?Vho !P5imCvdӋm.`af,wṳq U\~7`ݺ.˛} :z9, Cɘ[l0NOo0s[N}D?婓{H^i ˀm襍~վ9Ϻ%yV'mdAK,Wɓ2SHr~C?S?m>aA8W19zA(`$>r[ 5tjfmݬ{ uv I'zƾK"kwk$nêۏh~䱲0T~MqQqrj7gOR+) og?YwϺ6ї:'xJ-MFv"rYFUq·!R'ȏ7U,%f*egqۍ!쑃l xufA@J@;̷;ET_&/|]޶VoݏFҪw֙צEzz!ujQd3;s狃8^v{QVm̞T?'}j3R|:Dq/"rك#܃#f_pA~\_rMxK>όCRDIzÂ4A~F_jZt'AEZRq*:CgˆkKZb}eپPBYE{>*/?ǫf羨38pc`v`]~Iό61mw\n5#[3uvf#W͜GUG`fTIh(F3v34ѨךZ"@P "0/`}apm}zE!z_V"B~97o.χɰs"oA:U\Jg= 3g-Ps#m #;-SεQU,UgVѝl|.콨+&Ʒ=y98,yYGYAC]ŮϬcdlvWʮ9 ؐ\Yk 5j*'<>ǽ%{pdA. *'3R+ycNǼ\]Z%ꃝNdd;@K,/=rhh#fn<'gpϯfpMKxTˋ,,l߫/5XM UTx"ί5'5M<3QdRq`JNzEN|.cֹŦ<;;ea%B#92w&Pe=!F"Rq{HҐ0~Vi^}EStIsd@ L/ om)p8̨ڹ6l֯p҄|m#055ݬ>$0nB:V丛 -̘|FLoA`}T_58nEsjӺ/gſOE K>q kbq#S/c{M=+HO8'q^yfGzsxsC8#ՔH}&WB`NgTĬ6ߵXzcR3n Calcҙ- 0a akMBq#Lcf긥63cxµMMD aLu]X"A~Ɩ=2+wf;45Ekiw-!co`4etŴڴ1bҬBz^DwgP1]"Q|K^iquKaql! [GI;;cۯu.ȬUFeOvufLQg%SdK꺌g='8[B2=;G63Y˾I}v'}//`wyNHK86oX[}XJky=v]ÛlVb  <ҟ>p?ve]!˗YyxGdU޽۞Eϴ 6B ?]j9YT܍nȦ&Q_٨&kJ3sSAF(cO;wΞqC=d]9|0gb !S8KCXڟrLH?JMnW(`,m}Im/uZO;XB!lҘ<,BcgGGB/AT (4.!Iļ^g?+- `ݼ%ȏ-Bpf@D!߽f{3YP;/թx^_ tW6Up_vB!BH7莈-$ͮf|J3ZDD,yED(D v$>}م<'#ԯN'l{~w/"B]te!5=T\_NeT 34 G ϝko>W.{ϣ0s馛hUb/)i =Gyil ;Փ<6QKM3'7`6$b]aa^k_/1鱺HOۇW0/W=V{xOnM^J&F0if%[F-E)9fO 7(p281[v=A~D9MOʖ:̈́V156\$k˞GeT<,!c^5PG<3 b{4cNj˨.ɧvsҏo_qO Fs :nكP?XYt*^z9)"M_kU:UgYZ<gΜI&ͱ>z˫V}Z<@$5ל-I{d|XO=0O]Jl-~sA}B[#B XWX/|scuI ĝP|,OjF&(wrxtv KQ,"$''Ëm`11< Qf@$4ѨZ΢jzR\Y-v51== [MsYxEZִ_}]NV!BU.|Q.5OۏJp< %XK`X@LC#O?YUg`K7xO9TNOO{}<܆hgBX,SRQ5'ֹ1,/p8zvsaGeY<xU\י//9 X?]#X_Q3#8` wL~Aݟ19ۚ 2wp͒.plcH7 ˪֐wi:?p] wϬ;0}u\wuЇ>d7%׿'~d]7sPyƲ z!I%֭+T1J"n]2bC7 qy.iG;+V;-_Oɳv1*By| O[AM})>})My 7!<3R/oݹ~5ϖࡱ>]k5N94p-t\%" s1?`1ibuLzÁ_Y/fpe<168>?EN{kRYkA+{I;KE6V!˞gůÝ`Dx/Zčjlt#v9g6 54s毎9C6ڱ-.yF:-&bg2pAy/G%nǻ:䥂rBxM6CL59"IeߢE'O<rhh3н ʟ=m7-SMfj^`eg^}1fRo[aE&0gYmcHe+.yi!(/fճQLu~n'RӍ:~oЙ/[Sx]y7yYi.#fv"sKEԜ7\xmƩZm^uvɈ[=dfYYut :;+l|ꬭp g>SgZgR//ʓ&}"6MɳfPϚ׍6pׄ"vmTԉ8!J\*Kgs4p26G+);{mI/Fʸ쬻Uu7츫Xq;oܼ&5^%NH\B5ZYL#(zwNr=EHe_ЯYF˘YWm}Fҫf:F?6?S"?N,œj^u ǀTg37~T;%:{ ԏpIzcbH?tG f 'S3,Nx!Bwskjb/q} ۚ~kϝ6Q{f;W<++3aއ~w/~x4 w>*Hoׯx ÷bhmr|p]9$y>Ks%P2,R_z%|WA81+えXAal'WJ|`Eq[Q eaEop?_? + 9D E-Sw~=zf'?uX//ſի p+   "bAAAAD  Yx22EMl]Vk x""VA"ylBl}xN7ㆀCdYE011dNO2F(::iŏ캂 0ZD p4MB݄5\n ;M&V&߬=ľQ{?5Qz?`a(0R5R)#e P {<򩨞L@4En* 9 cXANm޼tL'&nK!JdkG^?_62q$a(VfKHTؐ 0fݻ1z-2 cfNRS\M*M9e<|u vC{pdoX;Xh~J"Zm)0nA-VS$C;DDGБPN>_˽u^JoLy3\9O)TCt 0`jF M9gyg@jAS lgGaHH{ f3N|7aaumd0z LB"6/(~Oe|.U S'X}ŭ+;=:Y6gmŒ3 QyDYuY8[Te0=ԘE:P^˙uAB9E_/Ѻo{gQӞ!=]wX}_a;UW_}G¸RیbosKJ߿'&(tbϱsy;ϼa>Aο}O~wX.Q.s$[c WE˱<-$m˓̐N| zQx<ͫ"yҋƜ9',(_PZ଑R [͎wv~ _g6iYBfTϘٳ=o F(wĜX@sCs;ox5ۚX=F*c{Kq  G(DI"kl3C3sgoHBr9-CgvKA~*f [;~pk J,{ pNN*㧯0 -YAp mvSY1̐OYHj5R-ZԎ'fA h PmK,"T{<ש;?"~GP  DUgKm?3$g(X2rKʇU5RMRXjrvϦyv3t9uE"0c@\Q–'ijj# 9   3FhYKczH z3CR^Q8ό- ^H 1Ug|ZgL!a3Uv/FF1p:`F9ș.{t9u(VY|oU^ϱ5ڠ/   7&xv?P_ ?wqEssu,h^s) ³gqd2z\tIo  >HoׯxQ=c)T,YSohH{ ‘sĄI) p{PM], isOZ\/~{;6YCnmGm mgxAAsؑ-a ̛b[T,"  ݻ1z&O+"a$6L9 AT!"VSIӶ`#Lx)S(~*׹i`}>9AAN ,&_DcTyJA|/&(D܇?q:n9D&꣝ :0F::iŏ캂 0Z"b |ԀaPGZ'Kt.jz` U^>acc/f1C@9O"r6^M'vid ~PCUlSOM,X0 T{{{(Ca#*aG> DSORBN, 11vIm貔:B$#^W=|e|9.':/oDzPmGV€p^ת{G3Ȇ X.fWv>o=|qG1NAio/ɖK7oox=Dnz>rZꨆ F`bGAƄ#a(iQk7HNԈu zH&Q'h|qRdzX#Nr 6JOc٫Z_I E>OUw 8E3q%ntUӛ6i]C}7 a18MƲ7&°yLJ*LJމJ\OӰ_IG&$b (ƽ `Hn!]C\} :CP$~?VAiBx|L$:5Hڼ3 >Aa֝^TbWga7Rs^C077oYJ,EMdQdڪ;:L:66U$ {"wٍx,^{y> LBvue|.U S'X}ŭ+;=:Y6g `em4+C.&(͏~K霺9ݮCDc*i8mwA2:kL%Xk7JӋG&E4jbyk,m'p:guzad-E ( _VK 0g3٬\L K/%@-cW9ْqe?!s_w=U_m7=纹{yxS(N \<^鱼NbFU n\ǣwL2BW6YGEy`UW2 C K:05;M=U:=-y ˜0BKlyv*`P=H)vR "[!>g4믶&9n `Yu 3MV$x0Ot ^:]LKJ Y17_zY$jNc֠49㻜`O*+o;c.n\_Ǣ]P7KTN~PԪ}^voO|#(W&񮼭w6mbo=IixD_=".?S__gpZ ]۝i_%\&@kCj4G3K1ӨE}E:C#!'tMkA1a0?P_ ?wqEs 4:82:CI8kr %L[E<+b7Ϟ=[ =fn=+}o3$Vy'x_]Jt钊FCs;͟Tngvv;Ø P(jヷLX_.ez><XXBJJ04LJQKw?Kͨado+G[ gaUφl4{NG$JF4M:p>0. ,~F(^H;e ']g>*,6Yo:mB?@v77iҌv͂ ¸G魃sux}o!"63gGűXX{)<͌="bǕ2b=1 Aiy,s>α'ANg ν 4aƖPPD i÷bhmr,#Wﵞez|.ʼnA9%|krN7*'Vvk?)+%"5IAA8AFZ^ƞf?p p\AAA    "VA.x2lm]V ""VA"ylBl}xN7:DYmF011$nj3$ Dr%HFLKXo(AK?EAz "Viobm-\.^/M;kX\7co&J`,SF)%tĘӨUQ:udc(JثOE[KDS_6" pbi¦7amc:h`mu0gތL ;haLǍ&)kǺ0kE%$ElAN {3FW)oa~9fR=>vx섇{ɖ;ᱎwDuHfVL!l[\ArCG@9|ʕe[lPZ夾VenWҕ}->]&"vfVpLL8ð  @D  \ƎJLams0zl|N W 7qk`YL}FPN:7&[@0faYBbQFBm!]C^Qu2%<,đ1nb}+neGͫcèa嬅uAeqE@Ba%])Lk-r1s5՟ZcPe, ED ̧RHݛO#ǀWElf_P :2>x݁Wpǿ)H}cV^,iȶ[I(<ֺleeQM&QߧˆgXPc0 זlPZN^5fu,l %IM"zyyD,S)Q ̩FTHo ED b}''1yFU n\ǣwL2Ư:// {ռ28հv5P0XCE17]W+we s݌'bwu{ [WДAx7֜:gfmC2>m}^,b2ohGX]~?Ƶ>x3/$h;ӾKïٵ|vH6:8 ߝdsem ǑIEخ9ڗGU`` J#z!el5afq טS,̡ $ysoZ^/ Dl{r' X-{l# <,RNapllbuu*otx[=:Ɵ7xc8:AL,"I7*`5Cu2ѹ -yKM͊׎irE4sxV WYgJnCGN#GӔU1+ 0NߺxNu:~=F1"Kx:.  Q;1]5;֩c7c_o<=w=Figu ,"T:{hg]FaAAT0:N`jFj}9l DEmޣrWØ5 pvgI A[︺> )#S>>YۯeMLs)(:ꌧ Z/,kyt1Z]E?V !k :NӏaeAp=A?<]/r2~:eړLz8j:B8٣|^?MPmߩ&t{QQ}l|g'KXoS6\ 06#AC0yCAӧ+pNyg5XxSȨAxxuX'x\׉mڛ(?Oͦpmjm|w<6?C(~|~ \ɫA p=$1˄\;{q[@9n!U8g:@9z-&7Hy ~CpA%,GdJo@z(ی=sjC6pK]Wax:#_ˌAxq\K,XM'y6^1\{pO۸B=#qpl4 \~_|y ,`GiY5qpK}Cd{P{.ޤgE!zǂu= =Im:}:&=:߾*^u: V$d] QMs*:?[}Rݵ -['}q-oOh7XTy|ُ  *c[ Xyn{DK9Ǵ/_?ݾ~mu\Gtݟ  "bs ,UA%/D1^tF+$ WLc 6>x'+qV'{]{mb4lu4v4J=?UԐAeoV)Yә^}ח45޳e!qQQzfv%~\F^ gfyZ/|OŕzNB" E"LY 6mꇚR/PP/Pݻ-s :oEiWEV8_sSL,zuᵀwuqi_~6qQH~{5ۅO{]=M xD#كھ5A Zhڰ\ynͰ$_vuZew\jok3eߘS][=jwȆfJäfE/=$,]Vk]jcB [, nU{X+$,,=dˢWP?ŋ"OS/PݧuI/R(%֫|/ ie>N"LK H f'!X2Xo |ړDh"݃zlёv;S+©y]?|Ge Ư:// {ռ2u nz&hiul2;q+PPBU< ${wgK-Cn04˜DGu0|9nz]ste1k[}A_rPb^,)'0di6nhλ+1[u;__eg+ n\kzXbKv3틿xiPcJGsمt.ש|; N{VDQϊ :еln/ MŠ-J]WI>wZuYU4c.gĮcm,t AsA%XANX]/oձε+1u!M+el tϨ\u'\ަ~8f#Ƿ`$R&ũk2bQ5w@`AU{pg;cőA8L:p6ubåKp4xo:ַJ]I a\wU (25A: Hinf[+\rɥg2Ry5Xacyv D 7+%uK>OK-NJb/ cXAZ^(zN'ˊ"֢ kB ¸!"VAAAD   cXAAAal]Fyg   X^O/21 YM ,ŖQ{ uQNFP DZ\]JxNְ)  ye8"!T`YVRG籌d$TF Y XFj{p\4yN7o5'<{T f/㓭2D  o"bP"QAAjMo,ѹ^]IIܽo+IڻL]AA21vɈbo=|qG1NAio\זK7o{B8{&Hyﮬ) p9uJ@;n.fXԂ"^h h]hBiZY8%$Frɣ0Ǟ\5,5Rr * q+ +ޅ (,yChv(BPIB5Z3+T*0WH`VMsN:՛ӸW:-]utG;Zv,b=b5918 M7mbSlw(VAA8IvDI ԐXAr#\(+Y2=Q%BTq ,0 >$(`i,{D$3$xمڈ"'ݪ;Q9(-+qp޴YNW{687YI[7EPZ~KT֕7&Nwg=h܍63-!  YFNbqְ۬:077>5|VJj-bn%һ-QdamW'ҷD3Y ԟ66U$ {h6;j vZӆDo  щXc !'-Rڶn(!L*hjUREqm;9op\ $,|U7afYyQ^ 떱lrBR;$C8:q[ݯ@uҠ4BnOμz5i_p2\]>O6x[@<9˰VU o  c(lx'+qZx׵wk0,>M^G[n'H-C{5v+;ëx+LsP%^+蔱$T-4Bgl-;4&G:ɇ{HpݭsBt_L2^ 1!"V nF/ѫ95&v޲/ kۓ+鴖eИ%ml*ʒkN{ot F-%(os>ry5/%^8|B*9O<嫨 GjT9d脪(*_ٕט n LByl a_)wxׯZx>9\[y5Vv{tWm޿k=S|gvIԷs5ARn-& +0&adLڣ1YNӨ|S0!jbun YAA!"bA8wxXQzQdiƴ a0o`YJYC51^wbT6Pwn95:;U n\ǣwL2,Ư:// {ռ2q/,ԫ@hjxjgi6!<ΠLbfq[kn`Csؠ=AA8}di6=\y#;kXzfyVa,ں,4T@$sÑ,W96ܢ6$Lrye"qWET m%汫X^N%vfVq܂9w^r:T)˂rSF˂xD_=ݫSLL}}wk |^q ]۝i_|] j--N=B-8IOHi&b&Wdgqo/\S{Sc    66WWOh n@lo#X01{/GÄʱB".SG>!o-kpMBY"FZ@8KTUZ|_UyTDI[XEfWvP&Ph%uB.K +E&vz]ǣİ0U(![?Nii7NNOC:0po ;ĬN򟵘ɫxli!`V'`̎4ncUsIܶYbH\klkL,5aNh% e0?P_ ?wqEse"zY0Ϟ=[ iƥKp$EʢI8k2⁒v-#up_߿cy7g w9ș3j`)qGNql^aХ$A8J}a7HQ F(`9<|+ƫ,m *L"`A-'ak,X#ZXpT),& XgQ>:w{B;h4?^Îr;~J pݒAA8m EĖ @byz1g(2Uu\x[cGVSrOpFQTEE )f;Y  ]VrRdzq2ךĉ i-ຜ*SϬ<6+ciqm^|@Y8oMS A6cVL'zzցumtv+ѿ^`ҝ&Dʸ#5'Z?Ӟ.AiAYI;9Q]AAAZIĺ"@Qvqrp_ h]Bi݉/![1z6 x1y+KjXjab)TJ WhV (,u# $BY;7mӺU&z_ZuTq<=1|aĹ=yӘE}U E1"; q  p;1 iITnC$) [)yIksu/p2zž>afP';߈1ÅullHV8A#x~w|/s;Tl#|<Dz KmQmIK/Ћ[Ʈre6”!9!6sGA},k8:'˷xSY݁P5uOO<0H&MrqXNS'1l7v$*YX@rW3M1G%XT"x7P;Ie,,κN3J1zxϫ>sǝ#AEljc0]kF)EBqm(/(sI\G[:c8fdc|Y 1>ٕ.t|R-Z)!K75l _/D)B`\o 8gwj3w U3E;az?_u,p: N^2(Vsn\MQ q} Kn$bnK!J[*;-<5H ߚ+XEEumS:t@?s =dA4 jzc÷n  & ??/^1;Y MVB]լc*Rx(#9i1H>xٳgzQd2{ `6uFskMm'G7ozIŜ+ؚ̠A># P/NH]pzUv-=Y^P>?Yr:x~'N?S _bs-o|<~o=ޡjˇk!>N T u|ճ8]w>=rB!jS6I贚{ޮUsX~DBF"v A""웺x 9 u8C&\S}?4wPnt$+$&ʅ*JHݪtZvҧ0.NR$~,7`QZ3U:k\CYG{I$ItAI0/,/e"Oj@Dp%(-|RUTw>iڛX[pyv3,ZJN`~h>PY]$RxE]cn }\ 47pዦP2NxzP+1kY1`+%xL4 |0I> ~FPAA"bA8Al쬭au0gPu' W>#=%qs>ejً$*b^$I|)G^3*\3+Cq&̗2\ӳU>YjM$Ů}ĺ2^@[<82GJy,LE]Vs?h>\N<(?]QH-PWN#(   $X'<lmbu JLb&zUΪu﹓< G];K^("е.`D:ͳ(}EQ;Y$(Dy;XS [|lgϵƒ/{!4]']rʗ[[k&!q:G"[ ۃSmibYLgrj-׋J,3WAA8=LĂp68ȥKpvbAASN,   =x7AAAAAA Wq'AAA    "VAAAD $.lL"ylBl}xNGTDeN8!1>A興iZ.M4uѴ)mI۴u9Qu4B%oVbߨb㟚(Y0Oa PJSo3;ޒn&5oOA8e .\g٥I"{)R)3bCV%¦[׼y}!݆P^GIbg˦R>0v7pc=(zWAN/Cv.viزr[_Nq$+VPZ0}DHNH(R@E8xb(v{^TG9K2U,Hcu,\ٱmO~|2-)AN9L*Y, +~u痙ܠFbq8#qרUQQ8S5G4a+XbX(ox%}pC On ԧiht #xiz-Pe*!:,}[{T 2(l`9 qav*9p%i4I?q[:ByJTBIs˂rp1*W.щBBB#4{=̆2ˬ5OШr~Ӝ|X^ BC Aa"bXD>J/Ɛ^@5qD;:wzRzQeLdiLﺷgDD,%|% _o6Űۯc.wxׯZx>~ߘuWceG}5y;,07Ĉ"σBcVǘ>vYYTe=>ˆg+c0 Wi*t#:{P,LC*_NkAR-lGI(u'm4*̨sgMFMLUmgAacb\=ˊP@i=F*H<$WmXn-,7qck7l^ 0zzqKz]!Gt't)=er <=Jߟ/~P_sN.cF?|GeXYȔ;p_/`u4_^$AVPyeJ a,ICKߑɒx֗{Lbfq[Tr3A{ p4$b]ัŜKyAn'|7~׿~m}Xbcgm 9%Dq4nWp4vx]Vngpwu 韩3qbKv3틿8D=vwf۰ݠWp ~wb͜v^S7G&E4rdIDATJbj_vU` 4>M?v>9 dNܑTCe,ӿ\bu :n bZh1I [M ,*p%;{{)RڛGE{BA8%nL`N߱ Hш0_U-ne17HP+OiqҢ!@KwNoZ/w^u`Am?þaG֓' 6Vg9jR^XAFN/jN˧,c"EMױdRz-L6afm[aS2(̧uz36pw_u7뱮PR[y|GYUN$:+f\GQ-~Yh *>QhDYꄶ,$}PEGvQJ6w(T CPu\Ǘ.KUjםb:wW4{XI *dՔңT!eMD=T]y.s3'AщXcJ:%Xr͋\0U78@*,|U7afV7Uvw ps˙//[hׁ9!6sGA}x{b|mIG:rKʘYahnf[  Zb8bLsQn\ݼ(/(svxeMLsꌁsUeng"VOt J/Q%aE?V !ku[0] ڌG}x{>?Hz9lw'x:l[ߟVʕqStgo0Fl'WJ, 0|&Oһ엿]\xQǜCxY}lcYàupB_8x:<|Ts^&Hމ&=ᗯ达qQma~A1A8;tAy =C #+~nQew\jok3CߘuWceG}5y;YdÈk3a˽"[ 0 D3qګyg+Ʉ7HXRQ>Ae鲴Ƙ \HDԭ Wui⹮4}Z]YUKbFP~8õ| irϊ|ϩ.Rc:&?|GeXr+w*^;hH463Vʔģ^+{س17]WeZZ]u+twVv*x/bK#E:C,GcV+HQ>eyu݉Um/ ̱x:qd^"zDs猝]L[4c.'[u (?|` cXAN֓' 6VM~ JFJsw~ZTn8Qx;:ik?)6n- HbV˺ńEzj[Y$j1X-c#D*u?ThEyy4:gy (ZT3֑/,F +YI"XFkll$aj XPD5I??+IuCuNusO?l:ԨBJrAtOH:,j ŐhaʞZ[MQyn=qG[G ۃS3,N[=:Ɵ}kbAFOs;ox5ۚ\sH.> ʫD t<#"60}NPAƛr;~J pݒi:n˱"j,, ph&b O 2bziM 0iC$2ܱaNjr2r~pD:|Gs(`(j-ZTbiA0[NI3B%gAF YcxMj08{QoFSr_  3[^=G P09 D;vu敵B\^cz ZAAƕюU9.]rRdzqҝnލϫz9zatv3 ciqm *pވA4lg>ޓ[2GQsSP[M7rVb@󹞝`o-٠&n_u^OW;iRz)T}fCEadDS$qTS9ay/Vp_*ݨ!^r֦3NZqfCvoT~8vk^~"{<6A!u>lm-&MrE3OϴW<.A0Zwbs0+WJ gKcsss ) [)y3L6afn:05;MU8~04Iy/T*{SlwHۗ֎T6.P>=;Uc$g χgAA8ENS`]8[,m+;82(QzɩUUοUe] 9_U-` j?& 2q:E$ Km*eE/$x2v3_^.^i5?p}u"8^n8b,r HWª,K@?q/pl Vcs~مF.5>2i]zݕ0fft5mWi-[kz܃%[?+:BSznOqKB7#cw>veWyۃP@Pώ9;s3`)7" Zbb fX%x_`˾U__51qK Ϊ3V+2$H9c/[1>-pD1U$@ VJȒ|ye:"Qs:qCAmPK^txݯ&L,( TCy{KAg S>f]~)Kj\kU~iTTByg8obg]W\e;14^+w_7“ǽ[6g1iw:Bu;DDl¸7$W+Ȁ? ;{^*N籥^AiAUN\c h>y=?ƢZGyIn1<A$؏=dLic{sى1^y!]@5zlI8t#AdL phnf[ 'ʣ0z- VA8ňAFvR?}4Ă  =xWE #V?(UE@|?w4AA?D   w"bAAAAD   06AAA M;X㰶NbltF;j[AA8hRHRg>V-Tm{ Ў,"  4pw. R''/OZҿO+"aAA6"b(m3:& 8p}rpAAs8<k璈LL`B$wVDSKexrz`"P!9r[G²S\bAA/$t ˲/I$yHa1Q8+ST#UJ S±Ӵ7jH1IG"^rΫ{,m;Vy#nJo {)@-|z^O9\ct:8.ɖK7o06 񻞦ѻ~8n~n_/9 m|U:aSGAAH"})h/讀!`EKZ@z= qajė@Y=&J Ǟ\5,5Rr * q+ +)5@j1R谑[ |%P{!TRiPGUCXP\"YE$ u7q;,>uY~w* ꨻}PEیӹ=,{nۣAev~FAA8Iĺ/jc_+PCb ۨ#aVĆ첲%˨ك4>UB̓ ,00$J(ZƲWs(VIpeH E>OUwNrPZ4WB=rq[ƯNgaħױ<6Q{R/$pպrMUy ڠ;˹AAApa+_ޟ'~+ŋu9g5XdYP(#9i˵vVuZ "<{Low>*ѱs 惞nkm62;$atů~qs?m |U"M]=T9{U<Zd6;,êC? A8v$bROUͪ4g0Ǚ:'5;FIt<,qwJj)|/H2K|N|… z<o(ƗtB:]Ô.?][ n2:>6Q!cbA89& ܝ C+f29IZN Б.֝8iP6[.k[y<$Yyr{ j8zoNxqnlx OI^q"?*> Oױ5OHGFS2]n{R־ֳҫt5\LLyt;: M<;(Grȱ6RXhm9Wv,jۓ7 ؇ϱI>PG-xD9;aQT>$8YU+NYԹ~O ^1N~yt9ծCK|lvq\NK6Q9;Ӟ; ٢W9|sm)7(k!Zgާ~wE~ƿyvvTw[ BoD pjh6'[d=yZ܉w! ov$4M/,IH0jk ͡-> QbN$HQ-ZΗVrtDT*1NsI'-iLMw ZtٸFQ ^:RYHA2ײJ33%N\j ĕnh^ޭ|㳘4 ;u{nto"M"Ra|p>¢&s":im:%09XӞI,>ﴞQ.Ez|6RwԌ{/ݤMs}orUtsy 'wx:焠rz6qnYs>;Xۣ=]z+&_kWI;m+=d[-ޠrȦ QWyuPr ޼ *VSAsez=Ӗ]v#<;מl1q$^I1˫k|,AioYEIEm}f+KWPW(_Ek'_Uԅ=POO!C'TEQH䑊_|5xL5C,%H7ll⮕ts+~+YnM'`wYYku̘ n LByl a__; _7}57p]+nXy_byQ,vjԩµk{S+So&q\ à #gfOiW6RߛWc+-؞6{k\ 1 #cŵrF囂uɨj׹WuoxN=jJ/71՗"I8"%D/q_prQVW8AIuףx'+X|x7A}fY =+ JQ$éNg9]<"ʺT 'y9UU9~л>u7It(t~X?{P?q"Alǭum-K^  Ѵ7j9}1Tr="~]efe%Zv7E^eg+ n\kz| . δ/ƮҖ(VB7[\ΫWR.ũyx?B/~f ]./LӋy+nŊ^"ˮH W:BxTopO&u% {98H gW;StiX5xc~픔LGz6w%vEm˭ssw d>NwیpMދ_c=>՝ ;x0mP*WqSp6StAӫ,:S6Wbêm-~7 ' V[$XWW/3ξaKm*B/+$RISbbX(f"![$aZc#,׏BY"FZ@;UV%ab)WU(i+ֹ(An>|j6+;qK1UXMu}U??QdJΘ^7oۂKiٰ3u5_fv*_ee1Z" ww<.s5:qU9[HĆާLRΣ酏NePeh T^F=s|ȩGZ䱘=۳%KԝM0m"bwn7ٶD}^Ћ:h;8bhm-_~pP&Oһ엿]\xQpx:<|T[\O 9zI3m娮 D&r9' ki$5AKYH5ˤw-æ}sx7P;wP[Aq$ Xv 1]`EK9g-酶h杵,đՃ_Bad-ge)W K95T,܂Bi\ ŠwA K^PV+!:,O J+j$%RS aBusf-\ߴ>$_S9aymw=J 1 ~PE\G8;Z6.b=b591*/Mt߼B*=);$m5nzz=ܛK=~kүp VֵiLsϳ $ ~$b;LIjH iĢy4s],d2C~WFm-uXa:$ne^du|^D ^v6IliTJfJ(6ܺ-޴YNW /_R6^ 1ԶS6ko:o5AA8iFNL1k؍\Bsth>e75ZtK&wDɆr\9u8~'"\XQ"!f| 7mXO2vZk+y4G ]C_ր|!0…;Jj$g&mTz80m9Vi ҋ|W琠+Zwi/zUa5{%zc{so AAщXc ^p^tc#"WZUe|L¶QU78R[P]0g3٬O KmVmK/˛[ƮrE a5w!s_AsTn Ժ`Pzȧgn@a܁2v O`>B,.}}|NBE B[P60<^Q Dr:jm Xg]ӿ gElb ]-wY@k+  ZFh"D1TOT "[D;}9$qi.h_mMLsꌫTi,$xBe,,|:'NSR+%d5)5l _/D)B:a˅o]nGN\~-0Xt*'>J#kUAy4 $gp\4MZ<;0ھƘl Gx1c2?UA43/{g~EWg;Y MVF]vV3}uZx Ӗk! l"&~;<{Low>*y>ӛ 'Kx̀wq/:G AA+/?OzSiwa6*6'W`VA^_MavO"s y&V-\LWbAAA.^ӛG%Hb(,A8Y[`FI6lzG2J,  y: $t ˲:e$#I6RXL4΢Hu8l?N?$X'Ohlmbu ;WbAAAmyx |ԀaIYJ7N\x[2T)?397>DXAA8 vɈbo=|qG1NAio\זK7oS~h;a9)E/e=(-|v.j9jֽ$  ‰q$늎Xv 1]$4haoo"^h h~OY# S+'Z1yDUj<,a1f[PY(+w\UXIyR !a@b-JSBJ :X:VE/9I4ToNzwX^_~0#PEܱJ w>#H_Ć{{jsTBAAr$늎Rv%-@*PCbI~weeK&Qi|6`/O#,&$gH,/ot64J j}BmDϓXk՝ӨĕnuOU}KwNo,uѫݏQ_9ÈsxӘE}u3/DiXF@B\AA2ZwbӮf%19LIS0 [17]IQdamWza`w"?L:b 1  ©`t"֘B gKm5J#"5ZUe鴝UQ\& aN(u*WFn-E ( _.MdlVZ8ia-w}nɖ<+/i/)uC2s@uS7*FĞ-Y7P1k:AA8%6<-`P=YSN͉S!(NU=[sWiH\AAA8 &]~_..^c!<;YJN2f$PCɉ%L[KPZYMw:x:<|T h.M#1K&r98mbI˭aӛx`1&Z!}hpm tBBd4 :uOlE00u})/.Lyz1 #?Za/ƾAF {Ho ©%|k"n҂,UA%/vL;Ƥޝ ![m!ޔ},G2AQ'? NdK mܶ lu+K:8eIҶB;uH?yI.::((+>mZ.~쮣p1 iƽ'0/ +]3\.iۼݿQϩsRlwZ} wno|sǩ~֧{#-LL:l xANf)~9޽wx݉MܼGWS۰9., I/Mi~֞UB0-S tV(ޝ,07,듏RܱP ڲzwFc+{$aP!TW>bZ\hx5ډ^i7˺%uRPR҅( u zVE3ͺ=.ik6o> Fn܅|Bր`ﶦ-{,܏խuW;y05&0f; [^Y^~yC&~ Ţyd4k/ϊO\/=ٻ Yĵ/~e^:<傁Kqs^cV>csv?PH/9n*|x]LB7t!ڗeuЋN[.iGx>dId*g[$zmX ,7 6C-O |}yBEo[`6Ma+‰&pZpyv3'vݍ6GG]()nABWY9Irزϩc+T?[ 5eme4Wg >K6;MzE]cnRYnAu ٲut4,Uuu^hA`,]GƲyYtQWi~OP@ף\ԸѮ&5CeÄRk9H[i{U?v)Km&pya 1C zlmbu 69˰VX޾^9x} 0 j"(<^LӚ&8YiIH]\q}J'U2)-na16;hY.B™4'e^۩ϻݶ9e")ce^ePwmSsmb\hbZrDPY# mמuf$2[n]kk `^&)mַc`ZZkAi3AsW^{z]~_..^)4rw>*xL&ϥK0X,aAFpB}ųn&iAG}=OX[@A'+bUvn9$F pȘXAA[x" kunQhWڭ"j ϼ, 'XA8iՉ_ " h@<5OGɉZAd+gn*VAAwD "`AA 2N18,XfV 0*lz}tV>'otp4&b\ LPO2)#9@Us6}9X ,6%#^"`ǟrt.QC3a|/&(D܇?qTayڹz~t< Hrq)imFX::i Xmk,XQ{~F FQ6+' &~`S[F͝v*u)w=t &MrqXNS'1'-͎I4z):~LYJ{}?=! F`oo8%Aw6A~}(Oa,=܃c\y8ZEb(yG>h"p8-"QAA*s T~f zуSJ{#㏍u m6?B{KL{˩6Iһ{)R)3bCҖ~\^ӭr={wzC~#[)3peS{)~z;W LR8Oѡ!&/{P8(VfKHTؐ юsHj Duk$_ "mhW\q('VEve˜ڎ-seἮ%I|f kyNv.6a6rȲ0$ny= +ӖmP[Q`YHLHEԡt/nIotNxݺ{찜8Iw˜Ի'M-bxr6ft1>-JƐ]wx鄇{ɖ+ᱎwĵ`[zlbp7<; N &7qS&zt[k#eֱؖseǒ=}Ku=M֪W멷zN=8{0)(/*r}PlQ 1t]~r ˆ8uαbA@ -Zg-m"V= qa__?=ad-<.cRsXkfXJҸqǭWDb^t *|RJJ˅tNeE:!,,,d!,Cj/{Z}HR1 !g&yDM̏|zFڍ&{"p:7S#{/mg@jU(t/AZIv̷U+P;=<\%˨2>=Pط.,%}[^ޠ#;Qǧks 1oY+JbIuZ"|TP)cw{:n2 pjl(ӋLߘuWG}5y;^ыo0Pi_映<@>G;ic ngόI(u'm4*̨pvM8eҿYJ݇}]=T vo >Ef.tXǓx f( ,RC98>eGV6ZFɆ \'6:]wxtr vN!Qi@:__o,…uj'*g V-\njGwxXQzdqG/Sk*rŬlˋ$`>c5Li1r4<=3{1=@>гOLbfq[tr3A{'܃w{ZZAX~tw.A8L|+_ӟw/~zOȨ<@&{Gzrggŝ7ݗ-ezt/b:?Ǧ-1@"&HAK5E-xfC(y\U\ܼl*RqqXj";}~vC̳$%FѠ4u#݊mfng'6-C6S),Biꋎ5nuXG ߷0<{Lo~Ok_D gc<ba+򚉛3m{Ez%m v?)ǫ 1v1 (to t_.!b"v{("I//l 9+Q'_>/VmCo^e%\z_q+s+Qނ<=x:8*'m*}uY,tlVTcW'd9Mщ2r!|(KѭbٵP<곺"wN`iSeMH—pASk-4W*D)6TYaͶdMu*[ T#q}9qrn:C B4ۺ}(}](_z!vexOQbrji)"̚ݻw#7u#in&Sfi1C kjCP2ly }(BQQ.J,=})lغ DDD43Er`_5>^M'Ӌ<7g4b DF& nxq=h--qüvjZ\^F oCS^&U]B=8q8p8l-TQS}?U^'+Q<eGI NjӶ.Q5U5;=t҇Ӱg29  sU|0ފB|rE5i]?~KlFqz:'bT/ya:AX@!s@o-_s΅Z$#aZ1s3yL^$l=;቎HzƮ<4U5 +$Q;;m,z*""ouVguGbO1l7D`8ukWX-jO2BI9yzLt4;;vDDDDDREb(9xװg3uqW6c> lmOk=(QFOW2yVN5Dsckqp:iMa.9 Z#; 2[SmٴӣuE^クSjw?,}!""""65ƗCL+nWB_`Ս1kq@itSD]~ FVzֽHz{0{thєhv.iASȞHϯqS?iN)cY/DDDDDV+vweHޜW*]Jˇ |\;+S׋*@$׉n#WȑD+vdH<5;*l,QJ\#@DDDDbF1.=>"""""ۉ)RTb $%E|Ŷ#AmN6Mt̠^Qic- DD+?jæ* 6Ghc(}icyȒ-s~ݽ`eJ$K5"ltdPZid^`'W(*ppL""""\4KD?NDDDDD3a%""""" _CDDDDDD+ C, DDDDDDb0ъKDDDDDD+C, DDDDDDb0 BRFFFDo-K[)))WGt48I.Z|>zOy{X4WAa9]ѕ\>8> G7}a}c}ar3<*;,VYضeF5şgiPy j~l?)mLN|Fcr1vٺaTDžݐNQIENDB`DataLab-1.0.2/doc/images/logos/000077500000000000000000000000001511411446000161345ustar00rootroot00000000000000DataLab-1.0.2/doc/images/logos/DataLab-WinPython.png000066400000000000000000000644441511411446000221030ustar00rootroot00000000000000PNG  IHDRqF1* pHYsmhtEXtSoftwarewww.inkscape.org< IDATx}wx;u{WՒ{6S PB $P$|R5 )6ƽwYե]m~lVko*k3KAQ3=p%rpiW(+\|@R$R2$KZ*()Ly7 y,eqXIO"$Hb rAQDޫ :;dTJXak@@" QkikiL",x c-,ѷzLI$D BD۫p5W|XvA0BVtCAy7L%<~d$ 8^Z\V|Ckheɗ$ur*`kJc1Bh6l6F6MX>OACı7Z7 r3-LG$YBgݮxDrY)G~Rd$A&f0 RI?*)M%FO5FzBg.Mټ Mnټ Q19 .6T4!ҖC.s $_G+W⡕+_Ў;_f jV, J*2: Jm'I Eitϛ$g|;6TA(iEu?ܴ8K2wu? 6k|ZE+W⡕+_ʕxhǍF٫h!@@jV!4”Zlnu3jd*% 2f? 474ٗwpbPx6h7RLSZpf&ZE+W⡕+_ʕxhǔ/IWcQOl`1 Qs svCdN|8׹IAS&JڌbۜLz)یN/РQ1)."+_ʕxhW vkX+)xh.[C})@~s'_88CPnt"nbXml'_}[ʡLRxA$^\{ooD%_b[}5GE*>{h)_(S^0ŒvP!e]V~{@@dbzi~H tj67c"!ƾIGL@"TEQ{%x}o34b-Z.HʕxhW<~ pK8KN|1 IxޥX1"ӽ>ߌ-_l;--ӍKW,0ޟޱHJ5}ew<3jvms| bzM"$ IJ8AD0,I(FC$OL|KRH;RvOp!ř#( T\3 W/ЀkoqB}۱OԫVXT*y`YL~pu3mUrnjwZDC []hhsżYX1cI"$ "H0/i F!AEυ#_QJ ݅pb_cſ{uOB ~p\[Z[nظ $ }!|sSSR.o:`ojnRIBjDu,O&tI$y$bi$ ,saD GRژF(+ۛ!8\qX BřPSLܾPb(]>M=zpdŜٓ&M,w#O߿<w6$ %DC4 %AJE['ъoXl=A |XvPD>nBO L[I2fjYE>Ony~_74Yڽ'O2͞5kN~^nfD|I$y-Q " {i8A@vk/z BZh:Mm'HD =ڟso䈱';bk@-}h.Wp8&LF˔ɓ-Ee4Mw"s DI$vx9o@ C_w^Z"/@h68Z-:Iu') ʮ(Jpp8~Pe@,+*<7OBVAPBT@P$IHRāqDIm۱c.eVVf^nNN^zZd2AI?h/byP$Vg@ T(/3[#xE '\M)ohw hvqKS$*RR-e$mͤ*O_(@οG?ջ~zI -r++OP%%΂l˪H0"HG -.]iEkk+v Iu&QjxladNvMSahRiRiX0)eX4Z*-J>͢ eX,CWSx|!O~g~B*/L"2}ewѶg@/v{EzҙoʴB( {!Hk7}!Il;I>ix>8n|dRs\8e<χ`0pwES`, ( b)HXh@44&=-8utߟQS[GWjAVuDxu04"Ѫ}Pg[1(0kbbRVJ9r[4wxA~$bIeqJ'] qxkvoJp[aN. RҾ@*%KczYڪs\ط@@$5{`ƒE ΢ ZjuմS2Mv{Lz@FYݸ_@3Zv Nt-oPxD_&h.,-5aV͟aXf 1*V $ ^?L߿ 2H7s[mFvV&G@$Y$Mh8׭WN 45QA ";>vWn_lٮ#-#-U uw^?}JIZC"L"$b%4;BxeW ><Ҏyz,(6cRYfӆnIZv$kI e<3hE @$Oe{TL/!E/\kj@@ 8!Tu9ls[URkkdg=Ps/^:iBI$‡۱ij,w5x.۠(@ HVz=x|Θ`,aȬWt_&C (*h1=MWMw*-g pOݷlʕVD24$N?=]8ЅT-UӲPQ hm@0zmI][%pTԇo_(KA(XJU 1]*zH: )+UvR]Ҋ|æ=Oc "&JɔWplM"/+a V/R`Ai*LԼ!`쵀@HTaNh1r:e3St~&u;@s/^úYVv$\dQ J~~9â)RZ?8I$A6orcӘmĪ[U, m*lU@8p"P˹ RF?\x> cUcb)wm6/ Õ2Ժg~~ZiZKmwk{2nDt:F Q_x`(FMׅsN%cϮ(<ivj[;=&0I FH3,c(#EC{z2Qs&΀v}&E ШIeJ,6jy[PijAA+[+gel 51(L Dߢ߂85|(z=kAص`z^o'VAQn3>24.eSJRkl4S2-)&2|y^P<Ғhժ{lMy%s2ss0jgo_3krqhjwe<>[pﳵ}#4L9o_3>(ys 8ՎC黏5\pcgYZX2#יis/|u1C߻ivWAQViہ&{؝[X ejk../_3)ˡ`jƪGZX>@\xDeBa9pݰyi??E;=G~A\g$OnMK@d"`@/)Ѱ@T7$p|D(t< c-:L0't[[cy5$ "++3._VQ|oԾʶ+Uo||:U]dUܫ}yKJMz!T3=7]6/.ĉDop:u!1ְ: ;Lx}1k_ʋJU_;;(%j'?㰸xؼ^ZwDAw-pE_?}pV.,5#<#ڞTv`)5A3~?-/!NA<*z= E6YZ:s`U;Yc23kgYy((CVf&xG]]=1u .`ARޯ_>ކc;/[TLafCA- fFNJr(ӏڔѿna~`y%* X~wM pzWk%/*FD[v]K1p s&eKr~%8PϞjvnVe&x9Tuw??51\[ xA A {^C @p x6ꩀ~9 farS+PI !,C +KIeCMx1ɖB(*,Ĝ3jގ;wi}U~˔ba]BN:,+VK:/0yU~nM1 pu3_ hJI(KEK]qdċs~|!ŅԬ,E]Z]3@ToiuڠV%_4E⾛+W,)fi)UD$g6f9kbV-*2|!ܩ8|4*2~$mT5t}GKo75NQ}~R\^ޟǥ_aGkiAg>SYԑ%h{@ėu .-fbiuJA/uAMOkOBY-qy6C& (Bp@f 3Nt l1^]kケ/_ ڜ|x &.*77GGCiIoh SR,.7(G$4\vӞCF7/ȫNvy$לQ6b<8.Uc IDAT|}{`֫g|sFDLƃ-դvݸj4הs;O1 ʲ[ͧ{셭B&s߻q-դRv8cB^-5X^6sOw7({VUbȑRiKLg_Cǣ/l9NE^x1]f> UF)T;?_H8ެ %::{' pZu/ RlJ">p39g6lw:}ib<{8FcSVdj<)ѵVB#˟R쉙#}Ktc56ˋkF}g|mUb]b&Y,0U5?|>:y'x6M٩mmml6T~6 QbwI1I+WE??J6Yn.N mI~kA2IbP.ǿT"{ k7Q*4 eJ4PjJ V\\BIAq@\[ tʨ1{kFKfqW.)G:X̞*ƭO홯?]]>!isE3r 9($ 2;Ml4t#XK݁@v\Jժimmwtthvv+BqܠCJmWN{:ׄ9v7Vx6> <@Hvs&Th??A1^5|mv@u?n[1'~&+.Y+X Nj׾C GqnDE.?%IzlBg67ԪD /ikQ=.Nvhz̽$AK'YLTxŒg"B"np"Y6exPgr~Y#7.C>'m^W$t)7ݼg/H[F9pꞯͶFv=.nsM`fɒE眠jh\j(X`܅`0Up݅,~3 ER@.,ΛݖHFr_]5q̻~pܲ1 sg$Dā>poZiRW D񂘗T^6@$~ắ 7'|?vyQ{^ hC@w:E ŤsCgtg}t3zI_b]7X/?B4{I _237@D8$UVjSRհ4/1Xa*mmmNT|>T=Β\=g6 oaJ\^&NwUxz̼޲ pݵkPR\⭵QSS {f0F.?I5iSc )3QNvToMջfnaTVe==wJf$GTfDmn(VUrT`Eq5crY>6;%aCwy_aB=/<|bR8IeMŋ:;xwqQvL -}gi0q8>.^5*W:3ؾFf6(G%Jf!l.1 /DQ$t:U6F9|f(JY) l )IU!$ =fgaqO\e+>^V)AC~6]}3R4j-P_RkTlؠh0'Y 5*;j+ N$]`Oq *%39,CF@#h7fiUƂ[P2_n9 [aq~h)!|nvmHKKu.^p ,^,Gnng0QY'6/YPfh 0*:̋Tb-t`LxA$b2i(3ЊEw'3.KeZuƮނ{'U= LBQ}8)ZMNů{Wc^q̝Mb 3*/~+~R6gycǮ2N+- x<Ձ@&bY`ƑPIǎ^Jsq%(LCU0',^ek#\nı+xaP(lf|Fx<} 6}N4=jĢ1Ҙ %Q[oȔhN5<)']g_:'? }ADך"Nu]P`AOL˥B$I#Z4ڬšaCc?iev-6=wc9M5K3, 0w xN$ OM|CQӰvYY' 51iҝQ^^wc,l=ДQwh֤  }0'J+$6n0W# n[eZ.!,>U +6HwlěW>4potJ_= *|(0BɞW{nC$~XVn!t& A!&w|u6œ~:0Զ$AMfĴ=䒔o73 m쨝xVzݖ$6;~ bRQJT0w mtf>1ty'}>KflsOxVfHb24%Sj-I<IXV K N R, Vwmn8ŤvT^wIy 3E[~Sq p}.^XP A=om8irG_ݞ 9a/OAS$z𧻓ט ~sqғ ?m:A!~^~eۤSz`SnutjtJ-*~qE-@7AHp$ ϼK%IO}ufZ ilWfh'V5G;o~RJC^R!b2$I_oq_~9y^T(.a.Y@>>ee'ڈoW\Y4=/6p&͉bKF3 >NNPa."k]͛~͌LI`Ŷ{#Dxͬ¡ĽOw+EӳĢ`+DK" í}VeCߪfEIAH$I랢4MF MX9 ?zOKO8Ҹ I|>~?4 4ML qӝq "jCx;TW\T2Q\clJ57/; ӏ[N7z8trVuko=rvj† ɡHW^TI93N6ӱ qդcfM>|Vx;*sbEռ&se+Cw_?97]g=Rm.OFu goMt}$bM)I{lE3ZiB!CG$f-ӹKa9^ı+qk:MiZ l6-BȒ{P=sU/sm -o\<+׭V ܆ ?`Dzt{0*@ |ہpY_TC-] Jj^K]<[r");]G݋竔F [ҷ>d@P*hHIIdAT\f6_*77=+8Ѧ߰^}dGJIE3r}fZS͚>:n_3-ŧU stzQև [\\]Zʼn~(zIIxLQSȨSH_3#:K!a-e YBY}v0㌲>`(?rPubU~k-+uZitDx^hZhZ$=4Dcio|t|X Nj ~s,sm*rݏ. -zDޛD?bP6]sT0̓ ,F fhm8]*9Ģ 96 S_ RJՅRMj'"~>MP l(Rpg gD9NDӴ0,0 ϲlt.6t:|0IQ4*FYp$1HC^ IRiZiZiZdF(J`~7=!BԩY)=Eå54*FfW}A2 `gĤ? YЀN)?H}_É6DA@y LLe7Q@0H@90܂ /vE8#wlRj6hu58e/q6g> w{.kOwpS0Pf';\Pv) $`i_YL *%+/L9{n̋8* P Hkv& 4M gF`Ƣ(Pv\,q4q($ HY&"eRM-(ieY' `)T$.3:_6}Q&'^րK'a cb xcN"NOp:! IvExo;  x۰x[S-ӫa#/ĸC$U <ˢV3 |= $IDO|omuHB[빎-\/pcq% .7< 7c"7oϰhLQF͋7Vu`b|ʩ-߸r*xc;/_ZƎ͸𷟯JI4 :n+o<o2-;MI"3` p8<.Q)X{~zLQn_$zGiZIwĬ4},(NT#LFmD`CgV A F1GJՙZ:=iT >MH1yD|qN_(2v|J(Yu+$ hy+,ۆT_~uR{$1"Hv E(b ޗǑ=_s`\,1sS+o}Q|O>}yS}W_xo p/1̤ӿ~S?z 4;xtWӉCE]l^N)WFSxbhSJ\.'>CVKKQp;Nc.%IbO?tZe+ŋccci$0pB,[yC&4 饗j"ݝ?~x.TD|Pgff{l! Q`^]r%ۛM"5%u0| +P\\j1l!DZ`0Ȃ ? hx~~>022R+EcP(m/N|p]Xeٳ'D|2 #yK,"<3/ۛ9rȒ"NoFĄrÇ󭭭Nl1۶Dev+weYu]NE-QA w}}f 2: o J­IyF KFaw"(,0۶9㠪*$ $1۶Q(HtY;M#PzTW_~"Wovߺ>r//~$ &qv@OϽ/ׇl~|ۗh[p7m)~sqc$ue^Yj՛1FRI "qu]Jd2RT'}.0Ji(%RA288@ɤqƍ`:%Ir;;; ]]]Zqp8455-)zgmf:711azȑ|… Z&5M<ϻCCC*y_agY&eYŋR*:z"Va+ իW7oޔ-YJ&fyP*Uk+sss(*UL=EM ĖJ3gbߓдꢈՄydQ"\XtUUepQJQ, DQDMM sbQqbN!qyu_K_|ApI++Q|C$$gL<}jw/]\0!UO*?٫_8_n<&`;n(,-ʘ,Km۷ѳ+": .瑴hYddYv E(4M. ecccABbf:VfggB42ƐdDJ) öZtќ lll,qb`` 4>>xn3DBv6J1Yv#۞_ ț /o BNkkD~!˲o WO>dp_?6|CGQNYuϜޏPY+#x4{uڶ-z5un9 m)X%x'RJy`lF%oUU ĄKB̌d&/{Сsfgg2M K 7̺Rٙ$ y… 5G5662IEqK$RKӂOi!G sssb1; 9$-Ċ"_[[k2811R)ٳO}S(2^yXX\ MӢas‰D>|Beq{-B!:<؄._)\yÑx+b }:S)ex O  >N/<)CX)ZPݫ¯}*RY ~qwoڶ-Y%.|_8߶ 8hf .\t:-qkjj*@&IrR6ZZZJ|^T9c (>uÇs<ϳ>8~zp%-,,eY/J$Y[[Q__oKDu]GGGc ӲD4jnn6EQt_}XMMOE"B:q듟l8v,^~R:1yhh(Ç =؂(d2K.݆$-#,(I+_JiА~sb _Dk6 `Ws[Jqd ˓M fHerpov1]ס:Q@ (Jm$yDQB! W"auU2,~o},<mٟPUE4ǧsV}Ρ.^zcoŋo1}KOh,K^l_a6̖$P}] =4MLA$9@FZhoo/۱|>/KxܚQ@4Rf2277'@*Ef$= :|^LJ7J0 .ˉ뒎b2,Jڌ/J###۶ HR"ՙ^Cn[<ϳ`0Hײb;;;uߪEBb3qT*qѓ'O.q4_zh:٬H$ܮ8pMMMv24bm,O`H #}enӟ_ L¡2'.RgUc#0 Y*P*,DӴ,r9D Q(VYn0oSSy`ϓExun~DTbXJxB'=qDo*öxlYWfpX ;׵ss6h4j[u1Ɉ~_KKK1 RMlV@$H$6gIB84ˉ|^e0EQܶɓ'3@#Gr/_r9qzzZ4NNN*DZ{ ],/y׍1ucD"geflCCEAX3 _Nk?uU 6Unӽ\Q\#:ۚ:`VKb>5 $"p8̊":V՛ 4$IBlXFirLsS;?|=޹enA9Q8ݺU D۶P-',Z'y֞@I41Z BiNPi3N˂ V8Q)b-FVT$f2,[$qB煙T*9r0---wn\K?%IrW/2QJbv<]k۬țczP*cG{0~Tt/3 I`6."8qEN k=ַ\HO4Mc0 R(8˓)-B*",# /y* b, bE ?w~́篑76N-FULV39r{114MRDx,C)6IltAz_Fzf֎((::Y1uddDaB8jjjl*<̲,ҥKt:-@sss>hX$ tV}@2JB PJI4ԃA̯5\I`mJ)$݉5A Vâz._{+PSi)_;m$" Ɵ mԅA7D4'h0Byxy ݽw`ht `@R B2YPPHx<~W&/f 1,.dB5Es~o>oz=?яKW"G:Z(oD,S,7_жmR;#PJqDm1y\O|\6YݷPJ)ɲlkfMYQȒɤ~h&UuI(0RM|>/^|9Z(DYWW׶M&ڪ-dYv[ZZׯ~N,תϻEq9c\N,ܜ.Eq2v#ݏ]U8z!`΍V<Ѥ4;01ێB'..m1#E_VADF.D]l{hqh<: 8*qW+EQgZF{1Dh&! pwyRwǑLӔu]zēEQ}+Ck8B?y3ζ&o\4U¿c>A~6a7Q^p?lJ).O)(8<';qv""0)NkEެ qwz'RJ9d(~:]"gٳ{!BB !XrJ)%555f4 !s󼟘R,~~Ti5455Y$^=b衇 ]׹K. ۱Xxl9d[N>F~ŵD^6{^|'+ ɮx@A4D}mGg6f泘_͸(k=}g\5}y, B?a0 P(ʭ6  v0\}]J8Yq=4ăT -5xh3~n]+wF)cc{$ǻ9ûkʰ u=pPQozĴJ/J)8R,R*qI1,9hU MӨiV6)!D{ x/͉cccKj$caքv)ٹy8zA)\=ؒTbM' NH wi Y}~҂46P .s[ٹgamq+5E ܎p5q)!eCP@XD(B0>">3]- ޢ[^&=dt]/XRv;@Yrˬ`^ywAX@Z=w,c8|@A8^Zgyfʕ+А:_[[kwuu]]]2H$B{zz -+imm\-666Zwf kiL1)]&oH1YNam}xh_sqc::1o+н c [XŴ Ӵ.x Z'ĔJ%eY1r9ەJ;c18o]ݘ[+E$NBSOXu\{$򻡔S._YGomP̾G%[v,uBZYpB"?aiRJ!KA{U1 81ݣmΟ?7Yя~tc`eq)?ڶM8w.$1lx[:sr][;mVfB( ]P+2s* Z ( իS L(KPJR'&z/ض7olxd" RfRZ`͇v=!oe۷:\.GGUnB\Aܲ졪^7Oܮ 6{岂 {Tes{[y8v[mcx+X1%ҲnL̲(;*lTBWTC軩6H5MN=M㗔ЛmGc1o9cs(w6}6m;(E k( ""\],CTa{{:*U be6i {)yD{l8AaKK(eFMN!lwrjA|8y$޹7~0 7*ouihr+̇( (JLbbᕍY.*̌O_-g%:Oś󊝟ߴ:lӞI\Oal6_# q04MW}Ajիjիjի;>7w0 ˲Ρ dXP#Ř[yRŠBk; ‹zO+.Yf-=N|F۶$w6dXo &w]G8)rOwȵIGM oI16]62mn*m+&=J;NmxI4TE0|WDY}v] ^ "]<+Q֧JGCU qbE=}/Rj rw[ZDZDZDZDZDvGr )8rA.Kߒ*qkܽwڏߑ.|.٭h;y8zQ*%mw eGޅ"-M+>t2NV^V^V^V^V^V^:0VbEd?e5uW9܆Vu¢ktQpn"nCZDZDZDZDZDZby);/G;N$ n0v> DZ/@%ժW%ժW%ժW%ժW%ժW%ժײm_'a>?c1Kt-O)~)Mqۑ PlUlUlUlUlUlUlUl ?c 7 I%QyIENDB`DataLab-1.0.2/doc/images/logos/NumPy.png000066400000000000000000000162311511411446000177150ustar00rootroot00000000000000PNG  IHDR]d<sRGBgAMA a pHYs(J.IDATx^] xEIB8^ !$(@**x_++zBz"G L. r¥*+(twVwOd&BxGhG;юv ~P31Ͽ)Ħ eiHD"3<~Sǯ&Hb@  $G&,e}H7Az\ھ DYEs6jNLCu$]41kt$4rX^dW'\xV1.`IwulƘO6 V2p$k$>Dܦ0q zAF83 w5LihN~x%c$/#H'ח5{EdIm^bw"yؙU_Į7Do,Zx-f78D~Bp-d#a##~ҥ[?̆}Z\ +?"w;n@L!z%J>~ _VbN= Ds] u㻙)zۯNg ` .ƕ +'Dhh~(qi{k<з781 rՙ^\b}uJ4u?"0č(3?tcfV/#Q}NwsEPg}w4ZU/mTtt0\9mI$@#YL8fz7H=]4AOo{tbx7 3kT^`?glf>zB=:l xB4ս&;)Z/ĥ]~$}ft-]6$k,R(dZ8gbԀYH]hEɃ1FAvu"4.U]R0!L~%~b3U u-}X0,.#+i3^vo,ˣEQdÙB_sլ&-cm٠kC^qoEnf5tЩG }O^N]Ws:]6K5iaxlF|U +A|x<׸iZ Bz=(*BSEyPjFWbr݄NMaLp†@2JgrT/d[А|m_A`njvq#ZV9ϙY0r嗶!(ݦTk3 Onn G\xIw+J~ټ!>sg | e%UF.ҹ0"0KkTMA |QZ*-ɿc_(Qegt|pFgtzaM4CdKR^zK΄, F@H%8,]S\%EْG5mcngэ#~tp{ߞbCY~P:G%] $BKʋOdLWkr/ 7b(D[ЏjŹ[A!3kXU K3w^eWyN z.%8Fl:H,Q# $DIzcuƬdXn1AUgh >G5f=@)!P Z!  6N@J9TL1I"PQȢ?CQ |92c"S`SѬrX_>G&ropUrjf=TT.T(< Ӊ3=P!Y4%R2Jv#0c3nK+X3VqSޫ?OɒK [Q3 &9{VB Sn:cfX7]j$;huռ$s#[ӆ΄M'ON$y4ZV|(gꮘLX}@i[CrItΌm-F.TuUol6,+|U6cC(Uşh\1l4wQ-G=T5.wsE/E~[g D*@;'HC$h?ԧLn4Zt7k̨zSm@+=1L.F?Bl=HLn2Zt]W3z5:u7?iUhݭ{"⻙cZt.*<`P!3v]hFLb),;^GBfbv_y(43Lv| )h/Y5P7^}ӭFw*Or&޼}v#3;/uXm/_ ~fL, w݌j>zbm$>7/ w N{!.}_!?Nǹ hBΰ M5u1& (DBszy8VV`ߌ+_*iq iMl)CjNZmHw`@C@ȓD,C=#JޟO/zρC8\MCKtOsjc dp4uB%iHrJirVB?9; nSGlZ۳%"Y.ٜl}&ViA %: z8ކˆI. ģdKXᴫjTgrV=& Ze5ZtrL`2U }# .˶pc"e"[RdOs&o7@1Ub/aσQ*HvI}]댿qbF > ;^F-\9.j셸$;'SW} dˠIԽ~q.Pu B̨z{L!Z٦gzNMLUA#Ljq ~GvjǜQgOQ#닮gCd>! ZtΕ 5/~6N}U4X܊%p̋dg $\f~jJx&kR?;HWQ>iK+ʞyp6<|d4s4F:1ZOG]zH[D"OY/jd|06"sv=A2 $\IQqn0CLdHL0JoOjUI9rG˚kɐckRoqU?@6wdO2b q&k,,`}"EQ> 7pD;A$9{r&G=hlY,I, wii3*h%S$⒬ZiimH3 $uלעt2wLnWюvh | iSEb9)c@|G˭wX` Af|7mQzEĹx>{PHO4 Vs1/RٟjETS:_ym ql,fT_?=)RpT_l^]F 8JB"hӥXΔCæ#Fbz1!dj&9@ƋE:Q,zѹeo}jw@C:Ĝ*č?L żfgY|3=TUh'EyX?x~pһw,iٖm}LD8VE_s #jэFiLB/L =Hs2.tx 2aiC+㮝tt[i0{u(0wgF9k5[0Ewss0{FQ}[@ \t.)a=zV`_$^*,>NmUcAŷ T0@ /F/T׹DuJ:n AGB~B] Eлs!]/p/J*Lz!i%*BUsO1|gnwt:RJ#*@R;[D7#{[_A5Wu_D}>F:q@+ _H# q@޼zN3ܢ3׹ǥsxF`PG,WE XX\|Bw ;FR(a1=3Rx/I>Tg[t`ӑ OT4dUVhfBIN,B~MO򆞣,5 x̵K]/]U0|u6Ka$rm@VxhyAHDMVIVPF:-KU1ZH<4w=G*zoZ~*y +!vDlSP/QBB좍]o9F$ǡr=*+F$D.ֿpCZe;{xF'RbO@\&I *'Ru֡jŠӧ:_Ar> TE=TuOd٩Q[5UCUeC5ŕb&pTe :>n}!!ò^ O^7jHVPFc!~JCx0G4 '*ØEԩzt)#!y#FUv8dJ2eT '9$ &%ɫphj .- R(!Z,TqOrΏCy_IoG*jJZ]sHD?;6e2w `T Yx(c_^2gavcgkhG-HݍIENDB`DataLab-1.0.2/doc/images/logos/OpenCV.png000066400000000000000000000144271511411446000200040ustar00rootroot00000000000000PNG  IHDRLd,hpsRGBgAMA a pHYskIDATx^\ |U՟得,#"Pv+ZѺA$.m mk?[$ö|AKU,uA -" VPD@޻|s߼G^K^&oY=̙s/g %9gPx Sj 碟ֺSnt* ٮ r;y0׋MDf0̽pXw71gZK)sL5D˘3͌wA2L 4ku/Ӫ er8[9"K19a+ BMAܰ1S0u۹Rs!]]1d hhtCσ1zӤ\c(@KwDUب"Mhh4 s+w_r1Ƈsa-U4!&Ye "IG 1V!'o]=Nl)5$`mkPAH)R.ayX0bhK/+PNB\ːrز CI R*aEZO}0|.P-'bAl}e&$$VOR0dAno\OA*%Bu0 DCf_@r2Ys&X%pm"S}#F_);PM49 e@%[T(oNI)e=~D2MN|D2R?aR5P|b`q]S$^tԟ1Wscn|OM5E0jI-~R-kiI?L]+,yoX!ƅ\.8H㾟p]JR.^y%+ć3 2Ss8Wn)C8+)eֺ{#~FR>9VzI)gU^z2,8_,~BÍx$bXWI@㐚LzIՉpk%-7|5Q&]fNR^U$_f(ukj#IRMSNľg()G0 6nC&W#H [I=C5gs C{.]gJF[J0Kѝ~DlZo] ZjH1=ʴ`--J9ZѨ #ͫ 53!͚Γ%P: }m^UL!&yTvoɢFN 1 &%-}pڕOk!f#nT$rWKn:}e ?"9yS4q.N>bTog5tJ41.ҬKpq/vcY ' ΛS7 vIcDVJWl+,oopt"pɀ<ۈW+2R V;%CZ᮫,QI@Hb`e-ٻȾey)۟:P5S` 5z!sc}r!EFҋɢO'Bq vIYׁ2T2]%mҿo-ăkΚl;Ma5aki@•ʭk#-Nʾ Ȝa6TcZ_waG%8l?3g;Lv j0l"C͇1ͮlQرO锜A=k%mNcHo1vą^& |,ٶL,ezqQPz̡IU> dTYQk㸠/zh(ʦ` qKNHa-K̀Y4a UOdΰ[A,$} /!˟/jF邘5n3[CPŰ& VZ5Y4"P'(]> F݆33]{$Ng1!qz*'FJa-kiK$zWBp7{@.RP }i{>d'<9˽e|B\&Wݴ=1wGhOCI_ HeĎ@@42IJ<0h&@ O"jt yE808abb3Qcll2&,k0u8p'|97TQCV2͟?SA8)H O v{IvPDK*0V> T'uzM~ΐmԽbY7zޱ?OԹm[y*(RCC1 %=U"(DA}"vs"f\O e]{jbB X{ޜg ё9Ryo_]ЁTȖwɳݼ 06ķްWs06&Y;H+C  'jUٲa;CGF{ (Ls4u).F }OӅ:r!遒 *|5 ?Ёk6ȥrߘwj-^H%a3sإ' 78EfZ`>>V`4еn+,4%OQp8 (%9a<>ꀒ9?!-z#l Ol6kI!lNxW w{7m=uThbQ Ga&?Y0 gJB+Pb~/?a]X@CۜYRc|FzKyئ҉@f/5- xp0E*[m Օ*: emD3@Z鄹u%6iևk6/$̊evEgXI+U&5BzX'vvq_Clӿ~?v(RSѩfތ+`Y)=:[PQuNVкT)uЛ,|1B]R,x )/J1>Md;@vW =K\ ?pfmph!7Wp6(**4+]qy^碷 )f\!ʴ͒2d)esr(U}\*DYRS'2e">IR9]_LGk|2?$M$̀C>J̢0Bys iYHHbmeCW ^bAgAk3ٔ܍d@`ujvw~, )aXޒ6l(bcNHJám4yj.sf EXG<Ȏ4*[j=‡za!ܭN=:I`SԳ..,H%cQ񍃹X0=L_)PxV!n>SO,+ ZғT0i;fYJ 9i/VJW~$1zDBIܜ'v)O7Ф_`ւ x ?:($Rje@ yRO6ן#]G8χ6U|(Q*8۱ z OEa{(0u^3vjI"s^*7Ca|M69׫1ވz>/{Njd}1,yg f~FڏIcrr@"d.߇i>y>?-Wo,; I1:{wxvdp-$U8i^SRԻ8m8uXZ>a1@{qqqq"t@zz++F[#bŊViAq*FnWc>؟s~&~iSbJ=o-V,[֖II/9 㗎7вA}_ŕZ̄Lm!=bDgIIf:Qc^Y*XqV2EqdvnCV|>4ϐjBq@ )@j| 4LQ sVV-dtG#^p­Nyzo!`BUcn )\!?m:ѣ!yɕ֐KI4}?хRI׃;['n˾馪%02pvGIM̥v o C/>tK} 62+kPK,OH/z`fy C^Cn@T,4T 4::DSGU+uqADWp nc>v1cbKq5vBe#H:Dvru4%׏p׼Qyy+]@q\4Q63 aRB~ڢOt@}ԯD up>6 G40w] }~b޼y#4-^CgE ;#>aO}6hYW{4r򊫽9'&F֊~ܲbΗa ݪH)$10Vۧ ))zf{>q)p=@B`rAsd"⦠E8o"g <東|BYOjafr0sdpYK/#sr<$XP< Ҳq.hvHoUJA':VOSѹ׃ִ7av;t>ZTxx5fF4ܱx/hD9堣8I.30y:D|=RlS~~ϢW!fe9d4#ó> Dz7.ꉱzal{/Y(I]B5@txB!9yd8Q;HYVN}$a(ѫQF?(-k@weHR9$;z B7Mzϛ`G{(Y o(-1Rodz+`֓W?~)gHoCDV-h7~.BA>ڬ+뇓EQRrیbPo-2HΨH'ԛa2%|R&N16??DDϐIENDB`DataLab-1.0.2/doc/images/logos/Python.png000066400000000000000000000157771511411446000201440ustar00rootroot00000000000000PNG  IHDRZd'sRGBgAMA a pHYs(JIDATx^] TՕ~KU/ͦH13Dp%&eMЌI"(j ~" - 1zzzU] tDN{9n={_UwVitJ}! 0, BoA!в'4ja_;bȫ K-:M&w)_ *ml R-,́E߰ >"=hGK?8 q!Yb^HVWxd( N6\unW87KK1l@$l&IR^%x4,^iDݒn};^Vz)w{Nw,K+ | _t!vf[lv?ҩ oߘ-$iDV+ 2iὗXgF: " Y:jCjr8 Mm =qR[6A:h @†CE"Y4 ?KK*.0)жm`d\2m&َlx˼fJƙQ6WR8%0mۗ'3qf(R:r*ϗdu޼ȅPۮѾD!KKoHwBWHKAĜ,:gZv@mі 090W_ɫb[&71eo2JemD~Uvy]pҲ a:HG 7RODb !ڴ:=Ya4Td~++Svr9_Pd) QM^^8)oUk]jgu{+ϔ./t.K\!kig#;듫@•9auR\\(p.?hU:`/ {殺8zxqb(J&2 FY, O&Z]Q݄eL :K) #ZLEI&o5TR0 敏R㝈RZmQ *eG唞/DgL2'I,zЉogpٌ9(`$voM>7C-ei@*aV BX(7TTpa*w˥V=>`G.:e_0ok&o87sK qɥ/fmc7#َ-Zܼv¾ Vl/^m9sW`aSHH":.Rfec3SĪ<Ʉ ilR}g(  n9yDm_ ;w<VGv0#,$ _P#]+?ɋNIW.6)~]/;􏲰S?`:Z茳Lw([ tPTRǨK׀jY¼Wy~RD;oO^q[dHmXa諍eN#<tlӟ,ku YNrh-שgsfd,yUu\7̩hĎ ?ՆX~+b =!\uJj7[en6 "Jz 8A*N6orL,L?\yLChGnS;sazNqh'R^mD7@Ife:/u*Lv/ -/AöM?FbGLV>1 &wnM~b!c^RnIFEК־nzw{8c:nMDe (^Vݞwrá4-# fqYV 9n=rզy+? u-`=DzyCCc[]֊M(v^1n? j߬ǜuRf}Z66aQyah5 >:@G vsohMퟬ{䳖uʣ=[=PZL Dp8Z%,4tJK.jEΓ5|zEIp"ItoMi9;s\pE+:/5yئp~|N~63db۶w8e|*gyzM|Eo@;z< 0 F?-Ӷӻajby@)"`,e &VhL-#H}d jRڴE<>$ou5ݓT#"jsLt8Cʥj򧷏~+UÇ M ,0bu*6]@5Lsxe9B1|wl{ -fR ~ʰt.pÞwtתTۜXu6;cP;Y&O2L9qOs7:rjΫ]-&?3!v[ wz;w+F'25`NeyPu( k=}OHyg|-3`Lb{ a8++J\"6$2I ^RpYL/Dq-]6 5「.tL paщzg) T4N`&fYʬz3 Ʈ"^N^z矷-U@_pX)_L5㍚z].O r?vf1tђg1{h|YDG|9BtM[*EoJ8v\`X{ʒ((vh3 \YD'8]9)rkd>8x*mԶ@ iG2vK2vlaZS E(1 2`R-aF6"تaO3;Kԅ] jOl'Ԧ@ہ {xt5?Dnh˃'-~'u oL {ѧA6:܁S^mXbk{X^8d(^·dpte(,)Acx^@x>nx4 Yb4 WR_+s~TLHJKژjLC."g9 O/ʹTg8 k2)y3D>y)!$Vmw'.' 4_vJ۰ Y}W@` 2y c^'2*Фԯsұk~l'\,6AP[zck<}!:DCt!gv{`!5ܶmY p?we9MG7ǹ4HTZ}PRR>#QQQ 1cFֳ͓!M:]|Z/NXBp@kc G4㗯=aE'#JJJK/ 4@M@ E#-⃅&N@B4HRې|Y5ȑ#1˅?RNCn7xI/mܹ&M@kXOx?'LiӦ5W_}uk NJӧ7]w])<?)S`\rں\ z ټyyf^=7C )ҥ1%8IO'LQ7*++X3jmܸ 6Y"t_Gn /Fk1&9GFegk @RA9 y4|;QzScǎkx.|ꘅuBgO<52cǎAwn!َYȿukb@>]9L"1xJuug͚y }~&Bd]]CB֑E#ڻ >h1̥ W1nدS?r暛Q +PZJ x0[ 0bĈκ`JPbG'od|HOV 8_#ܡCzKDNK{;e>|IYgh\0g~>|0|tr;v XrCqu(UH A 6p*oJzw._+WfE%]΢1߃gCUXZG\~oX!+`c=S i^FLEވlh :=k׮o ej4"}A?gt$'?skI?폄meiπhrA&m۶ߏX@Wۀ0-5$KDӐ8u4=ۀLR c(iOq&軃?IRƸ*uƉ`țP ۛQ.:vy ̝;7εx6eMKN[gXc<2l/Ϝ93_佊2zu'bg.m(lGMޡq!/6vsggK[K!QW/X2>`o^[[ ov܅~K44:6{S3j*쁐nS'.Kܟ7Z&AqP"s_5`W:(os2ߵZj:9$\4ڹ3u3f}ږڇ||]#eM_J}Cr*Uv$[ϊdh$hrwbn.R9k~MMNԩS eܧG '0nbPn;G޷ٔo^<=y8h6EtW#3_^gD]8hx|@4| x# oB:'?e=2 '8-mנ>.; !C Y3*k} 5k~ߧOG A_D\`wΞ=3 [P*N+.GGUdLe Mt_ ؁By>l@pMuH~FٟtWИ.L4KmliYtR>?Ovq5_UL<9 mj9'dG@} 0?/B'Ӱ v.EW_ gPUGeTB r|/Hee`~~7~xv>yMpDß[QпwџuHBdҤIBv? Ǐnr 1 8qbLÇ{=UUU-ڷUTT|`=0obm7B3lذ",SE3gRId0ŘyFBLj" q?%0?e'[G СCF c*+++Ų7p|pp1*//[>:qPwӦM;h`'0 ۙ߁[#ġTDﻨyOߟ>}&me?` IENDB`DataLab-1.0.2/doc/images/logos/SciPy.png000066400000000000000000000215601511411446000176750ustar00rootroot00000000000000PNG  IHDRad^sRGBgAMA a pHYs(J#IDATx^]|TU?MdBH@z J UeUUU 6ܵ}JG?PvfҤPCfL{ބ:3?y~ϹJnnn@{Ό$KDC&*I$D*BOUd9OV3g) c\LL\SU$5H*U&I*^g$`ϥ߇UE݈>)p,Op}1/3v zW 98pI# 'pYu{UU{\-@0a:k]T!Vƈ 8bUۇt\S&3fT1I@!RCAx Rq!)"墍E%d\+" ,t?;ބdE*I0 !MgΠ]z{$I~CĐY)fA^ ;C{TcB{p=DK94{J0¶IPf{Ԫq,彰~i<`$M{|}ꉥB$1:U=Agxٱwn:L/~Gr ɍx3<{?Q0d0]NW#qLl pMɔs"~" āՒ095yD{Y-L gyzdȚI ͓{a`-T%mcҷ{dd!GXXcvX`x3{5K IKEJFnC7WöX#a0snSxB?&ǑAE0Ru  BmT]eQJr0+07LqZiʏ'eh5ƛZ*Չ~XWOQɢK)mowJvG`{MI| |BԌֺ' |0@ͼ~90A[l?gWnk⌸MuthCRg[[\.N|.ӅU0H$\ ƙq>HpR}74DžR3A1:c5C: 6JqڵN )kN# V7_정h&6јFtN\E][ &z~ Ukl^4i4kUu@BeLox @Tg>Cn 3#D4\oH;7EPc?]C/8]o"#W MݙԬfI=pq{k%j(ʄLHh'Lv F@Vrz`Vn8wd/*Q4+iWJ/RI,xm3E`d+V/Q:YHQ=&r0!YrӻSөhDԩL/}=Jh ڦ~ ޮlXV9*%Qx n*j500X z8u5 j݂E)ZU^ Iv3 TRWG 4uthnaR3=A[WʰQv''OP|Z4=kD ~3( YrĎ'ɸ+sGG{8GS M فgӳWӌuɑ{Ul4#DT{G?Ib`bBmU:VҪm9d0H6ʧNPZE;UJqx\ ,߯K C'8IOM\K:a-NǛU;>b~2)Xbzlt=l/5lvxQU6lɢXKnj /=S^0ΞҘxϡZb79m 3? ^7e64+oLJFe;sf$stL`ʴ}|JbO;DF&~)! Pu>v! D_~9#?C(ct>P.S9ؗ(pQ {{:⬓[]:0LPINz)MֳN@[Q#* =` 4-KbCsGERVПx0굀FH};'!h`ׁye6"gyk;9D=0KmTm@P"C Z{FZUv옵s|)@9V/lC4^- .].yΏ sf71-5Qӈ8\>G鏷;o6[{n<7ṿͻOӶy䨛(Jq!f},ľT.lKwO.4c|IR$0 ˏxзVnJ+_ !xڂ^:vEeӆ'iΆS3\S; ^RqpcGՑnb7i7pbmC-@oʦ7!3EN6c2AyP/]JԨNEj|KqsehBnB+){K>4ۂ*$| : t!-(u$ϵqV VfbfL4e`\ރ29xC( sԭV79 \:\:NݱQr h^ ^襣DV38K[wD g]ۏҎBwa#֍ 3q1+] Q]Aomzex;j8MlE^[uwjIԩU:%|l+Z&0P7\-C_3Ec)dOhV@;x`*P$mzt؈ʽV&;j. 3G ϵ p|h4P?x64[Uf@43EX f|I"]z5]Q%#ѓNzh;@ qhwGOB[vG9g3Ѱ{Zн-)!2F}0g־i*ţ #XUqg.$;8קJw.f{JܞxӒb(=5%z-ȋa'L( 3TC[Sd 9^"tCxj߲m߲UکEEt(*X2ј~LDG&'`LS9 { .QmzZr|^I }d+jیr߶>AO~L6%ÇrDZFR#z6\zAw c%:t,GT%ZIH0_vL{^_&&#ש$ 5ԟo3. 8H|&hFwv+@T/i}8 BB7#MK;ч"!G擤(,_lw%s,<ʰG * fѝ<ō;o-i/w5A =mk;M^R:~t:|Pc=!jĄ EQe޲]%زK)[$G/v-Ze4;͇i'|8{<}Զq*kYM5>q>a%$TQC`R@׿`fB3&`Ic?^={à:a(g1#\>zgu[tdp{ad[yAzMzӹnObb> ;*} 'b ׵$o7]z^ ($;!m)CKaޙ>Yu0=I_cEUg 2S/=b3F}”2%^*/ jG.*بRJ+ˁW|Ks̤_i(oS/Rh"{W KQ1fA;26 ؜)+$6%Hyhӎc4-4hY?%V 27/xȩ' o?=S^5 #&R:ItSZ"O .=9<.L8ZV mD?_,&5lŏG7A)lD ]Q~?/zbsqfl2yK$V y wo؄c`1bH4T+RIGP|YJW@r1|? D2lx i O1@CI\zP:EWx _UBofl`3A nds&0ս`{D =3mc#ʰ!:U*E Qƻ`5#~1= I-%Y5ޭ`}HGEt1G>ezROrB8_(=G&MYcBq~ iPj`[ KmZ0$p[ ~qnpqD^8ݧim5.cͦ1Jv KJRAǻh[W cǎ_y啘ݟ~8.P,nocv]>(3&r j{x%EȲ|Ips=z:jq{*N=¿wz )/Yp!lBe2a{w!0 \ FG>,3&bL8 נfgA. xW ODShJ-3= /D_Y g P;f t4BR@,TQ!_)'ڊ:#OB, yH;>˄d1gB\\\+ >&~`@. >%px<cܸq7x:N:Fx./hoTŇw: OhЯ*k#̬9= AP PuATo]L‚|*G`/WAO&XUZ8 44h3}tf3iٞA\*"|8rz~RѯH\B_n'Łq1 -Fq~tW;GzǏfFx# ޅ4geH*8 Q8v|!`:=rO ^cǜ V:˗ q>hf~+냰1vz=8>έ8,'"/ۄB3Qwr`n}C=:3QO}' !5554Y.k̙vőapqxOq wgta,ñ>؍(;q#ʑtiupih!B L&8C9MK~F]>ΐʢݛW -bc3*AAE酁'!#Q@2a!41`0/kqy0(y)^+XV LGjDŨwK,u cEeax@~l&fW? ; AG6Ŀǟzֿ,I_ },P!܎ VЏ@EA(3 NN_1_W Bx`T =ԭ&L`f5 ~1aY"+|qc <vL}||A_8Fx89KS{GBW':`'XG1#mcw G7!]7֊qIp:B^G 6З <H.f{[za#sUĸ($:/@FXpq^ "z!pE9G"/w%%%Yv;a!mQVVjժ١N[v*; Lu8)0;m,D]POusO@=/L1FL%%ÃG`b:2:q_3OQw>a0Tje|  y`йQIb'u.DJB`݈싳 Ls`igy wQ!TGB&iY&kE0O;p{P}G^r߭gkp-^Pzsl eyQ[VX)F?\Gpy+p~WAAѣGJ,܈ßw)>7Tߠr[PE1#Nq\8Cѷ2sp) 0@5kVD*cǎ7kV+B}oK~&WUcQFIuz8_jc_~zDT3ʒLб|rV2occ-cNgkx uT p}ۂE_cNO2v/$dIENDB`DataLab-1.0.2/doc/images/logos/Sigima-Banner.png000066400000000000000000000431711511411446000212640ustar00rootroot00000000000000PNG  IHDRly% pHYs$$LtEXtSoftwarewww.inkscape.org< IDATxw|S?ё4I'2d ꗯq_'āE@PDeo(Ymv{&ms۴M_ɹ B/RźT*;cJ1^GE>F%< 9GrJQ&pD(LrQp<2Ysg(aQƃ2&2FρRF9&F8(c )!JBPJ(ca&P e F@%02PFA J pUc0F a`22FaRB+p\qێ|QC$t֫g 0<@Jc[5uuLdUx&Fy\g^l$$;ޚ :eOIs ~9(28?2* 'saQ2(QFL)(1B)#%1J!pO%@e20 #QT<#T(Zb<(1U(~v~<*'1\P `PΏx, 'AR]6ΝS|uInWzs t`~K<2ԅK0&]ucYU%ƔMBH\ywIt| HFЖT$nu#_P3چ2' Sn[=%@Xo4d GJUrԲ @eQK&=6l Ώ (БG-.9Ē>Dt`Gp`p 5xh(:~[ǘ_rQ0ʹ1o l ;m _c Ń_.YDA}C9MnTJIB!iuG*(nP MCDhP:jD9zn{jToM(UXw4WL@. |O"gPW>0w&|•alSoFGΕ~ ]_. Aچ L$ b`}9_0dx|3!\CR"DDI{- C\mCꥰG擀umP9Fho ad V)//gudХjHȇA6^!,UfU??7f»r Lzcj^6B!   !)%9Vy [Oynq^d0oQ 6<B6>QѪ3]ڛw%8ZF `Ya ˹v]M_>h mYn 8o T6N*-1 W˳W9t%vLQq1jw4MrrtgYEmPŻ?gXwXG}۶*´^:qŤV骞->;mzKJ%$:+>kO0fKApy&uCͭ6Pe?8q-{C,aНC=ZƪRd?GRl{̃^X&[Nsfs7~uVco(B]'!Q#ua3NuCB4Tm4ļF>tp=~Zv 8vOptu͆jĞ)k^ǡ|RP\cGmI'DCa`*=o FΊ: 9zO>Z7=MuZC 7~k".BCqi=lv7E=. CU?%bHH4墆5rDeJOT aDe'ώf> >]>:+{ΚvYYc5 26S- 'K 1IaWd#T10F׊ZD`aWؠD1*|*_zpУ~jq8k{3n-nov?qΆOJηJ)7udN F)5!FZ}[ۍ(Diӑ煾b3F Y% 0>BRĄSF )ۘښ7Ah5W=R)JVW؟;y@jՉNhވ_C[Q~?w˭t+v2r6\7L5=omҋL=-~LmM(DIa3bcbXGڌ~;UekGH0D_(Uس3m)/,15EtkrCY>>%5b?|kɵd1jߍ^yxq}:':۶=Xk\<CΥ$Dhoe&>3D|CzpkԊFM-DuIa^BZ9%g4@N[1 P":eE{:qWZűE7jPR:2N[[cF:QHŨ;&DTc* 3M&]aZu@/W%!Q#utdx)v+jψXƍ|0&~IMMF2khnQ;(K35ӯr {޴Z!n ` $e]LhV؝ox;@PA08!@Hǐ c,lI.E"8$#BubL-l45/ORLF~]ƮK9_`Z5 iJHH=r"F3MP@pD,|6ĸq )llJik"Fn?"@n*+lϮ+m˙b#6pGvݒhzl<^D39WC<2:v"B^xt|e`,O27K^ ]QY}eE_2',[A`}vZ&&vx̟>s.?4Ca?^Y^M\:1]?kF9[Srl\}U|Ȝ~]"("32<4jBvNuPksKQ5P)R~Ed ^`da5!/v.w,C ~?ᑕw IY{t7L_U炋0|>t)xmw8ڔu0f WX,5-Qy~k]u[_UYW~6}[NCE-sVlxo_-de7|G~s[$OܦACxX`ewiT2U5!@eP.txK]}/K ]}4z[A: =qwN0{eѼ5yW[M2pݘ8~V?~R^>[{P+zY[P}$RTU]Gb̲a#+ͭ /{pPzMV q'kxb"/.5t;[b}ngsK{ɛ.bj6.)-BGVQP _BGkQ1]̘UU>>X]GWx Qwt~.G*%%csmeLC[ JD6&\L4\1z/QVRr}N!XÅ;Ziwբ%VI&3IO6<7:=;ģk{s٠+W(9V\:Y@z#<]%황guls2mJ0i=(pLnnoFj_F>x!u}k/zi~sF\}V 2~CU_c߹M\Y^';[ud`f!c;r4kEҒ'uaFlpDd F uVg x A72VHJw-k=M| q9_ 7pNn)]-F4@Ʀ'=.Z%!iqWD2FsW9JQჍ_T- -{[t,fG4*8ěbMyǭuJ04m ݳt!MW~jRTJ![mlP pz9<7\{7/(mV#4OΟg.aבʽ<[&Fc>%fJQW(ILnI3PB6M1أݖ9ƸWg];9]Kn[eb4&R|e'd!ZF)H%(mr W3)ͻ*m9UᵴV&јx'SCDT(iCp'H7GMA_$f ,mDEEf.XW_`nSE xM[t˽wu#ЌCle<^ԴE}(&>"F0J @uYYŨ6zmrBwo7f-Y'RKe^]>n7& NYhsX [⍺3:FVYc?Xd?S}a]]PV7>ߑ~V)dy[khu<.Z@ ԧSu) T(ݠ>xfC ~2;ct>9UD6J]8sؕ3_PEm<6O O4ۘ2L{̺o*էI6>py?o s5.Z[鿓v HhXk{K.<oSCOĮf׭fi^yq8fM]kv'5;qn:; q.veK(u7|W [bsK@B"*ꭈ#+V{U0Q_Rՠje^)#w'L_5}/K JLzz鳵/rm,N?{EZmG٘ģ^I44ŨĔ͆u]peqѪQSo k 8)?-tNܦp ~9}Wn-USM?u{#^Q=ĭ0 IDATMѓ_qu/2 sbcT;X0rj$#[5?/[]߇/h c+ߏ2tb 6~ ~0'jLJ!Zh˺*hݿ^zhpGF1C k-jEZU}`׬i(*un1! =o6d[_펫ah]Ϙ F1Z4neL^߿Mc@H ;}zH&͢5f3 lN(DdJQXQ ,33c˜WÂ~;ﳡȳŎޔq 1шrj[%gFnke/#3^XG"%[H -*Ҳ 5k_V-ǘG-PI.+=}^Zyu ˈ mV5?_w(7ѬH9f6$# OZmSb:%Pqtn:~yM@H 1qr!\9UOz^!8)j9ʉڥx^ l^uȮK- t!X z;йCST\3\p1!d?#L?H-E)l&u2szvV,)E5I6Ew٦{t&0tE9v˞Cc5/SKѩ_ݧU۶0h]Z<{7Fh2^d4Bc+G58.eGJѸU*ĺ5n*Bܘ8a9s䊚W΅ѫ׻r&Jju R^\:%v'ύ:ѭ9Z⎧VA_oXz{'Q rɬUftJDUЄ i *¦/.-σ0QQm[\%54=8֪53.h>×M|T̚$ 87,@Gip֨c4 R EiV /H(qqQvw$.VB\"Fofw}bxqg&Ĺf.E!«[gWw}|:au&QpnFƤ2HJoģRxօFqy,ƀDR–S\,c!v!D\hX B/*-Be|}~A;ⱻl n+/n=piT bEA (#s4RΛ@h5wJ.^;@a$Xf@d 6_{x"&<aiousz@N)R([C"0ƔZYE4]C4U_/rήQn[$"BPUa ACVBwE0k GHnBĕ.%Tr/&4t ׷~?yu;|a(f:R )Sp9CI')Pcfqb5Wl*Qhspq6e"fq~l[y:H?jg+p=[\,6 @s+n,NKYZ"`bUݷ֯850oH26R ]r 򬎈=Q{X`8 hCUHEa@Qk) %S I0I fRŬ]W8BO+ܛ71֯G-{e͑+h$[gS:v:F4@}ѼY*UX5cwS5J(eBFl*oZҔP/8X ŹCi[9Oq' ^Ne+ǡ}Sh rTtoP4^*n E^<լ~d L>ө%U+: H&@vM;6(:@4"K91%EF!7vI9jK( ?vE6AE[1 nEW>nX՛3+r!cY?%6ZrC_ :#3+""$A&6vKt~/یv'I@ v̆ oZʇJj+Z&'„뉰kwB+[k{ox5E{&>qhHV̪MǕN>[ XK\-vV7jβq Uߴf%e;"Ů}gYlYU Ůyw{{Omf(w6;k .X,ۍB!Qo`W**EЉ4YRt[ro*ՇPر9l@hTVzd؏Yf[q`NӮc 9}l~aS,z"#kJN-;Zо*+h#V'MQ[hT7]>ݭRǧ鞭E%WTX4޹s&W#O +#Ld Qy`٘_jar ?SףS;'|fB/xvhkfkf{ +h.J.[xlƀ/h**r-G#eX/}hr_O' !J;Gw)ځ={+;kOUqѷլ6/ &jPm|Cq_{ZZɠu9]uo2>)j[jVzr"1 v2% MpbU=ax*1y&@dG"`7,`qkU=gkjͿw[`-t4N-"6!!>VaL-:#,by:՛ox>j6ϻϔBNjh<2xkG>]}9&" zՇ~+_XȢo<|hoN+=E.x9}7e~9v7mlɬ^=ͽs sPD8i=a֪o9{]ՏG˷~Rl h򬎷wY{ˣ߶uRLRɭ4Fk68: fw{Oa yy2n6eFI~ED(l6g6zI6PW(jZ 90o+Ũ}Wo pu=x|{eBvQ FB:4GNY^TFܐQ]ף0R5Ek4/[_Jzjl.lPk$xmЂ$sr_`1ʇNח/X#'-;b/W ~(n?V{wJ=reX rxQ[9mU9P.J~ŨDH!"6,%tkk-Ya(ݸqN][oy|&QoUZWpQqyS1_-+hѪ $)M#urLfIw "u#9 D7@Z/w$Y~JwP gTI*Σj\0!(Ub;d!6p|OV+I Z!/#x>W(d!.2#w=ȝ˩p=uӧcBrW clOZ"c19+AL%`w<8Yظt\Yw:.Op{J6)h";(%Ȇ8Nְ{%]B."Bc#FaK'AuN!,lջ.r{{a[>cRL;"JR%vN Ze\۰HW_yN)hxDU}.RK/;\2 *݋%u;2u#7g:kbC QeTN hrM0贁ݓʼSJ:Ӄ~fg -6 35 MyևQا6Nz',ƪx mT5:OXj i/ea#='g_~Z;7$uPjG1J)*Վl⎭MLVD"I4<:2CQԂ45d2 d(Idp3F6[WfIo?v8cr~ܰ.'"yrΗl [#Pf cU5<JD)l$j-#h2BwZ6v?B}n E 2(|vT&ư_k1j5L9KWTz.nM6;Qҫ׻&'r/tבWW~-N[5$CT~R+-䵿7ːFC D& b|k ɢpu_(x+MTBt4"rM,㥩Yyed^7d^~cϲ]x>-y䐨B, (xs R(#ccJPQdRP*0JA(;?( jPeRǐdpjm1VYNAa !N{3䪕geN/nwO-y5.wm^J.F^!֖D"Jaa68ʵ&L\*Pq-j)eD !?IJ#_aȉӫ|Aeh˜^*-r)Lk-r"1X%l5SbߕS،m@Q6 kq ,_JZ.l]5h=:$|<y|g]sӿ:w Thx`dvcvW+0;tkoTU[hDTP*)$EFډZď*l _#Ed~?b5}B΍}c>y>l՘G^~5Z  jbg\*6::['Cѫ7gU=o鈫}fh+!D>>kڨw&"8j#r:I+#jL‘fbu}iq=O` m.|^D} jT2otJp|(sK.AVu)hְ¶-c?2jmv,!w&6a #I+ަ*DŽ}ڋ\ȌljLF(WKjae]`GvŨ:I埜|Ev16 (y=PKIDATD'|@@DË́n8^I`" &uoߒuǨ.(mxO Nz}|3Sl")k:iasv5T*(䜐DumoƔFFkwЉs=ywT\B Fno-)V5@ ʩFSC8%]i XxPLyv=hP=*^Z`iIԥ\WPf--*,v)^yGS+UaV;/kgvMkrtkB}BL ϳ( ;kx_ҋs3X]Dg9ұ:tQ:bhmRJʼ)3=>8ZV cBT4=B|ahr"Wa+lBƍm8獔 :`=#&rb0c]/lj1$jRkפtcadx8 ^}"N WF5 ?ڛG>l |ђÞ0S]TeDXҹɄP#b66v5kaYN,Z'H?2Ph:#K@1bgEØأNAs! Ѩl:wSHc/!8@ /є\BGWM>Ukmdj}rpu*t9sDB!b]*1L# LsS#|c%r(8"p Q&PxF9(8JQ93q0(AG@#@)a#eQv1Fǔx`!( 10QJ(e 2 J`U@ @AAJ( @ %8*1B00J@`0F)8.ȸmVL>R9*l "%"!!!OFRIaKHHH4$-!!!LD3ARIaKHHH4L'IENDB`DataLab-1.0.2/doc/images/logos/Sigima-Power.png000066400000000000000000000313741511411446000211550ustar00rootroot00000000000000PNG  IHDR<2xg pHYstEXtSoftwarewww.inkscape.org< IDATxwx[ǿJWeIֶ%yMvI P B BP(hK(#@B,m)yĺ{u=!RL1ťܴ|k 8%$^,sOȍZ/H1Qp.BQϊ46&SqMynG{>Ovy ˁexpLx p^` # 0O(X%Cf>K |BRJXP!| ),`AWF9п~ju0͛XgkS9}+a rn@溙2H$ abe˗oOb]٨3 )!vAx !ֽuuD(6P)v .DݵG'Jdڤ 9/˗oEzRɝ !}1akRxS\2Fչjr6 g$"tkʝ—6hDv.e؁CS oKF+DVrtD=锒Q-;pȶm3]aݡtLq9CMcU!< !cY:\νpuK7.Kp:qKd]X{\ N S oKG2O:YU O5"Ppߍ wl~le0X qv~֧mj~ԣ|z[zK>8n@e}ǵ%-Ap8S4d?NqI`90(:|Uڵ;K>" Z;O];XL vG<8[ԤضG-{߹db67.Ris2*%sIFւ)ewALYxS\(!໊K?ɒXgFˆa2CI F(kkfq߰*V%0S oIՓL(OakZ)%)`6R~c΁p`:E?GJNTsU7uu[aHe7cVvF1^K87yizn{3'E>|/\\`G~+_[3JA֑b :sX!6vKO=dGA R nK)1ړW5uEX1 ɫAr*eZա9$P`QSDG(\TלC *87L&Z^f2O8ҝUaZ^^ۑp)o^[Rձ 榄oZ#x|~dzwp58|4??3%%%ԩS9---50~--mwqu+[D*6shj.ݽ{7oӦM^rǢ/;-svDc9.>Gr߼ߗF5b< /0L ]CN @(Q+fwٙw>+JvߒWs!Ro}sxGUDzM7J'xs_"@buӆaimǂHe맯۰".oH=n^]܍NOI7icluㄵׅ?ΙSyOs&ߤڮDW6'y@A|b_p7u*Z~7奺__znwcOώWY˗Hxd0c_'fX,WJ*LV1i=ncP8n6gf@%ބ]aY` M %]8~F |(Gzx/}JdyNGqE]31|u?٢&5h_bclpV}S{x{=c캅g m C, _?"E>#Agv+cd|LCsODE}NT>z.4Y&'uپ+skae[+Dҫ$"~kq-MR2Bx(=M؝>ћ[{"9.J;+;?WInت+ -u  D`3ñba䌃'^޾+s|}V' Ⱦ0pENiׯݒj(SHEHU.;?;^Იucxʶ;ץܰ"MfayN:E0}$?R;l9|i(mJwew[V'=}eK,9xKgDJMz5V節}rbuuuvww544466nx=vbq{HH[nB,׏"`ٴ ¶䦦,K(0RYo4D5Z[[YrG`0~snߝtyw3uʄmKf> ;?lz'sMZ{ôL9:LV>Z#c<۸i <íۿ^=9۟7,a_Ic^Dz[ n8^xʄқN&l{9[pYuoڬ~dmϡR#xebI5ɨue4̸Z&y_R|9EEEGsܹcڴi%''6**jwq {-|j}Onڰaj?8^YYG}KƋ\v[e |v}ػg0n3g[/H}ɻʔK,)8Ǐŵϝ;uHQQџn+--6ߟ5k gVUU}챬;44têUvZ,( NPf :T^^Z'%%eÌ3~HҎ^^^ ٸqnB?M~~S{"%%vώ0F/6̠ߎRJ6@)XQ,<ԯBvSCsj:?=W|gnnipxZ+\dݑ̺?6,Ѵr^ORvCp\57;_w$Bz˜~g^^0=g_~y:0H"W.ٯd[8-'.6ZW/4L/jL^o_ Z~3ʹIԷXz&&yZ,e2uUMMͽYYYoaR7b)**z?cnn0eǏ[MMޠ⵴ c_}5tvvM#fi>UYPUUo;vlHeA|EEE Z (//<~x* "8pC#\.:u*ohhtw*;od9r6TNLVTnK+//׊D"H$:ϴM*ijjș^/XErrJa|Ĕ9JX$0vK2sY}NOeg ݮ'z׏m^YI(nnC*R-e7!eqJ9еxfؿ$ tuKcKV5f~-1]mc[.6@]E .k +,H4KBˢՒI :g_ٟ;\ 3fT }7Gqgga̟??G 5AUUUڨ+@RX]]]qCCïM&Sttt$ٳ ))`0,P0 -Q(N3ruvvv wjڼYMMMԲbPZZ_~^0XpafppaHdHZ*-** *,,l-466=F)--mB(Z벲7 jǰGP^@hh X:;;9uԍ&IYRRb0h4VM'enRҹ%&R=̛7/+!!11~iRE>(tKֽcP`0Cz8J)1 p'{yv__8L[{ҭZ`#,- όhDhzīE߿ @bB>o2WGcsA 1W֛S ޠꝑ:>߸fQOwy!6i1zzOB0cƌ궴+H6mUJr վ}/++3wD@Pjk_]]] \>ж*d2m _^^~0HLLHP@}}xh_t=QQQqB=cjjjjC&r{…tCnAMMzzzjժC ,:RݻvQUU5"ᢢHMM;wh{$XDx{{wSRR(B:?Gn7L&\=zWUUҜNgP(,ߐqUw䊉."|xr(tm BR:z(+U*UIDDēʮ{NiitP*g*;}6>>LcssmqhhhR qR8ڏnMQ.;>J'S_c_=;[髞x`r{o2fk\ϥ$/*Y:H<Sx٬e1k֬ 穋eB 1 9It> .lv̪s@ЇggΜ >څn 0|.H1ĉm6gvww3gMMPuvv\.:K ;ӓ2`mT!Hldh Bҁa-˲>}z> ΈhI!|p>3{f1> %^JԜ?|,M`2FGGUUUזbqf V5}IvBCC fH$őyuuujjj --*::Wc,(tv  ҭ[6bdy~gh! XqO/_⋻N/\r1Y&w|˄huovqm}bƆ# >X>7 }IDATT*77Z-pm4a% V(oXlI$vj~F'**5ovuu dԩS(`_`HJ:1&T*z P(={WFt"''5557;q444,.S ­h2 {{ ???&''=>0T֖>u7<@o ˅{V677.((xErܩhƌj&!yyy=zt5b.44tHZ6c>qPHޒH.. l}?.wҽO D ^ "DR?uݷǔ>|c>oľ7,c2'dMȄ9I*x'x,jpFm܅,|{I1"LMء3u^^}~E۸w~-xwƄ7SJq%eee'juᐕi=>ŋ _d0gΜ;@J[V+Qg---Bdz322).DFF.YjՓOLJ.9%IQjjW9þ}YnX4r vkf̘%zuFsE[[[`^^^B{{*aZn 5cg˥&Bo߾kFc\.o3͚ ka)Cվd2 LTd]T(ݷNkJ2oa Xx g.zC',0 o6~,m_Rc mVg'>nF"8SӆLB ,tHϯ8R e8Cڳx,ZxC"h\Z@`m]]4++XTTx<XjՉ3fܬP(|[Z]HZ ѯt:݁={`0|tu:f '''2///l@)JGZZBCCԁIX?j||V\yR EffflEE| 811600I 3.]T*@cc̙3O>.ڰaC37B0v(GR7nx(//Wfddė+t͚5_&$$?aN3pPT0/ a5/@p]^#/ yymu+F >C˷ tKfMcs pՂ?~ܹ{;_ݝuD{sE++gN(tA;Nng^xx`ҥh-\.7/\JLdcc⎎!dV\^e||{$88:TZބQ-bqv]]ݏ:;;,r\./F24>/XdIf|R}ѢE+ M&Ү&H$AAA&`0lS*>~AuMMNUMJ2/YdeǓTRݦVM2~ݺu?#800ЦP(= $^UU;::`ܹ_EFF;s_|Rx$㝛,Oo‹>rՂTeӬ{<ç3M-P& !oȧr<h嘩sLöҖײK[^=jrTnl?so_Q$[0a&uf (]Dz:n7-5n?_g%敵ʣBd *<ѸhH[JJOSRRݥ$Z1-ryy}$&&0 Gՠok`0`԰ʟG'ҁɆr JɠG8~6ebU_n|.nݙ _7NW˞}3{nq]Wt^u,=#.mQ_|X'"9:e`Y;̎δ|Dz5,͋8ܽ ..vraռgOAKMߎajN ycN~'F)i_Sz[_[QxۯKNzK⽣߷ (/K{YP?He!HKKۣь{1%RiuvzFd 0fD e#_XiOL{s_^|dHc^t8mxtQAEkbzI>='Di7_̵,@k!Βw7Ts ǯv}U9!Ua%b!p>+I_hFyeim[&ptK*v.>n]"~}my^WCR^PS%'R ].oj|^Jn۲xH@|ٓbTE۶,Yn驐.ڶe1cY8aҪ_ݹ+R7eP͉|qٜ,L {}^7&qCRJ,K 7#!=Q!/ G=8 ww)bR\X줓ջ9(q p2n ){47}%2MPI)m]m:͖>ahXnb8cYg ewmw.}!r&25vDc> |>az9 8m9=Sh<ߌq_k' B[?Xk-S .;(ÕBYBhd7k[32sSto ]?K8 B"7RxS|xRHr~%9gV9'e0)bܲ?u8_ fƏ?5霆ܛ8J13Qg׷=wFe1Xg<%R>XYBr' |ˁP!Oe)P>!,)K/x<{k B g1̘#xIK/bN?ޜk'_DzHy +ۂX>[V'퍎sΔ7@9a1PPp)*ۿy 'N_@bxBٞ8W?L=x:<Wl QiU’`ˮk2'Zi%5vQ2"<~8qn=3!ARXCLPJiҺ{@0,90<> 0ƥJWΚ`~``U [7\mxuߦVN!.ўScJM0":D?!p7d\fFn;[t[nYy*ݍ3`y>Pd}dΙI/SL)7ŷN'[ W_aFBpNg'ʶA''>{svM3{mNJ(Π^P$3~meJMS!{ (ɣVpƓhPۜpVY6V}nJ+sSƮx"@.sa3MNqY@rd:nʁeƜȌV\ gܚaJMqY! cD3&*=f/Rkern kN)). w=dSʔfr+wm0QS瞻h6.;(8g7FO)).Jg~В)6Љ^c)صiJ[=C֢{'YGzJMq@nXqB~JD(,$u:ܵv]\BR r^mwڪv?r!y ('DaHx0RQ /@@o銲}dfhMIENDB`DataLab-1.0.2/doc/images/logos/Sigima.png000066400000000000000000000151271511411446000200610ustar00rootroot00000000000000PNG  IHDRddpT pHYs4ztEXtSoftwarewww.inkscape.org<IDATx}yXTG9ivdEAQѸL c/N&3dܛ;Ɍ㽹ogbYt0Qc111Ad_>44d>O?tW}UyUW_9ؿ#BFb!da!BFb!da!BFb!dAW0t.&}ۥg۾/Y' =UG$|DVh[& 9Ȩ,G(i [=e2&7 )bS!E@'/>'KFR'o @ p?Bd./&0c@&П Di6K}<(/i]50ދ/3ҿ9 ՏUyք AHdN TM-8>Q ;XLb ;ieor~6s^; 6eYb2"ƉzUّhp !ڥ) jMrBR0K=Wár;[V=藐E<Ue^Y>AO'n6:z>x:6GBЮAa1b&#D}k#(ⶁSi @CBu\Bo5ӉȞTZOqQ!FKs}]j6@~[  F" "a2'܂ bv`U]?QPBCXfT@|M+ܓ*rU [ߩYbK`5RBj'_])@*{6'}.Gi9I7ܤUNFB:!4Ċ%LU檣kjjk﯆L<9s"'۶i[2JSC5D͑g(!|oD|VdE̪jj'u!LMqnlUZVMB@Iu{.Ji'!:pv!H!MGsrJ{@E-(2ij;wz\an?ѳS1%~g $ Z|A*"jB^*B"Mq2uWEͥ֐4QPEcfiVuހ;Tu[!S;3fpTN礞Aa&WVa5$t.0-/*5det!LImZ3\#LMBj[OI c#'$QVE Z{ѡpQEHǤIP!L# f\ |Tty)Ѫz:`BCC@+da&N#-Eُp6Y./i){Y;76aЗЗĉ'yBF>mdyܸa}7Or2xu#4%b|r'AJr3;vw|_"D`^G8hEˣڨOsR^.nr.٨o7%cߓݛk{#zں8kAѵ]p`n7/]_XTfj7̎s6F+Gn 1{m…w_frp64wjivUr*̼c饋M F,弄_<_a6܊SfV5\0ZfE5}6^*I:?%iY97Ǯoz`fB/;]e@ZV/?;}ufmI3=m+w{>̒N_Uuj&dE~g傈 Wk78 Y;' pT=5xcjz \N*6b? 5'3Jzf'[T_v+[\. '.h+brʯxj:*9p 6M٪+uo?w뾬%v+\AJZecSӋԙ1-Iߣ;VtvkE ,(|pemKs޳> NI[ٌH gNsp3O>Ugtf {BGG]ۋgcɌM//?u9c*{`7&%SH]}ןP6s%^1/l?۷ܗ39E:17\?6L(teyȣK"W=3U4b]$?0!Yھ?kQ/?*~Ë"C/X47cvw$kNL0Ŷ}]j"z9>xWVW~z(8;ꛟX1Nj>.;?>]^-yLQsefZ[yNzsнQNjcR8{=u*ũ0UK"_~)ODŽU79{uWEFIIS[ /zË"~>:ɸΛԄ@ @fbܐ]ȸ5~Gdvw,x뙇b_<;4.c-;|bľsOVxGx?E{$L JK 84ten-}pGT An=~S_kj@[*jPEwG=m :zHԠ5+tȨѼ{?+hhji}8Dz t{wapK6Q!^WB2 acG]t֌(60=B\ 2`_GƄzMv@/<>cO+0BJjSW{V\Gr@s=Y:Ivv(&0թjYj,P4͊>ZBg)Z$ȗW$ t:q@`40QdC~L~Er1G HDs^T@?;!pT}]IHTy=b%4yv bZ9Gn~0HB7޲ oL*nVyC|Q>ƒܳMC c|] yzwGFn} 5B%(hי JՃ>R>O؀BNqRwݱ>YgO'~q. W"z!O7 rm˹%Zy 1|u/wz)z*5g9/TFѮHбK9m)Yk?L_ۗחK=ZBA`GYX2gQUrl~Gm9rPw?IN(]8-t_Z:%lǗE(^i mcKiuc{.φǿvNQ$(FGsPWT{oI>OC;ȼ\1o>?NJ;E}6[Ģ5 -gSM/YYF}Ec\nŜW'FpV—;;7mK|ps+w~2&ܧ [n(*}`y=!c|z h9 {%Z?RϖN3cvE{g2kKkZKu7(ç>w*$Q^knv}h;_ G܊ պK"|0a$Ӽ_>UILqA~_dh YV<^>I3\ >FВ=xVն~ѣK~7r;1Y]ں7emhӍj2;AW շYd6w<aҨ@7pwIcy?ȹ/2fW5LA'؀H~(҅+\_XYf1:,#{~\5_F1EC20B!C # 1In$"-ޤIENDB`DataLab-1.0.2/doc/images/logos/cea.svg000066400000000000000000000035741511411446000174160ustar00rootroot00000000000000 DataLab-1.0.2/doc/images/logos/codra.svg000066400000000000000000000104431511411446000177470ustar00rootroot00000000000000 DataLab-1.0.2/doc/images/logos/nlnet.svg000066400000000000000000000110661511411446000200010ustar00rootroot00000000000000 DataLab-1.0.2/doc/images/logos/plotpystack.png000066400000000000000000000225521511411446000212250ustar00rootroot00000000000000PNG  IHDRddpTsRGBgAMA a pHYs$/i$IDATx^ eU}zi( C$L\fd&aL|qLhpCBe3,*B' ȖVbai}[=w_{>sw9/ܥRvcƍ]Z,,%̒tJ$ -ll$ yQeŊ}Z8" ٰaCw*:Cs$J GR'y6O%K9;߃貖mI2^~˳0en1Me>EPF 25 ؎f[?PLc=L ꡶f]t՟s-[f)mKyb[~dw۾ +Egt8r̮[W?Ђ ._SBc zߛ=hxDO}.=;|/-i_U׬7m^}o{k A^9Hɋ A fBޢ7zR<`5,Z䈠ǹFyu4 #,Y;V"3۶YۭMs{zuFu}}֭qS)rZ~W90 \J\g?VӪKjQ xD(ֱn2Cq4!O[TēQ;?6f:oEu[oAEmtnjBMp]U Xw> j:nH #seu[3SBKy,6sctv=5nK:ZBXA񦛜pM{{JF"<),p>ϵDL;߱u ,A076AG\@Z(/iPXuc=a]PP1!%gE"6m/ZRU|>6:(m7(GlY Y!۸RJ` 78bs]O:C˦Ä-3GXOD8pU"@zVWA0[:&E*,pCEA/T&(:o/GΝOSw߆IIn0X!nmnF @ _TjQPdjDJ]]fŸQ=dI ]ux<6.l$^%pHAQ(mC,ehL8GJI}ԥ]Գ ʅN#Lq1j!1\Aj RJdby礡lCʣߧ씜7elҖ˯j_y y9خS/8W +f?D%DtZ$Ƚ!k;uydq)k\mc,NV-X_D+ioQGRxC@W`9&0yB;iwnJkzpw f_G٭;s{XKC$ @d_އCtt0%rַv\j-c@LMXSz2nr]mv+ggXj:}x.\,BJ8EVC jr1wze܌si;6n{LgBx:YpҠrS+ƛmڃOѬnQ js.}؇>d_(Ɠq͖Zw 7ŦQёs?mq=?cHdpݱ6:Ry]7eB`/]9J! L)%+X.U܋ޱ9vSC3+x֬wݽ Ŗ8R !u1%⺼ҟ{6tw6;[a-Xf۫c֮sҩ6lU'tH" $f!`bEP ! N8"0`c} 2pc JS2%g5g B2Br޲d@BcCV.zӖSJ6{{Ⱦ ϵ(>xТbbBH"ޮpS::lofmK%fM왥@Flc4\2[TF, Ahdke ŽX3ns{yҷoKk9GTT8Oٽ;}iY\^,?"1#E!)w/NIraͱa]'.da^'q!7z!djQNK. 9hSVc.ÓvZϜПmft&B9i牖͉\Yn20:7zyHPK"x"x\_[e;m,Pā/ʻ1 t$胭W{5hnA1L^ ۚl\{hkMhXV ]cUALkM:n~ B hdL#E1Э83GEImseŏ8!A&TH:x7t*B52VR ,ʪP)4{z2۟/Th?z8#UfSh"p&yp۩9P0 pwQ4.x[[Hl` * k]ؓoSx` Ί6!DvR.3~^]vεMtU4lѣlqpW Gm,xmMՖcJp !nC ) H"^eOt^C*|bRKբ^K!¥+V`z|EV"pl~w4M_fNɄw9>랑[ wD@dA4iVVu؈1` SG=66tͩup}蔼"Tc!pY@ U$F-쵡t[78RV.Vrn`JfHy;]Whְ, )#ý ;ƈ{MͶeJ,aἼtpcXVG;g>lS1%'Z3 MjKC tsizYގ]ou%=, na;i刍&.W5ѹ ~lX2 Xư vL=3S6#/x17t qdˀJmˎJp]3\ָ]=6)3O|l~ַȲ!GQf/Yb^1H#*FdQjPyyv%s2]3[ q![@NH[k"+JcVy`ת G@ zRnǹ3Tnz#tBՄ}4r556J !eX&7~@RNkӝjiٱmղ}T>=+^/˕.xj=՚ͅKVCBT (tL'zoUG`v'PC;!qccl^b55dYqGyFe_"腤'6[!UI.8=cn k۷ |Gn(5jC ?K泎1g+]+Ǘ~dugikvcܧ*X2*\foH jl q+Gܓ)4^d g@e9{Q| o` dN`J5&KۼWk`\/ۈ)Xk[ɧ셗8|`'g3Ǭfp^/2Rd\'X'"m7Jx D|9,WrH"e_kU^`0Y{Ijy4LrSČ2˫ B&|fWB%vR!} 7ܗrehz|_hݘCnij<7o)~dS|1G cJB& |݆8bB'ovb1gI =$OH5TIH"A[OI%8OwqA2#c4g/kOH9(hE#Dʎ)=4!W^y%OkoQ䅞oxX8*P ocp%ܾQěSB_EO ߿MNCjFR "W\qH@tiZ0ߪr׿&zܽ|l.t KEꪫ9^yC\k DNRtZʭri%G떴>JjJ@&"}T{px8'LVCVjIHoI!L0h=i}<O½z,]ѭR ~ ] zૡJi &+j`=ohpwZ5EX1Wdg?|X±\I(y0T:J+ɟK<~] )3td'O$$C{I!.1W0|9b\.ӵZ$K$^ IT:p Q_S`B d@ O*=x>QOI=m2@㟂^u,oKwk}fF!OqTQ+OܐO{,adN*@(BhW%i;=Aep^zB d?1%6SQ٥Z.WZ{RZDߒ`(c1_1"W>jOR%X q|pNYt :-;;Oo_'tr􎂞'Ӄ HgA<5gIADxM %gJbgHAGXPɁeZ )Ju]ǀ$\ (MX/) rQ*>Ӓ2N F; cOڌ;#E?{\f; @+=(*f7@OOX)3F Eɯ;5Q8O_u˪nYA4uYYAbǒ0}ϔL : ֣B(pݤr!ơ}nPFټYHۡ(7/$(%n:&:Oisj=%硗i"a:z `MyɆxtNóde)CjLd8㷸S\oM-I@QޣNd!(yodqsN6$y܇F:K˓>m$豎I:2U9 ĠqWK:i; ^\ )c&K@qy861M 0v'q$9 ?0!ʃ HyxVB^kҌx/ж$_!1 9>d0أgr.)Uz+:C:?0Zkbui)09uDB́u VqImT[RsN:HQVE%Hm2nWS7_R"o"0K+_JBhTR;Ou'%*DnzIENDB`DataLab-1.0.2/doc/images/logos/scikit-image.png000066400000000000000000000320421511411446000212110ustar00rootroot00000000000000PNG  IHDRkdsRGBgAMA a pHYs(J3IDATx^}Uݾ.ґ& h41֨آ+vD%XO1ϨI>F V@@P/lﷷ={ι\ a̙>3wocNvT"W׽kƧӶtu,\S߽ЗLEː_WpW?[Y v28&V74S7ibٯ }-u]WM$;JebStUV Rzęd\(y1I hM;쾈촻:gn? ]V<,iW>QӇBbN$:Mf"%TB,$'#(h. I0Cى vzu#z6t8E?۴O{T WWͨNOfSҩ侩tҕɤ&6FRM2 YeK%,֔9+v+AW_wByX6?:`cǒ:gBg\5Q6GԢI[ rm Aa3Ґ8,N+gL/ >Ax>W#-(kIH痡}dEtv#~o@cG1*^[iUl +H.FV6Z/vCfqL[o#НߪEV1K9 >W|{|Ȝ9kgco%ۧ'IFn7d0ep{@s6mK%$0J#2 Hz'w1o]b=_[ѓnKvO[0[g3Dϥʛ YMX"K}i=[YQ^PιXnהW^t)(Jzzu寋ӛ3!@AL+n&A1( A|z Ȳ |8g&&u >W7^z-``[jݽNʤaMn3%skމN oaWvBUٰXޞ`jcfv)}奍eȳ)xpWVdvג9]K-pfOQѥ00i#KV|fi#쎏ܾ¥=Ժp'\(+eR(]O ˤ^JH>Gh/ߜ\ c6XA37gRv5]FO-:5 g?{}ZbgT`*16k4(wlUXk#kӴf8qh+f,vXN31@'.3qOCFɾ' }O ZƟtߓ9qa|m0`KOdJ;3On_kTDNٍ̚V(DƚXTx4J#V" `)Eus΀RJUJ S|dV5nҰSnծt"q`únJdt EʸhJ %83<ʁ'/4N^LQ1'fyfvі/ѓ-H vB 4@dػtlXN_ѻGE'\^~j`!'gP)_1 ǻ"D\eh_6G6]B3ִ-  `ǼABg{S\x$uIOB^%k?M> 🭄KJ$yaF:rޚ,o9^%:O2!,xH)?uX s~9JY}`t)K[2*no0ܥT ] t+ mW*ҡTWéо]X<:ҝ*dز AL3{گxG4ƙHwҲ"OQҋebxB&g_a`l{Ag۷ᶕi j5.;$+ҢT : =ar>Z\SMNz~1N\Pr̦c"ɜ"$ӑёlө>>+M$Ja5F[V!iS*YRij(7@*TeT_R{ 6?A H`{66_{**U31 o>>:eU4~J% pYIH]K}Ts1RMR]ؘ#OyO>>k'+1,G#NȚzrGL|r6 /Y ٘{ G qRP}tp3q@48*x#DlOv6g1x$%*D y.)N6 Q`<v_JHPPՒZqp"fH2/DHB33VY,¶յL!5t(:75i%t(3p&l^)p6-ٜh i5@Fh_3%Uv: nѴU߀*P( @qt6<^Oz_`4#WsoZjxYL=I#Z4u@*6o!q+Agd@ #?սb~vԁ(U{!JUV*c) _T)*Cag*dxT. ;kە6EB#ioѝ/**?74sdewJCN9qKGg{2 )2ٵIS5g=q`7[Bd i؇86EYgU*<.[Ũ5'>w4mʺh;=ㆭD%!@m(P?i > \KƑ8N  r^[h[vϩDd@,6@&0B1f?nq `!o 64P%ePiKK' pυeѴ֮TGw=\0,ؑ`򸑭,݂s ('Ҕ7$LH'\ʑ.3m޿]Wឯ6fwdE* {9Xu:x1AF\ _O3,irddhϐ_ɠƘ<ŞROWDne7,QO )Sp": Q0<eP{Lo)N up=R: $Zty*V(.͸{C*9F;C)_ fa |L#0*<6 n)O vf8y\?(f(s ~?ZAjou=XyqJJyʠ#Ԇ'^*{z}O‘iCVÔ"'b'6ƛ{/A1`& v 6&-y ߨ>~޽gUüUUetI fT_E_*LٺU ,Zk#L@p0٬@USuK:Պmjw#j(ݣ5>}vS:VLDCQ4ڳ@J0qH_q =6]?OY*KF Ÿ1bA0xy@K[ڊTJ$Wk5^3=5ҫ h$Ҹ- 2H憘я_cAUXQmpTRށ1aE)cA-sct(,Ix|&n{1h')0H2$c1s* o3;{f/?aNs,yRbeHj9r#ָx#8<p!єT~M_{ԇw"-t =sBH;Hc$f_ X$uf6A@HLH&i/2c8Jc 2t;!AXrL9gjT_:U#Ga-\Ow?>+w& `PmHUE)q,l5ghx]O!;g(2Ob{vL^( a#Er< W!½#kyP-p矓0y36U6x4=%5kzT4zᮄjn>vG_mY+ |C9J\B rC)%FyWKP,EgފWDZYH0 !Ɋ~et#j2\Ghi;`Rqd4X6}#`kmtUXQ}p I/Y2!p'V>PuZlڪT~of+PUF,$QQD2 LsK3P聐vSʡfNsJ,H[$`r 5dΏ'<.*ƵafI ~[e[J:HVrkd`YrT>+P&עاp߇5ox%hH9B`mpTPt&dq 2TgЌE] r,g}V 'T[ V'2q򈩳9WuKݱT4q{<զKU|C&@p}y4 gޠ3yc_Z9pHpY]Ilޕ)('3KQQ)EG)Rb 3ȳ@aa$w嘦}ާ-Rt9t,bȍ1^ p&Hax1ٴUd,o<~sl+j(N+_KDH?J-x;[usTTfI?yW SC}xۉ'.uwWu=XٙZp Gjn']M7c;2TLH>>$'q.Vg#60=zuD5XG(tW&S4Q" x"36$:Gj37nOi~:aWT5~Q m iXB>{8$cGfVZ {Td7 5L[ψ btw2g$ٽ^Ȥl%a26l3qƔbڱT]B$L0p?U1Ï|ǾB곻=i\ 8ZF3nb@{IuZPqOsUɐ(Bd'KP^iUeZ;5X$˷tbldũ_X`UdK;Cם_\}AcH gyxEni8ua|~ZA8DV@k͢e_vTڇM78nݞndp8 XN3>H@n#MVG\B{?H9197tnyHæPMjd)q r߲RɌ0s)mlw *26.2؏!Y"S2c:VcB /ɬA\~n[b:* t$)=PmA1 tpPKsfЃ5;/Ӎ/yz͵< m_ZqGU3%Bj/a~xEK/QH_J\fy62!g4h͘$xK8EAx"}Qw'`.;9v>tڱ$s轑%|wō_hSAJ~;W`s_PRͷ9e;+Gjs{ Qj,i5|e4=@sa@(bQO[r#oH%3Dp39/kV5ܺBEOpV\'3O"yNYE<^ :: n-!h\4mA^N4%Tk?yj /H5K. Arp !1}}gnIn<կFL02'[Kњm6 wP0^'N5V_ R5{mr慹wN<t?xyu>zP8|V*_ǾDo~?*d`c}$m,yg"HxI^1ˬc)O(PwEV+yӓ>{O}VM)AoU r/:ֆSfdDV"RSQsr=M̷[`NJ\d+]U˻tdA3kUoU6oe  /ռذyCj_lZܨƞ  ,[/~~LEjTYdAE̳҃o8e?WT.$?v޸$c ~Hd⛾]W*}D `j JaMX!&ee(H X y˷N=f c@YGNJ$/fUa%:,)X<##zm,x^wtu`{ۓ}qJCCT>?J3A(Ʊ}J{UݞzbQ4z]f%6-gݣ"~ ǭia .WXhm5υAMox.lS.3OLhn=PTUF`Q0qEʍ!"ra䉑79+y"mxhؿW˼l2:1Ji ׃bdxRv[?Ou ;KQO፨#>8&,8o^T \uFnl)MK'92_?eZV yiHxwE(aG 2bml4OQw2ԴS.rA\?Xւ@:|JtHIcAg' 8Cc4au뒚pη;c +\ص}ZƗUAjta0W"Q}В(2R2fY @QЬpݤut0k9oΪL6e|yJMn-_X0U.ryPyS5B; l zݤlç7vrH.=Z۴5 k :ƃ 6 K٤ȹŮG8*He-Y}x8VRJH <7zlHJMxRj,!bFKC͟@%p=سwEn?zܹu0Cm0$eB `ŠVރMv6QJb1DN댽7'^ f`4j`QUa/Vp60+s-W;4/Pݵyߐ6DZiOnz"AFL&AmQ=xϒ(tsCF*1N"x2A0C:FeQ ⩬y$ٝ} Td|]082bx}IhGFpi;QBZm8"(m6ڵGEu3g>Cqn7]b੺fheB2dItҳ` l~Wlre<-މooͿ5;쐛DG{,R#+ cLJIzh /]ݡJ C@c#xK|hd}R%~2Uݩ`oEzh$QeGiFzJՌ3#A_QSxgg+_UQ3G"eu]fri1<eRz&PjJS ynRv)6^ߪ q,ʮ{N[uNPS2rW r> 9@B{X+ˆj}[f=J_HQHGk>SźO8bvĩ@:݉J ;X7uCm/LX}ZxNaslD,>Te;`~פLxE;u}ʂeQ[+TۺMhі*WV wd:lA G,ip%P{F+\ W/|Y+I_y)P]=#HdFX@c 6 )@7@ˇgei#*PZ\:U6mV`S:G_}7J>Mo.ײBH8;;m 849}o?>\@:,>}';r%"5qgh<.,6BӴ `#`j#<Ϳz9m5 *((8xEp[ǯ7*5[d2t[DءSU?J^7r:sBPnf}!r:$H'fךv78mܸqG U .`1rρu V@`{s`$ۀwpP"_F4 @\ve^H^===k2|A crA%^pOhAVakFC?Uhy)F[ >iWs?r1);ƹw:6c!x|#.2=F\}`cƌ'p}2袋D?v||-cߏF/ƀ{0CIW\q(=#>0vG%Ra;(s'©0ިHڹ'/EUc#W_}uLGk߀zk0!/¬)S7t6^$Lƻf1.VzgnQeCx>hNoKL;N2J*hōF )_Ȍ4Rx?`Aa~~0Lv[+w%Ƒ♁4q ":UB'pd݈`ʵfQVV?G1m-G">K=t{:::VɍhڴiiejPOaSw%2IU|QB[QA:ZH> x(Vx[w|h\g]OmЅ^(@ݝ7o?gL=EDl9;F{|&/>۠-F[ס%c$dj7i;(?϶EA|X,|3Lc(Br* *u$ a7τq3=n+0qP@ >*rx&DM!?Gcw`7`0:FqS*}*F*t(q`e4(1J B݄n83uhr] =Y7#-/wL t- A1\>y|gvc94mހg6R|qc.=*.7sGx?& .ԿnE~!򅧤A[x>w܅&Lxz1>OFbB(' M(G%0N4)) Ο?_TʳoƭG[4]HGwn7i,X),ڥzy21E~V01oU|J̅38<|3ɼڪGMjcuZjal4M(!Nc%++{{fu}]kk_}]p QpFcg8QpFcg8QpFcg8QAN9f&V" * ܏6g4N|nR&&&3 QB3q 7 /\`b%ϟty ܏1lիVի555<ɬ=nc\. j^84 01:Vx9wfOӚ, KT5,˟ݿ`^}stɬK/z—0"hIC? Uuh]ϲ׬{֗29“:&fŒɺ7P`7=l.:yiOR ^XNo~2- (?v_>WMs({BP(n֖} /`^__~`0t-[޽{=:ZP:"` .(pp=RC7'y63'w{nYp/h3Z(hbbxM͜|`uHu#, =^"lY(|N >-oYt8PMrwFkkԏn#{|m}]דɵk׆/ |#N$fI l̙36lؾ}{0,  >fYl#+nܸH?q|;bѣ\!dϿ\&## BΟL6 ʺ2pŋ9 w7JbgϮ[ntttxx?.]G"~."Zx1_A3gP(l6l!{gO.\ϧB>H枦lPT}Gs-wq;lGׯ A i{{~ٲ\>kתƈ|>;z JX|ƅ >~߿wuOz~pQ(ϟ?_zull,}|>foFSMD@`|||Bʕ+ pSS8q"%j`"Z22j?1g8.IeG,>V_@u(MjK>q2La}i \^ju|aF]w+WB654OfDT ?ۈj2'?Yr_q W`;'}m?h. W… ̙3>>/Gj||駟~r\}}˗_w] /_O~k1P32h""zof }7hٲel\P(yiQ&}r6ٸ`(]d}۟#|D '"r-BD˗/W(|~mmk_{q"n馹sVrK-\?=׏qG|˗gVZgX~/ǻ3g#G/;qáP襗^2Gop8<66y~vT*;(c;uԁjot,)֮]KD/" hQdʕ+}}}DzjӝBrq\6}ͩɄ|}S>Me9"@uske O䦛>#_½锏|@DՅB|Gp8 ȯWrUU?k32_re6=ydܹF LT499ye~r&bϗdhllʕ+l1fk\TPd(2XMMMswydg9AAE0f4 _,$kf;ҪEF \Ϗ' B>_( zڵ`t&Nң ?}p8<11JwG}{wo= NLL444$??"d2YWW7::w=3iM+6-`0@Dq$G_`rW^Yv;N1 ,ذaC__qYf8+q̟6z5 UUd2^ܙ? s\> r7"s>usBm]~ln9i`0L_8y$W!/\6N0< M;sL:ywOdD4'|oal,υ::ro}ɓ'5|g4_6{O?WWW{g-CM7K_?oۋ/֝OGD"Ba|ʕ+/_>uh䆚o, 5ofL:I2t6Z4ן7c7*k(M|r"2(ǑzG?hK->ܙ?d2Yһ,=ql6= |׼탟wМdݪQ(Lg%伆y+bQOo#9:ҩt.ǖheر~߹spw_\Y(vؒd2_(칾qf.`A/{Z\yɓ.vٲe۷o߳g>}ks\.wB+Whzɓ'_z%߯/ cFd.YzJzB!_(t2,iӝV( ? nҿIDnݺŋ]  l%g_|>GFb_  >|@D24%Kt6(h}}wy Afs]|߿o =/dLf[n  5P(sν+ׯ'#G] Ol3:r% e QhtגU|յ**^iR{xg4sEknL&ǮsD|>ΐްe*]Of ynz!77Hrs37٬%ʥKq˗//ߴiK.]~]cc]׮5pWQ&"::r{p ~W>>6g쌆7o=~5ſf}Pl/]Oo~ϗFFFo~~)rnLο傧L>Φk3t. ׯ;i6s?ҢM9ߜЪ4Φ9.Wέ\ϯ=_5J=qdTW[%Ejk̩1Ϸ|򺺺goV#6 ӏ`yOͭI&%7n>+ I71>~%H\~[o6TCo99xՑ=\ꫯj~$|) Hd!˅aZ=5!xYJl+/gY^Ok:;sw]w!ěs=Ǐl\Pw|ͫV 'O5sP(7@y&e TTȌǀ3 (p 81ǀ3 (p 81мqRv[-ņX,vA"FcI+V T_RQ=RiUkkk/]@ jA*Egiz=Q؀'X̎x=Rvm’RX)P}JaFHa!+4=Q(靜P9tww;];hoot'Q33XR=@+X)̨)4f^t:mKp#M@1HnQ m#fIgԻŤ03Î%XT_RŒLC.WWW{T #A`Hӗh\UpI}P@P` DY-MVē3ÆDb#.2 Wb0z{0Ȩ{fkzRqFTHӗē%uxU? R\ɒRX)P}JaFHa!k^ٻ}>)Ab F p>Mf{^ls/?})+4=P=-~}ŧ0ák}`ŊݾFrd<"tScBbC8`ޅRyLCAKSUc'OX؞ߝzS~o,ֲجGvlX6)6,A%T_RŒLC.bާXO\CtLYx4X:pN_C*:ٳf4Rڰ{+V T_RQ=Rij6,>8؞cDtOup~|A|0b0Y+`6=pQX#^酄;S?HDtaZqD<{[l9<0{ӣT />(;ȟE[c=ǦN= Hgob-{X,vg?Ҳ'Z maF)EFCTz ջP 3O=RiaozM&sCb(8Zwt`3~03%T_RŒLCȽ"izf!c(07 4HӗēQtF ).X)P}JaFHa!4H0 qjiz/'# <"tS\T_RŒLCiz%`H4=̀4}I7= (*>(@qI}P@} }}ÓZ maF)EFU"P 0#hiz6/''063~03%T_RŒLCUlۻ} /m M38_w/u9 پ+xzpPExd<"tS\T_RŒLC K+[<-NO=N}XL>6jE>hmUlb2dK[XR=@+X)̨)4RZN}^fG);="}m{"*yCxŅ@+ň 5]()4R=JH+;H E{ ?P@ h6. (l2' WҲX#O}"w! }}CyѮ6i:#A]-3CE[z-GDQxmDb#Y3>ӪzXq*kջP 3O=RiTK}l =b kWb0z{0J9))I͛7F=}ZDHzU(;]cF;zz:vЮC;:z ;`ڣ "#G>3ѧz~?nDP0#]b=R7=3 t( M5-@,hxM'Q| %E}~\b0z{0B^ iz EXY)3@f@${܆+_rtww;]IgɅp-njm%^ӴnޅR4~fiջP 3/|{0Ұw{1@ :JkARYuZzV }m*o'xB+3@fB,)wƤ@+#T̀4=aQk̯u4=# IDATiz^~),Ͱc( ƌ=EpA:uKngT7U_b:ʝa+aKeYcRELnBȒ^\tdhkoݝP;n)39 $,},1iu"J g`ϓ悎SDyozVl]nkxd)GB\JNFjNf-n^ש/uiMFs) 67=@n|jFz(<Ψ03Î%X!E=+V 3^+3 !^ O:ޝ/&ţ3aS}]KL13 * ,@ wIgԻh)̄YR T~m"1~_lw!70z|V4IgԻh)̄YR)(Ŕ*mʔ.ÆmLCW“(p? 뺓%(tFL%X$hBGUϳT?H8b&^+3 !^ O: DKh^fꮥ[07KU/ lzJa橷G 3 !^ On N+K Z}H/V.pj &ow֮SIU)g=j( AVPēہb1{޽ۆLE?X 7,j]:!IR)v[|M׽A`Sk˟Gj R,U5m*>ȗ-Ջ`o ߺmN=wJ 3 W=ہz7-=KJ1ԣ+3 yr.ڡ <'Q0R;U]v$WkEpԊHSni[xZ[]` x"=RiAJxn Z 3{O S}i=M^z_uCG 3 !^ O:8s{f_=LIgԻh)^ ݗƬ뮒{X To7=SBnAի EHP)XHKO=3@/K"5xR {䘥zNjJSƤ0z{0(X 74(KӟXMU نFefor9jW_`](`AM/W[rfSM{Fj;dxYF1'U^2r+jh4&4.W@wCdQz"n􆊊Vj]i(EV',vuY]RiUcx7-нu"^pJT>$sAL~Vܦz#XG1eJ"/Ŭ.eofBPtF˱[ EM=YqPVF׷kΒ[,“ԏBpffرrRTYS!+f!իq^mTwC4eWJT{ޮnZlzu穷wR/ /|Q|V4ջY'QhQ3" s$B duxn Z 3{bEvXS[\⑔n*uTL13@fB,)Eitx)dċFcBРհ@%b詷rev>.E LCWB^ںtM]"=Eq̺9tz ,)Ўx<w mLm]hG<j#*qjн4Q듢#,jVQ75Нf驷wR %N0gI)>;@m-cFbw͵JHy^y٫ 5;%Elz'۷yPb^V2{j`  SzEvϬӱvwoCD#VbRԏ0]f&6Daw 0x0wrR,ޞ2e7lR[/|fӫ'T">0/8{$GŻh) L4&&&\cI2TS##d+IaYǟGqoQ-0oRQP@K+,&@*L[ώ x(ӬÓہz7-нJ1}xm~R)<ۢ~RT7<;W=0·tpw LIeFI3x My [!BH%;rСfݼ?K18ħ^{5UJ1m>_:÷)tFT:$/#Y9爎?, +:Pү\Nh҂}kLݙe}uf> TR l=xu0m!2wav@k@T~\R`dLZVg+e%EV:31§j  X:p xHH3j (// _ ˿eDATO)a1gz׃j(.Đ ;ӋދWY1^+Vm{-<t?b<c3*ݛ^p][,H$]RU Z[_,|Py"WuI( zdA]oHsbE$`*tWj_S.ோҧRG =NvYg<_@x[*~oW^'I\l?ںWU藊xWU;KR4[1.(7]jT/ה/Zo-*PtK+ oL_OʧF=}*)<׊6ibI6:( FҠJFQwx?s[,yYܢW)Uc<¯KW·nv|[tt}Vn1}-rﳤ;h|e%?7~((is(BϨs#n 2swM*,k1,*)U*jVQ/(h!BkxQarREW-Ψ>|rnPIhzUF&J%kb*o.|ϔl ~ Hbe4I1{H'W/u+KS}_t;< yF5e^-ɄEK6G{``J3Ո0]h`N*庰Tq*xpRkI32NfJ* ga|觎d&Z]7DFyQCC$˝:D.!YXr.cĭ`%LgSTÒn!a*+`ns,BS%rW1(їByl]Gȃ&'dBq̨[ߢwG7ψ2b_>*oxLd|B8Q't0P'nD(kUSDŒhj13 ~~K XqbV Fe֗Lu0(Nu O+a`IGE)I*% EgeS;IDOJ+V*ȴ]kN|Eeh䨴hvS+}Ji(id[L寑]AЈQZ[7I# 23bѨV?!zi%T_rLqL4r 5/䥨!o*UϷH1Kњ>cL"/)[|WPqWOǧHGXԺۆ=\,KLZȬjsњ֡Ͻ(@,NN EZOCt\D,u$lfC"F . W=a4e]uE 1)z,^1Wh  (yv*e52Rwd\xn flS~i7 L?*E:ӣْ.wrP(Mv͂r{ȨwuR!CJVF )2#uzbɸ -ݥ~.R][$[:~Q_iR9EfEB9M$GPMOƊVj s ?1!Y*ՠRUqZEi]Sv⸍+80)s#EQ_(W;%--3"AMώ*jNNjEwXJ%j+\ T_R\z}Ʃ!* ;.uSI)2r,kj`Ð*,UW)E^)Ec(6Ǔ#M+)Z=3 \|O IDAT_e Hp@)]hrFmF}+yvFp]rm4GK^F)̢D )W6UF*-ķqw *@9KkEE{pY9/;ZLTyMlSΓԏBpf@fI)PD0&/ sSd>{EntrBe*㚈tej OB&#\tD`*o&^X̊FT>䍧 IkIHY1)E JLک S%EuO\НzV\A5W~k멾*9:riz.E1=*nQ9bY@VLhuH(/TFF}dyXZX}v4RX)P}J(zB?㢥R,%U_uI S~Ƀ=VN)O5Af 6-yr5CX ZT:*ifEw; M:(r<NݣWDSjtRPk h%ϖ,v܋/'dʅ]HW7:B],hW <oFJP94?q3JD¦=;C*)4R\(R)@;0HQē4=KT.XXzyg8Q3 QpFcg8QpFY(t9Z'`-͝=SV>T_!T Wm]cW~JPpF׆ux<޾/ &0C;x<1uOg3T_1ДEAF[W6*CCso;+gn MeC_os"MOGG_:"Qhd(1W͝=m%O}+g5 $"UNXNt}Q-igΞ=m@sP=l5k\4P})NW{BKm]=' #Hw֩w ?<ۺt>^DF]Cs428t-uoKK%P}7;$ճ޶1}CCzDžP}՗Ψmhi#D%Js4wDJk:Mֲa(qXkjҔzΞ"ڷ#ѱ(1,͛7F(u:e7 =DP}W'n^Ӛe]: izpFcg8QpFcg8QwFۺ6B3,*|ö]}x6$=b4b*7o>ڸy5&lFhwt C UcCfҦ͝{F"[isgO(#g3O ?LKNJǷuuoІ]gup?%nTΞήΖsѥ>;Y)b5ht޾ioTm{Wuuo"x(Ilwmص¶fmqC[?6>U^zg.1uUG }"[ieXﴮ}ERgKy[Ww t6HJs)w EW}`i޾]67+9zо=DDni{,AC Pb0uqgO_J4߼yF)J7wn1޾]ۢDTW41g$=Yϛ|8yԟy)!ں=zz`6h捑H+ϙ${Ξ=&ݖIn}'%CW{:=]ԷCЅr~HtM};=Y{c%]TNM)';d#[};{J2ggs*ZZwDCڷ${RCۼp-k:] gmC  "1g8Q*v`""@ , pqẓ rF2L2 qpvbbBz= J@#*MR'5}d΢'6('tzJcg8QpFcv&,qL}~0q`0@+ w ̮"HӅB!ϛ{@ ̽-3d٪H$RSScVNfPȔq f»6q QI㓓V|Μ9VpwM7 .UCCC$yM<0l9)&''3mS:x%m|~ԓ -Z~G8WrZ6qfׇ; (`Bq܊+ŋ444DсB;9Z:rC|_5TUq//C?^. H3CZ6KfCׇgԕDM,>kl 撗/'KrKJ^pEe2;3)ߠPm嫕$/wr'7oȼ}A'''SMM+R|cgO~w7N>?'c 2b0[tnC/2U "kr`!:88u"obrZo^=hD7m/E`rQ0 -vxE̶#]6Raq%`^29/G/|DۑN 5KWhUqPp`|"uua\*`x=ͱJͫb©& _pCÜ? \6=UOkљ"nAbQ}+WmI2}?ѫBDT{(vއ?Wg=KeI(F׸gg'":g_hc1c3ְn瑇N}G/fʄ~aI}CZ6g d4e^EWZ׋%KF`^2S1v>YF>ׇ/u34ΛFF&3gߥӿ;ˁ"3\ 7]o\'3 :V~sk>9zzbhi<":>8ߗI}p򽈈οzfBfq`fwbuQZuO2!뛒 9eq`dX.*{D!-lm4 MEGT7Hx8Qa03ȿd$l܃ii8z}8 Q&(XT7s$i?*B+yϊl90rduS*v9ۺ(X,vhʏ :tZ?rt R}ղ8o0Z_23:RgLg]K"Wl!_Ω43T|Ą ^2dNf¢]C9qJu6FB3p093$'53KYv캧e{c_~":V2i`K:7""|>?99eQWW" ]K.YpJoF\_jh |[¯"!J4kdDJ(4`֭ (qbˁN 0(OK IuΨZ6 FKB{EH-F>9LV;xQm03}ɔ`vXTc +ׇ@Luu\huMuAfi7h-l!">B1x82uLzv; [4x`e|`0xyJ1o޼`0hNBPrWٳ7`п̙C~?r_֮"w~50gng XbYȌ'ZbRQZ6 FKf`]cSSSSSSciǮ+Bl3ইx^zDOZ;e/i F%S>,*w5paQw<›#.+KFȿdHӡv,L+ׇڵk/2?d2Y2fQ___gR8LP(dK- {%7.\8nE4Ͼʛ|_qqK^d/lCW`\elD\e~TG G$QUUU$Zۅp˿^7L0˂j8R[80 Є (X?e([ζ/ Ah0q/ Ai0i K+a<B Zihhg@ )oٲe555F8nbbܹs8w `3]8#fQKp3 "pWr&BwTM` lh~lz.3b`0@+ w ƌǀ3 (p 810m6}68.ɘuCRUUA,Abs۫`0@+ w9wfUUUHƔSNeYϭĆfۃ8w `3]8k g㸛n)\pH$;]mI+n>gΜZXL|.=Sx`6S`3djjjFGGMkPBJ|֐J Mt)&>v )t-MS~?^TWW?jۧB}_0q%+!KP YhQg8h09YkͧȅV_.=luuu43g7 qLg型`0|܏zrђE\.WVח\h *7[lƝfi0n3 ~3oٓMqF VX.^(!  v@.;=tz[CUu?TӞr@ 4n/>w5{R4apCSCRã3ǃuu3*uu//]TW.Z(ؙ>Pm2Ur`kyNcnC?m902u4r-2+˝,o޼y2"6>tq3_'~;ijzVJW'QnbL ӼjcD;WLDn}u#GŗE8h *q`drϑJm`6[~}y?rtaK ͨ~ɨ59]ӊY_%mqъh*Z77|rwщ^s;}3BԤ}H$!nH__'"E7>wj׻? 4z %uua\*`XxS2Vu;Qm\73[0J` shqIBHKR{VK圦nnscI{OB}hOs]{w71گukIƎ۲cIjl0FH14ioyfkk7gs`Į665tl=kln>R_c& ᙱۜgAP z)tP9Z{}78g|ϿIzsOE-**O牍ODHĄ/%ޕ5&Qeƴ77G_ z[JO%ԵT$[@Xa@[!S ԄĻWJ:w2ɭI2B cd& J(IkUpg 2Z1~~F캻޿|Wos{\7 οve̽l14x4Y+c$ٞ IDAT:LIK2,lx45:dn }p>.޺^Coi3x@R작,!tKgYV 88꾽 p PJY  cǮNR#dlM,a޳:m{(j )&h 2-Jglh8q&G3e 0IL¨^2Cd4c|hTN+Տ{n?mmM_2wy„D*v=`W_lT`+(fvr"qEUѳ;ittUyBDPSBCCӣY0G'rrR9:;؞w~q>ح<;g؉k~gӪ׋YoGwcgDsa ӽo/i c ib0 8vnLv{jZzۛ~ɑ.Apw&]FnQd3&zU 5ӛypM͓ܵkGj/̈́ztt 'ҔiW.'LM%E<$}P#驭 4-WS r4 5!li99cLi}tl}GsI@&:$@dYG@oK]=,Mʊ4 i0ZL@Gy2COv^Lt 23ʸ 0I - ]dn4;6OmJF["!x۽7AHo=ԨlX_E)桝Sƿb,=B 81%\n@@>HvG7<Ōm?PzM}~@'v`233SRRQƍ|NL''ϼs`ZW1!,!lʕ:{rZY..[5%)[&AxZ{Rd{F)waiBAA&sbv(vtdVLnقL2 w]3 fv&d)zFj'6?[+?}'I_ly'=3F+̖-[V,T\\8W Qn:66}YR38Dyys焕𕛞+%s(ы y# F"bh6|ZR^eoT0@器(;z{4{c*Ģjq&54ʢ €)1DdQ,&UR|Ȳ3QvYۄPJp(:3J*Yspdddd||nB!":7!MP`!`g ɨ^h(/? y!`8A)u8/1 #02ʲ1 :h„蹴^U+~\u TlatP c Fdf:ׯR9Yf 8%)'<}2tny6Y @aºj3úV@a0EVPpTUU0 R:??`P>WS_cz^V~! ͏Sʴ=YU}{ }f0fj3V`2"tÆ Ǎ'p:UUU}}}He-q,˗/=~]47_uY9aС (:;kE QS;N))~cM˶ߌ( <5ׯ_/++ =I{|z庿1:zK#wuwm=9TQYu?qUiFsȟ0W?PdA&U%H$Q3 I Ƀ,NLH%8]Ą5Olv7t/mnO{H}]K↞!.SU,3 +g~ӃR*1BY. 91GP][[gY6nܸDZPʭ0 eet-XC:L}fD􃌒X!J,_P$EKeIA$jęxr+LBIdt 1 c+R`RaRɨ y@$y^$@xȒ$,I 'nގðT9;N[OkOt/x;=} otbuߑt2n{,Pf+'#z(D_IqA;S{\_roMnCG]~_GKFLx3FS%NL2\.Ap RbgM }4v{2ȘG-QX@⃌7B0"F`2j2}e( ! u7j"=@^ϮM=Xե6eO:brrRy<;؞w~q>ح<;g؉k~gӪ׉lQaaӽoK4m+moV cԡ dC}]$vbh9!,vt7v.dEA$jL' gLr2'aLbE ,$RхhȆ28D8w8!ʱ]+|7Q9A}td@hAХp8:6qd}ξVqXb">$Lr)L|G@oK]=m-0V90ڂ2@xRڙAٸ7 cQ 2 O6U"a,jE t&BbKWDxY.K ME=r9jGwx;0%%%7n sM 'ϼs`ZW1!,!lʕ:{rZY.ՏXs\S5,o ֎V԰b><a4ijA/d:R:~"ni5Ke 0 M @\"y&g\˦n1-% ~a_t ˩,.ߧ4@P~~mxxxݺuk׮M, !Yp~ٜWŔ4?mC i~vCr)L =Jy_9~^#*>3tF[dzœڙ!CŽgWc5T[F՝jd'0$1ȤwZ\f˖-+*..N+@1Jn_REEqqP{H$R[ fqgEq֭ccc(eXvxMu ҋsΝßڢ˜gE:&fVˢάalE &YF " 1 zJi8BxFe%kvB!3L}f0c9Й<`9+R`a0Eܒ8ap\0  (K(jZpPD+  '׷x{ճ7v@a Ċ:c(Vt1s cٵH6pOfu:O jtg c㰨3(QV|)'&H$[-q)SgDB0֭+,,fJ4? + 3a]gPC0Dt`d4'-E" RJUԄfcY֜g": ZAgM_|A FAOl hA4aNap(  b"  (  b"  (  b=M (`P MngY\I t&A 00 v{eeeaa.K.B!˭Ć ECa :cu1 O2J)]~=qcccThNNgee n6|.*/(((**2ۊe&A"0FaQa1:igh0,,,ҥ6255UXXhHD$&7HD&E"0FaQa1:isvT}$[˝(XN@grΠ0bBa=Up(7._}rn{$DEL6I',I+K*a,mL*LJ3:??˟@ꕋ elrvuT]Զ3=ws,iKmm<$5כ~/T_h$d4J)V1:h&O=Fqqßr B}[o]yvJ!±~Ϧr_=W*+`sg<ft`uбWNQ !ZSY1t웧b _ϝ9D?{g4PdXnI6-F Eth$Xͮ<鄉I}gBR\b28b۟}{GW#Ntةu"A{/ ܹHpKsL0&i%!ȵ3`o;6z F| RK a,m,$Rh!li99cLi}tl}gw6˻l|e};/*+`pgw4˻>gΌ+׉]3qiJ4 3#(-u-ʖ>l!4@ d]t„  υ$1=$I YS[K-rv ` c1 )ȼ @|"{,xZT-uiObEΝf`G(AZӕJ)݅ziJ"r;/ Ou–\'u(foǡƅוC|.W_3TJx[S (=;RJO'xm^1U "ʣuw:vt(uyv5VgIj?pճa233SRRQƍN{IrWH^sf 0*$HO*0π<y ;Ddzu/(iٳ_~/RkũgW> 3F]6uKٰ."*tFbT_\_ۣ 7ʏ [nڵDQ!>Gr700,gWc5T[١+˱q݅dҕ&3 R,z6dU|34" @A]MaF+̖-[V,T\\8W Qn:66J醪{:qSðn\^o&>)+//?wҠr}ſd.EQ1zQ\\$?H$R[ fq_iKq^dp..Ͷ0f;cQad|3TG? &YFKzF)p8 @B82222>>n !\Ox仿ky@yy3QvYۜ\XMXg c6:;3 虌=0 qRp8._cFautlO"zfۯr@f8ӂ ZAgMP=vJ] +oe\u T\ț{(XQ@g ŊΠ0bNaIFm6~.5kΚ|FH"RՖ#+b1(fXK( &Ȫ" 9abwQJ}>_0SR{PBȓO}a{Y/4?N)dYV**f;˜sj s s (zD" 6p7>>XtVUUE"5l4q,_ȣ_mv<ڊ~eY8*=cP3`-ݱZ1\LFM t;yFۉr $nMv׮]S-p`0{P;ɧG\>_8r]wCUGP(WϾi1qϘ d`AY%U LV3# D˜V,L05#Y)D8vbگj˳Cajtdr3xa}tE{oA@͌wxRoGwc^w/ɅP0h28D\}#-Yw:y)ˉڷ|2@RW=mTyDb BhAУ2p8Lx3&$ 2(Dp)/EJ9|գ65L'i53,d'Aڣk& <3j.GQ1M7oki{ڞneH}{qьnͩj0 O [nڵDQ!8' 9aRm6~hܕ!Sxo w$fD:et=ctÐOk[nн0ڵ@- i Č>xv5VCt[, @+F+̖-[V,T\\8WIrݐ(ыbA H$f8.o&֭[wQJ7T˰w}Toϝ;?E1q u&̦E0f@+,#{FՆn54Bs<5WGFFFv;!b)Gf=cPSa Йa ba0Eܒ8ap\0  (k(jZpPD+  '׷x{ճ7Uv@a Ċ:c(Vt1s ciHp1Ofu:O jtg6 c㰨3(QV|)'&H$[-q)shDB0֭+,,fJ4? + 3a]gPC0Dt`d4'-E" RJUԄfcYi"ك ZAgM_|A FAOl hA4aNap(  b"  (  b"  (  b=M (`P MngY\I t&A 00 v{eeeaa.K.B!˭Ć ECa :cu1 O2J)]~=qcccThNNgee n6|.*/(((**2ۊe&A"0FaQa1:igh0,,,ҥ6255UXXhHD$&7HD&E"0FaQa1:isvT}$[˝(XN@grΠ0bBap2bm ˲Qip8>ny~${ V@n FdRj\[wnh!Bᨪ*((`&vt~~A8Kv^B|k C }qJ'˲jUo,6V@LXSw٦^ۿ]/w_kD(6l8n||<鬪D",k%u9eGo !V˟.2q8̤#UEk tFwV? cth\S[ JFǾ ;O7@b,NLr7Ji<_vMʂ&f#W.Ŏk~دXq䮻'"**P0*ETQȟ0r`ik,&LdV0q & FU]cx+w/oY IP,; mT?е=~ߑޘ1۔r=/,/;B]$,bC8VTEeM8v ###CwmUeYظq+džBٴ+xZ{U0*[2$(DbJK$XB'gV!b103 d'LAfJlId,YIEzF::yikb>:v0tlPt6vfأhk3|wzFy% x"2HS FZ{vo/v ' }Ed[ Yʥ~JiU;CwX,1:,n:Gy{z_3C%Q 牘0GMuILo?ui3@9m>R_bRWz-˶,Yэ  7)KY|.OIՙ݋ kޣ}~_ou I|EE%_<*Տ%N6z 'p߀/nj^>TX`0YQޓ ,H j! b1^YIAƫR>1eM c- 2Z1"ytiu\_b3`؞NCGw}{Ǘ:a׏j<+c뽛:,KIXaރ 0ͯ*'$2HS6 z߀P.u0KgdrG)  9 ,t:g'g.o/`!0Re⬴r]܂+'uWD&^jν}J׹bC]X`0n1Yk{ïש RbX:c6 4a 0KdIQ~Y ʊAZd4cL6,  J`t޷ CǾyRу2Ty#бWNQ !ZShKC3gO=~LP.@[Xڒm6\ ǟSp~f X tBdfBR\by⒇?Z c޺윕Bc'&͟MOO'Vgs)im+moE5%caLh 2KTQWOkOg-\5:8LuThxg40diсABXLzU"߸p`97Ñ#o UUpiU0Ss: /t7P][\FۿOY٠u֮]X@őBwb ;Ddzu/(ibjl,˦s-EB"}K ZAgM_>M܈*  hA4aNa,4+  dAA1 LFAAdAA1 LFAAo#F(,,'*A 6P(d+++ jnnҥKPף^XW@g "~|.*/(((**2ۊe&R~zƲtVVV^pA1 qX献~"$ILn$)MJ0,,,ʾG1 qX{FW?~C)5 @ar:c4VtAbd*N:45tl=k)\5]',d雉 .+~.Ap9NWm!"%A$qCF; QA ꠐFG N*F]S =#;JY4l.*,AMNM\u^B8a(,رcWGt)=7ʵJ! 1i  h k߀@[P)GbcEQKp?lFÎj1IЄ H.dd((|WNCz[J[U—zoN 4{>4=q ܯt.*9EICm{7Kkm0zSzϳsV 76==XNCio鎦]{f1M6ҟk]00)9:eok= c 8 Qs]sl.'LMbƥeaU=ޫ3H8k\TA0E!ݿfOO 'gJKcSG޷o(Ĥ@HRLVVlT2v%kk]]Ub&J3}X|q[rvT& ) E.+"= 䏂7! ےC%Ŵ8WwQJׯ_O鬬pŠ%1EA$\p\ݐr}jUJզ"՝׮] G꒘" WVS:?a9i~MLFA+`)#xvBA$ЛQk=UĞQAA j6U|go>_ɿn?>_w7t(-̾dAAB\W/}O'}4~t_ыk(thGw} |vꐍR " 44%#񿂟ݱۖ۫}ggj |c1|߀hZCxOwvp| x;S:T|o\\||(  %O0UyrOlWݯ#HuΊ_Bۗv@3{n; P;v|Й~|{ǎNX(Wc~_\hbVP&  p!.Jo,gp׽occ>50 $՛5 C`Q%88 v.ϝ9\g`0NGA$Lr厏eu̖;r okܶa_ҿ@_P5{_?l߾}Z*p-Rc;o߾} dE:>`2  H~m_o/?{::ݎ;WG:=~ѡƅ7:H) ~J)yhg(`ljHi{rEi[$pAA~G)xO_~ z__9p/>?y'.g_=8 >=}-->K DKN[e˖|&  7+m{| 9kז?.qgffn:66fDJyysnŰgAAr{p3|G=dAAB#7 4_`278gAA!}>-))2-9t2fͭYoXXfܜf[$& iOfee ctkr07?l,;<zNf0D"P(ϭ'6eYݾbILFAAEvX`0EldQ62 FF(`#ldMR]QgIENDB`DataLab-1.0.2/doc/images/peak_detection.png000066400000000000000000000427471511411446000205130ustar00rootroot00000000000000PNG  IHDRl@qsRGBgAMA a pHYs(JE|IDATx^ Gu[ÐC",f#e,Yl(e3N&1%1bA 2/Xa"mBP"6 uj6:0` {e:.2[}뫩}S_3}Vu߮Ź@d ǎ[r Hɘ-[ȅ,YdrrR.Ce5yԒ,f5E SoF["6q([n/yK;Q 8OaĉeNvڶ9Q@ZcE8Nz ё!k$P022b8W`YX 7)#kd4 m&߈G0ll,є&oDSF`Y#x{es.߈FrA8wsXg@**V&D;::Ξ=+2;'޳wqJ -7;':ѹId[>f7E0Z6(Fk -~-4|`cݼ¡9tJ0+mnhhv| /s#IwTL]|W\>2Mu-v1bóϪpE]woG@2Rh}RifE[mb7͎N*VxO{&"=; 5K YF7}?'iy^&sD)’v-bm,ъ­`7AH&>H^TvYMlËZ*ZV8Y £;ea|m(pS,hwivX۰a7 `pkD8+we~UeZ\={g?g'.2ùNp¹vnv kƆp\]ɞc!Aag;qxC1mGK*NE\F|;DŜ5֡)Mǩko{<45o"ƻs g c{ݼږ!u]7ω]F0wnqAE m&߈G0ll,є&oDSF`Y#X_f/ݚipхRHIC#BN.oLe*J=ѝitZz"Ie4$*6sm 'NpL:<2B^\mnivl7}֨nnbƒ.Y24=x[8kbPD Jzp>yt2ڜ  F`kTTWtGL9sLx! Xx {BК#d8E]Љ{D6%=D%Т!zU:,pZන5\ٽvMG4Jͯѹ 釴=!W%0YB}z%ݑ9Tlt.LuYp`z|<ؼ9y(EVr6MpN og*DK=nNr|==7`hWxntwÆ^rlwԂV`ܾ%?H&t$0Mтat.64atn6Zh-HZÉ.||᎞ZSC|%{ 1m2:-n Qvnv`tnoX\MlOx{pú=]>|˯( AJ]R87u`,uNQ,eJ)r[0s@8 \73K: 5;RuʑI[R$A^c\;AQh4_'?_qȡk+/"eW4ꔭ+./-@CUHP0VbŊP7 EJ=Ed@k8p.Fѹ k+atx5+1lh>n0>_KW8wnj8Y3ùj D ヹRƓ[W\h s[ÉRwGZnvNtdd-ےX8wE }hϹΉnhEvmU*jJB"h I,yV@#ˉR"|4.qĭ2p;kuFrE)Z0D|6Ϲ-bl+`7 `pkr1ftrV풚]}Hؓ1o}";I[evdg{H3gfChvTn9Nt|``lB8鮍t!\阅sOM͈zW҉g:/O4rC|[8 n pZfH]| yBBNL\&B⚐p .  N…>8.fn!Ub!Jsa˖-smG4%Y4ܭ"Bт; 4:Ȥalml~eW_itg:;rS ި|ȏL~ť hiGOq"17JVVT5t(6 rBzep'v E6(dΙSr!$qA|7{xcƒH$fu,̦h0:q[0:7 F+JC_CսF*5Uzv̺ȃ MZ1yhpz(Um2:aVܼ5&v쨰rh恞ݴ55"n2$|E0VZH h,9NOBՆn0 I8aVεv\ sX6zc;h ZÉ"k s snivlε}t\K'xb2$}V`tns?;`7;0:46CrU4vtoӵ# _VUKSa#]K  [eѹ \;`7;εGRR=b?Z2_l+0:@FIjHU ;_Xsg`0d;[xP-qV%iiAQh+ @r'>o\h Zf@O\f"HN+[u4UVwNW>hтEv7["6vF+ Ɩ[k'-Nw--]nεmnhhvTn;Q1gcmDn =R#QxZphc9whzŪXnV'Nxk4vMQayLtΨG `\!ump$-Ϲ-bm,ъ­vk 'v<-FZ67 vs-@c3\h+.t8{xLfr?syH/2m\;`7;εF璻 2>&:w͑ppK.BtdE\tV;%+VcaM5])O{{nJ*aNP$--(J6r=Q΂p4-%v v;-X|:Mv0ZQ5Z=A 5^2BxOW#Txt62mn^-fG Fv~t t'ϝ$}h- 4WX!{Yګ'Niѹv[mb7͎ guD8ޮ=bAKԜ 5|؉ѹ`H+=% yF]{I|rbZ$S NzP(~9уc-yC1nùzTڸ$[8wsanhEXa3QsZ0+mngfFZfHk8QCZÉ btnsC8s-@c3ѹsFBs熃s%{jڪF [-IE @\|v]{xC8V㓜d.:)[e@.s]L$-Ϲ-bl+`7 `pkli{Ƿ/#j!K)[eѹ[mb7͎ ӁE hO%S춪 x MO'`٨lG|)e*  #-8:-;]ChϹnv8fG\ ŕ )'U$nUV['n+Z0J#7 RxD/7\JZ>u4-;ssnivX۰a7 `pk|r7\j{'xvH*εmngfFZfONTKw.>}%e+9Ѿ]BF7/[>/\NҸms-p¹vnv k!9s5n]iT. ;&o=xIqLyݔѹsFPjt+>:.xh|s .88T՞"L.5!rru fNDP sF4e,& PV,L98W(Zĝ6HPG4e2UhF4,HQs+#u[,kmlsu~ՎحXqx.X8W"utl ZYꍨj8q|:Fsw D0> F-cwL !qMQ{MnO~N =<&*)j 'ljƒr_Cսa\W*c pmW- 'x;ϸ`tnshfG Fv n=?зSxȾ]ǶkF5F$sgI2hɍxH;HUZ!;DG9B?ٕ3tWWj 3Zډup`BkM@Oڵg O\K=%&6'Y{{E`GΝ4I5)"Ev-bm,ъ­v͉>h$"+g=>1t-7ԭ= Rܹ rفs-@c3+'c=K1׼tgcz6Fj)@&.;|rIc!٥4_<;whzPF(kεv\ s`V-\Zn`4ՉRS!U5T5Q`Y4HPzsa6-ҔX5悂5;X`w"EiєX5i-2RMLu?h g 7)#k\]R2M.p,U F4weCùi; bmCZ#¹@C|{xL*$ˋ0T *2B."͎6fGS8{x<}8_tPtw;,b`IS\Z'=w%Eoh\.gktMO<)lƞ hN`(-j=K[8wl&l,{ّf kvF+ O'J}.a={6ʝФy2!C=_ܹ rفs-@c3C'*fЍ|%+蒓ȣw1R7Pߜ>؜4TqRS ,u"Gѹ \;`7;ε&[4Mi+ut7<4QlF:s"δnh:ONL2:484(ONV=I]'QQHZoUwas*챚m.E ѹѹ k+atK5rlNc.(⫔5ͅ-['X Uv4(8,o> m&i!* m&66Evbm@Sк-1L4& MݸǢ;ΉXPX 2Ȥì!kf¹,Ufи(Tǿ"ԑ Nɉv/ 5nOǑu+1D) G[8wlf6E SDH[چ5Y[cMnh gMW\0wnshfG Fvt`W\̷ 'B_qտ"v3ܑ0 W\0:!kf¹iqiiㄶ\W̌;X7tdF]N{7 nRA鉚O F̝mns67s@846CsDBO4vJܲΝ"["6q(+l7^qQԽr̾PKM Zdhnv`4;*l7hW\C2Yxp`-Ӿ8'' KAppÒ+nOBUKdt V FZ67s@846C<Ks>3,$5.uIMz-::[ Эj'8۷رkbȮpU03{-sf}@[:*DI`+u W:͸$ب /lꧫ/}s-(Z0ef7emZ3,) rͣL SwѱQ!xh|s#fgR2W\*6:7 E?;`7;0:ׂF{M~+8prAer!$ ru vQߓ,&R҈!cëF&["w7OZB?~'CP7_-$( mE x(/R6@ċ6De^:o7s;C+7=Ͼ]zV|(畑E)!\ݜU渢Ψ"%×(diG(Zι29DQ ޼EJ6~nͶL۞ak,D=(ljJo}ҩMj $8ѹsA+5PUsEVڊ ܹcGW_93u"Ahj~`H{p,DM[m3[g\0w*+5t E SoF["El@(+l7pn@8}:Ԉ?-JNTETorhȂ4oh(ջxD{+5]zY0wr=OεC(-e{ڭ$0ZT6}PS8{x<}4R{%e\t~Eӊ܌VkLtUa@+4r[ EL+bjSfzxHޮyL@2$ɚ;WL[a>Y ky\ʞ0\;tWHx{ڭ$0Z"ig:vΉv'}%k\k]3Y ;yk4s甉׸Je,l^٭NTOZCjᩝk`ɺMABj4B{h͑׮ ?24o[TXP$&VE$$C(2(B.޾'گcO&~[%},r%ΝDԧBEzO+ ΍aTVӴG0wd?$!bHGj檽hd\C5\mriZf`TW\f 犷Z"۳>Lf) 9[*ۃbR0>=:C>A k}氽hq? m{w~Ru>o_ԵCGCio~͡O}$ B{7|F >*S_/X_GB ;D%V..¹u`(΍Ksxj#kGZMes nZ`n ¹^v9uԳ& :7>~%&4 fЩ&;w.Ssk9nkxpƭvɉ|Ņ9.C.9yvtMfE s a7;0:6xe7Oic |"gGX܂Xbi|gS1 BSXpW߻-=t{v Q5A~+9s +nUTEĹ˺ZMHLò)#HQєX5s(|bacS"27F4enoєX5e[\`YiJ3ht!{w'-vt4w-;4%u!{;yC *u:-7:/Nn2-9,jh2ͩbkXt|b:Z}|{q1T"{:7 ܃2={'}гg3­ 1"7, /{U&[Td t Ҩ˷F#<-V=ns97U ["Vm  iW\@"X +:48ѹ- 0ε hE㱑E| ۄ'7hJZK5H.'+9Qls67s(o7YQa2wnE=l0:hVrXP["@I4jU(|ՠ5(¹qrʟѹ DH0ZQ0:NO+&ΕY_q܌`HѬqFntYمae+n8Q4W7馀|%@7+.u~ '}A.R4.gڐ:p\T!}׶i?|dfv܁};nĹsonյpՅ2m}(#kRAa~}/zYXѴ.5K¹&>0+Cmnnmج ͣѹh]1ܒ : lA4*Ӹ;ls;d~$DGÉCE..'i~4kAтeo9^v"-<|s-ͮsg :~;Ѿ]ۂP3s[4ʏbtzn_wqnMfGF,ڡWvqFSS3wѱPsUc.1{&`rIpb\2ׄXo … c_Mpws~NtF*][]/5O٪^P sF4e,$VVY)JJziioD((*7Yp[,k2-W,'XGH !Nsg0:oױ[v wl%NYjj}<ȏ޻mpi6_׎{Kœ r\5KXg ךѹٖ{̉Mxф\AdΙSr!$)J=)>2͒nhzՏ=S /?vbř.e; @K_rGttp{eHиg39;n{ox Yӹ#̧f`>L*42r`zk4f7:v݌VGvCL覭6!X?5 5%!HnO}EvJ cPHKW\0:yk4bNr3Tnv`thl8QJC:I.)הBzuW\jN7]C]ϼľPt$ 4 F6AINO؃Կɢ8S?Ks67s@8e2\E}x)D0geکbȑ$2r\T*%YB87޻ISDṱf kf¹ {Pne+n9W\P{!|p42Z$O'sKsħp\nPӲ |[т\:*3V64䆦fχ07n Nn}t'Dj@t[wtnUQ(7U@Dqn7)PlہpSan:q]Uz2Z ICZÉ&`?\m](Wĸ84^N8JN< Ehrc+D Fäl槪Wvk2Ԑʱ% bȏ&n&(⫔5ͅ-['84ꖐ,\baGf҄#G5kSl!{9Dqn,2TDTAIAQ2 i@*ua!1#-_B[ *Mùk~csueK*J14y7+#[zN@(/6~T٪>7d6^O&3F=;QNtdd[6LRYM9=BfY-Se oNOh(R%έ5 k<^2LIa:MWFh^6FdyDҰ K)8QB0ߩ1Ff-IvN4 hkZˠ FOԯy|k!^,ANRʄG|I@ƅ07CF6Ea=TH6/f7xLF,[Ɩ7B]ƽ[u¹:iS8YBy dRʐj{h9&#Ɯ"K8W誶@}O_dP2E˝QMNo D[p#lXpOJH?JC5ĕdWUj_ȂZ䲕Amܹi&MF"6neS΋Jv"$v 5 kJV%sn2nXI[s:WdXТofv jB 03%(YXq/RJmF#dٕq8 j(qXI#]n(MQ"kqmw$g 2RB- T6AZnzU!eyqT5~Rתyّ)b$H^8e4l%#UMҰ@7 ly8WQ?42g"9M? tزa;+k$By )Y:cQx: Ĺ"J=.%^E*B|Ҩʎ+Qpx K\̝[`;s*eCYPG4&^;GJW(9r#ܟLwhí鵬* YVj[m"ֆ?\kT}P>z% `t. QXܲuBhhvTnx45 @Me{r&gϞ n:)gdd9AyTVi:$%VA|\.hp\`sXGZGm .|BE7%sx"OR+[3+4rIPnsklrs+.[67p2fE5Z-۲ll|>ւÓmڧlat.`Ik8ю x䊫wW]|ەc2e>ҩ҇+721l"*qe1/VϾwOoϤjAMSGY6^GFpl1D-S+n:ɬHrE»6k]'… Y`"WѹPrkp?c/k#[۬ x`r<+"sS"+{jUp7S#EZsI`ۂ܏.>ל]K O\4}+ ^*U xW)v{MHs'($2g6M]n#UlXF?r /uQs[ Д.V*[v+'NohbSwpE-:~C]Y&f(%(_t.b6>̍4@FފܠR|JV sYaUڝ`s%x/. PWQ[ t%q*ZNo׶`Jb`6{7j bx&s;*xf", f'47y>+}(5ϼe6XfAKνc-㻟$zsfǍJ9=oA_ _w/tA]sT ?I&11HD"v37Qb_w Ė ɭҪ0Vf>7d'>L 6^Wѹ EvWѹPr+DzW҉g:/Ω S{`! n"0;use3gѲs+ ezտ_# =-gIul_ѹT.'x =U>lU?21L¢Be"=ѹxH`#ѪN(?d"3N;|^KnF$WX]ҹU"ۨ -z0ѹƜ"'L."c1xz)_Xt~½7…ߗ;VQbj$6:|"͞8܊/ F{yh,}kjU1.%j+姏3gέ;%oy楡&|,JߒSG9\EJ$倶7p\C] ՅIKVZh-)_M}`Iup!ą %5usU*x\ ;oױޱ¾.C~sYnNH]J̝+z"Us s s2M-{\wNtp&vZHs eNvڶ9Q ƆN@?:vtuo8h=3Senl8j- uMpX6͎6fGV2k¹ <5(&S-Dтe";anhEXa![}ctnXPֈp.Rid ?*%K'$҉VP6 F&hvT87<,,\qXh`4;`7;`7 `4C,,,goױ5rĈmQ|lt0 olK%n5̖BI e'Z`ʐP۵5 n4тegf8EۍջK Fnd2yyB&:Q-߼g| TN 6lqԉGB͉g:%595oFnaS$[_o$$8G3c+OSD!h˯ B :`})tѝn(@(h'v[F;3>6 ԼV\9֋GH4Z.9v;N `*vt6T.j`LY*p֌x.QSr$M<ڛ@_B6#vK>޼EԈZ]#yN753lM8nC݀'t8KSSO-ybjn{JUS1=5T$4x:ATC[K!nٳFN\8Q8Q8Q8Q8Qx|%|k~C.Wsg{;wW.W \p]t\NN @%']zyR[1Ο?/~Z*k$׽K/*r̙>ۏ‰@:>{ ̿IUye/ή|Yj={+?O~"x+ȃ}xPvݴoMK8!u4䗂Ͼ뤲,.KnpPq[]э׉'u{Mt7mՈ<Ôc}_p͒m[yQ)Gp:pP4/noB.~8\ݽMIxbY[oyH.m[[zT\i)B6&N ": u]qw=:i&zWto<-EgN%ɿiEXtsQ<.;O>sk-ԬZwkoo57*+ g(Qv_rA"|)_q7uvm#|q-Óӧg\,{kM#IvDz!-BMP W&pP6}\|띟1'z~gw|NmR_wopgx?rpcOE MO}5yY-)`s{ŏw&prGg7_sFn" pp* qrW{^&@O v bQF;+΋NT&h' _ve*[Q0`ak\tEgΜy+_)+  f <\^ל ^riU?F3ϞwMΝ7o… /,PMmyЧ~ HmpPW~_ǯ-W|>O{P/s*B} . ۃp%x& X' X' X' X' X' X' X' X' X' XU`-0$IENDB`DataLab-1.0.2/doc/images/shots/000077500000000000000000000000001511411446000161515ustar00rootroot00000000000000DataLab-1.0.2/doc/images/shots/about.png000066400000000000000000000450541511411446000200010ustar00rootroot00000000000000PNG  IHDR.\ysRGBgAMA a pHYsodIIDATx^ ŕߌ `sc΀ 21 f!. ^glDBYr016!26 W]-ZݭFIןtWWWWUuuUNJ+rr9ںu+mذ>CZn]6o,=c)O;u=߿N8u-Gklڴƌ?z=[FKy FFRmiĈ٩Q4Ґ._}]id;f43%- e^H{575kh zyLBYb7eVO˂mg1^W4o@&mڼv}we!vuB@7`3jHߏCv_^Fu # #h(\ZPtJgyG(J 7Юz.;lO+VN5:vz@\pGcO:S܏=ZW@G=}*[)'ah=w\7Ve1SNpĈ:8/,YM]?0Ǥ_}OѳVnpf nqu7bp裏Sot/]r^tܾ[誙ɇOM#Ͽc?j>%h}zaa?5h[іVf j>OM>g? nBw!Rdߴ?QeeVo!t2Z-gvhgoB8 ZoY,xot]zk`|?1v-L_딺5Px~ }/x ɾ~V'H 0T_,>l] ^sOw!CUN^xiڸC|DQ !ܵ?b^ C %h 8PthG9~o`mm?eZV^V-n}JETͼ~L\32@jP-{-BP+O\BC U3Z,~f"<(AMuh^)V [fo<^[Hwe8k:5|"iJ'q&3^&nMYʉC/PkpO) Mb8y4@Zj"uW_{\VX{;u_p>]=̟O}rY{],:UΔ}"tA9{c+Ovq."_c?Ps[?<'zI*\!O?QqU?KTD!ԓNT @s|oWqDGi=S {n??hg8lga齕!X6_#|ADGE@^O.8՚y{UD+NX0tOP ]W{[ҮxQ(Q˴*Kih1{ҷy}B,^| ?gW9Vz}tqǩu}JYiNr#Bx/e=$oeSh `-~G~X)ofg^[Hշ7Ggߡtu(֜q_ܲiSX>D9R;` OKLܣ6m+frݫy hV`VN,:G+Ù=gΌҙMnNSf?O>XK'6ƏA߾a]/#F"W0D,<|e5y,˅*SY]gRD$ {IS:Јf,< V־=( @JNǍ^my/D $~k HJ/vΝxz<iԨatdt'ʼwO.YA/>]餃GƏ4*ZJD;:jW^P Ҵd5}z#aAL@s|^ykֲtIз>}u@K1؄Bva8WO"U&,8:bviHGx2ڎ{O3>1Պ2h@8/CSUa0x͊"h6RXQՖ?hx@;hܽQc1ЬEEuVP@ݠV)pӸA@Ҹ b8мpЀ`0Y]wݕ;3&^̙3!1@ =Cm@1@ =@[bh{Z lѢVߞ{}-zm +N;M>]o6,F[DڠXl7a]tt'4np Tw\X~}6$1,,Bw:?Og!MZIS<$J9|4ʦusK1QH]GꏏJs4_OC#;ҐNS,omO?8of }-M-x:Xͻ>siƍ4moAƍTq²vcäX`,4,,M%2l*+Ty_$[/kmvkcuQk6$(rV>x3 bolZUkDަ[fN/Q˗GϞC+Vڅn.)jߗ.8^w!qM7x$]xFы)['zj%R}&d|5jM%6)(G]W >ik;P h}Uy?ӝ/ U 'Ws[2\ǗIVPLTF2jLAm_-1Xf4]}D_~U L ک͛7`F)Mc]AoSOҫ{:TޔɊM&n <$}f8[>0g9reJ÷ _'Ѥp}t89cǪtBk4sZ ד)J} }g▻z=T!OPy)o9Vo m#w}E]Vb(å'}uѥ.T/Z.ԘjnWiT/$5u JfcN0y]4AW md_b+9Ej`p +ׇ#3n|LC,R:ᥤ,eT/5~u7?' p ^['AzKfa]__Vb(s+Z 'N={ְ_~X}7>pz#Nd5hvwb Fa'{UDΏ+8Aj{+(sf16EC_ϯN~P9/Lxݓ8O q_u{]*JAקG׿ũ 矼^Ⱦ뮻n:;;iw#7lvIzO~z2zː̱Ix63[?& )n"*͛',]TsLʕZvTu qOVGu >m{ũsE?[ꯌGSM /Ui>re ,GAU-,yŵ {OZe:Ի@;Ƀ׵.{C7چ꨽;r'f}.'~~4$z饗ъ+h4~T: (jR<E,%IC ѷiyo tŗQV0Whhk 㘶gG$L\@-`)G-AXCv/꩛6oJWadq&>x:4ax?vY!tN;ZКu##Gq Kgu&tˬ۔Tz(f@Pn(M,Zr*iPnhfQBki:i:F)2Lh@8J 1^]G?c;^O; c"yGB=>*oϝ}zvlٚ3oӳ/-^A7nf+n{mǨ;n7'ӞLNwStO/؇Λ]wa!<Cs/uߞNSwm1k֬WWͧW|Cf:hw[Ncsǃ7N;r,C}l_Ϗӯoy::HZW}:"C.ľXƭ滫tHy6~xg%=bmS ߥaÆ^N}wߖDL=E/,^C_tZVJmJZ"!vС7/B-Åޣsg1m -o/&uUs:}{zF kށf &zIbwo~eFo/[C:Ii$2v% (3-_iŝ[N滛YV;yv yzֳjsOcQ4a5tуOC -f<>TK/Q_ fl JdrfD-F2 dBr+b8np:Щzp3tq|ͼp8"uڍ3 _A\f#}w7>^٦EؓH*G&`a;)F,JRo_ɯzaNt;?>"{NV|G;l7x4n!IeՉEݻ%+W9Fzgi{ ogy|aPDzcRe1O f4M([[㥓ܸ(.Aez/ᖅ*ὼsc$-?'ˠ8iY4"!*_poD T:(䳴˕ͫ>po`@|TΗY 2Wg7=An:b}{IthdGJy~ѓ ߥ^y(XrY:4qA/a!ܘUo jaf9!g!?X+ p#w*7ֽZ;ה-wXY)?P!Dypԇ"dYUe!54XDʋ&yN?jOeEJǘ8ŧ꓈k8Ϡ&Ra#H'(a]3q ¶8!nJ㫆<51'/-DuE8^go=->*&FS71>mrzL_t׏gbsh-+Τ NޏA>\~>aބ\Vezmzh\7I/4"aFv*%Lϩܗ֪&/wF;.*/8#k3SiE0x_ztYPw1ASn_yn3\9{mZt5N4vpJ؂Eފej L_8@AOoF,uYgg"i{KaG#:h,N :qqX4v*9^ق;|qx/7{c{Fu'n7/K/8U_Lzd|Si1rY+^n˝s9z~r߰VcQS q^^8n[3/;fh.md fƉPzBZ >r w-R {`TbX 2ەC >qktIGEx'-/6]G] $|ͺM4ݤP?^7#M鄜c[9@͆Ps1mHi:=߲Nzރ毎o3hPߙ>֗\ F~xD|#o#R!5܃AMߠ{yA%6|7GO_:D;R򟏣,ֱ,q4tH>// hO)tg?>f(ƨO;,2r%ipW ˚'pJq҅E.3A?G]%R}Τ=9.ͷ$o& #T6_$ܺQbOOzUrZ-=XZJ>bQTo\'7:nOҹmME*}ǽ' _)~| [4T.FF.ћL.aP.uT,glR2eݎd9õk_څ2 #ǭi!'ɗGF1U!iViΟmĝy+_ }իNy}u~tuMx6>)Šcck䁫n-Yu\~_ضqϻ+-;ӵ!Y{_NyqO]0`nܠ [%e)DуI 2s!y5%_v')vR6>yVi8vr)Z'O^'Zԫk&OBA!Tl8QXw<,, SY/$SȯyY ~i au~1l6 )lrt^AS yůMB?Җ4u>j^Yة\8嫴Bw߃E_Įz{'uv!6i=󟒨0Pdf #N2v<sJ"%U%G-,L[o5w :StZDتGkQ~7S`pr7M:hO?I' r ^qiOwZB ܤIbh{ !b|U=ġU=@[#uC =Cm@9tP ' =æO04nN&b %P-vSZfR>?@ 3C Jol 柯a!D&G\bF2 l4u- İ)HS2ALjXT,u5_ \|}\K1jX!%k|!Z1ldұ8c&ۆrvPw .,rٖK1ʭ%ZTbz3 ՝?v:*"㓯ʥYp5Mܣf"_F;4%-ֹm뼨@z+:v+,@  Xmal-j,5B։Q,i6-#)t c(>3M}|Ҡw$\qJcjT,*/MGX*BK$|KQ&aYelXW^l '3(&Uq+*÷L1g)U|pƿa(X_rZdr)nELѶ5r :CKAB*˪8Aˆg//͢0;y." EHpʚL"g% G8ZpAX¤Z^QJզSXe1ˬaj-$&1m-L{00*LYcB 7> wQyy=akɴUwmΟX@1l Iu /3ɯ`v.?٠lRpqnv wla̋`z)6fOˉg0rHUμ\HVgqم25QQ޶_iy44'R:h/?lu$ d2AP>IAGg(ub^Է}ݔMd[.jH4G#UVU=7n^,MHȢC֘2 XI2.fX13:)Ҵq-\o0k| բDŽ- +g\Ykō>%s߃'8}{~iD,%.-238 &'OP6i @$џe2n4kltj70}%А8:3ˊbFX&UOD"?+$ jfN w:bߋ1Gʹ1R~ZP q"e@1lvXLzciFRt R$fɆEI&:Ed%RJͻa]JXlA-n3=ӕ\xp=[pۮn3)!=)n<;Ne)qiq!EGy']>VtGp W8bQ%c%*:Eg>w6\GYU(8߄,zƔB19B2.>Ί (E8#ub` s㕢w{ 7&v[VIp*ψ.jFP:D$wZ usw]'0~7dmY>s%1)fR5hXo/(*=dby4=">pÞFYȵ@7Vg [:<biqz)? pDFaF V~qسej.OPڤklLȜ6@ LLϐ=z~+A^zv>6/ N,w=!>ː.m}ZHoI!)J0A]b qIVr |]U^RSy֠>W}\54iwm_} \ |~-I0=aݢ1#X ML;JH0.ꙙVRcˑPÅ(.c! ? Rp"Ѯ"D|$lAU}!]^%\(Tpo=$-` _ U甴`zrRpyo;qx7z/[2ˊK,f+kwQ*=~;N>8\XnbqɭݯӉ(c}sX:ty߱*IƥN,H^~*_tăe@+VXR%"R1b@FiǛC}2!-GRq҉bh{ MM:ĔIMI9+<_Hs84'A@9 MOaė) 5LMdq fh' -DIjİe,DT4kX41M~`^q}œ+ {&HMsXixIǨ7AACG,A9-qQ>1ĚNGz{):kT@60S8ٔLxaj"n 5Z (ck/&yM9S4{VU.ԌQJQKN^.mQNCcf<\8elۼVN-9;phV4O1l(Yhm `LDj X~ kSSy5nɸ~yMWܠɏ]갎(6=G7ߔK N˞Oqma s%'~TVW; ,ÆRh}pkʤ!V>/bu))$qwvS%J5Pȇ{+z;MT95b`p=QUJ2V5X2QiXx5Egp\Ӟ1_Y*4i{gA*r)|[rwN 5?@  lUweQ -IqLodYk1%ݔkVW?2L$qzLjDܴK vh8=)o%'~pV<p֤R)M h{ !bhk !bh{:׭[WszhO&@ =Cm@1@ =Cm@1l8&%a/QJzW5I7K;~rZa1(m(˩iDr%z,Ub)P%@x0Y2 aPGSİdM2c1MTb]@ o aq[RdBD XqjZ5Q Y/:V\fR>G[>PyNGDK(J;A+ZUo/˱*^`i >'6VQ@c9(_Gbyi,& D9^ ϥ(f2L(23ԓQFχe0q)EBKQy:%=IF?ԮZ+lլt2dSJT4z _]!KF.3 De*vp-9QaaˇBv*ҡӐu*qscC ̋Wz%t ΥF<3 T>s2l(Yiuct#GOċ6cJܪ|@~})'nՙ̂V:UY^lwg^,^̧r%||ds~!S/S'7ic)j <+=P4fŲxElOڪe^ɋK(&瑍"a7DjIUĸ VuҮ\)Weq u|szu]q.)'~Gix%/4 -ɣϹZ*@1l(QS䩞>H_,#F<)JGaU-v qcֹn]z] 5@  ݋Q\\/9'ʕ tX|/PVZ {m '1LF|w =(.:A`|БIsXa4m_2~}lo\2"Qq1l9SZn)y:(h4eS(βG=SN=rωs BS'yGvnAqqsiZm^֑$#xTkL_ςaZMS޽RDzItjwesww!>vR>3o{4qCYb xQ)MԤh7x#,C0KS)[t2QpFȻnGT{3qanF ,C=2T ܣ4Cm@1@ =ң hWDah{ !bh{  @1@ =Cmͺu ڛѣGC !bh{ !bh{ ڞn)wGMx-1>}ڋٳgM @ =Cm@1lݺb5jh{=oB_ܰU7g !:$\FAlbv3-ZDk׮ջϺu7ޠcZĉiBI /OIK6l,'x"AXO=һ &O+:|ɜ=Y;\b4~xI|@+#_MAѹ_]YqC*֭[)ˑݴi^Zu7]~ "l:=)_5YFT?XÇWrqw~/i˃OȽ0jTQ.U ZF _^IODOܡҎI\"Ȑ!'PIENDB`DataLab-1.0.2/doc/images/shots/connect_dialog.png000066400000000000000000000311731511411446000216340ustar00rootroot00000000000000PNG  IHDR.|sRGBgAMA a pHYsod2IDATx^\W^ HbJ5DMX6Dwͺ?j64&]5*vA=̓<|o;;1YdLRpŋ UZ0)\0 ӾYt)Luaa"=a# a##x, 0Fƺu,\  #j'ӕ-Ą`j0Lpȥ O6'MLLkYP+CZ1qhhan.LNN].Gń1eeeJ- JRR@-UrԾ'N([-4Xgt9A)uaM5m}5Nk޺kDžCT_J=+^m)ZA¥V+Bea VD(jl5BD -HcIwHX9۲)P=h]-B |?'^.O& +FXujʹWSuO:;V*<i8Wvcɼ =?q)H-:%4K[)P.Mr8j=p^\fp!_p1; %sLQGeZ ,|ӆF\DZ*++uJ*p=:3;wVRanz`ap //(u:99FIa9 .a,aaaaaaaaC@ 0[\ ,\ ,\ ,\ ,\ ,\ ,\ ,\ ,\ ,\ ,\ ,\ ,\̈́iaa+++:1 󿃯8!J(ſמC/lEc#g6"X sss40m W5U\ng}Y7ù)F~aSssxcʯ70m W#XXXb+Oq䲒*/^]yBɛaևKde.~ӆ}<>F=B/gpҟTQ1LkWGEXst飂;; ѵGmF'1~:ݑ PJ1 sp "J^g;q WX7g|th(}V q3U㍥wRG_7PV^ ?/GY[_EBjRa ֑`$TV uxމ~*!~y=os{ώA%Rj5anC8fe]P?*%6^7GsieٷB N Ĩ~8r?ļA~pJ*1~?"gػwo~i hxq(L+--۶P@}FXPWЙtDBEEEu>Yr4,Be07GOaI%U4`()j'Z 3gs`ЮTr5MbUVVƢ0LqY]Gfq v-CILlٺ;wAVv|rS鰮"p_mk>Oy~ٸnpss maMQRI*+@VV2gbNqi:HVQZfahoo3r%-KK+iU>{{@ؾ# ƍ\XYY¥3uA9cz@~~>SHqd}\ŵx\IEBb"ReffI*7/O_MKmunYZÆAİ!P HD-$|&~IE8%3s؞9w]B"%i.{VV"!=4T_'aG_ى%o˟Ç?9gkNK9(.7^|2~iNf*){H4RZm=q((VRa$'eKzNN:&++'fZNf)G%્rw?>_܆o6KBV?ԇ}k$^HHaX@IM??ůG!BH4СO!-F6^vxbdΘ8 & 邙ᾉAx|v/I浩Ӝ0Crz>NDKf1LCq9޶zegg觸X?-_<B<~I.35T5cnHz]1rx매Z}≑[?>y'q}Pi%[1ӡ'Yץ3~(3s1oF/! ӻU刹rpeukrv%0l;Q%#'Nأ`9=u%\LEbqlpv,=*xt$ c>p&W߯Ikg'W4ZDiMe]vr'\`8Y kSӘBs>0SҵTm{ƅ? >Ocd|/ڶ&zN)l,yqghhdG9uDhƺTvH)V4]G^J~ Ӏ 0Lou,>ppr2_Zz@^a(/7^Ncθ 9l>V)~|NxԾ`tVqq|IOưO!T{Oo+ၩ=>J)S6!5a߼:]` { $]SR?K~NYuzxF)f,Y/׮{ҲX90c7u'#pnJ) $\KُRaP/p?q_ kqȐ^u64wpgiuQ_QFvwiLza^i0jАV餿K ~ٛ(Ww7Fz-+<. zza=!sƇ` vGa %cɪ쁡4u:bd.+J)bs' k'XYLm+[XO 'AO}T`Dn+ 37)4AֲbSs"g ̛sĹzqCRZ87IHH0/a%5ݜ4Z\G"Cw 6&s螾xH||aO]&LML)/ˤmӁŋ,/\%l)!7 ZTn+ɛ.r*p6>ݼV]$O$_Ow!Y,²v['ݻbK}ׅ%/κEdpWg\Z3l!>SU*qX|i g j#{z3aO<"ߦEn7=H̊G`GxsD窋z` []qmpyU;i#wbMcvAP/=ӱב#D~hoj׹Aա;結E?!² Xp L1t +&'cqEڭ}q!/T'RO( >av|'=&{/w{}8B/+' %Uxha ɛKG qwlp\' ̛&Gůx^iW 7>]DotpG/]P1aRP %P?U׮ qwDbD09{{GnnX?/L4a% M\|9y,_0Lm/.g8޼Λ~<%שo(YM[n6lۈG^qa1ur˧iT+Ys&6\-_!|pړH˺uAo%bB/LSc4&L_ZY)2͵8]q=˗.BN)V.GA}x ۦJwߖ88YbH-}[0e!pGG#]5C!AӰjnU2=KNj];.fT`N_7mA\\ߎuO%=R')YZ($]leGrkq ypmv:+Ojf1Oӿl{9`txWeq\CaCk?C8*n:0uMC z3Jk6ޏġg0L< 'NQ#n%%Y8֢ZvYj@- [:4jgSyN[W"=VjjaE)bXo]3Q꘳Y@k^&pxx&[;`Z<==piXKpwgim VWVȋL =j #$\WkӰ@Qi?/'θ .grD-ᎁ~=}N r 1l~JX1"4=-4BD҅]99>9`cY,d k eD.3=7qBtv75OV>8v? ׺a`ؠ' yKEZI M;FwAD:)\Y7I+)Hӳ%xuQ43HjtSO?M\1tֆB@ptUQml=SA bi sZCJ a 닦{Q iC4u/) SZr,*6\tH"&OE#E+:珞*=Ѹ,֝iFu¥} G] NJ?ʰJ t`;^LR>~;RxNAK5ڼ?AFlj8H/)7"L/:1r/k$*[6Ja:=z踡if]^@1>8zzkߊB5'=OZSS'S:ZBSKnh@z2Wa:YYYW%q$AA YH$8 [R.%ܐOĤc` 1>$|:/f ƮcIHu7OخP]]\qq36fTbkX-C%__l8WWZV~gtN sW[aBO]9 lu1LcthWQz>gB,-p6=S|o哥= + i5S9-dѝK?*s)  ,k,>Wk& 3 $*vȹPW0Zvx$BsyŖ`fdp}o4=C3Ӹwؼn BI9KNJޞCw:INPR 2CqCp 9H&mk".# 8C(-Q s;Cz#!2QWƆ{aθ?L´uR-LdYbqq#D 3Bil|JM _Wʈ 4 W3;Yf&xxFO9%?Ϝ/1j 1R ) 4_%mM!짷j0Ip|jwSDEa ]z-=jEpd1 8,\mLyy9w‡?@wSa4hv 81~x ^>#yƋ/>׭Ċ,2ɢ0k3 0E(.a^,\ raaap1 cT\Moh+1nÕ5Gi-01bbbVK@b /Q!) }VmNׄE9)Oj>)MmW!d|jW7mЖu݇0319̄mfbs:*ʺɯXͣOm>k6&m2UkW[)Gr5߯ԴӄD=^(pq Aa.a.a.a.a.a.a.a.a]ֱp1 c\ :aޞaヅaaaaaMbSPmPq_uun&&OӟHjBk*MG~m/)G먽ou)5yjy1T76֤QdRF)զhjՔG ԩ&O쫮&iM>դӟdMڇ20 s+ %,\ ,\ ,\ ,\ .\j(--EII P\\ J%anC8fe(#''w}DZe l} QNAUV 7'{Y ͬD^~,ͫab޽cqo7Ń/ .ֆSĻXb5.&H#+1sɛfai"9~"&[k=Bp jwd:`xxџay/CGO`Ӯq9#J 0sSEn^|u^Ð苋y*)Ѭ ^VU073raν{Sl ? NN(V0!Xȭۏ"5(B{+t1+GqQ$ݎ[!QZE%.fW>eO?<3!ldWahp jo S 3X[iWpN % 2/u%eSH9Ulq1 c-.VfGaaؙ gH   Y2N&B~YLM2a v0!HhV\\<pWL1C,) }#yp帚[[s@% %eJ 0"ᢁR 6Uqw}n  ;;;SJ_P6F|f9:yUpUY|U@&Z"EzYd.„ pZ0mN@9DvRtChNX4|4.Ayu  4t6-p=>y*VMl\*،[(]5,Ǝl2 ӶHH`OđN@zjXNNNN#Olks{ar nBX+1^&ƯTRĖhL^V-ФP:Q XUmDaIu:Uرe 'R2nԳI_^k nVD]nt:箩"Zlqfd# |~'>|??yr$Y[[KQC =t7^\:<8>nr*PC?zMq X4V1U !S XraMzbb垼 Q Ӥe,x^b{$ ]ܓb_x u\qibhYXCX,<Auۄ +kY[ef?U _0 *п_=cB)Ӟx+|&AUQUCI 6.((J4n.z AZK ʕ0. ^:  }T`qK۱:团u a HZ ӆS*9+(3̭EEO ժ-Xl*g4r*Mšx_qZ֎{ZnTȈ9 ooz.ac!$kGZri%"1ǔe-j#٭{M]MJg·ٚ*DC^rZֹ*"#*U5: xfj s+hhפ˱p8U.U!R8Uέ(˻#{KFǟOBR ʝQ 4kstngf<Y@6OEna:6-~=u#=qO-A'+䚡4aNްY9f~qKy%(I cw|3DBGcb""LMpqwP~VFUBmUfRks(rlqEeFgamY$}!$(a Wrg7ô-. EnN<H~u)tBP9& x"%V҄ kY'+oiI ӆ$I t(X1:X1:a40L-.a 1JX1*]Y0q1w. 0 0F 0F 0F 0F 0F 0F 0F3mJB\ewo-7ŋlRt+^Jʐ?tsR4XXX(ku؟lTQs!!)$fu@`{GcWL"(p돩cQTPDpC`_Gn[O !U1 s봠Ֆ@'mc_(W{jS]6uxUb UIENDB`DataLab-1.0.2/doc/images/shots/doc_online.png000066400000000000000000006715031511411446000210040ustar00rootroot00000000000000PNG  IHDR9QsRGBgAMA a pHYsodIDATx^`U77f!@{WZ[~vimj"(WY=  sgy;ܻn:u@ @0.L& /;|{j I|8p`ԩS%љ[[[G@ ` W(7|T'm޼xPPPlll @ bxu%lzxxF˷aG @ T\:y)8;;k<@  ^)˥ }888!3͖э@ et䓵JB[[,M6) Zu@ z% ͜{_ۥPrMdUqU pĆ171 #; @5GCAKy4ݩX!1I 'G88Ö4IWUUl6K7n܈85M8V5Lo_>~ܺ:scT7=r1/'jCJrfI"it]4? 'n.R9 p c۶mi ]wk'>ӲkpSi˽1zz7}iwFߐN <"8;[Ai vTGY#v. rgo0. p}zI"G=y΄_G!!?+y9S# @hx|$ P8ٍ<^  < +r:+$?& QфA0\]jEUcˍRvM(1vNAG[GXh|<]08zBx kڰtBu#K>r^HSTI"TՆF&#%-JTJF9ׯ[C"Ϻ~,jkGwO?$7]N?:`4A9NAh<`veƞt([A4a^*1Vd^k">{UAS]U%Yֽ@ z)CpQ.=];ȯU$t2\,<5~%a:K%rg:G~=ArX^>W>B;M ]kfsdD71 oD|\5RDGIK'˨cy r'D|zꥂ4!a"{ @c{gt텙;v`ȥ,>GtYL.HP\yt`P?*OpwnVa8/,t\5WCWw/j0{TiUuPk41muOoaq9&RZ$XӧXǧc`H_=!TwDe:#B}PۭFַ12;^{uB\ӡ vTWWc``qB3i%՝ـɁhCOo5滬]NЉg+;()=?IHk _i璺8;]Hb@BRX|pٺ0sNΪF̀޾~O/bs[d)=?~Y;}'r-99Jq<LGjz>N)DN^ Ξ*ݥp9 kКqBR=6^Xae="u rIe sgn_,&f͚I=#'Nɓ' Paaak'DcU W٨=>_8Bss:Cb}zz{LQuG!)OY hMх{S`2SoC18rSF"q.LՏd{TxU?O/ *&ZxxzKϓT(ZS|hU[߄G_M-2)3%΢ö]ǰxn4weQt9shnեկy4Vo|}wnWrj_TWWgY_~T@1,F\l+dd墷f)<-})8E~Q ޥp}`tre7 #0VTIۊO(.j뗞s>Ne7cd-ƪpò5KfxzsT>yyxr$;$-{Mm  ?XMi*1= zgaq:`2]%;g6fL4of$[57/(ńw?̙3ۙHN>Hqm'|:%: IՑ!y[;w/ ,^n麓'%XH1ddf 'Up]tT '7aޜYZIݘ5s~}Őcr44 7nX $%eh uرzHh))r O4aaZ[WOF_&aki[dy,O~(l# )"~".JROA @iac@UTHd1´wJzh^$N OcԷ`8 ϚTp^XԖWI4l8t$92Rع(ec+&0tjiG;}f"5)OJ[IptpՒwuv.iD=:/]zڌ"oICFx^x+q$y pY;99],둑[}V}u!m 23\2k8_,=z$ F}XRM X\V6HmDzTԷZZۤ6Ӷ6j7Ҩ:=6/'>ͤfa`idpԎ80oIʚF|Է=ʥSo\ad /#\N|~|>rq:?;ԸP,Y8;%{Q QH]ə u+28f#??yL!y{ܤHNc\]TZT7tEw78xymCpuC ǚm̐yz+G0ٹRٌR`` *7 hH*?G8/:7$/>­_WS'YpqF~ŀT}JAߴ8z2XPVVH8iSȑI*{, O!f&Mh<*챆;CUu U4;3=q$p_-*0uR zL؉sgQ1)$!pϾd阣iڮ7' *20OJB#Z#yLVum#K*Ibċ+YsQ! v*3/D~/IxzR\/Dѹ2i<'/G+d]hN[Mb;.nߥ5hiBTdNfC3OP9::I#AȋʪD%7? ·;v'RSD^:oAq%ʫjz:p:t ¹I2ZJء5 zJ`>$K?hsk^޺K9]}8' Scwq;3ƞvb02|~XZ"٬v&ߴFz'W !!%ݨoCe]+UH`lݨ1kH/;8.Tf*zTIZ| /̃c/mR`'YK=ߨ+և]cBa T{|f9H{O¼A];xϻxCdH`{ 3WK'Q#?|"炝%%9Ip𨖊;1gn2]X/v)321mJq1 %0TDPP:IƣHGˁG&PFIb}x䊮=*Fm7{dIp{ag<,_J㔄 9-tOp1<(Hwf4xAL\nʛ-k;HkH$uH$'[I{Yp>Ï/bhL:f14jGIFKOGLt8)M, QxvGhé}Ly}6#K>NLrQ,CzY̔FP98IA/8_OG#;WZ3)p~79*Fdd]TW/$8Lߏ0I*1%Ÿ4j`i)e.Np ÉAb) |4a/=`V-q>~w,l^ 2LkkO>'%XEݢȈQۥ#7әg.{}1\~TֺbR9Y(yy͞4ӥe*O>wJ NdH"w?&2';u$?*^N7'X1 C)s~ \NV : {8BĀiNP;m軐Za;4:wE,΄W(>~Փ'ǽz̍ş{H6jp*nvPy/n} s~ʚA^oYZVjLfIGFQcv'GNz{;]6xЎ7 ax0gC+)fGxŇDټi%6Z<:UEh(xT?SG #ßҴu.Sc "2,xďׁHNUHeX^/ kBL8rKi+F&Q~:;_Zʆw?^C8 _#\:|g6ћxfmOK7K#><_\VzB 6xEH/-'He*6k|ܸY36(ҙ#48qѡ(US'^_,-/("NFI{Txxtˊ~89oH q0e/TPZ:7J75:[$/|6>t.s  ", *idjćHwSKB:5c 0gF<ؼfp@g^Ksscx~#Bztrdz֝?owߴz]8-g ;{})flcJˇ*iԔg>د=r $fLm?"̓2iЧ*VAoG}ư:0:B.ђ3ȻJk: gڊkrQxb8 Eq6f2T~>&A\܍S)é6I q$8jkz2i?G=H# cO $8'ĝw@c qAa4$i}qfCE/DK||$<5WHk_aFJ}y:9d@y32,kH If'Iinw6:4+Rv^#S0xR)MӳX\}^}Di_ mnGZP{ „()-t=j6k*m#kbꢐy u GZ^iꖧa ,_8-<7?ɉyh5B8 gD)|L"!ßqyHzTyOe&a!,0P}p}};=G}F 4Ԇ2vf` f G3|g+__9ըUT_.He˂oZ) W$ERmK#|/gڇ;>nr=q#ա4<'``mOiTȔ3"uY>{h&7J3a lX5_0}nc<"χ,$Iqr>£|d i]^/i]} S\,J,..xJmk,pp;ix?8ܗwn㜦K9p QkHV\#@O v: g[:s*pشny<0cRq%*}dq]ϚesF|`^|\*c},.q Qy'PعM&F - n<(Qq; R|GG)Qr8xʞE<~-GF43>Tx]x> _DN9njK͑:~Ix%,r| /l?|%+`!+Kxx9GU3E)<;0zD4xduy Y#ʪIZ,N:)#0p{>-ؿZ-Ҧ~ du$tCr_YW5J->8R/ Z$= NdX23>T`Jʈ4h& zRmJ4 wF; ڨNm%- πutݍEeV+~D ?u l~XQI3v O:čr ;d0vn95tNs֥;y6VC ~d $0u=\x^3?AnYV͍f"cIU;dF4fA\d}wwk@p?9#!]܇8ԣGb?JjmG[ B, !鹻vb Y] hXLkJ/8}Õntt Oa+i+~]{MgNI;Vϋ 3X1'~^.H˩CT;L A{upvC֣ 358tRIn`¤K /~2?zEZS9N) O^oY_]>I|ZWe~=O}qahiU7I&:4Tj1ԠAZ$=8 Sji@Wt#EZCw0$T@ esuqz \,yG<3Oވ̳5P;8:`֌iM@v^=zps`聮%(M˩6Rvp+^@_W6@=DPOf6@pO$4C׺ְ<}?J/O~M @ E|W7SgF$qI0̌N~ t?]/!>@ 8&$vo)|za,7$1CO@ 5H @ ,)@ S @!ħ@  CfIw$@ 4}*AOOT*-~UB @ ŦB@oo/^y+OVk}@ @pjoh4iw@ ftڝ'NS @aZ7 @ 0@ _@ |a)@ S @!ħ@  CO@ @ / !>@ _B| @ 0ƠA`4[@ |? iSpau@ unV /eUn W?ObgǮ8~L:nc.@}ۑAyU=kPUS ؎;/F|/\Mkgn h/نW@o1LFw@ ;.=ٯvb{Dd7w?~3o{)Em#}H,{gXw3|-Q`@ מz'mag 鯭\[;;x`Fڎ=-lQ֩9"dnt-V RS2{W,^O`8WRˍWzh4jtШTZha4_ z>ZkI.qJ@ 'bxNk7au;C~1㏿²1i<$.Vw[" xoB:}،Lܱyb|oQff#Zp-`=BmbP (opHS݈(yW&em}o\0wPG@  'f" =zV!X e%~e&2ML_6<#bgߟ>V)[?q6GY3Ԋm,E5xWw?lܸl582ښF7 7"o"'qYes,h(KO>=Xu=omm7J:}@ >#ӖeZmWĨ-gɩn4[rNYNVYTl)*OH[~Fd:ٲ7Yga-Z{-# 5Z~WgJ,o|7?"_e鍜ی4T!'$y<'|mzG[YV{9J@Ь7/"Kg'ryQ"q".M͟^ @ "'aVwg7V*?K!yV`ٺ1(qtmi0 ?9m»Q {w[_SfF`JEc<3 Ζ{VqךiӧVwVl?t'wc߮o1f+$1oXyW%@p5\qˣpy=vë=.@L`C'I4GmG#3~>l/M2-.4TA7ar7I @ |kS|Eтc#bx߳r>'Gfv6cn\(¿ F/ dݺqGG{Mv;V֋=sdXd'p$ULOUW=yx9+w@ ?4IXźI[G"F*;40N K}ɰx;gOV#ᅤjo_O1Ls~l %KOG%|~pr XzÈ_Ml [PmWA-émXLQnςB>rN)+nco#}xBRzI!7?x*ހUoco#mǺß(Z?EY؞܎'ܹ.c@ ƫ ; Ϫ4 x uuz ]pq@_OTzDX_=GwcP~tLV !)hhSH"Ob % i9+~|&ZPY{8/ /=bY0uա:GxtU뾱 .)ntmAIAi Ǣ9K4եޖNOn28DY"!,h r[VZtگksoSҼ@ BV#//ra6Bq|r8Cf#Əqd#7 ]$MT}Rp6wFϟ`Cpǧw쾣1 OƆݥǏn+<⿱“w\X@ ku+>@ _=@ |a)@ S @!ħ@  CO@ @ / !>@ _B| @ 0@ |a)@ S @!ħ@  CO@ @ / !>@ _׭0L0--/X}ma~\+,hGV^\bD}YOCCcԡIà׺^ۃ3h[| +֑viң|4UCi]/ΜNGMʺӣnAft)-ŀ&sny#~|:(YhRZM qßSs26"=,z_B C(@qcuÕnEzft7U4gؠCseΔ4BoxUXV%P~1ףmQJu*ї`DEQ tU8[2'>ŧN^Įm[R܌+jP}]=0\Q𞽨~U?֑Chhh'7%XPny.W,}mM- cgѽv4=ϧF e9U~:[0wBWY-Tj!n9o$c̯Gy.,X>iдTՠuf͍\E8X~BB|^s]5%(80& ,| P\U˦8-ڄqko>],.G]~,ZhV^xAeNn{s_̀fzւU'_[Drkj m#q7eԷSwRw-ژ PEW  [붏ǂnʓ:f bMزynhvՈahxQiPYAKa@fϘq2cxp}A v Z=H]٬WS) Z5.U)GQɠ^cpH-K *'44P0X04c0oSkGJHy:$FDmk[ȿ:)*aJlNVF8z|kZ46:Z1}6>eaf"oBZM+hid,܄_! sZ5[TZʃZ*{5E@"B^IKj܃sG {HfFkqy(HӨmj$>qo&JTr3)t)7"4R9rӀf/܅-OkNMui0UMOkk.eV$^ε6YuYYJrXŬRm13* 2#tcҠvH6,h_'|~H{YKCd'ǚn!saks4ӱjnHt *o>~l]7K! :z/X< NCi ]Eۥ6IeȇYx_:ϥc~'󹔔6nm:oϻjj1qĞh s\L*nTR~.db6IוJ6ad#o#[@6Imx-B[pfHi gpdUc`4$ .' 5H}jkml'9l~~+K=FJ3І?Σ:a gp~O**' 0a;vvKPi5d7l'('0ԅ/†Nɦ::äQbp`죵GPNM]V(G=]gBx-S\G@Knjuss^ת~:Vjá^EjqD}Yw:F p;֒_`F}MR^#eƐݗ:P_.סl9zch*.-T;%ص}'{ڈTp!voñrV.lTwDv>Ν>T;s}6zi#;[/[dQ/}{p:/̦Ns'UHFsx>ޖwO=@vmu í'1kr"^='PՅwBܤy_A*{ß}(N{7?k0mں;g@,86C^`+Ŝ)nM0Y~u,#ߏcofN:*ǼGB575?0kCey:?NJA77?/n[{-ϟCa>#/cיcyx!L~=tGԷ_Eמu=z5~&t(:1qܰ{a!WTuWͿ=~XyZ~n%oŝ7nƂw{i/3j S9poޠ>%K76I–_v)? _?sD y3*v NɅhm-CknlƆ45g/n^1+n1r&x 3o+V݂8|)_SQVnm[V]$@;3pےsP9&b@i0zZqo'?64cˏ#)hfn弄͉ />j{ONcFu!Xr=ٺu`oH^520wz ێGnxᏏ}uVi@薟≟m:ޕXf,aRֵ♟݊_>6p3=%d CH~q$OV3 ~/h3~}3!gv!??{~b%J6`Ex-gwcϠuli1\kh%k~z #KφΖPsɯj4 ӱr͘>! rm9Xq3S(kA;O᷻oğg>?OsBvh-ğ|§BԲ#9W>ٟ~]j#f$E#;F%׀#ɰw㽔TΓujE]k+ KѭAjdJIE;ny!u6)8?{-zi\cwQCvoӹrsg֡2 z4 L #GQX}`/jQVPƎA4ĉl>] %]]RrziCMC;* :8(է!5 :ơ<)Q_p3 q8 #+y7C'9P|^"' F3y.&D!S3YSz|~0GVXx2 H,1qqFɌi3dJtd P8IA+8עnj7ۖ;a䋹3!.6X,[\?yd.Pph+ަƮ{GH+#AfAza#&SDNOs g"h r4dgJ<ڻ8(m:7wB=؆_xk ^!HDgpgYL38zW߅'0@Q$_{&Ccxٿ`_^ڛ9O/:G4;hR xG q vѾO Mh,Ž_ gj[໏ O?+Rˢa(\B'ݍ~fTxE=2䍉(onlLw߾$ 0Vo~x%|Md??  1Ly-x7P 3uٝX|ǽ`ǟkG=LD\`ɏ7oAٝoL O ~g'H@y0[d]2GhPGGbOamF o-NY |;Em~쫐 qXu#x/+𭿿ՈC|.N{= a ˏ߁7q_ѻ~uH&J4`wñ wsoY8ϑt#୧pC?2=W^ķ6ςNCG{L>ӅE|8;[qBs?P0%FQL+_xqGP ݑ 5)m 'Ixt1qwp0U^4J%'hjdewy&5^ kܻ8%C@Z٣Gcf//a8]# ZHƋ _q,Pm5?˿H.g*g<խIod4xSD}7H@ea#X$H(;Prm?|o=l1AhA_g.#:[քHFQ<;1+V.F ]l nڂɚ ^t^L^/O]QFNhP׈ع$X9'tggAЄY1aq2LCG:x{4ۄݠdSfcrth,LА(09w/n{xDk~A8o'9<Ֆb *:Amdx† :]iG&!:`79i9# ޔpoՑ*ǎ!o S4Ѝ)Dl Ax`4f7cHS]7ͧ~}y=$;R;^ w਀ 4ψGD|C?{"Z` -(*ux$D!afB0B|!< Pls Cgz/HD\7#1{F?z)X`t#f'E12݄H)Be & ap5A [Z'IǴh1"]th1[+ϨI C,Q *лt>DC|qSeGqn V͎ 2@7ݞ?O؝V<2-#[$ ^~t(<:~R* Ay,2 \F0⭷sڶBO wLP{6N>xωɑ?]IYݚ O,;zJ,TG#p(Mw% T|p)sHK;KSJ2)v,{/[ Bo[j9x.9t`QKܖ/h_k?DNVBC7[E;Wؾ7)Ղ/k-^_^ 6Ur^2 Jzait@#f5T)TChSCim[ èAH ;yRר/Ib.dkMýT}rtf@/a3a;c>ML![B]h^xpuysQvlOIŁlЖ{c/ck)E ذa=oEp0QT>(呍@Y4&b?Hv(B:t[0up'2U]pߋNポ$ v=)l /'[7+K"58RO $!֯džu[=+@^Êiiس$^ ?XqR}€hioGaHّ!C6=!F5ݖV` Ǒ=fG!@K[EYz5d9pI׹zj9?9Κש襼刏5$yH| .r"rmQX>}qN;dzm ԓNQ@d֯_oŷ7HVIDNZ+%!wSO,( ׊^;Vr3{C~#3݄p@j4z4gapR, /Լ껣zjK|b "HdPU*olKm|,v8q,%}~%Ɩ7`m΅3vwz R˥s78q=u#L:()z2M='C$V#é8USY yQ7^ `l){vGYSuw#ԌO64cX5@G‰:{#eA}S)4dc Nٽ/? #2L5{+0#i) w:~we1}D$_-)&NG¼ؼa 0+TA݈h]:JدŤEv QGg2hP0)K *8x!nH>ID1-e81^NjTUUcgDt~ɾRCA HL{]X#c8r'\.Fѩ'Bo6݈y8ZvC6T:-_CTL dvUP_\R?A?6:@ _7='QgKQv(X[S?OJke \~:%5- ,+6vA~~.o?hӡұ"@bRqp?LLmC2 \Hƈ({=udcuTGRQ l->GNS])ن|Ѻ旎 #{8 ȭm&Ԗ@ 6aiɜ LFlYB# e_8S)Sߺ+`F |0wf"\ֵ4jT6Z46PZL*K~-:{29K[oShצּuJe?*KʩVÂekW#0 =C[5s4"l0jFEe5jѥ!?5yYh[D"caKFD;Џ4yWW#QZ"48.L^ 1## PY_DBT&@bj8lXꎼgѬ?3̊@KIdXZgB3K{UTF V @ipة,E-9|2swq'N`]!l?S<X^m;k5bƤB K@B$IsWДsU↉f- w\<"}ݭcAӹcd|19Ffg(o(#1Ds COA8 AʊN7 OxFaټ =wMFcX59bzx(Y3,p:@ 吞,';,W Q큧zA58@±@m>vkH[yO"=e.kDF9 ϧae`?2 ܋#쎩I7@ID m!. i>|i`JSD⤙XގJh0wvJE_0l7s!$( $\c?}6\-P)2! LǪ${;[z\ Kb#3c(B2kV(`N Ea,AIu-|bgbB#0aKB7m:Iz!i s { iU$c0c$_} 8v <1 φm}:0mBDDbr @4aF"9(UK9:0g˭HmpYH]0N<&%Nzʪ0ml E~ b1{rfPQP aC  @OLu(@O퍐D,AFaXb!,XT5\3&Dy!{>h}sT 6^s܌`; #) W$M惃0{lLF|Gdn$ݐ\C/5htDUH4QH"3>CJcl|,^⏜JLŚ =w06fe\7P,͐:|O"^lj7bb  j&,ÂD/̘5Q sS~j B̤8C`@ hsu!hR+r=h]< Q  - Q~Έ&)_݊sȶ.? AvodL򣾧Fo8f$Dj dp0Hp'!f.&oDP +~ 82UCp(#8u< { 2<n2 >wnR C6l~H u@'E t 1!&PFG^2rc3zr@/¨sG)a_L:w,Ezʶv GT΄7SQ~8U ~ ?7AhӲI(WPT4!(iZ<J$( .\'n3nmw =+/=ߗOVzżkGZXة:Og"kx$+zʲߺurtwwW_c`0v8CV熯xjXF~K,`}nx9E 'yQdz\&u d$ƫ1yS)6n.uvxZ \9Omv_%VKg8;9Uky #88<\9+/<G3^^^?!<Bx Z@ 0@ |a)@ S /;mv`u@ |ItU2ЪR=}-d4 { ׽W׸}2j1Zs?;#W Vsk1}?.of˗b1C'چF~\ ZW~ZYIdCk}ϗ ʁ~ K(ko,//~U`iY9=m4j-&D#ٞ3oFKEvJK_'<fYs݋φ3Gq01 u㵧[6*ǯvEMoՙ`13l/~mq|kaKql;p_igԢJ~'I5j? nmٻۏ|>_+l(A;؄w>&2WL#o JX15Q\(Xkuf[-޷qcl2??2k8f 2?܁~x0hq@t5ȝ=G O֢CPBCF~-9Okb(&?s6\><̈́U}2 EuT!'gvY2z"ܟL)DK] ZzuVL/NfTd5ZTu~.:[j*1h?g%L9:V WFfä'RN > pW"Id-Ba+ř*a(׷A널PZq)T5B ǑǨEEa’f~3C3$rKrPvpxITN 5}f9}aPP_gy"m55"Wh(ZϠe7:'jCmq(QVpX_lX_{ %2StT!PP4Wd#Q\ׇ 86N rUPM@/hp@ ݶ6 Z̮{DxDmn@Ax79|\JԵ}GTTAŨ a_s w0@-h,ęd߇65CCG]]gpjaQaלgPVR |=YLբye :߾$LFJFB4 HuaoFaF rKP0 ؑTT_08|, +yme0mEȩ3Uׁc( '?5ps*PyVZzVTb4WCnzdC^ BC8&lE ~Tf#J*W{*z8E(U8v2EԆ\|#aۇS陨niA~z:>Ԗ])xÉCt͊F}9#qb,:dK')b=}+ATЩzrzLN~K&‰%*"y{ƒ۱/.YS+pdqַ*;okpXG~ȡGQHiw>Lm:7= -M;z;a\jNd)8 搛 08hQygQY׏@Ԟ9SgrQѪ|9z̜{k"נA(Չa2}G<O栰a)O .8C.BU Z< $(pӤD{5m)6!ertݰ \h():lF̎Y; -zduܴy\zKYK6VCaє>Oc2lZ Udv(mZܧHA5]6.4c6fY5C.ـ/@E6vh;3ffa%-DOT-, ZJa 'HiEz}7ϥRM7 cƼy3 ϞY%hC !uOoy6d6Q%MZ07C{20{&@13ĜE0!f>YE~n1xl6`ͼ08xCZ9l/mf ΐX ӂqAhBgSDǩ0SfCmQ (F;4}e Mc?g/GR-c QmT \tXn r l޴iD(OOFlٲƲH釶{s1iz,'~*Μ#V}!iF_4xo JNӵk!BvQ1!X\q`.,]u#qݝԑ3r򚀕sbm1eJlX1 A0>7ݴ6=8]I¬br¾,d&pCsv܈y}1>;g6\(r^c?jݰbFʫJbqGXqxYr%ljA&~{ݏY+e*Dx9йuhĄk<G󡷐M LMp2%cnܸgv! 'v[nXo'rbɇ`6B( 5dP;;3j37>qS0wz"X ;O̚,Ƽ)p$RU؇Kzf!CݏYh-$o߁1&I)Z*w`MX|6,h>V E [6"Dy{k `kg, vb0o,[q!fȄ0sEkAI>lOE5ش~.y Hn襀bH; Pݣm2DMsdJL q'Qލ^c֔#lKn`Dd|5J -9]bu0Iь伋G2>[6SI$lp)mV3b=nZ);Q܋s&~!2Ԋ|:ߓ apCY`V̌BCFmi8\`'K;0`.O}PnDG/wsi`,\4:l5kmp;ZBm^]G`<[6, _p-Cz }tDE+;u̝UgScBj3i<:ehs7d?NY'#{uElMz̚;M 4 8a^-+faDsI$Č(XvfG)*~'l{ٰ+mڂ0YdBe݅9f7RfCo6L!t&'"GNz#N 0 ׈شq-|2p21Њv-R7醑OWc͸aA}HٗY+qT j Q-P؏OQ;B% 1qpƄS(3cm:qwA@P0(΂"l l@@jN8ng4ćF 0)A #)H BaTۄ9d80!..8.N@ە=^Uxcά)h [@('"Ĥ8xx5"<) tDsS9 r[[=/r[;mdR'K[X}&S ʀ8$ fAf:KRf# U;Ɇ5%*?]d8rizpA.DD0+j C]9Jɀ=.f5dd)ma IAa:K0vTن-~~Iyq"?A]qjN#څmЈᔻ ;§$arT8=ac-*#9(zP#ǜrAp>v:ʜ]0s^8Rri/ńBVmt]0ct7@WCx`jDq6E9 C͐L_hMC8CΞI=N5Rev0nR;X|81TQT 1 S.G@fL)Q}[y`Om'&C$PҌ#( "$@qђ/GZoNeg7̾A|N: >)AC]㖑 򆭳}LSu $9 S <0'̡}(7Cင~&k:|IjU=hOŒjr*0v5g;k^Q#o>[HODJmM(=s I{P!WCgZD-+-񅇇;u-܈Ft68 J{P_&[Pwx`0uSPNhPڹ?pZ99-Tt٘LDeD>)cQ0{o \ވ9A69U 4B4MtM;zdk<4ہ=|8zh Eg5!O,Gf;4[Iܶ Sb?هn.G[{@FQ gIDh>%prEttU7 B.3&F qn42Gq)4uT,[ZX#Gj;)E8;lւip|[5nonC$TԣF*v;~wjDWϘud-F|;$5Zrb= w ;o!c֤Ȩ^#)OH@jTdW {"=tPmEc}1Øs7@%He#9{ ~ ;N78aҴTf:BuduM,QH7BY}'b^b$ƣ)@VoAԗ=C r : X8{;Ps?xym0h?2i/!շH-3'R!=زzT!98EE̎!_A|N|ʨa:0d]AJGg2ӱqzx˭k,ؒp=<>uF*nlZwtIsH,Pw .'p7`#EDw} #NrI#chpꊞ7 ttu*@GPG#n?sۘ4s"+0ujlܴ݉a4!n$C&[qkdsq*NN_oـxo{JeDۋց!>t1E#}uR'[M-`IBWRJXd.,(FȂ(,r,xǝش8 @Ӎ{NAi-.v6_L?pzx?:  p=o½J AP#j&m:.ܸhg\ن!&!H cFkcn9}x+'UnݷG(xED#Fͽc2HYqQ8cR垻,!rkJך˘i1)U*sK_HBډQd0\`답6mK'I[}EιzOKu22ycI1nh͗m}TOg֑s\|-`ĦqםcAR8,J#mc숁#]mp$;=0ތZ9vBfv b'Yܜue(65d8cڂRyvXMd{1r%|o5Fx$b}Im@7@IOC;ud/X*~ 6ݱ V-GDXFJiO6d -d@ O!%N3eQu@3ŦMq=c ,GD] K.|o-Qq/v F#MU/AU7߫7apZ շYKh,ڛtkH._Qthτsp9w޴+fK2# :?aoe18h;$ISlrF2V .%돝/V,{GtJѕ"8e>vPXۉb}Uj$$L;E͝d)#6Ҙ؈"}&'6cQڃ'Ӱ'5 &W̽a)|.NFV^!d 6GgWyUغ(IF,/quRH)xmMC&Դmz HޗvRa?g`/f5i EʯfLD7piɆb޽H;r9qŬx'= GPߡ9l<1ov駏cOz$Z/0mQMM'!N%K:(3N' qI44ȇTI=<#!8m$,&OɴȫEqz߅ku*"}1%\eȽ6d$5ɨ,D9"jZϦ!p*\r w@*i|$6"Z$/}aW2N‰L4i Ņh$9*#.Ocq8'Ga%wmck2YS^:u=tnR>S3v9E'f͘_i?1UĹ2"G3Ġ Wz{~N at1p) tTmS/H^A֭G:[{i ұ` ,BTlDtƶCw0M=iDє XuzʏI'D"ꥩUe0Q9 {C8^믣cpAW`B_!&NF}אIQsӗpd2~30-Q5MevHuy`ithh<{I.KĺTpa;R v B<"0%:\Uΐ"B@dȿEzp6-GSѺ\Ⴅk&a7Ng"'bwo 8a:f$2WH@}ȁS̏cVz3zNAwFa<6 [X$ڋNLf|tv|_@Yɑ߸IrqAǔ,Eqqǰ; kNF}yo`μ<6RH84T&eu "aW¹?43'˱m+QȪ8ˤHp 2ra9(jb ''(vŠEo 5J;xzz֢C2T*E{lZ=k"u0 J{3l)2gA5؇a- 5'W,p𤓣 +TC//z Po /o/]'^"oGgc>z( 4hT!wp,amS=(SSg$uf Q\U=)rXTd,{yèSg'8RЫ?TjJ _Dפp*hc1*^(Oڷtk]9DԞz6 p¨ RyP;6-wn,3j5 +%~COL6𡼲p6-foKb] hȮ )dy7j>=_X`o'R_eM^>+ÏXB֌~8x^E6Mmqn:j'NxJVHf G[goc *ѩ0ܖ5i_YNgb ?l4>z cNɞ+ɷ:R\ n^MPI1-f'f ̛ c/}G^;f bfK#ۥyT(L\^fRusvլe"kk Jot,fmOm^*By2-}y :nli"N}wchpP:֕?PG*= WP؉ݍW_}l1yMz:Ƣs"I4 3܋Ɂw\WB܎|o%Ap%Z+J1 i߇;,t[Pه 4|{  r+z z+"=/:zu7= Y[0/ aa˷E'Yh5y~o&}}2$> [ &{@,_/U֒dэX “qP8],;O_ԕcu_+ɴTur#sygϠy“̥ *@ \3ȧ@ +@ / 1.>W[hpUCBd8牘v_&!d23M({1A _bsF@ Ы)oPv b_4€ϜȧRN֌b@M+m*;>,kPQQ 4w]򆗫ĠGGRrFev^#ۆ>(Cxh6;3JekߓcD}(h}mTCJn lG3pyu˓X\L8h Ofg(d>+u'v#+?;fp'jϿh/Yy%aƙȩQZ_sxH.>Km87va;vAgޫ¤U,jlAyC31|e@tvv7AQs૙OCkq~jBIIhtm]\SKnĔ+ +pOoF:@^v}Frfg(r*~( xT%u+lV 0!_92ԉy#Sb`oFoGOҳ(j~?f]=Ֆ峈 7;]p?՗ԼŌvh.}o䍕R?QSfVrs+ê!aH3"E4k#𻲇JQct\ lZZqP`3_ ,jkam}ot'ĪA dVI;¬GgW?,C熺gQI`2:=b,If -lgA2~qSMUJ:<Ȥ'ѧd{qhT\u =yCHM&^ ;tז udd Q[ D8 e@?OetU#Jl@z9T v2:g2JkDHَbVuVE?#o?1IE?rd 2;píؑY {۠03% 0*Mo]0+.m.Eb4vO锓h(.yEqנYF>BE]3dnT\dfCMc7( ~$c֡&(6v7=*s3_^ SW:)p(J~ 3̩3 [ChGDVN!ZUlEQuܼYGeG 9٠ڱw""P[sd#2 "?,MUYv˸Zw>uўWT:˨Y _o7Qت}V}Rao0@G!A >@חBk _Ԍ!#(nrA{Sr4'z6v@Nvԑ 6N)Q@&w:ψ3({Qg@RtZ\nQ17AA6ag t͙(x /„\dVG`g/,;3QXU] jZ vb0Iƙs3pLrf;s&ǎlbrK͠bf̼kݥ&ٖ,۽j3~&x_?IHV9Sft(Wĉ`b176l]VrANbt4qL xD v N{a~E[F<z@epBgqAK}q$B94#χzP]J?Å~zQ)i g$JQ-l \E:Td0NcGUpDۍRtŵ&$FUjjC^tHRL8. {z UN镡I*i*n'LZ5HMhwq(cbK8=H66sɛX /^FS\.;vl^BW1F#r7oނu=jsuhooAgGl9z-Jڱg}̝>~f5C]m- `[qW0Ja!<ޏ-[Pb#>xwBl?>6;q>vYyU+c96בQY[xK[ڊ64V"Ё8c) מ*fq0yzQu:Gc4fŎM{8=S#q՗+oFɫG!_ԠQ<)5|gx AC'bVS[ѽy /&tι0lll~]`PH%SHkmؾg<𡾹T0%8a*ѠZ<'qv^!t Ib-N4QhGcM cذuTsJڳ/ ioMM,.Nǡ_ $xH/ZBf~ȕl^?;wu3ڛֹg?l]wl܉qr:9oCYƆʩAd^>ԌI\E(CiM'ս/O6TIꇣn^CHPhrUPws4{&<#gz[_}.x{H8mn|GKZs zk]7qg4c{SoOL"!M@bX A2/zRD?nayyóF,C2FitM24sloAпEp{Py3 x_ E[׌&k=tt==4h ۍyo\+N<8˦C8|yq9/b9E?3ȸ*\:@/S$\}K.@gk%qEKkքh3J:Q)jFڿ- 鱽Ǐlz/jKKik;x4M!"j.;3;Z`š,A#xiEiqJ58ʐ "+m4j\:rCXHI]D] ؽS3 |z=.5\v ]_uBe4~.aqCZ[worq"nP̅ۧ D*sK;7Op|lwɖhJ$ݨ(-ybdl gL ]#DEpנ{<|?*˜X>t$'168wok|Si)5%&a}FD(iކ˧xYp8lpUDy(&pL D|1 xDezfANlov;Nmtn'bznI*ޅ%#IJ \n4bJ/`܈]j{:^ɠ^ vWft0=3-.E;vL< @UrZ&3~eDhAm**s9ܳeJh,F{r7ɝm{;W-L.LTu,'hL`@cXR^?7܉ըLJv vtVn6h\B.SHć_: c1!YYK¶FG501`dri`e4X^t8l{cˏ)R _ެMIĒ۷6d eҺ&T#lo@޻p&nmLm`Mj 6R- SkDB6իK\yj"cj^<^Tr !0v#f5ʜ2"UY,f5D; lZ hP'K`ԯNBpI?&[[Нfnd`"m*ʣ,Tu bE-H~ Z;V[102 n<.@a6%E)2S!M򋂥L<)d*d)9.(Ö"?8IΉMb8z7Yfl.w:+xr~H$(>$sIְ֨Hs)$)# *Hkm[ĝ;zwH0Eҗ6 ?IZaNV(NZ'o]c`~ȃӈUsCBo[+*)+N#=?啂ajxC#$&PmO@sL .wۃQV%Gg:MB,cob8B}S rTDm,{'qg b:Joc2pY(oa`tOu!!VR}'qt"01:ҋ.!̈́>1s $L88ա[46ω-pT` ߵxFp7@Sg;3x?ilh=+lt޾jA=g.:?~c81ȡ gڶnĩ(Ξ膗ګpBT)P4ԆSCネ'l0AEsA|o6P\.Sj\UXp|u;zΊJ GDPs,+,)4E!UTMxb?UBmR#'Ϡre7JkC{ Ve gd?Y޺rV Mt$wʝkdiʳ(q7I6lDZ=gV cXjOwapv'/ HahTYeb ]B/Dhmdd:,n>Vȣ3 W U磰( ͤ8&gИQiRCKr͔Kʋ&XeQ#`"&%? 0R97T%YXovsCZIelTyI_'mL="9NNat Ѳ{6]uVqi:: &^D}+ip[7J~;a=Ox}gpW/ nSkxٛI fhڐ(Z1 *$Rij.3rZَ om ]“@nE[Ȏo x7X³#Z|M0RWx y|p'#Pz܉%9<GKfݛRbpE~p2-d|j:(|.Z8ziK s|-'#ʵnW w &N#B~[[^^[؝(7%rߜF8 T@/ D[>*{Y݁g(I=VOW(맟ǯlzu%N=8pRj z'(zw b㏣gc,Nlӆ~nU T0uWq/gc|Sӫ{K0i+/ ub%+ bvgHW!(P EBAڇn1S m(LT2XΦVw7o (P@{|*Pq AZFTd)P@ (ARCw x*P@ T@ (PA! (P@ 7(S (P@|*P@ (xߠO (P@@ (P}B>(P@ oPȧ (P@ T@ (PA! (P@ 7(S (P@UP@m |/y4ԔUa(P@VVVo|:`i|K_BIIB>ܞ[}ݰhD~@Ra.Ź|i/((Pp{!!Ɉ>P_Qj,> K(䓐a9v Z0Æoxm'ǻN$p=ޫ͢=%+I{WG,oyfsbb_WLDai噼 zu6YW#b#c@.[0akF{`@7#=LoϾ>?@ M#cL?G9F"O>!w^:I X`_G Wz{{106;8G냅W [+}z 7A>řqYj:Jsȹ0^˘|wWqfЇ8k!rd|x]Ǐ;35?~1No88P>Ry_ϟle $?Ɵ|-l9\^ɒ,j-Kϐ!v솞L:$),C-gbkeI$SYx2;4wwwҿL-9Lx{pI_*>3/)nQ3䗬ç-H$wbwEQw1QŐg勷.8za D&&(a|8g SH O#oȨ 3 XCT4Aa< J DxD,"JFx7M*z}~zksK BhT^ϥ+'w /Й¯w":эtݤ[#z!?±$ %5x^͆iOLgOM|&oH  gT02?zE+ e3wBUF|>J완'Y݃5>ՙė'4$a7Y8+Q ff q-3cvԠI td'P0R0ah2զ a?Z&ꂙFU >9#%. 5\6 Hn2@ Z#"LjQkE)L̢r4(62*TA2,WPYM%/K B1΍Fs[+/bt%M0:7 M,KiɉqETW ar …qKʠK-c`g(s<{.!fr#ũS]Q07cBw/f)UAJ`oSccjQ]jų8iќ~ie*K /!q0ØKgPzRl\@9^xzRYPBEo<\'GmŚ.=Kd ,#2IO%N32.,M拣ĔE!tֵ]E(/{QB<B \ }O\[DLrpʅ]U]A|h/\:%%H`jzwvV?DAKkef3AJEh50m} -%\1nF{ƅ!vT;8TVS}1sMPUB°O-Ve?'S];ޮPG/c1TVPzp`1CUt>S8=JmԂ^\ht1CE Q,R%FjR]w˃P;:NۅI/'QF3; ʩ.NP3kpK{-աD _] IOYҹSE0I܁wLeA>Eѷe/*QEICrHC/:3E ]\](c>2+Q[WuhOeu(v@3s+Tf$&.ƹK}X>F: We6,If:>zoA53} ]*˜ƅ08E˘ZtwSsi|@ ԤŠBLn5>"0%mYy 5Xʡljyc`w=Eޑ$j:u4$',b(J!;‰4,eN[A I !QrOCN*<<کoo(m_xM؎;`6N B9O>e. %i4*?}#3mDVH2a̭{(zfMy0(EEKC;Dj ?6DZ5g韰J"e8 Jֶ6ttnDgcٕµކ tby<;:]{{?xBd jLv㕣ShB|Q~+Jcx0x/BUގ=DT{~,.O9@ ə^ & pv`,z :l _qxF-U8ʫX7pd(]{v_!_:b1syfw'/؀j=znο$㑓0tݛ1{3p ؽw'"=ph0ǑgYC#ڂ) \XNryq)}FsXuMMvlvݍ:Z]G2Ʋg^N:t`?qA"U8'a?a /,z_܌xh `$N ``vw~F\Y>ds{84m-X:}'u"_9RrӡѹEQ-ػ=^B߲A R|$ ثg{]5wIܱ9< J mw+8P3 )c vdGշIر<ԅ,y,Iee*,}qgŽ8>L!: ٗqx8P y?q?^9K=! XXT*5?|qW6jǨ80Q> /͡"4"K,M"IIc;ѱ~ZkR*,u7evϑL14P lef;qT`;ˢ}=DkHIS=ފ@׋8:DCK;6_mMexHR[sMKF*B6l7 NiY^)^`|+uUZ//jM%~afU,YJj|7>EG€ރZ;ڱ2΍س&<^j4`lb ,h^$:jEYCZ::Qfaq!^/~N8Nl}7Ax3Yζf Z ?^8yK$Q^Rbr<wbTo|Ŀ@J=X ȩ g ݏq:~ XB:0a wGTw=pfH fP Fg vl"`(, ~*`t CCsЪ4ʆę==/[.ᓯFz^~ JG20=_zOk9"bv:%c8%8(<` ajFI&$l;$Yxhr:\tRڨhPVW޹[KQG}4SxdO+{ wS3g4pV䄉4Q^A[" ҖϫOz<OtlJ-U]5>ш By#O[ѤOp|j 3] _! >ȑO(yBj-)~aD<ϲ*S6Z<8p:7шZ22~|jۑo =$xd/!%-X$ٙD!ҬdtD'E̢xL6DJDӟlV&#'!Oմ"| z|kmx .;" :N?4QvL)t"ŗABޟț1s X9h-ǟo~xG=yl w{x |n*CNež{pGRUiu&HO1QT3TMK%R@-UH^z"L%-D(nߋukd~'Wf'{pq1rU/6yk8:<ت|'?>x'3cwo )lzG0x.?tPgaK_>.kO<;W[R<+S9=,^㙧?wDWiGd@E%n!$]WfDqjkt"N$=sJȄ[ \5R0 .y#}OnR*;6gIn≷XFE[)oԔ.~GQ:><$4C,s,˷ >Pse%usϳovo}gOxs ;6>}(ƱpNѳ~=g;Lj3aِK"^Ye(>N2/kyA հpSzժ~;fV ᘼ3x&QAri|;N7;j.Un_ZkӰXJMG_>Pn8د7c^ķ8$2'}U9|)_BP,3fyK^|"AH|`.R?9!L I9;# 2ԗr_(X}$`1k;:+I m\.|4]!0yJmKM kS0!ԚLfjm_l"O5Ul:ü7R"0 95֡,g .+E$ 6 Ա:k)l V=EV1]haXZ"ZZ^`ifR\ctRyÿ0 n>|<<X PQzkQjcizH;SCܿ0y?!i2jsfr$PZՀ lz*sRQV@ػ 㕶Wɻ3Wg4P!+Y,ip*08 牨[PSt`!XP!_DDeSL0DNe!3!"F\[’oøo/,_g!=/ű'6߫ཬs`֣Lj#\ #H̰Ѡ8\m$) To41=Om-MāpY],eL.aez%WH Epע&kX:ԕR_Ҳn4YV+bȋ;["s'|DJaҩZYpnae^:["#x-lxh0u>"K \UEjUixV|0+`R\s܂_9UrsnrDTS淪#&MI~$LN#c_U8XG3ȣi .6 9 44S3Nǂ^AX If^7 j*P<^PV38PbQavb Vfgn)Gu/a"%ЪNP;C}Ùw[/$b&8b}lZCs_j\v]OS,׾R" hQi~AFY:fB{yreThVpΫwC< G}upk$f0Gz.DhliC><Q>\K`*Lu]r3TXF5vK``m IjLYtPaWSMTbKeDz_gQCwK*HT_SP ~)Pam{sxBX<7'PBdU n7g։|[){k}YT>ljmMGPWW COwm ~1+~?)ʆƪU( eeW^ʦK}0ȇ=G?kM&GfM@H\Fo4[aAX8G:/eXHr4 }4 ?[j:XhPҠb&" |h CUb| PT ̠ӈKldz.= Y|h <,Nn~">o8L Dt{ ܶх}(`ۮl=Wc[O R'cٌ(x?3"o${Mg8ٛwY*Z< L e299{DV{Lڝ ÚSdLfL,̮^K,pW=~C >|P^@5LD\~ҼtV5K+(jKkL(J{|Ƕx*3k{@6"õ) 洬MÍ̊eF(z'J/@ _%ϐ|(P@OejEm >9ΧM?(B<(P@G T@ (PA! (P@ 7(S (P@|*P@ (xߠO (P@@ (P}B>(P@ oPȧ (P@ T@ (PA! (P@ 7(S (P@|*P@ (xߠO (P@@ (P}B>(P@ oP (xrQ@G*K7 o@Lt:/}K())Qȧ? Vr.M!<'y/H-=L| rPiHQsPivmp`@A! 뉐HQ+AVX?J]P T*D?^_I+cX,׋Fa@C! Mx4W\Ã0QS;a0i'qhj3ymV)@ \D?5زe z}j$IW+++jy<2o 7#ʁ# ~M* I:Bǹpa?:~ϣF8|f V/J]33Mi .Ø#܀E3ڸS˰dBpt;x0ןֆ:'WuXt9,#BG7AMb# 7 DN`}G-^0VìM"3),0x=hwƖVx; ^BCG5VTP<gɔ(,xW XG^Ʋ:"CPˠ#㏠-dILL͢ :G|wL*`"uM*Pp=h,Y\JXo-Y= ņƠiT::,&&JaaakJPXMdp`6dUUn29lV8@X*4% D^ЛLȒhuy:wiҙ:f].ۚ-L!&&jg~. ]"sYAOvh*ֈ**IXs߷@{K. &I]佔W&SYȆ >d3[LXe"ė3S%y_?ٝoW XkɞdPUv0amwaCjw% NO:ػzXʤ!K_7˷=%L2x*Xq9H4p]"\.o.S^ʎ%0mdDŽ_ * LjR)8)0O#僢 ?~'H@dNaaN%Eg:-* `ӦMbC0څ^\`=ZP30iMl] (9LO^}(_DCiiG`\>.CNG$aZ@!b$#0&`, X Fa[`2[=[XDυXڇ(R1[ZZoY\\D4Y2=7ހhDEE'KȐȒ/FwzhHQI)hA& (^+#fu@U‘16ʒcW%f <:AJ)y=O>Lų,ޞ6Ә J~$$BeCe䲙4**jCQ|i|CTeN,V00! ^ ,}]#ȤU6S9 (Ep?rct-`vnnN2Ҿke\(o0,yʼn_zf@π"a,`thS>fB廄|Ft6^"LVGP1<I>T6Pv B .4hI$`#rJdHŧGWQuD(|>ў 8u 8'r1ă~hLa)7 9`DL`. ,4z.JTp;r:DzGFFPlƇZZZ~ 䋻0o 2?ԖP"gEI3]PMMQ#^JTӽ* a|fZ5b)Ʀ /lT^!gψ3MMEb gΒ38k"Ui=T3DR1zd0D9\+©eDS^4XwQ|n)t8q[;EVERJUҙ4V|Q57PU_u h܀6_!֯ n]NB<(x>r'g,$4&[v灴>N-Q, o܌|^{Y6LXIޏLjqnx?5u8N=)D/ԑCK`g+Rc@'EKAďP12'* ES3HE߷D {.=ǀ?jrHBJTtG$1MOeXϼ X;KBO} V+.f䚅AG;锞e-.MsYaiP^ |ITV0Xl=1B8Hq Pj _x "i_3&4p 'z#V!J`]?1(oIeEeh/݈G)q}%%n8\%(!%YQY)_II(۲286V X1qg&VnDf/|*PD2_;AS47v1 ב "]:A+OTiz{uIc>"w/3yY Q(@j_wBb 8Sz xKȷo^YۏAOڭtlC# أs8%2ڨҒ2 gN7 l0 y饗qL(|yjB9p@πnTWWC7@A\A*Z`'NhП?:A@#1"lj9|6lX}4ϐi5j 5XCb{Y՞>)- 0;:HtV"g+dNRNS. 1'yVNIQ)D2/ s1Eo~|/b$1g8ܣGr<<gYO]CTD (LoGaoDKLDrz: #J+&"IM.ha1aeEM&HM%gP['B[۱ 8Ez#Y?Nň&HehAHR;u RpYgRCbbuI%R!_6 9v!^4x>Ed"MA\|ږF 0QQ?c#^2p;W34J20[hQ0[ H/' nJ+s6Gfg&>uw-$hI,hi4vW=Dnե<d'zV]>-]N2DR<+$|yMV"h 5WBf?߼-Ő?C!iyS6gO)@ YkN#-s^ZQ&d&-$<O;A1&#v |mmle{SrD:S8v.lW8!(.45?O$ȰA˫G9j޺ʚCa/Rޕ Zl -",ٮ} Min"BDV's3c߼ARQmM"?S`:Z"jqSگ/GkLzhf1j_^X>cq_$foƳDJ5E'",AC2ӧ'{ƆRI_2"  %.1K콈@k^k*DuypsYj+)P~g?*W-)S.? rv+صvYnKcq]UP|=8v#fX23y;qߞ$xIf>D|}6r/?B({6kвe.NTrvURi\ZWPO7pJ-%J"J?r8|(+/i3Obdz[Z' xө(V`6W)#:(W/_v!_ f[8< B1*&̧rϧB>(ӰZ8w|f᪬F8B@=&ؼ TgwߵF#x_\} ٟ8%ځ`Lјh^i/mߐ)0𒾼RnO"^U&ci$3 PF{}~EH("\'o5~iOv+0'^ͣ#SGчU?[!ۋgqdl_rVT\Žv--'R< 5pXil^ w%Ync鰶 V2)6dNqz\ۃ&''{G T=|2r6 V<y= mhiA:U*+(5hk^|dfvΟǧ>s)RYip"5WPD*Yg` gX,"3gyɏD ~;y4Wڝ*AClyy~GCmS@U O99=DRO>ï۱8ٞsxv^ &8.AoCڗL {zn_ bȜtOl hgIQx4(Ϙ5N#<2'|j6U\v#TfL f0-s5{q]yf~?ml;,~O C'W%Buyaȃ%HHp8I %XQpI0jjj[| m;ȁ ;V" )WrTmD!۶ 7<:Ij^*|l=DUh\DyiRZЍ@$BR*HCçW$ogRo}xMˤ#B?ٌ_5ȟ?W_{urjj&ڹ]/1hOa_Ǝ6qQ7ĀIș3gCM#lf&'%;'۴ً F^$_}*"Ƨ)r'dN3cf,c´MT*~8y,=5 z m]-TPژdMwDcH}KM)FA=+`m-ͤ՘ Չ'@u! O@ʂx3,Eg<'nQuV!*/ \$9,86-L,xBh L6-f2Inqbpi ~B >9 Ma n^DgG$PӶ%G4h?2^:j0_Ky0A4MP 'Ѥo:*1YKq"ݎ?_k"Đ _$81$<*DH Fw`RUdnzigҊkxVI +&;|+&6l$Q[[+xxW!Uc{;^{-s>TN<{؆%^zCw-L| _l0n.f#$N@W`o]K; LVx@,lCRgÔTglLY@5~H_ +'利:sЙF d>x,~mW+ğOSTb*x7$aOOC |Nƥϴw]C 4 ;+r C6&+*8P=>eפ1KL:Է`-}Vw `!%Rɥ%$~X O~ {Dܷ{p1^]_@yU/xrCC'3i#ڰj&|SჅ nF>aBGvzN<|7P.~)pazۭj7~ޏZ݄aVR ^ZДMu9"A܉89LƷ[B?eO!e#\!=H~1)2V12z_N22ym i})~/~ V2V2FoBQP[nAJt`q ki ܩ OR^  2  UU<7MImpFռpxvΈTFp GY²_/FeBD-O{mcΓ>:/CD߀/=<~ &h%|g/Ds7.LI3dHobUg2 -ciSOW?6JG-PgDH9/˛ , _7 Ձ'+C /N_ky?Y1iLe__ؓx2D#C)f>zlYFM^ZI `.O4s<|<&̅g,hpg@%;nDPQlG Rfb A[<%?1 ݀QZJ`x12 'Ĭj,}B Uc2&-=<.N,EIm# (PI[L. \$zzݷm"LDJI'CܖBYFoB"źu-M3 `%~LO m[X-fexF`‡Y1 ?I2eAZw_Lخa~ɵde({\aˏbbvZ?2YUx<{,ODBغUac9R|ys}D0r\ ҃ȀL>YHQO]S &|h})"eC9D===7g;AdHKSQ(=|5H4FKnW&gF%zqg\rܜny!Ƀ0 !1EF&zM$$SI}C93Q2qXBϋx-cxE+}lQ2TIDAT>+\-19bw4nln6%288ϱTP(@6^F^.S\2yfYqVAq\1d?~Yc/Yn+ 8t2|مWGfqw*n/x>v~g n+ƆzpEČ$wxC0ǟ =^)PzqggLt^ !RJLРIZEA5VY LX9 cU?Mz8)L>xxqK ,wXʑ譥g-8n9{`3|{r] Qv+1d7\2DdhS qB⫀PS +{پ8k}Gn#q%~*9a역Tq^+}7jlw|p13Mk!.{,AF# $n?|QůؕWIXM*ؾ.zyxGZ?2 =ʞۋ|͋n"=Ë832O߁P(ID#NE#1FTW)fSN0|rb7k).,0y$ttg ن[{M>0x&W9n$*?.<<.#GxfH/֪+0>d2 #,ɐ;/'Yuu? -w*W>,'w'8 jjA\Kaۂ5KvzmNͪm1?BK; &}܌|jP0" b&TXm}R'3,p:9+㰑M@Z3VH3ew>N#\]{FyAJyZ`ϸU^/kqٞkI'%]Q!˃g:io}F:QJv%Tu<[raQBւ_o:/o'|tl c,\f&<8_Rc5NRE ƇirDsixHN&Բ>HHfga[`$ gOt4a|V~PeeKCn𖜋/^5mo-8}Ri'&|dSy񝄒[.;zgV6hKT 6Qb?8Jg* ,6.*f󘟝z5Ν>IL O#`xr^ MDJaOEuu,H:3Q&JfFGӅjV2IR;A,Os30FWxGQobٽ-zq\162əy Ӏxp ˄VWGngp*SmI>ňF`f1 r2)^Za'QDbIUJS.-=︺pt:*X^$dIQ1A<6I0<\3|tFG\/]HD\"vdz"2GIZ|W.y^`jkR)>xÇ72pȏگL8|OOHw7ǂUn?>۩16BM Q${<•9VZ/×橼%\rr+ C)`|mJZ*d}g⳶ UUBeS>hooEACm ,f >D7γ#Q^#4 v*śz3,Tn 7RESY%Bfkչ[̝hxA|Vc!aaBNUUUSWӔ\apY|^!ŞO>ɛR4P\ڂ+侟\YH/&l!r4z.GHO>>䞜]Fu:~+8ln 2=I okv`,7' h59$2h$ @G{GKk}ݰ!A$6J#$l aaE y \6-F:[W'B`&v zRj%fDƳjSIXhjtY>˗.#OJg zJB B&164Ue탁~tttbvf3㨨GkcTUBH$T5_43BYtyf/ybg`qQS'rbftmȘ',BڬhXIp[C-'_PRX~<<8S&;]l`?Y=z/Q(**K |V0?N]?zd\݊ ۄ]>A_Wb,<+H,E$FP܌% *j!TdF{w$!!uKGU$מP[066r&HHsj<#@O7? FE`iFrnaFM *X;\M„=z <Oڎ9qUٞϗQoD$U{.^`"PY[AGMغQ*gy6;g?W-fUJv/)qPLù 9NIȂ z  ;E }hdn>I(": Lpe ™߼ǒx8*kI'%7CF< oh~2`;OTАtG( Jcg(!r&be]'?7%~(XAp$FB>$p,%^!CL +w}`[s60bS+M4ımG ${>IA"ހ͗H65 r#IhjiuՂc{LgS.-YR),;h3|&lYNDݙ ^!OQ䇕5)^~+p]r%qˉTZCNVo@:Ғfxh^lbxyۚD,p4Z58z.c+KיVW91i$Hr0^; />t}cm )=\҉-[}L>!&a/qϗ|)ŒA|g [ZmJKZ^69|~ f?PoAcWVX!2~Zs'ܒdM~'m|2.ʗsׯ̹/ H)324icld)۽>}HWŸ3Iq\/zfvڢ=⹕׶%Q|ziď6=/beɸVz~9Fq{_~f^M t,~(ř.v@<;?|9|<r H6~,Zp*FNJ6gXkW)F~bFq2&Z~ݯ(Sg8;1jc|[yO%sge&%:9-vAFOKyb#7†fД I 'xٜ]oi*='{ż.2B kXdYΫFARbHrŽ as]{Lw0cWl`;anB<ٜ%2 yWDy4W-$F^XIB~"Gn"SjAX簳pa&yǏO=ů+8*µ׍-4~-iƓe2ѓgd%"Ff>$?P}*m.ep=p~9TJ+H6Ϫ^yOQŅO&<R<M C ĝ%p'>t_ȳ#2n%w9weɓOF%KKkcAʒͰfW%{ʂ{Q9<2uOggdyg&y)J$b~If0aU-dS䗟~Nc]t94dFٍ!Rg5k^je7+1B9O^,M,M o!bp< Ko ҊtJW~_7}دpaH iɞ?|m׊ɜO٭>/-dUUYJȣ4#YDюuu̘12XSW׉SFU[1 n=&\~OUC\F&]8"/.iH0`*.dT$KDR()LHa{nkuEzaOnsVO_OvȖ݃Tgғ&p _}Uf?NG⏞v{v F¦b3]³)=Ya 1h}(̂GFqCoo8-ɇ_PC[Wohp|:R-JV6a"$D{[+ڳ[t>KDԙ64Z`7H1[Bhr#ҵl4:* `11l'(HRK~fI- 뤊ʛP#bHRKEWS˹* )SO^'v"I1ǡ!H܌`~"oweDXuhuf4H⋃f02ՏҪv4ז Z2OrNw3:w?&Ӭ(똙 wxwdL !]Gw7tdZO%9 :;brrZ-J$/IS9}:A89ܾ>ޏ">@:R%%q7E Sr0:WDjO@B#ˈq0=|XBꆈ/AocOb%~'ZJ³ ;hsddDayC.bsFɭ[o˟$Kep<\ 6Wdg˥t@OmOK7![D_,ؒ23bb>'2&B7ue#;j;~=FȃYVh&@#%VעuYqz3T@P,%vsYQ/"3ܟ?}) ?9rQQ}W2ZI6o_)-k¥bCW4DE|:w,>P '$ܝ0I+D޹ƍP8C='fmDΓ޽waD4ǯTןAg.I0s~It4 @r Q(L ryؘ?kkx Y lBT\3Vv?l``/K[ #@sK+ ~H UՄ0+xYG,xyϫ?b=wlǺuɾ7)q4'Xj ؒ oC'QQ 7f_iY$HnzƖF6po ŕ `n(PuѬ-C<%7 JS'#b̠`5/Z=f!IOsw2Q2JG KB.=j|1D^?e~_{bOߐ| &%b,%wWZpurxrȵOK332VIT'NL@^ΡU-21#VLWnMTx!N/ސDB,/.9?y$i1*EdKfdr`4 -d yO)$ a!Cv"hu9{y0KHEwe4 !wKDZYӶ>:_XD,~ ew0^7ChT9=q:| Tfl@WR4~0|0N8NH@;u,'pY@M[HÊ.I}[Eo0$ApMg1U+a|v /J CY,o!>}xո0݂hE ڪUHA"CT7&f!0cDf] ͮF.WAM5U!T0?/m R;TUY,RG:>Nx{Rt/!n-x֌ѿPz=Y˨sCmI3bY#9X,/w(VgU^ յFkB"c D>7sq|qZ^V3wUmn9Cݲ}|:&~ ODl K)L:"|؉'H>.3nbp6X:IWUXhוdA!Oӑn#r=#ne\S6SRڰH}}HuB#GTTעը&VCmAhiiA *X&ՠdbkXAO=2Abk)ҲR$;OFTW [RRuP[]Abv7*+JEXnǏ颰+P]׀k|,%Z].rދ!v7r/Z$y!#\ **"|sdSmE9Ji`6 ʐl7R1gt9$bσ S[hpQzgt(#![)$Kj`iPnTC5rdUZdhPQNhj/`Ifҷf}'UJ!}OElʞkX[y:OjȩcfIu4=mD0 A.4=}<桸rfwnE_).\Cv!ٿ8|όWFE6 U>HpzXʲZ3<+%c'q|朊f3!#"*=ϏY.lMG`9W֮ke f"kÑ>mp ݋U/ _O6?SWsYG.9|Ln岾8L}q>9~..+@{w(T.|D-Uppv)}xve XrK{,x޷ɔvjd^KB<9FܘYIZ8I+L 94}jYgVʃ]8?ez/hUt",7F.y~)Iy `{3^#+0"sa!(|׽~- R'NLJ`0%KH~TSr\WU*R_479[75q%`<=!#_ y:ek2LB j}'p6 ]{0KҘ>5s0ʼe3abt fXA(TR>:f}H|hU55Җ JJܦN@bw]-FmE0!GCCjCEe끮O!N!֔/ht?R@V<#PT8(< Lk fX 4z,)UTr& fa!x\aPf2*6B`혙 꺰<(H j>J&vPzѾ&w~;e *:ЅZ:F]^Hѹr'--t,kVFJ=SSN16 .n#(5aNqo|=|-tjDJ29H)-ủ{0kg.(5Dd;::^I w)~| }S>]_)<}pچ#͉G 8vEuCMS?r[0t01#3 rF$V4ua393'`3XqHC& aajbI tل\`,*x~̌ !U04_uj0jQRv D֭E ܴ1n$c pRYQ,ee,=^H୪b@: Bk`IQL=:֮A,U\&R($hɊn'L(hL7<yؽm3ۛ`c*D|l z;._(;n`z>O: >1lv|̌h, (,N/R@FV+#&}ŢQ.TU|zDIP<,zAm2ZnVXR%\"CH̠Jc7"/N1 \.l$kFqh+_&N?}ֿ7 h FRltzM7kiw"&O%$!vg\4Ucmoc)k6;b^uwӦbY;})MkRw.WRt(Lmh (LJs{99x 暳ೲ.yobhsZKUkdϸ_MGtO)uyCy Pžǟ@`Q.cg\DR]JRkGcsNgI7p I gPd:w4a1LWMp\r }Xoَ2"é,:ۺ04؇ֶN>N /鯭oC6'FVZB2 1,q;rcdt\14H˜V^¦ 11 rGCZ2"J[bF>TZ;owօ+>8F&`4|'W4 lVwF6EQپ$bR~f#&7uuƀ+ Z.p;ȘfqݞhUO5'|8oY_x}0ahJڇӅ8v5T >9] 0( >/e';$;(`mntjq 6Qk9%jdc#V{K >5bi0IiN<oEzl gˉ\rW6huw)N 6㘜%B:86*bzjM="2B]c"jdtd&uPT?6b' ͎K@ [擛O "#ymO" 83<%g.xLEB;lX~ ;|JWj>< VFA >(8N\ Ձuk{%5+υk>I6/˲x%_4җq I >Y {̓Rg}.%< Ԓ[nᚿ#ʦsϕϴ$ֿ K 2ӂS}ئXI5ҺxS?4+FKP? ַ-}%o]|2>)8]?zx &&&B%:.߀l")Σ ZW!lٲA˧mڐah701B6Q'Uə V=j;2 ҺFUc,"]6zuM'qZ5MdQttE[ H#FuR]./čDmA ±p\[B2X27>ۖW"y% <0bu>'|tMsXjTs6]e`эѤ 89Ei_W]Iҟ@KY["0.72=脑`BJS,('27EYwdd;w\mte=ɩ {2'D Wy:wi|R UK[/wRsW.G#C>wpMZ8c@S}ZQ9&m~5?&Z7/ ?N9J|kd9W[^oiY9N:W"=w9wk}-~6YC7$p0vb(pQx~rimU0'|>?kƣ`ڏ;7A9*.*U*xn "!H+@IP8pbmMuL_]S",^QkcGc  cNXDerҗ QLshoF8ggK5^ eG0C?(o^O2>oS'5X݂ٹ y=j8|-MS(@Ls͚59_+a_.:@jw"Nતvs?Cr6I.3ڶN@wIUٔ &`>MPq;Pp[iwnV@ѴMj0,>)(SJp}"5fe V+ 4t&3 oy珙(hq Gׅya7ˈAd f+\F8xVGFd:`0&lmyE;e5Leõ+̉܁B ð6W ȳ 2KJJ>40_JSqUrq<š A(<^8|P]T&])s]H2xrn]\KJ82O "ڱKbQX(p'pL-݈ǣ|M"PG$8yH0EE8pSy0U]Q]]2{;ߧ)jM/XFi$ "g㰈 糒wi-(F$m#H-p4& T>a:᠔Ut<'>rZ'<\.' ȲaXn I`y$$Y}qjX *O,lŒ3eC\EO=W.(!-" q\ pπf \vJbAA 4B bF99uZ[[U4pRv7_Hg8_D8D C"}XU$<<=4ou2W`99>H)L%UN+e᜙ګNaK'È&$R5 pJ_BT\+w(plG32ϥI4"+x 2'9qM&PP~cyG^R&qIx>bUgu98?gk_&oF/drMgUOC2FMM𭯯Ukg L=:鈛/J;٦Z%/b4[q(oWh83V%?.̈ #WN8zV' g0\J; 2{N ~T .Of%#G6?+OgBCL??& |Qtm@|$FgлGQnRUk׭Ғ*ɓhL. /<(')Byf!&,LM^ƲĕKւ3ch1jՌ8w$U XTЀj?@4 S#3jmoC>~%T pu` rl;3 󈷠[nEܻO{^ィrٱsHf¬HQeæ=03 y\)km|a2 F  xd!U>&qs+for\:*??Md C_.m/@LK[.PrkcLV 3OhqhCSSM^4o59^[xL07 f!<~믪A6ɡ4iK&{[oï b$2]Suˆ'0ĚFr7--HORe8ѭ.M`(8nf<}k);Ctiwʛ-j7i)$wd3뙙>F5hrK7 ytvhGPC2PEJ>r;;Jl"-u Y`D]X^{ePlRA@Zp!FX) QCm2HI/UzFru1|"A00'c8 ܍D`~ noB>B-EfSGp͵PgA@`>%QfuC]5a=ʀHoô83&'ԔxXD0/) $A`: ^KM.6; ҹ$ %7-'$Y[fQT{&/SxI3tePIA -+ JąOٯ^K|O?>NC#cG߁g~L *GS S!9tP?κVT8s /pN0W>}=8̣(TŐPDhC)F6@?NN}Rx0t=ʤd`"+L{6rj ia%d$cq~HV3sAtuXՎiX  ǞYGFXMza+/oؘiI$e>CZdd[M<;<Uu(3//~?hZEe(Rhוj*V\\ e[skj9OMsTIbyQȵ-?3w uuˇ+8ylGe'ly1Q>ȅ“- WW=8 Q~{.*T~I7۶ z;6K+J&u@(++2r Ã;cEVQOL?}Gŵ78 .]gz^V|2< 12J~K.rH $lp=U AmCVL=rB-/k|[6'<-iȠnzfY0"Hˍ:o Km%T0~Ί001/ D9HmZ7mS#5'),y;AE#;Ԯ1,xZ{ZʁFY||ᩂc3QSWpTj nI7,8^xU2Q ; SvxT\V#Lrxd$LeԺzHL0Jܝyz ʤPlTMPiUmں?X%] i2YSפvҿJ)_.o|+& TDEƧls`@+1jkESnal!j=zungzmFKDB "hi@,8͋t4"#h/$=:s]_#NX hQE\2It )ٹ(6*OG?WZݖ: %0-#z(‘4VΫN\ txXj2hͅ nM[Fd\d0,{P0!_* /!LMMIoR/(`<^)ץ&L'i9$477w|^.tS}L>z+QA谀I ^ wIǙ}pz|"8.$JÀ]tT.D2P2U ;'$#gNШQs+Q, Ͽa,ċhĺ_JlwÙӧC8;{Fc BU8[aN Vw5tR3~K$ ϥ~>I+MG[fml^WNy0q)Zph@xۅ9b_=?otb) 1,=_@|}i/Gz-xZ܄6"uh{:.yܧ9چUר;&֖f{^_k*yXJIN j555hDC]ZښP%򱵽];w*N 8Nxjڠ VƗyOGr}Ͽc`exޓx\K޻ ǥ9ܳp|ަztѬ IxRF@M`uaS50. qGSSQ=0:zqT#,{ I" z2NTtHSs809 ]B2ܨ+"o<0 1A \AO{*k];M/KY y~yѩA5z'Ptz9~`;#1Kk9NM>5r IVH44z#Ns] \R? jX._!Kf;Z< дq*1IXe.AkYGM]0cgB$ 8>UK̨T z=>M۪sGIi9.hKC(A.@Wc! qYLzj9mf ;OaAA9jr7,WJܻ'M2hߓzFGFDpx^Ֆ''dPCi>up`51:9ŤkZDmrmo~L:KReT>7[t&>LvXt209`饾Ƨ$n| !F''Fe1-].'r%g9%iW6T_d|-YjC3(Y_3̘Ru@Gh6& 2OAq׎!B 2,!TQИwq:9~ cQg7QaNnjr1JAhVBf#- ̎橂M#woa|zD[E"(!&'rҤrx^2-U!On&".PV†6KŮ]@%ʏtl\ִ G2I#1<Π}ޅa50bt 0//' @ H2 | 1~רo}1Xnv2xx(ɀ˖̡▁M#2wVp%,zbjJBG2EC}]+`֭lMKi \Ky> wWޱ",WxFӀSjiW c"fDIR 4tm7H[h@Z=,-kRڑìKI<3" qڍ Fgֽa|]:!2#q^N&GO޶ũq3˒Ǎ)̌A8Úu-:{7n;w|*SKW|:| !#JT°:HtZ2$Aqlf= ];QpM\C>30GcZp"7&@nj}3khoǁ~Q{J!H[p$6gBdg( p۝\JpiVq ;`.:2muI8+IX-"9O5[~߅19{նuRfIx7%=I޹\Ɗ\ ST>gBsa{0D3ć>\>)'oWK0>WoC,B2_aڭ9؛:1_| M"2h54̦:*5 oPR&Do{/|hhz|&ҵU^5u 0Tprr5 Aq{13Y&(K$1EPb`! )[97;TLO jQajjB2Sп\e!6It)I|:aȔyorp$ |ylJvG^B(vAͲ tҮ29b)O:]A) CR,_8xbH\ZuJL2/}cMJƵL zwrە0'#F!Ot& ˋR.,j Fh$DU=RԪaxybSN@r.a_\ɓպIj߳WmKi$39X$.lf# 6": ' WkZpټ 6WDe܁h 5$ HJԈx4-埆Wx}*PD&jr)Iz+I$b ,aOl2 p;n2țj(J|D - ?B*"yrx`U iKpD9(O^Ha.).9@ˀGk՚ *K$䤔;?I#9VIPYܜy m@C\|.`_F+ Q?OfB0I&P?}l8prpPSZ0WyP}Ql\="fkDk7?I$ZjS| tW_}U˽]IT7woi6QLҨ/6xbϣx`5O ]{0%hEָ>0C=> xը5qUik1 ux,1|[nP=!s@nTSKhcH ChnEc"xayf\mI#ny$5, (2'̒axʤ:zOv}qR>}Ѽj$~Nv /n@^\€j{ 瞁a N঻Aw[Oȡ1cߙ\}V :5;vr(k <0="@bš ֮@K}"Idr)`)dRȤj554D)lZyz4:|(e |n%DGw(T.>/~ zt/]_}˥A#S60_,{%bؗ >|wZ=gB6=^49XRR95 P9%l![$ HnעEٕISehM/`8YG3,6 G"ShT`͎ jKcjP~| &itl;)b~GNc 2@ h@RA@طFkA '"+:&gr_"ox 'Vul"ltQ0kB<~? t`M {P8, -X]$O\~ '؋7urEd2]=X׳5jYMCEU֡-::EuM-oD܈Nݰ oy뛰fub jTM̯%y-L C}D{#D.ñ'pb&Miznsŋɻ ;Yl܄FA4rV,R +e&ˠ5LiNi/Q~[u .Z.>8XIC$U^6>bj#L'ѐ|DF zJBeH$~|G]Kg?R[4JGlRI=7quwS3]dyƹrNSel6j`A٢RXvf1)'Sp,'?)02/„B;H& pTRBq:k`hz#Oơ횟 W׈bʄS3G\3I(ߪ=4)&RNV~%lS#vHH[Eț'0\zi6 P|j(0L]LjN(d] 8&h4;>03^P홁 ɼɔǑ X{]60`X iXq!qʊsy8ۥ4"Lw֭jDA?pUk>9;W"vp x>jTCpv}}R EʜGI+S\Z2#aB F Ȩ,NYF_(SlORT./eo7_υI%0ʥsr)'sh\ +Ywu3j;6 C݇ޫaHGR/2)]ΪG揄hX@i.WE;::W)j2ZQAoAY  w[ᩮ`B[k'2+H*Q'8qGqm`bAGCJ;6*M 廬?N3]ttZ6E"\E0͢ąĥmhGeY \PERl-PXھ^dbA4AXnvEƣL =Mx4ɉIi3z;)E^2c5#di^lzm78]1T&n 쨜.%AF3=zw"0 ;Cй;oZE# kmGMs80/RH ƶ O5t"ꅫ$rcpupl8~ KY­wTYMTY^-B50VpP'jXq݌DQr 1Ѝ8Qr{7f= #=^Nig6c׮0cȱfl~۶k6s=x4vz#82Ў8\= kg=Z_qOMWDԂ^o/KN ;~0xկ*:?3«vJEwu(͗:N/~06|ϱ8YC3 P+z:3ǎ#+Bk~!*B' {UZ>f]ڑKx@v]pT֮Y܄$)0PFܬQ [="?&cTE_‘QwB'L'hoy ül6%EY"".Ez(feP˝xyxÊC6G zLr$0ڜE0pDGkQnZFJ dJԍ`FNF0#UBLPtrك BQI-&&+(,nX_\D='GpJL ]}"'7+qT0J_Y] )hnDc'$*$N#BAp-b̀|S/<Ώkێ#Gm]adgn؈$I3~^ǐ+Fϟv}j,սZCZ*[vQ8+BNia2YA79}.LeM9avD L\#II [ (=SS* S*sWm15!PG@?g%[s,o,wvq?ufֈ$I1y(ionᚓ8\#"gxH Z$/?bFϘpM9_׏wI p "bCJ-wla"C".]_4X޶[{J1TIa.S"ggbvmoW2$q5?oWI(OSɛojAC7㫆]fnKaCkcjh' A{{6#f2eR[Ss0AaZTP X( Ȩuw+`NAO{əA K`8!&`/I Dd<@&GJzv!L Ǜn@8YTeam zWVfĵqT;LLբ)5g3@lBl^kBj!Afb F| pYY`F$9adfif gB2Z@6٤$)pX4ɖV q[Kp (G (mp$/ۆw?j-ZVJK}Fe`r5|% Mΰs]3Br5;xqf@cYyOʥa{TO`80,}EW@A+k8+7}#xUhpCDnu$7KqÞlCuw֮YN72`1#N?8 gzr:tufToepBSk\^W6iF$ qV%n4 Y}KEل u5=a!oS#mϤK\W][_z*i1$:egP#BG667IzeT]%JZ+y'68Lv|R9a5 +͞TyJ\|'1Q^wq4D$pp2// n&); 0MERLNg9CgL}ktXA`0IasExE ڟn؍Lg!(Ȅq<mpmFId: j7ъ~^u-gm>VsϿ݁1lթCJʥx@q<ҿ'ad0$iǍlr3&&aoSMZcH)WQ|_㏸(@qcH;1RI?} 'pkQRyNDb 6Pu̧Mɥj>\G84auYk [Vȟ0 NYdř(Q:J1<]L^01b8h!+&/*5xK  KX Š٬$> )N!65E!6b.1+3^dЍ'Ck+jN}zھbx-W֖Ǚi·o\ҰcflZ;/o<( DV~ k Kyw4e4#"V-mNpمMz$ ]2Se%Aٴ b7K߫ABA?7֡&`ʨ_@h9VgR&_Kݟ.vo~lܰ^oz}u{%Qۺ:|^ʬ%_C@h>I? G?4y]]ڼK;ߝfXFⓟğ}l3/O+ /"xz&&tีo؁lN_HȀX`[)$v&ћ/4OEiKyJjUW"JhPB\S\|X -v`f{qѩ54KBiHZ|8|y Av| IG[B'aW&;ϣp8´¤;KQ9}N,:3D zWJ0!4v1GFz K:>(%$ \(d4t8Udø ^a07-DQ*[S;قŰ"Ht Zo2ѽ!'j6 tLVmp$H02j-wıu[mY07tw;\U ;|^/|2;tO2C8pN((1?7'IjA5]<P(֞EďgAuns"WkEcx95 vuum'Kirr#9M$r:`:8 %䝀4|ʩtUl(|:Ƞ p9F YAf;1@|3"a jtv E=rҴ!&nO,ެGOj8y@ PTޗbf8^m>;֫AI>COjH;ZJl[LN22_N/F[8 2xk>I'- 5_nܻ+9AFm2lZdk_>|&\9 ٦ pcПi$IX.'ajIpϗp򔄷aMKDyiqNA b*K~~*5ؑh~t*+V[+_^ɵˇ+z\p4vKgHɢ+5J0l9Jk jN28'a]7{-w6Nc. d i:&L;q }g091Ǐ avnBiȏ>ѱ ۏ?_mx35܎14$xztN kz$3n֘imN8S2@ AI;ηkX-@!WpxM ޸g{p-ǑNauC o.$$uҼS{!`1a"ԏ~>Bh  RD4nc~dzt85a$i@8WEx}K?Z:f\wnDdD0 \RhJ=v_TK`Kj;'g-΅ϙW.=@V% H5wEBKcFSJ'6j2 rWBYVI`j\s723 ⩌kf*ߥ@ڻ|WS [y/煻/ MHBW觉(~I^p v/8m65EcJ22\vT>{ۀ  яb (667=7tv\@+ S N[{ŵWDP Iـlܱ?Gt Cl6/Z.`f V]i9 x{ϖ\>'$nw %_'qVԒsK6ؑvBcyWJ X 6$\D[6u}K⭸^ꖾԯҿye4Y}JW 4dQ$_q3em܅a88&'ܿ jMqʏ'cO`UФI70"1 N?6ϿtM#|/bC͚L7 =t:fHK|^9AݥC{hⳠގjVz\h2cAՌo."f-V-%gf\x-f4I?ͥSUj@4Z5T8)*lPs/}9'QUk+\RCNrM3 ۱J9R}Ұ.1*3*L' dltp-f17"|szZ+[;#EFQĨEk ό -`M30 -Gwz8I}Di,2bb U!l޼ξMLL GMWp(UP7h@cx)xc(D =3M]M0s0a>`/aQ|bVxkBi N b6;Kh ǟ ü&onG=q+6#xf%:| "]=<Տ9]Q`jWυoht+&la qxuANͭ4:e qڞI݋}SW?#ݨo"R7~ T:}M|i<ĩSԚJQII=qOR >d^꽨XLBl:s(g` P薺1JXk$bQ)cIQ HDd`C]NoE*~F|޷aw3ؾ)՛pm A:EğIO2"N`*,)DM^>̖@Q*p,^S-yf `)_FnJ\Ijp3 IFJHr U%`$̲ LdfviRN3$N,/1%yUҨ34FA{؏*/盷Z.=Z:^ěs+ptڈ',P{ wX'[%Y ?YZ刼T)Wq+~ʆsuuRIbGŵ^{sȑ# h(v_ST| -~ .#Vrඟy 6 -'GF8Ӌ|&|v>F,lB1{* ;s [M(PqX #k5ct <z)"t?yo9j :Fql2(T?I'OڵkWC(;,RV;ws= DbJD,FFB( KglˆYl ʘňIL?^}+J=X`f.*0[E薙NOܜuuŹ x:֙ N07/qЇ7:DVnN2j R"])1c]ͦ/- L>;zW[F4 LgPP-BEe Gx졧&Ԡgtt\"/Aٹw[Ҟ_|zu,/ӧO+\×!߸)r_k# l7WBKĤDP@M|ֺ2AqC>magWOа:[@ڤ0pZEp)#ĠDB.EhiGl&G#֞jL8}YC76b3aj܃=mNHɨ^n-QN`ekΎMY#2߆ӨVg-˟ 4΢~u9Dgp]kE-8h3,Uh4"YM, 77/WbC/O$ic2i;PX!^1u^Oߏ:\\&?e?Nc""RSgJ^ d mQΟ_絸b4. -t"* RiF F nWUi[dCcK7֭i)T!3ӓNeMAM%ˣ#x,_GqU]S@%'.1R?*b^` 5 [ o i3@|=Q@"^\$ i>Oi> ]J(OkJijhK=7)'10S X+@rZaQrQttF]-'`1fE7ǑXY##8߂a+:8CZsf0?u :\ߞs0xGCtNaC B 00谀_,yyu 0zQÝ:u `AgaLѰ (ʦFӈ4zZ]P 55bN=A{%SzDlN$?+ |*<=5!H´JL'sQѨ;קlq} >>}K?N 8n vF"1*Sa?<)1GSXSPm͕Ɨ02+)gtBăx# w$p(ԃÉMQ7F^:Hm-~D#)L)`v:uQmn̒-۰zg֝5p]K]FnA/|)CZ[qxfj13 E&wHxN:F:V⒤\i* k஫ غŧ:>yjMyPµAeښ@P`z\d5`rJup&N @Za( IH\$KsIZ=UYx=:~ʟ]lfG,G8($ \Jc ]<fBKo^'bps98ݻZk}~ vMҶZI5M-dI))f9a"#Ob^-SsIC@j1A(_A%' I(2FKn|fl:K! myrq<-l/Mk|fekc=,VLN5ؚ%V-C|2?_)-;<|Ȉuӽ|ɲ9&<ҚrvFbP6s%b|xVW ]N} 2Lu"Qvxb3!X% k[6C÷^GJZA,0Gķ׌t>>3 I}P/KMm5B,̍Mġ)"es'l+ei?7 F* 1M؉\ p`n.u[;~&g O ]#>@5 QBPLVyt7a-}xSw_م_{!VY$*>0A%$>[7$~=0̒V$:Jʽau`׃ 5hi92-AEdR jD50*jAiOs+`^U~9XZEpMOn@ SK%WTJfbD J-N.UB4Mnʴ4NK>mB.vÓ^IKY*a3d0brr:xL9kE*p/U&|ņ6gj<}!zi[\ }d5ym)y ~fiB ˟b״]Kׅ3)]S]ˊ^az>meS,746̵5jʝDC\L-dag z\"Bs-2߲c{'qXžy|~֘0zZڌHc0 s} O)X.-ɃhCg=Rpmhj +0,~QN|foUUI=իa=.#iTuxS=p#d.H"0}3(t{`zsଆeBq}5d<7[=غZ1~]fD^TuW1 kYy -2х3(Ri񌠓 aܹ4n&|"^@z!n_: WʹiYgP`ܖA8S ^z3`r:~~ OcП{ Wo6ۀT"ވFX̂`^qe qPrJf"D6Q`3͹s"ƵXszQ(fa%4Ҁ iZ\KMhFߠyP2z7FGy4ih xQL|K2MpP3F#ʩ4Dz/y|WF\ςeb-Ž5Jb+OEsit"XP F2.Y1 הP΂3Y!kd7`Z#2JAV)!}Čv0 k\5rO-(B1$3%Gs x!I NחX ;v+IY +Sx8-_eKq5sNǤa4rrYgWr6 4dz8ZOyͨI@r`>2!-v،ӡW/ܠ\WWy7Io:`T69ҏXtpVh/1+vţ.?ɲ.Uƿb>.b6B@J.3$vt`WךO`hъg|8E͆LчՃ⡣M#; 3b_% 8"ߟugZؼ^̽`Ǫuӈ`ӥ17&L{c H:7t5fL@˶!vRt` ƄfsGm6Խ[?5@6|Ђz?G^/ǚ9'jZ1?BU ә07HdST#x٘G[o :GQ9G)YQuw#l@n Gi<`(ޚ֭<^0Nackv IX%=~#Tl2*>8 8-eIR2Se R1zs8,a^.؊ ]YZa43ٍ!!`C,?5xͨr4)7Zg2_ͽ>ިDZwsjpE2pոVlõ:pݎvܹy>|k~5]]+E@, p_Q<=0g^7g_s/N㸀f _SV,%U'$o7PN{j>2Tz(~/ÖN/ZKZ^ 0ο_Z]&g-&=$-4*s~`6~v]nxԜbGk:lZ0 L7e0 | L|Kf:p-^rk> a6X` [JJuO_JZXVXڥ?^0XXkJTg]os7 tL:Հsh3`(AcDNsZTw [s8Qq!]yo bq8EX<7HX/ k?(Xa^Vr 4N?/-n\0BMf yi'R5cy6=YfZuԢ$F)!{5HEϳHJ9 W@? +p*O$Q) 0!>9'@EP^OaY8Qx1j5c{{D?w1Խho@ !#-k@Ϡ>%Lt;΅BӛO=4}FښEۈZjYUg:Aqrb_>0kOO:6EO׀׉2$tc+JfkPRDH XMVupr37;p+=$hC4,ft"0Bh/*iNe nr/!܏.:IsssJr֋XUSN; =dP^KJNS~ k|OS(?]}w{﬿!q 9~R0_=J^zRU/Ϻx/1,ӥ-=wTW_+b`S2 $-1H N bpxB̅$BeN⣶%ߎcd1Ʃx,S ^jh(J'N&{91RkG#FF<[6!8GLd8z4n;fZ2wnF(}yF_ ~cs:<DFAgq4\ýםݿIVWʧ4-G=Zedࠆ,SҢR. cJR% ױGAzT:^tZ5`4Yݎm۷xmh9_ 3wa&"`;U*fTgez Ef4v~=h@8P?ڄ@BY<| WN!L F# LSφEf4B&xb2InkuϿp@̵Bdt#]" @Gsorx͓l`D E8S7uvpU=t`?{W 18mOD" PIZ䧱TJ_}\s^<]Q#EїC|MO ԥ f](^u*vPQL#@T\D( ]qlc˵pQ%$+D\~/T+s._7<n'^zT=.}l)鿕Zt9Ii镁+ߔoT.RN^n\p A$y ]K\eS[gZKqSDs A<']8eF`i8Cad c9%MIM/NU l1pn!˓bl#$81ЋGđ.`;qy`!rd 8v_dѼ%,"֞Dy抨v0NBwЀ 6ap~IxPAbĄiy8+9{ ܳ3RjTatg ܁F{!nmrtptIŹ%ED|IiEFoSKH.oZQS[ ෨؟L?@;ziCE}&dp@J\:,hQ=Cql^wwql|5.cV|wS:gtHKIR y4C@REsx] ɀw]\nqq t`jt G1|4ҁ`AyTx&"Z.qFɻmgDOZ[6ׯ/g{o߳_=4_ JKlDt\#(UMR7,6~8ݮIH_RVZX8ie7te< <݌4 R{{1TI+ʚJ*(/zlh` Њ.nōz΅d82-S~ yɸ_ia/]X~tRx(o_?Ǘ|~oߏ`B5W; .$/_Bgߗߕ+Ϋ@Rw:$hseIG |f-!VyENϠO]A6:09LvӖ"5f|" Bݰ-S4f0?A@F%Y>%@$-x\o%)J|s"icoT|/q{i}н=;`YE,|@ #6:q2q#k?09,s3|?k֣0BWU[4CխRM(>!iv pnX[j vA=C7%v6\Y \KLeCVxcKK5YEcc9(6H41(4$|ևN՛wkACxmQ&Hk.R $q$mJ ][#vE1*]!iZKK h^8%ة7Cw/NWN/M4s&L/dʂ?Wow'N>]]f%yֻG?sޏo}[o6\m n:5Y%}1K MV'C-}U[i_{&N}l͝:e_ M36Fk 9{?uCBSgpjjkm;7 ^1Z*XO1s:;[7\ .QUϵ=g ٰ]07tܿIފE.M])Yjrʞ9:PmУQ@b]rN1F<Fp2߈z/wJaN@(Jz7s?zF#ZY~ ,NafI c͘ȉ;V J#t܎tDS`CP~z47KϦXlrM30 nBza3Ke wA Oഀ`88zBi`Bu{'6\& ,-|8^Gxɼӟ),U Rv?Mzlɳ|{n_o q#}c894)jQ$O/C3U\Oz1J(!u>:x ,Eqf11-)'S\s1 q "+-t>_HAi;[}d)ߚ)$g <%8n^`@@hބ)dgN\7WIFax ![?lƿn@ۈ1Z<=_-pb(t[PG t#smj]kxMH=I-m]LxN\]IXV\ԺsG]ھRm}h@+-n1P)Fo%$Bdr ,#O>%?gq9d`BeBzz䱼rؽ￶CØ Sj $Iy pMG|3a6R7𽇎fY|䏾CLjAu?.qXI!UK`b05¿c~S?߹{>=\ǟ~?wF=sJwǫOy~?]|w_߾_cۓs1I#'ʅTC#gŽ-l}aGR@ Bꀁe@`qc%>%D/}cPTFᖒޯ/%[[z_?wrߩҲ\b񑖋ҏRmyG9` [v\gp׈̣5kmߕ\e+ڠ0F/<fscU:C5 wJzqY{j=} x;IA6k⅖9(S+J'A2oQ t_?d ]Hz\{65٬טP'$%q\^!Yo^ {`:dMmd0 qr|Kxwѿ|zL3ſ~ub<$yK@˅߼ӈ}q7ËCa|xcބxZ}WOp҄R3Al/K %9|SWv<{{c~ã{O"3 QXF+wsh%Ɋy~R:x#D\9]jDËn߃="C kd_tzb,cW<\d ,8s =وSwa&J) %hL(w(m)""J`jƯOѤEW8tj;I$ YhzPh[]$\Z;^8{؂eՃxK4V;}":$E0Ͳ8n\%,~k%1Z=/<:3GyO~yvbASR*wS:q)?>9J$.0 5";%uV{oGްދcc)eVIEfpl3#L?4#w⓿;ؼ v/7͛T>bj-ҚZ|={vk=лvލ=ۻP)t<+<'歸z*\o*|}+>̓2aITb}N O=GO qոf*zzѯތC7vo#ǖj}R״i4wފO~Nܺg#vl<]܈Vܵwcxɓuq%.f dTWwk jAX|~!wp"}㷩œhmnLccj2W fҧ>:zw$ec;/^"׫3Sağg߿ w_轕$4cx h04,Uj9hHH#vZIS>ӗStl,6]ֳ: \ׁǞ*>=cGȬ`-Eljo&=n>s y {3BhEa4Z*ɠf혟E6CUXX!ld7^2tG'L nt+&Ʈm O#AQ#j$&E4Fێ| 12ۂu ;$ Z*%I abSLz5qY"Q2a|lB>8zZ8yYO*565gwax$tv:.ElN` B$h?F=V&o K%nLY T0I|rssz$s\!F? G2/,Nc9:j*G𞺦VP#qH%*Z $+D,:]W64֛p$}9igI3Y*sUL_΋9|wŭn.qHv]w߈]kkWߋO[b?>4Ŵ3nwKZtj ~3{qsq˵]Vu9 -iW>-aw|lN ?pDI!Q#^};wH#T|ouuه=epQ>|&|;'q߳Ɵ.j&$dCo:w98%J,ej_U&z%_[o(8 L=/[y_Q)ApD'^Qurl ۾F*⯺R}x4w6\ŵ[y%\[*I Wy_.[N'i}h%)SLT+q*}||\ق2}5K#]~v7߼֮&YCYSS1ܨ=1ghmԡe}m(܌/V J~K)P=|Xq={h>} =Mry \QpۏKm~ րG13x!~ 6Ai.qB?DGz.00Іj3ɦ<7Ճjkysi;&7%`ha}$ gPӟ9a;$Í8mf89NV<Ǩ >%Ďk۔f H=:Ve7KjݬBRF>66 ޵u]%IsM}ynpN,H gV&%_Tʤd$iW;S2_kܒ8#*yf..$>7 *'~w+#ى* |JȊL 9 :<~:_zfmvP.^-Zjԗm!j_F̀/wTb2 4ۆ *mC۴R _L^-@ hqm[6PP]'Tr.~ss.z1ypnyb|vw(*ʲE)iagFYߕTngKBa*pv^9i䧚]|1qCIRkg.Stp,F tʯj|K'BWaLЙ `tƛwBXztoǽM'e@GnO}{7KpW6D4#qz̖ڀ;G~lǺiln7quGz *o!B[l}NҗсC]ʧU FNDNG-1;Đ rgЛc00i'[ѳ>!j_b+}vӍXV{G7\ ]z놳'Tl>$"ɜO̥ZЛN\b)CoIX%SFͥ+e-N!twZB(GH(È[nX]FCEmmٶfjes&9 "H;EF*:bʅ|3#%&Ve #ޏko6aǭ0o!'88=ԣ`Kw'Oo~ oASAxm |^ѸXvUWz9UxcwWUn$$6cƿ1Ɔ11&,S+99Wέ`#SsO{O"2yO"fVkaY҃DvMd᭒еHϜ|r0`hur p( g<,4qfzjiiw{' ĝw@eX"3O68ALvℵ5n،]'OXn-nٌ֖ێdtJ}v픪RXMiTz`S=ɮ%-^yIn|yp & >gyZ{( lHS#w99.v)N]mfz-$ q-E}CӘH㦫V"2Q as!#")~g93woǪvS8?#運k$Cgp8ZMAaD;q4Ԁqw+B2^N"N"KʚWk%7L| =JdVl+BB7EeE@ r.=3EP_[kpU.l[ x\QFQ@o DwąCn>uLMf\@Gv pzĤ7ϟfnU"i> |9h^~RW_;Z.4րn7Z8^I7lwcuItvu7^_J VL 4mF*rvuF}ԅ U~@mQi*/:BFSׯG%Xβ*pyiCg\CXL!IW W׆& R_S5,=Գ,*+uOބY (i#Xi12^g,PlW7f Qg$ bš^I}k/GWRRJ˥ڧyQxiYY(ZɤͪnhcRVw+>);5ZrB{NǶѓnK#y8i_J3L]el*԰a|wWZ0.=K nx/~26Vμf~٤vXbiNKs6m0d/:WFO|HmUVd3? JQt4c#N]4BI hG{Q:Jሑ)dγj#@g)45DiS öY}FBRڇ!%p {x5cxǏ'nWᅾx8|&-蟩Cc7?0k}( ,=Ei70ȹ<`{z|𝗺V9/˲` F/1hjb8ѥXCØϣ+?vHᜌé9YN)ǩDΜf[SA4o݁(i}Ҍf83F`o82-<Nz1u"IAays s][;_8]/ucǎ+POѺʕ7x_/Df\Dk,b xBLƯkgIoz[pm4R^ڿ]vrfW )$zF'p rT. K೔bZJIqI\K})Oeq3}yl,8Jg!^^SBOĦ\6]H%^sy477_y 6nXI(!1f#~q#߱?N0ynՙ&9Bo--Ҿ u8}v6P']i uQV?0 :_Cƴ[A `Saxzn*v8f/7ⷾpJ|m ϴFpwϢoG3W{~iG0CL-$Ќ} &ubΚ'3$fa{PE5ڔRǭuMybn~k&$Ĥbc4!.FvJ~!s/G~71=X%IBsS=Gw{YH9 {A`[Y)Efs6EOWCIv9kv޲Nkl:ڸayv=&&'q1csN&yesiBIʚ5~]:^$?zc 1 vXg AJT々/?|jn8hPʫ m+/ cb"͐]KET<vSj,WťR] xJt훆B qX>MDw4aׂ6r;u%]\t ,~6ɯ 藜̄nDeRlh26cpbf0Dl<i?{j 4b#8}(N?!eR+e FU tmlnL6LJƶ2y-Nq8\՞آ;,}OCj9Jf!L0m;;^[`;-?bk-;/KSW6i)ƥʔgIRbRy:}T¦4Ǣ6gڅ\Fk(GXEҍD7V[Lp%H vjf(`gk f$.^A5ۄxPK\+a BܑIS0>{[-ߊ7au97AgB3B>L91g O=H`i$>9g| AN[tm-a̕7Ogpb90#sx| Bh.kwY>uݗ&ۯ֊>͘ }ۋlVY]JTtW5`ÚY5fi `65-c=w>{fw!x ~L|S8:vƎDtJ ۝,6S4Ұf;s'7 La626x}f[kOW{jVfY\w+] i)7ʴl&cbp/P! ?Otw4F7a:GZSF~hD?+$%L|^Ƒ \wi!5(=Ogfa:fqӓH=ģ'1b<֏b-S˃EIbT@]?#8 &Xx~\pI;%g @ޮQV5wV ;E%yo7}O!8:s1XO긂ZZ4uy3S87ٹyQ$?Ӣg,3 Y=o&6r%Rl *\rNMƑM3Bo,>4-#y|GQHT / MrQb'Sb/] $;r:`(ý-ALkz&o3fO=4(rTTM homClr A ?Ʃ. i ]$PfJ@7 ٬YY7EsÑ`#K{?Fp'W[7Нi︱ cfzWbVY륳_Ca.EϥHV޹ėHࠈZM"Y5;gvzmH&Շ4M_f ;XËpMsW~_¾v'7=)wY̓0e֋~ (iO`>3+;7BgZA|0OJ> ilMv@ݶlTSqH ._+v=լ3 n#6oº:r &}׭źM[~ftj13X^nn~Qzq?#xGpСfsRA pqa{C_Ŗ_DUwkܘzD,Nkig(M1x%,3_]6w" 1\իנJWf V̍6E=LyLOP8^v $KPUMضj[f%t&ΘM#1FFUr`F2СN&Tu TJ7dxn|oF[;H>ż1M21?тr٣w֥*-5 lQ2]#]E[g>FFXn~W__"c,J&*~a)&z5{`:t樹$NGpNumv^˗%ܽ'Bm߸Qqh$_i7ϿJLdzޅscQ(z">/"m\)Ǐ>C=3wt엎[HH l"W >7,-5V~:OcY+ۨ|zp:\0}Bl-ش*?82!r.?1˗o>[p-i`4:`Qf(Oidone5S ,p~-/~1Sm,;uum>]^}?ҠEbt, f,b_mش6&jjƺ5ͬC1Yyzd7"?Xxha7XG/bvdfrݕ+W\ ݠ ~PW[Yn_ Y<51qTvnZ/C!MOO#Sh%PAb"=P?>'hQz6 G `<` l;OI۷ Ɇ ADuwNb])ܵߕDU^FP#@IT?#N:ou>n3#po+3lC<Љjs5 <44IJ#2łif)cE3 1$ ?Dzܝu!3UXNkӿ}/7oGQ?zzP`ǎq <u⑈+--CEO/!2kYN\=pѽ{p ;|u{cSn& ʌ93 ;ͽ84P]a, @}l6yC\( ZYw u]]\ESyN7"͸9dpY?NF}pxNz'55>l `)m,C46W=qu xeه3g?|4@g{ B4(@b? y!]gۉ+C?tOcQKWCql'_eKip{^n-e] ?ƹ!4YLϥ Ȣx`~oBDF;kk%j$I 0N78; MǶaSKcnX[/S5UZr3}FK7(04CCg`겾iG0X[ a*1V4q`]ǡb tӧ*7nԦ<׏Z9(՛B|J!HI!Y#4rt1x4WAˊ j։})T]4fUuracJyQ(ҽT~1+4w)/_~x 7qp l==s7e("[X7/{a_ffI>z`> ^SUG3Mܟ|q<nħXצvL=5;1;O7oSo<;y_ ƫ:Ϳ |cZ1@<턏yNL b:: o߉O_8u<|o1 & WЅ偧hl.|.҂ `xI4U4a[6Tf0CuyyReTr756s}A4éSpAs*TЪP>|dSDVֻ o ȭYa-p9-eFL/'&6:2r8>3R"{=Q1Ёf@YЈLc57)_x9Akxqx:GX g"L%q:W|CRfH˦gtQ75ƪ:4͈4En c"ڻ8Y8>T@1OL2VF\y5Hr'&~Ү<]ΉkGTJnhcI;j kՁ-m^( kVu (#nXB"7wqզvT'8qv Vԙ|Y|``j Zeuuu 90OBa?Ş- F* qÍ5XFTh'N0jsp_k54dЫa{=|=_c'45d*4+)ak[v}z<)lX֭rBL[ӏ #g^_\[gn06P1/dk=%[*݂}0gVfM`5FûhmGX{ؐ%> g}X _ZNU1ȗX6tL>6\>O|R\?z_--.MKO1 C'K)ytQlڴ"gS)T ApNm!HpLH瑋Đ=3@!U[e;B]MrZi |}F`s\=giZiWSΦgK@6\}|:^evNpXmqasۑmƁQJ|HO~f ;ZQNe!+ (ZFu6}mjښ"<Oj\ |:X"J@|ҪSkc4@W,є."Y) @-4S+`RJ*OPcM]6.MH|G!*;1lL`:*H_*ҺՉ,Į~`-odS0U,ǥ=MD:=vO:wb|:woɌՔ<|j:?P)*uJV< T ܸQ {LxϋršԔO;/{&|Կ ܄QW.(1hըG &O؍U؆ʝ9Lg <+~qIэ94+G0X}8Y&F@NH%諛Dj`{ :>/M@Qŧiu bO兒#}\C V#&NQ~%?S7`&珡y56o\[oUg_:?i|Sc~&p+y}ְ >}~1}:P#ɹ1lYB8+!pOvx5 \ԿTJ.̷1yÃlorLy7XZԒ|^l?"wi1a-o,ַR}QxL`^JMGjC+!y}vRSW/o{r|_tÑ6ؤMK@' vww[0D9]{T:'TXy&{a=ض#5[=hi5לömxƑz$4`i8c!m*Lh֢Nñٽ9ɘF$d+[sz&1MD7:n5]W7¦85x\G:#)NbU1)E)DWZeHp|VdݭLTyZKs3l!9va]k+X&D #_9gS-|/\rVpWॣ3=;nr>3¡c#f[0D,i19 (EG+I|i 3Q-idlQQ^-UQ#zZ@ $2||)H>9ـiR3b b@y9R *%8Wgt M}sdG3u0GGvK#`Y`e;3 8A&B0-Md?Al:0<܀S'MH Ī37#t[ 87{5 ޻VwN <|4`doơsv!;I7z}]O/uS@[rWOҏ޳g16eY089E 4!) fk40w Ͽp F{ĝa7[)(N=q #I% T`l$v=I̎ GŽƩ129Lbk,O,(L 8g!,yM "ϿoPkƍwbv|;vd"q ~W Tx, &`Q|g跏.qrAwcx>؋n ;ڍ B9嶑~XUE{˙fIaTW]px,9[@=,ݩ>YLwkK?B2SJZLYGEP&!js3DH&g5D TvZY*[lV`(hŬ![XG M+ac'5px4 L;6: _E-ZG ܆+o.J>O :''p1K%DukP4DdcYsCOqa.z}8G]\C,NchoG4~4~ IDATϏ#! EWp"1kҲ>fqlE/Ν-n5r9ӈ̍"Gb~l#&(5mCZt,(6kjln- UbUhg?8Տ,~ f(3HaY%#Z%w}ՙzauP,44z{,zFM~Ξ;~#lb>܎pd4Ei,G KiI*-XiFͶ`4٘oNa` S9񣯯LIȚ9oH$¸˨%K8Z):F6%nS/l@dG86٤*ύycSkY*udVlfs*Z 镕A6^J+!M~ XvH*6's>m=}4кKM{~c`iW8{$Ԑ[K Q1 Z;ny<҆5heG293mfMMLǶ㞏`_Pz<&+gN_ُanc?PAG0xΡk1xusӧ;| [Y>i; t;ùSq"/qs}ӓil7[p[$uW_@ *9LG֬n@ A$G^UXd8-@t@*z&܅:wݻuϢ*M;1K~k.ɗOqsВSHwo\Kչi^}n4LAhB+Li9 aԶ"\A 8!AɸaEV`W#Tb\&iy@gG::Vafvc|,Z`rJeԾx̆5k0MSgvqmmX)ISfժ#fY+Ḯ\Lڕ}QJXJk9m.l+ۘN֋l)_J痡H)u(tʝ"Z fR0Z%3O~`@bxO.inI.nb*+&/ͨ*s/RY4ճmEo0q3KU] U.,۾[{b*fɶ+VYݦ6iMq(TiWFiw {ڽz:4p-ژ "KhJHvpp2p3䇽K001eMk[!cdEn¬UoLwF hzuBy򨮭F.Oq-ƝP!P؈ƒl߳Sui] >RU[0>C$3`aa~ρAt6WbMG-4 etduvbdl@M8dʫw@:CUM=\^?39F$1FYE-S3JķCUWSShX 176n7@JmdTj/j1"(a=f29%  `ŧgc-9LHԎm5Zkژگ@>l@%2!T1\] bX:FUʗAL1]d)&g !3PAGh`DՋ/.bd%B[G #CIt)W /f1]erʬ\ԝQ]^PUjkc }qx꟯O[Դ{&JDOaɉ b.fi3.E* N^d"(HBq:@mbZTmYF7fP? >R889N#ᱧ6`#1? p:6kGe ܌;;L$M*׏V "070rjط_݉j#a=Y\tF kbpxӻch82|Vp fL Tat{f| /s6GUyxImFvfka*vMi2+!)`3bFWۺ#yp[lgy{:0:kw,{$Sg"ȟf;!+9P]n'](TPzU#̗ij/ pM4&g'89 <Pc$>MEGW{c;166KދOvpCcb{{~-uM "}ig_DSCv'?kZ74:~Ǯ=Cp@t=FiDDں+9O g # ytE"T>pu=j9رvf*P܆ASgdVuk _\(rkR/yis1.LR"nW6 ᤠ)|sGkp3#P\7ћuʎVhaˆQZE .?OKQP%uݸQ]2Z 6" `.[@t*c֣%B%d_y8~P fCY@K zUA x?sWk?i⫇po WmiE81k@ELW"Y>>ʴhhl4s)31CZjRIF f]3,Xv )n=m61D4dlG0Ahs3 Fjhܼ5Nk=F3j mn`B`D$`&PeI,M`a05MZi 1Սe 2 fbҪ>M~:^em1 UWWMٙ8ZWqO9::D~fZB:ƪ+V(U%_+NSS+up?LqK`q2c̖QzZ.-2C2e|"68Q_p#VsitzL*.6m-,ϫIvxӅv׺- (37y4kX!K*344O~RsAӉ֫R0Q;vv +`l@lwp~rbgpQȦq{fpV4{QYȦPKmgljp؄mc>!~ Կ_17܁PUH0+:l?.LԢCn&Kȷ Npҵf3[07.`Nokk [-U=;EUL;m7>} uX`Az5߉;uܔ/a:#/EuA Lh:>M b_8^zࠐWi "%@5ԙ+L{C.Ԋ3hb?~KGQx+fG#SRXޣpXtM{c}/:w!^#֜Ѩ`_|Z !n$t!. 7Ԉt՚ 6gɛt h&=i9u@ g]%]0O,L,6o#=fqVwc݅.f*G7H~dJb%\9<~z Ff='OL3SHH Oc]3xkpFdb <;Cg3HL}?v65z7=u\MUqc[[+i! ` RJZ=]nZM3d6jkPa߫b}A`كMK(ਗ਼ݪ +^m#@H _ԷL$ 3^}$]v E!'˙fjkj 8ջHmW XvZ[)\,l;;|GK,{Uʓ⒝N]Zq)b)?Jn[Ҵ>,*+kP]fx:'WB\幂-6|,rn֥ӤIuHŮS=+&ٟ;W`8Tڵ-Qn*Q*:U#am,k(- w0 ZVO+n"tCF66oV }# m!ZolϔiC;T^]O\kQf `iVk>3~z0"/~gcy;v;7Fs໎?xΦ'R.>2_RTiPxz,݊,/W~d,:\>I3abVQaIJlܴaq<ѱvc|lsѤ`am8ՎPqNT_̜@8E1 P7nbSt[}عF;0׵~;G&#m(ɚ8^hᯯu uwƮ8ֳ ,,((vE ]ߍg鈐_k%D=]S1 N*8ܸvR4N| A-6mAf81DV7`Vy7?b j'0Ӂ{ЅMq~Gv`IsbL4Ƨcp{9콱VGoul: ;~q:za"FFa]Ƚ4ZW̴iOLN`4@fD7ZÖ"hәaZTrP&IüH #hN%PHg0NgsXUCOp ϙF {^wiVCAE{ޏ;\S=8H345{czp k7`ii^SH _Yӷ C2TU-cYhkPI{u~4]SEFtdg̿#[m6-U6)NEQS0KImVȶ;]TNPL#fxP4j'toL̦qg5l>KӥO>0DSSN]3jmDq9Pz Mkc'O:ǁ ۾>Isյoh@%<Qqſ/gN)Mi|_ ,_7tݸm&P~\%k nZyوW@s$N׮=·Ӿ\ $zǀ3Q VNN8)Tv'jg% cNݎLp27o6A!9D]%oqb }~Sgup+P!!yv~āo܉ӓqp-NЎ:p)'NAV|[$f # tEը7[ T C7V<dZE $s'ɼ:p@-2QYm!Vh?Bp)EǂMGC'̱6h@$}Ϣ{^'fR &aiM/݄՛?u=~M]:wtC?۰ym-Zx}[?kwv]pZӌmMUԢ3~CkC.@yv*/ !m'Dʇ` 71y" R^bS`]L9bfd^YLEr+po]G#7HXϐ\$DžWtSL/%pqڗӧ^HwɄpTQM6r3+m@TX$kˉKn͍dx #?N}|hq ZtyQyR"AF %ӑ$ښ",?Q!/.`)1%!Ǥ8gu- ,>gzg;3ؗOg}Z[WcMu'!هO4?rv"<dpŵH_]G[Mp!auT|McX:ƍo?k7k&֢,3:#)bzP՛wU`Ǫ0ޝX q|ʅg;,t:6 Z`5[Ѷj n{54oYP,u6`=U;q U2_.I7? UaB5.HDK.,Q fҫ}(4U XaԱf|8h:Ƕyl\7o?2HdbhnLZ|NcO#MI-g]*qk?kkp#>+7&gicoAJIVׯWvw~F\dfS8xjeў$g)YL>~esyLMI'X&XCK!H$b4wa0(S&hUiVAjQiS\גFKAE,|/BGipsP#tHI56T863jGvzW ؏M&wҔS䦳zMO).vTXȎ&OvQiըmgϒ\Zl2gu&3Ձ#Es>KW y5>&R1_,SX1taKncTw9Dn+*o:T&~4)OZ|R6žOsc:+ IZ  0s'\4`y1Iz -)YrRWF@Vn;Gߘupmor7vF~i+A>_>/:kڷWC"Fj`~7X(_?G K]:_:sa2Pv#> }:0O)Se$# Q&is j< /VJ>|Aw^,EtNYMu{ 0ϴv޼_Y%S8 Z$PH:VIRA?rkjaU‘5 )xvW _#ORɍkC츪{o ?6] $aiX'.> g%K& zتTu p# QCWŇw!|_}VPI?'gZJ?df ޳0 f14c;aNsaDvyfS S;}DvF`ϧ$MNt&[9@Kx8Mh-.6 )m+8۽MK.I16h^BBw5nZZ*7E,*b@gOŋJSgn|jSOՇz1=2b{b^S"| n)ce? noQwwiDs_ҭȲ+,,9T#o.Rv9`WRnp\i*^xDt2\ΐW]xʖNeV%wYuzX95wrx,2%:92 gpp 64 R3 jcpbOeлZ"ճ9DvZ@U!QgU>8O˯ Xϩ£'^Uy|9]m ./}p-Aak8Q4X}SU,[(z|XqyDcZW+?!.L0D kfqbׯKnd4J)Zhǎ0GFmZR$ |͞Odgb34KlZYŤ5p>g}Kqc,m1SOt!5K0@0GYwX7H"ոnOt_-wl{zjIx(zؾIb$syGҍxӸ3Y>I+#v]eSuNb@i4}cJ_xzGH2!3)m]83XcnX[{o2@^mlfVG|fN0+!Lc44^3C^΄Qr.f ?{/%& zvئ.^_EΦxroگjXݨM+}[kt6hmΗR.g9*5 шY>0j;Uބ 5}d^eoPՇ.6H~xDz:NM,Փ3<:;vD83@,1_Ҡ!0hjұYϰv3e.0{F,\\A1~n}s 8(z_0:޼/SP|ʜwSNO"30d7ʬ›Dw8fbG5; g:?͸7i) ׍NonHgX_]5v2i16~ɼ+z?oWNnL"wz/M{xR;,Rd4"a=O|Zrq=1 l!5C 1F\St!A~L:2+@vk_,)wt5+wA!7U&:Co4R;ȿ8z"G蝼Gzހ'?LzDgz4wv_բ ['Ndxsʓf୯DMh@1'݀[o1?=sXdR[PU:,7 ZPqLtfJʯ1zG7x ssa )`t4cq}g86!IIx.E:p{>dڕc*X@7 $-T49sA@q7G0ϣbC;*Iu/9d7p>35pSTmp3V#3O L˼%'0O?o#i_ %׃89j^J\'W`ϩ7oR7ZQyq*'ZjXgI'BTP\&ȲM9V0H;C^O!mMK+?r$|*O~s_Eo(zrz[8Ϡ)x@lyBd d+ԦRd.ԓ9'{Cc^TzTwk7GS0S|5U.lEW޲+7g߾mjj>5U`8L3/ZffX2Bz Tjm@b5#tk?֮.m4fтsz0u\R}'+ rզUCy P!Hc!sg;<9ڊ 3kj֪:VDKmwI&N4RNij_#/?NW#2OFd+wٝwG}wP~i0נ8§A_uUA|7ߋ~iSܚ߶ 8HA)yQ}'eyAxrP]6qN.p θR;YvbIb"m<1>_OC 8dNfKn'#Z1|ظ1QP%|Ө㨨)+غiԝۋ5=oj[wk+ØZ5ȡޞy4NuP|F4\U: Qƛa7ik9;0AESuqfmΡnU|uDpۆtMÕFsku^ aճupw!C}Mmmy+XObݧQCU x3pFP辥yMqO5;X:d \o{UfJR/a5A5|DuhnjD**Ǵj ]|_f Z LNV\u;nz5СεuXE5GpMkZ,\9 `2=Qh2T׸K#.t#ɁcZ=Dx #':c<# Egq5;7)\|m` ŧX>qkM Tx}9 O0'$1OZ`+*BAI$nuS`X>E;6tDSuxS TiNGr'ɨMw[5V`ZS~o~22ْk6Xtuȼ^R-춵RZ${$/Ijj4/ޗ#QVR̦KWie:}|1+Tm^yTwd&L-–,}跭-U(^ngOҬRҠ ZY[ ׫T=2;ɊT3'NXNMȟÄ'mPϞZ[6kIC9R}I{TGrgۈ-Rk>_`x1b)n`#i> 9w6m2jx)>&:n9w]9ژJPxf jL%xZ[LueOUU5&&'1T##F- < [Sc#+`kinYDGU̲#՛F.6xQFS!$4 :T=]n{sT Y X)ٗ ^TmW|/t1o4 эxޅ}6Z@PP Ť+Ka[m<Ҵa6,6>nOh#:5L GϵSiDPx$JIa+o駭irM?TA~<o~R٥}ԋk)8uF;k8w* xE'V`+&P5"F"b >t;wU2jwK%~'Q˾ bw:ѕ+& D۶X<nЀ+M<%)Ӷgfa=֮ך )-*Ns]o^|+3mqڮީ#b/?rķmPhSqS:,8ꇒeΝ_ܸq)^vr5>+69YWfnٲoK tTdRw`":@GEH}l5  pk0Hv|v'QmN~/PGZIRviӪQ6 lhaSˣ>55q]l^-:rvtm^J7*غ:xn. XՊ!z]DC0>Whd%C¹B3<;?dNdoi^֡N\h#WA{t(`^!:s!(tuVPvs6I E!BmO\ SGϧZDS@} AqtB4*QGj&M <"9;-tTFylf1,v)oʋcG>7, >EKiY߇o}3r,Ou|(Ctm.>eJ){DKSb꿒] O6.%46>-|MLksCv'^n5Mw#_t:@k7F.􅨸ڤU5ݡC \EdFJ-/دvwGcQcL{6Q=UVIv&1'#`Y.l$Md4 .r$Tg;p7g;ՏJL1\XQ;f&\:J9YTR8snL07cfzNxUdo< ^L4:.DéO=Ȧvظv@ÅҧNiWT9h9>Y|oWXwۧr鴃}ZOWh7WUb/(iWi[zʐHKOߨKFԭI寔/]Z> 4,;eLMa4DssED]#cte.,,G^v8U6GbٍVdYcɦ\YdW]mfSrrJ˥[W~&\ՏSoeó#ʋ{)M^vkꨥ<MjT:S!T^/Exq`n'Nءx[ő3=xGԓ`׋{;pRzϞ ?'w={"C)/A=/ž]'dsxqq%a55O|v{01/|评;B`j}p9 :=8pD {AqS(>o}!|kyԤlfT,VYP%^4=Tr@RM)>AL+[}4KDz h{ N4UPą j4D`9hg>A=ZNİ3""m`Rc,ORZJ0.G`JwVRJksՔeu bK mע*>w#_B~=UwbcJ:(T?֎`PSEʝ HS"_HXi3Em8_xJwkG(V` X}l`m*]JKaCE{KHQȿvݷZR$ hFTξE\؛ :d9^]Op8mebp3R㦿APk ,a|- 㕚^9K{5$ SYd$[9j(N˧)5 իWa{\ r2x p] w)OT/ l.h# .E#VUn(eI[Gsi0 KQQ@0놧dڢ,{8\ḵ#rzU%ĭ^JhnJׄѺn l߼W~W 3NX'xzW͚~Rsry։Rm̑"( z_QE 2pf[+QH$b3P d[xhҌΕuO_EǏܸEN?}z ߽=1vPg Nat"G>/'N8Q_xs1q%>/Cs֋Z' `YhRD4 ^ҍԡTvMDʛ<^.az4˄E@Y@u&\@#+*8;0v"h֊ L:(>EJeH 7KI(8iljLZZ2)mؓVPKꦛ+۰u;_Fkptܱ޵y&GK[!P HkbO_8nCp.۷?~'- xfiDZV 44>$pzWy+zW:ExJ*SP:3@p/E-PL"k>~ 6ƵTz ^xhhѝVʅY},Js)ZrJNF|)r˦O:/ՔUDtXG3TD9fH= ==:Bfp!FwihjR;"G9ʏ[d/ġT^+f ZyL.E7]n'\>"H܅JwF87 tLU902ͳ\&G![+ ;_#c2|18XB 0ҟ9L ;M!'W_uMø13 th;+v-&T%pmnn_xiJ Tz79LYFN4s{܉ۛ*n),VSSU3) )y fNHPMX @奤Ң,5zqM_]w5u[i+Nm;kw)Χ~5߅ 9IoMvfJ┬4"dm}w?og 9XasM?Ԕwobnՙ]]\6D٠ rҐ OɼֆͲ!M%k>J^i,mcvD$`5W_WK8 >ЋM]XeK>P6zyS@ۃ)&NܠJh%2}ofzJc&-UQ%q4u+YvNU'4hYhy$Z˔2+ST>Z튩TFm׵HGrE%[O|Z9"et\ -tDLeewZWYڥJI9 !A׺eH`S9"Bf >_xl5倧ȄM#O ?(Kʿu%u،EHoq}?hhpcM8qI/Nϸ҈Qv?C:sT* .1m&#G-{+@Ёr0Sh"p##LEf[C5P{Q#\gv\o-w|x=QOPS?vأQ Ds>{~<8U-Tը^G5%I& OU` ϚUDeV:'c5ӭh81c NAY7]vFYCpbhF1HpJ dPmPL/KIMr$'q,-4^~yJ5g8iY`.^XVy,,/6rc+6V,c-㲾i4ᅰo[usj>*FzxZ+:YD} RڒN&ʼng02؏!)4hۅmԦd%)g_j.r~f}gxvΚ$йZ-n- 3C? GWF[3a Ƈ.n-YQxa*33yItP@WE{۟ߥ,_[-ώ&NI¨݊HW>L&)-?4H7(8@dngO‰Gg!DߟF1\ OY̢ )ӕ@}06^@X s$S1M!5CSW|s& DSȭBj|u]>|p+Ѱf K?݅O|7GXU-Xi-*~~/>O/_?k~7xP^@3\Y8y85M@}JeC(4H:L'@nu2״ ^ l udT0]U26Z 9g_Ρ3EZS\S1S vR#,4fìTH)W~3@TgI1$60NAjpƍ<|(X>"tp[V B)gZZH&r=ҠF~u >(ج;i-sKRʃ6|BIАsb3ub ٣i)w|9=y̦54aiz]ֱ)RzDW\- rBq)Rz9~~Q9\rq Sx]G< o6Y6i}zm EChmoG3G0٠r x.m"kJ,/Yd2οS/Ηfd%rѩ?-tj+V?9d^Sk>k@W\Q!R?Ӹ # Rsc@N $@hl*Yyؾj@TC'PӾT'P0m*QrsJ㦛nz&?;#[ouaFdp(x˶$b . Ḛε<<':c!Gϥ>I2u 4ɉ]^CV3 9 N 5`9\LZ?)mպJ42F :tNفQsŦ΂LէsH #NǑ{I`V u3>{lx,QZ4$nf"liT$LԚ/1 x[HH> =n3=A6cňa'hƛ%DP滎u; `GƇ7:*x"rպ5=oړ|4OC|/G O[:?vKm|pavj'S Nܕ--*gWίJ(~Jvrkg+lR8:sFTD|TAQ $m'kн$ZndEosSVGeKmջp҇3vک~CH7:DS^3X[: _56nSv\X{X.Neo8̙Z:;rm\=N.8$/Qwۏ${Uz}bY_S|J!0"-R"ryj ? RU>u*|Ф 9Ky{s#|z8d6Xud1ج:8V2o U+$•* U<*^4D3n%2q|s0p3Տ֚zGv *׊P^}%4m#N_ V`Hah &!Bl3g7J.jàvGu[bSxOimNvj0gt&8ώCet+|)@.f.P;WTv貓[Qm;FFF/Hҭ'T&{9SegRwtNqjyT2m9DO9cl%_OpWs9̶%I0$Fcdcsr0ϠA{dYF ܉i/Lsa*i3-E)MJ-VVTTZfrnٕGmRjYU2h{^F|Z^X,Iv1L:s5 +iTSoJM`lE W=ó0( NO as$N|9ͧNܾ};&GG܋146*OVsI;z=812DI9)c>y%kp`ϔ `P SL4S51OAtS::)6=73O隈)m짒7Πڪt-t͙4׍t؍*eq8d܄Fۚk/h@v.ON!RPXMp!F@t*->pˠI1< <4+CY2㌓{[KnjOmtWKDijwTbc$Gh \oC)iE,UT֠[jrrO"6u^YA,fg1rڶ@\za}&JwXl_.ڕC[tr]@rÑ͟JDdcPe5^nXy#Tcݖy֭iTts\_/c;֮96=8PM7]XNxaMFrCY 2f}8u|7ߔ',^|QgKl*WG7[q@eVN)*T=N.82K +}/%5dOT$(ƥrcΟ>#''9M #~ʼ"{?ujiӱƄ ̱;WOݙH¯Q݂s_;LFnܝZ FqS}w _}0B ~u`6<'r4N.|yTc(>cx7@"f\CfwqөcH '"*ql~NAn2u/1UfpձT P6~Nx==NqJ1) BnU0_%Ў €M5"ow(|”: º3Ev#aWl*Y+u69ѵ"Z&(H:#fQIXc0]ȁ>w25uY 8<́F W3XO9ݎ ͠5dŤlKk׮FgG"my¥Yܥ|#*rkt5rӠ6o4Ԛ[Պ\x˵+C kp^CrxI6)^|"PRAvNfEknҀi)2I+he@K8f)WR˥Љ y3+f4wIt!]DK7VJ-[.%p?߄ƒWq-ueY-vmoa/<+vA ,$= vQ%ûvvW̤/ǰiY0we{xvTFO8ʣ +WcŪdhO?G:@m:"BB%$&._hĉl0+<|x |>'SZWJ@rC-;X%PrpF@ HttvKcN`6 ,:KmbA;$~ns[͎vG1Chf 0kU<ڼpmA5T7{1?C|.kr% bZhw?p2`3i'Nve7 IF(|:w#;C /f)wH͟cW1%!$D?|y<3H} `vKx[]'G7Ǟ؅Hr| b\WݲO  (¤rqHiKq2 u>\T :!vRʉgL:Jr)ZR7i@6giIKݯ(%Ws FuNR$l+&/>1>I4K(l)Ϳ5ntc8FGiBLTp 2FB<*d2dB' L-_*I!Y遻?A_M0Wvkkv;ݜMI7(>>l|HcgtitΨژvWkmA7ٝ_:tDz7n$t]QNY~I u[ZU, 'cy4I<֔;kZ lKE4 pеLZDg+.T2f֌י{TV @jg'^:#{/0ѓ#c1[ V>~7oƸ+wocy ~[xsigw.o|j휾,[0v8vc!#b3q-?I a.,͚4f}4攤:2iHkL 5ҐUs,Sg nЭ)xUYG]t M\5dgP $Xi2w[I')Rh ,",8¢z9nݲkފ[LACNiW0S9⍮7ȥ_/)ojRu7̹G1מjBQ5uF=T;r 38ud7ZꦞSϫrxU$F{'c|. 8~4F, Y%E˜UArK N cQZĒFM^6*qH@` )gnE<星 E<3]zԟvuV-8kxQUv$3NH0~:n`aH~Ihy&齰d;wg;Cd~QakU€֮3 e*8/Q\LMgo, s+gy2H&l6~"fKa0ff{IQ< Y;oWR] dO2%gf/bsD)Y>H@L@W+ lp2}C-&™1HGZ$)^:њ}C5rf8V^(=8=HD#Q&w]]=x}0e3P@TѪP+ mb')3tF?N+ 6<f3zg)#}>sQ1S~yKPzTaҔVryO|6.)Hu[=w>L3Usbf)۩qIʄwpBĝí g/ 01S9hYx( w|cXS#\={gCjv?g1}f^XRAN!\0dzm0$vat6rdyyB ȝT ;TfG])l$!S(hk HT'ErinPdQzuaQ C?A7ФC3@K[d7 3żn3GYrNAG6 "$b$D\e&ClM%5F1=I`lՊFnqu2D"ĔB-BsZMğ$,'cZ,f%%3r?Neܬu%E7^%j"Re0a;)Dy>|wJҪאx 想 _^SZE0B&l߹ Mxk?{ yرc'^zu;Ρ~)loC;ܾ mہ7ľbv_DZh9و]"KpLBQH6>_{m=b$VLy&Ԏo%o؆t߻v{xN+,3m>{<4qH=OŦe_΄y9_?Εw0ZP}*}/9kyTt+YvHgabsdoԍ|gx_B3mjD+b#w : G㰎)rbU xچ:a?>N8oB\O3 Ôk!Tu 3RT0_Kgnv@jSy}7OS7>/F5#~MUw?86kω9FUEl:T]>\RhXqݱ0)ݳb•2ye@dyHqD;b|$}z//ȝ/a7XSe]VCג=rl[JxI;^;#nL\3"bq_E!:%i{o5JbաMM]|:b/O/T-Z wX34b>?7t2IRz`H~`#8nJ y_=sbNqQ<0tQ͹5NiFLDL]!sy&t)_9Is_/ExR邠s++x v-oj+w\Vg.fonQgs9~Ε\2Э t=;T3uS.E;<S2, tm͕VGE&&WX]Xr+u1 #8^$>x+|T3umuce^iS^x)j@r*WT# '` =CtODT,ws73c&#+߼z6`*?JTɑWG%oa>4Di-*y't "=O?/ܲakzr i3LHb ?c$@ÉF&|eaQpq?p$Abe\ u(kHXu.pJ15f$hb$b@g؈wI HR{D\-m),}'] _UEJI`FwӽH}N4Kxr?MU@^iԖ:myU%ZTP|x6!#"L=f}-ӆR* wxm/gzQ$bhfth3}9I0vs9 nz 30M-h6'=c4qG),D<ɅF"aLgNb]x%*bʵ&9;$8&he.(*EAđF7!s*7ל\w:yrz} UX3n9&3G6_W3b!fD^;s{36k>}ULJ+AQܲ?-=#^l)~rT{y_l 9 U3>o|mEB44(>꽰 wjM}畴-mmhjlkx=ط{/7,YM,h%:wxFҹzz۷J2|`Ye0L`HD|w}S3N>[)oOƌ%WSJ/a5ZjSbmʝu$H* !FϠۨX%J ݟA˙Jn /D?Wrl_K۴crkk)%? >*9AvTQXxZ<ɳpmk\SU[bN8!{PDN l2kvB sX0[G$ڬbOm&نtl S e@ [.KD`8A9>')ݢ P.n#.5ӐXpHEau9`Q_.F,C*@| 85Q?p>\._ܧIKהFkAx (ED"HĉZ!Ǜ:!B)Q4sulj5;X\~nw|#cgz)<#Yv (.)Fa6A GOMy{~DT(n*2Ӆ9pILx:N VQN?48(a1F \pUW_KCBҕt)T2tvvP!2IJkbp$Lx Ra&&72>}R"&s9sNz>yy8DƕAlܺ KPGԜ 3YX2[&=Ε?W@6}w'?](~Ir+K)pFňO2ŧptjz1e8~(VT R;E|vwF|Rh+RҵFQfYU:ܲA:좺[1+eb`S2 V U\ &S, u2TӀy']57w԰8U|= ~;08u;: k5ؽxD$?NsrL ?|ttR\J LT/sr_&9篩ʿSn% '1[|.nj;s GQJ”=ů tsv$ GHU>yyO9RͶK_rg} <>?99)$y8mvTh)PdE||E T7ÉCE\*N.*4m>fAl?W|rB?=X'_T|M6m:Y*JsޙQßb9  qlqd sp>0e8}rNg7<33|_Di}U?wvvLq[i4.3 Çy7spj(R<{U£ŕsGjqm<hϠ؉Cm+@?r%}p˧+{;?>X x=iѲ+>ɢ~}uthAD1+A0(=ezxN*KRx-nظj&nY]ϣTr/e-՗E0O!O.fO&CeHDVOkr Gy\:=*sE|*-)qDd_vV㼇bNLL2~>՜/.{yR8W9~e*PEٺb{fAq6/m}J`gpe{ٝ->9cP & O)==[$LFz:3dڌꠂq6]m0HDfSXb:-Š+V՘c Uʒdr yeynDŽEh501ɑ>LL)xϰP+,>&£HΐhK, $n9}F,l$͟~3hnm4ne2XYޱYt([" J 1:65O<A EE-! 1020E~O`ikOMcd|^$<`)#;Â19wrƩaĽ8sPgOK8IJE9 ۢ|S~4#SX5 v*lZJ4mxOkC|>rf` ͔y/&)vySa T2X(Dl MmT,l?MɣGgt+ӗ\(R?S&\?Wxo}xe>Hِ[RP<+?c+sO;w֭ ]_?xy~C-~/g&_("-LzI[^)Pr*SgŐ*G(QZ"_C̬|\ЊՑF Zi_7Il/] ]c0˕%u( b\yO&fYCab񽰵W_Uɏh5b~f w#}ξ#F0;[5Eb3=s<53׸-Wd+|[B!?nkD5BhtU@$ݱ))vNcpYNw^t%ݗd΢#>>&#8UF/4BNf`4ĨŒL-#E`Ϛa˭i|} qn*Jʟٞ)0.ݹPcgwxktr3 OD1\hEVN'QL(ƦlRT- 8HS} D竤I&2`L'[J w˘mÂWVb'& ]tUJ Η]#=c4}݀Nz>Im١e'HCQz )1RSdǡEqhx$ŝk7Cg7PNJFj9/'e\L1RNp]adƐFfz2TŪ*D7`p=)*ܺ{:n0#>s7FX؝2q'w!n #\uҧ?pwɃ(8eY\5n}t:zbMH 0<5\e|/\Εj+}AKZVbQpIZs.Ix2zlV;yK Or΃X-Ex2,)_W8ZjQvsN9 )T+_p e $c*TpQ<ƫx7?8& xO`ۮ8H޷vW@H$%D|2V̦OL>a͌;e< :#%֋@/N3JhvPT+2^[H,vd.0Ƅ#5 mg+DM^E4d.OYLvɿ#ЌAx:?5s5@@Ah)_Mu8A x{5ho׈Oݭ (Knr;؎ΔlO,FُbN|Ο]. H(}7ɟKKun sE(?|hxM﫡| Fo| S!l[8\-}IKv~g3W' Aw߬j{Xfq $9CX- 钟*ͤ萟iq$!5WTYY) a%݂g-NƭWb -3|f;<&9RZ>Ow>VI 4< Bb[,&3qDcnXzI^,_EQOC,Ȑ )/t\=m6K̞cie puJ &d>,yR\Ct6wy=mע|?#첈e{UU^idqchw'}8>[8p.}˽\pe14{;O]+$(C殃2Yfgg*ܧurxJ/}?8lވ61f2T,JRHy|1Hdbjj V EyVx!&00źU5S NaFA[Zq3SzC =T),=~Pf_U^+c1B^ZӅpXqYCyUGvBN FRn9|R< ȟYE>QkEBFNbJURƢq(є&T<ד׉88u_ ;H~p%gܢɣ@:]zM"1`i͚:hl@y'7\DyKsHIp!kos\8cPH"=&)e Ǣe(̙޴鑮[>M*t?<2U8[.G"E$g+=;p f] Nh#H /eQk6/:*1ꉈ23+ j #V\{ӹI:WP>{QC~]Nxw .G .g!e1j~툿HdsΟrũ:07QrqZs4ł09̞D Ł=G ++ ~ ^'7T}xv$HfȜīAF7e/IHKwLθ(c钔c#jnΫz1hǣI ͐]4 X,N+s*pcoD$qz<-;ˆq*1x-w i@i)UR|.)> ɶ9 tn9r-`yiH,EI/ NNQIgGKbqT"&]4 LJ9~Gcp82 7/ (N/>sF"SdO}"_.`}I`?>ct׷qMY8Ky8TaQŨ37p|E쯺\,@ge Ra{_FɞYTDǨs^{_ڒ,Rsl9~E E@Oϫ7_[}]LpzRq"qhEQšB1}HIⳲm  BgVeyFY6*wcZadpPdjm[QQH8bɾhʄ6GAuDi]Vw<O,>ٟl߶Ih6 aa*A[{ FQZ"1F1or3$ X|2owLi-F(\NiYzč#mt =[UgyXwXخ|,nuXeOo<6KM;\ְ[)>ONeee}-VN1z0Yh@&LSjj`(Pe?-Ƈ5&'<xT+WmGGg7e z,v8¦k0;'O~ܲ%ABkXv;ݯ۝GOAWgt;OӠ ߍZlq%KⓅB(jΉ8e#Mfƾ>(+ѩaȡx9'yWW,;h}. sUmrkq!v=>?;p4f:ʰ<~q?}9͌ӹw%Ng˨gN3͹Y)fYؔ! Xs'5eNSH*|'h7P2|SY8dcsPpcsprWl9p(~(i|ittʦx yo񗾹Թ`n>Eby~!$RXlNPJO-O)>O~h~`Q 틂W./d& $y/i?"aĨ){ucw\dx_TT;\yv"ҽܝ3(}wrŀ++{غuthjBKS,V$Ք` իE7nX;>N5 !>Tw 0t"{4ˌeT?r蜎G\d_losd3Ix:fף_v{Y;N|ic{1}}fc?O-o !2!U=|A$Xut϶ఓ-->, L y&9>dZ15`:{ޯByC G=oe"Op?8:lY.rYRI45ؤ˱z 1@u;sHI̚# .PYT K` h7R!E W.O?OJсjZMT!Ao2M@w &.~jxQD=>c'{.?/T XGG5-d>Hk|]lGY.u˅!<9KdO "'=0m(*R`xhHu+*'YU29yjyy PZZ}I %3[)>ϙIqWT2k;8] @r:q|s7q)tvx3bqӾ@Ue (.@qVx2lO|-Ë'g x*pʕp'yqDg~q2 n j6 \d煃n7"U9HfN|.ٝ5ܹ.ވ{"+JV u 覸uϻ=T9vv# WQ*ư_ǧBS*XCяyj$E!|*+NH %m~ HP''<)D iŲniɢɬjGӦKbgnϬ3TU`sl[D^W~tڶUʧXqM0E ɓ(+{'Sq2?8|8u@O|Hg:IsRQ3,5Sĭ2a)yݕ9\$404.:_<*2/@n2[/24&s$w~.q2ΐ9ӟdFO#>rUvϫ^#85 s[1Љu)ſ#@,lC _\TUܚ5A  >yep8<]F~1J$la[0d&!G96jӾ³hXvLŗLt? $e^hl(~<,b sbȴ9yȽ[0d7f2`[8/f?ؽs?YxOw;6LwW(/c_Q% #ŧDrillĺu3Oye}$>j梦 I?sd陯;s2yY25 ;\xo!e`č;(EN21᠞K|iY *|$BSp8a]nr‹r{;c6ܷΊd*۪HQ5=S6oQ|q5{3f}Y\Q㸮>zi _iy?{<{q\OrÀ0gC}S?~B KxH. 꺻{`FQ@a٪ՔRg؇Ş?X|Qh-(+ 65 P3\)fόو{MMJ5j=l}lqnp.|[ R|^88fOnQ$T| RidG8/ר#EJJK as:҆tQȘP$ " ^o i0ȏ84f')+>våssI|AdK$%O )FGD,(A$@`ʋÇ^B3`SʺJej<.XTXBI={/db#3Up}>@Dy=h*T?U>׌2Pp<'N}PF+VrR=Yف='|N3:ļnB]ry 9>/,}}p8f^@0c$)La8PZ^8:)bZ}e DQ]}S0]lAo2E;Nc?ǎl0{9=^nӝd)ko?DhB뮼6J%"=A0WGz5O)-@fDV|zR~S˚V%Ոٞs442;El5]|3nd4|]Idkyn bK.l7n=%_[X(F6D+h @eyfx 3khD 0R(q}XUAPăeo1Js|} yſ'J_y&3d8qE+fs(ipŒ݋<& s!g(-;j,E?o*xE=}mhuHfa+{"oTC%$JR2EXXsǡJRg,%Y)ϘwEl'h+ d>i=Yrll΄)OdfY*iGسf3ZyE`y3N2Y4h\)e,Y\+ ~櫴^ql<#R|J$P?<]L2&&ژݏ5MxZΐ$kjj 6*&ƭS^3i @0 `HpcW [I&Cp͌9?S:3Y3'L5 ؚ8!B Z=)p:z>&A˟/ys{}j`17`g3#ŧDrYH| 4y6FEg9yɤł[FY<\ 0<6cq: U3yP\p/U|}ne}p2)>%gxH. K) Qj3#.Q?aE"N{A ~^ǃ66ŀ9)lbnFa^1Ne)Ev-6kꅢ6Ǔ\f|_MX|Όd3&.]V=wր.O .GA+kpa NMbߞ}櫮Z8#8Ў<+6\ i[Al<wpl:::t:ǂ3'gלhЃitѠz,]7ծxjwї8 s~f6_Ջ/Ń=1fU,wWOyU\]igrR郞Eďl鏿X-R|3OYݓH. X.8msp](8(u;a.4:55(L[ ^BjLf3%()dVTmD"13`C)L{.qAɛzvy'O2>.x^?Cq^خX UrI/OSm14ak[ܹT; &"<݅eHCK/ Fku" >%2#9ȖOXgwd(5šOc_S;$*!=Ƀ  v~/:zz TVWiEgEZNBPS@VƵke%MA\_IUl#qf\q5a]a3BL`&u&L u#a6@Kfu˰}pn1\`8 WIޙpr;'Oę8Z+?g~|^}O4 eA9"Dr)Jds*{b؍H" ^88f7\r 3$ܪ, &;]tl%+fsbQ3#ŧDrQZ>Iqad,za%WRLԏQ/9\LL"hZk Iiy:U6Cobbr2K&Ұ0Ҕ<äX1265BXT3\;?o7Z;QUWbX :FG&dRI(0e13Xj9J xINE]'DžV=ɹ388y'~lG>˴4}ͮT?mRi?R+'^ӣdaH. GUZ>Y|rokn{PPh\S ~ ZtL75[~)l''a1Og`q}w!Yۍ,. ,*9q!ʫ sG)jrb Oyž;)>% JR n1T3X,V͓L&DI4fG 3ф$ ӴF7ghsdhiĚ}ݰW7"V*2HR#O$|-ܒ$m^(*S)^Q T$~4Bult"Fzee"hZ18~Š**Ylz<jkkD"93R|J$cǎFlDZ]mjRߙBNU?=dؽZ8 !Q9fq*3~F2sٕ\XS{NGjrM}|Nm UϱHϙuH$p!%1aFȑiw^n'1I.ςQ̔mT~v:W _\,8<ƫx&180$%;NٸPLG{{;ZZZh%D"H$ )>%D"H$ )>%D"H$ )>%D"H$ )>%D"H$ )>%D"H$ )>%˜X`mhD<BɬY2>؇OmD{7{ċ1:2 $!pz:Dpr R_r~\Hc%]PaDNe/6z1)ْ!Y;a/pFw!f`"^|C Ldmbԃz4v9Ӱ{((,٠EӇC{"BHߌ7Б&OX!=9DAQ1Lzq)cQ M갋Zwt1-e>py%@G]Ixz_Nmq%v=CQlOѳ0u;08ЏG:q#<5lS4hwjf *(A |'ڇaiS+K-C+ɺڢC-X^]*h'p;en 7&R&hxiT? n Ɖ~p $^`(cZ\&vSʘp;, c*F x(-ږH$,4ye#ߏ~Q1Ս6n܈k a*ev ܞ$_ !H"dBl޸]xapVm@Gj' jV؂8>~v֑ư'uXQH%# Ӕbr7@,ѷAWPu+*0V߄hvlA".x;^|^Kjm>9T^%nCF3q͇: vdK$zwqlٲE1-YrDo5kr/oo@4j)2=)t*`5֡E25܄EݸI(:#Jݏ}H`bS!Xv<ڂx}W=ɲÙUegLTUn5DwWچCv\X 6{}Mů ?xЧLdh;qGQE%d18ꁁh^ͣoW:Ds{v>g2(DrB[H$ˑd2(Eێyy00nDXK"b7*?aDMOb& 7&10BIm1:+lSB@;X(`w &IZY`j KxQXQ\U5;$&?t @ y9BxT `1p9H7zB$qm5Qw%t("hgIQ VMclCʷ"n@/._ʀ"Xɽ%FD!$iw^, aǺU ?aTN9nD_;VT9X`51E;QUˡ{ yN $<80d{,@S8T"Pyb :ƅH6: D#ca=J)\ v  (b ,wkC4'\|DkA VхΎ’|8N ay&H.SLH)\dLysJභ`[s5WsA7c;?];TgM%Dr1S"̋w;5I‹߈۷VՃC<0"LXݼnzZ%D"\H$D"\4#>#D"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$ECOD"H$EC!WWJF[2\ym\ad|qEX%IRٽz#\^NMKM/H~NK/2\I2}7*gD'TAC00Mj%Mjh4h,F!' =+jwucVx1UfSg2sgrÜX9 #$> p9"B "pmYw|>ZTT3fy;/Eg>w|y9fnrr˟rsA#*t t1qE f%q㳴Z\sٛ7kL\rTr0\.LJFQAUZ dW~| E ag;WQ˨r7f* arf&odrk[&M. OCs5/*\HI["׏Ң>%J@Qa6jR_4F=­ 0* f-^Zb͚J.gj/(>EBRτZHpa*NM"τO--Kr%`4E (w8! -nʕ )lp2g,<ŧBErᾔĮ/J2Y11g7l+@$W'2\IP/ܹ[>$Wq 7\3eS2 F~e7WOo_rAV%D"H$o/R|J$D"H.R|J$D"H.R|J$\x@rt%PcdDHH9`Drt%PcdDH<[V)$s)f2 R|.x2= Qݯ?{Y/[ZJ[{/B3/:)~~ﰄW?x=s吤>t2QO i 1 %d09ԋvQqь&=W?|o} cSYdмyلާKGFi_Ɇ<GvuS4xOc4=NGNoyhiJdpO<#4u0`1e7+7e -L"LaeM(z(?B kM*֣Pt24n\gvcn'Aך-'?r 6+F&CBQ]'w4dU%_w`A]u\.V‚{)b0"!ޝ;6Ct kivهƦfǭ77a`yu%l߹ +TmNg3~wBTU:=yjm>}O`8F3c]l2BCNw=H=VJ:F$Dx/xCi5bh82P[׬2fm2~ x)=ؿk76t iCӊع()pܕOɯnY!:uRb:q(2`7';a+*vjo '{(7pGs%h(Le8Wm>n6̺Lzl0a2> ~.u& \uR# @<@,b#7,Ǖh, 30zk w_mAu/⭦8q\AmMƇ+>be.F0;qTЮH1ʟƑ|i(эg?.~_Pl7Qc?9gB._XN㖫qrl,r`5 1*Sv%7&}gx/ܵPQV߽vs1 |O^z,k#DOO/NǗ>xp-7{ }tL!(l7?A{W'~WaM޻{qWl"XI, PbM }I{籣'gHĢcPEEa榘Y>%83ßN_@R:dZ=)hmmja#yqX|1, [kOMF|w`$y>Ai8eS8=\3Q^Eq ^}Fx-O =qEGcc_FO?7nhI|/e8 C`ߞ'p G| !oOC&a,P+A@?؋/}+Obۮp -^ ׿OKx_f䝏7C(jPC xϭJ+޻(6KHh˩Y`'Q9}OrrV45O~3EfTC֌OEƻ7a~ {M#o[ Y"T?Y?GhXg~Omo}_?|LƜڠNsIS 5غ~5ny{q;gBv˱ԄHj>/w߀;P8>Vy!mjm_bCxs4Wo?>B,εj0jdPWLJ"E1Έ^{o|z{wYG<ı0Xlj8lhʅwXe,g>fc 2|90ZQkы1R~Gl79 UQ{ϡ7j Ne&坹%F2?gX`h)r>X^Sl z#N<3-89J.^J|wD۟<:߉RC˽׾?=^J T*CWXw)'~OpBhU09Žϯ؋Nݾ g_ėi "?K.m;|'AP-ۿa̓ou'e{܏xm-O>#|(q& BTV]3w"+]8Ӡx$T'\cv\nAE,@@/ >NO"XƐ")Z!'ZRE[u|0WxF-gYm 5zҳI S.xez$l;5kLvĒݛOuD/৿~|c(Aaq9nnߍ~ un~ i^ϓ@Bĕ4{Qئ#LM#9>_#*b?fVVa|7܉5{{aaWradigne1:C'þc}w~؁v:Rd*g_?~?b)#yXKjj`O8342i5tũtq(FHR9?=Τ,(*n#$('8uea=ߢ||po/OG/(;яo#ٝ ?~/?!B&ܴ!+sHD۷۟Ǜ} 9p#|jT;g5ӆdi,>Xgwl[5@sdž*WQ]f$GV=x~x߇?wIʎ ~[?>%8懸kUk",N%0bl(tqGd2 ᛙ3{n\׏ʲApf ?SwrkB."-Wcĥ|m $I3*ˋևkhRwKΕ`( ?w'_WԼBzX[ ?~=,>_su_ Vه0sh_/|1ѡn Q&\08ƨX*HWnNb4Me$ lf%o`wY51RZN)N%hǗ0`%Uټ+982BJ O"y$`/C]1$(|[> v5noqL08<遯jrLH9oWx&+~)kr=[P\\R)y>ˍv {f;gd̹3OltCso(֌5Je2..fħnQ /)ʼnON;_~ǚJwٰ*,f-ooQtAjގWPWc 3FFɩ]:^ii 5p“pP1%%X=OcH" ;5?9$U<FǓmW]“ڜ4N'?,))؟%\.gw.y#[>F|J$ɹ cЕC}:E"S"H$DrS"H$DrѐS"H$DrѐS"H$DrѐS"H$DrѐS"H$DrѐS"H$DrѐS"H$Drѐ"N2 ͕1$7~>8vKWJtd-{( %}i؟}I.6R|C":sfO><^{q NƲiaeںɤ#C+Nʏ}SgӒ38/xqF&I~'DiX 5X<]Ƿ'-^h>pu: ŋ)$7ۍ1V$|IR1LH;d/~nXd#1/vo{ >wsd>w"ϒ=y)~: o7bGS (wdI(I^sJbAAk7mo`4Ԃ[@Rk)_y5}J6, rs# `2?+4Ty§ҀHuSXP|9(݇aXzA?T֍2UCka9քo H $/ b8$9~Ɨ`D0){IHZ(FMQH>~(_((?cPSv4QVUk:O΃^wuPy$؃ XP#?ڄyMpGC#GeB[/.7\V*FCA|A8=S#M؁{޴vzZѦ. z [pj b~F|)DyL?7—`V6Ng`Zx~&dt_\@S{E 7\bUVb زd |3 f`Н8%~܌7bccq)Ed/B<4 mōkG6Axыpx9[^#>:1 v {-T\}=VU#c!Y7mŮE7㏾,ФhaXS_p# z_#\ ] ZD#ObŚu$nxz 7?_hn 6ܲy0vo{qU7݈T~)gu׮ї^ADNהT۟%tո-:^@eJ,[Mkʶ !4o@[Q 7i'=K[n{;^92hz,[=(p-6WjǷ#F7/tܸns4TK뮻6-UbGcXuMXOمȹ~_bX|1,I&Bsw ׭,4F{Zp*+#Cxz]u FS`,ņyV`ժXq VUa'70TƦ{e"IJ[>D:ܰ_%vN)7wZǩ0#smj Q^>I"isIW~k5kK/~Gk4?ފGF߭_|O;)7_`GG^ƾ3CeN)GCq^V {pU+q;um)>Hesbk#^/+E+Wfwp kċ;0ͬ Lt7"-ցGjy. îBnc[ee!t{7ohv8v-^WCH*ZX̴orĭ-pKco=ŸNÛӗot*VaUI=k ]"wBS9ӗJV9py(˿'r⶛Ei /GpbaSx7ϡy<Tm5vlڂ͵Pa۰}A Ș ]7[}еL3ÕD~: ۔7_bl+*upQtmp5HNtPkbWC7Up$.Q,խY X+Fp˚`=}2imf^l*Tr{5'pkC7`27LPe~wf.0HVynڴ .w6$1d7,=H鄁ҜDAs5G#@ÛpDU݇1׌ݻva('E<).zeڏ!m *H:Vk/A$ \!) Ԟw]7V_ 1{q}@foUNk iN?x^Ld'nb d΃`efJZF*S2i-6}+TlF {ɯŪq J*p-7=U!k}FeTi^+W– ͵xoEf ƫnÖ<Vu|@xRUT 6#ς[W;DyQGozh͌F(FqMW#e ؐ9Es"6ʃL7-ːW\%1G^ "h5)%[X257?rى %*k0=zj\bt+[h4 Dvj g`0 }בß$ѩWL#O<8J!.޽ΊGC\;aW4%I3|yPO!3=mx{Y~@Ž/8<԰Ѽ=>X{>";(TS6Wk)Mߋ|?ݛHpgЌ&E*/8qHߎI# !ާ8XX>W>~-‡>XiǿY&a堥BLˍ$0uR%LAGXF=IDbY_1DZѯYKqYi E6'LZhUvPW4A DH]Oᮏ~ ɆW9%YP _6"C ÓMCknyō<m9UR]:2T X}5/6jEkB43:.Eq{x[9,.ԙ?bq8rH FhE>uFrQ420ǧ 7d]ަIW-pGqy) Zzc~$5 ԮBY VoX,W Ĕw<>ap-kh/:ڈoCK ^}/CzU(ÆU)<^6ǶCY"!߻M$,%ykơ;J~=Q[]{:g^#~ ( jW{2N<i*̕M$IS=X:n&NHцXil_‰q(^{uʓb][`ĂC"3sUr7dJ\jyuliŮ{@v۶CF>ޅqdLyXVet=6 Wr!=::t4Tt)/^ھ'̳pˍk`s!HATixFhj:o[Q@Z̨F4MsY[FBcq[nXcs҆y:;6Ni7P~ ط5[?H=[paMl]f>ы< UkշxNu3w8 _^Q 1*5sJr%Sxhi8ÔOSmOP<&b\6cqJJr_@JT87cغ*Rnrgbz:2aú8ҳ8N15*/~޻w8孹RcQٸ J.=47nLQ-/(kc~1?& 1e"@`>A?3确:ʮ} PWU h7&Vy(A?qs'IDAT6[A1L ?5ZapJpo'";Eu(ɷ#w(f,#s= ld'DD=7dD!yp/"YRK}=pTg3֌J,jyf cj?+fLQ\Jk>A䝩Y?8< &I \-qVQ]@&ѱ$; &$)|Q Ü_ K &AQ8죘pnºjRWhw&G|J..d@um5R~/O_CϹ gi;Fx2:Hx...ECمh>hPzWvv"],>ԧK-ht⹧3/x\Xd˧f-j2Z>%sm,).I|^̴|(%)ȖϹ- q9gAW"%EƠ+Ňt##D"ŧD"H$!ŧD"H$!<#$~ {GˑL2ad05҅ƶ>D[6otÓy$Ewk#FfX\^)蛐a*s^z=8ev&p0xAV^H&% Cx#b_rɤ'£cO<|O~uIǣ]'a_;ބ$቟P|~KѩW9VHyvbxEudƉ]]"^)Sdľr?d|zY;ޏgl(̹˟Ġ$X`:ee&~o3ᑅ*1N" f&L Ms\_t'R7.W^X3'ܳ(ܐysΦi$o1ӖLRAMaeM'4ގ֐*5x쿟./>h@Q~>}uSÞQJT8"6a\E1JczյoÜ,y wCYSvh^@> SPQ>Y}1!VWhnFXiiM>՗qwXu)aL%9bPhUgڔBU4ܽ^aҮ^ 19Eغ6j~G>H,8?o`sBY@4~ԓ5ޟ͈%T)z=MX;t'ڋ7>Vil?r~sxw#V "BExܻx=e4.g??ELR=t'e`ާL?bAe^{ S,m;d=$BwGGܤMǎ82 ᣇ4y ɗ(!9'qj3`#u(NQc6r<֑=āplKn^E /=`u4'Qzq< php~:q Მ KA(Z68f GIbagC- x_\Ĩ#5n>ub||ii f|%͚<t c_Wv$Uš#{+$"x ؓNÇCVV߈C`qG8ƫQ+[{i&H.Zk+! rQ<жq:,*%p@b?fs`SYDvVW cn&ݱI")˟I.;s{6 &Öb&!:_F)tb%%O |8̨-DnЂW<ɿSǕ@G#Ƨy$o|y:_~q>$Q(T!չn,ĦC`TuHKXb/9qRrSulJ0B0u/̎x@@"VUL6:#v"3Mxw7`]<ѕֿγ|>u &I*μ#?Lj$ vnFпBvV& \Sw؄3R#nLo9="5.!*ڦ }dr$QUMN ; 9ȓrbPm\IE=X4ZH-ݎ4%:*0K@V()J'] r6I\&: ~\ڊ-PE|QȿO>iFBL„; ^| ![6;3JVX`s>AMh[+F02OBӯFL uL :jH/!gc) &[i[Yn2dnFz ]Z@_(d HΠc +%H31'3XAwG7[pbOAx!ϾEaHOJ@ E+&%:l.-@Jm5pmS&zʮc`Cli0=EPHKjL`ԡ@A7 yFܚ0:dk?mΧD ׮cvaA )y/؎A(!53m% d?1~TQ7UbBؖHCAŹy'bX]6s#JQ]aQ"=+R L~ r~fՏ` l*̂L{}H.@r Z;179e?J6䢷 SSݼjcN!]N 뺩< 8! 8KB@qiE 845cݘWe]g wH4ҋNP\89AOs-|>{LH[E.NiKVհQ }=!4|w؆ =W ֶ,>a}a 8#[l? $)O񔐁?Pݒ"$[]y/&( J7k$oWڊيާ#5&v`aRs+y}GZ̦(>v;rc[b F-`FPZbq@77|ɦ*|!H<qHd2'5Ql}ع)I$\p"/M8DQ[|N4 akM9p8l>#mw~ήlQB< :cw8ao vi-f*:Src=ZϞZvc >>,=Z?օ7oBJUY?j}WS81W~6D&߾dCO?E$%D}ˋ ˧l%S Ý+Ŏ/ OaËxp_Y(^ܸzɈ8'oTD( pt{CeI7E(G\83 6-7Oa %XSO56^9O _ÚF*eY, /Dg+/[g!R_`꣇=NG\!/>Y]M>=.[WϞZv?u|EY>L(n:IOQ{W]{lzСg OƗl |yvŹg-Bz& A.`+x͑φz`y>p zY1sCQ𳟝Y+Sq+H~=|p `/ˇAQ$ޯW\\Tm|r^n<bIIuG+/,DR5Wå p8'Co r۝6!mw7[w۝6p8p^pv;u9 aׯ)ÂDaO$dCG{/V+> ?=F朑Of# {Mhƍ5hǨQX9?pςl4c؏)~ gŇk?M|?^3.]`D'^Fu8rw<-.~rFwݕq8_.>9?pׂd hbb0~'Mô'[jX^t7͛p6cO71cSHT*r6BN.}~S41$:p̻8|r)뷠k:;; ΟEg ؼk+ &k#ν&6pa.*uňMh*t)cs=.v$XݞG4P-(\[ 1 6p{B0O`6EBlcG>9p|Mq{ ǐ3vb/D!0)}"N4kw44qW f[EQ +_(:K#2A<=1hF LӣXX@_[,C*kne7morA^_¬?'.>994TJj}we[nj,x8@P$ җ)js8 yz=DGF 7Ə湓Ј V^0D鄲 P qnuSPRgnٷwN!-NEG!5pp8 A'ݽJ$? JĦBڍee5 )CQ\Ҵ\(k,n-QLJ N]ܾuCflݚ;ss)Ljo[7qr߁Q:9ȥρS?TLB8rlT&p8_`_;{UI EZJb΋tZ  $ pqs<ڊlEVFjd/Egi@xFsV!ç/vV `'^f+QbXRGy_DRR^E#盰>  Okt OB^ ]ּTNB%.bjگĠBTkGzGU"~Ĩ阰hdTNUG|Hx2Db cd6=N!QxʗVx>}] 'p8'p8'Co8nA/#/> 's>9nA/#|'u!'-e|r8_.>9|r)܂^F'up8!mw7[|^.+/s3u K,rn)K&>Y\/2z?:瓛-wn//"^@fuǗy)'A2祀 J)U^DDeNJ<:3/2gf^[amEm%.&,v2 Uca~?̫V( h"Gq^H-V; tqJgƣ Z ab$H:-w/8N2 D(Q~%j+N vCp.l_m +oWc+x!.N+yqam2YRQC04^hɈV||^N'Xk+Q{qHGpV^8AYGVVBTHKG"j'/vKcv=b X ]UJvD'>F|F Oh&xJn[ўZJD$6f OAzGmeBwH6#l?W$v>+/9'l^"v_*{'M^+Z1+J 23[xD?c8v$%z O6${yQ~<mE!jQxV[y3B?yqV굕}Xŏn* @΋Zx}Qs w΋JqvQ;y k+w|Igm% m YY/Vpxyγ텳^^Op8sc=Xp8݀Op8sOp8sOp8sOp8sOp8sOp8sOp8sOp8sOp8sG h{01nG)~_J3>?P07 Dq||ܿ.*]טķHr x'Gg|yǷE"~|# R~ۗ ב/mpmȬ~0.`f+(|a?}Plwu+F]06 N}qww/X1Yk5Ñ|S~{Qo0`wG6E|y܂?]BC1i?<5\\9vRcX%яE wF{ds&@KmlOx^XGvn S.L&0ۂ7c8=7rdo9i"փU*zU 7clܾjW]/vj/OŎ>|mlLSG=^\y6ܥzzkc=oeCq|!P(XhY>$,h];>?Nބa$Rt|B7`Ј3g -iUFB&L-QE5?-W$H̀ڻ{UHxMqk}ԴiA'C HWb3$:G1>؏`\&,=-zI7~$fID:Եtc.CNV 7?҆)%"V)ke_9,,N#htY,{@#ױLqErj<$A,10.Z"* #'>:W:?OyޅaaP+-u5hSCj=-蝘8`jD=+ATT4bptLGZǒ]$0:J:W*;hlŲY[3N+(Ip Λuwۇ;6qJUvvgfXCj$-h*|T$ȣ8:>QՇ!)/f(B;Ut\"寙KjƽtSݓ@36:IL\Ȉ׉E}8 TKq6XY6;,j>oC,S`]%n/jdg3QZkg}:3BeW9s' Nf]dѹkNA5UhO$Sm_\@S3}H4Fo}eY@*Y7#!F6 "1NZT7w`&B:Sg S@bM4dEC= (w# T`e}KH:#ua*`DyC Fhuv >}"b~5TP2b(XyaݣKHLIu `ꁽQVՂ%M(ھMMUoWWw,Ī8UUt$(BhCА?iFM[?HJoCoG'KhmŒCTy4 #=& RWWw33֩^n=ǗJ~ݖA,Mnkve2N@}&WHq\.mN^:bdtH 6) 2LxH 6݇y'JeXE>~";(17ԅIMCr^oUa`fc #oXpJ;fT5atMMAaq DG44iY=h&1^>LXIaE%dd]}}X ?OXk j Q쵡ڪvjWm Rc}נR^$oJ oMORIek#3Χ81;hٸi )T8jPލ9j7>4uqI0(Pu}#Զ-M\)H@/74w_m~&64Nv% No4{pxG*(O+o¬-0x /1r jUi#~%cgI0Wo1OıC[[q#6]AÌǎņXf'q~&*~}5Ed_ve0RVFA6;4L:Od09dvTVt FQ?'7-w)14E;[Ilϡƃʰ+gå a疭spcnQ2(1]\D'5vx ͑oSxQ$J7o4-Bn1o߄]|^E2ރFp|k:&ۨ9 ؾuĹꎇ^ǯzر65ؾA4NZ6O3X(/`򽧵cxh}6'SCZcpC30?adeP-S+v,n$ĉ[G˱iNؽ[3Фnr Bi` )IlKZ(d`'c jzW"3\q]xeT~,g:.f{OtCf)cR7UTeC2xCmѽ(#L9TEKE$^иS'9tUކQ]W@$fۋƻ7M؄WoCa&&k%ز%%ظe J Ӱ݌amn|T6bGi>Fj0va Sz@Ӹ$FdS]*!;ۂv Uwه{ÖT5J3$i+GۀW_9 _tLcl}wڠTP~ C83>ik2iUP'N S<^oA0Žf <guTO?o@CHsOב(Rݸ5{+ؕħ_a "*<FPskICrStpc[aYteC!َD (TXiN6a^4PG6XG +ǥyC9(.v͠0-gnj6\H? y.ݖGm,Kܐ%K_Emmg.$Ƹᒧ䉣Zqy>`@=~ub[ ȃ=;r1Fߝ58 Jdn1F;aX:ur^B=j@> J?:bHT@+i]{d!]LJ:sWb"c'#?OPM{/,a>ãk)Pg|(x̝8?3g^̼ tLb XhC$m9- mP:5r>Jhjhc) JUSC"IA&)2B Rz00Bv[95;1z u^d$WQ{2>zD11QKg5s!(MRH)nR3y^D^E:t*dBX9MؔMBο P &7u cmGye=Uyjyu@f/ve <%$Ę_DO0QQQG 9T-6@C~1WMNض44Vkj!^ u|0-Xmlj㻡CN~+mhBmM%Cq "U;5YGZ$]H (ʅkzS}H@!8D[ %%$]B, ct }+KpS:3+6NҬ 5!D5khǒLeAI"*nH`PcU[Q(r<}(хP1. qr 9P76<&zɎrHsҌ&tuu#Ϛ8T:)8\x10̘YBږR)L.`ȨLh l.Ƀй!\E"Ir+FRr*TkUd"u =uS])TcNiX"$3zLryC RUEuLf'>q߶| + Geahnc&ݣ]5bU قX90ZKa6ax#D*9)5$(窡e3q$o9x% 6bkA2D165[T^?$ߖE,CR3:8*צ~rR=~ Ì ЩذT $Ў"h4 8=sP=+ܶ yn,¶-͹X&<6qtEcX "q l/LD\B. Fc+ؕ&DscF1N؊X$=&MK7MF,@R*PDbCΎMiVFzI,*"rb{7m3! Vyس1 jC2J ܹY>jW4B{ժ|<^D ކJNDNM< uB!ut 10aYVW.YPQL>gqF]S^MnJˏ ,uףFzj SaдIRz )=%nT5IؔªiSv Z(IQ鐱.N0ި<_ʭId 5%XF$MǮt(iؿTO@Ut;vQ Cb}qwl6G򁹱 Wʆq{0$B( vO֫ Iƃx-=hvIFˎ~ dss -؛>e 9s?wwAJ9N^96vO^IqeGK($mQ-ro~_?m'wYG ]QP~,F|$NkGakM@2@a!y )вT?%^AH{qah)XgŁEnP#mO-ى7Ͻ~S?y a4rV+lٖ?U狷00ԡh>`_ Xh"ʹ:fʤ"(?wpޡN8GJiç)]gbqmز![K߈WϜ[w )K6VlFB[B]4FD2*hS* WK+93)]+ O!AG#k;ob_yzHeOdkAd A Vq <c}XVX|U2rǫpE:,/̞T컊у]?yK]QG,Ds!v>!uP_azʾj؎_{Tr(B9Zqw.@0ũ:ۤŅ֊ʺPy…M-Zۀz2BeEe94Hzb |z mMf#{Ý&4yE4Xƺ\Qi寈ڎit{|m uUha"]8>零aHn{"x7q -eu#/9<:e70I8#/1r=CBy}~ əq+oª}O AJHEmGo7"FrAīGkٙsj:0g 7]G!1TNGl)lƕSfr!$fAaŕa4taZ p3"_MŮ14wJ+ť Osv CKW::0{XY…>Xf.;0ޥ!45E|BLST'QFSIՄr!ZCWK-[P:8օuajՏLvw $rX:gPvuwp}L !DlNFjkFΈ"F:9>ڌ X<q 7nb5T$ݔ OqʯN f^Uڞ1Hפ P`8\p͸Y'>Q,^[[q^-Cc{i1j/}N+n5JX=6’PM{]h:a:BhL>­݀9;uV!AӢ)rPwm,q# QǨoƍ$fC>0yeŮMQGg C|nN\CVE2s{BC> ##wG1݆+e8o+$`_H" .PGpbz](k.D (k<5(AE]v|=*˦Am2T^#ڻ(ܦ^J;XFUi A3;;pB*n5ݹ5݉1<u>Y>ov4^XWyj#߂l(Fg]%j^BSg'tӾ!ҐS UԏOFZj%o!\tԬx!^t\DSG'ꨭ]>ĵiֈ>Y'X'*N 1RjG] +γ@m N.IS R }V!Zͫ# `B\j2$'tݐfqVLίs"!=ZŃefVQSRm+f kc T '7G47Gm"iڑy :HpZQ^;t@P4;X F ]%z0 8%M,W*;PgFscIG8PJeOiHeY@FeM%$lAuczE<{6C-|9pYdB a{-KX ?$ ##궋ڵrZL1{E,uB,~[ 2aJ8{X1|0K>SJ>tnznL%)ThP@ŠOηCˡ{/OlFپJ|֥_-<`U,I۝lHU>gtMFpFf`HBcBAN2gv=$_n >?<@BʼnmJl8`]CGU8/Uw} > oA=s"[[g&ag1-xow3g|cL#m 㻠au~}Jؖy0y)Ȗg f(tʠ!}BYL~7pQ3]9uౠ9!>$w'ZʫIۂ҄wؔ67vCR(pdf:η p8z kp8ο.\|r8p\|r8p\|r8p/022>;y-1:8#/]n,&Wyk < f`vWzx&ɹ ]knbv5ؗ0>ߋiD$B ƧZ[!@ہy ޠ!Kpe-Xr~.cdհw.?!`hdBx aiv+RmL׬_? 3g g)MkW~2!_l9BWqf1Yin,[ἌmFsSVA=]9.T7±NW.8YjzHpmXB! Q㷾F5-ytm~B~T}~7Җt}uYlZD>[@#Fkml="BhgƝaSxYD9뫙쾇ȯ`}dh j`{N &zg,mW[} _O&DUُѶŹeaxF `z ˯ׁ+\5 W8Pk=_ j |O N`Xrrr‰P:FC@l4NCX2L z4[Vp8ወLDx/~in E z?a.(k]{|:61[mw?(ċy`ǮYח)/pQZ/'C.%8_t< yFwl]d#ҹ8`np YiH'G$z\X8m!}jT><>Vv_? ؙF>`^byyP1[PY;M//cCtUx5?.:-(rby\kf!`.Uʮ%CA:jTY=,~~u.'琬f=SڜuC* ad-H*|MP4>IJہފ'$C|xK 3h Æӊ)l(La|L7ĭqtCX o4I~_ 0؆wZUZP'݀ W2 ӵ턔(둕_\s#|*&TsuKLz,HPfps05i5v#&'P]DC$:jt|vt6aDCe9՟YtQ\c3#ss\PWT -v Tv#d+L+*oaJXL տ Mm]S!ے:\WׂcnY ض7ay>rt~]c-Pfx*qog -N>lص jyD?=:Nuaso+׺JiX2\xDtހ=5sُN"N@]سwrPcBسg/x ج|4]ryyv..{D5 +ڛ߇?9=XBkȂza h3py[rGm Y{bh]aC,ص}/߉٪kz@N{ 64Nϣ&4ط Ҝ}00*q[PЇqܨ3QSq~?} X]^:1Łccg^X PiEG_{?~C͘QSY?[ũ-R;a=xvĊpSH LQ|/ƙ9.)>Hy89KymޫBut$0JCۇ;}b[xw 5#6`N?9Fu{gyμ;҅_VVwd$&3i?}rHܻ@|*N> LVo^ؔb2h$ha4 CT#qXFNM?69]%{og>Y>|8ڛ8^HL-={7Ⓥ0EGe1غɣ8sdݕ[cKSMg/&~OmCz.p0 v^yUit5ü4G[?!4bl?`{#8Oqؓ;]Β9=jCb̷UcJw=Nj%O=puŊC8KuT*NBR)[`=QΣ߆ww,ž];pid+q*ο.&;͒Dפ|d:"ʫU {_y54^-_ÏMX][9N|IQEo[1m P"8!j(xEo+1gN>aܹtS$"#€;1᳛mXN`oUar~~==nQ!LB٪ $~] B^\r߀Dw!ܾ{]Y.EQi.bX|1HKa棯H΋ϠDQq,춝hlr~5/凔Lj[,ͣƬ\$|pB$S*'\)3oA;[_zk暊4qL}9jEN:Yz66F #+0޷XL7yÓFxر611' H*f dbFSr'&SIP,>*),V+Tƙ1̸4'[B'dKt!x!(R7 5B%c_ ␓O%<%؆y ]Fh$P\ ݌ % TjF,L%`n]'8`!Y,#*Z{V4߃tPqCNn/DBd@P Ǧ=0DL(RcRqo`gj `xKx ڑ.1tW1bTX-D  L|.uZ` "7C% PR޲cu)׳Dl=fٌ$!E!! ?o3Y!83ou?$[OJݼ ԏaʏx@!K۔-LQݑPAtp n?O 0U`Vo7 K.BrpVYBRS`΄**owpG9H]e9K61hYy$& ZEK(*f_(n^0 J6bSB &|^T'?;Ūrc1;<{v@'''B  QQSggW l.)Ꮘ- Mh\R/O(=6N1F㢰/ſ܂:p2hI8FR皰XF~ub $n}{);X&00q44%r[(D>RUvك}$R4aa`exƛݱްcݎ̴԰0bBE\F\Px=e)OXi" 4و%17 jW:6V6waOC?.tO!))XǰGodBǹv)3ݬ–{{l/g(B`(uNRAh ^4S26EŶ4D.DqyO~j ,XPHn;[:>8,b,J78A(LG 6XR`ߎ"(qPf5h*UTNA6[ϜyJX/ƖټLZ:a$(ݹ@fb̮=|%cq{I!ЅǧCʗԐTARz*ZZ&XH0McS| z5Q7l z8al6PgvPLnsk[l.0;ҍY_1^;3?(abl!#jg 8;1ne;|颸 "c|@SxY!m?MpUy|2$$bcSCN,H΅Eھؔ1j 9ze ҋ6 ?3 uGBfq)bvxNRbeC7+ȑ1 c@b5bnf!KgfJAi~.Rs$%Gp$UcPc@cNJ=lA0YbЫGLKӸql{MRGz12x',FNQ.KH-Fn^l=eؒn}Xr+Ga1YTRc݈`:F1bW `y}A1 2,e(r[EwJ}[S=2,.;ľ^/2MH(e$@Km+@pJtMy(ش YiZ]q(N߳ Q[Eokb6Ɓ$$$ga:10jAN~6$Nru( $TlQ4$(d? Hi`rci|'U[ & IApI( +o(\Ws[u =p ( {6ߟ K&'<O j H5ڭ°'XC%Ee%8SO#HjDklR6m@`u}Rⳮ"ӣ05 v.NG6%Oܘ_ttvdKp J4CѦDzRJsP[~ cPfo-dXk+E^f_  F*,Iؼ1V/5AJ6`Vv6j.k,Hž$Vb`PYہE*!ƔV9ILG1Xnu`dld4/y:@uB3MimzR3oǍ Y َb_,.%JrK+Nlۈ,)^Yqb{6df 7 +A{e7< ;AM$^ rhg:@ul>2v؋q숣z^%3 ! 6=+HۇSt=evI c=cS0%H.r4@>3rᷭ@̄Dƹp-SެP>lȥ9e:{ 9']2y  )/X c=s>EtKed)faOc}Dž؁_}pP i&>H{c[D2~GؑJ3k>#̜ߒ k>r esTy6K~Ǧ孏-fR6Ƌk_[=Oczd*cY}ӲfyjƯLO 8=-9q92&QvY!<y)u;.<>gqQ:%x.a>v{uHD)^=$*xuk}“ Gbu :BoGw>d<σ[[VO͸x&.T5MOpvOc7dY<؆nV]mŽC#<( SHZZs89/狄@Uq!XW-P+*^ F+Trq0 | xfaCVx騗ǁau"e\"R L'0^e=#\|r8pmwp8w .>9p8 .>9p8 .>9p8 .>9p8 .>9p8 .>9p8 .>9p8*ꏏ|s8p/g :ŐH$>.>9p8 LVv\|fYLz[h4;p8ہOLX,A7.Fp8pL\* >| z_[.sp8vf?rwtbZ-1$p8>p`nJ2{tHr>\xr8p5dDLwwҏ{Q 9p8ڑG!H$):66YjjlXp7Gn|>aC* ٙcy<*>٨'{m>++/qmmmJNUfD*\.}8cB466:Pyά'W-333_/]@3IENDB`DataLab-1.0.2/doc/images/shots/i_add_metadata.png000066400000000000000000000346051511411446000215670ustar00rootroot00000000000000PNG  IHDR.r pHYs+ IDATxlgz'׉`8Nt옖vJ`w&%A@^TlK:&|Xr3[qpJӊLE%n2LJdgMN,r!㥤/i;9ߗÇ6A5B0P!cEB0P!cEB0P!cE|[eڅmB Y E|p/vVj(, ^9qjT`F.n[p]׮nÊX,͊j?w%Go:p8ޤRUOBqUi_/aEO.$I5;WE|7mr8|^U.hʔA/^ ]ERb y)Aw8Bqn>1:>S.ǰy04"+cQ<A&n-E\5A2=Sz!MCOPSG*<>9+&F\Aʼnh:M [K*I5 p0A㪈 AiZMT51jr&©@I0RSdzxV#ӆ%/@r4ybu:% L3{O0h+: trD?85wuQ&ze4[Jj P~͇ϋ.iԙv[C:TnII)i9,ݪzрkѴJݖՠQ(٪Әvou bAr.Ψv;5XwةdM%ݬcOvXK6AXX<80q `%CY˜tccEB0P!cEB0P!cEB0P!cEX塈,"gRͪ>qCşI5*Y aОzn/h(~z̿Ϭ^ xں$CTxBA#KP,ƠY[ggRcm3SK[`MFP$0v}%h2u][xgRrJU³]c\ZU~V4&F>ϚJ.B!TR.d M&{iEǡ7b *%t8R^x[Q,G|x3>ۦ~R8kQw$EՀ+]]{(IVՙ_{ޭ7%u(P9Bqҝ.uI9']:G%mt A'pDOKY$.mj Koݖx@,X4WTOexԙ8mͤ\N2%q-4Oe^8sN4,{_퉐s-XpCy%%5ǵZ[(m!O#y2. KUByT eR-?^H#L&/ؒSd:5isJ_O~W#V ٹ4Ɯy3tB>39W;IRv# [eutZx}JOc\K{*NXp/9epѪUqXXdNp*x,U8P? q+:ЇZduGϕj{d^UZg^} 8+i:K2?˿Fr1^E[ƼR[ SZ=N)~NJpĵS,VvyI޲Õ4ۚGBHZJe>,}Ku{aTqMkSoѶki'MASC~=hx?2-XH~%&jI=jȴ;VE-,:-]eD_CdVXIΝfX:g=3ϢXY" Y.\WO0p8|c-=&pt]nIuiʘנm٪x]XkP$i;hA[D-)i}[f ]йixGIŃ v}OopY\>v+XbzҫRWb%,Iڸ8En`P򡈏"0y"ҒOhMP46Ba=Y SD\!(KWӌr,ZL}SkE 16jkd&~,ul|̫{14 c$iL*fߗE#I79۔oΫM%YLS:JT=1^fKwxBJ`z+o0QcE$m0AnBR &+=wKSeMroi"LgG:GE'a"ij~lJ${=柌 Ur,|;%Ӝ,G 1vgRs-n"g9QzŊ[6>%)MIϣG(Χb+IYbZ8hSe)`1pj[(ռCK,UQ{UoQ3(֊2.IzP`)cjlVxJf`ETCW4ܔd*U'u,EH:TAB̲6ʎ<-6=h%=q,YrL.%-a6PaWa1<PVPu]Sf U1B>¤'Zldoz,MXiBLK5Ҏ͛7n 6~ͼ]EuVX~i"EfnRC(X">ExV/@s@fXʇ" CQ$0x,̊`ȩ۽mZG#N֭V42QL]G|4#do s¦ޤ5&hږ xp' 4$必jlCFK[j=HM g`EY֮W89 nCMAAhu \⸮k҃°L(ju KҼJSƼR|aZג`4'"Ǣ.θoƫ(m"瑄(Nݜt]ūO'2P!ږzUMFmv+g`%mM8Eh@pG|xR𠷴VUՠ|4F-XKho3g}#vx9"@saÕ!{N"rrNLqe&y&_LMf:ta7XO%QF'J@jeué@f xh,EK۬(+oV]s{~3łs5,u]SJ,Q2=-noለ\^)E[ƼR[ SZ=N2(3ph CvNݿcrNq]w?GDDƛ^ƛc T"oD8( Fop8δ-7[.M-v6"[uZBD\K;L8)MsGW̊n%mj񎸶s'wo\K^VX+MmX|I oY{ꩧ?3м..=6 yZ`%㧞x̼̊M?2un  E+wVT|gE`Gm{l+~f[}eˬ:wjB0P!cEB0zWPSfgg\.Ǻ- `Æ 7o^RYh_|8H6lذw>[lYfٯWr{ݽ{gVW\sܓO>ɺP~___>_<}c%裏>o|eKYC`n˃M|/>g>l>[&or}d;~c=nٯHNù=o~?\||o'9_x?kcԧ9ѾN$w<~`3iKr91#q͞/YE| PjhlC./JG~B,iZeŒt?g[+-_~?~sf\k_WPufYiP3Ks\WP}gKeC6[@FR[RGO(L-źꫲ#mDvr|ϵA+V{<Mr91r{Νs(DĬ}]}HcX#CQ;InFm((^mLݖ7gbA+N[f޴[j[( 84iLcy$a^jF*; s7Z^K,`xWEۚ\٤uĜˉdf\N]u{(Z h:-E">sLh錆|PPHZ>ٛL69OjG(^Xs9 h۹sm_eJME,rGMB{i{B(\fJsihnPMa smTE(6f49{vLNk D(2C7olͯ?(2jB6wΉ(Y|w-G"iERj|UqGmFW~Ah=dO=҆mD,ld& F9\mvyE`# ÅLMB7o(aH b~MܸD;^9HSw4[NNU_L{ks\.eEs5~#-bt6/}z;I/_*[v/P~eqX2KD|4>!MJeP5)Tk]9Qz%4K!C Y2RQr(Hfjrk9${߱hjگ*[i/mćŬˑ:'6z].Er.e|.̋Bn]^?Oh\~#o眮$[iPr.%mZ2ͅ |u.ҭ WC՟P+cdbojn2?TjvW_rnˋ,Vؔ{igPj bw&H" "9D1+3Yx蟛} iqX^mr8GgUp]Td"Is%JVui[ͪӿgR^ԑ״2ˤXՑTRg!# gE&KC2m6JuO5/477WcIpGNLn4`)3м-|p1ۯBgZ@헿 \ >x*E^?"ۘm3US~{4~(zCƍ/J*iӦ>|pe˖w'|QMf>wݹs޽{K󻱋noڴ_҄tB0P!cEB0z{rE*k֬ټysٜ 7ݻw[PÇ_ Ew.!, EP#1"` % ;+IDAT!GA(M""">E8e#@ÂlbKk׺%8hgp fot?\VԴG}|G*|(D7KRR̒8 "+G¬Fcaۈ2nm=Ǐ{<vsTe[vsJUv̜`Eq``wUn|w*P>$]N$ju LS) ${~i\WO0*Ohx)#ͭ&G:#|q~/锫]i^>KŨBD#۷NgЭᅵf {[+^ v6mf $Znݺ'N'?)Dw}'?ɉ'{챊Yaj IÇDD\K[8-MDD^TLi:ԛL{qNEP0|kfoKR?l3ز;ۉ(35-mܸ qhƍS>#cM=éXT{4r'⢟T_[[#4+^Kʹh@+DY ET P(9]3q""~l${wZSP>)GB/Lݩ̇R4?Oa&m߷Ln`([1|@ƍp8.t\׵ 59aމp~SpXZSAy{ʢNmrʏ\؈z͋lۥN;yG/_J\mW޲7؏XF԰y PMY^fff.|^V?3/l c4o%8P{E m0,_ Vh͚5>d Çk֔4wVyg_}X֭s:˧K[-@X tP#1"` C(Vk׮/EQdѣG֭|Y/:,Xt޽ 6Y tԈF cEB0PTf::ffߙg""R^%װvK~{b'hsuRUrU u((FechFa%JPʹ]UHR/J<y/!28r kSvT&@C(""}.#;F'DR7o|86&b5<R"H$'9pqZ[¥p|wc!P H$m\Tyv G^E wwɁff8fٽr_[ݾ /%{tϑjT@:BލvNQ݋;z[]H\Wyk_|14f utuHoqKj4셢޳S [{o\]wrSK5s|x۵KS)^vRsa온+Xvp V]Ϳ14CRk9~; !Lj+Q{J&@C(2PjY-kݾ ug^K$N}$!{'+Q{kީ+[\X]dxv}L o\]/yv*/u~8>3߽E0ٽe N;w=WE"ĥz\guߌv%"dE ŅLXRTDBx/37Oqt n߅C+1G4deTjMm`cnn'` kJaG"0+ZߞYo/+iV,̊``@(yH LK*L* atvPlU^%D̤'ZMU!^~YJ= ֨=G BUu$Nrg2,5C%Kg4]|CK=8-%yK N'Ѫv|XRI>|D"x- z5mOA(" ӡOɹzvҡjώduuPvpd&8jb-7ϲ`mA(2`%ᦜ?SowC]:TM6jA J{b4L$,|jҲ̅:B:L8;Dna:T Wq*OMتzfH?y{B;|=px_T:/N7^u)qNΧP|kis%?6zM]룕safѾ^w}19JOi?/7t!)YJ)g:%*. jͤC9;wٽŠ1g>H}h$ƪR=K^,3FuJK?l ,ЕpSTWqCUYt:gG?9Cj=;?4۷n߅|ގO%KIH4-Mz2qCTvᄂ?j ҡʂt+JJtfE"` C(1"` C(1"` C(1"` C(1"` C(1"` C(1"` C(1"` C(1"` C(1"` C(1"` C(1"` C(ʇ" |UY;>=>u&NKxÒ|ŦTa=u&>M.W}em~7ssNW= R-iINJpĵS,9h+OSvbQzJ@z%9'%I X,>6AX'xu+V{mذ -cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0P!cEB0PPdX7`[|YM֭;Y7`ڴiSGGG65/faik.@@(1"` C(Vvs۲ևw96M~WJ 6o޼v(P5g~ zkf~Fx8!7gݻw~-[XIOPrܽ{޽ZF+Ԝ}]6$,7+Zя?p>IZvϽVed<̒ V̀Ǟ'_fN9ʲU,k9vV̀a8J4m(yӟ4y:lcĪdYÁ+Yg5ڥn?p`V<=]`/m?.vËjKϾú }/g {?|bXlz|"~1OIx5yt͚5٬Yz;_Hc݊vg=nݺ٥lO7l`$n[s>v_ɱ~-BxH|2pލ1*e˖w'|rZD6}gm Pf%Du[k~g76sν{eݾiӦʯB0g!cEB0P!cEB0P!cEVWI 8IENDB`DataLab-1.0.2/doc/images/shots/i_analysis.png000066400000000000000000000233011511411446000210110ustar00rootroot00000000000000PNG  IHDRtjH pHYs+ IDATx}pzDJe)C #5bߝD5Ǟ'q4-p0azZ3=g5wg8Eёڑ/e;2-SDJZ D]. X|~>>|[pFFFAvر@-ЯDS*iMMMDՐ$Y`#dGEt3eNB\q!pr  %AfxgA?^L߾9>2~n5w\g&+y ){Y1$~%W.]k/rwW7O-mO~S1B,˲,m(e4m=M )d 8lzvyqs?NI8Ÿ ?Nue(bmi^n۪ǎ #bNnwl+(Kڡ^ EQCfY! 0 T=o߄nWN^[7 UTIڸ 2ѵHQrt` UJBWa PQ0+JUYe`m{14mZ\0 t^ !44!G&! Lr}ׯs;vÇl٢H$`0|_W{X[;117>=o6TVVWWk>N)rǃntC¦(Uj| 5ޛ[Y1ԔtA2OLi03Z|Xȭ5/O7r"'~y`_ontΝ;!YuhRB8MY BF/RP-BI|Mb>f3o}zl?pcn5aqq<2(h &҃=R?Cj H ΅aK~G.~|C/Z?8~{w~XM?z7.||bpM7 젌x RmA` 5=w-w+pp?zHI >v$MAjOHu\~H`Y6e5[yF ܨdǎ{/O}YA f8|8+MIlBA08AR \ B7 &mtyϼ6[>-6333QWW?2.ʘ {u3;EEDGatf9_d21UC4A"P@AvO͗{'?9vOWC_OsqZ[K^t )Rce9 &E$<pa:؞Psɗs|Y\]k Kj4V/,۠B{{;N uX- ܤ)ׂ0\ L.3+3[CẐwedEULВgYcdV-ݾOpǛA='N?{j`~ցm6 ۪?CK+ CD u"Xժyde׮bd0kVP?+_UO4=ybo=gef۷kO"\܃!Cg) 0;\YZ@ї &Hp_;c;HU BX G&! Lx,'-kbD%Z^VnMxd"_d@1~Wcjs@xf8fmi[_#k@1m"O!U/G1ojs/]H>h(SÚ[ ӑ]/1BVtp՟ PLˁb !U B:X G&! L"Ygv2%Ƚ` b>yE5I CiChs%Ma|PѶ;3}R]z6R@6j,N\i"l'UK!bUhqw4.93z%zd/}lpjl~6i(l˩j,"+pC! N"DIP0Y`#dG&! LU Mt=Ln*:h=.u:BX+W$7Ln k V5`U &! L`B&ut 49đP`KMIU<{0IJT=,HQ:ZIt||/F` O{1KA_ ɘm~4re !YVT-9ZeΕjsJTOK4{+o 줖ZO`ZpGR>9Q]ZvouzCVPJph$ccG]YS dƝ')U^B*۟Egd}D#spn35_͌@8ju @YQYW:VY+K<3^q~&T TOKT֟k5ujAbju;̙QGؒyy(+ڟ2/j#kJ{'irُ @$B(x,oX"x,0Y`#dG&! Lo[iY3Ѡv Tל@ FX$K͂@f+FPv.VрHjT/IdZ25h4 m/@ hˬh@*Z:ɤ2V*EZ&w+L@.t|0Ah4ȸ|mM(lς_@Ҋ(Ph@$e2@.P0Y`#dG&! LTaR''R% WYamR R :C?e2@(h\R\V> Ԩ $As5G0!ΐ>0a;N])Nq5a& AGURe2?6&@8¸2 9f 5@`gO˅2@?B2E HEPwnYAN~Cf9^x͒B=E]0e+'D2P72J/_vB,lCU BX G&! L"BUY >v}c29S4 R1A,kUǷRt@t ݫ M72<ѐ|kWǷ9U01G*։Eq5K<3-˺h?`&+eʦ^iH1),fu%숊˶hjkYt.Jd ?pB(x,0Y`#dG&! L{_|xI ED&sw$;o6o0pN%&D⠮ uO$r m\S>mΌQvx#SoNL]8Jo$t++$aUbv'XL @|/iuLw,$M'K ?yxwCm,TWR2Ä ^]@N-Vg0{6Pv7[E Q1#j跑W6?u-d)⥏t C">ۤlW4_5SGCd\MA. 줍Z[b 3t@moZ[Ag!7D:~{_>x\r5s \̪㓘}c49c90st۠ ap)] Bmu3;EED;rHY"3ycc{td3ᗹ*t>kZ,՞ԥpGOfS#;$EH&`hnI `5L:2J>b&G&QiE071oUN,W8]{? oLrQN*.KҼtZ(L26~]AGH 1W\xqddѣ=mÝ\0~T1O(DՅP&k>qA2#~\PJ|mmC_vmq~z/Ɯf3߂܏/*:AE$(ؓ}H49z8Hl rT5U]7z츙r8}d쩓'+)h8~KTwϞzY{oQŸFʃWWZ@Ñ;ϼ|va']mKÑo4l]xm5+Wv}9|KA\Y_b60Y:.N n+ǁe7U($.2OLz|Udb6>klhn .`R E T"a~]WWg}3͖3M0SMz~nzJ׸#>&X}QN uVZY(/Bl{? oLrQN*.K<տRQ_d\ƷJ1|%x衇t4_WW@Rn$]2s|bDU/TrUV-[)/?ϋ6ٳG HiQk޵kWIǁ ڀk#dG&! LSSS?{s /?nuj[ݽ{EUuݬ T-n5XUukKJMTT6GE:>e|m9ܗ[c@Rɲ'~y0Wg3ħ%a`3Ĝ11t!!R 탈/S }j~ƭS0 Gv`^veQ_Om)XͫI9`26m2PK%CfKMMV5XSÚZU#Kb7}L_>ed.j!Wm  kcYMz5ԭe1F;gjNMUWVeq7k>TL3U};imi}AaSvM#d2kkv9+H m| sϞ٦y;/o˛?/jUennns"/LwNe>9> vܛ0l ;($ baba*_5No~BsD??/ho>PޕsoÊ;@֌y:HX2|9{_m[ ++0׃CMN6ŽSJ^G*4N? X.3BEQT?$Sg7D2.ӟ6%0f0MY>Y u쪩ҏO~k+8St Fe lw7@PQg׿ lGʆWbݙXy`l'%_Mvg?"фr h&!TU,H)DՀs4a-8}O:,n4mmqk&'עzք#8#S'܇nƞC;.4 /~EoM9ְ_U3Mu|CFAi$G3 (xw&2KQFQ]}_7>.i`J[٩Y)3bNI9P0ySB#t)].Z ҧ5Kl=5e|<5MرKc,PlJ}x|3͜>Ͻ)O'  HHdԔ9-_?o^ gép<̗Rgy2 }e MQH%yvXOڦ`sMձ\$Iڦ\?L~ }IAA!s=%2ؔQ,' KK&WӊK"_YloUMndɧz-+qx?ar"K:sȰJ3qRKM)ls*ro§]^_՞eـ0i&~GEMWlu4ŹPqN*6 Un U%l  ^w?r%l,> Z?gke:J]hv*S8VB uSǞ^7mk~]V/ՙ2lF?*qSTO /<YWQT0e,Ĕ9L$kק^ӧS.:u΋g%jH,g[VyT"T_0nC/+x|L;6AWpL^SjAABC˔\ufRvlK]Xk/ÂөFlTyn:_!yi2/Mu.S@58צ>,|@ζ㓗NK])8ׯ'z \4|aj>/݅[b,NìjmPriǦ>BZ)90~ j޼ni )zdz^5u%gezNHσ `es_42_>@}E`n$su^ssHJuaa ~ \m짺/̗kK?@AFJŒ =^jg\69۲\zJ$y06\K>J8g<&?a2q\&æi̗0'zDAiA! jhXk x cL|Z}~rdéjFưmLu٩Y)>6|lPF%#~:X"0r ܚTOn¦"J.~Kdj_K1[ԧ^MHF7-闕/M{.w@ 1@5&'9~. !O'L>u   HF0EcprIK+sȶ[ڈ\  r"MAgj(̗7Ty\  r rc.Kͦ-e$f.@! \dAAA&%   7)lniAAA$nQv;* BV  >iLv{tt4ǡ$ڵk":tM@An4S,ƯzF=z  O?r TWW7gAnB{7'-m   P҅ <ظ7   r=rO:蟛~AAAfhСC,˨bloZ*++۵kWC_$J)1VB!$LK{cz)sV Hs!C  c?UG6z+s+^+m;ETuQ(XEsJ!ӧJնŭcX;8B^ߤV!Bc&5KKkwmsSf# Ͼ=mzzF#|4hSl1ĝϘ~+m׶mZubtCxՊ?MQؿA[ ކO6~-g2 Ic}@8eRMژ?EBA S?㪌U_mD2\e! nKU ʕsQk7|,t T@~88Mz ۏV6mߑT[hAwظ{Ҥ$DAֈ$MM%Q7V'O13TW@|n׵S1bo7*|@{ܑ^)+ki[%V05BrM+uhd](u`*I8An DQ,--=t(uid =lطaJϞ={|a{NP!> e)6bG ظ۽qʘ$]{A=sZAq҆r'O 6TY,p7'SڰMy 5ta`st>on|K M(%%%۷o׮]oy$I*+++))ܹ ȑekSv{笞w¾zzwߴIIK afҴ}/]IPaX^+c,l(Jr2 \$zq̔Y,ow[4mZll_rAe8*sl6W8b9שCDaa:r}eeO?v{qXzŸVE>gǵֆ <nxD)k>z~sƭXw~tW!` st>n[3M [05$bbbn8]vNʕ+111!7`i4f ǏsE 6{@ѹW$N=eZ`pd؞XSƨ vT ,[4mԹ3==pTsEtnw~{ڛ )+0 rQ'ɨ`Gtyy߰,nj/שIF};o7 OM6ZSS>h5>3JᘵMaOMNcPm=' $^Xk5mz%Z[[cm C^;ќ ck'lV ~_v(Js#@#۽e(ڰ!{OظVvCX6kρR {Q;*%&A&X㸁0o86p::9W ee݋ w.3[@Vsˡ of_kܹ?LĊ,\ZL#+Ml~3B!nܤ[L~zCE'ѵ/ .l1Brx +~9Pi-p`C0M߹o&7Gh9j8rPwDx^xH*/!W(l;vsw?4:bvOPFC#s0so6Ѓ |J략4Piެr=A4&V$nhAB9m2vOSɟjNAi |"N[]XAޱ~۬F1IFa:JJڮYck_b..JۭA- /\;tv0NDSÛz栌᠔4wG_qKOnGv\!vtw^q΄eŦpkCz`Z='g=~#ȍsQ~ǃ~ƛkNgG>OeWwlzAq1hz!cvIz2 Rd$V@.J1U*S|txDd}̊=XՎ߳'[>k%ώµf%D98Õ>^25h1oUC [WwzZڎkefTTlcMWa}O9C^;17?AnxN8 ԝG! Ҥ@p9~46(0]ͦ;s//RDDkGM:y7|77O`Ӄ3f[E|φ7{ng׵P7MgoiJkN]1X-b-mC J/Wss}6Z]dwڷa?zO_DC3_gy5F 90  R^^3GQ2]!n@[ִWC؛cYk%}k?6-J90j@Dd cTLZJ;b۟Y3SGBe9f8``z{grJ5\ߜ;wvTXdy]}!ݺ ǎ޽֨(G! r4B7ݵkNA7W0X+<oE}7Z[*4gRRph^ Misv " 8qHc^Y?{ ;[lCAI ʡ9Kx){O ~D?S9Bܼܗw*P*IBPwՀՔқA'~= M Hsk;wkىVmC  7 A=7eȷE]йEwaOtyWc:kڷI !cjmxA?Ί,yY>{X{oVsI@  H#C&;-xϮr@{YҨ]'?wwT:M*&DA Ng(K ToBA1Z!OGkOgiEL &B]4t61kq}AA4B3L7s3>]ŚDBr1FBHtыw_ }hhB1fYkZ}Hw|p⺛귥:QWYF' ![?pOhp374Rg)#wkf<: ([ƷmѬFo?[37-" ҨxxV Ӂk8QE#o,j @|z?׋F>ԑVczP{KRzuc1˵stYaًcZ ^ȻZNڀ{=TAk@<1gN~J) 8$Ygoh4 [Wf|m3`z{3gRcŋ}؟ QScޕ>rꑑZOfo{hd._;[377Ν;m6_AI87$IjVA5ff~oiӐ놂UCRT ./*?}c`˔O*Bs_Qz{ܑjJkرw~~ڧZKCG#٩1)ݿ;VpHB;pNLvjTۣgwl:zn(`UxOߠ7RA@Z5ھcjYxO秦V+FAQ/^Ec E )~-tOWZoR3e$׾&~$1G}6z'صof1M1fsd$d|3?!%=pW۹\GܭSŽֆww ea^L`>y5 IDAT$/ }e˱/}9 baCSc7gXZO|zu\g7dNyG>~2 ģ!7:G^MxX3v&:wܮ!c̀G@SJoX$2hc?(ɋ?CLߞ yt]nN6s:1Y+^,Nogƥ;56ۚ6UG3F>#ߞ>ЏMZ!q'"׏%÷37Թ3arn;NSA@'_WW^}DLJg=ڹ94.J3gNZ)|P&=*{ '&GԷ3?}I=|X4VwbgƦ;;otz{׃'MgPΝU_/CadX& )廿&J ܬW^dڽ{_}U=seg϶7 K,c=Чg} ׯkԬOM|JMI^xJ5\4qPρkV;نzqltk+MYn ]ȍ< qC"{k|ƒѥ[Lu_Pnf|%a*6P;\kLd>Z!xhVZL'>gاwhu&w]JemN6롈zw&1 Ӝi#ǯ,:ណ;4:-[ T-+oVc:ߺ!FEFgolǧ=dum^Y`놬`MxIKlJ)>-Ĕ9mZK H-8 [-ŋ+*+}E_ )8 lM$y*[~z?n]{ӦW'^&kܞc$$% !p̱^R!pg5 t9UЀ*1DG67/_vlIӹ>{o!{Kǐ:w>Wч nj);-Ryg(1!]]om8`uM tB37ŧ3.z]Aw?~b=˗D?|F74xKL}jJw>3֮s\u^4m~UzGOBgFʵk.ZN)]hڵk++k^<`siO ;@麇S? Fp/::wޝtq̚lV!Ӑ#BDd8@ɥ+UTtW?[=&TEnw} +Tp9:vpLgIս[Ǒ/<*- z=@{cz,OQm h)"2_L&Аx3`ғ}1s֭r:xC:{Oe ͮ~`bJ4~׽tWњO:҅A7)~ n5cn=%=ۋz= (vcsz4QiyOO<.ZHE}O<ğlOG;LN0'SN DTTT$$$$&&1xpۅ o;t@iio*nOg<:)?ݶq%z! =]=eiwzZEAcfUG@,> #Et9'pәc3x4d(QRp~rx sRA?o TO{'zoi ICɽxg0=![u)L uLNr1뫲 tzysQz\^n;7JxSKWt) t_I='ZgzXvBK.Fҥ?ʺQe[w|w{'gM~jqM{[v|q?8D1@01d$پ%|4 K-;aXJ<9|w}Ux…kDX}3fZGf]@V4Ħf){fQJWWY^.1ӷ\rPGł5sRkwYs.{;b! :.8 gw%qd=s0tI%u\,5VR 1S/Rj=r!&5[ -ϺnC0YayZ%5V]!;\} -}/ f^U~2jיX6L-Tfƨ;z8V9>) +9`A3O1\uݙ s1 /Rj((;n3/c)X=[JZK-uK>z!u C)%&LK8d:W^ƚ-:~30-=pAnt!zRުwwm`x>9]ݟ.1o㬝zoj6ЦUyOw= Z5Nv\;_]7.渔T֦/}Vz,(lpE\i١UC;S^Vn1 68aj{!yi5WGRj=L}:x7tO}4 xlCuʕz˻ޟՆ9΀E߱;Fʻ\N.4t>-x`-ԇBOM١u3U6A{ ?6qD US*I !ӧOzС~kn{y~k9rd +_ݿcϾWzݖ2:I|g nnsQ;2:dԔ9ll`d 'ܧxCA0 ;\]׮ 7:K_\_r%22N)**VWW[V^x9޽{!q!" F<?ײ_(J=)ZRSFb¦"[ _/4⇗~MU͏< ~Ht5sqŽڳ{;>ѣEnp{qqq{=zcwOv%G\\{87 ^."01>;,LF j}_+rYB{K_`|9kkBĬm99+ax?%BAB1q(@ H0ϩ|qNP%'6qegf =Kjˁ*纏t2 δf{sc>4W BrSERRVu)Bɉ ݬ}>ONϳ;8r>BdwwIoتin Pu٩$d$fd&d145΋A(..>y{IEE(qB^z5aB|zMo*#.[ꀔ=. @eЪG{fޒa;>ߜ/)9Ηv)yĐa~jk9,}"FIFkQF+(!+9ns+f nKX%pDAމp<P Q(dz$6)e%<8!,XDG \~Kx^ArJ ^Sn8Nn)^)1c#G@RDQkxՓN9BGGn,&}W !ޛw#R}vKbMJ;KB(ΨrcT.!DcJ$嶠vJOJSrʭC)e:dv97ҞSAڀW\~}$v#;{f|B`m3~0:fл93gv~LNsV%fx'%FAVnAeW$Iލ'IJ)8N$pD"hWFEv Z-j(Nc Z-PU7IhUdҵ *:7Fr*:"YCRUkګ }Y] .VYXӜ@tZVGjwSKjhZ-GIDžl< $@#qD#ȷ:@4ʽή( Cb7 Ctsʫ.It ._Tyo٘xBo[AYwxE2l'u^ܧ+^0y#*9, !w\qr)sXBz"PAYsKɱɁAfv /Ɗx(g֜X}5{\G:?mL* Rw\[ݺŇ(lYJv;D٦>E/٥TՏu9N8UA,DF8Rf$Jkjz jy><I<jp0 @klg153Io)-Yz9Sj+qF#dSr9dABRe5m"hJNLu*"1X9ꮎc.5zE)\.i ĥDP4%TJ\NF.E` OE>ZJ) B= \%aZcpD(5Ma:IR~7.YlUօ/jHuljᷰ$DdJoCd](Q!SpDqȤӎ DQ*rMAW[阀SjRh$0(';{N^ZjRTaJQp8CHAlvҎ2lhkG\s*.r:H7 ࿩vRz-%og_O6[} 76_TWW  7KtO>mڴ__x5{A>yzsAioRhYYҥK+s63[!)A׬(sWE_}r3WϨ[]._pjB<%`I5l%^s)ERLI`rMR%`S}Zkd3%D8o**Y%>m@%J=51/ U.iR)EAդc?4,T"j吤(;HeJzfӥ!դ]Rդ,x-9 3G\Q/eW`VLuCܲ ҈s|%_dŁqq-eX])U)T!!ܔ`u:)W)ʤ6d5+QQD4K"™HLR-rFReM,ϒr`K @J+pD*UTMG"Uje`>Y;jɏ ytDL4R2(u:\r:]Qe C(qDA;zKp R|J#.6-MR+=5,״ٯiY=RtFBNĠg2(HF͍̜Fw6e"%:7UӢQ-/< %:=TՅܼ! 4eֲ(]Crtҧ}O{b.w[m-m F嶞SJW O'8 zo߾MghgnQt8&G{ƣSkAK-'@:oOé)"GdᢒT𼬰r:H-HH]+eS^PaLpHrIh568AUk@E*,JXtƸ6Q (J9@KA hMt N,Jy A/thdÄ[nj**Vj%ԠkYkdsWʡB0FXfjR,ZHI%Xp;؜kIn%C $S `MuAO)U^R 'X?DYT㈒ / JJL^c~ 0YiYc*$Yq\dkH\TPQ,,(U%$pPNt_PYP6ng uʺ<P*W+KUɚY^g;muhӾ勥G K~p|3}ڵkttt)<{Len`T9ӲݞjokK'k6hi3Aև:ׇ[dSu?pHʜeeuFKܥoDQ=suvV,\N)E9t%JJyBE휓 jYp:s!Z- (ʩ伅.?(%*9 QB8q3)C'k@r᥄rz@nZc} Z{uUm9{,ݩ%Q*VJ(^k 8A/!kjSʥ* VGtRsF`Q.5)G9F#lWv"m8IࡻvTB86DͶ,7荽a~َ槼L|!vEi'{?Į_鸷&r7@2@r EbY@Њ פ.$^]'-8_lI1OEcg`, #h 4dg lAZ]NT@dsP DZLR8B%'@%yyqE)'OHE(%h :De !@#%.T)<:-T%" lrV Z-|r%'m$ 1٪FR:I9"DDSN8\vHb^y0ctsJزD]yBuRSPWE r#S"exy(꩙$D];pr8Ba?+`?4`8Y )DAR))S,)@Np:RN'PQPE/7Z6P͌i ((oMUSxٍB2RهIJ]7p!8p#Ktz}u,V5U@8R^ ơcGV[<][h7 rP|T?Ħss|u}* ]kU=ʸCN͝kPNP-vzoZoAA*;ZںpAF֡CGJK4ZߵȈ派!X5+zǫr8|ϨqKP"ًI^mX,r3[ O=zVgSsb]1flNS=Xܜ=[,eB=s5qsXSg,lpHA jz'f-c$3"}yMHt% hpLpQptBBKKA:b._._"ÅY&RgY9g4mѴ&UiM 5KdH6;Njj*I^w-9KpB!N  r*KNzUk>dcS rpB62IC|:9NȱdWדWoh8c%U;1ɐ X42Ą ]ž9ϧlWw1uшҏs_{1rЂ=R߷kedEj?Jyp$N)T[@$uOjNQTYuPR}XR$M9(lV*%5D: _ !aZfg0`.*5UT 1,$g"y:U$e i%c>(2%˨SѪ,3 zQ]%JQp:@ f %y&:4T5S^̝WJTe+˨ܔjNQweU~8E&t% Ef U~E6urFeWnR&%]G#/%Ow(º # +*l(P"A0?ڳސ8N~ z$v%~{g/{ǹ!_~6Bڟ:L [Aq }dp艰U>|% R0zTt G8!39}k ,?9龸Fi8yf߭Ah`4C{L =C? 8vq;ڻtsW%Ѻ#5*k\!v07cL/O/~&%w OdC[M*Em L4n|+ ]XKʙTT& Q_laI{cY=Ĺ~[qM-V1 ͣ>I2W `(հQmK+^G/A9%B#QJY L%"Ki4.ӅQ]38hBn##H.,L*+AҏRT._._uR% ݺݺP(B„Zro qr|1VξrIE?KE?{/J>L_BX*LMJB[)^J/FII(ohQ-.UTJj  KVdюڵ֦%ћYРJQ%mU:R0I#r3'nJQ9 QD%f"=1K; `VZ*E`K5L 6;TUNHt PUUU`KHU\6];*QY;*(%EEd5ZC4Y;*:e tv)r-^`a8ApJ&@Ի:7$?8nőm* }g9}X\/g ]jU{Eqslk4`V˜8- 9{, 0dqq+qq 1cƉ0CYqIE9qSaF5.=̎<so4,eM-$`I A$sRf ΂I1NVZbpH ė[F ,غKin]UGUsdI>w wӾt}{?s/;w|ߓ+nig}XSNI(o!Qvv]~_;c/WGb(sZ˿j-}R%7jB=2k:VF.;-S1 ZڧHh5qt "Vkl RP2iȥT(7LnU*`hU6&;<)}(gi3V#sG(!!uTш;bw4t: NԷYXA|]a0)jEJ\~)e@ׄ1ip}"(㶍Z04N$  淎Q+*%BPwB Q!VK8m' _\dɤIo8{G޸(|_zWVV+œm޴1ӀWֱ6۾>MF*5<~N>+t ;B?_}{zzH_q@K(ޣhoOYzupO<waŶuK|y7sh:%\6q8uR6Ŭu#(o F-1ŌuݺX&m L5glCӮ M`^840y8`s ?)Yc&ƚ2fyaeyTYtHqR\< fz_ iȮH$όYA)"7 ox7c޼Sw|O}Mp1.X~kB<+>s[" (JȰxܼWRĘ}؉ f*)0.>  6:L/*j0IͲ(5}y-+2E?zO\DF%%0TlfM+d Ó1t{? EPORI xZ|޴a$%0orD+D O, 9faR3/ŔGx%u\ ᅆ?.~\qLU}v޿b/,gScą!…_fm<%(F e7mG:]z=__5#"DpZq^QBalp:-NSG /\󓦌.^%8hwvu]!FAswQP/ qfW 5s?ffc([$3K~XFTxṞ5c<q=n*MgHlMр1њ‚v+Y*U=b S'!,qS*OX GZ<")׶|pM60v# &ikB+65kÑ`^?0bPMR*3JSZ_%Y'5T1ðwʏmÂ[_LY]ך:kȫßF7}G a"D8Ӹb|N[o< o-[կON_ZI_`y4Qe&>ͩ$ RAdo/j6ryQ4dNǴI ژox*d.i}\T({Pi@Ld#7-1}f4m" O}T@0 աFrG]:f.h,wTbQf;ʓIT;%r8qGc4ʻ)5[0S[Έ9׾!*B'}$兖( ]|ڼy+~Ҥ9@}<Ƿ Ov;a@eKz`h*ih:W_LDvuյ2$OwDŢ * K>wTRYl컼*kX5Rsq1Rh>B"$.{~fSNk: /nS8MlLWߐ,ojK`kxSl>1}lql@ @Lj٤`ζ]ޞĬ;V0νw (kPo;Z( NQ$dԈ;XDѳQE&!ӼjOwjh(\E>eATQzC=G_g޼8NPENP5*9mS$CdpGU.o029p/hy戈[6k;:cy'_{~%+n#25CSS'^kcoo>xFcr DᤐH$'|?gy׿ꫯvmg{t"D…4ݩb 뺏=؄*S28& N_WͿ/}߾}s9C?EOeU?2wzk:~ӱh3Its!V`u֫m}lmXX7k9SYim:k:6{yn$fiam]wj˞Oa;=ϯ}BoYUie_3v^#D80o޼~-/*.ү}k?Ϛ7m4uTv۬YdBciEz-H֗8Hi^H"Xv6n`byP77g6FAJGI̼w1e2d P:['[R%HtRlt#q:"86` w=}*(Ɏ]weTHJȐ]K%@y{ƪH o.e*Z)O+[186Z"aqJ_ursD5lW|~W 68#~Pֶh@muGY8>ODȎSCY]Br`T):Nw11e=!7J'y MsY9$tqlMHp൶DHh#0Sp^6ř)E?]¾F@|q]/vƐ Ν;oц}>*3] .rc?7/|n%}M>_H5ϽaP+<XI|/dl^=u[`.l4m=mAmVF%m[ݶ!{a,lx]n푝e"vW^>0'ǬYf͚e>ϟ?MnV>j7_ o 'Ol>TIY r}"i]X4&<稨h,}xsMٜu0LcV=  Αb|2-\,1+WfDUj8;^ fLwOt z;M.!b9c"͋D meMEhe3Be4d mP0LQdUFYY;j5 pG}玆*#_]>&u1 兵k"b]췩(mj wTRE$KkG Z嘣Jad̴a٢IuSJ ɬmhN7>BtpGnBپƊДBLxfq6LPL".M P"1((*{"U]2 ~z ᐔ7|2Ă)1u-Y#kswM/Ə2u޽{ly<s67v1TtaBQؽ3H^=V{ڟ_r '"7|huJߦ~w #[x~c,жڝ'j:3!Gp\s;j#[1F#D8:ز?Gز< "Dp"c@A  iR W^;D>4i҄Y}'9g\h{&}(gM˽oO>wv}ɗ_̼+FQ!<l[z=[{-[cՆ=6.yB? yՖx;Vs,}u[V5]}wݶG:ݶ{ PF?汪-h{~cނؼhZI!tl^޶uTԀ lig!¹vϿk_tR_<;RD '51hCjPqaړY=eCyY'c@icGX{ !&N))8`k˕ kŎe@*6sٵ0mp,wTJ8u1 g٤BXha6ej%D!6E.@w0QpGE wT+e CpG dʹ#pGPQ UiHHmPlUcp_벊)j:g) U}$ vhQ"aaO@sFHJ8 OT+U3EbٴP"Ș_ZQ|Uӣ ;(h# C&d+/_3LJЛ~&}ɳ7λ;[%gp _,tJ;R"՜P.6ipө1Wؼ{Vm5,Ȏ;6hftyW _\7U:vѬ[pwaVݼwIk^^Y5x`Ks;Vv`hnڍuId&50܂sW׮ khOkW'"DW@KJGpugo5SGL('('|hHe԰Iy-% @*'>' ټuB'`莊3*L'9a<< )2EsUr`77W.s~y'Rr+v3JmĎ u {7seDMC/TqG1{ԱY3TᎪlX2I$,wwT q(VڐKCQmEe>QۄB:*pM 5~<QwZz {AWZHm(R$m0QƴH w4+ɕt\(&-z&Sqz`EK5%M$WI)2*jc)0w4P* "r%O¨KX*il2Eq3!PJ17>( _ߡ!TF}a0dB8}t}GR<5`FrŽ?;e1 ^}_ T!,˿>u߽c˻o?n+Xw^бy~n4(ձ{ӱyhؼcC6vwRX9crZyG5K w7!p 4B'y?ŬYX~͐=]7t1B"Dq~r _ND?IL{C_O/y߾ 1-x)\Zf=`/ xy5h8vx-v#`۽qۍ DݻqKk^[ ^~wm_pY¬*l[OyON 7Dzeb A)h~+ yS4 PFk"rG͙]V11aD[Q+*7Q>X'tugeVJNZBhm'  6$=8 lBx&!>I¸008 IT0N>!-jBjPR}BX ! ^۳p^I)&iM $Fo&t:նcn/'g`{೮-B`ܸqgE׿Ɋ1r+w;sQ mXqg{ oTeNiy!myۺN1}fTVω8BjPNІ:Ѱ}2jǙe@~FDOh>5*~dȲ%R[AfG+8"~dFs#L 's5ڤϗIQ" 9&< QՆ{(HwTZBܜ8 Nu 4EJHޓ(zM%>߫n7DfHbwZi3E5EA9Dv0TsV[>P"Xyƴٓpm4);aGC.Z@*:Q?buG6@SB*.02ov,w!uVFTuW Csk*b`ܹs/Gv?M-npn1~;::w?裳g>30}+ 7 [0% 3bP6l[#ړ@W[FO\I,"h@po<T) TҾPnla,.T10X o4Y>" \AˠTpD(HvEiMd"Z}]P_1 ߱R֠6 El_*7Yk[ Vwbm `ż3et_OO۶N7."D!BӍ`-RTbVD2ZQ֔=O ˆʌk-0 81qb=މ:?c&|gKypG2/㈬:-&p.?x$9QaCY ~sށ0MF]eIΑcwTxWfY:+sN6B"D!B"4h=ST LNf͚[:B"D8OaBey|MQl}q\x: @-qs1y"->ӧRt11ev̟ ؛ŌpJ)|4/Kp/tu 8S_Z IDATR^3:Ha_]L.@r|w$ҋPOKIb81 %L(NT8mA̙ev12fJ]8S&DL@]?8d{t6g1ڤ b1'r=q0] VTZ⃩W23Ff_68RTA6Yl:eV"H,P5"@V7~(Dؤ52aѪިYE46 axHjẊP B g}"()_e4`G  GmJ*kMRq5+02FW|HHE9i0lp(G LP)?cFT=mQ0`|k2!pWرcl!BJz=h1wK}6uwwO<|N * ǬѾ(|62C'Qjiޔ1MA>~Ax71UozVTFv~5Υ^KT3EM ]f4E)M< .Mjy|&]]ށCma%v0Q+ɽ J2:4w>ϣ;:&bx&cejpfw1e2pG(jbSʪŀ;pky" s ؤAUQ׺Icu/C}BX#6(hPhYd%3G`ACpGA~׀ K&K(d J@Dži 5$L:a(q2*OQֺXhѵ_̱%r-x{] EхYLɄMnKe]aLoZP 嫌ZMW~~R\*]s,pߵk>!Q~%B"tDlrHqqw\sDŽ䄳=!!B]̣ ;xU5\Kձخ}׮9Ì!BGG>'~뛮o>7TƼlJ=q/O~zP["] Zz a_{v=h*FtcqSR‡29BNJg\̙ _/vTɼu*:'t>kZ5Stb2Lteڻd]a.P}O3`0ahX0zH S5s%8.qG0frG=O)M#hsGsCBjMJGj%:WĈj9.R[p>C`(BFV(1T-3@z|IO_VEW|аޢ^h:j!#dKQY:e}Pt HYc "Dd2EJ;4Lox4r7y-w~5UJ"@vΥ,LTCo`lѾOP΍jؾe޿b߮u_>5l++l_NW@z3pdf+8;_^$?HhGͨPBC?Qtou0̑4j3wD8Ku]4h?lJ5OXI}G>mPO̟Z+j9GhO*2qN8 JEU*jףd 8B*2RJP M4e@${do&}>!&5 vޔ&oJ-Ԧ&88$[RM%ۯ{bk罹}̌ )~:&L;;c0#SyyyRͥz ::ZRv0YQ=0Mn&7릤w;֭95IMhB&%O'NhOq=.ǑRڙBf2%ΑN"`Q*I$VŢ*8fε\V2 A8ZJZJ2 87Q+e:f>J̐E541nZA+23)qJ`-.Ks)Mp+K0*@;: p; @nP!cyLb?3?WlثAp\Pkh9ӂrA͹6+ƩGj*_dGi`5IIRvv&W+`*&4p%\ TLЂQɥK1cB\F u\c((b1(ң1貫.'Rjծ HB+==IĘ72ks9_f&kQ 7!ʺ׏\ş;ik:~xk4-CGrN70`O垺}où\.;t6\.3[H ްݺ㾕'7) EV޷և־nLfnT:waow/ڑroaom*|F 0_u޿"~ Qǚ]s%WzíƷAKΏ7~kɱE!B:!=/mUnۈ^?-Mi}e:6][M#uPK=pex̚5k:hr&~#nZjoӛnqzmu6~T-9{w1@ F_Tvl_cgmN?vz_G6>gKn=3c;ud6PȪ6CQvAiкVeT 0 ='ʨC)hW7~h8 Zj4Ee^Wr1 wU;zb,_6lR+-w4W5Ѯ>qX:Qľ.3CrG]o(( 2z3Q7;:ni%,%I>wZ+FV2Q[ qGmj%=:-?-lҐ% T=b6)#i!F biTTDYvhCP%UHe^S(| XL@P {QQ Ԍ4Vʨ/-W(U*[FT)a.u020V/&E 5ER; PܴCTꉥ~dov|ȇu ;.f$k>+3t+O^siî:+[uzX5v>n}߂>6ETLsmMN!sO w. u42ct=Vs{Q [Ynyht~8yE8#xŜJkѬE:=!tiqFAp[ z.8C1GKOKZzH U(h5F9N!"dJ9 8j| n8$'5zGzGTyJ<%eK44Iн}⌴7>0E(t~fu=yoاcК)fz wT{zU-)3 w9UuBrGYrpPȤIAkrG]O X#(D\K%U.$!B@wTQF厲$Y]:+|E%WKqĹ 9r5@2E6D}Bkҿ4V؞m f&ٵ5tM~@ *)J5i CԼ qG5ErQ 'TJk4g3R"-RHj3$pf0E+Pm(X(1&%X>S8ph ׃gȭZ %'v+ʰGޭhM w6{7?rQF q;FHmQA~17_?Rɏ¥ {?y_^_jջu~ߦa“}~ܐ%>t>MrV<ϒ~Ѫqp#45T˭ 62Z(d:C)jsG(r8djepؾ>Oݾ\̓{vknBelyp;0EXvpnù wLϡ`zc} V޴wʠEeŢcfMnmpe~Ԭj`N&Շ`(Ge5dmϙ/W޴FS'zaqF<)n5h_>(5g-7B*\?5sDzƿ;[l[D dҮ@[s3e,r.Y<J)jyPJS&eW=I1sJj!,  zN 6`=0y"[z v1j sfPb6V$꒗||dK=R WPsfGNLD͜&*`_#i+C}g\]<_@bPDi \%|%  o@ aI̞ @dc͌`V~iS8NA%OCٜ+77b\ AR|=i\ qLH2bqZzִq TF3Vi2EVia@/ LL VP){{bx &`L9P"ܚFtK}NJT: [KJq`-ȥ@LQ^Q1FPuL؞1A[xD р1~Fcک2-YU{*)5qR\;6&2)ԥ}M\P_van4΍}(\W q;K@vPCulC+[Qa*`6R>0vmSGgpYu|#Zw美oO]5 kwwpz#ey+O; B(,˿w[yѵ?ohm>=oﲧGƵ4OdoJ=fB'2l:_a59vܳlf߂CQ9B='q-mQVF7X5J)o8!4UT 'R2kLMOh6;|7x]?ұgl[|qE++z}Z[ وRM iJYcVCOJ˕"RIJ*BQZiwtR|A `L't ,SJt(J/1/J8nˆBmvfG&핽(͢,;腔npz{F'>~nq3.d_S 8^ѥŒv1K%TL˩\ZTLblN8:1 Jx^[(#OЫTku ʲBxuᅢa\+4U+Si :rpGGg r+03E1LdhPAނEn[|"l}'1Em) `i]u&ϹCݚ橪h3$1vbvI;c? tW\ {[lD3̦ɓCϗ-~Mmݱ+î|6=Z#n͊߸;߾&G2OWNu}ko_P*\W S4hoFy"䎎=`,< @Q=<7mhV!wTB)=@RXW8llF Q;jI)״ўeZ.VfلXi3E4!OY&=_8hYRB4ݩR;mJX2hSU<*jE@F9, ZLQ!PNNYAĘwQ2a@,Z|k +KC[AHdž(rBi9wBeTk)*RW1*0OAdtG}A]: * [QhTFChgXet闿t%VS4pAO?(׺7;M&׺-{no̦lke@vI['{_O~9.>7Kvvv~њspjre R龿{Ufd׺b'n~|xZq;gUò<};z+p^@많 GinnT􏳥e ja4 4O[l)+}z ?;=oCCE6~lj7ʟQh%iolMd@$fۏ.ݼHY+hn_l9h r9kim8gr[:09Y8Ou46*༺SfyM Ȉlm_ x IDATz̫d[[nE/wO Y8l4 {K[8= K4oW.h?@\~I~v#gԱa|e^ ܠ:~ot1Ͻ @67{{~I-Yw֥gO ottNt(gz7Q5< Dc}ܜi]p]z(ɑ+uf3RjdH$('$<ӭpFK >-j>2h)eS}qa[q?/?>~ڝxwr>PN{:]]3^{] 㼵릯mm?N4ǚ8y.L-,2ϓ Z1IZ#Ns>4)uDd̟ 1>v98|:;䲋ОCdTFɹĮX ,]3]Se4d6|ۭ>lTFChwwTѩ(<QJk/0 wM;Q%w4mmqz;h Y;*Z[LJcQ IE핪RI '*˛ RB:u3m01(dU&gvpG'O V1EC^he@'KBCYRXIdQ=!STʪ¡¸RK8HV$9 -N.' ʨN:f)1(oUFuڤT 4<ؤnu`R6)L3*6VDɒ8 wM=z& ;J=%/JFe ťʨ9Y_H fuFSZ3U8ӅY8 hD81`$pqjp9| x/\cd_Ɂ}om/ŗo&DPWWyQk,͞w'{ Z$#؂H NI˧ҥ"LXgjt&Fz^h8]!@*;@$ nFF 5otLJHpg:R%C[uZ"0ґܭձtjgagNG$70,Y0:Ύp3!xi`Ú ;m68m-YKt;J8MHi"y(ŞIwDT i)mPFnREDp (rr!18 춴g Jy!"v9'R j?iG,}1$0ʃFT| (!"=R**ؒXiЦJB@Mt e%A{BpЈ96tL,uFI|&ʨG(GJF,bm᯺w/& EM8$x$;^*oI򟋗>';{ufY:ꨣw']?%79m7h(+9e2<G b7C&`0 "a7hmkg <& -0d_jyE>bҦ J%%psQR@| tbŎ(E`FGkm-RX҉cJ9S .(7)g̜:p&pJɖfӛ̕XɦFc;3DT34ŊR0 7PqI&pJ N`D`oIGa 2! -by$m7M.Fg̶Eh{;$,ᗨQ/S~*XC "Q@¬E1(z) \a66Q<)Ff@QGTF3H{dU^~ 0T > g;DF ݄{2*v5=|NMJ4U!R(r{+׍Ϫ3Vh:ꨣ3GG~|./_9{ܮyooN $Ũ%ϊʤҦ.L4(HW`0\liظmQpY]hak7yFTFiRm|Rq/(W>'eg}ɟ@. !ԕKs;}Ž~>G(}r*lxf$!/\7ӯ֖ս-Vf&q(lVKLV>@{ffϤ8p ]{u`$\zA+33}\aRQ"]F%S^R E]*9<^#I*"ǵK#+:XiDM玆7;: S4JPT&h0@ɭwFCw]t< Prw!ܙg:ꨣ:5rqnY_ow|huQGu:t=pzz>Owp=Z ۸{9}Y:ꨣwX}thgT "N=*#;jv0CY)шs H/hMS4dH(0,J*!y-؊a;J;5ZP:m2 Fv i7LQ5!w!堜;ڐ6rDAVN9Y(D֤B;*rSpGǦ# #ly0EcQ ,&!R"a'N2h&@ GDԂwL"2!1RGC YCद74[hr{AFˈNYDAXD1qaZfƕ0h&7$F4t(D*&8 6im(XWg ƹkxoY*Kae˱/*܋]RX#i.B0rzz?Q<ܿng},G> S/gϮuQGu+@BE"?&:PsEY3&Ӿ>3$dh LJa8_bZ wt~x:x3k&M{p5Q̈] wtNΎP,3 gg_@m-kcx;7&x ; a|%ysGLmA-ĀZgzHW_ fNWz8G-wt<= s|3gMCۻ8 ƚ޵8g=H+:;p.pGi ISsHMzu!o )Is Eu]"m-5 dY{9'V"e.AaS)I;*2S< F{*hC!BKMBppqBoͩ3eu@H‰(b/";dWjᎊ2N;,0Eт)HH~@xڰIk٤‹sG%;á-h#kJ9,줄E$U%+ŒBQAB%䗖J)..CQK ~Tc-m5R UFrDaUp Brd[6w:Nu!Յٗ&ƶٻiTWug3G~͏KbT<֩)凮[?:ꨣ:=WWIo{;SGuQG5^,;Qt%_>NMg} cM]E+_$=<'ig}S]Fr&͟t/^N^ѨG}6\:h,É׷fuQ{U#gxFrw1at dflabwTpHAt+,Ik)LєCCR+cd"PE:%{DGK3J\+GѬ|mA!_Ket(NhyKRT;pG! ;*ZET:!wTH|%1~7^1$I57foBٱW%}Qrp=~}oo:= =xso^t<m-\M b?؏\ǻ2zz ln-b (6"ADa26i|l rCt]r]Җ#uP"AIa,$%%\J;!%.nԳ"@2؞ a-R@ %$v̟)"v'N8vN:BRvFSTiGR,u:CMW'vh5G>}p0=oH:΄ڻ~fM/ͷ߄Z5-^{wWF,NG u㪁 +Oro}3rM\Tĉf6݄')cg2U;n1O;_먣:ꨣw3x?>0Ƅ!mAy.q@%gx ]4"!v oᩎO}wߚ[UO=9=yӽoY +a -?{s0F, \л(sڻ]m`7pf*^m]L DL]G` Ssa LL<6Q+3 ;pMf-ILBk]0њ <a%%rE+R2)ec#}9^%J%esΘyTeklm1Qw̓y_ʶV2X6H#>t;TbO)ZfɤE}kiH-2;mN{!Y_쩩!f=7AqHk"[$KB67f*r%*3`yO=$2 3 }3VHP,W"%\};By`H$Hh#e_J3D$`,)d2]Ba72Sh(GFI9j''lb 26f/?TE㖰cN4(⅊X58*0}!~}@XoxY|&`a-)(vP4ׁ%8a?13<`\Wa:1lTݛf`QCɢg8 B/můAMxa?2Pᰳal ?ٷ_??okXWί}S9s#;6>_q{^: ^21I@h;/3EK6PmnsG#TXXF\_EZ\]Tʯ{>ۿoWOrl?-5зxy8Ę1\X'FlpB`MNQqOj4:Yg2^g._-sز'ˈu5miħ`֚o_15:_=kwkxr+mDԶsm7mDmKWx?j[N DRm;*+eB:&HО],T\Gr:RId2"FFȈ.LCBGG) /ftݜ/oCɤ;K̝?؉dzQ<ںCm3:zޯ_ަ_ަgO/ѳ-ڵxUo^5w=*=mrCrGQݘ;jݖ;:U{V􎭈qGw_חpG k qS_؊\tEOnjЯlׯlGC:nP[АVK% ;7vbz'_4/Go6uu9pwLJżbll#Y1k5RIx]I11VJtvfV#jxGB*;cB47F.yfP5(j+e"O8p\$ 5LBF%.Nebua1Ez]AqŘK)%q`ex bqed rdx[ DЏ @"%I$v3QAHHH8S8p4;+!%ۿ;ʮdW&2dG BVvt2H1) 5Z'jpTRPRopG',*YTXX0i% E%wDI8H ,Kƙh*5Hs4d_t>|`jm kͥl-HiԞG3+ _V o36IN; BP /t]g^Xclz{&,VGG~sW=U;. dT2S[7Ilo҇{#Uņ kgm~-:T~3ްr>Cun MsMdQ GaѦ[@{ꕷgܼK>g IDAT >&xv]?խG' N̚d` հb^Ζ3xySIe4tD%,rw]CK޽0*kx)gv)_|?'LgpK;qe[ډy<'߿_x_9d鮯/<_;~e:ꨣhoN~+'÷T:8O{WVt侇^XCCa$ FPPvZ; 92R+Q4dȉߺqarWo_лkF<{o5mVr{ոk VbG?Vi k\vޒ-^~M+ػ}NޭeM6oX7چ5ZkuǦWƽ1Wݹj]Xu/5U=zf_Z4&5I8Ar+6te|p|MNδDt*vaź':dC=08pNG`ns&ooyqW,0?sŎtw*UL IG 0Q6 *r)VX JD"!0)es3>Fȶ6cYԘdM>cEh-f)Fa ̟ XE/g']g4,  Nk#:ۜHѰw5̉qRSμ9ġ,*)gL3,$\g P95;3`*h&/pq5)eoe4dhԗy'?ۼ/W .=Ξ9(Jǿ7^<Ă]O,u_m5ZOOѠ#G>^ ;r57M-G,e `>70<5HF1$5VGRjץB^yNS:M4hʀH aV(?r?r\:ڨ%&uN.)Ziz4=ts.hQռn>4GJ=ݥnbɥ M[ԖՖQ(.x'])__2m|4[[9.]6rE~_dvYWvYsfXC-e]-*[:mlVe޲/6x$Tտu! m(<Ǜ794wwB2/tr{;M͝#hk388GFyzO@K?t:ʧD?v?vJQ{_84SK3(I)Dsu.syJ&)@}](B\R)JX)B.%\rC?f"CStt"j\d!Xdq@;Ze LQMv67VS48ӄ7ٽaqljDM\mBk J4vZ;2EM[M :RCAs$'SiLXPG[-T#ى(d8 cj++,=1daEB%JL>CC%J wUJЮ,PmXZMQb@edO lUՆ L8lDP5㣭gLA *7+f$p̈́5k)LhLAxo!PO!NzTr<x3sKm.\s3h==vgۓb󮣙ڒW7;|kB-^p^U7VY!\V/_7̚}Vwqo "v+ڢk晁uw NWawo\zK7AAԳyӽt{ޛWa&yUxpk 1uRVdF)83a1w '1Y3qnҹF~!4ukAxyTgm*|O4#3ゃ}-sO7ޱT `>/T:Eݽ6en Pq{;6@6/Eݦ’;Dn?';ωg#?sǶ۽utƷ}"J}hwԻ晇n7W?kzT[ZM7ѽuVc5[PV?ĵIy|3e`D[U}V+oY}M}|{*]̽7­_ؔa]tM9۞]zK޼ k7׼_q@FM@q9ctraM?/v+ѳ`r;3a >؏{ ZnEwW]‰k룵Xzra [wWߊSw͝vְziW([}q&5g]ɁX7>W0/sDi?'Y{NLȱ-M-zAD OҜ06@" @P}/`fLuM}d#m)6wTZ%TMlp,w"ថ;1E*谀֢g9uÞ1P,z}c0LхCg) /u_ TkǰI[xQKv 4;:vkQmbǭL&)L%I)aQ\bش+SVp"h{ )hfz79ᛚLQ{L$Y,E'$j՚w읭Po#ˎ2¸E`+o6Dd<|Xl 8'|i4vQ D$S\>CeQbkZ8Ŏ34P"6A3:5*R/ۀ)ʵZFAw5XʐWʚ$*4) >4<pӎgjMC8xǾx'߲oﳷmB?ŧb WՃ?5TY| *toy ܈h3mD" AЬKE$A) MMTҹNF/ldqδ.4fcjt3s4]{LE:Lrź!!r%v{_g/ūz$;8. oLm@\~I~v#oW.a]_5IM?3RN1=nV9h^ 1'^,7 @qs3}czvrɢ&77H ._g\XɥL / % Ng.:5ȶVcCdsuMA{4t >z\{b;52ʾ@66BJ(e!!C#Hd+0H4+ߴ1ҝ$"*Msxcmkpa!zbɫ}/m:v]<nk}4v m80N0m(K&l$\v$"NN&fVݭjg&jde! T(EجP$YF\('D"MM56*["`?@{)b9wTkM&E- ۨ ǎpGa8 #C}:t.'r8wԙ;h: wtqG^?dV;+-ja;PP+JNbw%}5}=2sVsE٥]2{8 /6 ]Ta@,+,lza+;xU&!Kv1/@J1١gu %h0l8] ##vaCu:;u#Gu ZLHt\C)3Ŏ!O?!wrh t־p LQ3EM@3ȡs@Yht(x0Hɋή-'#TCHXVmȇ ufNbO PA6 \,r2 `guȬ"VyDT!ckȠ$?8S4dVwF W:2VADrgTa*XYWCUaW"%L$-:鄙0yHDT*HX-(/(ooT!K&lk!FC-S!98I~V,Œ 7\{m ǑPGuQU#FGݙ9A3<fe- 5ղI]F r"jߪ&llM0t|X|4kX x h9gEў,G"N"bj4蛻8fvH;̝]\ 㠿{ wtV#o ._Aeit IDAT2Pz* [ 9\)1@W -[qxd±yiøj؜-[Kg7h~:ze^qAulZor' --.ΘG;v{}]%u! POkp@c˱HFxf^kf]; ѺI&s#,!Ȏ#d!z<Ϫwթst!q]vU.կ~ݝVL5=k.JG^fT";2,@fN^pH!Dҋ µs<Dl^F8ub='tw:Չ+J*eF%̨E x~aQY!:5Q * BnJ)NLpe M*ޙSֳR.6ԋ>5<]6*xǕ*AD9yӻ2̷&2?*4ǔJ>EJ%#Ή ,,8W*T 0APTK0/T6)y*S)rzFN缱76Ĥ(oiQ3Y5:FYCj_b/4.(kjvvvĔZC-M!MY}+-gpBѷ֮֮xG/xG/skk(_J1|cX%\::+>\nXnX睙ʼ>y}DvG^n<8❙Mphkޙ)ܼ7o+:^kzm}iڴAܦ5l|iԖƚ^)W[4>L{4k84&wW7]\1G뜡4}:uip-msl96D%[֭F2aN 55 9kVBJ0F.kir956&XCh:U&Vk K̬,PټU>,^5CqTfJJ@I "8SURJ19eL xP1"F؟N#sSSJH ȶɶMAs)ɲqq -r]0Cυ¶(ΡӷdB%$ F*骤 "B\\rA||l.RH9P|I e !HZ"iIP$)%HX: +VC!QE"iT'IXZQr&e$I" $ͤK$åurbP+ 0J4THH%"0WGȲE_x0MjtaUQx_] "`UB&$[Uc~.韇a2Lj~~55=F>DWDW斁|3kG?1X>-mзof٧=s`M T6fnϪ|ܽsoӫzn߻=}2~Wwo}*o۞Oe?[qHl=gǝ[/폮|كk4eNd)YHRqOvH/'pD?}s U=iFP<1iPI.",Kq/Iȱɱł, y.y.9%1V!E,T4LC :$o4Dj^g芇i"1Y1!MJ),C)ӆsX87 möaYcTJٖ-pf,FC9Q`Kϒ8WV3rr($Y=(&&-9cgwm:EdTJ.2J[XBf1!)hQJ)N'E]Yhǒ)&E*' 4)cMO*WjWq7UKV㣑%&nPZЫ4S IfգU!<.&f>/nW3g~wwԶov[c_$`cs5,iNh~[yZÛf}GwV/ۋ{*]}k7y&aIy "65~ڦNb/#aH0of&ܙGR?@keGa 2TPR |%BvRev4_PdK$@99gTjmZ[LV v(f (Bv6hd]m]M <͎\uL  ˞v:v:T#nZ/{:"RTbEgcͯ%[6[6ȔXӫc[7[7ʴ/6o7柍Ɍ'6o7Rĭĭgg_o|m6dB׮׮0?= ױVX}+ ] zͩ15:2Vga\jkZ)WVEh2_x?:IWWm >Co[up/I}dh6>l6}{{ԛ!ܙfO8``m>pwWgY[as?sx; >kl}Ȏ=Qd3{v|uWBW}xA=#֭y+!;n2Rv9GuG|OqmKē޷f]8ۻ@@~N<:wS9 !,0*6䣞wvΡF| dzX*>9hԻ} , d៊ŚM'M8`P@/YyQ#GU֛B v4| AH\U:H%^٬jJ/̎Beev#SȠX QnRɰUX.,KI%Ie{R5YlcA!E=.ʣT Wz+=Ycc|!<.<.^h&ZLm:8aw~DDڷ;*=|}V??n;J۶':[~Kܽs',"|+z|x[*Jɵ̵TmrQOUt o]Rv<}onUoێ 9rx߆^l{؊[v>C;w۟ l1_,~ԃf[p]}*W&+~q#krxX3%ݦS] yz6uLWwɵKxgfX߼ecłMPO|l<h`'Y٬ncU3BLaw%euzgD:b'3գUXk>^}>2N@& OcT<0W_W'$ZEcQiOob 2&Ӧ +g2m^0 򺖠8A&"OVS֏L3SegOq]w79c43 UqTPnKPQ"вEg5 <$E5pj 2f*ľ:X񫊲T*qx!z}'Nc-[l81:7~J3wT-Hڳim_5qoC{"#̥:a:j7\D}mޝ~[n~GÈ`ž۶c]g Ȯ{QÛ6=|P^kmޣ㚗9ץ:gq?9,:ƾ۶mwbo0rQUL v6mN#_oO'璩O841y>oo{`,y{7ELυdFh?ZWcobG-R0(F̎.\vT ꤣ v4烳a[ ݙBfGO'N-t~iQd7Mx0pF'tϹhq+ #T Wyӫ FT*ϰĔBS$bfF̨B)ђfG,deV.f(EJJ<)Qj9KńeRTW1RslвذU*ͅ*l\PD U"0r.)$xBAiUAPcppKIA$\NXH[v'"# 3BU 0Y,(U{ r2ZIr#(U2s쨢p()B +2Qw4ՀqX4*UT̂|-.cҤeSĭ$Ek~@Bws#c]ſzWȡ٦ƋwԷ-JwղD)K6>o}{4;"a`D\^,[L}mw{f8wvٳ.z__msG#D.RqV_uϞE(">.9y7{h OtC^^GX>}jzN=5G6^nKbڻP77 q\m>o}ۿ{/FA-;ex4w3w^!6XCGW!|Ͼ7::@XƋGoc}T҉ 󦼽,,_ h qh_p)qYEDU']ї1s%hWFXhN`TUcƢRR 6!mkO \c)`Gfsb &W AE!81 ZNry512OY&Ȕ1 :9B@GzslmOV^ot*w];2~ oh ;[fWf ZgR2Dz]N@,?7xmgd~d^Y̙O@&5 WO-5pjo6pGyԒT#c4%&t*N]PPsêX"._Qd[׹!'eJ&bIfsP(3P%niOfMO16f+3"0E© ,$Eeڄad1ļ<VR j} IDATW)$HIcQڢKzIbsPKXɄD’`%S/HqL%3 $xIG(HfDۄg"r=!Т~r\@ ΡGRqe57ipȮ-P)Fb$MQnb;KH'a%,~ŵ+nQl)W3V$! bTs~E^M*&c{t+TO?5+G5\>H菴Ebv=}ּ!dW**`pC~go~Upu]Dpj}B:+EH1wHCU+#8^H#B},peι],|,ր^RIt|A)tX#BLME/15t(5Xl>$DFȨ41#X[S9 vcin#/-4Fy}wP6'Gޘe@)ݫߵv[ .]~UlYRܞ eKp˄ +.Aʗ:&I4363{dڣB/(]{IaѼ OCcdF*$(D9 R) IMh-P !(0%3-1?"2\NjfU8TT0G-ZH߯{Y2YI3BAiLb7Pm'GSTUk*< Fpi]3jE+?\]-[U,",}cYjCT @\x;xwjp߆Y hRxF1['n楗úꪫEՊr)].2ZW]uU[AFVBF?ɎRZUR{fTRVev 8-4:/;rz8L+V͍(3VN Ύv. |dZjRMLJQ(Y-0$pRt%~~5I)!=z@Ắ\ a g+ih[gFLݴO֗'hjqʪ-Y3TCjV %sdW̪4P9zhͭH DogQoNp.\zk'+Q*K:IEMP(iǎz.tXgul3b 9@I!E8[Ye;V "9.$I(Y&E=s҉Ʉ.g2Zܐ"P:t-c Fc $ |HpQ>?tj^$8)Cr&j5)J`tcBi 0H%7s3TXKPzR1dT'1`PФII=_o|T5HQ})/Ւ!);ZɎC*.gTh}ݗ6ZO|D?0R=BXW]uUW]."(Z3hL/pD5;Bp~vT bG ňU H:"eMrLZ BRoC$c8c2/)Ѭ-.tCwER^ 7hh= -y94XGtQ 74J`7kbRRjT.5p )yNKBr^HXYܵdf@ |WRȎ:Cv6BѼD@z!; ː{LCl][5QX FYOq#B;p^z |R"" A'f+IWX@RH YТRQ2ONʼAԴ1n3\ꬖ4C2;ɡ*.X1vT-sHњ1!¢yHQR5'U9fpI3O3"n 6ƍ֨%|]uUW]uUW]uu*-j *2[Vv~@F몫zOX҂YF1'rQv.Q3D, ˎ2 s M$tY,/4n5;)4d _(E䴚6N`SJ3]1e!Ek},Sup0 mR R@ujM@c:7 3ۥIт}z @v}l`O&Tĭݥ XI6Z̪P83em$ NNH/G:.4;7@*y'&`MH=9jE*_ U]KPїAsB}ɗC(Q:Yﺔo"k…:[ !2q(Kw(U:/Mxf~*WP $Sk Ŋ Rt] \8 /JA*"E% @d5)dt:R똞7RIÅ*F~R@1Î/iv:y) wTq`d*P! bV d~,(`߁(aQrQS4D*#Rl1&,bhD ö&$8?)TbsGiHV-K/\)gO啕ַ>W2r'z(Ipt~HfMzFXW]uUW];U-Ydp,*P )vQvI];VeI:gGɄ Q"vtLDL9؈<$_ڡsi\^Ӥ2"\>fG3XEQְ2Zh昏0 5$v-L"J_7#Ee4OZ:->(^&E*NΓ]&|M)Mo|KeXuUW]u~VevC]uUW]W7sBFo [}}RX*U8 {oY_ꪫ\] -7PV$ihTyAvT tvXKcGJY-,j*@3&h{lH`cӚU+kN buȎ d 7 )H: @ta X֦IP82 rMG ;f97 2 iM~<4&)uΌj{<ٔ sV_;:6 s6H~@u$7s5@C ;; XUXHl@pͲ i8r > PfGKzL=(EYF!4;Z0(dEִi_9PDk,$(˜59Einڨ& 1EȎ{W)"E-8ͱ5ƪE9g_|ÚAlf$˗*ԂF@oVaN{d)yб9#<ɑ~m͏ KDD,mԾ{n;ZXLs5f2w_K{kgl߽tèj{^WW>ɓp]ƺl3_[+]QK/w!J*%y[*O1@))U1A# PBcdYdYJltq(P*A)y@|%(Œ L@ caR<<[8 ސaߚY țy>g{&@2[H V7)IiX;(ν MH jg]3o\yŖv],P8qHg) 7o aw)]*o(DKXV,#KkX&ZWgF=leOdaB=lyt ]{I&7.V]r;%N@2aX-X>+DQ'Jdx&<ϜpX2ɒI2q߇9sJ/,$W3ff J,2f^43Rê."2!İ7⌌+ I߱,bDz>ҵ`0NQ?x_sůl7kz;{s}3;񗅖//&:\^~+Hfm#nYssE}ށ+u;K<_=ׂ}7+>>ƺ_TߗRUc|onsWOD櫷{;xl;FGG~6Jfffz꩟''NbŊni۶mL=QX~k̆SiRƘN#,e3|_(j,d[ySRA@Z0ar٤g)LXΏSgX+˥KC 욾`E;1Lngl޿ `r@>\XL+-S"+xǒ;Vh:V}>gz4e#ם@̧?|(~3/4{y1ߞχ31ߑJ ?}[!2>jɷ @|s?tA-y9ΗϾ`ΏgC# [nЅ^Xi5{ǿ3i~-ɃGXm- 3sxc[3Nܤ1`55-'9Tt{NDD:az_xƁĜODF3gHQnXZPTD E"ՔցA+BDKZgE $l^lO` c=(g NXNSPh4NKwR(4spf7)ڙ&ͷ2i IY$N.DX vV;Tj)&?VԵ.&)xѴA(7hzI;)1L&,LSԗ)2٩\1Ll`DeX^Ŗ,e>JUZ*IJ5R4-U]k&o?^O  U|'߷1ȗۑOLN.?^hgfo~m=Q&=]ua{ɝnʣ5,G8a[ <]c^Թp5V<> ȭE{=5::3u]{v>쳻w{:::|\.ꪫ[xoy|)YL ]̭{5j&+ lƉ |ܗ׬p\ =Ï9 f }7L7$e {'kB \eh\}U9xqRz5{_CG+a}{dg?Љ.֯_ꫯF9FGG %Ѹ{z ^(Gydƍ2iüO1vT皃ZbGQ%EQfHb"b^y Q"v,_<4aGsycol`ߞ țy.pf P!HQ;ە N(uw.iSڌt)5|Å-igFbAkV^g!rfAziUoКN QbYЪjpyb0_lepyD=|y2{yO7IUIxwt'%)}P LZKZ)'|}(`3hg\x2 qe %&G*zE*KPTasU#%EKJgedDDtt"Dh .zR aaiiCHK$(!EIZ4Q>BH ۰I%+@(F.+QÅUwVQIM-k&;:)ZEGUf`AU/IڻOv?wW pؐD*>n^^Pp|>qW:V# %ʹ^Dpz&F yMfO{۱Cг߿zbw~qwRKw< }A}{7?6p{EXrn_x!7?fۼ&b5k 'z}+/Vu~y+1ш,CX}*{PDVWmkG/}!C_}_AUW]IWX9{66.g?SOmٲ_#<2/hb>vT^A-du(TŎ|^\ D0: ;겮vn uS_+36԰<@}zد4tR䏏$om>t= ޾dt L?2x;heNR/_0"R4 vÙ_n|1agI|kT? ߐ\Ĩ:vV{-!V-ZF]eo8%Z~ u;}y㹏/쇹ƿ&noOsL*?'o,5pgZ_@͍u IDATBvt*L ֢V/@evtY75:!@M*,bA P*W|Ar]CFUTIf A˂" |H$dHQ:lmR4'ii8)/ HV^iR`emm vYi VgZy@DA޸r|ȵM6$1 LPl^᠔1+gڔ< v*l1yG\2W&5.Τ v/IQ}Q=g\(hĎ* B9QRsVm0jSCՖA8)kAEFB[~;۾8r8{eBAʶ)Hi%rVVBFIJ."k53;_:܏۟PUk ؾg*lDu`ktǓ/_hHGX}vF}4`sw<NugvB5Be"j$GWnl1{['($WP+˲aÆ zӼnY׉~O <;X gs׷D7/Wtvꪫ8]B׉W8u}}9/~i,ͭwӿnXQNzW@PQ*~돭޵Onj<`/~|sSEǮuWZ5՟<;pCwO໸;\_PC|l |C?7|3nOmhO%4?ކmBާܓp[''mU'mpuXo&?HE(?M-"LCi3>(tÎtlG)# R2@J*%dd9]qhaJx\TEHx/L&I @g ,M*$ l+t˺0_yc Ζ/_y#;+{830, ~{l$!YoI&.hPǼ!2^p7eΊ^L 1ÜeH@X59urrȤ8K\{ 57 aYs x& ڢx* l:G cv21xz+T$~5֘(Ը<\gd`f"g  ř'"RF@!t9i3֙.{da1t5CsŜQ_cF#dY ѹ .~Cuo9\~T*!~_ꪫ㋦0=:TESv >Yjܸo5kg>HbQ!FeGeK{4v4R2<;*l۪`GCT?|"QjG{1DKȎ &g}&!adm ;G@+HhAgy/Tk.ZpÓ)͓#E+~}hknI_X6t8ťIN=vbΌgbǝ._o]Pݞ?w,4@ax`Cnہ퓁g~h؅ٚZ`]Gc'~y0h>et^ZDC^O~7 'Oϝ 8-={\ΞdM5UK;**twVUe7ώƍ "ٌWfM}-=\ 'EsHHȉ ;31H_GBR45% HW[]{؀p+)$Z ]ge ک L@+'0fxό*h80hGX^ [ s!;쨝64i /`g3!)j2GzC.4pR sW` Te /鼹ķKC,l*I_j˨VPta^ )PCY5Ȱ YVl|[={ߨ:'wZbzbׁ9m[{y)n~tj_۞y{h{Gު+s=B0 E⻍9W1wWy5<2s{0FW\`rwo#dFtGXx{B̽B.^pt\!ĵ /\^Sp =]\[!k!srUK_~N -J*J* ?@K3ک?!̵Njɹ֙<Lur59׺(A~)UO~'@O}YX;k'< x匩S"c݁D$+{2.| ;hRx~߿C6`+믟sz}5o~mm?פNKVAIC^J*tu8p`2ݜ_!m_!OtX5slMn뮻o˧Ah!<|h UZ3;*~Q?dGw_34yvT!eȎvTp . bQCox̬Y 2XՀqt`( }en|K:4 |-N|KIQ̘aG ) IQ#DžnGf#]36;8kGE°g,IgS::{ mhRHg4#e'E)OZ't ^@VWؖ^*oxXaGR"DO(-}RX^ԐZ3=4))@;K([EkR!E}hL"hX<Qc&˔V2v8;'Cy.4_(Dd'EM>zU"ώ>AȎ| ":p;LBDpJ3&LrP E@:5}u NEqFE(X8o4 Mtg4 yN.q~x=X;[n_1E#|>j7IQ+=ι׼eugcJ*4$馛/3̭+B'fhݾ'~tka7|8Wg dGzvTra :;aVU}XSJ'":&/ aS=}\c-\<_%# 3?}@tuY5o DCywb>2:UӁ^O f2P\0~vO-^r5_Uwݸ47G8 ̿C7YmGq 4HXe@Փִ[d/Uʻ9q_yo> gZ0[SL3ώ0[3>֮w? u 叀\4O]9i,94=`q 3hiʐm0ee=uoJ> 2ph8,  ZăNqP!EUE<9 G @z9RS>YSS$ԉSHuo@Nx?j 5Q`2K![ 4'W `ejUhw4Iy4v>}0 'YEDN8rotB+hiмu@hȅQշWMJTR` )) Z~eHP}G2(ƒT%Fk3o;N?}z5Y z*F/Y+m\6>K*1Hlٲ¯na7v+uy{yA൓vxδ𡤒J*ׯ2|[>nJIaxJ*$0++濷vk߽ޯo^f^) EӉ}0w)yQ'4A,h'HTY R24UbOW֪|`۶>{22,ݕzs* i@ZΙhǪ8b\@EFKAԪy./:pRA^/9pҺfrK-?(?'l{^Gslk B=] xJv.zNg evJXY]K^/[ X9]ӠZ9H 7NL-n]_se3uV=OerNka[!dgx B 0KZ7, 0=`P٫`_m:y} q^H ve4mKF4+}-*@KQs+M'Frlᤌu ٪e4tvE*GU6~EƔaX|$d"DR "h,@ { Y8A~bL]Xí7ut }bF f rqD}EvETgw^ ӀC#Rj9Bd!{~b%TRI%2Ft.f}X)_g u7|+_I* 0'1s2֎ZiLX@a"-m PoH,*fGE;*,KAۋaG&ɤUQ!j}eA+I1MՖCA* &CPoY;vg~ j:/ D:e@..@/-e@u|`'_G.m{Lȫ3@_,m?OÐM4κC@?-sه$h/z߳Ci xooRW,>HnOS?n~w>~~ۥ ?]@_]hPh'ޔ~ 'l&T?{bwԞ1==;{IY7NVy5huT'; uf;3:WH!$1eԢ4Hќ9x"2H̙_vb䇈S*jNGvOwL$j+=^N) [%i'S45Q6H  ڎk;%O Gn(88d.1Yɻh ;jƙ1 <;# &PJ 0(kC-dP:$E):ME0& G^1)Z(5a5Ń!Fi{#Ev ѷ ~?7݄J*gΜxb۶+++˲/2;v'?ٳ3g^tEW_}uyJ*7#$:;;_l۶m…uuu7H6/J’J*[ng[[[+**(TXOt=o߾ſK~$0C800YXhWkx!0B'@aYŹV bчyDc@*lk`r9s7HXCwX4,rpn,+ 3U$m@"l˯N`L&S9@ۖWIǫ4Y씝?im ҫld/s3 X&kSKOLMDD*hU@;"}&%'MS^BpR7\0aK;Yv*7񢌷K+ͬNB ?aIewfPQÎvgm m\a=_s¥90 %Np$?Z. }C1)Z`|c Ba N 9lPƠ:jʱ fh)qhQa`(++yWN*T_$T0 ¿3(w˾&/b-X~2A0E71m@P3nZ^>)@Z*ml]E>0'a 󛂁}x d'=i??2^2 үЋQ~Y|cFoi ?’J*^#={wWIU ÎUW?vTgG=34;jY:T&˒<;XՕ ;j%dO}C,IȎIz\ ̀u\CA*  5սNo? յs EN.{vޞ:?m L_-_ھT3~Tݽ!IYLM3E g>}b {.>V;[;>@{~8$Y?ہ57;Mv^pl9ڂu1@'/kk+ghض3ѽϙBvP~NVܮZ9$[dם݆eX1K,7-|/puP0 IѬgFAE[N/F&[i =^6"]Ȍ^@DtHg%]F=C&2jւ1L%}h? 9Eh&$EPAP?&05ڣLB *7zW@kÔV<jP(bGꋖAi'D^C8͏TCd1u4Xu9#tńTTRI%Jkg_VTRI%TҘ^Cn}9\=+l,m.\NJ*$ !o0"h;÷ò4cSH4\ q2aYf C1tCf(/OjK"*Jɴ h'ώɈW<;;^8^؊ݤ=.t):I6m:HDqR:4%I.ICF;uG b5\4|sh2)c*+a ?>4;* OJmYyn1_~F`G o*i ϭyd4?"e.E.Dk) (}/:@(*3b"ȓvHC1ա}hb|%:>:/I( j-/dG `v4LR{." ::,dG;N0S=8S'rGtΝ TO//Z;N'|jVDûk¸S*y}.e o>bԇ_5mYڶXF IDAT3+7N^y ̿۸$E[έvzza}R@?tZot\[cݲx]OEo?sA.0g;Gtavb6czbݛBv{)?<Qi;zS;ci-}r/ gLXsfzSp: ȩTU Ovv@Nj95ZĞ^K*?C}v”fmV?|U 6`e|+ >RW@jJ< YiVc>R |fkdz"S[k%j\@h'@0?DxLrI4228 &C}-&pӋy7DS!)D9h~1+#=WH-J;!)*#k0 h!´ ;:8C}q<!-D<0|Qק]:÷Gum)⫿ Ks7s^tkEޠ?\)hڻ^=pѵ}>r/:XiMlYL&#M'iݖQe]Qe/R-(+S 0DC%~eGTӍ]RIW"TT9ȳ|Z@BȰL90ee48YoRҁ64,2G~@O/ ,˪4aң%d7csf0CRb4*; sJ]x6ĬgCRu!¤nEUO/ʛ:RyF9RW狁 *ҏe.X xek^R^:?pxrUVmq-y@8nj*J@fvVYf_H_ %\@zJ;lPn Lz+匩J9--'PZveM5 sDxyqm3 yCٍWRhM_Kte`G(>- 2',- R8=Bk a"[#et2dk V - H7l&ޏGEh2hdYMD(XXd7iP:Y/azC5_V#T81K-XP+py'҂bʤ(`z] L)meCahچN7λv$IÓO~׽w}:ɹg5=C|s9;z׼:z"~ף+~3wͣWNuoFkrWXfyiHQnXp+dӃ~0Nrͷ;7.Wnm ֯ݚJm5јtHڵ ^xhpϜ_wI}˧W !~d>MYX-D5w iQUU %,KJ|%lK88Uz'x'pjhmǹcl^8չsImfZv[iE.Vv:%-%ewf#+#+X_㝵?ޙUۃ vLش5Sd&swvNΖeXIL֮IO]{cmӿk7vM~45Pf{h]ƃ5F}n>/E=cqP?0e G!Civ;suמܞ.}b=8 WTn=uzӛMz_a_M|)l*{ ^Լ Z!ذl~8ȩ}M#E;p}{W-]qp0(nY\q hKͳc bpy7,J&θh4{bܡNkpHÝ&mn y-|C4u ֭[>67ϒ^ u>' w^kI%TRI#`fHiJ}]| Op䯮 j\kG>zS}K9@Fs:}]}y/Ad_~ʷr'Ly x~tً~3s75}-ݰ`sj 6._7{VNm-olZx}7Rز.-k7(ڗ-X m-pu7iņf ݖoٰbfT=[=7ǹ}]OV\z9`ڵMۇzx↛VN}6._tE \9 \5ӒxֵM՘Z^uɆW.X@W޴qֵ[7K޶edsjIgpq<߶Yilşkp̎M(D63ZQ:*0;HSAH'q!Ng} 1f0BJtG'c۵5v]Z8 ᗉj{\-NiNaB<Ϟ`ـRjgx HOH]K)/iw_uӷ] ՌY]^ ZYǁoOZۦjcҥ &&~q1ƶfJ ũbRῦq;H4Q5'>8+͗$5@ަe:YڡTDv}MS~#W^XP1ǻl `퀎M*&kt<9sv#[1{@֓:*ʍ?ٜHe a0`udxe!1TbEX*^+*b Z;1)CQ14sh"5)BkӀN4;UB ,#AxO02 @zN8LK#6L0bOE!=̖AEX3v?r'|c7l}u,->wO'OTy>=]TWeK5ݖK?;㰹Iq8ww}=۫dB;߅Rv"m9r-ʱ&kؐa=~퍫 A3L&WnOG˭r5 MXȱQ-/۴h.q:ъ+WoL'7_VBM[oXu*yoNr{BJWŪ_5Ogf6U3-)\ej0Mܸ|v],.pp妰 Y\>}чaU#uXz׿fD(i8C8$TqYEx%͇tw2!ŒJH24)R K Kj Ja[ؖ={:c ƒ&E+XPd& M)aY$$x~tvaTQQzS~KҦ⪦\Քɠ2/ *btte$2S^UL=P=Pvvϊvϊ*G=2w̵;*"Sʧr}l_ ?c{2پX/VNOߺ'uW&/v_l.{`W[:tTwW彻Ro{!=ϭgO={j]ڸٙڟn /k.G/칥=VRuΪv~ǡ8twx]RvI_HrGw]ܛ|w;3S]]uُ7-m=ӥB#G[)zUAxP1cڱ˲PZlU'[cyue^]Z.ѥѠ*Tq=JTZGUSe1#t< aZ--ePkmIT$(Gqˏ[h Ǥ[&2)]e; i U\"ڭ\*8NTB&Wvh\ FCZ窵P!m*Viv&VjR[L+A,@~?IIᤰ\~mdp2 ;ABaeelEÈrQ!0e>h**-UZ $SS\JJ2KЏUAj^jZKQoP< AQ]4(yXT+2$<#Fedv6a~Me}>^0^}|"_+?·{㑇~{[.GOd[~~C@c߭?Qo{Ƿ5 \ VO6Yuh#]䏫t|z1 g/;/qPvk*u;kı׹b 7mljxSÀuGs' jU`ӖV]Ukf%4Ə`3^cC޴qnFԴqJ6R_ _ĭ2g^]kXa"kH"+_ʀ%TRI%~U0==z{>yvkŋoτoz Y~ڞs?au㚩b>{.L8ją3sMG[FИQWSkOv,S"!CG[N>9ޏ\Xݓ8D蛫2SF~M!x ]#+lX?w!״Mznڸ~.lxӦ7n5M[/_Śnc['Ċ~1tBW5a&V^On V7Q5:8霎|֮{X}c~w]<ƌٲ7^@if0=O 򖧛O2Xef?֫6Gɇ[n3c.|HyD8&tOkWUc|!Q! $E%dh]aQLBiJa%Zr5N5Kx[0dkMD͗m]%p2| P8Rn4c2*b s[*hmYmNj/$]aG`vm>4_R\v!P;jz."C2=pz>vvtw;#p`Ϸ:pN= RvìHenPYNu rZu^]EQFh"ÔwXyvTÎe|GVVADIKp )j@t):2!EUDNy0"=PR1W1I ^nxe!"L6(v-09 ."E16;eHQSX>↤}rh)tD2 ; )h-\ѦhaX_L|S8* i"L :4p]4'߇VCb#"}Wyf9Ϗ50{ X֯n=3Ԝ1"|y;f\4=kw^q4ضuջ0q#:=׶~ޞs?ڞvurnd2\k뇊F+6l^ie2LaBp̈́I+6쾹ae2L&ݳjwyEuru9Gشor3;NXa{¡zU< _aSanr{CU }*Csق}kg?ຼƌE0=UpjyWp;03 7_77kmko Z~^r&vě|g]ҙNx<~+ A,hy=>ttEp^. ǎ5zZ!Ď aYHalHuHilHu@*EiQQ!JgT:ƉT~ ˢ,IYR~tt2]UzzVUŃ\wtNIJIJ<<;z^^SLwwW|w'O3A훧IG 8̓ſ+1<;*xט!~obGm EǯT^v}XŴɓ{ņԊ 7{ JWgQ-CdoԘob:NXSƛn}0?Bo״q fŐ}5\_^;ß`5f,>-]WyP5_mxakw# [>μ;c2[. IDATEYՙЃ߻?{)20}y!,J*CׯDgg"G߽H#7(/عEHmArpٶm… nTOKi$~2~۲iEn|Kp-_y&nY\p+ 2f/XoWNC|϶VTT1r,`h^.{m}5'rU/ڗUBpԻ^iח! L% 0Ǘ^EÌ I"iehX,ǒ(Wږ*Bi_$dJD \ee|/sr6क8n"* =o@Ti2'Nj&%y\ALr$_p+L@S:ѭ$3!$2q+vh 3N0LSvFIVT ""=ްHȎflIAlN _Vڷ2TWf]@"Oqᤎ92 GiБy|G!e`7j @[n*ܛ~TH\O@eސS#qOr"@@ES&I.=(# u2PaZ"TG^p ~xhJ .K?<)[Q~6Bn3~(GfW\OQ3A0W Gх>T'!h~iLA|CoFz:풭_߽GO23 g#">K?o&WKA/f~9K$eaI{rhiב^Sx&JsoptO{_=cT'}K? mAj@xma2dNB +,qVnNDD@ehЩIVaUUD]A: (/fSƞ3K#2r|ȴw?XUUy׳Xu=kF@.9'T= X079{[k`A{O}axK}QN83nKF~8Et/@En 4}e;oy5?]ՊbxLKpJE mMxŀ5[jbmbm$NеtBgj.=fCvk3c-r`==9~${s5c/ }/S?a_/;f@IxxOz%ھ~c uKYwpܵDo~m]D'&y.ʏwiխqPvŸ T}@#?g{97iFFHX $@̖ r(؄\ nHdBBH b ڲ]GlZιꞞEWIvQoNUӿZ oH~]$:G @h=`bF;Rbݖ{SɼWqXvԈi.4*m%d tT 2S3INxh\"r[fj1Ɩ @e=WE'Ga#+f wF9 B!/|#y > VU"߂MaBqjE9iUKwJ~,Za~N6ԨQ"T"BL*UŃ &ȴ˨}ח{"M*,MZ]hUmI9~cG/q-%GWo^rB4^=4^y m۶\.w*L&<+EmTkg]f‰8Nח_^*2G ]6֘~+fc4`jm!1J 42!0|@U ,q:Յ< E,ϋQIJ!*7JjtPRbh-  GDxvYЇ62@xMs5G0{^C3~ <^#ڟ+^ۑ~Ns/P%_,u 8_7Qŗ#urg/{+Ů=@k֦xrrˎƇR@aҩUzA160ч@j@ZoH =0|j4zdj4I,i9@dt|0N+Pg(lhW\1(J(Ete]h4"0Qh@d#BR;’hv cH۷PARPQ3ÔNHԀ*@:a10^ ڲDKm[y@-<,(uZC(bk%BGPڈ 624F`APPT4 Xb&LyZ3;2|o"٬Α(߁P|J+=^M^Fr믿\gQQEUt{}džrߞ.&YwۓLDJ7}FԾ9TTQEUTit;ƜΪ1}EUTQEDw=`|kƇZa| ? fwT/XX'6–0F:JhRI[:SdG=_L&Tc=:,-0ʦF麀EBwD2\ ';{@lCnkx@b_ÀnZaO1`dm xx]?XӋ .:k5ӯ1~; .Jں (rO^ T')3WojRg?10Vg N]L;zo\tK8Mk(+u6e-PsD8-iD@~yK]5sµ+l'/$ZX0W6"X@I9@[kʰڵ7t#u)bh"u5 M _/m͚$@QZ'ظ!i Ȁ#e+5_{IlRR/"Eǖc/c") &= |SƇz#Y.Cq#jMQ\pERą$EӤqaLT6CR`EF(Ną\1R,cG;ԛY1C3\C)xِ3^2䜚ӟs[!*^ ]Ti6Ț/&weNS:a%vTXBۖ*(v&'Eh.}pD5?ОH%i;:xz|B #«uؘZrA;z 5ZfRzZg@f_6= ?i M.'/8}iI}mz/_PԪ$ͽotwԪKߟ{bQ›䎈}{]eQbGO^}%q2V ,*} >z M`ځA,(K3:BRG @_T)GeĎ6ɨ;(xF¸BȈUťQAG(cw[4 X|(JnN4SCBX4**3VKM\/ĆmBty܅GwSnWdo`[='.xf9~z˻^wӬ*zK-n?1ۢ_ D˙ۅ3x9; i0&%;- !"vTBQ b1US-GH8)$ - GhKS96 @$rU7DKaYИ{j 6\XpI?}Q`ɛ ^GZptغ}BC=?>$`w[9Ѓq~k%д(q[i{}@b6`)s璘YT#č,On0VrhVl"`߇R|b }cIj/w[Gw߭W*W5|h85@Q~W/[r]M_=k [ڐ_?|GChG&cVB&qb 0-dh1qUhmaQu$݊a\ڂ^j#f F|7iQhGȀ1h.v-S4HEvt|zLEBy 1N~PT0\ r- )HQ[UIk to]F&69u ҤƉZ:SaѾUlD[OQUOL%OQoNOC+ȌB`L }DTiEdy.gv̹%=Nge::ϹKR׋xϻL]&s=׏ ^6pɱe?|t)z6l}sOOOOOE.}ys: =3aۙOm3s?td}Θier$Vy*׋Dk`0/ۂ}_0P o>gΔ( `g,@eDH@2aQFk B)`Є!B( %iC)\5sy8&3ɘ)xԔ)xa*bJq ]PH87f~{|`%9 ˘}wx*[0.t/ 0. B#F0 aD^0:vW+Z))&„_%EE r )uL /^ BRǥv%#*AaQ!A#VF]%Dm h]dhMtS02@NjqFI&89Є)8Y,h¤Zh):uRS &L[RJ7ʋ`QDPBOâ77Bcs1m~j^`ۇYeG9d;}rn`reȇV{ m e cj2  A90y@.]Ա|ℯdw :&S;a\]j}a,jWr\hZ uj&{Np%6CL,J.YsH~Ȏ!EK.^]DF'b Xl51 u!EvAV̧\F EQBT$M8G3de49-'ET."E&6j}^)@~\h0;A&*r5fvHi]0fh|Mݪ̎ t:d4zmWhDPڗ-EB\@(-Ns Nsq[]ѣg{ko3DϭNQf+gB7lzn`{6l޼bzy}m9ҮRkuߞM7ESt=~7|49wW; ¹ҁOy-NCVFK˯sHknsoլ xnBp㢪.;-ƈK5?BU%8;jE3(+eG }^4:4:4!cB`k}_>BXR ^A{"#fG]$\' ''M baUĜpt,#kApp8aziD}G¾#a| T!2@&|[o I{t]:81Sxj_t;ܵGړ:]c-9WUޙ~撢:n"R4n6ݐ~TyehWrdK{Ji.\qrˎ>7џmi?~k }St-4SfG꾣20Ø0|6fٻ 14OzN_y?\ Oojg!Wxuqrznw(} wxO4l߼a+۶ݱfݲjzn'b`瞮{z{[z{` 7ۘlPw0\v} uѻmdnad]2[o3]_Lwv,78ߍ=wnmgY`,1=_z93WoYs-a .>xγϔٺ4_HVv=\sXE/#_hju+ܥʕ!z<2vSGb۱nfvQyl='J H-':=@~R)@\[^ jkqw<jjQ Ш-@ ebUE* @(rjWt£(, p,TÎlkM2L5=Uʋ`mƸ @DpJöZ \@w.ᕯr}t Uñ],˺ }U{RqqoIq#N H H߈v@ǥ=kBv%m̀ `4Mu7 "hoQػK"sߎDb$'#~ |A1 ӳ'~M^""#4n!pλ5,,]b$zY̌CbezSN3O=LSl;^W0:G012*HIcK%b/Α2[7|DSnYelvuCm`ݖ;Ͼ:%@՛̃w\Ki6xfw9؃7޲n+B92B28`0TuNz2O΂f\ЃQ%"c:_PU)ӝz׳/_)_=8 uL~:M~ /^1@[w9SU 0~푷x$pz%χ͞Cn7@זqo.[t8rgc/׬nkgo߸E; >___no-6?_~Yz/W=w\*=77x8'{ sā_Ww7:qΧk}XhC:/k=4*ǁz5hytB^ts1@'cI@L<Ʀ\,iѤGm>Te0., WMbc) uIL.P^p &; z& ugDRGD1LNFB1P{0ju8Dq> cd[#.˜5)4B HIKY0.Uur&1Kd&EmUQӣ;@:,& ha驈Pm磈} 8FBNMЙMJa8ş&Egz%EOJ|&ESgtˀы2zHk>"s^־'>'W졪#uU3OH9jw7&r";{6>ۍ^,G??xww9GfSON]=к6}k&=7^>_ziug57Ut^K^1չl*s9.tJ' -C:q]?508uVV;+R2VMyBHkud۸H{]kuWzTn}F'ͧ`ٿ>fۢxko\=kWgtg7g.Ӛ,O>c󝻟+Nu]]>Ә) Ox~wYY;wv_iޫv}Y͹/b]1bW->שjd!MIsW"EmLiU):RcL D G8}%c1x'\W&8" WUUJ\5)_YW+j݉PZ57F#EbT'FZآHO'I cR-].VI Ā]);eg{|Xho=36"'j'j R\ܕ_|P۳p\m.ζ+2+TpMO'}kߥ2/+WW lˬݖYƱYn[M-k{µ=dVdzM^#Oe=tnQd_ɾIE]\UhGhByAOG~W7t,cq!C`I+KZEH|Y6 M|MXuN;iIܰ>֧33au߲6X$_=iz=8'z>`.I~`ofq}E_{8tڮcMowfˎ4)ZbG?zC-K\~ 3WGB5P_3uaɞy|몽_Տx ȾqO O%,0P,}0ꁅ[= &E?T'7,k@Μ3jC'gvgI WL:7 Xl=;?8(h)4DV;")1 dT^:&: ȶ ;&ullH&FhMXvtM1 i lbGC@"$wTGGfMrt<"E݉0*.0w`W&E8ʸJD'POn)HA$E`S8t%ԳhL|Dl4grgG2FF_Bog羣Uڤ2F\l0-O KZOu*uˌ_Ό~ pA83.k>b`n2Φ9lJOtꤟωo0@I!_m0꽀oVEͪ5 UTQEUTQEUtzNsӍW•:S3-uy<"?3曺|Ydu\*T2AS3Pϣm.P2J["a]q" A בeTUW":nҨ:HˎZĈT@y&9]k_E%4U;" G8]@lH>6X/H,P\\F +z0ο]XvPy2Z|;sEydlԢx=7.-2ݹđCmKdF;kaBc @z@~[t,DH|H`]B+… D.]#a2"&|1i c!HJf3Gƛևv,ٍ"2[ީºD5Z%ºQdRrՑ˨8RD(BSThT>J& {=#c%XwP S3*Ohb0STu7QeX'U1;j'D(Q+(\xG漣3_4;1g,Fq9lӿk<3GV*RB(z_$^N^2NCM<֗L֔ϹNyu+ӨPW儕3HDJɘ -;*c1Ku>eGk,qOVlĠb"х<5G@2,陪$#Q'k%RTN^LJ= L w21iw@zup<5qk+*_hm E#QATGhR4=L);tgٱ-YTVtnu~Nux**^!z5V>־=ya)TJ&{΢*V2db\gQKl~fVzQVsHhT`P*>D4aP*jN9[ \GZ3Ҽ*lQ#̀uCP~ԡ^M/bcXv@( U\t[R)%+ľCKG'%v4s F]3IQ\*V"Ȏ&e+\kH_+@%>v8Я˗H|@aL M Dc~m YYAb@N@تv-ڍ)"(` (Y_>FA !BG{+"FFETL"")" Qzv0;g%Q@&F!=C;J ڔhRƪ%vӏ^OJhI1K߳ơ%{iߙ嶳|x8 RJ``-:yষl-U`_\FFF^쟓>*.x|\p^Hy`lii?^fGKS";f ),/`x q|LUzb.&tq,;:}px2˖^@:wpB @tO]$N+vnXu;D?&˾y<~|kXWCzA`׊%1sKoR+? pkzˎ~h?w/d5^÷C_n?~}㖣۟Σȷ:Nj^}y??ϤW~b? o•OW|Y`-=>U;䲿 ޒc#}$#{'] ü;4ɫw{_?L`Wk 1F5;IrX^Vn6bG8 ( 99X~N 4! (ɶeGx5L-3͎.R{0B'RT0@EL.@j\$1֑hҮ5-)*- P>E pt¸#R41ڕA8,OQ'B1 XWQ"EGGe/teTD:)Bbz]ƅ2M 0;Z(gr xO2:gҧY? y:%2ZSSe~r{kU?o5u@cοvqEUTQEO}(=7DEUTQE?ψ^ļh7X,O~ҾܻCVjz׉7 y?U_Kv:UTQE?7jkk uuu.s)AιWYѩS _?:w/ YʬtEp%=wN SCKaEUTQEU2h Q ÎFKP0ȎJ)|ZԳq}㇀'dt`>,զ#v)P?4}_rq+G*4Ӏ{[ LwNgzr udJ iLj^ k@> Ufo~|+ʿ{ʋ.Z\=y[jң_6~m>(Y][/߇||q`moЃC%^?.}GO?}l/3]]<׾SGc/g̯5v/0w'g8k~ \e-NL4$sk:b=:UvM.js&:?IQ 45 jgvٞ 7+h2&hfh}GEHl@;x'>E-`iAB3;N~A䚋~5KVyd*H<"׬c>orT j;YST3:tL*ˈuBs7~wz IDAT( ȩ=Nԡ\!z{ZP~ 5IQKh)2MFp -AeaJ%gsuQDLrZTf-X{$'&vզUףƈm v2%*I03L~X*V^wɼVTQEUTQE/Dg5!eײ={~g2P{jn?DeBXQEUT}ofҿv /u>n/,DyW3R? Dx 7߷xp]Ḁ|M*CJ&&U}- #8-ND&Y@ԑ)@xtܕwdа LjE@M_@nYZR4c nuAR;Wcчjw\Ub@lZ x}@b|kd-Eq@j^s}zp^s)>P1K0F1#pN06g3ۖAR$K~5'ߔG͓.8K ۣR501bXW0R$ab İ+nB}tW~*lCvD#Q &EDQ?z#p~U12QT x5žP *B1TcEAlRZKUmxqN^Ƹ l]c[ a *ziDY~QmJD۱pg=e)F>($_0XfP\6֜t2Ky_7x|PXS0Z|kk*_VTQEU/z# ˥J";*]C8;*T> 7DBX.4[zKcvѠ!\󂾣J4 ONgI׵p'ggY%-@SC8.ZQ?~E `?BwqUď#U+(05"}>VXvtyÇ~7k_?qĶ=ѿo. ָ ._ϟ̬躩.]+>S/o[|$ySHuS@Zx8Ex@ۇiZ_IШ%P?zq~^~L-T`chU'pfA2bGe1ùq)h ݶ4m 6IihRg@P`1R7B@bH6I;qMrj꣡*h ℮P>ڑehF:pr:6:&ä|L0jʗ01D-)j\ez"[$EB\2 ZqH2Z -Ey=92Z"-grPrIlf}"̿f93*aH^u_}ܵ\@-oL+*z~ƾyTTQEUTѫUzgVںPND>Tl["[ BH**z eN DY}4;jtє"G_,Gamf> =/*NTN,xƨ*"vPm{r RBgI=LQ;rA<eGɰoom@a]5qS=iglλu'N't H$H " uB$˼㌱e Xe$"%/绽yvbwWpAF񮟗^gjzzfVS]O?@~ х6n|;Tə07NRVqGgI^I}wTσiLЖe*V^ "2qbg=)? Vf0BkwT" *YZs!AB/yR1E=橞%STQ:[8pM:EcG L]i3CBBBBBN8k^*:p,[Ю HRhXɤ2(֧̤ћ֮+Q݃nc`wwVѡ~l+^rZzv(=0hyhҾ{0Myɕ˶_V渣軣}@֥(0΍]~I౯p;6㻁yM}|p[+: 8-+>r(]}cZy`W},k{[ƀ6w<xgG ߌ}7/ߋ&g=WyME'vbcipIo_{j]) Ⱥ ȶ%Nȴ Ӈ#6.PO vA(u4[«JwTtp䎎k ZtljPHB:6|PdA&L>UP*" ))ڒTͤy1Eـ,2c*)+ћQQpSF SdZB3R#}Ot*6>՜‚{7hEqZ2o'B9 ǣ):hrr! 9 9;pb+xƦM,j!5k6n޻I;/Ɓ;VA egM3| Iw_`gd TQ|V3*>^8ՌT[^ҝ) >ợU@lTD(&D-@1M|$g2!m7M5 @h"3DZ $3; TwT13Z\L^/%pGN#`*TKdVZJ*RF-<)"1X`f<@h8g7E5٠Y'k %ST<+ZN- STs\<ZT^doQUXI`4?Î=!VIZz^u۞xH$vڳw!!!!!'3}{uz6zObWP쎚B{TL*2Ŏ*7ϲ}wtvm]כd,*[D.NvkX޶=ә_ w -iP0h~ox*pGrvU'E7lyg#7Ż[ͣ??-v} `g-'o/wOOM{.<#Os6,;KV!w?[Wz{OY%Ku}Q{F}l^=Xhc Dkh^u@΄l?MT -&ݷ* _ob [0)ӫ] :l@Edx@a϶-pM 3ssG_ 6"6Ҁ;K|BY@|BwX+OH򍶲r"ʖ~p"pt|4h[:5QʻtˤʼgLQl6 rLQo;w|Ӷ_.O,o,8Gϲu epio=RhˢϠʹTt)L2: ~c>;TSKutxo]G[::/g4CBBBBNbۻolf0>[SSS _Ąҵcw~kJrd!|>,YrUW-{_W=!!!!!v56='bwfs8y>ъAQrϴ[ik+oF{+55;՞+"YS z c1Q_Pt!nhՀ5Iv[\ أ3~5@b{u 主k/}BJ?h [İl@\cn$$H6c̛6Zo4 6.{`{~$ ^ ɽ@w7N<軮]jv(won?ˣ@~]wmngzϸb}. 0xqǪ~Q` )`RgZrEZgE`;dS&3QVqS(L7K`zzs>0lp:=Mb'mmũU@l\Y|рf;*~/ X~74 AUQy"Y xQ`lЩnLImzH8ՖpqI"+iG:Jҩ5d[tQd+E@G,-*Q(LQG7E]3aYxK$AeqcH)erh/.WFG}{!PF~W ѐgV-qw*/Zm۵*[RO|w7EMJOAF40E繣J%YLosqGYPQk贿5J_Μ&@I85)ta"lg 0MxQ2A0S[6EcN;7h 6.KpSɶHYF5AEJG&TBgLQ/O,(n0? "hcS4˗;ZChͼBUsnK tGIJQQE s0cpZZ /5K zgye389hZke@R6E)}-¼1wuw|h2sk^SA3<xꩧ"-ZZZrɉa|ܮ- 9AY4s&!-Vcbѯ$&TfUSmz^: HD; )ٌ;6 ؍ :CÀ6wp֝v&[2qG4]`-e7> *1\r @o>?1~8n}ݏf>qFou7޴ʳzc굟d={}X|m_w?~hUǿMWM{Ʋo vwS[q`燛=w;Omk  `꺞C`j7W86;y06^z8-i ~;aCɺB7a%M.`GbVZX7sXuh A =f5QxX (K7v HNNBqc*C©= ^A6-!]mMmY^uf Rzfaa)/ؖ؀p8bZ[)B!-LWxsN/`B(J=-)_/ Y)e1IyfZxtvk 9i:zxDe%TFCBBBN %et&;c*3~1Lbћ_2t5(XrG׻|RߐۯuQ3&Ō<3F'bQ3WזĸJn*"PZEd! ,tGdw4%P vNhpj#O˹^L[Q5LREib &D2f: NM85 MHӵ/߈[İM6m_ɷh11E ]SF2/"x1ܤ2'l*n·alYSA LQ;56+QEQ* -U* *=VϤ/'H36%߲"SZ*on_JMJBky#%wtAdh0Kyh+Vt 3bb7I32{aw`ky3LmV{ Qqm`ͣ{ƚ2VK `j_1kh&";dj`jY@NhƦ) :~B;%Nޜ Yn2QJ=%$vA^TYe<[^TlQ: pm !\@ U姌S;0E=)jYEJSʦ )X&.fAG Q-U? )*X` _[}ϏsJ'rYolȾ|OCv 8PsS>J 4 \n4Y/W̶ԥGgcZ&gl9eeV]r#~ t+Cq#ڴJ9@d0ȶ6iaaЀcXJVP v+YT6/Zx~~JGTlXnn-ii:Z]VbgMG']VeZŵEQ6HpZB(DŗuAC=jj4HBkiÄpp")\\N zx<<-h7g_%?DzN@A? ?|O/)'8YdB8N crtWWlǮ6[}W_Ip޿彟)lHHHHHs"ÇugVUU[x^&TFCBBBN ~eUw=SxܵdK"K;Wyqo@N}GWL6/}GW[ퟭϯ~}p1TFhsZZ?F))#6BM'E,Q˘.tGG w& ɩ|Ml94ab?e*;jUlkӧ7`-#@~jUqwN%ewt0n4nUfkK4{K輕<@ۯQ'|c({~m+&Λ-暢mL/=r %u0-,-uK'.7~dOj}$z 08Sut{8p)-:TӪq`d.3 Zub _@@U)HX906iLUt/ԣ,Kb@[8U%6wTI A+w@Kꅫ$. sQ(S201%St%曢Q¥E!Stq9GXPAeoQF|^)5556l83n? 910#96ظ4ɛwúK^m\l<t5u CW8g͍C,I8'+U* o/TE!4-muUHHqU!X(gfU6z)'=o& حM^2 lNgum 27[HYi%_d~6uxmuĘPYozomȷzuZݑc>Uu]@b$uPWpklǠ+=mirV.vfV4]ҹϾSW?ֺ]`B'/:KS{+8@~͛k<.5e5*-˚)CцĨ-Ԇ!`t&6o~عHY``"u.d2QTBҕfP1-01*"o)-Ic+-yf_iyo[Qj% RiGeMރ:bB-% N෿>ur(mXTfn|t(X=_pu{&LIc"&3-KB+c ˂S~KT4ei-(W,`Pk$J@ mR_ s2EKi]+/Tly5E V6іK%ݘ~ժU G`&<;{~o#onv|tЅ[ LYS(o/,m8TF+QI+QZxrtGQu}wT;eݐ* w4 xScl֛Pg1Pã&QZoH w]ufka@[ﻣkP1h|T{K|w4=5C;DkՎIѲ{?pXRUv}.LԮ0KO1~ L{,0EKYn7TdҮgskB2w z6pB7?0335.055e6Ǔ3u~!!!!!!~?D>?rnίp0$$$$\48X&tHl)Q ߨhI{X&K|p;NgOfD2qJPQ~1t@QNRxqэW&ON!YS+#o蘚Zn;[n,Шv4FSABz`O1-N>( @T=8p+"zD;,JC0;PUE/S-̟UĩiG!]*l S?!\Ǡg(t|b*&K;T;K=̥Ήɐ k*/H@{~,hEk)j:#f3FduŢ75 x|76-ͲjpV. U&fzPT]=o ɗՇ? 5ˆ^ wZ~p6,?xE `V\:v[~|ʁ }OD:<؁q`g:LJ|. ̞Nݽ@ȫ>}ϵ#OE7`_ˏ_ɏ@G_zʟ~o.xW#ίi`7=#?>k & W ~g)m>ۀwn* ٴ uɇj^aÝODї9X-Ͳ1a?xfR㎮[&#vƱTm%@d֭c+򞉗Ϸju@;W=Tt@n/{_Ӫ磇&kj_U3+c:4+H}IU񋬷~WvkwkNa)?4틿 \|wp.p_qe#ˀ~w= \_<,+n7/f{ηl: w7W ~{Wx7xwW_^ܰi/=kR&M^r8 oiI `|O]F7 Zi 8I9y"4mЙ^ OCs6MpPq˩ѩ)*Q 2Ew,m 1drz^i#'RqEC#K !S.9STy04O]gS>_1@03"n)G9YdBhYgyfq ?ζc)BBBBBBq`C~ێ>殻xKoxi9Za;xn'$$$$cfl*~avxhO) y&Q@-RtG"wG a[VZ*Qe@ ̚$;*O$Ȭ Ȃ'j%D4mQ%S( IDAT;Es`9*[FJ̠E(KD7JD*`4j*:, 䃃d2" (:Ў\irG6n2%ST}S'Mq5B&eRF;TXnlKwSgyw4~3y*P(F ~l1EV@d <12QīA2'^BόAK+OYQpPrGqGqU>M T~p!ʴ_=q'qB=mPwϼS?+>pG/~}>~F {=oϻǃ677Y-Q%-hYo2BkUqn T!&wLh)wTM:)Udh] j|:E=0lڳ=0 ryQ,X9'.@̾H w :b-wuE-@.T>4> _;xAldpm^~_j蘙]`vY޿їG @Ց?Ň?5?]mķ_M[/z~o k?~˻k/ٿڭ7OK=/7lS:yϿ֧~:W~_}y7R{W4>^[k7wt\Hb+XgDҢ"$D(G= >[ɵĀ^mIŀd*Q y/D#ڶahE2ѝ7``D9yQ~VC4)St #c2ZlE>Y\_V~ O:8dcǴ[gʽ=ӳO&&""z\ʎBXd ! Y'd{Q==%PO UNW9==04M[tK/.RYY麮mۅBa7/ڶn]\G2};w1䗹7ϔEK| ۽r9\e9g^;*@" fAꄄPs~z}@-`4@*h9 {-B-.2rP;N7n\WWW)&T%NG=GJӉDb=g̘0qƻ3=MqYѢTJ $W.B:;) m}Qj+r Ӏ*jGzeQ: [;g7y 阖r 1sFץ D#6 @sW͊ڀcǶ_ke`=- bѷ(恁 r/NlRI t+7.?8,3WxGsgG{s] \oܸP8?yc0_ sS?PkzG;`ۑ]hG @!vzQ+uЁhLpvbӀ"NN2bUF''rDP3x P!t` m#2f+gb+]J +i}dqG2,rHTcRtǼoW[I;ȷNc~l-u/&U_x@~cLYT.;Ϗ7|K'j\( GuT>//MQQQ!LR,;n^4 Àjc3Ϝp ;6cƌSgS5= ã31{Lӿ|/Re٠L>X/?Z&JbXwe˖͞=&˽ xD"dp\**v!UqSN-5+p.cRe_b_fE1j0{# +eM $RLST*vM+n5t7 "%*s(~u{U^:1U6D Zp S-zDRbrshP]蓊%P/b`K01 ,R+):֧vCRJ]q7ځd[afBƮֶЕ0L`u{mL2Vhskθns U}p;@7"2*pz 5nu5 Ta!`XTPl>HISRjJ-?pE/P ]C ~2oaRۄf'o _?Yty$;q/h?iY8 {u9cϨM?2߻tAY^ɜh|};Wݢg~kGզg\a:! xEO|zÎΘ1?b414 9O_Tk󵣍 %  ;%oh~f#`tùXZ;k[{B}P:]2ԼfUз B LG['" Mm5oP.7x l=Vi׼/Q`GğNp_  r䟁c"{w8 Uwfˉ ߽skO r'Ӂ# K>kdnm:7'7>V8\rSPLZG_Oi >XX XUсFtM=](TPۀқ܊Zd\j }h$b22Ǜf(֬:WE?np]ߪTŇeGvVA~Н)]vgogǖ}=p2TqPGЉ+?-uw^/pXuYS"Ϧf}짷=վ\gnžz}7ZĢE4HOH4v_]вe˦LǏ>hMf̘1yyr |0qytްG\&&HFdLogu}]&HJa ݛ E?/\@ʅ G(EsbUEH%t%!cP)'[l)Q`ifPGXwNҩ)cEZc"}v V׏1 s꿀}[@է|SN]s_po{8K*O{$`1pkW?? HgY?GXw=UnC_.?ϭtb~??xL# 9hMtS5 ~[el\|w[2]UU.\1 `R$x5h{z'OѷětJ?!I cP;Zjȸ2MHE(+WKNg%2N.!ݍx֔ Ȱfu@R)84@ ͎6v4[Jь@wӾh@11 [3ШVru<{h|`t灍&*0g՚t dZh@z~_;u`e{kǤ{/ŀ϶t_Y'L:6Phb#ɫ %]sgG٫J {sjd[?|r |u/Ȩlsq]@M[ @әj&T-kjC[ꤻBU(0zP잮n5bZU5P"3J{7UYuh駷uU묲S@T|nUȾ~< H؛fDYgx+lEQGvII; uˤ%קqMAq}Q5&Bb6gK[A0RPWe^= Cuo#9|44z'ΞPSR>z0 `df.8ۥfVOO;t; KΚ=cp/a@@@uo.y*dMK5]F+be0衔ŌK}P(D|h1 E_vNXcXR]ԊQ8vT"гR*y>hṌAn+'DaUu<`tѧ2iWզj@v.Z^=x?eJQ`nk[ݰgԷfxCK @{&Ԉ]z3Q3 eD-슨ipb.aPueԊKI ܮ('껌|Q'R/Pl-Zo ˩hw,ӎ 훾(|hiFY֐OVetDн] Gka̳C{etu;n-%uXjv<-W~͛?KS2@EX{J'XyγTXG??E^hT#~}F/x9M|X o + l>QBʄ;;:|LHnKs|e_jQUc@rMFmqu( e}Sm2DC-2ok2`nG 4M$~Ko (ӎ*B׽>6UJWQY/R--/ʾ^BV5tw(%T+vck{hPQ8|o/''G >[sOa/ycwg;i ;~qӛ}|;Fᵔo Z>K%%R?~.ro=.ݴiӞԩ2dM2rp'*/Q5?[R|`,r/oAUeKvBx"m*uxWSАGNXq E١U@8j%3)WoBf%pQY-\YgTԜVTh ;Y9da'lU< tI20QIV6X IFmuoóZD渪?UWcVk@=]ረ (!_*$ݪ&@!廉FHB@)kuBB-m6Š*>z,5s C))|Y`lACTmT%9:(tu^u3DJA^SO ۮNz԰%赿6\{dt ~Ӌ?vOwd18 'M?~Et`[-+uR"&-!;JAQ44 3#T Cv(X؎2bH]%'v L^䅔 PaHU=Y'j-_) udCYPuJNQ-kŚsvH 4Fr| 23^FBjm!WSZ ;&fvVtWWh ^{2Խ(^jNpߥTXD2Y`}nڨ{F{Fgo~ o5ӡ'COc[}˔Y|ADbO9*jSNSY1jiaBx\z.E6kssN{`fa`f!;J^Nk.OeتتN5NJXaGЮNf9aUmP;\MzmݢM1fuXݽnDw*"NE Ӳ?M($aB!w de"&0iJIJ `ydkBvRh}q]\DhTRB!P x_̀2Dz o.y^F5nq.⼭Xμ=?]9b{y ioweWFoE\/i,Z{ǟ -YZ oi_Z係%oZ]+]bɢ_`u y9)p%^RuK.|0ѕӗ_:K?6×\rO3#4->~bN?瀀>JzB){YZOfw~ w`|[[a$GEGV;edj?<t×LjZ̼^{MV &-otc㺑2iз9 AH(b'b!?*m)fwBZ1I4㸾3axPu2.fL@jSZ^Op(8 [Vq@-.`Esj 3Zc5 ?^Rcaui-`4>w_x|&ܖmSãN==hɹQg*Hl:`˗4Ǐ2z0-ɣL?_=[Y ɏ^h3킍I/`O+RYZγZ##r>-++\qPHjksj%j@hXx?c}[^ܐ7 ײk(ٹcJdHft!&'4JN3ɄH%r" RSO7 $z>4xາ+ k%BxGHPt2 `O.ז5 o.;1B@Ozݿ5`wMhU8y a$*Q?~wǿcJQzkY(:G>ϳC_isއ'N] ~yٻvQ0]if];RpxgxK!ܾBń۝m0lZBCx)JwM0# Xȉb:j&8ɈYڀckL,_6 DsHlu# =/l%j_v l=ְ+Y%dk¼[T=c?eC+}JVr<:hg2n.yNg8.~:>;8+*7|KIt3 󰛁[US@$q95Hq롷ZyƁcG }ߥcwûdp8'l/ځg'6d՟E3zsTS0vV}}(Z+i 5 ؆VP_35cL> $ 5Q #c܈ݽ2#2va*`Y?A$ts6 tM -˟W^2Dj[Jq;%QwK3,Rt5@P|h#FwV󜹞޻齛.nvOwsoISy4=t矼`3[uiZhq,wO\-;Ђv){GGzwCx~6E{gi1؟5x~o`N匐!z(#]׬ߣ<Щx5+={.RѻR [KM\yE}]0;ԤKw_;|w|Kq~M~aGo(зxQ2f4q ^{{b0=귻]SU%hi?귔|GhEQ|h4~BmxQ5kRU( FF;$@5e|"2 Z` ?IE1:y.2t4N˱6@G@8!ȂGOi@;~cʼ;ˀ5. ;d[H+'ݚ8/&?r|h XE 7\' @[uZ.,t^hV[w ؕϹC@}YbNh?8TKƦӪdNlKm) Y 8!>Vf? 51Y]AM ڛHTKW7 j`d"O\8r ͙AYҎ>^EjGKoʵCv #_rpr:gei3D_2 21iď 2[z+;5.kx?^fyےEh0::;;o=RvW9m|a;r!(; ݑ0< ^JiKaq`)Sre"[*+,] lW)؀5 P"I#W^Ga3'gBjʵ6mu+.W0.|VXJ4@FOҽц4 [xꚱOj@~|#ˀ{ޘ[p8Ӫ_T?~'/~VRgoNf?Xג%+>'|Kz ?=$^_c~Ӂ_Ƨߍ':9_!t^0𫹷_u(wkz 8&:Q *3kG%oD(Dc-v.r9#bQt3YoʂxNdKӶQ՛|HqFIs- #Fvr͡Mpϗ|N4}WvBSAjjRP*Uϕ-e ) o/Xd os+B}"=*m@alYJ{/4TZ! I.]C- 躬x>4BS\Fm[vʄB;ii۞4eIۡHڶ+AS3C8;rp(Meƽ*3J濝L+?::}WOst-g}4x.4F#,mھOԃba/;Ӌ !d׿zRU[P R-8TTjZ0A˹c(v @& 8!N֤i(n[*t#gzU+m@n_ Q`dr9#oZphdeMrv `q O*I+ Ijn}m d'^ 圪 *׾XZ:TԯX7)h lk z[eO 2mf D Pjf@Sn@)o"79ʬP ͂2ꎯmٜ @B4oy{ +9 *L aCȢRtħ*% (!}YcUjO^¬뾿姘ra->[kV/ng׬eϔ>a).& pakO{#dSG^W?1ꌊf ktZ Lvaie Q~qow8}F?_|X{o .vx畢(+jE #)UEڧTuR,6hE#$ThX\MX ?˭e]ՅYmC q%_j6ȧ\D: #Cb('℅R l#cJN/8vGUd[ŝ m^_3"s\x|匋] T}W7>zM= VJl]rOX975q/qG?cߚ<+ ?Xܻn\r̜|?j'@ljy<{օRtjlV^Y=Mt|u,`7̸ 'f9 7:Ӏ6w@vReߩ3'Z 6g/luNr9]0-uc 3yvÛ]QySv*W5TωT7DQMJj UmflU!TBQi_'/(E;Ҏwm"󾴙}g2B@(+ǺnF wnj6]9y msjuHeVf#tK_GwgW5+=]d" `g^|$Sǝq{=}Q[[m#ڛ{doCM[F-![Ꭶ~48$-: *J?DKJQWXZTUMaPPPpBŽvDqG> "~`sw8!\اLDr ʡX3}r%𸹏x  JlDr௝&7I`Nb맒/; M3>S*lZ7NTM-5zJQ3+e̹59hqz5Ik2LQkӡٍ-@Wn!nYal5n 2nQ| D(viUvT8ҋaQ'<׎ ˨k48l͛a|h0=Ǒh 4?b0S5$ wʛCTt]F W69m\նlm೧`@@@]s _9)׵zd D@@@_eԣ3-93 '_\1[z~)vetX!] k.Mor㏿~4^yvgwSQFR* w𔢚濪*Wz1h ܿTB~R EqC1afFR8pBP Rr~>Q@30n%;ȫ4F7i@v;jjҚ >}[WWlȡe-@+TJJhyRQ`O5QM pJb;&XвR*B&mIk~Sx*dz# 0kS 鉄;u̮j:V!U G+WO3=Dɕ/KNld'R/uKԿG*&RLycVd '*V>ПBRٹ?VXڶtt_?%4n7ߚo)>qG:;n_?3N@@@@]JFKb1UCh9nv|zɵpzpvtYhKC_ wy}C=Fw! $dkq%?u/,{uE7sbx%(Ebetd("4uJ x_sB}7Z՜r2Qon>Eu"OŁɇ s>OD#GN]<ԬڏNzrR h?-Pj9SXUߛٹ} nc= _7Q'ܟ'Ǻf eMl˻̪ZeU p!Fʪ?|ƴUy s}NsU8 /?)LX('5y|]uYn6mڴMӦ1*Ѥbe`P e7*3QP30AJ6D Ѝ4۴Iӛn|~s+e}={ߟϹ9~}o͇ul\rY1wAWNuȩު0N}?̜&;VXQAw0.M.(OFܕ6w4:ex owԥj @" tYbe BD;^QD!0Q;=z6jESy0ʾi8*Ђ)T _R74<`:?:?Ap fbrB0>d>'S4rrXM^8FUKƘ38렵Βi:d-Oj]q_RWĔr@ o%4"ND%l/)Jᶎ*"TFQl7 ا EtO"l7"omxK*e0z2i"AĻںz 76pK`n]6 79TVmXQs:<5j5wjeN]3@_GS}k7ߧ}M ju7fy|xԼ`JO<4L⟞}ZPRyui 8F~C>FvN2xá4&:ip.Oİ2n행D,,Xn Y䖚@DHSjQఆVB& 5qkhzrt ]0&a Dde9dc31\jPD /R :Jsp/w:P ho6nxd* . װxhK&.eࡧ>]\ӟ_qo%p˦%ewj>2[<:p+_/ݱ'ʗ[9DK?n˵_^(՟+W/φ?\p?pQ&_}mC,ݳh ɯ L9㫻{ċoF.z(Q wA_F.};̲oҵ0x%SƙgXL,Ƨ*St`0^S4Μ B\Ӂ @9eP"2oq+>PCȚ*p*wt()QSXQ;j;qP(.Уѐ!MwԔ !*"l%$bI!P|"%Q]-C,/yB^xw'}]rO0 ZE|No9)>KDB$@'"IZ[zU,LWK}k7GhjjiII_GSSGGK|iv-]vʭgJiQ>bCf%a~fqSG_+.O_$.L蕋KYC'82`655e?9ji^V(} 1fWK:i =j[ݰlI{2vJ۪a5TdY*gXMV9[ݞa{_ȬX tu}Vs/tчzNއ%BEl}Z'ڏ}oW {"v!J#Nxw/DjwVvn}L l>R-_wt\1~sE*x;ozgUl\7xD/%\~KX.;tuoݳȚُUfg3eAC^b,9({[dJަ0rktZjce徭}Q6K;ՀQvSMCgԽ6TԖ .6R^Ujrnyyrp`aU`aY] GٕJvO;v_wZ;,'/{ _pv}R >X|8+yGyv1SFGB#-(]&(&VZOsCMBZ}tS(hؤV6[ 2S/4>d^|+>t#N>7S$LLg3@fgxlFRw?YLQUE°b(vиD*) uk8TmcQkN2}A;)TP*L0ޢY8"J+aB{ 1 ;*""h% U=THMJ ʦCSSc\fH}ipemTKכg)5STv|?`T;ʨ.}< 3UVLQƃ2`QƧ)Р^.J ONѺwWAwdO fZM) BÕ;Q OE/p)ZISҩkVQS8Dj4ʨ%wTQHaP4I6j"MdԧԱdؑo19 LU31y㎞D^<7'w) _zzOzgkT֯_2K~;]->_sZYJIu4ݐIOݛ5rwGe4ɭgrRqG,(DŽm[-;&G3񆶞UPڽei\ZNk `yա_kznm:RWym.c}ߊx}2۶t cUƽt;!t[Js}m5}'910Ïꡳ>ZxWn9C{?`t_KH 7p|;"KƢx"-nHE01-iZLQE\Ń(j}(0옢ff$b XqGaA%!()bA 2%"b,wx(%,I0J@%$)".SƖʲL5֒(aNDf0y%" 'L@ 7 f|a`\LL#|` UX|^}0)?zJ{0Gjv?SktM>3pV~/<{r_POf{LC~_QdT@|WC`|BNL=9>a鰣f-cԅX i9ѻ,z2uL6}dzMLwZدY)yhsW?vٟw_K>X7G%R{-\y)HC3MG(zlL&.XLaī_ӝ!(359Vj!*.O٣XѸtywi6f5+6t.V77uR|.׸jWK}+SN&ΉU^ʸW:#>t{7vϯ;㵗;Ȑ:njȤTj4(^K`x.nsGc^>.!h2Y4!ExT{";z@lel]"k4⋋-*//,//Zg3lg4w\\+y ]-uK MJ񖠯~m' ]-;ަvѩK$ ~i`QQp8b È,..OƢrc g},zނlu"& rv~w/:? lT~j߯3{_B{_qT6HOhT;GL H v)scj1i3Nu&ec*5M1&$b<.`ؖ$0E Gmu@ ZFck:T@ xLP"R NN%>"5S56a*ia8LSnjVqG  PK5$ '3TJN=Lԅu@/!J〹,jg+h0+k_R/՞0g7po]1){|`f#} Wpquq?_θk Oww٬5|_q?W/~x?0ʼW/8#e3_pEWwO5}vU >XulǓC(o"Q!L-R%@vCDrR#* TGSe4 %j#cjdT+3* NLoo""Tl}~ Y %je&LDa:"aOf)eWPB$╀jԉxl6 `86Ap4ҖEpsPتrSpVS:LR\K g uTs [R5 @4"bKt}`ʔNҔ%U539]J@0t&+ }a7!>kHhK \ a@+"N8GL}^ !(E*B1>l E6F Yb9lF{_# b`fmI3ʈJveմ8ѯ20VAƣˤ|T'aܕ$Nl|l\8?]YK2$yC/>]E5>M_ͻ*/]Kop+W~ GyqJ),oy- Zi6^LĄ2){nYtQQ;pMbLQ;'eȧDu,b H6 ]M L`p @wT (;(#PoƧ7 ({]e`,ԍ l0=BifWLVTG׍UWVW1Fչo^?}^ qg(i,U h/xYpꋫ8lJO=ASt^=_nW `îyE <̙ \:3{=ͬk 0Àx#[H^_01ywt~PVX \P8FdvfeXM!YZd((c8^:2jp: 0]NJiM&pG'RHm!G;;pTcs9q1D;0#P"CDy Ϲ Ò{^_mpN祬~08:NUS9ȁ8QqRO/7dyGyq\8BlTgߟ4×?}3d7? 5wLj[ rR{4mȎ@s02K}穀?4ݺf)NA_Y'mTwQ!`uϒR ']8 @|і,?^ ֆW~GU&6o;5(TGJCg3g(<7Ӓ \62'.jHc *!əJW*2 " FaJ+ p 1Rk i2r4B촰*Uv j/WJ[]cDM ؝悋 Zf)!(cEwb@);wd 9+B拪/'ϭ<){37-x"1 fu4շCWh΄{ȮYaIWD_F)i[{')$,PMD)=i$gGIeS3܋5M t8Pa7)*٘.u)jx"^ #S6B K`0XeqIϠ2&q@PXBE"cֹ5%lsGM-DgݶݨH- w;ZeJ.@!=NT21?x79J6:p$~X4>^0W10}>ſG&0:]Oہ-~+6ϿpƂa`ϒҏ\h?lZYve[}UMMSOiӌJfye0lIyy{f-]^gj% pSk9sޝo+n`׳5y|b?zWh/ywt?lvcm`c`U5RCTundoߕ`qG`ew_X9k0v;:pYVlԶ1I"Y~ e҂:˛<9_8]w貱Y3.y٭)f[ä΍( <¶5յbe kYXW}MwfϜIK d^=mc',W!&;+rJ:Ҧi?gN@W=E`W_<4cAc0u4_ (Ub,)m,'LQ!:"RrD(R0ݙ6!PҌrG6ST&+ T@k@;afbQ!!f^@Q6af-ǣTЇ"ǀ5# (&mc:#@ZLTiccJH%N@IzH8xi6. @>Z DPbե@˟lb>j@uȋ%@CKjU{ӏ{@ƪ(w0Jgh COPj،TWRCakSK(pJ}lP`{blہsMӾ#4-3g  w4DnfӲC'o=ʮ9ޠ25e4lc))wϧ=z+JZ{3kor:m?3Kr68-.>I<1V4L4[RKXdի}͖'J.G=1oV%/v2!Lk,khݲ\ E;R!YUYu]W{ccq1Sޘsy?{z_5$COʺeid+pC$ϣi_L UbU[SgCzIa+rtr]4(9o%Z>S%Ƚ?SK܀2yqDH(,P))*ImgZU )Q[ϫm98w4)*‘TD*ST A 0k p pNjȌљ:`0\ &p6`( -_bqGKQ1Pa/>!ⱏhz-ŋ.m:FIab%f @T 82gk@),ZaI 7i{LYļP÷-Z(A`N0׬:'}gtLc {\5Cͽs3\*}9l.xbU?lWV1E_z_όO~ou@Y"?Xm@UϞg/py ?{ʯ{_5/> 8)v`55. sd;??;Xn ;/)zt`[L@xf3+ʨcb05MbIJ؎&%\^E'DZJ ;0~#u *fLj> @ĵfCn`b 'ڋw4;NA*Guzǀ޻_`pIۙ7͏=X,,I婾JTY, b͊ۖ}z6JDbӴEE=jegֳȠa8vϩ*ՐֶsMu0ƤJ-bf{MQ-=`S[4htwīXX 2C"SvFB KOj~)q @HmhT Qh}OPmjXt$%2!@Dp Q>@ 8pebZۅ W@fhw8[;/͒00w`ʥTƀC׍ ~|yA`{7M޼xgݵz_:/Mn`m3^ t켹~ZxY//v+;';<<\ǁξ tyogG}Wϻg_>?UϽ0K }(c᪒݀?<^gB=)š"<0&Y\` l˅1ID)KbUA8%w4e%='S?QX;ʎ;1LMh=fW 婢د:"9L _!5 lm8aX m!@ca6. ‰*A80 SEN BX BmAaĮ5b7 ӌ!'i̿ar OAIP?HR_wC-"#O(NB]-Ɏ2G]-4UEbCqTSKoZ1݅śO meIUDҩa6L)!c8un4hRRe|kHRa|TnLLC}:r(~C-7a؁aLf!{9M=1l v蓱bjD/&~ai٫A#3,ѯU1:" 0<\ۄx-5|\O$bSm^]_yE@+~,ɖOC'K9JPb7 @ bkY}Їy짋Wt=-αS IDAT PFMsڣ%@Dl,dT_q@qT7afUfKġO.z`:Vj,LUXϾItFu" @9Pae$HD , NVpض ct502Ѹ2JN0<pDXo:*_,>rŝlGk|e*DҒ,;)S^DaÊUy SCq\so=Sxo"GO~*X1 e@J(ӭ;jUU†9L( GOq F W:e ˝Q2VƧ)`uPX&)b}_b1BBhaĶEc9&blcqGJ@ą5>sX"89h3`)@mimE;C b<v.K `Lׁi]WzP~QA@\0cm?p#e||F]Я~:Û>`W,E+~^|y+/ٮx=zcx^;= %Yq;v{W=V/s/~@p;s* l0gwztU8g8v J)OsOISՀ=x73@Ĺk0fKt7NFya8$`YAu<`; RDPax PȺ eؒUMGXo(!0a<;*,i'R])CdnQr3wZka`kGy; yYeeeW_}uoqX <#<8& vہI&ʚ5;^z7<5^>Rs;SW<7O]v՟JG3gd;4IH#DweS4\%BDiVX[!bG.UE/5DTfGNE"ą݊6ᎈGjnb9Lm ne[N[;`r:((MO9J$*F#Cc3TDlh\S5ܴS4T(0pJDj$#n*PvWXSm} Xbe~;kpCŠ36%^ƪ$p11DHTDP v(@Gph~c)"Pab%o > =R[= ;w?j>jja?{o'YUϹKKwO:3 3@QPA0F4FC0 J"I'q! &`C1}D @Qfg齻ܪ^gaxA=]>o5'Kz 8%Nr)wiUSmБ] m 3gUaqkx5j,P{iZa5&2;.&] -oa!GQ{vgJkne%sRWj陴ƪ1;Yc؊Lവ''?}>jڜwכS\ڼ1+/j]M5TS/?m߾h2@2g?{Ws9 syksfy"YV;a6 ]X5ـk2QĐvÔ Xa )Z )c^#@y!EjT]*yw*-7hwB(kElg-Plf(QQ† e ֏;*P1̨  ,H BUiԠw:p@=Al {ckQq1ڝa#kO]P&9|I=׬y!`Kwvm9 wO޾qWwnO?aS?(p'_ڴ=WI*P:{o׀>j|;ly7?_=W~{_O] +;u}Mߩ |yuߑ2,;[:>dt"e'f ogepM5TS/ e'7q~ӟYvҢED2~#EIkY,Vj:-0DCĩЖd.m9z+W+⤨RZ$%">(ZsHXIDĝk;K։SkYsNjΎ# 3;CXb_P ZgZ6bQ)kӏEZ(-enAʉISfƎ:3sQS˨ $N ,I a3}쨊)AYR4u`;jOYmȕT@|ؚ%Eښ:U,&rU:[~٣,e#v41ABvY;Ў9r;%LDQkݔU&ZgGjZ6x}F=Ft _zVyXs.512zÒ^ݷ^t\tms߽+>ؘY;@3lz:::٬G>|3---7| ^gC Ζ -eCU4%E5!E!zr,tk[%¸ڮ„ XP= L&"OB +! hl*Pn=vx+,v]d* H q'IEWcGc&|8ͬ :L1*"@5bG3QWM jhlOc z`RPÝr !LJreIJ ۫SU+&+zw'*ዳ&N:2@lL,0V &^Wҏƻ~q4#ۺmza`_ۿ S_}`5?,'oxaG9seqM+ )Cv<~w|[n9 |ǪO޿uů/}{vxw/}#_|e]:}@1`mٮٚNv3x3#tظhh(m?MdwLJ Iʫr6H쉢9@|( td#P1&:$,U},I2FmÈЦnKHg=sZ ׸w^9,x-%pT0bG8qy¾4:Xzv/Ϩn೧ݷg|ZV_Ms׳7n|VxSM5ԋPVz{s<-7lp5aTJRGYTSM5TSω"AFEkxm[WRi"M5TS'UJA}-/~񋧟~'?I~-K=6u\m-@*Q'E km擢mG(R:jQ[yT9 cr ?MD-BF"hRh hN󜍸 5;mWw ?g'4c9Z{ˏ(;+M$bSLW:Eh[T6ABiÎjÅɈ*35ߝ;]^-Dv;W@b@ZaJS^& ]F;v=iǏR]8"J;Af;Zi%h >"iLm(]5HjZcSU;E )*bRổЪj9REWT瑢*rK)STwE˨uճ-^Q`9Z+s賘-.'u-_ْo-poyӵ[/-t#7=2? ߺyS74Fj^Pm߾˿w}W~ C{y=0c<{=!Dgr>)ZgG2H'̲iY:]R1~hDq^(>FLDiOKRx)J 9<)Rt@YU;jEHQJfT[bF "> Pi ~DDe :RѨB3J3Q@h 36֪b4( (?1ٔ]iIQ 9ܩ(-M>G=*^n@O<f qPŞ(M,cs~U9Ln>}mXǹS@lݻ9;vuy+7b/o; dU*eiop]+?nWW:x[_uc`燗?B7q?3<=@=ݓhIu+1 T3cGM^Gj.#kr$>Dɂjz w PU[m }0ʀߞ`OEeH)Du6m)%fJGT %L(;QtX79]j0/?[=yZ@/vɒh}}./tz${ѿ^?K /呛6oo')y窯L}l%Me'j7=c_җ~/> ر.lSM5TSM "AFOFM5TSσ;dt -oypUWܹ[o~~nZr峵gQ/dti/1oҀ4`o!uYrT,K@t̖(4rݚD4Q7?R'cQи5*Bi(@ e"7Ne/k=S~,IieR4uʡ!PdU"6 0Sv)f'̘b^ ,t'j2hbН@ ZDV(zmN3S[$C(5S0.C Db;]Ӈ|.N U3qka"g3] 9sO3+R%ԭۋ)3к]gKkR3Ky@7Ĉy㶗J%w1=6]o(v۩wF[zf׻ `,k{WDz.:o!0zѱ~!0ttM;s8 ,' yy p}s0Gϒ3z@) 1J~w:N O P]3Uþ;Y\,HH 6Yr1mI+ᇀN7T0D>g1Sff^4 k"k!SPHk3l Du &]h7"sYt:ny'47tXm_K!? 2:U Oǭx&jzĆ 3<Ӷ#G|;zhdG/ĈNTǁIc<`V?Q-x,3J7֣Eh#vTPZzn-+C%A&2Zf!E2!Ngǰ:"4K+ BńV ¬ "LhIaUt0^Tl0Zj)jKI-0:NaAln:C (!BKG WrIdiWQ\B'4]𬉢Pi/B kp@T[] 1up$w}]>`ضwԅ~qaaj3wzX~hzy;9=+#˼*7<6 L?t X2Gyz_:OM?#g୩Uݣ?ՕMSnyhzykΗKx:2:T?mzttf%4Ѧj^dQA~k^s=|C⋟<?ί5Y sK,$E-aʠ\wC<EjhDj,ZBb#R4LFhĎ-?eӆ3r*5PY~BLmQr]OlHQFRxuvtHѩYRL0:561&TD{:d5;SuQ9gQ3*hNIa\KPs9fb096MjV+:{Ri m~4PNMba{WOԠnybyUfm55v2EB@7Ĉ͎#~mhv[L}!hKח+S. l߱;gYk/ l߹;8|^a8|߲*`u,;u (<޺#]- yWư_/tSN=\K#h.ȱ3$8BSPnwfٽR92AlmİLU  A6fHQg] ) Q OE DT~0 M ٻ5 uf}4jETmVz,:DjZ aC%ǜ \hEst`e-K!ߗ62T)G*opl8<G+jj }rʿ뿾Qo(z8 O"Z̓h(dGU!P!*ZJJ ZR),D2P<%;򖾒RnJOKO+!45$]vE.aFʀ A t*ڪh4ARI%vYe-4aRI%v &4 ]FK¸ZZ DZF"}-BDKP0 eDQFZZh%%VEY"V9ʁ1ĄVb*aLI'U5^ O0&Ȥg~l ؀U!a#V_ux}b4Ĩ_~Wdvgv+WoٹgJT^sU=*_Ht9?y:S"-嵢(:*2:T>J֠Qe_?|a󄋪Tnyփ3tSW}0hM5TSM̴yzM5TSMo޺ IDAT wu~_Wo[?<෿?lo/j8h6ayydf^pƋ{Nt=c?#y߳g?^sOjjj[W̷X1?wuRQ Cַ2tm ۍ:1Ǚ-Hh;\7r CKtljX"FovP)@*q@ڝ ?myy :1j֪Z]֩# (HTTY'ajOv/@FL_~updvK H1u @lx9 )2৙frV`O0'Da*S/W+C/l=z#5֬ـ3} HXN.8[^zS-OE%P g>.޻'0\HwL;Nj?MUh}*|  ;60tSblE\]gi޷߿]|.?x;;˒_J;[@L)>Wv|2P(*{/竑?S@ fZXG[ //+v' rŝPޔey >s@j(hY 1^[ҜpI!JD.HZ餹A(Q35w6% 5oYvTHq"Mͷ35b;_! " -"ί5(;s`DCD--ߺF|l64qw|Ҵ#?|ৗ]/_|6xBEI33*௾¼wOyu_FP =c]@|=aB|B]5TSM5TS'E!bV-Cq!ed*a )˭Nq]&L:YAd h0KdH H2.F/jw20"U`OgNaZYxa>clhE;LYU?UVt(WzyAl Iҕ'Uw ̬T7byYU:Nn`WT]ߑ| W1Tz: HQ> "?r汣ހY6@Q+b}}٘]cӞ0pd4#$~6JO6ғ-'WB"ٿˀ̧*@졖Ww+ S[pϷmyoI_q/#= $E!Pj.Qj=9eئ O/ַoMh; #%02)eM-P S^RI R5qcի0* 1-5 o' s^(^k]d6q9쨘.2:#,C_Z<'gφ\` ]%;;-g_3`I{S+ݘ pc@T1]IGEК -Nآj:y->uK1tDR(W(WkZ\VU+0NG؊*2̺P资B;;Vo+^C#}{.ۓj+%r8M}G2*GOGs?q{b"ʮ_c99]}yw?!=OOr߽7>2LWw [-b`1>r A6Lش 2_9G* Zע;Qu'"g@k{jOW$H )XE*zX"H )D_9uQ%Pxr%A@\F-IJc[Bf) "5Ռ1Cyڣ{]^gA.x>ms\~g~뿾9Ym}]+.~3"Syr- DZ$0] q±dKb~6U>iSzvC'RpJ9'USM5TSM5gvQFgzWor_b+BDORQBW\M d1D%fɜ{&5x%t0dUmve&)Ue0[%<'"V)jl*`a4-QLQB-D"S9k&4-" "L'j[s)[ @ (*L 1;6̨bڌ_nj6J;#>,JVt3aL5=;nvS\@Oݹ)@q,Y:# ;9h>_x% *re&oT-U}&@Lm<=Sb5@kS@8dlf995UI^F1i.xhE9iKҾ0۴K Ю H_ X BHa~A)U"D E-BdBbQ`:9XY0Hn}׮3K?y/wzz/ '$l |_ޢ>z]|<l.83֍=zfp~{j=CcTPOOe.`jm } Թ1婰'`fupF2\]YjW֜)Qq=/',[=51 `;y"%@]b`>s15Y,@k2i ìRF#>˾d6Ⱦudt>q'~ , f0w{Vgf@.Tl=NdR3߫ tsϝDoM5TSM5TSM5TSMS$=9gpdOf*Xm1+L۾'jZJKL4{+7{1MȊVD53j.&HQAnA XaGEXT˨Dά"fFC-,)DrchR-0UP)ePV"DX'کЈS.B[5R4HW23Q!:?#/s!#R4bG MmKsjQLXUE6aG5 %Z怘‰;jEr]sQGhÎV]*bt5M.z1q(\ ̌%Kbg* GgTV@GݐϢ\TZXJS#pBNVrpSNYYNvAj\mΣ))LkBDWQ5B mhR Czt 0V@BQ!PFRcG5 I: ޭD"60ϮNt8jEg,}HB+[bVNbfҋrhL66TSM5s%FFF͋bD'bu5ͣIIgI'cSIqH}"NwԬKǵBkQ lU,_93>$JXz)nv!Pn6 :6R4hr8"E +"R45U^-¸*xq -l?@e"S"N 5<,"vtH aՙnb;\VmZ٢"׆}?%`>BUfaf%0ia=a6&wh8OfMflߘ! A²Kaٝ3f$􎾮Z7l9: CÎu{uiAN:cv\oX5XН_CLɍ pS:ޯ›=\| $dw~h<}F/k7^ /&ӹxWfwgVu \W(Ucpn@36>X"0qZf dEwg.ж]u`Z>;Z~:Vffz@ Y^ bH)r:ʵjp- ?Ós)@T|fM2\%x6\±idGet0l0笱ug) 9^`١ͫPx6 ]"\Ra-t[eœ dd לF-tHΉ|;ޚjzGZ !:::<zDKI ?#M5TS/o5~?e'^H-ۛgO)n{rԼXUO970b ^)R|*5幖8ގ۸Zn5' mr3?|)6ݸ+\¶-+o:]/+h̜ٚ˨p' C@w:|Îj\F6E&k]@Nw4B"PVK;i|@X5vtNuAӼ>t\cAOq783~B!O7XLMW$ȫX"9^s:^upf֢&ds/9M7rbMɣ dܿ(dۖ+wul|3%L~eKڭ.>7й0G~>z.\Ͽ}юYgFFFo裏}޾X(TwKmKh2Qᇠ%Lzڶ|my!ESbN!,\F!PnVU@y,/M;BP1@ae(A>0.k"шϒwj$E +H] Fvʪ>J,שЎf-u|$q HO;C3P(e tV8 +v mYH0h,;LJ2ar0 LaS7 }vcWa1}e5vj7nx}X)y ;&pLa. SZq ,//>x~zoKk_oau~apHڿ@۞|W(<H>mVZ<'HOZw Y  rA"䞜1h/b wJ=:^gضjQ1: :^Ubɴ!ula<ű< ;I#hCmѱs2Flx~%ycQbGKu~_?.#_<S]_媫]׽^Zsw\rL=Kw`kYtlE~iYsݓ17ߺgiυϫErbɳ'ؘ;/AH&WZuСfBTSM5 u`xN]]t :egu`ώ*W|?Soݜ߲-cۖm&igF-47oݺ%7{?fm˜mz͛l5> `yH869 4n<۶7o;#]~˶9ӾaEv̧>]07n/0K]$lst m˦+UT`/k.O,{P> b"fY8fu2բ7T[og^jB8N, `ff\.[RI+ :"aF E{mv"L-k `&Ē)RB)XB(-F@!51CiL3G IDAT72@zHeGmUŪ8ƪ"d@'ldYʲ4hG("A XeaG UED-2`%BGZ ӖEZ -JiW4bX\amМ+C,,KBXc ?*U pb1l.v)^(RIJ8L̄B)ˈ\Mؔ-ŰIm):eӱqb([NwK%\{ȭł՝Ngš<')˫,;w<ܩcSN]V^f=phȪ(R|SONbYb\r#7qgѿگ^;f:+l[y?{ܶeS#7葈v79nyQVopyU7\Ǣ+Jto䘧i^OM;ܲ F|vH\wM{#w_/;|Kny$acѕ0Kһeڍ4.qh/m[ogdv;`ࢭ9ޚ%qE+0҉D"fxjQ.~XfVU&Z9VRX]%ׯsZYю**_yQNPكa`'E]e|RDX[$D|ԏt,?e)WS;j)4&^ա6IzxbZmزɢ,"PDAw|?{WUuU[- h$dm9;81w2$'3cne4NFי57+rK,f2'qq@0KD#U]:{Wuuu%0wҪ}ٯ::ԄʦdWr^v}GG얪]fc>=[z{7h9^{-2뾵Gw|B͛v﹓6߹ޤizUq;"ם=*/ܻWv2ӛSwGO5̇j^"|͏}СCݹ\~:_?O_'.7WK퐘kZ|6ELh :cQ`r7TOQDiP mu@6%IQ6(h {U%۰tjVw4NYOShݘyڌE$-2c?SvZKbSkA[ QH<5MzWh)laHV`QRE[Ph;5j&"i|0$!a$DDVHB ,E-ǜUX4h!2qKw2Te[NzFU_R x%=c(W\ 䎊T (\qJԞJY $' pCN/ uW'Yv>pJ{ޛ Ļ={*Q^zU"g6qT?}@9xeĵ ɾn5sVҕ]fʡ,kI;$nEyW_<0`Һ;cTseE(*+!5ahWH[I?(0 3CMmBfx&yhWLENyK4m4 U`eG/_G~z ?G.B-3/ ؾhgn0"|M[nX,={P(QO߿׿ùyg{%fChs3hn lRq]|uj"*|GcYEg$pjV :Qюp+[I[B;+)O{EW :QC$:Q2 RDTQ]W"=WXW받i2֢\2ȜB b::Nk-QBtV]TL9i`cqz,S-HMF+%qF|B:XRp*SDhȮ@%3{2FJ"QZ{˜bbՙ@ge&ҙ@eU_iNeý*11쫯CJ̨|fTTҚҚ>JCӇd5gowY2gޖ'G>r09'oO0?M^#WXҲ:쯎L\˙SO\'?UO>2|d2/ g</E;6Ϧq|3o癰W?+Ļy]<|5MwwRbkXz[-whb뫿\o.^C|j}G~dOV]]:_E3]\/Fe7*~ɛɛ(ǒK/{%=~#7ešI &ҩg }@rW2Rӵ~/|=ul:ul:S)Xsde¡L*J=$ ()MlץRRCkRQPC |Є'<&STJ8qnA̺-h 9Csjռf):B͖G0n֗7EE/;bۃgwnGu#wu`##޿ׄ7l׻qޛ޷ygޑ V>za/y9پsi|?j[ Fk.#.dgyg~!|8lޙ[F ;r{7>a۾G/pXn ^׷_e]{J{ ,l-:滛3,P͋]3o_2,EappJ%r+Vz뭿{oСCwk:蠃:xBe|kvppp|||ppO7}Rvymz;n oϖϬVWw_'䵹 ?dR @iM_@ρiYU*N- pI7 +!SӦ @%@xZX0o zfpq ZheN!+$^Z(,3 P?sC9Wmk+kA#G?6eF~>OWPOñGָ߹_0ݷwy/l~:ozνnuAtp [bt:蠃^{hRqJRzJ~{}oJ) 4]6_4nz[FHR~+y6O~cGw;'ݷ^.Xy€C& sB ̨6i 06_8Bf(B)8MHZ*ia- ަj2@ fMQ Pݶ^ftG?-2ZZQv h s1~Vfʨ*Ўc-f<<x\Iuvmp&0 Cݔ͘\†!LP.D.kJ:Se5叙aUbxMwԩ9;VThlxrJM zEV.'hiEZ."Iɮ37I }>8{ˠc?0~g/j-SnǞ3Xk ͩwd~U@z(y#Py v"nKcTFߔOUͯK%Y:e)Y@:svʨWI˪*$ZڗYnuICeՍEDFeT܃&ΨJi\%ݰ e?vљ6U2a#/[(8;z(Z,Lz::%/t 7u/1c ;q)lI?l\oS__^?ꞛޱo?oקO{K]\OİWKssȢ%g[ fWaȋMȦ|wB!Tgw@% 2xкrֵLѨ2E݊4YP%{e* D Jfj2EKgqGR pGWh/Y(Ku&sFQNg-I0Ek}=u T@Dd>W u0E ST) 뉬hG"N83-i'vv:ϋ%ǀ뵖)F"`;I3UѣxQ}E?sGg[VhR'ҭWO\KaBM'z?ʿ-:;AL+tWq8cϏU?Y)m}N?/^#Z pt]C_[}րI}̟^{i) ,R,m?۳ PYS³髿R&ޔz[20&3~#@E1x!7}zk ]`uL_e0,րqJS\#k{2_8@<1N.@T @Ke@՚MM{q$g]E#"Jb]lU-Yt=Ķ厶2Emh/⺗'.Z|LǏN320Bw%/䔗Q۫yZ3ץ:w!BJ8yT*Ng2L&J.7?#<oz؞wKߟ;j0G 3tA\h GfwFG/m$aYC ƣ^}X^vP?._˽f\y]5^ rwwٲ_?KmnOzG&.R\sYl <7t<B1X30.Cj߬֯lbV>z А@ka =G7DedZ }^ 463r1b9 ѳIEWLQ e""4q; &'eS " XhZjTm$35ѢJ7By IDAT@^k12Bih cS6RhRnؤ BNE4aWTm Z Ëb朜4S,.6%k#MOaHYŰu G:+{ս@ߡD kj}N ;XFc2s|p2H) 0Q#±^ ġM 7ԯe/p9c⺴ Y6Ș?fwLNe.=B[s_҃?5b ^ 5gbR A'M_F*8cH;Q2Ӥ{bZRN Ʊa )Hĺ%k&J htC#=فALlaetq:;'V9W608#w, 74uS#/h0Z4Esַ~mrh`YԮԮDAIvvHHPZyByBBJJ("HHS)ĩi8MF(ܚvkZˆEVqh8KEFx I _/D9_ĩe$AHrD9/X4ž% J {!L't<ⴈ­i88+N-1.r0QTD QE=8E(&Q3lԪx֚8dQ|E6Gxu+UQ:tV׵:J>Z0aFDZc)\WV8!NqPЪJku3C}3g}bk:wvvy3Ѝ- Kf%滿.s,>?V:Q8wwN=?^At\xɭw|~/سƁ}6̶v`yݻ}f({t9]lQFC[6r wdGM~=M?zfsօ9h?/ߙ5ɶ`ƶ 5fdM?oIl8G.On~fzqmlFw|r]w|-A6Zs3ݷqJY-0X>BtpYk<퇯{u'߳˟/zfϻU|YD;蠃:᜔O<[չ ?}ܶdqu2xdzneg~g죇l`kwmغ{}kٰ>S檵Lz9_/o]w4O?ls{odClzFwތlX; zMmL[Yg*kk]\k_j񷧘YXaZa1e㝛cڤ7mضёy+=m rtgfv'ptB-Z.|a,i˘:x`vㇷónO|e'kL9*LpN2*E{f9K kdfoV44BkmR7,(mM-MAnkMQAXMN0g/ PJ%ʁiLBl P֒cfaDBAi @F֢%So^I $I`$ 6eK,STo>%\. eR m6i|4 J7"g2ڈdiHQX۞J95;ztsT:u+IƋ޼yn梼*Vwc3 ӫԺ.X]3<3=93G:9K9b/G~pG2kP'å@}צ3< 1.'ޓDLx pj =%̆ ST?ʓo=Nd:?2Bd@3%5SL4'`;k,TFȤEWRT 8]㸑tTڀSP" nZ$vWv6)0592#4:̹uf%S_7F0Pk\opqwo7~P5R_x|b|>smض/yosC;Utt7k̆m;p x0o^'o`nUSɹ 6bg05޺ꠃ/K95/\܆m炗hΐE-kAh#-=*ei-JZ !+ S w4T2T 6; @$R8u:ZHR[nU+٠k* n4a;u5NHR;6ZZP3`ZZƶTPP QhAQF5(WiSWn9rˑva:)(_*_jGZ$jc:5)#F$JK̀:Rv AΤ0)S2uq]ŖOxkuU0" p]5]P]\F2rG1}f(2PF"9;Z ѓI2O''NaSXO2Ofˆza*QE <51DKai}XZ&>C}?I-'ז/I]?~+'I7y+߯$}׍]7}T ?U~^u]7ud~QeG1U[[~RvVǥqlْWեR'݇݇ʥL ']/^,(bY^,eSǦSǦÜ,/rˋ\PNO{[j,, .OLtQIw*NXX"I,wԑRjMWkA sX!ww+lؼyvMw72zxNueL-^=r]vqǜ2{g72#M7oo^N1́lgn{ޣwa{GFwgK&LwiJlk]{>u/l}9[2OGbڞwϽ_ƺꠃ*= ,;Y1 μyo#|mOC?'l^%rh 7-g n_H4|!@F 2X[3Ql)jTF]/(it;jbM &1m:ci2E>+g4k%*)Ȣ&L|xeXV0jb,61-6 5x.@4a@+tIjji(5C3SLtn-/`)6p9QW,6GL+\*ڲ>VeENt/h+o62YKeHRx/ cr¤=wOey]'|tZAڞ!@'L^Lw[hRf|g(75xz=X2>+"c)^Ǣ) =z*Q@җI;)jq?@ݳƂDɂia1&w4E STlj{0Lљ$heؤB&!!FlLvަhj̜8WKtΑy,ܖt.o|>fşW;?:,IO>^;88h_6l ?C:_d߳wΠ`;z?;ǿԽ[IuyZBQn9yM:9͚v)RM8MϱΘ} 8tF%זWV4ʹq+Ly[K6C}lqJϩDEp+8un &1@u~f.ByȈ2"s W$=(#Dz\i.~AaHM(>GȜz=ٚ Jv"VDLJ[8$ „ZN$!tc󧮇J*)kTӼ8$.@?@IS[Ŋd_pU} BI Y$d_(ScmW|rBK+X݂,%~0 y},.~&o;V;*<^`k@[VȸN޷zEe/r5jx6+u8u#! & TS~QC)5]7FMչk%0c;4 L][Z"qz4;3jѤ(V$$ tpIO>;LFfQ);.bI+ʘ\ֵ: 3Wy R)kՕVR&EZG;TV6wPkf3{ [v2ܲ37=_6+_9+'3z;/^v?4(DsŸ[_%GbϖMC|\:w.tF:蠃:`]~`D?ZwՋ2*e|P7h+k7޼5!젃:щfʈF sN&ʓql:hB *g>z 1Ct][jjWjB$e(_ZM8bU&r K&sRS}a;)hddGT"ab6 ba1!YKʼn׆٭+{Ω+t"FokW ja^-4Um'Wv;TK4I+mxjVC56N:-Ik\9 5Ҟw9C6eœ&c1a ]$)edlI cqk "iƐC8c-޴(ridvb !6-{pj%% ִ_m[mI;u$+'N(ڟWDj$A;庝53J C*n٘`#x2Q>oF~QmZ3M6,hKخͭj6y.8Tf"{j~_ W~v/(wHo^&WX/w[{Sf ;蠃:+|.WfT-ܭ2-ts)Qjg=Ԡ&STE),TkҺvB#BG$^) qDiQDxܪ}Or$i0)%j]oC{ g9/oM?)҃?ޟUNԀ6Pj9] '~9䄿;(ҝ&%+Sh 7*{*W wT偉{W $3 o//@qˢKNJf.6i{N)I*8h ksj U@TDWFQ* rYR@ZVhF+mzhX*qD01&S *Q Sui-3hY)2UD .%j.Fړn?:蠃:蠃:蠃!^ٯ4*}G>U3@785+τ+_g;蠃:gW2y+*3''2¶])~+B3t9Z2l3d329-*ʗZ Yji5Eƭ[Q#!U0+Ϸe,$)4pI``ܲ%K 5y(vfkg& > Ki ~*:NL}& j*n1 tNZ20Eن -'3f͠R؄Z5CX7hFD"|Oz 4i͵|idf☓gia2ԇs4@OQZjbP=Q-ԺOOI^(0W&A/\Um،oT;Au2@/bP^"~(&X#. w@*FJ_eܕ}k[6[a@UG1 XcQj@yIpA w<~ '> tPq*!P]MnhQV# Ω=dxR@YU+cajM}14P.ɼ>@WLJ5ku!Rtʬ7UBFPϬ[m*ǰiyu9Glm-6l#8=)we_pdjop+LtA"eړ+r4O+]<+OK Y]2I׊׺0rlllhh|h+ iB\x8Ύj99iV&ճZ g2)Z`"S6;gzƮ:(~07XH^ACy8n Tʵ8!NXKj,BiuiAkKMy""R4QcE t*LKlu탵h 8{3!4sf_qthCt860I! @ Btm d'I;L jD $~qsP+.ٰ; xE2x/ϖڀ &u Tsa)>]&d̩0+y7洱'}n-1MbQ*%Sgk:25V}YۘwE(N𣧟}'~ڰv0/::!T]TOeNj ^ emZZ ZX4-s6+rF\̤Lw^CeԱBI+)I>Ւ8^ydŵ(+EE4-&0eSQ LjA'yK[Wֶ1vkj#^EHp_ElX[bڕDґ VH3M&jЉniDmᆮc:1mr9!0\&A@:0҆=Jѕ1IzUdN$dh֗ZI POU$M_NK5 θSk< SP] "w"* dxL_q2g`zSV{%Lɉ3_RaVN[ap D]rj2#:䖮@jC6H =sGj@eiP@xicɞ PY5{$!P_mtw/Mj}/'&{47'޶h^ow {VAt:qs롮hW.JZ]Ha-IBJIMҮʔʉ/㌌3RTCQ(B9eI ɲ3Yv*QQV$dٝ,8Udgkٚ {uثeDL-}%a 8D}IԗEe,q?ԂB%a_IT2RcXU:%E;-%E9xeos9DMtJ$ZNt98(_FeE+i'N;wTTIMR]j SVӵ̤HP!B؉N%B g݃-Zk}}oխZ0)Xt,ǓNb;)f 22q1ILx "8Ř=`, $ԭF~W߾{5yHXj%k>랻YߟkZ#P)6VuFH\DmfbbH|oGFi3R׮vZ Cė8sBokpZX箥n'sF3?՜T*TkS7 {gΝ*_GPB z9%]ﺖ{˿;/K6ټQB .d,?|ȍ3}cϾcwǟx/;HVhwxR4<y=L>ƕ?ʼ|-tR4oQww{Qi2Q[ L$X.:ε%<|Gm gő![DZf$}q}NpI8-c%RS⎖,0! @ {R?+շ5@\ fukHhH P]7S$ҽ͸ mpTmcSNalm=E祍g2:;:FI޼^J_7$PH`q%BZkwTwt :@*-tj 00G/_izIʅmώ,P-RmKnVj Еh=@@O9e~tF-|.G .3>=P`6NEはۣͱ3 O7͑?N*/VۮRK{:qEJYvj^stRV*8vԑRRϐТPx&Y w;z'R25-$8ybF3ԸhM&_zGC?vkZv߷cwhy3o|槊z`B H \2waWV{%fbu[-J6RN$K>ׯYLÝ[0tjv` &˞,V"sKD1QQ]F>os[ƭws+Jk]=M[*Iiu[W@:;QhCԵKV^m llZWޑ" tu7Z1]2EX;;jtU`Z6UJOkPRYaeZ 0m>/wᮓ/T6;n V3 Z;׎Jܽs_]/"B:RH}]NC3#g8]d *D8_yW..-Sf#PBPB 5^CEF7[=|WqF *Z;w~?~_]LAێs?_biX;0կQ.Qgw!#B YHErRtH1VI=c('{Ɍ5wB^kH\~[h/H-۹sh.h XzS::?T#YU][@ |IRa~ tRB]wvůlݣ9v)Ygʽ>Iyp?ՊXZֶ31͖wVj)u7RJ;CX*YvT 'nI3vVf56SM 7vF&B [̇3_X_ڜ$EK[“+08R Iћ; n:j 6jVU@J(;Z.YWJO>O|ۉivo:Q)Yo}Fn"˩D3w{ƷO<3ű3B^Ӌ`G_Lpt_ח^m !]C|+z8 *Tڕ_/?o9O)W⵫[Qu?OuL)W_F.D^ˆ^krOFE(Mf'TL$Z Sw.#/kKwuz%Oϧm?Y *ZVt`6T|S'n'Uu ȅW*b!&~GEOp`)_D*CbNF\_).,x|wV +@ _"?ֱ:YEr@ܳ@Vx*y%& aBS #SЉpg+W4`oplJtd[G] r^"$m<)D&Vj4BR[BZ]FsRTk |Uv%7g>G.wN$HDLæj\IڍM@4pvǺ1 svr0GRa q+ߢ׷ry@7S/mv#W+o5Mwv[oW0J/|lP}Xxz#tFDWܳX7f<< f9`uìr|G\W2yjjϼk@o7l ɹfRZ7[c;f$gM:Dyv4\R(%##N;m)w`85k_K:N^Xɯ=HXPBQ$PFY_PsZ,}&<~y߻d>B *T赤W[Bx-w}3g.O *T赫HnoPHBY͝~o?\UCprܳPo&Es:K2@_+'Cd: ;ΆCIRTJ~9)ڋى.Cќ/?`.\[L$\DС>FJ<tYde5Žjǎv ua$xvG\l[ayY&ճ)Rt,ҪQGJg73s[I]x"ߏ~'2 DEh+B/x-k?A):pc|-ŵ$EU)1CL[kCOpYf;@d`qvw^blӵnbc[d`-zvtuK R aQ#է[-oñߺZi?76^W*W?zkWPffl[̬=\rG H?+?<#`W{f/+/UdH+wUɁ?]fF_4t07@^e&Hѿt_p .u_]vhxxnz@⯟DֿuRWd'F۞{pm@_dꆾxP5ZZꚛrjQDeWErn}j`GuwTѐ."ǎAjܪ(cGSoVQe$Yk;j X(cS}Ϳ)ѿvF+J6Ӏ~B ʲZ_PvVjDZM*H#Y\E`nJ^ .m˯ *TΗ-!fel9++F=U]VI `3aG=)*3+)jl)Ф̌$afJaIF #G2jRJDž+khΎvt;Ǝ&d6 )<;|>\E}Sl 0dG~xŵbGFjKkT *Tլ,ժ 4'EW):@#|3 HM_8$EW%/qk54Qa9<a-`ȑ+$u#.]hQ>IY-RĴ4G"JȌf E\I|$ҦvHѨgK)+ZyD>^ RdzXYCkDps5NןV^ IDATϝ!wmf؏61IR4GMap,P(A7|(}G}GE;*kUQc^ƌgGq:+6ր9dzk*M)G90s뀭$㳀Ɠ@ּfsSMyrf 0L:myt6KvvXs.qoly-U n 뀞YÑ_zWlz. ko؉CoY6yqGV`_Uj@ܶK_\le:+@[fl×=H'Ok }zo>_\P[by͢G F# (;k-y@,17Fۜ';:g/:S:>\sk.'4.(н 0ŽFlM@&v $dG:رf0p)&D/NzMvkJ z<1ꭟj6?u~/鏝PB *TPB_kεsB8 ,+Kزqeՙ|[nosO;9=k,u;ӓ?.osy'{xcOw*TPWƮFj9t7#-Eً'~( bd>B !rcd4JwD[h}B))$aGo%|OBa+'uo"tA oZ=R[XkEP0ʗ]EG2a"djUߪ +qOUU>"3V a6[od`1J%0Vk,VI$9r%Pm4H2OP@#UwG5ZOƌ\@?3X5X+2 s&?J:ЦaYښ)B8+A*EKKv_ 2*e*e9LljeD FQʹ٪"(g*.TӅꚮi+TVWuuUgxT,J[k+:mă}זumY6uLLHju.o9~)}O[%T Lvxovxk1ԇE9ž9d-%r3uоx_YVv&jډ~yp?3dU+/KDQ֊ZdZ+%F[mI3W-Eky)6QJ-̫y[-ՊSsڴڢRQ3jvv@5QtmkUjEnke,eVJTBH6MBƱN,C ȡVkB(%Z77ZkȯCޮkXLAh*E^/|o<&;ggg_Si4L}{&Fgw8w{rw3n9{8ͣg3rixߙR~'syM>p{?w~$7_t"K8 '3y9PB ,]J]𹦗 #n̗inm!::N* &B@*O;4nO; m6QuBӔ˂d_mZSd0#LaUڱXj`<w*J E[ƱYEД=)C iU;@W{d03+YVɊT޻uSv+y~ ru>-_[tT!Eo9#\$}MY-ZYOr#@䣎 ^G}fGJKP{WWuY5}eP7=ArvחD5e;,=)f =%'8v42IlS2*v3Hsvԣ9;SkemS+^\BJ$IǝN硇v/Nl6/ 'o>w˳w?ޥwcC_ڇ;kvΏF~J>Nuɛ=o=sco8w~m|B *TPB s%kV{>gaaQ+++O=ԛH\KL|,O>|ɍ?G}=~ϼx_a+?1{77[qB~7vsO}m?#?:ypr Oo~ *T+2 ;}֋yMB}/zy1K8 agH 8VDBqo0шZ`>Rc22yo`H;˟{+w~?*˕dQCq}p 3ҡ~5=g*3|ں~Go yXvX n^ 9bs!#s$ C{kfhs`~3ҡ>4Nivʟ4s2(dZKm[da7{ERhg*wqej:h $:i @Wcg l%Dfź{;t۶v9sVIk}h`#Q{ݏj%@tuٺWxo E D[)F: Ey `8ϽxTKFWZEHZ lDڳ^w"*v NaVXgd'y// ;ghx$Yd rDC_Tf?:-!$NHB_B7O]LkcC0Ž:q~~;<]rˠ/{FB *hj7IKHQ#F6JL h!N$y8qR#.Neh EmN%&rd)v4]MBoQsdžhDG$ p2NWon2͎&Zqch,JS쨊f7Q2 \-vץckgdʵ+=!DnćVMkߞ,FNkϽq{xgp~# |Mr=?surHB zhfGÂ/ pR&-wj0(t|i/;G3$T"B۔2Y#v{FY>@א ] AZM4s {i HQk5Ts|keR[{RZ Y8P .yOxt4޽ӿ᰷)vt !ݮq )vړ#gGs.'V4֗e@2Uf"X{cJ)}ϡ=Vh#EgG!J`gC*SSHQlSvI3:еĔcDe- ՕsdPmqUXd#)W`.kUtFaiΪgG(^uh[V WMp"66@.֪;̫zgG5fR||gG,['KaG9!<r5/CwO1wOԣKR\ZD,|¦09ǚEY Gk˨\jP]F=_uө.KU+tYȈ.'YIF gpH@g.:)h/u e"~e79)>?ʅ! ;5Ϋit waG|ؿ)]ghdOkRPJD6U{i=A);WM6@= +Mz ZL.T:'l1-ɕ^g P^&;@Ă.K~~[t@ެ,> ZywM[lߺTV'.fBxKO\́=3@vtin::Rg7SzG@/v&E[Ne(nyRTԻù> g:$-ڿop|EjgG]. t”;щ1vTK~`=}>gG/-V3L`{}߳ZIݮk|/KexRԥTh`GELXznE~ldy휿xñW\Cz —_gμ/|}g6߷C^oskFvvR'?/=.{ӑB *פ".9̯~@. *T赭/sq=/|AZ{7{웏^Ia=]k*TPBP7T*_4Fn+,]s ëQ۩ Pa+1㸈#s㙰!k}6`*cǏcNTu/ B=Wƌs.iKfsT Q1dZCM[a?拇6c=;9):4& 76j9IRԺZf#6ϻ>pCƔ˨ z_Q;kk3݁5;ŽNSi9 ee /;/Me{QpNXS-"42 &L+q;0$f{#f,`9fi;=Uݿ]qhd.`gk;ozRTʡhM):~(r2q-h(;JyƎ hG\QvJ;BIv4`B[K$>LZhҜ_ ;ZԮ ]?w;O~z^6ޝ֗7GN4/GۉB *We_ʣJb+=U$aWy5.w!iCoC7$Es4G|iI w`Gn. iK{F"6gG:+\FLILKrj"3Cv4,ֆWOFJ +Fd%&Qǎ&q.]FcGщ{#6zvƑVI4J T>R Gi Af2FҘkNK~` N"K3miT+j֪D m|R\[eT9VN]h1ɕ\`O(_rgS@;۷Rzejuj:%,u6Z?y`gj/~<;TjOo*`n:=Rjgڋ˄@6>kb޽ jϟlGK@4Oԁ}iu=膣 |F@ts`G=;];ZE/?>]d)N$; Jű6-'n5ʹqvT5Qk!b|{np=E}c:S2AM/5)TPW^ eQ,]:p=vzu}kasQa*TPB5?BÇonn7SʲU~}kr IDATk>B {^ C/HfΝ)r˭q\ w㇯դqX):V*oa'F4R pbD:m@wXb"_ڷ14Me6a=9'CQQY12~ T2ouh:|b8}zaEr]}PkRaoNeU@(;L;?XK99R |AOad&E!G>&ѻ&Xg"ޘ. ;iJ"'EA8QB_4H+3ovpӵO Qv^\VF|VSTKJ@uۚzFk+Z{aL&knkl$}L`֞6G|lIdo: +5\Z`4].-5rv @J{ S>=u եWX Kίđ@= $эz=*hqVS^5s4H<`]p!r#ڍM9Ml]SHQ֦voyZ=_*Iq63"pt|GCZZ{- ]C8;^__"!Q^~+} *^lȲtwN&W̲ٳ'OI},K:IG/0Wp~#.2$2='QIo%o1"e`\tzdh-eȎ+DILK?;lE 2ϠƱ~5f ?.!EKnd."*e(7-6n* :̞@.7%.lc{MIɾN.oT :@9(m޾*PZzj@-.bK+ho Ty>7J)u[Ne8jl jyJMsnPGq,Y x<[g;^;Wrʐugx}Cw:RK eqx`0Ыjԙm.ՊPfPl{RRj+^v4 c B! -p]67]MwGZ_tBXTu3ЇwrQ)TPB^[n׿|=xRZK+yًZͷj4*TPB5}1KKKߧXO<7xhE_G}%b]B e|cX{TK V}?ů+}/NcBfh3J6B.tHܹy!HK+j*{"8}^29(|uΊP—D EE):ԻWHQWO˼;|8Cv4T|aPL׶$;y{ 5V |1KQU/ϹJ~WEO~a`Ha.c MW PAЪ~\.w<Ɏqh8h^;f2I #Q@Ύ|?zg>Dώ4SW=)j@Ӹ1s5 <&7{5sʗ\y\;9ڻs[>rԳlWw}#է7w ^iƓb ^ގفr#`) nQR4BѤRtސ=y`c[r7vTKGvaG3=dG,VkPQ(I4;*QQ #=``!OaiQ?{>kxW/f7lG5/зpS[j?Y~o.B zJ?8 WŸ&dȕի+uNcyaS|v6Ks.4uq[Y1/=<a .HMLhƛ>k{*XaٞH}:1'6o|GDȧ􎱣~""C$3nK7Bdl#R[P)Z>񞢩IQB 3EGF9|䴧hI#4ai):JI\ppL-f#U ̳}n?%5LsPYCn5S$K@l+%@8uSs1V9K H.nS.9Rϝʥ {͢K],ՀJdz{@ay V3W*`o<2XlKˀfGV[3-qu|}l5w&EOЁy Yiqώe Rǎ^^dzVtcG _6:iʱمKΎ6[JQvSԻnm^ǎKmIVVfMkOtֵbn`{{|qcco魿?{_|/5{,ϻf&ﹹv\՝o:=wtu5Y%yml$m없9'i~m#>$7H*Uad})[;Eu34N:1j]%yv uw.](˨""aG횽V%\FJRDP6옊mg2#IهvyӰf}Ž6˨đ MtKBkjFRanRFX"9Hbb#q0Fh+1&ŎRWa^hnIc*аu˦"y-VJ[!. f* McTʣL(xaGG ŘaG xi^8h"h\F fp%fX e#w?n#kV!E.<; 'q~%E (Ob+4 ;*4iѕYkX_  7m ;JfGW;jQ"bn4PHQQ2\gNfMo]qU}}JcF}Ͽ;[md+oᅯ̛."|!.T{_'r#o96:c }-?nf+\鉡9vM~o:G~"<њjg)SL^rSg[Yw\=B4r=Ӕ`oLDQӅؔ9+2F)2lgOI fUzy}:ɑӗrMif &nO݇nW;䟹 ;rjWwGvD㸣;ֈb+ '㘣q\a0BS6ZmĚh4h9s>:ju&B5<]RM|s~\s-PWq%f03Gz4T Y0GHJq4sHJY,_R_:/yun{{o/(omKtXe;p-/=?零fBQ#u%no3)>ݰg>ڡтEsgHL2e:w~k׻V&&G{o~׎vw?;E8M;C!7?G9p˷[jHL2e!׾O@/Gl*][M| #Յy VVG?xDF2-zϷxĭߜ{汛.*󲳷i߽]C;7}wϮpswoQ+SL]yW)u ?sǧW^?l?k' _y w Ͽ?K艼4 k>J6V4+SM>Uú_ZRTlWHla@)Zɻ~0 qWmCҦ2H5cZhW!ϙv-!MҟKڍCwt${BLC렛ڛm#ŽJ"Dʶ2NQDA-Qj[\{jAÃٟX93y7aGIs,x_ vD O#bO-JvYs7)928o#޶KRԻr ve)v4tdRNqlڰuk[Q՘gb| ;:8aGk59\\q$=| `l|a&fΜrqҒgT{7&_s7{1V~VO/~7Sث_w?_}׼c o#ǩoӟ̷7gBxbe|tyFćj c97Lh]ڱ{Z]7?q#sssswoٽ̭7SLcEQ4;;{7ۮpС0[=UW^i||VឞڠrO P٠2b|/!ZB?aG[D3 "RfNH)I|&S4iU))l%Td=(QQ *(;O`yȐ**PоҾ-MJ—U*daGHE,mb [K34nTYܙn).=9*kwS;86\f1ڎa1|ֈ" HQ)%E݇k3"cN@-`kgi+ڞ#/'ia8ig 70k/uN\(()v4D&4ct5ܚ-;c>868sG@h MxbFE4<|/`~t9sCǃxD<=ӳxزQ(# d_+2ڡ>6MJ>\UW1gQ=X0H||DHJkMMh0ththt(Dr&ׇ*\]GƗbGRiX+AxcÎzc*\aGX&Ž98֖U<(enͤΏ5G8~sCY!VH3w_Qޱ.ѿƜڹzf>??mNwzڿ lL1SL)JҪU^WZ(z"RJAP(ߺcݲFW_x";}H^~Co(TX\? TքbRXY3T9=YI+mE<{hm jM.4d%Um_;2 Mr | ,ǶyVKjHLV\θlʲ̆ iHY8WQ",S6LCi)'R05-tEΔ`Zg.-ƨ550*uHԲc=5m2MHknwlu\F7NHѤ_Ң,)zX0r`GVQ[\%/rqV۬ۢ)D̨Jrh>=!E$Tk@@H\bLqO݋whJ6kGP3 xYkRQoS0á]k[Ïu9򁜢1o,ǏZ'g׵wnؿ{ǵ|,Iܮ3=}b7?GzU ;n ={7zw Q]}tm':L2eZF/?|ώFo/_ ]OOڊ/FNWΈ:'ܔBpCA-J-k;E.bz+7o;Hڵ뮸.{eWAP,NcW?E%@}}?ݫ /TN,lq[ϔ)SsW@g̿❟;?ld0Q4r??:R DA.OD$DI6}*1TRT3/MӤߜ !]*^)E:]?8D+<R+)x 1P&EAgWbSKHY*)!bW)5#!NKf.ʆ +R3Qi<RR=N`e"wOGJH_KZhjZu5OK2C:")k[ڳjQs;D =뵆zl[s L042Tk&1( _Zٌ jYJ:< <֍@=7n"Ž60X_f`d.Ux(6R{(:4Z-*W^ (XVԇ<o/^ڰsG;z u`<RtZoZъ?v4/>pJЇb_/zU{#V@"qiD(f-()2=\3|G5y^0Z.!d_c?Aטn}Ә[瞮'/ ݸ& jH.Oup{Id ǎZRɑʚ:μm%ORa?`2sgF,Ѻ\3t+g՞BEj:@%麳r_L"J΅R,;v4R%)mK; c2ɖ`g6r懘,;|*u>DV ǥZ )ktQH˦[/HglE\ >MZmRtؗzWj ;J[uh~.  ;EPBZ-ܼ|d鼨m^ٲ\7=$ q@Qviv4#eR5~[!|'u=Z_/T7OV3NN\[ϵuѣ;w]{ዃ~-m W-ܼ[o/束H>=ٝOgʔ)SL2eʔt>烠#?:ى%GW]w\}nz;h 2k]TRj&mOvaaaժUqML;~O{!Rdʔ)KR[?~S?龺s;v044"KPduN۽_qoZ>%{ WqrB3T99`|.:% erݤ(!&2vov hs3}`O9R|:dq9sT('Zl<)4takpCׇ0/5wocwE;@j]k1'y:qeGF yn5jG8tf%=:@ !攵JE @fL>k,&="ސҫ*从uk*cV[ d u;88ώR]S;C,=hD焖+ēOp-o~ՕW7g2ϤsФm2A6E4|(KJ4ɭ6uH:}|Gmѹ.@#R\RcL=EC IQsԗhs#TON{'(z[:`#=aNRIӗ}J]&%$ŐYS7mW|dgDQj%w\u@sBymhґaC2bEgꚐDQڼ!*>ҏ!Ŏ˨\F.OQ )jQ;.vwtt͛H@JŎmU/İv+Km;Ecb:F([R84)Kp5!Gu%'\;zlCL2eʔ)SL2Z.!Cx^qU:  )>&^qkbl9] ']PoL7ӡS:Pm ^tG`umM/xx ѫJ9e]$b I $E|KWr~rhl~ ](QRL)E:;8Chcm;b:)ў1INvh;ւa!dWX(awɭhO'3 wU@kLH|Gc*hqcjAqPbd=Cڲ [1tt[6O6sV<(8҈>$)"ypw^vs#ܝ8QfS+y^jD&Me#tRiA"9e:c6UYӱJ[30sVDmjYRڙRt߈Iԛ?ttĞ+<~ID+*f3?)ڝ$0zҧxI'G!P[%>&M7eSʛϝc8&x/,;jvo!p0fPŐeGdj!EU0f|;[m2i.[iK/.*Tt%E9;UؒaM2jQ\_$تPsˎr)MÎm ;p!Zm@ٜ=@ŽaƆU6 $cVkZ&whSqdgʔ)SLNZr=SB']I'(=?P(OzK̢Q%iЙ x"Jmt)n#:a4GIn[E]DGE R#,sI)Ӳ"vV!LTLٵm:*}fJbcBH*(k!j^ yֆˈRb1{ÃyAU"Dbm" Ke)*LیبxZ/4jmԎPoˡyx5VdD*dM*g%;gaz*xEFRNYlb Z:ѕv.NYB)SL2z[NMMΤ"X|)ș5PmJ JR;.43h1s0F ł!E[$b@Hy(%#yNҥ<4%o9$ 8jÎt 2Zz@ z"1\5f*ќ-npS2H*yVNL K!ҕR {S}y":.f)4"IQ.'qB1 )cRD< )j^hWTo%`}$Ŏ:j.tyu>l2ǎOP)f,*7 喡b7LX.RКhp@v@g}+v5L)jj֯`!SXr.gr@_}.GU*7k!?clb Dym\|VcU|D |_}ys<,I{aT&zaToٙZ+~iU|&4Sb.UڰMF`/DӲ}̜ JT9HygR6u:Իou=r(K3eʔ)SSV![sC)SLYu|g aL2eʔTSd+!nHuuXS7\(BS :#mQhWOcf33.u9Ba6ݤhjVDSx=!M^$[5N4aG{*X) u юtc\ eS^Ob] Mvt^)k.sO4ӑ"Qݤ([ArD\%"ӗR[RT3;R:,)*h`Q%\4) Ԏ )fG;QѪeG:фfGRԲphufgZDtUJ5y!f%" z%E !EF"y ʆŶ~3PI*b4]_6_sQ2*Ĭr֌hjA"0.A2PqD';XP(ryH*8{<:KZnןVɏi/{ڪj###/v3+/gqK42:gL2etBN׮]c֬YsFꥨL#%is޽ܹړ3(!p\(@lY IIgy8{*@v3\G+brBX2!뉴3}C &LDΪ0S %E z]N54$^YNbFHF椯}QѮD/{%YIwg1]nqY "|?,qOz Jbu$vyvn (r1:٨)jsKEJWnd֦(&5H<%Pq [rT֜TnPb\,Y{b폍SU9%^5J&Fu*jE%?V 7nvT8|ë6Ȱ/}j J9Pպr[ ExRb|EP$+kM5S哾%rH*{)W(om]\Bƚ9[DB BgW2eʔ)Ӆ)|n/ߧ=5%ɞfQÎr-gȰPф=3.G2&l? IDAT_ux53.k]@ᙉ}H{{yHWG_keu @2t^Y~ފaxj?L4;KsyoxX~DgM2a%'׬9Qeˀ3eʔ)SL2eʔ)(k;)SL2i9l?z;'QcS_/I3Dž pi4!Es!j[D{06碡3%,dXD֗9ȳO`?]ФnR#e@7S4Y;M=-ՋH^pHVr].{ґI.Qݫ1 K&X[KM>9炙SW-ݚܿe7 ;jh)C>OFSv@5Ǩ7@aG(Ŏ@A*+Uʛ6pf?vt xrЎvTh0 ;*PŽV[5dIˎʦ_=*;f U+d1_fˎ*Nf|5|gF}A9ia (XMadS go4gRݏA3MaGV* D ;j_ndQ^T|ŽG1ɦm4mօjŴ(+/mCV*ŽSˎnXߺl @RbaGgHєh_!EgАy U"zo}7Əߙ_܏~GHǛyf/nzǐ|hm?`ghL/ QWdjjjttTp.4 a {f]FM?zs|xIQÎłaGM,)j"e$T yqU<'顒q G}b 3O)vCKg\ReRL|MȌq3SxowfWz+M4 uIiWgyvDCy(PcȹI:",)zJ7ˎ;L Z*C;3pw;l#@k~^Yo}G߰r"${JQ1oi@i-7M;*$ UI#(YBrfaLGf JEthG:0ŎkD'-;nm{;+/moZ x(oۥWr&EЫˁW {eexp9ul5:x].3sի0lV9hh"\Fc6}Q;M}w\BK\.\dڵkߗvڽ>]z|יcm.mt0D3z|A(~>{S{nH 2eʔ)9/ =Og͸m7kڹyx~ڄ[ PɐLg@%|L<˨y2j>-)}ޒHQd-qMԒ_ BIđQ Ga 5aG# )h`DSciߊ{,ؖi sGk/4\ MWaGP݅G)Kzk%Kw {Bww)w #iMޮϴ]KP/#{Q߶>oRрڰNhE$FOyŽ6[BS"1PnvNvvsXcD:nMtw)]k|GM4ܸ@n}@Qˎ/TAKы˨WkǏ?!E/A2 -ѱQ] ΢_\F.2z~]Oܼk醷?ƽ7lko4}L^HehL2eʔ)SzU~Wٱ/S[^-=yCs/߱k^<};^p/>.]^k:z#)p>g[1S&=ڞ]S}Qi[GDh)>L! yW@@(peyRF3j5u=cLՆP34%B!p9yfmL]f*2x}=G 4ӵ[I]qo@T؇&^'n>(wm&ߧ%n0rrK0XJ:ף_uH qj͊̕`Cg% o@KўHhv'ۏ,3)PHQU.(We_Te@ V`~J擙NɆd&eM =%ܾ (˶@[|ο|+LyrԫWkF`r~{*(bԖKdğ/aɦ}>qn C3#֩Fx#CP<Ķ6_/A@Ah.Au@eˎ"aG:+/M;>m3n|w߳8.?Ľ^{O{?3].L9rO08p-u-׶Գ牧(C!ĨP@1v(O1g_˳';\h i'vgeLLg"q `-v9eGHJ# WrYŚn6xCB5kx|J;tEZ5h^$(jSGcva;a?9|K ?X@d@]{U4눼b[\yMW~KxӶjUc3aZ1 'sѕ)3qu)Z*еnQhv6@˨-2 m0cǿz@+j{9k?TҊ4HEц_( 7`dKEЃ}pO݇/H0SL2eʔ)SLN9\"!!43P۵J~h(AoRPU+z[3v+ nCX fʔ)y-W*_3AQRF(S癩!,3gBc*CDÕaR)vB$|oQiҢFć% 1ЀS]암 qK(- )1ujKOQtӘ;M~@tFzc['E.9%څreTԌS'Z;ԧJc<]ȵUk7eVԗ8ŎalqfCYOш#h'4P%E 1~[vȤl\Z\S(fG`9%Erl"cWJ-˦jZ{M5ؔ=]'CHQiHOy+F̘y{5D.6@*/_Kei?1=QK_D̋1X{ҿSf~ߘxij==/-zb=D7/βESvfZFg\F;w`N(QIxr,䛩Ev2kJkȣ| )P?8y5LJ2Qp))8Ⱦ@-v4:b ߋ(Utyۏ`_! Ґw":OtgY2!w1׿cGdB:EZ; )vo` aGMްaGfG[#C=w*ѣTaGg#SvtJYm~%D4>tsŽB?U)NժWtʋz;>x2:6@T#]'ALLM Uފ:;gڕ+3 VLeJ m,'G%$E|CzkO$i6zGfkck7^ڣ̾+z *s*dz)jhh[omʣYRvfZJ/3SL2e:u!|`AWfyVD_Y"w h z$}0NH/o_|i/?KRY.L_N2*c)E3:]FeJ(aGM-ÎFq2Z. -;r޻GYQy߽έOߛ(FF (jd&:1ғ,we1hFqE4h@M4ܥi{WcﺜSin؟Zsz})QnK;"~Y }5HJ_ctMweԡp[wnnOHyK,! ۑeKQ;\~)˨e4G!;!ܗ5⟱6hB/Frwm!;ȜuD-l 4$!ܻe- S( tPviCd(]F}ĉ0Etb"y2WSi ^W}%=Kg[̯>[W ]oE\TP(Ӏ[a*n9QJE!֎j&`z]FeP/<*:Ի\F#v4"Vz$a(%$hp'R*SCrMeDi6E9sr Ysy43+⚦h =c:yz c~n QI |ZQ+;&g)vV-=ݡ^FL1Th}lNfvzBdK`a%MG:MQK?PH^)nhARfՎ;cG;j5I]8tJ>K 6r(+qModNye+E'G@tR!"97b0 &\F-;'8sZ> K-2-. [p}M=2-:Q}kraBH}>"dJFBRMvli9^>юaCӑ6L)S;:b5b7xyAlH)z@3T@; %SƳ4 tp FCVt~i,v]NQ;c 69{bԟx5]XXoF`Ar4Zeߛ 6V6uZ4vW/?͑lx["W]oE7' B2þnp.  t IDATB1`pNi}Trϻ_?o|JB3.u#F0pHEÆ8Ȟs. BP HA.&FϦ6Mw ԅ FR*4cիڧ0M}DDi@0@  FKBD "1΃yv$Hkbr!V D/DNc%&'Q)d~Ea<%"LFҙQ-:exCUu*9qA^N65Sj ]CdOQrpx[{ 6WKjH8O'xA$?,d_*nm8X#MrmCIʠ{__ i_}*'CH^H)D v(  ;X= Q&9MY)DF@hyx<.B}ؽ;s.\|Pbf2 $wB(4~g*GTiV>bGm;@IQ QcZ:lhٌCNh<UPP(+<[9rdo-7q_," swTZ2NuB)\hψ-7u'93](`i=O`0%$();aLΥQ5M%rn%rnyVYӔPH\ l?w<ܗ'\qWx#%x/c@g:ҵ8r g'.l0CLҎ؁ԝrpH'_)8[& "ISDŽQG44*!hѠ,0hP)&EAi^ҼOO|h3AedҌFh#`fbs+BC!Uǥ^ O=IZ8On#B\Ǚi*s&-C Mi?M_fKbuN(m3~jBCH}iS.+2UE%)ԝ3J509fSSSFP(@? BɅ^udo[붫}zv_ʾ5OWt$+z+lpРA=BP(=}X5 ty?4 e.+8'RǹݫIQЂ0n8Q Ha>H$ `kGS<Ҏ慤v4ɠQqAH8'VP 'Ri"sٕLFliHL KɅ]}3efz- r}k3CX%e\r ӎSdV3]]I,9ykenHhw˔%R;9iЎ2.Ry4ljOhHH>B3v hDI~Qn2Vox1D@2 yy% 镣=BhbN@CD ؎7T~>n,R}R)N3R$$H&rxC+V74iDxln@A5<^~? D$̌z#!Dt B-WθeBN !W_>u1q'~#Q B8_0j^]SjG8 VIHR0˴S"DjekGII[)ˈTZQCDt ĄE<ְ1Jh-ugRAd偞]5Qzί:KrO;E.^).}e\6849=ĵJG(>!o8>RڊqK;ʥ>qsK1JO"AL^ ~}hjOѤuB; Ih 31ziC$Sf,@uG(σx (ّJDR4ayws šHcb t&ԥg60릒&nC.l_၂6  BP( B"n6uos 9gҧ~|*BP XԜsiHrӔ7]#˨T>YEs[͔1'cWg2>e4v@FRvTD1Y K.(`( S1<$!BLhr1Rzí[=*G)Jѐ(TY ,UyCrTfj;2ʬE,+d.o0PmgX|[B8YՇPP( BP#TBx.nW>

    ߙR4d'PH<0tRL$kiGOb~Oy*o?zbp]E3γe|>[Bxſm{@/pصDo|yU_4Dd~_yy}uB5?_-i/%ҁЅZף˨C=RJRihGmcOido|G$%AYOK;j an^ա^gll5C=ьu!.}=oOu~=kw$9k(qY4Iҭ~,upv@9LcjK;*42caV"_v]!zWP!O3@7kRi=?)| #CDhq>Ҏ"s!I$(Ɩ ):$%ŮZ($6R)y;g6dяIn2PGpY!֙-iD%{Le^hIII_Bїׇm}*+`th<^<~LP|`}_`& 7\̖a=\aG]XEP"8Dc{x84p!~>Ў "D\سP ZfLbȉj\2k96Z5nntR-4g9˕uVtuVӃݧMO5cgߛHR!yVZ8AC9 %cL2"b2uT4eC 3pNEG BJɈ0\!BdwDƐD?r><!!sDb rbƩ A9ón<BT!cvvUWQBPeE t>.!{] -݆??n+NAVߧ?>{_MW_z˿V}t((*?ɚ'x/q&Z~0VrJڋ1ٶje4mpѡ<YL嵠]4 کYюʜdI]'Q֚[EJ=)#$rL^($V2+I/$[J.ۙjճNr%RiZ%>j5%TtH{aH)'$<gXL,Y+ȗH7M~3m'BRHF}-?LౘqXP"3DJMFzE9h(v丨#/u?v(H*e@A1 )Æ@Gq\uE9DpTmbXl#k}  -BP(zʪq8{q}`-ٻyooU%>Xx/l:bp,.\FiXQLs zs:-X\;`HjҸyBqihG # miȗ<.iDŽ .+i)@uK;jpS(^jvjT^gJ{ЎZe=/~u/QΤ=.$s=Eә:ӽ<$ȊH;٢bRq9M= 8g=3Y:QQ8hgQ4-V\!,:}VZ"bhg ϘqR;ZM'eon1Ç v^dEh҅Rh %i RRK)cq YJH\JQhT*ECW =%ֵH,Mx~ÓފH‚?cR( ŀbtKRF|7D_~g;2'T>3kP<7j oQ[T!T( @TM a"صkwJF}s`nkvvi`ٶ vnf9fY_ttt_9-ho~;"*'Dv@Q/3C;#pVBlGaB;J&_ƤQB5a> Q_0M!%F#B C: ٹTg0OYxgiX<tMIHrƭ`dS%2LNˋ6B`s񖋇?fs3pfy %ST*HG}ԚIsNkjw @ꁽ X\a6~F<Ӟ{f#v힁!s98P9393A4*qZNu]`TP4Y"Iř'S,g8h(DC!HH҂|ZOlmcVT`8ll憡k%Šhh2x*EAe4 -Dd8Vo'F!嬥8z8zЊrZ!-kmrZX ZbF}Q)ZVJJiFI$Oaͭfs+(0&3(!40OȟƈOgHnY< k R)J1à>ti0ap3!Dn_3B[2Jt/  6 SqT+Xφd+xeAAAAzoc̷/1'=dO^@_+ngZo׽z'qffֽ=ʛ\ ~g`7P( By6ɲLCzʘ_@GgVL}6yזVmaǒ9իmN}u|YK_z=k*nb̬޿)[gSyɔ:@q?'/;} D>aՎZ&qmڢ&Kx qI1mδM5  +K{=M92*˜ere]K=J l\LWd؁.wGwIGr sd፜-r27GTnK3Q"4Rs%%@8yvG4BMk.L6q"i}:g̈iʷ&X+"vTuܙ2Hdʈ љ;!d͎5f[̊ = ,xEgЈP^3GjxBt7fqUO[RtN~sX~ EOp<0lKt5y-h˨9' vJC8PUmL}Gi; <2 I(HBx")C"јH#&4M4yG1":vE?zM#1e5ig6)/(e6Uj_"BС恼<Ӈ sW.OQnI@WLLN+҇TVio׽"<.qfGܣ=3oQYCBa`9g֭!e LjT2 qЩ)H{x2R3#Q݉B<4[PPvO$e-ƞ­T+.rķN¬ItxϊPO"6PO1{t7 IDAT,pWIa܊lOv1 ܒ͎~t 9{rV?zzlz1\F~ z2C&_IFzu<~lE!/ocnpDtnՓY;˟Y<K7dCZ65_9iܹPOBP(. ё|?ܑ8)9M!]JLz0ۇC<ݣ$t{mW=fNu\i2SzKf\2)f"R)>AǼ[yu*?3C>"1 `!4i (B ѼOx,c1H*-i^bL x*-K4VMS1a \`b9u1Äa+DLΙ4|nWq[y0І P4K\;l$-I?6}ox8 Wކg犜lPO%ooݺuZ#N`_{6BG7j9o;a#U/YHYygs{q; {rS8LZ>瞍lu_Cp&skCAhG9P.2%1vTȜli ND3hn,ЎTJ2L`P(NY4&068QaLJR)%<NDH(h:T . ub:-tYN0dn)ɬlкq?d:Qv(W\]]J)JV\HP\]Hw""tQ]*;xUV$.;:ҹ.K4rdG:_7GTҎ2XQ."4y8})K9KsjGFi(kHy2)4BdR j Hs^JSdKF0fP 5  V,# HQ@gT8-is(EֳY^*Y_NuJ !-%w 1| ^:25}aGc{ fwyvn3tVo^wC:K7@MΏpދx6G{7t[x~ BP(ٜ`' iBɺfgJ^s-wF B8p( gnTt*C!LPbXaR,SX|\8~T:GE4SKbMa'X*mht7Kٷ,\u0=g"oܳd=jMw"]u"-ٻ"FO_J"5y#llv?z.J`r8SDΉPhKPy$q (<O$pƤ1k ŊtyJKЬ4ł10FU9<<bug\l%DQ@,Zrb5ۆ15ds;. .]R|;krUABP(^Lcccyyx5t =,ɄC:t1 3 f>qөvL_Fv4sd K=D.b1)m # JRfk8Ju. a F 6!mHBiɾ0dl Ra5Rnc%|^P -~sX+MLgu1aW_.gK^}E+nTgP( ŀ}2]҇rWSަi3WL泔( 3D{og򇷼W=FO=\[[*EEEsO"F>/ps@9ƊL,6;L{DD:< ):^3pEgmΈ:~ jY \Hj3YuV H:Yxl}Ս=LSe};!B#t]~- FЎ:HE}y:D"qw(}IVOE}zvr6n-Ş%Ş%Ş%Ş%Pr'`lK2x}זC@+{y,GUPP( BP(9繑/~x[H$y 8#T( BP(~F]Fmo;_ D5_AOGr`neܵNP( yY, Ş=~p>K 0|Xa޳JOwrG3BP( BP(&'ݞi'/}0WE_ BP( BqVȑh>={pWaÇ͑ BP( Boɑ_}uo;* BPB=3QE}q /=4(_?ޏBW\q뭷Q) 477744L0P( ۩T BO׭[~n܏MP(=s~T*\ZZQ( b_4 ߯=[k͆y&oƜ n?>U#jW̝GP(g`0_WWcQ( |Bll3>D뒩/͑nSjcsxǡP([MZbnjcOg$vOg8H:*Kyy5M:uj_EP(>r:ۖc %9uܻa. snh3}6sUUV/ߞuXUh;m\rsjھ[[[[[[{ɊZg9+<2iX}rNe㚕ǏP[{E1;Ո7VMܶlUݑm˦;S֮{;Dz)B8#?M3.(4lIqVrq<~k'oaݢOO""Į3$O=3;,U?Ÿ#/ _ ѧVvmi\͓WkE_JFmiK0Ö?? uEC)#4@4BqkiM_ȔƎԜݾfc9^@5jWʕ+xg1XZ=+ΞNiŏn`fe/17̟Ț#S BqN0 㗿_~H$hGGdz>[TTth:N$`^f㯈Ӯ*>h|0鶟Lu̾g }M/9sm1oM%Я}vS+ ^gth<^<~L7u)m=T('|cǎaÆ]}Ǐ>} rxh4iB8iy׫2t J""U\+ax&7OPPXvjg nw~7 E0NiS(Țsk|pL夭<x+Vs[-]N,Sݺg< 8ҍUA3:g޺9sn^5scnS FP(\r3qR<+q.'%H @P}qЫx׎S䂴f&#G7־5[^^^RRne˖)S »#fONtft(D䪂Xnoo4hSk?~K׷̛7/g7x<&̟?;p>x*S(ESSӯWn~~mWwtJx≛ni֬Y8Ν;(F"CM<ۣS}'X#o!\P}\D%j_C7>gZ}5/V1]SyWc_-[_|OwOIoF޿rcs;oPCLeRT]]]KKÇ:u+,,,//?u( aaKv&PZ&Agp SO=H$ko<86V߾R5CBsL|?Ç_{W?q\٣/w&0\<ַg|oF}̧~zV|i?'O=ܚWquwS}oE$RpuժgT6]}J:wӭ aKKƍ5M|dҮ|>MRѣ.VBx"yIhؑɎ& N9=Qn2BBP9gB駟^zԨQx|޽a|[ߺۈO@NTPP(^4Μ9744=z8q"o[W|+ʞ=asMǶl?oeaQAhI}C cB8ˮJ4|C9٠BP(%wJmSXyovO|饗l26zd0xH%I)ҢBP(&`ȑ#/„ G}T;v?wX,6r477O=ܛ} B?cعsC+**jkkSiFڶmۘ1cdZP(3EQ`pڴiwG B+>aÆ>CYSBP<1c1cF[[ی3z BPo***D1"^* E97 s~~()Y L( Bq>;!u~L&c4MR2֖Jz܍PP(?t:KpST<ksFF{`jP( K!,--7o^mm 444D";wfM <0`0z !$pΓɤ>Oe BP=1Wկ~ׇP(JC BP( 7kt`) gcWsSBP(8/zr8D"HP(t74;N_EP( ŅN0 RJ;g6+Cgojjꭑ( Ź$NZk_ky}="BP(49@ PYYyP(7t_׾׿53 ?~~5nSOP( B( kD$)/w25 ^{vJfjhjjE]Q( ⬣BBe9k 뮻/hii|mmmsfkܳSbkUFxپ}Mtqq~ Ǎw_uU`GP( B% BћkΘ10?s)//뭷f̘QWWD(mmm?u= ܸg'>aϯn;NX>|j'7{kخ=ߞ8{vz*<VZUTTt׋o Xx*.پ+Yu;￯٢.[gc=V:vXۿgW|h<:)f̘#C*!T(d+Wlll1bDYY٬Y@[[[:pl2#P1eH&N?6 ]{=vLso((tfH$Qf&`L p\k?SMӼ٠^QQ1a„n׫P3~}jp"W8fxU,\W7-?W:n{}z;r;X4 ' 8xVߘcNEi[z>M0k|۸Z\ziߌȨ֥Rz8@R BqhѢT*uر6X<mWkkk/^#a6OqY9; Qi#Imhs񏓭uEms׫V@Yu}=#RQ #E]Dh/ nfYk:[zןpusY=筭ؿ7bFpߏVgxw2޾ޱ~U9>ڑ2kyYި gPP(zEbF 2}OӴ\7ybw|gjvFg׎)KLvv7̾vȁ8coY%R>TcK) L7lCv=YGG޽{kjrԜbᙽ8B S̬m^wև֛*nk-0."n?G51룜a6nZ:PtSE®?y鞵랮!44c_w<'ֺxw_;e3݊`ﯟkd)fs'eUɝ3g|g8~J ⬰hѢ'N0vqwΒ=;&Nzb@ {u|Gx#6T؊ҁSzcu9E. ,5gZ|,dO]0wN,։t2!?+f'!܊ǟŮ[W|֬ŋgqMJLY⩷,_Xys8Uɝ81l؀ի[wBi֭ÓOZNDfE^g 37+ueC eܹW_L2;+;{r~gN,unˈ*!T(ŝwy]v-\tܗM]ST̾_ -Ŭ{=;1A7ĤNm?),;{cq埮:ë+/Y 9}8)ǭ+^0X|||}] wAAwsոIF7WU+nV uOrغ㪦sz&[{qK2u";93ϗxxH=9ըzzj/|Į]yVldT BqϜ^bG ݟo.vO{`DR HH!ъd1^\sqq޽{3e0,**b7}m&_ۻ&ɝ@Bhb>bQkDek<^}J[ejTeE}llWlKW-*^bQIB2 I>Wg93gΌ ߜ9Myyy_秌%"sXryUYMa'Te;i6^CUi3UY[SWiuӸqzu>|xnŰaBCC !ns9q1>NV {,g?e0`P&DBX(n@0ެ - ڷ~kf8875_^+7/X1LÇ4K{lYdN洈MDy_S¶2壚K["*!5NѿOՓtn;oܢS@- a's\܇WԜ#_<*W4O>Nlxs^l؊07 tࢬ&i7ɉeBCi$ 1,I(4(l K~:c0-UCڠAN6عs1cq0pJvZ$8s/LEKnyw$(inW1ށ- ""׫NPr.ڗ˿<^Ͼ.!|0O=*"7555555uu M8ퟯi 3"߻+УG dgg7N 6lɏ>O &`o+m"R +H,\o4 F#O0aԤ~$KnM;zc\ԡs/Z.***++[lYHHHxxo)Ǚ߅[u^ PZ|t, PӽsDTZ}gϕSo |eFh4"騑ꫯzySO}჉rO$u4*BA@@+s@- 1Ԙ}=$`QsoB֭2&q㪪JnެgYV(bT$dDdyHB4a%!Yce]%t5uM'۪a? kzz/#ҺTrN"gJ g? K$!n[|~_BSֿe& 嬞bmCHDBpAGF|yDIM7QNa\8dX׈a]#\[p''BpPzzzZZZ{fܢ[,++snU/*aÆUV^T͍!Z&.k xKe/GDtGYFu2=a,[JW{8s^T͍8h. :N@(Bŋ%2,Q޽Y3馠1cƌ;vرcǎ, <[eee>_pÆ n>tse|4Zα@GEyJH⢠?:0ش[-EA V25ND)SPUMY Je¿t\! ?{|PW{t]ix 6Ew\rn;R}ݼ(O I\\ǔQcoi J]dƫ׊#  ᆀЋEALu xKe(Iwz&Fϝ.{RcNzԿIWv@DDͰ-5,` -X>\~ʴSQQC8 ""B.hjZ.glؖ<=UjGSV-VD$,gN9Z0_h xGV pPWx_.jӘ)!2YF][-EAy1=;1<9/(@H] & I"x۵z-Č g?yE:{WfL2ryF_jhg&3ltC@5Rᣢt{QX;;el(TmXl] Q))Qr[ׇvUYY;^z.ESa?. q:D`vApQ9vzkkk emw ߿[j~>* e5x >0vr׀Cr}Q+V^$.. cʨcش[-EA uwDa!bHWQ{{Bp9/mS} Fk0k<Z1PQQD( e"L,Eb7 c: ~?^v%?8~>?%?\\|/*k yQ()coi cRaY g 1wVW1W*hߡAgWxZkn^$.. c(fmwAoi cm2#2RֽW_h2mi+uUl/u=b. 31XN* ujzP.Հ^1@/R~#Fw+g:ξ~Kd"٢%d(>zj2.9X i7JP*l5WEyJH⢠?bvApQ9SFz @0<5LvBS#YKa2COuwoF#1^#(pj} n,ٿh.b )Q4wxcLݞ}&ׯ"<%$qqQSFǦ8h. :~a@-mq%7=n yzc[ ]iβ_=0,TDg~o] uuuŵƚJNNgh+vuP2 ׊#  Qdff X,.M?eڊTZZZ'akU;|O2CLDDDvVDV ےǻ`Zwhʪj:88D"e`0Xԩ3'`T/-x@zj2.9XIUMY Je¿u(O I\\ǔQ28h. :~@Xӕ/S[ZnRZJW{t]ix 6Ew\rn;R٬gm)!2<6-A˴{C996{Qd2Pt .^x .(իwoL2}fnM6\:(I }ۍWG<MOh)4;!C=~N>g(E%Y7Y{nJmCL!l1{ʜً nذq:D8B<6-A8_ДY}G c,BݵͬvwVp`oݛZʾ(yJ\$.. c(fmwAoi π ~ o۫0 u.*t]!iy]H=j\ŷY K\lxB/qQ͍!Z4ZBh!VscMZIGC0|5pVGp!t,6 տCk^$.. cʨcش[-EA :M zve9xlZ-ᢠs<@˞=8޴0 =W-KOJaxBp3@rĉ'Nz EޖdIDAT e|2X=5Nzvk^$.. c(fmwAoi cXf{אVwƏoK){z*h)KJR7D1JTH?uէ NޗLz5%mM(O I\\ǔQi4ZαCX^^0B" ) ?\SY3,^KDkO }~0z\:(I }6nOe(X"2P&Ģ`k~fQTS9Q:R*YMe&k\OkR0LKTjͪf8~j+(,/(++8gDqTnذUuzѽ𢪺qp/8åM2vy1}ii[?NaAmiޝ碣; ^Lbzf+={М2Np ' g'u:"{Z rLj4+o;NdJ֫ i3`_LoQB DPM=MY#҉(􄯈^rW!QmmmP'i/QXx\>Fn75(@zQCGf%gŦQKDLzOHb8mJߺ2~>gfOa$GmVMhxќx'ы q:D`vApQ9{z @0<5LӴ0`:Quc9$֞XXG<n(֖Rǧr]Zl:}ߧ[W:GEsü8h(-ᢠs^˗! { 1~ʨǓIE@;=N );0GrC/D$r_`+Lm[+>$Bԓ}Jl[+Y6Թc"CǔQi4ZαCh7=@D]B}}1zfcמ6S),4z RFzJ)=N(㎌x^7.DSt.$qu2z#ش[-EA:ue%:Q"J:3Ec_ܲ]IN j}^=}y~2wo[}̴OĪ[Yi0ǵ.%v)^Bh#oA&8m.Iղ[Vw$.op-YF][-EA!U>0$ "E榶J1ы?}ſUT;}no~.po\K5_zBtLmzOUz-Ös+Q㽎!!!uQZZrF cʨc!-EAA} k(/'5~6tEw\r|nL>+'֦Xԉ!K}Ur h(l}mJe¬Nka7lfLS*㦮b`Ʒu5CtSmmmaa!!!wK|Gb3# y@tznJT˻T@U/x;y_~̫msW_wO=#?cbZE#4ڡJ%ۥR̟a?A)D}Sd-s~Y2K?6Hτ'g|vEā }l!,//W ! JGHGcT..ҏx*4xꆿ|Ϳ/@XRɵ"lCǣA"J=_a^1gJP*fm<Ǐ>3GcODN_Ƅ(2c<)K2P&BX,vs|B^Pӵ4KBٽ>{4owxU%Hji7/^W:{ eGȪAC ""ծyUz-M'&OنƗP|нIO6hu?6^(1 zy7 ž>3$CWu9YDDܒGywmu5O3Do2=z2鉄8kmDD=pޥ"NǓ NDBuӎ\?C?(4zlP)gN?/7&woXjR肗4zl_jgu5MSa:wQ/ 80pP»,ѐ :sJ Ux9G[?lE' dAV};_gmboyÔ]tRA`myzPmP'P|-rP>ylrsM RD>_cקDɈcSIXcuUȵ.k'6u?{{LF/S @0|鲉{5}oBVf,V/܊w6_)RУWmOG_1Q>Ö_lԟsHgFҶZI0N!d]4 QG6:6=pE k[nO?^wou!ms_w<8QtznCC/jSQQa?N|@ `]ݠٯ[e-o/PmZwEAAADD\.wIj\.ذ-yz v}ZVH$Y c;u3;wnذaM{̑_t_!"d007"̚5ln/GVXƍ<;;{[ܫw̭޽X1د_ʕdf~i`5t͛Y|T̞5ӵ}BD"o4}vQ7"S !D"+hmFA 7\~ !?N+Sc'TJvBL.^DD,)(dz޺AAAcƌqU0O! SB?emw^OW[JR.{Vsss=] Bp=]NTV+y<]71 !eO! SBNLkO @32efљ*WPgs,rnKofup69ˇN! wfb6oyحgReFGgf.o1dӹ؄UDD ;TQZާe 5BXWq1SWt Mԩea -)eHbipKeZnF{7#b\R5=@3(9ˇ 9h43K~T)i:S6ىaC .(G(gK IPS-Oi-. [vJ?^}5T,Qіq({Kotdڲ%Ϊ0챈²쌘as"G)6Vu\|1sCe/Uaj|-P&FpǂgL9MMw.\2dHeO垭8#fF\v4gE8RA2NܤԺvT- 9嗷mcx7o @27m!2u :)&~nҺlՒVfLUP]b$%=yI6 iSΒV}SDzy݅MMG*ReЃ uUkzّS{%)Z,RNGTٗ·7*̥CD<[l"6܈*pךґTMYӦqT'Z @(b/ L+g c6:*3Ef+!]"mv˘D€g2vBFa3sHE~G(vʂ)+Z8+t˚&vJĔ).8{^i4vQX4YsK>|x#.[ߣ4-q= MnTTT8hx]t1-;X ""UjɢnVH$Y nUUU_9)ghCTVV:0twӮSŠkZ*hԂt>|שea QZi#SLsZ߶HRVkyym Sz73_858XKm]@\dd:Uq|[RFWXw( P]NO&?a}ԿYu.8 ݺuu,H8SD"N -ceYa<]Un.J$/EUD"V˲+.SYY*I``nn}1=<@ m40 HROW"(((pϙ0H$*//Oa0L `laIENDB`DataLab-1.0.2/doc/images/shots/i_blob_detection_flower.png000066400000000000000000011011431511411446000235220ustar00rootroot00000000000000PNG  IHDRpQ pHYs+ IDATxw|ewfeSEMJ hP `<<8%"Qr4(8N 8P  eɖyfy3gJ)    Ls   4"  ܢB   r !   - *   (>4b'!K ڬNI 6+qfiig 3ar%h 2ḌM8t47ý_;$lxi4ںJ#}j֧dAA·pxf84W衹A@ [[˺<%5jd/U RѭcnL>#榑| EE7Oޭ5ҭR e,ʄiM6LYSS7r. q-sm'.(ݱ1uBr]¸"ǽ1/'  _4˨6kZFK3w7'yB*j@|cjT3wK&d^?{Bc]zxۗ7דm0&CX˽q7}H+}7Ր  ^ H!d;{IrHBZZ[QNiik#ΈTEU(dm:c5E3~pIW+M# Y Zq]F8*τ4gƸf"!u-py6SrmaF~ &h;jGt.NӴX6Ƹ6F<' {m'fdFh=޷թEo  .VgD~M6ute-nH4JJ^WhN䥶!aݪ Eg͑|Zmt2z=1aY}ꄯ>g,-NN~vQ|_uE)6MpFaJ^]Wъ6kEvأ$ڬ$qf"/9& hJ>zjj.NrwlL]ȟ<>yd((>Z  7;S51}4snLqxfe<޹RTpXM_Í!>>yڬu=}-ҲV%7-:,&tOk[e} c/ڬ嵥=TYX@$ь-fu>K0Fo\,bͅwqVyD3PN_hQYoeӪ8ƍ6ͥq7 B5 |BHc_3~2耚7YDAi9Jisˀ4;is\42ڬ)FvLhn!|2 AA!D[3;+P}f-ϯqc" AA䖁kn&FaK͡h$YtE[B! Z(   - "  ܢp:e@AAA&r:th S azY7zRB(%BL=vR)qkg~够O)-YR5T~,7pYb^wHg2&'šAAnz<ݱ222d2fsf֚9d[BxٟN\4]6*͊ F)浊S߼~N^ >}j'2 wطuepZʅ  u$n0Ư/oelƳ|d~~xxX+SuUz2h]Nr뫪(-m];~ˇ> ~P\WWF ҩK=º@@v~GYm6Au߁e6}AAZ#6vhj,~7^[PRQT dz7s/WEEot  -B^wVkp~]kyeЃBٓX{Ms /^l߾}vG7n\xK.+֧-,<$fVLᢽp`I̬wL[pH[f&Nu97*W22qd hϕxk  Q[6:kSO>0_NdfeykR.zbϞTd91"0|m1@]2ϓ>hB["5jBKAgc \ Rcx=ĵk BH\=ǖ vvmZסr&OZIefn١XV%_1Wsdzt=b`zkء#S`Ŭ: #G@)##!rdJw" -M΢ }3wZ3'{,6-M쓾ǘ=ko2HQ|K^ּ}wj<"$I`#MƉ+J>s:5udpI}ߣn` g.Z?fL 4eBlӔY1[-Z4r,{McuH92e'}cȑ)"GR"'e/ HS ƌq|0SOA!$cc.s,%a#Y@FرC66|r>1nr˽F4tã}O[~YT>[Fc N@fI5:kOSZp,(*^?I@Rf+rPeJjS& `kƿXML_B-Հs_|5̝P*$)~=c]5(IE5.R}ROrR/WN+W^QY{'.+Lt>v9}@k(2eEHu˽cnAŃBth"wK!B?$RAuM k"ѣ!OQl(Bf5{0zdZplܵš&Di3m1$Ep#Xtyl6HQc' ]EޚFkebhUmuf,[j!Fޓ@XE->}yPa0BjIK?ܴᇺgC`ԽqzM+xgAz4 rk2% ^>} {8^ .PJۘY"ajɥr_Ej|ftzt1[iYK͊ - "dQkB6޶$1SeʘR+>;vkskW< 7 /z˒g}vN~ÛkAVy=#14.\Ph7x,>n{C'쨔%?d}*obEYIsW zܤQP=c4RBTaE%>PVQ-A IZ@7GqzZyOH3gZ4f7텚9vVXc85ǏyK: 7 ,ǰ0]-CmpAiTPJ2"71?Dm @TFř3lyW^CBU6FT0СOu.UҚOHӧrΌag`D5D@za/IeeKҝZ1L,ZZp&f>8nt˞t R"XL1-k׮y5P#Hܹs3⒚^A,C…8'OlXXV X|ZUAj({f:0 8-!7Bk%g`)C-\._W}珿Rkt,R R nLl ?g4tmAnܩc+}}M}TЯo2AiT|+Ӝޠ+/xoǦfJ;p@ sՁǨ(ME!@(q1-C-DZS8-@m48w=00.tܩcGm'ozm ! 4ܬ"ߕrK+EfLGqjB%7@=4@RrBc}V6Gx~V,:|ݥ»Zk%#)   Ң~_2F9`X:r8g_ !rKJAި΄ H0 l-(Ui" ́w[_tt59Jc>@ވ :׮]ر? /نAi=xWri ™}"0T:H}@/%D ! H]v/^dY6"";!pڵk׮uҥCAZ̃&0sƤ`P3P.Y3G:,Y5]FAZ uҥĉ þaY6,,G j9Wh;ﯗ73AjDջj"ׁuAib8+# RuxpR0L 0Tr"Hz^:r ]AAZ9n om:qo̚L1Xv.)TFnA]"  xpWWC`=AQ ]k՛o- XS-  B1)w# Ź3 ,{-E@4rM:sԐE/,7mPʞNj"7@ݐ\ãMnC*  H &7:׮lȈ\:+./}#!N1`mߙqw'5!$EJyWvɔk Î-h6e>6[0<齫u1z mpYȠV;z]imz/M3O^|4m;1AAY\ u3Fukf~WZL"oui}hͧeeeP'ᄤhqSmt'NA,\ Oc5Pӻ\W_YQ4=m]iwzV7K2.V(s[^{Ul+s66WuQ>Ϣ8L)-zk~-ZBh0'6nֹ?\Wx~Ν6n~pn1-) R fܹsZ?(..t -{ߏ_Gxz?zfJdM\z8=}7|kҚv=uŵWR- $v݄{3k}L+[`'>ȃW.lw??.]skn IDATπ'}vc[å+^[vpzgB~>mI~Ѐ2?|.Pjʕ)3޿bYGXPCiˇBEv3]%=|R}<7ICzŏE@A+V+*|uPW3r]Cu鬫`yEejHBS A7+j7TϜ=ٳ-/enɞY Lܔ;|{n3_֞Pzl1'Wk/oKsll{@J&spX8y+羾`u9c&Nn|i'3^mUzAr\9$_ ᔳK(6x0t섭I۔91.\ 0q@uޱeK{kJ cıJ.=2@ >D:,_!\nʕ+(+W\n:߾ekK_mOv妽x aa+߾ecF3=4Wi)C)9}3ei=hu6 lqV_r=p[1Viz%ޚ]g=A=ޫGfª3[UܙսZ#BC']ټwG sOG=&<,kڬ hV4W:jib.(r/an;) aaa=|CYwЁ"#H-~}ț~pI Az|0EFHh/{_v!C9  ޴gNBw^vsCRYpoKzwcCzvjl7vi]xޗw[e+c{Q˨ -W !+WtQFIʕ+kcqܰx~+_T_ӟ{ſ_ru^z+a]ͫ 7-:onm|b ߄sΔ^zեP&7RoMH|/=36hO:cRp+Nox**9 MQhXЮo)偯*"z\\aJ̔ }#1S#f>R_#p_͉L"E=L:vtf|O,:"zag"_^mAl8ߵJыPzBE{ AZ;wס vtB_k7y[.ݗ窪ۿݡ}Q# !_?0c"ټiղ=j gnI]cjzyPǁ7+9cnpl^Z‚ӿCPǁ=c?RB^)CU Yo/^rh?[0`/9I~د?mg%H4yUt8CmA<*~Fĉ_(;w$L>cۮ]UoŹ{?~|РA;Wv}J߈2*Q.թ3Em#5rܽDxsf%L-RM#XȎ b%RSȵWEYZւ瞺vZhh(`;VnkjjL&csG `͊/:ml){7纍<2&@nI|BfƫEI=zٳg/_􌊊 !dk7VoR|e3f+77ZF\xSY.V_~251}g.mɚe4:ng%` ! H]ġҘh=HK0\:zOs>ay|2呩!hDCG-Y{/ި:t^+8t>{MM^Y`  )u 4X}?wg>&OTr[QsٮPATB6 LmN'5sIijApBAAcIEEX6{ݔ!MA1OM@ǡ>:1= +>?ψӖ)MJezޒ9 PFSE@@֡d˛F5,UOO<1gฦ@!O՗fL~ҥk6hMK=1_}qڤr.i|ֳvOK5 ;ẁ RA\R.Gc?+7M:tҖ FYV5M1+׬YfɒdžtV:*8xmY.]_=nLS;6P!uj i^1.]B>2-S r˟fk \.OKK;[ѣe(UPc6g[<k=VB$wtu!3gK|sc٤i"o h}sHJ~fr x1:NEB12LPBB" 6>r-F-{FSE:qCtQw B.S l I}B#Fڬ1:"4?pW"i!" 7( }Vjq%,Ϫ+DL/)61g;2:9˪+{z׸mooYC= 4e׾}mڮi#>٬Iٞ`]!WIBV,iCuRUm9si!ܨ Ic!RUZ,1%@`OKFw.a3# peΤ'^r9tΡ,r\+KѾq[g'/rKt bUm!KPU[\Zm!7jtbBodl;hGNIK㻩wPu@;jS;6i;WWW7 +{x={q ˲M'_]I%| wb3b!ϿRc8PScY(*JdkjbD_K9LQQ(KD%,3u:7VtDe:` ay<| 9oV]HW‹ Rh?"Ar>TѲ@Y09~6 n7U\)$Rn4qJy^Tt8,?k /y=Ĥ`xZJ "Zr՛ z(j*}wqտ(LUM  a*TfL f519{Ww:HBٚ=0&u(]"Jl| V8aà 4͡޸qcٲe=s۱yY -2 7%|љglgD RzB9Fc (=GPB(!Š$c1@PԃA-%%, O @(ǚ   (Ik%yvn[DG2 kC<)%"2(yX*c"NKA2 ȁ34L7/ {=D0"9m8sQ9:"l4v D!"G(CDn?2 X#Vvuh6jd&PW@*}5 f3^2Q)UPZZh$IBxM& rMKZXFꨈage%A =#@YB|,q|6;Y?ß]le,̙BXI`Je@QK5R$P 6EJD jDʀ`̔1AZw(K" BϦ,*iA5,)CX#lE *_0'i9JXJ䡇Dy])^Ic)EJ!H!C(k-9+XhQ uQk '[akDO/B(R%Bh`2i +k۰(YΒ"M9aDkdt8` 1y8F6{#*de(Ӑ0eӤby7ЧfA L+aYJiUUS@ߊ ~T*U>}OgC_d2Mf7ͶS,猿Lﳄ xso}ӽǨ4<-BQݠrVPH@`5 ah(ף P"2av% Kf OR>S(DTclJI" ʨ\z\X("2Φ.I#`ɟn@doDل1x;MTS}?(kKRWlSv ˀLƆ nQ&jWuo߱P(xC_ɑu(b6g;SY,Vo ȃ U邒jÖ-& r@K’:v"RuBQ`I*»=\S A$wz:AD ( f5QTX$`|RlWAJ77ZqlZh6p_#c|PM3l9ĩ.ӷFU#mej٭^-Wf2 !ТP֑V2ZJU?wď߻ߏ+బR'- } 3C?Qz~T奃س댊GGe@ZV{*"(X764QŐ7A2Ԓ?D+0&\5]v|_ /XUkʀ -4=Tə*LSTLa?vDVMHJi| 0)) P$%7:P"=ZRFm ܓc"\%\AKre`Uy1TSB{c*8W{5`VeVAV[|7 䤐OxC9"ș>^0ʼͥ#T'=mR]!hK'`FS< po/>>t/hD+P~Q^hShu ~!j><<|K n^WK֍!=S:0ic"A,yM_ys&v> SOr/)~ ƤzZț^{b_`QΚC8DGY~-P7S-o Cј"0&$Ԓo1[s1 Yc yo5!(5Z]mIk)ڠ}".p.+SjJa2 )jڱsr*ʈ1JE |2cKH7?es8{֥}XcI~ WUʿC^lx;E$,C[ ]w8ϞO@go߾lbQ _UyO] 푨"|dʸ`;\?6۵yk2VJ]V.iiys6j5+7KR@Ap.])!D6$dXu#(ӋpG9J@U\GJu#Scv"`IzN=0EJ@Ěc,.mPB,ǎQD90fj [m"@x"A@R";ZއTƚPN'MD`xpQÀ^IH4q:#SUc{/ [VWVJkFY`LmI eL"cHY"r s/!ǯ}[Eb?J,m!w1pzcKI#"FU\f6pHl,'J9􊜛 ҟ>A*Xޢ+9r ȉ`DSGSek羶ȱՒ_K[f^$g?쌤9-#gڣ%uĦ{QGe؟&%Aޮx(]U3i 8Z{Bw sO8{TqPKcIv 4*; DaG,DPR !B r0k\'*bf$- QB?9i>DLPq1SJd}8#Uzb4薕 V^F%#H%P"%@SBY X턾;'YPuT)ik/賆OL8=a yc6+Hj `( IDATفyzQiD 3_tëB*)8M(PAA0fV4YsP)c,#ƶ(cej1-ְ}hM;0Bg3}+T?wwUf9o׾lKU=\v{^bJAB6&g0*;AK_a(8|f\ɨ(}R" W0rA-w$c@]x5WJP r41j &ݙ)mHøZXB9)LnhD/YHʔr p7`4hhfAjLÈrlQ~NPT <sE'>  ,cwEc1"GDh OY2p\.ڠA^NL]lJ;g48ADa}ޏ Xx[/ PJx4B(!5)xuR)rye%WN-Iz s! @9B:-җ$ P' F'9>3Ơ$i"b|0ruEo>w㳿{ ~UB@YVYW3 MiH"pO^t2ښE`2_ɫ_=2wwEp ρc\  踣% >6ýbZXHگO/Vu9QGYgJ Dz5n.>]0)c8XY\ >-?MqQ`.U6yAĦ λsW!˂Md:ccDD U0XT]1p׫_no6]T/pn.g(PE5ܕy UP9g֢RJDʫ9^*JJY B#D☉=OOX Ce-!|ADPo[ ŀtRTI7hNR{3WYJ9J"$#!c*)KRZ ȡ*J4^ d_"̓_3P)iӖRAd W@u'w7(G K۴Uݡ( YM-$XQ) Y,qVI(c/ 'tk…Wy }(0f*ZS_^|t{ ׊>~mYVP]]P_|vYo"K(`LdzEHNK!lMRZ0үu/Ba =w]}R1,Bqg( 5*6~.)-s>Lb`*ZQO/( ŧJŻ?;jLK4ߪ>Ũ8,g<$4RWLQ&fe ʽ$02`DTT%T:(ELTɨ m XAJ*#gy)AmLYs6tpT .с5QŘ)0f[/~;oσ3ִyDo͡00,a'/²;81rAdxQ^fR\3re-d:b4:mN8}p /W?AɨނRn'TkjoV`v}zԍ'Vo].(fL_=nիWχ3#n z ̳%5TW>F?,vQ&l҉(/4өjQEĨqꉰiHj[NO0*8yQ[ &3U0|a6b;㬉FFPqbog6t?Zo+ifWW 4'Q*ƩNS"}8`I@:sܲRw) PaQFML7(D1EcbF44c%VPcC)"@:K޶6sc޽{\X,}>ܝ;s朹3<.Xn&)mN|@i,X0lذ/>s8csD"~6{z'}WfGx3&S~ [=hѿ/F9|%p=+w]PP@jc˗wQZI`̘971dH6> _*_\2%Jװ?m?H(HiV$/^C`n}}8h'"dqnj]ѫǞQC?>^9p>CbFH jiJS`/m?."8V*@~`ZȒ|q}e*/3NSEMlh:nԳ]lρ6 8KE^7]1{5?\;psVA1bA4,j }5!fbqTO i1Xu,/FsI[Uu]Xcw.;oN6T%Iw,(2 , ̔k,cᆻX' bTxݻTޛU.,ܠUԨ:W\MQb´#z{c[dР<|=khܞɰ^qG0 X6x/ƌ%1 j{)g:PCTi/mIn 7D!#`lUk@Ck2 adTR7R[ 2ҁ2Al@a;5X.tZ.z-iao [86A$G钼,`\6X¹+dMDƗomh_x?sn,|􌣶=_݉͞其) A@2φ bA$ ˘'.ҙ| asˀ]BC3æ1/y<rŢE Ï>xYhї1]IMMN`6 2Mf< }H4c+/UeՊ80u!_z$gBm.tJo!Mۮ糣[2tG.zc܄|!̦;4ɂC`mv+O8b2#\:|oo¡7=y/kZ56B$X*rɕgKxIi~#H8L#'A*OF ``X +#^0Tj} m mv&0,c^tn H6p?`:dY ⒂|;7uy2Lܞ(tCL0/( $i# LPT,y)29]uF ч`%Xk3 1צ#?œ,h( A&4Iǽ;*夞D]nT%`Z)mpVBEJpRq[bE5S<0SkM~#9C9|8r M8,yPQRI@K}Izݪ%[]/=;h#!YQ3V a a0Ȏ]sʬn\OfCwlR5hH˼+u3bĊÆr Ļ{^Qq j$rwO|4`%ޘ3SI[oޛoW>7v~w U{a4X>0#&Ҭ(Z!VIAĶVyDFR5w  1B! xX`:ϊ8$.Yd)vzڱ1/XI.,-,D''bvR#`]?Sc8Y"(hғe} UwujjX T`R i6 3{ٳ僀,[RJ3Dָ`Ty^s`w$'.[<Ǟ2'1bʓOwĨ'/X=/@26 r>M!6>lӍPs=s 7=WwT"]W؀\%KiK$WgjEJ ov7UUN ɳ F ; 혿qu{bi O"yUL-RzgDB %X0~ ;dTuJ>Nu^vp Bĵ@©2UU2`%;遡2^ zA րUCG+ ׭o_e!u\![*HSs՛ !',ZjD` cLGkߓT1IJQ^I4H`)/WWUƐp5< 4M"̲L>Ltmrʍ7VUU={>< }d9C9`0oa~<.RvzӟWк`ƽlɎJq["Vbk jU ]ٰΑ_[ُ;Qd!+~~ϋ\bZ[x֨]ƒ"/<0[ 6pȸ'|x6Њo_ <޿Ђ⇺~5ev;^(Ю[8Qf遫kL8nǶ?~vs[2OXw7t"a0gdܣ.LTߊH.r{t"bQdD@z .N:wƜvxour_";*j:ɏ9f.C ]VQ4Ib ]ݔIaר=uOtӢ8!Cnl{!;o*crU F&nL R"nz6{m?=y|:/NstĠ>N*l F-ryv5Z|?tl}P %h\ȕm%ݢivR4D"U㻰B@Ihȇ~`;? /P[[KDBYsY)uI's9s IDAT {9C9믿y^N-//~m* lJDłdaFH4RɩLG!9EW+\[cg}xV+ א7[6p)'νn{FX%^,DALzܑ b};ymhkZbN|E/~}^ǯgS_{@Nh%E\V.ᚇkP%귖7 \Ǣ3/7{V-^Z, 23#cZLzSdU'lקvd1NͱkΜwUѻAU#B`.T{>~"^}}>[+>c5H\IM@ VQrdM߀.IXAWV L}TJh"I)]& ,/eP3 c#Q:E7{BAyuJ} axRC,2`%L£u/v*@:DӫSj̖¯`9@>5=;?o& IܘC2 uuus;xWw? ټf՜^E]{~uW 5YxyztM4%Ċ5WTV: C/!AW,>4GW|!rG(:uj,KV\yGWTTL0@EEɅi&5}Y/'-XdThlI2\o\BP,,y54Ycdy~ ǖ/[X7b&Ϙx0C9"7W_=#/o1D"e˖zk30|QiCĒ 'H?HH(cV BȤYl8i6l썅 yZW9Q35=cXzmyg:ᨥֿX'˪BmN~7Ka,6]|»Z \k…{msgI~3,[Kyο+n퓾p{l`B %٨b2 M,'H_}cN +p}36P1f?>E\Z9Epߤ{*jB;E+/ϖ^iHmzH ld`g]KI'Vba>ĪxrQ *ܗ4X@`.,`*81s%$L{n)'.:EUyN#M@@<'QT2'[22Ii~T}BkFu7nطoϳʪnez85#%V_K* (2fM1k2}ws5ۂ髿<hbdbw:܉,RV1}la_^kV<C9{^`1fСz nݺ8KKKSZU3<᭔cX&ˌ-MI;8˘NƠҳD dR&Z ҆m7Vbk僫P:.&Q ._Y>|誣zbXpcggp~QCNB̳;*D(^"7T<#؄VSIocnW\%=mY`9I1%[LV"O(]6doo"uIO~_y}gM/ct[8Up!b)BJ;o*,U) ZbƩBPD֨:(Tdq4_LH7_$ƪ:ؐ,44q} &by:p0Zb4{o'N"v$ⴽw=:75|"1BJHk5sh(f6 : ;%OG@ X L81:Yǘ%MP+Yxɣ ҥK#QߺOlJaU3>8B~~K^~'԰;ןG]=$/~`^0o+S52eJ=Y*2栍'KTkX|*g7QZZZZZ0`9sBa>~h*+dzU,GJhKI.ɐ$%G{J,=X~<|U'XabKe5ㄔL!Kf(#"xӟK^jdB3`i@bH 7l_.Ç˯T/,|LJ I0tրEY6aEU-\EP0F̉W3}eS_W>;yשD?S=iO,(3h0L &k~ S_׸ɂ,>Bc 3/xVoez_^ܞiom5;~kse۸Or? ~zkRօw%?voW:9?Eg7w⮅J7lp#\QS[O$7v6 !5N@c |M-iGY>oؠMFaZf0odzt|SV(I2֞CĊ1ᄏںb』=LF6ɐEԿ6h#\O$ i&f2}ѫ8`)'/[uکdȀM$ fCJ[W|:bJϮc1' 1F2/E=d Xu#Q.ΒPCxpYaI,A"N[icQի /:Ƃ`T2h[,bc6\Q{~M@z L`oz{Pyjҧd?;af{N,&̾M'K$3[l[me ,%@Kqx"q!$Y_1p`  dPm_gPWo|םL{QUcъsc}i1BX]]mҲCe=BDUUN=O?Z g@~qeE"挱7l=[~[[[tp;G#B fM53Z|!kˀY˧s'u~c'>M5eǖקt?u[̚"lүhKzM] G~ C͹ׂgT3UF/xs97 V 'Vz8w\SwjwVtȀnٷ"! ^"풒@%Rszۂ{7) e/XLCl) ƨPADZ gcI¡WLW& T}L2dWz).ߡl O'[c~xJYF^yT˿ѨtऱK%"c9C0r$J^|1ƍkz̙G0r^{n < 6Ȍx՜1 l+. aj4]!7I0t )}62,J#_/_Q񢡇\vI^z }3&DU)Oyfxt IEBأG63xoUͮ '+<k<+eSc浔GܾdDs![oŻ&eاy3?.~QhjIa ]Xv]cR> u8Jڴ7T(UhV |>bdI c?m ;'EX%X!*"`TiwUQJx!el2?So3VƓII6U,WJJ(=# Y3Xo9|-HjHv6v 6Bdցacu/e]w/A }ZEE /O*bb%Ҫv5TہnoݴnO{Ī녣V1G Je" /mBJ' MUFxld̃Ϛ1q"f1)m5y8/P6hMb^~C2tSTLRW ԛ_7}q)s`wWW`b^{ƒr!2Cd}N? "XEꚔWQ6&nl)/<|iaV1A<o6;^/ԉ7yFZ1kW68 ~;?Hiiaͨ`(%9k˷lRPTׇu+|:Q[4ʦ̝*|&O)tK+KT35sk[@{Mo̰%c0{9+=BحWŢ6QiwH }fZGk'?wƌw氓Sv7zĸqc̓O>9`vԾ4pl{~P6ǖO)֐TDs!R#I: 6|zF7mΠ)2&-'_([cCS ɹ{>8fgK>Z00 :57`jHEI0!LzK-%H0 ,,M.uRIнԂ1RJx, j{eSO P X5(cܚC{n_)Kûߚtڐ%}}£o_zqƤ7<-xk&$cR¹Y"'E3r?m2}v "p>l)P?exO~hK2ON%R-u'B +A|@I4>!O_=(*i;>蠄@82xM,f-&A,Q]@;L0&e$W SrO}'˰%#"/$Ey!,c2'W??@̭ ÇmF]unGo/<`Gv.OݚKN~^PGd˱$c#X6(j .`/Ċ8UIL`&RWmJ }*YPQ 12vUhvռFmGq٤}y}xiʟw+f['},y>p{rzKm9'̷5n҈_͹ ôfF4sxvg_e)z Vۘ B[z 6nX[ *=j#GR۶mI'[o8a9C_NxrϻWOLJxadl V4DD $.ye|H)8JKR x C-@Kja&Xs]O~Gg{'ux;Rؔ([$l3k֎{X]|z絩?v/OserLulY 4To%2Q $/o#Y+ [̈́Th_lsw;&K,?Lt/`C% 'Pб> ^PD; D`TCmm:1bMF*eմX%* ?bS:T԰Fj~9=6{,/*JN8SzEVDGh "͵?[;ߙ?O>mͺR=lp76NhnLcp94hРAPJJJy3z^v|,4|;fuH~0Ia,Nj'Lie x G"SsnY4g1Y}׿LE6`~86ب t3BELځeYJi$<i]]7 ͮ0 Cka+֬uJew DؠaQyn]Ep jr~hO`NslS>¯V],=_sH$Ew!r!/ eSY/xs97 V 'Vz8Ͷd>w bA%#vQn@p"K s"&H G0&Jh2FʱX+2@d1 2K^F@  $?w vyrᘋsf TLt/tm]hC=YpZҁE5Qt1\[K=1[vv&-(2qn@k}k .B x]&| ovKz-І"y>+ ,kEh 4.`c1j+Ϝ^?n%G,C=#lQ y$<{b2e;V%}{&S`o8!qŞnϤUdlF l OvZskk^%qCV|R:!\&ɏ]6㢇FZv׵U۶vU1vBիw͟{v߹z}i~sjPx@eBK]߿%{6k3(D{7cN׼MUF2R" .?~GC9C5Uۭ ;mZtP{7xY`)VB0;A醥0Z*jJO&4xNmAb>a 73Y1JpZ`gh6iX% }d@xi>K/K'Ls֯(B&G[zSNw_ߟ0^ƷϓV #WlP+H5ۯ-Rs耵G_<ێv\zO,;S"0ilE X/{s{H]]uﹷ[tupW^?쨭 [`llN|tV5yWrƍ7oBjbіhz\"aM8tcQ8bUʌLELjVveAX\0vc,ik O0 n>!Pnqq6pn>2z|tEvC`H>l;VIg"xm9] g͚u}u~t?я~(5&=6h- !X$KB[$%Vy~r]:.l*hP`j OUc$3> KIk1eAqڃ ̺4!Ff?o^7}"m+x;?q~Ӗn{LWm怢U+2u%gM9nڀ)M Pn FLu"6Hr$i=(\e{pfImEzk\EvS:SX^qcJ iC~5 m3fW$!mX2[(I2 {M:nAᆍ*v4Bp/ݴtq|u㟛Cgd^*iU\^OE\O.|z35(>H4ׁAqXpDYQ6*P;^}2CNbgβ`7Ӯ-n8~z͝,{jk`HxYKAHbYOl LH8#iR" ׅR꠩-e<)EIŶ–E6K=}ֿO`?T _X6TL$6-<1aʇn}Gv1) ]Ϙ§MbIF6q±Cvn;Nj{ +-J8Olj.\?1j/yNnצ{Ͳ ,n )Gf\A68 &]?N:u?ɧ9bQl8KMc 4%;04X)vR%m#C{j!bQw4*0:wbpآ{}G`O| ֫rBjV6'TRES|(s7*޿``Q]Ф"%@=kĕbhSt9i"*l+0hܸZn\W/ǯ?la[U M Lz:HV.u3 TT \4XT&թM;v[\Qtfx ZC)r #?$!! e O޺»TV\]я?ݸr}s}Tnft!{"nk ZW%x+f}fǧ;#;/_rs9=E"(v۵e߿{-Lc鿯7{y?bWb{z3m"X mĂnHHbv9(:Z+)rH# \T!YSR6O#v"e-LOjb n` >8zgL\Oh$2dBC>} 7M,iUUzL7V\}N8_ acEkLO`d},3;R{:K7+-obأf}pc_m;O]F~mtN_~|"Qva%/N;PqI!߸[y`sz!W{6c¬i`nXY  bŶ*B[R3YnQ]9nmkh.́fx<f@ ψ:FCZEa6# ʎUEʂR &0iM؀ިڇ^:ɲ /}pí=/?j_Ǿ'wOR;c~~/_or=~¥;[r%ʒw̽(kͻJ}i7uo/]*Y*ũ颴hzkQw9-Dr`@=W H4֍K4 pX)fjc+:aR*?P֖_dKhxI6f*sKĮghuGnelbʄD;vV*HǏ T̎K+k#% ?6oBcI6m6 DJ*#*쫤\3n&>tȫB:T.36H8g׎qM1QF,a<+aMʸ}e~;m~n^zpT5$ĵ᭢tg9Q@bF!jsRlPhqSP beImb'8L"qR?dX)x^*T)V==ҩ}P.ٳ'm ZpJys2?v|nC}k+P?HhWPjUΙh4x+R|'wOh4z^S҃ޞ:Rv_={ï]h4kO/3{[nyӛcKo:F3K7v=fY:gfͼսn!oό?]1럳:SQitW>EkHؔ)@`)%YSb8R8ܝ4AYt"T IDAT9 O'v$D 2DeZN)- \#>-7-^ll6xGis=h3o;ۘne?}5xW;8>Q ?2x׫o.0"=)iPǃ} G+g0 f: <0_8erNKؿ &W웇SZCx6/uݥϽثs9YV-ɣ:t9n{,Vn=o*am B_u #pk{igWiI{Ñ^t(=9w -  /~b"3z:Q GwԾ2* %.7D,v%ו_:O({?f6;n LQAqf?ԏ)iB]AN'n;|$:Z?=KZF\|̑w~>QFB% gS Wâ'k Auu5jl7~P"?H\W_5{?|TMz1s7zA:x钚yЫ]p;͛wl7l&{lvCTV3kźUy3tźu+w茋:-_|?ưM]`LY| e,V*5v5=a'd&WAi_Mڍ. x7m%mnIdEcj B;Kkx3ɈPa)sK<Ð"<ydi@ٷW]t}?Ο/_b=7k,;~ΞuOxK}cddNXnݿ:Kn6lۜßQ!!ETmɻb'yoZnT褐`!epA¡o<5uʞ^~iy-%?Ʉ;ZG% pk/dQ"i}}>^e40BrvЉ[LPҒ(K'tm]T$KEGrlTfkDhBL5Tybmjxah b(1J v>_@Ǣ2>@\ C)|SDX&n(_uQō"oˌPthl PК<_IJ֬krHY)HhT74fvL*[3*X7}rȾG2#@"z-pmjϭvC )P5vu{NJ/m ze->̅X1wutNx93oZ:͹i*̱[`u+&?0fCʥsMTx䬅mL[sAs&ϝ8ݗޕCsf̻:YWQgT;n%idgW,:gaB߰3Sծ =署}&X%}/P=~|aK:#?i8cɱdlgɖl$AFoǡ ֖zۄD˭ ߷.kZZfDUsaA^)0d=sA[Q7Rd/+-蔭+r+WMYe PBpJ0_NԖ7 EٮtJSwoY>v\a+yŀYRmqΘRYB mN Y mlN MָC6Ċf]gL~uZtMkbDH†[lzE& sG{/],&tUX9' [=zK'qXȆfEnTh!ҩT2GDYjBB)YBJ HE @lEpᅠ 0S9E1uhG/bm0˄gFP޷6hhv/wxv+[JL,},B~==ŞJ)ʤU2l56stw*`ɤ 4&hmJbdi(fmJ$BPt UE9KRmnxpxj1͔݅pTSO.Z1뺼nvC CgL'tf&rp4Y=پ HOYEǐv 5SS]W;.-qvfڱ!6.~fʟ_<3z8]'p}4I*_uSx{s٦XAʆUȃќMD?pmW0ERV1Fԕk!e2S(ZwZPrb II PI6ڈ*5FV/U9&Y/Ժi>Q^*Q/>x~y}?6#/>a-x2,Ś2T,nzrm2X 5Wʔ,Z/@/+AH=nt뒙p[lЇ2+|_s˩&DT#^PN9my7q+u eͻj{e%M-Jf HWPJ@X&O oͅ`=wtr x%HT 6 SJ J - Bl?HʰMtsp(dgҦׂdMo0 !ʈ31m5HbE[DCp|Zݾ ! O(JuYyRJ[[P [ Wd}S<\|h 8\/qXܘ>2e%S5v%@RmWi=zY}b]0}&G*kO-eVL<}4-cV_=+VRx+V`rxnpӞ s,qW >g%KWglgUtuݐcmXx Q~}ךFG9ۛvnz}醧hCpԒi_:`DX*qE+~RZ$\jLJc0ӡ~BM2b:Y"@CS:e/l)XM`Eu*LjIC!3CȨW+bĆZca5 a))x R8wgV/=lVO_/+ */ -&}gmza3H-םb5 !yLG:f!Z)D&ҩf eCYgu+l0KhK#HLqJ~P2)_LJW #f`Ie5{n.u`@A \mJ\v+}6X5 4sXF{=6e?t6/&Lɏo*ӎ9?ø!+ڼj :ܶ%w4ǖxiq*PUM5Ϩ*gL5% N*sU5v"Ri⊋ѱ0i~U퓋|ƪOik;0&8NsXfgo~;E$3lhfEwݕI ޾p9ϸVϛ:uebC؉+Rj; n_Xpf Pl8miU{VMW/PU_t㓏[OujOӞ0޺<s 'v۫o;ږO&^('p Hi+6XȦbٗgȰ5Rm|,(YJN 8HT >h[46X2FWF*re=n'R;]E1xcl䠗6y9*u3Ǯc 'f<%y۩JAhOzWkl2*5숅 1Eg݀u7/lX=jS&ʮcuF;Wt-9g>n'Ï~j>s7x׃w^{=lǚM/uN@KHŎi*R`܎+&RʍH[I>KI#A64)fC0Kfd* ̭ƆNn;! }Bm Yv %/މЮ޷PfcS| 6Q? Wn~9{COӽR<3jo^R\躽VW+7H!7T5{9pUl=xvv6k…4Hs o ]-c"|T&gbqWoOюP=B`y 23^USrkUftg)%%_YÏ! N8]v}e+tTTzrxめ%Vxx}#)|->j**xiFP"$+UdjhDV"y(#;ANt [$F-ovd'*:lw][1|gِړ EYzeлS_~к gmS۬GO7>ij}o/6 @DS|v^{7QsOb#ћ4M/5_y&{։o>8#{"_~o¿>jٺ Tn8[ХNA!ؐ: Oʈ'=-vKBCExFZc7A(9 5aG0"(B>-CMMf[P{!(61[QI"R9%0y r=Lx-aR‰=@&wg>{%oyϔ<ҔOHkh.[%jtNfi~Sc}+Wva;=#k@tyI3JOWK|g|~\Gbv#-+ -ӡFN5XwJ.KK"NUc?V\ݔh$M󴃎++=4Fz7CU=7.?ê]%R@H`l) $@T⃑RBof ~P>RR:l6FZ(4KrXadacz%ᴮ 3į=\?ÏzܙuC+? ֞Cs`I裏=I%<}%SA—V\=2O.ؔ*'Y-/?R&70A2:V#޴OA농;)sR{]g$SG2`,r AȰPӦg\9#&t[I* i  vl\;r&<肯2!G7\9'ϿfЛqIirTv Ouu"-ʗZmHv? !2>(v5Ӯ(G=1em\xIgfܿ?=`Ni3Je̘5cdLHؠtY& AfWƼ޲f a6C(9 4& `ڃ٠++up͈pYV?Xɑ_^W?S15|-ҶW'|Ջ&tC3INq.XSv=̋ԸWO#Xo13%$'$\ [Ė"+ҶD\kSK+d[~+6U넂jdV/"x(6](ME!A6+`r8 "e/,ܾ[d$ˤ2A+N40n۠3?1h "b)I\VDO(jǯM[̠^sU[wy{Q=?j. vjD#TϏMCx.Dd x ŝl@,+v"RP,yy!5 (7"sk ӧ8$ Iv8ˀ- I+ H4,@4[>B8.hY:2MRLp 15I%,aF4 ݻX?ö0~ʷ07 6&x^ͩ$7>Y!6oh6 >&t~Dtc=[\chERV8 l &bH7W]x,ݬ2& c#-@ xnX4:ޕ C86fp w3?; ȗ1ި:=b՟yb!N=]Wol=tI{v R N IDAT]XRk]gƲz(ADZWHA$ ~AhX SY!3 b;Bi"b#]a6Amo,7D"d(P_&Q̚DŞoO7mu{Y~wFf $ƀf=:B- 0).(se`A1' ]^i,J)_LDB  cӪ:aSǟB(Z6 Iz{ƾUٟʆՁoLzux~G?鄻g΅WZB=›pӑR6H'ZufRrjSa2K۶K ܃iHeRG, IkB&B!*Lg}^}ӿzvb |`[ fCXOr᫪';ywژwiK5.[}8ڋ$R xf1m#T+,M.J+M!ZRt%cq{"KDf^c m)5]2n1Rk{PvvJ{o_%$N Lߪ&nD%#K ,o0i&3I A^8 fAr\&c?8饃':*d੔,$bY🠱㖹r NKEdst`{ЅV( u.3.m-gEWs{z(~GA>odw?3ċ<{fh}M}*!RiMwF-VZ1)W<$ Ri!IB:,d:O&ln 1]^ÎaXR^=uT+ɪ< m |䭩55N9Huyxz"#92ph`/ΨXqSȱV#j8)H 򴬙[.>[7@%Etڃ<2mJ@={RIx3G?яO0~m0NXoV~%~D?. d3@")UрSHp؊0 ¶ KF8jtDr2skV br*HDOVhMy-_p@@ LN꓂aᅠ SGLSc2SlVr}cUhw*jQ(4d4{S)M(atlOnKgg&S "Twl6D ȶ**Il+-Y%"AoT_+Mb␗J7IO@.;gкo'S2jԽ`no_!qdGuc7xkJǍSG?яOX 8uϛ[yE裶@Kg#INj m W{[̈K}YQ Bu{/C*ZB>?ڸc= M,@/LdPRB&aFaiMʨ MJm9!=ǐ R5c`’Z}'pXA _V%1e)^4pCwHa~=c-{^jKv trE gh"ֆd3,ZV 3zV}{(S@&,/)ՇCc*`GVnVZ{Y<6eʖ&ASwj^h6Qr֋mK賷AHo:9޼>r+~ǧ$> =Ox;Q)@Ţ5X~$2 pCBFSxUD&WaJR[zƽ+/n\[Bu`/0=A0"p7)-/.\"6@`[>HS1A[ȉ-H4>thHI3i͎Q>E^ D,V9U<;B-e' IQBHWDēI7av))S"x9 m )8qNt\&QFgNF/~bĔ_/4om38U|A˺ 7TTy;.T"PjZy{Qā1w_(nrw6>zUIs=eeJ)O8g#'ۏ~8IBV*幪2B9C`A$*0Ӷ,с0DFQ- ؔ} )$vQVO]}H쇌<F) WW~dKJ)(+!qno)E% #>PgDQLf2W,-Ɠk 2f}Ꮆpz2BA|%H٤-R <$b[i2'#2Me*d[ 5pg@&a7i3tk >{PBA,`F 7sfb"Qs)}T]ZʄDx`o@$<3'Pv"qԭkW o E+w2`{ߓ^`>Lq 6lV7jV8Vx#r wظ>|;Qُ~>Ïk 0C A_kK"}+K0 6% bCj[j[j8sҾ`F)`X~Ѥ dIZd3@=%8|ia? ޹>P=5^WD|Q,{po:#3ܶ^: Y :o)[+Op;Oj[kG:ZAC,w 0:;2VpeT$`'UZ( - MyaVurz'?P̞$9R& $[5,OE N8 40XBxF[M(08Рcy@Qˉ1eAه?76V=}-E>' |Z=tƙ^@D}S}?|s~>Y4`;5*U>an}LMnEKwN s'D;t&-]N=̦=GHO~ܖ.[o?~,Gw6ݸE7.7t]GpfsEя~c!Z7I,D,M[9O@`+U@zAzn%춖`BYYm rN 1AY, sRl3 F][% j}ʢ7. X ȄZբ̈ -l]+QoJkuR[N\R٠+F][4 tn>A^ & !: 4GBBdҔIhf<Li؍\C=#YWz{\s3|{;f;nO.۲dU fR%1$Կ[qugJч8 L:AO/l~GK,YFW [w-&cD16A)-nS=.?g#/i;uOSS3-c~).qOy馋Gz`G?o/i~DC$2,-!9`jЦжT%i3U].ӭ%D] $/DnBOo8j`guiӐNouhb[[lڄPtoĀM8HLͻrK-L.ANLb ;^Ĥ6D\jƷE`0siK~]Df& ":f2H3)m2tJnj0AVL"kDBp{T0,ʰcemJ6q`&c#S ПHoҁˆD<8DS"T̔2 3 Ҷ@t%d6ڸE=TD⦛gN'WU7uGOZstUULWKynV4qϰ7׍ޗz_#{}AMD2ڹ#vWhCHTپK;(1PPhixaԟm!ӬWn-˃ <-~o]qKe8D<\_>8=><Lrԥr#;z̸i/θ[_pa%_;ڹ"G?_Q f40 D9 !a:` He ml,v]p,S!OzdՑw*-.8fYɀ>YiKXZ=%?{'Wqe}nUaFQF(c cְ؆cec0 'sI4ʚy:{;4(d7(I!hh/|ydFBTm<8! 6mLxg&-U45p< 2 PAh& )4V*~=\fJU85e,MòA 8v8wZڏZ]sTvk 1cADPV~jDO$1.ĶS-b iLmg ڦ000tj̵׿3Z_yy7sʪg-[|S9X^p_| fMj7⢟%2Jm݉&?}n0whoq. ,h'Qb SY3[Ԗ;.W|#}1i`iPIj˝WT&Q7黈tsyiC#y~Yq1?hYW܌sh .Ko/R|׬oX[Zp+_s2_{,f6߿\;s,){}²9YߌzU Xl /Ӂ>M{V (y3$wT TP-XۅQ<I[çb1 vi0cE\4$^sAJؖ:aqe,bIFXH;mqP9N$mzk;l7]*$4ZBaƚ6vM?rCg|^:mu?x䦮 2sƬ4X!tKs]DDoKC2=H 0ׅEڂv(#L4XCnΠd"觳 A8u0U$3̊h;q I9e.{%{=]]oo9}'l7}ss2ucMYZVˠ$_KK(CqaF *BVj=kGs B lv /-zWV").g,(I e5=g׿񻦦M'7>ra+R%_YfB\}V]t5ͭ'om[boj8켓US5 2]&7' 4pL;l>ўz9x8?]Zz;/G~E m-W7v|Y^qKάqRPHͼV`P,Yoݙ~sëw/1=uãGիظ=Ioh~)e;1p[|Oۓw}elPm#(l=7㏜ǁ: f=!!$ ,%;>^G Ŧ.¹3}ΙD~홃rr=r&̢Ykzrz,w!*.Mq !sxii#',Sm5%KbBxPGYP^- Ӂp_] ~~Elp#h&]!X9Ca޺z];G~=o]1S>#/ٶI4gks r<Ã}/eṅ`{-* _#MQ\d5Q}޸#a? ~Cۿ3?v 7Κ;~cQjNs+xA/S^;%3ϻuy7/Y`8FFН KkolyIA֥%_k塺PA$v*19o4@ H*WdYedBI5zٖ&*JDju,|*2'($sV 0B<-2Z+Ey HҨvW?ѷc|ӿg3ƛ)w. $?_1ec.VO+"L(`A"Fz@0H`Q;.kU0V~yդc>TI݄. ڹ"Z&CaͶ'rN^pv!Kd&U٢Vd_^ƏjO ?[Ց)8xb FqzI2/G Աuni淮Wonj0\cYX̂BE|D>~7.e+Gr{!~r_ɷ ЙeBQKl'1=?nRUm[mMbg9Vu~M0@[ښZZcͫ ޒr;jWb/x N9fNs\ZarogGǜ͜5={R<W" IDAT`+ /7_6;3޳l9 l^h^2Z|C4+5|A%>u.TPA4X pX $l4) B! X,Haj.k&V`DSt#$&xui C1d`?,OPiiW[/٭ d(tʢ[cLxkTsTcu+_=~G3ϻ,XV7sFzú@bQKW\d@$sEZfCs£p,ʳ)<|ʛ8~G]x/}C4^]G ޾ 6Im,bn& Eu֚01BUV:v#b0,1 SQ,0HY $%y1Ena `{I C,Fqi)`xeiYI D)4 3a;",A*&OĄ}:q+,ɯ8}ʯ7/]tGn?Oyh|v?snɠa%L"_ћΞn0𠵛6NO?8vW=f cFyMߵ`ѻ{VDA@SaA7(i(W!1,m5FH!q>u?lpPWH /(۞*L{oߍp'xbjhh?~7?ON<^+n_ :eтo o^x%E/q+уW-JA_/wݑ p'ڪ2>PS3w/^.m깳!2YM(5yb-}f>,+Da梢@|;v} є$ ,| ]抖ؒ\WpI6 hXN9cO(0F,xJ* ;Ul"bႛC,|VY#}LI ffmJf(dAЖ$wv8$♖o* ?i>WKa<։Ο}Ӧ#7v?_8gg q{&7\ɟϘmK~sQVLQh\TI12 e`&f2yBxd +=!idX/AP=(礥'MCH-26i ^e'n@^BS9#C2G"p]lDh*1,k"059[a!7 uu;,2/w6RW9~^qo&]*D‡؅k&.jx-(/&SrT!|V>I3,bNRn=㦕_i~ٵ3^|zHݟ8eZ\uOkWF˫*0.Z ~~{~{z yzomk1ͦ-}ΒшVcU+s4l=:0l./ b_sp"(&6<(˱ɃNc O98nțofW=ef"}+V"oTP.6n\Um&uv,R&5玉_65BoyDAa\|~QF{%``ldž_;R;F, 3e`(d+jWCA@"vzoνFcx"R*85pD\ܺIDʄ'me7MJe}w'䱙\\k>a[[%@kcXu==pw}Og{7ou7~g]ǥZ{_c[UE9N}O>!)COyo֝`ɇ,JN Fe,"ɜb4,%C-qVcSd00ۦnoѲA2`d81DX\J')7b\u.ҽ92F6,2V; ҮIdkKQMfz֢l\ >GMrIa,1|Jى2;u (jW^3AeX[AK+Wjݼ=vO!Q{tQQd {gOp:9]zHAQȷgGya"ƴ=:&0 BjGڽހTFܢOn]{?j]ITNﺭj;[MiMksZ,HWC"Sb&d\s*NVZvd vۅ_-DW + +k*N ۀ NV*TdP%(`,Ad w$ۢdŸ۴Xnay|m kLM01$fqM :Z3P =_d 60{fE>māxF-jqxK[=:¢=W({T )đL]FWKLp9# 2rZʫ\ZƂiȀ%uEHO5"D!' [Ja4&,+9Y<Ջn mw3VfALtg]x7ι勿CȂN?OkGDŽVm~ׯ^_euݻ]h'Njy]GZ*fC(y?lFD"Z ;_+5`I,(61C.::"opi<BPCr [ӧ:Gzvgk@=($@%z)0Nk{=OdUȺ`Al 4s]mD<)KQ$@// 4Ly A㍑<,QOy 6-@g Yb$4[iVySwwʿz5lW}6By gU/{g1dD^ͻzL'A} j +;n3ӭu9 (wo)~>=(طR(NH Sp )IE'w۾vZ +fɘ~ǬXv(&?D/ TPAx|?ǽ5 {P`JoߕI5Zql0Fd<]%摢Rcr(j۩#0T^'v )ߨ-No`Xxu'V*yd{"=JbP{dyuҙe7YRyh G 2@/'|yYحدκs͛|՝k\2=9͍[_l|ޯwOd B(8}Sxi`CRgbm2E&\}NfMu^(  p7[hg:WIko(db[i=Ķ}ش`W7n) /2p٫%w@Ykt)kbp<"o vla [bެ: ˓ #q1/ y?AFLig#awïe0rOdkF$K@2MSV9b8 LQlHܴ-b9h:+_c(3ɱ" jW0U{q3^->K*,H]NnYp]qjMUv=θtUOĝ3qkV6P2I^0d? Bر_}]-'ş٭sgcvE"TPA@l2GL9$HRPa5 >/$:v4dZ}(tol mC,󅑯 IjcȂo5ЯH3֦UfT5ĕrʄ"#eAiDyиmm%4e;X1.>;9/hҀq{`Ӊ.ة-BGn/ ]L%CVe HJבtV-TJ%dh\BaTx3"w)Stgd1&$+[{ -2UYqa "NB"]1aavv en"HV~*U:lu.;XsBc 6<i kSj_|۬Ó髋^ݸok3뷟xΚYpۼ9f ~KjL0"HMշZam|щB_X1ڸrjUYAQI **>WҚBBw+Ia]e˵I2 9YjW (HD",IXiO0|W bY*əca˷;}2<]J,F?.(` bk(bHO@K&Z&@|~حx-x8>sя#uO~c]27xu=XƶVj3*pQ1A 4μmY iR;5LM f>9"bY'k 2XE:l0:'dVoFaEFh*}[|_iPYleY\SYm$TU@3 v\ݧƳuʪ@eњJ62u% 6*h$ҁNGJ౦FmJeX)M<9!z2;h,Y @HlM]lB"HG;_}xfD'=~f 3.yT<"}}W{f5Ki kκxtoڞJsѱVTM>a'=#^;v˻N=?Oz._YE!)nJ̾Pd;- bw!\xp+V G *KrL4PdHb c.QzƎ(R#5 `1o+1`I"V1"CabnbBUH;CZE`@L0Sh`0*&ZNzMvXea_Fcp)C#2(XqO_r(}aZY(<)5-s$3. v[='Q716l‰;ݚ ^f&pR J䜬;tƉ#oay1afQ%,bmlJk Y+{#_)nu_z,e$1GǶ_qӍQ`Eh!MgSkrvbx6v"!ĮГ<#O IDATO! 1 R9X +DKEPOK KQ!H` 6=v nQDfJg) 8o IF'֦L߲%"ߨ\|zݍoG=N|TXՉ`%rM}"&fϾ*캍] lco͞}HvN-E2,h\ aB3616(ى5N~~Ժ%u>Y) (~ 9ҀL``HVUD4#_{ fas3aT~Zφz1rKzbn' NLBG` 1DЗ2N'7p ׃Q6!Th?mKC:d,Kf!X2R M td BHqҮ r@OU69k|KNɗuWnQ3UAL/u~o}b??1-ՒKBkG{5p6Qbv[ %{ Yd|ZK Yc,Ұ{P/9s㾪ijѩ;t^} M酋6pڹo3?op=GU}ٶnCv@XXPd#sd%,Pp;Pݓ#P@޳B\rZEDw(HW1CF ʘRy/%3?F"\Ƕ}PY lP@?I!DZi?㦽ë4Vrq~JtZ=GҖt5Ȟ˚^^3~2{RkqpW_'HE {^8cJ٢?M]#>8nн >m۶+z8~ *焢JYpfKN&&];l1 e6@ k3̷Ệ' $එ)cSz26TNqGڻe6ȣ4![0]R\-'0{H&sA)3 :r闾=w`,:. BQzejL:*ibYmf5]f\Fc,W,2Zq࿗zġpnխFӹs?%HM}o H0w~_wyFE ]@~`UFB7=fp;5]3Ѻoe]L$ Q}TMܒ9~N<`WKS&7}9_3ARň 4(-ҫż6/Jh+ွVXҜ)g_Ox$WkVCic{k u.:>~18v& ԁߝQU\ t|Ogr%Bf_yqtG$$=>tB2$(^a޶TJeILZ@C n8 8X"_+o*HHeڣ-wCT!%=\U3ҩp5եg+ ɏ y `lႮd }$6#=0ZZ ;`DiQ`PȒXbSz|{]dRFs.3`O~c|ӷ>9g^>&8X=4Dhs.ÃMvwʴ\ mOЈ̨"dT.HARst̮Ϭ=mԻ-42rrk) 3 ~kKMi`?znň{?}fn̵4O-"m8[N%&MuHJG~zE70mS]<2<`m<n쮞BM'\w*y'E:XFfcȰk/Gc?{~yzqHG#}` ѷ/Rۭ) joIuwYpSvz8TDe* *xˠElCs~ ]Wn s`Q%_dh÷9((A ! $,!=c B.50N!x`y֨fFy?Ԇg\|æMh ?hG?1^DڕCh;p VY,F%0L<} 1 HE3@ 5<'I^5r9=}uGl^?^+?w'oݦϟyל:~-G2X "^[Op24"O!;1t#gjT΄  Ү -t*׋MOlnwN!s`@}3*y}ni[ˋӫg~_}y}/xϮ>vxGl_c?WhSE~ӝ_L&&|rw>p`q'= OO]X6DN&S&J̻K˹;YG=.)_4ѦƄy?mTPATƢkc9QLi;0x9v.I$v"llx JuL@4e+X`90O ˜H3c׿T_gǁ[.̫s;6#p`)I<eCN H3(d`(я|G[ӵ_A!S&ul8 [2px=r羅?O;gKv>KKbIT-\nŰ`{Bwً>r~;j&?7>&= #*Oy؟z/;zj2հ&wj: Loȥ3ɜʩ:l +?Pnh/!,G)K~u7]jy9NupXo[Y=q):%BR3;=ݰyHi?e=u퐱!3h;1^F~)fii yYU]Y{sn>"Ci b ƮD-'QƆ{,H;30sǹsN{̙S~ZY.]g#~|]ϞiҤIGfo1]R^ k Gd;Gfkwcqp76VkZJ e,Ԫ:VPU CƕUJ;1ټ[Wސ`۞v{@0 Kj4Er /2$?߱~!g nIອ=nJϚ01}%0*F#y{~o |PrŇ]w-Xo΢GX ໥C0p(iK[]1 CV\#ݻڹ[ݯ-mi[OOv gEZI&M$4PԦg:?o^+kr$ypʚ\_ݠI[>>++gp׼x\W]w\c. H1F%,gK]:N! UItmI)œ5PF5~ hCAB~ƭVV-(lV#m6[2"F+bM S'@ENQ ,H[4eҜy0ˎ𕲯Lif/ kS) )߶nڹ38U6Sh 'ĮJEnʔqм`Ǝ֪T6sW}xPY@8 הjlv?>{uQI.P]=DS䫉5cz黣{3#6Hvw2{WO^wrE+sO9q/ؽ'.H u\`!cq(6IgCD: нCQ͟ 4ptm!b?^6I0?3 <3wi &-ӤI&AO7 z:uWaYWck94~53}`mc]Ll4q|%]ƭYhU/u%|+)#GAWf<2ZBYоa 0ADqCW,y֜G'c~`یh4iҤ9HVN$Q]߳ύsYW}P֢lBMEN@AD̤! HGdp/r'P!"@K" ak 4>{Ƀ9?X?VU/3b>UZ<7sbImDH886h/yF!JX O7gSTsF Y’gL6+j̖].fy]&ZLU3ڒN ,ܷz)'hI}1y+o%IjykNFD8ol-KF6,ՑqvFqpr]s zHek2fdq/?o_}xF.4`̼~7o{Q!j^fi9W\ƸDݏ\aK }ex1:Vڗww4e,52ꤦhS.!-ӤI&A8;73tln#l=ܓExuT"/{i, b3]v@1ٷHkrilg1`v/{\s{65jl :_/ں}P!ILkgHAfiu'1YLnh1D3L N0~2.?V+Pl6dA`#$ )̚I@j'wQ_yx I-C46KrC2/d<="gopX}80=<Enb+#.?6)]0O "BrU5fb'K {iG Z>}w"' P-_qDY}?~'׿f2|(&#W]pٽ{wbz }4w۷.#/Y&|ꩧR:T҂0M4ie3]o\3~k ŤW 2ԄN 9$ AL"`,kv6ٙاrhX#LV5Þ^[6XTMy|N8fM=MׄfUf4nvqisU 2\ܐ%.&V(H-ɘ<7"YF(iAVAڃF;+&&M #I :?5zZd\ WuW IDATGC7̃,d4k|#eﳣc½95jJ`mHX346iC8!ag/Ck?ϝGG!ěsc@:P廂+CF_Fm5jY [d{f2ǬPNPjUjyg}yٯ;1QA M+wwYԪp)SqttΤ {q*0Ԡ!릜ɀC7X=_PHݧџd\<wܪO~~aޔD,P>z?5{I`Oj hs̏FtpntQI&M4 C{Ff݌Ú$,:B=u૬3HYVl@xY*n.FD%'d-7|;ڨ8qxmSW\vF&`>hе_Nly$R^%Ys`L "&i¶&--qc>$A  `4"vY&EӠQͰ6+ ;W&beL"Žͮ &NhB:ސeqϾ'9~{>: -,AHsCHWjC!%H !Yf)Қ$Yj8E 0iav~o}Q x_9aF.{? #` ]nȍ"1e.wW=8?:t,6|aW1[vx'YfO]Ǖ[kf6aD m@W )41O:a)F }[:(J&M4i4=L?KL F[F*KêlbI"m`L}R8!2D [4 Z~D2Փ4}o:wϼv'"L,rpœ/}M [A?Kh` r`]u6if&r BR}!@BY7D4JYZ=D\*mI;#zld[r=K-"q*VuIMfD¿i_ʎk8A7xkpJІ je3)E,nHrQ5' 2m]ˆ(3hc@I~M( 54iV( d&FU `oiVFpi}J$m ;q-і G/"[jA䖇{62j _iҤI&M+Xؾ7tg~LNj #9ΟC~1oàu"%S48WGM8JWvyVųajPpB³wCpL. a K#FAUALTl$e7G]v[ط}i@΍\Hށ*AdeV\p ~_8oג7&h@UjhBIUp rmd*UiBT~V mG`*WӶEެPY[XYFϼ= ùFV.(hfZ;B\VGcb+@_;텾An7q`j~2A &r$%+һ)T@>luU(fhwž U=ڬPio̼5XX [H*u3E@jKhIʪb!9_<\p8ha))u̵`2; M.ƑpDxȪ7t*{}%z)^ʊCDIUںhZ`[a{ A-\m0Dڄ.P>7,ZlNl lWK*6RT-7FSFE-)Uo44pЇ^ɰҤI&Mύszů.>ƀ^]q٫c8\+Z! @p3<[sOF)HFb7GN&rXh)rˬI,;BƒICsg93>GE*,8aBjP0zI_~g4Ռ (De"H4̈&fN ŒY 'Z=QS4Ix.T@2LjtȘ^Hv|g "*nQM081ÀVƾ @e%b#Zx3g&L IYJRUdg 'DNnX. E۹!5~dLl# `A lR.PDF*,e ? 0f^?Ni m1$dR; b|m6/{Z6`, &EvV"[NC(|Ћ9j75Xa! 6NagUUG9{|?*)$`HmT槠酴 L&M4iqhX@am5 bp~Y0_ȈۖDl$"6>Tp<}R(o, $7vboW@j* IH83 |3%Y$dB1)p乀rGBTkdWa5InǦ3S#L]e) #dV/ɵS`(,\5&  K"J$o$%,d[.x!2*DW!h v)?raNfd+?,-+؜]4 XBIB]}V%-'cB~VInK*B?/i\ & qRFYpk4iҤIc+V0 SN'O0 urBH(њ[P7xUλR?l)j[]] [O,>mhPZ2Gh*eٙfܵ|rMͣѸՒ͜XÄWˇhF}U+\Œj,I[M-5hB+nks_Di1{ѠS[p ;>aؚ$079*tCR[T븡 ̝;PKV4( IA~kwU -M4i3sA >uݗ_~A$U%zQLT^HAģ| ֒@쒎%zx7e]0]!/;Hٲ'RboB[kOG^ȾUGV%[v*W)֢9ϰ*Jp T# ȄKҒ4 qU]ۄD9e&Rې;9?kvBv)DZӟyDçzQ[%hG WՕN|NHpJJLbF: Y#Y8*\@<ڄŒ4ƒfdsMX =N\]O6Hn^㤨OQO`7CRL:f&#*`S-0tB}+2U4n` yzf=S'GLbi3!C66 DtA'X7A+vqpL7oc@0U F\9?xVcےNNv9 ӤI& y /0 p]g̘1͛7(((5jԔ)S23ˏ{H*!ܠiXB 8\l3]Qh-]U*pwehkLo4nq o^סq BswnF B) AQe|zЗƊ2`/d2Pp>MiH띅4K$n夞RN, r[ӧ6 6FSh;ʼnBۇ6'>3Y7/)雽Kr.ڧFIx14,c#{& A"#Ǜgw}YҊv풀UYX<|p20*` Ԛ@-r}BT'|\9>?2P`'FUgNu/Eɭh|z&O)YBe*LHd%\nʰ:IrEF9I[$@r[ɘm`T9.0Q^g6ϘkבKDL "O(O&6*U pFy1d*>+4㭬fzۉ*=?rebWOxa;k \vڌݧI&Mz)**z>lO zv1z'뮻{ } OF$ʸ]4r%2a .ܙ?]=~KpW1WOԝDb{c|?r_x=H%+ VAK~UtB6YI>Š; xsıZz3p=UT};%4SjΌ C )[ўhI``a'v"Y`m޾WݝEJn \ 3d"c9M]`"ˈU('ZUAhڄQ2Τ \Kyx5L`G1! 'vt5XuHMMV54 wӣǞ4uvU[5;* _F7Tٛ.Rh ń-c|Ş7lSó&`Sr߾,/=7# aEdxI|ʄOĎºzZzg_[gUND[84E}gR~qByQ 9OxX$z&M4i~.Ydi(***{ԬzPòU3~wyg=~'ZӋdPġOQ7dؙBYdDOlxފ#ĺ;vCfI,cS9o/7cN>t֒öʮyfv"$ÃT@DS0*LjBb7 j«pb>FBpKx!2P5X}^MT7:R]˚ 3PgvA,_Qp#;׎#9@r, #6Xw9&fbU"Hxf9X DJO `VW g#i)dK&A%7H;EuŁ:1=sڙlWY^$TT򻜢RkK;aO{6фS~fɤ R$d%81d …HxB:Zfmw`uYVVju8k@{}*T*CĹ h $s/k;‘-ߖ{p(ϟ[?!Nˊ)k4iҤob̙1fv]`َqy#~n~O[~b')m8!6x] /_~V*EQ ٮ,(0Q7^#W/{9kum֐9K-V>agR Ml= "f""xeUVٿI㦩A$ZTiB SA)l)Z$$D mELB5Ƭ=~lb Rml>9|J_O vv2M E@35"qq:`gH SܜPcFc:joMl݃hsJl݁ا$K,\2*pA.|%0O3Ruiÿ`:e&BF6 cQafS@3׷&Q+n=q-7n@ }Evm_81ҏƿQ"XUA@+da9~˗8EBAq7M4icƧ~zy}wɍVnN6`wnUڷ]#hy䑟&l;T0%.FgmxgLK}1N?I7euğ\͒B۴6HV]sYۓO^W^$WE ,% bC 7( [1mZ2P! pA:Ѭ~­<`TAʀ (AB1*gMY3pM+@4!Kb!dBKE VF6{ř8梅?lگ׎Ay7nM$h 8sCgeW]mWi @B rMf$I3!raÈꦨce\ȴ\3Kx-bL-[6 ⍽@`+rY&Xhp*q #Y_ RjF*WKi nЋ"6c`Fᇐga7/x'Zx_55NXT EV/0Jkv+m1-)>+!7gqǕ—=Gv7P4iҤI#F6l]wݵvm5/iS1 4YbLyQF\4d'<裦i>ᚰܰ[C@гwdZ'}1Ck@@(@Q۴²_o},XkL2 M}^CRgK'DbWxꉣbX.qe2`x5V1Z-ɫo*mxPaڈW/#L F% T-&'bJA6 mPC$]Կ6C 9:Mb~vGFOK݆=I3юp;֪#KFGKV,<5<vpCp҈ed]׃+܊wu_6-8PW"'У,J'Ɂ3Szo(!YTlW(K@<8j& %=-!*bD8nWA56Jɮ nzffb%We?*BXZc݅yom3n97|y<҉7~yRLI&M!^x}hWt¢2uo9tD(@=/C=31% u$2)(mG7ُ\|n~gj4aEvLr kW~LY/ e<{ QCdgK;f@qj`d"@2 v;osE9/xG4cl!;](!/m@xp2L{j!_Blm*%Ɩ?8w|O#|=aIyyO{%{/6dl0D#N^f{bhSTt56XK;{بն4~=6ggmεTh_[b5` dLb_)[s IDAT6iRh_ OIR?^wCv,|wOZA좓?um_⡿|%YLH:o[8`!WRzr~Kt>~F20ToL,ӤI&MA`(_O9`K{NF'>>GC}s̜ľHfE&:}x@BE[u$> -c7=k 8Ota/~\IYK-Sf/Iw'1c־'y}L eԠwNKi|Ay$gn;&Θq &_:"hƑ"\ nM@r2d3Wle/e0UQ8``c-uB:|b#KvsNĨpu`5ޢb_)Άjҹ!lb)Urhܺ{%g~~'‘JrD^N1#NQVFg;'j&Afp+6Xwi4BLrix{)J|U=B/r]E+Wnf]EVlw&M4i+7nX#et.È,@_, Kw$~ݱxӋ'ۯʃ>6@x̐opg#ϞZ{9}s4X6nzEM&ЦeUb a0_hY Jp"N҇(_Lmp hK( }w=hӇ{IuSD$o̩?>vͮ]y3fU5#V DDjx ;O8{,sk+S[׼I㰟BA;Te+hA3ѤrHirU1j>'g֧ A M!-lrFZ$b7'jϚpԒ~벳Z໥6n붿4):ͩ}} 6{<9yǾ<&JX+6)$2kӋ5 8{&T`jo`~.>N&M4 у>xwn:yM,`Wn0[]FKo¤$iDo:. WNeƖ7V0 kJkwT8-9/>O Igen Sإ`"nPag'(<1FݙYmT]8~z1{m [ fX?˯Ň}y_^8C^~]vO>}_̜rܻZ2iI7DMHEV2dā'MB-i '8S+h#ц'ZkhIvВl O_u?tw\nSA{Ž(% _3ٹ)!S#dT ,gkC*و(|Pz ۩rįzsQo޲&RxsOh #'gO/e2(y_ZCC`C#)&N1 em6Xi:%V&+qpBD ՝{y>8欉soKw=}QZp)/8%'˧^ӎ@&٘u,EM҈,lޙd=eV{I&M4yo[lU8d;s`lΕ?|vKgpg#G,0ķs%ǶQI 27~>c坰jHykT`w QPtivMe! (2Rpt@Gʂ64XV'[ %e.B,*-lgq;7?9x v[ A$d~McZ㏝xe@FJ;sC+ :1H C۠Ҍp`e";+PKh{#y=JB!v]:ӏ❌c190}Z 7d=v˶iX;N?WWU&TؔIMhV(@ҁ*AH @>,KDffkqXrzhMGXխSQ%wfec-g{ͅCveIM\9j,S+tf;AJ4iҤ+L5Ԭ/^_òﳲ{jL85fi !ٔ % Ahs.N?;"z}L#-[2ZB"}~Ⅷހ~?h=B-mMF#c.KM}R$#m`ƙ4a "7hPDN崕0 gߔZy_LRmnm=r?݋>5u淣6Q4*C"P.Hg@AJ ^ E:ih+tP $/h,wGq៯Nzyܖ͛I }731v'7C0e"dda#nsh^3a+n]:ڢXh'iȻ7|kW,~x(KVHqj *冋^RZ>g72*KD`bofF""6I 2O c@ H2">]C*%dUo9oܚQv%XuW_z9C>|cT~2?iҤI&MS\\{|H$2zhDԳgK.:_kpëWN{'la!tPp}2Oz܀wN*Ȯwna$j{ ˊ9g:_xYӢ9PWX2*BیP1V~r+4lوՈŰUyB7(4\@愱>b;nL3]:p]yNeLQjFl (3ʏWvԨD@eX<fja x64!u!Z8⠕jK8A%@ջ1ӄ'O]W| sfb'$A AqԔW#r{';5ow*5<8 '3 xVE9h3,by\ X։JOFHdw.`ׅ}3ruȬdVTC& 5Mգ 灕'-u(R"5na x5 uАQd6 rM Z4i)".6#\ 8k✟YVF߭tC{$mޚkt`~_ 38J5SF "iҤI&́cݺuÆ 3 #;;kF;vxz`gqFfOοvjry8bɆl m'SƳ mB21#:W#(34s Zmi{w鰷O]wvQdswPpÅ>>A "`F*Fi718qL9@=o?|3D &0z[nܾ?4th"T-^NI+)}ܱ[onRu/>" 035 F[ C gg1\?Wth7חM"Ť!G ZUot鰏>7_sY&Ғ@?y3wtv^KGn&j3|SW]_Ao*҂0M4iXFoYѣohM"u~d,ɳq}P~3fbF셃 +,[.3#ەXГO++!swivU8YpدJViZ~K}%.% IgQ>og|0qOosŅPEZ<%M( p \8jm,H{DhvQLZ^0sVlh&iVm6kmBwFo!?9Mi?u*Ҹ2QxF$ aaE/^yˉxמ?={Μmbð7'Rq$GD)DNd#{fEmh6bpj/-_Q}⤤*ˡ;fJ\8K;2=?,ӬᑮF&3sJQ9M1z’.}ɒΚN:>w՜m=sKl83!@ Ťum1 N|EHèP}23\GiCzY/H{6Ȉ,Å#~ !U36TV23zHp̴z[z_8ce~O{Gּ|x4iҤI!zoQڜp'+@}`c֭fjH1K"ݰ;Nm`F6\,7,@qԠt*,6I8}v,N?ꛧ}'ï jmP>sf(aM;TTw\u?{ْ-鍄BBz/RDV("]]P^E BB*|3;F:k2s93||? d0g@:"<6$D~ Ų6 ^67;ZtPoG7'(߭^8=LOyÖSް%kgt4EoB{\VQYz.Hf"~uekf[{~9['YE7Y@23$ j`I^;r37p˪ ^'EzK3ɬ;Ȁ40pd#2Dr#OgZq(X #ΣiE5V2|PZ #{vsoM'o~n.#R9w(Y(?=u>i8P..#Sc #31W7,IC( ~x<rf F~sRKz̍o?|{aWsp|y8A ˇp cE(0S0s rO]~m #@󁥯f[$vWḔInX/Oe_gv e^AC~(3u4e$K(QDoToC/ϡr_cooXgk1P4]j=_?7<K7w↻>%ge2GN!NiRQOfzYIY0Pi#*;sM /\$ڄ k5(2?[gF)[k J 5hQAe=-JO3b Te"ō9uywq͟:#w]Vmܧ 2弿yk)Su;U~gfJӡ401Vb&ffޱ)ScL _hXx o/}m 3_!<&}>{^za$mQ>!7(%J(QD_aнm@)CNB4hC̬.&%%E$m"-U,iPҕV DW9d%[fłiy\qdu{ؑM5_{{Lܝ0٫ad-dYGWtwΛhU\y /Lj,MKDa /& 'Ail-3)J+hvpG[|6id@RCxܶl;IMkoGߗbBPW+n@dBZo2iQͯаR\2z8SڟݸVƭfrT~+=bٱK7ħ̩gW2:gЁE\)i J(QDCѰjk-~Q`#n~oϔ*),t]/FQAB vXc [8W28QQ{hO20ijp98A0 eVQejfpjsӔ[tUIm TxA$m @]%pɋ2eA jK!h^y,R1lNOGr.sLE׼++R+P/ӟI{ʧIG6lY$B €b4 "aR=H,C*m˹m9ҫsrN&159gz̊ovZ;eĖPqЎ6in-Tw?8HpA3)&ͤYl|+o^|7fkr" E X:ʰXf5ʈ0+[jSaO &]ut.E58u5~s3.7r7vؘ~DŽ5ɌM?ՖlD%J(1f{ڦOl_O-& ҃r-~{'B.Ԅ k] AinP]ٵoE]J?.>)XxK/.Z\pۉwI1Oŕ`"mɅ=yf8*HC0S$Ē+'y+x%R-ةlvJIC\x( _)\<)6:]GH[K%^MOI+ E^aw)wi))j%EyzS&Z򳞎Gs=aw}Q N>bSxزh-˞B%=XS8~4v_wmY%J(QĿxeߌnZZ)YXF6b$G^b/`~ÅUK <Y@Yd8ac4w~ڻ?UvF6 #_]{- Y/r^ʜ'pj2qmYSĢ{: ;'[WEA *$i #Oa n`av{.?<gmklw(=#ʒb_GAJۿ/|,x}[H,ƅ=>^L8C֋{2L0d -yA:jtzؙ9 #J!]LLrnl8Z慗5>w2G'䴵.5>&nB(?` ҂dqF/N|f=zi';?Tܲ.K2ϗ Bf|w_[^؛Y$J(QDg2wG<ʒ_co&Q#Ԙ;b$&h#cN`G迼6E Ù߾gcZ~+.i5%c^-P{.'&Ix#"6[te\*f"z .xQdfh>IyFMș]n~-%\b0gxSPݕw~=ܠy"I*̄L:/\o~rWV:>Y]@zV:J_~iߴCP"csl"TUiDu%9C0m3d6A̩*l`/!+9 u gJ_:yVWgu% * 4P6h`a2ZAGBGWcnM}gQ(QDU=>q4V$i-3*u^aM54 [ BhoojH[U[KLj`b,35%+S::cMU#.X/=q[ N J*uX{33m2tG%KVjBtfrRd1)a*6+VmVkʬ&r E[^3r\`]s|Z:=qySk:W66/RuYR3 ){ozG?=9i]G\$"-0<N$@\> lAu("NvX f|`63ȉHxz-6vY@jp&g | brd`ËPsl'崕9m䴙f#|'^H:o}еTY(WՅSSÝUfecKW2N_OoGF\~b3mRB3(#rԶΟ.Ͷ/áyѺVKe &(KqO|B: ᔓ[eO !`GY^4՚oMh.eb4\EYXU6fb_=&R=j;7qlV1g~uü'y'|ӷ;ٟ"F{{, a!Χc]Oz&'NUŇw%J(Q_}߷Nx03N~) }9?7?=UF.?ntnWϿ6$=, ~C&tE06f̜2ULZE$a.FYa%Jyo_o8YtOJ: W# sԜ??(ux}Rܷp鞭g& ?D-K(#xDׇ@)K1r*ȍ+60r ,ş ,4$!|mT[g c<Ta沢)`pIO69pa_ԑ iD4 ,ZU?uxS=iMJ(QĿdn8]5WG#fF 5bQzod_jyϴǮ<ï2 E} ()hBYzC1,(_E~l%q̲q}H ;ɒg?ࡧ6)lLN3vǑ"bǿBzN 6bA9԰+(S?|HVK&[=* rt!F7r -µ)XAZI]htzdV'v Y?>O~7>48j>< Svk#Q?+[&f#?$MU{^Mω ^pVl25 j~F &Ш+jpcS%dZ.:-[f̗?0[tMxܿ'l>?[w{>zxq.~7f:ȐЯ\m>9m'<%J(oG/VTV6nN+΄J̘lNB -e;%~x;,ߑw?.um-qsQ6pX]!]F/"/JJmW?kG)gI^ =r榶5{13 m4aEfMBFv IuAL(f 0J+. W.,/OuL5@ G{aa .9"vM6ͭ>yjcyAMFFc@p ?"Y49"]UV5f^|?ܮNw)uS{SFciaa&),/dNdtH-s+<00 =0l;LdH ^ 3HnԘ{̛qp:QTVv0A9,qRD%]$×~<'/_zm]_PT?o}CFYQ6!YM R̂Aʦͥ_îf{NhoLD s[$ߍw-?~kg{s]:bye (@"R$ 0-Jk0)-G *m1Kvgw{nzc=A֝B{s]H/x]iZZS3=JhVrBAZIp@ڭlu RD[gŞW;~IBt 3ukS[V͌cDG3ɼV6$bPŤJv2j1US&͞yrM!G9<;7Cݯ 4 kE]B9e\WW9x^ydwW{b nO#a@,z{l=-h` 5z[ Ke@Sjy%?äQظyNqCuxsUc%J(Q0{R82['wtF՝K^ b-7nEpSٶKk\ۏp/z2QBդIB =y):YR"׾P#Iϧl=4On]VH҅P.馅52qM8S4e?$8xZK&DVi5'{33at^e;V}.EM3 J0$,GB@0?_`:-$MӤOj۸)+HD%J8^Ţّ T9F4 4y1(<}۾(ٔfH[Qs`[;񏗞_%'=}ey#fezpʓ_?VSΚ~nƍt~h V IDAT_@AObSDfr4߿c;yy5㙵v8d&ޡu<TWx[PIsR0lz}`!y? ^1tt(W n4!AH@H]Z;4ȟ5f ɰ!|]-\ #NQ?O:T O((ֲCMC _&ا>/}uӾz 9@Ґ9C}ʙ!s3q #_w2zeg6}pon/4|~Vʓ^9bɾ@_7kw ~B*KxR6) n~ƒw͢eboNz"K^bRx`eUVd%K0` 7_wb|3sOe}Xi< 㓡(+en.*2!/oMˏL>@jzspt{40:ikZ& ?2cEl!3 &iaKڣk8̿9Zfi-=xe^ ?g+gÆ6& R%J(@Nq6t.(St)49 O!5!C,I`Ŝ;{[O_iKf췑/|t*}/"TBƄ lX'|Vi]0/>c{S,6 Q!GK W{Qi s^jĕ~KO,I<߫^+Ǵ2K]5#`FscP۰ YzL6Ix}\GǏK\}k%eX{M^|fn^˓e$ I}̤؛0kށ]D]IЄOfnLҁC\%!4x[H/gwt&ѧ^T@]A׺iV c )4-eH9=m ]Rۜrӫ1mMjF2jt mb<{_g"4=FH#M%ѷ܁iiDƚNxO~{< uGI3O=d:Or&9 (ˮ_k&dt%J(QD?%'Q( S.Vj-=ZXTp" 4&3i2IA}23ۛ$$ľL0]]ZEIr[Zm9w L!eN!mAL*o{}Fo p:]m~vћW,{/=hhF M^׳Oy5MmP7ʢCv8-]h=m4+MC)S,mv]rܘ-ٺ"C@`ɖPɍ bbI F|!=-Wv]8sOT!z5#fD_9 jҤX(?Ȏ`AAP 8̐o~*jI!C?;Զ#[S&hGYh3YɱM^dlNg3"B #XΊe۫g>(BYrW=o3u#l  tLNN5pŅO^=UDf !tN:y_>VO#P!!Gc?[+nf,yݏL,[UGxtϟa̴d *t =%J(QD_}K/R8垉 f>ڌor M yVT1 0xFQ|^ ]hHNmP ")"X[iDPpc2[+(FM5NYűڲK8!a`-g?+>猧9㩦)Ϯ_e#gxYcWnmʄ|ϹDO ' 0@.cY{nև.ڇvvgzFڭfL{(^d_"]Q5ޖ3A,m6y  *YB86+n9) )4TCioX nx&f7L&pX J!vPi|.'piV!TX1VԆxzIPka*6Y™Z*_=}P^G'ȨQ CEEdgZ ;!)isX;_+.cʹ/rn6ڳ^V:ZMT~0֙im 7NVE! &̞g|o~Y7HM^,Hd{]{xb&et]xap e \"Nx^6"hΟzn=fPTgטO3DI[Qbh3YRo=emKYF 쐶 95GgQUC0"5>u$z> 0 *x7TPi+P[ktźADz<sc=4 u[ֽO.w~<9f*`@wwbX `ՠtLt5iIOZ<`blN(rU‹Bm1vbcfFVaki+u|i k^0kʃuE}٥;>ܲW1g ڀSNz0GY[i/t&~br^\Y_m"d/h&}2 :Q' MʅV[W7ӋĬH1=F2w d]Mlߝ[_ zkƟ_Zq/\r_|)blF R`5TPz9 {u,Jb e1/ޚ2cKZ +a >GH4F?H15N;~Ư}[ݹgV2I/oX2nY!~.NuOsÉbRЄAdt{}j2/ljL L먋>T H/V1`JD%Js e͕ޖ8~1f}d)LҘ\CNIC( b&3Æf+3ΐQ<_j&mD!<3S' f3y"*.78Rg&EjGxU8)r}gK~[ =LCKj 0zb/364LwqݢUrn);: '"eXN'l櫄0?(2L MNn3JAzzM-R`axe7z0Xô\$&ho}-xi?nuJb5&ρ m m m/sOA f'_fd.}0}kF1?O ?u.>[檲ʾ~oK>|伖%vZԺםןOV+#FV+- NNn/RMM&|"͙EB56 `5EȋAaN;^\A`B$\dhihDge7;hb{(RJEiG_7>nՠB (CxQ*FgsΩgL#zݐ+/U+* *(;" A d!+!dY{sgzz%W^ITuϳHdqWkaMn~cCoy}: p=@q-g9ug QF (s{3z5fۗ)h JHKI/'dL0A C,+|d.LL" ڐOk',$RfvXv2_I!/ijh{ϓmh޳Nb?GQA=d|.)ol^yfҜۧB: `[,x'=4YdaE_?_rf#5j{ՠ2< k9]:d[>Q8Z "0b=pGκʋ5;MB"V*3/\pi{fƲirlb":"hm`EM<={eǢ]oޖ:X[={tˉ-bWLwҁqM~M-{oZ1P{0I":>2yG(HeX;wթl 8['2ե XQ\qaȪ,80 kט DAE@6QJqe,@`+@6 ^,pkfJĂlVNK~fE!Bh#l~?=~y[v4UBǩ'4 7饋񇬲V|ַAwu'Z G3麩6wq7=zvim8cP{ 5jԨ Cjw@cWM$MR20DLg%!Je6^Ԗb'hdC :qe"no3!cE>PRx]Mcp\ &'G*'3:}jZ8 JV}߈Wߟڴ ROωFwtYvi Z?i,pt 7p﻾Ն?κ~0{ 5jԨJK~{,6O:Ic/\y啕rT(Up>tf*X2._Hʖ O3,|ȼ@_scv:ZqBP<<Ӱɠ"VS,G{:-sb]scI u3_ Ek?s1Q2?h$!ĊCr]{i_<,BC6ۖAѷ[u%*u%?b'O8ُ|]PSU،[4Vtͻ͋R "c$})I"DH CV40lRv_60JX2k2U^a1c~ 6I%Ez Yxzw}zo'>J?Y%0;s_TqĂ -^UЙO\ϙ}@ %@u*%_WDI߻m'8b;w[*׽?xDEϝ_vw뗾{^vp{ 5jԨ/C$2XG${D`U-FYbMV݁uM֊ W *KxBpcܽi+zv2'T~8Hr+Zpwo{gx(4&߯"&3c2 mqÔcbR7X bƕ{|}rI˺MhU}椖6N{90C \YfbՄXDv%cS`ԥ}:f\zOkZcnypUYo}GHCQ2d_X)}GXb?!: IDAT׿xJ[eudL0p)LUwaQn.8/t٣dW3 8Y#bhSo=SNX}'=^֯]^e?j+s눸C~CiOкτ+~+]2D<^B:`% "b6O~nwGHxƂ,[G5dMN|Ua^mVĖ#KG<'< S)нx}yo{gn?Ghobݲc#|´Ͼ5wgY_]wү;-SYKB F٘ B;iMm^#fuD|iB zm 2I 0 pHVj@W{/+~?)`!:4l6ب# x# YmX!& rR4ơriHd{8* LU}/FOOvo|7>Z+tKG>LUDI0W7?a5j`$OOt6kl/J"BϠFر Bh# d(שE8vRyݿ)x__wڅs-߾K=;'9䮟/۴3)3BAFzwc]X1Sn7f!a>4Q߶Ѵ1 V8 `?>۴4b,DCVb$y 6f(jA0VXiL=N}*N$9 A>r/2H?0 Ž?|![-k7=;}5jԨ@FS% rdTVEf3hiԍ]h@p%҆ 븰ȏwwJAt lfF7 8(1*54Lrd2Ԯ-)r㆕mbb Y)} B IM/R>LDd {fo9[OYvV]_:%'i2+BIg0ÂЌ0k {\I]:&ˡ e, ⤦f۷?F'o|!1P1~#>Eyƪ?7A%rVπbUXWGqN ] 6Rzw/U!\ 2Nϟ=^݁W̮--ٺ/03wnnd2EkԨQF} @ @%ZI#`BMdI##&~g`l] BrߚiJCPpYh޾|;(/%KU}FL`'IJ U$5K˞Im&Ḧv⹥/0N!kfab'_pXoBכ E4׷xdf Ќ CКOzM 3mڼ݌,kcf-߼t}\lˉ ,1 M(`fNlP=dJ*rUpdebʴ& uK*=q)E?#5-hgV֨QF5lih c Xb^{TNdGRGK39ǻrv}t9"gMa C|trL\寲`U:тxs~rg{bٱUdDN`s$1mc_L;o9[;~o$$կ VF.Q@b;*𬒶Z m6ʀ+֖̂=uV 0XH.,>pca[Mv/^q<5jԨQ PDQ0 Ⓙeh"c^"Udwa-Q D! 6ekN舼Reʎ~,K5EbD1],qd=;'D0м_B:p3MH&bWX8LqQ, bbfd8+ ;}L]Ld\IڨHXx]PGXŹݶ%/^}Jo%4'^s!^zhAH'Sz%_|UEȂ5g!a(dKİbbN# XPHN u >A0<ɉr54:ۊ*9È ?"~3c/;3Mi:85IXF5ƆecsCop;lF+jD O ?C-!;PbU/3%w@N\@Y$tz'?Y }ݽ:},_HH L(6CA"ZwEd8dK%=$-Ox'rN% cz%&O6_ĸ]ZdR#\RRAƎ[}O?Xw𔅙c2<ЪhOLk[2ZW /@k^[0W۠~ +uQ"/!zo?*撞fZ0dn?2HO h)ْ[ʗAEu?#w;[frse]\?̝f 5AXF5g՞{FIs?9Xj$Zw6PhB&@Y H%@/A$BvOIvgU@DA=l9QYɸ%zr!CdT,ؒ J)\kn&uuʆ41'Ȱ8^Y:e VƂ"dGGPKd!Fz6`^/] UĮ*A8?*>۾pownE隐n+T E,Ys wl>PE`" :2Yx%wEЅ,, 0ӶzSTn|7M[؉NY~W Ă8qq&XoP#d ºZNnӖ].\8wHeү%5jԨ`sۊo+J/Tz@`9 ʾhLiS\gf@bVx02NX+uJ:] 2ܰ-4JT{~[fcO-mN "IZES&$C  X۵RS18Hȏ5  aqhKd x6NJ:pv Y^KiXK%Ɨ}c&"0ShH[<,".KvXf/ƼQ=^tf媥,Ys!1YD)BA!4޳ C,,PT_gVNySˇNy(pA?r_Rm:'_bQ^Ay/HPR)/b$i_=jM]+UXTkomyQ[9q ? sjF5j ϫ^Y뭕8XG  SD>SIV%YIAaVe/RUݷuxRxc!'Y:%Ƶ, e)l:7z x_>{(i:KUQwh/d'G֥b'Lk@QZK̥(&بE ae{JJߐ8K"7t>`W0ΰvډ؀TCwNiN5XZP-QYȘ@qHĎ 5AQo-¾3dmʌxS6 =}>K#ܺI-}`€ dҐ!W'Q1I'-1@H0)7qO(iÞuLl>{ԔnmL鬪&4T.[~ C_Yk0 lkkK!1s+Dkh@W8\홙oZF5j +I *"Sj BP.-P,ys/QB[2 Y AI'vNRV8T>(rNW b!`f!z0)@zx}~o| Ss>^ݸ=A)}!~]Ks_wuv%Uަ "7:bbfARYSGh0A'Q'9r^.vXp;Vb Qe5NNe*Uodr1IQ0) 3 r$`ф,:)]Y]8Q^Y_IiEKv; oy  u]/| &ʩy>T% 9DHfjB&'/;ދϸn|k,(ز(v^Ͻ׽{tڃ{Ϯ>qVd<@#A2ig`É"cְQR օN.ȥ e &w#ƅgů(km(5jԨQƫʟMB3YX UKatV"RMj0ڡDdpcHA'd!`EQdŹDI!'e" >,3Sw4[fRX"rl!Z=f񪵋o1˞W/_y40nk`AAAqN z9”joDf,!Bb)C_tZJ7;שaUI+ã.[gROa&+{<XGudzmPo@Q5Kz1fEvqʹR[?EolCXle;*TBC`>S$.zW,᯾Wo8l1[>%`aL1>IuOo~3k\_|}s&^vӻdbcm/L7"%1vJ Ҧ=kR :OgZ< $[:žz7QF5j <@Fu E(" A-3r(M#MT0}$$ n{v+N2ԌH*O҇,FmEELeKN6f34g7^%v[=e'JEfOtxv)MNފ:yK+) ,,V^k.םu̳Z}:`9j$E>Cc! cE$o :י_߶(nN M(cI^w?p] pѷf;XHl֘ʟ,cu+Ǘ.]zZF5ѺߓսOn>=tU[,K RKXʊ,Vf $BTe Bu_ NfQ d<1@N@q$)hPu}n:.Bd۔trD)EȲduN(=۷x;e|BM%T'$~'@hU' C!wƼEm+SO0YN9!)0EH~q\e;DaeǗFȮSĞ3@GYz:c:u)L¾"o;׮:ƟU2c/$QV"4b. ۷?_B?Ѳ9[0F4 ? [WkĬItbK~wjZs_<}j.꺦y 8q[s랹y^Bٜ+I2spa})-{ȃ;o|uY0kԨQƿ0ah6oյ @Gnߵ邱{B IDAT=Qyq|QE#`a€`Bt4d3ES Y, D $PMBz6y,0¤4Y&DO iU*Jmz'Kzhr_b^p/ϿS[&ʱ,T,FxN8]!YutIsx~w?Ovv%E^&MD,gn:,*2Y BPEhFqhirKIl*?KjJj@~0׶0`.yܣbQ% fP*08 itLW( 293]*BVs?nxm hQsW>usO` ,iFoFݳ9noG#K"6S߾ݷ>yaAL׭7 5NYUc"Ķ]2LA(ԧAM_xr`Qyϭ_YWq{iO/vֺk`+.j %]+W-HV FL5jԨ1Z$7/wo#پ-:FWX5Y;R V041&K !J|Hv+K CpX=T_ .:)4e8AUإ HUC518[ALR 3:+K:_<~Nc+'D.b*uͯ3œ_>u$01@U8PyD*ronwIDa*uRos/ YN;*֢<Ԡy)?+ѹb"RlH'$YĴVELv/fz}o#Y B(N18F l$ KtaY"H1a ;d vؖtdS[;;Yw*p6;v4 b {"$gNSfBc4rbvYx㝟|˟.{}Մd@ `o.E775#]eWVAdNJe8H/7S: =dD&pbz4l;43- Q+]ᶽG=eֽ:]LjUﲅk\3d hW֨QFJ8g-b~L<2k#P4{/D/ML`~o ˊ%D(EEm 2.w*t͑ĩn Wt/mzJǕ u`\X  C@uq:H MJTGswL΃ohX "?j+{Π yN:rݣ,% aʱ d PE#H$' >]vbzkv>`j\YDL4èi J/AA:SHi5`-_yY9? ) (H2p#Y 8 /1 ">8GŒAa21aQA CeMh'=c}'0)K#X"HSPo 8rs=۞YpE+! dg}#goy{luCT`͢(<~sHMm˩]сPdcoU!y%z#<2F5jq!I[ J&x=zWB6 [.0r}|BmOɝy=Jؘf0% "L`\b(&$e9)|M?<[wj&0TxU?{zNN8y# ;y8 "tfpXA'MahMg}BB1 ܌m?;+JYYf"r6f }r"|썏m9mL &.fm>aT (C+ [ Yؐ63RFI:Ȅ~],piBj#E pDb[lSLʎ0Ƭ-ew={} =Db=\񷃝:EylM2o a"C? G-YWH˕9b7:N˳7\h,B1 Bm{RwfmY!-x w{g汎gT^"DJ:Bg_D2[0Q` 0ZeX9˙GyƋg͙b/jԨQƫ^5HIp:`{0"U/KNiJ=:m@9{cߢQ!`b9 \lBv7{GDZ'ٕN0% ¯/Au=K=E6d {׭_#:zXBÞ`&!7hsNyꎇWy:@dGKG4aoK3W|q:! #Є(UC"0ӮNPfTLg8"z=cdKV_[zi޷?<;̰2"=|bA:4r)F- =0@)J+XudJMlAo!!]mA2ݮ˅.3+:rǷ-d!u6h+|84Hwӱxc>Ok0f(B:bB@Am 6 a9P~FBկW7<uQVZ8RSuŅBO[XLL&F5jxS8ubҖ>#"鰍|?Ïya!Lhl ˄nu8>Yʅ)}SC{AS&&uB Ql: 0+X3Z%{D] @ v[Qh~_}'?0-MNcyUDR2cJYkC 1e{TjFp£:*C71qQFL9¢22dXhօ#,&Fƅ)ub6ps1" kS֑gEڐaĎ41YE&&t\u&7[a8ȵ=klA%Q3mRgn6k bwPhݪ|C6sIUH؃ =G4 (0ĖYS剘K.rDОDA+ao 㔎3l~j}Q $@!, p s;uowk)iig?֖/?zM'zIxH!'?wsҼwΧ.nAX}u3y>:q՛ !C&ag v}'[}ȡ/l}|RrTJ.^Z#)՗*]Rl닕pu{X89v'$3G'Փ-kjW3$%5o-}7e+a-> ;Foȼ|:֨QF/zY*b-v BFbd$j&AUu";Cr%k&PC Ğ%:롓 Gv8d o3Q_xJAZ8Y`<`UyJ<#e#R$LsϜW\l8C|EǿvIǬ`Y1@hֱaza\ ,Ý !BJm,k=, Ma&&i$؉ɩdaPaQ42lL_珼 -?_:V3L*Rآ*j[s޷[/KnŸr};Lwye PolާMjc*dA#(4 4e{43eng~g,C~0Q̺F6$0zAK̫D5jԨq$.:^!|E,}F,Zsf;^"X鳓VA:d@v50.oP*f:01Ii茁` M%8AgW0R:vfϭ\4ދc-Y; #rs'Z>8. * 3PUd#au"LV'*A'f0E閙"Hdt0$¨H&QxEW)dd4cRFBi?]?Ëo _yAs{Ǐuuuz/c#ݮ$礍Q+i)I55 F#6@}}=9c>txjŝ[YK^O:oۼy,5u]SCOG{7_vK1tQIԒ][ p̢M+%&Y"J:VwWR3k{3iA9G:*ǤGREf2 5jԨA}w;?z !g!Ȫ2d> dQ|HUP`:\Oy(&a<L4O 3l%8 *7J mL' cF͓:u0kJ2(vVG\S,4Y  IF$B(uf4a\6I6bJ؊ V u#_t>/ Ȏ%{%_O>?W\v%k/|aat؃~ FB}>`Aֱp=xݳr^Sw+cGE  l Bp[tA.?ˏYn';kG#58{4w΋?r3}s^|Lg个t{oN4Q,Ym0 Ye&., a1a/0`9Y,ɒG{CU{gzr`H3շnUWO߯9ߩ+ϖEH2$'0i`qp֛8MOL`B];,#VJnDb$E>2M@l2ZJ*Uԥ?{Y*zxW>k!#v %,XҖB-$c(26}FRB Y![M*^J,c*u7))e$HwZ mR)q\w)mY1|_ `[^m*(Ay,q5} ehE`AvuJ3%ɺ&Vk`^[H)s:޽Lm잞.)R%b 2Ģ{\Xر_?}ˍO}0h)R5,%cxu<1  YoKfۢ(2#`r5N_螥 @Qfwըnp; & /keBqisݷ~]7-}!3sUUywhգGbuux\7׮8dY$IJ 2CWq 1={x0F;l)ٗv4hF!*ӷkU`1[ijsWeJ *UTj"Sl,"2@!BYY°Lڈ1dւA/+p"iYIIEQ"|(n}K;tTDA g(~oˀ1M3. ?X@ e2~J2,Ƃ%K*o :*IY_r%05PXê[r_]-=΁t&]SƀBJw [6u̾NT 2wj~x钝[&ZL89'b%l3 Vڗ{a`1(6v6͘ھgZfWi(Є S)k_ AD(J;A=N~~FYa-ׁ[~uB7 eZCXJ*UT?; 9-"+C!mcp0 G m";i>q{ P ,p-PJ=֥aZǸe/,:e\?{}i̥ 1X FSy% Y"B',K PmKv8ۅ[ׯż/3?\ \~v>{?wBq]8zL GSP4n}' 0@5ecW-Jj0< BĿ#tR+0n<,{43]sۦOXj5~vTX#t:E:&[ꉄ!+K~,FQssOi|W_6f 4úL7 l=k dIqhB&X&,Ʒ-3@{kQ:?}{t4`ɐ&v[~h'\:8xuv*TRJ(X HQ O#a^58K3\ł}&~ĚPja]p<`KG{{e,Y熫l\;#~ ,Fޟe%p !C ޭ eOLE#6Ua %c1# !Co_^M8-iwL veim5e]O֍;R~;+O~,=DIi@FBC٠EԵtQmX R** X AVQX䦫BChnA EsW\z7yS_U>xtE5NAF)tTVO:F o1W_B‹g0>Us!ˉGgIhǻ{7`al!&ӴzэYfɰ5#uz `*kf>c*TRJjaU,3!maڌO K+!"[V%dø` FJ :3ш #>wYʯ\ƱOw}W?/wY+?3B(Qb,8,#eK :"7K'$Z({7/O,,uE]G<Ʋ )"EGs'_;Yz\֑dm|~p۲$V1m8Jo{Tm5)ɼ: .E_)'BE TQZDn&N^{FDoy۶MOpgo' oN^jCt֋/ۙ_u Xq% d@"0}2⋭VKZ,;o=\S^ @RDD]M{)~+4. wjs+?//+2P8|@zYEQ\SJG^ɴvHƗ; /oiNmS/ %QJh4N~;"eQ3^2l"25b=v~_g;V^z(Rϯ[#^:jsO孿}[o|mժ G8?HkE~ӹ#i<Cֵ"7 B$Ґ!TX UCK_lݩ=~˽d9aJ&G1qES Ɯq)}BCY ^4tjBG!zmBpW_Qotg2UVwvv)URJMڍhL-^CqIs,TfWK ##MBEf]+pInx=z GYݳ+/Q6pKcBL_0(e}j]MӋ{s3p$Q 6I咸9A\*r2¸]ʀϼ<'zӱϜ;K!iX bEuVknKugwΥsMzy_[ lbondZL/ƒo1?ԔN}l۷o_fyfUTRoÇ$SA}%a%X IQRTw~{bY  Ȓu@օN񇖅L`ow~15AɈ+ӆA|;{Ri93rr ${ÃGVS:I?)y{x2>}t m\럝4f,|y .G'ۍ+/?U"#4.K D) AxܗO_}M~y^lvǦm'֖IHD؜885ۜqr6,BY"8.ڝ (>JT^Ǎ@fؾ%{R9C{Yy=++tJ>xg{z?@f!ll9?L,ETrE\c|o?U?g_X–/)}*KY- k +Γo#ugu/SkЕa&z3-4=&]1֘d㼺$1z8 #l IQ*UTĎ*۷mi0."Qxa-}3 dy\j2q-\X1UjBA2(>SY#NsK9cdJvnUlX|;BC =A|  - "dqA A°?kekfxUVD5O\3m ]E_hGkwm#kv"$JΉQ]~[*wUt[*( mdC,Wo4@,`4Pa/2 :2>ɒjF*UZ% X+/ !|YY7J`k7^?|}*S7–boSHySZtwW]{X\$ ݮ1tٹ܂JR*__ l6: _k S)T*5YRJ*U(uV$T:I:A Ň˭A Ba fHW2LFPo,,O,{h ?K~c*Efi8QVqE#WputK30,lAD/wZՁ(sT3xqղ ^0Ys>r^JF)]0T_689Ld% p_fF8!Ҡŗǚ>"+%Lx, `N< ݥ!ݞz7?y삺=/^_㕚J^#f4%$s?XsN6 [#8ZY51[7&/_yGԑdc{{ӗ"op@_t| -0fܹs׮]srKjֻv_xϴJ*UTyPr@Lb,;ºR'daXi@z!IhX (UdATe@\jM\DLqٴ͋_B ~p?+R~͇>Ys=-jJؤv:C+qK*c)_dAB:QWd-=MNpQHg)`"8ص}l Xh! vޗNyDʹcqQ")ȍ"n|>=S{kO;[ޢxlsg48{]yߟ緯zyӻM #H0't3Y ]l v$ku化 Ya1TN!CfI`X@,avtQ4V)dKOcGFox3?|G{O~B.Zw o}ju|3O2@Y#1-exά).`P "KEu_Ђ;`}}ҥKG.MμTRJW3s+DhE!bG"E_KV[IF$3JT 0Dz`Ī [+B6P'Y*NQq{bFDו=`dB??q)>}ff&Yj)^WHb9*\ЛϽoܷywQ Lʆ)),**Me`ӆ~Jrq=iE+D=4t+6Uxf,s,_eS ):XaQ5عqiaCD0."LCe[sNmyJɶ7n0?`t$kB*ga)'tZu5^{KO߽ ~:!P1TJXAWQZ,=knj[)ZWyKd!ifWGaO/5$0>Bn@Y">/?o󕟼w[FtbMu_tʭo7Z&&D"Ip % 0  9Ŷs#VDaXIfWA)0WɰRJ*U& @HUljnPނ>IlemNC6Ɍ)o,Nc>~ 1 Imtz+O^{%ٻiKǭ YЪ׾Kο<;2#]y? 2B+][yj;>1[Ug"0"4;GrƯ5 ',wFʢVyni{҇Re*~ː*f6U(I48–GI\nieϻS.}ݧ|~᜗yy֝#w5&`+AjI5:R%E$n',X 313 ǦnRB;88x_SFGA2 RJ**W~|A!4X$lAl///8X?oSWgtl7u˟~؀>L. mPޓcgҲq㏥C +.0Yu׬of_٘Ut_+=zY|+[ξo!ۚ f9ӽ%5xU6F?ꃉĶ`VR3K,$g~(HDB쭛VM!{{no`#Az$DD/6fGoɕ|K:uJ kvl"S}I{X &!Ⱦy:'~GͶCX}O>w5M>y&\$et_xp)_odYD`AOfQR|ɒ$ ;5A=CHHKGjHs>}.g-/O ;( rD6,X&5[;qpۄ 'YVAsiA= 3#QpX]BfcJ'e\'@C! %) {(҈"D6lW RuQ֭(JJ|pkMQJ*U u]}ݷc:Kc|jQ*N+[Sa@ 'JC`)Q֓Qa P\o{ؙN9Sxr8LOl[S;(VRNE#͙t:WP%@ttbeV@C !ŜˑP9!"kvjK IDATso9'~yӛ(k3XYҞ橷\Uzh8yϸƅu|)m' 7k}țl޴q-_L,"#add``FN8&nP+!L :/ݚ'5I~8~*r_9[k^`Ko]?[օ=7COj_[H 0,P4tִnk~[@dY}tuREER=NPCwo^ K~sM}'^-fݲ{/篯u䆣\_[ gso#%H'Ⱥ0>X[}KgM_ 6HSdֽ ݽ7 gQ(T`dLҦj qxvtշnk8,PbFde1+w2` ƅHG9A3@4ǔ㨭4L~0dDe 1K $jdGKZu(*@J=K{ :Y>tNrzM&ؐHMcjRq$d-d|b d{P(Z4!AIttډv+ay?g/,J$DNqi,yG/HMy9\5"s'{޴lUmkId'򈘈z5iW5X: [deUI=sk7%W/p}O@D$E&cdS:)Xd"K0# T|K"VXm۶G\UJ=þz[ka iRJ*X]5־Qx^_H,;,H1bJ8GֹAѨ/,-`$ؤ5d+FINM 9VNH`Uz+}|+u4ىgV 2mLsnN[ u @prs Xܸ,lϞzkWnjn\2oW&=~[;jqHR&e5kN,N WeZdNٹw{{g/XՁSc>IPd9G2 ˀ h8#uD@*O* ~e Ū(JQTC`ZccLsDgƂ R]lLA|”fnjY८ΞDXp9,L ەPNV' r\‰d*2"3`&) eꆈb-Lbj&@ 'gدoĀeavk0/%EBK. ' '- J̴v7G[pÃ<ִ'72i܋著}&uxs+}bbMX>NI%R0FDZK L[DŽJh-חJdHAP? @ 1 Yt\W\ @[ܤ=}k#Lȥs/;ȩQ>jmnEh ̰IN7uΗLBSɣԋ$%a( Bz4,TΨ.1X2^ 3gN[[[&BTSTRJIqgﺩ;eMdɒi2ze#Qƿ &XGDPEm < *, 6.+C}577c#N[-{&YSlH%{ZOli=񮭋47d>铒_x/ͷS-\[XH~ssKwKuE} 3 Qk{_[ iOOe_p}jN>ӧ YòBA)Œ jE*:0ۆH<7 0T8|\*z{e\b@x8`lRjJqH`YQ&b!_߽n޿dⱾ@)uQG 0<䓋bekZfWβJ*U #uz3a%KhiqB;֏Л/?[g{(^+& BY_Z%%À R R1V $4<@Ja]WߖNIg:Dӏ~ajOAzr9C>{.r[0HUT4 yEqvX́BK֮%ia "_)tuS]G ^dA" @&' ;jpC2DXBv Jdp;}k:!{]IV# L?xo]F'po'_Tt9>?=K߹/p֟<ǡ R+WwXJ*U`Չ ,XhѐL6_欉aozP@ڰp&;m|Fvtpt[UP==L]+ܽ`~C8j*6d17 CщN.Di kAa`ʸNaWL9ao"V&sCuڵ4hqxV4|//+QB¸,٤WWTh*B'GM_%! R`Ҥrdlj,~>EhHо`a@- _v)`ߋh###'vdA]PbY aIQ!!]ZW'm9%m,XUӣe>E=BV!N]]Koz{×JR=weC(TRJCLww?=?.Y?KgMtcxLaC1 ,(J*;N#VĖGdV5tPqe`DQu",:v#틨&lߒXY:?[zS;gPO)a]g8>vƞyjd%;+E n">P¾d΂ږrXev)+~ӭ~~NdL&a:1DT N,Cvp~efQ4؏v*>ݵϙ S۰oOPtWC=72UAXJ*U*iv¹|{책 SN9E)dɒKWXsA c>EdI>~o!{/~11!G~X5eII1 p(j2RrbWz"ȕ블:FD N!=IMKS{ޗX/`.~OqԴLnyz7I@N箰hTQpT^ĕ@uHHptk^[BeR0. kӅt` 2UN]݊|d]I,(U)27Kyfg I7H;85Ja$YGO4x6O\x߾=u^S/'\U$uzIgt+}XJq&0QuL?T8cU'?ѓ_zs>q+@@ ' e)9>+@DBW CJ61S+A[(Q1A \!LDS7>>%_d^9ҬE+1N"Ģ9DENj*.9~]% sId10U`XDlpL"EZ%%=qBZBQ#:NY{N(5gkp~!rh4 P(u9RWy438pV(q{򍧾}t?qDX+-3rl՜9"9Hc٠6a,[XW<ꤛK`o7,~ͯrSimKP&Q^{b0@oEޓQO΀8%a^j*γ,B%-eHX8SB7T/ kLиK"/xѳ>;i#֟w?57chХʯ'4i=źuw\`fg`"["> Nl0TFX>2eY5QGz4v+og{IZɦK_fv! r[.s]YC 5P(DQy^*5[ckq`jX3š*O5>{?=L%_/fbXg2sBfڊzazG?Ҷ ge%Cj0{BaR<;UwkWܳp"HCDP,ːҤT>7S갗L0+]*yLYrFf˲D0M%ixK%C MdPX  Nav3HVGL'#%5G1۞ ,[r`ÎB)GfR*u)|ni'<TbaL.x(JBQM`|-+iUjE,qxȊ*BQQH3&dJZn" dFD;ƜP'f [f6Q$f> ! @"yԖ,_. IDATC3 W^֘! "8lvP&Ѷ@,lruuu3rl@3kjsNxOwcƪ c! kq~[dAڒay0p,GԵ " &=*b6.UeABiBu"ULL:l!^+=od89~@D,  P4$`=' 1d f4:|*"+AEȱcEfNN1:eWPqE]$4%[?51h}ѡ1fZ}΀!NuZTߐhp$ zo/_̸m\.O:ZQX \Sާ*b6lph4U2+U{ v@2%E`Y3HE,^&T2:ע2S"u؟:|d{BNj;AuF`}dojP.Å椱W%+1JCrj-x/!Z@͋&9}rdQ؅A~zFYՂ,E F UP%>]XA]IcuO7 kUfLKqaa\"Hb3iA 6ڤy '7[ChXgR'jSCF0928SGe%2SCƓrh(I~ {‡avtW.o\1jjbS%qNHxHY8lasrr_oTyUDnOK'ea7keh'd^T'c;R0C-?U_2=2:)ŢƳr^1(6f** G)/L{unvۧ!)3,ݙaLSe)p$EzuBNz?{GNR_xCN+0STT4*Y!əR# bAᴁ£i &R$Ǐޡ(Aօ 4ˢڇ*1YkLKA #lIZ.#N (aG 1L`on~)D,NeXj.+9>% `!*&dq|0ѡۊ @VZ]$R>i=澧B~̭_#ϣM)jjd,tM$d ̓%靖i9q,Hdy *YwtɾB'e"cE4*8dZtCg2+ 6R 81 =vd?{*Gf̋-ipbr0p.[#G:?snCv,aUg`fn`,ZUDehUN{輲' #ȅÎs^3oצOǾ{E(a%t ŐI3W|nx_1㇜ !Y+uu~iI *v%0,4)#1'W*nv{&EBqz0d @T +v< qmуa0Z8.`Ad@z\:>T&&2J קReeq ,ŞAp27z-iyVGۣP+? ijjxeasԊ+檩&Vt"JB0 TgRdI[yʳGƈKC%&pl܀pbx}B% ʶކgDL]d,uIa&[ere%b) hZup8qg0")'ɧ*8 v1g UIMcXZ*H!Jҕlpu[RȬNqÝA|׹v&\g";~ 6PC 5+(4`72P!W0U`ZQ#!ka!˞S@9a\8ywq` =k; aHNt<^^O'X<Er;v9,Аk2V(0, sµ-1gX"'w3Sk} V@D6.C^9ɂvݨ3y0@W஽~)y韟|dgo)gyOΜfp#U7ʦ`q-gVVYV/@q1 l V񤘂tRèNyJ?Xd^dć] 5PC 5$QR)AՄ Z2 p\ETf"b%++8aXOVv(u28xS82c5TDuo m8m ":9&Yv-XdfBU`iV{%پ0dYh+WLm􏊆,dNehA@/F4QWg ! ܦjwzdQ,3IZ,1jk;^}RCZ_x7˭ NȎtlլ _]vx{iC)'oغ~_x5\<;+1@u9v9<а޶u//h'#DdYRfA,9Á;1 /ۅ`]X_LCB8aQK_90fHOV ,TVM4d#lS#9 g*ڿcZD6K~D( v$i;q&d#eo;A(3@T3lO: Hмd7|z_wKK[Zww^h۰u$f?yk,rJt(4~I5o==܎/mZS'{|[sbxÞCE_|=@KM犯yIoƻz@ږ- ==o]=+UC 5-C8f/  Π %A f҆t9 Zd&!^&X,'1\9*_Ucq 8"bEYrPp#7\xIpz*of]v]wͿ?txޮKiO?b8YwO:!K 1Xº "E`"1֒f4R\0hJ&$L|{y{[>{ڝ;wzg.,N9,$DX'/|}o9~Gj$ӵ[[53vxLC`CzOYWԶ]?W>q{A0&A$#+aF'yD%Y3Bq-$#L]b1HIa"&!2>tR$hT%4h ,L P%Qɐ,y ADT8Xl ]af,Kϱ0a5X' YUy BnzH }XC 5louso[hΟV9}_ٯm9ݪ:aolP [28A{a%@G&56XC /g<؁6o.ɛ80;^DԐȰI]@ 26.> 'ԑHaD4F"bf[ V*XWM .Y!fi-0BCtP\'$X]5rgw?1} s殫޺-[wç\ " { da.ÎWRu!fB܌K٤95OA9&Aټ2<᧽g=xp?+.|_f/5|\|/_'u'W6ZL?tW\o70Ch`+;n??;QR,$f1RZQ Pv,xbѹ,)J0E V\"]dA(A'6N%bEc&eJ?55S%EQMZ:^1"W V%!4nedHuqa&m3k c]ǢXeEƒ= k7l~ޏ^CmMew>mm'.ed{~qP{6В8N;wܼn-ֶ~IJ_ٸ]cr~-=qӲkWUs<؞ג]-U~ GiE7sA)jʾ<| ѿZtcw~_RhEtM{azKY;W_reGHv//Ar=^֞?ԋMQk#uk;g| 5PK Pt˙J{dXBX2L=Ue*FƖisK2ZkY; tR")N"by ]ݤ%tgg݂^)ݿlgٷϯ47j;UO\~m=|_pΈq±Rb8mB a<V !}!Dd[H 2>YIQr(tLJDPNRHqP!qg2d8biu2H.$)"%=L:!_ꖕgVdը8(v7L օq1J_i@_p 9.}>1^J3 @z=/`>ioKww_sѮkNF{i[pj ٯlki~M+͉V$[n'ygԶhK;<-_iN|ܖ뛳۱qCy@3vE7ڿ%yvev^p6oY)liO<[v9oHnioy~Jٞٯlcmkʾ01>-6;@t)a[r6\ʳ1(DhiPNțrD\Aۚay_!Pc5ة\栾`U*R"Lز@2f8]f5**)GUbI 0*sB !GI[!,ˀʑb91 q!4LZ#-A"Han2J#,y2|.GK5W~]G;~[~z.|+6u;o6;`Ubl*2$YkȲ`#YpM2T6(6 Jz: % Yco[y];&7w uѵ.m ?#?_WwXtfK{v =fIC5 F'x$"D)|2`UrX@' pT*xg3!Ud,i,h] <ܫy|B(scG]%2 C&l>Xe*T@0.V3.Get.+E LgieTBU)GY> @5QWz+x9X37vt)w@K!G:5ccBg>8W_Z)zW]ϭ_߄ mQPA;2oU Z:YRgٓئ9'aUʸU&}1cCd"LEI-oAsqw}9)cк!M{ыʳQ("yڞmIM7_;PC 5d1AQTL3  (抣sR Xx<#+8ub}*l e $r-j0oӛ]9cŝ?m?4ЗP9-?Mw׾-[;c-ڿZQwFb5!ANKUt ܬqøDs'L C"2c+&i_ t VJ>+^ g" Vx_:VHsգg}W?}犛>)IA~8[D5xّ%uFX> -̒x$dKDq脰$cR2d SU~zщ܌(d.7/s,+h\Is%-CɎR۲SqLUB'J_yTTxWtw: 2!MPFJ30AZxkFn9H3XR%V;w}%q;ݽ 'Mk_SbZʙSdV%Dk XJ"فZ}r~jd=aQe2# xlӅ/w56. И*e@~|geY&,xY1 \(]2؀!!`e$`K,a*Y_8$Bf%k~W M4.ْǵ&lxV'~Q]}࣫{w7뇷&βlk19qj [.]҃ Vdoى cZ nу=@3*m-ɫ'B_gmV7"mk'Q8W9c=2v8M<D:m@fu䁭}}nhK{\駷۶gK{d*5e+YW[;n?Yʨ 뒭m-) ][觸Zh 5um_|Q9ǣ쥈 "v(j-s{YZ7R8ST.HK ʌb,(lv<[6.}~߁/=ݍ $܏aw]]W?34pY$2h_aQ g$r*G "7NnZ@"EiҀd ի|քȑk‡ܱw[<ȩ?;+sg. *w`z6~NoI8lbL_~zݎ?x] {ʁ3LC,,qO>Kbo >-*h *U@>3:u&^?;P9hFb^1B[YxqxP,ʑŠynI,N]i}eV7 ,-V_%|hDBYKVjFT3ۧH oX}WPnPvFYɢKrhkU_ںuf {Uϸcv|ײ+񌊖1-?skڱq}K&8Nr~~,Yq\ jkO7// (XI m)F)2!Md Iq)wA,OQtf$dI:)bW0NSy5T9Vy1P,}7mme"PxB6'DdeQǚEp8s% $`%_$+JlE Vٌ((]2S.44g=i|w/hgJ bs+EZ*8ahױ>='#"q20X3JBBD6D9S,xJ8̈́ ZeȢd`3 R+gMރ=O-J vȢ#/l#/t.Mc`4"+i):;#JZS$ d+BN&XEU68Ǽ0(HtܾQoo -p,oݛ.#13Ȁhllu)l@2(Y, ,@aX'^=0DH`.;% q](d_!B"I dmy^GGRèu;3WzE-.wO7O!igvJ3>D*PC 5"ppӿ|cN74m73.ʟ19LbWe GthS"g(-'}sڲuK2'|,A4zLT xT`/\nT֊ŏY%7r[' 3*~ UGX6"$v,$FQ9IZw/W'!"¤,*ISa#%.YC i1@b:P9`4(= I:)(Qn@AD\ی:2z;/Ĉj(aNOu9[fn`HMXYb8#TS]B\ YXh!D!B`,0`\(9diIE+9|zN`ov~.3~ۅ}"b#{rqopMPC 5 =[/< ARQ aakL13a2i &Uu)2ǵX)V RERJNn)l7EfY bcCeU18]N(0PE%6jSC˕c&ZXKq#Z0Y&3:zë_띉+XKb%b"pXʑ z`IL`If%@2684,>Hm@9edz,7 kVۨ$2{& ;VxZ ;@R|"A vN ьX΂:5Ik>`e׾$ޱ.V 5{wwo/>_8#`PdX SMӱ321RoQIcYOIhWX*oVgȊцG,H XZ3'4vdY2]68 bF&&댊ۻ4iX:_6;4'PJ4ڝhvKa<(bqgᴶ_twW110,gY&ԡSI1{e{Fg䪪>53tg!90Ƞ_AAEO'A'&8S*A$9 !yzTA֙[g߽Z`!3.%B0Sݜ-7X 4FD*JJ C2)L[c >IZƊ;a%^+\H h&GM\"͚iɬ~_eV#,h qnjhcKĄ21 B^Kb>Zp\ v4[/*BK>V1H}٣W "ew7? t1ikrs)]bAnܵ5.o4^@y!XS~QA^`P[10QRö9vJ+X<ܨv@[g/@-WȑF@$l$23@Z.Jꐞ<K/L4.O!:N2Ӌ/>~ö{6r*ʖ9 HY+( #[wk^:ȒH;6,أvS@}T KN,  Z,[ɠc1` Rց>kdh T FFi쀙pu ąsd*n. 8|3hL& =2 `/4; i1C:>VCafN3Gcmt۩G,Ycx7Tefv]Go9?v@>Ty-ס4RiQE,v~9qN9w74FzkBushh(F!K~W}KMݕ=i=4Cfp}m죹 7$04L@mF5 7L>;<nExnl+fѡV6JxS +ePli;tEf3%f4}l7םv&m C{- 3)P͑XHuPYDEL"\p;|)$PY}[^_w</:+884(áD%PSS\-T-cܚɍPĝDb3ix.2Ho$_ެIYvȴnҳm#tF>R i RrPxqbMMˌ`i͇f 7 A9Q D҉e;X F%μ>Q0r ,1KrH`c}|ݨah E4 G[ a&(qv-M%a>3٧\ ݗ&wc2XPމ맹a٤H";!1&-L~9j޼fF]?>s (G@ ֠i[ɷ FV$;T,Iapطk[h1Ve'i[;_~k AZ[_ʴ ᐑDG:% IL%J<'Kf,ٌ8Nal&YPHQCZ-m4L)1{NK^NLBBL V=cؙӁ3}~H7[9uu텠lCo "=ORHf5)m֋}\f}}lKRtks578/-qVe!79Mp,i62Z`2t%gN%f\୦̤Ij4;Dd;EwptnFZU c^Ζg";2wu''' g%*Y3c-S8g )Erd*NAZN IDAT3GR,(1jJDeݿ7l,-%X`d;-k|(_Z.]_NIܵ/ķUvּV ; ;ŗзL7tּO0ֆֻ@~-ӽ/ ε h?=T0qmv<b1vΛ<ּ`ŴSp CO3LELUk>-\CS]SP\_êՊg, y|]s@Y깍 FAG1a曮_q[B9<߿von}|TJAh EHki董X  `IRç/ 9[kJrABENE2g J(0N I[$d,żf'D%OWx 3Rpi%+y)E}(Wn( wڄ9D~ttv h VO6AO?<?U6ʞ#fla2 "iCP,33r wx724dm3KJHAWEN'&Ȓ? VR R,XwzH1~ -~"{DlGbj“n e,-JƎ}47 x{ٜG9ג}2݅'rD3֖^YʏlDEh!lnt{ⱱ=D1e4/QjmMٔ{@Ӟ;zΐNkm~1vջVwk_Ղ?k{}ֆ֧#TEc4Q|{ w=O8~O]C瞸"o@֬u~O~Ȩ<&@4  ۓ('enA,L "e6`,4Ű0И6{)Uʖ[n$ǀw m Z]cE8iszBaDPǽdKʒm$Z~hFjgcdv/DnyL̔Ëf dL8Hx28!`t(lMVnWLo+ߎ+EV܇@+O.զ 䲑,PLPLzh1:&Zךwh,~H ' ` rM)6SD6ez100%i"ȳk79ܜ=Tn& ԓҾf8nɮZ J'Woyn=#( b0@ D"`&!M /ӣߋ]X|ݫoBM_=; (!/HHFF w%db*,֮wD1A["SF:hTz3_CgVmAQɴ`<-V &LzmLNV BxSZжX#*Lf$H1A[͔vaHw9 "vL;Uf[DdxҼxc&J#. Ұ[ǹgR /@ ]KpJ`̎ϭĦhb$mZ,M3+{caӾcb4$؅ K 209n>fT\X;W5C.5-SHh޲GY`bx׎;U߻̧[r c,+V8';cZ.e޵L;Yd9fz5v܉ВK*zC~txOֆYpΚu.WZUVU>L@\`a B5/]c^8phkkyG1>J\znjqя?ظ3N~m㛓fkG8|Rσr6 Z[4M"_῞r Փ|gϜR7vx!R]lE;s-dUxCl*|7&Rph[2)᰽VybNUUH CO6Rï98jg*2p62C9EHR% /LNbU/ĈQ VEwގP[or5{rOl⥆?ϛ8oPݬYfٕǦXD/O .^7/m.>D"QQQѧgHnǐ7s(TvxcϞ=[eYJuN ΊpA{8-7^krSs[Dž~/Ȃ>[ALH C¶ TȀ UQ~@B!XYLЦ|B>7 |(ν:֞bST4X^HNTaFwhy!dX0QVeL()+x̖K8oG)>5n}%_έ}$@Kl{ok˖N&wRl2R%iRceTc9jNmd_LW=e3ƑaA^P4'*'V'#jyBtUG=k\{$e'ֿ=?푈sZ\yI$(< 5 ^LԘN ؀EX{ Z:QJ%!vX 6ť P ia7 [:@kΝAڿ<|{{[ٝ*K+CHVcSi]_]蘬m`ljBi\ 2^lI3 6}%hpph.Jtwx7 P\2xCˆ'='tQ5Uw``2~Vhtxb✪sՃKBՃ(8a9˾h|76-Ap]?Gd]6Z49vJf4fSH70QCxA I5o d"It(]MJUYٲ 0["ӯlWvc"Ϧl)DLW[hjnN3'>h"M0<1i!9DUFx/%Z_uhGѦ{ɰ$oU{ADL1Z:1ml!+^^HfK(5嬢  FKRؕ.=s/4=uIx:btLB k+,W h2u)[GYg큿 b@|Zy̟8aK Q fIkR lBt#;`"7&pR4 60IHs$B@؞Y9*lZƋhPc*?VX;154&$<}#YƦo$'ׄ[vliO ""[ft]-IYڑQ3+t\=AgDADfr'B*̧LZAHeF1!,v%1b5Ӧ|y09CtA%W#НۤPSf&ٔ]W bChKs,M h~WO3iL̄+ɒn(xAxaxev f*ɒ`*QP Ȋ XYb `2l/=w5t ʟ8">{v ̫`Blz{ 5ڦqp*hbvKHOw =É26X95ƈE- /$(!얄G Vϟk^8bDz<~˟~)-.e ` 3dBJ 7p?Pg # #Q# { "|i [OCvBE}Uo|d_#[ڱ?{t{O2 [z+LL`p$EĮґcӫyVMh$4dтLazA⤚x5?㟝3C06l2rb(ޓOns.jj9Ñx]J90 \,ɐL x$+EZAĒX䓔}fJ J>y1df^(I  *ҬihN@Y- et<HG?dBPʤ7J'QWK65TMjѰ#2ugyy|˖q{s9y!8~:9JI2;WDsN>jpBƑa`9$nlFHp \حIYڲh qcu豱ͳf|;S#bڢLlTJ-ڿ5ؙaAڄ3΃|<05@ n2c5%!X*4 p)YJ k+'Փ/Ξ~F)?۷`SO}gr$I,Fug&e{}잱1ig4CtcbZH "j) m1Ћs{Tv+**3STnHbR١c`kInH8%Ln/ d p|+1/}KnݵZ,B_xΟ?ucZuJۆNIbSVS ba#ՂBwjV tף&T&j0!0Mou7QbD̛ջ #' K Jn,K 3ryZ YKQw vL4 bRhyj\4aH=Vzl&c=pʦs"-bkwG)FKҞT춦L-5g";FכV 4tp,MM~j9NPӎk3{)pm '*kD֫-irS̺3ݱ{bϞ}ƣf޳zgp{myy;#igVԐeʳ r$&J%!xfεΒ Mp*@񘲎@'NMi.7(#㲱 ؆7&݃Z?/tlݫ˿?u?֯]~ɫ/L|t''̸F3Q$@J9je ƒ`$`&)[ 7eC2:lXEzYR'לG;꥽/叻ڽ酛?[^?5z7%h(F1QA(LÏ 9 C=~EV[@To 9 ݵaٙ,TZLё:o2}PkZ_~뾽^{~AmN 6dQ%2cMh`2;k0iN>'[IszjpG{8,aoCl^ڀpHfHCf 3!TjŢ~c_bxZ W5ƪ=%愊WӓhFZ3ʍM&w&e"91 7D5ijc"nuPi!au6>㪶hZ\䑇yo&:/?7zɍf}}w[Y룡$݉~ G+VBX KlF V9/^k*|C`0@,ٔAAë-kN9W5$l%5q_4ZYS訙lҤV澿_pqs> ,縣>I(HdžFE 9eTR3ZSya&.}?b?'Ԝ~ك?{[o{W_\t}o߷r`ŏ'D4=щxF1Q v=2!3ta-!C(tQƴI"r.]YXClǕmQk*D7c6%M/'<,+Bمw~-,<)2tf@Pd {٥^wI|}`m{pˮTv 'J^N iH`dXfW v9Ý?٠ Lt IDAT609 ^l 7f"moUU)ْ;j86Zb^|j6^۾_f;cGߺcׇ-TCn?鸵' WU??l>&.F;T)٘zx <Irz`7Ȓ G @"M[~aM)n- ND.Z Uv;F6L.iz9Csb3Ǎk<߶ho[ xi[BSّǶ} @\ .fz_ gYA?|-ޗGzy3B[$\i4,$[ 62}v[l)L H3F)7*S5'>gGsnN7[2~ʿtkz %l1rxq)[ lyݫϞ7ea/lq;g_}|7oăE01R?]_{U 3D`?j;,:hR6n@GlL_GAzL09%jff6p6xb;wVl^s5mn˶9GnaJ_5Wu؟ ~d6[2Rˢ1lnʂz NKfEJߞ۪pqv{ϺLI[ڶ̩YMoҙya]7?qU?`Px5Kb#W/xT\o(F>B?bDܝ*ˤ!,3ZZKbIC㸋—yAk*2|v 6Ǖg {>_Np? lxe1Luosf/ͽ3lBj, | Sv"Š$<&M]pЄ'|?]Ҿ=j y &ʩt_5wYso~}3%R٤laT?ʐ=ȝ,BC 54,`B6//; ,ݨ؇(\p0GCd4kOF$ r/#!OON DJ"4koslsљX4Rut]F FZ -7h0*"EpH` 0+UVcBp] 6/},IP'v4$+=% d"f.xtdKH8͎A n]hoJ#;j9Q+~w`CֱnEWonT*)h g ` i0YcP[hdpSO^?!,#WawҚ_oZoYCzp˟/ZOj~cPC̪fW|.^P v j 9-Glޢe~Eyb}cebUo>׼e-uU~İ 3쳏m$L{}ٌz;y{ ڽ:܎^D6&mN Ꙇgf1CNFc+z: #ky蚇gys7U.Zvŵ 3/ͫhՋ3_l^ݛW$U}1}I{~ټ:NgܪEt Z1^gmXeW.X'(ɯO;}\}ӻEO1+g g\Mh(F>FxQ ͐wXCΨnfFJ!"0M _ (\6]+qg~Zky}kxƐ)i2t> ⰷ_}eX-msWbzJes#̎D Y^;h2߿?}oV֟l 6"K G/,Sw.5Z=uadXfX\xthWs5[-5Za(jYgtLxr1֎mC5̿%esXP ._6C^ZxU777}w5 =3f@;j8Cg^Bu>e;WuƂ>ZTw Gz]W*>|Q`Q;Q_w뿟7o޼y: &O_x(-2uw# "t3@CvgABEGI0X|Xn{0W$cFMK_y|3fc8^VG/>!wRgRu~,,PAT9sB8hrxJ"6TڂXHC  E@>:K|a^;GO~! S4<+tm)E1^TiKx!ajSu&DN(=K!=ħϚзڪ=2a~gh1vqG:z'Vpqě`!$a<4`n $1X'݂@p*f+yp릲&QF׌; !XRw'7Í=mx  A eȔi%LkrCG#V։ȦAj1|!GhvzM*P_Ү$)RD.K2nF4;Y"^ڄ /i/XPv/~k5>jgƊD3>s?g?4k,^|U }*>)4n-_hh (F>avuYeYaDduBJ)QJ衇Z[[{wFc9s d.imxF7Zn6&iLJf;kE3e=`Hkr̨4d#ޜ?KXhJ7?u0ȥM\9|nߞN[FFb7%yC,ڮ(q%-Rۂ 0o RmnDHOPM"5/mטּ֠ǵSwKy;l?5fUNYEfd͉ mɰ+{+Odmo}Iu9*uEG]Z,\m$LA 4[XƭmRվ`[K#b1d{2nsDyweRf٭C:iB0$AE=`mYP$NTɗ )I} uT#UX&a+dvlZ;32ܒ ~߀a0ni ""#G"+DVGPGH 񣜶9; br)>_kA8v2:cgfpu',?^Ɋex.7ތkD&Zt"pB8}޲zvooǺi .=/nx홈@&m ~ER#ߟ}¯Ղg]R=Fb9Gmi`:lluު{zfzAP|OuիWߩ{9 @pB[]Hj=e&#2hOjWy`uvHɿtS\yrl`C,nEE$$Mf3 @. *out37a/4v6ӕL 3)EKnEDZ D,!!E"NdFupE p=Ung#x?j|,:g:8!Jߒ廙-tUe@|Fx=GxXr\.b+guxVG\) \Ȏ4)>'| nƫp5yMI8#"!(6LjHpLcX&w؞ku7cq%wB4,M_&Y#8o9,_|„ Ig;|7-85hll,--mjj*)i+Pߍ3+E|9CԔt[~TfAAA]r壏>kk{ZNkf>`XwC{k0^Zt`di/`o%0I'a4[J Q݋qg'gXnuG!Ih=wsڅiq$)"w@!ط?lmvŒp4HgaӟIVTVMXhL-%pBlb..o,k3lSfЈ;t7:Fzuc$\#@|I800#l$<~\v m6zVW;tU/cqcꞹ8y 6/./e &EG l>Z;h[ojRFɳoEΰ -9lʴllg-eThnEumL P?f`Ju)3*$)C`hY2RlhSVI4&QRqm"QCC/Qoc[jt)U!؝K7_OW^_)ձp-e;X"׻w:/ g xW';5*ۉ~GGԂ}b,mTF/}_ҙ LqwU C9ki^q GgΜtIO[yϾ1+r30pʗ*\]=?QHJ.CטYEIKҋ ύf[4n/=PًC3X P`<0zEبsn*Gk(5fpڻL쒂)Sd64**`${]H@01к1]trW IDAT`Z IYC@ r lͨkeuWwA?w.w3[ )QI%,xP FTS2M={JˌJwWUv.7\Sc:G?nl^6bˇ4i/rޗяsF{q 5xpUdr!ro1cڎ޽{_~_~M:>`璽«,H_ ˨/ܔ 7)⟔ ս2-B"ov}mLG-Bd~sْGd:0:΀ ;,= qz C #,~I?7jټLQ]9Cw ^h TЅNgӝw $yiȘeO@ʬ\!1/U|e7G^ƼdF/MiPRRTX` =(-ǃ;,9t}Ay3,9h%8xNa9gk֬O~ѻ`{}yݻwv/cF^Ʊ7[Ly#p޽[D$HHodcit 32#^A`ABDfG6ẽ.1e&W WS&qmVTe r3kޫpȄ`+`j=؊nm?Uƃ O:M٤fH>R>&E\9 cEy:BD0U|' mS@`ٵvQ۟C.Wf߫$ p?"e0\_ءkQQC9A^~(:!$p9G>QfKoX0BΟ2r!w}]vܹsnj閞A7:t. ; M a[z UY*Kea*E{6Ȇ`P!+SKi܀P>"FTˆ⽒D[Cخ$\B$K{vIڑmǐny׾zȳ!!@P[ "̈ג6;-t ̤1:jo1ۀۨ7u!<.H) Ҧv~iDܰQ\6Ee][`F">a6QSՓ=G|{RІP$ O+N B=>Y~(v /5*~bb.`A rIF/dӬя٘>n?I#Om؊/l*/zr !r, 8 t뭷x ,(**7o^ Fn`ʎ?]5 Ysy0{rV8kK>Ӣ0$idɂoy2dX'E $ ܫD?:W_G}?bgol!|+(qU˄a'ȵeoB: 1SQ*ⰹXU4| tFѩG=u];Zy?ޟN6ϧfNL` QS=WRJĭAwG5ٽB7Lphí0bpB ԰p$4)Ү6cz9D ::pk]鈢#F7)A e!V l7`˾V=Q7]~mSyO6bӓW.Iս|˥{vWG~j/-EB73o8ɦTQr!m1⢋.Ξƍ9s;Sa>gW3~|ӖޣEG `*M}iW@6DLPi8% 0PɢF'ⷼxNV:̋߯8csq{Ȇf(45y[ELέ:!2:ne2S' f&H&4gfOZ_1s/L9jlSc v|*qe=e}K%vʇA#?[B7z9xV^$Xgl, 7j,د۰^MɆdϋVB Sud`j/Q4Wц+"Īc;sY:Ι2{EHdh}9Os 5oѪ Ģ%LH}ByI a)Q7c /<8qʾ'Z8{rĬ]fSD/tz<҂Ss4!2c# BҙL_ 2GU=je#]֬nJϼdo}f[k/r`Æ ӧv]gq]w۶mrnÀ*?e6+hrtoDʤ(?:KFov9"jw?^UN_z+.>ծ}oHHmܽ{wX1ㆫGlFކP+2t=?^\ Wk!<DhBRvY 5)k͓rnI[2a-@ɇ}>T>J/,5|TI}\@ /nG.qC0ܰ/k:8ƛO߈#mP@g25}kS,LmxON%n_t؛S}LMwqpG RUn:|󄾏YE. #eog_K9S=!˝P~)YWN[ͨxv/zlE:rt#OxW[ά9zgaL{ &zϜlt}fųO\۷~r35k̝;G}7FyUWؽ{СsO aűd-,"'d6H]?Hk4FjFBؐ( '݁f y9"%I RoQjjDE-`Bh-"WeFoAOCfaD ;,%F|TdIhl . 7?/6Qͯ|8~sU檊7^=ʲ/ϯYg6]o_0I7Ã#C5$vՏ f !R6\>X ^R[E3{)A@(֒)|ꄢ&TІzJ=3(׆Y*D8eDIִ;==~-zwuk=>Ӿz0= E] "}[Eۅ!|a9tCV|}E~oi@P;q/~=p-a` X/1g(]wtT"3ϟ:u~uFM9N3iԩDSgΜJD3gL˰h8Kg\:WOM3ySFu֫l3f!c$:siuj(3ghiG3f=>czK)<[vۯ!C]:piӦM_-L\;7RD-G,K@TY+!mCV[ r5i^v#a }τ, xXGd|Z[-sj'Eܑ[FlIP1[Dmo(]P^b^TҒ*hmؠ_ƍ~ w&ξgrrf6}3nzwa~{=mY.! :  mA:ѭHFG09:t躃N TH S%$w&54Zerjh GNjYY3xoh3x4g_]^ܘ:= /#xꈷ7>b3*Mx|G?mUZ;B( zCW?oi{ؤM6iӴS޽Gw16v. &?mS4eEPq5&L9uڪtET1u/K5>`%hf:L֒p#Kf`vGM[\uXoi y GXx,z:ɲ^4Ӽ0̸e_z1*UTƜ*fZ2Ћ{:[a{¢Ximsrla/҅^o~N;4BC.XK.Y`Aee-[>Oz=@PNd662ܝZL·WB!ap`4 Yi,dRpBB_ҳR)7ƌ9F %i<{R;uSfFQMZӀjL҅Ӧ-}zєRpVlz~r#ޥN[QJiu=HRJ3Ξ6 H^tKg#>sO:n8'N4 cϞ=w|kZw8 Ƚ?1ȅӚf+9e`C0QΒ-+GzΝld!%~!KCth| f(&H1Q]OfJvE)W; %|cI!ڭאZ{PXےSݙ{Fe>t&O_ov^_q%$ Hf\ơ h+uw-"+@Sm%Ĝ- m?e S)#62jȢV ?\;5/rFlHmV-]8Ft*C,lDl+E{+Bdlu\N.;] JؓWz5'/»[Ooq-|[]93^(7^dǻ"n gםiz[/ "< R4$$_z+W+0'fx7-WVTf;vlX=򵗏1ǭys۸/S(K( [s?/kǍ!0cy~{ϣ+?bs ;fV1bU̼dpH%PyȔVAVbJ/q2q5j֜ί޸:ZFt5]:rC>C&L`=rxlW~裏~7X]@ZҏdhE`i9?)ȄfKX,b~~~ƒ~S>oc aSxr.s)d(RLK AkF 6F,1}{ |df5c\WVnp=S{#gYU9rg;+$eBCReAKO7%~KU'6Nj:Xwkϡ#t0G٤ĬLdOk̨$ƐpϾGۯ~V}q~9ůXЃAHfw+< SU6K6/ cRץ,}wʊ& ]WL_~%SC2Z{lڀ rK(z.Mʾ9KO8ݟιc-Y:Jϥ&*e Wyҋ ^x-{f-^AHMFG<{I¶ùFevZZ׎={ÿ?7f~_^, ;_!|2)" >ef쵝oֺ* lK?{m'RƴyK1,;@yMz5j,zzi5ON7aƒ*pZj'/^i?*j=cy#V/9W%*fl[8kڴJ 4ˌ[:p6r!V8餓V\`۶WXI' ΀ג~Ҿ IDATZBMH~Pgƒ鋳5iز= 頣BFb\ɞ+v X/}nz@81q讣m_Sƒ{-\w !\bUPAhZ֣ڂ,9IڌW húDE?;+G4|q5 G& $x`T*&n{Ͻ dAK W?nB.y{z0+'dBPDʍX[LX'ӆwQ+=olܟ5{줓N]wsU |7EؔSby٫B$~6_?c==Ppage__|Q+ 6d_#W}Os~}O`OCl)*`  /O^|xŖ;F]wn. \NviPḞg&).-e7ιn]n;dBm QHoNX4eM' (fw=ݖ T|&L(-- H'GT i~MoMMM%%%^3+?W]t%s1?Vf,555%%%?ݖe_ OOl(-zWoI zb{mv1CJFvBhgjK@?%Joxt}p/f_vZtg'ghCH>CnPJ [ʛ 6EUm2JQ^h?$bߊn*pB=fjU_4ggϾ!_$qLJTλdW|<1sLU{S1O65ɲ.m}s8b~w[͟62zhE݉@M ^dԊ 7)8rئy(?[x]Emcg.qKeX 0:߿Ó،GnLҢU d懔|30ҴNɅe2l_}^n{baf"ό+-G 6o./fD#em eAO0daL$5oZk`F@ !7N?:= [ xc m&b&WuG;$VdL{/3OU\7]Xd))be>>=%l,/a }UYZpM_O83zg_V68,=mc~蝽?8iH/~fK㘑mrǪ{{cwWҙ4}є)3!7 TfAlrEF R4N0Xʤ⋷js_8n/S+sl% 0 u?jXs^ީݓ?GQ!WOY\W8LB&sa'U2l;J4WXL.wmmp%v2LJ M Bm\Xd@\R"J5!yKRR4bH["-_GE-0 !D[eі]"hvC%! Fk/,)#<Ƀ?*)iyoYnq P}_9*Z*mդ5zWEi0n* "7h65o/b/! j923@`}+hΚ):apGի[Wj+2c*+FB"q]AT U`ٮ݇ 2/ u9ɂ!Jbxz `"&fIv!~4} f60A,%$)=󷞸xSWT7 }Z A1w)KþvSx6SlKf0#f#xL=f->/tw` h\HW?Vul|{?9Vdcd:C\mfv.Ѻ_B15"6(&I& 7W *Y-T=1+"2s dBy( i9:$HB'խ^q]zʟ*֨,3M(~DOhE:4C{"$x;[R2lP*7URYlz 2F',g^'~YK (J{lВ5' B聘RWTo.!r!1~ Y8 8!aM5v:P%=(RZy`ChS3`DQ۔w]Ó&n}.W'jMAl޿ҧ W9/ލx X }ufABm&Ъ2ҀA^Ma‘ظi$RsQiBЦذy${ @ HFwsVN6D"_$&^ ,˽+~rL!O(թ/. ~u cQA qX 5>tYI=b1l_@v]fkAiv4 լjjP`x_  c#F"1)tHCuE%!O8hđ.nUUn/T;s}N+6Dc+Hƺ̃%hR,tA@OZu5 DL/Mtl3ʸdA/3걇?rbջfh% VAMZS,!~ThӘXRd%n Id RKKr!rAnnmBY11yR}v^HR*2J6W:u3‰˻wWĿuW޺̋O^lL Rg ~>sϽŊa5┻pV$l& !wE%c-Ѫ[%6?BwC?V]"vX!0AY$,xzܛe#ϡxvKų#XJHhKν.G ۴q5cnU} H( u=B*H(2<ҲEVa_;qv~v̟;/2"_:c&WȷXs\蔔6{ |u_[< 2>eu,~3%L)%ޞ ^ЈqF GD@>v噣WL=hr555tPƛF?LZ!F<Nffe5}no!RB)apDD=ƌogkdYfrSq[& r gΘ]pP J h2)Y~v6{>dP^&q;^ٲN "J6fQ9C9g!P-Bz=S"W y\K$\]uAC21S2 R 6&ΓL`"y _tn<V3ewo/C~0ܫ//^{1'Q$0O{GnFh$"QK+;#രz)- ɒtC`X PcBwopڹv]|TpBoF$))3\?Xe+/L>xn[!?cxэ=7kkhyudVvP6ⶉPw:$mB 7Ƹ=N 1vp22{9$|;~5\eXw{kSv˕-T0x'<|)#מ2ruidlɧH0-ʋB]e`S)dC p;K!=5K2KZD$L H)1 )?7 -cF:N6B3e&^UNWh8dTdli:jfK_|!D=|Lp}l^TϾ|ߗpԺsN}qB閇ylk.&Ώ-)ZzlЃ̊C$@7X^*8&N+0}7zkDh'32hJ@o}vѓW{W @bV(u>CT V^zPO~{Ԁ`[>C9%2c;F=~ %'OJ*wPoԪܫS؈ l {j8QHO6҂Ƀ=bGU tQ+WܻWginF?Dw|A[B(RxPsPR 5_+e5VܤN,yۉv`S!v?ƛZt>=u yAD,HdD&Oڟ#'N]~֑ީvJ\A8)C:@J P1Cl!JĐtCZ]z(B J m׈PGA4ฏBMyխq"Z.`D8-c/1m'^)u nP8kmdx/}oks|߽;p\OQl>qFl\.w/ۀؐl 7LLV4z"IƖ\Pf`a׮;jʇ=>TGIحPl"]u@\ Yfxbfc*9fA_v?n89A =U3^zطޜ<^UĶ#8Z:n+ V܁)mjm"WEuv(3b,.=@0PEJsY ׵ e՟n d !TyC" eww[үF~~Ξ5/zK֞?r휾wS+g/0#ҙ4Kϛ;{Ѳ̾Μ:}2`ʌ%,C9|@HW"p@kiGOiD1 HRMHAo3FKhp%JbPR7K䄙&Y"Y2{:$2Y&CGF,'#\1$2_[$M EP lJw,)|˶I㷌>xÌh_9vU7-{ 2Ap 7' G0uPu{ʉE;'5 nIE o~M# /ܪ_SƭΪz/pn!,&L A=6 Ȏĭ5&(2NC$BL7h9R"_[+BME rGEMz'>;{Lֶ^(mJ,Ҧ삦-PA*jAGDşm١tI ]fǝL&Zy f{ι?p+w}#J.}?y5φu+12:fLJQO5IpW5<_w]/E.(1V7i3h66olIL;P|iuOG>0Ԏ h?\F11OA#?۪Qje빬kK,z/'l=ՔtCvb-JW.L\pU:^_RS^\peyR?mҤI._&F˒d0QOZ(! *b}K~ ٖ_I(@2<'C`X!?`5aE%IimqcS2=ix`-=ؑ #!ÞE.kQ\EKO ) HFBh Ney^8hz}|ʉUk:kXSgl \^eVy#{cMy @ mSa.]VrL7'Td~[9{AzAkkER̓fNx1Tn-hSE pݿ{,ww$k8E9E!a3P*D+L0,M==}ǑȮ .)"3+؟L/wRУOf]}~z;iѵ݊䞌{_{`@.{zؙ Z=Q4vZp~י ;r272kߧhҪkWjʋk'-[VLDTV.#*Xv kS\FD2yy *^?qw觻R5)'kʋSzeee%S]j+J/Z:öG4i oSO=O>S[l3Tdբn1 vaeֳ̾PZu2 l%L` τ %= cH{5rHR,b)fB  AWVȨUZL f"h(jGnE _&"">FYtMX8&sL3]ZhBt5v훏,:ve3NrF:3'y_^45b IDAT֬?{ُv~gUM)ySo/o{z+MwM̃CWX$7&6ԭ?n7>:n-3m|5H}) +[(Izw"ex ֏h~8"Gy8%yXXcв#-VhLKɘGぬUn>|}a'zg<Ȍ=Xf‒#lkbO R7^`pM?ɌnVvҁ=G@~7贉OU76wvq_;^5!K?m` | )E]d18 ֬\K*+ʔ6+P`e~XJ*Wt ~*xhʝhښm VeW/Z_V}u>M?o&%5ū][Ja,/^a5ڏ6iҤ,x' BJ)"Eׯ/..6xc8j J'e&!ٔvL.P< \0ږXo$tRd,C33y,Zٙj[KNC ӕX3 #ۺ~D PAz$ Gɘ#b6<&_ _NȮ(PdTn8M8lRL=|EO84k'5O+4lA"N_p_9zVrZ&pD[;]'M0Xꘈ SgQ`:ogT%RׄHx(3 7duϞs:6v{IPW:zp*wY:y_䙰^X&N9C,Zz_=6)]RpCuE%@~xK.\S Labeɢ6ձU(|[5Ym%/,Jy!b|cQm^ݫlڤIflڴit^^K$2{@ PWWu#Flڴ餓Ng7HXOI@JM xPyF$65 JWJ+Zr21l qP(CX2Gn`?;KƬ1 NLcE}нM#jY?4=ڍ-3= yA$7D,9zR0Z:,{c8OGnn6dM,\5~}@cg3KǯX<E?\}O]}ӭWl3t;[7 ̞nG5s'eaJVw @hJhBw:A,$ٙ 0m5 -FqHb%(`kmKVۼK_r晏zs6c괷qԤ\u!NȪǔ6%=wܳ7t vkvM5J#Y=sK/zT^{9wmL1 s!1vnB'}Lw,.L/M(35tB~Ù G iW,Ϳe}U)[ um_RVRt}_XUk*Ԭ]a&5*T .zdIwc=I&0Ңz p]7b1)D8r'};5y;!H!ȤE=i+UA a3-Cdq /&a/bc,QNpLkpTT8b yX)ʨΙ0h`$Sf*lX^@$\Yr5i,Z]1L$ΔTT߉)d9n`aU݆T+ZHD-dI)$:=jwͤS,i=w&M4ÅiXs=8 feeeeefP!>ÂhdCTD;0iQA!\[F ,l&y9W cs8 5 5-=#X 5mfKZek2x##-"!D.Gz Rv=c(E EG 7 ujM5m[?ИB 얅PW|eݢKd|o_~g$V= ެoZSo|z+ʹ22d7zJáHOF68ԚFһ Dzhv J 3g H|dgI -:YiFz]²tOu8gf8<ve&&юeP"\]{YyQ{FmrO0Rn:,-#35odrLɣxABU#dPWWzyIe>TC2NhNSAWH3 ΢w-8Q4Oeenw:^tK?@Iz@':L}q5;7viҤ&t}uF]@ϖ"OW&8X8x98Xc4O/I6/@ VZ{^#):IA֛1* #G.+ ,!%τ$!)]9 c!QWKڛ8kTAĉ%;BwP}?W{q573/Smmhyk?O\łTL V'Ў *`ex.Q;#4(M:{y5/W RWWf̨PwJٙP<c0ZX,H׺~]{F1 0St{Y=B85oDӌ=-vhku;+Y[h)#dأHN1.GF…Y\aK H2gJ\>N&E/Ԥ-bG3g `Yg~mCsƼyƨ_4I &6]I\HDJ'Y-p}#24qg-{i*pxN&J}p3g'':#/nɇ i&M4i>`F1瞳m;-0^zIQSSo߾a(1a" BW ODn#IE+4r$<ǬSA+#LAoaex'y*#_ *agCp%DBhYԄL:v;z >9ܫȯ+qE|.ov/DA_xxs[fC=Mky(iOQ[?\Ȧ'5o yt]ER$qPzEriR6S cf˳b:1wTɄ3CL'#l9<&ioFn|XomnlIսږO{jh6i2~ 8v8YOYcVĄnޮ.1iAtb"ih} Αu'NM'9ۤ+_wg3͓rr+3&wK!LVZTDStNKPo; _~s'/T>z&H1 Iր T`I?1#턍;#|}2ҁ옗SO"-ӤI&ϨQ.h4y1,X?s=W]]o|マcj㤔f8mlIm?eh&z}׏ ՟C.Plx /Cu^gU iב 7 e޼mYgȶztmW?ד%.i_o-3̍+ w\;+$7+K;vcvH pzzǰ[;!BB8WQfyV *s}o%OLg)}S[w&1 Z,f4{v,{zO(u6uW{>X]_﷩Xg]BQq{oye0k{bʟ67i?oꫯniifwoPLLby0ƒc;ȃ$Rp#Z'Z:Wu" Hv'bI`Ǻ &Tr 3@1[jq20da4+~D R@P:Y?wxG^<.6kqT"@cΩ7şx<3/zek3ϝ#-G:)i; (qtF#p8!fhQ_}l<nP/(ݫ/Y2yHf+.{ьwOb;vvEiL!p @ƨT7fʊ ~(v.0}'}́Th×f(ꗘ2kַÑ<=y\.;a֟vk޽cYH%"Y  _r@cM"aqoF>֎~xߧUXB7ϟd ӂ0M4i|0Ru]˲h<,˶m%\+wuRJ~x}ө?MRG8 bILlg"ͱ.`t)mն)nS󞈴`Sp"S92eb\Z_h AN2Ɉdv.:ָcτ_>~,fV>Tq@3m4WLUo^sNx;3{i->Smc&V eb< Ug{ O)#zkh?N}zg&n8I¹|хO5d|W5eK5.aX5&'A6%}AXnļ}rs1/,Dh,@JPe At/|iZOp<Д'҆0n B= IDAT"PiҤIB0222|}yo0\f5H'c@Vڽ7Ƀe/@J'ׄ=2`kB7' f]b_D,T7V8n_eJW*#@8 ҄_ J!caIQ):&a#簗u-cJ"> 47 wK1Ƴ9wk1%E{`/薕׭3J󳇗nuvMuP^a[-SsqFsj;<)CxZZf|O#UX ^Oד_{ʝc2y^6Z:Y  C(Y&bY2 xȱ2%96E8a%;?fKk9&XBoq%hhnng;5 ;>{Ǯ=㮾fa #;QHMӸޱ WmѢg_m e)卮gkε !>75.)3Y {"D5 ---̓erפ>6jʗ/LyZL)OmԔQ* Fk*%:/^K۩e=n}I&B)iP( L?}H%OHb7HANPGք,{L&K^q9g)=EE"ۅ%{kkHylW6dS\f&n oxEYBqW,Ht{|fݩ#'; 7 e*ĴcUr oW|c|bsLdlNsPǍm5^ˋAKL2PB )o4v|cA A,p00e'* oD=r~' da@IȅpEaKl {&;LxtoN]{o^ߝ{Kf_&xg^9h׹翴ۿo777]yu?r^,GZ9KzX]]F{9>lm!d+"ϿӲJ?ΜyČV>jii5)5a5;6`ɰwsYMyqaf,)/.rUEx}IMyq˪Q׫I&MrrDvuXpD ‘D2Q|զæe$laN4RFKS&mi)Em<% `aX!)3 ZN_D Mg)5Oo8]?Ggr1gvNQȃQf8f\v@ Ie@81loKs;m9V9S?aʗ^cgIbBd6$+3 ?nCE@sϫj13TuէaIDҥU;+׮.**Ph*KWQ Kחr/ *^֔/\K׭([ Wm;חW.+^j0*eW._P+ UMx _ZZ~`y:oģ"YY5_]Πˌ&M4izG 2X0+Cvug+B Kh1@5f-(pO]Oy V̉n`7hDCJ$(@oz^eBĺф2T%i;=6!#>RsMr8!S$K@p!M+ᜂ~ȄXoJs?wצ? %o^Sw}ͷw훿7f푏4ɋ7>}}/PmKl-C|ܹ>z٤?;_WזSsC~?߿| ǾwƴME!i3GdЕRĩImHf$C0I&\[z)Of,ۤXdRRx&@Pa &6θˏ̙EJO8RiLnIܐ0L= wL̪3ݯ-r7n:7E㦒F 'hқD 9, H^/s wcg]|+bNfg/;pT7iEkVҥ@T0WR7\w+ oٶ~閒 nIjPX͌e+WU:ʕ;o+ʵ5V-5 ,_UEx}RuO'ܢn$o^__S^jzt[JBђ*ˋ%EXfI3(]O4iҤ&R D RH=0ht R7,ݰT)}hJ-Y1 `Y.Ir9Rta$;u!-au٤NS:5rP \fM26cIFȃ-X &^?.!շpK􆣲6TJ/ ӰyaS } Zrڋa3 SL\ŭ~΍Ehhz|O=]|ᢧ.e`߻1+E!^K0g>~|Yޙ5N=ݹ46sj[FPf 'K3giX"(d=b%XD@w 'FA`ECK>{cg2ӤkWITgѪ=\%ʂ )nT?6x8#l5f4najG='-zuW(yPy p3 u"]wC\S!2 XoGzZ슍nf1Gx3ǥfJ`a jj*޾fl W$\p~`.)PE%@~xK.\S Labeɢ6ԱU(Wk[I>|^;%e+ UӫSdJڤI&M0!PH3J"-R@Y\/wTlXl7!ɒN JҚz*AI NV1?8c"aMw+d#Ti<ꦙ̤xƣze<8a}c(1FZ9'wpm/ۿ/o;X` _X?oU{ ~U/5f4ߜzί3X$3yr+N'{^=捻6e+M_dŽ"ꨲayw9E~zX` eq}Ȃ vV03]O4iRuz? /$}xe)ũ +FJ#aA CHxs)p b%,U:E&eŎR@~н젓al}`^{k Mi-g-L  \8r f0_^P6tCk7\U;zʼߟro:;0`5:ؿMS[~箴8#*\[:!c]PY*Y~5b{ȩz}1<`Ң1#j3" &Nln,㤓!G{!ɛN}'iea7HS W]<ÍY>9Cش 2˦*YgYP!qdW'[Ge)4ǑcTz-c>yK|ҺPh1pD&x"Q4#C-Vsoch+" N>ڨ󧍚6&f}a`~ggJo(+))@ՆVݹn]+SYM>V/,JU9ަ%ee+n)M^jM%7̟^<>Ѥ@Ԑ~E*5ˊ Vb]2dI巧Lױzj&M$8L_CV46 R /%ׅypMrD| 4ƶ+uqE[ۄ,$+WKTP$qZf̦3#er@.c2ǃ{7kϒ9-DZt)lu{1;Oۼez߭[U\Wcg?xӟ]4CMٷ2&vR}־Ikk1cjx՟1 x"$Mwdw8xD c_%{yDS2n뭎aAP,uKן QOV>篁Ԁ6Y3~V!⯜0_?(ధcQS!$ːK#-\gFc 2beV7}G o(Co:?ORh*w8qHjh ݧOz|;-n:ǖRZJ,-ŪO/󾲒TIXvkzReY5Ŵp6,OTT߉E#$`aU݆Tg]nWqYeIQKM}EI]j6ZϱѻODZo&M4u2LaB_zC8)vBPIJ'|).?Â3?U? c3 !: Sc5Nr9{?qN7&EtI$3#U/%JgL~; M1먼Dxk>xa3큈/W/ź_;㙏uo+/؆0{[RmݘsOO'p-v0Èz+5(l\#;ҵdNuaʛ,ZԜ9uG&TpOV̜uf{g'T9%]xSǾmĿ>jPz!ќ9QHıP z=33^{p=qn&X=ufGDS0P= VS6?zYTpI9GeePe]痭羢*֗umݶ~5@aʺ:RO>K؟4n.:zw|isN&M>+|yņ˯3fD"kBZTLvJcDdd$'h 7( n,8` `e2g ;#7w7^mb^DÚ H2D0`glJMhAxhvю̙ڋ<=xiXZ4yѯ{U'ʑk;1(78:NX{{]e+ɵ/Z{x)H :GD Ez3ph1ΩFcceNR'%X`l^mu隌C KC#BQTW'rvRpUoW5'NҾ':5<|p7Qw!Ni36.|87rݬҴ 뙳$S6mwmoW,ltŪ)nRC,L+>k>2DzO ߤI 2ƼXb` |7NNAp86Q v{:R6գC7x7_s G% RвEyS˦Q N&M4i>uXmO@*44턩C5W &T"yŤihD4l='`gPO/o87V%l{䟮.eg +(fsfn텓jgm +]yG6KO:T3EKߙZa"0KO '*|ZiG@pq) h?GTuyЌnSh21o IDAT,a~m*mI,J }IYdEYo O셫f !|c ,-ϳ&҆<ŧDZhqHTuMlҖ Fȇu])2e2qq@^dD"#!gR_M{yqiɖ;(}ϋ7m3Aܬ7}YdE-C[ އ;DrN ѱ :/uPX4K(X Yx2\ 9a 0 bSY*j/# ­& @>ÍhAdxγtޕs6tPAW&[`fA*$X[ MfXZXJzS?\EÛm~:4{tIDbwqO>e _9]D7E'\)T&ɭWpH.D$ d" 6()"I &p1|:9!AbWWeHE H)/ lD$vi3QĔlL`w.6> @ux&ɐ r#{BJ+US8(Rׯv J4zQx!8<ZE a6&"xP ^x) jfE ÌݸߪiQ3Sx~ 3+%15Ax*i!\Ǽ~'{}jF?imoRxcW6tD*v?V9JT*i‰ o 1؋W!7LH BARڂwt̐Zږtھ`'HeE}C[Hh̄#r^(ko aO]mG 5O>?>ιU7DsVb܌u}R=,aļGVVl;g9r;o͹xɣX!"@" WuO =RW}Lm]K1 L;wkťd]fˁHC=IY}YZ2؏1229dQmd .yVe"FJsBb ,H9azy͜8VT̤VrL̡OR~tњ߻4 ݦOFv><;o5 >Ѯ]YFW)+M&lX TX ҉jDoD$[vIsRH1Kly1q[KnⅬr=R% #I mY$4#=SlhL.s0_'f\hS f'ړ1wFF* dkO^K/.bshƒ[zT |%͜;Ɋ͹zՋ;])%piUhJɼ5HdfenӭsJ\=cg߻l.",?XѐU쮽iE+~=usGGHv;ە3&B~J"mg1 o_D nG-$ʴ,wpD&UXB=PhE]U%?0€6Z7&G9QSD B%I"mէyiV~` xz X0 2$1굈Ang2"`TBdz|Q>;|Ô[ YOϗ)zgɿ]Qq V#ccƿvOћ;CL+[X5h hֆF2;ȅK/c_6d\DտpÓZg^FX$Ҁ;!MxA( ]I &)#!+0MURT5*?7?NxAQpF||dd[F%d"`Dl4b"6guJ#׈ jU 4y*prxkL\W3ț8{32b{mA}U)$W׏;#<Ŭ-ƀ-*ږI'T/@:`!xLƪD+L0 򉥊ss)e)mB련9Kh #d٧ =t9dh}'cSʷlnto][I՝IјLo6;"bm:(#4 oNB:Cck ?p4Ci(HM;ZyTGlu/Ty a%^?&.^x4jo)l0,>zh;zP3f䊊N#N2w޵n2#}k֗ũ=O8cb 'q u5*^3tZ@GR$OeСj̟2"IH7w"COj0E7GjZa% S.^";D*Qb"8=S5x|rѶc+z︧ߞcCLZ~5~_lO8K= ;o>'[_y'{zRRb7wkks!v:8'}`HoceVƻy~V}~޹F3 ip;6{?xb/oiChI*$ n)S>gI* G4(xd@NTď*4[>Pn#DB~S(feQQfmKQ7 p772Yƒ:" !Fb/@6 ; m)iUB@NɱlI1LC`mSHk9(hZ U*7O SS _6k ǁe ~i{K*pz{z E# mVRYꄢ9 U7DoXG}}1jԸM clxjf~fv6K0ssٽ,\Tޭ^/gfc-31?3{sflUe 0D?~\6küJ m/f[̸zQ9/f.w2f?>k&S ڶifM^PbY̾wf|[6`ܨ,"$:M^|kAs`q5,-7,cJ~|_4zoXĻ=}$;eڦǟy_xvSSbqouͲIw$I&6dRɺ;NT  T__/jory*3o\Qv j_nվܪ} _Qh*@۲wDhSVȎzvYWC"XA9iN)3ޚ󝭟{pCmej~!:'TmGyǬi(z,t;:#⹲9WFQyc?zpސ&;=}3S[uv Sn"$Zeip 㟌)tuSp]6Nl2vǝm=ƻk_{c c̴sVO[ՄstHS2,.wb @^H59ss* gbƆYFma3g7(^QhYO9{Ɗ2sy&/R^ mڠt]+6Mihۦ]}+>oy+JO^bYe^/Um޲lhY|<`I W&r}1Mxcp?v٩|u3Ai.p!6I,;4,7BtJOl9_ڗ4$fxzB,MVlPH0A>m!9irN^P,@Z*+`6A2DsFέh+W|s]v~Su`M6ll6Yz~ηO[_['?yLd\B:ᛕ7xD8!TfjԆ÷}X1۶lp`5r1n Q0SJu*ksӟ߮,F`5t/=鴃aMូF c7.C3b%4ZxɓnQ:Y"&"L[2EpQwZwMm*]vѴ''S_~ԺMoſVsz&! :-%h .jC9pF"[/( an}bLZƢ .J=`tyA{ ZKPI<(sOf^ %Yvuyk6al6sJfl}`CvަlZi%){){˲2Ydq?/?޼i$0yU[wo|~|PnL4ĭ=O~]W>֭1>ڇ{y)݃PރTrL҂ERZ+^ǭ @p%%QG_Paɣ=m'bqfbCh~0 qkGj}lv|%>YOX=DA"}z^B*FDnscL~;ߴc J%1L`WeQڀ&W!77D^,В95""gzՈ>?d0C(6uQfnr FĀ4D[{G,S. "2{xAOQvԷo d rԝkƬwB/ǽ& Vʴ/ C]o M}#e>y-:~p} mIdFyE=h_mĖx7%o |měMxdx{_=uŞSl}fwDFz+!a4 Vb,!1}#C{NHC@=֮];nܸD*777Sí5qaP___TTPXXxX DGnsuB,{o,Ȣػwoaaa۲cV׫ bާ/ X#*}g^40 ޝ㰂'LΎt5ࠩ!1T@2A2ؖ- FN6F+D RC`6A,T,jWZ^bA`ta 6KMa|کg7z'mHEn'hOkpqn+`[iv.x^| KL7D#J_{}xOࡋخßܸ#¿tɯؗvcc(* 2~}W4n#3E!!A` 8u~icϊդaƴpuGA£w˶Wuҳ6H/\3'W|۲S gH@Hf3'< ;|"N~iV$DL# '*Ek*Jj~pbqY9u@__0a# yDiChؤTM"0*#Ӆ`zjfcQCkJxY/|GG+6NuM) &_qH_Ghfjؔ9ysFs>9w|e_eAPDa4'm$|R-;L&bƇ#^;k`F܆WՀ`R=xqY4=Mmݏ1J <ËTFw>n­^s~}%l*!HE(CTrB,XeYdID1D(b=0tjNLœrOǪ-Mh3JSܕqWisPR3|ݗ|+E,f#Ɓ#WIiUݙI떭 aN4TR[ WKW˸6bZZYh܋kVhui7ķ] 6y:P\l.7]WYOx ;*)A'Mxᆱ YXz$=H |dWTȍ% `ԾtƳ{Ũ A A[D $Wk$'BNN.s@dyWfqOzdkO/J7Ys]'9ʜ2)+^_$*iweAAVwR{||p95HZ6˒ 荪^N\*ڷb?zplU@ "{X@F` xf'pҕE}ݩs+ؗze vX@[ku3ҁ|m AOw]>sdlۦ51> _;|e~n\>Қew?/L8s{ܟ/Cuh}>7qի6U KMQ(`ڂp@ HHh2ђP* ·]9TyMoa:Փ7r5x|wW_eyi;ʎA&=2峓V9OYq/ VU]55ym?,YOSk}) N/Dhl"al󿵤ed5hDZ ejSffkֹɁ%Ghj yuW]]KnuFdP!җڻJGѫ^5 2raQS׋3)'͘.qåLYdEY|`xF$vt-hGQ&ӧ¡E?.1BJ'<ܭubĥ3um̊E_~IE 01dF7Jftfv6IbrYLVk!-BXiztf;o3~e[\T%L/AbDgӮ{qXӻ=)cFzw^w?>ip;L=(GA‡~;'p~_6z 2xEg?)c3nX^͒.RIcAF.Ӫ;el-ԫ 'wDku_v]Ь*`ۋhͬEkfi2NjDpt*f#ɯ/žN}̵-dٟ.,_٨"RH{%Z6Dw< DlXN7/ AʌO@+㆏!Dk,",C"Vip$\pY AӐ/qiE>&i%- p6hE& R }R 3 7 6`تdA1p\x**1jm/HX:~*)KZؒ8m*/O18RzϸOؑ`_w\؁3GEQ{j%O|sc1÷⻿_&N`'loݣGl۸K%zLu7]𷇦- ,iA 6)NǻM]0]د4=S)QPɷH-[O9 )q%Ň#xofuÂ[O>p֢糴0, ď4 `00d'_ 0@jc)KqK`xFd7* Cyk5iBA鹈̤5<@HpMĒfRfv6vB[&@ڀG`&G*zO3JtVƒp p3ʆܻ^]{`43hn'Z/K8ŕNxUߢ.cdA HotȠ/6agONcE LӼ @ĄP"NPaCF+#ǵ,/ϓk6G~pp؝zeu?DZkB=U*G-Jt<Ɵ|~{~n1YYq XdQ#r26I͸6j-YsCȭp:Wtc azIJh-Y=fW]3F5-sZcKtq(T`@kzX[B`f/-44ۥ/q#|+ɖfEYdIfVO9&.+RT\7dnr̪&zl@dő).p42_F A[]๡ѼXuSFoy%ޔ9^~ĆI;O?O}ͱ)r#8oOhֆo}A|D`Mwzէl5ۯ .XP$?7~mC6 25L=2 m FHќs$O5^t#BF|?Mm rY1 t;P{?+8e»\®Qg~ɠf :%`57”D ٚ գ^v =^7`PiJ6{W޿'\f?Oݷ@d7jOru背E4RLo L3<֚|a >:tHW;Zku2Y,a䓎4`gMZX]ڲl0,"Oc)].dB;h= }f&תj@d{0H)&JB*/$OH)EIOO Al@PGyx]CQ) lX?jƱ F7{?L?kwS7uX[uW`sDvMcXq6Ǭ7^=|w.~m߮N'÷ 2M[jꟾ齋Gn;,eL]BpiS|Y煦 |OW7 uh! ۡ6g^v鿮 kfyš+hj, Dx8ͥ$)i #TYY$ v #+޽w_'G>s%}Fr7oF sVb`\pz",ⓋslD-$LƗ҂ /N#dE3ڂU9JU"Ћ+_W8`OԒtJsJE[R84M 5vAD/"6_`iu1t-+^y {pf@?80u3rLChH- Æ{@ s{ܘ`{lV*zϮ_0oz[o窳|zMa'h; 3}/^p 52Gax<0Ii^TLhɔ`M-@:'tۗxܾ4`Nd38X o'n:xVPd">ڠq8bhuG=wZ7t#`BUyg RZiNO=}n$c*wQf\@N=v!lpC QB4-U&^OSFS5=5$<W w]{Ίް* @]KєE|%V(KtuLGg勦P7Nэ|_w*z5Es9)-",>] Ԧ@k{6Hp46]MY@P 2oqHڣeKC&iu~ ~|)Ŕ8%sؙߛ-rO ǟV-R>wf&CjCJo> Op?Bof@ z~(t]ir!ϟ_ _ܨ`"O+WwͯoR)҇=WlP hN^F 2aê!]C!1 jh\kqŊIS^a"wD4A 2ݚ_, ;g|tWjJ tգ ! ?ÃnyF') dA`9i.ښ 77^y&Old/f-&iE )(F4&*r:Aj"1lr.]j)kk8ĝn3dq`0ɑ0Ӌ,^zʘǜ1B5kÖҕǍ -./BsQJHh׳~K:S)EykdFZ9*q<-%wĩ:#%+$>xMMGڟ͞nöj6w5(X<9cʫ{gbmd<# Y^el#bF# q|n@|DHfI/CHa1Il,6vlMmX,k׬=]˽Q,=3 }z鮹uꞚ{}s.;cʷN;ToĪ,%Ѵj:ԔA6tF0`X|t(ҩ4~_jQKK_:\y9?7=Xw%ot؉8.Ѧ6۰b˺M[>ҹ}^@Q][Vm۹fۯ߰s|W9`-:vm "vne toY-]w1upkwwo_wntv[.{msi޲bQ[GΧ{K|1}^G5j&y Ggt 5_+g1گڸ-nƍkULh 'J Uw"Y,"q2$BX_ c8ZD $@kaA\)!`K  &(Ŝ3uڣ;<{j]șKLy&`+@ƽڈHW>w@Id\1j6L;gcmyԏOg=zڬO}>ph-{x%a+Tc6գ+ڳ% KZYEatX". #AΠ]i5Z\:CSMFUiu%s!pg;_Wu /<"ZYWREe"ÒokN  RX X_4)wDjb2,sb03իrc{.urf H9 `<y,}c=M@ T+ A GuQD ODe =n|tu]Bn[zu:稉q S \;qɮ c6YIٽ{'nlоdX:ܱa*޸αxCw[ytO+7ֹuk'}Ε|$ޱf꛻'_uʛvwwc£ڗ,qsWc#QsM˚4ٰkXϥ}U;oI sYךi`%pE"V`1L:*@Z X *kP郅Udy^# ,n11UIZ0IMhxUbغzO%GϿt'=x'aAo;AAefuRyz8p4Œn9,?jUn cŽOySɳǯ`]2a EY4S'̼Ǹ&=e@Ē(@h€BbCppŢ̵ 3ʹ@k2W{_ל{/ObTlS8,+bA&%oYQBxRνhnϘwZEMtNT>ҽL)btGww-^ ,YL<-6 f(;uBƢCĎReL.)2 "=2x05nsfnm09rdwޔf[ҿa\[ؾnJ3Wuo喛7u޴Fo;n޸fnF:pNDMvI{7YkǪkq3&qUέwu{*,_3Vi@ 408QLxPJ왴cRPB-@`$0hRD1d` pVrN9 u(FH!+"JAz 1 dH{;1Q8lo\ZY;Ͽtߞ&aId2pBc11B k(]IĦuAV ¯o;TTVdp>E:JOzVK];e̊ӱ@A (aHDZ%NND,{dI(dzzO;jg*5Đ hS{Z:Ԧ%=,&% ]AƺNȺW+n? Ni/RRadkz/LB9 d!b&:c V4 S`AgY$lRl%G "D3IJY ;U B8 %r3j YN&j1gF>Bmq:hBn0ɱSx ĕ7F~68eto_e̒%˱<;ׯƵ7۹\d{'nܺclq%˱mSu][AEloٴm5WyTe>XrM7aItΕ:jU̧t& v\1Q긟פйf ׏4@ߠ*{ʊ Ä́G1("a,ta L <`>>dr> R= " v1$kqa̴Iixđ:^L2kax? _mHL $]wxm"Z%1#d1pѡdC Uy; :"ӽVO=&FNHY# 8jQ\*vUC@> ce?JR}bV(i+O)wIKPߘGo=gwz~+tFƛI V¤+{ln襹}A/Hm'|6+[ tQ)~5bOopiG~uF UB08s$dPٌc&[)ẤZyM`)5.F x^vP,HǏDT RS GcL)BX-:6$̫6`]CUݷlڶaN[׮ZAXv5+wko߸y[yƵV+7o^ W-um^Z_ڳI7gm5mVMh59%wyM:aǶk5jҢ5k7 I[o-]o\ߎQGU_U~VӶڣvhZ1',?N^ JA\L%mRʤ$Ke?[m s81AzY\ͷPE9L%-BDI18bB?Җ_%,BC5Qtbhx:,_Şy+N;oQ4ϣ^[ `&[CR:+ܨ:6P% 5De,OS LV`Y9ee+ " %tUqXB!}:y3JH2,} uxެ?o"b#,[cۯsg1رTٲĂtK.ȡF>RϕVQS#5.v>&-vO}R:)L V!L2Nh%V`oJ1DSBP~!*ő[R*NyUq~ ÃՈf)h#ÜGgha"IDR"6bw%+5~< z[&5lkN{hK$wヿG|˯d9Bl, Dc[8p6ˉY$,2L*ȥMADrH:IY"*7vN*PBW7!̟9zh D寥lU4":*"xh}J;QnSU¤UF-w>[+yտ|Ed%-_mr/v_=u ԃ-g|תdAV)D vWKUfщp,zgXY"Y&VAg`]0aܼ?F+? B]yt-U b!MhHJxXg}߾Ϗ?9@vтyHe*iGhhBBF+8Jn%sT&6Ƕ4B! h:b:;~6yjW$B1dĬeDJ1ca%)c[YAB `AςI8 CA XoRmu{0'1m$l@*}~WdBpea_~ $J2JX'4Hə1 E~E$1H`XtrX3)gI˰ ǖ~U35`6|@GZoW6{Q+Ù'Q/'.jg(t)ydRL=iiXaa2oܡ-IQ'g޶5O>fPa/~-EPqQ9[!R̜,arD{Mj(g(K$\r\f~ ۙO+oqnW'cB(l@ 4@/ 'e) N8-nrYRH)lIJ`t sKp^-RմYºbD,xx,Ym2"XFXEVRl֡ :&cR,ZoǾWuE⩉鋖ڜsnѿ~9-ْw>҇+3dYR9VdI2-u^kC9z,hԩ $eE'Xf&} Wޚk^{xy {hY9:8/"+Ϗc]oKRp"KurKtϓ['aPt=ܲܚ XdX׭[==MPy(Te<uI/M8~ "m8 p\ᐖ`8Be9 vܹ 3?BJ eKysf`~}Lquhhh`A`Mӿ寭5ˊŢƳAzn"lS)KD0" ƶXWS)j! @D4NjhWVqjU)bVB X,^/& <%WML0.l%(lE0Y:\I9xxsKuW?}v]2-K%U*@F,vD D̥/3zRY\wV lL+FQ 8# Ùc ,3[ -ͅۍ :g}SeH8 Oh8es'N#B:9!;Pl;92HS쫉1&?msuF A<2ج+bZ*0AN$+! \9 ,$PDY칐;:&!$+.{,~l6͎>>i.*\~9mQhZRi,pÇww?e |Kw% V$ T uDq:E, `bYʬfB,B8y4 VCD$bNI)H23ZF8Ua-+$"fJ*CjYq~+.w-WȄQ\|/y񶛟X#ՊDUvd/gUa4> $Ր@x3ǀd:R0&$]QBPq|ȰrϚ ?݋;$|35 z!PT Ua:Dekܼg=-}cZ81\%Ox8m%u#@eQ+aI@h>4щHp u<)`B^1l?46!6oh ZkѼgӗ0fnTٞf`d$S^Y:M," b rdG!'7'o'] Y UDnqY{pzfD,+LcPf!cEmUBUT`aDTy!z`8`\@ͷ5=~ԥ)I{?߫sMQU)T$Dl !x dFlDd])JSA2C_bK}`*CF<xJTU0^y·􃍟uSБ1UP> 7±懾/LM}p v'K%W*,8 B*xi8qa$&/ ١{夲&&b".$xE;֥68),?GuO 0.XBRܲfJ&a1IUd!&#*4":Sñ/" 4@ Xo>|٩jeկCt|?%jM"hCMDؓдjؠC[?qa$#V>Q)џnFaX`r5Gq-¤O❗ji{.|#<Xڗ޻{O_hO4YhѴ_HXZ[ː.Kbw*Zs)}K4X:q򘅢I*oȪȪX?`1 &L!6'{u:2 >=Ӕ12{CL}& Lq `" ۨ k!6bК 4zO>ՀSui G;~=,ЙR?=#ː!td9fGb00L̬MVCa`/ Ǐ߬AhZG9cx9)Z뮮vf{hBQ6? ԑ#ZdXMӝ`-LzDƀ+p*& $F8Ȁd!4{=u%uBbPo'q u/;K+gMl?xDK}cZ3~>pERpN.{'܁X:X`&bJ2CD aV09^^ZJ4̺rçGW>i`SBYL&Cº9!+QDꈐBYGEbQ &#x, IDATVre6 @D%qGbXFl glʭQ,h9=~nYyߤkx|\ ?qubgd8[+Dq#}[apU2#;#URIk9" M#Ύ$7ԲٳU. zQ7 AƓQ:ʪr/Tۙ釿$~p2e%LU&A6΀Dm""j!(ђa\p+ a A֠LDBĵ,h*ty2Z]@1o޼UXX¢E-Z`Am7pOVdh͝+r}b}Ucxw-my;toY5wq-V 1toYEdGbh_>3f,|?L׼Mo:~d!ZߟV0rرa/"l.@üDg wdZMϴxdYV:MH {P7@9|(?~$ GU^o]rO_2w|%Al*j[f?o9nxۓEmkHZ 3t=Ji-] 0dhR`E:똌[ߵ%bI,$0AhVJB A5UE'>Mˤ- b$ Cj6~Q bSNzg`;i`On|gGɀ>rH CzMTɖ6f⪷XO~)XdBa'L:T:T~=pυtnyȱ aV&e EYtuLa>oa2!7ΐкaH D)v{"S1@#ֻP)*R*(1 #20&v/T_J/j5}n~QPOmw~Do|rKjV:2ؾ.^_{˪]Û܁5McġS6" "r}8rDP}3!g ;ƞx-   'ṯx) 2d7:EaV6OW֡ :~ ހJUƏd,k;}sW-: |WNLl3~3ߘ3]嗆$8ZHǸn%˱5+iNUᡁVKԗ,ZH8֓d &XnqTm<#LJQG@ Ȳ 1 5qȌN$/f CG!P8ϓa)ّ`OJܾ眳zť޳2^qɽ~\UH|D"BS"D8HDR:[ ![W0iSF' %%33)?W\}CW涟xfIO%mҺ:dU)UĄk.-r^+C2NΨb*" !DY,Hk M*pɌ`NWa3HRR?Wx}xϽō.|.ifqyO<I~][v:6[nK7Juۓcvtn_7Q[֕&41 ]Eh}཯GHԝw;j/ #AsU]-ie0F % 9,eDXԐ!91OYaUL'6efe{L 3Ud]%bQa3T{#xQi3 b&mH[\?eI{?_zomvȂHb}_3{ɟdʧ2tIe *TL &p*&d=lID,DlRpi^Du< !*gh#0.tj38D x-"MTvٵ"5swj?u/#4\qPק_bjL 0Ued`1b`&P_^yvR^"=k`Gr=H) 8dbzoM{M?{óT::E)`-Eާ@O6VV9ZK&q,0Lƻ $o{Y&/Sq֕mkNO=WzӼ?Zp諻gᅃw1knѹkJZl_z5]ܵ޶[ֵعio][jmXs#3w]sۯf嶛w\^:6`c3wݺVo[~kjSQmƘaUn^(ln] 5598#~6CR;w``ٞa!BHNd!!dTو!dq$'R}pO\ 2dT4?iK$+ 3ċҰ,Ⱥ?y)u_1S)2`"忻7wNu_q3&NrJ/nuw3_3yʤ%eTVQJE)JNؤ"Wjm$ ̬YQ8ۋ OO7 laWؑRA]QY3"F"1'ayTaX$ tS!,4?8$t%%U@_?2)qezfDT?gGYғ>QɁesB2Ȝ4ZH= [wDgʏzdKzo>K2Zsv4e2U;!{ًw>y)px:4DOmơ|u*~ŜmP$Vr2%Ac^c`g* ^5>G}HD7r5nW(޽3aokU5Wu[cXkthꚕ;wwW|{Ε?չuvtމk:nF~T6fi\=v/(>Ǟy-J Is[?ԞGup>}T3bN",}(ɀ LO(a]>SL 9j<7l[p(o bGG4Y"w(J,E&^2ҏ;^̽>7╏Ɏ!’ؑSQ[P7m_>댽?ǜ1v`@k񍊬ºHa0,Xgh\5=Kw82>C9%+*qwW :NrA _X* &Ė^өW]Os=Xrޗ_r_Pvo 6=Z|R,"$0 ,HG6=Cn?T!4>ͯ׭Ɠ,߇w&-MFL%rKu|c[΃ԀO )K58xJi@F$֨*TR&Wyۨ!$}.^?EoW]g=ۯme/|}_/=UC8AJ]_]صk7M[>ҁ+Hm htOq/~+G;xT~qqR 6OEd3 ԭX9Fɓiˑ I4if.݈g0,yޠUP}5t&N%q[tz"HeχXWo{^;޶+Eꑝg=۟z ?x_7紾s.yŏB8dɗݷx>MeMFJd*4;Ad{tx #?,>]K@2&֓$!4Dl0VG J*}\ _S83&-u*E.t}}uh!F`vG\j/ (Ĉ;cȝ,3fBA=-:C,Jc[O'sd6SVBd]iEbMz N !ګ/=nx[tXbյ6F{qv~2B$)2E2:፺,`QSwg3B#[L}wW?]QvG+^wj mGf KcU;ڗ,1%۷l*;׬q߄xmBۗ,GW+uԘs6'nK^ R<K>ԡBԳVbPEx}H7`[ݾYMc0VCNt!JjT#CvhE`a b-I)UAwHdM7|WY~k~ᎇ };oc[ϟt!cg~7P|6Tƀ6U.rgTA4j NRC Ɠ֕,YWVCXuey3)iJQ] dX w,gxq)ڑ@u gT X x ts}|Vϝy$ ?3;\z/w:C=(! Nb+ ԑ8nt ,A+l0ey6?{knkYQyAgqm7\v#;CFZ0lf6BB8Z!ϋ+ok5#(l Pjd(\Nnl 9PѼds:yʶ_SCnq$2adžJi皵QI,m_7uSM;vmƦriU>֓ՎM*lvYc۶1`o3T H0kwy_@Q *ɖ"J![B%"a2 L!M6ѫ+bQsD`a g{"Y0)9xWQÝO^#f=(~?ѷ=s7{.Sg͵T7{ԛ7\q]ç/FNhE>p aD"Y8C+'>ː/3c=3*jvtca]QTX%PE+^!2P~3 41ΩcU C5CgY=;?|sf9|7۱w{`K_ua 8;yGCaUda?lF0 7~/ $V| 4(RƊ$8È⊵VE#OA$'CAA[ `1 j?#]tEMXT8oВvӁ-;"̒ K k??6XPWeX& H$s< f"ba7d 2d a_Ï>/T™tssx|c[ [z{݃:/ "׭CVkh wS/u+E7cH@ }L,0جy\7c2)M*3tIN9ͥoݞ(0vZkX+u Ao::s6T!lɲ*$^^٦L)A(*ʼ*ER\6eCK%(BSH & FJdk'*$˪@?2I(2:#auQW{Nz};}ϯ:?';Sy˛O_^t֑ySW$C İ-d"cg` I &(} ?w^xWU/ݵtɞKhPmrfH*l6q7TjT4#Ӌ%JW[}#-%_i mm@}/`¬&&EQ#.\h%+_<瞭'JMaEi{OHQ#˳:;g٩ySH 4@/lT$䰜/2!"Rŀu!C+ʸ+G u%$4L`* NRYrH5'DRWǮ ۼ(CVX9{8v1La B[Bhbd ),8YԄ#"-/!" |璮@9ZbIum'DL'DZ*)X&HY`HHBXwIEb2+X_hIYҤQ1 T-œW97^v}~>|G7~C:8wAdD5 &%DsB0xV4$݁1}*Kd,Xet IDAT$4Rkyo;m_!OXq9zB01i=aV &;Nt_j&ʰXD:y d Q4x_c|my3n@64r>3_|4mwa0*x;{O4,v߿lh`nZg 8OXX,&6OOB[ Ud2  Q -Pd&9 GrjȰ ! WQIq$k.`, G45IJH^1͖lHp|D8ɠ*ҭGͤ  SfD!DMNY``"JiHf,.I3\Sb)"vsk=A{?^}K/K.g>W~mXu̟>}4z4Ϸe)ds. S[gj%׸B!C>I'\qPAR+;?_5ރ#gȦ-Esf`F#xezcbUkaL/჏:pWN˯vs{v ֋_z"c_UЦ%}|,lhd!@%Aqaξ, D6Nr Yd!2'lQ, P>t zZH,fm@T0K¶I?{$u}ܛUկyaArDJِf J ++fLˎC"[V,Aˋ ZAHn4Y.@QZIQ@ ~T#3=?nֳ_dTee{3+~} 9!YSv\gY\Wp*n(H՜lzǙvose?+;a[\{ ٍ>ɜ p w;x,A ?#!5n7'XʭD+ YZョ>~[?[_89w}[߼_?~5(&pk>`G[g\&LS) ʔ>pZGsxl1nHt`#T/DcrUZ&/, MZxXpUFK|p[B 8D `\so5@?}X-QD Uap/6=WP.,hJ܆i׭c@ )ZL e)9Z:1獌WK>hD|RT|vU"rD"n:BP%P mB5g"!ΈsEQ• `kOH,qSLpbgzXE=`8@#SD>=캉UpRT2Wٍ/{eǟjR͏̆dP gigUlxNM'>l75؂ g3! q[ Wk ReEU7EV@G:1ɯVecW۱?8'D%Jx_sw&UOs!/E䡻MٷPJLn5HĴ4[e#)hW`͙7-\cb;T}w!Sd0|:#] @ UU-wHU=L}2ωpEZ1-p *J]䁼; iYk)^℮<9)bǔ͛x}HJY"4b).ӝgL#jXX%528y7oil%$}'D޳\TIA~_}we u:j莴T>bg:B~v6@n%[(IaEY"sDW$^wv#ŹLG_tGYt<Ůnm@hwhx{KNS]qI;B[ӝ]zG:,QD]6YרRO%T"APG^\JN8S);3DPpU4hZ~/$DfL(=hcRNեIfjQ$qa  lp{#i(YmPdUj}Rx]uM5b 2[GD[wyy5rBF !GtpgIҐJL}(r+c!&F TV4^hJo QQjv1͵CW܂Jrm)*˄5qZ5MbjGVguECX1'1$&ФY߯fjna쒡Koܸ1QF5el!|ͷ^W}Fv;UP^~BZ?{~ff԰KLg_Ћgt܉/<҅'^t}҅'>}/ݖ(QboOoZMn\ AS_MQt(@Nf9y56*{HY;?SP72skUP(Am7 a}Bqc!4(ƍ䪭]AeEHNM[L*HD$ʡGFP&] ń>*| 4$v=0*DarQC>"5psX>H-TEMkWB'Τب%drD\D"$.@&ĩvaW6V0-$˜ٱ|G3W} JcתUSJ,Ueڼ`R%{ we&k ~8"0(fk1)et'A)݊u=յ5յz/%|[Ѝ=҅m!E;;u\!Oo\pzg/=̓g,>/o-Qtqn>բl%Kц͜S}7Q%ѐ_J^@^LۙDM 4>0=%;JFMv:$pEH+U{5(aW)6-lڸc V%1i[JѸ*L'JW#\dUuM..3oFl@lFQ:)uT0Ƀ ݔ|{u&kDG_8wĥ QbGAQSlS י]E0--oQ+..#Dt~/5Obs#ys'S/kK[S_g. gӯ=Eξ`ѧ>ؙI.)Z5ZןzܩDO1zϻP[1(9B@+ w_NMZ'v*.o!kja?G d@ʠΥgL(Sm9{C&y/#B[&MjrV[UMlGj2p|;)eq 7R>|V"j/Öp .A6Gag}јb0%=" CH}GgARm0ile&.J=-&pó^+QS5\JH|订v hي݌,Gj5kZZ\;rqq}{粯#o$CSFo %!, KO|Q,mWp,F^y'1g.^j0M!E!_欐DLәWą-6&C#ɶɼ"_Vr *):H7ȫmCvծd_k/|#5Q~If>ko=ȫ'uL^jR(& A:Yu>latZwiC:|\||Bݔ!nC32hd a,jd˹S)ա6իm逗6jTk'!f?d[GDSuAU7jvŚuk-y[WpkrB&5z56Q!$3-6jf#TFn3Dg&믾K_^3_z^eaSX_>)v׾Z'?uWmT ,Wvʹӡ{`rUOêW莿pQݍ5m5Tp.ɭ|w]!ML7?E6gtGzoPIfnlA$RQaˮ׷)H>5| `Zd)uY?)k8\9Z]}ߜ$FSC@b5 6l5E>xZ&\m`mv珼}!NNM`f9g4lp99D#8#̈jS uMR$%ޣX쥂'-T.OtMpljݠρD<ʾlAd]B Q8 B>j7 T V&ۖAYP6 @Ş>S%ΙS0;y|0PE>'R h$0 1ԨĢlu *9y*O=3pNi|lFosK> *&R'N÷MM}DAHT30-hCi' Fyp:cB RAh VD:-Q@MjL?!O_?y'Ƭvvۿc+Ν;~8;-QD%p5W~w^ۼg/tdAjY׬ ^.!D5 ilK\oKVIDmvulF]Ȏ:JrFމ JD(-Ҁ|/e4L 0 &8UI,峦}& JEyLHiQX<-tu8]|@b+" wR$2u;{k[c6v ǎիs]wMo%J(_&:3>d`UpUD NXD*fޖTI<˦ݕ\׶(@$TK>af3l:(">1ǣ)_cuAL 6(`Q6`UD2nhV:PYJ̙pQC)'}]*1Q"t!hzC{dcNKzA9ω*._F'8K9n2II#0SțRjཚ}gnD(=,aTqAU-Bp2Hk:hI8"nSHljQYi;򪆠Lac`ń6-1b,jsLPa7nn 5xݲ_gOgkw'~n?׷?D%J {~'~i]y1}}I@NLa#^"O1H[X$P/Sϙ1h&C1 9`9.T-q+ȓHT.4ՠ )iGG WmN&x|= rٞ,Pkj+@ DX?׮RƖW,j&c-V y5dE'$h !ߠ ɢlc>9e0;pa6;Μzh__S IDATh?h%J(1}p#UcR\A"(|G|0\( .kuy qϳ&yOr_*EZ\FΜrL8rm3\{H"HK@:b"#TF;O%BP7tYD%t&Qn|NxS b&ai^]Hɨ žJB"D^97KHM^k](-žu?jKكf|%$ ;JnU|ʩLߑs+y->h{}Fz ds@AQ%$ֳ^yidAqS5f@Fp8΍' B2up{*8wɗBkAF~ji`n_~?Z/ a%J(1}PɉQ$!W#U!*j:RpP!io3v zV@+\62Yj̍kB匎2O3G$Rd @#"}MQHU B^' ɐ+ңC-tRnBP^AI?r:ABCFՎ GE*r(VaV7iQ3*RF VۀXt:%GTdB ZwJ(U8j ۖx%fVd8@ EH9 E͕T@ b'o-C@އP*Ev$QGA EbS?O}E|7?Kp=ͯ_?s{'ן?O]gq(QĘxܸq#<:{3s{DƤUF(#rv=WnҶbKN lU' wvI58V !5fH F:uTs(6OUGr;KrW#5Uuk*8k"Rʚ`;w䉳)` )$=vEzw(Zgl#dS P-A5:4tO]ж/qnQNY#&Cf@"(&Em'73[O)sH "J$+O7|P4:x/PTSsB*D S!%Z ^voHA)ˆC`FG)g1B{ ?<ߩwq=r z 矾ĩΟ9 Oc/]c\pīOy1~7`3K(-B}{pIwyx*$aVWk`lO-<:7xv}PCl^1AHlcIkɍV0V2I-޸.pNH2ZYQ=䕜''PFqA `*eN#éTVE"N=HA1 6 ;dT;BBH"C"XwR:D8R`Ml5-4e~@WnmtL" ppվ WF¶T`ڀT#@vy|}Cc UI"8B]"pGیNvHZOC퐫 YxԇBkK?9n}ª!j ! 6\tS3a$F A=,}bM-?Iaw D|å O:x+/wd|!6mXb%Jl3%ۭ̤*I2cr5TFTwl]h?Bh%. \BgEѭCYP&mrơL`wQ>[{K*73΅R߽\=68 1?$ Ŵ]`3R87c&V<\gÁ.'!J!㹈<^Hı $Sg3VLx] Qp}XwɫM脏v8T#!)j;T8Į9l}<9"&䎙AK~yý]Qȵ-8^os}])^l^ \`T2 "]Kq*3fvbT0DXn+" ZX]҅DDD/,>9OKw\xs].vo-8wa KNӹ˽nxWhKC} gzgr(`%ir6(栌ʪ֞z6,1~*ب) K,ڇhm{D X`E05I5nJ$HuS͏jCڕi9)a+& =mS)sۛ 5mPN=8':[_Fn1 b$ 3q>F WhU7qq$F67(6ejWQq]㺄-YV,oI5nhxoH5p@PۄIJt9vC Euu?649N Ldo#Wk7V-onY!|J)uT C]SVOyUɾvʬ֨1, kd42j|y3SdYV  ZZEom2vPFO魎8sQɡlyťN|£//~_?GO?t.҅'>w?ij/9\~Ï>]ܥ O|/?gq]Sgv%JxnU90*fE5U2԰FH-k iJ1T{tq O(Gw+'+Z Esl lR䦙!OLP$yΫ ]ߖVʩWrnXT'lW$8T sMئq8aZN; sH«,Ƕr7L;u JԒ9]JqT7HVԶd#.(y .5l G !V}L$H"@9Mr6v #F( mHd"Mt抟}coJ0* LK0)H8spqs_04EU$aB/P!l2@IӸ*QcbW~Eg;ȳ=E`n,X|F ?ݮZpzxFk;g %JL =@`S>í#fTjX+P"_mʔEb{ mYH)SHDJv]R!x| Z}hc_jo;s#a]3FS0Yv#L̸Հ2^OSQt]cN\[M+5W"E M y0,<9lkS}{9y (EպJ- զEץ4 Gycz2M}e9W5/sN\4r=P>1IAs*m-F|ܛ2Gv#&( |F aTu[qmur 5:# CN3ԘBIO':MN^]/<܄Nƽ*v`R2AX%yEμդ[0nnCQ!5@$ Jb\s5qTwN\٫ɴ,qV,9wh*" @; N܍ w[L@ǯw,M}3iډ ޸qc&1*`:huuk_کS9|ȑ-z/d*GtÇk%v˟xj҇Dʕ+^^^q$XXXE_>`pm>CRfXJf8%B,,^nN' FN~92KŤ"3ϫ$QZמ8D١ S!b82ĎDȦU-UK-U Dj7HpOL)sh~b ";BL"i|ioȷah`$j(22PQp$פ0J Og?]pVv@YW`5IX+!ܢIH,$B甏{-Mo2?,)XD'66 &kɚ4RFuk9æqJZ)lc$m8X֨@?i UrWd8_tkmz_߸f[/0cLVlΎ!+ֱڙp>oL%//?Y+-Sd,9z}ꋷ+DJ(q;DL^$B#.FE^s`؈g˙?qT}ͺ#B4-`-&ͪKSQ1Iܺm ك\!  *;TmJ/lFmW'1#U\ŕ4s(e.fH!İzg?GueVH`?#kcrU)CUׄJ@ $ G{{ NB1vrj{j(aeHA'@UbZޤER>V% %4bQ6o:vq36P1`(*EG;IJ5P`ﱗ68RGtn{&_ʑCT9;5VŰQնf-]u7~>fw֎ZCS/'I—E%|p(QDH'=_P5jf_ AV"2Ŷ^ &ՌӴHA^M )Y )x29lӾG54jPI`Rl3ljP"D} 4(#ݟb/A?#T*[<9yV0ES:*T"tod:צ8^p`*ϗzMkxeonx`wW>qޮ"D ⵫_'8Xooo-ZD%/ S@l`,q*956q7a[׋$gzwq$bvbZOwYb y(~SjG iQ#/% PYմ]oն|wb U L[ m$)Sp MY-s.՛5|IX,T%@ FbR& e⅊ZkBdԐxh#dv[ #>-4-T":2 E,(]u 1١P%jp_rīhfTb#1 QkNmvyj}a-^öepY` < ե ~;NXGb~LӨ{b!{߷g;ޔv޷~Ɵ5+;ݫWGF/'>nE%J(Qm@3qod9M:q1I%r3v`-9Me*=`7}/T'KF7imH63K.y>B O塉r.eI*eJ"DM^mQ:=C,w5['/$1 Wo`$(=dG`uSe! =˙ 1'=U4s _mK[pꍝ8]p.QCM9PF^Ebe*ۆ -#Rl IDATLp)L*p~wKfGnAP z2Qq1}D=`j7C+}G/_ ul'K~%J(QjmΙ\mKlCc2ðZk[grJ*DBJIU]qܽB۴@NMN P`u?L QN]>yE;IĂID(B9 $|?aaq(R|ǜ_zBnf[j6dC?ʽ0p'̛oL8A!"@bŧ6 _ PpJQfiNwUrUU5-瑯gδyY8冮J;Ǩ5g[33C45VՎH'nQk_/T1*MzgDFb˭x4X;?d?{/G|\uww'%ۗ[~8/bLa (QDa1ÕPebRߑM#rhgV)Iڵ  JN"i(n Jy@~OJ@f (LZs;䵻x=sn ;W WedC#ߤO"~w8"dt IΜimi7$¤`l]/{ &e7x-.J0Liѻ+g+0?舝r.Mm[H A6O~}B>dNk0nNB-xkya=taί㐉4bwhfxӿ0zCœ_{gݣ8;ﯪ{x(aSr4e bY%@$̀ Ml}ȱe J$;&Y#9"VQewM; Ä0Y皶 ,,HA9?g0`@T}NÙBuկkzKz7?|xnK}~_I=FxIuQ[o:9x%kTWo* {ۨ+TWue–Bc0 `!8bAҩ,d \3%q6:KbK.JdIږ,ҐfkktN'* 9tgɏQ1 R\*D<.Y;gvs )%2JLyjao4RLĴ+f|+ڂ[CTXÚ9}/8U s'.kqa?f*w:ndܗf{J ?L*YK9M"𑜐5#Vsh[?t&=^[}N=Y))ŤB p8*XKɥ; b]tԫW5_'QfRlo*g1g}{*ٖO,D :vAͰHh XK= ]Hq]XgY(Ev=[27_Q5κ_k<ݸy暦L;44$.< w~tύ~O:7y%S϶l5Azxu1}y_CȿR]-Gyc@RH9} D[BG,!8lyJBSa"Ųk0Hq L%+"̋la1Kd3j?1+Ii33yJ>:QCG߰, -%Q-橂A†Skhdab%9-͐2p23$u *7䌄$dYw6mx~x'b^ blX~4W-J @4(/%4kU9xH ,i8Js VFlrpttHu޼>5}jH*{ۚ9ޝ#{羑.{8u}c'ҩ{wN?+{:%,ÃhU(f jx(QNP_~RCx㍕rHam׼ EA׊D0 i>SAQbW*sIdY?._%WIORl\#uA݋xE``*IfH( w`(ANn%`F!ǵ2rƏ׺5^<-F"i9_ذl}~I ef Y1ёqԋ7~ Xr10"p;׫˚lh*[w8yy c9f8N6GAٺJT>;#ywRpr=ߖH`l+1[\t°K2kqb7٭EW]Pjn_oMg߱yKo]ˮJxʆ0T.v:SKd֥ N?vpFؑL>N"H@"(~V"׽Gf apȮZ VFPU%@ 8B^ sʞPYs5emk[B 2`½x&]XJHq!}-姁'm KuTWHƔs6X 9׭'bƳ"ҏK =wVah…=WI1Z6'F/V Rt&F.-ҒH-U4+L?bԻ֓(~-'|HUwAEf? gpki;eռXzy0;h2[=*3Me'Wu %`X W26?"ٿ8 1KK"I$'kӣ91'}oQcۖo~腉_{lko~_|r̯আstwtٷ'k$xyVIu57ڶk׮m- 4F%=oM}Ǐw7"ZRH9} 94$`A**ZEՋ]HN,tD-'̲Q8DttWŮ%vSt n ݹ +$$T-?0V1m+7$@Wi \gs18{hXH׿Wtii`3oM]Ni,*`PEf=u}@ |nB` PQL_G7Mb:ԋB"4Y䎙&LF~+Ⱥ Jbq`:b(ڠX'| q*S *D#^ 2Ku]W,CDi+OWIxM6 ;,LD瞾d%:%GF8/Y%VHt}<җLy, }@fU`x;Ay-@B̍@GkM vYBBG+[Xb0YzYǮȸ]ÚI5Z"VBdBGrWb _gܱt^|;etVu1U_/ϳ\•0^T5H9gM_{YB CzemIxa=^pX@XEBP&\zx"7 n-ތ5U/[F_  %}}hy?n5)_(4Թrw% gWP] >J?j,Χh[n}D.sʴ&\L9NDt?::޶gO[v\ud> m]"g=+Q#w$@˾݉b-sc0VpAK.$xڅJV1ClMBKb]HQ )APW H/+BhRaqB0)K:2"J|M3XxZ81}]bPѹF@xl_&  G54 gE`Ȍ/G'09UH?K A C)(:шhqr[zk~aEƇHidPYsk~^5xϮ2<;[N36B`0\yT9%$JA `*-MaAB cea@$%S֤"B&KB Bzi ӓ Wۚak2Pa&e=;$ӆuq޼(9_2!`ېdIl[lIR*_`!` b޾sNt ZEBt4G&u~(MKFi{lFEWk-Z6,$-}&Zҏ5MzuS/tE`BD3a0' X#%?dOf?1inR2Ci z)欬9G|Eٜ1ق0>h"iƁ6 @ mYUBfN!vQW$ׇb|VrP 8P#)K³U, ɦVMbOh[ VOz\kffk‡ɯ9Ϊhjk/WyD DljNFY:"< eɞ֤bѯ}$iHGi`iOipV͞dܤ/ jd+)B󠀎%mMyr"F,W V $1ml:!|eʰ=l KJr}kI"T(<& mF6 [S *B/01=1cqh u؅h}ږ\EOx^6P0l;(fcXP쇠Vњi"`kE-g/0H4 3 _<3Y=)`A:69`` )Bii5O jbBf.gbҏށ"FK""kr 6iYJ8^/E lEhZrsAQ9nij7 U }9f#j3WVFu(J!ܾ󁝇>3xwF?4 J~~?&*Lh(dG%X ZRx9f [% HU\{t_!C(6|96CUUQ)5k m( ')x*sr/S2 WlX#1SՐBYg#r Nk"q<PHҶjIlL܍Z M֤נm%+@< T,mfya 3 P)fv(Z" Eyk,<-\ŤTX /|mʚ dm'wٙM {HFiwlkϖ;$ܘQО`&,$̤I.ռDާ8 (˥~a&^ιhX`Y0C ,rtv؂-yp|.ے,)ҚkLӮq۟:9|otч!Ǹ ᪀h0KWYg=7ύ=ҁtȭ_h$zMZ7Vco mmrrzYs'0_ eU*lU(34_eܖᅁC%2X֭&́JYӱfX .ױ|&_S`$b;|L2etհ]ΥK! !k&`0 ٞE'HfeO3Yl+żRAz%q91+S  &.ei9洘 ly)XX{`YX,1 %e&k:B~ چ { 2 RRECqо0\*XmL̥pԫef @33K 3Vf M::H^ flQreA(0!2~w F IDAT .Ō_j-@ʌ^.EGW#3  םQU.HEuk5Vwg"DD)1o4S%V,]!Uķ3Ȗ4J@% @WC Zy*0 u]zs+r `0 W%e+&2Al|E !% (A٨:ɉ5*mfg3 HG Z5#g+p "(+* <@EtT!M^[Vd\4aSvaTAcEm!m)dŞD Oˌ R4xY.%wL&]i*.U\aM)ZVr7H/N& %'kc7*ZΟ??E!BvÒ2S-&~$ؾ!_u+f."_C584&U)qq m~> M=h i& 20.jyd_2to[󁎑 h﶑ee?Nm@뾑݉TW[{ڹo_w,@%˽Dww7ҽ{1`뾑$Ď֞ZPp1 %9kyFwSU4g 7(inlkVv[[*qZL% A /R5;HP˞T7' ]iO!%Gct0SWe.("4/ft9( (3Nx )!`uƉ|n6We{A2B,Gh$O#y-{w ڢ -ՠBbVY"lYCRR +嬉If؞@ 3ڪ~GƆKmY)dS}}"* \ Lˁ R^Ĺl fi.q0+'-(1' \"±QcUW}VzUƸnm{۶}D}蹿7jܷ>҉û38p8ja= m$vܷlm4޶^lmA+q !KX/KB`I,H["`Aa(Z6nW db᪕E1|(TU[PC$ Rధȫ bbo7U&ָ\j8O\2qB43AؐŲr^yY02j[gX@EɫF;hg6^RGWg43MvR6(B?ᙉbL囵}MS3k) Be=x+K\#r^(4JbE-2<"lKPtmy)TprO)zEYdQ.fFڈ]/չ竧ΊVA~ָ0[÷t!``hȪKRؑL>>ލ֎ ΠSɾ # FR8ÚVQi]ҡ'f$A(8(vމ1p˰!imhh{ܑ.4E^cHŒ̃x`6aAf`Mgu57wW:"$xURtc*pR5E!6lD!%l t,…Ԝ]8lMB]{PfRTdh/%p6XFˏKR6){e>:B+B݋3 hfڏ-~ $X .=TrZE:*H* gA:*TҋH+G!,e.O}r[<=E4&O )y#O@ R]택:\``)cf _w*Ҝ;D -*q 1{!2b"p+iX)r,"3[,+kҶjdPȚ yr60[bE$س-x);ND>@˂Q#%3S@I%S[$EHqV|xX~}LE[+utՃAGMNkTY 9f#CUbQ6 bF`Ip*bzy: YeUyFp&=." 3&jQf=YeB۞o]|1S"JE\($ ䷄9iWdf2].ͨkU9&H*s88z`I0{O`;D{[{N&U=Kiiqi~ 4VH {WYAυ*B{֞H n>R8{>0K 8^*"L.B4f;fIs7Z UU1WA\WI!ͅ ¢jRLLB8ja,x Z8fsԂALJfT:,Tj$knW&G 6o:t%_Q$eQ Duf0 H2KY 3lPZ=T Zyc}A/^tu_gY`?ߴ~c a^֣/k+*",#~9qDKKKSShSSS^GwGtxH?y',hll\ a={qtt@$ɽVy2K/7˨j}{㑁D.1%S?IW/oP"*ЮrmM*49BضjQU6A[B U"AFdع)1VEW[L=4f2+qM\Wu6$X#XB0˨8gGbɞ ?rXrW(kgJW?%T]|>bGYSy)$ýt2 2؂B \wzJL9K t<4*dAzE&u_֧\6NCdle[w\ꉯ^&+#ſք+F/-4b~ZQfx{>`[TW)3YPBE-&bkV \b9|&_RvȹޣoJCZu;׿i$tއxhQx#5`KL=7߰an4 >q۷>lNck1 _lsv[~Z~bd'?}׃}?Wk+2p)*sXŖXF&bb0%Yf5틌JnE[m3G,l qM}5{U"")W8TQX,x+s/56$Y3 r[փfX\!>DT\;gnt?pO tăǎvFwIS`0 a,[;=ϗ܉o=X/xzϲG}`0䎵PiyAQHDo[|K۟r`0 K?Oo禹By1ٖ .>g^ya^Tx aϽYmg۪)0: ~ѹiCXU aUc/}=א+9{7o~ $*vZ4܊:sgNVu,iYkY':Q+2jG+WRlCЄ`0*Mg ,fG:EƮ'5 /Z/tcێ3ʷc R1ɪ% +_s-]'7jEY 1xAV>]e)CKRJyV~m=IyȌWTO<ӈ>= `0,~ؓ~u>wp?IG937 ۑŴ\&9ʣB(-[,+~ű7t;I߁w݅HUӛn''wۏ_{k aO|_Y'bA։d~Y'bTdu"dWXcSߞ?y;~[g^+E{o}ټ+BNuF_wY'녵J\1p&4o-'R 6£O|  IE| +g\Y'Kus-g~e|jZ`9B烿>ɮ]?qS+[N[\O=۲u]kdm=R]D=o kM#kzJ%CWoz0UtoWVȮT1>TfMm]t^>+۶<{d>F4 `0) oc\Xb+&c&xCh󷜼ǃ%I1kEff>ޝR]#<=#;k?΁vصG:{K%vt~;iөa#-NgE9tё^>+cO]+ ; +`0 J;@`@anlb]9F۩@q2Iv<Hl?8*OǎdHdҹ+z`8s0՗LvÃg%8otoۼS PDo^F4 `0(555S e1'btz`>=ԓrs#C$tG0Ε-A¥jnܷga .u|ʻm`0V] ̪fU+Yҫue4'n9{,7q]ڂny -@XN:R&wux(/տdLWP4/waAtN&18%2w^W:ջB  W4.\8uZKa0 UºROz6RWFfHi@Ol N4dHtr9W!7{seҽm1Jd^i;1r;j>̕;?ˬQd{:{։g&tݏNS0r>ůky2=h 3>}޺pZb0 ]x2LsĉѦRݎwc:GwG,5:11ظ ^ɤөߋ=+Ǻu-SԨ={qtt@$ɽVJׯ$ϟ?wZ)uwt`0\+ CO?,;;htѵ E|^ui..MED5 ͦMn)mݶֲ p5Õ[t]c[k!V HӮ={v˖-k-`0 Wc-6t(bXS=V_?86Ecr̷*(`X{Ξ=[; Fofesjrm1,ďO3wݿzg<DÂ_͢VԾ?3|kWF!4 ??g>{/ĩ)2jKh( <ݹo|]l}HaA~/5bwNOϝ_[,'+bXpQ}g7'6Ew'XW a{2'Fѫ `0 xg믿{y| 8055UnXcm @m]='b쯿~0qmYP[pDâڵGɝfQWXj??n̷HR^ի\![raw,;a0 +[~ _ 'O~?ܟ<.u lO̗L܊O߶C|o4W<NCpd=k*NOO;ДGmm/LG=}-77rఱ!]j)yn0ր͛7ћo[USSG>R^z2 j(MmFx`b6i1,W>o[G{n Vz.\[_[P=|~,Ietӽ]mfqR]m]R]4`0\G>`;vݻjiiihh馛.l~mG0=v[7i1,/?o}}77pO}>x{B?ͳ?g~OY|*ʪCK/466v̙|;m۷vmuuu6m8?弝E[[14`klc8wt+9}ӽmC}pV"MqR]-Gx2|b:p_@yhWza IDATb PJ=ϟw̙{_j,g?kYF!G~bdx;;h|6-x>g$'Fz~yϓGp=_PbX|o%Pl ͢(+_}bbb^lw_|qeb}GwGƽiN> 5{ۨ+x-ɞՕ*6r`%J洠yY޶z6-k+2S]D=o϶Ι 5gdKoH@bGGt@ Uӧo6q鳟 7O}hY1恞MԹo-$z-u'<8<6O^-sSS羵oKhuy$zU,mmmNCCõ^{=544@cS<enm{۶oǙH>صyd_K2-S]=3#GZ0.2rtbpG:NUactёϞc׊#|;vz{:-]cKubk &9 OO=e˖믿7X`0 êR\!t]w|||2tO\s{zߞbSvb]@ǎ tܕL#=<غd@"Wg2cG2$x7?klToWWcC@A.orFA ^6! ba >h0>X^{G}G:˲yu?88|7`摑'N}<>>e˖Dӧo7H$_p{W^y%Cc0 a2jQQ[[Yl׿/VD&SvbE,\!.rpH ÃםL6cpKdG9p`>Z]={ۚKc*s???;!aff.Z566VSS /h06o088//G?+͛_yӧOK)o_=:R pBfK.={˵[Ї>D Lo :񡡡ᄏ4'NhiiijjmjjʰISݿ{5`XΞ=8::ZWW ^+rq??}嗯}cUUUΟ?mŋ333MMMmOMM]t)oܸqbbW^[WB `x۱DZ mb#"E{m`ZF=ye;旴ݰaC.4rKi0 ۀ ӹ3La!D.߶Jstwtz[0c[k! *;FGGgff.]TA`0 C)F"Y3gμ+X|)qv2U P B vв@ p_Rn޼Yh.ҥK ѧhh0 nijjjŅ `0e644$_|[noNLL /-qƕ uuZ8`jmh`0T$;Ί]`0 `0.ˬCXQ„ `0 jQ2x~*F+1 ҩ^k;`0 60 !^x뭷.CF{R]D֛9ZmDDD]dޮ 4ޮEeL}+n0 `0)Eh4(Ƶ^}Cz8'끝o䢭AzxrL>μ#'l˗dmϑeLua摎W_7 `0֐C8֖?vC18:|%XVgJeMӡ(0l{1R,hwV-;*dEF?{g9]jmDwwwyB]R[=:04 ÕK/K/k-`0 u|]i|ࡣNzekbZ3nm{۲K9p޿=R]wRa#-N9>ҙ#;k?΁Ӆg|<d_`h<ǻ?i`kǎR;t۵*a޶^lm`ٗj0p~رP N~ $;޺o\9=<غo2 [GcG2$8t޽7QM m/P$)PGM`AmIōzxIP&+]nQN+z;eʟ+^= YLS6sUz:痚ڏ~pޗV;&E~ٚkirK#!ya5<s;6D$:WiZNUSB^YVV-STXƌ/CB&!#媡C.]q $(֘ݥD*.ܾ h8Ua[)۵r5I넹|_ Go'~:ڟNi`k4h!i4@jjxTc~-qn Z;vlڴi .ug'>~ŢGzOAR£?#kda݉ƺ+# !o!O]2y%'sGc^q$= wm>̧+W 7&6c \!yaL!<]תl`kl<_AA4b*X,L9ڠr1"րN'BJd9.U㔋'ϗ|ȫdH|fSN%;ծfz61Dh2Н;ue]Ʋ}9_,pf&B{W]Sc91p~ln9u맦-]5Wz^RDwf^YYyѣ?;;;]ۖmcG6 L!h|*Vbzc.xcނo]%⻺ޫ//V `R4/"G?8(R1S*K- -2 }iozz_s9ç7|.~C?}7,17h 2)oB X0c=0WAL+h\rmn6 Z.uڷyIz}QQSLI.RݮZoM!|-cAxbljyyO=H2/}lB<|hNzEAI˪,~ͥWV%NzWVčLeZBӴdE4]&PlڼJeRM0[KB_O*#XuR7<3hLA5`tY+ \Zyێ#篝pL~φGߩeIΣ@U߮Q~vXgrGTxpJI. mz(0"̤l_g MvF K=(V|,٤5Ni,d!7¬T)fXoox6\rS6U(H,RkeX -=ump deOmXOLGe&|b . >#0};HT,惴[&x"OJCEpAXzښ-).odgjY~'΁!ƿXNĭ䔫9ts^$uLD=X{ 0C08@NOOxh5… Z?t1;}>L#i 2?fGq)4o@y=lGylo(_krb6Pi<KGV.81SR]UbQo֭TyŹEr3ˤOnn|j;daJظ.='KOOO4q]'7) e!x W!D$ōFGqc1I1AӖѢ_܅"0s\)ɗyUGJ_~loɚ'V~5{_ o?FFF.^b.\h"{[8 ̃9+:-39?kpe)B9zu Gh/3wG^>dU*-vs',DcSY2:C=2nR]=Ni+UMzGzCs|- ɐS!QQk!T"`QF/ [l:cƌfK3!!%O^fӗ]} Ijeb(mv9<7h#X7Xہ_W7kl "0 F+7|aQ'şWUqsZJ<%NדH$2\3}ux]o| =ȟԑE!仆椤$L&k2gO<(ill틎=Ww[^ "O|R[s잕/FccG}$nSх [GpY+,Eҝt'IC%@%Y|=8/$ZQ"aY1wzQߚpߴlx>mwO72bz`^{  #C9?!mRr2aJy r&Gieؿw vipo;Y3gajuE ͚O8p%&&\222r…]w]NN~3WPX{o @EBu{J,9o^b珹c0$0mSSylƕMcsxx췧0h-{دLj%{S*e_F'DK,wᗒ&&G4 ΐd!#f#/޽lNҌ@0iҤJKKzge2/REXoqa!̼49`9 }4MkNget}~j}_M=(VY'JįOׁ$(񱳉,w᧒lcAP#""8MCCMQ-›_W_͘5WG%wK,"--uBhcK~%dM`.z3Ƴ,!Y{]Nʘm:'(t=ʴˮgT}Vr&CJDdr#.]ܻ U$Ru-B(Ιv˗/w\z&$n~Iwum!gj7o-}h)/o%?΍ǓW4]&uT3Hh 9@+s 4MATeRHhqa4m+ky9B.8eQ\w"d1(BN<dC^gm%r1 9w{>}_xo_~P_k[kOOOE!1٪o複=X~l i3m쨛0wxD*.10MS+< k(^NPQUD#5 qcaҖn/0o#U )Sd^+/\i:***&&&>>>Mrcccm!BOS9Ag_BC2=hB&>XZt!z2_QzAIQQQ !BA>dpjkWgkwWkWgkWgH,M[AD@GGsOKg 11Scp'NTPiݹ w [ k:l.22 ;QZUe()ꊷo/f{ 9ڛ]Y8Y]^65_ņ*b &H'x"oݏTPȷnPAD2\'̚.\CgJѸnО{8܅SyT/&ȃ\)hL{N B!dE;\jhh;{b۳j>:pԮs8{ `ۺR 577ɓiSӞ(MMh4@(BȯcB IIIm=6Ld~L!BBz|eS D9w,BΙ/1Ҟ5G+#P_AB!5Rץ|8___}ԅVvҕY} ?cGGiS7n|"5e/ /jV:B!Py }5tdmo\2{5˲To7y2m*s?>>.T!BRPPuVXnM|niizNGyg,8aM4 IcǼmw+MMMSL.CX5yAdFÿӓ&a x7_p8l*p [B!.|ϋ-ot=UC„}h>a>6l|ª!#, B.ˉ>u4`^%9˟0 =wz 'lٶqk Bh r[Bhav"11qWXbŊ+-cO|g _L+u3)-u_!?օB΂Y~cӎ;|C1{Ƈ |TPPuަ&_%{>4Cug%LzHH`8q@괩g!&T ;σNsPya>4Q/ːѐ5o˗ ~᷅+o|WZ.s0 OVt@̒C[BMaOB(B \ϛsu9[:ڳW*(#P( r(L$s,_.LDAdZj*Hd PPˠ2FAvq`|h^G8d 8dtR31p'o6EP B!T y V~*G TɡK+ke4MrapȨpkyxxW{;=DҜCX rs5bK~+k2ӛ{{ (0S2H he9l7RgSɔS.{u9<|?mFD/'W6-+ jۂIc@Ժ8FаodvvZ2>x7M>E[NFk=H7v'"P6`J˛.sݑjh*z`bdNy ˤvi4 )iR)tw;heb}iC>(TjL IMIuŝhڠis7KɤGls*rEݩ˶gOa/UJX~`mkK{*$G#v}39RiN-xzbvқpcO؇#2p2ʾ1}uiݺܢj$R  _/ s7GJCxjpJQ%jk1,Jv;mM5z[zl qr*h5P*PqAIHp&sDq&PD \4]?ԟH^ \I 33,X K]gs8hQ2|bUF}>4Q/Q4"Rj:)x_VVgJ$Lp>+>k `1E(4ĸ蘅1IYq)K1/LH.*vqLԼI݃fmkr2"NKx mM %@ ɬ;pkڝyT <_$<^#}, --9--/eưT+#J$R20`nڜP*:VI(I\AF`7Gή`2ڬ T"BPbsVVFVIzeV+V'PihhHMMmnnNJJhd&KNNtV&Qq kl'OJ!29f7acw€z=Oe?/\woxEӍV{n[+7VAA֭[aV---^c28/yS_֋0lq.5Y0vK׍/$ya>4*Ǽmw+MMMw=UCHGXz{{{?~1g' ǼXcs9sm*TPh#iR,9lqɋbm" |^LRЈYvhp.ǚk@˘|bp|g 7/ ʰ5PPpR9Q?J9toոȘ {9q1iCFM \ &SwoolLk?U7ڪ.Λ3t^LU??7pwP/&@>z!\644Pwbp6A }-ߵݞ]5CB+=92qd'-J cNo coWY{od"۶?>ͯwMn{m?5O*aѣv$b1Q(nL7&:i\o B(tbRTvΜ9s|Ou?_\?o3ə DKd_yy] Iϵڏ_&g)Wp_y>A/:k?ₙA>apQ/*A-B!zkzΤ#oh(nPP# Tsos>@>\e4'CB e!i:h L-&?e9C!SOs-2:&&J! oB nom~~M "*Bd<'a겛 $C}ʱ6/Ώj ;>4/L؇#22:9`<I4=-Fh? 5sBh|3z[;qf[#YzyqWNDM#wP/&@>z!\7z93/DD00v w,ܠŇBhh1_x2{R1ysz7}:K}C=I6!l%DX"{뻡}>Vk*ֱ|iBC=W{NVNT'.iSW T ;G?9}h>!^!^.%3ӗΩ#duDCie`KںB!FF0CPO) ""b9C݃i `:f:`n`/5\&@>\e4'CBxuy CCC@+#P!7Xx~,*-(s Q%j2Rr(뢴 eeZHeEjҟo BMol;r a-0c1AC Ⱥ EΔ)%=rŽ)]cds獑뜿8OH;6PmF/p..P%/е2FPFӴ!W/SQ~!$gYm&OO6MfnփөQ|xmvZ_Ov{\Ӓ%z5o*s<5K|^hp gmX,%K`!^! ]]]]MOv Ksr,_Ef\}X 02 ɴ"1YFGDr9(d"sٖDTn|YzWF|4ᲜJvٙSɔS.{u9<|23#r9RmFD/'W6xP֙N4xcזUEw& ʂՄQRяA>Uz!\79qqsp2;7n4:2"HyA oTCmBiڶS'/R"OzeCJy ˤv5 )iR)dZdb}iC>(TjL IMIuŝhڠiXKvٙSɥc.RN]v ke|RIZH k  g kg=L5tI:`Ѣs uDLSg޽<]xGi&ȁ5e^Mh7 kD{{ågnl/v;*+=+ "&ʣj*++u_ss/#?;::ҌFcX%ZRBf 9P%zF`FD|΋)ZQT"~u>&WsJEyPD&msdd/byX;.i=2rZQY_]X_-vx,MT &ɚ,999d!T{?pWoB /Ö=js# mdn)((غu+,Y))K0ŋ_pL-?ڹLplx㎍=baмC3=gIa];vRvXؿߣyɗ._jC7k~zD,H5mmihe|~auD" qj k/= :>k BQڟtMh:9mJgs=Ae:j!7 f]z}H,;2z!`:WiZN|U2^YV&P؎Ǥ2'22mḳqkġ hJ@넙|Kq>? rHT\Bh2^orf_VUuqޜפ"?VgC8Eu4kB(a0z1ADJA#"9ImTiFQ d^E1w.B J(4ʴ@D6EJA16]瘝Zt%XsVHu_,Q9p|kX}9u!Ʊoؿm_׺#w̓=pʻG3kr^8.z5*㲓Le+WGКA\e+(šӧ]Gët; fp!B 008kSo9#y‘g'(s "f&uA4lLr9QѧNK3g B[];-媟!`2|+V,_bŊփE0B!4Q,YMMzȨ2~ҫR^UOЇdޘ[8d 2d"BcKC8g\e4GʨpQ>{|rvՆ:$B !!ƍ1 <]U3{37p3B %mo 6]=s7z*>apȨpȨO~/\VMa!Bdam +8d4pcxU=apȨe(*!z/\.ppω !PpotOclh)۾5 !;FѸs5s|q2%dO!4xTƻl-zSNҿ\8r8c+ë |CFCFegU%37{BD @D1 T26>6OOΆp-!am 2iސe'sU')?cLs7mY[_  DAmkWzzv{Nʢ`|۫Oy/V;N+h!u J|g4w/bcէ2~ _2_ysm8g mBkg}zR}:jpC,ZTu=lkñ|EX!=] ߨ="ŞB+#Bm:'(t=ʴ. s2\T2KS*!YJ:f=fei8߻)O'>|#ٞ>֠ˉ.NۚY@ [9z5;rfѣc^b9tb:@x@WcwIX!# \PXwG hv{9KGie;=ZpCz!hhhHMMm=6Ldɾr뭷Z{̢2[%`-=|%`t6fO>\woxEӍV{n[+7 +`֭d hږK}VO9'f}\;#$s"\t5 ; fےcBsXzښ-).odgj1o _{rb.wʘ;|΢jHTWmCH5ֲJHrr+Ԕh@[1VrT '+T|OPRSSq_ ڲ 3qUF.b>Ɲ-wA**bJر.*3KuW딴\z=XŨUqؗEeӓ3B]-m?G]---^%K^ر×NFc>.*cw+MMMw=UCHG؇v϶GFFDM@gWpW3o_qO #jau/,3FheX#J§e1#%"`5VHۢܺ%,igr`\h]ضqhg({03RLD34QaDÙ{ "ݕxs%\Y5?աC3B#Ee9۾ٶ%:X=[Zj+48;(J:li 49ظ蘄IW" ~\Doo..:"eİfd*bBj *AΎWڥr. ՇM¶G92÷x"^AYhnB߹0^!2&TD7a*ku#yugc*dN9f㨉YW#22B&\jWUa5Bhp2 a}i[đhD^r]΍@unBa}ȨW]ݸ~geY=]7xօC=rPu\PBc4OÇ_ 5E7#L@GO?ot1BWFj{ zz!6u\p8@u\욿nۉ\z{lzѸ!Bg)si-T>qC|A(d#1B7`Q$pȨwpȨe({!'..qܹ\sMƒ..A?vWf8, J+Sy]{cLs7mY[_ԇ:*羻{X{˝;F,i!v{cbcSZ=㐬1q~v{NʢQ(;PS3f{>Bn*-(9F9LdyՒ@lBPZV&ydy Ҳ@Ā cu҇9Xzv/2:!fT:EY3NtN|1BAӢ2n @;& @/9h4{ƽm;a4]˶pJLOdeR*BeR(JA4a(ThiRRT _A)eVf * %I2'$qLj)T J!XcŠxrSyYڼ`P 7w%mmuAUwN4MWJEy饗B71jcU}#2dwX*ws`!.: Aua1df2er_<{gª9;>G011qWXbŊ+- |A2W%P(qݖ"OA"@ˤz1Ab=ITPX[mڠBs92-"9IMB֘y"k %RFc..a łMB!ψ TSYY)Ҙ椤$֔֕͢d>NQiiiF1555A !D($RSStGGG[M&5YrrrBDᯠ >4/C>7/Ck ƒr׽rn2!6'kBiB BBhicXh ИBiZ B!B8, A!B@k ]Y{>[PDŽB!BҘkڭ2:{USIB!B0.{Kk`*3yCB!BWcAԡ2p89BS>6;{'_wׇ&1Tƻl-Ztfgg}M!mbV3?4-L3OT>T #g fc4{{{?~1g%;V (L!3;ؿeo}a7R 9[w.OR+./~4bǺV̒'?W^^{> 5jC=]axcOSĽX\bi5_[S\M7 a2g{2 D*(\QEEHd"YڇV%AXICd0~!4uQKs8 -=g./ ]`cZÂe7rYg_rx5ko50uw ^1/$a.Qڟ.̪6v9f%"(nL7:ōN J<۪B6U Cox VSeV&h6yF)1!>Qˉ񮞚Q(53Q[~_Z<¤F<5;{G?9\4 "qXTm|v&hKsA+#:(uy҉HU7o%d5&mc\P*KE_rRljTQr9)D#Tn"+U<(!GRӦtvƶԴiݬOTSƼf?{+V՟z5ُ[[ ~r9,O#Vco48,l'4Qed !!4m۹œ)AjebHsX|Mӆ2Pf K$E4mP 4* HTW\4J4heb}iC>(T[<F\|Z$Əo5wWv$XCC08XjweaH 7'|JQZL&^ `b`bO@M$xZ-UıL*!yfbbj 6Mfg!D#piV[ GH!A iuwM=LwDe]͙{VWAj2X/UK2j@oMxnD*.ѪD#5(O(/K%ÓKB&>腹< s|R]A@B~뮻?\} ps]@Ȃ8}SCg6"o~`׆.1'c"{.~>׎o5\\/g楘s_]y%_-(`Z--~t;6;׿+x\j9ImezeY@a@Ȼ<2)pGG넙|D)Q fe, D+޾Wm9DSlNBoߗ/O]]]/oߗ!ظ+j+[O(Lkbc졧L fhsR "rTWze$նM0]jRP̷YT1e# $%RBamj ȴS<5e) !x"kUcHTطG 'L]k,ؗ"跿}qܹܝ߾pBhoow@pv w޳7N޽VYMee@ HKKcN=,w,Yu<ёf4SSqỎ !BI544Z鎎L&''֔/"BșۿeTU L|\y}Q\e7+"l "41<'O&["FB!"BX-qLDĖ٢$0EpRR9q2B!By)=74t[Jϝ){{fjOEkSB*BQ:NKK u\^^(BJ(ӢdRw64i*ݫnu5'?5}Jjd(CE!4*D]]]II#o֭[d9BM!ne=65LomW[bc5>bTLI 'B!BB xyΌkb՗[ 6؈'BȎB!BkԻ&'Ʈ`Ft-܄&'O }!B!4.ִ(TPB(LʒSC ݂B.r BN,Y֮Zݕ_%U++ka\agZ/|ykZM5!!ೋ?h4{3O絍#&  |(3AARIk0lw{n r RnAiT]!pGoyf N5g)f"1?}'Kvwc|Nw !X/nƽb=?Z!^,68bP)UvKkHoĠ ;|/.Nƽۆa~⬾TWf]Hɬ7ʨY{KFDB;Us~(7f~Ly*UHI-QO \xV:4농:hgk:kkl!Pdj-Cڭ3wtͯzE^K/Y[7Vm')!KgZw˹w $?b0 JAL% g)U gHA%S(5%ht2asdT03bopI j5ݒg+{{Y$G*,}d$Gˇ:O^[-RO97CDu--M>#J%ۥ;)ਲ਼pye_Ꮟ?}$gu.Ç<ݸqcnn*3@_qRH7_8J.Oq;=W BbP!jti9^pD Y0$w{!Ik;z|{35vѣi$'+|4Z9'~&B$,9ċw{1RqmsAq0\_nwVsw5X*|>߽{̗jVu:k*菣۷o㱎߿'*.%~'''m}Q4 laT""F,܍jꅾTBua4/2:D]]6YgYBo}+?Ͽ~][+:::<Б%pњ.xuj8q<Hϫ^\3%D466^,y>TeIDATA/Onݺ5%[ U?72222y]GTZrݼys ^).5_mӋcWIENDB`DataLab-1.0.2/doc/images/shots/i_contour_test.png000066400000000000000000001506701511411446000217300ustar00rootroot00000000000000PNG  IHDR 1(sRGBgAMA a pHYsodMIDATx^ |E#@%@@E@QATXWW]@WWW+x,x(^- H8pCIʼt'2 HիW5ݯ_qF`0 ? `0|0N`0 -I0 8 `0'`0 $ `bNȰ󡢸5 g'p9FDso&ʲu'w{gsǬўu MEJ#% Ҏq )1EFטN2!mf94)aRG6>cM' p>byɨQI35aЋb&ʓ~v\1&{I󨵎fNgmX$C8 ʼnrYxq,0v^O$dY2xl-u v{m$!!x q /' >0k4XTO5eY_Zw6᳽2eV߾ I0Ã2>>̚I݆`@UXULJHGb8ޱ1ڥ$tϔQtVIi'mխ@eeXm3s/#h 1N%qt[< _mG'P"EcR1Q9 ]hbQ*L^Y/Nߣ: '%xΐ0nhp&}{] ~~7Pm֟5ݐd&Xpo ֧<-49X $_`H7qq4MG N%uBf36Ә ~&6w~'"bG&8>S%VG\`o5@e Ep`yjwIX}QTIa9'S3|Q_ $s<DžqcHݞZp5A^9$Ap n _* xk쩙@e I0Ӿ[=!~::q<@eg/Aa!&Ĩ;G[̯[8$y  Ѯ4-tӾg=z`K4Ϝ0K1Bnn~<.#`0 1D $ `b'‰۩ٸm8)7cm]Y C`EX? `D $ `b”`ۀ+w; @lhsQP위 7 nlF?W=y L wm0 Dˆi\''6wns'i&StuR8=%?0 w ;+5`0 C'~'n'`0 0BFU4f \4]&mHtyt;/l;\=[=\\`0zرcv.0asw1B`0 <;pDp8`0Ϙlм۰>MW*8 .K+4֙8AC g9SN)gգ(n: FV=jSrm;B `p<;p8 `0[? S47M쩭|ᇂkK7@(_4MqH8`ov.0UV Ph`0X߉I0 L7#х䝄ik4b ɔsi0<w2eM18ѵd\ĆBՒP1A;m0 Lc`0p"ᆙn(FgN4MhP} s*huaxs;epq;p쩎n$\)l@$ ~ EE\;-`0{`0 C1#ND"#JJ3Ppuax.4ON:T)5 ;zp2 ]H}npqFqO=pz7a!b098`Sz!F, `JI`0";N 3bpv't/GpO7-Mi 'S \, Ou4M%P=MsNj:[&#zN PQp< 6;;f͚a5Ge`0 =I0 'n S s!`S :US]TT5n/:Du!vw;ep1;Lb(}~~W=@4l=%N6!%cYo>;Zjx `0I0 'nिԆ)!{n"##tn)R:=:\U{&StZ9`SܴnZ3suubpksy ÛRn iZM7pO.{9{N'4Wd*tvt'N9rN>lM=v4n BBM8zz]Mp?m-J᪐gۆ9onӰað" 臉߾2I>ęOt `( 7: 1XT" @ `0 vC!L1Pt ]6 -(4TM s!~:5@m¡C?dBM=д'47=M+~ܴп֓+2Ov.07<`0 P 7`0 An($nL1P ӧhhF' M+Hth믄WZNqb%' 4^pMpz:pA;嬮sSNqO=pۂO S=gQ֓FHC)E-[ع4iҤcnFnmK@XdPH_K&`0 C1#ONWDm ҙ332v~#7\2N`0 1p&}]%~=6HBUKf8n4NPui܋{QR M)N7pS4MwpS(a` t:tV8=}J^$M!t nz|4H-IOU} 7лJtYurs[ v yy&q N!tinɓtݨ^7"ۅ(=?yΆSBepc+qkC] : 9V22Y_ ?g|Y.=rCP1DGvˑ#WqJ'aϞ>Q^s:t(`0[wH򁅌a76 dn\t~HWIY ^Wmg7ZznÁ} b I+vVm5 'NDaݺ>غs$m8=%T6 7>ԅѡȱnӼy[Ip/w;CNջu MjeIԖs8'Qb#/񷹭grPz߿:sJOIu]EbÆ+KTI'mDm?w`6hP0jCذa L-jrs`ŊAƋѿ?P7 q Fժ?#9/v'N#mI?ǎUHKnݦK&!*{s`0p"ᆙnp7@q2ݠbn='pS 4chʕ׈+Iؽ+CA9&U*l#JtC~nBM14l8))oaŊ+retSNIz:@׍?cWmȥ >W+K:!&1n:;VZҟ "7uN.pr5)Ν[mo/ACժ |8  j}WlsN\P2Nbݺ˱tWѮ[k0 ECFHa\dZM1i4{T3}{>ѠzJtUl@b?e˧V.;]?*T莓'?ۥ Ӵ s )jC?-mwQQ٘2exSa' {PIsI;\puYzPa1D5kعn:ƍ$BBJ;и>}pFXf_=p~-`0&_N" %\$A]mӨ&FzO# (*Eڶ)P# ܍Rp! ʂ^In7+v.M#4zeGSg_hk 4MW ^s71*+jMΞs۶)EKqcCd1>_z LJJJXI0F^¾}Ym[S r+.,X0X8=0x{L`0߉Hţ8 "Q DEmDVP[ 'Fؾ{1 4$I*/NN7(qB0{/։ ʼn_ڴy %Š/je鞤kSNOHQ[*WmHԆʚ5/fͣ> ]K=jCգ!tRT9֣P==`nv z$ᆳ_I1A4Sh%l<NyO Bf[pcx0f44o C٣Dp <d + 598q"^y>tml|IQNBP'ŭ N^$!a2o.v !Kt\4RкI^WKiaB֕KltzCיk(BW $zJ0`u* jPz@n8e Ti?H5ExG}t#.h+.ؼK`0-`pM˖jt8 wK{ ]@'qBېeaq2h_CĤ#2Atz|j6i$JJr868Sz䓁hf?hӐ2 zԆ}e*z-]>gC*Ԇ*=%Mrz ǩ@n85 6͛ C;|pFYek bc*Wއ7 +9 'YJ62\zfthA5Iq; {p f㤯NM~?b^VZWo(6.N aӺJh=c󶡯'-tw߽W^:Ӗ+TOPtBQ=m5Ξ[%Tz@6BlCM$(_и|Ν;Μ$gAkWaĈ¹~`0JI08f⊼ ok'!<>햧="#7Z ]@'y$ga U8, $Z uR4m۷.X|:@Th;v@Tǯ}R{uS{ /tQQ4d?~|[jC۠z֯PBP=' N ]>jCd[кrNMVV6 =I82 IIKJӧ\ȑJ׿/ϱ54$I0~5ؼjk=N].d )]lV}v1[c0'?獓P.I… T_*<꧶/ԆN%n:B W׫ZlRz|]Bz]YY0bDOH^'uпjˉݲEמ[V ŭ>nq}wC(0B_K?c_߀ݻ[ٹĉkPvt2kօHLA۠z*t;rB_J8T:{/lCfX+V,BC8]ten[lPtzN)NlBùxGTSnqo.:T:Ε~s,IaK|>dg׶sD$*UM~~̝ ݷ !IQn(l;Nk0 IꩽJ+dXALi$5Fnn_\Ҵ_/t[pEGժ=۷?sNPpiT˩ }ꃥi{/w5 _]?\ۚPPS =-l9n9pե¶'ڡp NVOqbSnaJ.\hӣG&``U+ٵ\xqPpHVg{/#6 eyw"q ,YʊsG^^_~gJ?OG?o`0tNN,N ;g#]ENKO?<7dHQ E.nj#CJBRA\pI8P`"+$r@޽ :zO TOnG:ՉzR@JRBmd~f".kM)Iqd[up#na PtR:ĭ-\QzE8gHϘ*:dLω-}|PS մsɑ#-ĉ"#wښo=NP߶: cLxt2Z0c( %ni s`—{F\ܟ`0#e8 褰 '%HNi= sBQׅץ|ll6N܉+B#iNO) ˒w.~qFmm;5.辥…u!})5ƞ=gO]n4nm*ԆfԖtNálO˱3gxS!|ǔ@nϯAA‡|:}1\ϯ)kmMO/Ɵl e_~Ջ̢;$(iݒdg RGժG}mQ޽=Q<;WvO;~Wuyɒ`(: 0p$̰Iz4G"/=  JظōWI;D Wryy,55@C4MP=KP{LJmňo-.u\:ɮ]Q;Wغ5۷B߾m`0Jm LF.4HCTOzꀅ6bz*X!ytZ p"M:@ܙ bs Μ8SА=]=:| w+*TmT6\T='V}P[][וKʥ(n nIQ2#T*OؕĀ-];~\cԞfڡЩ^ eCp8 :}b\aT4hPvEZ!.$5;`k rddlsH6NBs vh(.Ptao7e grIT|> Sn*sS Thde1_89;<}'}~a}zsvȑ,=mкJh9_jOs@8[B)ڸ֣Bn n.jR\S(ڨ7Iʕt/FK\cƺDe{h`8 $F;6,N/aЕv`0h HhT_ M!?Pl" YSJ0{'pmP=w%g0< ʖ66tNI6 mG˫k .nO_QSAt1HJhXi=.Or"WwF; T•>R2uuP{]9/Qrp6\Aǚ!|ǔ@\S2֔H$337^f&_}nXa !q gQڝ[;Q$D#- 傄!Et:B9ѩsхdw0YQgN rT$M"C j2$4- 6VP}dd o,޻ +eTW-4/Gۤz mGNtvHC{+_N?(䴄i]6M$FN(*V<'ݻ7j6I`I8=uMڵ;`6nB)J]Ca̙v.0 (~O7$]lQ3ے壎ꉇQYVdN6޳R 7CxPnPl e3ǎU…w B>Se™;[fLq}֔MfLEll!qd 2[co|}=<Ia )%N!PdQIaڠPQwKQÇ#2xA]BVT }S=W uiJm |tRBu>9ӫ Pn &r G;]uBfy4E :JgnxiPtbXr2ZnmS2)fSRR,yj)Ħ1b=tWOb8ǝ@nk8#G.l|!4):8iFm7b+m +i#MHkHaX-eCHckۺyJ{UE AQc$,=B鸧8꣏"2QIb m8peب)I4 7I0h)+SG /hk.]ŕ~W lEqaVK%v/dh:k*n<!h@l;%pˀoqWv$᫿6 xlJX?ZSY+c#t3q,pl\I3`0]@'q402S \ %XG)TO 8 rN2iB\`F۔ iNP[:@ж =1"h9$W>Q0v?f<ǯ񛝦ߘ(=>6#|>97z;y8ۅxH-7 +m=[/i.3:rNf.g2♩~۩. J "SOF >WNnmh^^5*^^%JryEmS=M+O_˗u lMt 'u?uijϵCj{8ΩcdleT"BU+z5Qڐ4J9ҧ5Sǎy!-Ҕ3/}r;M7͂2Ҟxnۡ-ʼn[7W~pzErӾ(J]{\`?ޣ@<;WټY)&TrΕn<}R]m`0`вo_W?dJ?;w6W;Pa[Svϯc(_upMmBDj`( 7@i(Bmз] Wp 2,$PuvRt] EWO gõ m6of~^TG0 } zڦqڑ#QjYe+/I(M0=8E =vpDG(9 E$vlr8?"uHP4JIw|FI(8PO\Fln[Sv9}<zo<9YRRn{~oOZTf!?qn:=9GӴ/ Mв" 2ܬ6\O,е"*<>h&V]|,TOۦz|Ξjrۓ*5Z.Mw|ScqM9ij?< {C k3iq֫q!-[q̷-1nTxSn6x672:D2$V 'Ԇ _rz m۪".%NSm_  T͞=-Qi %^W.CJtRtѵ)몐cǢ))gp^|tnO3h9mED36`-o=<ZlzիڒבØy߮{>%=Xu*iѵgm8=}7#Q^+;H'vc!..[DΠf M)yxpm$AvJβB-ΆslQXtI=ſN%"bm6o?^1GP822܄~c }fckn-D~1'틪/Lqb5F%껡snGT r\q O n?+@NN#T%N")_$ 6X~Gp 6m³lgqig K[?ڵk :d[1u՚/F ݂ܴ&: 7``AfeUFZeCO{[!>~+{*U:UspOC^^P-KN pn9:SLLɆI=}ldXA2lPzjK2̬lh{G\]b%Ư`LwV=Ĵ?w5ч_]_='\|&AAYg6^x+ԹU okۤa_.e}?W nh ON[67izO{fB0wf<7k6>\yf߇#p5.x;R(]jx 0#Gtl7{|D!zc>D)NlKd?'.͋$:eJQz\qd8+ cb#9O2ƌ^,]z.Mq?6eJ`/V^d^T߷s6lXX`޼7݄n;>)x__ȑ#17Oᮋ=,}(?Bǭtn# wYV#W"?t /K8 5ߪjt;ۉLBŊѨoU#re_\" *y`0[tNR$ȐW`=*/rк`dR եp6J}{I ي?"IA֑.]O7[aVDjOJQvwK_{dW|{:܎]k`)xW03CD|XAl++[DvM%Ug V"VFk:w&k\~ݻۉu/ݩHN@ψOUl8tPtT(e MSIO&'{nh / PF5:C>B:Ocς%ˬ ϵlcp ر)掝Ztů?[ݰ4믊Kim]B\׶ĉ8rbwK/ ԨQNIj'GI b_UrŸhl6v}ժmĎdؼ9UmUx )܈-Gab40qp`C]jaHI >c0 Nu}>Wu\"p_>*rz w aOA}_{6ފ++?^ Oq~YoK0q]KF8sy]Q#'zT/gB_| o~6o^j tH\5htT8 7J N"\;nTǥi_ث'$.+{O+P=M'Nl8ҥjn4}6t9TϭvO9\Xy~N5abH_FG YJr'Z@bSJ:Q|.4Um=)zi/Z܇0rl~n"қdc/9zTƆ ޫ-`COE~kBFN=>g3`߁L i;LZI)K< wS ލ?NHqkop jxÆ 5Q | X7z~qu[M6VLc[Ѩ)yV`׮?aǎBqsxpBtcq! sg7+Qzb\F2lIOO"x`(- 7`ʆ IX W|/r;X,.P!"LW(ԫ7))N8t(˗?̫wxTnʡ.}̞;? yx41$%%X^u3;41 ʼnq4дPD_XȐP*Í@LL֖S8*rz@NOuTԄ9}.SqH3DFf+O핍֋@ګТqb@شi$l\vTBz$+'pC^U{pmh&u n܈BF8"v=qِiafo< ;뵡$(бNǺF5I^G!fÕ6~B%ʁmx_m7 //-pXǨ#0߳y{B}9ZiPRV/K&fl{VϏ|׷V-^YQ '^;}domWAZP[dd=(_>({;w /i ?/stt6z qk̦6)TqRI9R#?;p#A<(qB',%]=j+/plYͺ/An|I87[wJyѕnhb J(ĦmPCۦBX֤4#ON$0NwǠZ[> ^{{vZZ`G~/AѲc3Ct*^`/NBy]{ƮpZ5TG" &덊]`=hYT{^-[=}U. E_}Ep1%թ?kY'w=5QS>|$_3Pį|ձ?}y,'NPS$%=8xRj7TYG¥j8H'OA_S! Q8 {O4Aqt5`0$ $ ރ\&u*v"WаS[P=gAѾP vRWw [asvTܒʼnTGN%ђ]OujZc$5k \h,Xox7x?Y-9 T]ggc{ 򞘪8vpv"rd."EOϜEfسN!gj,lyg'} Sjq!gӴC{`rlņ=ڝuH`M׋Ɖ{g0G!˕L)'^l}C[DV,]ϷG uIu,™f-M~vIH gaƤQh A b5{Ƣr壈~\X1{p]U?"_vDZ){77z;vR5$deG$s+{i߰TDgaϱش%M=6ZPB\7ԃеO؂qnD3Tfv6$\qU|P!u!*\Zpϋo_O4AF-N'!,ٚIvZ! CSUט!h͑xa]J0Sa:ˤ+B\ Ӑ7l\ ¶O£_]S߶d~r0q,Խ}zɁhh}YC-r7Zw?N +!SyO}P׮AUr9yhwK22zZUO5#ßD:ew8v|t+(a,Բ͜;}w܁kb-˗SD큕+Ekmꨆ-غm.Oҵބo$Cտgv#Qbr}hkk׮c>|ʳ" "qkCzP~}Ԏ`ٞ9#{B+J 8yR$qġʽ6?5iĒf͚y^`Bt=3=Uy;. PA]0q{'6#/ʼn.jpOa8΢1=㐜cezO0?dwd'ru詎KӾp6R]Z<-ٌ ɾh Zżyez\_:Q{'몳:X}cbҬwDFnG^ޅ?n1S7*jvwx~NϷ7탑 :3A?DrxS 馛 mWDqT0vʱޓ_RJVk,KĜOn{B? G}ʩK4E%={U ]hZܟPP@qlwĉv.0p ul%cҺ%?k(HBi {{@ ԭppFtjtƍ`߾~?G6>ښ4!+ 9}"*6A / -mc/y_?[ͷ ss'zA臁&a}bӰ8_ P/ՑBѕKbWڧNUDVVf"J( j;P{%G9/kYkc Q}pZe/ſC:!&f^F/кJh9ʷ+rKum{)T~.=ЕIx[F1Ζ6pZ~[CP]{;sùSp"vZO7$c$6|`rĿI &7q&ߓO޻ e͛kAv. SдDq=mn–-w"7bNy8ᎨZsJcːnlbs `=@<yIYdabp"J[B$T ~m'tdeu`pxM='NԶ*C*dt|P; ?bSzp c]RΝsWD˖1AJONR'Y Ά+}zVP +8{V\9Ms7eR=gnNڵGwС$ v| O*;[>ӾдwZc#!+:T#D܊U_?[ڋmmó|vi 䁂Re{"~)~_qܶ,ME{-ٯ<}!z ϫ%277(r7+Ҵ~Ȑ!ڃ qig99gIܸH^8i(iƉ-=E^ (}r8= N. NoiEnRv}2oea|m>BΣQY #`r _`Ĉ5-[>Bh y<2#\f]IIv9{87{)$ty\V=ːj&>Y "+,SU~Ih>;)6M6~ty˗OD nr8ǵUW6B_M͚ppw;QĵA~H`!|c}ѧm̩ gb/W"; } %9[eӢŷؿ 6nlk~T~N0[=]?NϥuHWԞ_JVp6IE!N;!GnR{q}y_'zPx}A`R.G:)J8}Q./"b*N|;1ʤW)|oww<~mę8^qTƍBoa\$^6zݍUG*bɻKQѾX=C۟_ԓZ\UC bS|&|%خ==db&~hџe6)X; ڨvbbl~?8T釯WBmzP[ڞ8+gSΛ׵P2ݠkW v\AY)i \߉Htm(9DY(֨ a;G 9J~J% 5Tx6KB&u]BR ߽;F-`K/sF|`k4MCUOXj(֭kx/n5ŕUo^ūN/EEx;GJ,X+~hm1VűcR"%cSкvNOE70m64o]( 9Rji?i01:AB:w[/JI0FH8z=F~ +wPo틽S̝j$X2իoEֳ_T6u#c8~ENn&=z~FtbmAl0'!.1byyv68|&T/Dl`)N\1AkNAF6|١q@Ct4C Ėp}S,&t~Qg.첚7z$}[ng/ֺ W\YUsм1CB=+XVн܈Vh3T][!$4v99Q3Dr[E~)>ٴ rGBi#EKfxH?Q(š5 GOSk DnHE#K ۷7DO{q "6/rVr8Q_-S SQpTOsPpp؆J29;+w :.HIstka, JSı24/;4-s;?Wlo~:嵁67_rc;Կt#F/78}Y@\ ̚6?w[ qHSl6[MsFbḺ]l(͆"ya&.CJGmNĶ bluC1x.oZض'"CŅ_h_: `(H_jhݓY1/;4O7Jt|Ά.sNB2ЕKDPP=gI;wjGϞwYyچoѸ&aC\Q'a @mן'?uЧ>p1;4tΆ[jC׉ʆ{B۶ԆKӺ NVOqbJ ' \`Ǝ{_*#I$Nlµ)rrϲj"Uه9HI} gߊ5kg#EPnRP.Gqx?9S 'A핎֣a9ݐm)u %_O6T8tR#:S&͹.3$C6[b(}u_•WN 7g:u GVŜ9aٲ>ؽ̩Su8'IJõľ̲s!8 7JI0=*W>~~͛qwڢ,&,seGĺWp` :@'y$tpԞ i?VuDnnuwuDBK^WNz*'`O9TΉpQ=_׵ShrT(rQtNZʹBlqW"ኮn8>GwJ zu~Ul9E|睸Ӗ.f4Eí±)S +Z 4M?$%pT (ȗ+=+WֽI`0]@'q QT݀=sFiyzyj80 9iOhڧ0;be`܄$ߖ8 y]` Qw>}:>]rX';W8uJ!I8GwhLACIȌoQN/ˮxQCl `K/Y2v+3<{/Cm%{b6Y%i,8?lR䊋r$a+nsnEnl,}sb,_|PA̓ː˻XH\A^3BEd΍S=gCTtsX e禿Utt9T=@uC]PkJq[ιP[F ),tlqR(h8hGX~ u;^녓PPrY1iHA; 7~0x v`|_Q2\wu%Ǐw+ф|$ .jpL8 CE8 \9}~V#ZTɓ(fjލoZGM׎GM5;.]QFM1ۿS&LiS\v]l 4]|NOZgal*ĉT)eJ(TOD8t_I8d:ǿ`}tCˡRtI #%On(B-:@'FɏCDN5ԫw5{=(\ع!3PBmE]+xT {1zyy2Qf]K1 +P;%q 1t_s3nf9#')8#\pHغ@J_$?×%T@7+'6;hub0 mJql9Bm8qJtmIqp7 =pL|Σ6stZA8 ΞI>?رç =AN7Z_nTx擵ַM^mnrۋwԆk.-Z9߈'=@Пv jC?ĥu/C olܘ\*mi,}Iԣ}ɉzm[S}$6XE8DSaې^sIt4#"ď"j~ݰD[O>\e^'yw"q ڵѬR;aT;G EWgO9;HGVx9U"#9J>7z2 .'q*EVa-6t%:R2%vGg([OxN .n)9S N% Ga) D 2c:$(Q'!7h[w!5Ε]CYzԩJ`(:;N2' E3\)u:vh}Rh;%lN˧!"☶'6MPzIPf#LKۤ֓кT$ª* ":@¡ ])e2tKl8[|ΆQOƧ:m'l###^OxpT ?ikt MmCqiݶpqGV'[ȑA3w84s} :uViWXyj) SNbЭprzI흤u-Pm;Eݎr=V:>hy b - ~'ölrU)ΕnNΘm0<;p8 !FzJ(fP/[v)Zn *]9 ]?*Zر6B;RmpBz&+8+9~\N7BےQ)2ꢄ;Wms@mԞL ]jk EWH8tR8tT8Jw _탔oD*P%"#Pi(I0 :$0Nᜰdɵh|+x\L7 G$0NB) R 'S^WNˡ2Х˻gեT(^M9Q NN'k VUkW'6zNBvvC;=Shֿ@pоP_T8?uB+L*Nl mD+ $]PtT8ظ&4kd08`ɒkp۹ѣJ PF;g0BujmIc9_eQ[SSQQ{!"BF ̡`0N ܮB驎|Ѣжy BjmQD>ˬDW.~yWǎ9|/+w*헮@o[':NitP2uvR8tR(4TPN(@Bѕ;%%~qBѕ EW.EN +@n跄PLuG+QJ){9+ϴsI8}B !Ia9gkѾv쑟*"NRf`0(̑n=.J6)Ԇ u fDh{ [; 6֥6Om޿~JOۣmpz_jC>6^ޙ3r;zLT(r'¡'p* \uP*tR C!JtEtS EW.B"Zwaɒ#;W8rTeJӧK`09tN=1۶ʨQc)[?"$rQv[Sz(WN`0JI( pHNQ[v(T Q!e.C6_^ Q[Nυީ>r㐺2%i=FCNbކ>eJ(rN-\(Bf\BmpGHPt텃ЩPnNM/zZN$`(f﯃ۓѢE С?jU͊ETT.*Wεs!I0(K܀m+cpd!֔"#Ѫv`0'A W:}=E=ڗP ]&BTOJ?t<' lh9Gmp6TOڸ˭uJ9qDP-)Ԇ JzFX1W.Sh]>tPmXAC\TOB׉SqT:2EW['6m/zR@Bc:ka07^JVնp刎mJ2pH;g0B!IaCX :Mse3g*T(̳5Od!=jэ&Bx.a "Q8`\]7zҴ/ })|vWijK+Vh|miB v7izZRJv*t/Ú5WдnmHm9=9}QUد}3Ve^AvʝN;CNm(hZ965DZZ'+OeP[NOu6TOڨ4n4Mq64MqkƚN'(zef]l[uu䦍Ç㡇sy Cw$ %̲eв~֔ ʕf3`0I0݁6mٹC^^_~g›Sh;g0B8p#0 S' Qf@DAP'E.:)Ԟzjk[MǾ}1zjD:N(r)]WBzP<dzuSLOu`T 9&EWǩ6 ֺr2~;Eh8W0 7NBƄTcHaF[A?0ӳrt|1qᅓQQ[S9r8AJ樨\m`8: cLG@!qX`Fa`?O.qtK۠> n3E;W6ɹժ`“jv!;3 ?bIutHa81FCbs,^t;.dC%N6$ ;NEmz #SBT LNVM<+D$XuRnRz{\b9 Ԇ.Sqbێ:,َ}R=7֔-Qʥа-PNOu=>TOBW&)T'Pqbjˤԃ!pmS}(D)ԆBT 7: zb,IcxX$~< B`,Zt#@T~[S9q"/Vmpj9pIHĘE."Gkc[Xdl@Zd$Y̞}RS_s{F\a ^páGM ^ŌaqJsRh1ԖTwKN87uP3zލ~׮ضZԧ\ \ S6TtDW׮YsneR=]j[Hy$SgTh_8}0P= P Ӑ.4BVRw ](/N)l_h=:@r`B-SBw 7NtR+聅~g=$il fNb4B/\ 5@vEQc *Tȷw$ Z'zx6g`Ѣ1vĠ&N9!̛7W\+deD||}ˡA ?}5`H ͬ âǨT}"mLMӾp62|zSi=jK T \ۜM ֢S1wV^ii4Ek+^SS?DZcQFTBN9пrBѭ'ҥ|.s߆PԖs@Cןuh:{P=gIrHpN /'s඿_q;Jc„ A^Y{.k4cB_$yg\F ?* skW3i)!k՚oIغ3 Y30>?'PX*TunkJ'{tG \SQfc`0p"l3c6Lj8 dHItw#tE]+øJhnnEOHM R~"Jh=m(6T6iz= Q1qrSG וK6;JWlޜPmP=,PB~ ʥ7'rK Q_tN_BFtm /r) ]:{s#nb3 3Mxw`(L}ΕNvJEz\R~p9jO-  #$J%жmI[w#6m2# Ņ!Љ{<+hybhcTjnz:Cmt\96 O)2ĥzUWzTON'6ھsn~\|񗢯UvtEMss!n/ ;B2iFN/H8[1x?hky{նDUPI9{ mTGq/ jѶ݌@8i8)n[4Fm):n 7f|jO#`П.Lپ8r$]bP>K<ՅѸr|Vк4]'/ 8bin+t₎)\WtnkOKnS=w ZΥ)N1K+۽{7.+_]%E!D?Yn5֭IW;wn[,[l Cq"ON$0NL ][8P_\Bln[S4mGb6sO7Pt6Tǥ)Tυp7MpzNh s(^QխS20mڿl-͹E)NB[}wWiZ駽qc [bu9=Mȕe)nu)i WWG@pcCgύ? ;Y&gϭ6 `zZg6kc7mܹG4iϲKCW~8Cgk—vHL\a犏f6СJ&`0C߉Hè)ʵSz4MpiuuLu*8]+%i;rζj9%L/vpcStzzA'z +; ^AWTGGiz 3& Ҵ\ĀF4wx6:}' :NNƙ~q'euΒ`۷NҴ=uu;mm0j(+7x%AhG97n;7aÆHJZeBOB&[`8w 7`8oϯ_}G,"=-7΅Cnj`8Wf;.HÎvh=.N.^8pránBm8ٶ~РNoy?y8_ ,4ٷز ֯om Rhx^  Uab)'6wzԖkn;ΞKn?rtqpcJ79r>tQUin|kk#X[;x뭷\$#`(%L>LKgk‡۠e4;׋Z>-kak ùDHay˼y} 23 >~/ؚ3tx|(`0Cp#,hxMxW^^BnNx 2 vJz'u9{)چiv۾sF9S{[wz.7{c#7iQ.4)䒹8t ~TWWTUjc+Omi.ljMKԔ['ۅKS8}aㅃ/F7J mˍc'n_p $\oDBVicWo޼#Gn #%rR1J]bҤ?UC[[^ [s_ؽJ`0Jyw"F: q gD࣏!36nQԪi [Y CW? |IQ(Nk\͉KSh8{n:Z Grz'`6NpջyiDɶiݾZncl ]cvpaJ6],GG]mo]aRgQwp|X:}B :bOПn*1z9#kjhBC\ubC:{Z [sx5tQtk[&rl(~cZi9Mb([o2eJXE ? KcG oT'emszڵK]wW^5!'~'"8  ,=WŘ1OQvxXB: vKӦ[0r$$h`0f$(EuvswbCKu4D\]'jJt7IBѦvpzIΫѣrX8K|~f44Im>1q.d~rK߼&\zb_~Ն8iB ٫4?-}g:xPڤ:=ڣi[Pv_TFW:s5kp7[`L:5,q;ե:`88 z=Q=HM]<:͛aƦɉʹ=P9F]_}6Դ5EV$Ԟ٫4?-}g:xPڤ:=$^'aذaV:~X9 y| \o5AZ[1|d{﫸ʯ:c *GJ: iS;g0 Ň$yѡiKgsw]Q]ۈ`6T-i[yQf.Z܎ i];ɩhlZG8󐏨uqHEqR7߼nȑYՋJ+简pW`j;pˤS#ed?Jh] {PuiԖ''pBQ)/Jύ9v2^liu6iii馛t0>$'I8`?\6 ӺT8Nnl[>gCz@D)WpYC*G$J7xNy0NB`#ed?Jh] {PuiԖ''pBQ)/Jύ9. NСCt0>C$pA,C3;I`? <NrP֥z]] -lj=w"wcCu9" ;89W 'TpOL[=>R6NsߨإpUAm)z.Mq 'eܘi'ՉM0{Ζ[gc!Nl8~ E;64mpuU vP}jꊒ),D??js6K(H2)uMts6nq]Auղr '}ڡi7R'c]:+~n'T+Vo裏"/F䀤b0 CYDHQNBo`0gt'5ƉKST\ؓ@%ʆ6֞-gCN hHDOKÝ jv*I.QtNQi v2p_7%=ok8\ZY]7Sn t+?8.C;" `0`0 C1#N$( `u8'a)gə399X!W[6AY`|駎 $KXЫ4ퟛzzqĸpzuis6(==Xq?WӃsvH8ErvuOtP\=NOO̜=T=a)24X85Dݺ{cjA|^W{4ZrhK,pB?-)qq{}UsE;ؾ>m;ȑءiu: XBOҜ'씳vtuz駟puY`|g>Œ8 .8*M禞PvU;\܁h]=Wks8QЃ[DNQzzzN gVδ. QにKР$&nDR&FzzqҎCVV=!u]UqԫY8![PVd G֬i[cݺ82NBx`uNqUM= =p8Iv6;9Ѻ:{pb+6܉El9Fi]nS=#jWӗF'EtlF ' ^[ZsgeC:SloGV~ի[ZBlYsZ+3f'aFn `hDd%OǢ1DEG; 3LD?+ÕN(κN~8ΆhzN҅m!M;9Ѿ=NliVOэ'?n A4ErzpPdriXlX艞Cam8gK~Fl,dHK*$?eP{sN6.%wq͚$1q%~kkdf6*N=93'M+EaV:yX9 ڑ1!UgIiA$p8 oPdYrscҚGqFf k oqt!:I(Tգ칺MZ΅N!)J:Xh~/N4֟`=Xp+:8ۢL7pug6Ol9;/C߾7[7q̵ rnLq㘦 P6tlIݽszI ;*6lsUW]eW_Q乺xu@>}醤Xx,Ġ,!ӒA4 CM c:il fA0 Tzw;%A0x㎷oyw"E΀z Ojiy?c)"O@ ab{/`0 zRRܹըwo̟-h>ք'H &ۚ<}X&޸v$ٸSW׉=gCӪM'NN6ڦS(Np?,8ن4Wة 7=lMH蘢z'6NW򟦸owgik}mdAm)xpiWi~BdQ,\zl= L}i'L=(`X`̜9N0xonh]<}ȡ`(Gn}%NZJhv~7cֶ35[^ȓ f{6zb,noHyEQ0N`0 5kf+eK/?p; :OOCLA[N:q@|b7y5-, anM'mp8 g;lhݶKs4%X{v>M+K8=O9P@ët9NB\]W?\9p\hR) O68􁄳=Ѥ\}gxG|ʵs/Xc積 ];C8P)r #G]̆ԃn z)o9 K"ɓ!x#`0 !A~Yރ AN/pqt9bα %x8 Pȏ2?c,X09A.qm9:)2cEn}8މ-gC=qmiO8ؔ\IŁŅ).Ԟ^pԆ 6 mp8oͧM7mM=JrбFO/4MmhN=t|jsSNe˒vm +M+ $ʆU +ٳgl#`0 U 'A0~(osﰢ5 #ON$0N`0c6܆=~ŒAD_`^8v)<}'\y7]{18Dt!E.*BѾ6t6\蹾S.CѶčeR8=ʼnMqvzګsml%NYBCgC<&M+{PM1lᮻ[o=c=m>t.Mɱ;1ťuS USۿrnj 7?o<7UNp2Š۷|R8E#`0uUL3pt<˖lBǴi=Ν;w%$ ]w!W/aVͭgkBam! P,m4ǡE=4rqRdquNB3VW?P &t\K+{'ST_)3ʼn֬HkM%4gCM~T6-ܴ4?%ݟ,)t7销ԧ~/?^dkO!8n|gKt0g`08"%e8C`ڵ{ +Vn犏EB˖Шv[S 7`0 HŊ'pu_bѠ!+)^M_%[J(붍`a=Nsbm¶գ8AîNs;ݠ29 6i؛$N= S= 칐=7ei|o9Ӧݍ{[9_{]MsS ]i-t:6B>޵ʞ&M"!a%>dPϷSz[O>{;wPҧ`ؾ2p$'Ws;J|4mdDmKIm'ϕ;֥zz=uw6[(N'ql8=zUP['*٭ ,EWR%;uvݧzy쳱سJ` ]Z]4wn4ګ4?9=GWVwԯV֥4wWU`Kcl6cǎY%eW^V: @`;,N_9?-Z&sCzu73քyw"q !ļ0lޜW_`Ɍ7`׮ƸФZ i=l~5%?ۯD\\1HtX6m8ⶮNf @Rz'ۖk&pasn[8Ӵ7\9Mp8Ӱ:;7M!( f+Y Hڔ/Z\~,K9̝;N/Xm.L1pz'Z(Ɲ:1Mo.T6+oNX_VU ͊J)FVYiNl?%\b`(G`0 Eǎ˰cGek:U}w6nlo~II kJMZ[G߉I0 ң|̝{ӳeKkΓSg3.mDFKԙ8r ~ q_|&6tCB՗¶Å(E)l]nVV.)_\M(eI)4<\؛b4 OmL(=i|nڞNߣbT,^|\aMHM}kƍ4 77mM׏T]چ[8izFVwcժ>6|O7к$J-wo@vvu+Nލxѽ{w+EUD#!I`0J3],uS9LWQ~쒐/lt!obk Du} SڴYmۚȑݥb qe}zxIIlm#.n ښcַ6̓b^tC_nt,NͭgQ VIE۟:ջ]Ovtin\88iWTG=iM=ڵ |+{!7}z\KH ժe #J?^mKmmJӴJsܸM=$$\\WD۶Eժ;IT/C:ښȑhXԩ֜BR}t& :=gnQvΡX>ŭ}(pLv-li==nsˤzFˡt4NsDj|S1n; (/R_b.f ?.vgv趠6tP=O wu<{S1>a{M=)z CC[0wnWKGik׶S' }]tJcҥvCIC;" _쒒'" T-v)=ZǏWD\\)N tC uߋҞ s9%BL6r׶ y*ʶzM9{z:UP=mӟS=}r{@&}?K2Ymk}xiX'-7=pٽgI|́lQW/ƀ{{#7I@j8, Uy^ȜwnAB[qI#]8 rmYi>ZLQ_k}ޠ \Lykwy$yyȋuKbv5rc[ɨjY{Mĉ6 KA]\lA^~ SrLȗU˩8'hpu '' +W&z2%eoS'g䯿V΂g0 'gs0ᡇC0oзqNSO=kw`PW0S>Pbt~ÆFlfgacaIHn]7[ցin 4OLr_A-nM]*ف%%E2&ɢc6mo!cSyjXH'ժ\Q=ډj1P8+mRqpi'χJ{SI0 Bаvܩqv9y.| ]fM[#AVKB DM7qB4w9eWG (yH'(B0bZŠA71ƃyAtdD4C rPrr=ccPqamw5F8o$ʪ+w~N7'!Ązg=u$=-Bѕ EW.+n/"ËJtmJ RtR(@$TOBtQ=(dZ^8֥Iصs![W*>^Yo'Vv#T[vdvąUk"3)v[Vq^m)w+9{|mХ!Yi Q"~.AޚXEumP|zogr'O7ě?l'tt偄Bۡ: .8*Ul9=po4[,`g4N>|'RкO_x>T}n샽=ɞHCJrKuknظ3Фf eV2 3A!_})>S|:U,Y~"1" 5ffnENUh8IW7/FJIw`0t//gg3|2*޸sgM_!#oNhyq\'|EoӠ>B:~^v@mw݅6~II+4/#9+>\#l^| CGÔ**(I) މ-hn ڎWy8x6?Ӧw9DEM 5c`ƶ'#&o5d' TT =0e:;M:ږ[T_\#ȗ?]ބr8 ^6oA~s|.dvKA%f` !ˀΗ%#֮|rРDKi0;ZY>n__0pTOз7(2q@tY,>R8gߗe$ Kʗo^Rmf)Xik$>Vv~(eRkfc*/ݻW)j9k1!UldOÐt33c{Y3=i?ڸ l#pg# so_|Y$yϠ8>QK)7rq*w5vF~)s `;VavAoL YYξRbci:$: cLxtglŒI0A!薶}0 2| umm 7͞}W\V:ZuX\?jN pOB^Ao;sg=4o@T4Ӊع3 ]&E/c07ǎ"TYxt+~瞃Z==7)~;FEtN k1Ś$;D4 C#~$6G5HN ^sI0'`U 86 mJqিr<_?q >|n\|þ'Lb٦ܺq7]n\r}Ooǎhx 1.>-}u0WĎq D&/js~F醾F~Xd"zaPuI.'siqUTC 1i-w[׾^imDޓR7q&`Ʀ`L4 C,DR[AK"*U'akQQ~,N% $DxOIH,̓Z'ztZx,*-˜pp `0JGDDŊ?z$NiF:gQWeQRE~+^<z c_pz/ǎ݀=VtPYJL2|oq ;1DGoɈ!?5܆LO.gk&rccݿ)_8rrtV`= $tިD< 4|L'tImȕ *NtڄꝈB 2(*V<OmN +Rpn*x܍4~ZȧEX^?^ʔt$=YǷW ~fJ; u|l) ޙؖ{U-o۰{ǖ-QL4Zv?|5¦h \nMh;7i[^qe].l???erBz&S&deUQB۠r&rĿꅇBcxR WDvG5ގ%|?%~e=tu/wRN^C_lEA4M_2ĽLI$eJ)Xpvj͛_OYf yup` KSVXK0T 20/-jA+|q~]'wa"| Ex鲖8|oQ{Ar }[ߦA ΜinCZ#or)sER9u6 OOl&}MKP?n.QnY? v޷MՋ766mj!RM$`0 ޽P{^VNIX:ml=>櫷gwT$W|X7o؟AΊVdf+sC !oXx8q/q$y곎ZOZa}A ۶|F:/oMb.D(%qq[EN-WLbPިNeKa.9~ˡRXAmU_EA6ӾlV5kn;u`%z{`m&uz B}*=]+)] UC EcDX5%CS@WHA\ݧAժov=L}\|Ժ3ZV={TN Ӻ+ZǨh `6g; ksԞoN?磰bԞoB:4g#Z_qTCvljzMO/4Mm23Oȏػw(A $H$C8qA&9tu]]est48s8~c#j"  8! W0[կGU_ܟJ[U][U.^Ls'@=ƥa 4QŖ-q/4^O\wÇY04$/-ݔeC1ұKֳ]z b>С~:To'SDu^ ^ƥzURߧKltz9{v }[Эۻu4P=-*P,]߈kEsM}6$0 Gii_ykG<CMM >.uıcDb_QLĔ/ſӉ0 GId8w>]|=ΝWUyի ; W+%بD:i/UlTy(4]*iʮQ(TmQ GqyhwJ2W'4.VeۥJTWOk ԆV ; ppj~x酿*y} _␖iܺ[掃o\H)3᝼#恅x)*>Ǫ^=**( g91WΡ 4;`Nc mniNP;XbM;6VJc4YGs":MZeKCUC ?NܞCҀ}Gh{L…0~xiLl^Xf"<'D݄Y? Qf~FbZ4چ4,!P`'a (-ݏ]H ?G}#oGtjono]*OkF0)FcC31JVjwwM88( Cz| K Ŕƣu>^ FQ ؽ>ٶƈo "y9;V 9 gFwI`*/_@L8/jOQţTuTP8IՔtvϞT j?º4.EѩHB+"\9;IVAlu64L pz^7dꝆԿNZBt'O4C>,9wqlW&sR~= Um ]JzAQBm,eNle30CW;`3 4};Ȑua fTTzɈut#oU\z,jg#;"g87ܿg(gj);P t@}ky.8=-+*¨QtWټu$YnaF+cڴkW֭k 0s]KrF; 0WX<0lطoy0M 1?rNmr43iN2eLмl)n]<:NԾ1 :KdZA:߿ cPQfj}ץ4/|p^voc/+ܘ6R@ K_(4dArѣرcqȲJ'ӯ]nY]]*g:aʊ3pMоySt \8uJ݌V^afd٘3i}6aVabi`ҿƦME8 DmNJ'qׅi^N7b:'t;Y&9]Vzk?^zΫ뫖w/NB.6oޟӰthC (TO-CXKt)i}re߯~oī5lVu!""qyW9 0 4)/Ƌ/.o~i8+cAGϞeHKA`a wt<KLMथ}Q7- wƘ19x9&x'6xaHcں]\4.Lzݔ5KO7R>Q[:Oú,=FF^#^{55 sjL:rr~-^ S]~[zP-1Hi{ӅNH؃[c'K 4M=>BN}&@6T* 0- ,FtSkر'L3JR. ;T'7a9[nY%FVϠA;q 35y99M;t6xaHcں]\ݔ}64/*4n,78N!qwbc`1]815iz2|?bΜ7u^$4l ]>ЮХjc@o/f詍/$t@eZJ]gƍС… ra&gժ{D'=O_mkL >.P{&A~Eg/5Ht9Ю];#lGMMMlI` ҘnWo^yQ8ICסu[=OQ[]nK %ey嗗hS;s v5TO iLĭ?D~VySc ޲eK: a& 1&sbQȎ߉ vaB=P")i7~ۇqPVxՑrT6xa\B>{4}6k-&^g>6:{kj_wuN4҃W?_<mۦ`6N$6E-7Kߤ5#ņ n m۶ m۶5vȼ[aPȑXA<o|iHjlx߈ߋիgxPDvNmLø@} Ѡ}64_^gKG4nalt<`aG܁Oqxɓ {#M:z&A~RyĈqD nOw3tj3 CwQv2EC7%[ Bj2,l]ۍN8*Ä;ivquuaK$ ӎu]G*a^w^סҐ04Lԧc"Vp:ګHB*?:'  ؉;2kPTUuҎ^ajP9 NO? Y'AY) HY8KJ+02`K0y~a3 0GQQ2^yers'O<пb߿дp:Az?0kŋO4pӧڋ۰Yn(ŒE(N\),A$g,p6?"98Ci(-D\U,T:$jUbC}ũ(,ӧ+gtwׅ4@>d79 ; :gXbSFW/98y0 Ä Y'dMD)"?%F*!C) 2a}HM`=.Wc OaB^r\6!#Mrk (dBׅl"w'XWB" ;B Nǯ"77'D@Hq$>O%CdJ,dfqIIvmFFvmVpdXXXXXXIBͯ21$ƏLrš)Xz\Db"Ԋ9b8"q[5%|{dߣ 5%|iL\7td(A\@6PrM #{~qM #{ bjR){d#{O0){dOc⺁pEWSixmZaa ; 0 (a'aa%N0 0Jx&aa%$0 0 aa0 0vaQNSr_Rbkj8 qJ [LxVe\oѴe 2NS;SrVsaXΰ}.E< ; N 1sJCW]Cb՘^bk! g{HårV<eV%H1T[) gP.&AxYY9teYfIp@"dn5˲0T&1E_&B/DbִZsIϦNB$܁EN+e$#< 9J٢le g] aQ 0 (a'aa%$0 0 aa0 0vaQ?ﻂ8IENDB`DataLab-1.0.2/doc/images/shots/i_create.png000066400000000000000000000165661511411446000204500ustar00rootroot00000000000000PNG  IHDR 08 pHYs+(IDATx}l}w:˶lɔtL5]:])wpMC%- SǨ4p  ("Ӽ+3mU~zDã$AG/;}P a7٦hz.(lTfyDLKĽB# 0㛺)D'/VVn ߙ{ 6@(_D_7'Xޑh6{ug=te)EDDwX Ȏ@za ب362 SB%ڃF a zn;T4>Ḵ%HGy(y KL6 A}TeY Yp 8!,˲lId]H4y'VUewB@BzXFv_x: S'W]}B>Wq}"룬"pX+'ۋr^ ڀX;m?+7~X;m dN!n)^$@vLc gx%UpxCØCMLLY۱ /qffFv/ OO cςC`DF!A`D48 *x 衻}{<۳S>Zo,(A㇑~Zd7< co>'m-|dVo$Vu_Y(9Q#[r_H@ $r{V0Ȳl{aeY6?L7 KVt2Cep:؀ P5[%I!/H>]yM>rɼHGD0'~MM|Y3={;SsLd9X2^M_ɨ<.wtAx,iuˌ3>WgroInazlsq&?ږB8\.R9𘶦/pQjv]:x7u@@I:JjfA-.f,\R;M32,c<%g{2#`.iYf #CHw*lsG#?^"1;DߺKgV`y=4MӴ}TH3^4;j݋8.Mt/r彘9ܵVIWSm7NT/}2]H6\.ЀGA)4g<F!A`DF!A@!љSǦTu뺔Dd"+}jOMHLN$HweQ/ و`ҵ9]*|Ag2"x^$%x(ՀS=6 5c:s#5҄ xi_X+i)9JQ2Wn T\r+6s,i/܊HFOeEpa;ZyOKQWn6Dfխq!1}Mya D@FuGC hW@T)oJy%56GW K{f=Jr@6+ *70~<<0^w]*^!Q/ TyƤ3&9;R*>Ţd&n`X܋FF/\KL+ɀ8{CJgB8.u 3/@e WoG23[Pd,]뽲3pӞWeydʺ@x}iefji84>t*[8h;ND6"m16F ?!v1lJs@v d [6m^Zpq:6c2a Qu]Y;m_P~!^fR,5hNz-?\^^3wiiܲ4niFnrm}9x^pw01FEedRTj YJ'T"OxEl<ҥj0W916efxJNA[n'7]h'bus"lDy.ߨ18 7>1e/ѼFG}B]WV;-(s udfeA6~]Ӫ}1ګ߬\㕊IJi4QzIHge=q*?#rԞ~dP0ŇTcJx[)]==mL|.%gn~?R"9ٕSzKrV;Sޝ;wܶ:=x1nIWi84CFX J66kt>liOb#,J8Cyк1D63߬GcSi>I55@b?ZQLs2/{rʭi 'N9nBJDo8ox"5@Np:'f, ~?O?uxCnl~4wi(nÑ+fiִ u/#𻘬/(a.d#k*D;sSws%LTD)푍HK+77L7Gm)eJE\OSBr5Xd#bS]Gz1e4kY %D$.sh֢nUf3Yj*]>]>ܸvnS'@FWzn_p<{' 7iqPxyCw{<4 ⤋d"BUJ(AF <@eJIp:oi/^ A7,_0Ȳl GkOt0 |_ dkM s3Hk0Sz']HױcEn>u1Эg۪B:" T7i,u|M5Wk5hhБYU/9g {9M]4l'T*ZCJk5Vk )15rZWN€_+g&x ]B|G6 tttLWXfjmXEj4Z9H;_ݾ|xjUoHzkwte5cl'oCJcLI9bXoXoX*ONX/$##lD֞$eqt䈈 5ȦQ>̜i 8G$gKP #<N|~[=ǚ|7,XBn{9 yo";b x Ǟes ,~TF!A`D"O'/5?ܱӋC;PԳW[.VwɃ_|rn+%F'fvt$2#֧#m(U4_jdۓŗ{q.ԜX|ɉK/5cnF*,7.'_k8ZFO:wkUs\zXWTih_ \D ~#c+-UN/N~Z1iűӋUW[cUzmQA;ۍl~o}4aMo#[Mʆxў_]zWrYwbGf%\;c*v&

    gTDyqg7+j"x@g7UK$XyT+\qfCStb)랧3ca3+*dELN/.]9oiy|+-uN/NW[ue=qJfz)>X"˺+wZ㓯Υp鵺滾9w鵺T|unku*\a%@)GavǩdrYuiLpYɕw9/GY_:go5~vӉ&_l>艷&U`CpOHN [[fp9:5d} {:nRv"x Y> *.ci]@ր/z*# ${EF!A`DF!໇/}WVdK!Pވ~{3qfT7smeHaPט}vJmRD9ۚ ,X(սkw=5.R5\Uqo8WcKKT>nZΓj_^Cw|ZL; $x ]^`KdW72+m${6~$߾QJ?(CP;Щ!W3?z{s]]0S%Uu)=='ӯm9\B|as0^ր_guKֹh7,,hRsfmE=,|)Htt9 W%Uu }-H'6"v@'VW /^weWyPbCȗ1"A_\*GGW{8ui=>)UDǽ5(cDi5o qRieD{mE]JEU'98O%қ_}Om .XG8 ־=w5#x%۰ xI_?} {oSxFj٫dK/B# 0"B#@! {5 Yoz勇ZG0̿]mD^Ͷ7߻OX:?>=_CJy{cc|Kީڷn5mRz+l(g[#Zc)SKt=dMCB]We3KaW/و e ({XϾR?N(U=Q rTDڀ/vUy~/ Ϛ7]m>eto^@+\5bnߍ(]|aß7Z\t(r8zyVuWJRIENDB`DataLab-1.0.2/doc/images/shots/i_edit.png000066400000000000000000000267261511411446000201310ustar00rootroot00000000000000PNG  IHDR&?d pHYs+ IDATx{xg/eĉ8q2v4iѴ酤i KE- A,KY:{8⧬"yEKfQZ *6 ^ړK8ǞėX94Ʒͼ(H}@IE6lX@hM-> (nܸFs&B+PxCHRXrIJrk3{?t)0;ϕM5;CHV:s O3ڜ^T9nAe DhHXr3>6;t)P^vJoL6>x<#w`!%ݗ|C ڼNy3=~!ю":Q3[\}7h Md=Z6PNmv7R פMdwK5r|܊_WΝqbsĀwx ?J7etSc,˲D/js6:{rH@ }4,Uq+R07`hݠ0<7\/qq#Ȋ/l@dyRf ([Yy.\rq܊(⋋j89e[S9cӑxֆnÏCUImV9XeY.Ԍ =m!z Z+0#VlJii]*˦,͞Hm$c7Q3;T[onnCYʎU[2NcǢU znw "3-ep Z5RC|NJ*~Њw nf=vw.[BqlbWl. g\]*"3U1^4WƋ+ժט]UKHY#c4mį7~R ޭa7m7QۛmRY}Þyz]*~G55~Z%M*yalz"ng9olф.ȞZa(cqbl) ~(xNu#?踯@zvc,sdiVwZVEVf`2`ZcѩI%_@IvAv0 i3IZDKGke=-?d UN1eOpLGw65}EQU)MYBMra=?1ͩ*"Qr)?DH:|Q%'VdA k}oOmYA &Ն1}kR/oKlCݐ\Q|i 򽷫kZ:z/JVreG*9$,вcj Me2?]\  j,+ 8LBH CHRXrI K!Ia!$),9$tFGG>B+Bmms~K.'!a!$),9$%B’CHRXrIJ𩩩+ʲ\BHɽT}}]cN"%w…8#Dd> sBVaxuǧsڝaYe{;< f,o 9TqH/a򲲲D+,;$YE\Qs&h=4FDNl|9imMt<8E24V5-ua#"ݹஶtiXe wWʆBt a*ћh=mjZ:BKrᄗyMj,} Cssh2i.8< S%l"2Z B.~.¥!^rAk׮!fff|>L&oi'i{, dz &MLӞW r b߾}GEEE'2v%D*08tGz-UYV\]]ݩSFGGGGG/\ŋ/^KN:UWWUN ;lLIbWW$1J,^hc,`_9 b+$Byw $),9$%B’CHRXrI K!IySQ=inM=Jnvw/_hLuhBUC;;/zd۷wiG# qѯv}aAA|Kb߱/wkoٶNm͍;7ܡٻvjz7_>I)i؍7?=}⭷WUrc>'ꎏ3Gh&Ekx]=_s׾15=R++ZTw>oڸa}F,n]>w "$)eeEy_x>¾{~/f}??;qSsceEy6 7GNM4bt1wlh3t!lY?G`xr=w/^|떧]xko=uajTeͣĶu٥i i\6C0vy5csBKcVfeYreڈX۞Bya8RKɿ6NOϸ6_G.|K.C o 2Nkuh -`ණI3 Z[4AC.Kc}NF HAҫ]swP3C2v̮!#P^X5ʞxm^ok=A~ovlk}Sq97T;ݗT7ݙqNKD;"LRШ>iﴶBw17̠MZ$>^矼XT\.xPXX`{O|##no]cp_}VR^=J)EշR@꽮;U(&uE:iRA(1u mZhlфR-iWVn~ LͯN/$^r%;mͯcd>鶧v6W5ה쯻2#)EҸV=UFvoLhzHZÝN* BO.J ITUOxs oo\yST [j,<5=|]GK/ZR$| ޲_{7RȪKJ?x̯_>k*OJI=fҘzEX; hjoj'~yOnj~hgʔm^ƦS($Xf ֌P_kF B’CHRXrI K!Ia!$g&2=եݵ%l/W1 l$+3=vq2Z]VRzZStwؘFb҇]h^^S\rrKj ٞyZ3eR"]"\|WO3tFޅ?)ģ O(m7>\AFg/mEM ZǢS$ժYF :Q.N B(WNJCK(Y s/Ԕ<^ _,ӻK+k[U=3΅iRZ3BYKqQ)'kBAh*J7l-I K!Ia!$),9$%&|!$)LBHRM[rוʀrVZ_qk}7-1 ,NJT/ZU.xUEՖ]W!m0q@-#ƟMgKl&P\NF_6%5m&|[=a!FsBK#m,˲;H#rAsʲKbK6@fvy]zp1QBh ʝ _'β[W[y _4 xVb ʓNe=z٣"m9&|QM@uۓ5KշR@꽮A(KO|s~wZx$|$IکX#vz,Y\@Z{;Id IZVժڽXqHk! _- LBHRxB’CHRXrI K!Ia!$),9$%; h^GhE~oEX"$1,9$%B’CHRXrI K!I%(9 >L&S*EEB%o|Ng?~Nc U+rf4157QCgm"òt8YJ&bGJ` %7"=ɓ'2Nc`*:~tQ~?63!hnal:R=B : ̒xܸQ\$S9;#tcǮ_mZǢ&@(g[YO q% DJo Wf3ժ\gDl0sU_Mbg _3WiCLhuanC[lIԙL:c 8Y'^r Ebg9o$8\6wC/˲ ; N*wHk ] n?j!DYh,s˦9H/9\.:1+) sP,vOEc5R1CU<鎛 xkx,jjbf7?E0xlܰ^ův,w?E>[Օ%f Жz=Ʀkj:XDYh9Zj3})c?k`l#$Hx~桶V?p v+,(W80L g64hCX븝}HOeOjkݶNppN}M*^6@ eel\qɾUVZZYQ^VZRVRR^ZRVZR^ZZ ;UɅudwG8PƮ U 5Tr$:/Q~*Ԩv'Pium}sjf$Iv@$(c&`MvŻ~#G"r-s1m"[<вdWff8yb*%GRYYY]Ah-o"h,^VD/B’CHRXrI K!I77ǜ9cv[Y"2,odeoO)n!Z%;=ЂOΟ=gl\ℯ7~Mu[7WWoTu_+Q _%~-MU’+*,RW{es\(acѡGN^Ae9ݪ. #*r)r(Gmvp#=D(IPTP?:vq..i v *YdEr  8"*'{9ڔ0ia BC$EdvQȑAvBA77ǜ䆶V#ʋ.uiPVQiP&(2Jξßv âDhdQuK(R*2R&+R*uhR{BKtF$ mDF#-BU'r6}k8<%yW|h, NAjT (,f~#|ORi=fU1\q̠WHjhb ] z5N-e2$Z-y#-Bid҆҆m [jՃu{`CbB],$3IZ , XeGإ2*+>jR [=jA(+,w,!rP/M%ڥ: v$VKBJ7)W(ۓ7 _RkkC?5jjkkkku!CHRXrI K!Ia!$),9$%*9nq">;s Ϸsͭ7IChIXr''Nv{,>sfS_l5J*߱tqAvS'ᦇ4߱D(FYT576>s7mZƦ!#L 冊 ɸC5bs#yWģ폽al,@^dۥKS,)'+&̨? N}tB+SᣇOf|ŗ ^?w\z\',̤`9Dl`V$02LJh/D=FE!/g _?'_=+'^W^=4C-O>>;v/ބHp-w8r/~a8ҋXT^ķG'^l B%|ym?XS7k;Pu-i=U[3,"DjC ԥm3wI􂡍?)cA$,آ%H*w;^9Q^kSd4=fw(4Tʳ̙xQ~XxyI^^_kOgo@Gc=M5G52elЙJfWvbV7{,#ዛb߾`ˮMF욨=Uii?K:kh,,hvDw:'F/.p e!,ho+.}*Q B1R%|uf! ʪn_&yZ٦;]EhUIcB+BU-9% 8DHRXrI K!Ia!$),9$%B’CHRXrIJʒMK*6/Ongo-|@+Ǣ#Z#г^fKtt| aKfB+Ւ\zJ.MdґGOp&2 Gͤp6Ei6CKtD]JgEX&&[\ihکg0p@hUe_x!)eYGE|/M',bZ_艄+Zk/|01$Z5RM+ z!4KO=4U1Lakb&s ~@L͕dn-I aD?uIoZ,r"J,=O/y/iw?5Wr>W6V/[6%JQM*g6H8;8_+tGk ժdo{%`DJs; aitd@˦bZ=Kg4F5l)P}0+Z"xODvAt_/*6Mm\в]v~X{X"$=Dh`!$),9$%xq!1}ZDfx|p__ׅ'@ e3tz+tb/|Dnń,M&&&EEEQo(xcۅGͤ/aV9"F1"%o߾u]j)PcG's` )cl6C{45BǢSI3t+4X3Dy Vc ip$z;'Dtդ4YNkuvX -"A o0$ٳoiizJ_]蟜T* FPj́cEm"[<"htBYeY XEEE /`7n\rEP?KMXqcөnӏ raBR/B F96Z,066ԻZ”6ܯIENDB`DataLab-1.0.2/doc/images/shots/i_edit_annotations.png000066400000000000000000000124371511411446000225400ustar00rootroot00000000000000PNG  IHDR pHYs+IDATxLgǟ`0$8&$1(Jzl;mu#VۤwKD)׍r'ߞ4:eOUu,8vՕ6X5NKJң0))`|lYX+"G+\Ap +(W\X\\t8333KKK H! veaa֭[sssbX"n׻!vefffxxx޽Gd!>zJMVꑶ '] _| aKs8}Ƚa önYprw:@`iWh`ZE諍VYݠAVY H_`fiWe]M D" 6o)m(}a`\-J |~yyǏN'pMw*Y[~IJ&ʬMgjZ҉MXYoidKD; zKwk!J I]N{7s19" ryoo{Ǐ 3770 DlxmQSSMQb ggՍ+jhwOȿkd0u=TG/4KxZVՄ#;bA&W}PZ _wwwΝ;KKKr@)AF3giW&&&cKW_}UXXȨ_|E* wj GYe֯,ߘZ\NnDvU_PP}۷3xx<^QQъUJ=U4ݹs|>ߣGj560?װ a*))9V$߿NB6kѠZOm*"k##2 'loБ8e6hELhLZzSbJr!e6}6hӵk&OhBY찇Ao:!ȴF,{<ъHϯ sZ z 9Kh qgѴ }! ze0z+M3'KYi 0Nr1I+_ :t㍌D6mڔP˟D^x *hQw)d;Y$Ɨ<fffz{{0X4=)$wAsW#GNL& wTw@ }%Y!_*ňXrUiO3B];{prh3*J֎ps*3Vυ}R5:JC;J[;:BF0.vx 1mLToĺ%WxP7>{{_¾]yvyrrr2ܸd˥I ϊZ.19sa(Ss>(ɅQw.R{xbHc!\>wnU!J/o~[7`ϟ̎ \^׿!DTwV/V-3)מ99yNm>fn7_$j]&7koMZ.N麌ݮwrYexi `ÍOcfxjmv?}&j3I`ɕ-.x;_~Mߗ%+r0{UT*c'n9z"ilۢISOK.RZT*qޥpb-v;l.([W,sj,zx%_=GG$γA{Gp*/o>t?{{U poU~{vXb<+m IvFq*Έ? ?ٳR~t9fyGAG74>z.Vz .] Bryjב?,?vRxn{`X?.$+榋O#yo:Z-@ Y "O _ژI**[~S%bGaa梁U = GWvHSٌ+kOߜg\}Wn/-j֤<CH[tyEkϯwY$ocJ@q W;.D3#nX)-&wP r+\Ap +(W\Iyeqqp,--I$ D"jF7ە[n͉bDgggW98D^Ү ݻ7o!yи"(l#ZghߠkWkIaɕb%%%eeeO<ə@h)*I%WVA`~Eq|>߿jj*! Rwwwmmmaa!@  b1a@`aað;vl4~%ԌiC5x*kk7YMm3,N\Yo%m~ qug/TNVFfA8kaǘ3ỲB|-D73EIaѯϝ; 0\,:.Dxj>F9z)kjjb㙚A8 l۶m۶mM(mzIF*" W5+-4.P63ՑBE= Ma^ V:l'0ƓSF3s?zJRJ0t\ŻvbJBP(D"HP<hPmFhZ6ʅq\NhQwa鬬ɵ[lRPfm`2Sg?ETSYq 0մڧ+i!;G3W4(hZҮ*X)g,Ob[мoritZq`qB溦; 1):Ѡ3+ړv^i2SRqXc5 JwzX=zI6[qCe`",A~_(:i/j`yJust̸ a3 zΌJ^Z2_]Ap +(W\A WP kG䚊J'zA\Ap +(W\A WP r4+hN WlN3&gAƝS]ISܺup|@d zΌ WP rvEŰ X+PnZX?3p8ښIENDB`DataLab-1.0.2/doc/images/shots/i_edit_metadata.png000066400000000000000000000103101511411446000217470ustar00rootroot00000000000000PNG  IHDR pHYs+zIDATxl[u{$EANl-N8 '¼5CR)D %:%\ƀĀBE@:LZtыDZs_o?05K_npshÔr4-%Q1Bds,\^kz>[d4f'nvB'8% mX<6^{cĥǖ<9&[FJ3)+7uRVXBckqXĻu|;Y}G5ڈݡOﶺ,vqzVq>~m S_XzVWMuvE}$v33RZHi3 7CP0, -X{2VqChj38'hSy̲Qh4@"%qn-ceN8~NuO<;m*kC x9jѕrQYe.dYgKVXѭM4[-̍I-C#i12U2R\g_jp8z6W_n`NIDE:\;<$l[ax``֒Ilܞ K0;:.ϵ]FJ,Lay7?*mvLXv,4V8i 3Fh7neH.e:'lM-y}`w[]aHDFJ Ν;IGiYX8w\FIg4}iFZ){yyY|nn( x(ѣ>q@S]]]~ ho| <[RCbBbBbBbBbB!iuuu}}]ZRkHH"=3~Z-|U^^%$@& /߿'ǎSIVL"7oT*r< @0:ySŸ{#k:]sK `Z@P%C1][ogNAla0 !af[?۫e=C=K]Z`=C2MC[e'akNK#9mP(DQ;`qlg 7}k@܆K8p OMKMZ0i%Ag`&4 %@tQH!-&\^]]-t4Mt:8?13mSgobgQj2$ehd"ВiJP( ŋ9U*盟$3oktZ3.ƚM]5K~BgVڭjuc2¢r-Ci@'py|`g jj iОip-]̓ѵ*IJ8[K[CP4@Mss|(=ZHm>;;;+8ȑ#c%E蔃~x(JVwxHQ"-Çy>3!@1!@1!@1!@1!@1!@1!ɷYXXUH_ﮘ=!\bbbbbbb`gX!F `HɐŞ~9?d {؉ǖPd<Ų9"=3 ){ d?ǫ3BCC>J]>j>'kʾ2NضOލ[|ޢt)TP_n;:p0[0vuBHSYAJ'* -'ѧ=gzD5IVn"홂\W+ğdTW}n[DKQ5IVws+ X>u-ߵEr&jIPSjTi-{4+?cS_)1swź+견=vok^ȭs`y|sRUU]MV)RoXw%;Wo0s%K+K6fNa;( xDUݫ ZwHAv<#.cBo4Tie`|F-a3L1PL1PL1PL1PL1PL1PL10:!F 3yl|ki0I~5 \h3ypYBS:^*FO./_ʘ~"]t EUSsm_6_\-I p"l5WCG2q,`ϴ+Qؒ>ۓH8b29CG2q,H‡W|zo(B1Woؒnwpbmt"6$Ʊ#{O=!q'u2σn2BLS賏SYTV1H&;:쵶"'(R;Xȱg3fڅ:[.L>c[};Б,8bL6RL`t BNAxr]#yenńńńńńSb`t B NA|~u? 2NQGzΙ*cv  J+dw \)[a.?CD4)~^VQf*lniY9)|1(Ig +啛 R-LWw'(y@qmxc;rReNN)zO L1|黯ŋ2OG_J7x_n5$2Mf&w;)eO[Z|0}O{&}gEzQq ݆7/Nij%eOaN3ā{|ԯve7^|Tn?rji.\G:5vtkh?5{4 ԡi;Yu+]P7V2a[՝aS,2Y@;&`m ]&}Jgr9(7 >M¯0 evԉo](gKʞ[$֌¤)JW?[ۈL|BD<[S%$Jl3{RRM3B0t)uxF\BbP)uX׏ň 퐢Z搝".sx8! !Fl$M Ȟg&rX^^.0)-8ZPcIENDB`DataLab-1.0.2/doc/images/shots/i_file.png000066400000000000000000000217241511411446000201140ustar00rootroot00000000000000PNG  IHDR?8 pHYs+ IDATx{t]m\8xlQBN#FoޓnthDB xi8/uZ06nA4Vhp٬ B"0'N$v|c4≟9f~#WFyxCCC !,\Z 8e+ŠC'QyB?+^5WoHiإ#5km=}d@KR9UihR3ʴjЂ<ߩjLdi5k;YNI11Gb3i"x:(5=W~?C^i?x$koTvd&'IN Ҩր(nP?tfmD_dOuN}* ōo<_ze?G\-B׬5i:^ lN iFܾ&;-6ڵ*9sg@Lt V8lЗ&G$ƌn_t`QDSTRnJE**oF=Ax$_XG~y`dF]A8$O.:͛a}W7Ho?ΰKBb ~pDė} /\lj\Ǭ8؜s}w%u+{}eaF֘xEWj*^cҚsuQΜM8ELOv3y=POԲ'<7bWB-.(A- ? x'!KS35@J I Nys5lb^R5"3czZ*}HY|}d@L% NlmcS ƝRvC WXVBI:jWED{tQ^iobM9}Sg&<ŦB0uӗ+~5l5pN-b;t/U~GfQH'ߦΞ$ 6#Isd~~kJTɁ6StDG60QߨpoKG^I6:g2L! ^:6FĦ i st{V4ػRTfT#5( -X uX2H{f]jj4 iL'kK5`x':%1kqΜuj!3EnǦ2z bS`jCI-\/D.I#H mî4أ??U6 J GTd@"pT* P7@"܀yɓ'tJ\v:{A8~-? UPHnUIIL&o ޾8_.z?NX_ZZzymߧ𖺊Fpµ=,2DLVfZ'T`Mm{_Gꁧ]4CQBY$uS~Ou;mjW<ߟ-16`kOu|y qgUáAk"H#k4fX(5Kdn*۵ΐJluD?-<}?0E[vhQ ~)cLx)J͌,Me>.:byK1-^R3#uSuf$Q-(_Zu%UED͒W-qUyeh6 .ҴV53O,M 93&R'''_~٫ce-^RQؔՕ,Kјr|V"TPj]75Zg R U]:~)-UIFR,Mr,˙3gV x博+7^ DZM6_>QE`YLTHxa_ <E Я.[\^Z_UUtܹe=2dpC#eX; uuAAZc}GHʰO|>A+V 2t>}:4*nHy,8ucpo;Ve28z;QĶLVGӥG[%ű 3'זv ݰw^;GY7ĻO-//ccc"~w_|1o޼LevAomn]'w.L^ mfIif<ef6 ;;74m\nG7lcq6ns;{6jۥѺe;fË́)SSS}/((8rZ?jƍ Naq|5$ ??oW]]]|deF Υ2# %=-gb=;@cSY Ʀ"pT* P7@" S*yҥd\B(upr U}}+˖-ˁB`x>+򊼼B+,* ܸ }*.YiH'(FrF| /"'e_@^ⅲeUU)9:6Je]YM"xϼ?/獸&\C>,\Mɪ$Ik.Z fTWuSgsw|> x<r +ejק~/9{ճafY!%|/~_фeNr!Uۈ@1MŠ|^ V5U/UۂHwsjΉԏFO `m9u5M/|v|Dު}$tLjS!:>4^fe?K1= b}w/JU/8 vJGiT+ԐXioʪ*='~zl1S/uQ\x0U",PwW"m&bdAv,.ǩrTvCڮa7NJLOy͈;J7hLZ}٭?yf?|g#_ oOQILKzhgz@7*AQ^:ԑ9|RMO*Il oHrO=55-yB_~o*R%㱦NhkiJal-wǟ}/OT=MnФ$kY R`hBr驭xJopOuRˤ/OKƀxYPF'|T,U),h1kcb9%\O--V48S䶵j W/R>G\cS@l*Rr>|б~g2UUUnݺn)Vm"H$Hv 7@"pT* P7@"pT* ~TZQQzjX$x}ڻw=)rY~ٟ=OS^Eyb*$疿{y?o$ϗ[wNnphf7M1gT;ԫ?|2t jytT^\]욣jb`l5$RO:5o &)/O>k~_ +7JgϦoֺߤmf*Cz<_@2F56gJ---zLqhքw+V>ozb8us79wQT/enF2<P tiʨ¤uVL%UԉT FN| }=Kn'EEE ܧV;ec=#_!o,$h'" &TnSk֬q_<o.z%{hrcccFfFeroK'ihW7BO#TBTf“vgbK*4Tj^^~?vN;/0I]r%#LtjD}#X9 ;z &BUMꦛnkoJJeS㗋$<ŋtvvK) -^}SG˪* vQUZ,t?Qh4 Ug5+%U3*;G:sLii)λe˖~{֭bň?$["Z"VX)޽{ƍ#<2S>"HixwƲ~ZYtASnJE*TRnJE d axxxFGo/^؞YZBLTRnJE*TRnTGzn,\=qf%a! z]‘6x]ʹ[A_8|Ç)t_ֈ=M8| WN"H,z㢁?JlxKӵOx~(:xY fzL1=S0#2GaWjW/}rl':=quIc}y_)Ҩր?] B1㜇] < }jcLSOx>Ig"S}=)N9oT`W[ '܋ ~SP*UEIlq˾)U# "]c0T\ȶ52+QBiGm42Hc&䞧^9c>W_jߡը){E"tT!ݯNgkgYeYvDJ۰+U8wB{}_x}*ZD>d9zIDATKsJִ5* M*UNlM:}YK8J\&G@p?|e7Oo:4UOX?`gc (t,9+îgŗM;gEVUޱ{[S0e522 y$3J g%&81'ωt]xSOW$YG@e 7.2'TVKGP,TjS5L"JO¯bT*vU ZQuEL-[٣jWXdSOJΖS0 `1P7@"p෩iP6 7篵 IENDB`DataLab-1.0.2/doc/images/shots/i_grid_roi_editor.png000066400000000000000000001571031511411446000223420ustar00rootroot00000000000000PNG  IHDR2 pHYs+ IDATxpy/ӲqƆ(1E;s D:W,qژhO8줥HϹcŃiu01(ɔ齩C %t@ $8M$?v  ~?x%^x2MNw J((dr!J((dr!J(s׾w~wpX}_kRZxMkF^*kEqv(iZZ4zDDG;;|pûqEQv]UYQ2xG-3..>Oϝ={_j2'^tMMD" ^NQ(O/A"Ç寯nr[8o-|8&k5Y ZxMkbp^居MMDbFI 3..Dz;+Ofk؊}Ug\xj"MO̯ Gw٣յƅzsnjFRltC5$$IJ0w[pES HDQJdr:P `klh|'T4d~]v`QԸ_>4إ*+.9 MEgNiZHM%P48MlnƙԧhqyhZ"s?i494\ UXNkڜ" '#ak44sJd28:=44撓Tvۑ|2G:uvvVߠQ/y7']Py^Ogj"±Q86,mf±1yDD=jrO?̪$Q[յknyP]{( E$rQ?`S6g-3.?Gϟ8q3s( ^tJ *5- o_ΚUjPL8fniˣjk带iZTQ8yϚ#<*{WFQtN4&Sm}`uvז4:6MUYkRJB%Z:"19 t=pV IQp, kSRH'SPTܶƁjkEBTP 0t_ñtڱtQSXz1S{my=Tp6y[ەl-Ktd4f 40D`\2@dxk.*D`A P(,FEp ]ؐ.$VW°12@d J(@ Db NC ExܩC@Ed<ǢdEQ 14ȸ׾?iͳ\h;姿]Oz6 JVB PQ=WB_/ԇF XKƒW2(mQZ6|áu+PQ].V;sXˎ5?sͰĜB-H(2c@rA};_y;8yQCd˱7TzH?|h捗ϼ} {htb^שzRh捗cg^}:u~$|/>N +u?h-ʫ>v5 M5Swt`gA1.,9 -+DDs\ z{w7wьzzX~4"|P9""ha:4cXd~+ְ>7aX9QQfyCd$̨yu4(JZ$˶4UT*7$wR84ȸؘ{;:AD IQGGgQiΎ"skڜCt}͖` tSQ8aS]5appb+4??_qyLw<"fNiLfDth(ЦeRԆR)R`|2FMj"Bt攦ʼnST2.˔?廱^o&Q = yO:lG=z Zcu+?8c7GU;zX qʟ7 Xz24>.Wϩ d"pt*9Mޣ"'DΖKTcr745߳Zi)wr=w }YDD{:%"Z_XZ(LAmmXr>K615VֲM;zXݓ &/Dִt,l.ʚmľrOT295߳c@A#i =x袟" k>>姣O*锊CaX="2*[=/OV?{=ie6߳%.VXӽy8FҔ@W0MV^^LUikJTSd2g8A;&.au% +UqhBd 2/÷_]mLL +aX%5d$t.d`.Qru lՕ0v@1@dpd d^269%;ou K#bhzw/1"':ghvŮFx_i׼>GmgUt )^C o?g~24_zi7Q#ux_u o}m^:<m-+ziWя;}<=ȹ'.y:}-ÍvY{Q^( ??Ye?}KaEhB\8 {xşsiOG0t?{ru!}3.<4l-z!ȸp%d\2.j+04;9zBM( v\r*ӽ7p73 Dr\4gL*啙]ϼ95v؃'W(0S![( WBE꽼)FSDD3TJNtg]%LYɥTL8K##ޣ )[}世gL{oÆs챁2Wu$LEQʇ *, djS][ԣ( WBEpΪ<R~Yh̨2]T\@&t,'I'ԁ.JMLQ!I$)4;6 3T'Ӎ_;s(8n]G2TX}Ƭw$IJt`xS[4MsEy'| HӃ<]t/_;ӽA`suWg Á֫U־󝝝[[*D$4sfk4ҝ.9r={?Ɏ1k<>M*pkT5~mCUޢmk H^N#1z2VƅG7ABI K`h, IJ-nTL,H\iO;݉Fd]3/y{])z~@'$oF' De^K>DYQOIow}yG'oX`(>TaᴶvV8G ;Buy=/CP•P•qڼdMzuJp`3v{Cl WBƅ+!q5K/ݸqݻHÀx=J?7J\xog5.<'l!` z){!7ZSȸp%d\2.ԕףdUĕpWW]Ey^=5.\ 5.lV+>q( Q22.\ T 3,&+8frINȸ(z WBƅ+ٜq3&0_do až,?U r"s91sɖNָ@( "}7Uj_TzbGfƅW=H:N' ,HYN.c#A(] 7 FsN8qvwuںh8򇝷r6zR*EJ*]J@@"c@H`N-sƉ t c7k(;xW$-..vtt8 vZkkӽp-G+?G_XLD#'nd\lKQ,$LHO$1(ɜaPN'A:1NV\ed\Lq|Q22.\ / LHJ5 Zg\ }"#|""g9)i1(ר_ P5.^{Մ 25X57 -Bk knfM~c~Dfe6֨qeEފB&jibjjwZZZx{+4SSk1DH(?}q>\_+""nIy2.jP)L |~O= #N,esSʵ2.(_Ȃ& QS57&h .,Š! cR3n-j5f\ / ϱ(9;ub˸`fUD tu5d[,2E̚7( cW --ND0{2 \ F}ۚ]>U53ϸHĉ[%hb> @fU8np6Cz馩 MsNMDBmTL,mW'<˱(YQs#:ո0C+D1tY³98(Y' g-j7zh4 D$[ >qsβdC*j\lE"2#A`Ț|[..1r-#Ɖȷ|YHqt N :/TKqqǴ¯ K|T`[=̇IE'"귾#5 ͜2qmBGϟdXůLWa9~].t}82.1&04V79cJZfndpsF^ 1*ZM˻671"W-Yd~"A7X.KuN\.2.̬O" " "|ɧ6!{m\d% 92d邐,s1=G.ȸS#t,3P@R |C[-9X 'Tİ<HFߑ< &O:EI4|q:1}'MGgYp0?ok^z̸Z iuۭۖ~=׹4OdL/i=jݪ9: Dx?-Kr[CK{h-KBv/-~7#0[ge\l_>ºN@`$ hsBwQv2rznE6ʵ z`4 'O$A &W֚*{iS`"ĆKG51M!I|H"H$DDD*ȯ-$Kw\sd#%I_89G{ÙY:ڙǎu<~b^KCck]m+ߔEb+'_6ǖV(s2lLjDŶW^2Q`>>ůVv +" mObVW|_c>rc-q5@YHd'M,fPvZusΌHc(%E#`۵Q3Zh5Vy.+ML3n57 bf#f !#5  E2D:66pƅ;eD$MY˻{D RO -.&F*(l&̉Tru&"X|MpfqiO?ɾb_;5Uoygjd],Y>2|͏[f͛Ov'よh5"⌈ E 6n_2.V1 %2c"׌ͅ%? w0Uy8ݻ-H*}41&6&"޴iqMӴ, Xjbpwl(`f*kDىT}C f/s(ϙlףzU5XND[L\d[$.sa`9Kl]EjMΉsfpsA'!KBъ@+eBΙ5v.*u|ubu@dK9fn.rDacc]E8pKۡ&Fh".`t4fujB Z>X0ZQ%q- gfUuC)TO ]>9 XB̈́Vm~OD2˜e 2?j;7/?嚶Qc M p,Wzu\`Tx$Ez`4$I$ +O $4;6;Bc>IP48qjrOy\t՞?'IR@0Sg1OycDN vi}x<(ʻ?qs;Dwvm"n.oOn[庝W_=֐^N_*V^75~]-YiC\igHR"oYڊxs^++"N,| 5- fw6[\%̳:sds&3Oڕ;/)U}NW\4}Erܞ={82|ȡoVK־d=d\p}nlI1[r//q=g\22.[9fҲ컙mY[-xueÅliYs:yuB689地2jIM7&`M7 ɿ%]XيN9hFj9`ƅNÑ.yY`h,[S"n {cRmP8qNYn,cqݠ\tg9DA9Xˌ1L- D$d aZZ+Y2.lbԸ"Nqd)c+9 _ddu="%t.,pݼCA5 q]Er ףdƅĹnpeN+9nV) 5z$Fϸ +bsĈlη~ub ,帞#%k5NDsΘAqQNg - 9g[͂!2:-saYo֟@+Y͑+qư r x=)V^pWn^q>ld[ƅ 38d0}a*.ƹU#,ᮁe\8qN Ĉa($p*<9ݬQqyfͦ\}vj u4zԸhqQK u縞,ez뺹ֺ>qܺNRJp  WBEyU܀ϟHȷ(5.\ 5.\^5.@׸F@VRK'v23d5!{D$ NhqVIEvu%{j\j\5.wҮIX&{H{ClXjb0"'o D$4s|.ǵ ELu>N>?c=?3]%cvKGl>}g_^qJȸp%d\ԁN>̯8;|.AD0:ˤ^ؘc!d`hzz %GKDDɩ -.'i$1,:,FB7봒htc4}'#NNtha~~j\j\j\؂Ϟx{9qbR'N8q}a;jñHBh4x$FVT*7$$IJHMD$K$ZڢxHB]mt5PK6RTUɩpъH&6\3v r8;CVE.1vOQtv^qJȸp%d\ԁc#4\=!\4/&"hZޭ&@W}Mhq9'51RyG<\Ug3ؘLdNF卯k5'5k2v3[WNs~I{ɾxE~}2.qBȸp%d\A%0E~iZ:N*5Mz$6c88;6035m|L*0.Ρ>g:E^=wq%Uĕ*GdLҘT`d^jBIDr\K™_Uݱ`*:oS};LM^(6źЯL{o&wDD4;u챁3/Zh6Qqt/ZĨ{5fe\<4:?'I^0 I$I3S.6 M =凐XO$) Nܱ_&]'Ig-P/L6T;cS>wѱxit(+O8*·"Q:`Oho?y"sW?곞 o9݋{qБ|wGTwِKJU_D"t;u_\.g' 9rh򒵯~n=Y{8v^ۜP•P• 'NFx1I6^z^zn޽k~1]m+Ka}wݷe]E`oGP0y #Jb{Ww6Q2XP6HouG8D`1pl^kkȍp-˵ᕷd`.`qq^xԵkZ[[k!JA\g:Q2XX1xd`V Q2X P;T@Rj""IJ[Ej]:TYRzoZ n\rh.K$eBDDIE걞&"46=Ljb0Xz`6Hk,7NDo}Kj"9e>_5ΟdXůLWa9~ئI؊.t}׸cQr% &ӱ`BI&ufNF)v.Dt[FC!}ѷrRFP 9 b[$>8;xx릣wn_p0?okȸ mZ`T0:H&F2NMD$S$ZI$3 dҦSޣjRWQ*Cqޅ\MD"1v$&pf{(Jk_J- &)RL, K#D$ Ӯl&l}8N%5w[Oyܽ%pfV%y 7jMebc5wht4秉Οd_~篫m 5UoBX8*{I&& 9i3U`'ñVezL*صdPTִZ0 *]0{C}! J*r|"MP*ұpfWŃWҽ *RfE{&S=ujf˷ll&ܽP,9 Xbm ?y<N}w{lkh ⲫBf<M($IBcCK寂XO*$䡱͔^еd`Im5BAU{rOx$I}ւJ-/qcϝ>Ft9:^`'a9㊢\ य=OE6G-}Z^Oխ'o%esɶfx:%/n[XwC cՅhdr|sf cq )Fd؂^zƍNwsv=00tG\ Q2X0 [SO9 r0Dn(,K(@ % J  %,ExܩC@EK(p,J.)"fFdd\HM(,wK.+>ںh\.ֆW>rǼdǰbGGӽk׮: B %`.A[ Nw`.,K(@ (@X8gUNѨ$)IT$)P+X%eIDzz(@Dj"쵾XCMDilQkDk48fˢ^%o꥚fNoa{ΟdXůLWa9~X-zr@w}#JwFGCq [7 MOohb隆ț< ]^%'Tİ<HF|$>8;xx릣,8Z}d\pw&2# YMD$S$H$-̜JNN{D$H(E4wU+ BMDJ!ړpfVܫH&6\WjοvfcDD]=z9%] DSAi0NLćV^´LT9궶ֆ(H#rRfNiPf½֗)MQR YHHIj`jj.LSI>ZW^ñ$QH*),~^B-9ΐoQkov=JD3.!J.ѓc#4\T RO -.&F D/Kj"Cx~Ed8?Gf±1ȜN%Yh&3=2`j;pfV%y 7jMebc5wha 4/uͰ5UoBx4M*FX̩q8 fSLmdn&UpKM N LeMJn-GNj$L4@x\Qw_t^O~Sn1w_RZ[Wv@RFDia rܞ={ l|ȡoVK־d={xܩClS`h, IJo,IE2/ro '$14W%ۮDOoWZ `Wr6Bd`.^qݻw ,--9B WzYZZzꩧG9"7yvC\"?s ;݅JV;`.,0  <%\2X\(o_d(rd- J׾?iͳ\h;姿]Oz6 JV((y}x+կDCG%c+Xa>twYpG?/|S٧/gO8}W {CZ ]G νqɰNJpB#›?BD4w|{{ͨ˹0GDD-Q=%^y9Gs?_ :uk1v{X?|ki#k* *K:3=_轟/yAJKގ>Duv¼5t}^# *=A|nMStS'\׈;o Sa]j k>gJ(jkM8fQsg_8HDFOdOsg>3zKKlx = αnO!{s輧súZ kqX3gVWaXaA}/}W~;"~ G d}锈ha~a E?%7y!|a2 jnZu-Z־iG+޻z’?_}4/Kw-ܴiW~ |/_.m`ݴiDϙdrwǁw&^ѣGLTT#OtzFp{?繒{BODCuMgF>֮}1{X?8|@ IDAT&j#/ oSQ>`^WZ}Nۯ.|e!ͽ+-݀?w8rϕFDDB4F ў#C oOAuX׮%°ڡ+t 2K:lI| G.ԛ̧ﯰ2 u>Sd2g8A;&.au% +!/4m##_Jpx\Qw2#?s ;݅JV;|i*kyn97CDdƦ vnh/-_6|pɒk c5 ESXz5-^cX]?FPx:~+{(KkiZw2$ '{D0$T Mcp,]" M#2Wsun6JV;E+H3DDR,]wx:U`4 ?,]36}Bcn^31]2 ;dة+.I6LNḦ́{@W055GT) & +.I*S&8:F6-%z[mD+ $JECR9]u6Cx@O}MhqVx"mS%yj j6l&ܽwGe㚦i=S$IV24Pzr\>+`cLRj̅@W0-ՄP世3*΅(.i/<}|+* L+* 'V}%`3x:,z'C& RPo`Tx$E:K-袨|hw h i"Gdp4e:o]'͏?K$A`y.]6]emJUA9 `=%GݾVC_T+;R7?gE=z7^ߤ̠a8ӊ(\c=qgz$D=WNݾHLZ]Nɓ.{$D~G¼dB%8ϸ?{c*K=/DKxa8ݍJfT3G?{w2Gb䙌 x~+N;q Bƅ+!.X86/)2.\ X\| WBE=iA֪-絀 Q2j\5. l =bvո(hqo~"  sY\1n(d[EqdJ`֐q ,#3 |cDDъP.[-WLq,Ըh^zCPb@l+ Yr"Jj\lT> 0lr!т&+3"K羙Cq"DVsVF d2.pN^θX346h5m#4D^5(DcD b_f=D& $2LGkzacljHӽ&~qkꢓ0N(^kOW:eo+d\lQQkI@f du0~BĈtcf"D_d~>G Hdf L`2m+PFZ ҚieF.~P s~r~aeg7_᧏9iQIc-ζʨqRT V}sD1*+k;шwCdƘHHg~?o&?55ϚmDg|̱fh@Eͤ]"5Q_QsAyj"I$D$(sk5^ҵa}&+qwp%Gvf\]U8.aJ!Ve\EW5lEf%23OЋl"'ќhW/@o–2.քtoi|_$H>38Sfs|~a GDr6X(!34Će" MD0:$51 NX f(fNYϽm*:cn?>P׶FDLM Xa˪ #zkoe(ٞ Vټz:M/y}՞Ud\lN H+>W}~oMCf"|f+5C@#㢚Wx5ɚEf,_ł q!,nfjn⫏fjj|ʢ([t5.je5"t)34')I"9 \ik2KZ#pp Uov;R1^yJbոNf]gV6%87A8Noj\lB YXJ/QYCYd\d0qf02 9cj=C@u¿?K "1D}Vڌ>aV9 t7@Lgur:158cQF tSSsjb04֦ٛ܋A""I}?p,==5)om}ovSůLx Q3ߘ}f5dΡਗ਼KV8}4(L4g_d>s|@'O$Qd۷|Dee >|ic?55Ss57QKs\̚9hN72eb7j8Q~! r&?on-~7ښ&)|#ϵ&f?o&ɜT*(Q%/賓Wk-HNR~H0""5$T"9c,uSVĆ&ݬc9:n8v*Nʗ /ΟܧPi l2.jqafSy38n_gMG|E~"bC*QL`~? yͼy6&yK355[g͡I43dvGYE̬q|>jϛ}I4ZzOosm\/w/|zOo<Ċ(S XV%*( 4!PD3`6F1dfԠ\D婩ev2>f<ۨld}NEd Sg󤴊u13kr1gjf)%5 ?SϭqA%hK͝{У[֒aKƠ@0FAd9V+P;-UZyq`EH+)zq*f!C**5) 3!J|AlSQ'5.^Hr\S4 Օ*,˾Ǚh6F2 >؃mFP!Xz |͈4h]2qGR322ŦՕ:.3R hh}m|F6IY&C/D:a͊< +f2s+XtB,qɑ>N% Ǟ6BM6iii>U2P)^dl  eQ6"D ֭[ڵkn Ԓ[o\n.Q* b)U|&F4eL6[tبL;Fd2P2JDG\qD. EE:ׄ3*rkx=nmc6jӤ&6#Y+ ^4Q ̤-oLq,~ZJsPSEˈ@{)Y%9܂p p>Y(KJ=oKhd&0Fb&EdY?ⱂŘ.j縠jK+g;7=_8}xwOrֺP{VU"CT)uG"OXr4:E&]ت&e2.%2(d} [b[4b%dq\G:BP5b_mc܄ Y5 Cd"M(,$ظnEE{*Z6=Şe34i A؈m&C2Vi`&SP6F%3LT6$4vܚ͵9|hU=Ou#AE8.⨕>oևi>mB?f2aFY,3K^@0 "Cd3nV5i`I¸A)Ȫ"+[Uh@X[ ى*m& -ǺGnA i6wu B/,YUdR0dk)Q6lf5l-dm c>Y_YOh 0գ%R+כd\޷ l#FƦ-M[gnk4ij[{r[~S&c8zd`}X{hr@hM ƥc+t}5 =fiPa[(܊=l, i J+EdIچL2[BQmkZO+!!ib5M/PyTTWJe Kq\TGbM4:E7j5q!qw\d"֚rWML56Dm2%S U{r:5*RI,JYり=;FfVVd=և>3L%oP@j]h0FYC(C0>\YVqQ.'wb>HDzi(sV| gLx_xoC=^n.dXPz}+\UVxYytYaP*y9.ҊţJG4^46!B(d5r(JR2|߲bHhbְ}}ې dmF(:-+LK"N`Չ*:J&fiPT '{''(Zdbvr /*5{dq 2P+KʒTԧ䓚6"/{"8.yڶm[[!?iSS_֭LӞAl֭LV'z" cջJ^iTp7rkde5`t!_0j(RQU Xڨ%VVK٥ɍf3V`Cƨy[?ot*cr)u 8u 9.+mTxZKB V[/o{yW`/b =K'5nR q\`EQd,VTUuNed^AqtAB d8KVY tl(q"e(P6P7&7]h<( ’[ PvWYY5򳙭?y˽秹[lkeL^V9w *LInb]C% "Gxز8(ѣ*\!].}NRYvNYswQ䕒s2 k` FF南 {3o¿ &y7{7ȿ o 4{ӬsF,Ah`-&R~W&[oN8՛rdkɰ Xyi5O_2SzZy39(k_cf4[h=3s='܎K8_r'\bޏ|h{k%"rE.5w#'=0Jlޗ/-{ ZP*Jęo-2b(( TfM̵ʅD84) jUER#Q8|sʅ޴7gnr&;y\4Sƛ6*\&ɖ+iX"%/ F+- ШI7 MJ?O =o&2UyēnUsuxp<-7PnIOLy֙l^wfJݙp̮"<ܕof˹GZ}SIgʼn{3ӣ瀽O?wkxaw/'t5|zVtyJ)5q[en`NwbJf}!ec84C 4SP=7 T 7x7 z* 4S\'F縈%JUq\,@:[zʗe voxSƟ6&s78sfnXgnMOox3F` aDy:ָ$qQNJ#Hz,h~-B*U(FiD#qD)ix3ٛ͸-(]PjHwgz\(wp98MN ˹,[BCJ0ǿ>| XƤ#XE*Qƒ螧{=fنܴM luk37lܰ 7!=mt.T3 zy37>nYVѨA "@֤5<JSfz@,Ak 8f/7Wǂe 詃'wnY??#OAkx>| qF9Y_&+(bV@L)dR!@҄M XÑb7Bgj/s_\OlAWرcyGWC8qV&0 o?;(=~&=ps]nYx*;<\\P'[lzlH1GⲱX1ȐULt (Ds\tnub1YQ C3Zjh#E%7?ъ05M(KM3R>%WpYZTVKFruE㢌$=&10d78Ff]^dcZ+6b*H%PT6لB/P@>Bufk벒1Vf>r$̠0Lg[̓BqR&Vɪ" BBTr:5:Q̛q\TDixge}Ǫ8.X2S@2Gb#٩ݏ^5GM 'B!}ɫBUq1\KEnTe帘MzLK\:JP6T/sNwa ~w즶+nyG$UU8.6%㸘"q\,8 q*L%pr%WN "7>Z7droe#oPꈷ~W&kd8wn%V|K\N'Zybj6ͭ~466n8j#oP*F9.ե9.u r\EMrªZ#9.A]%" YUdS"T2~j@**" ԻJ#q)E +=Vq\ ]%bS"M*8.PMMYw,M8.6%XgqQzin6GەXIJJMGbmAhN:zry^_'o*yzWGȪ"YUdSRUE6c㇆'ZF{q*5ϩ-}ϯJ+,lZ|{*A\r宻*oܹj^ڜj8>7ԅ`D<ѧu7 X8.6%ؔb d9.Zo84<2|t|pFnnnnnnEo9ŐHdr@GssOx>ciǡsعx> ιRё(W1{O\嫤JEرc?;;vlg:<8~tx#/M%oP*Yq\lJq!,SgzC~#l6;6ؙ>2:pa_6HDždz3'19 W*j;198͞eՎ :U͞:p誹2^3pl>qhr‰8w\=uz{ѩ߹Oı;ю/ys.m|;_}=[WY{v\l5c:q?`6s}xKW׷wkk]Hd{?2އ~ڿ櫿am> )5†!6 MX2\9ؑo F8_)SLZŒA?ƒk%<&\$M5%Ξ'O{#K)1ןyԳ flDqr[\.T'X & ȗ=_yS;-̻GAjpm}PuCVL&*IbU3G;+/uocW^yݸ2қ{dS%{A Ē7[l_ZBXț*,V%8=_8ݳ8W `=  YBӧ/I †Abɂ 1bAAr1{OA؜H A%  B9KAb$,#dAAA(Gbɂ B%_zMas"*YAبرMa"*YA  KAAr$, H,Y!Fbɂ  PĒA% $L% ҂ BeD% L%'ۢAAu8.A% ĈJA5 5AT Anldu=AjdAa$HsKA6%A|"AdUAAA(Gbɂ B*" dAAA(Gbɂ BĒAb$,  H,YAX BĒA:cr{x֭a#*YA ﱾn.?w", lL:Dzl6mZΟkuAJAbxǺ8[ 4wݥQg%hNNoNs+UR^|r{x?:^hTCHt/kơс\Wس T' _^Zq-g/ p"T|0mof[}cmQ>H񑾡4ٓϦedʊF.<*of/7tGwx6`rN 9Z0\zD*%)Z}AHcG2D% | `oshim@o3Ne09|AщG*nm]-]ٓ T[V$PV<܅9*Ojhl6LNqEmūb XdC)jAa091ٶ+z5fΖ;,ʊ ww͝q}N9{J~\Abf١wtq ˢf*?E  A}h<79?< t e;'~>ΞΌ³WRx&pG/\hTɂPUd 1fmKEY[Z8sԙ8$h{=B{1`Og⮨t9W\篼]Cc㽥[?p{xWūC eZCCCD"P|__ѿWe;9̈́[KDb=A!f]*ֈ-AOD% pzP#y , H,Y!Ff  B9KA"" 5Abɂ  PĒA% H,YAAʑX A@0yhhm" kdAa8~, Ĉ/Y!FTr ck݄E_u6ҭVAaU, DHdAQɂ Ͽ5ݟ^ gs=_V , lXӹ^ [c-[%f*9I'$ 㛣Wg]]mx|.W|VÝyvG#ttXi+Hk٭J֚wO~Co{8ǹ]6āSX"ct0|tpWS] 3ώ5FƲͽ]}-}}#}'Euc2`rn %/c>?{Kg:W@@?\>q[G>+_}u@ۯ=Ԟ̮~k~6=woZWQuHV-}^,,k(f㽝> `rb<`Oɳ#w`|b/;6~vIH` 3pqIOLdosHxQ .8~=-/%Ko(-&/E5|%Qw)}kw.û@۫{%AFGy*mp[W9J֒߻7OYP"fO8yvdS`W.\9;޶#/[NlcKDzE6D5BT}6D_ݫQYvl+/c6`Jlw߷d8x޾M+Y~}mH-UdMЭٗ|{W}yaONw}NKkq*~}]@˃=8zt<؃gQd%\hU`rxʎ vOv?^q% ºB| 㑁`'Dȁ[pێ1;VKŖtkYnunͭM^:\v |y˃=I *546uTy/Z1-n䙶Ť8n{y@ہwp&䩳ɂNo=mt^Ƕ_{xhۖ|n ݫ.TQC Úuk{>#nRf *֊G[ג_/{ks~Jwg%՜?:x~5횽Y`FP6[*@]C k8.ϾͿx@z;o/M"kJ&$\}(n(hvt}IǞFuXn| @>bk A6!];CCCDլs@u >5t|藫͎tDu5y>vs;6HA#"d|d=j^"syY`]!ݺ)nAJ&Wg+<>E'Mt+ҽ AU"û< yɞk8A, DT7_ǿ/>W(o~[%2k3wZV݂ ;B[g6ơcscCV/m-[~zikRW=xz0]yo<=ŚЭ}-[k&=M%nmC8qeyMa]%/?_4ӵOG6"O_ԏ^ckyZ m?PPٿV8ݳ:g_;l>KN%7T=KOww :?BTrNWkR]HtPJ+²XJwgz^z ̼8*=tBh`?X{q9N!@DbVR*|ggeOd.HǙl6fO_\KvF$rrI,zWuc+nĆZԣbj Vl}dO,^d'ynN~.^&IXkhlg^ł!wgg 7|[!T=zg*KۢLZF.*Rٴj7݃.DZtb8)@EDjJ_ . 5''?ܮ}N0`t>=p$F;OexoZZG/\&_8~gG\]0rdg.=zAXԻJŦJYxS+!9GRߔu ׉aHGtF|ZՏNO7cAj ﱞigl6l1t9xŔwu©hO˃='ώk߁I\оpLN'!i@>mw,VOXgE"S>TpSEqQTggSHA%QcZi]Cņ?Ɠ{ESN욘Ů6\iEqTQ{JETC*,QX @w;꺒 Ĕ;Ù"_BG%!dB$a'-JweCKv"fBaef0]21}#]fW~XZw:tGKl_i5ϧ,t efoUBMv w'1(2qL냦=Xڪ"be8X%aTtpVm k3tZiNk&ZP"Epr%\č"šT9u(J=ˑDȁ .kZhBVڴO |6y}/c&&`*yɞx{p`gz^*J Vjsa'`Q2ww[G"̋E^}%SAFBfu[0 = ' V2'j9K6*P jŧ/;@"6ƐJI,ʻd&6"[rw? qeVFKת?ZBMT?=wE_Nލ+g;rӇw޳ ^o3ț윭RD8*#\*9@%+ 9 T7Ѡ|ad&JcKOŜ79CȤTQ+E n CHK `Kn:\PX/srSH\;4 Ԅ%޻rgMt `+g#=;1[}oc,=qhhh-](5F|V6FDbq2P5(D"ݍL(:Kbn2(e`M壾vD(ϙՉ@.`L *NON "qiԺ~Zm!b&%F>sp 2$H|e7|oDϏ<羥_ueX?XEt}\H٠<G{(vZ,I?!%ִ>VDQKkʦaL#5.o T+Y%tt];.*Jb'*(EZcZ4D+ɬT$SBaAqa0XX`b2,9+R2ų6K{9.O B"UΞ'O(|Jt[?J>{ze9.bNcCTHT]2H1ݫ)wZq1D.`"E<2qRNքb ¦Bʒlm4 $\7X'1JGݶb D)c2> fX&f6ZYA2d-% epsG/& ʫ3lH*~1r$U[cj x)kRsRlt.ƭE D9FKhyH;/V 51>|ms ^>ՐTwKb(tUYU@eceQX"k/{ǾǞb_sƳ xAFm34hӠL2 *жAexlϾf_sF3)GAk"TAZD/nUA!aw+=_8M<HJD$fyXqy2 d11WVdAtDyI!(q\$T @&Qdwbu(>W{Uǒ9L65Z C K5R lq1N 2Z%rq=ZCkŞf Vd=qWĀa2LdA"c`Y$Mà,9.AKW;{|m>|cw⸠%czt8X:lqd&k` VYp VSb녌bnEZ$Ѽ7Fʥ,pQ,YӬr44_&%YK6L"4P2XR(S{9Ŝ^0hƋvבJ4ke=X{j"VVةd(dA(2L!+C(Җ ]B 3C`SׯBA0DV:^)AEG*i@n0V!"6 mDd"p$:0 ϖn\5{*;*(@DUI2ȅT)4EÍdn3#s1EGk$^gU"'9fOSՊ}bOY&5$rY,ƒ2L!)0iYeQCDO@+Qql@r\ ]%/d*JڃRyBi(@)X2%قf͇ .{Q0Al H,_,(҈"%fѧQ81{Z#V&VĚ"9'r#70Yf)dDZ:eK(D7#Rlyz. UqhwzUYsKN;Hr%dRKSpH .3R2zpZbUxOS?#;yָ؊$F5.>o=oyţmg>0·EWu\4~"3e}tpQZUɪ1c"Ge 7R9(@^irUpͦ5.iU;_\Hܩsqd$9G,YSnZ%Sdהgd*C[|4md nt\|o"\9hpE)sMcÒd:!d(Q(=ث:@Tߝ%I#CTIIm[Ė##xn[q_/]9aq5.>"lEE2D\U٠k7^&\?|?K_A旜_ <;ͥi/GiF`Uh҈ ȮuXyf90*evwB߅}W.q-S:P9]ʹi~o!nV~fk\lNY=%r\rg'ߣr@?_Bbe(' }ơuq|5or|qg4"rX`5.^zgsן'^0-2 âǒE^ETiU%v # d1Gc;RZE1R( QDDZHu顀:BL3`"HYes\DYH+0baii'<Icd$YG4l$G{g`̥%&b'u /h %(GNkf_t\LM [_ɉ@#מEI,9C$G)t$G@$XӰ֫ O@:"EqP@ ճT؀c45]E΁u3^Λy pˣ/saa|Xtb2ܖVJsq9͝tdUJWIN͒ v +ujADT*eиQEV+Y<0fQUO zNK.CBHJͷ GL\=ɑV *I\J(eU6t[,"ո8Sոu-5^ f8WdѢȡK!=H! )T֯D @ \A'$IAi70]U_NNw%~S7=so^ Ç_d0[9.&yjI"3Kָ7AI}.\.Ŕ.KK)]\Xz,=']gAu*{iww\jj^#p4þRGC/\j(K}|ճW&Җ4Mch!nh3' $WHNԫEGrȜ$rBҭ000X4(y̖lgK>[*iĒA}  ==n|Ak(ueiw~&4x7?dҟ;#^+'Lĝ\T'<1"k9OH?ydy0͢m2Qԕ"MfSBυ>}nPAپEe*/QCEcc`k\Ɨ6l[g/mVTuÚICI}C}e#ao{BZ,''k',]'֛p IDAT~7?ѷ;{} xW^YYYYy~镕޽ǵ+37އg+~\oDcK߻ɕ{d^x_+OB49.6q\L_ƦlUidFȳhq&c@|>Y%ո`.KPe e"{@1-@9Ѹ၆b`ӎ) su8J IIWzz梙R&T)$đ:Z )HDDH$@8b*ܔbM_{zg^k-bĴc 9mʲT*c HX9F88BDPj/ żصVV8rx⾧WnyS xny;g?r~+7 y|tdE0a-7 rC:oTBv7{#wT ø,z,y5.jZvX9NJЇ.Be\~Ie KRhV͇|B|C$gNc ۍXcuhWEhg+iޒM3ҌCB⺮}AK>[*\,-;(^|pc'3 9EMgs\83ST7 `$#H3 9E/r]A?=%+g?68?'rpX쥃սѠ?z^z]Drĥ*8@[]gؽv#++OԳo}*|~O^{^;6{Oy3_Gooy啚#w#++++w?*mcc!:XUII);#ߧA ]jG+P,o~ȳ9J{yAā% XEqVnmEUS4 .I7P/ Y/t;e/ H+ 䕋2y7.r$d *"!SPG)`Pܞy!^m]JNqWQ0PNpYȜ0 C!hpDjޑ*y `+DR=T-l0$..:mʪo^Ⱥnt^1茗r)/:3^l|-u"˃SA0P@b9u#TZ90(33]|ϮǞp6*Ҳ[=n\] # UŷA z?__?_$;Ǎ\t3Qx櫡^6dH,HH4RD H (xuL,DeAҌm+'5^߻ixG_xbIwy;Y=%|x37rKu?4~بH|jjaZYYwpȑÇ/On}ꅆ?ٿh;($ r2Fӑn&r~=A腼{ݢ뤛*\+|6*8c5V]6B~nlfF ==JJ_A QUT%VJx'>e7}W~n!O?s2FBIPoH+Y!hIK+zT.Q\BXЗlʥnqIomogd. ǒ񽳾w7;QWs7d*Cuk *e/ !@"*-ϪCxOG_\_V_2m 7ɴI' =|7Rp//YZ;X;_^ã]@<|U{{?}w4XO{0Ǫs."_Elٚd#ᑸqqIe/Qe@*i|!qd%2^ɽwr;w77?_\y/|ޟ{Ͻ+|>^se.g-ŒuհxNߪ#ĵAl!t!]D/wGgeB1Y,ː:AHa"Vfu'̎1hde:.osPEzLee#qHH{t:!n7vI d>9K\ʌC\'Bd D8bqi?6Iy0AOn. H&]JDiOqPNP͔:|vY~nu.+T?dV !~ ɼp!wԆasSVMC #9Qe||:rW/-glS`h<92P$'qgwDNN:ڇ̮")\g5:Y94M;nza[.Denu[SѨd`>!҂Վ` ".d*TS %}z`h2MDUsqŠ;]Y"?ἏN,;tI ($+E8&4\O\I(E-k2*&GvGxWΣw 0>Xuk\L׈kx2 u+rw7{h~VvX8WTk݌E/UĒmBӿQ,]#;wtUU1<^bL2uLwﰰuڼ`QM196Ss]s*( 4tU`S"qNr;q9btM4Eϕ];2RfU`1Ͳ5 j~y0 cXt]EZ]\+JSU󘕜:'xGKe}p9\:}.4que΁Ybf`j`"ָY\&4:HdU=c(twR, ]XKe!gIڶ:0qaa,J>_&.iڊDVwELQ9UC3 hzIĢTN5h+ϿA>Gu:P'څP2: 9EN]qs{ʢ15Әܖb|_63I!435 t3-[a`d0EW:.ҶUTMYʸ^Z#D!5kz%/E5pNߜ뻐i6'mkof|[ruӛa"*y{)ZHA-T?9{W.Օƚ5k6RWhVh^+4/ŕ!8QJ$K:UR@WjVJEVZyRT R3/.p>Q\hbR%Q%Qy\ֻB{Rɫ ,ݒޓc:9^9:.̗lQa5.cW*P.1,, @naig(.- ~ Ng Ek"^եVkk\(tڔ WFI5xD C6 0t֤{]9JPdg&a C>a T`<$vKY6w BBp^XXtִ3e&oavFKV qp,45j婯N޵a;EW*ҮUJ?*JJA!ʢ$D }qf3Yԡ@RH:CL;[|^x'%Q xPn%Q QM Z1Ǧ.a]E"jxW'T+[ VPQ Tz7 ٚtJtwg"ÒCC5ޗi]0dw!VQ4I)`;E 9.]EPb_Qj/Q DT(.|Vl5J*yUggF6W i 洡\iV:c;a;EWɿq٬Bg1-Fv 'qA%QaynB,'O/n{Nq(3)A<(hz@4nW_vӟ~_׶>s3|=.],Z$Gr 1OnXvV4xHA:C.Vt[-;òSx'{pG)@6JƯ_ @kk׏ٺTӌJ"S= $H0䫡s&ޗ^vhCeή\"ep&V}w;㐕e&4'BQ7Yc{s{+v1μ`"*y(R *]D@( ?SvΌN9h<&W A)({Pie&qQPRv!UE%\spIa켓<_q=&uf#鬺nˌ<P`+K+Eoa\MkTH -8./gTSѾ ո)H3=ăBDz<.;\tP^^Z" ՟q NRΔaީw˔M_tkg~m}Y._>&,JqQrJq{KT '^P+n%sl$J>3y|FB@P.|>n4 ̍؍ɍR.ԕJRBA 2WN4LȽp\c%\$(QTE-%hLqp0S"6GYGENTRgǝ%T.l=uı9@,?{jb&? #8t\YZ$gOqAi R JCJݰ~Ϗ=ǽ8c@)T)4meNȑ#maƇ͢ S $OJfPu uDi"H @\.C#QȮp^ J h#fZ.Q yg:7fS%A^+{%(hRՇXg丨Ѻx8MeH43e/{eO\*\8VC*0vøEN!n$j謄{t[)zE>*r)2;.CYJAH,?Ϭ+Wet '0 cC]%ohiPJ*B$*D,JfJPG1%"MQJւ!X&7Ty@<&p#fp)\*@!t]&جEHJHJ$ 0D(N2ԩ=!/iQ'\'} e ع8NFpcB]T mEWMn%9.Μ&R(iР`4穧%d4X4S20gNE%ƒ C껧긻:bܘ\*۹Rh7K͝0*y;vٰ(SU A`F򁉔A‘DprX_ ,|7JQdW ¥P 䣆k$Ԅcu B;.NʦV pV^=#Wd꒢@i ų+ @ J 悹 $r!/-iB}Vj]Zف](]>'=Qdeje@QY$TGL8%f pVB..8TAA7ٚχe>8a\A)K0쵲yT;zOЬ3V0 c,Jނ T~zb= &&2i)%S)p !ꨶȦrQՊW(c6.…P !C ' :aA,mk2GETɞ*I䜂У@"OH L}ABpT4r,VՅP!}( $Ck<i\h\t\V O~Ui"Q\ɥ#e2~ V9aRf'?A8s%(^w\ ɍKJ>s} 0vsSsT۬q. BD2^q3N{ݗ+9x8:r,כ}%Ɗep* $MU,^\n7hԕֵHEG"; ! !)!94P8Իo%#+cqpD! HP,hbd؅s\2pLxTdTVUѴ ^P OD0IDATRƥyZdF3%ʩHC'SV"h*B\<&9:.%ncSǏI+q[/KRWʳ*4#QɔKF\2:"h%(m>!JqiWR59q;u\ Du"N Q-I9@!ēJq #MxRPI"WJZ%uzxP/bECuf _}a TbJɜfD}f(WVe(5kPV^Km,DP)\*|(RGm-j:9. 0EW[*ҠpaB@ J"uPeU 2 3RhJFuiuW…P*fA!Y~ מ{Ù@ߙF @B>(| f(KKh>$E9)9G6i4 "mP¥rgA⊘R!y-Z@r; 鼿K6 èXt E+vdfUHhz8(EQ`u)2_%[KLoڣKR*Zw.S^ DD1O8U0dɈ(r#:CR/1LM9Zd^ x$PMr0ZVLPFD) A`YÚ& pY] (עȕ/Yz[Ss\= 0v&ύ DӢw4,d`FPbsp H~ IAćT,B3$^Ym뇓 q)&J""*qPɈ2vԑTA$# EP^ J,4iТ9.&DZAq)$hR3(*iF L $B$+Tb"viB]U"-*4)-^ϑ9:.Oa4縘 '_ A&O ,:BsTZ%Ki0PS.=6ZLUS;lpWv8Y[㨨!(.W]42SLI qkTbAW#tF?5#kujk#՘Kb82CD@'"V aDTr"0ZҸt%(A9(q#\%U CvƑ>E@e:W ʅpr fQfk? &Ba`U\J#WL* h,iL`3TU5)XJ(@4eJ<+ᵈ,㢢C*<,4I(Ga$ !0guDD8@%س@N' O]K&Bq/#h?#@,Mx4da#M]S,9.>ы}MtP1@&sM鸰aEWPbJ(p$U,X@$PVQ(6IP;V\+Q8NѦ&Zsyqb3-*1+REzJԫDA[<uȭ^l*VZi`23CJĬ;u̥JQrL~^tAAH^(&D(LI꫽a1'xS>oO"Go 5V jXJꃖA}HA&_AвEEBȗߺ\f3|$r5M$JkBS\? DSDH%ˀң,K%%=i*㱧DQ—(KuE?߼F<5U @`B%:*!$XhPPNfؔ5")=@I0CUD$- @ؔ&NZ^?:rԴ6r\D]TB fr f}-^_[hԓZTFf;2H&ȳݒv樱aF9.qQ3`&Ƹ`/CM4*ҿRWhڮX9bLiJ徘iYhR蟩n!:jZ~ lACU/)'T"o";."S 6 E G)ϸh[9cS@]ZvvۚFO~ su\aK/T¢*\Ӻ,JAcN渘tQ*H 9W"JhS>IvuBنaƎhvA4I I5<~'@WVs\Ou/Ot~ZWW0> #:gBu|neIIE-bEdjЫw\1[c `sT5; +OVi[h4Uxu;M#[cn'Z`~ R6&a̋E%_ ʨ2E&\?e5'~qiN %QSEZ ;Ng[ęOޚEw\lQNiKJZmIb*vZ4H Y 0渘ђU*ݖU&lϙm;.ڴejW'B[v󍆨VF$ 7GlธeJ(3-\g.NDn#*_T$i!ͤ 0*榒92n]\hM]uhuתno]+?~G\|ϫrV𚣕5[T6u]ȯl"R:HSmFm2y odJoS﯑dp3ֶ D{{|es>$L$aTM%>|>!Һ(m͟xa1Ŷ<ӪV͍'?L,q19j%rin[vl iNi1qsu\l7snqL/6hݶs*TB8^g7s\9I:Ds>oua:Tıaո5.v V✩č zP7s`Xi ӤxWTLDc 縫Da"C_4{nq! @hgRk3m5> `K9mЭƅa`cq1Vb #&o&OcqqnL[q}luK躜D`M]6K6 èXtl$q׻26Ŷ|> n͎A 0 0*q0Caj2`Dіͭ1ݴl:?8?,;ƅaЫ%>?X?qC܆~?W ^}({ C;誻WU'#ڼBz];0 èXX?^?}9󏿰r_q;W^~3_~COnx~*2o)a0 ZYYwpȑÇ/qha\~Wgk X=la`aFTaQac0E_gaaX,0 èXaFd0 DaFd0 bɆaK6 0 0i,laTX,0 bn*ȑ#zk0 0 ؜N 0vK6 è0DžaQa*0 TaQa*0 j\aa4K6 0*,lQad0 0 ØbɆaFV$QNaGSɆaFV dža, 0 %aTJ6 0jL%a$L%a XaFd0 TaFd0 DaFd0 bɆaW' /}>ԏaabıoƩgz؉<ȅoaad0ޡċ/~p^[y0 Unv3 X$)Wh=|O۸j|~a1)lQ}|Ǐ?'gnyF[z6 0 0vḸk&8֛\}a;ݔy0 㢲m|رS/}O\u[o0a0_aFŶW^惇nxC3a †aV>vCSyG 0݃d0 {0 èXaFd0 TaFTaQad0 SɆaFd0 SɆaFŠ"aԘJ6 0jL%a$vJ{y70 c}X}0vCdz~۝/Yb}2,'lOt9rWǏ›_I۷aheeem#G>o߾y70 c}~?xm؉c^5O=>vnaEcG8.>|ȑy0 "bꭥ>Ƌo EJ(K"q~:'o+ynW4"ݮhv0&;ȗla|49֛\}[aqNJ6 0> n^<^a.vy'?Xb}2,'̣OaK6 0>r̻a9. 0 0 cSɆaa1%aabɆaa1d0 0 ØTaaaLc*0 0 01laa]Elȉc;x Oɂҩgz\󅣏<`}'>I8v+o_IXa3;"|WǏ›_9vb͙yPsa[OO<|Ǐ??gNY'^Dꓣ_x'5':n&[=0sf'/p7[>{͛ow?kҽ>Y^*uh':`}yW}^ ~O0 | *Ł>߾=V,fdzKgo9zd3:t['yOMiE _9tСC=3)O 0΍K68q|c`Iȁ?=ϻ1sKy7<_̵A;8~8q1 6;A%|/xqO\^tјS<4!OpcUċ/\s'X'x[a;qqx! Z{?ɢҩ\5_8ɁUYf{`ʫ|0~[a;26aab'8. 0 0 cga*0 0 01laaӘJ6 0 0iL%aa4 0 0 cSɆaa1͎U0 0 c{ݿaHݖ ݟ?wb;SG#K/4˶%M%aal͛e/+?/Ol$oW\q3,"o}WnG({aa[}W̻!~<tź?."C?ӧ?oy殟aa\}u޴oޭ8 0 0]ɣvEy+SɆaa\ERm-ιg ϓ?n 0 0ɣ7>&B'vw%5`'C1)P>w{Snip0la1'/6 FSn|J<0i~[R>^ClSɆaa⮇Ǘ#se,=߽br/w=8|C#T>ϻ{@Tۭl>okaa=Wp }po|pv"sU[}ẻi?_|i_Fx.n}>7{70 0{+w+.9_~o휻K\oBxwy+r;=0 0mgz{Aum\_՟طY{77۷o5\e J6 0 0iv}0 0 0.8 0 0 cSɆaa1d0 0 ØTaaaLc*0 0 01laaӘJ6 0 0iL%aa4 0 0 cSɆaa1YΐW4IENDB`DataLab-1.0.2/doc/images/shots/i_help.png000066400000000000000000000154361511411446000201300ustar00rootroot00000000000000PNG  IHDRZ4 pHYs+IDATxkxՙI[&E1- $4cZph[*J7OK좖^겸)h!E?4V c[8s5.3a$Y3,=`9sΫGgFDp@200@t 4Ν;FZmD1zñQfD9堎q=ޝ^kVk kă>ʏp%>O˟1]RD.3 shBjaQ k kݳOW" 5#e|71j>#S Ïj~滦> <w3UpYkb֕I;y d5{;1M-]wgo}9{w͏d|8vכ;YeYZJƶ5jv#rT=ޝ_b3P0Y?}ڻ]MAv_.kdg]ÖƖ͎fM Yx:RՅRqӧ4Յ*WW[v4Ef JZ㟼X Oh%t hvL#Lt3cR=SGC -};Y_YYbcY͑ Uanf/vh :Ֆ*;˲hEFA.kMVii-,M6#&"fC3k7ߓYn5Y]GKHyYty9P z[[Cy[[R ()7n4L D;a-WwGa)X]&IT߸A@__L6nai|%;{SL3 *'7m[v Ađfm-~u> wOyVd9F6?^_W_gee'/W];̤D(/nsЉd8\ɍ /*OSX<" Fl5R 2X>W\Ğadyb[իaٲ=ohno#HRĖ3:Ԝyu}tBJAefMWpp!#C4-<͠sl~q^?/^w~V[w`&tb#"HQT֗owV{)6{f젷P׾9ʳqvolI;{ :6SyOz柹?~N =I{TNިd#|oATYkotox$7UɋNl ٳ}A/d^f/NxSdU>]m$l_8<ƨdZgTq)pg%~j2K08@IpD9jFQfD9C9ˏ2$IOG')oǞp]1ڟSAi80βg~T|8Sm`=M4JNƚj>S0F&)e}#ʃऺj[Y[Sh"-͑ I'RN{d4i A :yNN E<ʡ'̓B5986#$F>,Z$xhIF BD9jFQfD9X}y`#PeykYXD>Y9򄳩 .,J}Q|%:4>oFI7;G'xv2[k]'WTQ [j#ɇc,Zm.u}>Nt-XxA)|<7yJ|R-]cl|Mܞ9!<+;4FOviN_YVX2Sp(dʩ]`Ak ?;Zk-M.{k!AiY2ROz޹Ar1.8~CN`k;5kr/:I?*HOw-eb nO C}E /Ri $P,#egvy|d]JuU#e\AypmDjFQfD9#4OiRRR=j AR 4jFQfD9jFQϪap Q 8Q#hhBf/rg* (EA#j>r{G޳ BeHryr=qZlaJl3# 3 2Rîc*B;o{nym_N7Y392igsX|%yW.ޗ5\Fdgr$ZSmq ,`[d΃ojFQfD9jFQ=y1 ?70Q!H"yk{=Gz{ZjbB {t ?]2yŋJhU|ρ'OӗÜ47S9!٫L 6|3BK%+XXZJM`3T.b]\vwԦ 66|>([d4TWQdIzЦ. [[./~w[^hy[[fB:̂{j>$^x^'~KXݤ"3ɘ\)Jiʫ<]=']]<wuwuTQ&گYDz,k7mSa)ojhM:- I,V_j2׀\Hf$b6u"vG]ـ3 ˍ;2-ȰreLjbI4)%N'FQ-NS+HBOٮ t4 R󊼎*369VQ*yIDƲ[`a6. zIԵ~^ḪC!t: șrꀈK\-KXuIRRG1^6w4c÷3 Ab"U㿻mOm~t ;S5q[ ƪW,ݺ{}O_S9c43I'd5:xcewWOz>)8=[;}ci, L{=!@%EkU<>wШ<pQot&֫aٲe$ r7ݿt7_[۰g9:p aXEF'.'7`~}9fTY}wV,L"q z9xѻGnud Lʅ{Ʉ{uYlSy+X 8vhȊo $Li32`KTZۈHL3J7ȅT*ExQajQ}:S=xy.v ت-Up@עV!p:c9;{idE7niAxZS5#23h YKyzut˥/~:6\{7/);]`)?_y $91qd omCV+]^@P9,aܹ{O]='/jݾrQ2cN[^Ic&/ɳ{ غ8MuRYb"r)zUZEDZkC̷v[WTrߖNjhnk ,Ȓ&ЗY1H ;\2̒2J7E*ݡi h_QUg5}T,bdX6?sw:U,pFs[U+%{TjWnLSgi3&%hZwiKMfsL)3"sx(T3P͈r@5#Ռ(T3г(l#=ۈr)϶ o-3x4fs[>76W $ ,Gfl;Zm~G_?=flj$l$;-6kRgNyEÝr~2/2Ƹsegil`ZN46bv;G{E[Xfo鳂Um :;ܹ--TyCíw.m]ٳ7W6IÈvBln(ﴸC;FgEܖ{Q-eRoL1Ig;^,9N7!ܖt8WƲ[`z4Cm2(kGM8J46!ph't/2\pRF[Og;qVR76=L+Ոf"Dsw:ChNxbG9ՈQGoTmjcIfg;ncs%_9Fc3"Fc3F6zq"p})r^md@V[? 2#H!4:Yf5Ir* aX57G6kEŁa2u$q&g@Uӟ=\[~z]#WƋ5Ƌ5εku(9;oH"hAQj0$ ?4Sz3IENDB`DataLab-1.0.2/doc/images/shots/i_histogram.png000066400000000000000000002356161511411446000212010ustar00rootroot00000000000000PNG  IHDRsljsRGBgAMA a pHYsodaiTXtSnipMetadata{"clipPoints":[{"x":0,"y":0},{"x":929,"y":0},{"x":929,"y":512},{"x":0,"y":512}]}a8IDATx^`ǿW+z(UE({Oy6PQ"E,(*EB &fwsr fgggw's{of .\.N', ?rnAy%a ƘF}s{ ޣ"66FQ%P9=z(9#1>I VjÉi0 ZoW{qÿϵPon0fEIY JKq0ڵk6mڸEhAAП.ݻp=:uC\lzxSLc;ӌEh{i>a!Ask+` :v=zQf~R3 00RZb+f@_z_ fI\cEEtѱOn1 fLX4]odzt\4$D4- 0 pUTHovlANkYp] 0 g5`C?:8o%a1rZ,tP|0 ÜX4?oF멩3}qBFZ4&:FMz8~\/='?\ {L ?a#p? D8;V+v8/M?tfNJCjHLSڲ>0Jo$X7MDpH62pqEԜ wԙ o4(Üw'Z#E@(O~X/VMhI3խ%}:"[th !̮{qU=*ř/_Ε!T<E_ W;ND*,DkT9v(F54<ޙ5D#^CdHc+oڛ*D)gjJxJl2h2H3*#ħFvl]28)FI0߰eƍOJ=1my) Yw ]{K3_Q-^3Gi ѧwSۧ_ⱇŵ&cᄑ2NNudk12(գk^)B;T܉dB3n?m3 z!ZZNq&#vډԽuCL,/-#?^!Ӵ|KK(O㻧-*.J/tGVOGVYm%3҉2P<\tЩJteT.:7]:]#YL)Ҵ|K/ſ_< ;sa;ށa=L`)z4NWGd:+*:]vPTQuĒ?h(3(0kp=%ֽ[w'I@['(}K=5$Bs%K:.Tħ}"?\BsG A߁ iFMa\ >F#=LC2OkAoc31tmL?thل2}ZW$7;K6Gj.ĖciOsY%4I4 YAi"&ص{HW\Q)$>Jʶ\D1 'ZH-NDVHm^8Pe"&i)nҶ'Z>-%ebD":IV, SnW=Ct' ؛ZCjhBt)ߺ:Jݬ_PQiG\\gv@Σ0>;b۞cy׹8NQ' 1LM[)ݯ{ir:LCL ~Z͡=r Cõ~9xJ5n?pK* h.ݺ=9P`^ & ^=D=D_H KS,>I334k!ڔLDhHNݱi][$ݐ!lָphu7׆ ða&Po2,B2w[')ݯ{i2;3@3?5:bH dKh_FaM]e"nMo0B$>Y2 4.cD&Y2 S4!ao!!p:`h 0L\9a4sMR"am ÄB Bi\efKsb&X2LE(4{X2 :͵¦q/q Maaa,Y–Paaa`0 0 0 4,BaaaE(0 0 0 `eaaaEbL1`Ѕ3si *yx}Q:,VwUCw-ծX<5ɺ94Ľ-®1-3GjLDDkWax{\-HhQ:fQ}Q1:ct״f4m `WRoR\d awvFD>RZ=xc&LƊy1yxEJ/ގj/<OxU0 0L#H&Tr0I1\c ?ϖO{WBmitd.x"Ǵ^0&ծ2bygb̛=A#1mϽ#0 0L-P?Eii@W-Fܮ&5X LGB]c>Gdaק03eȪ4rS hJew]Vt;h8?5u>k=z-M_oFPͬ^uW[SSh_LS{ƾѶ_[S ]gM=wF>CfcVy=yϋC?,x 2NĜogaU;uD'c.&j.FW-uD[bE\ad f  #"CVgt⚟P](>zZsD,3KC0Iq|mSNYcuQ y'cf]^]7u30wQ%Q7潝m冀1qͳ0I\a{ |G_9Auf `!37q7YnWxo;[SBf&✅s[ZP}/v,&aa&0B귣Ya57:&7bUI)gE6]?O\> OVztGd Yβ?D\Vac&Vn ̘E:{wݪaOzv/ݟv- {jmL^N  3*ΤH9v"Fm?k84h&>.4hgK]ؑsaa=utd,R 1D.sR,eמu(ը$z"kXv`F}d8Ly˃K_ՖبvզM`..}؜Ř%CA&eɘYM0 0LR?"42р%VLjO)z&&G-P0^]xE+\Y4WMyLZvB &6I; ׭ UK=z^֖ۙV, 6oެR|_wn>w8g?D nngҥhW-LN;(vݩ nL18x(5&k]ѹ]8fK`9RZ{ƒ,XR!$ AHyA 8[BŅxڥpJwk<~?Ci)*/=LSD)$ڬZ`WSF‘2@ݪx{wd2Aꫯh4_TSCfa֭ػwh С8 дBt2uK6Pß h;^NCN )?]. J>wG EItt뮾Qm6))Jp0;t:v(WFq>([keev/X$GdQ{۷X!F/*,m6<ݧ= |!6OoDol(t`z(Dσyˏbȑjxķ!:7a-G0Qû;пCb0rܡPӌg`vqelhǒ`0z@KO{mc`tU^X(AC4 1=0bW˛QKV%BCOϟu[Bi|LS^Zy֩(r6g/=^"ڼvoCdֽGС{o7IR}tujWb qlي:D:cA*Q~iCtWHdu;.s",1TeyCߡmm)ݒc+Nd-Æmζ׭EZy SYW^=pnxKjAƅڴi(PS.Y(7$̆ђ3 ҧ n0kEBPVǟ 3a!T7eBĿ$5E!\ZcOr ޘFݪOY=ԡBi[omN(_f ͒+ozI$Us|i)qr$ke˰g{rZZtiCb4''G ѭ[7uYA{)eG`9C=g*y"=pYc|oxKϢ}Q;+..5US?@R#u)xWnª?dn) (N"Ǐ^삳{Ojr;;up#?`ᴉvb7ge7/m͎v:wq-O@av6XNտI1.^%c]Ɓa݂M4lNI>z? ֩[Yߡ+~qo`2YaXR̗ " h PgKO'*g`T;#aLtHnm,jB"Եc  .!DßgnCmӅ}\O"aaO yRW^~A~LfdSoKmuN7g1Ԭun9?# %z)gxDh[Q"{)6܍5SHyw\+bJ'"^ qo=鈔>h[j- кB֜3g"{6$vZ^b k( A9! =\ě?R ۘv#)j)-q'Izؔ{'vC޽ F :o`TN8;%g 8pQ;/[; 1f5Hp޲)B\uDq=ª5:ڶ.YB{ P"J 5rv_ЮMLc@!$O;4ի%(QrU֠24v_xRD|ALrU.`j;wLQ{#sHmJU< 7eU`-~YZ "|X2[۱Ų ;qؙ+s]yUHf!Q`޴mZ8ZP${0o}& ph8;F SV5Wv#xt|?rM5fTe18|&ep\(_/){ᤣѢg':Hc@W/@y.}@nq>.vĉvW䴠7ʄE5jc0ҽ1b)/Ţ93qwEѣqM7s 4ڷ%X(1u *zfXH>w D|Μ9j #ȏ=0OrkEOAY q#ϓ_l)/W?zw7oD)ڴQ*cqY ȬY WĂ])c2{g"Eޡ<GѦh?Z[ڗ"fpk G4)!0@cHwk2pDDYj[Q%ڭYC!0G\1":MnC6nGԎaޱ .KpGszm{\-VY瞬Y vf)%1^Fڋm/8GCaܾENXױGum~-e]VU .{*EXvD'&G[3mV^۷0{v1 B} 2x2N.S=/HHlݺmrG)/H &;L E8Y892i ۋᮕp̰K}4.q!2[}NVV8*_!#ԅ8>?bỹx#b^>=*<5I W8jΖc>2<1<$O8*oi[Ylqcb ȁʕ(~h-gΐ[ nK˗eZzYWm'ŇϓVkf.]˗\fÀ}侏ߜ믾BhѱTF.*$6~Mw).۵k'v܉;vq$iߵ^+?KePYBnR( P S/(Z ɀ-J5\|A/ F/NU5KchJqG+ -D b>_[pҀoܟ/_Jńb@7(&!rJ}$_ ñ37Nvy }{,I۪a!h ǼD0&glgw1ݍH8 ]bK//ï곈0;KhQjf],!@!`h>VY?OqC|SQYs7&h?JÆ63(/CG`Y c'-t`ei*:tlmmϷ}ۃ4~jA_eOF6 Np{nS11q9Nt݀a,h=d-`{k2b[$ԢS1rh(~ӸOKNjdDgJww֋W QCbTʠ!1j֗;nYe% A抩ىP-Q }K DA:}K}R JL\ݪj-fFkղ"==t$벲g_کwg^e'k~ 3 W\<x5|ܐGy z<ʠoɺ?… Փ,\r .ri7W_}t}4ǢEc`S,,5oTC*+%V|;T97@҆[6آE B/'o.˞0BLN8f\6j1}d8]v_qͷǞ};f.G8v4_`寰fQ.trݣQd1bXSнC˪Сm|)(fyOCBtLUeu̔ղ+C&!sEy׳5p0Y ! Qo禐b3Fys'sWk@sA?%;.U#rvHxN,A޿.o3cF%O?u`p FhTlRc,eG$@/4#Fӛt #DM4#;vy 6 Il۪PS,Y[c\Uoi9aCFQ%} 6V”T:#ZX"oǚSaqƸŤ{ٸd;RK\IKqbl-yeCcB >9o㍢D?7sz”;K` SE&*TQ:aQDŽ= v9yVO?xQ1쪨ٚ)FE <+=Ԝcۋ埡_ofV` v?I#::e#z2|Mx~2#ZY2PhQ\zɥڻe”N7=%?\U:ġ@Dl'Qq=DFf_df'E e5uN }~ATe=#qBSCɋW4g?UZ[nA/jU7܀3n"s뭷W_q-\%ĩPlxhT'UT_}I߃"xU;-ݶjqWo }2j.I<-Cn˥vv*( _NDnGsݥ16D)]exo_wϠHqJ}>٣ gl*k4Gy ͌K{m P}Od`ެ(zahLQFtOIB ůpgE+]?k)nLͨe6%g\7ƫf~-JOqN!-xhpr'WOx:pݓ !ZoެnG 4o %7F?.rN=ޖ1m6y9&wRzZú5GP\ݴˋ: v0S;gK KWf?-.<#%BQS|hcÂZ]f^lkpڐ0"} FfdゾЩsDg`1 %h߾豽0D[`djUXwb ؗd/ )C^On7֨1;D(c;|p|5\mN) 4ZC|n4wTO%'T破Vb9,f|~E˿6[Bs658Ă^w(k7=x!ߋb\5"KxΩҲIs ~*b._71m`V--4-Y69"E( K4& ak.y&]< "k(GMXۏaoŏF| _>^!/un@-N(7=7ve7h|wG2%LBij\?0C* 0$GGYy~Y+\Wվ6퀒f&n DU}[쉋PBt`g0r3tlz);z|*yFptg\is~ߙ6vl ~;@ã6S'3˽,ʛoǺuUiy5.l,m$:Bjm0Ѽѭ\ve O/'DŽ'a>߂59=Qk+^;3:dB^^/_>LZ;IPe+DƄ^|rYIW\)'!KYGvLҽ *cw7]O|;p)^ZV+cJ}Ǔ`Mth,ȁ@GZSTOc1hLMŜ.<[2t*KNd m+ ˻UEKDmx~WXlo|9UؼUqu ݎE((+EAy;Dz~kkWQu۹ħ/wHx۹)5ذ!0^|g8'LGc|yD9Ca=٪#,Aڷ.ߴI *wOQ[n!K0`C6e1쇫 SrI{5_%f lC ѽLeh0Xg|qlŧ⁧2<'T'+u1qIYQצK X2z-8^ͽ' ָj VPcr/BV>qw~\&%!l=]#x~Loq= kk BH6 I81=zE[| E r\ Dbbb]8|\+ 1I1 A әH0@#ZHGQ%/sM@duX%pad6,C7*(y, Ֆh䲡?m7h ;<\5ai>ti<[s81!*~d$debObZ gu8f?c3}Y kp9Q_0&'#ᬳЧOF=-ōҘ1gZhqvً~Ym;&/Ơ9VZ]іX)ILwgS!LvHҘPN]!YN]%V7Vmn-bpNz`?MKR0$6.TY̹rG_?=V I'DO/B֥MWX֪|!Rp\l*-ǎ#!^Ƅx$M/-B!^t$CTġgn scPBOXTw 5=Nos#:%]w!F [v-޽;RS[ʨ]k{^ײ%b:F Z| G󐔜XBd]yI@`xm_.2uI_]F͖ڇlFW[Bre>׹)8XQ!2nC/ܴ&1rQYa0aI m+kQ1w.7ٷ/[zDKtI*bQ.rֱ,l߈ʐ m^ oKTc8:\.$[m@6t8f5P9t`nE9JH+ +ˡw΍ @ql_D L(-kj9a9|QD&:$7QK!v8S_Hv?۶ˎ[ \n-e%8-/D͛7ˉ66jZqu>/ug;0v;ʥes{\gq:#N?`Nw B϶5bLj[""1:KVx؄H9?сhZ](F4k;69.Ɂ~1.yڨ]tlX;lF'U =D8 dJ_\qҝx`?({G<..nŃg17Fk>Y`1SoPSJf0VIp.>%u#0Bi7.H¢EH{I<,L>p Be2,=k<>VuK!"? bQk+aM$,YF{EA@EZh46K}s1| <ϻ]aĩ䚈[wks>[| ,gkӹӭ[7\tEr cO~XltҥK Cvpfk [$65hm>\W\+0?fE˔$vi-Eh6Bҋ^ݻ7-WC}dHoވOHAzH}HJ.ѝQh!߽@hӦvLCBxvlw G΁ XJkU4.~{`{!=FC+25 Z'nsl!Qb kC3痆&ȼB4i'cdžRT빽Pa:.|&!]v*"#V?^W݉_w1=G`g-ğ[hJ(v9&Dw7J\x!D0ڤDĩjFe׆0^x#L/ 0@0&X2oWT;8ߣn5>z,~m0KǘQ7Af! FY3ޚ(g͝82o7w~(~q>Ғ u[BRj=&T<5ۀfZ{>IEdqË́Y"_ !=>z `7w}7NJV}$]mă|86^8o?Ӑ&QX:MPܐmr\-Z4VTPZ$TCcmY>'@99Câ}e⚓=`2d>,sk Hz+P%KFu{ՏFcj;?½Ͻ/A\l]w#|,-% cU$4i H[qK[;3YxK^rǎ.TV0 ׍uknߚ/}AePYP۹It>n PMP9owdm Fz2.FBT;#:xklV]Y,hp,6S2JBknzw7r;.C,l]_Kwu!-k8R9||KWBy~ΑeKjWFxg3dCZF;tCW%bs:J\2i~ tl+J皤\*IuVwE}VMo#֘ c=3Q~>F| =j59x?s8}w8 cQ: 2\3i}ܥK@pI+p!Cjnr%"JeFE]ZEy])Ĝ@qoбTF*j;7%T_zno`zahG*7`P?u?4#\ ;Nފ\wot =kvczPn 0 Gt_2'j„ {gxb"Ns?1ku3`LJ!][m}l 3$QD#ހ& ,'f'q5'"18EKDȭAT;,3\5\5v}T@!-)V{Űh Va…#ݝN4F\+kjm ѻzgXF2ǝ&ŋ[@C1̳{6|8u'jTisܯnAξJc^|Q]!mHcF> spdzsSg\AXRK;S^!,<G$C ^e e'ݍ>eX~@{).#lYsi7N!~W,DuR/V~b0eMa(.%p]snox4Vu䌨D|\,F QCaG :Cch Q\=v*n CܢicA=߂ٿ# C۠WZMys{BCћo[Mi(*ؗLd>+!-*.A֊H(ܼc2-gԯWߞݻ0|TX<3WcjGf.I=s>wÝ۳'<B!\8Rv+۾; c{UBӽ)aP0lxu=Ge.M@;m"ԝ&k`^dgwVu12JڋU!DO$E;QVYZouM%=h&z0#D*B[z9b}n)^Sß/6ۄ7[ڟ\nE>f;btCm`*6&N8MNrOqd$,nDX}*=u8Le8#gϯrՠzR@[5y9H/@ݻ|R{hL\Y@|g<]ǹ=7([㢞!):I\ / q溏'-[У?09{_hUccMBDfQS܄"B%Ż9u8ҮȡZh@EFyIvg][ѧ ߺ:#'! t :7yoÕoS7#qkw9[Di`@TNiF+/K0 "Ts"a?z!J?X&7*BMe{`.r/ASzD}.G9f`xa?k bsF|Ν+]Ie˖bɢ mJIZ SbL*fNi| Mm(~=XP0:lB Ri yD δ[jX@5B*pU$4z@S[k3'~E(3$Dz|Gr~oxLAkVlhy@ #¨]\;jNI ~&_&0il9v%؉a$B?ߗ4ǣ;Zŋ`vVx͟fIϨ6T dwi(:7ͽΙ%B4,8 Hn!J*~.+FUaiΏC#]jEX6IBhLE ,YpI :6dŐ9s0uΙ¯e" ȳŢ-b}CB7hE(8˫eapX,GXDK[YDNp3ML`0 0 0L0h"=aaa掴<#0 0 0 ST:jm>&2/aai*,_\ B-Ld@?~jMa&4aaC%OKKSH!??_1'J3LhЏ =ӆ^kٲݻ[ 0 D2wfP-99YbN^ZZVi 9tZn-_B!ZPP\te0 0M-YBy4vڡM6!HR`ai:ylJ+1r@z5QS@`KhP\\uaسg+~LjJ8lݺ]tQSܰ%aaaqԓ3): Qx(/džcǑ"O oz0L͠A#7q1VS_cBb#ի2J;WsafRGzʚza lnCf/5k֨)-,*B\l`X"Ns'lC"q Fu"gyFuA8,,.AItM̒aI;7{^£`wKy#0 `͛vnnGIIP\R]1AC&۱C*$|SLdkF{%Q)K┧ۣ^~/ gă% =9X7(UλBM->AJOiPao Ws\se0rlذ/Elg^c],a0 e˖1,8ZZYi{}%s\BVVGV! oDze#]Uo {yEohki),*qVϡۤt?=|u :?[BDGGy@-) I2܁5`N̈ ehӺu-!-IF+=jzJwXe9st|s.zZrr%Zt= c}l~W Eͅ>aa iLðq&l,D|Ӎ͈ONrKѱcGKJ׾=zJ`ۅ73n&zU TzZ,)]TwTՌ(wޘQ j@\07*c^s9LIi)⌊]m2-NF,67ay+~X,}K^jr#_ _a. ƫ_۫Vknkoo憛꛳13 Olc'w&yO[sXO= Tι;[WbSoKQHzBuZtvYca%S+n zajooɝSM }g?/kN0 0zJ3ח)))iNuv$B-J\)_qqrQ-Ԛ ym'VdW_0uV݃5+xiE߾LRz&y90'ۜW,9A- 'ƢJr?tȸ T:LPN}YB=wsUq-˹:xCSMMHVKߕ^% q0L0`fbդ7.]1S!o"DÇpNW*QAxHIUl#,7yWt=k,)GU7=O2yGݎ" :,P0 ^6Ts1bjcDn"TѡA Cg{TanU6~bIԋќ@֣O-NVoY} B!*y}~96k.vNFBͫTjCCo pEa/N3ar`$匂 $3,˦Z9ETb)}qLRᎁj:YWeai_/r|97TyA\֋tڂ?03ܒ9]n9|,|lo7cDIxAnkb]6Eb~^X֍W !c.űh;Gbat:K/W Pr曫ƈΘ9S:PӅ[(2b\^pWЌɉ.x] vn*5$cLSoDŽh0erdxts}BfqՊclaO_#ua$GKqT}0T;zke9ع3C4O^J{L/歹BTT RV)BҮ-s1 S/XmNC^hŁCX8`ѹȒpyvCuOmUF@Vj h@r)2]-/+ (. lvvaF~BG) =1rp5$B/B4vA >',]?MU;JSxI8ϱ8ac:4gX`HU @z"7.{}HhcGi-S=ǐp1[ d*"DYX Q8K\^6ϝ[xO= PoG b^uxK<pO?<&hFuC<<-|ZcQx+MJ0nCx QW P|ϊ!Tq2>ҝW]XvveajE?T'DjQ`Ĉj$BxU6z)nª5dX)B\\uA\5^qcw^iLf?+L [3kbzt75R8 ?:⧞QDc$7eAkep"%9Y=2 hQ%_*SK<͎=ysbN6 ``_WѮm[b3̛Q#MLZ[sUy>= ؎^&y䫶5>}O|{5A=yԲ)hyײa`X`kРAHKKS"%S3<*i&N~~)h9\QN,ůx,.`CZWub}!pK(ų,BbΕᩪ14)l 0 ÄF%B+MAꭖҪHce8r|~mVM zM6j 0 4XF8Mڈa0A3:tH-Zd% (=)tf(0 0~Eh$"4r`0CBt޽(((ЃkJJte0 0MȁE(D&$Rai<,\Eh$C"aA 9EPai\ea"WPaiϾaaN F| 1ٯGpӝcBf<̞) q96 3v(}^Q]DGcB{> Of9Rϱ^ر#$J/y¬$r|\C2/㗜1_iC|g Z> &0 0 N`&*":ЄØuHUbB[/<̓L~s lcʄ kBt! P}1 xoW1l|(VY+]f>' O7[ W:0 0 S_ԇP:íTEJ3}nk]̑ՎnpWI(C.WcP;nq{TYq{%2WLS gnw܌1{X+1 0 0!bXd?.,' d;[EX-dY4bu ѧ]U_LDMT0ZtBa뱤=d&s4c-CѠ{ܑ- HJ y$q(;Ä$'&_pcm4R~ gvL{yz*x/ۥIQRV,x@о"ZO:0 0 S/h.3AVxaG;zޘY#8bƜjsf:yU(z{iduy80 ٷ]w 5 #Kp!$=y SW\DG cC4.ڇa?#Gq`ҥcjloJ&˺}ՆJ[6݃DŽ2 4^~,m8*aZj=|X+T 5:~Sݷ1!؎(߁aKP(~vt{Ƌ*ˤzrPYnҖVd@vʕhYmm'wF@u<}Ae.{!-z5TUy^ w <iiix7]1С:$ 0LA{[[dpO5V;7۪@3J "סGHk~Sa krEn0Ld"!]4Ig. 'SԹVxFaiiw$~cccp5W h>cD"guVv=hnc P4+"Li"ޔ3 0MHzknGtt.t,J 'Ϛ0K⒚z"3 <{ Q gLNJɋ0uIXBW݀;yS?xtݸzo߅R=aD")@@sBlO5w:pQ5VwYܹsX݉{$}ӘIևhC٘;~VZ@y]DC[HO&a ݵw![띎'd2h ޽+oG1 0HXBN%%8r$V3f}Ͼr JK#cF֭X gY'NTcu'RRΕ0'R gzMzztW_QƜ}.~mĭYqaej8w#!!AѯT v|n;ܞ0KvѾ5v> Z0w{0L%R,$@~G,6goCLL4ߖ{ saXʬA<lN5a&MzqꖂbAʚ5޹C81L38H ee_}U!+}'^-D7YzNŏe?bjOu~l$ //Wnĥ_jyiD%|9>S dž ٸs㏿R~פDspdW8Vޡgխwmd 5\p6H-q 7r΋#MS'8P7A7x!d|L[z|'(Dԫ=͙~ \zV"oFfa"H&''"WO^HQQüԜL(4wHvo^rխwm)BBf m*ZVssmz#׫g$Թsqp$t릦~_ws?PS|AouWec4&c6~̑YedSp{7UETg`S=D{}_^rÞۨHDk lRrnr{$t=Zr23n_|%Y$pl/תNKS鬟\mꔠ{WaDz`.߽:QI-W۠[Nx鍏KNbLQLԧ<41Qc]AjJ[1jBoۿ!Uu/Hf>1y Z'ъP=5|(F>Lnm݊;jڷo/ӈ ݀!"Ta)(tImΚצTm[O):ĥUBӽKQ<ۗ]% ϡ~ﺅgk Fw9a^i̜H xk 9V‹ǡU!Ի]<S0KMY^0oK쇥8罥B"\f=e;\zh\ p`;Dj q՘sT?%{1!mY$B}Il6[u'EjYǏG-ԭS_$BĘJ+d'B%K'; ZJ ѳ{ILvs(ifο#;!zNc0\zH tVuJOd>1ZtG_},` (!+2+}1͞ jz]HT_ K8A8ˊTwpEpVޡؓ/8PYd 5 SOE cw gyZV8($ƄV$D ʇšVT"EZa6&KFUR)ܑa}zL7\[AԪ 696[;uU_dc3 0D˜Y@iyͽ62Wd ꁯtbރ~B +p\mVqG e_,PStf!N]ZFCzq׷`hcB_sf P1l,EEESN2ϧ_jJT^-F؊=cA^ҫĐ(Y :V\ݵMXOw\5sՕ.sPul<&a 5&M@f`nׯd Մz{>;Fv^R:mOjBUKm\( QvN#K| R 2&oEߐ,=qNwnŪ,@ P_P+? @?2+iَ}nV+ 8gYβʳW:.QiqR*zJRB:Z?,/RjnMj;lGYeӅ ]%n2 Ә/K(*o A#;z|3s i鴥YB#{b"i|?P_op5YT*I#󻪩eѭ4~j m2-rwyЖandY<U `"E`*42h tGG#=_E5mb19?-q :{bCVC%^`eϩ?֛H<2 ӄ{%F1Upp,AiKF 5˃܁(TTQ1f;O$U+6qZp^~o̜陋whxl7yMie7͢LL0Ƅ2 0̓'cB#iNcދk5aA^$U2?ѲCvcHLƼ᪇Va2XV%D!68ytg4HLN,9[z\qO:LBk9+3ʚC:S10 4G{Q<#xAkG_wuk׿UM9GcYp駫) 4E,%6c0 PeZlv ,-C㈉Vr(!:h ecguժt8dfcŊi#_kyjj39Ρ|S0\mEŪۭ҅ڜ#&b)ƪk^y'c*MĈ~i1#mt8Y}B F0 0u"#$MC~NfIEppe.H~2!p:p:[i"Γ4. ׶ͯ-NKW\4FCĵ@kxGjke ;&ciOMS=ňKF5O߭bF6m_ԿM߼4Y .l6M'gb'awXNM,lڜ>Ei˧MӑHɳM{qj-/V >ؑ 1w(Ӛ.u$g;F{Y_}d H 0LeSw>waOHB[gY:;k8"{;*ri,"ٞ}Kp=  0Le+3՘֭[eضmvΝw߿__z$7WT%%HHOF8؏#^d͋&:[n)X5BiL(j-iQs2Ѝ(yfGtBi od9˾k H٬C8Z! ;q2 m4<,X>rff혁ʘX +P zw[=TV2囔YBi^!tZqqQtQ5 99]:2Q]^ޥjParSԘ:&GMJ,&-?Wc D:6C~᰹k iTT*FL@^S$! ,CUXK"K_9."B.׏uԶ5w\%ȱ*cf(U>KZkSK_4Bv%˛5L:̰]t:\I R.~133,Baf3K) $< BTfY|RPظicK8"{ۅM Z:%&1 6WQKDKj|16Bj]2[xyJeUËFs ,Z2E5c?ҧ0T⟀sqY1G5 ߓ`0 4Kn&\-bTħ\r Ə OE|j"UwȨuFK8"s.it¿܎(UE(g+f6 w\PK,r(D|OPYӺbƜ;nu7DNOc+IǴn)cIea%6;YGVP&I 4 Qt:e1 yTcH3Z o&yJ Fu\gߘvoȇ . UmL(Ye]ew\"aiBvGu# *EYnk' s9[C"Uj4ӥ6eSL zkہ'wP%+m_!v5ϓ;1%MZ2M30yp\R$!Njq+A|J4*Jrb"Lлv[*PQ&5ݗ/FmP_Yq &?qm;걄g\48}ʣo"ai|-ʩՋPg.:Qtڵ{Q.nw3%h]:m_[C=h~kہoJ٭j ^KM)D$ ˜( s< ! !bmc\LLRܹc&Q\j&KEӐ"c,evD""9Q `;ph{!Rb-+ʉhhmI,ʵ؄0e D Xa0 4[ 5 ǃ(Qo:t2'T-o5XYќRjl&XL%U:D>!BE K葃GI"PƄVe"" ƛH+-^>;QZ]LgZzwp"f HO  0Liq7h/HfX*۵Cee% },!fg pE4//qB&UPK؅(T".*&uOƨkVK.'"W~%69. qɕt1G+ϸHf8gyZVGާ믿vzHKKó/Gbaw݂|$''4hSRRX0խ$G?)&<>-["&&Fn7Xx3_?ݎe(-?)ӎ,ŗϭȉ;jr : *B h)~9Zc\=Ijl-$`OvZ|EѪcs_CKk*u!™j?TcLs4d(̟?E(0 Է3v@:wߩ)![ME>Ntm{ 0n *BɅ0\pEE=͹{k3v. /*"/ww1yu=/솒 > JЄ4#l@k՚E{}Pk.(YV[햌C^MBj[SqеKbAlil*f#HOD(2 0F%!?,?~}M6RǀIkJ.rD"L8 g0Rh_Vj.!5hL&M"d)Qq4G{ RljDř8ri]Ԉx㤛::uVm6R럈`0 4Kri;EgO\B~YF~nڴv,K,i\qHqN>+.4Fh ϨXǘP ׀bemNeR!mB$Di[gwBrZDolИ(X*۵AbΡ嗓鮏a",Bafɏ?e~Ưd֭o`I1 5JI2A]"esvHG9eѱd ώ+DYPP,J'S|*M~*VAezfg%\K=.SEp:kC%Rl?"aaj,rBM~VrܦvZwP Xϸ&ʱZB=ԥ=K9ol_Yn(omVluYׯ_u!7gY<ɭLM%QJD:K. JmL(gBYշ;Χ~ki.r!@=4!<λ3m[q~]=iL_"Fjz,BaiP47pβ9;e#\jq4&lN)0IL8Lr5 BtY&BfV8$GzwuO5X2 0 Ӡ4wHvk/qUgQyd$Gn4Ccy(U͕6E 2UjK"^Ikqܪ1ęqtӘ.Dj'">5X2 0 0MpjKt*i ( MZ,VIq- *iwUYXCJq%G#wWM0 0 4(.]kZГFjqq$+{~NKQ94I|Qcv\qnqg0Gm=BH"RSE(0 0 JspdWZnWͪXHIU W]CVM ~Itǥc=]z]_C3%!j4Tu!Rl?"aae'AC W" ZpPiK/NrjTSqݳ*cTiߝ4"z 8qpŃ_N=Tٗ#LSw1 0̉gfnA~~>eT5ƜHR9X7,e{$k!.BTc| < 2Nm' o/gEO ƺ!c:kdz,r Nk՘սYpvgdavzk3;Cncm6R럈$_3 0Lb`l]...N a\| .]SWXѣ˸**P%'(~]{U8HF)"4*Hpm6R럈`0 0u֡---EFF v!7/j?0b+P^h6DؖZƃFnjTS%YIY'RbqPq a0 4{N' Cѣ8p RSSxt 8|;ș)FQw,]0.}4wHvkN_Qb9ʌ}0n,$B&+?wܶݓnՎ4ĵ.QƄɉ ]r#EH"RSE(0 )))3&&v]ZC+**`2 (蒻nD#\r˵'bE2rLKtXDcFNix"9?c?P*P 8`ԉ<_B(Eb8\P}qIQ(-t'."Fjz,BafOll,ʅtp:]r,(M"ʼnFC˜Y5F#}GQ,Ƽٓ1A͟>n"FdmGfe&FQF"T;E7BI6ytiea=d%K(YJqҝr;11Q,\Lĸtu1VuuHءnzv4nd B9VCg0p#iLhye) K͛7toKMt[\hkC+mm.X8zLN?jb"G9Go)ӈ`L~tKW<8-üy\vKoa33q] ??_Z% !?5RRRX)((oJKX$'%NS~DEDgAc=Dmu}#;c&fA1R~;8HpgHh9xn-t8gt_=ɭbde)cKۀ4l\z]Ėж[ v'tU%gO,ŹC!mlk2 0 ѲeK9R,))F^^jbʕ¼yxʧ6 P‡nvd+2L,6X-vU".1J7n짲KZB鑄tׯ8fͭ,[쌸~yeHE(0 èWe]s= cK.u]믿^.[ zD g"@OA՜C䦻"`٘,U#X8gYy#Rho:a0Po44: mWƄ*tdF@ X3BLǬ"$=y=Tw퟈6_#RSE(0 x@KtII 1|r 6s΁? I8lN0+ɷ &λ1V )1jJAAuK喩kY`6J]W0 IuBa&RhuB!N`! sެ,r 5"Rh׃ظl? WEX*ض0ZƢ mu-ƛ1}1o柈@bXjODjI:DhEEaaNeHh'{̸~؏[!S8(+Db\|Jt qIQG.F_S՜ , 0 4(<\pNH4i}M#^ u9 `f\,᢮elUKVmelZvPC!R?m6ۿFާPaa`]β9+Rho8w@AФ?.ZaA]"i)˸)'&"ȢosA3vGj'"Fb׈`0 0 4Z*wnM^".iX1@nd->V!v%hSph{0K1 0 iȅgM#g׈ge+q6{z~rm)@^-ydYMo9S[c@ODjHODŽ2 0 3β{$Zr++nJ'be<\D;.1=Gl|uNcL(8ژHmDHh0v 0 0LcR(V&ᰑ; (#ZuLK(8\n1LdB- 0 4(.YV8g{$Z[숊5IpڅڔcE$͎ѥo+?24V07%#f#"RSE(0 0A|}wP Xϸ&ʱZB=ԥ=K9?ai% f-{ ]W/B mCq͵WK'1naTgYCH}P<h᫯r 2'&ba"(r!!zIR,zs o_N76mT$DV7GIj DcK(0 0 Koνβ7xNtW[tgQX-NX.ȺRe&D2u+p7xNtGާPaaM,pNH4/ʯ_[BXT6bB|Bf%"mv\ oeEřqpB7R?m0D}jea=%(C1Qⲉp.\Ul6 A?/G1aǰuK| +a68Q:Mv\!gm^C&R`0 4{phR?qs0S|]p_"!PAsU؀S2"Q׿NWWҤ5X2 0͞xĢŽm6<<,i-2=u:U&`_#, 3wQ@spdW\.' 㕈Q,FA?݅DKěѲCr)?">5X2 0ÌX|g=Xf`e8+nR6tߏWĊή&4ňC0'PkN-|q5"Zz"a"МW1*&1Ua* QBa V'L~][ヷ碍Кӯ=WͥuoMfy( ɮpI`JCCib"%ԀRr5hLzR%`< !RS~~:͕0"E`Xv 0 yw]:D׎@^e3hYl^T|CFƖ"nW:J ɮpi4'a"Ty#d22fcX]^掫6Gv[awi zqVT-NYGYMuib(-=S5Sj*)U7_n<^&RD`)0L&囗v*`T(c~||pt5T{eoŃjSZlظD!DMHCQJA .@NKެ,r 5"Rh{c>.TDǙѣp9ʳP)-jq$ar;v?&R?m0D} M8p)]sA56}>]էg|\ɍ_#@_Wj㥸e->a !Bɥv_wŀhTkȹDXؾ ,wh V hZܥYePYF.Ƹ'd6bSr_a^9,(/DeZsawb(5aN<$BL^}2)^qK/0 Ӭ0VmK3x V&{1hh>6mڢRv 0JcEilwfI,HDqyf\ ݡ,m0D Ez/d//gXur|=r9zZqjTq*r^T98f0, yP(0L3Gad$$n{'e؟w yE.|c0"䨅ehАkWgY."\4,Ŧe6܂S . &1 5tY1&X퟈6?">5N%ѷdW&wO&k:IDA4TZS;PxƷ1^Ax!NqO?5>e,*0 ӌ0}4Ċة“GU]G ^s9b 6|'XN-L0slQ8 xHG1?Ox,f`U&. xP"5tY4{pebHmDنn1us(0 䈴1ѱ5k Z]BZ(Z/icKD||T矁 Fg|NAKt8'?Vr@ >%ߠLInKMJrr [㶑F㶊&i 4kAfFf&2ؐ-~- *[HNK\~ŪJ>o|O;%S5AD-Mf$hAJY%%iZ0Jmd 'I]&rDDD@@oJU)rކ&4he۳4KS,,/bQ6Z&シ}]H(.o V{.o VpW_m930{NÁ(>Rܸg_o}/ˎb̴HJ6{g`l`JTc4|Q{JDDDDTqHւКx]P_xRڟʺЂfNv EDA(T[ٖS:uE5O%Cuͥ- x;N ~g{SNNH=9s9}p:c@Rok56-~OZ\7pC9M}]i3.S -/m 5gX[Ӣ5s]?'pO`1s}D(2TCC*:ZU: wzm֫.yxzgIt8'c3/c1743o w4d=qЛrv:!laܽB0Qrx,deu.j [gl[w xx"FO_+lش~8f$ŕ'N:yN%B:Se7T`:n<)n؎QO9u;M BnZ D{c%U_q 6mZZ2r]9||Yo ӵ3[.¢9j-[1ۈfC^q;5jϚ-y[MwnӖ&mȺx270Q0\z<4x;=~5GA v^nRN}E+FK'h6wMnk ~۷b;1#c6]0ϛ}33 zz=6޶7rҾe=>S~T4"9c$Gb1mYצyسg]2L-+I$2u2YOP)[Eڎe3M,ך̲EZa-[)۹)kKǵ[ᔭ"}mFZa-[)鸑Iͪ'Ȯ d 95 4ʈ>/lՓv̲|Ϣ}zҎzsP|MD /ǵیP,n[v3z%[{#K)t/N<1{c}bUpYY{y^kꁍ>R %u i?F>q8y#M1W^$d-s¬^jV!c>=L||"r]l{-KݦudvD}T{/5`>>CM|,T }FޕnOA?P&A!!?: 񽔧Yu}>ûn܋CYihj'h^?MiujREe'qќ3k~ ~qd"?I58ݘwk TD W_}Ð!ACpa3Ƙ M Mfggs+}%UmVo\kup .ckqI=rrrRUUU)#9Eyy-ү,+Y8Q\f?~u7҃l64\e/v%pvF8uE<#;ɪ=uhg{Nhx5Mh `L w(scIlo}q(em )))8YZo<Gbؐlxg"RMdjuW)pO$:Im9:SQ/>Xhߨl m@D20#Th;Qe;$wvpvJϕ(2U'u]hqq1vءѕ@_sZf7n Rᒒ\Ro,NJ7#(VWSׁN1BKheNWDIzBQYx B(rW]R/~ITy.QV B%`7b垖ˊغ(NHoQ&Yr> U'q c{ٱp1%""[ "mOh4'-ٖS:u{؉ZG5Ȳ9*vn>[~}Q3]ׄQy2cg[v:u}u#r @9--7-9ӘD.NNP""""rc6(d"ߘ#} B($.veNF/#.5ZkOHlωmIOrH;9u;M B(!ɩpN5H17rd#@%w￝$NDDDDN AhJ:MʒkEop7Ţl·)XYyIm5TӾ.c$ˋXp7+WՕJE,,/bQ6]lǜwyS<|$\Jˌ30dkƘ1cJKKn󳳳U9%%E=v%K1Jj,t-OcpZXI Nd?ɩOhUpμSꫯ'Vx3'iIȟY}JkZ[XgGSܨsDA(o].f<-z\][ٖS:uS?\XM`g{NmDqWyIיִm%L%"c:nbb:. |nL:{QCT]ڠF'zYF Q`:.#5 :u>dfskPc-Z (nkB!ɩpN]uo}f=Bq#wk&4Qvh Bü|<'ׄeryhK;FN]̤!>?FvԶ o}UO~^m̅'QveG8u;MI)pueiܜ~eG됑tܾI*6ΞL %""r"?hP5T8'[Z$4iqm۶!%݃)^nYag[L%""> ={CF_v MpVcL&,pѾVXV=iGvncG=iG;o_~ʢ2'`vAUOV=i,KkֲUOڑkMfyH򴠡Z 5?#c ,}Z g=ZI;RvGv[?˗E E-oOzF.2: \Agw$;{f+ʏkQwԋu,Ys!ϸM!Y :_h)zsRSj1늼n QH )f9Tuw=bE?Kcg[LǍ\m\I6GɁ5zg;sj[N۴֔7"% pqٌWmpA(Ưo3ۧkB41;GǍ\m\5d(9XʵZ3l;GNζ$qڇ?&ǝzYᰳxnZ D{9c%Ugq 6mZZ2rDDD4OׄE3GsU'U6JDQQSшTGm47~@ ꩸&T޷+c+0F๵jk(u%xbQYԕ ]J:n["x5ׄ#iGXgm?-W {vt3tP 5qlKp6XUV?9YT߀/S&`{ѐ\z ivٞSےtܑǣNmWjAhkz`w6veG8u;\WAh4%dS0j@^QsHZK1z@B  u9gwps7=ZB/GDD$ؚPu!)GƝG0u7^?+XjdlخΓzN7JcټN)ך̲\km}n@3+ZЏOrm*nPA\j D{R޿QY;fYZsAy,w'Y LݢZ=ZN㏔\p$\JDDa55ݑkFP+ j=?I+peuRo&6`@s .t|!jxd>nObW^ׄŭ^I+c'מ-E~(NF7!5݃JІZ hܪ^X{z鸑jCpl8lpv9N6\'-B0^1Veu=<\y3Xaz &|x3Mve/֭9 iU >xR0&8Eu{amKLvԶv)pٖ41%""Ҙx/f9Tuw Dm)2:B5:ذa1&\z9)^T7yO ͐|! l#A N$?4x.ɓrV B4rLYUg>cfjt\TT\w'wSNMc:niP#J u>50q#t\QOhgeg[L%"">;׷X꽙> 41F.T)r:27rJMrᏠ'4޿ᲳDKDD '##FK*QWj|ӿӿ>GwU`l ly?ɩLɍ{7Ĭk&bF Qdt\DD As^{:jeBM8hPIu;ےt8z#"VSֈS6g4J“ւb5wJ5I:]jg/9Nb}o;.;۲#h!""r"zx) ̊Gu0;Ofl鸑 -Ix(;VIPtV.\;.;Jt\DDD!|H(踱z}1Wr:uRn7kAk'ׄV'TM,V4Z*黿߁߿Tu"e]*GDD N%S  ]+p'b:nhNFu;VTy_淼sɘ6K?鸑]yXx 6n׾=XMgeg[L%"">;RœvHt> v`g[LǍ\8mIvʙSqq#gg[]\tjRݪW[UQgeg[vSkBb@LInhnnFyy9JJJ0~x$''tׄ&_ca'uǰ}q>ȨxSvVν_w{6`L] c)P")..1l0P!mIP;x`;v̨%"-6pߖh뜕73θIBkzR 72oxQ u-uȋ}5%7 77טӝ8q16n܈ 6iǺ LJ?G7aUӞ={:>I z9ꎤED%B:SzcdTI٬:٠ka{kB]"鸑]: ~~ڊF$zNN/DY;qo鸑 Fkljj2~Ԃ' x7 OPQdN;͘I*_?1foFŹv!)~ ?]w)ݺu+MfudInòj󭩘|p,,څ1S"kP:IY?jQ~w^sdd"{h:6y>yQx" ,1d>?ބb鎶T?m¼xPᶉ^*!AUqoD Z""=d*KN0>yc?FMF2:.gnw(+}HNu.i[E*!q 0!=Xۂ{qFևպ~|C/yP!M2P?W3G=OWnO&kV|˛%.׊*.oEٜ/-.'% {aHIhAhj:,-#,,/bQ6]Տ FB'٥~]Mv1E,|˛>.o VpDLǕ\3\@[GO hP[&kǨ b".xVO}}q;x;΂[^x1[wO0>chX烚NO`DVLǥXc:. &9GwU`l}6?f 3X\//睪kGpg"wxZn[0x̺gZL5}1'54"5XdOM ᛓYUh:?W>{/k;pWc{/>~>xEӗ`Gh4.ҶԬڻc\oٴӵz];iど۰F Q #` u-) :(m]F眺7֭Χ$IHKO˓"YׄvgF22PٞSnym1׃ pʼM3TzIzQN.=ٖ4 T4pRq-vDIMX2 RȌZmK֖@LkqыJ O 37yM-û.{fmj-]wU+Ĥ@d -}Jg3f[}F-12m0wJLǵt\&_J5%YPVAhcASlI}SCXH͛kgbw+orQJw۵E摵<2it4`ڳEMcr)n_?cVlAD FFpVfqkךӵ ۍ s~C5]x87J:}G1wK.I)%B:ShdhmW`2Ե& H&b:nb+N=sjؕW 4l].N{-3n>$Ջ$\-Ve7@=sgygk>F .<] 8}#P3p_al`4dte%!-3 U_KCU79 cr=8fB6"yQi Thrli~}猶TbUuvb*_k;e`@$겶^8t KXA(9_4d nA5{='?g}LLB;^|(zZEuĩ(\`ԩk!u.݆kqݔTb\#9sn#0\P|p1TT_?UAgaҐd䞂_Suzmdk]}2}Iږݎ Ɲm=xum;! J.᜜ gG{.ږ_F y&ut276P$c3uߓm17}B cLj-Zkk֚>SuK:[!7BM8]~iLLtggj5(گ14iӍW ۾ָFcu}۶iR6,]ڶ9}ۺw#dǓA(>Z'%UX6Ģy,K:\ֲUOڑQe'ը+y H50 xՠjVtᔭzҎYh_+e#e37ךr4?k&d%\FO\ `~DŽYh_+e#el纅#ZlY̙31dkƘ1cJKKn3ᾯԼOSRnOR\\҃;R J#Gk%Efǎ8ӌ9ݞ={? uuuZ`٬KtHm?ϧ;?\5oںu+Mfu-cj8䘟)rnDֶ_M99m]'oM2E>c&?$߷8FcxO5mF'q=gc=u 3 J B)YH.tq=;H:]IoٞSۊfUzQs8&Ў8e ̺ƞ5=ٖ+)21%]7&Ko#5TTTT +K;$IOJdζ<t6 ; xb=3ؠD+vV4_>ƶ[Pedk}ׄ:ζ<nA(Q H{YY D#슴%%%%>|QK[B|EJpS#Q(ZՂR&"8ՃPo}urkFU& G "HNNqq]-Ӻup նE骫ǟs 't`"|#MRbg[7<~ovIRr&YrImDFζT#[}h>N{DWkB ō .%&c|F k0t(~_j*bKY|9{B?(qQ J<_SkWfv ʎ ɘēZ <鸒sUGd Gַ)52 ҥz'G ["99IafT4 =tu:Q[ިPeWH6>Կ';Jt\ +ǎ*.X1Hu2YOP)[Eڎesh^k2v,ު'Hm(vdTw[9 _FXH2:kֲUO12 mֲUOڑ9:n45hJVxm?al׶ PM@ֲUOڑS?Rs5DD ׄ!A^(Ǻe{0aj~Gǐ90 yJ,}tp|~L=kj |?g5D&{zB)jrm17<*H F27rvONq5zɼϸhO8ζKDDGo#S 3Mve❺ׄ꧐f:$.v=OÍ:P^=ip =ٖ41%"""Y{BRܨ)k;sXzB QG B(!ɩp=mOFAsSSh'Or[Xa\j/׎7zԿ';b:n?oPDHsr*\Oۓq]FOAsSShS={N5fC \DDvpf>&B2;OflY 3c:n䜲GO zI/-=q`=^ Lׯ6-ׅ*EgosTʴKn P""Õ7?ƘCE^Ɔ YOP T#&JkBAg4鸷5EmfxۺHU j"4{T\DD{}%5:ذa1&\o=&0_vsp>$.vM8uEO3 viu=ez ;sj[II>=Կ';۲# B{\;q$ٰ{A5kuXˊ`sgxMdn]B-i=Q3nܸ^bIۢvE&=[|DHsr*\O 9:nO8IwWt0qMTSz{i{Af*oj|NmQ VM3paܥ+5ӗ`u9" ȻkT\)6O^ߡNYgo?ZבZ޻ӺX.z"""$B:Sz^/zOh<) ٘Sl+q-DzM-(%"oBv-hnnsKᬹcZU4WuQC.anה(9Ŷ Nȸ>~X!Jd "=dMՊuٜwySEZ[es>Mvxե8"SKʥviM,ѾVfY#Y^Ģl·)X/߫wO#Y^Ģl·)X9`ey gH0(1t̝ⴋF!)6['q4j(1XO} }zh[y~1GA(T[G ٝi=q#_ xPbGT2USl+FeJDDD17wjڧN6 5c̵0J=7}tsv=[_9wa[pdgkоcWtũOveG8u;M B48xw՟wlw'DD^}3P~ΨU!%sJ )oDC_]G.&_ ZyMybJDDY ~ \L݆wM5jµ+ syŌz7w)^T؉S;!m ^i=Q|(k?_M?kZ߬Ɖ*Jmah9ζ~t܆ @'TFmX{zF.W!gX B}(=.==Gd8 @osXb~:'ټ(شS MEx|~%xb.ps:}9}v6|Nnȁ49ck'i lqúG( Uɸ&!('z-kBI҆Z*)gh#9MEF^=(q7aӒF6-tu]\,tV5Dü~JBy4lKi݆fl’MiV(ѿQz5[qhd ןyS gsS1zB}}vNP$B:S᤽Rm{&uML|*({v%AxX@4uB;rߓm1;cfxv9Fጩł6a@CKucJPv}g:vA]{ZH뉈YJ0b`2vl^n_#7];QJn,U|OkTc.fl_̨tH @RՔ5·pj m<`;BJBC:ɩc`SkuܝXn^өF5GY4+Z &EO%u Z;&~51{4ֺGZODlҧ)dU^o#*+Q^^ZU ǎPK\fNg@T䴶B饪Ђd*R/", e:nBᑥ&NE%(X:Lܥ+cK AHļ.3UcetݹX!K2ٮ 84o+{wZH뉈 in3aذaܸq(++צ2TԴ.ۨ.^DHsr*\J)Ui*MiK&iA]]0 /`$Fǥ) ũON='kٲe-3gĐ!C>|cƌ1B+-- p]1GčtP"GY+zc󳳳U9%%E=v%-UNNQ깒 <'h72Ҵ 4^Oy_-߂hlh@vr~gQCՏnpvǝKrJKǡ@5~n&7B-oIuT9q7&5ԟ-_ݖ 49Iݲ[AR`ɁZ47ƀN[Y($.v(6I}RIneRK;CL\]څF.6qdg92rRPv'˵ť/ɈF"AA(T"9mj*GSY7ɭiխXJS􊺓BK:hwB۟r>_٩Z˔JS?Ȉ=41%""">Y+~y눷 7T'pLqXc SдLJ II B(!i(=flSz8SR=h+))?K:hwB۟KTgHQ+?Y w==pNNP"""DHs6ʝt~vwe jd N3jןA .rTZQ>m #q41%""}A+9:+j3'Ϯ٨ոPY Nm{Ųe],˾@## }aji ϲˑp-[e̙2D9qw½\<6!KDD X.9gggrJJzJkrsD}AQY5Rrb/ve❶?%xP.*į Wp|o_0RGJz$Ԯ8;KٞSr?I1?^OJ2_0B"SS,_<~P""r.) b/~@ {0}8{ m'v}}[`FI$5-hk5V1()>ҪP&4ܤ7zhV ۀ&̟?hi$v>1f>ܣխ-OCCe|{Qd=.HJk;QD,G\B49gK׫ǫ^h^۱,"vYKk{?m,GN0\#[譲?v..Oh\@ڕ))())Q'-vqs;L/Ú{H4!5ك~ piA@ 23+6Zq2 6=?Iݑ UPrUO|õ8g8pc2!uNB 7\WUW\\~6lP"1S~Kv'DpNNS{?亾'D Lʀߏ@sfFv0o>ie#NIQnB;rIDAT DdNu-N ˻ybyx>kAj++P~e'j}㓇jV4q)%yg:n D  Cc@Sd]b¿݁3spclSS+JKtXlcQv' whvr 5~Bf椢67q{ĩ,9XwvD8nA(OТG1{OQcO/{' 3Ŵ]_/I8]OL uDH6֖{u(ޯ1uHjd"#'q{ȩ,|޶5nO?1“41~7n>>Fgƒ1u|:nvpb[}V][%U^%minF6yRҴc >=:f>& .-n5kw\8>1csfv؁N;͘#lݺuxόUuu# n2r+vMek}S߉0jA䮦&+OFS]2.|9&f;ۊqz }Pij i;踑Km\W=Ck}Z`iã(9X[@ýEo>7jcPO1~jiw}S;c7Cmc=:\ftZ_^ m"%"!%d⴯AJ5>47q!-#SfS=We~,*Oԡ hȮiv2OтK V7{eq>,sÎR{{Jzym5aKD!V(ot9u%T-MIskxWU{N4S׌_cPOq`"WD_\h̅jߝmsrk%[Jq(\{Do{qk &e]y%&yQV:^5(M @TvV]&va:h䜺y\--I%5.",{Sc8#z5%qT;""6濋 A'Ԭ):NMu:?uИks`52S>I̲/W04rNgSH qMcȨLԜAZo]U% S?©Y!β'(BrkD$mL_YuWQ9-(%:SkMfY}^N|Oj]ľ*dIjެ?)"( 9UHA=)[)'Ѽd%4 k٪'eh_+e#e{d 5@=Np=WzH B1M-/B]w,;#e;M gH0%""@ n;$UhOZLQp SkhBcm[?Ads:뉵lζ9yXd#Lmɵ dJCjGT}0#e\S&DD**+74u4^|E饗K/ju?Ox<֨I^KԝGkIBesulwK4+z~wThQ/R )HC\I/$FaJDD o ={=f4N?#F)#NUyܩv܉ .M6PIym%3$wj0``v=?F ?}zLGǍmIZcm=EK?Cʑ34]e4X9#z51%"~477 ~ uhe8Y\29t۶naT[6`}F+.V:ɽ$VF3ՍJL0UQ;;rZjm17ruFl BR8>{[ߌ+0bb~xD-crG88kbJDD D\F|-+-[>uaz|v-Vzx {M۷M&-pmQ% Fz;>+!,}l FLQujTe"2x \؄/?g U گ~{fdP""Jx2PmmN(FQQ6߈͛pvލ(/PyjVRd&fw:uGѲ"tiYu_T dcKjcO17r A9)2jt㪷TghAj[oS?©YP""Jx~ 01/&OVOӾ~::=Z(2NM;wet0F`=p91pDdSLǍB%oMErduݨ=>>©ɥE-f!/3f1ZiiimQ|c~vv*w%K#)=+o~Uń 0l05ߑ>vX\}ժh$}zDr >LqQ;'1|B6V?So<ŷ˵~((rb̴F ueٲe %""+q0=:Ν>[#GeN?t,^8P :ɚ9`eI w/9 u߱69Q k_4es>M(.o Vth_+z,,/bQ6]^yةخ{LZO܇vH-#u3>().Aׄ-tV^W5){Bwpp͏n 6E(N$X]h"{X V׊~EfN*^Q]emٵ/lF MzBQ T%裏 .b35-;ZUKĀAip`q8UlO%NL:g'~L;ɭd1*{+345e2& 5^4~e_0h q1"//w})О6}+;ےtNGvV4gX:v,r+aM);N]79֖K B*NOm\daطDJ1pD&R$cצbl0A?=㬉A(ŔSGm 6:]x79 J4``o+|vT`j*n7r뭶ܞ$L9orѯӳXWc$!{pRϙ|K|% BǾ@ߟ`-懲z YESTr0xT1 *Ty%ZPZ}_x$""uػءz/1n"6Ffb™CsIJ6`cS.S׍頑\,ے[5u&I=\ Վ->jnt\Y7ZL%"""Y-V\\2MxQ%:-4n1Xᶼs1|>(V>(nLi8 U8y'B=(kԣ鍥_۾D/qp0%""J lQynD4R@QjQ-__S@a{0zj.RؾFvmQSWUecع8Nd\K. /S5LeR aß7ܗ~XQ6ثآ\}~u凳c5BoGN|acN'm-ZWv< C/pH5GޢGEK'+peӘ'Ebw߯yȘhyOGՃ$ vGTହcq\UgKO 8Tso#š?|:)xHD g M1f`}zshQ&1LERpGOH RғUc/f^}BFDDx:Y |{IPWľ*|7* u2)S:}HCs,TlPq3Fɡj6]4[]SOdXHF-;zj[On~:RNoS?XUjO~;+P~oCD}C:8=K 7FM~$kҎ9at~f-^܄j/Ɵ>DBzV0:o rQ}aF򛑓C0P R%@KIKk&c0؝^ BBaW" BNJDD P""DU31ɘpD:E`ۊ|DhK&;c[Ovmdg{.DDD c0"*Z26LzP""h1%""J ~ߢetDDDaJDDPԩHRcg[vr6rGΩ?rӷA( P""""""^EDZcz; OÑlQ577^=DPǤt$%&oBN$:9[}+'Teړr` D"%%D'`|>466=3%""JL~bs7l0=$Oe"|15~}"S]]QKDDDZرpxO5xF7}:[Is \ڷT_:c.I/]0ydbR1LzDdO(QbP!wbmSNZ99[udLuJ }Zh^g*Q8>G= DD\G/⥗^2jB9 @ .P#0uV8ODDD=ٳE1xDԫ$ٳg?WGO㼼 wcƻ1E{vjXo&?|{xT/3?pWUUoWhG'wj9>fkc>-E}+Wnm;wp 4H=<%(ذ];E^U /z\zgeڹ,I\+[ά;5~;;~-Ke@nF~.ލ7]):@7PhѪe(>jnv6 hSH;cMò QF~p NB]k]*6${\JZ q9砬L NNBŠӆbP\-%îOj7O֗kDz.ꕡ"nQcv.ϒw/y1O,-Fe?3dg߳A;cdyw%foLrIGg6PYZ[U}]=34z}ذqolMtJNbÉxhbS *#ũرg5^/IyB=;PpEasa5I8Ox]zbGD47p|>TmGTt ۇ I*nqJ} [aIɍ4L?m+؁m[Oc9Ud0.Z26zHFrJѣ -=r-LO[c70Q}f;YOǙG!#N~\τkYpO;K=k*iAgM*niBQn\&XL $d\3GnRI*n1NZk׶K5IZ4M!:J^z %_DGk¹\(=&0_E¤xm:[<ɼ~Ni-^Fd [+WX^TeЂ]ASzKs #"+ew:_I6$IwO1`u/ί߉:TcviVywuWeun?A$ṕn݊}{j@.Tܯc5J4Sr%T^yۅPYꭆNCZSDF5SI?ߛ[ BeiyOmifL/IC 1va3Ƙi}_TeE۱^3^nܺ_[1Gr:m,b\dPT\wuQpu 0Cwc9aAw˅!ɿ%jp'!@X%"""˖-ݿ˿@ HtQP"""pjOݻ1e^#xFw$c vV@irnsTEmj gU` %rD46$.'"=FP#JzrfffZ'(1z:.Q0 BG%"""""bJDDDDDD1t\""9q>}9""ؑ Q1[}J{sE/%zDDDDDD; B(fQ0%"""}_DDj`"""=97ϭyFӄ=0g܋wJcTcHa!;a^'W՟[{_D汶Yf/׻g'l:}.DD$d`P""X5ql2fg< k筶7h v+Rb>`ht( {A6Y>\Ѕ;n_ WwOo݁_N/s`JDQYEӗm^x2Dν@XA`rj*RI_Vhj@[|N۲sdvy(Tk!/{muz~J<>,ҳWW篑0K=x;dz%>*T`[~TcR?2r5^]:ÉyX~0мϳhcb͠kͫ.aj/~{[Z W|_I| `+mzlVyKJmqMk'~ӷ;jZC4ψ( B(Ał ()]FO鶇0x`~Mx=0̻}ѫ*Xp0or6ԚϢ-{f[ۮțMz Uz9 nVm yWcd.s*K*pzh'A:Wk*+?'νӁTaƫW{_EA(%K oJFጇp^;9o N  w뽖]]E]xXGF,\O [kt,k* % &;/W3^[^3sN9hMM1ʷ-χhCs[xcOk.w靲:!Fa}FDDcJDDgR-]i-81, kL=AX^@@ t=jZ5XYRrmiںbH >j뭪ۨ{afvq5v hCz_b\C'oL]7nmx'Xl_InImVn<`JQQbSϧ%Uz*7Y njk1莔tع dJ]`ټyr1P!5-]2F5KI c-Q~[ F/ۥxL=<Òio_cd&ԑ{.(yKf>5S!Dtcz¢6qo>^K!7>#"0-DDhݢE% 0x.:ݢ7B޸3ADhNx"O(9 {++#3}uGd wJ^W gxKDDdZc K`e? @ʥq`""1%""2krbQKDDgS|>Q4JD$5%""rPAh}}=$&0jb57oQEDD\@ IJiJJ <QCDD;A襗rx""""""]bA(;Ǐ7J9ݟP""""""DDDDLC(9P"""~>7Hx.{*lVˀ_.cD5+Ź6<|<):URRSs'zn5tb$p[ #;z(c̙yfUe5/,םK'C=jk&?x|{^{K.َ QO ooYeb­5@cߓ|P Ռ5iĈKc;C}ocUt .1BխZZT Ԭ(i*&Bg+ qOe仲 faJDDD窼v*+:vW=nzzߥO>iyκQ~2XJg WL2_o} n?o~SKӠˌk-M@@J˄hqQdpYYm){kMumܮ kګaw.%B}^aYjE"P瑰>`JDDD9p >ب9 +iG;>Kq^0ܷ2=Ep ~ /kMCb׮]1zhTTTছnR<ʼ,qD:% $$D#meVWS)h'bwض ym̚HY}a;’|j-ֵp>+~kВjy+)uE 7![~>E^xСYWY6ʚ%zznЯr>s5ur"ţz7#%5ju_>pBW>zRBbnִ҉Sp ׵9䑐V$RSSU/k9rij>o|Q^d:vR7a\/羰R/>مFwߓ൫|:n`Wۅim˴l6AeXh\` .5]^G7"g%o׽кsyX^}m oՆWz­OL׵~z!~V$o{ Sm@"'{BrgSRI/-r?{QK/_|r*$,׭: 2HՄ aEa2!g!Z 'B|~Zz¢}gYOYFg[[L BD6ᒁc X{ F}86 'QFg Ty|gye ޯ PjݓaёJn+zh^ <'R'!F[گz s^{L e5 j?+6WҮȚ1WNۍ4TWG5a7-Q=dnǡ.p-\[&I) =gz{YϚڨ*_un/{CbIԦN I6[H }roFw:FrnSFo N+%ބA` 4h8uh(inqWF砮1"@W/.hۄ^$:.+QUUJsw-9993""""xm܉ Á]n_ƯhĐ\x.2⭤R|F2{銔]GQQ D]q\}###xIFcM's%'ϒ)37~~!>0Sn%=T7nT#P'IwAsNşLuSl}y 7D>.i%I5Gݍso*/hijj±cTO Gi,JDDDDDDN %K$#_MzO=TdggCب?8z@%;Yf@eܚ†Ug>H Woe=3OE<}Q"){G?OnzʲJ)i0`*S{v0\GIENDB`DataLab-1.0.2/doc/images/shots/i_new_window.png000066400000000000000000005414221511411446000213570ustar00rootroot00000000000000PNG  IHDRK pHYs+ IDATxw|3+iBB3!4)RDQTTĎ VW,W;^Q^* UE:PBzewmD$!߼W93{gssVBCCCCCC"^hhhhhh&M544444.khhhhh\4иhqXCCCCC @` &M544444.khhhhh\uL!c3qRWMQe0q1544444.k ]4QWUMn;gڢ!?>p¥&uۅ.ŁT=/͡/ti44.m4֨ k8J}tȚ748G4֨F2THv4. |ksŅ.%&烹s+رc$ yta:rYQ@٣eEBUҊ[}FXwiEuL\Yi9ԦA'AVTMj5Hb{h=iſUMпP(\Vq#:4 mXY7􂨳U\w sJlp8= :קgϞ YgW^qD]}w\GEb6#óg*\;wn+ҸP4k}$tzKc~&AAA۷o\n[Qټ}E{&us:(9٫k֬4hЉ'=]_~bXT(*1^;nIdΗB+-[-Vmw*2n ¬+"e<(C : fP8QR|es$IEHFŔyMS&5;roZƞk8SUU[ezi0vlݾcӅ&t"*!y2<)͞=a6J⫯i9gN-Ƞ ɤdYv:Շk7`z{ZZsss杋w*c_.]1KݛtHr6m( ر{bey#:,,$jYYYn~,];_]sEs@\kcHq~&| ^n_VK-@:[PjW~~%5L t!"t:C _h/FT/dv՝ym GiӦͱkxوfqAVϔ@Q*GBw^}W,)Bub1_ޱU3E۹ @mo}|,4̦M%KZ곲\xHtYUm[((8K\H<ܭ7_:bBTAp 1~>$hLw`+N&555:*jud28p $$_~ۗeYyܮV[TU^[_wyIhN)W;RJ|uU*r樬tRBuAND?QhJM(~bՆ<6\&A.IuT+slZ=tlϝ/q5eʔ]vÇ7k'zlRvrCUq{ܞ#%[@Uh4ʲ"*(׺%CdsJ>כ[ ͏>*FG  n(酻vE]}#ٺiOyHb\̌7u(JhrrK/u.OIv`_17-\|UQجV֧O@c2[Itu:];wQ||CJ=}'L۷tKJ.fӹgf»;T/tz1$Hd;I4V K&aתeJMZ* Pg#`fo:բ .<4OV띊\ /So7pիWӧm۶w'WU՗_~yҤIAAA<ѯCVn>YQiWNGY񮛚bȊ,z6'5 .*CmXOwH< s>Xzt:"#+.CVڹsM55 xa`GT)q$&O1\L瞋1)&cv 3goq:7eKPPPaCFP.>':nk(/I~zLC[r)k[%]ٰ~h 8N((JAl@ TUqPvGQs+~w8CD_GsӍ#1Fgj<#46i0|8@q}b)l`0JmΖ#2B]Ђ(@,ɂq'&"0'7UdeLa#&EԐN`oOj| ey0ބ`;<zæ;_|:̘1csO{g2ǚ1WQN$y< xVU$*E`1 5.}L2*6~W 7%:) (L&EQ.Yr=V8`@ݍn٬uqq{[硇( x#]Hmja > >4fsGg4w!!WfILL\o?.XpѷW^[u+4{(fw][\k`ƃtkWUW)RU]աCRjkU'2:D˥?.]:v"Um穦pS>IZf;7kZ[zG۰!#=b񉈈:pp|!!>r'?n T Cq{ʢ#Z eU܅kU٥Hvr8zb @5R>qLXoZ|yjjw+.^dj1R寒:QTdEH:_#ĈٮݻZ驞ƳEx{=nOm㑼9eAYYGu:N󎂩"3_Qe"`fөzI !ScIJ^fa[رcS&L󮻇ҡCK:U_Y%I2 7t%+mZ!  ܥKJJv:j.(6mEѣ ?pl kvy f;vnGJ{%ԩS8&%wQb5)h<Y;\l6}Ð;w:yXɜ"V>I]*b{r {l5Rk]h8KwSN˒:O t_dr\ 6~LW/@d@|Kn߾}С555~Y~g}E5((w9슢ȲȊ,{g'(zY}ͦXz.u) kjj_f͆>mڴ q'SSSqoj[DDPEKЙ*khJoKа,5n"z{^\%?vg04<ڢ\gAr#Kt8n7gX /CJK]aDkPMwNo^y,BbbBéƘܩJjΪR,/ǎUϞiHMMn=ZQ `EQdYZm5~2#3Ap:]=c\P.]|G~˟|7|`>XZVHeM\fpSYyM㮇DE7k(O_nr]NOL(;e Rγz:MYUa}adk JkDtҪe^wͰ!)tPV3}`( I#6 +h%P }}}<?߿h,?_ಚ&Vd{fZ>kҬㆷܫj2eWT`_}[21 UU=ʦnnk: w^r!(܀$y<*!^D.B) Q`$SOjЊO>Q6oF|E6<(>dEOw fM.Gy"ACvEQL1_I^xm*yrgf~7 PQ_{ޘ,ruu͜ S&wڈYx4h#L>{̙S_#f'& O> l PUj=O4pP?<4T^ 2R[R\`8+kV2lXYȊ$NSUUQTEQ@5GӷgNb֬[;d+a)vGєUJA50B${rܞA'uaV612eIFx&Ǻ=vfSg6~lW$l|O?O{#FPUcǎo?i,D}+>gۀЎdTK8zl@Sx$\.guUfָD݀"KȊ7e`pG7vEEFEQ`[;h^_z۶o֥[g2\SU<EQ"ˊZSRR;mitt3}-ؿ_?ǃf~ELIOa>,L(J6RY)b[wSkk,+,ҳ=#^vP9-9y4N3fLFFƔ)SƍgohutܜA,2(i/TF}֚Jp˙pft %@E U5*mFE6Vۍ(Re@# 0g-ZVTTVWWl6kfy;&t#I}z6[V5bsHű[E?DZUu"Ik+[Q||U0wDu^ȑ#&L7oސ!Cs^{'UR|?5 R5벶m+^1]d}>(:A<,u^vG5 y-[Wl,;]nAX܊:/j]NIAT {<3|5ڵk{xJ?aoUu!c3=3degEx~~vQq-ɯuwmy'w#'v %\8EQnju8.KcA0 fl*77:N̺uk wEIWgI].Wmmm~AAxTU5 &bL&PJ7EuwݮxA'/VL-G>xè7n޽{۵koxc,GV j rw9R%P,=ۥ-53BgTU˳Z?f _{/I~&5ċ}3b۷ok#l5yvt:wd0dN𬵠qh7_--41.|u?i :˦q~8M:G8hp$+anOMm"↺ m88JKlWVSPW4k/_`'mi\0TFUܪ|NhQUrS[g}"F8Wj khhhhhԗzw] jhhhhh\BԵш\KLhhhhhhO @` &M544444.khhhhh\4иhqׂ <ݡb2 IDATc:&?z3mtU48YԮr{rU̙3'O\44q%3dڴiK/hh\T\M ck\44Q8e,4y-[=#G %иțM22k:S,X;rJiD˥*++Ol+ G뛬 ?F7]E5SpCS<)lNg"@L+6S3QS%$InW^c.B.Ÿ@ 9(I^H#6:zMӼEVn?v< ޣϿ6NPZZzSEQO/?9J5zscC'oo"6mwDWU0a*'3 "O"(*UUAG9x؉wzq?/ܽ%TN*_RIN$:2Zs'Dg!T}Ig=_@ۿW}ԓ?T.m:^-QDאUQO'** 9r邰gºM ҸhhbWM~^N\͍g}{ay% 0n] A[Ո{e0L3ʞ'ZD%31>F G`C6Vd:1dkH %% QG*>W]k|/%[ƅ}NG%ьv_0$" 1n0V> mBE&D`*ې̀,Cg.qucNё%~#!s|-G\]L:\^=xAT=Sդ{Rpu"BzdFPEDZwXzUBf7$wd LE@iJشӆj6w-l~@P HNۓHw(^xPMqb훋{1DN#0c OυQx$wJ_2w8;C" >.ṝ)eͪYqm`x<1:c_<*Ao~Zs+dgx5G' VV3x"5_r&$WNcie EyK ?ax^0(VA~:Tmjϛ+z %< #?O=OAhcM4Ӑ.*EQ2"@+w>b8\ Uf0+˳|Ug>ג<#5<3l..""~t1>[M` ܖ#v|"򣴾#UC)pw좫k}g>~O'\ 8]ء{љvn69`,7aX | A14n̎t F ^l`| W.nS-~͍~10ʮg*Ьp~<ƴ"%f~}ٴ!f?刑u3 9\26Q܏5E`:<F*nïPJNoE<*]a w !=&Z$-!BZ~0˸ wY@;fۆ\ׁws;+hw]a.cr=@όg2:;<+n":fRFBlZbkm\QE=]- x5]x8 Wϯx^.^tԂ ZMUA^xQ q΁p(Kӱcdz&۷oy('hkA׃xw YӉJLX$؈5CXp ,a \bTWRH 󚣙ztO!)6CrBg1(ܺ{.߀OPM,%Vow HΤ՗7[#]̈/$ a>|_B\Қ;X( SǶ`Sz|߃ieX Cwbo`vKq H-{亪a`*c~r?&˼QVJp*{q̄$,ֵKt!?I1DAoloB$| z,BW{<{-ħ!{~ Kxf P? 8@/@c"/) ~Wtnj Y< vbݭt\nul׊B3J֮dX_6t8)Y bM2Ffz0@\wfO1EDk/*6duaW@AZCſ>e< RX |}  zP&'ސD ?wm`"G⾌CN8PHT cF@+~GZlO23ЎDLk n)Q}{8*:BL8!H^h 5$2spLF~<tx6)B(U,x+ |[BG@џDul5eg'ͷgẁ5 nCrd,sH!5G'33$oOd=0/) x$0ü88@L!_GW׻ S pxx-\ou,GZʸ8sZU^;9hv}Hycix֔gq:֬];?ܙS)s:*\u k Rf=zt.t1p uA?.x#Is A8 w_[0̏O5&WeUv}HNAT=GDEQ؇N wױ ir XŐs3}r*yz8kkH!x(PÏBb'7@oX  VQ 9p7WnMܬn$mRF?н1 ރǠjY`&b"F* pdKLX '+8:9uAS>ڞCoOp_;(qSI\|b ۑgF UO(x̸a3&Xװ>LeJ"gxp5lvJ8 T9В>ï0^Zfw7fX<o_-I1tNē1xGn!ON: 1k'x_;yamG: ] l{ϗ+M8]n|򖱳 U?4D`[a8T@> KKh e*6X*ӯ΂+1<6ƺy #cl16"n js:J1Z4cO[KI/1(=ʠ?>7/0#zbF{GAmcy'nBjsh V0њH1^lM!)؃\VC@?Y?э*ڐ֏ Lrha}nI0R'vXZ6bX0:f]`?4BkώH|U9, _b*QOAL 5q *8)"rYURVlwr۞I{6wc'EF~,#b"'MëWbӼ>N SZFmH"J1E`#_w*'N[TB; :£A692k?a ~rEsHg@+h7 z,-+,⧥c_״L:YN.dY.*^:qR#Yvvw1S&e'<${Fx)GSD7>UC  @@Q݇A.f[aDLQ-wETniq+ȵEҭLxt趜˛o |΃q ^p]X*s!KyQt2 •[-w唻˜YRGfINL`,x&s 4%撹P?'B9WM yy J A"4ڼ/흎AZ}"(Gʮ︳<j91/Z|nf{n$؍ьs:S")z'ЂYL|gi rWV}qǯ5n1ķb#Kg[f]ɕ?@|lvandC*\5T>y&mvܭに`;$}`ð"/9:1:cmpyBފ c|QBy9Б}#0]+M% } h•E\&84ߜx$͐Ɂ(M\ ~<A}'l-IF 뎰c_tʅ "/B&B?~;Y=AQXoyud ^bGSfy'$O|l:̉1@}cL&Ɋ0e ӽi NewSڻ-/96Mp#s uA{0҉,+[ć#  \~Ÿy1 fPpc,"2jYXSHü >J!J$/?ڙ=*Na{:od^V%ĝ8 1'a$p?l?aƩ| L"BZnvC, ng=5k,BJ^?.Lo~Q>gٱV(مDufO[4oag&3SF+YA|:gFLdπʌvie4 z(`0'?#·v&N|\*EOMO>)FOo m ގ^Ԥ97OY`bʬӓ,L sX=5=o2/4t]QaB:YA Pzc$O!>4'КSGl7na,k[Kq),ՆHj=s=(!?Dy}EDn[r D$}G{_U}RIB $! B MP RET,c{î(AQ M@.B$$s33sXg>e׵^^&~[2.udSL0x,e*XCDU>tХ;KD B In'QF6^ 43nUpO>';A]՗ĝ7Ui֮~ۈnf[mͯE7u ٨ɢ}G -X^!ID0krk%yЄe;<"h{}"XOr UrGl/O cjnc?ޝ+~DW:x'΍ /KqSw.3O5yiQXuYkz)v5֭>7Ԧ>UV`f/[&1# , wTR7٦L{BL{; lhI*>j^enW6v] EJ\34fhذǎu"a{n6lرy럳4nP_ %~1Irrr%v0:VffZ.Թ|5?evV׬TsfNZM- #]Ez.=VWB%UO=V I!>r~U~^ǵ IDATj4an\Z.ޝ{.$z*W[b/oЉ\P\mx} )|l|W<`<J(ynxΆ)O^б@_79)-widSۿ2xQJ荞fO:~f~x=9:e"nJS]NN5'غbcFӆJ8jTcOS|^'t!&KIW=~R4)"@.#oxX{alײc UߘziAN+֙dƟl- Hy*V\)j[k/eY8^~'ʭ_\hBSv-խpnݖCn2kN:3psݟ^Зˁ.l4b1XO[]#z;<Җa=͙vlĠGe?)j~cV=TPŞYf,:XϮ7p?MSSy0[j{~X͟KL!!!_bOhWGT3ݿdc H|n=]M_yu:>^{٠A/oʙ9:rZa&u Q>XfEz1cu$s,v/0L UY_ݾ_qjaV]x6)qL;~bWt0i;%$Ns9~` 'M0GLr*<& 蓤@o^ٵM19y.m\5^}y\D*Ў~o\f|Kd+>Bq~,+DfjxoS(mhP)^{UX`EM4Upo$KS]*{P&'vL1CXJ-O| VUȲpjEtr3ϔfޚrWJ[uydze]Z -|lp/2x6}Ummj{[sD|kިH')gŇ)w, -E +5M5^Ø,s{Ye.0'ٖnTC=)y`I{5G,c g\H?n&򈳇6KmPOQ}RiȰb W>59MmiہwMz;/MTon0^H)yu]կ*d{X*|f,U[{uK,$gUp}xjrJ6 4̴&o G"#$iB?+2'C~pO o[tbOu}uߏcG}D6Ivowrwfhyxu5%z5֗z5'45<ΜcR QTFivm=+, FcYU,:KBnSN2`j>~ZhTk8e<3!]煩#ʫjFS˪IXgm#r$Pv}E{ZkZiթp; ĎskvqKg4 H'8%gԄSNruI}U{>b=uj-QWO<$<ưѾɉϧ4-|iNl R^PTV5;#ݨ5ݯn?όU饺m.OMطB!~rnO'^)H^z/寮sNCK3*i#GkjudI+@4˲wª^~3:uV-VG!Ij̿ۯ;]I9 )\Woy4pի#O\Mc')}_S1^몠+X&1 m-0d8dHy0,E?s{?%]6O,+67JM}7/Rm(u o^S7jS]T3V)>KNK-xbDdcDMs# ׵Ï8A:pwM%?HA|-q;KzUK)&|"2Hy(-b һI=f3cM-*,ANS:AS͈wXt[+/7=RFg+:[qH]S; SO+FXhV&2ؐUն葰8#VmXE59KĒ:t$L» >R|| aG=V3Mlٲ.Aż|:tUU恛U^&z]D~knllau}Qu/*4~m],{9S@yF]RF-lԺqH]7Fc+} [i 7sTb8Xa{bOĨ6Cb:fGUL}߷gMYB8^4%m̍hkf/jEJ[wLhmckޚBC:fr [Z(&!kx vgK^/7k֖U!L% g_ ,6At>x4kLn*nho1x!7ǂNv|̬T/7Fddd~*;vl,1YbtWe)5B~ÿ a :ȏ}M;ÛE"}"|8+#>b'3r"2P٘Z%Z\ziz6ʊՕةq{kuZ9^TV)4v\Jo7Ը<ᝣƒYQ!'$h1%E 3$9»e-Yf%j^ XQw?fWEz|^%ЕO]/jz?\٪MwK<{.}rbգ~X|vTxDl*D{;' LEf=;={<>) Ūw^U' oU0/ֹ*[ۡ#VZKg]rvC?QśL4oR-yo L Ŕ|y|l>v-=1?lX?k/ Xoknݺ5##c͛6mڴiƍׯ_nݺu֭]vڵԓ?w/5 67L7;3]5"w?q:vR 悼8y[R=TI-vo<5Mg|>Jew]O}8BizǨٶK X7{LeOf}}T,D1)y%o9|'̢;~Z1E!9@ϧ?[ Omd0r/YY'/(yC{ZrpH#4>e2$%VZix jem_8:~꜆2㎆2#nX>R%[<k> 3|a62+?>hX4eXq4f: (K\]K%!OÜչݸSPPF>NXsoūhsʽE*iY_u o̺!Ip+M_0?I'ƴT:O Ugn3^N~]QP1őbbXuO?q5 K1[9XzЯ\inH].ٹܓLLL[j#8>kM&8&\(Vx݄(E*cu~+tRImhOm8=aF&prL-2){#[.3NY!&Of i${G$2uGCo ̥igزKۥ3Qs g:n׶}to\ぴ{;Ȳi ߬]E;T~f欵ҮtL͞XvtPIxLX gx7Hhg"=[X[~0MrL?nh0^2Fɡ-k?(c/4MJG \_mM^Ox7;9'Vd 5H\ mqG @u)5v}Ъ̳Yp[d;o׿tf g 1ug?upWBEFM}Y_ypUMv}qCo$=55niV=Θxb_6uz"{*{<jlQ\xbշiT|]4{b7K]E#Ys ǽ~O&emx{5i(1/(;#a )S@%.!q.P c+_j^tOKƷFzz,oX)є a:AE%]vi-ɠ9DY~z\o]I\><.mI攉`ە)Q{NLmH- jԿalV)-$y6 P֭D+.c3'wk!)TebIjyj9;'_  tT;XՕCą<6=ΜX%oytڕ>hPrOƸ^Fv컯 #eTx?q&?Vt_ze3%FUbG 6jx, '$ypokަjFp`':<|B-!!>p HˌE o?.SgNr4khHyߦEKO8Ɔz^;gFUU!Y7,6ݸdsAFN?[kGrXO9"o-mkzX7*tcMG&sn.-H-/ߞWk6lrd} gO;\G3M"7R!]yN"9F;ȏf~VG(疙9d'Sמ۸ǦZ;u_C]]^޸`dLUѪ-ŕ,2U;^j]7e}U2 )Tuwz<Lkܾt rJ|T|gX&Phm5*VJlE‘^obGO2gRSaEzPm:IJ,Oyqk $W|1Tm}Z[VS>qn 9C{TѰ|ׯYP:r]T]q7iLt+Gu|5ךr2OcAR< Q):m:ݼtuqt)iAՊ0q,i#4UMepŏMgCpkݯCV_ԪO߼kBRƞ;hZFj);/ |P9ɧW¸uOޢ)di׶5`k^{խXe"jFwҹ1s5w.[v6ȿM~y_@66m㼑ֹq~&ۢ}f$Yf10駹#\:rTx"G8اGPi6+sÍ:Mͤik ls/J$~ΒX& L fqQD7?}dƕebLN]}nj6 FA\P2t~s}] ?>%o״K3|TuvjuCL}ϥ=,d .(`IU=#9zQ=)S&vh"=HY],?Yjz =iT}kw'ntĎA-2[$\>dqmd޴gDt&1D07C8ŷaw G8M h#E9?w,mX!&ASvQݾWΐs.296n N7saV]R;pXBnL_Kumn º!t ,(]MZU =,ztkߞTgʔ{Z蔲kz5IwX$ZbZi'.:7{ $i:glFK!+8Di>Ir-,~QB_upe8AE s B~jRZL;QQg Z[K+^Kq9;jְ3v`RzR|G+riCTgK;1INӝn6 vQ}Viw:h@%#hFĨמ vA$&&{/1~Y __y׾;xe{8>=7\V_FLUU#En )Yo)!B~> 8Am֔LJ/p6Qq)=O?,̝҆fߋԭҭ:V[=5a |y魍m>Wп{e׊S$1-Jf]p8ǻ4*Rc`[۸Vڊz6;բQkLmDzHPl_kWtGp3n¡>ASeY\DU9求D:J1m&>w-.$I7$\e.4yHbeA>#/Ϋ7tϑJ>Iu3|ID`zR]GT -C| = O)rSE+xb|M+lܲfWuR̥ }D=$fC?J[2x9ʼ MC 3yww'_?WJzF\mot'8ђ-fS-:"E29^«vKu \&ca{xuSOq%gɧS.!UӨd/[Q]ԄŝWx72WE-JXiaO\!$:k ufL{i&UN+>^3|℈ {XZ.;'Opa*J*`uU:kj+׮׶2Tdթf|<%s,77o9?Zߒ=yJ|8[̏*=9p?ꬦ!vS5GjG# ~jG~?E֡,I}ȶs{ P0KbƔly}TVJ i+uxnqiKH$JROW%kbT\,Ca-y*VY/(+)>qj59+&/$N͜ԈYg2p?y ZuKeVQ/cAulԜwġCI ֿǯp J8׳=HÇ0ۨ=Aڎ A.C{d'F] ~.ijBP͉&b~6xϙ60Z4Iޛ n^eh-e;*Ѯw@1,1x\sI8qKM܈Y]rbvMcR8MO{pJFZrrw]G)&F7ʵft^ m8N|ܐOiS'mn ~ߺpfY(/ \ꥺmڴr{\W@ ̥#; f598B$QC)wDQ3i@jM)`Uq[,^<t9 9|;|SjW%F25cFK 0$&1t!cxHT#ws\1{cް!w4eО ilaOH&)S;?Q={VC74ƿf>~w~3 &2T}]<TkAOGM &tR#dor-u8J:r>r"GU zEӨr%ptˮ dNp?ӾkbQSmϻ ؠM~07{]mXo 8ͷkk}ծYv^7-cZ. K)|8tGUerj6ؓ֓a*mN;Nh5jU?FaFTӘ<@gr?1XC'ȟ|{X'd2=rk\ȷ1rؙ;EG=kz5WDGoVj#'3(ț{PE5%9UsޚZڜ({>9[5#eh}͝6oؕ_\k]?^s٬RlHT1=֎lz?YZ!,镝ZCgK*Xd=w6Q;cZ֖_CRj,Q\*Q#YkVhհAgҟtIs #[Ѷ7 :c-zDj0E=DKU1u2RE*mYI.|F> 8ԤI<\^Snbk- Oݳ+W|~㨸%}NtAuN}g+%>,n #o}TTO:f@ҾW̝M<enέJc}muhG:9ŬnUPq΢'yǟe\wUU_7 ! H ""Ulb뀎Ac2#XFTTXjB/@B =?@Nqoa'99w߽}YkV!فWy~\A7j^IƏwwiBK i2kW~hB-|N]ך'=jJ=`PÉIN ٛؓbO}fJ,;_EA[|I_R!d,g?<`3hU&zi tEunKHṘ\F^35d(nJ uo# ` 糎hzsjР*X`gj2?/ӥClʕ}1y 'σO~;رVm!?cl"NYʵ~M- vxx 6qV-hm-:֗I:'}K?%}@1Dn%\D.r= LTls&y1Ɔ*_W6=1"k2n&LMrQ@j5-Y}Sk-kw" U/}f1ݹRPW>V8U֫yK /DνhT;h# H8)󦱘t"(R%rѼUq6q4hԑ,> 3([q>]wb!rϭV11kL9}}ܣk7k!Uu읕;s7"b]kU<6:[^>`{.DiK4 &c3e1#]ډ#H,Lh'jwF<~l)?D\k@AKKG ?/!N ~gXT!vLi7E>k;cvfG;QCZQPF{]%ђtd-y̧/Juy=>%Vi b_:rC|C*6j"e^pAէG7_å:VoX;_ib9X~o-97AT_ߥ\^om5Քi9'ٶL!N%1܃~E y,]{0y2w,]|N;t-1x8XmnGHy8OX,Fe/j = TCcĎg5w/M\5F~WQ<X9X~vU*u8:OYs [SCZ͘@83fKt,?>H#whqm WƬV\幑>a#XO BO `j__Ea7͘V[*VMϷۣܶ5z6AjqRH 4-0*XlGLhiieN$dLO7H8a)+' {?K ϔ?3>xKp<ϳrƚSEv$ )c=b{Y;!{79P_rVPlVxc0Zn PuOQ:yX>r^6T z>ޥǛƬ@Ej*lSkYYFD]ʭ [c`ZLn-m&fM?6]խ+:rclovۮ ڤ5*̺KoG`s3^$z0x^^VK}Z(8>r ~.CdP%SW޳|9s+''U%><}ɭ'C2?c>kxbiI4=H RjQ'% 3g Y% T^ե^y 3&E u *>h%U݄ПmV{$2jJ֣K7iåg\vjʆӇC+0TvD ~]Qwkz-stOc3NewMX{5jTÆ wSmJKKˇV+ ) - - )RvDqMi{ӲJNSo1i1vpRvg G  눡)IKFf7UVTUW菃F/y%|ҩ,g3V ՘W* %jТ7?Jԭn!Ks"dS9əZejՋ&g6g\VYTN%85Dާb)Sk}GN}:d\S%P胪Wm9`嵕źfUڣn@PYP?͇8tiTnf׳#\Fh"w4.#eB_Ў S1U!3kJI]W'vоJGܥ:/y n2&UoIa0Vk˻7jNE-B %5~+߼'\VË*"1tGuNޖgu/,1hgvL3Ldc;fZ沞\RhMYJqpĬrW=q3 ^-aLp$ #Z^ *[Yd Ȓa:ru56=RR>3jUm|LJ|>M23I^%kp*Bae0۝{]{% Ƈ/Eϡ=ev3ݮ;OO%]T >Jn@U!+}wpibHddVԡ6d69cEz3r ?1a?[B+y5Wzy ]\b{ILYٲeGq>IJ!{ S\ޓ)R -8<׬WVׯW&O]v15XK7F|OuoUv,uU:luI葏;dBy8;UҔŧz \B.4CHKT?;{(,p^`=!}v\]Nb:N$:ot펫a%QbaVrVIqga-h[(o%!s߿޽{O{Ғ[~̧+7=c/Oѧ.O>]8ҡGvdz-f`0Wݥc7 Yr0S6-m( cj1vlG0뇠uBK7:KR~dq2!y@=ͨɟRٟN1 e_L,;4Xչ Zc٬%R~T\p `, IDATH{xTͼu,S_WV *o!!uAXz|H~C/X;\tp.Irm(_kXZVuu6mЏh#8!zE 9t+Vǚֶoz}|3ı*|dT߄'"O1 sQl(ULnʓ^_m+cSL_#Oe)s<Ǖ ! &oggepFDq 3TYMZE+s녨T6_LR$F;1Ӡ6QJrJ;IQůYnʜUnVk7Z-eOO>4c'j+[ ,AAJ|K;n#M*'eKZsT)svjRq˛GVHjM5|C|6+<*N>Cu oBPㆾX<ű&#}P ld 'Gf-TA4$rί*amaAB*vf Є2-TVync?Q/U\Bl1VtPefMyAZ9*n~dgb]='[ڂ!YAO_}QZZڷߵwjI cL8ǎ 2G-sĿgiΓkШʩ7g37a0]YD_EP`G >;fs7JmiT('d{"4 S-YVlG2XDF1_ǞrV>sI~ݯiB>T8TF[jOpÕ S1کa~^#kKC6":E=N{ӘUW9[b˗RZuĽ,;ewtkgu=nѤ=djh5Z,קq28/Cq (OA#e%ΰ*:2͚>]wh2J‚l!G _|:bW?$ (D~сYBjaF~:f]$OH$!q]&\Nٴ9 cL,){'L@ )KQn>~"0Wv0?3>rrN2esl֬Lq̣;YB -Tv6ф vdH-HP>KS[3VҞE(qLHPcceLȁ]`=Y_CnGŦCqq:"Ws;W\1萖|~/7~xQ'Dתu<ׯ2jC9s>TP-b\SqO{vSρ,ȞwM_[Ku,BZP6E(gr`m&O=j.[P=>kb;sLl~3ܧzu /1F!GU+>\`#uaѻ)qJJ4(1WlCֻQћe9Y61N叻3r^`ۏ^7Bи&=Zj+\qz\罶t~{eӒ`̵;&9.}@KT'簉y2{c|D[)8/ANmJ2dm^\(?3$Vg%n3o@])j}}!Qe\&ӑ$ړFk! )^t Gn&kzE 1T&YDj@ZDnц)ҍ['qȆbҖʶ|靪c=˼kdu|ە?*NyG7*''~{J%ɢߑqg;U@tY{}^(νwq]E;F{T es"9ۺKH$%$RmQD}TD`M|PT׍dFx!W҄(Qt2_VλG/~?rm9s̻ LJް5` pz |fvAr2e+??"6lЈL%qt^= ?A͍"uUV")%oSݴPL1is/@ d W(L{oSfc "=89كmmu:N)O KPR!uJDST LM2d+GI,x5fYO^vQ߮Z]D Q0mq2}`p'ny_7tO"|b9F4:@񐍩9.$xCH %y=#I2QdxHh2PZ'OT4jp\0ƥ, )ϵ,[56DD my`a;.xj֫ۇD)W|;4GmlSf5"BHSX-<4Om^ژOUAݙF|G-ZJҟ}]eČ1GLfO ¤=F?㡛>4@vmռi٩Y:ۯ f(DOBy>KW(RQ'gpaE&v/PPHS6hYґ˗T %5GSa"Cddi_0f߼AO So1KR'v ]yBʒm߄L&SK ?;Ӡ/vҌ782%mijwhZ!Ztu-=+xd`{t&DᒊSuv4牶wiG.ɝSÉ\˙_2nZL`)?l;|F 강/bRYV:F|h!9:Y4UHهTi~=ər@:]-iHe[ls]y .Ud"ZM&(}' lbK/|ue\_Fe4'|1Y+ 贓tN2  A^r-iJ.ɞ;NE}<Ɨ}H^~&-kLp{`cbK:0#:^ANV[c{k\o|XG_us 5: yilvw\=|gV}-[xުsiuڮ:b{v R䴽/w`UgݳR^7D4SH jXoNf[Q$ $ls)+"bŠ d0j%9Hjq}NGwVUKê읛 T} ltga6 #}jGLRpcc+ 2S̑<֐̦}x6TCSÑΡҰɚQQ> 6kEw%=6mFᣪvN˳t+Duќd`P6Īve=l\Kf;TܲN8"U6hwb//Oi ~o33H@JopVgKA˷+ Uu~6v<]S7Rϣ l%Ӭa LKv{ʑ}Ƭ`;8 awG5tGftqA/tt}\hp]J3a0ʵ EkScш?JM,s-Zrr."ݲUx+{O<3{MWL%.XϥR69]p—Rjwօ'X3ӑПzОѶMs/ץIj7%0_DZ\^lS~/rREsfӅIE(pI{Cc{E,5˼|–UgD?^D)m*c+eDUe&H7*^ǫ$3RDh/0yr(n9ώR}G|t7Jlr"ztiJjo;PnN3q?_ y!)NzjfBݕꜶzOd݊jjsR$Vqxb&q[.~z[kgGeyf ?~f|CХB/Qmz*Y{3TMi#kXů(vfҙX*;-(CMyǢϜ}aRNl ut%R躪.Cy\{`ϤRqk~UaީZF[y︔ּ qJ7L7-nϒ$6wo&R^;"l&oWni;Ewo2$ҁW(CB{ G4h, D:C8FJ~^mJ7]牒xT<ukȁ fn_pC%UX&|~y]> bIg gjA68 #LTiYS[k9ȶ\_QQWkVfYMWawԛ1#%; L"SGpUਧS%=UOTZix&ƟPd7YwBf9UiyU]',z2Tzt!SqMmS~Z ֨:CԳϺywv}2>QSE2O:f87L_rA?3>HW5ډZm%Jy5GŽ~û7\o*v-va^̀6ԗ44R{YNs%jݭcKpۗeU1Ճ2=MlpZ*5 ]7b|VQE;n`˩ CDljwx'˾'9=;09E[kÛ޵&xUeOe&P2Ljf6_#On;f_h1Dm:<-:%X OHZ̡b^54-/S`:5Ub,lwOTp)xyAj+ԭӐb٭de-/4P`t+loկ<^봞T{n}Iʀ:_7Y{Y-mx^N)e1f߈%sU5s TrM>VAaSZzt2i6/$V|kkE^a$|L+Sf)|jX1& ͝W)U 9!])m_е\zݾTסR46K\?DL :w s{̸QCKeMO,pGʎ SQ7 lIdiJʱΣ:a&- Q983y{ |MzKdZٜei"ϖcAmU&sx4b Y.PUm4bN jٿ>э|fHcʿ,9wp։װjmkʥS D.,Q>vY? @,95&,PR|<4/&E 'cL9PgZ;8Be王Ia=;t o| ^ڣnʇdl "BY[4PȧMi,Q %Xnܡw_l>eDԡ4GMJȗ}t;('&lvjSK # vle :KU }iV7Qնo]pq1S(ƌ{hN;,QX"A|G~?Ldպ.#[)%ޣ+n^Uޚ>R(s59s=|j'Csz4!Qu6رcO.EZdE0`'{ RMJMI<\&E S=a45nv۠ "rOiQjY&A? ۡfQI>;683G3`ed .do t)z;CNxcbRRsX ;(ů'O0UU 0 4<x4xʷ]5i=L7 P<6AgwX.50)0n2?lKl!O ,:rw_nGwyq\%܀W1 e4Mw-LYePԇ"k>@9M+Y=rPC5ps5SsJUE:֕ %&`=ؽ _ ?*2/˵8 Q F2>9+:4PHh)dسOp3Z~_ҁ@($X7 L,Y78Oa]Vb1{_FE!PMAŻ *R,8k D~4z \Is8"AXF՗`" O?j k#x;Wh$MǡPc\ Cڶ .3Íb 3IE4PS-px+w`aJ$Sд[Nzr5P`ىiftbIЊ=rĭs  pMPg`.XBW8{kPq{ ߀?db݊n(7AcG8`58C/qN ӵGɅ(D(d6!]%X0k9gO~ MH MdNYCMSֱlH3!z *A7(Ÿ/~FpVh' 0L컼ߍ[ǭÏho֢x)i&p~3 B<rql y:b @S@ d({ ֛a< `+,kF{M]dT#/+ft1ˁ<->N1?}xRԹX4 zH ,% 8NDSg9XS9V [ *T_~F qB&9l / A9:^\, 0f' o2BA$C8܊B 5\vi<]AF.$N6?Z#e D6]qSײ8gIO24͝c "^,X !@"(ȇ28 U,P~S {$x  SB+܀ : UH"G{juŽ ܟF&-֡WU2ȈSCv2-~;V{?ֆM8U0nl.u,~N_ |PL߻iYe6fufޣ%%jѬ]T19| ŰbA Б)3Lǁ])>tLZR̅PT1+ҥA/h43pפs4i( @Ec5thHҠD]'uO› qjzF]ڜP=áE$T |q1xq70DYd>D_ T&sls2}rT%[X=f|⠣|V*סa +0,A,lpq;05RE{μxuKuфKh'xY6C8UNɴʮ:Tck0x=Xisj@ J0qP\ ht0J=,)M Bp<`?q yp!cL|DK1*C9% *1 Vof#ӣw~"~^f ٝD(x'\KO?;%B'WL6C`#/ -!{q臒 WI_?~YG6-9N "Cd FO; ٫懼M#I;(O%rP&MP=&T\4c9^/ lp0ހ0E*JkȦR_N Tӽff0FBhc-qE*Cr{s<Վ$( )oߥ6-|P+X_R0Ÿ3 =Ho*b,R8 :ZSx{>d~#q~*х stl+k,R}W@O*Xs?c4c`/@#rPPZ 0`?Rjm8iw,Rʕ.+5C $M aBXd CTFL0a=V -VaqWc0 a>%p{(8䄇c\Y>˖犜f4#J{"{J%&% @Uh`Ё3VPՌ[W I@/\\#lyT!~ZGEEEE_!~/6 KZ%k =Avfnh|-嬝WѾk}͊GlA"# 5գ[iR:{a C I_3t^mw  J>#=[UZ4%qGRCs+; 5*4fF-;:˻Ks,|+ *KH(o\KB?' 78xw|ɻp9#{33]P{o)={F%֎BҞm%[G͐Az =|]^aDa"UbGp {2| aA@B/;ԣ{7E.Nw͑KJmA1D\ʡor(VaEdB3M'\P@h*J8apwAAc=$r#p$ބ; ` :B2A$TC+T`a-мAnSf1%:ؙPIK;tW@6.wu!$C t23ۅvQcF&`ޅHiVP1A?`OSI7FG}ޝg& 6bv ,!«'|.Ӥ;774PDnznda췣`,+Ǥ,29aܴ^\ö :80HXp}A8A _Cw$s$s[IlZTcY bNÓM;O: -z#S'b~y N0Zsi5- nk` 7nF}#y;r:gʤ&s>ެZ'8ܾAWh"`nAn'ra>NE`QE.pF5^VO ͈c9ŨmVh)a\c}OVC9xfKgwl/; l)<`%wt>D5!=ˠtfU!Tq_/0RѾl)$̱W`߃ Rb ^{ tl`<LCD *%7eC/>i1u>K=ZQlN'F1/[t֌GpEI@:Z[r Y`*a trځPI.?$ዝ~-*5 BO4)91а ]f%d%qByf\Ujމ{t:j0ihɃұJִت (Z)#t)ILh.L}/@7pR8(E# "aT> s4%ZfcNIdgЅ.]a݄T ޤ"Y+Y D-h65oAJW 8E ʶwX2πB-| @ttN!`7`E >ߛp :` =xWA=FL/yaL.mDpF:QzAFp'@W\4J'܂< ڦ g&q~~\{rMJS9Op[2dv/ݚ(Ύ]}_էS7LwR28B TX@P~WJ!t+8A@@ҢG8!Ҧ_3S*jѿ?C<,1D'qSwn&n_M:Dc-5XVΙ+_obC YpNB%h.41IP]{X F_HsFZO__bjS֤P?GSV6zao㏺~~/Bt*ڜEB )lalG Sl!Ԩzx$Ar h5Pnp@H hPLt(m3K2텨4 .}E(\ $oMm3|3s`}Rixާ`pNq*C7՚7 X!= !Bv>4cog*JZXWqt p:R5(!!6d = `:|w|a<{vhgG4Ti/[H|3E>Ǣ- +x'A3泫8!4i,\ԭ8 k )M8K+=Hf/֢?5rh@D9b Zmj,IVç`r?-ȡq%h!MVh)u;jIp'6uHNNyM`UMʝ("(?X]3*2q*k6/YղmuBb >49C2 n@x͟5 :~󔩢<{[аw I^juE25Z[+ϫUde "FY̪UU6?kg Df#+O|OkOf_fZ 5ڕKAy8K>UK}T({s4i#D:15v#S af] ]GaAK=%P]ZLjOJɄfXCOXFI(ж؀^i!B*85̟=}@{72 !-!MHȴ  cG4ud,I:l5Z8,lT5\uv,B-0Wm҃8,9\ܫPM'B%6O# < L 9h  F .(Yb^Y@76FM%-}Hh;W=J`ָvVτ>bfI,l\4UgIa.dP+S*.w#xړ_3 &K| qJb KuJ.F(4NB kq 4ОBs ;JZ[5֢F%FjqS3_ਤs 4Db&-6oR,R+ڑԫù3#d,s| H.WUp)4@^1Yvk#""""_Z0?F.\*JOC妃MW+hm5U_*R{Luas^ٿh_ooX{yq|6K–G}~,C *d,eO-VV{UaL1YthQ8ܶ$ "Ц6]ri#ȼLB-h6 ?jkVV=0%,(qTc6md9ںn/~y.:l(ױN1ÚNhs:JQFx'61o1*)bm]߮%ـfI E߹OJڛ59 ~Bl+"f5|kswgbneԜgBPQ%hmpXD-d >DRXW B }!fpx N,G و *] ["nv&/(VdPmg8Ӳ.InL3z68%2`&d*dGm'flU=ylK bޤ<} VdQyfyX Dwصb 0c$sT `;bӧ&H:s-yD@\dJ35UNWȆ"MZV>,Z[$O)(^'Գ-~߉àrM9Wɪ*}Z[@rW/wxe3|}+~Wߔ(((5kKXXQT*H!@VUre յzƿ /q^fZK!YP[PnqdjWzFv+`wl$N^\]GOqH# )|t(vX Ph{np{-m$qEDR1A\ŭw\-L'\à!CAq!Җ) @ZyD@WncD }Ԉ6fݣ~n(?XfIQW\UrĴP:!'[+XYjx ^ Y8A%"MsG:\dn C9Ly9tzz  \+` (a)D.L Wh{1DA[\zw$L lf cB@ ̸BB Uq;[-mHl ˁy_5< rUo4?ݹAuhkYxrX L `Vb bTBË.[N*\7JURT Sz~G>}p(0C?ق.@F F"7`vw? .mw.?=\w=gGC^vI`j>& IDATh;  } N$׶ AZ 31T֢v-KJֲ܇'p&0Z.>\~]i%&w_=HqAM(OPAO`-hrzK*joۄݾz]f񸃇[)t[ZH},ku hЏX,D~{l.#ȩZhpia+l(CH*'M@orSa$a< +&HBAA 0f6B58h5 5_n-m8B 0JH͂`LM p\V!7\,r΂]Vf`  sd}&b L 5-0U}ze&% l(Ho7=I eP_JzLJO:8t>=|F9ضP@39fu5>Zbyj`蕙K a]TV˯=&YY faK+X:ߣ0Nr;D/xJQi{!\`%,#8 '3x՝P~ ~Fm{?;yх̂… _|Ŷmxa 贒] PJse-򵳸)3S8vQjVg ^u3G)!=Lu+D0s"sp"sF.ptZ=[0PEZ!|Z-0riB ܿ,/Ï>j'*sot qUFp`ˆ`⅍th߄&a|IdFQ>C#9K.o&G*H^W[r[ʺv,/vC#!pbvZPp HV 7thf@'CnA*Ƞ!Ûv}hiz\@u PAd l)#AjU3`07^h0?A,`anB[kE'TY}&Oou#M#ץ^OXL|ۙ?Hq~91I;8]OHnt)xN@C %H5*; "Ln۫#yѽO9l9DŽlCςҏtmrEВbMތrAH͜(ϤE DU>&ñґ#G,]>ర0YfJHDj`mڮ_!o}z3_Q{Rt/ErƯHnsm)de$u۳~y ]y sxO࿈g~^z=zt={G(//}^Pso %lIF Dr h&/2/z= 澏Aޤ,֕]|tI˧5;)8eל_[JV jMJ%ެ!(,'@TvL0@׈`pk- @j5ULӂDp Ԡ +kdp0p*56i*T[QlHj7p$bx ]A B;B%01DŽ*yJK h/.B1\,YM.z ֗|aafF?-sbnv9|Vmgbw2͍Im's!Pd~+ ?}v$P{W)|M{>n $.9us'jUzu ըQ rݯ?ԯ} Qj`ĨOmtyl6 dྔu+Y=Vs7ԥv9b0&شn3H! l(JB''،yd, >fP~5jm1B/?/T*]nҥKg͚JeYM}rQ<׀Ps υݼ;.+#a8zk4.JɊ2sju8Y]& dA8_{xɅ8.rPCꚜs<ꩁuedH!kmJ4n֞0qk E{zNo`]kLU:@.NeYZg,Co,3Q `FfWeϮ#9z[ v6="%XnaN6.-hnj9wVBlh@yG\xTmk%|CV,3,GidpP "l~O53Sz&-Z4ɂyz8+PIyvQӋ1C i%;7r-MOfXW1eoQ{er!k5NG3b*4Dz` w!3r,/k\*7B_+@wv ;61~ v5V#,ӄD/YrBtm6ŭ/RZU W?j.|4zݢY~˶h]4@V~̔n@ñ?/r6IP Euė$rj&04Dz)=JVvܑG8͇K}'b+S0j)AU@1 :t<n|٥O{D%&?5z`'@}!P5X\Y§kޛyӣ.Kh%\p#RX"< 8808T|^軌kٻ!kz*%)b"8}N0!p] ܄ud/IZIEAh` 0p&|a 6҄ z`jޘo{~͞ЅZ%/$PA›hoܱ0 钑&}jU#782 ײ\'TcT--IߴPNƾ{#F=|Љ"l$g=9M=NOnL 玑=gGԜuG'+?+~k6J#ʮ¨g|e),q]=`_`; ;mĔ=N_pS aTTҠ.@ꪏ] IXRtƍ7n|A (U*+A3MLLl.K-7o_d>l֏~Zm·m@ Lf/K띜~B'ï>Z/ lyT0;mI~/Zj` ΰD-xB3VE־6TH|HDZ̀5xGrc .p3~ÿ"=R I}o蘓'qz7^=nxR: QxX؟ǵ$ndbȳkY>mu'U LFr4w*Hu"wgr %M/0 ~od l3t P[dngPŶs8Mwa&Ca̢e(a'Ყ_Ԏ%P0;41l0a`Q0t.AuYPC<̀oA?adHn|U,dp^ V+@ر8(h]G% RHl?ǁnd&lbasy_;a%H` (?9>g冽|J/;B.&j$<綪hbԸ.Q/gaVu%@'!~zjkΊO[z>x!hUV= h/jnܤY_(R^92fϰMգ.Gؓ{PMOEyc;w39 O5y o/9?irTkiӘv|mI)Ķ %%QDL·mIH(< ,(.t.RHqLSg9a aLZZ@D||UX `eb8øuY=˯g2S04xb`*E=8BEfUTJ>khׂKtMw.^ >TiGP :02 `;=Att;YN)-yi(E*7=I4 Lz[lgTdҩu*3sMt2Y+FDs'Cݔd|Յř_s[Н!ɉ}[;w(:Ҩ+ѯg\aa (* b%$bKb,1ƒhQcl A) a`y9~sszq?{63{~^{vBr9e2G4ߺ/ժ:)GSꜘ ^fЅ7[ Tf*C'p6|yЈErڹoq*-JJ\M@!*a|Dk; JVjS p )/FpG2a8B8|* 1^"qK|j{o).{WiZ^xwI 9T׍H&VJշ>c?It{&vO %`G|Nޜz(%'kUt2Zڍg0:-U3$YYw?!;QD3c~<T茦_  #cf,@ auN@7(z`&r؝SGy\o,|?/jD?/J],- ޱTo3Ta$L-0զ@=im>n&vͨZvo8$[JPbG*vdiIsz_uTY.;D?Pa~W3Ze; 6_2; )9-d~U#Fˁt;2r%ʽN1fT J$W;4yhpJB(TT=y'$0H_^m&+a S R.;XpQ a 0tA͟ym9azzaԣl!u|t [!`"TSv_Ixv`PBp-ܗr.oD9ng(O998ny=;&o9V&܄xЄpqKEф)YdHvR~'E|a5L|+I; ]ZBQ#E93 4z;N Tqx*hJSt= `^zBinkr¶l &d{Ld57*p@S@|9nApdcJ imҞsa268 d $gdCN=wӯ̓(6'ved2$qsk!dUjK`N'=3bb ^ zw5נa>'܉F׏p))\<ϴ l/l6[Q>ž$QupR7]nP%y 蕵q3RtS4ڼ̝%+sLéXVab6axO|_z{uЁ(+M{IkpJAmv$ CyՈ:-\6}ԡcKR]oNIځ(~:( cJyh@y<(Ξ}aQ04 a:lGKף aT$nf6XA1,h0`˶»DSyJ J*(.LX;S*T.Tne) c-ƕQH&iëacWɳ=ɫ$យ NA"yiXT/S$:XPXOJ&,U@ 5ʜ<~#ȷm Ot5'B`,iCYzq5׍8qK93v6[ 3B̴+~;e޺ALǽ )1SHv\kuƺ͵{yV<&V}Wx*>Ǯ'kMNI'E]ƔyuY[QejV&(\gqwa|G* ?3 MM\T)ːD%?[sUɒa󯵠L`qIj*>Dvec^΁"L1]8=7#`9u06iS1@} C>O0 $N1DУ$Y: Tn3Vc׌dPz}ѧ2q`72pxXFD@G6 ݗ,}(m?CTC1Z!Dƣ+[֦`QI,c,KO b fy9|`0cuƖ`H !m\ y|Qn$RԛHp &,xpeZ-<pQ%)'۬0wvz̀8ϴ@GgzV$-p^ IDAT>ӫ1A(ACe::R |ҷmj=Rhj:#ZBŃQ -TѸ^]Ѓ M 0xZ0:Op&ޠDC t;኿=w [pt 6A4tB3`2w ߏ˔B?Q;P}4bRM1%O[ CcR'>r# S;hP ,lC _Յ}ãKc)PE3 ;VPl%d W[Ə:d{#1~L,lH3? Ah.jMSޖn^Ka10 A0]`!F  ЧenaxNDQ$XWW~`>C%e=_31k,.Vk[]iՔup=8`MdP&>>^ȭ>Rn\Ţ -1p2 @./(P󹱢e ±뮨7 *c`F#To.2 FO1'kcU=2S&q켶KVze%Dx\V򼫌= iF֦ֈRmjWwj-OrA8~*yvdЈ!hű v+Nw4FXK' d l{3aC6Q;r+N?KsysHj9;&oK0$}FvaDMY?}ZAF?b`)FDO.4hrxŭ4WtY&:CJ:"#p&-$\uE2.c<;2+LXF0i؂ʑ'mgpu4 0i-uz1p!d`2*o&+ǦQ^rjuXO!v8ʂCq?cQR^@ )tCPfJ˩ʡCNEĜ܊1I•Dx<^O C (Ѧ"랙cH@N#Onͦ%o - NT5eqЗfpOS8 a>xR{ňd(GB] 0gK7Q{W5X׊E\e|{ u'~$w~7kЈ˘ (wo8,<,qVMXoFW2VaDS`JBUӁ@w@z}hm2@U:c=}L|Z[{޾1ÿ߹=@Vp^BzE@n=%H6u 4_sgA~<aĪt":Zʡ"L m;2 MJi-Y rU/3tېSRǪ\o2 n]Bi0vp6 ȏ ?AtStv*x8GT;FΤMJ g#r ׳CXDKLój;1(О `Gs39SLMBFu&jAϐEܚ}Ž'oԂ`JpD4G( *p`$ 8>#!7#;mX2u&ttKR'Ȇ`ۍ4AJ'9ۀOۛI=t.R1uM<o7iOFj_ ǻgTLHVrmϢ=3iJA Z#>^h)Ѥy[Rub h+h#F졑|p fdꔭj}>D\as^bMx4zTؐ-GЁݣt8^SD1g2%:գi@59}x6[PĊ& &0(PZ:0$P ^<;ގ_O$=of1zC:. .P$'_)T1@֟0 =3 [)<{EۏZXMJCN4eM*daٍXQXQZ$hZ3Xa:vLk:Vfd>L"o,Ƥ?Or#3[Fڞ$b6 ÿDXJ z9+U5G9Xnt'C=ɅTHXMoKO'p3`?Ѝf'R^3LH` :&A 0FBf@&`ItKQO<2QN{ zbQצ1XY㘚Z^IYCYܡ&P@ 7P,v ̠nZPQ ƃs8Q Q܁vR&;P. CwZTTtƪ66XbLk7^{OcXI59#,?:R};V)֮ͺ=c*zD59cB.19.0UPֳÛ( 2-SJs#}jqAށa.+G⊦F="0VAp`g!zX7D{B3a?7 %PBkBFK+]kFu06>l;1tSpqyMm$)+lۖӽ%^O3֍% %fV77d^I9i-@.ckgR\h@#\C^CJYywqDNI5p>/5 (C t+>%;$bI*R Z꩎`5H=p'8ִan$dccBq' ,ƵZ(ے?< 92G!1B4_OF?5-#u32耏 ȈZ/ reTx)GYĕkOwxUBv:H58@Zp(E߿\X`@1}ͣ΀)iY;3-i}̀.CVkA=44;سWJֱpSKZT^7#iZ9w}jqT?f@2.ѵnnvW$ZA>=&S(G"lx$"k20ʒu)0|33Yo-@z. <2 }iim/.z&CM2.P,G%&d&9Xےï[\(m#G_[XM|jی?kD݊A7uT:w~%W^_S̱' &db7ldϒ~uhޭnhR-z |Asmt~b":[Kh'P b4P8.;U&/-O &#KJk&$w#q3rnV5GrףB6hp6Ox, B6HIgt/`a18$sȂHh5^ϩh&G~ z=pb|#^CN?Bgr6R(5;t֧ %{dy8~(lTdt!Yp'iB6PSy' H>jTyՊbhv , : v0 fPO?ڝxv0!hh3fXwA=%6]ЀRh׃ )| |y0Rt~~a#G;>+دD6#+Z$?_MչlF56#p_4p,TC*@-s!_ lPY}>D>wl<_ExGWQ|:9p V7ϔ *8B4Җ#͸N|=tB5 z-OWw:OqQShv="3IWCʕ*{+Z>3q'C+vgEt:#ԍ{}?k/;4P^*֟P 0HTw`0nPոQC 0F7(ZN]i"G.5 =q}h:b2{CKGECɞmV(Iyitp_]vB' ( ;0=C 6zA&Jŋ$AoxZeѤIIZ][\_Eߧ&$OrJnYs=gHwN>9WvkrQ&+~ɶl/OwSpecSq ^$(8*zy[A\-ڗ@FVe{r )v-[Bpm +&6{ω$a@TCTi<*iL=ثF `2U44NJg{|F)lJʒe z>9} 466;HhS|R[v=C'WACAYKH#GڅNA@b~ A C!lF:u2'$*/$P>FՔ,,Sd5ͰY`TyAtYVu[D4e¨Ҵۦ cz㹺6u=7AL8̇؈([+ _)u vZUr%xQBK+GYU-FSJJg/?O}@ܗ:{M|@?4|`0XRD)IgX$}7ө̙/ K(AƐzB,_ O545M[:[\\_5_}޻ ɁAmf%cqouqc CW M =ųfTtA*㾊 t㸶%*G<+ThIqN)CvzYo J-2 ))̃8'RUgG2.SB`X?: 2x&g7mr ?Թ,K^}j2q3N¯m0HS-< 8#D04@_UH'a>TOUe856*Beª4HC3,]5,sT΃~\H{PS*(\ AS T R3|jF+G@Ne߽E.WtUgHsꥹu׵ڎzYU8@&!K@߬_2_NßwLj9B9 _BwU`[_u (+j(ٞHn`9rM;Y$T4svLݲ܉GD&_jpp ,0}Ѐ9Jفfn T6h(EͫN߽,^d2MH-lQ(HLLCZRRPRW{BxksVShro4)DܐN , Ӕ[yQOX<(@P3f8ڄZ;efbח-8^hPQz&kUiQGٶ&bnIP,Fz^8 }s"u"W %` _ɾS̹`?곯 {d1^8/Q[_UȂQ  =d'c$÷b6^Az@qpr@u`ֈg U`DCM6ϣ2.n66a_R`Mw {}dIfA$ttocqzRnbKNAfc ƈ|PL?0~i?@Ub ,i 0 z@vIQLjUm{<}xO1<,ײ<ӎ /B!2z GyoQ.p:ccߐ]fED Y3n3HT6 )}]?N\u#!ܖ"rSZ^[_, kh jsP1{?)1NVύ<;E߻:C}wޭ{:ezH&̓v>Ϲof]R!iqeЁj G:a@C%6o3}TGD?ǚB­ɣOy } @+Yz8yB=MXZD<':o7,L( CiV!zaYɰ2A r@. z-02hN-$/hFzJ?ˆh@t|0w0rH T 6Xhv݈!љEr 4hs'-#sq`U0GrqR]FqrD $ӂ+g@4XS@#aܭ .23PdBU%H+0KCDLCM$4Z~K< XȑD&D M7X2G*5e 5ttt~ ;JjZْIK%N߲?y|Oƭ|nukraO @O@y E ApUVqf8{teQYVA݈תƩ c9 m`U4!Ms ա ǻ%%zw+Jr+b]s],uKK Y:DK}*0ÞX2,JKU:2RhAYPӍ`|2BЄ]*WFpR[­Dd=)!>$k # --X^{[Lh`H8"x^@Cn=p>:Oe_]Ӈ-K)qXZ"v!S󙰏* IRK2( T7IA;HSD4C6Qyㅍ]QOc޷ Kڋ8f\76GWGrRO{iFێ}[lCm:7I 9cYk& e{%+q{oCFoeʇ=w!y<נMdnB,SwgS -pu@3ې~'G{~_Ћ/Ο?o^R}B)08{ 񔞆ZJ6E_m!.Kc:ڂoWT[ī"^]a1 0۰C-vvk#gY+Lpmk!TK6J6^9Tu[9Gp%a'etL}ײpε<{d--M6999͟?P(MԞ|\\Q^ߤmH?wD_ұzRen ERV}_0~ŹkFBghD|Q]* n}>M]A#4,!`T<$nĊ/fe%sӲxNY#kloBgLR,3P Ga"-N[~^׬;i^<Ƀ0*~[&Tt ϕtޥ]No_vώ)v8JYUE/ްZ j1551l84,ʝpLȥ-a.jP`Z0 .D@S{8?.юy*CrzɥD84e<9Ş(!C3`0Ӡ3&`͎W+,NlE@ldCShK):`M֚"3Ydc ۄ(MΖb]Uc\DдS');tЍ]w݅dVt[<2=g4M\Kst 41+w 4;/ekX%YقVO85D 89\\R<߉%dA_H=hXaDN @0|U e8| ~yJeer Y3sWnZל_&NhSa+KQg&T DpOPf\MJ3%C3t0 !0A_3h*Cuճq,(mCFsX%vq8`N38sON&֝J( w N`j ݭPKOA  s) jC-хAP 5n`Ƽ 2`|`:S<˨n~ZkxVi],žAB@ KABzI@ړf0us{S‘=o)W#vaIi>3Þc<%#G \q(BzUe]tTw˜;C?SNg[ŀ:k;nC]x;ׇDw4l4]pJc+4 "I1!gUkt 4c㶏=N_YyԩSۦl-yd2YeEE~yS̨Bf2 QQUkMML&| ޥARMe,;_%ǯ&_+AWC p(>d6bޛ5\.c]?$uk?rq<”V]pnvꈛ.ei_F^,P"ӳƃ&N#Qm "ʛ+!8n1D/n?9| iGAّ5PvW;lu`d^N4N|yNS&)G<=6P?C&m%X FyG6$)&'S'r ۲ ģh 3LE> .L ec;F(R>:Ф{nO0 Rz~p1F a N7Hl 幨QlJμ58ٹm89qt-nk1-?]Wؓ ^\(><] (oW|.HPW،Ah\ACZeq8`ɼߎw(P8kB }Du{kFng3%X Q:=m~Ѓ)jrF@hA'?- Kr4*Pف~[rKj7$9gݶ[/C{,]T _xI/o}Z[[;vHldW(vt455;&XG0 a- + jrzO}}~6aYV7 T m0!ŶQI A/2T9B7yd %j@װh*~x)wm=}\">fŠ"ll(R==x(G4SL +|V <ʳw+` tDkfhȥ(ù6[i&<ʃDk\!-Tt&ALxL` 6U ̡ 5LAJ&Ck }h)a \Pl-h/ tmV.-esgM@ FI&&kW灜μ M!A@;J/q۵.66uv~zWV%1q"{/k%('=ԣ?7ۼaZ01fi58u?}+#$3݆Pz.6}yꋕeQ-tE:@Xn"uN6 Q~{~Ї&PMЃ8XiO@ѹV@ tMm -Pv" Hp %0l RAZPu$Щk}o^IY8_:A)-jZh#"E' (Q)\P6E̻Gm>WMqpmsɏ' l~Y6D lQ2YP2ٷ=w7P$3b(zԄI\ǚA(rsr<: 9~'y3 [j(/uXXRгmD$CsFRhgb9pgdmdj^ҋm/ntiTyʴ'gӎa»6eyA<~֠OM&t1A>DB:GBЄbNɱ'p ԰d\P(+`"Zs)t}P s|GH\;>kd䢹> sրd3X@'&B\HfY霆21'#.>c -ЂX{Pݬ8]RnQ11_ƬX\|ɶ0ay&M>Фu&Y๧WΨ9÷GF-28?5J$hj^SN%8,j)'߻&=~f*8`>TC |{]hFQ?%~<#Cm}WќI],+ ˩,yF^rN6g`GJI,6;Y<ι˲,aSZJ# i#16H.Ƞ}X:ƕFN&rq4ֳ.Gä:)Ϸiï0d=gKzYbg8TKNZaKG )A8GXH/] $$@18#0? "^R~!_G+; t婮'L_q;dOc}HW4Kmͨȡ3Y R̋լ$e9dž" v؇E$[ғ 7j `!`Krӗd>BsibsyZKe!Q.ݩ7ϝ>X~[#{EI{Hnf5QK™a>W[Њ_}HC{ )fA&:J27}#ʡ@0 yߘ5p.04vX8b0:xvs J8L 00n4 L;1&&:Ƣ-`p&#M8WEu3`pAK(H MX0Z iدHoBǖ]KRm3Մ*r/{zA<ωӌ#SB^tJtloUE@ -V`"" 4,,Jݐ)Ò7JD.b,q,#keA*4ceneTdzZ 27<Ѧys7=N(~ASSsB @, Gw"^tHYÉW5fysGS~O~)}!+G}̽F+\~kk;YF& \ K@;RN XsZLX_ë~KJǪ)ÿ"Rh,ɺ&]YF}i֧;Xd@gچF+}4EDM7=ײSa ;`|$dRG(F`Њ:X}\x4#@ ,SB#XIӉl}yyyP%oշ7r xUOǒG M8PC A i:U8:ȀK )¹|Բ6hz@vC Q@-{ B!9,%׀ mh<<w_ImL^uiT"|By_.aOU}1m3źexjQ.BXp,ot DM`Ve5M;D: 4;ikG6P " ~V[}SGrK3j1\ˇ*P ޛSg:ٓ/DM 6vipv;Ê; $@۱/[3yvѿ7nh~#Տt/ʳ'W/jH?ߦRFI%w/|3L-54?g@f|[ǘAtK|xQ|G0`/OHn>`L}'> lca C$H??73LهzAm5qB|L]z:wP`H# hj A ܍Q.=~I9@sjZ@+CJ5`4 (GE1苝9X15l :RkhFpe g|>}5WbzxjJe&.Y8&2PY]5|̪tL5XUX2ݸZ& XhR9$H0oXgvo`ފ@/0xGӔӌ1z.]t2q,jo4k3}pEbqYj*A FX =}Pa~0C{ 2uhI$"=v%?m z"4UuO(%&[]^[x1hĒRFt3PVU`AY?ޯ۽$igR.@b3BXQGO P ~4`4$Ah,@0!$P yPK$p\ha#G$ɝulRY7;`YF%eqO qdTM M,i<0}x 9X/a}=l.=΃g 5Y =e:.7fRɵ&\HlPC0p@3`l_Waҏ#I\sa\%Z NJoXXMw{ ]`wkSSs6=D˚8Ipb`|RV~& Tn 2_L5 wȲ { h^<ַ00L  Ȇ Gj @cYRr 9p4o N1CxodxB^${Nv z!0#szϏ &T !Duj ۂ1z*+0[F'ױf2,VoYۍ8?:? >< p z/섛ZpN1c$[ֵlbriO!nvMx J -s7@m7g):4M=MQtae Cgv0zuDY(lԗ8\K%Oaa_:(U*-RRK`%,4Tb叇P'l?gC~cUƼ5_^3L_m.ǪC_kqMSz X2PU#7ى>xҙj(&dGHhFlLMfOs5elArI 3 @#\` 3("xN:BaQSoْ1! .2,Z 1Eȷ4suxE7i{dKa]J11lL7G ].'&@Ë' 'LU?Sd&4*TAoz<Qp"VosT~"rNŰk` WyҏjxT3j@ P&Z!*)ɰ x& ރ>UkcTj(j;S]zyQy'< {d ӣ"suS!o+)xR{co"q#]bIĕ 49=ZtVBP>- .|p u;T5`90@.iwR? &%XBkZWʋu[5Cb*d ʺ2Mz%HW?ḣDDbyk:4,,1!4`g BT|R)o(k bLCi@ aH\<0UcܥRdga2*(pHr^͎x 1D==Q~,d7!oux*Tfuy?0q||}|B&_f7Lh CTwehػlBzB[E: # z{ Q@( B蝄Pggg'y>{Z^N.ת7dO=غ LKW6aaA_tH&:D0NBCm"_A҈ )xh.ubr4Ӑ8~-~>c| *XwxuH5w~f@ݪդѱdYEհq:wH\ht ;iFT jpPF*~EqU?^Fm@,ֱL.82K"2Ec~^ݮ:_MJI^Mi:} VYb6}\`!!wuNHಱk]M?.eHXUP Cvl][Έlhí9µ&P"URk7\,œwN)K>)iJƋq<RL` Q9*8/,9kyC\H> 72SKl]8aJ;~iWkvTE7Ҏ_-7֩Gr3'I|^EUml}Z2Vg;ڻ'-v_1,GKo޽/\^ṕq+[߼9ig?p͉YO9W{{,MKq",)MGA$~FtP``NjU:(liE/xO(j\we;B˸$nL<}5=MNS}-n[(ch,žIX#oz]5n+7Zur(M#8״b)CUOrꬱn;0{i4a~?X?ozH:w,gwjňĠ0m! $lbŔ;d3fu^7[''_v76H*p%i{ g?I(5p3!#RO]TVU׳9RކJ |ܺ+e;NZ"ςk]tg~@#Ҿ}ӧ:tܸqHEaaaXHѸ(UN.W9/"ȖعTœ޴]+Cl\k>cg:ޏ"Zk"}g?ۮ<;пH@0]g7jp\2~{D2Kp7W6jxN,~rDu-,&JqԳs/#H7_qH̼)i\WqFЗ]34Vu- IDATvB.q`~ 5WS?xjAAgqZRӓ _rw4b1fn0fka'MGW[lZU0DQ{f+~A;p4CQ'JG,Fth֌IZ>'v~fl16 Bi#+Ɲ8eb) ]T*o7Miq^'I-DjPxuisu}0a J8e;9AOsH h֠46Zq#?;0"z(>wW-|2wj)8Qrz=6hq*ֵ}F$->/$ã+wVij-c6S%=[}oX"8+qRg3&["1cT^}С(,(:}fhΒ!{O:}aM&^۵EX_ھ}G}g۷njx;8usFAܔ>ul7uިf(yvVޡGƞqPeBy$ >VQ p]|5hZ?WR^vat#odηRJ_ {@[!s||p6BCJpJ4e#ukk1=^Nk|Q\'n:juIxyZ^QRxTDE5"JY͍Dn!UxWcP1x;yye960"N0%Zw! L jts>lmyGљ']I *,5vBw)FQx|zQ8!OFv͎`#Uibm|ﺒ2iLWTw>WS?xiQLuqzv7*''KYBxGncjphcqϾI2©Jui3(up:(CLy%WUrO·wtTF"^7Y>RhE15?u悾Hsovso^Uk~/~tݭ;b,wX?|ϿE\a@0?= -WaWf!' ,%ZsEɯ&fyV$zx0`;~BKRr,X) kR?vG[ǧ(W }{AQ.%CԶ{Mb Aih2zX g,^:^6hBw}6]䈹%:559gۧM:XdJ̤x<3pt6RO &*FєnDCOȥFOOM` xl"mBҲ,}sm(tISOX8 ҒRm uHhmJ򄵱B|,[=~'P;$ʞZ UZ&k6‰U-Ij8 K*!3kj *Y cH+2MzS }j וSxW K}&9bmw[=[Q_٩d9.gTW(Lp$\akbT=ѤZ$n&u^ _I7x'0,S9q!nי|W[I~d+S",GOU+ -9yFcF %` )[yI68X2g˓i dTrU(u-;kjR4mF]֐tC*X\CϭP;[Y܋yBmMSid=0$lxDߟf -xN=ʦVpbͭ9O ֵVz6i}ղУմ–\fd5ς"0ŠdX:+#gd" !uw-2|yD;E^jR^sIk+>ݜzS9b^ i-ejRvH&y3Y~%_iĊc!+1NwK)c7O1.+9u5>h=wǔ i%~3G+&m؟0LcsĜj0eGq?u-}ɽmG{l&/1񫋏;uTe)Rx1prA+1 Nfe?K W999 C?`۷/zZ6?[H߳K)*% ?KZ%Ҋg2Fv \W9IK}롗~D 2WNE"E?[͵LpPF폝иjB ޤ2K,iT:*q=I0yWg#a-)YJbMG°.ђ#UT˭(B-䦺#tgM] Hv36NW?^(+ؓ+zIRW&ٵ 6Yeaf(fQj.nZ9pMmweUrG"0Z-coMe_'lh%Is56cH$ 1xv1EDHg,:i١,mgW7w@ p_xڻn' ,D|W ~S"'Ϳd2\ L"En\*/|Aa!(, "$$p +Zook'cg.4.dlB L V/L^{fU~zRrأe(p^rLv, mL+jο+h"{Pܸlwxy]h52ؑ]-Ƅ%-M7D)419GT4N;؞̴!Krp_?fF^VF^Xye;Xo_--6=Ȟ_Z)MSAamty kYkmb*۹Giɗ][ .ѽM{͝MXwNkڗ_4WR_ԣޢ5\N&l9bhFvPsG9Oֿ7iL]jgdE-$uW(s[=4CF\B%8\b,n,E9Fm3抎9UԎ㛶Y|2ز4ko?T5IlqͬNtUNw.=6&Nh]GX~3,a ר;N~%>MՙYNt15۾ AaAi_#|a+UF?Y-kIzʑTVpَ^] %3l͖R7!ju]܆]9BB 0aR}RL }_kpb oQaW8-?t_F֛&ʶ$ts|O ےU*irHBE&~KhH͙ZSԏ8ɡl3TdNSGss惙FnA|u =NƾΞ/qڿiC%[p"K>qoיVc+I$yvS6hxD,}S d|{ UvooM5蜺4ErjᔒreCqn OyyXV qNJ=i6>3wz-eWyt2ݝ VX4m9X`ݳzс|7ɍ,c*d%W֜?] 1rVi~oRy:,x9k4meYEbkWk^:xT-tYEKw?aeX@>ĨQ ~V<.9=%powH0 [ nhWt?$D;RHm>!=amLj9J^G-'tJ|dE.lT=C}F3k|ɽOxmgޝ͇hO>p2oJ}y/TyGdrݓ-NmyxC*F/6-C?@zo_?{%K=\L(ҨFO9;46+SB`@u~ʩ.0B+*h&>/^Qr|ìMsE7ˈr: pOhE,ҌӤJse +FEbCm'Rié&+ 4[pbhGpA'.W9ġ]Z& Bs=nطBz[W?"Y@9<?G,l~-~bOEF>嘚{I'm38›K*W\^ѵ)9Q}^8m1Pbnۆx1R `?OC=#aM Hxat$#$۽?Qb$km:w\/0iWJqlaoXpޘޜz4>UPd~|VHNW*۲֖<'rWWxaDR dSJyw)յ,+ g'ўV j^P~{9Jڳ5g 0w=Lu)QM V 8HmqDzU]R%ż}*թ;ԜyzgAbgOvaB5hԚ5Kۤθ?)ZLwxr،(.2)EsSA5o6$ݕZN$/z\ޖ>}GҐO O[ZzC"9PIK}MD3JfHVkWU[kMLJ+~bpvv訃{QƱ. ^*cǎI~_+a"6+Wp0(̡1%vtjR8Gv v{~x[J=7?^][~2Ui5xۆsT'oPJkP[ɞ #X~=%>ב\x[!ӅDo9MB~R^NuO*lg=PcNVe}!xʳߙZ=?X_&{7{zu@c1.bhrJ96pp$V9MiNd.AէW׹Q-?.=!쵷CL@cGti$f&@;BF҄<[k\{K,qP$gO.qKch9EgR?Y)`&Woی%f;(c l\eeZ/{Zb'/Dw :cƌ={חiT12y)ήUvt1 J;&7;1^+WX@~ȡXU5(iMZ㒣ϥDɪ|F4(vѐ,SLJ@4뱮R 7-p` BRt&a;ߪg$\H=J.pG Z-V=j_V뇭fK젅G?Qe.Ա8KikJs?Td*ĂZ[]o×9^|ϐ t4};ڪNP KuC/ի# 2]N,PP"ܸLWRScU,+߷ eJrsz`O-g=aAq\~߶-|7bohn̈́QB*ؽJv{t@M1=z_c]𩛴 @ZeQ8L<46/`lؙℶ>+w}ΖwEax͝,8QfԾh"3J3ht]60޼(lgB;*K,g!e{H4a>B̅yRds7M*fQDziyi_\q^LM IDAT5إڟLJn*;noN5>(W@\ZI[+<~tD1Yd<#%:~}HL:Ktܛ! <'AsPgNJg컣HGoBJsp,xuHF85D۷)!C]k˕.&}*_pk9ɓT [jUk`cU𓵞t^jzbX'Ƭ֬PHHg.^}._/2u¯,g-Gh~6&kup]ݛv=Le99|[l6-)ZTBeNJ]:Ygh)mvaor9^sU ٲ֨e2-荦=9"ga[J÷W#䩬*Vn5x٧?ӹ%ND 1cƌ3?>˿Q/;_m3m_7Wa\ xkB ~-MZ~:oX*R4Qz'>DЉpp_{ Y sY]j͌$\3*W%:QD|mfunvY%;;w S-znGSl,tj*Mյen(b͎;Ar g%: 3kmF#A!W -g"yL%9S#Z[C;v>yJ\y{&٘ԃO-7^fSR%]Dq٠37լQεݫU&_">a 8K|Lu* w}%_ }Pzsq1ÎǼõ62 N!%V.CGw54llo9e S)_OS;v+ +9ꚞ9TZ20;0Z{?KsUѩ#8~?)z9Mʒ*/&c m.kt%i&#E9@eħ$7]t]Նqsinᅑ^S״T Vx`M0{G>$Kڷ_ymSJaDÒ=ؘ`iǫ5$ͨ e׌aE{/#ݗgRIVxn/2yӛ\2fQZ%ᤳ?1 N$W-%ܶJ[\ҝ;Wż9׾\1W9k5i`|7HݪNѧM"W?&YQ+*>]asE45ZhՕx+ci@gJalt/&ەbP9ڊmnC)"RL!UZ !=GY* uE ;}f-߿_2efY9*dv9OPAYR KqptMIHڮV̶d),$8hO3~ ;KpA}W޾/e竃?k]o_ pb&z}V-[ԾusHlѶʾ/O獂xwV(wQt4| #)}eiH%hD'9٣ ';ا !}{ɦ1M󷸯pP n*qn^]\:̒&=PꟁYCMO s&8?׸51 {~焋-6FyW ]R~Mkj^‰:elkqҎ"V5){xds&mɸP;)d% {Er6L[攽g*wx7nͩgCǬ[ٻn a=^.pҎߐ>_^6kF ZK{q\2NH+gs'IH{*4cSAA>e%< %w˫~U$|KD+U 0^,>W׶* |P_n;myƅ SsP&1lȡE498hȮ0UIL{5:)=cN'.>_``Ok?"ޖ\^Ο-MyuQ(\D?g>YhO$Y`>0ҙxW"xyb|>݁L)CD4:uX9s:︶ݕB=r:5KTHMWPTP0&&k%m/qUљޖ3#GP.sI7,X "l!#u|7j-$7d& 1G}RH*y5nߤ:xCEj:o2[ҋ"anQ3+Oo{r]o[bԩ vo̙3lذӧg}=^RO;˶z77`0|קߗ& mT^z|0`spرv.LP%FEXEo TU<^Z*1 HC.f*mHQ"Nb.®ytzS*5=A"$ do{[q*PVJ:yAḟ;=+OQ,7*\qgA4g4z~)ߕ;7{t5 ֟XډC4q\W*OGgʅn/c*oKgtpjVb`(F&yQJ}7h͖;hjme[U*oz2X*GDz/<F0ջż n\HvAE?[弽%:xKgy6/Ks]:u쮐4\f猊Ԋǹ,\J@{jh!ܻ0ˌ[TԄ`Aas:L4.7#1 l8L)C5O-I;jOzɘT =Y_iKax& ۷̙3oɓ'̟}=eNo648v́~xץ`wm»àn1?_?x>t@zu֑?m>2AJ|9L*w e]Mv!2Y{^F( m?UYlfFЊ[Z3Xbl-Pw*pv}`;ae4|v7dqO-)($UHMR*z19<R!.XM@5G}Y$*Cn9&yޏ?(EĎ,5DWY$;\bEZWDy2LڪqKWS:Wxw e"EҸG ќ(1-UmޢctSU~'zܝ۴1]۵eAOR>eYC Cw?QQQ>l&MnD4mƖ]?'3kϾC_7F-r-?w{i*{^r5LC?SkPLyO~K1kN ~&3F @w/Ia l#c(+,=r :1=Ok&h1TRHݛ}}Z^9\!])|,K a9yN:m݊vVlwŬݷo_6ߠ;:[ŽR/ta!)z,+‚CK:g4weD,%e^ڳ["rrU%QUU*BCCR2 N6 Mҕ.2&_ra_8u>$7xYsXXYbB0T*b.I`,q  20/h|ި2ѥ, 52yhF{d2m Ub XNuĪE~bA/ BܜSV 5'H9}NF֕Bdji^C{9˫([q_a}7>MYv糳ak!C3>þ㦍3n_ }M늮g0c qCdZEVNwu/9,;`)"Q5({b ץns# /\ԣG=+۹fWy2Vs1oKow6NqKn;h4RKy3FDmi1>3.q>%p#C3N'j1pØoiʤP-(.Eԓ/דwR CϷ^Zf]bV).{$҆,f$PMzZ׸UU~*ٱ QyDa,+C7wOoy/O3M. 69ӗ녴IMa)pn`2^x&)gp&8esF@1Ӧ8! Ԛ'Yv%XS( >!p7q Wh1+dF5 Gc(s[d * UV)\;&ʤ"<^wz+{V@Be.7Q'Ա {THq\lҌĊrVN`oKcvN16%JCΟUDՎtIX\|+w:ˈs}]uLpyb_S󽵫 2j.rTPɬ]?y,Ѻbi mqpv.Ö>ZYI>z[#Ôλ" 뷲D]nxwBU,[b YJ_+ʫ!%{ek:rKH7xJ+T )NkWm@֏I|Z9ㆡL#dc/@K{0a߫j(/47hK5Mz˫2Hx-ѼO_>Z#^ʸwɧjl:.kAR u| )o+^cxjsf;2Sg'OR_cE=bz,V9>z٧'5nV/ᘰ&muQ_u! L-kP\OSfI.z_AEF̉w똡ެS ͭ`{OE[ -!ij ONwZwtJcN.(q/oEдN\!')"9QGjV ,߲eKJ#gg'lr=k|uOp>pe_; S?*c7+绂dQkuVkqI†n^5]N]DĚz]_߶eZ5^-קl;o]G߿ήVYۓ -cY|VD*JW{9kuL2۝<Taͩ9} !X%\jesaLPc['VޢR(ran$Mɰ3D}zkJY@fkbCKg|YGҾD^]ݳw(عg}V.Hn)QUjͼۛ=EU ju7w6-& գWD3 m]ˎ:<@}ij IDAT#'2Kg`>v;(i)?XJ%0AVsu*D]xKu}HuN?q̜oki8a,'u$1o=JBZ[fm)g?pLbgwVEKl΍DCW V:W2Pg3e}{҃FRɿ!uݳ&$ܞO)M'G_S`*}[N=W7}&<>d(W?$ȎF?LA6?gj_Qr5_ɉ/~>g|&BXۨAiwG81z6r/+ߡ {ZLkֳ) EM}p0EJ1U);Q&nGIA2m5ϺtE1t6RqafגY۝/;š`qs Jjte;?M={5v OTISrFύW^zOp_rY.U8}-.3җUdk;rIKufuLr4ߎud gтqXf #s[ͻJvuf"X+n.hG2v*na y؝[7/Y'vkkΝ.ݘJC:HkjF#=f:O}U:5dZoKL)F/4`)+􈓛KEtOUKqw_so<'= re{Q&^[V dhyQ3f_VZ  {+ D^|Uϸ:o߲3ME[ aÖ9GOا\KwS?>qRy!:D ˭`镆^n8)N@1qUfaxET:JyaΥS%rܮ]G~|@-+ߏ֌jdW7Sm7},Ãl%P8%?ԳI*H?\N[i=j]')CS/LɃљr_O,{M(%(І V,J-<32WNB]w|q̙s;¿E8;My1] ~@;e\pO<,KKH4=l"((>)M/ŹF*_^~IJ>WsCb 9mONĨ&\)ҙRY?8  CWPPܢ,#_8<&hyN=)8 ҁ|(H[ܕBKٮuMz1:-aEC. ~H 5^:>f\G:Ywm׳%;鬍 7:fH/]Z2!jÇ~TE+[hh G0m~yE{_$I+~rZ󹍑e:pj$J؛HՈ R)QF; lX W0dy>\Shj!#np@oihF"#3˸Tuܭ/9ȇİ=}qMkٵ*Aqx#l> .drǗine3NV\Qlj +u\wƯO 4PokϾ'Cc ̿:b$)J*>ƚk֓g րa]Zi%EG.(Lo0aT<2,]W Wn]T$N6mAQpf-j(:\S>3q!MeNTOțI Uƌ1RDd5EtNM>k'HG<%ŴL两+y,\Xb/g)^SMlK_AqG;UU巳in;5٤t<3ՙ*G(;W7Inm]+|xfm[|Uި'cRk:Zqkun`?5b35Lm;S߬(0fq fFq0͖ ptcG" I7ȓƶ&xR-u(epH*] %{K/ԌlsHz6dt!mqۖ-km}Iǘl 1ؼV'c>=ios=Zţ?m3ϳ.?$l͉}Tϖ4L&Ϊv#MvKgfG⢐UtYNuI Q/S'7W!7&>7c_nX?_W Raw0{x˽»tg|*juO?=`= ã4ӵ[gw-˲z0Z:NΩ}M7k)T/>yQvmy'OOK:ii "ȏnS"5Ydx~:s7h/Ӟ~||UKTuef W4Dcs)X(AHx9! :V_aiu;YzD聅u%Ѳ`B 8k#H=ksچra/xY4zm3hPTPmMOf]WLjHnu|JhF{`!%Sl͚51x& Ǹ؋?}M%C'L3rrr~k^x;3..rĉWJn]ytוS-qBXMC~ޱef=.]䀖on79CϏbvr9`Ӥ:Y7yëَ/h > {D J/15Okn}ѨmݣI''5x#+70fU#ꗾ[D47S&Ei*#L؃󏼞^{g̭S~'*G|;\8p^}Ts2 McU1D"OPobC(~^=:}]]f^jwR-٩y.(ڞңRy1y ,/ wݜ;'뱼IɩwmNV +ؘB80IY ;xe ؗ\Hjs*p6V)JY+vwՖ6[5~:ԥmm*}K<]gܳNR"f+uU}oP%g:b>*J [oOwQ_w'v;KO^0H9)'P⸍W=8cMPHTj^zgYQ֭7}PZóCbK&qQԢW6&?U3>1'?%Swkzu"0FneXK;1H.g-2\۫](\Y=-;A}Gi#@4M(%QUq&S0ل3GT%$3ۉ"đ& gg%wӏ8y~PoV`x |KWf{x 8.Dr1+U9(M8%EâJRݳfGoUS]~umGڌ\@x -%yFw^i[Z,q?x1 EA.;Lv.V` .-'4pNݒqȎ qJsJ,ٚwR-L='^|vYfm[*eWneSk:zw8RNw>:&9V#jִ;d]'뎨}IT&\XBT#aNё NrPO#z>+E7K8ш;L"YC%\MU #s6ܵuVѿ(1:/t "k HA_4n1fPm%D- H#/(S;dnf ?oCkVXѣGȿ6!&& :Ù`0xb#.TL\O2͋1^"b ;8Σ%xl͊(>qᨏvVe6w?҂MeF7ݞBU=-O]*{}4kmAܞvNF:,0Hx@I >'Ost52i} =5# .\?$,*)2~pS+]+=׫^6^㲽#Tb5 ٝDzNgd@EW'-ifmw[dn{B3"To=e[օvjWik6jXRĞ[mmفcWNjR|imNYz2ٕnBpY `W8b`Cɪ,giB/ MCv6DOWݭm2ſ Iތ1qQ5XI!(bNWؾ5) <å}`telĶGseuyIClq y@F|`U%2H 5&#UQI#GQIgu]v⼄5K^]|.*RvJE4'O ERڢ-*1wNK[F抋V,%SeGU4'UZratrLia%Oi"b)WCXCk=8U傿w]h }&Bʫ}'dz\0S.-q5@-R(EzgN+kHԍM١Ekr ^~ZMUsC;G<8֊u`Z2Õ>QS7F36,SQHWF%RJNhx VD(rĘl$}ь7~?? W!PT_\+jYΔͪ>T͉:/%QSl}ram>.{~W5}CzyQI9So9ؼɩW'9>5r lfWw5^27nPJrn]*eortdNjhBf3O7&{ʑܛh&Cu9X/n<3/I`/xySTI8uS>Pt5T࢝ct<yVg u|F &};9FvHoc]hHK}I1O(dכ ߫s$Qk-:65Qn\ΌZvkҒ2ݤւoGטX̤gHcgl^Ul{ҽb'Ԏ;2ʌwiV)cd'%tZ۬zs3VYP쵕9',x(1 u 0 8d!9Z Co c g"1TCwrlNWD(tj뼝a」P.7,ذn4(1hbvP{z0ysZw1y^>qΜZ|{5%_bb~ͽm|=SYK:&dL.} ǙLp"ל UMQ#ùphGckzվc0wD=,A., $7*Nhͱ'h֤x18SP@3 +j) KІȗ8i{#kͭujo:ヽպSfΒvJ hpʈOzwimƍ > 0cjpBgb1y\yֆmzk8vfTcjV?уM0_UL>Ĉe= _ 쪧6%y'b 6ca8:俅[2 Q ra"l  thRYxGPLx.ƹHȆN"u^x;3 ޤ8,)^!{ ~=+J֊sֽbo9*N^Ӟʟ8 ?95AX#g4C%9.̇^Fxva#]{eS+dXȸ9/ȗC 7/?0v`񃖰'v}K@2>+3q8Sl7a|p9J$&ԬTZczvN?4}Oc&n7\ZҊɵ `ŗNϞC=r p!p65rq* 4@R-Lq2~gik IDAT!$ɑa1p J X=a-xq6XOԺcDw\ yՕtVpd;5/Q>$7We1]LqtMB&3*/77GC4ڠGvz}D;_ҽ##nB/0`wDOtaܸ%$J;n.ހvǔ+n(VpA NyU}78,>h<*ZV xO-د?!.i''x19IZ>d% 48K\R# ˘@QCO) 2,\B nE[VG27=t*1 8ҽ,j lހ- "!ʛq1闤\X3EL($C P^2Bbn0*peRכ&ъ:$; Ÿ3`a =<68ü(ʱĩ\ɫr\Ǟ1coq1bALecUK/%7nP~Љ>p`܅I`YFB1 ⨆U&$AY˗&A;p_ALAwɿL߭ 4hg+JQ*>P0u`BsV]\^!?WFxjڀhd7;fu\!Vع1kj㸝A=em;"9ֱw&h uw;Rm"]Whws9#eu_ksV8 ~0ov x-TW9o DƑ9ŎhG]SK УڼEK2/4;pN ˅P!ſ 8kUzj*WקѰGۛ~D%Q>ɭ!25^8O2v8VZef>913f ' lB8?K3BjqAtxlӊT%8dC~'G>M"38'7OS/ׄ.rWqh뺑0;?|GIݜI=ܟ} N-̉Ь6s3!5tjồ@.r`P䚸F&B"o V!!|t;o& F`wٮŏXA2dAO\>j/K&eyFlm(=9M7Ç+7"J̪e{XGg|@zYdx&D|Cʰ4R2˱ },җ(3'sb\5r:%E/B |X۱A ,FHFcDO\Kcci1'jу>)CC;.HrzsYqoՌJ,.~a.mV~&>DbqdВ-ES=}*H]*вASD4o@Y"lyH9 H)QhH1N=F-Ƨ]/~y9srǓ'[p^LQ2a9p~`7ߙ}hlv8i;֘ ?X\9e@.5!J,et p' fSjD`=A#\D?a *^(3(9U#ɎW=,俠F-0F ҽMc̾xoR|I & 5eX> "'1AG4Ms9cm\H U ƴpFB1̆L娠S E0%.e'b77t[XE=82⚺$YN< 8m|Rƫ=f~߃;SZ^ $g ٗ!AL܆9Wq+L͸-e;}uk13-,?os ;( *aF%ףɓ4kd\gRZ쫐h q&n%`$5î5M-|g.5aWϕ͡ BԲq$`jbt7.D!Th^D!j=@>T#8h*A BZA\%иJ؞C-D3:fĨxɐMG{;0ҋTi]kZpK4N;\ƀsFJҗl&p3 _XS1,̖6r"ב<Jְ Wp|?k~fzȨ$f᤹gGqA<3Yע/' nrs7& @QF- $ q˘83d)8@*l4XZ׶4bjꗶٮӺgGf:<4-x.ų[_#թ?(ɄUW2[}^"P*tjzFM{N396 5f]u͟OՖd3ÍM@wNC4e?ś7tGUEZ=B BwAVeؐ;[bCA%@gcެXѮ{Ztq5XP!7t!G O4>$͘v_ c|N˨>\cm< L܊b[Qz V)]/Qez X-,;F[&x!HD7@ l ̆B?XonӚP`xFq[Ѩ}2k4͈<0tq#oRD\M}rJtס ɎG7^nE7)uI+8 lK[$*&jԂLqƃsq$!kD /!DG:ʢݬՎs̉{}So-:|NӒMeT|B]Jn$(S΀ aXKE`\Wpz3& kq1[k O1/-`\g NVA QCkn|&t!ik7l47Ԁ%]IV3q>i Z4wn ṁ"XRDrwX]gR4}̩X]|܅< T! _#ǚr+ 1$3~| a ,`2ÈnBs T4 ad0c/!!ЀTxSoRFy2jOYPvQ-۬>ܚ7)YڮRr_Xz6&p[YQi4Hu*څVS-[ЛA`W!n@#ekOf`6qg9XI1̆/aXxV<o:bv5Kl34`pyLM9ړR>c{U8dD \dfTz2x=cKQdẟ5cAζ .`*<_G6d@(-sp'1%D-@cG噸cN &Y?\M&~c :7g"G"#$\Vɱ_q~}` OשKH?L"ԲFzd[;T=Y0(8QHC&n3Sn8>+ z wZ.xJ`oͨT u2F!DJQh*2Ѣ-b 40aVƧfb0 ~vo4V,8͐ipSj-) 3dA`D!`ˡ省 x#!RKhzqBh4)=կ b˱Т͑$F0t{̨QeBF$'1yIZ505`PU~y8QæThw'#mZ7%l\qFBq+74`0Gwy(x✋;K_V  јBa0o<hw'tC"o0>4褓,3~)XJI>O`Az@"VAjQ]F$,nUQ+*v ~I](n 6l)jFW<HLēW6nd༊CY}%،Xd6kߏBԋsvԠ"M]ASkLJ0]!ReA- xЭU7aBPѐ^6|vCMNV;#(@#4zĨd'rc wSv ߧ9?'uF8}Uc6. ȳF}I8(qa/yWHP9?Qhn2XÝ21XԦ5,~%|6TQGw_"3(lT zB9S @8`PC?H C,mʮMdhN5s _χ,*S>!D%Kc) =|HYEj ,G s1$ṅ͕! ͨԥِzw;u'#!C7{YsG'k!r@"傂xE  !! bb;Sr4 У#Cʿ`EٙS#G\ >d F!0/a~;{1Rn5OqЌ PM6xľ9[.Nz4iZkzmgc1]^S~У}NvL܏ ̷U"]ŨX˨Zϟ-?BNxG ޷w;+{TcsX#o0!+WsDB22| /a 8`ǛP(!l!70'HQ>p,a<mpɐ#VOk9r]־ձ4ujLL%:]|gdzJ֭FH>cv[Dn#O&wFQ8Q=LO m @2hWȆI+Lxk=Uf*P<=$V@Ca L8a, y"dȨRuKbb6ec ^š ZI\עm#ۋʔ9s% 5*d)]LkOҺx>$%Pe(G;Տip0\Er+y:3~)hSuhpX !iE!kܬ0i#Y9˴~F籝s 5g[,?7p% +1:(nDߛ ܗp1r#Ry%f4hv_0rRTL_1N|)꧷GHmU%3 D_, ,%P#x>l5lU$ f. $=PF`NN&S[FIN}I;3 nWM7boE{2׬(LjW'^]۳r^PǪCcބuK|eӂ_D_X `*DLMIL~}x9-D )`hx#+ į{ѧa=J$؟ke]7&p3nbTmhmeM-xɉtէQy9]|ƈ0FXRfJ;38[ٔc9/7J$+S7]eK g܇YB1J`#Q f, 11m@T.:nI Z% :;+7wYXU #hBr[\yp? .WSH0u7{ʇd)ՋbT~~eL49a}ҧQfvbU!<=`[+0/JܡV#Sh }NӋE0^m"^U8";!a` "ɚ7BĠCzA7  ?I'9lpBJff4C9IxN#^@0D3f?ř*dT#J׌jG6Ƶ'֘Z#> ; s.n$gwG ٽyp~N96ld;pj198OwiqJx.q9⾊ڱVo a+4tnd V Ɓ7XWࣅ)@*3@`Z֦Uxs _OJ|Lk1kLTh-KTCzʨD 2#eIY& q+\} k7[s]BEEK%Ԥc@4s{uȃa 2X5:(o7lѰUEҡDD ]I|6Г\4)I:B&["&QWjL^12xۏt)^fw^ma/LQ5Az^`V7DŶB _,+<Գ?!4j*t,6~Z?̥@ x%`%qk =ԟfǘMs1D r >pnOЈbK ;9oKy@tϼRthU0>kothqRMe"]U mq8g4S[JaVrCEBa,Im`WZQ!C+ȁYpMx s|j@@0ޤ@~Ul@Ypȁ \s/yx;cOAcu.N'JeEF.z i ͫV2ŁkLNc*Wp)4Q{飸'rÖ"ZSɏ](qt*^v2qh$Sx`4Ç 2,DIJ Y` 25Sd YU- 6K;LߩG;J  Xa0́+-Lڈ ee>LhBwK#yhEj-V,ìԣc?-=J$o xD^eJ :ccX@"(ƥoTH qhj}s*b0Q ͬ*1ȣ|=I4QM u2 .?]i`&܁P` ~zM ]!jc.XwRNFjOΪZbUt#y7vk1^{Èтb}N2'!v;D:j_L/!&,6M8@ Fqx ܟT|ƵO G!X xҔ7P l˧tU} = o 덺ۓƣ |gC{=%.xSkK#ySBc3O a4>70ӆ_f!V5g[7b uhiGGSZIfҟmhg.PBN`_b'.o)o M#PjIx:co*^J:pw=Q ^)RN=Wj=t$!(`&|WA j҈ǩ|TUTkn%Ҧu=ߡ#PR͸`B+%FJ=&@"; Zv%+dh:t<DN1riO)@.cujDɇ4r$^JV3~UI*딐 s8} D# h G7)qb9+C&cZ) 2<[*87]Եz}=n1;fTt &*EPbBM2q,?!pq_/Qu9GS2>"TZt`$N\)>YQT&n|N:?W4?RQQ_rF3xA v.8LkB~U-2b6/O[D{_}k/*t%1<ŠP0u>2,sv`cE5rr" RCKv#LcmD1#+w6r}v2)@( @ dhB@_p^)K4qs VpnA*܄pXq=TXߔd|^g%s]nxSН寧B.[7`"~QA]z'Z\Ȯǰ[x{YgBdD`~`&'iMw3Dpa?0Bx9ى\ !|u^nWi2 {2+U"Q\k:1,t<02Oa)L)¶1V"c}$R>>L{ w[g!zxASCUmGMy4E2RAKï0vvA#&kZh@Ö"Ǎaf=,p4`37*ѿwI'_= 4A>2Gj2i1k; P}ZܠݴTdlbU,o7hK^Vs6]AZ2u"7qB="l *d=ysUx]5;GaH7ޫd2.&IHG)#5m[Qsҫ^V!.1u,H0>32d4'!b3mU\6|Rr0Ju nF(h E.FJl-!53rI*x^]ߥ|s޼>#ҟV?gXg D@E.c7&XbbcL5^+*v " `Kzo ̼̳'ygor9q|5uϧF͒XI*n@<@Ї |[FjkIhԉ'럽bE(z?QIQCF:ZIq"/gKo3tמԟWӀ؈4|P  3yY_2>Ǫ ̬e$@.F^ЧH$ 0`jH>(TD{4etC#*x[f.PV7y'GݐUol?j!W97 A \h^ FK(qߌI"dF"[\{Yrǘ˫3LXB,(OlYˌ΍,7xod)U2ܙmpX(C&yn:67ڗW$ Kݝvn 0(*)C&A@?lJch f2p Y8-Cvr@YcFjAq=E˱hi_l42\tKpc;/f4WЍl) ,5V pnf^WHȽ010TH flPlW`aبԨ*V!R ӠMˡ(yb>gST2 kĀ\ Ei,S@"&(K{i!څtw+ێ0( ܡC6;`6Vbp@nd3zo))[/~n@\ScActN~Z9^e6k˱ ˜\ҧ}d g1P]z9T K\~ԧK3F1!Pk&A`A=^ bMs^ [<4FQYv( ?|ѰҚf[!hoQ)gOYKe&21j[f&]ǠKIyvfbT#]ҕXfd'/z4dzz&l };o}H*fA@ $Aw!<cIh8gt{/?<[ @ao1jBԑ! oz7zy?ě4/)<647Q\M[8akV.bojF5!ci;X18KD/^,6G*Rta71u0'G߇"hJ`*Л"7*qPwrQ[wx?*s #J}v%VP t. r$T޶"~bx9.NeRЂRed:'Nˌi%•l8|p gH/ft~z ~jbu U ½V*@Fn ۊ@>za']i4 O@L IʠbVAAj_ t cXbXF g`)Rg$؍j^:FfM[Vd-n$:zudZЎYi~Xv " *qtQ/E<p5>>W+ݘɛ fϡ,yp @~` Q.`VحִoFGgzKj1$H'(NQoq]t6Ɠ&q~oѫ'O6C&pnDlDO|ITW9aD5|EMd~,$~ FO2'2Ip#x䂼Kxm\pA̛d+뫃2|`=D @4 B?BO0tGרP: y8':|H<<9? n+Z"6'-9P)rԧs \xJO5ڝ;DotuWɝmztwm(Nyܵn$NxӊfL=<03pa=X!濾"CPIvQO 5`Cp x>es@ȓ.j 9G6&9ͨ?/b:^H81}l)d* 'rμ^"ޥ@>UEf!u>>'揣nuM!jt Z~@-**%$bmDT(GM7B:0ݜ!Ƃ!jMȐĻR7?3v&7HSD(ZN. ԡ9EVi< ]؂v,!bl(֡ /rqnG-X}/3fW[{16=xBFaDUcrL54J䣭}* ~` P("~y`"( }&<$}KӠ#? )Dڸ8SѢuj|MKZfg5l5"/rl(燘oJ { L"83үlnoGwh=__P2tO946Co5a aqV=DZnv)G/(n*#ǧPq0 FāQ۴/ n eXR9\&MCͬTƯڃblz$o2aY1{"x_W0e&SYSۚ[~Xߋt л۞4fu5UE 9F̵&a:{5<pxăqI:`Pմc:H& ozh^iaK1q!g0w3br, #h5i nd?%e\c)S#.oنFdzy Һ`;caC(?7(1c|`9L6.@:P 4.v` L "mG _-(p=P3 :C;UrYa߻P13&ڣ10p^ O-˫Ϊ$=;E\+!EUƒED`fj6AwzpLݱS&S!Ӱ"KFquVO7q\$5S 4c0/貎͵o'6ϞVt)&־v5MwNՓmT:T_~8e\SG?^XJөj-2h0l,$hb3DAYU4AIؚۼk FT<|;/d+%{AKH{;x)Mآb"A˱ {lA+HC/R o3x50 8 ɸi|!u)gOڡSf3EwM§r=)lbCBhhN\PQf5[s769]֓#WW`̚=14i`}gq`់T?eTBy&rB= P CB7p;~ПVn.nCc{hq:*6mop0nvH4=hSqoqϢL`NE=)d)PH.Rt5U`ކ;ͺhA$yw;jCI> >pFAHIFq^{_ĕطCHmxt |(` Qݡ&gH C@596Y%ez앓L~u_- Ս̘b7Vnp6]X݈~NS8iC^O8,͐o&;W^PMh5@g3JiI;j!aQ r/!BaB'!gp PEU40)Y˜R i7]Q U$P·]0uS :_N%'ɿEllJ~?e|`}za&0E%wSϭ ?S ! PI0/׃3BJړb֭24o ]ϴNo?<M / oiE (JPE\^a&d#_;`#4ˢ WZ6; +3j~0Mh򹏊REx$3AWV[T@5$VV{e^u'`gh0Kʞs1.1V7| ?ן&Lz@sL !"лϞKwS9]YCRJ^YqSj/^sZuMI{ߥǮx#nf7sN3}KXoD[Fh@=ґ,܅`PAvw;`*d&h2M phRSd^˜\õnV`Mݽ)3{l΍Cz9p!JX9 Q: Z޴vj q7&~504 G _ v j0L݌y F5xrpS0 (X9vB(8Q3ņfCG1{<-Dl-x hg1ĥ;a"-fp⅖3e##=ֿC5?2l?iA+Ը5iSID%U gz1-X.}Vwkc]},ZN孟Vd6ُlgklk!:uǗ "̞p@ppc"i-Z0'љ@h/,mpM F~ /+ kCꆔ?J'. f$΃ LH{ 0'X3*k1zC,@_ Qg);5SN$rkl̨Έka1 *˫ q:AO)r|GBe,1k0j&4|- upt`Zաy[--L뭴1ESzu%N2]G_B[Imq?g(1՘_ tɩqư-ֻƂa4!A `wzKydދ|[ l2 rtvm^Z #/ʌrfffhᏬQ"L:P d>H 1]t]-JC^J&7T߰"MO Lp-JoWKX)6cF}iV+>[V16!Ii(#E `0M͹XЇ-d>ܬ8i0Cc@z5Ch1h8eh!,$.}NEE;ßV}HZVqxw%YC`%ۃ/13+0bVxi6C11^fNP=;d.4u ̹DTd'o!|9`* { b:ۯ1m4xf U0P@{8rD00d-$@ tS;\oe h:oS}Sz1 -hOpfd oVcRi۵%XOsDaM:VM 0NSOa+ q(l0(HáD\x O1:}U*A T_L-MXI@̦~fL?rC_^oPp'q 6d~w56x"!BX!i42zbyNzR0Vpcג۾CRқ_? IMhcZNfްnّ98H 3]\ osj@N)wiBB`:a^RғuݪL P L#H4Ni%vf&v3kBo>Y֧?!2B)X@7LQ]-RI M!$I\bjBπ+G T'tknԑ@7zNrMd*1}.0!hCpz b5~-FzxSBW):BB6U`dR1 03(k omF  hY-,m7&\]QRzI-ɈZo}kx ǑkTƽ|%6FR!,_PzljC&10 ,Et@ ?B$japf _==9lu8tKB6S TAi?Rs k9hJ%@9fq)#M֙Xq|F>@TRu~xRd߿pKJʨkԾ t@ ZR` 7!O򆽘iYU@0o jhEޱwRZR||`=0֡BipЎ_XA XPX;nǔlq-񛃁FKJLbIr7z?{DOr Nټ~LA>`Ej@{h9 m~ί֠-U?P$ d!bVOgÀ zQ z"AfJn: AQyh[kHV|.hۣyߨ=ȋD"Y%l_X'|i\^!B44sAo%*ӟf|;keɖ;Xć2tm,!"]=-m_ļI7?jr3b\nv!8k胉{͢-:B=Ƞ xLȅr@gsa*M(ᤌ@zNB 8wcTmܯA1?<Ԃt^aOT0UUiLڋ mH<˄V*Đ8^@9sWn$cuivۢ%|UmK`ICh_aHxU.TTnU[hlX_CwZEF?2~MԧGal]ϒkxMM;a9h"NcouH~\ûK]` sYnDiJ:ڗW078Q9c9F.?ŭYjߓWۢBЌ@s M PM1=suPM|C[}e92cXCHь;Yѫ 1K' OBl)V\mXQ:<^o,!eO.fȡP wjB^64*\g` LQ&WR\I $dͷBe B#~!| @* rQ~+ 3k X󠂮lSe1` Їb BiWh"˪pzGwO;BnyK0P9<>df:֧?xF&_^Ec\CUWt719,RY)@l[ys V@&A3yJ@KRSI }'#jt<~^4iD~?wv Q/#MbKMJl4|y域>{y5Wa: 癸] tK~ vzY;/4w|R5➽)U˪ٶq|˂ާth&spnvXjӀ،w9Ӗ?y9e.1pn<3NֱT`N4.Wg"hU-0hr zPzP/ 8: X5H{@5B= 9 ( IDATN ~ au,)6!.dGwr5YVe5i0#;89*k %Gq7AxDg@nv ^u?yt*@ p.C(mܡ~&w8I!u;?+-8 Y ea>0כcbBdWrQPi0r{^Uٮ{7!$${c X"+X(bbDPT{O @k|Z?1sks\yHm.mqGWOX6n$rwfY|eA*" @eӚߕu\Ƶ2ǛEo8DTjo|x*ؼO9̱{vXsĐݮG%i<:TFseZ4G%A}WuyFء~)gZT*{q'-:jֺ*햔N@iߔrWz7 _瘟5?Aźl;VEEoݰaK[v.7߸Q]黭^֭eBM2xqJ9*E+!kQ%M.+2djS,R6EW}DvXtV;8.}0zrɂ^ZgKOӚwK8gtb98cY\ZZ*}#L :cLo4?.ͱGwg$ǨeWjy'KA)Q׹.!N.C+ |[ 1B gկ/-L.ZHd{]@BK*f]o7>f?L5ι=mG#4&2\@Ygp eɤ{͓ޡ)SK qR$c^80G>W\júxjWdZwҚ#L`H"pQ 򝲳Q5NU"Xjmzrӧ'7hX\Crfz%InΏU+Rv)-12:ǛWUZAr)9"1d('Ii(Ukt+^x9VjDSx!' c-%N(7+x t-V͕u \(+?8xEj̩/^QgJEti4մ':MӗxVZ?(gjןi(Ld HP$\֒FJ+8F$Lf$I5g{ha7_}[Q9On|1:*uvdl{#4(rԸ iQkEܞ&^ /wc>^ztOۃMrc sB#vފӱa4?}zn{j&s% ,(^QKihl=Ey,3͇қj$?@Whȷ+;Dlg4CU򌜻b'KwpZ[Iy >ngzlgvᴷ/z&tbr|6Uʎ[mNCyv3!||̹ijei,5$.* e=]s~/ƻal9nxo+MM0l[bʭTbm{vUi@6V6O}ښQٟ}w [[M.IKsj(P?BnlO+AyW8Di>h˕̧ r+)~#d\6~ 剮!份6:7ޝ]!1.Ǚ1>ߙT Է|#@uV ._BTNz ~:߆1|T47Ef2uGndl}خc;3HI ˎ0:skgTnK̰wg'\Wˎ:3_mR4zC5g/9.r-C;QIK?wm{5zuyàKMff&&'4.AM?,l^1)Z\38hb~%dœtb+9TRj:$zӤu?;IZGsϊdbv"F|+Bje[nMj\v B`%WpRm>2e?>WB_@FF?HsA]W'^a6Wwaee4 W x/袢#ON9HUJWeOUӷpm@W)ǵ|#j]C:+G2O)ZU\#)f#9Ȁ c|HWVq}o'~Ѿ:eP :Cm*FBg>%&M)a~OPO<)$/ew_#ΧsIȩS}AgtAWR_/Ͽs8< 5:tCZ%۫X +9iثed)I|@1wb#$J#~IN<[ƦUc:mo5QLWL2CE"2ߜiԾS~_{x'AA3TcD4yQߗbw[Q^E+iK8[d<Ӯ݀ϾIu?hR{ZD*II9?3 DK%MJP>W0TZxj86hJ9Bҷnuof؀/\y;>|Ӷ3]'PLZ W=yK(NfNp<̽߱ >SĘDSCf2czT(kSE3T&y+N@b~$i):ZX!gfnc-%c ҋqcJM$!dR,'mTޥ$Ea]9܆s9T?a mU-ɿ 0y-e(! ohSIZzE-}J@|'ӊo'O ~ܦNKס9"o:;J0=ԭV#֦ O8M.> Lуɿ_1;7ysU0 c"y4v=6U\p}N!}ƣJaF;#cEXY>DMrt#iL!rML!}0>v϶N6*|J@3.ٹ{\G>e62}.zC]׆M}Rd+[ Y \+[PѾ17K7,2͠ؼQ?'pA_?=}nRC#f#&˅g忋? رuN'"I:o1DON3mB48u)gIԒd@*1l=mFɢ_My=d [S kD-Wc&oՠSzQu-#PzG*ϗU) ,.^Gf5Ō%;<$zMnt9ArzBd\F=h}9xTEREB0%mʨeZY= ЁkSRCxu!`I9'4&\F9ƕ7 V~LoȬ>fV۝7n`V%ְ=)=&b%{e9,wɣR[yW.ĨD1[׎PyqDQ<f&M~JOmFYd)H r#S=^ט^f{ jR\f\KYz Շu~3r"ɹIh%M"p-wxIHV 2GD;ok\Mr*?/q\. !?W.)Q'ɼE[HBX8~q= ~W;*K#o)[,vnT;{`|{h7$oTd'7x)Ǡ^矑*kʎG)Vف^ss xCrԭC]Ђ\^З\jwoi]NCgX=E%e/SzvnӰ=n*ߟy4nPͯg@HjlnLɌ"FdimRJ 9ʭEa!>`!c*+@kq׳ePkĿ6*LzEpU|4_"]ZuFa> dc>\G[4YѲ*4ymwkN~QdPO x+7^5Pe| 5L%n(R'qxwFmŝs } j_ ɭa֩qZΚɇGylL#n¯ܔN?DϞZ/zR@\Wϫۉ^yU(߾9oɏzYcwnP.O_ $`v*q' $A!mo>9i!녢Lµ0oa)'T"_.b)Tp=u 6$N<9(@i=e&F=FDbͯmX:)Tݞ\l\b5ybe}w2yM?ߪ=6k)gn~,eg ǂ-mUo}[*UzHɨ#gdyF'c§,a(vr#u{tvR~NU%-oqܴg7y *yʎaw Y0or/;&HcrfɚS5Ov52^u)gJ: 朓k WeVfp U}e`?,T:)ph$e؅dRQXiOP3EчRfJas"yM SB]UmkOⴲۧn[3\m'0|'JݾXYۤe4 މYn} rV)G'lu=ث IrKf1B`\F]BJP~uZ3 "b\wPl $$N6,QiGeorE'ժ:r )vV\tGꌻhLM[5ZS]bd,o%6h+ⷋ,4ee˧(=򸅒Qe)J 7ʧC4>:6GgB9 NKڼķ|3㳕\FhQ-s_&*Ӽ~~٢}'zo+\Qw]BnggI.!na:9Jlٓ-"}ևw)@1 r`Fx~<Gj1ԁJjd2t xYZZ۴f:ky-t2'@'uВUQX'ŹC0~Z괰~T-Xpoº A_.'JũGuݷʮTEWpkL;(/kN4hcdwYG%rDu^m)svjQ-~)Qe&/>cuY\N@_ 7{+&4VvgYz*|+s-d?w uZOH:ʾ+(mh)ߤ}U)U;Ε VUV֖q]ٕfڎ)tqŒǍZp%ï`Q{8o"h^`m]fGn>`n56l_s ieM|(cd [ Qx:-܆JUk;xitՠLQZ]Э٤,^/Ԗ<beqF񸜝Ѵ1EG< PH/*0m>uvj<GC=?̔sCáXu}Zv zʮLJ_QY!l=ZMUnmpe(vC`q H@%5[ rY H0YZD[>"o (*b^AАG͚u: =ǫL`ߪ1:å!ryGy4SrzQ3WDZOwX֠e5/kK8qW/2mנ&?^(x^;֪_QW$A((ErnC1=dJeUuֿ_|S8̯2ђj4aV\U~"؞<.W;8mϴi_LNz*7:^Z[}.'ֳrԦp5w%k*8i%K\By lXn}y[ҦR}ͺZSNT _8ug$ fgfF Sו"+mF|֦$p];zo3n,NS6D-l)Brj[0.uZKh`KtV2EtB7зjsCgB8N R? IDAT,e_Cw,Ύ'\9+B"K; iO < ^mbU_э7DGxV[㐨2O XGA1+Uig[!ZUa\^lMT]VmӯK՟`j c)Q0ʾ1?9֨!/Y5o:u֐Ryz {Uy=oLt4(}K5NdW,Z|)@wby*=(cAoV:R8[&GIbԼ޾\to.aēv OjP,/{~W&:Fd2??(6Ƿ8G)*ڠy5)jǔo`qVh_Ќmui;!])/ l盭g>v>w9!3_MPa JTU!-}gA ՐPC4'Bb5Ғ8F0d~XIV {;Nz6 ST}*bJ2] 'Ux;TcwE|ngԯhnTERӜl !Uѧ%b׏M;B@quB @H7< e98[W:컂lgc"FPԐAv5W:NP\߮>=kۿ0b4JInm  N)%'nlpk.)9>U޷͵XЙH..daR]6:._2K~~١Aզ)*m?6<^Zگ ?dP}⢿} 3AjjyNly4^oZR2Ȣ+sQ!<3RVbk*wۛf4a<OV/.) (͹yZa6P^hmH&q!HqrÊ2~ԡul,ܧ XNKgFhdRQ}2ϐ>f goz-鐪7ښ]ViFPp}_:rFh$5F_f^9G憅Ajפ`{ ]MoD<#c1W&WdlnUq]󅶽hN"f  P// έ]_-[<'>c}U :W]T34(IQھs?qD'?gNeje3P_ H&k]^b]bʳݨ-Kchо=]9K;."HPnUdFּxe(<ķLKU߶k_!rfl:\WNsU]\CVqiA8DL=zҙӯPWI~ibR dTTCp'ź9eiXl>ќŧ}~:~Mӈ86ho-vHIurVqܫQ~viWi[]}V5A[.OmOI(uUe@C:s?DQ>9ۣv'pCxtiq~lF|g!ֱȥ~e U9x(ӎبLL?Wɤ1w*.v٬˂ȍ<ћ[SG.n> V[|t z2qx 5vב)g_#79!//1qir}& P8SujaLi8J0Nqg᪛xn-$iL'îL4uս̸ k-n04{fW[fRIt3$]TM@3;Cmf#ORrD;vE(!/V9OϪ wi.">Cy d3)×9FqC5Ӑ` ʰŠUH_d#2pN*?NVEOTkRz®QydO" r ֭ ,g9yv͡Fܓմtc\PlINֵ+YBC);ST[Ԗ L4ewv'mcpc8M}#ogp\J*o \"Zq!7Df s-~ۏﶌ^u}.XpStDFp-mCU ?K.2pgj{r4^ղ&-}֣*$Jj&M+LqO>ۑ^kWfDVNh /)sb5حqJGJ^ k3mBD;]1ݨ9I.1 f9> iMlUFLG3 NBԯ;I[eq0.^ ٟ/U)u}YϘLM.w7դW:vb iWk3n|^~^q[Xk:[^Tpu+9EI1&p\>S9G}*!8%D{^ HX`HL>lk&шD]~S--q׿w&ugIsJpTrQ]dU{|ϋ}k- 3N=":NX/H-1i?X)Gma,q1RF`ݫ٧MئڰQ|c ë{s{{ yV"rnUl-ߨoǨDL%݅c:K`fe_vqTR޾\7}m/z({m.k\oSvņU㑌ntvфASIic h`6#G9d[(LZX.㮺75bkRًw6" ՒxR+Z$Qq kh.Yl 0nj-l?/8Ebvj9Ȼ=#l'.ZU#;;-:> Ou'}3Qg8ÿ`5޾G9ҏK([/᠔+>iҽ9R0>,#dRL A:p丄`{l 5.yܲt#-^?Fp #EGh.;i!BHs6M*'F5pп| йF|U]6\3ZY/wuxFўd0FLeaܓY#OϜo qrԝd[bc6,wOiKurXTV3;ueH'^6~r4L$Vm85M?m|m.q\γQfr—S55Exw7F<]wG?765zv\_PpatCjh'cT3HKBlf-B͜y^Y8԰m XA29Xzxd3E^os)YΓt'5D.=&1HvmV KDt2n׋/|EpT+Z{3=\%U n1_[t(C-y"uv(jjoaĒKib;ڇKD\ʈw{& M)/psfdfn!?r&%p+H}M$r'y>A=;~ 9hnhs/a;r5Z`xG+`u q M.|H_R|аwDIylc!Jg_g8ot 5몺KxӇ.OR.'H Zszb^! i毋zmӖ4+5˻[bC(aDd-z)3O &3 d҆|}dH8PsZvIʺY7SDǺ0ʼZ|\Z_d]tL)<\? ֒O>Z5=*f=/oUsȖЧEH;Ҽ;G64Ó[,q}1uoou#$ⱨ7p])pE̹,[pZE`fs-E{?J]2`Ui^l3]SO]|T9yٔz\!|ЯK8,ok%08yNqvBw㯴)YѬA=@j\|Ro˦.VvӼ\Rm;/J h@dUn8FC+Vlԁg v8L$ph=Nү5NoFЅ>_[i&{AUٔGo 㒣_ c{&=KS,`(M7ZUP&Ĩڥc).o\$m74'Ә_~UnuK=OKs/=بKV6MO iw\ O:*{) >::ظSO#rpo|3J8C{py-0=WU }(lR.hCTӔfü>2U'7^*;n;LaP2=]/R˕U?<Ԏ"׊ǻl-e:- Qm/+.Y$-qRqzΩ~Z{/[ 9 iE>9iHӞWK>gl]}*P&.ݟXg;Y,fL(6wX)쉬u|jҲc?wsnֈ2I EdkR8o$_m>7.pTrP%Ʋ,>CѐBqyJXCF'Au`F8BҞ4N"dy]ڝ {лomxG/cv}fߞvGBkmf3,eQ<]`ќAL#Nݯ $3yg=;kJuuu͹fo~MݥEkP,ݣYL]\}RlWsRpxdYBP3tg&sKw>z9}pwzzm(!p D1ul |@g :E U%Vue"SP^":OX_odV;,9y޲_vQf`qu7K,Fv.2K ad'e}5;)*X]BuM̟f46IGȶ+ ҟR|81&7Vt +dUnh{KfطF枵gSf{$Y9wѝ{~΋h$ amBZ2NBK~.o (FVA22õl1Ŷ.ˆU9J?7E^~JE*k mԹV`gouP\VK5g}OyҮ[fymi^*5)J)U WFB6k^#§/hEO,wϼ| gwmd;rʞr䇌ܺ_hVTӿqͻ_S2ss^RQ!s|UVgl=~tmOjL_Rӌ E]ӑ́C ວ2WY>I^c;iD9HepH{ٳ\ٍc3/?{R6٠H~כ^b\X7ʣsxF} ҄ҍ1IKXLҍa%#9Hm9@*y,n MzPM/?cY +̸ +Zz]?3C'K;+'=MY4,?q~xJff A⎋~'=s̙_vGp9RI%o W|3<6?w]h6Z#תvGG]yvÓ,SP}?hCsȥs!}9ŗ Sva4mح n@=*oe_dfo+ie%N JX,;_Zѕ`J,|LZ\_hIIӷyy=uVw7Ҁ g֋Lru]Ry=JC.Ռ4B], ^\vUr6iF5inwh2tgD[r <ShCʲ a}ʅy 1.wtS_7y,ɗ[6lfd8uiSH(E'd| #x&({ JQrzSGIn1TTu!Z9xe_ eh֛BƓbݚljN s{싿?tUTu6әǘX@bj 7_˻5+y0p g^SfůERRҿ9PօKU1t]7;GB.Z;ėnmm+:' -xltR^!%&RsDr\b>doГe#' |ɋ\B, n  {luMm] Nrmڝ~f;IY'gD.`IzǬΩ盃f7\Ʒ(`e 쇗 wMin[3HTQ6?bCX6gxw -~΄;Ak۫N4ǏZ 0N61E~vYE[7#_vAZ.nLUё$BΫ޽'8/o_E1'KМۚ7PKK~!PK Yިq)*2 *k/~VJfκ?+L墏q }~OΓ? mn`6 X<3W#Zu`ǁ+dt=r<6:oGrỵ yEn!FH}&3#'۝hܛLThuՊD)ݧ9e fG}eWԣ)yo-MyRr}[P^MK(wQ'6O_6p䔣+\j sX-hO9-囦Z4)wCh^t]p`:nJztG/<k}[ /߹k*I>?p  0;zFyu[y#"=QE:\f=l qĬKt?-0|Wa.q}X"CgV>M^nśf Հc[ `5ႂ}XH v3;G6;xXeT :;RbGEQp‘tʎn=uh0܂_7ymeͩ/m;*y׭Tqe #$/$Gϟmg0` 33pFwDA~5S[)Ұ˥+❸gs!QJX+cs~Rbix#ם㎍W.#66۬$E}1-h$))qrb͘FgW)(D=e.MJ^}jv9]Z@RAjb=&)حn/Q#O9ǘ )3*/|f6-ۢ'L 8`zӞ*j~yp~C3#g?ߙmkAkO5wR K{;qy7pF*up>``AE뗚`V+VX-&d?))+nTsN>/PAGvMLEY6]֬Ǐ3Bn]l0 n+n{5cݡO+k򽳓LE&؊>Ns-!#O_ǁW=8GV3MKB]ߛ+w Xf t@)-wf ~7.p e:S4qD.d0ѼNqj 9)W z>5 cto;.}d'>4qvu1у<[ZY|%<ܩ[.O0ѱ5JDic ߆hyȐ}Zmmd64O#7ÃWX֦ltO.9| XmWH_utN4'uDC,:׾,>?Vvsz>b3eS8\O.>*9c^ ucAʗ[I9b+ksAu).8zt85 ;s%A'WviybOe5HL ߲IRCT':V*_󇞧V LޡiŇ6ryz%Vp*>QEup(.4] Ik6 /k-gdɂχjzo#|-:H(HM*Ѡ@ [ߡuoҰD+RYӂnI5H_ff%{Ijdr8y{?yH$Q45o?@Sx4ܠnYj-G_MYzq+T=oh;:w&_G*Y1BMXi!brT1Y`Hx(};ivޮiu-rrl2CM:U )С"1j30yo6mȂVmZ҆su/{M vIXʷhrU|3,tCtcDS'EGojAXK4f#^:RJ1ӂn1IЗ'0_@iDeyON;~Ns=MR60D)FӕgxH镉G55W_5്:1'Ji`p xNyJJ_`xzZ=k=oKoJNTxax9mhñz@Vҍ'@A褗J$JzH 4队&ʊue4(_H]d4Rv!V:d I{ jFe7U&񜺛ipS |N0\6>rav~`6ҷ}k]sۇ_i{hH,nDzY2?ACNѐ9Xu7jKUs]|{&-1#HeG4rJE^W5Cth1U/ɓVdJN`zW4ȣ~I jNl|VYVDlݣJ#k;vR;OZ7'|yj}v5h=-}:\ 4lc&Ds!xhIggjAQеjWo|M_s_Љ;]z[qLfM:;ml\2=+cɶ  \ũP'BO]@c79e]t_dFq$#H63ah =Eӹt0 4X4qARD6C^Vʗڹэj*{^g"td _g0B|dA8ͧh9K=MM/IDwK$4E t!O E \e?*&$9r~yVB[O$Y]?w]Jʉ$Ȧٴsy xcf/m3T\F~]kH~KٳUj/oٍ^Yd@?d8ԆAT 9[t&rUNfҗ!m~c|>&q }8d#!V^G>۪.5&(hmݬ{eex%oZlp'U$"3-r_;.HU8m=gx^QRxJ[@;[?\ d DjOX L?33;;m^I2k5鐲]טּAԶ򳛜j{4 McN|t鶚gi,O3V/=VFnegX6.dw'dbȴ ؉tۮM'fGD;w[tx5-wzF8~Є6l}VCw=-t3Gts+V`[n Nbx'{sWvS4y THiYD>!ZfAS-Ks3{e$?*h G:r[%\٧"em uugGt9oF\UOz1Lg3}Ls}CT+ϰ<ζ/&~&;U}u͐W>0yh7ŵ;ny!?v=ڄ-U O @ҷF2/du":Xe=NNkXWk;hZv*hDMǏv'kC hS{[I|7ϲR6ZIG viwiۥүޕ*K;^+y #%b%ƟbE_ cZ5QOmݯេߙ-ADf"@~ƺO),ۥ]=Z~zNmqNpM?6eRtPhsBV5hʭ훧U>`ORfA"iN7Cx=q‡]4Ҙ:osW:},#2Gz_Lt*=4y+Jp }>.|оg֖@!\FWAĊ8pd[pZwjեޫ>jޓ6xxd*I|kG̊Rbj?'nmּݵ2B/jTs~y |&9[kcCoSk/3ݪ16=9^]Qߺ=n]fQnO2&3O/4VfZu}FveqN_}hr,2 ̝2y}T_rn.j]vUL{eak-M:TT{&_FЕ{m1,r;g6sbאwu[l>;y2n#'E *)7ϐQ=趺[-m g Q gefBeΖk>tY]3pɡ?';c- HJ?\pGGWRߛ؏+2y<*#L>9K_8JNФKny+ hn~VWcG C9aޥ#N1KF6P1*AÃ0vk|rgF>א?VG, 0i+]|z% IDATNSnwQd2www7KBhJ)PJPܡł{I1.I2{uuWgoʾ&o<_ʼn,}j;cy2Cŏ5?XPrC0J{!TpjՓSA)^pr_!Qro9G݌Hz ]-9$VR(s{ nbd](}ŶlUuUcCF_M,c[մA?$ 1RvSk`Irv+*he +2W9A3~Ǎ8FC vɐ)X"xeWg1di:kѯE_CIt$ &Ti%&;&TdSi f5yT;ƈB阔4aT<%sci}h B/T@|EЭwʦ|1GH&D+A9WX vQHa>9uZQux H)U9jS62Hn 8e `j ql/H-w; Ʌ1%A 9BL~ JNzYx_KM HyVa4OMh=o^~f!kR/BO'#~1^PdͰJ+#w Ec%cf4+gԅCР Z4b>Hu4"27҇s!e]c]TQ?ባ?NONDBt,#&*$[^Q7l2Obx!zxx sPa:XՑOIV([o֜҈ /I?$p9:וhB ,\}]S_x|iD× Ɍ")הQ*0VƌE'(aY[;$+ Z+fDw D_m67>tkઓ0}`E!6m <3ެ fs03b,\9ǛUA+yPpDQxu=K s, ˚@FbNDR=K7t1DS(77 xr -P7 AP =\t !pjgcR4I}??hE 2e=WQ 6r/K n@MC5+68@yهf_oWH7HISZU~]L5q^ztά@PxJDO0Û<`bh2/'R^ ٘, { C'*#C@kx!A/*$KD ߟa$.PqqK:,Z1gnB¬ꭶBnRo9XmUe^yYCG?ة3]j u!'̄"o&( "0n  NIACoFۇR0}JUNNDfiH| H%  v\dK-V-%\$[M-PR wX+ EP&C'ЧF@GKƷ  գ'a=Qb&DE|Hv&v ^7 \xs60oyĀ^ Eh?QzwK4445]v-[L[[]/twwoڴ 滋Io^ gN뜂.dᜃ'o/<ԅYjc-kCBz[Y%?MJiq}yt"ѓ_ 9LvN'FvQ<ĹY// STWZop! U1lš' ۍ[4L)?{vn{Q 4#+pa @4P8 zP naTT@Ԁ/6J*)n0y~FhA_I}gek9y}Uj Cx4Z=> {AEܦ#ګn! B/U3}ǘQVn:n^Sn)F&Ӵ6^[%O+CAVkI2Llb ](%?cNrCWGPp LEkFUN#r'n}&~Xh"Lz@}*)pkhgo u X@{s=^B>~ irLV a/ es=wS E&.76MYk~>O<3VoؚjZa>ۖa1mͫk|oڸW#.MIkEM(n\e')FT= 3{P&|P6nC  hdQ7o vr! \ Zpvr(B/D p4h/١!ŢxeE}C^h]aky/]|*߼ZlMu81g}:LC>PU7 'J]d](0h0 "Ankp6(^2] 8O(Fycl3]$=pZ}!dD<g<AD^e5TcqsKr^{9=``o>m?iU{rlNi')NO;HC3?2Y3%#,)½$AtbUOyu9=hMۍեX+pf{-|e אؗCi,l"s4(Cv{}Z[)8 :CGpD>m4s9bD>\.1;%-h QF/赒o&fx$4hYΟMZ4I@x.7B˜)rj@i( ^fYSf{ES8@q 2š-@@2H?I Ȍ/}5zkt| }@J̇]B 4CyM3P d^_5M a Ё뎲az4X]jj畒G[NaFcBM..E,ӈ$.V 3p`3`>ds?C/B j- 4 PM6g8VЇ -!ljUiD W{/_ +rT/OZʯ]0lASJ6J=wE_3C^9QYQ=Њ%ƐS8]vTvb gnyЧs]dVaD;?F)j\a%Ђ>Н5\ވ?T4 l\?Zi " Z@O#g.Uhȁ  ਲMmwCyܐ? jthUNFvH2 ӃV6> !@(CC0o[mGĪ֚6dnJ&nj0HE& ~eC)E<7>O1ozܐ @@m䵤)y#h$\Ll '!dPOӻ75'rً]hB]Rȏ3@=xA=`T ` fІYM*ЋF SڇC^98Q&n!խ쐮8NDXG]zeE08L^Tznj?}GY 4ޙ8[S؆$.^_(L)=AD63;XAF/W J0,ֳu]$IWMs ǘb,Of0U~)eU`rxT ֶov'ͭ)Qn .lnc ( E4ivM)d[ShJMFv"*J4ZHUKړ[mYQ<{pD:̧90 pLA6 270Nh,|.<ۄ84xu0B,c<@P@iCb)3Lʣc!CwßDTGP$ x1n;h"ƞIwa9ߙ B !-[H l9,܁:1X ]By )á#耽(ʣaj8i#-ZEX5i+Qu1opI}OT]U)KQF+m`>͉Q5+/BwԮ\3h}ZQL(Ȼhs.JxF^"p 9 [՟kٳ }G*4==3w>tu;>m$\ݐ`` 0kBQ%&@@c;I ߎdP6;XO sVu4`QF6ckߋzԩH2 ?¼x պZ/L *c/5}b ~ 27Bl{}JyN{3zc xn7ۙ*]a9@ 5Sl[K;S~zg7oĠ 1pEQy0S//CȆLpcO 4D+MTuսy5,-W!,dȔSZ DW'EGh^\쥌cBH[ozd|ߎ ~F!fa%i3Ztu@6Y:t",V"nK)՜i~,Ӯ%?9uv" &v>{1[Xޣ̭C>9_~mBV' u$gL&6ɮq?^ռ}[7lD"VU L6Dop1/t>l ,S?Ԡa.X0 ?ݡ@w5 4XA޿ w13~!hHs5$@ AJn{WK^P{Q%'1X8NH!؉Ru毨i0SX;j `"YF 3p0 d d1@.( x@gA룚rwND$<-^U`6=|/VÏNWNs %:T]f|Fїx!3g5~GPl`T)a)f992ùmL9lJ*m:Agv$Gx#KAVA2TljvvCP [ S!YyU?9k&ܟO:XúnTA:RkD{ FU.\iJuFے߉(գ-½O͘JS5i#*x@-h(ѠeV97Yz5k "I:4VbOv<d|3(sȥ'YE:GbԢ߈6|VRbr9H`)C|'h:c 34NB)ps?ڟ8YZk2VHd. 1,D!g!]`Z<µ}c*]j d#טV:hHEC\js kA ,Tf={Cd OcASYXΆR-NjH= Ő qÒu#MS'riGdb!u_ztԉh"Ck `{ !&T|'v+wK0Ӧ -ښB]_y;*#$5s(+1 uZ.OP y!V,#J{AQA ܀aB|;O 8G6r5кܓq\yFLw}~;5lљ6ߍPUڌ,9/=GYrv>=_4}BlG|lՑ֍)}ƒo "(ayj% 񉌁^ pDx,0.p-(:e E:ŇӵDp^tmZԼC:4!h3j0Pҥ~+&7<#7F1u\%Nd!Ý꩚9j3"\ESХFۡ4 ?mۈeۮFB'B!·p 7adN`ISsp3FS\ t@՚hBQ%>H 6xp%oIo9^HI>MF_dlLN^(bd 9LPWnaI\^'"=ꆶm *~\'_4ݏ'BȾ`PbFT=q L6Z83B є?Ę.7)8!pP~H}(@02gbkB.E>Xi{=3w ZOu;8)΃,apm.)UаWdmo>\ŏwjѤ@>;YkآM!98X.1I[0 -PU-NDHGt#IVVk1b,gqJq\dPC+$ хDjL]q̦]DU2I-p6W70 Nx1JAa0k?3S0_p:؀5J0>A0SZ#kI/K'مK-=/?TC+j^Ӊ \E/L譒 #ﰴon& 0`=ҀRYj"J\YRQ ^Juxs˯i`1ga71,d!J ׏OV zma V65mnd!Tc8AEͫJMح(eICXy&<*>e4ׅtI_Rrp3k0Б3Y IDATpȴ gGEN-`Fc=]qpaU;10?-*䥛YgEs$qNA̦'iY=Wǿ'T9[GhmQncJcl,n=O"lRmeW #VP!3 D ~NySȍfyMA7†|3^VB Ƀ6@=0\:t3Qǫ` s~IC[YIB[:~g;: h)ӼXz-N+{ p#TA(h$x\T<~Q/PK*(;?vL3i-_Gi>g0v1 s ? ddb!{ʀ>оlrA0X-!m<!j}~%m{W)1"MFaeAm_f6ԑf4k Jl/*cJudxІ - \)}`L+ì5uȎ<*jEDKiқ/.B-\a>0LZVP$(>@+h^y fn@9dW AW]]{zϟ|?-|>fzA 0.#+;y=yaBA.UV#rG7 L)|H%)xn E0ڤ(L]@̇})#4oJ |vYݧ@ ZAגt΃ېaUO7;JF=d`R3h4 "R'* t#:pEx30FB%& Pڌ^a:|cM9;A <᳁059#HD37 y1x<|HJFxv4l?\nZR]zG7"Hל"i I0 6` pр/9 `2ln`@1A Rp7-NBw9 ]8J:H6NֿuO^ԓ\noSiAÛWS8Ob放egasy{s - )HZ#ٷKΗ6#L37Ϗ-2Yu@p[Vn0/jcJ"H5[sȢ;G@zClp) /HEU +,`& Y0TC3~Y oqG@B<<8 apVԔz!F~Esqr>` ORL)î!MZQ; 7 K։6գ|8ߨ1(S*ru`(wGs}1tw')}'q:4ԣ\s% oL<y6`moS:X!SCȃ `39ww12摳 v@5tC0LiN{-u1< Ol+K7LPZ1$;1sJq30C\_Sb0B9܄aڎ@p[{G&BozSj(`;ΐG;Tf)34  s=2wD3:trL#`@yO'Fթx vv4b,M)?:E],@[Gpk~Or=rFzkDܜVkf6T/0y7+=NSB7iE%ņTSp@GɼmA8d@;XA o h .]f4AZ:' sgN0sB\@WTAj0>u))%EZ?[om6j`&v"ҤYD ~͉5c*v\ %z9;դٲmh!ֱKT2㷔o4RDg4X+5Zi+=I JkwXS8x] }j0ȹ!`#mX Bȃ;𠔈`@Z\EezpP)-?c_{\Te ^1 hme䴹am@[jԭ(Jjw۶H/+A;"w@n399a<̆(tlO7br߆?\  '@ &^BÝxYͿ8oq݋e-v9?yy'YW3N7󯯹rbñ1{Υ |BGCdf2wo֌0w3Tjr{ruȷ{73ϙ~FS}H0)xT+157~^Z(&O\W3bY`<ʎw|gLdjhhv~a7PWWЋ7ovzqrF_;' \ goĞSsTirj۾P.w$?d;uq{4Uxgm/1GO?~2UE DFKڗtwx\,/1dJ2 .4˺+l#>&o|z2Qv/_;T VÓ` <bGtCs10/#nױ p UR]Op 0|i4/ CPoYɅk>9ʫ|돆jsU+G5K5k\LCar u pj!; SC H +Q xç5k.W[g7v|Bvؤy.[/h\p>i|7;_,ɮbJ5~d*cǮ0цTONbgOPU^[ΰyψv+PNma}MqgGnP{[iwzWI^?@(/ge+y|ŠW>!|ƕ9fN灢0!dJ(}L~#J[Ŋk\G4߽I$(A5)O|Cw7}z a< m ŠQ'CC1!@ Aaǡ >{> S/`4|{A57/r M,n|,8"a]wFt&sO.6{)x]zb' TND 8+;W'}͜x}¯a5?RAe <0YuSwBi-d^~7ӰnGSWYQD#k/򸉏3wՍz/pp~I !'r*sG\Wrʴ\ihW?ZxceF$fv{p]Ο\Iw4ǯ0=Y#ʽOWh$ԆQA|?p̉NNN͛/^XTTTTTTYY(555k׮ܕb &[X (oB!S '=ZCa2~?m#|Bo#[b0o`1bКCSW\_LNoxk. t0wraſ>v%*kË G|>o`7O00KFk;p-9#3a&l=P:STPX@Q)Uw:2;=fi&~r|wkd.(lj/=~Z 'a# )U,` MM&,>A\0/HYZ?8x{c~/L!.f'Ű[ O=̌a lON/EDV B 5 t#ZG.jY~J#!CCNG(F~WML [xI|uLN|cg7m~3i6;H}Gxqӊ=6ܙ{\Zv x矮BA(<5\ʧ{3r>0B\n}zт٤.O/5bKgUoۓi\NhSS3MjCɤxk<]5 ]ٵ聣=]]j0 +,,>r$ UUyH77ϝ;w74fLޝ(>zAs6۴ `< >}S8_OLr SL ;Ɉ 0@OK~ f?|=L_zgI3p)m;mW4q.4Zΰ'ݦ4u'.Ys1߻5Շ7N3<7ps[~`Ai IDATeˆ z{233{U.NMIт!U8UV_(߭V8Lz(@[>$?t-72MOVA-$ȋ( pO(|'¯0] isofXMn89pGć)+]|(.Ϫ=w,j`'̀} i=$2klg&vr gpkO;:ԥpn `#/(˽gk8~Eg}wp4|L>?%n?S fb7TWSOEVyPkƤqON7eOT_u5^Ëj{k Ec9:lwWHeGC~j0MᾃمeJV}ăn׌" g@:AWZCLgp0FV-0 >C[0/>XvO?mM+V_E}?Ϫ~eTG~fVknqr_gҔkM&YUUTU5(egvۄ _מ9ib' 9kUUm;((47](bnۻm^/Kz>1,muCjz^j~iӦM6_~֭_M[01dLC45:T) yP;\jw~ϟu3q9Q7~h}yɷIO&P0FExp TⳈL"Oe(/̓#Eya\4b'Yw+`9G=DȂ%PODռC>?˜/7LP /W&8 7CA0TI]a8 y#F}^4\5,*/!?US !!ԿAxJ@Wmx>`W < EvFtZnR\k`4< PA{} Fn{ PX?9)7A4bH"CLO'scڂ_xPMD!A|S_׭[J*q VUŲG-cwa{PE=_J"d u›(gt x,`t>+W_a3?F+KpaU-en͜,@w9|4Om-~te#5UM.NU(|_WE9(/yuPfuu NT]{͕]{ZY[hBu(i܋9ךL&N=jJEEe% Y~[^9FyErFh-ǚ5k-[hzժU+'N0QޥKMmA@&Ph~ *c^cj y}[ݘ 뢨*e`LE^?WUUZs͛˙inY0qԌLgURLsM~`8svdvzV콘Z-h0)T44ھ}V[vpv8sW+ jsi]2r z怘 mw][ *]=d^v¤uڪ0rHo琢_?g,،T|36ãD9f=c=F7֡\Gs4˧v=>:CcA1///442|=(8Tgggg5\|g555RTuK﹣{R sTm+tX-II*͙o"->mOv)ݞ#R]m:WEΜ5LZBhW]P@.rK?7W!{_)g?ťt\}Eq$mɋ˜j?G oUK[/TU16y{64krב.W|ѣK*LƻaǞ7jI{ǃwhotqknІFg'MII%QSN_UU͟ea6gMI;iϯΖvEٺkmsg'|c64^m6TEtp5O4ݿߓ.ʼCQD_m}]x;q_ń MUUU7=C*+}'w┟kaQpo^>;Zr )ᡋ]ӥe˖Um]!ҥK;0nц**.|ϙK'϶ +W2y(Ť(dBQ4Mӵ~vڃɳH؟,9F7hFsp^ %MM%F(-2 p+)rucFcɲ ,KFAo{&F͉Nf¸#3;6Ek/XZҞy$ +f(g`܅_-&/\y3tVThjnPFoW:롋_ oCô^&S١M@Rt [Utqqs=w666t;aht?p&;;^MD'ꣀ( !'虜:ohph5U4'iBf?l}_S^Ut'9vjjjrO*+7}ٷUZwwl}F '`^ m^w֚( !QO^?6?5^7Di{ϩɓ̎,--kh25rssǎ7n\QQQ@@G>ssmo`)u^ b iPa(DgH!LSN777L&sM}-EzFqwwa'ñ8l!b,B؀\Bч,<8IB!l@B,B؀$`!$ !6 7# ΘeHM_2%psR i@k\aܕܤޙ _D'͒cž2'**otpRRİFG=B-I]0lˈs󍶮Pt®$Sb[,=sv9BQq p\a$[FW`ZX,#It gvⲤvÞLn?ß !\x oHխN}#pbHϜEe1?7<4ֵ簝Q8P\TqbHmMiHv9Bؘ$.D͉f3rیfHmRQ8P\TqēbLO8+s!ݐ{AwS#vߊrӗQ;Ii-D*ps!ݒ,B؀tA !6 X!IB! HB!l@BaB,B؀$`!$ !6 X!IB! HB!l@BaζUVVVSS8999B$ Xأܹ/tww7nܔ)SOf !D/}ߴi_ (^y啗_~7mj !DO5`a_6mdsmSQQqwyG۪z}ǐt[ף 80IŽٳo>_;w~g۷o?6 ~}ηeIB\vdϞ=/W_}5k֬YfyzzvzҐK <6%9FGuQqz}+!c(..hDFFvxʘ!cwȾlܒó[&ed$2 :1%tC|ZvxlmyI,n-ɛԶ򶼳7\ܬmMt>T]Ry33/ӖFGtb"I"wr֒cG^J(.. daaayyyy@Xٟlz}b4iM.!;mh\-qڜk1zpV1'['cȹ_ޒZfw9Y;##i}H͛hBbtkm,?&֟ wuv7 29Q@Ԝh222-gݦO6'튤.uօw|@Z.ukyNyp#/(}СOu_k2OsIn[NbL9_=kmmmu!'|}m. X؋xԩ 8qرc;dl3гc~n'Z~:l 7W ֑DT:XO.ha//뮻b'N0adT>]ҙD}\\Jln|ZuR\;D- H;3M'Fg$e[VիܲiHk/,͌Ok|eU;=>N) m !zQ웵Rl4K8==}޼ys iK'N\hѭz 9iJotOs$`aw꫒qyyy\yĉm_!Dת;U,TYYYNNNyyy}}aƎ`J !B۰k2 Z!RYYR=~@HPhYwB!s>߳Y+UsVSB F},bjrhJJD?ABq>>f*7ח, 瞅Q~˖- ,`-oFDtW`WǮl_Tbe\U-ՒS}G?Ct6v=|h5k,[̪,t,+ x: T*`-@eXG]-iaz>1E!b5`mHXxh0\ĩQs3ZqΫ̡oٲ? *Xk`2޾*+**+**|¿bIeŒʊ;*[/rRr/٪֜Gbm'~具lb`aa`F}W>}]yk >}Nh9۸ӓkWock+ߍXur{@nEiLOXmTݶ9),_p,Ewۏ۲/ + 2DY(޺knPkmy{6?TcWg`2^;邶1 e,32 Z>j`q+D<Բع㷀i6$Ib3 2'>ۚڂeWL#쭻ƮU֖`#^0^%LX^a:}]~PtA5k&v@[w+J!)|I5T =<}S&*X;D==gڮv6Vוq8-svr0{fv-D-ςuUl%I=!]нX^{G]Щ:]F[ 5'l Ind=&[O K pЯgߖb p.8N~z2R/N0!;-N:os!o}Ƀ~{Cw>OvxÃAXgxN$ž޺k.9]{wIo ²c}Fuf.]b_}+8_>{199ݸ<4<7HT.,/?ˎ.[BJY;3[m+c! j_g_btA^6hC²ְ-#zNm],ZW#wmٮkbK^?|2t?_WYף4wOw]1}˾*Tv(wiG 8U[{cSⴰ(vCNg^BV|ʻ~Y!7LkOQ'j$ɷ0[R\BA.;׀jkJJk ؜ gCRլT֕Ba3Y*jξj[[Y>}8Ou/r(^`1|bPJUE!8X,PKml'MHBAz-*K'`!lHMH7t:NײªE!Bt9vdg׮.T.)u1-,Q'm4X(B sZ]vE޿vAA5-8%Ci|kY>.mv+ʂ9-vy "WB88%XXs# }}t VMưlٲsoI̪ W!+siՒ.hֲ뺽 l =AQdB fqJ[QZ0ֆsPa^Zb^9F+1wd@_uAd B!Dz Heщ8x2!¡^$cczt򾛌A!p|]yn-#zNT׋^!6-k-3cS2BAǓ4`'1!;$ !6 X!IB8, X!IB81=At F@!!%` I!֫1X̘u(B!< ː6GE$7 !|S9۴ ˖-3ߐVl2Vޮ*co2Vޮ*co26׀e6$!mZDlHB!5G lwJ'T@5eۻFB! HB!l@Baw X!,B؀$`!$ !6 X!Ġvs>kB j|ߗWy?_JN%m]bHm CtV-=CN-X_kjh}4`mokt5._,44tw-_7rlؘ6l]^`H2ږΎΪEXႥ-nbH$ph>11=!)76%ցdU{7nL&Sa1?7<4NDSb[:Dgբ6$,<4xKY6,k^e`kܑI9cvxjž} o߾?<0 /;,EZt sgkK bzے>vI:NK5 ` v֭c͚uXA?EIDAT39L w !:1=a5˓c!X@קnHH7x4m9z>%6w?ݞ0 x񅤠A/ou + 2Dٺ:CtV-ڶi}S5#Sbãcf `gcpww_|mSYD-AxlJCy V./Q1:qGfvvv. MIl0YkeY;yPٶSIt> r6"1!60]B!@" X!IB! HB!l@BaB,B؀$`!$ !6 X!IB! HB!l@BaB,B؀$`!$ !6 X!IB! HB!lzIENDB`DataLab-1.0.2/doc/images/shots/i_operation.png000066400000000000000000000375101511411446000211750ustar00rootroot00000000000000PNG  IHDR?! pHYs+ IDATx{xSJ "cCA\ $J4qZrj#'ӽUf{kO{{=l[F5fZR8-'4 ^0X$?EKZI,kdyM}U/_Q9p]w0$>$AwtΝt5dɒ,d8E( +$P=~]} rU5кuիge\"^Un-:rauk|j5kkT_RxY"pE|.ydpX}, AH_G''GGo_N\~}f]za_#&$5'SC#$_@3o={9'Nܷ/IgjF'iWu;X)3sxmF:B^PR򅒒OyG蓕;vTؑJd{+[jUB ebZHd{++uJ3wc0&{[NX\+& .&9in)e~5FT9$'l1ޝD /n&#󫱉r[quBQkfE9BEK[>( ͂619M\+H!`Տ> }ܭq[~ӓlg\iF$GM*+HIgS ,.oo䘼Z\(kF)jgQѡǟزw>d_:J:L835c^ȭw'כo6}*;j ߼S; LhÆFq+^hE _Cօ jUDž bT## aH=F'ٵGc'20.1۲U/ZFãׇV**ew@{Jf-UNX\4uuP5*IVRᢢɯ} n<>5U];F#d$"uz͖~)貺9l-Y%f $y캕+쁻ﶗmݚ\Wd{Z%*P1&}Yc=9ӄ1ۭtfrJ8o!3i_L>urOMBCoߝCf{ixdN޺ު(˫-G5c=&Ĵ s(.\{L,bT33V(J|zVPpb` >L2"R%No:[+dpxEreLkW䔠$Iurcw>"#Od+udD_Խn_v&ו_+l"wFi1&۬``d{W%sV7盌R?XAF[r~*}ZUUU;w&ٗVkuYxa\HgKbi0Ζ^zB$[I7.YL`n+Mp$iԊefbQ/{JN`ظQRJ\Wcs-SF5T+Odi'HcdJ6]Xxa{rDwN}o5ӫyoJ8Ng4G$MV pc,DI Vc5y*_%zEQWDI^%!~`zzZ&B2ܻ[%-끱1y, A$_?… +WTաPhzzztth4!Hfݺu]jO300M6s,[[V`.-S=3iY@kooU\V33qNN0Hv>.PC=( bcGGGW]vRyE+~II;odT*Ն p?!mid/@QWDI^%zEQoTp^^ ,5 n4YV6 CBID_tId֯L?qys2^c,WQ bƍRhuJeuSTMu ߎ}n04kl9IJq gCD2zK7n|V z5==G)U#yVMΗxt+|WYXE̬zѣ_ٳ'WY7tlɳa{wUjlV &P"T0cǞ30Ϟ3~S`zO/UjlVkʷ&^j_r_?-[齻v3&0euGi$s5fl'o^/uSMLO[liE>_HJ!Xl"7O=5-h43[WJ/~Sel9LLMįrl^)fuSMFaEjq,uwX"%NXzƍ]fkt"^99{H$>QWDI^%zEQWDI`XDI`XDI`XDI{E |H[.^K/T^^~w@WWs=xd(9Pt`&yZMG|_xq~~~~~>-|.FV4444T@ϥw@7HƘYڲ~T$sN)`6w?<{W]#KCzF]52tpA w7wo8w@6r2}Y.\`]5 m~"zl$.Cl 0%<-+/<Pa>=wK`I|&zkaȦZmi]=%;ZmG>ž2gI< *knn.JV{zKMf:laE=}r?cN4$Ֆ?TYpX%<" ""J"J" HdĜ,Hͯ O~pzp[[K5UbǒN/+} +w.?Q<poeeZ۠tZ+Jiӻy_#o)uv:#<]A_!uTGWMEuSltYkœq"I.UU.^X]XyV7r9` ig?Vy]QTyyBW N7n6X$Z>D-IŋQe"~Ab3/~B$ې~ d/@QWDI^%zEQnzꬶ,+'I\ J( +$P@"J( ( (84'Oj;uJ D2 y22"_ A2C-ecNOӎTpӟ5fLK`{iF&8_BQM\Ļ$+% ,.6R\D/7.f,4cg167 #y'*U9p1UmуKήuHad W:&5C*r9ss`0սz5TX⹎iz{sQH&Ib.*~'$0&*{vPNa؄șr,"[mYpg5O:[!&VG p8G[W'U7oD8z͇gO_r׼13yal /wV,^wM;H=uu-fn޺Fh(瀺j' {)9a$,1ŌMJ/KW$&zⶢ&P?/|~x] ~blrӎbVkW+cN%c~bR0ŕDfk02]!ѐ}~dkIi4YMQF d{E2ZeK3+Vlu+Wݾ=v )7X5 [*#mc#4UR/Rz ś~gxw{b` +arv;MƚȺԠflnvs-yEXe垷s5L^!OX?q #L;XH,qA~|VnRP8rsdY-Da+Dܯ( +$P@"J( +$( "JB|= ꏍ%4,HFu64tǦ{QXGU=WI7(TL:70Ҵ 9Co(ʭv`l[Q1Hupd}Z[}|jj2g֟ϙ@.lijOx؝:[q!, ]g>?w /п5rtJWdi5 1n( .? `Z5)fҖm3Y$!+CC[չ׾huEl.H+붍xhN,D5Ph{- !=mDH+w4y 9!l-fS}˜¼%AF#>Hj+41+˜B_P Wܯ( +$P@"J( +$P@"J( Ece 45NИ(e~o(KhEcj6&b(M\5all=CiDVcڍY+HET2zM:[\;@˜5)lxlfZf-F#hY`^ C)Z00xdRTcJ"_?{%<@ uX!"҈cԥu$&a^$MY20:oR#tskio# W"?QX H WDI^%zEQWDIHM W^@QQw6QpsO&ǒ:= Hrd[+07N)5kN{l W/LH+;eNzv"6uYjh="YgVEWtF%40mV7&!-zz:S%XQ'dnXou=¬Ql\Wb͵t*f^[ql«3!Νw~`~>4C,ius@Z&_o4V?\26 LQ>T:(y1/H2`YFVaS,IDATxae:+ݿLW]ZJ* $](. ,APixaed۽VWi/#Q] OH8I;xDcq"A@,H(BD-Yk#J( +$P@"J(}uYmYqdzW~O:@QWDI^%zEQH, I!Wtk)Jf & Z$sԗ/)xӡ}͛1)J}r&ƈ ,c(4 Kg;y捳guk_qs*O$r5/߾v?=̻/x땪H$ _JZtiFV6^gÆK7nНcEY2GRM0>57<\}{9 qH@?_>Y,`x\l7aHAI+=vdg0^>wnUK;6^[[$^dlI+*z-+0E@p|۶o=h|k|' E8"cBLJ5% X)Rѐ H_'&[V,^aժé83:^0d؀IWD^?ѱ&wߵlYKRUg7qaH+(q]bOoj4ysI ##)kaxVƩT4L$K ?=1l"~p8<:9ɝ,/n(ltibʅOS|~ _"JN"~Ab?əq?!m^Eb %zEQWDI^%XDI?QrXı/\v?o7&#oDC]8}:MVe!z?걗EQ-m*^#eTk,66fY,%Q_ESeݭ*+gaшq}~@aE/4zLU6ˈp8<>5E/_ ~I?iqiX7:Io 9ޞ˵_ 8aڱKwgbPBn͓FFWiV+o9^[i_cU*3D&e!uD].}|cPhbzzi^cI66;V%lͷYGBX8G\c=ṷ9EHgȓ(K:MuR _ΡB|="/YXY HvzEQWDI^%XDI?QEc%I,M$=\j=1l8f۔5}fɬ?tZ6{Q wl8f#m&lM0 ̒I,鬮ӻyt !XnȥC b:d =]hoNNJ[x_)oxhE]&W-]_TWi,` $ . ̢`B]8X" "A"J( +$P@"JbvݭW^@QQw#W:Ƀ+zxSV?xoV I!ׁ[/N;ch4{crtgp"~M\|._ ?ӧO_|y=_C~<LtL smIO|gוT*FKGh4*jOV74z%f;f,1"c@s{>5j4P(d0BZ?%DREd~5mL\xڒcǎ;w. ޹s}}}&9u-fO3*p$ "3}kLlLL%KbX)^wiڧgʕ+z-[JJJ}`g$^3xJ3\zNr!2%?k+b2 ȕ cF䐋346\dپZG,nL7F&vK5gEGTL,% 7/ܜԨ`n_e.^̺@ ~GK\cgVFn_(2;xx"A"J( +$P@"Ji"D %zEQWDI^%zEQr_i\ dI޺ukxxX]wݵbŊYH"k @y_~?>v/b~w}Qn*qFJJJc 4~?]O> NQH,IصO]p(+B`PyE~w}WÁ2m`s @.( pE`VTt,9PCMf`e%zJw7Up@ w`pA `ih'eZ`=6TH#ڌ~XdHHgϞ-((XdK\Ao,z,9D jI @ 0=tPK M VhK:DA*f;66GGGgڗALOVthkQ3 `CˀFzyv?SXA/,^]҂wނ-NN/N`h@ AE\I[c]09T`1Za~Z*,xkဘx\~aG>|) $qjժ˗5kRN[v,}-ĸ^'%V.ur$-x\@ 0%zz:ψ34qx={9rd݁@ʕ+-Wq?JI^RWX×wzGĉ>G}Gnܸ|}k3; OF]hoƯ+ZEV[=1!]pNts^zJv?yR:Nӥڕ^;T__O3ΒCU+c6^8Wż&^.s:8L V@΀X)GNJ^.Ȝ0?B"J( +$P@"J( Y`Psme˂65 c4O7ߏ_ZS_6ó;@!P \UT}L1rWJKÿz36 AN~=`Eq n?i"8Z LUfRfeuSTMudI_7 /= C###i+N連 cos\m śEYG\avXVqϙ3_yo=蒙mZQt[v29ܛi]O}l#;aMt*;aq%0ufFtH&KcRɨ^u: A+6oQwo^lz"U1'7d( V΍i*m5doƨm\Im_뭥& Kd^zLBWw 'ޓnz=@ #Vkkd̕:*^kmbMO*%_UQ1Gk֭L'ђu>OҀX$[!"Hn(CnNJ[-*=JV ^q 9^ʋ/>O={pw|ͱcIwZ]WDuZ6is{Fu[޺f]%BXE|$f+=zFt[ ݦU%Xq U?~۫.Qu΢tfl|R顴-Am`eJ8 ^mU*UVyCgpJ%bb_3t.֨U%Xq ]t5o#KΞ=~ O=RBkL4/^|;SSmob%AQIU j.\P&&&Mx'Hz LoQ,їZN_( +$P@"J( +$JWjBhF D \ J( +$P@"J( +$d߿rW1+q$w` ĢRoHk(D+p8ٳK`=oݪR ֜> =j\Q #چFFw;WaC o>_dǃQsP&j3H!p8^~{n 3ߩaur䑏>:GGN OmvŤ"[5K5DntxMYR. 0 fl̈́ƀ1 =-qw.8C1Q20mH-o]oEQk1؀q6֦+r[Q2tÆ7ϞUTg}U7Ϟs=3鍍vj\!~I `bi;j2u$1 s^ڶիG/\QXMt; ^pzp|֤Ī1IFdNd>#WJ|wG.]:q9OWK&aBF]k\J3672a8 )nc@8~+V}_;#PTJ萑I!']&E:[.Zl*RJYTW21 sx7HX8`.HƑ]",w J( +$P@"J( +$[.oܐZ*xB2^sΟӟL'lO{ 쨺uKN(&G!Hډs7n?}_:;{g^z?('gV|_;a%U$rz=yޖ˗eyyCCx`|j'|pr>וfqif)z9>^vVT,,ݿZ˖+G>6ЯHm,<$Z^*?ҍ?5>?<\SV~WoX*7rCwRmǛ{?ocJNwʕc/m5742N>V"2z jJR- Bp8?74jt( śio tZ=dݺw_=g6YL%קgիhfcEOi3=IuYcbzz[AҼ6n\xq�FMZWi6ĜA- We/|ٟw{b$ya]ee ݱ}ͤ& u)Af$4˥$_qARe垷82;cscG&&^rEl[6nWzqc8Mj%ŝ ^/6M@%zEQWDI^%zEQqիWg}d!PTTϮ^=!HzQWDI^%zEQWDI^%zEQWDIdRx m$]6>FL? cS؉bh KⲺ-L7Ϣ)aًBb C F LK~D˘̥HPN'y;vA=Qqbttaz061qF').  KLhu)؝v@q`3dX\FBWDI\APAK$ IENDB`DataLab-1.0.2/doc/images/shots/i_peak2d_test.png000066400000000000000000006501651511411446000214110ustar00rootroot00000000000000PNG  IHDR\]u2 pHYs+ IDATxw\ǟoPP8{(MJlZrge8R)gZjD8Pp\qގVz<>s=9~4 , ,x , ,x`qX`XXB$A]2tenYnߐi7%D5\?I{=~ooWdh7CBgq ;aqk>XO+2 8ɏ< @#IϴIOkݹ9{yZOM!b5{t7$>Mm}PW6ndV@pBHSWr5n5=)yYՉ_ ,т5|?-Nn.y%C ~02(:?$]HB1m0Z!n@J@w>mKWаFa{i;D$w2k$a.x1G9E2JNe7)QAr?>㣈 b@pCN`q>N ~ т$M!)+yFh_Ӆ]ar{CC`&%I x6DIoo#ِAOK@8k}C9G '<}]ϒNX s %x >?~x&%w'e@p04`0XCDL!&F셆p!Dx(pc_c|ywD2nϒNXsOobP­$B:ظGdiC} 0.Qw]Hx̎?Tc/|"! ϐNX?Kтt۳җOHH$Ctç' I$'䈽Sw7>:1ߓ9ϸNX_s).OK^dK=F_oF9hLyIУaY5? = ͽ4y6wMO^NzL ӿ>>V[I< HXdaU-xjp4i e?:OCt냫=03ѻ~]ӟ=2) =2!Е~>Oq/ xGav\xx&,k?x9n 욀g Iu $ 9Z` At :X,< D$2|H9Z`MЪX6 ,iᙥUv, ,v(oN ," D'&/mw=!+2 (rjX`cLurz5Ҙ:u*BOs_? $D0ͧ! I3 , I Nɼ/|B;kdNG+ , 3¿=Cd??^1p?c,'F F0Fo8/I9} )N"aF >8mX:v?A5alzi?k71zA}va{&>بeFyuI30`(Ef>{0c2Xm΋(h:f{<0΋7 #;:#G/|BHH!!)N'H)da fhg"ϓ8 ~25b\ ֞,~@ Mx w|vGuyq28-7zA]I=D!( E'l#6uR؍f⴬ ܁XT.C,;q_N-((H^@ X G L|$hg6Ww@mW(4&}tW(hÅ;?;z~5V-2-P:SR a1)s!d$z,W{pѻ,oGB0˅SǝX.&"nc:p(6w5֘9D.jDﯲѻ cV/ Ly .Y\ބ1K\ v@%`>0+ܷ A ^C xð~CS1 _|Ďn mYIb#!͊Zp)Vu &g'pV?i)v5ʷptW=x"q{eQ(θwx~@w^Az({7?C4ߎ;wAX ݂uc߿Ȍ]vsC Ipcb)f+Ҽ(MF˪|Z/yEHjA|/w8Amk Рvp}%?1̱ܺk5 A9WIAbvM@4:8U?;XR}i ?٫soܴ+Uyo¿V},럀s/p䈽?IKY:5t?4́) ijY@8 "Z\ .  f3!PS(@#X77>):Bb:lTWhl@qd,%?l9"]vp0.D Dׇ@y`+ ǁ*‘C@]pԃ#A`8@wuPv % >pբj[#bc=a&* c /w ĪBzi$~btlr e: 1 ۀTzw?eż끶w ̃.PHQ5| E`E^:OG=PQhxWǨ:)C &MD LmWh wn!8 q9g\&PuIppMչ> ˃^tKc/ЅK[̌W2p~wU8>W0 eP# A{$&pjOm>_#:";skb);{n ܁Mۡ0CŀH&eA9 4Ǎa (}:Q+1pB6pc-r׹98Y'w p+0ߩM2T0vB3o-)s`N~r^q`N+bItmQa` ypOuL v2a 8g޺]v1΀jQHQT}`Z.̞Ƞ&G74n]iii?[-EҢo*5",q)*"we\0O̖fNpa@/%%Nx]YJp\@aMjOdr-(aE䜶kPG;^"B6R}[GLה0SE>F4__o/"TCNF"^5Sf"pOxU,aH+K M}k΅"~I"JV L==zG Dha)UI_VU"B՟;6Kb;T"՛n`y\#{̖/l!T6͡"Ty|D*Q-%$nlEo5k&aUw2piΊxKPɜcD8(mm"47?ԑC۪|x pÑ=\!wÎSj@Tx]L!ܒϓĢ[0yp@,\!}N ƁFS,Mؿ 4P{Z8A||c>Ïvg޴1q(w|'J(-]8@c#bҴKK_a e\ȁ7p;ӝZPKp^/"pqU5.̂)@9}le4VTs=AӦfOܶʄG5o7kP4WQy; <mC WϳK\ѓ!tnȁ?zrs(_A^`le(,J/+L\$C T~Ji)蛃U`&'/"rm#<`y*94W|F$<8ǠdxUHNƋpcQ4Laܞ[Τ0W(ηC4e pGjb'plC6\_ e!Xgn1R$@Tp W} m)%`p b}48 d%"t oCA; `?S[kS>(up R#ܩY(x j,AQDjt" 2[Su 0|H<+׀@]_04%dE><M`)r6| mٹ G4> /ëlΆ\s$QBuxO`δ|2 8@JG4ԃTz! *<-\&_ [ 49iDY0,wREO-17V;ϓI1ՆYvZTQo*Ԃ?)1gO=!io]yZNnqE))qR\.(OY.l7&\&]2ۤڊƳ%JўVZDGwEֿqZ)ƲQ8%LԸ"1g4iJՕ JUj'HEE}wȤzgږ&sBX!(*EdR>Ll4yW DѺ"#d'4VZWiTn/Bϵ"n_Cu#\D2)}ER\ E&Axɜ_D=rJ^lhQuh((;Io}'ukҪkEcgD'/yÔY3c'}~i * h&.]`[haPr:@6SU 2r= <LVr P k vʹ(59z&Ca6PGC>M?PGmtz8Y]wUL9am*V9ʍ/ IDATKqJ<࣒B;X7p8l~M3I:wCv-c>^p "H[U%]15kcMί7JZ /Z\ rBC0- >peGih)aSm΍gӰv/h [ 9Z:[w 4ڶt~[i;:(:,) 5E7YίՁ@,T䌖do%xn bTQVGT7(W$*CQ3TT}/6} `~`˨caqL6PvV [k?ffِ:ΆT`l7(jzpfZ1!P)쾺o hv}^-t Jf?ӬˁtN'N%GGPN Rq1 <wsb]],^FǷPEf<'+sظ1|F߾s8pȂ|{ -݉*[uoGS}e$b?%Pv)B+9 "8__-Ր }OJ-5!1<PZ֩ZJ(F"3QJ uٵ5ZGcEWNOg0ܠIZHQڽ k#J'$k DAW6C̉k,H!m?G_.Bw87TiZܐEp|l2u=YBv#N"oW)Ù U!,I()=ipiL4Ypˆ7}֫JۇZv? p3&s:=f*1:vZg}U_`\ѝ8sY孠M{v.PϏGJjs)Y%8\cwhKlc]S:PD ס"GDR)-^@-nPprU9/ӴqpnS5 Ep),.Bjwwjed{^+㨱ICTV9zXGsPdOA;B[Egtqx]F@x?`-\BKR%Tg8 e~F>G" w!n}e2C@u(BV2^k|~/2%_й2>uVo!#l? l[W[sp(颸6+h~^%OP) 5 uЅ33U}V( +u(}0f0|5F2mQN$m&$gCZPN׽2B^ipsqeR@?+o]؈/kgxΟ uF@S`;x0\h _GwE]Ry0f!iiTy }Z|>iVP}T${hkaNF?'=?#:9Q# ɳp[vsn= u$3~ `lhZ&6ڧ\(Z%#MJZ?)˨lzCދY95]DFmԸ1x,&7\۔,2p=| P Mkm+$ۻC @K13c|ؿq .EauqmasJ+X[@@e#Z\z IWz'ul='sd{,bɪjJgPВfl}QByk{{~w(Z SI۵}[ѬF$%͕;;V>̆8UD钺``1SvCZ3.xM:Nz@;]%#K|.@DtGtsFo]Fcn}bCeSw~Wb].S2\`c?=^nU˺.~ޱVL֡Am]oYIA,2&@\˄M%GfP烽'USd"WyρXup*6x5̓3sRuXZ+-aVSSߕ\fk짲v`o1(Qz ^PW5ޒ-%Px[ ߳Dm"#5M]b4TH).2R]bVƌF֓)#}p¬Z)ZDcE& n(* b}cƦ>1cYP k ӲfgF1> Dޒ<$܌-B2Dz, NEkEH%?ь߬i'+4sT5E&kLuSE.3ֳ,Gkdjoj 7|o H8W9Od 35ЌgsL"x*3:O4&:_%DŽ75"qq*O h{9ߘqao ~4ƻI&f a3Ai9#\&kS-0c^r.ԛqzm%Dk4D/,qȼ58x.t:%Dbk>v)WE*Z²_ҢwM9W?PBFw)34~61F+)U'v2kfRSBVH՛M9'Eeڜ5Ec4V`<,-1yP#L֩њ)bZ"(5V>Q8yPNѠM,|rV'VM jQs=٩p9fRO&LUO4c:/.}4 9cIRyTXD'CM'& /qL>0v^79'CM4 Nlhhzw @N#Ӹ!ZSk:Q4M Z!-~&(s!G*a]ܜ1psQ Q9ߛEL* ٤ܵerK@r4i3̄!.MH^*rHb5鐪5|LԙMuP4?MJ%5quaK_omK5[R "43χ;>xa&lW/Uc?%DvBR3EߟMli4yYmQߔY*h|e&,2?EjƉ&`G>t4z!2\F~&5Q]bXJ(SϪ5C ۬'BmS3MY*I M=5cQDAj>Mkkl~eh9>=dx˥['\/sk@) 3s9YIif(7RP^hUc{ m}^pt\=6oNTO Qk=(`18Dۤp )!N9YW+4Ɠx޸2P,mPz`Ñ(C;bmw)u ʎm ū%rhCn6dBulDžk ?Av#7;@A..zRʅO~`77:YzQZo }ʹOqᗊx6:] |FACp6niI}s-ohm sl6L\=B ){il͡. hzE aڿ@>h PB9Q=ɢ x<ݓ{BS93>̣BLstE'4zh!Q*]1{Y@&=Ut!geiJ VCJ.y2Wݢ cJ&5]4K1v<ҬyYIt8@w"5䀖6W7k^ҝSE]4Oz,W;Y4YmNjL߈PCt<_,JJ6e(F;zBJ=UrtIv.݃iLʶ{f]srZwnܐֲJH ӲڲOw7D;"4w.to{=MCWd[Dwk[5h?*~2unlRGaR+ eEXi2 SzSʻJ-4)voSM}9h(껋Kܛ# mw?$Y-)JICک ˟s#:Txs.U6c(#򁎅ե 1'>L/! ۣEi>(XC%$^sQ};:];l^ӋfL(m`,ciou1CSKޔI Jߚ)z)ReY'YoywXBӠBc%}82 y;4SnP.J1}H}k,%9R| { zyi)ہQw!Q`&&BϢ@EG8\[ +8C%4" hK~W CY2MDO_l|}g8/@z* ¦Q/a7:xæMzYĥŞmɄmB=Htm`m{W.sX= o/\UInM|b9j7 'qG}q>.0 1UTx?]qo 1 ZahG.<€MޑdF9N"k3Ż' <`LCg8Q.LP:6Gk BjvT+ |JO*jk18D6PjL '7#j_?V. i:s`U 43EʃV VJĜ!&uUZ/8?bRrKE]I  73aRBD;DJ7* RJo(VdrFn!q8pPJ]Y]P,["3̔/z(.7٢TB͂zSeRJͬÍlR,{0iiJ=RDnrN<}IĤzYD嚜e&Ѭ!"e^gdj"7p$Pd t:$&}$&"QZ&V걂l؃"3O/*֞aٖXC!&5]z<(}'TJuQYB9A"W9^OSif_G&u0Ϣ '(YQ4(:R!Iy@}UJڦWnS~M$zbiQ{mg1IcOMln{S ܸ bt^J2u^$_i;3JJirO՟2[ƛTgKKn&)ֱ/v]zSV x4Jˆ 9c@uQI:DQ=<4y#l?;ʳk T{ǂ{؍&j4EM$45&$Ė{4{ ҥKs1syXCug뚳'kNK({ :͑ %[XSd}]vy ȴ"=Iz8B;}*a m-l hLm߷3:hEhPg ;T, ߭ם<(D;B"'VŒ U&GU=q Wo嫕 rh pݖ𡍮;W UȪ2x +?0ǓП@B#Y (x9d#`9tձ o:t7h(ux^%{CmJhkYw7aE%cx><>ȒQJYuhC|U6@kQ4,w g!0 fkk@"媞k>agAȞXw| ӺtEp:u5X68n Z>*AHXZY^ӇfIܦh{e7E֪$E4r^;?њmK`,ۧZN zZa 3=C ~ٚNuTV7!l-xw6n5]8 i |^DԲ`ㄑU\"`/? IDATdP׎IhXyP=yso zZBG4xJOTx {={,*Pl EZ}I 6$% Fj;Wpͻ1? P|+D=\Ӎ_yOg!Ps-Q Uno;u%;n۠W'NƎyD _pp#[_q3zF YpԚ;7n#E4d)@O8<7ǮP NoBc' 3s\%ͫ-`J `Z(!Z<ްs`(0. ݋he}BEw>m GKvZS`'o^q T(VC#ּD+_v@6t΀}v/O{.qk'jW, g U,咵 z}g>+ŵ[ 󲐴uؽxđ>VcO4ϲfApJWn NA džEdO"piI&P}(6.͋U9]51QpcSK}ij {!l GT8!:݂%0̛*psLV@%ح{;i{ rjBq>ݴP~8eƦ}UXrr`kR s> ބRy%$fdV9Y?`^bm8 ɗII#Dy4@5L. 9q.#3wX1}[@KPBTs1Nb @m΁ytWXoԎp1# DaֹyHgI 4z" gwAm.d;8C8ǏH0R5 m52*+;&/X=LK Mu]}T8ʶ6\Xj:p@|~ ^ | J썮zN@/NB:dwWZN:$K;APkrS ĊۘWes\p+sqW=.O5pOsNyZ5-ab`M\2mʄr7etO6_ Ѽ]:rMs#D'ZἩQL;DXgD/B_Q@5 ;FyZ[*=U4?]U;&C[44 nbpIʂ߇jn{sx/%LTK`]?=Ảs۰3u-%7Id֏蓼žE"3SY!JJ,n&!%#;6},H.(ELiQxXOg-0ub\&=U6:穷c"2hx[[sDrǜDq)|E$2B)g3Ѣ%"oԪ+zlKdbtGOuz=[ A|z$@sO2>["ҲqR  !xt-yjΐ;/ӟs'򅨇uU̜|UR+7{A ]{"u'6@jTk\г|\=%y^~=>HogmM51Y:C 1W-Z-HWkj }zg(:_]{({]R2 D-1ÜƉpJ6TtkAO 686jd\ӳ@ LcNA1fc_Z4)欞-2xU>g&sQv.[ uK=Ԃq+95zVq᥯WsG9hPa l׃,暪#?(ܭ8ZÕ=I>8SZ-Bo$/gpPC/#S}[FhѱV.e&bTbp"|jv{D $FP4Ԋ&L5@1nMط\nb6>B;*E F 5Lq[,@_KnKL!R!8ע J:NZEBo`$Q *g͜'t5KVcbT*DDC˹ NaoU(DQESoZY4xH4PXE3{(FyYgΩ<3{ּFC閆bGb~E(o۶2kTnxU९WY9V}ٕcX|di$Y}n yT4[IwWP›` X Ϋ þu +Ъ&ѰL<\;.@>(?%Zg2e"ت=DXhVv ְfAT ^ fB Ѷi!4y\mu|Տ58zR4L5:xy]m|%[w df/ -\:ڎJkB85dBU lt[%[Wȇ1tX}@ApuwOWVjh6 bMn#bB7V۩"- t߇@PãjC'x@!sk} 7PkMhG¥sG"׊P@Ki㳰R:!J|+B68TM"keҸ@[N8K-4 r79@-yP1c8zF:YzVrOl>tے679՞VMQo\ϻjsBpL")iGJ P"NSC`&>y;ܴNdup,Nu YEH_rEQB 9t:Nj7i1Z̃V?h5(uhrRLX7g#:R*XkHFG>^8 ُ\5GMs)3[N|`AyAmkNq )xX-j ]FP^;hUz;T urKdKo֩mYs9۶~5ҹ[#QBkgiR bC.{`[-8Ι6ؐy)k| Z';|Ҵ[!L:A*JC69, ]j8kVRvQ:m5Zl_^n lG8R8M ipmVk ɹnjk@qF6@lZ4 >{Yl\1RE580;,z鞹C)iO{{s<80?] y[A)5PMUueו }*J07L>>/s ZWdp0E.]gH _8k7hfZ.͎ pep'wv =W)^v]_)c"  Q?٠a>",6)m򔻴?-DP.V\dr>DʄZ)ѰN?|ׄQF|oXg1^-8\ Z]f SF>p uaiaMr ltй 3 1!EX" 0?lºDÞDs:E ӧV  1 DCW[DiWDnL8,Tכ5TM匎EM &Pw &G4$Lp6-MÑLUy&b4g"l6svj I5L!'J =lƏLxoh,!&,|M4_vڜ{&gxLzTy_݊/4:S>vKMz9#Mq +>P}a"-~ڜt+aУD{Rorr7RKCt/LȑL ~9>q:5'T,J RKW@egv<ӫXN6i{r%0 Kn\s<$?ȃ7 T44j 6]3q6ooxN$tH\ ˓!,FJwhl,r` % QpRF{VtldؕD}\{SS y˧sY-΁=10 z~pV ΕHDZϨV&\k;Gz@Mg|[yin JUϢPY OR©ƺgt˞9,0PaX(`[--ɶp sz$tv9%(rHHKrfF6kuF=AW ۔RY4sžԆ+~F{ *&sk&1tA)`K[eMDAt|{?q jUIY8H=h$bzr=`@U%|Wmb"o u<.J(a^7()+U1ݪ`y*u~0.Q 4>z9HUK}F3v* .{hQ$eDxrCQS/ęx$~LwN?BbikSP< IDAT.76б~ޕƺ&y #XJ8YԞ5݃W]՜flk7=@ p*d/qHb ̩6ꝥ/u")Ŀ\񫤄ɵ4oiZŹ#LEKy lL''lGssW)|=A-65P@Ho jmCs@WUU8J*)SLץK  oׇbƱOl@/B9/M9oA4xK0\PT)dS\ /ڑVQ `)غ$ҬGd4p_EqgacD2($TqX}RmCp:`}9Wm `A=fC~=}x|P2Xm!w#:C4"%~ִ}0'cu,+d \"K(S.&6( ˳#DmJе ,ՖVlX;Uh?eմG'75 S#ynPlgp2"da8C[;pO?ŗe@(<0y_ٝj ,D_8$y>SpjBnPbA[߂$'UZrG;aJq'Je[ȐiEoI$n `N,| Xhv3iwʓ \SÝRc n毵KCvېKf $ÂϠ[6-\Gǒrkc<[Ɛr"qz>oؿ*c׳/BL]02^.{'Uc :KDB \Ē{( _ЪqNJdOU$G0z: }p"hE\,) AA84nMp?-Z#w?U(mglPhI՞8WTWt~@ |Ǚ]|t/'7W,Ba)+Z[\6yHjV3PR+YN$UF +`x>ϑUזv CN$Ae1X:B7GGc2A"FӏĬIg4DJ8J$EEm[Cg)7݁N[xN8]\:ƑׁlG&6='2fԛ}V3REyE]'8rCXfnI%,J/|?F3.p· ɝ,**`uC4L@?y|@BCHK!]]PM -y@2*RXƭj:[ЁO32Yk_q@I@%ȍvWCD8%-zĜLTR5U½*hcm65I p%MGE:l96BHͯ-4BhYCZ;<5k nqS^W2z5M8pNsS$ITX(*|QC6d ށKoZ9Tq?]*B,cY@Q(>HÓ4|o&XAxA5UjIP .%rg#,QBXw=6wt8<(CﮤOI ]vK'ږ]\kyUP-un|bSk oKG<{2:¾5-Öa4~Lm[ۮq(Ǘ]wѰWy@y(w*\7׃{>f$Ep.nuc`*dǸ9TYhhxэ5ooΐ/OLb'Te+\[B(u6so$ܡ9sɠDfTa;@FN9x@ Ğ`H촵S(LP R}@9⫷~q3SF2 iyr0yʝ8+;HxZ)L> n %B \Pn muzW{^=ЏQb><'fSN V9p?"B;Xsf:nepx?JT -`qHnUh\,X~>NmT·oZK!p)rXsHCҊTmLAæDEC7k^wcniPYUam]J/g+ Bqb tN#i-ܣ ^ "4K샄{xr\AN[0̿8V3!dNSjo}}%urojc܇E"EI/G<\ "LJ@kRG!lmk0@!!u5|Mz^wAC^q)|iQӠ MҚsՅߝ Jסd/r[#nG5&{W>;6SRe`ن*՟c@_<)oXB֤#{yAOW :Kv#g{ CQ^U Q[{9  nEyJċ^~rOu#s5|(?}WPlQ.WLx Z87 "4XLa(Am5TQrCD9cDxK9c9KfzWDx$Z*pm֢OI#Z=*oAƌ=X_ btw-QQ~TST0aH? 䂢: 3"DeBvkA_ye$('EؖzS/:VeؤK[9$d,3%7ĵ(F{o Fq,2>4}(&62kupT|fA .!̔N[((:u;>.ZUEQ˽EѰ sAVY]e?%3z37ψAɲZ^:鹞 ʉtʏ0Hn(J=n0>7Wg3Ĕm; s:ys_34 {7s(B)SqŊ]oY:rME5k^g|(:{+l0sH z*"rI4aHCW<#Z+:W'/w^/}hK.Rj<#ii2U.TmU1E<C륢{BnmD!,|j1FP-^5\2KEJ5i+ }WT44c(qV%/wT zNWk5k#U {}y:'<#U 2͜yhD&J*'G aQaKT5B{#cXy]~WRZ2C]t/L" U*",3߿]U!Nd|4n_jrOVi?:~7V$QA>PLd=M" (sDZCZm{|ghByS>> E+ϏF}¨ԳL1yZ'_%|bA"lY!oۛQUs9lQwE8l Qe9,:D^$S"Tv6{8tJf/L+\#3"ݳsy_6H 2驺VUh4XT01*5k-YUXS^*D"0]9Gԣ*%U/BQ#kL,ѵo*ϡ"vUU^fG45Xʂˢ{4KbyMv UۤkMfNJrC;#ׄEm[d,g䡉sAn놃YޜˢJw2p.>Wz×FE /hI5Tv*:c*e DAS^/DzQCc13{ZgWwNi?]5x0=^.]-F7BkQ*'uhv. jO6B?&ZGEÙO*xIz?EXi,FMUg80%oU* =!5\4Ep-QxPYDRD"|Wd,u<bQd~f:4uLVr%} !|FQoA9 wgk /g:",﵌(\)ZpEtEg켨2WFKkWQ%G5 ra" EQ4_SQhh3y?PA_OaK;$ZRQq6#g>_bgpglm^Q- lϙECp]C@ (8<Ax=WA}+Ïi(hT0Tkr3A!pxJw^Јme`o6s:_@=~Z|M4<MS;yuC>bK!TDTTTR$D]hA$K)K]v. f0c3s U^\Yqe迄{sɺ>ksP92csdo+.ŭט3}MwUý(aͿ n7nm߫I,5y&YN}&fw/2z֦f ><=<9Z46?w#h|ꣿUW5zk{reW,dhmכO)hMH?JxndPc$̇J8{\6Y+ fS.Ȇ 2CduUȹi시zAq,`^&ONYPyq>RVcxW׏pdk[OA9U K(zm+VQȊzvƬ-:= ! 1?< Jd&aͬ'^YZ -Mhm-䅡KYgۢVT@9(lU~""FU&)>\%6՟Y|U!<4` |/ZqGu4Nw9deׯr|nWK{r '!fڻ58S-@?x~ކg[ jǏl2ej/-;mRfV~RIypaB֙@[x-MY&ߍpPxNJJH늗6 Y3Xc+qloY'd 1%:UudɺyQVz)yWSe֘[8qnU4]S ZcʿfαtYӴEVkzњ?I6 \0/kF[S}j9.>G+)c ^d; }[cxH22,U}~k9L՟7l5vL65iHӾu&s\3j-nm4yz݌Zg w2n%v6c#pRUvڔ$v\g ǻ\)nvL#b1sI{Dn1V@gAJ8䟯}o3[)he gxiCD4F!Pm6LO4(*k|| ;t˙xA9YMG fqA4WNi޺yքiFW~/r.[$ |ck=P'9c>,6Waj-mBgtX)2U9fT6 1@ Yµm-m8hDibk\gR7nz_F2Um魰 8=G!UߣG>"6LL-5V %4כ@[XHq JIKPd6G}tk6%Ia$%9ӌifnc,(9FHN(}VN_ޕfl0ݵl@?l^\dFf3f+ߛ1]1OʶØv7"Lr~ |Ef跞Zd7;yqV]Fm!ſ_OW}z-" U̘/da;a cև& IcL9۫㥵 O0%6gs|b`S} e  5!F;ma3MqܦT g}HyZ|_M@ q6:b+)>ň|:O{Q&a%,8y}>awn7R.1#2Uk[_MwMעvLqθh=yd ;j˵7em n)fCz1W5]|lbߘqfs婙,sIf1;j| OKoY幯L]KXq,v<\I{722Utigqg s=E<dy,+&eu=7]K7xP)l0֌a mEul۽MVƶ\H&ti/3z{:f2S炝FUCt(30D{͹]M76Mt.~7c ̈aCŭ:S3eM1AF-9g[8^MmQŌS)VͶ 41ftw$ckߛ VJr1Aw3oYcv "%P~nu/eHPsf4ƌGTCpIImw7hYvHjP f+)V!ߙdc[We=}oFטo,pFy*ELba)C7eEY/KxtݽbJm&S8,dg#`2Ni}<=M1ft|EL9e~16166Ә![SBsyhs6EsWVbT=eIyeZ&ix>l񑔻(=s=[ko4͖pI`ɪ]PbE{C5_㣿 })<,ߟjrmv|'펛s iR"F>6YX߸!҂ӣ ~0ߤ}cBW t~eFQWzv%+)VgxQ\"u8"xh9S0P)3~6̱hӴM֯XQNlr 3J4{j]ᅤ‘3]C>?Aa?TYMhfpZZu Wd}3U&&R,o]=户bgp}noܡfx4#ǰdusw2EΌ P;0YBXىf~4Yjy3:\?2 3ɲ 6kMLB+_pPU;({ v|MV:oFuY}ML q;UN)(gsqLmI05kNLo=}wM<(boykt:&PpgǂyB.3*Z;;3r^3(mPd!Yƥ S)'LG{fQMw/A,_a&wO_zf|ޛgD,|F/-El5!_)uZK Rq ڧ}dO2\hƳ^ &a?iwY? ZNlƶf4kw/ ǩ:c]Eq_L&ALR2z:e3 bE츘\om7ţZhr9g9ĉW3i[+L»O3EE[Ng<,az\H7[[;kj*VnCkr16mMu[,U#A1S暘_?k"k搄Si; EZxW(-'wm; =&+x x :1I&%#:X,cPji%Hx%(gGJx{nmŴDt|ns?kW} y/HEϸ#SlD7oQuMlm]jɅ¤ؔ3ٶzw뺶5Cc[.OÉ4^WdmN5YO覭+4<]jP~;_L|E[%f0ߘ LJ@R@~plQ mI`İ 3Nߐ0y$;4ܠͰvbM·U=I! &K J16z̴`).Lޑq%N{誢"SΌNL4f,hg̓jUr9ls ʹ2F+|QWFka͙X=Bj< -l*~pazyӌ'B~)I@4ɛwN߄|g,.Ȗ 9elqYE?6mD;7)7iz[l18sX܎6)z_Yv;,C;=?WR}+t6s_;s𓟡OՂp<j?}>]?]/BB.'T2CpkTʵz :!>$4]frvȗI 1U57dkm>ŪsR&Ox>G-l@wT Bdy#nd!j`]ZA\_ i8dy2 c sf n4 Bz,ˀ0?"!ex҂Rtjrdy /K)Fj⹏9RMԂ B c_5(?^0:T?gImvbJe:|4!~1t ΁ա\HZuX5s%&Yj^Ƶl;#dEլUrl$ 2@+xoٸ2pmon6BS leHĶ.T)XH& ?MR *cp Z?T4θӫ ppH>B@5X&+QtqgsDa-sa4 vžuS(}$W%Z̅9=eG ~yU/%l\n2Bl/ps[6<ón'= {8*0^,zlo0/v\B5#-?XRi_"V iY :T .R+oIX:9.^*]rk9|C[8V t:kfÙbAx 傜x|&u)\"e9p _VxB9_{W0)@ZaqrC+"QTZ_FLȐAEs/4;~_ovB3>۠^ &_f^:rNb+TjȪ+9*~]0"Vཌ#%Кi^Y^{OT9F>2C0rQF Q$TSgA6* @FN=);/DX@`0' (V}4 )=M39d&v8-R*/|~7L%OzjõIUuptJr]%C$7Q.xgRؒ)UBwRd dV6`ĉ~쎭oPD$ITfJeӠh+k&d!xA4\Idwpf&F`N& WQL( *S֯lho!$c~cV59~']4}yF:gN`~ȳ0͕܌}#io $cTԎ!y +n d2i@WaK*<@5OAk}#"6Hͤl ԏakS6XHWkm6g&)86dw /N: ,EU=,҉O %8= ;rPeX l@А}u@^v5;>M̏%{''!sX|+za L(N{ԕtڊx t`܂^pB/>(U &I kߑ m*@s CײC#(K^;CphBBB\(ꬂ,EDߋ2Mۖ;GȜ%EuyY_q NO }5OĔJU f;ph 'ֲ3xODQ,>dHe`õȐ?AW. FJh"D)Ͳ@-b~!\e)!l8/\/V_[8? p{/Rbu[8\/eo0~8E%C7Ț)qB_ɥ!K˲z\yܤQUoB'xढ़TGx9(GÏPi8 dU[$FᷯagX*?j) _RSIF-Bx8f@Z(qQnd-OÍ߃d%T`/I Y(megO ,Z9EP5| >JTz:Y<]t8^9qOa\ Duy ^EI~qI%D{=ӿp?0o焩xo\0?h)qC #l{1&<2#%,J]?@b {x ʌ8@d r4׆.<~&%Q_sr0W:f==x~u kXl,8[pL ˄xoG;ۙRrKmk){UlЁM Wx6)m'OQ> >tL;ydjh=A"4M9k~&Gkel@jE4vR〳הk[]T^`vՌ7BYU}Hp IDATU?C,B4k3E|V (}$~z%Iց~BK3yR'b<c*9bg+}K*=&˥m4SOqtӭcpa$w`}$ %\"j꠾mZユx2ʴk?v;pcY++%dI1 X#|]vd3zR93C!%)!E 38jx넂akovJURN qNw|f8(뭼W%jiIjQ[|G1m:3l;nkIό2~^PޯqYUu"ZϪhԊ&@)ձ͓r+(M쨞5;3i$¤{s)m4u W'T'cUX_˟LLn6جt{z-hU%R9?lSȑ#y @ ~aŷϨ_wnUZ[H4! g3;̥=[5ܘD~+X8Hd\H\Iܗc+s<ɵ-,OPN -A4zBz gDr.  X&%=ĉLMc侘@Yv4{e1Zʨܛ3fd (A ;Ƚ1a{<%d OXB]2V"wf/ B>a~'JBsGrpxMu0Xe \3 Aa% dϏAo8:Ђj>e>@Į׈&iD!a:?|z?Y]Ƙ ,jJP竑Rv2LGq`Mc&Zk?p3ˌ6d~r[&E15jM>Mw[fos=Q^)j r,2rm{RbDӚ$oA W,_j%Ljn{u#t.yFKɲ*=f-}mQ],&o1;3OA# ^meӾ 5 W_9m|&j/ s-'M:[V5:1$+;r;MrY#OZ1CVrv9wz魲rBځ*?FVɊn!JCҋ(f{PzY W甬 Ow5*?ƬmXMqj&gH8ڿ Cϼv* #**R%t,@]X[%g+ImlPqn$ŠsbcE^ 0ƒ%\4*+$o9 r}3-K4.^(,jҎ\W;./tO鑐 < lMCGd5Eɾ. _ѣ\QTG!cDvՇU9r?^LPY8C!VR S`hJ<~zUqnb(z1H\]=pR A6}yk>GP.ùؿ(w$jcJR6mBB{~=mC.eb8!alExAJ ;[a[aqaz&YkeநMm̨ xI1Y.&hn5^dF'B3vA0s <fC|ULXzG~;-!4یrk$sxXkN5KWqey-TY;q7J8=yS O_Y 3~uD%j֕ 7Ct2ͣBKX l1;j!!хa=-#Lt|SS̎C0xN6JxHcaԖ>y`ݩ%;ƭ<ki*MV췓wiRڝVSMt?hw:2yU֛<;EKl-ugm;%VgjR#r\3<d _iZk3$hOi?7o_wI& ;-:״R0љd˙x/wewmջ\3`tބZp* #H 8Bn ȓet ̅ƒ#95<7V3 lB'[K( AgZ a`~lMKʉ$GvVZ Ґx/\"S*\!_s[w=чJTc({( Sk&![gHEsT^FllQ,(J9- CM(V6+iDM+Izm#dar?K<Č*AW\O\ % q~FqJ}P ـ?qdb%M)FWf'I\%SK@IT W\B .T6i3p=kN9Ƒ! R "p"ʕ''G-?eÕƤ[fxe(/O{(v4r>wJk #'ײ@J} !y2gڒmć@DF% k_Fto? u)10ZȺJ$/1G<+YؠG !$wCQZ'84k`ߪ G3pԼ\RUri{Ax%28Uj8 yv(H~P- P3vy!#u_]YuP'e@'*7yOj_A;1ߑc)_, @{;Qd B6pzqr'\Wֆ{ 2Q/fo.Gz jfAV8x*y^&89]fd6$ڇSI 3Q\U_E_3 -^B_ 'b\LES8~gXHoyy;ȪX58~?[IAmSVj6Vm?Jw*]7bHZ^'Bma:;V m%:EhTTn+{S=Q}|ߛn`֧UQhMfh%WB":JHD/)M'OqNq%=JzeHdH^&d&R T2fNꞜ%u}\|ϡz)əT dixYR g)B vK@{k!,G I\6g}|s8в,? d8˗.ٔKy2gM!`U9]FLoP"T= 1 \9P@)7Po:cWK+ù78ٞQ:ldf* HL {5ZU86<䈼|'jS: |\>( ~(``zf:H҄|>Ftɹu:xzrDň#\'eDR |ۑvRKz} É]%~<@W)C2H@3d-qyeюU&š6F((!Pd >VޅM⸚#cߩϺUӣ&[nJ}XgW3ݺ-5HMP&WO}[cLȌrr1;ܕ5ȓ|ߕ;mS\F8`gƹ)c||=*7P`Lb.\Qu&W/{CJH3O^:W-6%9;}Xd3[:׌i z6Ϙ\'oʭQ+VS,WN V3D15z?{u8?oJQgrܠR2Sl'3f8;+6Vs _Qkt鳬r~3S&7 D=l+txuK{U&kf*fJz O4cSl`}}/UwQe{厊fdt"oeB2'pyrU)`t8}Gws0av^Sܥ΄`3ݪ~@l%aSp؄{Ō\fcVgߚuP7E현1Y8k\{,izQ~s3" J8y،9/MO觨;Wgй7oBtt0Ȍ3ɚ S/ýv;mUiRvް;[yw)5mizø$$r&^iD!抓I@4cY8ॻTDwI>e+  +BV6W:2:勊11if0WBy+pE3v;g=& .SXbW s:1a~F¹ű;Iob lROu"󊞯A#{|÷w]#y|VaΎPMp r?;!T'Y.u.,yS^owbDZIz Q44g&܂]f u^XC9 :Dæu\[#0*(# o=1BP WJ c] kO \P@zQjg>}ϩKs⏪Id h`2iwPdaW N-,w^z4<8Bb\z2?w$/==øoо pbn _t~j|{l5MefF5y9Y M:Sp{c̘O&}Kwesw>mV)升O%yr_xv, Ig&{Vs{b~#4.~u3ӿ+;Nʃ VX;&Kz[ߚeyIGL!:ٽ4u!*"Z=m1Iٿ lB]ƨhy!pyL6ݳVbqۯ&Lw'3Q&!tuc Wf+)'zd)u> 2y?l[^N7U4 8[}^Qf؇v%-=-9RC}͖&_tlaM7_e6LM]p@^T)ϲhxyB{MaNwTry=[Ў*~V=>S\1=&/n{/&'ZڔdwE5aƨhcm+۪R+BxTMdI yEԳ24V}Mn3Wʈl`D#>>x:4ӄeQ>:2^B{iN[XqoWK?]}wV1DHpe8ؤܖJ3UYO8{_aE:y,7c *fԓM焛b&+}[\bJj#af'-Yyu{]XSqtD.x^v%17}ߎs\Ӹ)1E\pdbϕ!\Sy^Yp\.X?65WlmQkNۣNDžhOxTr$DoƋ[8OBsLʾNH)V.Bq*Y"ɌZ&E݌fk+1"&Gƫ:ػg?Ќa:wgV#rW_ׂv( {&+Bq"Q4rO6N#Sw_Gu=hD26]V:œe¿t6:߳[ .58f2]VB96@{&-ւI-U?4wwfh1w!k#fcNŐ#vh2,eK^A\E\:2a,UöpI¶*?Bi1{EA AU"i7PZ .l%N 'g-`yURF#Unih4w6?D{Ş|37a-‰^T_C[T2pO G'O 808/\&ͯ݁;ZJ ^_&)1 1kB}:LP ʼCU~mތ6v- &DC@XVʒ"5|~'#|ӐŒ!SR!][ܝ]qR9R3PWI}Q[AәZK^T(灂G9~J;ai9&<>xg_ mD $p Gddߒn|Ks iϻyi-[ /`IdofHz e8q!e3z#WCN¢P!esy'uT(  GV )A5wB)G㟄{]`mpX ^`^R->;dtRJFxKH_gOP*'Do sоpx5)gH! \]l/A(_x;DC_ssQ(owFgHC[NԘaU@] {Wa`!#ԂJnP%Ho% P|pűMFg h@s2RlAd 8C#$lɪx5B, ˰h j\R߅!RXPcP ѯ%fkH jka3dp 訮RRݥkPC9G8M2 wѳB97{"@z@)z& σM0˝hh8{WI鵬E󟔁bPMb"wf&(Ct7E MJVK!+ 2KSo#>կ&kFêx8yOƛxf5t`>BN8=d<4 ®LX~Yy2bT*jO{2^fI'3{}|31Ҍ 1Ո>e2qerڎ&ð3лe2:+.yƪFs6Y{\R:cLmmc>7|s%F(9gbכUh+{ܠjʶI}}8/&1 ݌=vBas?c66I+)r,g\Q!`qm{ b#:k8LH=`0K4([2Yբ݂G#~s&Vl8F ݧ0W䍂P6OO}lOizŖGG*2 Wjrl@9\B`ǡx4ZeP8i'zh^x!B<ڊC2tAf ,Q,(]|_HT$~w!bp 2~x]MI |c8 .TnCn#[K(<ՏmEalQWFt gJp,JPBax3"4IJ\ gc>[la5'<@9*q/f'|Q _%(.BL4ԅ] nwϩ6f1x2trLNp+) 䁘!t*<VPu ٖso'6Q{CQeLM6,c5_knPBI(m U <|Wx=HO- 3`{S\!o =N5K4nC0P"‹|̣ O-$> t$Pg7O;i4|.WQVZvĥ aU. Mfa z\*0>w7QmfG*ܳj3?>{ :r8ŅE02'0mb?!7@ DO ^,,€ `۝|"Mʫ(VTGw?HPhbfH ~e*CسD*JЩ(ҥjyZEay6?y<ñk%蝣'N&d@WDx*Hwg!8]MZ%CjAg(YR#{!p"_+ BMQMss5ew_ғ$M9eHO ̪5w %z܀r?mc_'P{[F'p *ĮI;жnCZx)Wd'`#0'Hܯ!W8q8q=bTsl/'"8l d͝jpi.qJV+X5l^P[{.5x59aRssz%p>I J<5?ptrDcH΂xԚj[{I'=LR? bT5CE=5Ca9m=ttKOgf=Rw+Uv+~DS}P91KEQ:!9k%N3:f?Blmm1YMPjх閂f}Q{M 6ƌWWt)הBi 2bcZg*b 彧1¿҄}cJafW8B% 3M8Ym̦²3s}=Bf(35O$y7^vv:a9۪qrltz^VhaY,du-SHpqCrlW /P菙hWyƮU3ήy܌ /QΥ*Aе\Zaգ3'A碵O cY>z's\L`n.ANѐRa;oTC0L[Tܹނú(# EP(n!oj~%EjI&%- q-M_-I IDAT 7) 6&X;_Lȡ)Cm)i=Lٌ+Tԩb16QY|7XYۖR ]QNe[kle&wϧ,o)ޥ) c'R)w"en0%2Mv^t-i&/6zz,\HYۦgNw)2c'7y D32)m,Lh;ӵkVvZp\2;38%X?2e&c&o 3{ fv~HT}U; MIߘ)Sغ{ո m%Ԓ^(0HM1%HWN][dgjzgJ4~6x{mmP%(|w*ACK`4%a0yd֘z6Q:ޙGj/ߘvGEcċLd' 6zfj_gC./MseRghIy[duU=/Z3)ɦ?}v7:_(e*:`|a}~\T;dl9N]bzBF%]}k^j2@v WK4v6)cRy-qȟX[b)GaX`xm2_2ҋolu`p,n>\I4xh%wʕ`{>u^Ml'x3^r%?gp^I6xY\WvB%Sh=K8HrnJw8MGzFG3JBK#/pO9M9Vڰ=~y)m~}kjԦw߸ \4a-{M 8J[/{AR4Y㭍$iǓ4fH>OUC+1BJC]vPsOM^aB'T-퉦R=fJJW$ӵk*+AP +% &>4QW/BxÍfLqt1qr>_U[gM4yIS^gEo4q&nˆ9]&w-J^yd# ={K-owx+ˣ]f(y;}LcM o vL8\WR /M^a_/Ji1 &UXfsM7+82ZRE2;Ӽ.Md<}mJieuYzXS)>`޿aky%\}?|/xmUE/т&|9of҉ukFwod |g28Xқ<ԖNfsr=')a{Ϟ/qR[}=jx9W&a3L&I1i7os?+:G5Ẇ0")Wn#> Jb/TX1Ԃ+;<}WB!EgT WFP/)%Za?׃[*ޡzdv 6/C^.93ѹ*ϕ?xK](,hvh@۬QY?| o"0i.Il^*<\;aẆ'B8E6L>CE!؏<RYXKi%Zpn:uV)`˨Z0Z]ix./43(#d̄+OQ5T2=%ո5!> ׀O`gy(oٻ :Ҁ mNzaީ\퐴'3tڽtzxUr:ˁݕHeMˋaP(v͢[]{D0|Ұ7Lݢ8 G{V'wsg{0;U*Y:n>| .t/!jW~u9^&OlekoW~xo*MKJW n_!*ĭ Qt!!D)l^)Q1şPA!+͝Ew ,l3& }rw_A?DKr7z+/p %hBzu݉hN(0敆g/q.b :Mϰ>7?n*[iJ_ | ]r$Ԃb'=ֽFp*7ZǶk(&^5q}EAP:M$(1 {20!Zĭ'e65 E"|w7CJ_{t1A7-΍,XXr)D%&QrntV$xGh wpO%kIp(C,4]TDFβ%ި0 xALj(]zC( ޾ <DBP(lOa{IKN(_:uA B"!N? g mRrPGQ?ѭ00A!+fea*̈o7!kRG8ت0YP>P!x"Es=Wg瓧)Pq( &f{']O|ynC94XW(2YH] z[dP\Ɨ2y*&d9b ̄]SfѨ4.:cp!Mhp uDne,w1:7[*"r6Rr琾M2s[CL,\(QŤ3xD/eS: ٭hxր@"`S:||Aڿc/??MB5h8`J@%P6ǰ-|"c/;l a=r*=[v~@w%sܹs羹9&D[ ? p05ZXȏ2eH4f{TSVi OhڌtĐ/L2S'Œ)|=J M8ewo;ʟ7e¨A9L2?43Fvx1u4E*elgEo+U~ϔ8q!ۙ1ұIo%疒9(b~&2^%ll/j±u_ .<9׼)a\m;KSO&L% ̕`o)9Ox5Z& aN|i+)aw&NxՄ69ƣG 1zy(qGh3wO5x[QFm'L;gm2:7RU2M S̨xs-&;Ķtf]x^f3Ӝ7s< ǙN/ԄAs|CwAI ;{GB20DK^yض(IgxTIk$zFt)>/HyebYkzBS *^+Ƴn?8v~OxRfƘ٧&ϳWΕĎO$D(;cE3m#MrU_44jeLdg$Z1ޅvfO)'Sdx5[2P3 _L8g0@ Lo۩fOYjCnOZ+3WRl֖UN&#b)abd |LkhFtF_VyocWό^ҴdV)O~;.Rg GVk6SlS*e>de9sM|xH1{Nu =F_UrjAZ=?(ǿrd ]nWRO_BJT `hlm`iLR}\kdg-X]1R>kִߍ^w9…NyqЛ%o1Y;4tnʫ%=\`7s=FIwƼڌ#Jt~/3}f_J$${ j"g7{t,&Ϥ}L9op%+cLf_ [uH2S /넇dE*ib{{ k p; z>&/j㥄6>D殿+Xq>o);Tci6T&K5?ZM֘Kn`ſLZ3ثrE =!wJq*g[j4g^BAۡʛdv;JJ^<;߅Drj0_džf.F-cךFz4b։2^hY^X浘'ML>⹲x^ Z6(cEKs!`w2jVNM.Sa0"Nvygg&>kG񯕗Z=?(ǿr$ƫg em.13K[\U]fl 57͕)jU"Cp@BR)vX%s:K(>h;rq&h$"B᝗=d1)-&jbw.d7ʾ.ݴڶs:2XZN)pO)8.R(3'X}2_!t]Ў*\5ڌ/܃$+1BMK>%鷌9h TYEHyLLNrh5Õ®=+ Y.􉒀\kZK-KH.J5c)Y|1*8A3I>e3>iNN2k7JX*zV p3AK'\ G}d@,}n^O\߷4>Ζz2K5o3yc]ivq}w:5wn3g|)1oPWk;azC&cgd2}?cf|4?L=lxːߜN3{A%4Tb5>%柮r;+lQ[MX;{_A MؿI7)fղm &^y@|RUl/sl&|'R 獮*yh}+ m`7l!(n5uz R]\1YR]=F –+g`;珮& ڽ5&%;!i\X W-5 ݫ&]z-?fhM0ckq=0;)o}il5.}FU/}]ow"Ѿ7exj}gnRVhq l2~֚%G$Xnkkޑ[ r~{ƙ8Y1ʌ|/>,`,hU섌ȅiR4mWxm=vr%wou%/igŦԹF-J|@3y ')2tx]^Pg.@J)Vo<L6rٴgF[3)Ax5Ze7S(wigFgώ{AO q k:[ lM„lZuhW 2KT!cb^3MQetR}MI'M<%dRMxRW\FI7c !T׮)s$cT<*`)T:ߌvK^~P-F!9Rxᱟ:݊hjuy%gMrHa^onoZ&0#`܅Z IDATLo6y`'e~={OK]03L1&Oz~ߌ0fx<ޛ)L81l;k OcGY1̱^e yq-3d7w}MG&Aa?_8%L+忻6s?,+8݅p8AB2z?M-[*ᒌ`ꝹD°mftU\QQ]!V0c+ |-lQB6x ,e$jk,ӵkxaO)iI3yK\PpzHq3Fo=avR-Fk ף$$xFZmѳmɢمnwWu\Q[ӻǸ,bR]xBJ*Wb}K`j@f)/˭Rfn:Z[-[':b@{O䈼f|]2r&6f8ZA 7Xwf>ܼbY'3~h_O)J28a~PV (!Cs?e h/ő0j;ws3ƛh]ֻGQy\?'1ўU7c 88U}jPLJv~?:[ dL25&3.==,6))N4pjw_ מ=ZSrO'1,3i˘yed>5R7o4晌&#Eַ:*ĤsjRGj=f1Zq8_;z֕_J|_a07?k2JiOq>+G\ynJ8;3 oBtv,6c_3>rߐBkeq_Hg$߼u]`[o:6HwhyT_:?f[[w%0G,cjs5;,zI!l7=MRo}Uبg7`IpQJmԽ3Z , {]gƫMlqNhe2::?!0L6{Xׯtۣ/#) 쏬?]m[5Nwl%Gg!BS2O9!1Q?%y{aeE3JBYgS1;G=Ef!c|!ॶ&㚿RZuG~gwnG\J&ni1nׇЭH׿w XqPSl #v%Ép傞@]Ԅc`[n opRmƬkɱ_3ܬPJɨBON+NU-2rD[L!ѐ &E|J*ܗr +w%xzf`~&%0GN&ug|Ӽ`)x oF"jC uӚ*} ,6a#Hba[æxzgtEFPq%îPrVE@y#nMLO( Ͻƽ$ @ Pvݭhdԁ*t46^q+Uƽ ()lmr!vmIjM>jJUەJ%߻SHUy894) P^j> (!{]>Z2*BZ)`R2pwL;ˍc9R&Dkv҃AqU.iVbGcf=lIA^@:0Jr:peF%@TqW9>ZgD;}h1DzvX1$Ytإ +!qCΏ^먛^);'J=YxVX(E~|$!΢^-tp u='~}VNWLf Q6r߿%{1^o|&;*I[o]L^1>YE1 6d^u&RT}pgYo4fo-Q E=Dx3.-MhC9][1̌0GÎ4~Oi=,Q/9Z)K;Pׄʿ5E)osZG1~thA& mu6 5EX=mͺ`y=8PV'Ifm֚١ v1] H63:ۥZ;jo)f]^r>ޘd)Mtjk<pbiڼ3+(fsh|xsM,cGYY`\7Ѿan.z !zk|ff,4[nГ]_a4%X;~J &egcMmMMiO4_*.uG~FaL-x~x%sݿ Chr+'WjGSI G O!@WJsOE\B#a(oNyz۝žBpW! ᛫{n;}RG{f< H]Wkcoډ4Wn-!WHIք i,‰Buiԃ/UtPu/Gs|'GI:).y[#5Jcv̙B _=[Qkn(q<%.q_'Qo2 <F:O^GrsūޠPHbfl'H?K4o)YCТnF?95Nq1V"'AJ X+?@QUm5\ ;kS5n_(A`P.UlQ3 ;ShJi%2P7)7onμCT R\^BF*  9߹Mq>,鞽pNm@iP {C[zTv I=Wߍ@WtZָݫE XRTm.ZGth=1 Ivauo >5+Vsl֓TP<pv!*tfR䊊%S?*iٹ079L\>\nx\Wik]%W⩞Gk1K6A G܁b2;튫Ч|yC%*ѯ;xTE+GLrCҺ5Yǯ$_~|xATҋC~ݚ] PٴMHq1P@ rKBɂ*AUB/^zs=P,2/POYl;z-(s$ÍU>n[+/""Z'q {Ӻ ޣI*A ϣ} w|ԗ)7e9%*kaP1_\쮿>jC] EPD[MtgBkj gwQ6mpl!jhE/fLw) cht!mϡ&DSA( :#&<#yEXGkses$_CL(gN.dhܷ<,Uخ;f,pA9ݸ2w(c)L{fPA!* 3ަ@&W4mT'{X1*IX;ʬjjBv0iD[s3Mʗ83tOMIZތd PUS۪ Bumq@e2zpVZoLR EQI]+mg81U뾮Z~X]׺uY'Pס%u3:%]N\5lgeYgBo#,+Wr;S_i[yu<*ȡ &vcƇ y}wDhB,MmA^{+hGe7j?6M6bowڀ y!M*^]{rs5 1)39I 9a|`V$,/gD݅ b`}w8qӋ2"DiQ` oD^ˣvˠ7! 8:gs")"t o ҹPon0744}g/FBy3m'HPy|`2̃rng G5M`QO x@v'eMob&8=-?_CZ<\]xfb .G@gQkn~k&H&C'>W=7 6M:ȘKR7,xNPkSQPQ}hACĚ:u3t3flt|*E,j΂Q7>8[0MH儳ۛ1cKVd=SrgJWV*ߚ,W MVn'A37C߸lA MɽZV.BQt,#8A S#ѭtV*kPF q^{{ a6R|d_gɷ׌ܱW~ en< ܹc wW#,\~O]P B0eWlܹ EL#RrwC͘Py^iFskUFat3)*7_߻wL믆44Yӕ(aCZMky6](nemit3k kAsCkMG{ښ$6^w^S6r&wt~ƋtE{ϝ7汝C`\?Wsf44cMS4֌RV񝎅1ڌ 2cI!=/%}9Sun3V{qϿs<#n-9Wg8Q3ru%_/q^jm= O@ R܊T 2H|7rf޴!;uYaۍ)yv}Oh'(q9UgWtg =BQ|Y;  ;L?EY>$CY(6ಬ4 ^Ps'A( ʧbhK?@8lo LnWzaZ[/p""V5 kI -A0-1xψ'}M. $[zB) 6GT~K;< 9lIHO[A8V)*v|}'i [$?nhozAї&JB*,9:g(IL~&ŊJ'5?%]kPIH\1xD@|yԩ[Kd@! I]?fp@}_Dѕ/@żx(br_?&|i`1^LΗ`+xe:?KP;C s6/._(Q#[77Ј}J1М>^ܥf، ~:| %ч\9=}xߗOM`(څ EWx/ ~{ۨ%"ڗ }1IkCoT{vI~d> \ suׯW.L+NM2O7 ̿nT$Wt=Hq.Y`煴2^M>6OH=rݖyk:f}je@ZoӞ&Gw0z(h,78)3%M&5!.frګ ApUbfi63pj*mg}˲d|>9tE#6Q_K|S,8s+Yg#TI![J~!f] 6Άfwcbk0c ffZ-#]U]!&D}ބ"65%<`&?Sftx3.!~6idB{ߙG*,dJ>&h}rZhB޻ [|n YmOÍcw۲ݸ/DyM}c}gml{4cc"&(n,5!ߴBmhC8 E E5c@:+qB(m in~~}Ԅ3S]LW&D|טud\H2o %T˓pS ͘X$A"#Cf44]_Tt=: Ee1K<c-,]4~ӳ^ͺd 44Iibe L}d?e.lW"?\aG'+kMx&âIn윌OLY"R*pnkܺu k z!W\~&sg|gHߡXv7]{upIV0Qm: ־ȓp3+/nU;9\momk^sg,/㶱Yjbtk7rqr Os |MBn;n3lB!sL[o&g8Hd@.YlT Κg&A3=kjC-TU;Z HX^9MV'O,wMN$PmЍS$9*9t5Y99Ό?s]ML oLBl%g6)J߮nݾcyFY5u3X诗-0^w¿?WS47cLO>Isn0^t;4ܳ湿a&DFKS*k5O3/#ME?w{i0)*nMвjuWgbC0lWכU&eYOĭE&íLg&xҭRvNո;K7g-1c_+/|ŧ{=Gs#.2[-Mߕ }czkDH(Mp2ܦc P'ǭRex!e&+ZxO M2`R˻if[$2)f0f 6\Ig6sFq 2M[LHSw>u+IU !`Ɠ!wشuR@[Y^"'L [+ TӜ|l kB5 JkX-U;־269i:kH3wA^{&w1"ĝ#b'O&Դs{Dfƙfp~L` 3ޓAQCTc*&{i5[C\B/>7McP5&bƺӾf57Lkdwid]gXfY LrmDr?}ݚkiFT9Ќ"A 2E^z`"Wk+r=r߬8e1Ԅ59/[e ڤto#T!&?ZE2 ǯ%0~7;;'ϻ zܲn1)Cg+*"IPU 3q-Qr6|7[,^܉&zvtB`a*6D}wR̙MSH}B LD~oBCgqt7aFKgh`BA;MƞWݜ֜sF:?!Yxk̋[o/)6ayokfpŊeSxҤhfu&Y(=B sr|ۧu:fmy .!:Ĥ_*vTs10Q3\ŏZnjG="aoPN:J3ɌSUvg-imuuFk&pɚtUw_w7wǝc84)ΨkA2Ʋ9r߬jp`LVޕT!qݸo:97mFufNdmrgoɧ1Ō>)WL8Y((K BbLb;IwMá vQvi{ċf|7$!V)qg\Vav! Xd6>7],3w4)`zJpYM+3>s}֌Nt3gMu / 0"R.sΫ}6}іY_EHG;6`!3>,5cJƚ-GL|6./B?]Pt{vtYoMR'P盂}vkX@2_8w=5Q_1Mn x9G%7Afꌔ/w^^4cbfDoq ;kfr3z83!s8`Km}jluw qG%EfiO4[3䢌#d{k8IiD&in=,ng_yZ^@;cMm|)7Ie5>8чa+pk4[jEN H[gS*Iڱ X"îRU()P=)AܒbTX|Rgnu WXVPO mP蘍*2S*H^ZC0T-zVu;prJʏr>DYh,.p'!\^JԚzśCv+OJol7ӄ=\24t q5}eJ}fS|U!0{BTQap=OGbw/Q? LjZ\Wܪ]U_^<߰Ty̆PRU:WVyYG{:y1hhpjM3ka3,6PZB:CX1C^[9sv/&GҦZC[Y} cz_řb-u @x^PQ@< kJBOl-T|Á >pn/.A5t~?@> AB7&/_R*zGpocaz\ƽCx5(z(p֝ ШHF.Q]ӨarSu12|q.Ycx;Oߏo!`VW]G2?.fWnKu⑂8WoxҕCH B/h +0:P*8 OЫ,- !pp(7%_x2F޾Ԗ@0-G#%ء~%nSS/דRJ}t+R6 <7$'gVuύB:AAxRZwmo#W8bC'|,N/x:XAql{/fEKp[Js# j2gd,CΖµ* vIk Rއ5| | 9#hrԹGZp)ְg3Zuک$ۋ [` |PKTBP.M^PnƗWG _;?WB(9"Q?KWki%8Ye xό'es>{o;d`vQnnBrIe}[w+n$3Pj#unO9S4x}'4RťϪX*1 |+Tz0>Ensrq4J;ϕՕTt*s6;?iGGH{\\ <J`06E#Ҽ#%tym( fo07 F7P*\ 12rM G{!o܍q^TB5m^\K,9T) ל TA%b JV~5ΠB㓄U屸R?R=6jӪ3D4's45lrnu4?PNST{m vT3f&]O`G=mFftYNQնTGvTN8%3:J+"EYyNwL6ErNtTI:;13e-{Gmpc*RLQeޔ6k3];'s ё՜jlg8JB+%:诵llF_wslˍ.Q*7LaLczD2ev7Ww7[l\N~Xg}g/\Dٍ0#W4^1pg .鯶fM臸5u5E~nG9o6FM0qCM9Mح~zߎz<}My5 h>qj yN&WC 39ڶ3#{L~ag5S% IDAT:/hr?dRõFz=HkwOv196x޽ehKjnN,8<3^wwsc|_| 1>\,K dJ$2L1C<Ǎ5%T=Ii;#38_wB ]xm\0ryzy!MP=DPfrf9 ~cՉh^Vep*Bg7ޙ#ocT8^_(?xZ7*#'B%\ Nr`Q9!TUQX`rСJ 'zEeY 7J*fD3{sB*Q,ɋ%oބį;nM;?{I冒3/ABȩ}bKF=:%zmCP姀xHNʍwxR!m4AZW_hBQ) ľTU8. o{\mŲn-R ؜PCA~xPϏIOQOSCwVWwRʵMe. &|ҁ [Sb!P yPJ]Ykw6S1<ˏoY2qoq^Gq"܊(ʢp<%a 2"ne򽤯EkE MRm>_%f?GB%U6ÑuMxf&viEZxz(|. B'pbc?CwwP2n08WE_ 3ŸS뉞 Qȇh~Dנۧ#ii0ʅըNE]E:BgBy+}RqXx@KMU"{ s& EM刾Tߴ"--xCҢ4߲YU-ڧ- 4gB()~ӑ˹+C4JPD5Dp*>.xLak0ϋ'#ዂmٽS~ ܅CiLV:Ӧf<ɐ /UքЮjHMpT-u!=K5?AJ`VC5@wg9qk_ujs6|NIqׂ~(%- CxxeQ9Z􋝣J-aJrp@9l#cP͋I[˗@adHC^ ݡIvj8$e!?*l|GQ^akj:ɕNG~oBz.I7a9)qc」:I)@Q,{-cb{+(""R {cS3=y="ZwהCx-ŰAҚS!*j0Ma=ş N8SmM ?*WizdI itN+8iYT _]!B+D.l>^a' 'D h+.Bbš6B\ܗ7{fpz_Hǎ;ia2n#y(Jo_bY_}4"XOIɇ*`"rWmdP['ȺRgo& `si+_n [.60lɁiҠw $^ǓdݫgJ^nx?n#ꚿVv{@D\fc>%Nh|?./L S8Yלr|u ̩.G࣠^/^ !5]{f6N!/(FCǩV:ۯDHsɻou%>њg;B l<ۯ_\|$K~"~jöh4ϋD~ r>"%T|k}.s-Dou#"lk#=sͪ GPhHΈW@< |{uɁ2(jaGĞ6vGV* litfݒEf\@wc-Tz ~eUO;"{"JH [t} oIYno e^Wi%,`9p㇇sN/[!:13P0j-5KL;{tu 6pdx\R>i,=GF#}x-c<7`W7PkYAόvwO7T7s\D IQ**EdzPA*Rvz1ZAuk{yj(=`f Ʌntq ől.laaE;5j1ZXyg3O'-&Լ2dH#bJjmwl pW!)Mfz{[Syv#)e- U݌)kkI\Mm\GXrckc[kwФbR(A}r,ȵEPxҸγ)xEvc1-Cw0Mz?7:~44pp= @.MԜ5j YchSh덮0Z%mx|F`PL f<|At/x}|DN?]+5z!tLact`Of+t])Yl*-LIx>eWAS i;OȞI$_/>2:>'mt=T1K$yRu,}}m .=z aPyȔBB#4>sa?%;}4=5,$l(y 5~ o]ɥ Þ~8{M d×3VGr^֑w2LZSa,QKݜSʇ?peoxUm.zQ.b"4Ot_#Ώs*4>Fy/Ktx_<4$ShyLjޚ/c:"?Tk.0 .aNyfc]CnC H]);FŠP|^+XӥypėR ?g0$1r=EY1)dSp箢3׉{D]Pc!\/Ġ됈[dBiYDme@KֽR :.:::Gq%<}Wӧ4G  c $&-BM_>-znNVo^&ޗ6pQBK8JSh>|U= l0(=C < I)Qp$F֏>53r5^O[`A.n"7CfѮE3%D]Dtk g/Ɛ v3A`Iдv$0:TJ L3 osO)akF56GktE#G~O%EZ`fYʬ KJBJhzbD aبA[ VuJK#5~39R~7B:%&4|%l"\7Z7D7JRUPjr]Xhi\o7Gmj%5깓J.jW\Q?M%ZWe# %rT %Z)opPJJb{x<:#e r'4<%efY5ڵk[դhyJ1TnZPnZ7X{7JoR%F+i"%%J^SRz3H NRϕ:?HJ.A*JSKz2H]T=ԩ˃591LO)%,MW@m =!&J(BZ:*ISCe-W()阨kYtE|~BiJHw)093.)R ZyT<Ss&aOU)rD+|#a WR6@\#r&}L+Nx0{@-R~ꞔ]w܍WImm}#g%(D:P_E+Fjr)O4\I홝kfv_i+FK<5Q,QJWUwnНBnQP(&0FG^J-R jn\;,5wϵD)nh GRShb4ErOu[&=S(hc%u`4epګWs RRuZQ%a M&T+<6"EMA0XRPLE=VDRxG $%`'UFi`J6s;Y禓tL~9^'%5_z[R[7J»)mZPY:d*]Ya R"[6I!'HRԤjR an5 5i 5l 5 5GmQ&POI7OI'5k~s0G-bpPw!~?/scY.D!5Sv,M䛧C4D.+)L͑})%9FmO%2A*XU%4GpUBS){Cg ROZ؇ ُgeN*}MU(8G],%gVRz\"&R)KI<q_5Y9T"D_(k~ ݻrV`7J JP-?׬Zq频X/mUDQ*QqMlPa\HQ&eMHT"̿!*Mi^Պ*j{Y-4%aJuU2VzoTwuZR}HNS>+DQB*pP)'d/EÕsJ-ޠP Q P)Y{&Xh:DVsJ<TrQBJ]R_d]107EPcewh_XOň` }#eU&"#;Y)k2qrm9+cASk;"s S S}Tꠞ)KJ Uהi%cJ9PRNCrzӛ P){J5~IrFY aVQr>ٗ_+ٳ;4뎶/~8B:*J JY~E!µ}*pUb,W=T6񸯩wbϦ(5J kJBw\jJ鄒CJDUoôCIHg9k)]ǦvC6˾㉲,M}Z&׽)c9Qǯe|urGz<'J,P0x)5oXm52k f޿Qx+4@InjrQcEpQDPC h)RQMoAD:(NySF^G~\=PXE٬0K;{JdN_cDJBJ dkd!9>}ɠr_?kMz)6P8YomO_R^p@_}Dn΅==N5-o 5PVbLȽ>si$*@sV!X LJ<5G,-ʷ/ȼP֔rG~c7YR$)H+^^lɆC0?2)gRuqhI>I\1gu2R1)D%@4і|&dNsǏdiRҲ ȇ(`]%,3ź\?n$ԚEPerK8l(zo2(kG3K%Yj8A(_D֪Dh>a4͇`90 /QYa `WAm`>VpK[ As +8V Ԟ$ gLm4Me m_NBa9HvV2woP pdԦ`R;V@T,zs1^P|7p̕. Eη0upx"R mCƝzX̀`\"_Bu‹Ά X3?#G?;_ C!6nH\iz  uG(n)d!7ҥΫ%n nCTf M pb5%3̔CzQΈ80n=wBQ):}!X`Dj[M@1;}0~vnlfYY#Taݵ%1 g2v359`!?vx q 0V>L*x3փW6k]GfkWH5؄h~ kYWRxb0> yVq='},Cxf,cXgG)Ca < m]QRv ;8m;;9kbXM KM#'l O"wTSMgEF/("r 3Ѕ1]v z8 5r.R{$P݆;# {<+!e|FG "a(iíO{7,ĦzDbL(jⶠCN'E@4鉜= 8AqA1WA?lA_ NAGk*eC>^B.d˦8X?ZnwW?:3ֳ\ %[Qu:mJQ&|.Gt ⣻ǴsE?ہ9̤=TH#pp]`8PqADA{ ݼ9wZ1Y2;H!Q̮LHcC>ش8 CHl*pO#jj QJA@0BЩEn GˮX X}Q6Řn&Bn@.}G:MtP3ӔǷ4)ICO׈֖k#ڴNșθ#e\ïcO@<ɖڽ7@ !KpGǓ:“pnR4/aP6MP^jDq GfeSUO@KJ41 tm.CP0{@(y͓:WkV E"FGW@2x/0 _yC;x?/x·f%{-9#!VBaKXFΜقmaK05`~~:Rae쨜J@G1+=&Sd)^2͡䊍L%.YDy#~ߏppXb8s1UCG=)׺셑 phxT75?nWSHNBvQH;w e$,lCмj }xY< ?Nߞ㟍%]Oi-(a"\!&&P)LvBJmc! NE_QX,CEVPq@* A 'WZsg_7:06)xE=іa^S~ Ch;<{2۹׾8C3r9x!~`WS8@Z~:AsdaJ <\?!3KRk j—g4ږ"nJ&#i#HӘiAZ#'T~9.R Xw<4GPDa ^Rz|8J_ =<%Po`9QNTVЬbN7CgB)m)S5J Gaizu!//ԅ,_g]q}}E1<:BL}$sֆ\6U)X6c XnP^A&`#ܢd+vob`<:܆3sd kB.ĂW(apC~5Q`%` 1_B׳* |GP^l"ܠ-UЪBi@<6IׅdTxC-'6Ϡ }BuŻv~ J 3h>6n^X+ n5z/%s0EaC~yDx!y$p )nyQl`I>"jNQw(Wp6nԆ!x| ^xJL8 Ƹ,0pz?/p>uę[Cg2/O@ ,޹.BIv=#tז@_8~nY>5*.tY~7a\1 7~E:$,hUlFD!=F>Fy7[z |a&>"qz@G$||,.d̆L fvV4*Sَ0 ̗5(둺C y(bIlj ܚS5|[*-oMQM9.w'3DH<}OC~GzIAC.S 0 <  oiܡ[}|G9m-fч;O"!K3s`"ztq0 ƿ0$mmkh6G?xpj pA1ѝD0=0, rW;rI<3#%D􃫆_W"PzA?d+(0"dagM' 07YA5Vm!AzK|Z$wեF^b05DR+Ш+<1#]E!iPʁ8e nr*X z$oXB 2i+4U~=1vЮUfCsn_Έga 'ց\@wX UB%{e<2laoUFXUP=DکA+*V/4.XD)3jڠEGX'追jbDEI}屮X(k&E9\})Ղ|YUZ(E WmJУ|+9Eb"DTAčzh@#E7%sٷ*OA%|YR.Ua)!B?TmAkT+ҳKUR~֒mJ[yRX(kݬTwJR5JJZRv5NRtWj: H5J`ASdn*AޕS[%KJ)Q%nV%%6'#GixQǤ.ZP*^WnD+PN)5F]TNJ9U)TgozqʩR=@jTFQ-u@j3$@ Rl'+yuYy&,m\ZJ!Femeu쥤aO3*!6M: m@?+,0Z,K [J1'`FfgCOH y{<;LgC7q?IUIBv!=+"q/f2ܼ?G8c$qe^"V!ϯ,fϡ]R$@ ŃR:Ϧ׵ Ņf0Jo!9"ԁi0`a_=`#r$Ŀ&/Cj'U/%rK%k9<.+0}S$ N 0nIM)3bc#I;S9{C> ;EGPg`#*yaG{e[HGs *CsCe_tQ&u"9jOˆE uDZ EqZBK: B˒s99nHN o.?#?beLuyk'%;mhCspm)`U>3nόEp-9~EҝzX f'! ^?TO7\aW1̈́un.VB)#C8TU w'w%C]!J5϶ot7;R&Q )o~"0#`EvU9xyLbΣJHn'EK}$ L;ɳ N [Ve29n s3r_@{0`[0]R=!XBr$Y :\dNWg/Nz-oӫW ERee0j x+Ȅ2 A~ aC2߬`Z{ڒV.R-,'ư K>`Zb-` 3W}{Rzp6FHC 2%e֑f݀pxd> P,FI$04S6! ER712Mvogm Tny3a /Kn >zwH_ )o#Em6o{%Gn ܎@'&OGz60civ5)"q10NKbIVkc(EX7L#ꥠLmOWy/P4΋hZ V9[܄zB 00g`:$}k;LdSفt0ՖD k )Яpx8 o{ё nR Ok'7>(),vCk Mp#.$2CPGx7y;fR2pQPb#x&  . ~e'p x=jp1Խv+wRZޢ JZy{"sߴ#nz,@;a\AibTCCР]$޵b(am5gL*.E@(g)HNku^ىךgdCzLrrlݚtlL|6^i-Awvki|2x@߳2T4~RD x)G.lͣMmBRRKWW= q'=1Kk1 Ĉi dy Mu#'@hN>="`$7}wRsJEGtjIdPJ{:X!rteB,e4j,SyF\{<,"Hty~^rcWl>r׀4 /pz VB6侵ũ~46}{zЉ$LmDX]ϠiR#6PU\Rc2-W9'`GVM]Rj|2<69ij3L$w#:/^ڔ嗩kL* "EjfK42@]zp*Hom:71/y=žC'G94/knvfbBOw!qW.kAI!Lj\ y@/ĀQwK|81110`lןd5ܺC+wH+t @(>#$ ݞńHZ nF'`NZ`5:EɃ\ڄ\C/8 % ` [ΆZ>7W-''FW~v0ϒq}YoOp5$nHjWO0u1Utxp-`wgY޽*'44 Ks\ ^u P] ft5ԘI7%wp Z|xvQ0vشJ<8 ,MƮm:7!ϺHA,oݥ?)aE ~jNk v9yq\Ӈ9 Vs*}tc[{!mˡW *ZCp蓊kǗcb]? ^7$ \ 9v1d|^&߼-(yhEa DANVs즧Rd!|3z/ر  YTˋQwi2v\SV)k]Kϐ,z? 3@2{>4"I_{B[pmG),yfi13$é.Cj$) R <XdՕ} &v_3|Z<%mI= l#a1>5h:[8ݮ.zYG/`,OG 4Aja49J; R1RIצY&V1ahIBX`^8cӏcHȸ5 >͛rWQj͐P*5tL.@-5nJ' n߳oHԍH9i/$̻:'kW`cSW`9?gЩSJYH_6Z` .ÍkI w5"|/t6Rْ[}\ S)s]xs9 IDATRJep>a`Jojcмr#*n K} xf6$|G&İ$\jj KASژ@ $2j2:rO9z4WލgtBm$wdf @ƧRO"D?Վz!a; $vC1S2ﺈǣ ov"HCUהt2|`("v# eB7;5^zb0ք[@VP9!x!C Y%7꘾˨\A2lc:̒"{yiv6yR `my!(hDcik 7>y@\@ځf2d ̠}oK/V7^X4;۪X}c6[B<;LfM!X(.ǣm%LۋP)H/uj8:5waU^A@@@DDEEEŎ{5jbFFc%1ƒXb-j,.**vTPP@@Ic$/s9sُ߽Yff|g6VssCWN òJa,"FQOiNW߽R%Ul_x—ĤE4)twݵ`2$jQ7읲p^ 'Sq-V t,LJo볹~]f!7/(oҞ(?3[<4Py#~3"4 '! _L@,g5 <8=0$#8S ;3BoX嬮[~{ޫ ;4w$j~q[=ReJO4VNf&ۿH=ǟhj-`jo~CaL5v8Jc暛e;֫K5n6~![bS*2tۺzJ(ZNN͉8SQPzTE l8?`GwfwfrPW8OIA+͵ Q+xin^ET7 yD$M `:(b Ѷp 4k (v*2 VYS[B:y C_l'rkZsU\h, xPn*<QRZL<6'"Ro5u9]*Pe8 -搬ULc^c^,NX<{C1'2@g(=fCd\,^ ek08 >{_BW08Ju\*q7cfS1w}TsxTʭ8g60kC64Uk,)UoH*rg<@Sw9*Zl9h-{pSw:@WQݳJwK5'qPUcy^Ua Iŧo$pp]+<.s^˶\EV%L1Zn&4B`5tS< jr \W9Rf.olO%G8ZcP610r | sԇhT[00Y ]#\JjdLNsCj,Ɵ_}wdV(r- F$fmU2(Kи`5(?5~4 ̽/#P~oC!pYo%~}"qRZpvԜ{F+/=1DWnmm}aX.x-1(2Ueh`CվLFd|[,rj":=03,f|}M{KߔB OLB9|X u]W*Q'eK%xl!}?1aGrgcSt^Qރ):3ʰ4WfPG]_Sע$O X=NAaEh+}ߐ~kcn߆9pkӝD:LT0m|*ʅpTԥ2ݳ))4S^+“U1zГT 827{ČuƉ9xHDRUP֟-_1k Иl#ty: eGOQ.ΰY)P~oʓu{ vU u6 #g8/V'.*r7fQ;p[b/h vŴ7b5o >Yg͖hyIjFśu{uZ0ge`T[шہʌ͆pn 8А06"F& >ZEo 7@!>c.ݟlV4t&vUG*4laSp,?A2 ̀38MRk! ،O O,N [T)t?V:`ރKP#j'C:X~I o!;@n9 l!1x>7N[%x.J>`6U~uEԠ̋HD/9h_%hwhAJP7:?0|,ͤd-5+~oCvk^b!+Q{v"+L(2g8LBp# F38 Ӫ)'20od;&h՗>&P~ FzƁǑ`X| ǫQǠwS,)~O+ >p`}Kyz\X摳ԙc`*Y){TxB= "h9 n]a jM 69p:dGk*[b5#&֘uͰ"}aVlc6B'K }a9zyNQ/L j4%CO~Ȳ[Kxt>\܎.]nP 8X <7p/6=CZuBO-t(k{<:γrqW/J*)X.ęfXQ oD Tc>!椟恾 .YAHA+?O#R$;0r_V68NI*+)Oj oL{撳Y-C컳ʻ^P,15y_!~ auZs{0z:Dݹ3 M 3 sd=MZ~;MBת%;mɹ'ًȹLaòTùl*﵄Ztx쨧hԫ1D<(̷~tf4 D'D #̆à9lo^?Ĕh0Xi4['c%dm:ޯWBPwnx >=̧]|Zp͛6hWyQsz,aȏ(z¶s#1 + Uhh}ush SW;:-CBF;Ry*X?;cj3ӠDwU]+yX6̄`GL@5v#O/>"NBR N ?¶jyC >O-p 3}%|3Q T7k72ɋ95t P$$ &Q1!Xa'ԁ5|>TWd0ʽ!qu^ g"c?l~\Z*МS+s4|!/ĉZA#~{ d`jV gM1n7ʉ4#7#a l`6ÎLP;(}}ҹ( -^gGb< !Ąn712„n\SRfzQf9O"\lJE ෢eۼW9 {C `#vijSXmFzK.u,, bUh5,K*,U7|T Oأ~NhYe9@A+J@(/Bk 7+/)&_mFlxqz35:#*k :7|1SeKt|uzNZWo7ٕ-`%R j<k~V=>8 n[9kiIR:M=5}v-P3s5 hFć4_~+aJRgUѓTig5krX̡84K* j`:,lp^aT &>(f8=YCOI6I.q.u|RnD<8hNW~&˽"n/]DW̡t$/Qb'0 >ytL;@<yFS9'!Ñ}GO]q`oC=GZ(~# Ľ>x!g̻fQ4P+ qAWqM4͹BȤa[Egw]Xԗ[VdrS0N(m*i6[F@|#VxmVY:05l!-]p$<ȺM,rTeXsSibGm{v t^9\%i(^҃'Т). 0aBVAY&Z@ >z1$y3\l` ՈƂB,(Ͻzo_ޞFE(%i*(+i^*j>W4aV2츘yf# d>`5&Zx#km >ƹΔr{کXOg}gߋ+T-1ZxK$vqMRT{s:+Q~G5zw{L,5k?83?34sџ-YG6-~ mb`^wU3/ZM]K %l9P O %P~ ?MRp!D =a9\ދǶA*al}s bY.P J(b]`X~[  b 4`!p[N׃(M$ 5DѬ2!LNXDvbë]q:Gb{yh-n̨µPPj2ڏ+c>ϿA5Pi#yjq3:r! ycciǞIthp:?Jid* KؑyfC)~jL9T}k`'bm ߨ2 zPM;3 ^j*`x/|i8vheqA#MyiMUNt:аTݺxc4} P_!Ϯ0.I9ZDMbB@yy.<&"ǧ"!R6s=nvHc SdU?"\H39+u`pDz÷"4_,, 6v,uEN0RcX)rGl߼B&l!T="dv8)_6 Eޖ JR8p]nS"\M0o 9)1X-٣-y(LA)F'6"4\q\wE)bOCF|kE"Bi2GkevMsvSHavh6rCd t\J5s5ah'DHPۘ}5+D("¿{+JkD:q.WaA}VXDeje|rAi}L;I+Jп_hO!TҠqt} kNvd Ey= i&Yrp[˹8^;|dLsUnDXhrхfHm!+m~1La(}9Qkwjgi#Gu4K#3.1 ,2\VjAʟe^e),zo^(NҺծ>v y\D{?rwg\+Jۀ3xaOߓzÓw9 #zJuZ} -Rp?BbоG $s˙/Rulڧ~)x3j>Q ,4!<ێ &V6z~lH:ͯpąVPQ%oh߼ >  ˬ B9>DxZ `po&|VKus/.AN(J*=/14{ h+I yk,Rޢbkh.4Ί 8T@O+poq';ʼd`_0+ suyɃI=݌ i[9 'WO=) `3&Z~%|mAn6&ӂ/q^XV$l#347*Qw-A -ٳs\o< Z4\c8Z0}88?%m&ˢuu>w}(]n.эJ'Zח>+GxNCɥy3.20N!.*D]v[l:^ʲ9Уa[-yWޗ)hqPW658Cn' 6k0 5}E7\㐲ȋ&O==ϴ?gO3"OIXZ_ʪ**>\sԥx4.A{8R`i]uEZV?Bkۀ$ƴw.60-zI28P6 >_$\8i 8MH$#'6p\:"st IDATR@0e!+1Ke}#%sZî2T55r *wb )d}_OTq\')ȷ$#[M[ܗV&h ~t~m.j8.5FPEfW-pn@vIu EeȻh$/wPA *xPIe*𒈐@zy.OU\ ]H>V퀂sJN[0(n® Cku 4u35w7aXqh ] j/ɃgpT.ӁQ0~(DOjPrۖgxxC uGwBu8 c` 5ȸL?@3]v 7QctVOpaZGU4~;kZ &LkRc Pun M rvdȅ+H#a}4ov9x.:r> !ϓ7C\g1/nQL)ЮVjnogW760L?˥te)G9Ϙ?HYZ,oH)t=~I{NS<)qG )Z;K<1sDŽMȈVu~IL|E,7d>C (4D ВE@GInRt\.ԃ#n|?2 v*0҄ /q)VJ_\@|M` !o"2A5R`z !a]US>;vs<)s(~󷞔9,s_}?h&=dCV2\GF\nhLil;I942UD%FۍXDy(}ev'C1"V?c%~knԹ1Xd,iiDF4.5N; /ab#W_Fr8[{/d^T;[x-JO,<vCd~1)/RA ES, ~hidډvDgvw?cĪ5 b:Sja{i tr4ע'z(^ryO 0k( )BwPJw =2'l84:u*%y\A3&r^X#RI+mZ L8``Q@ej uJG.xa }V3z)*E gH-9xÏ?CepMη-5hQctFH?~(দtsJaU+D_"RE+/6 w?DA*&hd%QH#۠.O:EC␗)9QáS *~8g_1?"D{ە{ELouU>Ϻ94E#w"n e̒V`r<)sʑ5"GD-:'BccS2N4o(URNԊW+~ *L.z*%jɮ=)66'EpÊn%NQeCTʿ2zՍSDȠ\Qnke!g+cq)/y"%L&T=' ~ rIXn(+WA4~k nN럫`[Og,E>Q!?LVҿ`> j؄ PS"Bq*(_+1Q%n* `yue[[n`-jp|'rC~}y>1֮.B*@H 9)^D߳ኞ>\{EJQz^F$NxP=-04is);a ]1DȋQޙW;z ,"۬jp7}s >`gg7%A QQfHI׾Cc}8^РoeQ5]'!hbT5ډ*kɢJtyo=/O.;E=+k M]ߑg$zk=1BSQ@+QX5 v1&_4?94~"frKo: Mb!GA5/dr{MG`/:M0D_CKm4!p.G6>'#Q{8 ) kʩ + ZzZ;o,M4'>fѱWM|j(rp^O=(C.(]`᳨Ř_Ȣc(;nTpx @dW ggX5\f`s6MSa41,gj|&_fA-di< ql~2Z?Pu]-Q7 Ҝ+.!'iՉpx hnk lS!r;üFT-{Iؗ~T6|^_f3ˏAL`Z.Wm2ekvL/ס>m#k r)Z QƱeO\|[HQo MNl>=kw~lT(7*^m^7xI{ 2s1iuWw1@8K&!lu+|Bف4 ( 8JT\s*TTo/`nvPjpVC.ݿK,F I͸{ 8\ 80kw 7TŶ"Ɓ%]g *'ῼך'BT$}zV<\0Md`0 N_Z&S.ϐi IM-V=0*ʉ #g3)%XJojh1i6+jsK;B4`i&\72܋}_poSc៴30m%j^_lRvv"o7بT&pY̻giRX4ۏSv*aRR)W1Y6imgGbNͯr̅:#\a¾tcL穛 4ʃT[.=}@%_2sS8*=3huU0 Y|@ gk86W/ `Ck, C)8|[&0:îk_3d-@W.Z.XӖa=tlyǩI! xՂ0f9-Q4bKE*fJ$HN)Xu::&2A yb"(0 D)j轺iC#EY߼eL.b:O(Ӊ"2i@LswDXn.u3T;9H9,+/5735,Qx2֠{r]Z~O阬{A'>HXV*GEmT@.+E(m`E:ԖY" x) :dml򬹱"&+ZsOTiDif?h{&T;Ru;DgE`cS60[5R7e-Ui+"m丐R&cd"SeQ$7hFry5OuO Ttebw2UFMN^{mrDJ珍qL,AI8 >]n|´0tRʌͽ7R[cE5}Ո)Iz]-c&p# T Es5_/Ȍ#7F6\N DVʋ:y2y1tRMaSK`)Qe{9ea ZN 2^6 h~%lgĉ1 ODc(c';DcV닰ͼ :nϋ0ɔc2gqbDj$1BOe:j߿&rP:cd{f|t ] IDATyyghpMI9&Ȃǝ Y=i`NVrR*'d@$_-H}*mxTc9'2P~֑Y~X@fǔ [9}r>SG'jr2-$d[Z$_H.IĪxJq/6?*Pfj]4h0\37N]k9%MiKKr\T'. 'EjM=xY(cdF[/`Q=F _ls/hXO-ѶdQp(Z6W4ڴhc'X*(TFm}rWSN߫zQI:iu Ey30~ . 2l0c/d]yS±GC9W3B, Dj&ƙk_2WQъϚ­*mk4Zd۠nfGѶHgD_[,3kz:/b-]Qԡ5nζ:74+DDw%:ߏ? 7kDMЉ:hmSˌ"yN֋S="t$Vj=ejf'T lh\%2i-ײ_;C?F;pC7qq4 Z|a[iyefqS4ڜl&zc4Ead 4y<䐉w:|[TvBƦNr"M) '=;At}%:#Ɗ0D qQl9KsqpZ\ cRKչi͚MNT#E() c4EcD snjfy a.0;wL4禖  XWGi9!ZԸ*B-E9 8uE7鵛9x8Ic$Lj:ƙA̳ DjFu .fY i߆c8Qf>(&+K.S/synUi4cS&WܽN_DZ, 4eriGRu Tkp~wuo>8ǿ8 rt G8[pM0P1Q?A(lw˥\(ebc iVrR՟=RxSR&ш6\Ni:HtOg[vi1{E3A y4u}GcgeFՋ5 Fg,,&R$j&sH߻^4wVpYcvô/f猂P%Qr,Q/4f6KҊ7Fr{O٩YlwQz ~F_5o"gLYQGmgѵk<7;Q#kYMNjgB:R4^J4M圮~g:_do1m+ IDzvuޑrI~kbśpQ?y%|m޿ X(׀[[cDL9@ߡDrpWsQ&tTk%o 0^߻ZvDo).bm_>BnjsADAR3>>6`$ :o!C4jә&@X*:§W16]`joȷy?qLrZ},ݮg"e0 -wzD'O; סu [?CC'jBn4pm$p= ~ xM=FؑFEZ{- R> ƛ -|h-`ʚM}ڻֽJcg<&2Z@_Б0!h|,^Ay3ԁ m1eZl(u!PEi]zRٛҷ,w^`-SA:fؔ;!0!er0 {.Vji;([&N̄`ݻ )` Gw#@#pI {x+t2x`3L7Px|'>@fG79,4<ҚhcmgU0OxX]w~ҡ -J~ OE{_ۺy2Ghz᧔ D5{a({p<' 3 {Fj6$1g& zThY"u O0i&?heSi*C(7P=l~nnƜ7@{|[r@7uwQc5&K.S}F3#!d} Eϛ& hFOk<חy9Z4 ])1r1V"Ik9ko@昈[A lF5n7~DxLmV4k-<;?$Iṁͯ*ٴbmwS]e q:jM͒O^ձy8()D;Ь#'fyLrIEYd,Ja5}BĻEaǭ?00;hY"Ad;;5R, h$m?4r/h?fgfvL}2\fܵLB 䊒kHUߧK|fa/uKڏK1^:&g%Q6&εʄ$y׭/W)"B?ӆDxU~ϓ9Z͘1cI۶mz+z֖Z@y+ZjC!;mPW@E=ci:9V0e%Z]3J]cq~w. º[r,lG~;GJP# 0+X*gف%inV0[Y} %5驴t@:Y7!N̤ }~j|#G6P4Ytl2,)SS sa|>ܗ]pmKkpD+ִ{4twN7KKm_ݡ8xJK~z[ Pb4?{|\8uzq}_8/~E3@mH7n,| __[f6V؆SaGq n3(-NljFzzmtD܂ƔY;;C](.A fh=,6  C\^c-ZOL~c,!I6yH% N$ɟ) ?@rE#`{oORe|>nhqM/@f=њ@৮sY+ w=Ë*=wr~1_q\.8`| ?7HAm7g.#EMA]# j jdgPd׳A;r?ۓ­T޵:b4 ī+ !2C w]ĸip*z1xïN&/&E/ͤZJR?cs*E?sc\fܠO/+%v>E/VM(rh+@%r+<ɲeyh =BUq$5y> <]@ʵQyKj f+OP@ <8_6OVո" ?tUStyuzz2)*p}UWysPYaL(]\NB:[|bz3UT`MުtF]9tc93)B&GfGv_Z;/!/[#ݭQ@U%86ȧu0Z=}s[YKRj̆%@(D~'Ha#N ^w6ۤС [$qծP |d3<|߸MA UQ \IUnA#[辛ujqþaIJS< E\ uW'(DI?g "x R쓤Pob >Ja"]T<%:JleV3ɾ Ŧse_a s|?xҜ.9@$zUh: lh2"{| R$r?6!vs(|SVyZK=66[rf]#5@kGE#_:4 ;ƚ/C wZTT OJ\ ioMXTYv<|ږ]7.]}sT8}a亻 >Pc:YQr(Ot (rxCueТ,Z=n9X<"Y]FWhM7rα>$CZimKU*tQƖSa'kym.@ B^%f]#Jzfj àԃ-9UOj&c\*QkK*xF  X[dtOџsPUebh=ĤT~c  wsMwΎWJnB\}=g\"\[FBE5SRV׸c \kZ ͍Q'*n< V r  Hn[OCh 1!?Dz]T%"mh JʚmaIGKip4-Nla͡tEi.4r^лGՙ?hDs_֐yR?8<ڧQ픯cz3$  ՔS !I &Up J4ʘ&AECQxeMw`#[cВxJZӀ.pXJSCDޮT1+ڮSV;[Iva i ^/z~AkSG0*nx Z}q X5Mj`*͈a=ǂIĭjFzLƒv/1(a(]X; [~[7KgYn<8C` ڴVNڦ5 pm}9.aC,\+27VPHY ;|9 F-X66N(|'r<Bj_ӱ9ג;!+qkxUS5fY(oy[#:('q9>[VlS-VrȂQJ['/,~A"Ft;.!㢐nX, pa:FO|斸5PLu7 șBԼvp _$Tk8d@kz0lCƄQDzx+hd\Jׇ`G+``$8z^B;h)[f]nmpC'm0U_s` aG"ko~v}pc!O$U a5]#oOԨF sۃP'=`:S6C+$8k>-朅wՉ[CLv#5`[@/խz~7fN˶FrsupݐYHstA@!4 ,ԑ]Ϋ?T@ُ.ppren$Mu;t}ۜFh@2mX;Hf;v :{O8vAyf/W#`e+̹ko١}d^,m~lazb1 D5Mb.3vZ!R: U8Kܰ<[Z5Dh2X~ѾMWX'kE皃7ai"MH#2(3è]b4$O}-7XDmO^ڶDN{xIaDٹ*t"Q_D#չ qVd-mQ IDATVsge_~dߞ9>r)w4$X8u79< ,k[L+։VPk4948jt>t;yt 0 Z>?[G+JNIwcrmt ~owu-Mu '}6`UuqPY~B  - ([P07)&C.0.% V Pr ~IT{ 6ratdo ZC0R(u+XX+Dx{̱ 2 +h:<4 IwfIM h[;h{C亮]Ip@Czbm X$HB4 vQ<' :}+l ͧDjV>+nbհH1y aN BxŐF0֞2(t٩8K|o5&c."؅C$%8v8AK:ԯ z\ܭgh?\xL FւPCcxS\{Nxm22y y4EwY]rq R')%hώmr(S85~_"st y2r{ LBphrnE < vWP zm¹O.C@|*鹑4Nk@:zqK@>Df:էD+zf99{R o"f7$ 'B::HQj0YBTOiʣ:= gEnɄ$8iSۖm:,bCt%U/js x8m<}N'M!Rԃhiu^ o?TX] ǃ^`72Ph8\aYrEnNjRG SD+/<Й{L|&0YKBiGt*L>OZ]&dj]SFexTn ? xf$bws6 %Cž*`' ]p> WCd^ $`d<R yT=p `yj |׸>"vixKR>rų]un@)ʑ͉PXξzgDl\9/[MбXPgY 6_h8v , J`J.p?a«> zu Y~Q,3 y% *tݏ}Ew$-phmCti=X5 mind WnH֑~c?ILju+YOiq܅w`. W :ѝZig :ڷ%tc$ r" ot8rnmu<3 a3%pal' &5}B`;}l-0Lի(*.Bhyw٫"S$BWN-tb)MJтꡐ3E#pX-+ʊa)`dE5b,U8Ʃi LMSw@Wxn,mBJ_Rr9eBHJjmTxO8nt%ϋBKt[+vY!B7 ГkiƟ0H]pUj@w`Bku>i㮲_a&wZ/١y^ YQ%&-Ǽi#na;o֯>l6,RHnO{9vP9/ęxZDDamOqD57xی3#oaů6]P[yyKT2BM圞#B/KW^)}H#.PtWf;94QTf)MT|㠁;vڡc:gfgD~Qa.3_5uFmyYodxh̼j3WtlsJ. "`T3(L|IDg>l4>mO{B@4?]yv,3C ׁ2!na:쇇@M{;Ӱ 9> UGQǪ*h !ãʾ % {cs|Kol96ߕr 5H0vCbJݭBv Xϔw X³Jp,;!nЈ}i6RrBTy;@C8Ѿ^ռ j mx BPc!ܟC+`1:v8lx k!t-~N,{n^o678;NډVH} .`Lp~7ځ%٭ ]h7w`=fX܄+mI.ya{,̓w:Mc zIJA1Z#ڿ5凝a!Vuc5**^sj}n"n"Ʒ5&Ӈ5K|F(FtZ,_0BL66|Om(J6lIRǂ%|#JI4C-%ֻ`C(YloExÏmaQ$A#"E3ek;c &=-a|̋{tn9ο0x:6-3.#e[y݌_6@6 uP9Rlt6sBsBRBڳAQ <~^kFj1`VT p`%܈o 6h/ZG qۛiF#Q=1[#})+_fAcծ4|!i 9IڤG ˥ٕBwذU)u9\gk^gZƘ=9/o+?en1 !xήSOzp`O>ps0:Uyΰ~(R#w/4(s5Ll9v@e#,RR˯V*|է^ ,HJy3Գ ` H gac0js:2$9W7~Ļ{>V>k($5Jq9tf} !!$׼Wd RG,Ɣ.eZK(nTl[o1 ߺnQ KKv0kn=@Y` tJ-xwnc١D;nq%bTgL A pJ\ٟ0K` ܦj jQl{XỳpFY-^Z :v<. wי>ݴ@׽5BXD~+Oeb_,uQ&r`3XR}oخʇ/Iq8$ֺ[/ſXh'O~r 8s ]'Yl4!l5` >22;>j|ʶhULC~EPlvGL57Bؔfc߳j}{ۤ=[nw\ސf\Kҷ!DE PJ0`,E3rI>Z_ }fԭz!x5RCQE0aulZټc9?eTw{Hacut1BێXs)tǻ^/J`&43+?Y0"t?AfmY\z=пJ)z>r߉|Ж\yOmmO*\MXN+}uZ1)Ζ'6wdX ?ZܼuhK-%=#Ю1"6wæC8f_O, +Kѿy /vDŐ6L2q4a%j&BAQ<vm *% դΜp~{T27hLP e% xg WŐa,{U5h>L׈RBGOpBb UG`$xG $:7RjQ4Kx B;hD ] E*~xġV x 팥@%&ܦŭ!@ҊGPO)WӢ! ہ$hVNCo#`:cEiyndEen5Kv[]`X R=سy}s֔ nlYPЁhIƬzm>=Ac`Eߺ XDٍ7},.Ut=Fթpš'7hǟRϔDѥO, /WTK}Ъ)|9=N5NiUes!4PuP[ѐ'f`/`؏WXz"$6дy CX7.!AGZ x4HUif1;HG&?V~ɞ5CWH,xL<\mk\`G)-a߄A~pAaHͲYpod))Z*bh9 Vt(X/+P,0No9mc」O "#ti""MDE,t&EIPz=ZBMBO's =r\yp gךkc5O j׺x (|), t!K10*˱e5oWXVgw7hPp (D dO`篒}lFNeѐ%FРels8/ZCX0N U)\s["OO{,[#rZnut>]749~!_1? b}"hh8<4ss#7aOe>kf@'T}m 9? A:샵]2kA$ׁO g[VSۨTcՠ b(G ňÓj-WXj]tP]@S31D> YH8r2MJCcɋyv;)pd]A?)4?֦ xsk(9 !z@y~< eIBE:BF,3xxg=N W`0WYEC`ǟQjf^4w.w'`[#ROz,7ZAΝW9K)` IDATC m)[?4|"gvTb2%sheLz#߃"гx=QCL9cڅ8&ys~E˳K2F]ڰ Ǝl!Y,nR ^`c6g.lDXe?%X 7.왽ͨրVg{t•~V_n9@v~<# Qih KY;쇣jAQXq6oʌyg%ZGq睼VZK(&?3xg,\EBkQ<"okFsY۹ @ GGjk Ym [҆xXUs.r Ë:d*t@Ź,>)lJ|1D^u[1ZĘѴAxI=1ԇl/DX܆LoX* e_ #--U|.@ʘhsZ# {?*GN(w WlLKx $Z[sW/&Cxt=ԭ-zwgxmHQ:qyU):P¯a,[6AbtEC) _2; }^l9` ";mHC)U2t>r}CÀB?Vndbű5j.;OL '䣲] \J>$7_j$qisPV7܆˦8j/\ AP@; J@ê,gyyfgԶ@yGau4x˗^[ADXv (1Ydtb }J49 5uwh}>g?mzOS.滞3ֿ2vדG"ī*G511̗] N5k'dӭ/[}d}>׫GFj}_LQ>7k4Dbj~"Bfk\TMҋdd=l LblKX.c 1}on[W;1t1-XgpEnNh=\Oe{+{upIW>#>c}a5|Ze-Ihȡ7Y?Xc 'c¹ :Fy_)6)ƖƜ#O29WY ǠD#k]J9h}~0ZH9]UT/ (SOL<$Z)d;I3|՛ո T%y<)y~<4yfHgtYLm~B6A j&7⍥1dy7Z/T\_c[?Yt͝#_h}9uX{RR^&cx 錱 qsuN+[);Ø} xy]`P]\Zukd},Jc-\CFNxǥT #bCc?nPߩhPtT֋׳[JG^ByÎǏ/]a?é3cAvۼ,BUU܂ y?Y^NYp4~eZsFE4# 3h$h6X%nh0wHдcH#L@7EeL~GXۆ YBBbEq>y_-fj^g&cX.RƬ"dtzdV<Α`7ԚK+51T=#^2bMA֕ +?+f1P@š@OcmQZ:w6䅮r5&*l ϽtYS)+ s/Dm>Bq}@t{ NX= (TmҍWD)^'?sJ;xCs'9ت3Ch^FeW9s,T!nCfRx$I}"Gob0xErѫ;~ʶ IeJß:0.1Qz.Q xqu_ab.wZB0'^v;vp7f :eˡ;5![qga̟#&aX Wrv.E= !$m ;dKS,Y泜@Q<^eou jz@*WKd 6[@TW(JR+ʲ+>xCdCox;n+.#6?_d|6td^nٞ9ƣgo*7v 9pߓ1|<П]d,*(+ۼ+:ˎ" 13ˢ.HGHG /-x/|dE݉nDX%PMmUkƬ^hR܍C7*;2\djQQmd$QMyXV_keyۭm-XoVQjƶKbyTqNLcvpǺ{lrsEْoP~[M7T;JcI7dc`TNqƗ[abEV /ȳCZ* ZTb&N!/;sv>^3KJuuRUFUNbm!ʢc6Fzqc䡌4^=UF!v2pƭT"nwZq7 )cZ"1!e{Y`W^tSf!wZ3i~jk4×R{+ޥcii$qDn'+5Zh23y7mHfmLh;FeLAK)Zi-_,a:ϳ9s|5yVprSBUzy"ٿeX~%"y JxYe48վ yo@B ~|;w,J]J ~#ƫX+f ]cJ<7Bs(  H- IdP9k}9ݙy=;.x7w~ˍ8>lJ|S yV]bȰ\9*^.Y*A"0n g᠟I Yg4Ԩ.M&aij k >>^.]2>WRuKn$J_ ,A7iKqJ5H8Q/> ?HozPEXx^q=i:n 7r X  t"jW:|3rAn {@?nqsEE|i~[!m?7W\n(`}iHIL2:#gU"m??l n5 gǬ6Ԟ ը1|>dc*t'0!zvTzٙg: Ua|vMk::O\_UXA@`x܁Ě#FhhϷq?"@~HL GP퇝#ulikb2j69 )'~fi`\Ɗ Bʕ"lo׫Bz&C7A4^!VV8VSn,ΤCqC8ܯ=MlF兠̾NXDޡ ܃Lnclcqr@yР,ז_e0Ȧ2xEpLV~w2x4&qW<Mo+WBgT}׏%`[w М5ܘT|̔jxġ^s;Bc]Iru! 1Voo 6g6ϱs;e?Sx=ADS>TTf_,3%oҎf9sp+w1x}X Ao.RUl0O6YewͰ [* ?^J7̀ɓI)Y$@~tj0WȌ1$5CQ@yoˤJ fG ~@xgͷ՞qPѭo9/a ۔Bͷ)9s_mwհ!1WsӶ 0af`_mr\ 9Ojh('ٱG9uEw\-b52SG+eG-vk%i$AKtI*2q;Q +XòcrzȊaRm Vͭ0H(Kc*GH>m{9D o侒츥5&j>Rcȳ_{U-*)%0#2\9wH3ϭ03[̠eUf\)-Έ ފc*9e0Jrʖ|*HT+)vIzA[̰|a (K|Va+I|2tmr+rY?>-J&]Y/,wL _,qn~$g-Gb{iLg>ey}nMvH|;{~UE6ȳEzC$yI,.yUwMNlV356˳mYԵ;UUsrN:8 2=%jȭ0s&̙c lϸ ,<>p^Yn9N^~V1z5|:gs1Mv[M&8'Ľn߲qt,tLF ݞZ.sfgeyȍRQN'Nh$7l|,w{}sHvgyS^}+.<,`է\^ශ4*'b0 6<K+и0ћ6CHW!RՎZUq۶*xC`n×pcɷVድ *>wnr;F<>|/V{҇:kwB}CdBF6/Ѫ5Õ%|uo p*.2 fc ~! |0,/dpT ֻ X~* :ct}Ș.34܇ >Le?2UV~MvMhvuqg>tDN- ! :x0,4E;;!:Ng EK"tp:9?JuaٺFXH왅2y6p`nXLu@EG]z/Y|# #Z&qua1P ;V_^=S&  n:zPd>CZj-MCm] 9ΰdU'^`4A_DAP8akrU ;v'Z^;Wӝzp&G{N(tXpMq|r>»Pp&;$f{iy. }?aaXgӖ~CRdizv[j.{InqM3eg郕-:hs =h{!`Z`Đ" xeΩHѻ8{"W72gO99>b .8,ɧbq;'QGwsAE+,bRwGR+jjm";d5/6zkItj5Z vh!1Eh[%3+"NfQ\vAjE[eлK3z "m>un\KJԽ2j #"X$5)B̲hקftYYEB7/\D]uySZ]Jc>Gv2Y1"l74_mͻl}C=KU^I\9z^"1R[K|+f{8zws(NE$j|,Z}ݼq>t0la yVHe"TYjC<%OD<}%L+)vKQoOs3j*PnAc& @5}.ހgSxox`4Y kH8ꝃquC3 `_X]&C ^cqLob%X?B'cuV7sP- UEȕT(ߒ/6ƙ|cH:!ABdG?ъ://T{@,~ .\eշ P9 Rb(Ejcv|,={o:[N )\8A> iF *G^t|7OP^]|WzvUE / gfSjQʛ,)=XLoS}LGVY, [ϳQe@spXBUj_JuE:^uO IDATT| ) r .&rGAN|;Wc}hPPPj[F8[֚#z&A~Df""|o)fJiLLwA,.vF6kDcԂ0ӂpT‡ZLozj^",+ M}GkbǶF% ՛ 7|dh `] .GޝWv F o -Uv=S)6ؔFo/}!.֟+@48^1R#XUw$nya$d]ɞiSy!!^/0c_+"6znLk{O7b󍐾v ڝw}SH:TF|L{pQS`S+~2 %TuzU$y0:!0cn6+b6*r88asKC8l+AVBH[Upԫ'zVꐯ">52훚p}qQ}j8y*I3Y'@,Е#*Bk{~WX -J$ ⫐,1( &ʴhpv'[rfJTs``-,ΰ|EmРfelAxM0e( "_ 1Cp+\_H$ &N3E`) ZFP(}O !#W _E1@>(Q8_*$=3:@.,x)^¸!XڊCb!]XWbMOr|sGQiR3>ν\P #o&G nl!Sa, Pޏ#)IʖjY۰r\{^kZ ʬ;o[ u!ݻL;џ|{8K@Þejy=Scq\Y՘HN S%1O1g"{|V/PLlLBHxãY }Dw.ʵ2J( [ݰ?r+b2D\ ,N8I2ѹjF3fw.̊4pBnǚIG23`7hoF>> }kT=Y0IvaQb_k`T6;^4Us(ZTy񰒖mh)vqU Gsxj-{K>4e/pҷRJo>Q`%|zr uS15 !6`48rHZb!Zt`p?`u?E;oc} !֗Ճ$q_OO{[uq/v)j/ּŕKc9@kK ɿebñW@#BqyZ_I˅K~a&A6fvHP(982HoeTWl<>fx4-qV<„r*|ZB <nqV1"PY 6!] =8KP( ыT.SY^hd﫸+5穟gqg>HqVYK-72]nmS-FIZ2:._BWU7ϧ1s\NrxWꬩ~b-#< Qr>7;U^ /c2YF#%Z;ٲ\$./Ne] %\.taw*63b,?:1jebmo;AdrC'dIr9e9̏e%dHw6 7 u\%t*$fKI@\rXuV9'ݟ8U?d 姖J|)Z\~M"͑$LVZE̖O&}3e38YU;m;dUodQK-{5oM?Z~1@'9ḽXVKtuzOX7S\.pΓ=VCیuz},zʪgJ}ĨXu&k%OOrj|&E_\ysǧ\QEHt1E$ߝpNvJi)ob5hi޹M)dM\pܽ#YR(DwPb%/I\LSO0xn%!W1ܵlzR1֌EQ4SՕg)Mk+:j+̖)_%VQPIJON!Nu )B[ pE?)Sv?%czqZ`ltc'RzLBFZRgefdn:HfX ;c4G[8}LeKa Wf2ǥ{s]@g뚣4RWCN RLZE)QLN RtrcPzEǺ= Rtb(t荕Xh3s6GYw9c' zr4A`YFg˩+F>G"fnLoXon -⛏>|&+,+`*܍#l jn^pagsК:?֭拏:'EhdFs7GY֚4՞*h1Π9*#+c~ec@tCK^u|_FaF׳n@O4| c ´YlW$@>Li`p8BY.@峲b62jeZ3ű'eEe9Yi[>Z/@` ; AT~oȧW>9-:aFB[1Uۉ}X]_!׷mf|:bly4 jcؕ\m3prbUcm QqITO!&c.}-`5 njMXem?^%irxx< ;8NWaK<ɮ S5gV!?1r-114:dr-Hf^_KxDMc".": aFq#^Ǽ33]37ղ~acmpL^jy%;pDvdXAeAHX[aj6$M鞓!RƢ\~7\bNr^Z=fk,@%.'N(kREX]b::kkEeװUOD]N{E{c}cY1.f5"qY)q΍#E#Ѓ ϐE% h@{ƿEyLu!]\T\E5\Zqfww_i Vpo'|~"$mVMkMm R#iR'?p zS-^&񫛷?ہ\2]i&gmXbhM({g6[;,6$)GJxn>dY[5ڬ:=ƛ,v#})'JFXuߥ)g9rۍW_}og8h8eQ6!g8[9rN vj#v& ٹN1}n l h#=6x3 pFu4-KI|6:$p~o+" }k=C,oe團g)F2CNc3r;}iJ({+If;eJ &[-I4wK"TjU.Z脥.߸ҭl_K8|$WDS?|cN]MdU-DJQ|oZ$1y{VOKi|o>9ʪҔXQ `jy-$HzX~)>pjƞ :.'9X0s6d^{OX&EXnh, O{pDr; 3#0)W]WY޿.Zg|kb/ߟ` pk w)z?Xqn<󄄁gv ؏"ͲXr9cqX1poh!7 <w"2>`[ޔF=.z. q5"n ,q̍QSUKw\KeF}$8YgqBVCfhSD -WSPN[z49IE E\!&oj8df̱<AsI4;6͸4J3Dd{mA%~2ΛQeN~u{)`rVZm}Jx^7yȫ OWJ,K핏\!I;dl7dk_Q{-}9a6/6Uo8Ǽ`g۰d6LwSpC$ZZdL1p SLhH3J[e<2+*:J )a+QzdJ}c)i65rOOmnlJĽ;[.%SNx8,}A{ (iqKy1I> eyS8^q9g@ ߛN1،&j:vДzcnDE]}'+JZcm)jak]⸬bqCLE,CM"g` _pg)En?rDW޶S7wݺrR:bK q}X)uEpCeL3RUJGD8F"dlY!ˍx{dQxCLv"89{GdNDaL~q{nlD]tO]T$,s#QհTa՜?Wu;zLjaQ,W< 2]qȭ7NtɜI>2#]4T_/S8tf*hBZQ{mדp,3hd>THg nf{Mm5#W]sL&G)[ |x1x6j u^b# ia6Liœ̈"ٲVA>iϪ bSdU3;8t%%SJeN;%uԢ/M QfPq!_`*:Q;Urh@//<1ӍZU)[R:bSph79'#L/G]rj pASȅtF^qAGdnj9qU/s8(L:{i0:'l~(/>nˢ12cH[$">e~T|AC"UZ@Du$pNla[<@q&K5&d!C޷v=[vI4zzds2VOI,v[+ww8xwnKp|̑XX}r^'dX'3۞f[iOccA }c& 5XRGMM&$J9e6{{o2ȈDDB)b<ϊR(RjhiiQCͳ<1FĘ Df2ϑdX7{s~9z_"?+QCNf)+VOKc,&kfYk L!zJ&hC8)¹ΛrY.C"8Fyr.RaB]vE"^a9QP}9ןac6סfQ!xmiJSu=2<5;,Ƃx2NyZD)&CLXGb1:Of!$T:hzEԻpW-YyX6c:>.v۸w@&Euk-1Xds.~6Bfj7U]nXsKu'' =ܬ1Z޴}43a+a&9O؅CrO6nf.춝rZ %уzdcE e#UEx.DE."\JR-!gf\~/zkt&%?,<|xsdNIJ@`}LxWst"zRfvD- }2X 30 ;H#@wHI6.3t)WG[p\][ `YDțX9`1n9 a_6/2:WN"Q<7Z+CQ7ZzrA-f-eH'#ޜx N8Ct_`,A"l2d9RJ2xrM**5m_K'|-Rhfċ>}`Y +Y٣m/-1$_1ϳC+E?ldYvK4]1+_v63멿/5'\]wM>Y%Cm,W۱xh.N_'>Ctc]~g|=>q=XV &u䒌%b)%L:>%L0.PKfc\3e~^B"f7=s)41@CY/й됒 3quύYO`f 3Ɗ𣦲Iu IDAT@'GeP6d;Gy_ׂ=",2une0x~ƋE^ni3nMߐVQ__#Ooӛ2m[i۶m;\}qߟ-HNNu8_e˖1aUbVfYKeL 9\ܯPOn2ds|am`!5 e6C571UwF-rb#HΝpt//s)SX\^.C xW z@'~pv9$v)0{,bPe-,_{CV7U GKA p3SɝW^K'x=.QA2*vV uTg,n%L;o*oԀwh`9e5uXԙz5țYXc&K{^#(u*w* #teM{~\،K%wOQ ulI' Wnę>OߑmMoB7cq՝+jDbzoSȼ7xXSߎ/EeV`C?nqrECZ=͜$ 8TK$󉳎h n)*W`̃cpfG/ V~%* M}ˋe4wkv`*_%ZP(0WE&],zmy$.+mz3/r#O7*xs:άml>`ᕅ]8;rc]E>Vۓ=tT5cit)A(Ri1 3FPp)i=gX#SC'+͚/Q|o/=+/d8/r]kQ{'1y?vkK_q܆T+yYpFch -|Uo:Hwp"^ B!&Յ}&\eANF v&.L†"D/}$exh~58AR[i>lRMPlOr$5Xx0r4l FgY8ڬ{(ԇtsB%?rTe/J?Z #șc4@rPz e^P(">ԗ=jYx[v8A훨B3G3wl##%iOњgV0|  #EufY`I(J@xOx{yT&&+u .`O@?W)\%{l'?Th񄀓'`rjZ?$`?d.L@ߏ-@'(4BR NVz:853l˩(q&Ӈ@fg}  h!y QxBTvBUu&U,8ȋGe5óc ߹ڭ!6P^(kH_b݉`+pR׀n)Azx7nocmqzhA Ǹ[ QjvMb@ 2z΍~trO(=!63 {b12EX _`7.{ ;, 6A0bזPhYmH'^ţ p셞 (I[.bI2͈pȅ<ŭ2pME9sr`o' TS(qBiMUbƫEԂpBELD0=+ ƄD^º8y*= ]dlrHNt#;A&-2..| ij|a. ]&`^o8HO}э?کU m`I񧽠r#}"ݰyJ:Csͳ.ҹ]l~er1FjJĀZƫE(m.Y P+$Xj!@&~u][&秶oEVy}BnB)M *Gr€H[E|r2ܥ.~ar Su CT粤th[@qi4A{gX;h>tNA7*`9 \F>kUS˦sNqhM}h6S]WTSJBqŠg&~fY@_=mh(n[YZIli0 e|Tď墯<Ž*|iꆥK+ yba 1 8w qdⶎ/;~m~R,#~.ȕWcAq1XHc "E\rKx$GN,Y.x,/OcHw^D5a *^eIyD!_G6I&%/RYE8d2_;$IE&&+s 3 ʜcؠTIn+-H8_ F&m v :>[VcC[,ϋM^ӷ'spDK_"犹w]2K(g8YIJLgzAU2Ua>Sj,X8u`' +Dy'2weqg1ɒ|Wo+mg;.w[-e|"M<5[&܈x4abPBՄj*p씠8{-ŨK6F$qD@خNl2|{dbA[nω[kÚ뽚~!b#J4U`}_u<>C; >nN5'c9ڶ'9+#-+ECŮՃ@XR@Yg\LcъWCg詾~Ysl_wsƉ.PD,iE(u8Ȇi| _,(!A^a}`/Xyf2$ixg)ljo\; Bw\xǃ#Tyt [@\UWW9LLpоݠ.CܻV"߾Pq{Xz %aeOfI-umIN(AYn:nA9-9]c,ŦJ{W! 쀋ZsFv@of(> 4G aଦ Akz> x[` [VG>W4!}vʇ@;dA\lAuY!l$޸IP%)yN%N&]V0|Ol+@;Xp|2~4*r:}>ȁQ`_"#,[甁Ii=xݪ;54ztr*Jz^8(oF8/XڡcL(}qm{a9 p)!;QP=7Mx%W2'~ktj'`_; bwMDCocv>~Orriͬ zTKYw#Ƣ5Mx7dANB;Mp6a ,[l ͪƸxQ5' )=c, :ƞw ]au+{~Fb<&TíX[z΅jGp9=G37+@Wh@^\b>0:> u\O %ɉjoaVƻ܆&Hrew=WΣ:̵VzF9DF"Aa1YA Xm8K6Rx1[^Rca%nɺ?[XW}BC'Fg608N鴮|Ct`yl=x|> F?Ŋ]nhӥ*|9EZ!F`O$v' u޿x[ơ;gy0&8${yRԟ|A `d>^ߴ7)zr 9g߽߀&q/ԫ4o͟[JU;^GCL_LʁH[ WIziWX Ē]AN.=i @UlGnG-c3TBtWxޛ!L1v`r^g2y|/F(qIhfBDcBE;⣿)@4k'?8_c60`/SẶMD#,7U4έ(\q% j^ @] l'm!"Gq:D1+餺l2<$gM2qx0Q,z?/y+="Q߫ w4jC}5 2RVH`xxP̱zAxH㜈lYvl,[PDO='D<Ԑ(%#D^K[r?WvDzEk[n0y/L`J,3XTu鷪7LVjnUm7qD@B._ 4ci:߈,<>X.Ӏ*jNd]dg"CcEAf㵊%1~r[Gwv$ ]*i )1H%"!wb=Bɚ(Pip-zNFq=ڼf}G{eJj-2!Ђgk|jD0 V̟(C:G< MZꑛ` Ac`iUV4[t,. k©YGK S|K\EBmsn/:*6KqEՖ6p웠a4aXT0,9AsmE&ƪh|vpP%[-pTYǻJ[[xg *6wm߃en0Z9  P;߇3c:dOAƗ-b'PM4s J͡$T $nui, rQj63l*\ÚK |qJg$n28~;GQX$.,,դ7#j{WiH~BlC~+h`P_7tyeWCÚ$+utS1$~!Qq`B8jge0\_ԡ ֎d xv9Pr.8Q궅9Kw*S' F`q300ϽxR)ڵoPx];^ 'B8w r^+DטW+x94A:Dܪ%nP2a+j:߁”9 ܺG@ܸG8Ո#$\L7ԁRAtE̘ ߭AUaB(vep&.sh344ȆZG78 ΞjOo@$xvzLO>\z O <(c0UTq"24WL5P6֭t8K߄Y: ]=Xs6ʎVssyw+uKiY>Tr@;RW [qH`b:f,.QVTWxHQVQ-ю*A]1#d&-+*& IDATMMB~׸WMn/F2Y@yȮ1kԗle0]ں3aq>QWO5QwQגM}כp^NEeJ0͸@iu7 l{{SK暢Y"UC4ֺRAk"̳66!WՅSM Ch V!D]wLFW{#ָ L?,a>mBڸ[oiײzkx3 f\] "I/mꊜ+ijMdD? H]y*}E9أ"|h\꾢fuW5w'G)n,h+FI6݌nD]unPτ̴VxY 䉎TY𕑗{gy za4kM[1mXRןn=*P'`*|[Wf8~Y0V-ƨuە;a7j` l wYG u:\ut+.Բ EP+c[%0$r!Ґg_@xy4 w3cw5OǪDSxC"U*eSe{ZC~:J~]y\^ :ÊSt>jWD݌'l: q\lL,u :K(&1ApԸry5x[T%.Gu_ ]֜{lXo ^s;$U !@H%G yy}Nq* W| !Gg.$-`v v/ GdVPfwFg3K/1_,uκ9Jb>j5 msUR8!E0A$$3;Du**R4w`#ψL5V!*yLcQJ)#zDODiBv|(?UlD7Sfx[O#"䐞rKff 2_I1YbT񋒀 )B ?pK)ӕ$1\s^TdECE0zGL",4m}S"*:F jE]&q}6ԗjՖT^VqjDe%@4+#4qωW3s5Q!T<}%7-v4D%=\"X'$YL"Sn{Ill]yY5]&m X!G**(!*!Vk31jt%uVqY،~Ƣ=)|/&Ctm}?Dn1"p[率qGzD6v\6CzO@[p,f04}/5}D <զ" <4p>gp(ɓJB4@ň;]թJ~ 4ʋn-32GLY `W`Wq gË!]Uꑜ: Hhw v;,I'T4NzVXvsR%R.d7 <z%+8[~^  *y7 /הVA'窀u쒬ï< 6纩e7nn{G|LS&(h& lx9ܯ8㦿YpG,69`[4K&r /vղn ͠Fk`7 ED̯ *oUI@zHw&!Z)Y:=:5,EڃP\6')Qt#췐ٍ1&,0= Js)NmEP/Z5} I=! |!|~? CYaI`a KJ 4uGaa0{TѰ` +i#kxp? #axϿOj,P+V$R-_\sCNջrl hff)(kI,1j=6g,Dب'S$aٮSG2ib9j](J?onN?Y 2'i*[.oLJ"J[h01TDq7F2&⒱֘z>}ݦD|o MjՊ˸?^Q̩JmxW2ﬖY Uhy}MULq|V@hzr}LM룜T:jXEEд밍@޴ Qku((\LZD-ҝ&& L5"DNQA҉T2@;9GNMVEfD1@ uR$9Ӝuχlۥ5 @!ђ:@/NTY % 7,p:ga'7;'r]Rav(źap&@(V+kQ[DHbzV@/nD{񇼸.z})0Ro]ǥV1# E9T?s]щE6L96@>V<\ t矣6t|ZN|nk Œ';?J7g98@WV~ (s՚Et#6ǝ΄9``ksp| X B߶`E>Y U~ du)J=&3;å:iYu~w+&5cdifmYo+ePl`3eҰ+)u$2^OR"jǖ'0<%]h]Tx 'mo Mmp,:p /leْQW/Fs5ónscqXxj.CM1;fa6C~!xD#uߝv2%='fNE3y=&1M ƙ`K*x<G cRQʬ0v -Z[˺XGcwzC!5]4D))UCSk zYD#иЏu̺w|o[ek6P-K9pj7%uۏR8r-JoA2~Qeߊ@.gU<kKeS]D'Axt:TYw`B!x4nvOԢpќ- ŝU*] ޵6ȇVx+p? zItz9eUkpBg8ml,qv]Rl;ý /Š|އGLeIdg>#V&=gRPhB#+00O(- @IZr@C(n*~l?˫EXa q+ߠ Yêy(5TlM!ll ߪ }/JRd Z<j<㍺,7dg@킬uq(Ys58a+S7`\jۚ˨ J0_qN+{O`ǏyVkK*MeE)6c|.˾S$1 I(i,mZiQRD$d'f} `޿?y~=8~O8Gs}}u.Y4Im~A,A27X\4yKrGOQJ$"Ι1 ,NJ,o ݒpn{TL=7Qx05d•iDH]` ;YLw(o̧:wAٽ>3=VTHȳ-1 M7M$ۭ a4+' a(xIn/ps@O7$Z\QVDH B)]ޞpUv;rNLY rt'M _`j+ó۸D %zO'o@+M&J4z9+qW"5H< > s0HP.9 vA<kBYB;D.(hj E$\нc`NS?|~)ݣ]*vΒ71&|-J%28Jյ?ܓ! OEBq40]/WsdbL-,BDCx#whx>2݉D7ɘ~ucLJw2Y,뗖5U4 UoiTp Ik~%Qk^zKhj8K4r ƇF#R/'x!p{miڸ@+byɯXrJTڨk6MV {U9S?AKW&}*\S"PZ%܎.s4*>#߅-PbVVkwhߡ8:م{\P)a\m>0Yj(fb*c4XOMx G]>Ǖ͙ խ^r g^;uE <ɀMi%&és cpNZm(Yy;>) w}#'0# 9{]=Cp؍]BD3C/`H&ȥ*M0==P"JQD[X?`ߞ``zr,/^d9cz hB.V db$ ނ{pڶol8=;xz3E@;_]\pC͇r|lM7Oqqo6WV趘UTYǔ ir\Dd,֖s*_2WtMl]~'Y. TzȺ!ⱋ F R@Dv,NsnQ2;F y} ].LHx:9 B;mF(>$Bg<&C = o^ 9BHV?~c!d+pLiǐ-DBP1YakDD˝o\n[qW!6dtEO> ט~ e9""S3_/`:Fz9PbfbǓ i IDATsB. | i%;],gb]1WkW"U/?pXu5ߵȍ"W]Æ4i߱?op u](>lB) 6#K:5 w^h?7z| CAp}p34}beX[ "0&x 9 'i0͙Eʛ1dk&"2ÓJiI-Md , poP J.$og|JGl%S_|blhqBwjɰъ`S6˽hX LͰ> c#ط$lFfdx}LyF8׷J3o1!'%6n:\v6!Kd sγUvw\"f߇p4< !O̅Rd@+8>'ƌv0祺l sqZ6JDovm|`f|\˫1D5fƔǾי3VcjZi.t҆#1ce5"23cepZg#Z@e(bjsDPҷL45dIE!˰g rcmعL[q9(rIrS:Du;dwҲu7/ 4OSp.lM>0݁Nc b "p/\~vʋd+pS O sho8>JL\>%h*T>R"wfGWY>;k>ei9W5'3;ַ_+(ó<{w ?%.p"Oč1Hv">=ׇUm5kfz=N5;i?;TC[f`U"@y׵ QBl"wMN7zKE7Nc,5S_ݫ7j*mӛUk!nHgn-+ 7n23I,NyPJ8W E+/at?UL Y$IxJ_uѭ|zwLi/kC/ DP+-;Smlg"Oo:?G_EPZz^Y= CqŴEVyǐh3Q 7H3deJ Z.jG~pϱaq.^*wRB2P^yj$vWCr|+'JTF;ﭔ-uqaOt=aMM#QղdhPjkwEc5 ro%2|<<@˭ǽjKk߲|dyw~ ׎~#S?]w",?O=;xzriw։8|(p%uuʰjd'a|)ft5Ur8!2_(| =N Y8Q lҜy%, :鶞65 .`Ժc?͚6x,;Q=OPV{ן 9K dc[75`Tʤ$3!:f9kjMEp9#l-rW(Qe3%E)|R]>hxƴ.]Nωޥ!&8́ G:j-_d6n1ax(h>|lVtXǾt<z{70>tIc% ߯άB)siQX2{9<(03=-<\j]҇̀!!b"֊ѢL}94#9X9;1pH^MÀop"v"bU" !KW#nĐ|:4}"#;rmhsK|@+fWQnHo>‰].$E#kACX;>8 'еL'\́+2MUڛвn{c#n(F]6$@Ҝ,~Sހl/$P"3 O JHU(W_sN6:NspnlN ] n+4i/C!h> \|D_ȪAqȵe5!j  4v)ԏͽ_g{Px- ̌9!R4+c8VࣙCH퀾P |"c'4M bG1&<ۈ[mbr\ /4? _ \skrB\6Ze'CO8A\e2%^:s A" /ýp'H_5GL`f_x́tYէ*,] O-}G  +&8y0:}Z@!e/I=@TsAP"-dJzzAέgp.( QZgUiHI<'ƹ~ <2KRbf*Fգx-Jp8+rb}fX:g V ""DܰRpV>7Hvi>~}py06`~n"-z}}s0x r7|bz=85''—P wKu @dxvP%`DF9?!G+JIX}UMky'= O.JˀZAX\* *kow~p|B~ .p"%If(y 1[P9xf $BMPY+7h]pX)ቜL;([?+11Q[?V-4t?C_}o-,rHmVp m6[͗"28K~/{ 4~Gf}('{/4Ec؄Z>%^ z{ːM_5ۥz fZa6hgUs2$Yn){&Z| Dv :x:Ph<1c]<8>c[$JN&%ޫsr"k/KITw |m(?aVb)1G:)n;'2^_o,v>]8R;5k%_Vyc%Y$*HharA^ .{mW!B:eH<)* 0qgNf@׽U $y/7̟~Y>&0W:q2Z`桴G,/,SQ{罌V /紌VyWJc=_Y}/ dO,hCgVa"1YՃt54cx=]F-~cv_<#Srs/!?:g_XWሯ84ƑRf8xqZːVxCXއY<`K/ˋY1W8۞vml(NAW?jY|0{d`m} *wlc`9P_auR.7zpNtg)]n= < ɐ!CsmXw 'ܠx[y6W#.L_ r#4~^ǕX7H*Ks@.HqsQ@8cC6"[ECGpmKFAP*%/z"VH&4}6 2i fGwi++/7_yv'CSbLېPFnh C7QTL]i*PXM/CG<*8ܭ( cfhqőo0cn#_(|iaU(05UCLQv?pqBnWw(Vt_A@媋XKW0?7>j-5~Xrg6v' D\m oEHۆq%-=ڥ|rFX߿)Y0av#Au;Xߢ2i9Cy֙֞#pԭHN I ӡ.o좬rV{(:feʺ Cr/c˔|%;JlaV_]x-߾rWaj=C:(e'g۾`іZ4ԃ[({J [$D :k5W+N?YZt< }2֌pII%d@{%<-CСxX=%d6Z:AbozA㎃8Aѣ?ó5dKoYa䉎η 4rt0{ t><kX@f s1;|߫2NEt<+uM O);BB)n768 "j]P~36Edh/[0N~-| 9`h M!!"bN"k\`7@yo-p~FK^U?si(-8kXU)7_ỲeWH얛W4w dz2ﭦ֠l_AroElPfw*5rV6}2ԇfwoMž%)ȁZ_ō jt`:dzR `_SbΕYzS_*qoΧ2XRfWB~c4 Ѩ3u&v'4PHz/ë.ٓ廓7ça%4 3pA'ezLcj~vԙ~5CR% ؘ~<\z]p=iWXž˞sŞ>;AdoC36qkY 3I_Vdyvʹ9S'(V:d;ſC} #ac?GA {;3tjr\9hJQBSכ֛ϊ8Jjc7vF߉6^Cd p=ϐxJw澗^rΨJח;<(B[, S.S'=ζ䷆P_/w6Y# 1-=$zgfl 0=(7Bvʰq$&<mm >9!(,=W(:0k $>rHΫo/; #}'۹i14?sTQ  Е9yEv$b^};&aPͲ>|-ngR/;&/1fmZ[4x>8@}7#߷=QvV OΫ-nF1՗x?e8ȄyezGт^JD9g,;rV7DT묤 jZ_I-9l)2q'Js.fuuU$ӵV<_yy =8(տ;&ӝLS h-%-|'r}"D@{w{.fĊ`p?F9.%+VgMô^ p7RZge85DBi`~f]rAMV괓x;aoraLkH0T@ BVm\W86iX)3XaVif9=Zjw_Xf#u̹Zf^-8-F>2} c'u ջ ce}S_y/mF4>VY.C46<>Y"(Jv2#n0prt+NqWlZZ;Pyei,v=ZVKesŎhvKiei`˺eh RqWLR'u7^^KW{\WW6GkPjhru,:`e%2(P4%dya Lm:X_n fq46ҵ;m_KŵO`q 3drąқr &F|p,NqՖ+)<L =Ѝz&Pcz|p VotجZ''C$R>>,x$ IDATqJWHMb:3vom^M&\KkhU NCAwzf8쀣 ;묢d&T`2šY>O\pH9(Vz+٧*›c{d&•(=GGlȝaˏrS_Z5`]$&묇k.?UG"nP) Z7'? 9`_D@:|!=4R3lۄfś%ZTD3CT(/@g~ol_M 7S?PrgCUa)\NI!3gQ_' NhhRV-c`RouY*(o3,j0i3^4W 9uG-lHqMWēj'N{S<yj^3%tRͥ}6-EO! *4@r$bC,o }"Gj$yԩr#ky)^ゎ<߿>neKL%a-Z.FxNQy-54I`2[qeRKK}gBЛ$9CB{CuQ=ߓԮ!V2* ,|)̓%lFk*M¶a|/CeyxlGχqZ kK3iq'9W8 h=Z^62F,]ޣo+Ek#Tu-sMg۠k\|&~0aq p5&=tJ ^!ϭxkxZ"Q/q=_t|Sc|!$3v8 @_PXN96EpQ7Xz6=*һs;?(@jי7?fFFo?yv$r\9h80O=dXmn_1ًeyķ|PqF)=ŴEKEՅ;Z&!K}쬍jKy.DA 2ZnT~u]|cQ]#e<OuJ+Ɠ%y lHfZ e9CIvK?z!^6>4|h@908P&a ceZNkh@Ip Be.6Ƒ6M&(Y[bOG9ow9S0J ְ͑k 燍!)VAKYU<:z Z;- &{9(M!]덗!! }Pyl$~ KCs\*&a\ۂ.V\$1ͭ8G;QȏrY{W~I+l=~Zc4(ަا;b9"'ҭ#DCK6ˬZz^i+v|֏Ή>fEK,#$z9r)bbosam`Rʥ}*5V|GGwjglː/Gtμ"3\/1vb$lCcԙbyhTC/7xHŎЯV!N:- P Y堅e4`y(tnl'9m12Ἓn̐߫FzWÞY5a5Otxkh$ЫA.{bah0Yegpq`a6BHG@wj8xI 筴F>ょ?BSNbMu2DI!)y)9aXi. A(fJp\^ FeշC!}!~No}nʼnYҫ.?y+C)3b0 ,~ɚ`䦵)ň:;?ʹu!Sv9)FKFy=$D۰Ba'Smr15]cEb簶&9Q~[eh!Ϥ=Bat~# ly?^W?*8aޠXr>{gǴj]UrKi+#!>z ,a3B6hM0r|s~q) ^rȖnew܀z7>GFZE<L >8GMst2gLtp ?lQd*ZlKY.e 鹇9'p<_=Dk`pnXNG- 0hq Jc-R?xŹ@$ .fQ}ɯ-^7X9˹AsJ> {ɐv w- F[PlC 6Ulg''YI.c?YD ߆0h [F&'msC[U3 i?{G&ȿSKW2DZdžvUԙVerZ2nsUNB9XV"_PK sxh=RZ<ګG4QŵY7:dtȌlbE[u'FviX@)ڬ ~ėtcr[ r=^v'I.uRy8W3og-j2$#5aӍn[$js6(q}z wq6Hl3HCMw2,a2rп7b5 i7ˢֹ&`\+xyf{WHEFŲb?tћqFrJPzUP*j7{7jYy?΋KrD͂+Gx'K]qfn4F_nVj54VVS E;vXWFgD + 'E0?I|"<~K<+}ޕi\c54nFGI]uXzJLܺ:Nb塄69dowHll-;dqW͓2y^CAf~?|do߅za~ pZ- eJ$ ]A~idv;Mt 2`W9ND;JBvr"λw_I<jCNhQF*v;wsxز^JVK 8=eV {${G*@ ?Vpbe'B,>.ME?㟞s_SºC@ѐ| p"2U ^[WjS_ sadls~ʄ`#uOZ|(8rÇ=Dqݽ~!ar+qJy>N Vo#䄛_[r058 `3wCA(b~[[9718iHѝ<($; |9qؿ6ݓ/GY%Xq2x n1C_`Jlix71kZ80?| Ñy E pΟHG (Ն߫-$L}CPbV' z)IevΞ8ggcW;sWDAI8%xsW}"ѥlQPf8 |I; L y3P  uMw#p*Hת8Ǔ ⚗H*DAx%s?+`wQHf;s0⣗2ntK6pnTNT@[)To'NUdzW t}h%066&p6 ,{(mGJ$Y("(1 b@0cA̘I H Yr9 U@>w{λ(^k1c>da,y:Ʒ+1s lo{x/wg[)bs{NSZG_eqLݼ(S%L)`50YTU"\|6A 3BF]_Y|$Cτ8NN^F_c|:2#Z(JZ!.-Fe}+5ψUG~f2™ooZͰg딑oJg?>iӎҬ{@\^DU*Sj:OP㬮f/0)oJpzD?*D`;,B9&^a7[77rw~5nضOT ( 'g`ߛE +ܜnN||m`I 7Y "K IDATkB`Q8\Erl0q]lWgٍ?K/;uP?_fIB2eSgUĨW8C)f _M!!x%u jBG|j|"P=%u;>x$4>©7~*|Be)fX{7] !O=v[,!3=ccJ?Y:w %<,(Tf_ա~aSV& f Wξ mJ>,Y–F!6w/r8kZa`)'/sԆ3~OU֞+O~\zHg'M9jf&pwq)En`+q/[!dxo-dISLwoJ^~y'j]`Qx  -l˒N(?M˲`vM2p"&/L2%Wnh240x2?yMBֻ(Tlpo!Xv]rGo#[. 9o/Qp!faܜ{=SZI-JX>_әQj #u@D~]i~@G8Avg|3\ JLݜ Ih٪?Gxķ=!<$>,+ʹ㊈Łl;#(:qGDkc.-F(5Y61"X&/쭗99#On#+"ȿ)^vs VIm?_S{\Z$1Hgr[lo9b=﬇:q;M%QpE-rtFvgw~#Z Нʯ(#V"&JYU385vGAv9$b}$c~:Ç6%;p{Gx˵U5uwH8ץZ#DRRJRvuf[.-9`DWn?vV=hjbZ$t5ڸN]{BPޔcoZFkF/(+ĿOI<udNFdd?s|f8Gf@fU5k.I qz?4v {6Ko^_ec.[&([J|sM0(c=~}jOjkHo\!T{{-$=":ưJfezҎxArvėLx{!OI 61OVxQ2r8UF+l\$)z!6H e M+-rsz.~ZHaОal$f?r!H$ STHo<LiNfI<+QGoJZ`:qinΘZhcSNKe1R۠=ܬN2ά[JX;Ȇ#Wxr_/),˵i'T4ѷbq4Dc-1$ o<*?P3e*~l)SVc%|t G+LYie;r `-/('ng>?u. 1*U(AmPy|+2?bjnl,gDF S<z6$\Vkh*˅EEަd1 +в\v4O{H3Rd{L ^x~^n"=a*EQAmarslpYWiĖs$=n't{B]Lwvx.j/nDGyߏk~=zx炾:ر^{3CDsO$B='X2^~ފZ$^5fڋmc='?gVTx!m#"o7=d%tDn; ?E0%?TryFJ ސ*Ewe1>3 ӥd}.Q16Ƨ,mN͏XCm7ƆRwf?խXioVVeDj>VhǽX6^Scj%ZFǡW>ˢp J;pg861JE#n62ybq/۠hhhbv<4ܠse -dc:WG2߭slP7DbX7 jNScs-C"`R8=eP- h(1>3 HF3/N6%PSZ(g$v&B|-ɴMP0sv\ m\+zF2[Fw{){7&HpƊy q;Aā2rFY?hsu F}\l\N䇍SpFfigsPaԬx0Pln^sъ2jvƲ2h}!oG.rg13u&uU{bZzVWitd^v$Lˈ TŗnۙŨJ}rZS];O΀MQmXDދz~Khx'T/Y+r<3D vY̆Z3Mf=|khqU6wۢwm5뼧 j z-ޣBVHԋy9 2Y4^TSZ&lp7"u'p;lW۳쐷obj)F XVX;2eߍ8X&,N_Զ aS]^ % {\r]sP7Mr5)Xwaw k|ץԪ=l2sB]xn7=*]f;;߿^٪FZÆ4lؐ _cĮ?,S;lGo-sWTN(-Z&eqxdz=.VGqAxdlFx @E]d[_A:h'ZN] 7BbXF}Szޢ1?kwGtG!#cZ XмxƷsߧj<-SJƴN1C_̓_xmaO:^w,~/Q[,댮ȮU*]SzzިT'֩F* )Ǚ^urgȱKPEsF9Fkgv:b57c=HT= 3~S]1E55QE8p춸֚S;?َrGWwy}l2$g^MH94CsCF33K>݊CvIcȫzS fZ m{1Jξ}Sv2tuףk<$pl\n% أ]b=:s/>s<>_<e'=G+,{NX&mEu+R<R]84UC.%_l%qj{>9@M`.d~9 :`eϪPk+>P[`P?."ysԣt}Tus{ܢPc_5\x`7:tB0p\\k231`T|>^˾_; cX] |BKpg/7+fگGfv)e!.޿حVY^~L'V^@z<"̄/&sǣ$gi,-#r`EMEϔ}"8>~ѫs3,}n( \ t5OBTis6Mv^:%ejfOSY}T1~/V'1,z ?p3̡GVrsLQ~{ /__>GQ6v8 g3LpTx1sֆ5cks0:].LݏՐf~WVBƇRr!{8?-AQocs e=5/i7]̫K>ymZ GjYJ8BsY^uX:EŋVso%s_Y?wJV|u13L_ g 0% ΅I7gT!MI,]ބ?gZ}XSؽ䄜Etz%krA1jp#x=WV=x7H߿ jA"Xd}r`܎{9+8^?/MaӤq)Et\~P Fy7~x[ *7=n{сFĒFX 39"M34xAoJh`x\1D>- 7*iAuzVI8}ݣAF}f5牽ǠGHߙqiYeM!QSG51!j·̊#5T ;5{#xE&v zU 6"6%+nB_!2zX%'YMiF1hd@|' 4KL ~,'hV_0#AFrk3Q:ĞnL>%397%[V5SgqY0M$5WRTg@9[lJ lV-编8}hj3}$Jsť16ό5wkn[PsCFΈW\^weؗ*@62둝 $eYE[#u8 J,3QU3ޟT#t)чُ7}Y`_E690JfVHteL5#r#MZ74@_AbTx{sһ"~S.nr}}k_Э@h# BetrC2jx!Brhؕd#S3~ ~VctHLG\a<'+$ppQ? FЧ,KOJt6VTRLKya.L==D8V?lEoࡻLn]iU"iG.'2-N@RbfyL'؃. [U.pT)=NA2Ka\V~S:a*,G`06^_ݞz{OĉͰI sv’]UQJ,`n:Ƽո< zh U`+}vxnxP斕<7m.&Sh|ہBd|}[-E np3Ps$=bQ lK``Јl>"EG8.?6 ܶPr} o2Zdlo-EXUPv,ŽQJ(–xvo6 8Av6aTF{y ȩܰӄ/hMVNTs7`WR7rV%ppElO( ̀$&gjYL.:T}d|% 8=.t r疺cN%)r=䌋8ٛ{P[= T?nt 0:y+f.0C m喆cnyސ$^sYNKg}:HDf 8vdjRz Ui13*J է}2y;6cSb8t5+5TlȰ{O6hQCC"^ BLt~ӻm=LNrR]2LMMPZSSZj`#)+'ݼ!'J*+ZWYx>~~V\55цpLZP0hUb+޾&J7]\@vfJk_8ᱎI;</J +^[H7LQxωIC51)g)Mgȴh/: l|tunFlLޕI&RV3̦(-fĭAG?(Ӳ r2[qlߓsId5[(rg]H M`I km(V+}A{>ˁæI<'9DݔZ sb&9[h[[|~=oywAZm|y ~`:vN\WϺ"*jXGuQ:H G*! ce=JbJY207w> uguJEWhR>\R(i޽X|ɏE:{3,Oy/3Jc7WS{7 ֊9vEiy?4rC[9[(ޤ5n) &e4!X+vO{9Wd) csĶ3yi8%B1VtS0)5OȘ!b6%j#>Դ< Џ!}con.%3D%2sT^Kqa4e:J-(aʺuULgfmtPZnFpZ*ZQW"vlGLBX)'ӧdP~*J>Nf%FGmrsd\UvxZQo+$^yVzǚb>ZhFxPOun˷3@6f{ngc!{??e7rk^_Wh(!}gp,H8Fն3^sqm> tY,ӫyrunbXZzN89XW0rF}kFfESdW}Ϛ(* qaN/49 y?9zkn1/'(uyB]imxNNY}33*#c U0V}bO8;ULSa򼌑^=f*b6S4E]K ю~5ۆsuyBeU QMMN8m#?{'aڹl 2;jtÆx}=/f xߓ]YHN(浯kd9xk~|A-#!yg 'e=e%r2=7'~.>dlA!z c+-㷔Vk=/> z\}2-#ڔk<[X!F8GFDU\\ko"@i5c# BQv$jH'.:ߟ՚-]$Gbô(KyF";66z%P+ʚc=F=/UMY%ƱG+9X=McPe6*L(6сNzEqzR3_bN_Η o ߆N8m.A-ŸϺ¤,Än=hvGP#+Z09E-SjӞòd9xkd@z(W8`DIKJ:^o2&|m4Kmw$:p|9? btVzf;x:a>ܙhYè‰$OwvFٔ5x6Imкcu #!Q}WdrثZiuxCmT.B}dU"w9srː@a-v(0k?:y=}AmL)A=XF+x_e9pX j#9aqzL݌gފ5=26vJ=oqE6w}L#|CYZ&FE'Y~Fs[F_*d2[*GquzJŸ熹>$ OpԖ?cÇU)K/;w?{(kUs<}"|vneޅowd#eHvV-C{9zC~xCZh-;@Y(uj6ЅrMy$f\{PTIZ @y2g#.e헕 ;{8%p'{ rOvZrBj9E(3KgIrlUŤ iМ@yPnD:_*mwq`ca me%diurCx<٤9.k ~Mfwp_PvQJa.f9s49BdgVz൚\1LPL{v.);.2 Gf׃.+ d'sq$Zlk7BV!')_`-w\2y?@{99?4L.'tÇ8#Ο_94 xFڛ[xw^{7HIݠޑrJi{ QY5R+bW#5X-SER6Τܖs:??Ab;L+$. ˞@0e/נW~暆'{)J)^\oQ竮qHWkޗiosuTF"m%N{F$<7".צԖi䝦>0]|vwkwiEAw~*1kUzt|NFHY~MQjޗ3jDHtZaDn@,$>zoLjV+(y}!Nu'b3&sߗڜv^mx sI 2M)&$BkyLw3齢O/މ3b}077#41L~q=?ssY5Jh'BVIlJ6^ }RX+UxOrmkɆ@)ǧwizi+zzv;h|cD/eVYsD+&x=$_6yh,􏭀kn+J? &cHAJl1<(6M1GupZʲO6N^'ޏ?yMVb=dgvNֳ^3#evexљ]_Wj'iw7ZjF|͛7jժqC}Qz¦;sbE^]zXΊW}$nc$_ q`Hl17֜JpB,Ywˀ#plEPiˬ 7U:`qzzc5SrMgcHxRΔΉ1y8.E#*?;fՐNMqcRp*)~B7RM:߭ܮFuy+fdz8v緟/I!Zc;D9=l2/C,l2 3)V(\w;.[;2:w@ײśX{GQ~`wdiys/Xʿ{ Rctٜ3LVKJ!. ۳)hn Y!XvߎL쿭`(m鲝%iMvܽd$!GpY +ɩPs)ًoluQmګw6Ms{Rb%a׀bp/z2`Vz͚EW={a6M3O|ŢZUszә-Oe'n~-Bl!ߥ9v>ΎjzZ7r;#4IB .[ LBhto?VO|P7yO_Slғ̾K Jش.VS"9>Br#pJNH̘ `ۡޓWBGN!G"кDNt*ܸPؙZga2ٞTKIϝwF0> Ԭ0yՂI3y^ 9\6ehksnt;"opj`N6/+ cJ"U)K^۟3Z%϶uAt+^(o4@>\66vƊ*q1' ̔魹> 2% ?)Jx/N@h?tAdOg$g<$;E@3䤅rBC3_GJ{s-GQlXE$d9<X\k~ xL-翓Byx&h{|,urMw :c|@ Z! D8#MJBLiGӸJ [~;i(/S1)MYc:x\DHx$Mk4ݯ~O%.J+S`FO uY4N'ΘlYf=|]#bZ'Z) }nzXWl3Hx4~|c(K# yYq]M@DÍRZ{NOɥ"e$|I&F*qU|~YÏ%V<恾'HDHD).dQF/ȴxXG;ZF-Z넹|AmqoF_, 9D3Qi$6B豗' 5L;;3s}n۵k%ȯ[Q0ݧWLRYyA@Gf\``(l'ǯySΊf-܆A}oҥ4^̗5%ljB#e)Sjm` 1Da[N\Ɔrk!딕N0JdJW׸]E0)~BbuAbk sȬL%a6DJPϟM{"[39+ꚚV=0>P͕c-{NX GxV|&S,qϗU<ˈxJpV:egQ yRL95f܂Qv;0_AEK{5P|dֈ;5\Ϙn>^|oJ tA(~k@M$1?a+2SFXFǖsX_}Buw&:\9ybx>{;PE!/;vM!^K$)}{^H81#էZ>{i^aPՕ3[3cרּ5R:>ei#q*4d'kh=&$XbH8 /HtL.V1ƇӦ& +Ӗ]4GZQ1:m%] kؑk5Cp0>Bf2P6 i]JzVoP_K椦,lHHl3!]+ݜ\q1A1u'z~";WLe?3Zb])r717OkEr؜oaٷ'l!;&X/'q*^|X^]e:"T<xppVznY+ׯxzcqw&_^?W_'8;>q,o7 Iྠ]B47. o)4_'^dd5PtQSjǢ?y#]颍?LP2e4eY1讀Ί$;({V>>X5_,؃M+ip.>^6$'mUamrr@DzOZ{ QePăLW-CiiQI;aERBkE;6`EъYo? *yrTהah3G|?TO%G c*#r?7L-v{]Yf 3oge@E0Y{F&opc{nGh{G:H (HQ ** "UPA)ґ.K z5x;{|Ȼk5uyrI-OpA݌.9oH@)Hj"}uC BO}L\5v5Z2hUt 5nj6V4cvL_6җw7gIu5ژRSWO__[R%̽brcstt"UMKtKAcQ?;W0=gOk3?\p?Y8Ì'??مQgSqS3XoYc/ZN;/о'>3M?!y&ay4XL%AsOJ+MMZk7g9HuV 4ck s (`ZQz_$_ٶK+ߥ4nY5eHrE_mL&F'h7]Zj0^1*Zi^Ֆ.}3s:+.Ƙ&"X 5Ydk̨>1 &:b圏T[Dl &:kB8FX/ae.6JU"?N}L{^d~s}>F%Ɛˤ7C/*>?;{4WnMT : |6K3\ߔ4$LVߕzxǕM.?ﳥ,v/zlյ6>5[όrN5vJ祾acFg&qw~J9/X?%){H>*xpw7&F[+l'\hbLKlh;u7Y MJL>=P!H1OLP:K2pe_wJ!#4Nt17G0d52A&)(m5.sv "dَs:׿H9[(fQɤQՁfq]_b飮[i; c1"4Iv3q4aCwKl4GVHF_g.X繝#>LS@Bg6ޒ~fڛ^I-谺mp^@A;%kv]5klIͥ)AY#[$y2'\9D:_4ڌRrݹ57.:fM\ce% W>_3SC][)뢭v:8fp+Spy҄J3g jm+M=pO :>NO!񂸏//1#!LX-~N}cLYm;L7k.Z+e^lEuS]嵐e&]p?Y8M߈&Ym0pO GV킛QsԟoX-T.[|BY1"93L=w-)/x6x?Mq 8cޛj ĮCLVO1+b_Ϯ^&?V!}\+{JA!`b!6:ً0R^. K|-J&km']0 -d1󹝏ѳ?7n8S`F/c[?S[g{EB|/qPg3~6bă=8 3sl K$;CKewBV+l,В@p&^ i|aRzf,Ro4z5όm55).=TgM.fG $7cBONLbhҒ?w >&etIYkt`&pl jxWg┿gI|M°6q-[#XSәHo֚; 5(eJY4Xg03N5)muw zqΗ /\|c@p#r1XRQוp'jYR(bkуM-|ЙZJg8Vh,{ . aL,ɯRkC-{L/db0.1|^6.QQ0ɯ&Ȩ"Em9cluǿح&aow0R·5ş:ez~2ˑhץ.|άXr Jb™qf`n nmIS\+_4"QؒsL4cNLM |:T/[jt)± ^6lԡi _n3i&+3▔;S;monsm0Ɣ~ؙVg1\ !޲^nf|kPόZ ^nF=K&#!LѤS:#WWWŶI(-2Tr`M{"yLqi[7˙?˒J)GzT!;)49?ʔQ{x9wojXR׍v*{Ia;aܧ1/ˮ[mmP~Nd4f62~qH@aR:|Ex3GVx Z_Gk3F OM !VcnFR"\^iUriFpgH9ClF䚦0)*3=WqAaljΨՒė~?[ۭLi r&̣w`3R,SΜ !pL˾pI8)i /]' sU~.&eb趄pM̋M'Y#[$9ע!.z8v;~̲dm f>cr=Մ-ܪ/ȷ_zMt\p,uU>V[JZj>VcT<\l̄LN\N>jh@LJ2~D}G^=P>fh ]eXT'CH'R΢./,ª-(%,o_&wpw4P'`.dۀ2\jNEoLD]sWuFF7`b BW@)a %8LxBߨWo!P' 'o&oPU5.P5JoB7*?UXp=< fr"aA#wf_bUES@H]ӌNcjJG&ޑQ܎(y_1.߷&[+SK1ohW6Y5l,Ko9^xJKNjaYڪ.KOEkMtID&km_. .)B#C`;ZwIS@sq ?pBW)YTm;5@U?Ac4z'ԃxR* Ao3N5\#9xq'nZV8 %8-;dsoAaL1}ZewgH` ܸ!W y!@nZ7BSxrk!m(:5 ws /'0}xM0^iTtPp.EQd&LOU+PI{j */^s0LJoBkX~{⥎p2p꿹B ` >Bdv+|y};= 3 K!+7(  @S =hY&^נx'u٠sEךV_m)_j~|#@2o/Gn9r֣&L(4YZz$g3v(`KH4߲ךvZ8i 3٤э3DG1˿s46&s%8<k㬣SsM~fLg3<~^ \2ch>wIDDI$˸X?rK7SOf4$!k {S hg-ʟm=i)k`6Ц|=uX Za]eu%7rO80EkRnqG#&ݔti?Pfb vh幻=D q`32^d hKvX2BO"3Q>_~N`(xj2P2(x.%6|G)%- wj'6l.&\&N&5nzsK`qqU|c+!Gp"2!wA{iNA8M ._ql^ bhN+9Ɇ#KlR"". DϠ lNā* *|Çӣ0FVC=g8@/], Ktr|NĘk_nV3ixYeHV]]ғ(oEiv WC@i>>RQ61r^ g0h$}+K;9ݐos%EnhH98_'n9 "(ȭh9uh }IV#ev*`{ 2 [_] Burm?ύkوRCs5!hH[3a2jP5ڦѼ_Wie#xrcÇg~`ӄU- _ʙWR?̓ȶ"7룂wL%I3dZy+ELddݻw#o9N4AQ?dQ!~%LBd5&3Y}Ld?3)dQ>m^K.mc#xW.+-xۭo|-Rf5D0=ɺ~hFכ4|]ʛ R]dnlem`/Ќ/g{pAVJ[f _Zi׉Um,jieR>vNjOHSoʨb,Tޭfl$Mu)ǛQ.3k=_TZ=U7ZVlrTe&ƛVz!ݪHtN+O:+]%WAmY|\O0Do_3bKy嶱xkh-/42vfwzLfPs%!z*Zog}n-9Y}jm?ߚИ 46ftRT$vif45FHBC=К@-ޤ:MlMv7m7*債e}-F[mcwAl gRbeт'?L6 :T(En $,y$~Xי"~3A4LfK}b,L-Ga3S.1c#KaKq<"o~w7SB5H:Ct5͝dWfƙ |2ks&;VR&7ߚQJ,sćWgEȣo thP 6Tk]1>wxì[F%t֬d;e@kV_^qZ.''o5A9Ìy?bJrGʶkvScGا9U-ajle}MBg;'_fC[ k$2߻,w~cūU $zW^bR'&1$Ğ1{V6ٗGF=!QY^38CϨj[$k-JAg+<{Kyݦ}CN˛u+z##LA6M:X(AUV)~4.2iM>L/6:_%4\L.!1S@12 pvƙet,4Nci@WM vrg_>f% 5|K4 a2E$ۜ6Sq1FL>9"Z3\~g$9s~˅L2TIf0A`*wd?/}%FC̟^8t.p&{\hj̸pO%jM1%h(4KOH6Eb/ΌWt[2_ǩn)3Y?,G&"Js%:p+Bs٭ʌMGnf}mW1Jl51-8tTbRS.$F~L7c Yg,H1f DKu5:95vfuJUh~o1)WOuHMB7+*\3VRUhfs} GRLz*J/ft31mfm^d$0eǤTتEԄ0+Emof`CGY8M(`(}ngu` \P1Rz䛸 Ǩp ; `i9|a/p+eKPd.z7Qvgk*S1a[73r(z8ݣ{D| `]~&‰㕹F!}ЦSP W:+(T@)k%p+>&GK>Irdx.hp .'!/DÝإ1Lϊ&0fr]|=TX>*P\e+r P0 A) |/_i|_skt}ϡt bȠj]Coq2{xPN/’B3{HK~!)K&A]t3 MgsćDD%0TdP2  ^ڒ6_9g3|>vU5`#!L O)yߒ|L3 gbrߘu>#3.Ӽc } K=.\㫠=k+,p1bkA}q_4v8-sI@0 ;t,uihDDO>β"cS~_bA&,$ʅsbw&@5C7l2iGr8l5mkI>*Mn?#=kPڴn-ܗ&^>޶zIpM3 &xs2Wn&(3Dg+3qCӥLC6Z bK.}+amp:e2߇ؕlٕq^˕a9‘\& v5on͌6#z3:,(@oK`}m||؅2i)ܖ xG!clݲN~܅byqffFWXںFVLe ט>%pym7 :j>0T3_^.;'![,)v&KcG&lg\=)A3ùɌ8] ͭ#5LF&J!k{Lc72{p&!$,'e%ۡre?nQic!6[хfwuԸ X嶳p5ךN~ԀKwxWэZwm?7͌Ei;2~?(Ӂ` ڸPiB71e 팷Z*d;&9"a-/w! |G{q:;m#4Gl`o˥Lu!7icR:$4q&yLd#~yMoM"E%-[.4W ~{( ǔ{wCvO>I``=Ed?$pWh ˬrA݅,Usj9sula~܁kճ~(pL9G\^ Z51a~J喝. PB֥֗&]FV| @t/,ʝKOqhvl>B`^/tx݄UصyP 2e"Ϗg &r+Zia-A)W8 ~`zܹPdY pJ|r\cx&恲e(J: 0+ R۵do~.d_5jp9܆kyڧk;;2TGϖRrHJ dh 7P ?9S˱od x5[̙oK+'57+΂OE%yVگOC382 g N-ֽp d1)!dy2')w%&weḼA.ռpgu,&5{Ep"-t3Wh {>I7($~R' yΙVW9ٷ2Jb1o*EۡT3x]n- |! a\},e€써J,ď q*rrC\>G*"Gaev+E6\zMF.2P lLU!ojK# C%51;#sL@mQaa`'&^:h7DYv@BB@v[GA9W:sc ?\C%>B"e'>CZ:tC[r''G#pn.w!P<$޽K'G' aWncQE` @s(,\ fx{ P_|;lLz} yZ 65,IHp2y>9K={Pʴޯ!Te[^)`;9G!PB) - GxYL!(! 5py]..Jx0/@Q#NCg6x &H41<HHU6,gF.%aC7PqM!`6'TP3{P?Tv@0tŸW"3i4i1}ASnps5hS`$\{O+F2#6ٛl|1v1)v,ۂa@q"bMpWQ܃o^)45+IXʎGTP>4q)}\CT,!.'WV=dhuRl\ʺYM1" ÃexZ8Gf@OS1snxi*,p/ϥ<&E. 3 ABj+UbveVAY}k(``F!˥yZnf# RsʧkQ m_c7e?CSAh [+iqj'rv/s0b&뷲ȅN5CU8Cq8 )*ޤmiT콋e6u%8 y@BnϿ@ʠF_P[0n)O@lXu hUcAD=fQY/~ *E` RQSW>Tb S|;LL>'y~s&3،>f Ty*M/اf\WX zO Nd g Xn?7tƿatr)K4f喚1K@-fts_vShxƙ۴Aw F_a]fs=g)y]Voo+}>.ޙxAi( j Gu_JfIPf?/̓_{]ٌ2|U%Wsm&&c #>8ʘvvH4">rm>1TFRwx:*3N'Vn%%tSVAPa1:wgn;>?>Œ߆@o *dmw# s$,E%FEe`-,/B=Ul|)DqdN51_-d LRki`'53u !Vͦ,wTˠUEM]0@ / eL^5øFA [:w:eٓYO}.\2XB2=-4  {,cSD] \@Vhsd.xrGvzA]-B}8DCNeaz_#dNU 0޶ )~] $U@xv#FGgl$®sOA\J&Q|QñPxiLvaSJy[hbH矄4R  c20g^2!#+$d٢c xYu9:" Y^xJ B_/ @g?AN;9@ +E Ld+Iiݚ~z7?$v'}?+E{$ ,?U3NDL.d4)ct;$[ۋre*& ;si̍,ZXA`AV dXr,G M[bayM׀miwυ&xpoiVn;Y前Iaz?=.=GC}+ J%pfJ9Y @=gZ,"bHs-M,$c͹102.bN!Sa`ܜWk6M[܂|B꒪E ) ~1BQ )!ٸ[6鞹I"9U\Jk59AoXD@h&)bbmM'=K(GX: ހ$hH-ǟݦZ-) /BNH=կ#>v[{{J!^"3 ս(݌9A2 zđQr0 ) Ppa7W BPh2ؾ> eܔSWuJk@T ١NqPN玖f+| R3wk2Yc'Cx_RCN]Cg|B=K|פ J$O,T B*H+,/^zҦGDEre >_8VP-Rl =`TϵBnLR 3׿9:hu=M>i=c?:m{fjx󦠍>J ~u>1#bv6E A-9ߌ1S6Y}[`m\}[Hvhso]epC [Kvr|*&H2{nSTR 4uoIo6rŪVS?M^0EjV% Ƴ^ ̖kF*'εWY!86HUŒ,jF UM}7ANa;aF"8*jmWjO 3)hSI*.A< #qzg3>nƗn^ 1t趑ox+ $G^ܵjfĔQ@Lwصfː h~a,dA`§$nxTs{ZzjsQa%D΀IN(VDZT&׳B ׿-$+pҌ,5Ȼ qc|{GU@:9=ŊRV.]+DȞ:w2&.qc!~Y~(rrv7dpF!.5B kd]fi\"6VWvnRaԛUS5!Yp+MnLꌪ٦QFXq K4>A%ND]<@X>7G>O3x-. 2v@/tk /?Cy$g*>;=~.UC#Rkfo26Ӌ*VO=6@CzFK7PSN=\o^`s'\s?bf96Ù\r3=A y?qr.ߏg2q>%32c3jؑ2<5HW{8{p;wV#nxS>ӏp-T}'؄ uRJp) L|k ӿ.0S\v !}lխMW팟s/v l{mqGM&LmJxq5={3?:A>3_ri%7*tI׼E*i~Mo6!!wl_)?ɹf*5CG-]M }}M~*ew`!.q8Q6ݘqk$_bok}>Q~u&Igwq,$Um xVaNދus`zè֍qNyǟ6YO؁"^o9Rlv!UZav/\7wTu IʬϯL&ދ/ɧV}8oWޚsi??9'm%!~ Y{R[TӜd$c#GcWWg rP_|lLOwx4x`z< >˝չҹ+:W|u_1@5GƕqSQ8fZv = dy\DDnw'PA(SVQ^˧lU5"""6jEDDl4(""bG5"""6jEDDl8P'y[oOfࣥ+L+SVaH{ͳ6Bvy `!/}-]]rO=GX:DQZFv GQK4jT)Bn'=| )2Tg ˣt[;A1{R$VT 3CWshW #SX-++J|T[wqG[ tBB!ڻʔ24ͧ`sSed G# U[99GY(8@w&2i룱+ 9ގ`v# dJSnY)'rBMޘY}Ľnǂ0?o veJTgKi_0=x|-y^Ķ#:H@XϿ6i}&KU:s?SmGf%EBpIENDB`DataLab-1.0.2/doc/images/shots/i_processing.png000066400000000000000000000305761511411446000213560ustar00rootroot00000000000000PNG  IHDRxo pHYs+ IDATx{\[U P`h)PBZŦ6vl%ŪL'31z=d =̙x%sgj:éJkqhb(RZzr!;V64~3^J[qY`$rssvD?jǀx_s5hjj*cb;7n0(``Psˁ ͛W^^?c n&&&m9W_}u7ZYMط++Vx㍙.GEТWz @ IDv1Yb?~nG)++ f+e͕& A:VZhI]7ǎu4;sΜ9N#,ZU#qW 릿aHIIYxC|X6+Xyi-&TvwI Ǩ%UMV+c0jIV$ǴJ&^ı=}~ Μ9S__ȑ/-˼cFe:J EQIgVyض:h(ʠnRUHQeP6!tzʠDQZyi#EFcK{PWv0{zzh6~[xutME^H4eP3n3sU IRn3xLMsu (* ksm`Nq bUep)//oYrҥK 77WT7Dʼ, <1֙A4N7 .\b_jۙC `))Q3 AQZoiFR":5D ;E_fUu}7TBsCC3r٠"|vZ L&˗/_|M7 BHIIٲe dM+U.:S&R&#k@m\gj2NZjUJTղA8{,a͕>g{ctZdKEbwGOIHSE_g5Gae>f$)klщrBcZܧ0xSz X7n0(``Pwcf t3<<~岃T&t"&_8JC9!h?n/u,~;5t6*A@R9!z !NabuMS>%ېpgDbV,[LC8+`8U&BhU E`6{M:`'JC\su1MNe%2]x AmU-Pgl {\ UH4ƢWd[pL1-d +7Df:"[EOO,UB]b5PT([aL qf1䯆YtĚڧޤoZl&'`IU]RޠnR$IVA:}lQZVHVQ} Cq԰].Ws>;;%퐬~\!Qg`UL*3e$e74ɗV_(f(oɸs$|2pM0q}wuA  X7ؾ/v:yޢ33] }\E7ÇS|gY9 3 `OBY,6[h;ǃx6Yqf:u䫨- a7#6g2q +q~-v eeK ܂&82db^82rԩ>|XϥKo:tI Ce.BMU?èzjp,E [/ [.,(<6>-Dz{ɉobM*T9;b36Dp;L a2}7^GG~Vֿn=82b9yO9sp A"9b36Dp;L ͛|JJۼ5k))k% h>58x…6X2;## L)/a@ !c!**p ~T`k|Ķ xjUX;dzeE.rPE]UaGpgXG.UE1(ޕMMά\bWsD0hlv`7Y**p ~WmeYY7ڵL H4kޤ33Ys)0u]TTD~tww[lڀ1InNjx<EQ|> Ç/Y$77wbb ީ,oG___WW߿٪xժUCO>4\W 3رc}}}֭D|Bdl%! 3|w 'O&TYn ذ̋΂&\?QK*Z=[ AkY&xþ.޷o>}}}%%%###.񆨨7U z[U`+eJЪ\iZ%FRoQ3KM%aŢWtac0VȔ|%JVUCQ`Ԓf$rgX|yaaX,\zuAAAEEENNNvvvqqn7o޲e/^\XX|L?xBhm mꚨKbr0|LFQԁl6[zzzoo5k.^8|H'Lf5FGG80o޼Œ @`Ǐ>|X.۷#Nnc` P)uimr>[~G}$ w.]488H֭[_~R@jc`MA9Wklr};wGڵK*DNH$JV}:(3T~v{/򻞚z=>ĺD! KLp  X7n0(``PuAB$oy:XIrꦽ^%Ÿ=rc*c$?캡ixσÜԙnxa\ !|=hN(r1{Ác?O= @ӷJE";8WS3 Ih'Hb3?MCo6kLP1]g47Ǟxw"2 0йd˺;ǷmK}-5B!C&>@ZS殃 9QNgRrR3/T-^Ln)ʭp@mB0|9l|v9;\-w"e9׼10OPChТ ZW[EP0I=O4NMQƐZ롯z"7ውޤSʘ%\gjzHj:2WN&#kAVGD&HI(F6=s nGovw3ה yF-R1V%/=떋-}{Yuf]#lVGŢWq~!<)}y€} _o0(``PuA \πAg03LLJgWHCR±&>~)¨U5 ժf83y}i50^rbl`+ߏը]A\]5DULCҙ my ਜBV$!cBn7EOQP!(]>(˨UHR>Cr Ɔ`BhՅPm0}3H9sC =ӫ>C SbKVBvIV4L"bZu1*45I ֯\CكKK}ַlT(y{H$H$iiik׮;wnZZȢE͛7::|3Wij\Wj:S̹Lπg$  X7n0(``PI7K^++3aޏfdĩe}gY{D"I&Y1av\=xym=@yps)4@LR~JM>EEO_/λN~mka7/}3G`i5c?Off |7-zC#S3vd%a:XHI3\<oIX0&ivIjp}-$E%x} ލ##V~4Ԃ`B+fJ]7]._;v2/&&!V[,a`:BRpLo83@vz^Ert{O?%q\l_*!ρ!2Bѝ^ Բnف̬׷KoZ \ծ'a t $C`z}}\S_ũˮ)zQ(Zg /-0n(~GYˆdgH_',v/s쉉 K&" -X w.!Sq2A%Ktm^\{q4 蕲YH(O4gcNI!ũe\6 06Զ͖*w]XpOsWSrղ)1?0j~3`0 uA  y/uóͳv3/&=(L]7q3Nh'z| $9t#.Dz5K\b X.IB"ƞN')}IfԓDL l'٪ p4ԙd|gᏛ'2oxV9´ )#J?#h{Vg%\79{a!I|?AnxE@8Gg~rS$)\hK礌=2zy |83F-cq&YX6D+?Cdڊp7Üݻ 7U}8L:rKtaM@83..Q2fȸp]q\kLg`nET wLX =og=!4m-O[= 4-ó@4:ns(D?d3:{hB.ۨ34! -M=.lԪ@@}ۚZܵ[* ~ Xa1)~;>.y4MB;܇WJU٬2L )ɔzSk \UEm6P{Y3)4m6Z2o)_r#r( @Yy^pC{=̡pNb 'xD#/ NR!̬%Yĸ%?bf9`cz0(``PuA vwpfZZ͛E"Iju{ N>]TTD~tww|+v݌x<|>A^dInnAS-&Y`_8.(--ݿnUV1A?Gq%^m?ì3@QQQYYٱc֭['>B!=~u*F$XZ!2R|…N<0M0[\c2::: :;;aۙ([</0 ZmЃ;]ow/tߵ'8,efJ}]o>H$y<^fffWWW~~>+))q\|>ppg:O@v; Z%FRoQ4JG(ކVORno3/5QIW #8]5UF-j0jfQR ~˗իWTTTdggy-[lŅ˗/g:DQ&ܓ1[a.x] ;epgd28`{{{׬YS\\<00p#)4~Yܕ_*00V+9bt 38p`޼y`Ǐ?|\.߷oG*F*twmn0}qf ~o<[~G}$ w.]488H֭[_~R@mTԛtqqZwe+h$ wa7*ps)dvU%u_oO2&~;wGڵK*DNH$JV}:(z3n{{&L%F( X7n0(``PuAB϶mӃ7Ä͛oVP?~hhhJ$5캱Z۷o?skfZ```رc7|L&1nbqYY\r'|| .0.*Z?{2jrj,zebi''>/t:@_|8Rp4`lib3upU͹sZlu]ηFZWYuf]upBKU8QkIb+FF|`6mڴpµkcǎ۷B rR ~e_Ae"w$IDATLkl&&gݛAoliRX'n ޖ]v/DBTTҍ TP7B 87z}a ?3H45jw^[3 vtE=c7t8p!--mΜ9տÔlF}]BDE_g2 3\o饗m /lڴ lo@ U֪j!蝈fR}CH=79wC%4744;3>D"Oʼi٘ٵ$;;_Kɡ$xV!D. +HI0u 0n"gZ{LIIٳgO,IKRU)aԒ-_^zt'x"//GE6M/ nx+ $}U*JPyza+eJ#quV| "} 쟚q`BuA tcⲚȺ'vP T:> _Yދϧ$-J6s*9߯vد7CCDK?kV4l 'wL&D3#` MO~3>/nw:a}Ļ}n:WCް"g$ srr9gna $IpIG# puogl}*}d8^x3PSx9^I͖]mw][- pgHMIQnأ)!iDt5**[ 1B50 ;pgh?r)Yݼ]JՍgK}y BcsZb_\O]^6E6Q E`]TbOuI֣(gb^a,8x?Q\.3g~ӽt婟/Z(\_w.VR^~kGmԎeU\a֏zIE$Yjw0Ae|?CQ X|';7T~۳2R~uPD}Ny^VJsb  0DL~B! P_&~L`?&!n0(``PuABL sܹI3{_Ong$}   X7n0(``Pn,Gűɋ3]U7Q!Ӧ.`vb #v'8\3X: t"cND'-H'U%tsI+/l9i'638\tSdƆI^/>i;w5Aωw}L檢MZLB D8`׍7-)X*I4 @@UE@XTW7$Az"KLơoC5n9I4*00Uj*SGB &1Q`ͲlU<*Jq˖{ tmfդ-& sgY{wb }a!x;U G E{g.)s ]e*2 =7pD'?ަ[z+W2(T(y˶>=qfOh]p1ޏx? LB``PuA  xL}L0Sn0(``PuAB]vt8QǷpfz9YT!!|f"ާ`GPНJLbh$&M:;[^bXJG(HV,o|xBĢWbS)t;& 3AݤM9M+Պkl&1' k~eD贊 5Udn|]SP x~[_k)$&U-.gTxn>!o_Fiu@mWD3D׍O4̮a>dž\g(NBn2}I F 1S}ҍK\41G4 dP,& 4Uz½U,VJc+I-|3e\o|Ù=(0 : HkMF<ۗ]kXO{L,!(&'=5#xGHODAmH%nZU4|3+@Cү;D”elwI/5}f*1qJف1$kƆFgK-ގhXtCy`F.|? X7n0(``Pyx;b'&&g xt!b$ ,hc+Wn۶-ڋnnnf:$9cm_iiTS gݷOio0(}_LRt\.7<Xz@. #<ܨ{L E5Wb<7jɺ=C[0Sf=,봒4W"khomWڲtl <6#S3Dgngy6nx!)0?##cll19deeQ̬Eպvgzbߧ0 uA  X7؟k'E>dLod^0)W^<3|}i<2NH9}EkDvL<q83rZR7{i on^Hvw^<^$zOcyONԦݟcޅ&kBϠ<Aݤ"Ŵv/  ݺ d]w];+s+_7tHߚgcPTs "ow/-nMQ_e?Í_vԚ9}_skIl3*0P,zeUsa~߽K_):H̓+T_~uko~惧So$PNʹmn}Tv/O:zdݺԲy[.^,3Ώ=Y ֑N,BWQU7*Z޽J ̋4:gm"qΠu19V!ys\wP&a+)~rG^&&O{?`0q [xo.2cb|W; 4ɦGtEIENDB`DataLab-1.0.2/doc/images/shots/i_profile.png000066400000000000000000002216271511411446000206410ustar00rootroot00000000000000PNG  IHDR} esRGBgAMA a pHYsodIDATx^ \Wu/-$a[lA$Qh:/ E/ CZd+CF Bl1ؖdy-yO}jUY{>쪺֪S|IK'|}Q{#GOvq sGodM;}9vJ7Xbv;s;q"9)b5kVVbT˪1|;m…v'ۂ l !!J^oK4hBL8Slªc>/llY{6E;>\y1Uv#J/ᒶ7w;h?xeOo/0?63unE0O9=Qms&WpOeLmE?~=C }gҥKߟhIgON>i+WwCۻ<慱tbEUZsTxi *g7TU1g9IP&ܧsq.#9ŘUɣyr%qy"TZ. =}옝s9D`O?ǎ>f=,[gZez@WZ>kGY9C l9piʓ'.UCPv~!?"| xn3uNx;T";9۳qN6I햯ʟEaDO(1Eލ#X_ZbhӺWOsWs6L_l\fXmǎǵw o;doz}fb}ۦkn?ۿ`QLS_n@+=l ts!y òy9 ŋlI4,O9Q*?agrk>,?nve7___z9iW^O~wU\:9⼵qe!YQ u2<]4h'u:+uTGLϲQϞίG"^d3s֟oW+{z>ޓ7\$"RverxYYbiGϿ~מq]#_._H~N*?+ثKNScg6j'thQЇag]lgVBܕ]|Vo}7fr8;={Sz-]z<϶-nݻ8ֳ~Ԯڴ۷`W_<нxnw>?7H wG)^ɓY/Ţh:cL׭Wݢ9c-?/|8WҘa}/}vgmV-}?k͙7מx ;pW pgbljH/H=3)&Lp.Kƞ5[ͼ"=T}Β~Ǐ;PA|<25ފ̶wfj8͟{?t͞3N{YtJ UO]?Ov׿_Ͽl:׿4dO"/Sz{ӱM 7/$Lw%dz2)E/"K;/?o/6nøK6'-:q8D 2+w"V3%Yn[fg< gnz8NsYϼ8yR-_N4D5Aɚ5k>{wZb_2O ӟL" !/ecn6 zTL)vWc]nUVt9H_\ gPկPX:<O߄1fȟycgZs{Y/v{v`+<}t-[qΟ|nv/V ɝvYlYVv ['ebFOIWTG9 *ÿUOؔ#o?3+'RŸ2ϗȥzt4#h/{V??|>-?m;w}6W}}_eˣV9YҔOm͚d_2ڊl2eu+8va}On*m=EϔA9b*#{kzĢcEy\p\yfϞm?t4fE6؞}܆CYslëa~y Zz?|tٶxqY#1N /Až̋<}T{T6ʮz>Ff&þSu9ۍypjˆp%óׯ?T=~ϯah"XYMvcO/:ގ%s?iq‹m]z]BʂÅ+-P\B0\ȪW,zq#^a~ڋs-v;0и7|OZ<=LS@٠hEiKgڄɧ8ɞw{SOY'_].>E;R!ks 8A ,aib-;dީz p̹*ŏ8]\>Ț9 T';if8gth!a?]EUk<a'NϐS"O5{/_U~0DЪn0ÿpބhRȓ%+|!+ǥ}=?Ȫըzk(fʅ!8v`sΉmva.BE~2Teډbx0f ^JoUIv=T[nS6OÅT=T?|PeQbr'ՏRb릕ûU^ܳAh@0T!w ⃫2 &vrge'0g{Ja@ '4g[bg53{1Q -5v,F-De^8PGh1?/]H`yf/>ZNXcwbO$0vrǩ|:‘@phX.Ry :=onX"k V #fn9ڂ?x/N!4B ]ZWkFK̾geb &E^\9z}[cڍ)ڽĮ?QtD6"bG,6EloAc}U-8gXyeto }lrݺuiC!B=;w_B!㌄B!}@B[!B> -B!DB!޻woVB!Bh+W̚B!B^m!B!SO=5 !B!z )B!D|k^5kƮ*'3)>яj8YY%`r2zhg<ՄUOBh/^8!5s(ŬeB m!B[#Buh#B!0Q 3}pSX{-^p =}ph/>L͚ÅRG?%J'(uD!LlЏm![:"rѺ=Llv[uZ{!RG=ev@:RIJ=:"I -,'އ~8׎9b_}*þG|ft=n=X6A#"S`&UA>8fb!@wmO>:z8sԬCN;}Yǎe#ŰuuY{a~" Z1k_&=o_*ppIB !:{EB _lr0o}7,jRGD.Z1k?ym=}p >r^x}vmʕv o^',BwBE]EGw$}:ȱc x'εw:KM!bD6P3GYEʕi)(}p ڏ&1`кX/Ccz~7ͽ߳ ^XԏRG&mmKuvlҮۓTWmk\jˢQè m4!i=cdzt~O9[ԧ{]:^ӕhڏF ],[38fbƏӜҫgO&I3 YOI}%s>ڢFn"{+6^6l%ɽ2h꘯ .&fڏN+^f9fp:t~36o>[a$sαo 1|%65k2pm!f4Pt=G#˗ۼEة_}.\d=as^;;O'Ԓ?L?iO{bٽ{~FuX{q$ٞ9fp?Fcy߶"mMoJ@Wڽko=qf?LS 3/{{(hG[8A;ڏ<͹^;vi69{r/~m-x'wcVؽ?/f-f"jFmvE";l ǟp?l;~";!;35I7pl{2tauHd}pKdOSG̡5cScO*{r۹ ;69GwE#B1Q w:Mb\QBTDHBRGD.Z1k锥|KuEk^!Q W:"D{(uD1D";vBQٸ尣 Z U:"[|Z{!4oq/|a.:"DonvoQ'Iٷo_V+VjB '$${'-D{@h#"vF)$AhG[BPC;bЎ! b)&gٗ~>2'۶MzC#KdG#7oCd?xl=t>x8J-_LuX{y+^Gڝ5k'͝!ex8J-Bm1 ]dD6f"MEN?+vHnZ{!w߭}ptٝMZ{!RGhW[!PE>8:]{fwG/:"]Z{!-Ĉ =|b([v/}JV<;l>n|K.\ÅՐ^$Ũ q\v}EB[Ԏ۷+uDuZЏQ I9zaYYL:"rѺv^ٽ_w.Fk0䷲#:"DȮB8b 1(uDuU^"#uD5ck//1@#"([{ѮvC3eBԘxǧB~#-DE&*B\h?:2fph/JhGKd~j5Ck/D]G ٣ĶB>Jh~0tv=^}pkaRGD+[38B1Hd6wm<ك'|~]5{}`m\gq8m̷qG`к`]G]l>8fr?'[MK_zijh7~5OĮ},BԋY__&owf@h߰ܶ\:s$Ll7m^|wUꪫlřGBZ뿷؞1|fo8܄۷oOȁ{mՊ5km.D4!< ]ԑmI}׾=rF_ر.2iK3Qgjvi ,;ϞgڏqE QO_UB[~#-Ķ z!{1TD%/+VY?@t/O^I'#JhݻSԑPu{ ^{N;~)=>p WW}T Qgj!uCunv)^g5c&_r2VO>g!:"DFd )u 6B0kgcĿڑ#G2C#"{gBd+ud0ºQlo{㏷3<30lO.W-woͬCֽ}zԑ0*^75cB3Z$"WoWf=i'<8kN!RGB:l'sf-Gxؾymv̓0W/?Ot߾~i?Q?:"rѺW"[#aֽ.b[kL=nӇ;{n-_z>~=u+?b:vewtuD#"{5ԑ0N=̂[kLvaƾ|߄}-UK{'a{=j?v $E}Q]-Ds.b4Aӟt[3fw|4;vQ{;vcw۝;!/ .N=l!RGD.Zb):2F}݇Uloɵgv-b γ'}[p}oe?Sa/[o/{˲BmBlQWzȎ;E/z==?3lޱٿ}{yve_z[jU6RQ`bX.D3ú-F%Kw߷g}`{>v-عr[mo{[bPEހ"{&P`u6(fp bq׾3?3x%[vUWۆ 5@#B/5]bQJ(#BJ'--{:"ruЀV`кO=gRlo _:"C;BLTt:"D{(uDǠw6Lp !Ĩ˸;E0 l0 {~ nZ{!RGB0L[:D#BRGXAa]9 !#kK!D+Jº{@aPuov(uD$x?kf~pF%@%C;#jcŊYM#bnDĵG{tPvwÇ>:&G[5aglPgu=|M+hG[]g1-ĸwvh'|8ЎvwhGh/^ !-׷L^Oڗ%{G=jH?;Vw蟶L{4;(a0h= fθB%?!oڞ={G^h9r$]e=f]|Փ7ά#&klz۽f%նQH=8_*b*9( ;ܹ^waJg N8.b=xݔ;uƙg:E7 ?-]Ԗ-[f+Wsfhg>W๺f͚58>GhرѶնe-;B Of$T-/O{>@xBlCh_pY=ou%k9~MozSZӟGGm }WbV<9@?MBˢ>O /;8&[v vq!Bl|eB)"zk*!!8O9ifͲ9sd8ڿ{~;MѭF^'|kFM ~^Tng~mݖCh>l۵k=ϷÇے%K?>MoyGf;Ua I/V1siCsUGk0W]mwy{n:3 2PB m/~qv6v|9餓/qyS^'>}_O)>k׮f}2+mϾ]vM"[!}"oq4- pn| y2oqJݛ /| 4o0udea#nˤB1d m&`wsMwy @:o~=\qgzj)#/| f^ . /ОgK^4_' v뮻쓟dZqwؑGGh2tv۾=-&ᡗD6s ?a\{Һǰ5@,cG4ϐ ook/{ʸ^nmiCU묳_b 9`?x> m!Bw.i 8^ˁvZzW &>X| o\~YsPUgw,_7;Hn9眓Ul|cxǿH`w m!B%ع @`x/ >9׾q͸OOyG ~1n3zQ!ڀ;HS.s B!Kb y=ܓzct/A:3yةݻS!~JCל/d"cڅcqKCC̿MP |uZu Z1k2$Dr6ԧ>5-Fra0nc2Ÿ^cgK_zcw12v@p|`-VHy'_ۚ5k%Hs6v,5;>v\B!e`w#a@<2G~G2R f>7ӆG6v} 1Z OjY;{H|N6 bYN"F6q Tjۛ"}Z]vIh !b0lzM&[jOfϚmW_=s_(vqg<&A 6v+GqZ!N9`;6O}IKmmGsckǣLlkek{}aoFCko3Ywj_|J8"@ /Z(- _ǝ(B#D+'nVnJ}_es&l[u bkǣ"]ۯ VZ\5ֺ͕bSk?#m'l˥ˆjOރJaɭ1N6,O| Z}`^[׬]׶?+ Ɨ[{=b-_ʰZ߫uYczj@uyvmi4JNw7 $ڢwc+'Ō[{=}~%di3DOWu+`Ӻ ۮ}oؒ96g#aZ>5\h*n0n0Bl~e |[ͮrM>C,Զln׮>Wպ=CΞ]y?)!nksw?lgyFZ-(1B{g_w'vﲵkVubkǣ"hgL.{VMs9ZeXu7Bԕ!TWmk _l.MձKhW`Նk-YR{iY5ֺ |Zkwbp>B!B!B!EB[!B> -B!DB!ː\s]uUvd!@L^zwB:kU]J߫2B!*0 !Zю=-X߯}T;ڶxV>я_ Yh !u ~g_Iku8o m!B1%7u+7m솉/DB!D!1Q:r`^[⬴zZ۵3׺:RB!D! Uܵo\,k!]dċ=3ut2[o}R2c __T<$BQߵ.1 1{Y!mBAg(ue!wNL1vLт#GK9bE&jRG^BԞa9 <}!%JBԒ:E&hA/ !jC&y&jRG^B 5u1FzKD-QHb(ւZ;Z,(<ǤKp 1?OE&jRG m/y^ީZuuńm۸d~Om["y~)J],(t".!;=G n!PPYر1͛mW6mn۷ok7:/0BNy{ n!j _e!.bۯ`6vwZkkV7Z˞ڻE7(uHh 1DZEJq:Bw,!L1˖=쮬$/B##{Y!Ov.U <ΥyĶ%y~zb^Bk]ErK8ΛǏ˳Q6>>6 m!?˖ m!zB;Ly󅢔1yqUl??nQ'Gq /6DBk]d(ue!DT1B!c~ǘ^q AM¸BPP癨%JzY݈"BNؗ#ϟ#smǐX\Ķ=/*&hAB[){WpA}?N-}=%+YX؆1֛gBwL[֬V:?#Dvȃ8 qN1IY1[Ӯa(XP~,xƒpLv7!Deb/Zԑ!-Dtn$yb~y?-i(4þ0b}I8&$6 U1Z,h21'=a ^0Wg=Pw秏1WO< "J(,kiJBQNE6 QoB-αr } 6Wޱhd}>G6s)B[g W]uUD=PHZ?S<;H."_gly>ƶ߱;аxKe`^)l(ۮRGkP_osl5/wѦHFX(.0ЏsDwvp"\ھ lWNS"Fk]dB#b"-}?mX^FA kt6}/2Ə{ƣo MA"-j%JBM(@LP,Ц~UXFY&z}}b~~97 ঃm6փ~U Kډ)JDE&)}D#C/ !䉠0+r6m_|< 5 l/rY"}gch>ǀx?OB%JĠ/EH=oQ8/AL>n5!y&ZH^BL 86k~(JЄ`u@fq!F_Uc0 jޭu-; ֌ul0!->EL m!*E ;_?%;YYz:J_*)4j@AyksLSl8peVA,41]"ӨîRG^B'rDX ()XG )hVm U52,OTSH{x\avIk:@cC|\ hB[ O&O*&(d|#_8cJ/}=Ŧe%jLzJoȡߋgؒsyc_켽%El:Sk OP.R/b<*&VԑMM(0.y@%"3)lcy ;a<,0>yqy}Bk >O?WyI$`^L]aVH2AOLKpP5χxCF ?%<<889{^_+,Wl rhA)df۽%J%NUśX{ae?KX&*)6bY +4cekhߗg(q\˘X>ħGv9sn3˓gW2baVH"W)Ocu0fŒ: Qf,>-+)O&ebK7#.ucJo<> q5|mDŽ"4!a`NL -f'$BԑWs:ɦbKg%,Tg&!&cO`%v!ae=#gLJ̧~V>۶3̧7SqW2gJqa<O(onk 49zA D똉Q*hb>;d oKZ$/( Xۋ=0b{ RMɒFJʼn>![aC;uhCv-nO3Av$ 8/c5\ù:3lB' v~LU 1gѼs|"-CLTlTAn]uWN|3W9|j n7k;6ڕ`ۓĶ$F'䉒Pgl_2lSxE3ed*|/8j;j}6ߒvb dCXoDͷ <-?'.%qG7ۃɀ2C=iެ:}a,uL,FF5>pl[e19c¬Umn6uʃ>y:=y}Zb8xoH'>N>VB9aw5/U{ہ\B7;P l";b],Ylp;)n`/Zz|5vM5ܹusHnukdr:_b&ᅏSez!%?X:JPY⋆q{j")ErhH ach^TCH)s7RT kI)aJ.n(i\̵G>p\U87)<~ -'&c&zL(utmW&2K-ٝ[Pj)#]0!BQz Ft faŧӒcqŜp.Ӹ\R6HlJaMNŮbhb{vEwDuD ^SٗTwՊ -*[(#+MuW@Rωld Bi0HG9sUlcwb%\X._)zLwe }%ϝ*&G(-zCB{4֬e[۳r- Qg(~(ЎR% P0GE" n4}(C1>E5p8&E-K5?M?ftgbJv8>S9~C}b1[#aܹ*$]w%o׸+6mnnmʾ1b+4^` ~7З0HLrDv*ȦAS0"؋khy:4(ni$> g^__lw:G/w/13KLtwRGG۷B$ru{?=y"#3FxS2E*K L ilBTsזmȆhm(pW{lTbѾ~}>doL븽a;1=23XN;x=`;$}(m_"5ܷqG}y@})ˣ[vrtjw[۽QHMk]ټ7C ]l$Ϸei$\tx*}a0@v~9vt~+IJ&zV CHtOO$_ H`H!!C$dmyhB SGI0y :M'i8E(DL#߲JwRVk0Ni$Ò:RtRG91 Z)\kGM;hG`rD6v[w!Q"(O=>dͻ7d}%"1 =crc>QᏟo]{:dmKSHmdEm^ھ` @ (I,Mq!~)%UbH$̝H|.Z0|vƭfWoڶvnMl&<ͷأNsHU9ŤԑO~CSSEdc#QфӣBq6u?PdSHS1|_TdøkN.}(N6,fcHW9&510ù8'!)waiLٝH@X/}|;P$081E`lxP%+ʜeHl+1QaËllJ۳_D1ؽ֮Y>]Dww7)3QRU w6p/) K1شD\'BB慵;x aNcc3Slsn<)֮/_x8/akkA ,bvN<hyT=FELjQeHl#ǒǽ {\gW_}df/ {7{7e1ߘW"uݡ55hq d2(V4LQQLd8D#)rRyܩ4e"uoL=0XO0^~Rbw@;׼hHYdz_G_"}%`Д2&>Y\) As*󕡝q"&3QOMJnw';J|*&DohGx Ryd( b) |/ШQ{æna}$w$?ihߗ57e ؆a^?vy܁ure:Brab-ꣅT76e oesUAb{\uw_ѐ`¶5ےLi"]:B1Э p]s>'_Kw?2%n}I:;Щ~aKuI 7![66Ůٮ6v/j&wy= h~Wp5R^ApLq_p,yƀ1h =Duz]r-~X&M+;қ$Mllv^ۼMR{UqС^BԘNڑ91ND0lHelwM)aL`,l̘tgdM?̕pPl68U<'1j|iܝڼ w#qM[sд1mc} Oܖ+AT Q'&c5gUievZkȲ_bof-3:^t› {I'ԋWu[1Qq|B=eu^lnpMb21k C;0q Hlj|e7ߘ S0DIOⰫk\u^?vS]k>EltB+Ḽx/bt{,Q&&cXy2tlߕYȕ%WOݎɲrϾ&H *ubӟt;Hh1R`8 ϋ¬4 K̴)>!H`))z3cI=Mv! ;3Q:D7D9v!S07 Aebb$ϟw563R`n6æm)&N)c}ɋ'E}hĸ1wŘJ6cݠQLLtaBB[݈y uX~ftM4 iHTcu]܉a'D=C@C4cPy7"q)$cD E8Yɽ_3 E^,Byt`hy9wEvԟj's}nb0%֚ xP|E":HA!ysS1k4%:knbnٳҖ/[mkݙ؞˧Pԑy{ A!-Fx/#zm8. #S>(6@;>g̛%@O̢VDvXchlq->1K_ 8ڡy$GY+`{7kHI2׭MWO6FB[*Dx!Pߞ&M`!V2,*$Hn63B( dxN ϻ )Q$<^>kbu0aڴ8OHq>7B_8|Udžq$KbsQ4OۣBLTǬ#]j[pkԶإmD7 -CSG2(--Fnૈ9} wSIv sQѝLXǵk؎s&~1a_JO>'#-CLTl(J}ԑ*ߢ[B[ ݼw#JlgD4 ħ/m^J>BA A?97AE3Nηeg HxDpWb9/Al<NLTlrG1Pp{[B[l*BDMS=; )ΟyXvnjV\, N B`^&yO5SP~a7>ݕOa;ټvqG\Ju1}0珂@jυ*> ǀ  o.!8mbCHbNv)l T8\Oq 1XIIR@RdG31B 1)۝s":n$1>}>_g}NkA E*W6Ƅt2ƓWeT= ۽':RD?^BT%1gȭ2/AJ^OnA7uӇTT!CMFvJX\;>Dz\?Pdj EvZODvsW;N KB? ~M#/\u_68OQ_|EHlיݢW:}"Sq:1oZj5 AMщva}nlPBUT!:`=З5KZ^7 |_:۾Pg?yX K89VկexP%qӹ%JLTLԓqOɣb[ 1Sd26B1.whRG΄/v]8M&_;qǺk^5GpHG44O8z(~}(Zp^Wa su$&c&RG&D Qs:}.ܹ.Eb%'bS!0O!mO  O'db :hI#!>_9cvbyHT9Vx1jDū5F)zU]AwF˴7wl))6 F8wQR`'>bAxܪHl;1Q3QO:R{>q*D͸ʛ0 wMmE6bXLyċl[i5-P0a%۸@ ს6'Rٰla~ܑliiv`qޏv8գb0pB¾}0e$_nNja$&c&ӫBb~M@E7tYNz: eN6@KG t1u\J `mgND3ba0dL41/@>q]O<]a&&c&RG^b~ޯ:̗7Ëih+bB)я]tD $:é އrI"iv}sfb٩t$>M4 k%c]_n}UvKCb:mWV p~(܄^V:p$%JLTl)u$t6B$EMp(&BM!2&02фԑPLcSyЗb0]T4PҖ&)p| D`CXI SAoA`c'w0I<s6}e~(oIx <'_g, %v} DuAU1MUv1E8 b6P`w*a: /T^Y'@;1SOK1>}FzLk(1꾄bmg}N 냠!0o .ڬÏ6 dy"\/Isg<u`GIcX?XXnsb;&$/]a${3QO:J*D 䍷 ?WA0P3؎6w1m&i3x1͝4U$l qt(}hLn!a(nk?%;fõ8g/y1Bq ݒ>]mˇ~:c} 6{ ,Y$ߋ89H8^1Q3QO:2E/v=zU1$^)s :ܥNwK&|ɦ%ig6*03|Tm EGE8E4 >ꜟKcn H`#E$_Jd<,ϟ>3`=죏8ԁa_7=c}x󁢹I"=lDū+U!^fWc 7Dg؀1 ?N(QRz*\ `Wmqn;5ȧ6J0la'4xpl\I*DOẇۀ0%bY8PE,p:]$':]l^b锑P0uGPFPd'uP@6K/q`ʝm/6E86KcȌi#; <ϸ?6sc:cX2WlNs|]+F':ү]l^b(y+PÈR14J#,V(DN>Ѻkm^d_m/c}qM q4}I~<18^C;74c&6c~v(i% 됍S#-ڜ%S?>meWbTy1 6gSDl01xO CJ?vn0I^L?JQ\в^T7u&=Q&[jh60YfSC9;n6soI}Es<ϋmqQgzv>:DZ |}~flTlX ۘxPElm(1roqb\RGfR` m1"2:b FI;[o6i"8(> kpv)ч9|٘e8?b3lBX/ɉ OR@leOm1lYy`y㦉mNAA[N#)IqiIogS'.Iw_ |Nbd[|u9r} mǓ:vqW桘FHcqH'}MSI | >mֽPd} nX*0+r$6hI#|yU c`Uy1u2WpN@b9OHcIќ$ɛNIl':2 U!~콐yu7oB@xPd7vJ7^pw_ޑ;̩3q 0Cz>XN$``xաNbqpwOC_M@mq0Б&YT3$CJLTLԓQI&MUL/T8Yc\(؂9 }Հ>vCl܁$-YR%+O O.{Amhd#xAC/u/y88GА4|IwQ<(3Ml/'7yq0o~}m?mn"Aڃ$&c&LCq=l B_fr7;8cuvyq>%f=}ib$Ha6SKm~͡঱qlma$Bf*vq^5>U7c\މ$14>N>X}|L,ޗbp6O^'a_l|WNljA1#6M5oTEB##9ڀyp(?4|,/MmZ$ee7Jsǘ/U?J0Ccxǝl\pN<7sq!πW+cE6 /I0x,P|u@%ӈlmx_L¾v^!݌]Aq,Y*6Nҿ-udXwcHh!`vąq~ @X8IJ?^xXd7}&"%)4ꔜv_q_Xpf}NɹR4l frš4&l b;A631,/ usQ },Y,/ l&Y>}0p\9ۥqb^lп<~.Hh7g?wq(BBqN7v=BB) y6Ev^z nO|nog;M:Jxnl9fzE5:SWC!NC!1nmn7N/v~k2 YƄq(@??|y]A1#]~YmxѫB e N3&&!B߬V H܁@RR$%;I/{ aK -ܕxNwfXӟ HLGwa#Ï|F `* Dwtw#dc|>z^mb_#qݾxQgb:fB /*9@'bī^@A^tFݷ(}=?`w)'Yb>ԙRƲQ ,amB xHg*:~ 6s0N=ةF wa$T_g,uhc +~ }ع.3vE(}dꘉz2l#URG(dvq(3EHNw !™uҴa^,u>@?Jmǃ#3^C8M4wwiU _ m,c}yc}Y`L>&+6ʜnDuD= {ЫB!ۈšĄKTLnL:݋l/R$7"D.%@ ?1ڌ }6!K~_r lS$? -0ޕ$֩yw`m|=4ouF Pgvvr K0@[ǯvg[މeREbHh7^|= {ɀ6D/KE?lSR!V!>dƲ}8š,):F2!:1]tH[#BDDdql?p<1ၟ_~1Plg?XSLAA)hއ:ʃ ܁AvZZ1𳤸FσN (!OQB}l\%S쁴D0\IXbЏ1ν?ܧ̹84Ɨ%SKD7P+(vf v:B>_i>u|=/Svg'uRԑvuM;MQA)EGpgN5a}b$s)K/Nyf;41{|,"0k:;`acñmM0rqOas`OU3ALTLvNg=R"!zUP[M޼DB8jΨÜn_ >"8ցǗķ} } lcw>dfƠT3ͺ7Ć>0;-O;0YY>ޗ-Id6{U}j1Q3QO51:"H$/Ja8eCljcWP@D_b~o۱:>D;ڌa.?@NRj_|x}u˃s4f ]_}MASxÇx|7W9J_o$l9$%`_؎ z?FY#똉zԑWam#&$PUąSBPo(ØX;gH°d";~۷c $8 XTc%0K`lQxWy"3ݕ~?}aL.=c<ƵsDuD=QHWnz?I9# 0WE$@1 >/60ȷ3»x( EDZXY+Ѽe^ "[8!֋loyvؗnCl0J!!ׇ? -8!"0 {~Tnvx jA8x?rc`@zM]m-_^- S$LH,},Gczh^mQ:1_@b꘍S:?xox\>7)2ħbڠ]kƑ9OK!aK>|yvƊa&&c/ zJr>+k2ԑnw:"DGsn J&. S80S`PqsD<(l( "yc Kcud8x^8?w?6c,Ŏ6s4}Tym2b J1Q3~I[ʹn=Nz zƗf{>??Vgs;4 E;6ӆ08LQ z6Al (v L1)@£1zf|v=Zئv4CL^ݏ&ZKmCHm9)ĒEҗxX(j#=I{-/6_;t;^􂘨Y,{]jsD췽VYYS m1dM9/`^ӀC ֏%øޏ9^"1&j#D|Rz4DŽ00?K?&vF!XBR$}[$Eڽ&&c>m]v=4rVeJ[ߝmm۳r5&)z0u]mwzMP|d(tèoc1qZ8K0wh 9B?/ H샸bbzci]mڰP: u7 Xm0Ƕ/Wdi|;b۷?؄Eh[􃘨Y'Z+9Wbd_\}&͍+[ih>2)$*̰,ń@o-^N4bpHGO+kS/>Hm_鮶b:f.ݒhobVޕDaIiWl+uDx8G';kEc8S..Om aex~&H(޼˃B(S n/[ M! 8Wl9Plxn8y-l{c~ㅼ˳46MvcЇzHz5;`;6VA1ji$ڢ&{7b">ߟ N1LGhȺV=P|ƬvIs:B`yQ r?>N n|yb>\4>/_ǘZC'^>`V0x1lDŭFv۴:_[7f ]GĶRGĘ?#8LǎF(6";aOA7 ]H0/Sy<^d12Q\H6.7E7wq޸̽z|on-a|\qyqjb.| cIgB;1.i,w)dlLcQ>CG&'aZuǁ.2mv `-| Bc 'ͱ؏j6#&HⱱqO${=փIqm,yy@~hh(Y2ׁ/8 H9@/c";N6E Ya';03͝jSq/Hw( ?3Ƈmü/݅$|.t^y'jsؓѿby+Il:f v+mϾ]vof 9#S}7M]keϿVo,/ƃAgD{*0}Nc;}Kcl7BH9/`A) cY~ yaa? gsHHj2Nk u qaO!9қ1B? a@i3b:f:y;֫/ {77}A|bخH:xU68mM,dr[g_">)fBLKPeHLї cSxAe  4zZH(o Ȧ̾]8E.,mZ(164? Pxs.aeb;lbc C|1b{:C51Qa/m4v8G3~w除WkliH/@^S _BAv(b% -2Xư; incx1G@npODkz(^X1s 9<>%n 34ч9@npW;{l4{n0>C>.̭P1Q3M1#y]GVۚ{,Kk~ۻj5n QH7Uyf!y:uPy~~Aҥ@*r)}L@q'&mПׇt?FCa -o|_{6XFq0>Ἶؤ kv5G>)?};M㙦,rcϕvHG||{=2Se=6Dù6DFS;})!wo;y[l,1}yᠩ"H /v#BeL9`uOp' :-E_6c))Qg<mqo~LGsxL{6?\yG SHB1az GxWSN0Ka4՛'uI nUqݕϔE\}& ׭M7&BtN?\97$&p+.qL6|lq1GBv("bazZ/xQgYC1Z(c~ю}Vb5 5l{Q܏:b6_/(ϭ1b1SeG87DuD=cH=h~ )ݼڮh$B7NJ)$4оd=CKok4{>/ms|f7m[1 Ŭ}>CA;|\(awٟ)CTd?0.P6MsVc/?t.N_W?*sU1Q3!fazU!ʛiћ(bTy 2u O*;$xGǠ& ռ`c¹Z;NIguD=]GxƝm*Di͠kx.@(. {fkl  :c>q?*N! E/yа#/66oNOKJjDݯ_/|?h#ϕ>w?!yxr*b1ܵ?/FDwLTLA=U!jD7":THٮ_;($6m 1H ,!E1ib2NCP6B0 [_| -BchysPs2>Zsi;[# ȶ_ۼ1,A}Jy)ϓd'& eшuY1dTRG1_[ 1Bz/ E'Ing0 Z-ºiw -D*dq>3kMXΗ7} k3WK/Qn>-s+Xw=~1s.O&BzRԑaF 1TEoP J_<1_~hpcq.+E!ǵal-@mG/f 1~~x?wO!e;GY'#9.ecƉdۥ3Ot?y,l𿀩_mW[B[1uo Αִ"Q k¸X|6Bæ(,i \o ys8a=@R2l8 K8P9}$}4UzކAxT8d񜻥;&c6N_`]GElKh &M.±鴓6RY"n6`E-~\js1LJ>?&c=]ma,~ >!i`ɪN[# XHD=ԑab^BtBH؄PyBqs;p i^0c QR,k!H@?cX~T11~??1~~Ysb:!64WH[8y66,pw=۽Prԑaam/k/x"ŋ3B!f?㏶>_SS|#>;frn yxigl'Ͼ~L8pmwgAƆq~R^ '=`wsܤnIiO!m1if`6wL{K~Fu"k{?,Yg d>0Fu #Y},| 0S{izMwڼ{WB[B{x{cV+:"51bU+¥L\'LI 0%76郱Β ޷Q,1#π~> ?#s_w}6[c1c%Oxm vd[^_l3گ X+o3ԒXHD=QHW>zb`#={anG \P"֋i$>eN g|#xU3p@{AU +\nw싏1D?X?:"zHRGp觏eejB!{$>4edCB;2Xrݟ 40%O6F6(=iIɢ/)w~/)hS٦vDI#Ox̞UR<җx1~abxJ0]8;I%yH AI{"`;l'61Ï`gOWRG 1jP@STMKHPiyrF*8݀:%!c"Fű?6wXG,ɷ}@>%pMd~7ƅs*b߃6>  eQ L'~? & >ŬcZԑW}ćz֧ \΃QaEP()bC!|=[#-~΍vMȋssND6a sDqUJTxX76!TC#>򯫘%JzU1(yB΋hqnguc="N#<&@\xn9DŽ&{"=(C>6MJ37/yr { b0k:Xtvc&hA !:"vqx!CshhPfDcI\hRQcs4ϥU6` 'p7Ds{yB:`xlJl>瑷\E|7ɛS 4D( nEwO*&jRG =zV:HE;.+AqEv1G`y0온&ajWcyon'( w y}9mI: ~OLULԒQM!;AB[&~RT!@V6U(!W?Oll|iO2WKvVz/Wmg@ܡhċnXtq~~׺ b1$Ds!9&)e9ر2 J0e"7V 8.|A=oc_,zaōIܔ]}g~l^vaտ35,}_oݚ-I̛h:L?̤MްV*{'>f˖ސh7=KVu_]Y{ϺoK7_?տg[vӺڧVHKby];HO=^TzkG$捯joXZ;êv(9nl:f N1NZȰ m!Ƙ{aw|.-ƞ'jTW%c>VY0;[l[o^9R-|]D%;zo.\%I%İsꍯ#Oq]Ӊn"_klI߶Klf|ݛ v팥7Zev;wvخO}Yʿ{w!&Z2mwHWם kG0z(s.݌DpuZ2J#$5lGh=xwJj8V*_m3 cԒ}KoMtof/%.|-ߝM[O#fפ 'Nں_kϰnv$}||]ֽO˯{KZ>kIwwj .Ş1 yӍ@P,ܝX/ϩ:gNJ^Lт#*'׆"QMw|iy׾-;U8xw{=|/D4˖G|_LbTL l{sbH~ v?hHy6PN6[ #;ďxN|;9&DuD-dn6`oWt3N#i_K[/v2{ZwWu>Fȋi{u#mǯq{|NƩ#߻#-- 7j\e m]v߹iyJˋ\_wgZV=U;u,]Z0;?XU:YNױMbi"1dTRGMd m1<}&vLXKcR_vNhWvi>V}|r~Boi km_dN>lv;Wى߾uLs_U;anKeȏ$1w%1}5B~C}9DlvN y:}|;ːp{lgOߝ~ K~7Cd%_'~-:y`Lq 2 (";Q8_; Wvϡm\b1b N6uo˚ no0|n4*!aۏ}6댏&T!&Jt{͒6Jŏ?V3Q;qts=:SB0X/Ï4Q6E cхx'bNZB(uO$M|J(Fc#ɘǓ8 K>aKk{ hsMy|dڊ%0/hT'mƾ/%1|!P^tE{Nh*fsۻP<> 8jtMû bd e;hqe%OyHcX+!% SB0P&^DLji9Jkhg "TH/ (cyUxA ) k2^6Es7=.W_u j6HlbmL.6?AaD||#ͺ/Upu!:_ ?g[iWTlG4p?v ieT=f@ǎǎh Qʄ5e *@[b.!؎P{qM EvF?1[4r֏vx)#i#CS۵0_{8]z, *bXĬxsnU:"nj^LԒuwyUf$s$$# _ c/; 縖uB>g&D=<C)7rE?Vx"o25/͝]mi4-@x#s}E69ڶ0 ( fLY, mZHk2gY/wYLl[o7~ j¶OکmKZ_)u_|]~wx S?2^/^W<@5^z=Uޣ/jqm)Ni@4Okڋojdrz?Uo9}:Eڬ',Uv^ݹ}$XL ָmb܋XV?im]wѺמՆNK`_X[uW'W=%"d|2v{&~=QaUּ9NUHRuv kNݟW? 2b";W)O۷|0WN!{] .) s2(S ?k߮Չ9Y7w)b~lϧ3c/oIc,ԍo Sw9}ݟ9x~Ee zYnoE>ǥ ~gf{m=nf\ۅKzͺ*ߘk<۶ltV]hȹ?1{sg.v{`vM>ǮIo5p#bc\& |ŨI-bDž/W4Q^ǬChׯֶ\"L]kmFk/U{g;(ݴ#1я~4 /BKu8DtmKy!>W._FٽO zdv_;ɜ j'f;'}lWobl.؝ٮEڪ'>:i&\}[#Yԟ:[r?ڽ=fu9}pխ#?eDb_/',&?d Y;I?cN-/gdE.8a&3s==mƷM[Qec W&)GoEIePn!GW&(,Uqڵ;Z)Σ?!{Pzծ-ܙem}vWF Þ:!:}eTm<c !ۙ/σߎy"ًh"l1Oc'mj01/ 胡NL#D?.oo%﮲,y,vuoI~}cEOw&skȝD7W%΄>d\H¹J$KOؒ_L9΍Z<_rYۑ69p['N}i7ڞ#U_6~7uL 쮅+lymxmkVۺMvǺ_/uw-y<mԛ| 其/9aNu^v_&Huv㥉‹o[bRG $vD@x() iq~ /fXUh$vl'o,( bPlILw׾$~*z͋W[;ʫ_6ȳn'H#7yl7._m0{s:3 O&sKJH[6q{iO7=([;kɹv[iW;m/o^ mYuC3Myڪ/9~>g=;~Ӏi_N{-n?6ۓ^>ydr$-;M}} 킂yo?~{Yڧqľ_iXh}.mb.l)y~P$, WsQ4Qțh ;q?ܹγ֬e?۳ry"E?ԑ*(uD\ 7/OxS8e+#'Ob:"ؘ ?nN{!ЏG iԇӸW٪m5p잋Exa .==N,A!ǛZsG2S\Lڕ:>w;l9I9;ro~gm5~7401_C8Ҿ| +<|x}\׽~U N?yE[&Z?&).Ŏ[ϫb!hbyc1QMf򺕶웑bd{H m1&XMW0y{ZJH/QQ]lJ٨jOQ{3Nq AKQk~5v6o~[[lɿA|Wv.LWo~2/S2H±pl%y8VV>d(3!-BA C! Ea?|$nKKvs"+ K/AΟm]Zc'2cVgp2C=gk<!9xM.fsi4amqmlx` /ɷKߓx"$ ?EІ?_¹{MYZ;O_Yϻ/=>)>`Uu>x`V+禛nҎg&77ʌP7V%#8FQ @2+Κm/^)F c  8燡G i Gny9oi(\;ducp}_bsϟP[V.kl/ N׋`kDh\n <p9}0>o9s,۹S} ^` 3 }%uœdfqH?3aWgFx{ݼ^G'?b 4O}(#\'ĎA Di'X>vD-ԑ^ luDt7x!G@6|^,١~ w[~-aFPA#D6}YcX$%w֊bk5c=:'z=sҘ*bspL(܋`W;wg{= CSdb^YHY m(lA b펏Ƒ,>{3QKf#~#B ]j骊p\奏kN'>:K!(ojҘ{a >C0Ц14<ˋqc{c,ϧPcXQ$s@cC5܍ SCЦϋj\ayb ϩ dm`-<^>Ԩ>3>ߗ':G~@y$YOViQZOVX|z"'&'䚠pC_Rc >bg}@Jtd ŌUrb068079f7ke:~#.#3/C |3Mخ@=>L2짯J@c% 48d I(ю V0ƕa |_Vg ע&I u=đTdH7HiLc֮vyȹp!b  }OVt#{3QK!&/ :dM8E}(GrbHT:"*@e Rq^QEYgӱצ~hMai1aX>y>\Qz?:>Xq-k:DZY~J&h|B?u` ( #n\^}{b⊬cFb> ]/b2~X/2kZطս>ߗS]|vu>9xJwʹR`{b! DžmE+bBsbU"LxR .j ~P6oޘp\F싏1#FiCwv~I :N6Þ0>l18xvo|s{ANaoGr6jcϕ0[6s}~6ڧ-qr8iw&j 04]Cб|'׎*օЏub b|7:6w3X W B3iubٜˏmr9q*7BkE:SC6ב>qYra և5fXSc@|#Iɋ>n*(zڬMkY8mQ@`QVf鎽фT ClG/}=$^yt1Xl mNCE.wakx>~џX([9 ,3a V6EvH5><9$6~DG~u.|B?`_h!c |4bÓml>~7g1u%_Id;>UD"-*  Tߝ K85)|@LQ|6a &ޒ"0e1#Qr4+\^#8F8/z)i74+0}?A1kua`ot| J1m7k%s0pb9` 4}aŕ3|&|Lp=a;a.vZI5mP[?X#Dm8@;T:Ptc\~W 8MAE И2y^@`>Ygj> u )}'')C/0>,Ӵg~:uSxǷ [Pg Mm^y  XEpa;+!{3QKڽ.:"D_x2WBB1X_u^PH||!0ElSzb=%biNbx ̓"[¸xؗ P74mcc?oNcqN1|\8F|q0@߭EC8_~@1MB;1bcw.{5}t.5B gHs,hD_jg׾7VcѼ4bl|.-h-h#+x^-Fy͋>,'Wcsh1mD/6ljvP5[>/PWa> _Y8}>|78Ad27֚/15ȍȖ>D55c@6Ϧi/GҮuwݻwJ@}{%@lYBh3Nq]8}eUmPBAD}@_㹘WW{bыJ;vt?3D1|̋8`^MĴ5s@ t4Ge5ŽVN'Yz 5h0j2h!J WXA]Z?]Y5sfQ Ls㩻&g }ZO= @>5c/+9+_վil}(qg~PZҿnƴo7桏31> 7ٺc|֓Q,;s[՝^"?. jǫט4Fl-n\nlz?Yjyժ17~բ-lež`$Aرw^߂c`FB_6>W bʌk˼bJ6eS8ChS3 yV A *c 8Zxc44N|,]j^;]wg^s^,W_WJق7e?_uiag[CIkQ6v"y`gڴC3mۂ #GT#VGQmc=+bP-sL A ˰s ˠS·6;1/~[Vaѧ0g\[$`1> 9:k}m|kk˼Αr\nl`0d^ŧuhGc8F}>xs<ټgk:OØ|ٱa8Z`kM88QuΦ}۰zKup_ڶuOZv}:.쫝H3 mu ,pcVyB"-$ir1/FF*@= qCc6طuּ:` +@cW])A_d #yx@k}9j,B}chaǼj@^NZ.bٳHoWk8и^ 9XXVAM݋)wޑ6ߘ~KzuOKFekęd{j6~,%^ɉ1 mQA)G=\.8})Z7Va S|njk_cyuu۫aȆx& G4!#mP]9Ъ9s9Ƽm.gYmTƴ?4A]}ց:`"kϦnMm+adۡVhj/vM+ٳ~sssG;XL1ס%8|z]s|ۇhk ڧq}f6)%"o _KNsZh '^(y>ZgjUӸc)k-6Ζ>8ͺ8x 8om_ _Ιhr.5*5Әxīa>um ȍC`6&ssWe-Fu4цUdt٣wأL+~mV·7 :WG9մs~ʶ]UVzX!uX)f0ϖ5W}DZ|l Z j>6Yj@:_bo#($xѧϸOay3Fgsu6״7yj]VȽs}˩1@>Xg@|oڳ.";L en6ik |c-̫qZWVq E?'D7k1kZuy>xȦf#)Qs8y U84lrsu~=k*0;9x\"Nj> t۞,8&[G&G`ªHڬj7!jF5"zXgNc|PlS zъK\X10AZϴƱ 5:8X8x9ȶ }-}hb~8m[qa*വyί50o2QھZxc\Ok"5Vb~1gcXLCeU{X˭j]-ѩYøױi~?>(Gm6Ee0"U}B›ch8sq~cט~0/kl`5h橃tƌ>7D:`~="8ZĬǪUkas輜5ױuq}~.lMmWsFٱudrVSqj tZXѲVc6׏m*q+gqcF >Z(9aִfǪ[cs*va%|.

    `sn.em>[S]D-:LVh|8km^>^=[Mb[,XT DZ[G&G`%U-ܪv9ַuZ}/x^lS|zF l̊[טvsմF0]w|9m|>fg@dZZdk#'AqS<603c-b:^k49"Ջ"XŮUzG9quؘ'aX1[^mVlؕvlnBhSUJnَ/mQChYj}`7ƫaLkbn%ɉO1Dw)P>c4`ִƱv>Gxg I[ Jh5> ZF}@};[@р3gǢiM}~ի=]v1 WXlM]3@.[͉`Q~:29BhA#lnAo!qۇq0q^G )>hKOp&QJHFb4S [u 'El!fiU0mU+zClzmrPbsN?]nBz-|)RAccڇ8<@`k2 ((Z^xӂiX:mQZ<@=.-zk<69Yc/^|k 9QLTڼ,뇯O?-}\jLkusت+eU%#K,xXюv UlۻeXm1 m۶ϖb!X:9<-^8b.ItSD7hCN@ cuHV`ZUQ㜈yDzy]ZkqZaqȼ+۪;5k גk 5u00qtl܋ŏ?KGh[&u$Dth[Gܔ6mݓzi禢_΢Gr &e4Pxcc)F42NC4G 5TRR BfjӼ|μ16W.*ϛ -# _ _3`EB02Ϛl "9g 5Z<- ])XƮغ ;z>2^ k_cMct<#<1A0>c. AEy=$i8`}`l~1gXY,[G&ñcdži}-wݻwm;{:zbtIgkzh펴ֵU@ڿocPZCOxZPBl,Cv,ak}1೯浯q欸bBVUOtȵ6/O74Rnq.v{ꅋq 4N8\0hB sh9*t+tSlY>c5D'Mv7+Vژs9նjVwy-xmV&~t Z[l-м]Y0bCgtg~zMZw)TgAê]ȍո_}+ lrRbeטr-Z9-n՜7 XmP 0n.ϧh)ه^{Pul @Bh ( s1 Ptq h8P߫%,3!caH`t;Ro 7ekwb;> yr> l,H;> ckbÑL6Qz9sc@4T"hnXJ,@H{rexb՘6׶ :pn\:91kHSd}@BWlqSrq̝Cs_ aƯz+kozyY ŏ7U|_|rCjtÐ=Xm.m~ctA+9T:~mŃ3ת͜vU#w/+ۙ\m`yq};0rL* ^nYXU. }]nk7Pcۭ!0yp9k3Vǃ\A8@ .%}[1>`s0gl ]b[VW!gvh߫Qc6; gZ:_kX}q 𻸹R5<}.ƉxמC"죸ui}i9_R:nMZe?DrZ:N};}8T]b1cKx14۷sw5~[vKw @resm6о۶_}"4F1mW}D oJ1n̫+sqr ;o֨Z;Bq@-E҇ blq'>a̶ô5DvS\ӬT_[Br><>͊jCc9}Z_ smZ@1k>bWs ř^Ɏok)b{_ņݯ41掦9R[bvj|op[80ZGlM(0+P).ussycIݔ:qMG5f1 qӈaX؄BS>Ϲ |I]̢s@jcgOs6(7x# Ɨhiors,~, {}hޓnٕVwT_vmKtZ,ݣEfwa5ͥy=Ē[&[(ӡkְoyq5`tŘ0ִ֨ΛkZqטр2Wyy*Cy-mpP ӈ47lHJk[W\FLWژnֵ1;Ή<@_Z]qWӱ0/>s1:@}9ah8PVG<3ܐ"+6F1sl/NX+4X<8j0?y8u=r.pr+| 8s//;n[HA,J&GVK| \ ^ @PTԉmٸW6F^ܚ'b9:io2ƾKٱ֐# A EsM1WUl ֣¼g+eUlV"Rs4h};[+)fgm\-׾'s5[{}vV}nֲ%W`U7gH;2]>[##v0T?; qo|nmL~*<%9Ч1mΊئ iϼ14o&A [K߶0!cĎ p\s"4 c^* ȦD$RP'EQĵ}WOu86VpcY9˒b{99G bdC>>؞?>=j0m##v0 #T'uv86zTl3CC:@:i <9k#hW!Nm[sKqG9g-8OJ|M"rbBⓂ | l5cryӷ5|8?n+:>6kخ~s(*^ѸEWlzȞm~`i077B;8S)`ĶkNlT?vu` 19 i-ci14o5z\b<|5:mӸZ`A :}`kG!IO4 FzΩ5"l ˉl5FVu_׷q\^UFp*m-L+ڷی)NqV!(Et][zwuoqL:29[G)gھ&~ݷh}{,h$ƺU7h>㺠" ]bĊZ9b"c':Va Xa1 @5 ڈl5Ԗ㊋--uim6c77#cҽf"V1>F2]۸dxݠU9uR3 _ F֑م:[G7T^0t֑|3bbM+ƵlPh!Iƚj5f [/uf FZz+E64VjaVdh׵4Wü4oy~Sym^ukl!ve;pźɂZb#v0 S'ʊ7i>5mEC1EdTQ݇$0mLka8r5Hַ=Z 1X|qBsS1}1Z8}tvzÊlm!DUT"s-"y<XӸy1W>c+=׀Ye/LB; ģضxuJf1j,!ISiWú5޳px15Ɓ[c LtmmL vɂ$ud2C{ChK:mBQ-ƢoBKCm 0z8Иg:l!mQj<Zk p}<|eK1Q91l9/9u9j5`0 M* =!d[c0}>c0aQӼü;/ڇa1mu@[vB}X84v0+LbUokۀ>ԒQL*RCacLx$1j{scZ}36-ǠA"N8' (q6rW[FHNšdyB8/bjv{_E^\`>Wsic0^S[{VֶMse\ȴ:2~% *MBg5m6Aqx{* 6nRa^s.f碵YFrj}=`yBWXs֎>}R Nۄq‰A]VV'5fB}h9?磨 Nv Xc0ޱf4αZռge>ZXd#cj6#'"^<}@k8)Ai&mkƁ:l]^yl=Z[>B0F<+̱p1kKPǢq9OdӀ0t5+LXhZW/_Y[U[᭢۞ n>h8/-s@kiemضڶUӘ#1bH0CL#V()sؚ]ĶR)Kiދ3ѴҀ7:: >!,X;|/61::q᜚p@܎e^Qcւ~|Pd蜅QE$8bv c 0 B]ۢ>P>uP4Fd/鵧[NKb-o3#|xka}31Ʃ؉1݆_i+x={R4uX>?X,]ٶ# rmܛF.b[ >:s68Wu[Z<DoBX9ס˛ʶ׉Ѣi ~ ~A (`%ZlܛFu<иJV8%s^>Wx#^.g9gcW@}C}EAQs!*`15kEK Z΅V^6 S(}VXCm؆k544(Ñ}y}Y0֑B;XbʩNlsVDzqTOpNyc k ^kqԳoоhF#y=A +WU@+=q q*6'UX#kEC?gsPx#f[ִmg}x}Ԑ6_7oJԀCnրqnAcqC}}y@kv~URl:gK"d!gmԊ'Iěw6o*9Wj GNt5[?.xqoc@ <,̳^Q&̡[fCtej 9V@u1E$"VR`#ckkZOmE7Zs:]kz= 4OWבw`#!3)9 cEk;k}\i^J !'ulY.^h hέ>KQ ߎso)P_"عb*q+*lf$}Q~hԉ[Ep8VpMg'ՐfkTӘ _uU,'aP:rqݧ_ZY0֑ɰnݺRGN+~-yly5V'k} F̢dÈmD} xsc3@Ρ}'>Rf+l>s*k}5[~F]>.Vd^&ɚGjhޚ1Gэ{|1^'5ӱ˱\sjk69 @ %w&ƴZm4c+z*kn5,qUY <..rjekk U0#O50f$fŶ>~^5@5X:IoTX{Qbu΂Y$LYĤ[kŀ7FzYgcT ):$LDFS о%&8v cBAsu1?p|56+uq\3Z嬰frg_9='+_Ŷ>~]'@ lcUm .VP,Ebe w6A̋%:y۹s5ybՍ߶ߴaxFΈU'hؘ^JaB؎c1>d7Ķ~o "YV -g JpMТO ]iMq^\97cr&1m}5(iz@7`>m}(|JY/B$vp2{ 6Z l]qn^bT!j^倍:zCŀ^J;a\W[sj 1+ҀT(3Μ0cl[j"s4Gߞ+gK]m!kQ ^/*5l}+0}=- Hl'+7ݱ V*usr|^m:m j[üuv>/F%amxwRcxǵ׻륃}VeC硐91WFA+@kU,ȣ*=P+Z3>1 j/VW93nu<@~&{>99 f:29gݱ V*usr|9Ali3;eL͢ ڰ:^`=  D6Ԙ[}WwScZqsdLsE9h7scxXA sO(?qwl'H}-\z[5Zu,l x#y9kG4\hyqY߾F}TL&f:29bvdp(@sͅի&uΡv ѱj;.cPul܋@`n88SE("*e0!2:1|[_Sc:``~=@hu (^CױiӪv'=KY dlS+q+F8pglK]"MB֒GJE#{IDATbsyr@ǨypqZ|.DDV0ýc1hKc81ִf18bbz6]_uNQ"ALwK]q0NF۰qP7W].'\c^'u_c fڰU: f:29bH&;jmDd\u9onDmn ^.7ѱ975ukkrqS=_C*sxEH嶍+ּUSe}Zfcock~0=k8Vc Nl{l!%ƨ7!Fb|u9G˸09_n^sx6,kG:rx.`)>Br #s*l:fڊ{0cѨ(}\J聾`=9Ѵ;kвg˹I6ז&: 伭#.VPlyB;Xz3] 9!g.cr8ƎܸΫքڦ;gꎛ˩rȥTP#c!HR/͋l %VAN30j6Qǫ:оc 25crՖSr1 V7S Ύc >k\} >ސz72}}^7@_ݯ7o}Y0֑B;XŒzSw:ڈʦD!ɍXˍ=~2ji:68qtn 7Gə V+ W׊9`c*VP2Z[+=x1'q>Xǁoژ}́(ƹV^_׎: @ ,qF1Ni9(h3_]M1ڌmmI2(RշuqEcPWgDx>MVӱo? uek >`XٮXA`##vw& w|Ms|lm!>"'D4S!2ߡB>[d+6k}k1}:0t>kZ@X s9^co䞏ZTLY0k2,!8n]u`ΦyԴm6=ͺkAPf + r̮VN-(m/'ZA{dQFj9?CZm+r'M@"`#cTN`7 {7mI4w6<]6 AkchS >HNˊ6:m?56XG7^=,4clZ5w b_܍VC}6"udr,1v 2=imi+tƫyylÛ{\ǯ3Κ%wlj }Ċ++a*Gp V&}T mR}È{vu۶sdH sD>@9\L[qb h-?UyX-u띻>+YVSE=?<mbk:Ʀ6MmsN{V{bA0? 8o xmӵԦ am`U+bXA&[}꾉mLZDce1퍙i˂|PH7ٔ{Ҷ߲:]zJ(j#LO] qD7eXwGx~9ՆaC<ƺV&Aa_Kt(^,^vHݙ w?ZS:n?u(_{u_acڷ֑ɱTtTøo&È9UX]㺎yb< ; 't8rũ[E&,Jn1c|ڢ}~Z|8vPLٔo[udg|~Ƀiݚս\U{M~Wnƪ;EV\zi`ZXQwe)&8.~rztyQ%y9;AqӜQL! i㰌9k|m:^lB]̶צ -{8 뱪Sa Z}|rUpc\iikWjW '|^gu1>vo ~{rkbϧJ ZƏ؉za}Ř ש-N ׊Aν'̽>3<']VoTLtovhs+ݚ6m'AVhj/c"vq`FwdTsǹa& ۰׎8µpoU ^7UȪ vZ]Dxgk?uϦ ~.mbKQ IfChؘĊE(*8ecR3jQO!=\DWǽz}WET/؟ rƁc47k3, ^d,[G&G !EiF8ca> {SV*PmI[S3d`11'poqgA8AA_AA"vAALAAA0BhAACH;7mKJc{Gq>n~KZ;{ [vUwi-q'^Âww*5_ ܔڜv?cOZO-b23Z=EoBεA8έ޹Nτ޿ocP^COM݋`Y}{MxIgy.t;RZruZ[^e?<.Y|Ckw"q q'ƁGҮuwoT^+=2 SXԩ} m˦m`%9)~fo5i'dhy<ӗ=;u\؟6xk>V ?Eek>!mX+bi>6?u(_{u_acڷ~#0t~94?a 8ַ2N&tvlH7"s8}K][zgJ[O?*Iq[ԭidxɃiݚ o[妝]hw|'?_z[E!wJ존RRO҆ӓv.ᛚʰ=m=> !]PU50ܚf>6..f[%?T 4L %𗿔["ĻxЙ(Vdu$U=K]^|k>qL3bkZybu`}i#7X s }[vr6'jzsxZ_c)_7yׇk}[R#towZ6Zu:_7#B;  f   5BhAAAA vAALAAA0BhAAXkFAAA0#,ﯺyWs=N:^}* .H]vY:sH=->Au:z:}ϧɸwѿtiZjE' ^5Cm<O?t+_/(x?>=3ꫯn|krA_ҥ+px_=Ub; ^U_|}_x"xM] :{o2ÿxy \-ś-_V7х^[G>Ruq#?#iŊ3|Ϥ*ْei._Cn"AӧOo|iݺuUG_^8>/ɩGOe˖+.Y5lez~oAkCd;9y:?y"}ΫO}t3nm/~sWߕ}>_뫞& ;O^ eoBW`QiA}Tӑx`aUCmQd+# ZI Dss_~X#  ,?BG؛n_δ㉪{xbGzY9p2Sr~KdNV~mNwJsV,KZ&A,E7Lz-{Z{Z.'Z^żO+ޝ/n4)}t].Nk?~WI;=~[~/OKʺO?_g&o/b=|΃ Ox=~ѭwOi5gI}r7ϩf#eCz=Jk\҃η7Ʇ,E~K .}?(E8KL>BzկI{y\o>tD }]oM5ˣw]{o9}o53ӊk"ym;R\#wwF7WwOD|ZxbQAT|VxWwޱx[5xޢ8gp<?fi|SG~DγTy?*ҁoTy>׼}Vr غ\OC9=s+n׹Tuk9`ٛߵ?*R.Dt߰3m'BNn2\|q@_)DS"wJQ'Oߕ=Bp@l=0oΈa%:w{-y"W<{נ鱚sHb=W7\qNʟ^-W8]wzkousZzh57xzW9}[x I{SDXv~ͻ6Qw~81s/iqySz~UksW"}#5+e{'SC96>^u~=XFkA\}d^SAηO7%w?{͸.%ޚTMT8禎g"[G~jO_T{5xz_tȑ2S\j]JMt`̼1epB!t3_T+Mw~0z<0][o ]οcfK⣅4 OUۃ*źǛ{lF5ptG,Ʒ O}==~~ %}nQeHmGrO]$&uw_Ur͟-.3Ź*mЏ/|b{v r >X9!wM>,ѳv rjt9kK9|/?Hą WSE5Vܔ,uy3PxmCsf76A3F꬜^+GzpYJ?=VޣF.:'ӞjNcyիJQ.+'|+R*~hikz`QĎc/2yX{ h<]?s*=q2}?Ho[iÛ{_wݗ]n5(W{zZuwOsǿ 䦴 fqhof|pk5`z߼qMrTEڼxj=8ucr+y{Wzܑ}s hE`WQ[c,s>tg~]GCn>k~K~N w~T\TtRwzw|P>޷`ww g :G~Az*}>{.MN_ ?}Q†_?,{/ Ǜ}l]a9^\Mw7Ѻsǿ -_߈-ok!8Y ~Z~(ץwm=jhmG9}tֹ_Gn;+~XJ6DwK~Vݟii?3׾~磯I'ߩ\ryz͊vӝ^|24m :.OŻt"`aU=XZ~Uw8vK ?5}?Y_*ULϮJxi'_.r\"; 3֑˗?>Gg[Xzd#\W6S9:kB__a[H,ܴsҺ+IϜ~\퇯H~goAV.OGNʑG^l^>8w_~7]r%骫"A0{ttWVxM&m :ng_ndǗO_ i׭">q3j޽}_^~I3YrEzۚK?ڴnUGa{VAAA u$  zk   g9rcAA;AAX~BlAAX8yd%W5矯AAA͹瞛rT:B;   /V\|o|#ر*AA08q"}N^xaZS|gpP   <]zK˱{.}u߾t"V  XW?^v|߲?ߙ;}t:HQ_Ltk_VuiTà   v|ȑ#vdCds9iiԧ^-D\z^~9+ɢ}ԩєo8i8\34\i ^g-[C{rq_lה;.⪗7i|`j?w6?QG9 A-"w|EiȯX"Ӆ:IENDB`DataLab-1.0.2/doc/images/shots/i_profile_average.png000066400000000000000000002065521511411446000223330ustar00rootroot00000000000000PNG  IHDRN붌 sRGBgAMA a pHYsodIDATx^ ]E};A$@E 0E#>@HDKk[ۿsmԴxk}pckiB@3@;k}9^{ُGo~3>뛙Yk۹sg8rAydo>9z(Γ\2 # Çer7^zI-ַG?\x7_yذaitup7>rTzf͔\9i23ʃ?D~v9r92Uȴ WSߔ\]NOWyF*W$_Kç~7;^/|(_i'I[ c m<|o b_g}Vz)9ԩ80a5*S Qsy2 7/+mjW e(FL_eW``۶mr19묳pHBHܳ .֢G64g{?0(/VGKFԢއ!(=>s|g!KHO@x"bG3 c%BY[gGG[Yj7fw8 y:r8HA5;8)P VY1lƙ}6[*s?CCPb$tp(3$N󏒷TOca {\Cs˿FOwUkG J{ƌ=ǟWi|O>}|K?+0 0HuʜV;>Z{Йv{}퍾cx$;ܕ+/kn\޷͑׽^+o 9tӧҨ7 èM2->5?]=19&]RyWrq9qNs~]Z`/6 c`4.oi&zClspWm-[&&MOjWȆ}/-ubnZ*?2ya!9v츼xyg{3ϐS,Nz<s/>:-5j;x_2_[u?$COKGZS[=xW6:m#jy{KTP‡|fM8O>d"&r2rpJhs.m+[eΜ _R&?Yq:M8e7(he  V UPDҜmg>}L4)jĴ ^ZO?AI!:I]br>yΖ SMw޴9}(/(7n/v ̞TbE{oF]mϿ(BAY,*[bѢF z)o`D򕯺 [5[re:K&L<ɏb2O49 cbuܧ4:1 CLN;ô_)h]ӱ'~b ݆ѮT=g4~񽳱RhAY I>)F}<$>bWwNkB#[-[~Uqx?fٻo?1>*ňEWS[cےRݟG2)Ž#~58+~OI-~_1i5N$׃_/SOةhx$9mf 94j.|ٳoZ[Ĉ$`p}{8{׿҈#G}J {H$K~0͉o{OEAJ\/_tBp?$a*e_G%a(WooFa*oC D_\Uc5qG61j?S(='\׫{Yo(>-N?Y=8^f:Kn܏g[vH$!+OS4͟jy晥QIZl!g~$3fLOsdX154$]9*I0ZŢgs[oP#j-rS~dkxC>wᙯeL\|o|;O|>y*[8,__V|Knw{EB~#KeK (^bY>-bG\Ғ՟Is"_|E/K__c`PQk3 k3z{Tu-\sϥ<>ը|5Γ. %֟=Weמ-KeoLy~~2iߗ/hڢ:cz`ۨJOArq6DNeC\ߘj?2:X;R ZūvܱkLs]F}d #/E^AN6j+M[=}; a/yy>(?$Po}E0;{%q˟ͽrQ9Q2e-ȑåIM^/;4i FxBKJC_ᑄ_Za6u^dF9z"zryZ&ciW&øq'yM ( ]F&+_|7ʍX?m/Ms˜CCQ)ջF +SoޞѩԾIlNƮWmzbsiڃdNn3k\t9I2|x\~rIrޜ)򲳧IAHN9W}-Ͼ6ўct.;S7 e}~/`ZKveO2LBF~ ~«.뻞n}YV?mpǑ4w:!\ӱ#Osvڋ# ?^@bW]¿: V5,7Jc}f߹"&c';qJ+Vߞ)>E[_<4j`?\^|uތdH^F;5[~lZv,*b2!4^5z16Q=a|XU =1/d2z4ock{;QcdRv:]Ǡ(]30+=hw;JWGocq/q(9mn싼ޫZ|LH{{Q U6N;}ɤIRկ~Uԝ9cv-9v:<ڵ+ khE1i6?aUJ3K0:Q7ninAD0aa01YLt;v1̃] v;ahlh (*"cpۦ ðinè6ڂF#w0 02&&`S9C($jҮ;A046m,)$56m݋MsF}4Ѳ nQJ0>gھ}[ob5;s 9ˡC }01Ys0BR] v;|I9~ ;|XFawooMN_K;0d.$v-9v<ԜʔK˔MD&86yȈ>o턉Ieh5!Ia@>=rsNX>Ȏe쏍іM 9hU!I>񉻺o};3|>;5kdٲ]}oZ+rtT=:-F{aOs-AI'2 hicǎU}xd}#۟QFy3v6Zv ÈQk |zxlF'ab 6s.BJs+(`yOpn {{ ŷJ6򙟧AbZ56vaSކy4:3ߞw[yց//ML˗',GW\!~F;`ƐBؔad„ ׿>j #]&N:I^iSd%e8V^`Fab 6cinM7 J;9rL6ܵKf|cL"cƌI[%1BNGFbƠ !6mA܇Gi˗9|^/}cZcSc!2bp96290Z6N =7r'2v>2 'd* I0{e[ƿs2vgeOk =01Yʱs@ ;b/(lO:wȞMdxIj8v}{&6dg=<*yel:}tҾv ۽[2jv/GvYgI '$Aѡ/&7E9[&{Pvl+F:uz;Ħ ;ɉ2\pOB9|rtir볓fȱNQ?wIrrӥF;Q\r,^N֭[% 1l6Y;{+mNrz;UPڵ`ySE} ?e}+W_ϟ'[޶ImwJ"9H#ISv-9 vƱS/#IlKo=m/up{ٲu>iY0QVŞX9Qld l*'9t!Y4`y0 Ccb b^;d /-EJ;ahl06] 6mCOic}ߟ+vDFWrz4w l*9!٬inMP!hyW|v=l0ZU; Vv-9 |0"9{A{b;kLmh n8>Ji KHlo0 ld6e 4wH J;ahLLVAJ4wH+ J>9 v И4Ǧ 0Vdl*'~mT 4};ah]p}giqL($[ {a4ZI=Ylŏ\cz+\%Ȼΰz4Z{ĤQ&&J`01y傸 76Ĥv@L4wl*tin >b1lI=h lAiׂbq~f hLLeȦ -E-[JF'bۭ `R~9 jt8 Mf"=,&kg/ukDav6v!J!lcҾv:FP\V:$->MzfMyȆ&m*iif J;1lK [Ln*Y8#-8ؾUfT v5#_O2tTlf AR6"*mj`ĤQFgEaۢb BO*끌6dl*ǦI'zG)`y+I^e{}z{Cz:[}ui/^jfъ6 *lT;kX @^ d* 0CO}4 0 `b 45*i rJڴs@<11Ynyb1KH{;CLTvH7pxZ$=l0ZadEa"m{OPb;k*tTNQI` ~QnŦw<2yaypGPL ]hUi.4z0JdbBh\76RiaU)-%vPTv v 4wJvǦ >l 1!i4=Ziat&&`S96Kyyǽ=䓩0:"& j9?cǎɓcg-̝;WƌFF{iELbYj̐^Ylݪ}cb94J`Jo~^(uYfyt8o|+O~hGZ3n:ge69Ǧd޿|v}*!iӻ v{ppݦܖæwN;Mh|fgo| T5"6C5nB^ x0ڄLj! f̜-[?6nJ I`B2ПpRߗ  v@Lvii NH'u:S˸5:4n1uZYh{^yWm+}yrUhɶB0ZJ-, 8z92-8_eݩ1Jd[&=I~/~s`GOs'槶e,\|-PR:fL!ױu3vZ l COjm&}*[v%O&g^9K|X؃rx0yl9g9a# >TN3$;}KTn83gΔ^ٳg| wl|#?/y^Nu,j oH[F{b݆ 4N~C?ׯ_/ykd۱qi2hޗ~2ij媫wӓ4WC IhfVFԩS~lٲES/i'eݓ|?hBLLVզrBHn:+,mz7Cmdv-yˮwV.T>}:Yx~ia76F7B0Vc)b0 n8iB0Kaݎ* TofC-"mz7Cʘ;ah]pu}scZ:lL+H0*6g#G@LHFQm0 11Y"ՄM&ysx]X4aBxi5iFcp`MsF}4Q l;Mwp4 DLLVȩ}S፦;v@ KX6 CcM7va 8i񡧞i۷1k֬4g ML6=`"0zl6]L T驭vǦ6<9>o-jl0 LI9a Lb#F&L&ȤQ" &$ lbh[ڌѣU^/?f &{eEhe]'>qW?݆Mm&ysBY5l1\ /q>!uVbr߾}>ͽi,8_-粋duu4w?xYaMZT{'cǎ8w}5G}Tv{99Ӽ7n\p2|x1zw|4~zk3s„ ѣeڴi2c ={92G=aǎc:4t4wer\'Ψ!<94Qhz D5;wvܼyUy_0 qA 1(-/~ILCذSL=>~K^Ν+cǎ;.%\z 6 \LVFVy#8 0 Y`PӨ%&1x QuI'6l1"-)RL~cKs"7pC+3P1u'Nt$Ȼկ~uzO?->qq^]tEg:u}GNS;wj yG&S`m `m6CQ,~_ɳ>G˾~0G&!&!" DLb?!b#{k_{^1IcbO>s9SqBg? ,H{: &Όe'|~ `~saayP~dSyƚJC`o۶͋_q"VWn[,W4 04*F̙G0D3OvLs7??Js;f9SOu0~®h`Γ׽/=@Aja ΃` C{w^I¨$I5v@Pbz~ƈ$$p[ꫯnxۄ J=͍uo}[/X{mעH!Q硇* Ir)䷹ 0 榛>-}xo>9>l\w=Ą.H,0WAigI+b2ϫJ7{ibӚe7-e-~Y[ޕ:MkJZ>v9ek?5))tߵP?2B@nf،d"c # t&,Z)G^% g86SV-Q?46Y$]ưTD7s0[fϼ+u嵀ʶUKd^xZaVӨXɩlLw1&2cdLvdɺղ'-f65_ 6&V,f=Ìoqzm~yUfN.qß(>HQnU*<匑J I{11ņV22{&-;rK"wsOk.G:E¦5OgjRZ(-]"ۿOzOQTlT2΃3ʪudՋɭ{ex&V-bm+WϺկ 硻B;C8;Au\^FtPx*SRN;4l_`ٲu{򛖛6n;haP(s@QxM_ 3dD8Kr˯~׻>Qm=Sz'aurd&ҳXV{<%_gл^gjq9:M{T== vwյPx8]x-Q{Ϥaa04aa1 LLaa cb0 0 haaF sGbOZ>ɟN=aQ }}7ʊяa"sLaQ10*I0 'sLIދ'Mzڗ~rWcٵkWMKLfa$6 33! XZVL_> 0 Ąc èLacdN3:L w C},&& 0 4wq4 0 GL80JLLa#&cft6]&& 0 [3`oil8LLa#6 3`o12&& 0 13:.aMi l8LLa#6 30*11iap4wq4 0 GlJ;fFg`ab0 0QȘuH$# a ǘuH5H\bѲb5da &133ihY1!0 h13 6 0 Gl2fFg`ab0 0133i01iaؔv̀72&& 0 5MsI0 pĄčĤaa8bS13 aልB l8LLa#&cfi MsI0 pĄc èĤaa8b#cft6]&& 0 4wq4 0 GL80JLLac|ft6]&& 0 1bD>3:.wOO 0f1v22-+&oafy 5ia܆ay l8kaaؔv èĤaa8b1f݄^iCm8LLac#nB 6] }}}&& 0 ÃQ.zfhF_maTb1+4w($dc:u̶lel8oFMh3 01kLlZٺu,]H EK|AzyKLKΖtZvi(^Lf 0ap5_&_a胭CdIɷĕ uׂd 0aFF!cft6]u0}p|;a]JL8Ȥm8ax7 0Nc20*aa(ďĤaapQvi01ia &cfF&& 0 njþab1st/XaۦĤaap[~Mg8&& 0 pMsZLaF!cfէm8Xab1faT`b0 0kVihٯEOaFCF!cft6] }}}+& 20 cP ǘQ a ǘuѪS6]&& 0 njþab13~h{I0 ĄčWĤaax8]iI.kaa]Nl2f{HctwgĤaaDčF& 0 pUF'm8kaa 6 30J5Ĥaaxb1fƀiI.a8]ˌþab13 LLa ǘMsI0 1.B/hI.; 0 X_ެtwӲ_ 0 Dl2fFG`e2 0 b1fF MssaQƮe[eeүaat9QȘ9lV MsI0 13i i01iaصh*twa_ n~OfF(ďĤQQx3AiA|c1fFI.FnxC,'z3A;S^3]̌AF. Ew3twޱC#&YGG#r=m9S(O_ߍ"}_&KnY,W-ηi"8,os,P{Ν;S\>ϧbpN},vJs뮻lny&)/XLH˘l 2btn;FNX!Y_Z 3uKOZ d~g\tl{\z3K3F'm8LL$FwH!HswCЂ$_jпZ̘)n'b,aݭKˊ¾FPPv zit{h5wQ_Fv#1;fF(RPak&XWߜzڒڙNQii:Piiiq3'OIs_39L>ؚIOzYvu~$(-?])E:ˡ^3Ҍ5F[3i4ri?!:@Dڊ~+P.эp<`lL}^:{Y8JOey|Q v0"0GWjgyg{Pv$SPOe/ZVn]+K[%EV&"oٲ<}b;cݺuVbY+AnM^gW1ELw4wq kat+=JKNޯ@5!Wȅz%*OQ_O܉KRYK,чdIɗNk{Y̐{dt'Z&=8_ 6nڝ J{8^ZnGgLsC,LY⍂-n:^ 5j ڄ:O!ĄcZrK"Ol*gVN|11#X'G2OAG,0| kb낋i !N#&@V=M,&j=9Ni{uޜ|{4L$ɪi,8_VϺ^<4@SN},t{H!CM,b`!a\vbyk1'g̜-['oܴq,?/vl8Zka:uOs/Cٱfo,N}CB=& 5M,j@.[vL~_]Wܿ"k*E句Q)혵|,[+2*Ym/ܶXn:{bw,~iN_j"°8 pل _̟6yAWʔ)7>J:<#]4wL8Ƭil! W҈eY+(FcQ7Msϓ3DĒ˯s!+F+]oF4ѯ|b%#l%8_]td;%Xj77ܹotEn_r~'x_WW3˵WWZկ-Nq~aR(|ogI>|˻1yI/ } G*ise真ѱ42eGP4wq¨z箸‹-w.);MWn\F+^ [l8\}l2eʵ2es|b 9Mq>.7;:&Չ؉;>(K-N}n;\wy5|_ }O.12/vrKWjo]מw[9׾ۋ׹+ov{2e!Lc~LvupnrKp0˻~X~Ir8)_ρw]%lε=X;|uцF!cf46=4 \^ ל+.LFnN͜\?57k4JEsy<-kx[' nHbw\"N\֗S+O̵Kb;2ᄤ5?~Y]>f/*ֳ۷tS0+~__1͕_4J,r1X{~sQtl5?L{\wV [}tg|[/vMiix>) J1{xQJ7DC0@cCtM,qE`rineFG`abҨmjp TV8|0?L+_[9Nsx28;)M'yr\Lr?ʔ/ȵա  Aݘ$4pfbʌҦĤQ7y/ҬY^:Ib~uK"OcK;I,g&rEN,+>wq˵푹h#wW?,[~߂D2grwM}kHk?y]>G.]b|ˣZqN8%TDAyt ӻؖ}|?$|ۥ~n<iZ80XK{Γ/J`8俻W!Kn\9^9s+q]2y lʻ&&&Jiy/!`rj;r)l'Ϲ=/\^wȖ-we3tq|8W~Λ\{<6E7tSd^Q.;KzhM1UqlrpװaS0La oqxvnw!e iz7Wmo{GS>$koGF?,84 zlj s#e#/Ȝs0;Q)2˚ f n掍B 44v~[vvsO9msNP8Q2w/wӑɻOO۵Wg)kcBT AlMwՉD+.H/׾oZYirM.s.z0=#V<,[p8!lV.۳1sᮎsb߷=+oZ˕/s;Ov҉9g]38~N̙lW ,SXÇ2wӌ.I{h;rMso~ʉWȕL:ȵSTNd˷\tdҿChOCE0'v!v+zdY[Sng$k#s_u+u%ԇ<}(~16fhㅥr/.q9/>:qZgXKeVr'@q .;El!ɀ3c6lQ3Qi9>bx.MwF$Yڻ⁛ŷW9rK%D7;&k*K SW.gvJH~#-^zTb~yd˟#B <;'_*xt6r+]LdC ̉ť-cn;s6|wTVϑ䭯vBɤ1~p\?ϺB^Ł3`'dȖG1dJPjT ihzicGnBv(nwAiFۑw{n>=ᜑr<):GFߛLum]|O\=^6k__tv_pbMPQb y_矻b,3kǕrW`\yIeԦ}څbAI (&*OsG"C&lb[΂r]pʾ{-Z$[|ղj $k ޻@["B<֧ӧcζCp,?:">g(ɻLYWr@p!$+!eH ȑGdc2bQtG\1`k?nsG9rl;oѷUyxL8>F7ʎՓlNKv,btʐG)RfcFg`OsGbrIihqAI6nX S.mKohwZ緹~PP=xe5U IVCa?TId‰{K"0&,/xC'_WsOwITmrieA$xӲ#0dʔKJ"T|.RXXnj &8ݾOs> %rf53f剴X"˟hc31!}Өў>'\OV\WC!#xy~p rҴ2e̳2u.)gOfOɩf;U==cXF[s>O;Ifqsk3V"qPPRHyJp:J#Tw}4$k:)yB dpqoJ#( Sa]*$!ҬGSGq~K,E 4HbM.NN/Sızb'.6RK[[ZSoDŽEEJ?ʰ~0DR`7PQY& llFg5ͭiA9}}}+d 1}{e2#o;񓉯;.Kɿ([qMoq ,n78<絲bn"f='(KIy._\eR$BB aH猗-[\>,[t:azQ<`HB1y=K^X.NAhB4rW Vo)pdnxg\&}^P[rySw\^{y֧}=F)pp$ eL}%sG(>i)@4*,l+ N'&cfF%u+]H-Jl^dʤtlY>7ܛkܿ,J#3+ZnK+F3oH_6ۜ#-k"׬3y] ƯR'vN }YӉ(t䚟 'GzELoC¦N.L;49}9҅)_9Uvȁֹ~mꠜ$]'ˬdmg_*/JLrqH'˿l_p2f>sҘtNq}9d($DT0v2&V ze;EMs >C9}СdZ%'KJ>.,$;QxK/NG-$Mnf.kN^?Չӏ9}?A4QΝ8qr+\ZB(j=+;"clk7=(z^"W9#lkY/9(a l?}}Ꮈs$F&ț.}@=g8a-TCoL9>iW˫.oL 8btԈݖk}`ԂR1c9Ƚ~2W3Q9X4wـ= &.(r{ܸq0 kIEsƘHS|S6=MH*@aw]!sJ?r?WZ<)xOi<-Wuۆ'ɵgGqUlߦwi=9^(>aFYDȥ7Ek$%'?POdݳ+pe;y{.Ko JKDbv}yjݿ-smfrE^٘B8.?LӥOHK>-( Qieb1haOxgcbh>k։/ʝϭnT箐-K?V[829.c1Γ@)j8l6'L)S]Ul'# NHⷰInaqɚHw h^HcR Ex'&[QG;?=}2jaGߜ")>/M(_&Gq#n߽}SI>G'ER1*@A0)Hb/WT@eNv4wl2fFg`/-/Vuk#z$[LD[k|QZls|+,L%ŃD\F"_$oy!eŧ{D~V6c_*1jWd*$ 5'Mt6"yd)qk幞rxOi~蠌8~X&?K&=_ i[RN"uy;W^?azzzt,&y^g_# z$?_^5~-yο$/d~E8||o&)y0B[U'MqɡOZ‘bE޸Z g5ƦftLsVlߗ]Ki?;IjNYBTvZ4\vYg֚Ѳk/wȍ~>mn˜9];[;d7şs ڈzM}Tյqs29D9dFΖ.}x ~ _}x~tDr`2Q2nyky!/=mQruvgv;[?p?K2t;kMzԁcϧ->7規#Ώ'1B:JbJ~`g.Jy.dJX2b$$ڨ$%<Q {F);p:;ˌƦ3 >w=H 9cmɶع>5WrЖ4WP*Sֱ)l\:*d4tԇ81(Wm02igSԉxK=aq#syH&Y y81zrpd"k1$$7|g݁c;;vQ3ؾ.cE}h' A1c^T2Lj}Ԫ'ᶳ_ |9Ա}}715ڵܙ{`I\>ϧENڅ?;mdҨmn(Q!e8R䘫hFҬaM=NHbq33=EXC 8=ļ;xe2BZ'q\8n3yN9~OwDj3grz=1c3-EwP^j5gHj}T6ڎĦcf˘4: `5((6}~a:JJb2cc\:y+"b_;-Ï O.p۫nan3.%e קE* k2!\OHqLxuA,N#4Һ?+ Y~P?M>ѦtȫRu^u>+$r*@i,u^PXH6_'KAo.%Ph4wn{;\ڌ֡EPHTjN4'.G9"GrU7H!$Oɯ^`AXAKQADr::qH ,:C<@E_ðh'bFd4g}V( 12y4`/ŋD){? ~_}Fq2 eS1$sAnb0> - J H9wBrDNW~\#]'N8c']yGOT7Ncz99qr8WU8zTP '(5c'ҦV?dŲmZ3z%ERҵey =4c{inh4Tyd X&Q`T@ I F A=|)OWv N!Z e+TG:ؐB/,pZ ,/7硑!(ml 1cZ5A'4KD`C3{tҦiFG$cdSP ZdZ* dto;߿eB(z<\FJ|LUeS1B '+hc'Y~yXAC>BV}F(;ؔv èĤ14֍y$|N`"OhjxJ1~NulTkADi'*u`(Pkt],VLJeAO-b} )6]63h4`N4v osZ7*7P٥1;Y]XEntbf=czz-$Aiwy*(@w1՝LM䘒oK뜐}S1T6 +ЍIWaYǂX9}j_m ܱQȘ=]&&)n?ʵnAP(`E/RDzo>T%@Hr00"HP^ԠmI``J@auHxgz$SߜGGwrp10OtYǁ r/XvY;abeB0-Ov۷"IHP4@ӄ#h*ev ]nOlM'!|,)}lAy"O ŠPg~]ezAi=]0fE ɜ`E G=4X'C-CTi76dO舻 t6-9&A0$w;뉎%;hqtCcq@HXۃTۏft5=C919FY7i vϺ@qZM4wLe9JTvUnzi ܓ h-EXDԯJQMFA{I2}AJ?`=)MyV!g^/fiQȘQ}+Ak(O}ΠS;1JXbE!F)) ˏc1 '_DUCbqǡo>t;& 裫!<d/0|᷑Ď#PFC~qhgaY|aېXj:`6]6OdF{2i վEynڍ9.rX#Rp3t̑3 ZɤEQ'PћE UH|XA -a#(6 OxgU)}L_0&MA"Ci'Ef,@[tڛq#>:.3kyi}C%3{vݺbRQZ46]!k*,JmE1值wKDN!!Pͦ iDJl.4Hen3٭rZdu;I0G_qlf?)m>Yzt^H }iou'Hlt>$'oHVy(QȘQOoъTC z-qcCx"ͽxLS材G@?!@i$v .L)G(!4"8md)F6K_8I(bGk)C8 yd:խۅ2?}QQbŎc!گَ听6C/(mlFg0Os7sۦiznnB2FpQ,D7%h];uQ&&Oq BDb$S\:F(9u8,gNSةizoDiR4W2 i:t:DHLssL2YON>st6uG b`!6l ñ0_UT|X=)aLV& ۅڴ.6]63i01i>ͭ{ÆO)C =)"K4(G&#+Y#x:B Z  )Hwe<ݍJB0"b zޒ}?n>m9J#u_nm3Ϗ>< 0x} eL.Q ؁u iv!y&bMl2f(sVM ozGҪ>bZ8B+Q/}2NINkCTb<#0 o hvc$e$#`NTIo$F#!6}wn`JDJ/(1ZXǙlD vI˜&~AQWPz9a`*:Y`'1輎U ݏZ?YmZ .[7oVi01iMizfuCͪ9A#.CPRsjYؤt}{˾iѲS&<-).$;'LL%D#N4EuNvqq.u>~aciF F%<^jyȏNā0F0㜢̏ :PڇT2abRJmSc@'a9.13F!cM؛UYE<8BOt{D~N4@8n )]B CE'"  q;,-$%Ҙ$GX9&'J`p?o@ ~a^tZ :u J;At}OZTkz4wٌĤQ74wZ놮 L IrD%>MQƵDK Kn8hBAFB4E'ckc= _)+À܂)4Ea &QȘQ}+)bTimS,2)CT-q7icdseZI 2Yv$ӝr_;'s˟΅^9=c $R^(2k)i1!~eKTxb{(O' 8}UNp|Qv`ñ>bX2=|1 < 5Q6 :@u[A؇&G;BfePJ7aOsInmnMf֍6$}unPD2(De NFR"FyAY+y [H"D!(~uh~P>Cc>GLf$&FźI0eHF?g}1<(%pr1tAV>F J.Rڟ.zݤMsmG4w73o b7l*5Rk*s2+n HB2K= ȩx͐GwB> |8 ɮ'q(aq{,<0FbCGȶ|x)(I',}|m4EaطÊal*~ .(`d0E= CIDqGXvFG%/L95}0a1 cІhz\ʵؗ/J $! rKAM/à`X000ڧ0}QA;ԅe]_ &}bpF'a;6 33i01iMinqm֨dxSv/zT, K@ǚJw)s;&MgeO>Q3 NTb$Q8h%HbM%Erm$!~NII# 7y ^q8w?sI/T kLy- c ~Fγn)ed#}]:ו.3N c$hi(ď.VͶ ^7h娠P3E8됲Nă8 ZNF"!h$’KgXLjQJ +TB2 ) uЄB4DHolGMC2Lj>:  _4~~Vn71G>f4+(:}}Աh`|##av1ML80JZ[7n*@w:CkQ$0ڗ(Lnx8#K')(''xu$Li? z'$ez{&C8]O)G(+%? ?0YOX1]mXD_TPcǚ/lj7.4wq81^Ll9hiFoTtwh%@_Ч:qbhܾ씞Ld˂Ɖc '*KiYX(,->]v"! nC( & 8LF+jaIAw94 ?bcbAX̳Kƀ;FjCt\& iȱiMs}+{˺ ؍V< q0 N-WԿ`܉BC_[>(=>hv@HrđBQ8 IA}G *7S(e7 e>z]by^IXAt7`px];&YmZv.4wq4<]Ĩd=@fp :6 pC143eӏP#Iy1ST7Wc{/LúGJD#G$)$oR:ƅTNeLwcPPx'JL{zRb-t-%G R|ZHcˌ /r4h}섄 llFg`a n :v&qs81 HhqRĜSʐV\HPLdH'($|L(>)6&Tb1^<:D\LH&>OĶ1$6}S/dJ~帽~s\^?#vFg `LX۲9B@IXaբ6!6r(130*o Eܰqx>!0 L5QT2k(ILuSPbU^jU3rK'5('8ҒwUӤ%b&~vIʉ`L^9d ʐDj&>!q Dba((*>JL{O>Mٙ>uΰ^kifF?R(Hc NHi,#.f%@Xfa 066 J.4wq4F 玴Tzobb ᐂfPHK]>|u'!08Υ$SweWD>e" )<%sDD(2#BRQtP5MyS<"eeҋt4Re:R =ӱhec v]TnvY}>6]6`Anl8LLuB^/5T$nY7gXW-)@#xQ?LcCA D_bɨ#H@!)-PH&ɑϽH~SF(k)>b4Ա1Xy^>ȳ"vCwl[Yۨ_@ ǘ{a11i4_qYگB5uB(*n|:0:8w R Ƨ!8:ԡ̸d'"bx D>4h4F"uS89cduHx FO!a $>4wٌĤQ77ʿ5/:>lC!SPI#QPH|!'IJ0r"#x''%u'PPAtKY0"uIY ǽ>D9ٛ2IvZğ?S"ERNL긖SXKioRQPcF)bk(Y/Xr"l'Ŋ.4wqoQ#0]uC $jQn0:ћݓe0JnȻ> D{>P%4A V`%=C!dy;I\Ypb\#('k$NH|!NN}pX4|ܺKFOV:]TkQ1nB FO,Ũvv>H F(PcYWqµ HrYȮ*'1mO_b,<;5H&‘岠LAPB/fy`,%hDxm2c5zZ|^쁑Ąc èe<ޞ )vCxs(ٕqJ0zus $@$|twlb hJ1hȃ}!k*QPuz=%esyr$%SQp`zz}V@TNkۆmb}ĶnllFg`a2&yv#ͺmUz`@=CYDeN$NC Z`kLIh%Ga:~zNqkQ]y=%D%qI*ey;SPPg<'Яsr6]ٴF-Zm^:eM[h+MsI#>ͭКZ7UNݰØB,z)ID8rN$2Ic 0P,"%A(&_& > $+~觡ryO%F)7"_'D{L}'9}}6Ni +i<@J+Ɛ&,Ot>BbFF!c+E['뜭Z8#u{^MV19-|i11i a7]wƃ7e#]"im9SQinl`-80$:( H%djb)`^ǣC c_I=j=ӟ˯vQʤ48gF}τyyV·GՇq yh ܱQȘ5¦d%2/-'l9Kg1K4wq4&{7D}۶V 7P{Gq?k: 8"ZeE`nE()FH|[ɤJH*`"D #I|"xϨO}3\NRF*&(φ~.3_R$ln MY$&+Dd%)Dx8I$O VA>@u( Dbb,b0sI;aLd2Z, DPV]CY ~~> :);hg4ؔvaޒrɽK5KK҇q-Y.2YGtlYhLLPM0 W#+ h6ѻaYeh/<6Xgs06&=P&Xz?2YGJLDc2X^GY~dyDroE{)|6MOt$>>~V3JMYuHןyډ Nc|H}h|ݤMs rwL4o<7X| HA7zz~3JDayt-h Ko2HQC? CWCL(8a~O)2o%G+}g]&b,ck(A ?+$QT!uڏj;dMlJ;faTR,쓳ҋ~~&ʨ}Aku T%5BI" R(SԂp<~mZh>QKQ Au(by$MO Ȱ\ڠdGOb&a~f^?kU}M@}ߋiMsGߊg֭[-*x8-g:ƟwF>P@$jݦ©!eC }ȚJRYx%#i}pq$R/!as:ƌ}PxR2R&ǘJq?J6ZP㒶$0/ڴ`_8[10^m]c#k6]63oEA'dAAD77iX;nͺ1@b 80)!C)dT IX+H>:Cw |8yDcaGc⑱z\gu7dM%/ǃݔɻ&9}k(u'q.흰 ͹~+??ygV^u}g@mֹĦcZol̜#2nor?+fDY>!oңa\{V`$2y*ԾUf^%3o[$){/%\aӚpcrdn>oӧEIy˼!2e(FҬf@Ѡw>Գy28Sv&"ƉU8M^~SL&'N2~7'}9m;mDGG g] ߿'2vG]1#ȨD.&geۥDr$eNӧY1s6@@2 pʯbND$~d`2"G b@4e)k R Id 02>" 95R6rD\M "6Bꢎkك]m'^1! &MiǬB eU:ō77mJIMsG aADu"Ž^HzOچB & ‘޿!ҟP~T%b'I|Ф6}~F7;hJ!zƾSڰP<0X]Z)(HAIQYI (xAybg\ ^ueAqE@/>Z-l/O?Ak ؔvZ !d|rٲ5]iYWF?$vnzu `""ă7P8* (|(TFZH5o,X_jYc#&'ֳmLcYP|$»R|r|"B}ޯaM|1?CcenQSvh4Gi BƬغu,3ɓXV .u~ *YmewiɊ@;InVN>3ii"yS{;E>ʡ`{2R LrMCLF"ZI%JV];6~HNBmˈG=Lex_d{%GA,t ǔR'Gq^UROAI-908 v?Cmgc%ׯn, 369M,jmX<ZXjk.QȘzOnX+XM,4wq4[rq7wzm(s( z\w(zӪ78@ @ yQ7ϑMc($YFeaA>02R=jJ.t7Ǯb+=:'3k'.aa{T/H-8c?kB([߀26 3hf<| ط n"LM6=EFJ W_$u ;* JhEJFe]zjY^Qc=z %H~(!(k)؍՗ѦM< ]iq]=jQEە#ke.0ai<)X_̀N Dqpz=dY:s˜T~3ExMhb ^iw?j4yD!(IqX߈\ft6]&&\-$xDNq7S|$(?i.ߖ/+=_Ns!!inc&n{{>\~oT'.ͻ&ߣzC*I快G}BeOx1+֧6X}kX>;+;"ONp_z! +I~p1{k ovyh#/{C}0Oۨww\u`w$c?3Geyyъ<,Xt^[>m+cpnY|,bh_|&٥R"3ϝON4qOu;ckAELy{&!y| \e}t474brv[~Wޱ;~+wwod7Zcsaط¨07sQ9zx9.'lsا~o{qoI<9s)ꎦyqi9/v'])?.}]މ]ywcv] .x w?pBɾ3N<̡Cé;쒝NGvrJ/1yJ&>zXnw#tu@8;vK8;;];wԏPvg]=.'] .!HE.K>ƥH\FK;>=!ݱ:݉dx.w6vro'v~^sϝM||hw6A9nw֟u`a1ynpגOr{щ[w>N t\ZpkG{ۻgD\5<ҙF|ߍa.k>. }w#~=5v^+{v|;f} -Ε /*c1fFg`Q/  8I?zlI~tt[Ζ/R iJ.362:Naɨ7\)w1ə C1:vʣ2za=L'Mt"cHi!e֟1NZ|Ҟ2X#~NJuc`yr2`İ6HẠr;0Y>kܮ:a7Fyw rR):r3'cw+ R< ?U(#yǯ+@<`9@ybu=gjCNC= ~ jǟl I38MӉKfwo" EgЂHC1CT OSe ,D$~: pqO!2A9lcY <~:X5؞qlssSIgI5RZ{ /z.wbqjTF!cfF%0rec7 DBuér# oyA*QIqEG l!CB~- u{ʺ}GG[؏Pf3"mٯÕG`] tlG!9x9𚠏+k8KQ`0|/hmZP6.$cBk6c#rhO{4wj_!ggP1>p{o2ڕFR(^%R!*-&0OO>he:m7^ IJ=бiOvst0uK)lWn,QK46;V d5pښIB `f'4wq_T4R' =f}Ai+-Cb"ItM!Om`gGaۥ ?/z . 6ЈƲՖ0t{Z_ЁP ǘQ}+!&ECˊs":CEӂ1i1WfIJ/t=Y^DɘX$<_̇{d5(" " ?L䬿pDײf}n)=]NLV07H\ Y1k%K(nh8*AS\k(3O1ڄ~gUK su>/N)yci?z۟W 0<@AX#˥ϞA>˜\Fn(b+kY~ 8e _ l8[a- B1-)*a^!G"$i!Q@/ sAIJf;H Q}5QAY󤨌i :(OEB "6@0 èFR・ HJk=|S%ʕ&ty7sZHjxC#:Я P Hha-μ&~>%_K`%pOl()ZXLa1#i01i4"n!~WѣChe!ȣb 0Q~NaP8jtTN똴RuD8#v^A5 i)LJӐ`".o0Qxe4wqط0j$w-S*6zƫXA=ȃV pmXL|AFh.A#ڱ@+P z\ul`3  7P q)L؄m\@( u9kƶS프w@ 3P(bzjc5":6]&&ћMkC)q=^ŕY9a*L Ĭ,=x}/XHb@/QFS|6㻁>kY47^jlK jEt;sٿm܆AGj\SڎIR^L\?8 DiѢ)iEW5ClZmKl'YfF&& c9RH@^\NU;ET=-zA^AQۈ ǘ9:u귛i01ir(x$oU| Pi:d(/8z5M]"& zl mF11GNv4wq4Zz 6yLIVK5,9b0־@^VWTO,a -,czza4iBk8|MTCZ,po\?t<  acX,hzjYH}HL8l8LLI0h?+FԈf%,!@P -؏;8J x% S}Tx g ϟ>Clj&I~<ϟ[OHT7X&j1kQ_K -RkkQ˱o13#i01itc{&E{jJBȰ.e=aܺ5mt[ K}߅ɾtڇ2ptViJQ$v&8}T'8 -gMa{Oc_m_mR1 ,EKoR5\W2 .Fzd*q}i4\k􉄱mN(xXӶaS64y0t::퇡 !.4k[b)ҧr)Feq@u!鴔h2KbLq9E> b8~,y!ʰ )`6:63M>Hjb~g[6 O2 ǘ [e+EudFabh!B1% k tszTpıBi[z=y}C>)h?` PY:zu[gzTB'}seғƦbQk eNu`d%_V;ޗв7+lb5HerղYglܰ@KJ3.Dz=XƦĤ0v( PMu[ E²NKB2`xoD^ ۄc۠)܎}4C8s@j&X16݋VXGY~pj¸ZV _Ye#+^,sBB&NV-z"̘)n'Ң\sOOZ*6ڐzF뉭}DϺ#Z z rORgh0X@a=II,eօY~] URF:ݎT6wj\ni#:Ba'˱]%,r]#a"`^y u:6ᣟZIyg/_/mẽҺVXI~IX)Bp|:;W}9711?$ 1EX@łV{Mb1! W%"^,==e2.>.zfh4.F1=9@FF'6Z)Dh 6c>a)}0jąbm1gh$x~sAXf32aa(>VHvIM!67BjASeśp },>+6,턄q ǘ<`lL}^:{``OsI`jkD @%)]V*"5Z-;,3e$*i 4އ4,kIu?4&4fhe@_ZHy !˺1fGY-Vt01#ۏ0Hopگ}s':ibBԊׄ1ŅpY[\dejkg%8F4&< <4*ShS櫉 muptb$g"Oc9}嵰}j?R݆ep)G%4,vN<u;y"n&IX: P7>~u:fUOWXYjI ǘ  eժ@u('3|tAG5teu99bYv (ɠwV}@Ąc̺Oyi끆ݻw 1xûH Vwݟ%_>5 (l(r(EEbHQ]hq_~B u[}>'6/v.}gS۔F%?:q  byYutPTSG Ĭnp`/2}yaa zĄčOl]1i2B($ju #j ?%ptPN3FG`fa7~t=1 Մm3RHB Si#a3RE>g ǰha kǩ Aۉ2^Z".}OEaZ0>f89 DcLT<>%&cft6]6m Pae7.$lQK@ Hoyt+ &F'Cau}X痵6ihlX[8\ȵneC?i?:I>~B?aK/8 V9)0 :qߤ82>'Pd2&k$ǎ3ˀ>gƕ>%]KP{d6Y}#_]f_ ЧljH STa:1XUPjA1sQĤA&+"oT7G')F?cu94]}}px{4YHC!!.2\3>'NT=G.2\H1>b}c}<)'DH굠4}^*֊f<{aR! %aeI²eh"XN57:eHY}0|X<`~} x\Y0n`gX2Hw B?ڀ Ec9ǦĤ$qϊQP04'^$P2GB.6KG)ZJޘTa(G]`mCS1^غ|:6XT)_{tL2 4$zYfA1:h<`i GYyM2} VW@pcL־|K;a (ZT趎pabh#pWCxI:tLt;~\ P(1F!U(R鵔>KMiڧˡz晢o%4)" b1e>԰^q$GKaOt^&M`>liV=@?#Oaih}}.ˈ}hg JYLPu,Ppa%vabLx7'LX?w.2)CJ_VJ˪5ֿ*FA9p7kJ7dyAN)}<'觗1o44CN]LDz}oDb;&}`qc"R I?:;ANy`=L.SS`^OY29 CXZ4^=R9RY!.8 ?Mc1fFG0Txg(MfbҨ@jVEl&E%(2J,#xFj1X} :EVu^[z) =}ST6G!?ۆeбڀ9B4/D3d9:>uBө6lK`},? 4U>ԕl;GBјeFG`abdB#OhUBG>+d7+})RE'Fa]j'5c1P3Pmۀ~}:iQJc1"2c1faT`b(M( EL9tCBtw_'%(,KDѧciZ1E+(,9jY u($E$jb>C?˼6}~+џ &z)bR^ѩnKck)y]cFbu4N7b1y,@Xb$$Z<@dƄč`(.z۞6Zltwm>}7G]VR@9̳y4tQ,gk Qy\O C+ki~e`:uԗFR!u!"* s'=(}y YE#f XGqżȳ>fF|4LާqtxaE 7J 6h2#i01i 1C6R`Q7!ȇ]ӧS".,FZbs01:/}"GzvqG󺌘~$9" bSC#LþAtl)Qznb tЪł<ڇ2 UE%a>$᎙a4 "v(覎c>؟khrEɇc+Nj %bŒ!Q:c#w4]c(,a(bzt쓩 h>CR`d?(&4!MROkb=S>>ceNQb8˪˲j1zD6a= ,86 Kˋi OUUu1?yb WvBH ˏ>x,1c1N{QQI真"~8 1)r[p[,t˺guiٶ!6tЧ`@ׁXc@$2&cft6].}غ@Pg&O6a9HmXw(̱N7ς[~'%Z$Xϔ`>S `]3n;LYUtL,^!<*tS"%tO*^sc >-v?չ;m`S\q5Mt¶:Ex ~{. 1HABȥyP"B M>BA x~]1Ͳp;,sb1OL@p2]nF+6wQSC9 f(Pq _P% UNTꦬCJ?N端((Ƽ b(*Qciϲ0yV̼w ̳ΓS<7ɖ= <@wvCch$,1łO(~EPX.gk%hIY,Ohzuh,}y|ۧwD^Ѱl~ʇnH7z_w$];߻(Fw>~#>fY,)y! Yq༔# !wI]~<?h_-H(HTi( Rq׆>tT#2|_$b_Ͳ~}7~Xia=>/֣L'(aL EcA+Ls"rMLL(AGY#HCZ Ok?z e:io*U˗FezuaQŘ>l}c(sQ ˺ 0˾?"5 :PF<ۂG?Ob1ڇ xA, AIF13#ibs\F=_Q̇1 -G3]cbu:Luk()*]EXN 91a`^p;²yP*Hs :v.> -J~a }Hu?=_a^Xiz-؆UkvrK HVց蔷#YfS+*s~Ĥ ?$= ce]#CF'Y)͐2FymaLڅ Pih!HiCc}LڿЧ njcy I;}&y8UgcrV@:ց ǘALsP3i4@NI겎0^1wn*&]ff  `,A=ncMR d(˰ S ( Bhy]Fį ;Gr=}lwrUyߺWae#F+ŖI ڄB(ȱ"]qBLZ4v#G U,ԉDMQA(ɊW0Բ@,c, B|9sϼwsΜ;3i{9 `ևsضlCf~֯mllgcP[#_ז*@i7y.M sTϏ2522=@Z,y9~ɛQx-L n3}g&aۙT<"jRbi7]Q\L2Y@|jcb}Ķ+[6q\@5"0y|㖠E%Q²<%]Jѯi,O/f6c1qx\L"ֶqSZBԅ@_S/30kH*?}̷ًgql ƶ[kـo- z8^)MկmH2&c~tIl+BOlCj|*fc 2aPpaB3eCb~mb8ڼBHEdv<80KHr<|"k{֩)S>cU0ٞ>h_1> \&"UYbQg檏gӴmvL%E%?vlyT_ FS!13g$os7"6Wmʰ7l߸5ܟ׬7{|q"~rldg봬}"_\M8; RnYƌ P?f3ON(gpBpk 4Ob> em #"R G`!T7cSfJ֧9%4!6u!g (,"h[ju|\- 0H I4|L<٘T&//2?NN@C@?c^ ǘ93l1zƍ\pi:0k2L7[7 AOfr,+Y? J.YeD|j[@}].\\ahɅ"[s t&B Pl)@".PA+a^Ӳ<P%->HS-b틘߅jnpӂxL6 Nvv9;͚={t?3M]֬p&éE]΁5EM 9m;b˩Jxmg۠lU'îdy@82Rmc:9;/h ,f.i3a֞MkIptc{~}ǸTO P?E)m4("03Z>!-)2s0%`'gHO-V0>kxXqhֱ"vv2eH0跹܋-ǣօ5y(XV&¥zT{`߶* v %Cm22l?0(!Ncc0BX,CnZJ, yp5 O_?"=h'VTTs/k&9'xd7k&>L~(: w2b3Dg-Ζ+bPX2a=,wS78GӺn-ˌek0THi`cx={Lc>4yUH"Bݣ!") ?۟^c`øjc< ٧dlu[fy\KYXmYc*>:B<Ҏ@<sK@lY#k}Jlj(h8XCdX0v쓱6ΊGSK4`)(ط(Dc(я81 2vLTb)D 871xڷ51ی K6M/n{sڷul>uV4 v-[˾`[vx ۳s.&yW* (#UG>+Je@aP2MYn}L_̯f\L<5Ĕe)f:>\Y OGj0Cr !}Ram2#$6YSJ0 9@RDB OO.%,m=qay|9:>;OĄc̚SaE]n;o ГKq0=jvrZ8iyA J6ZF+2 @=@PRPH1~)Cq y5b`)L\Eefk}cd=?Vf;1y`x@cl(Rb^G&ȄY+6X#gGBpAH7u!GzVn.萧ul3 }𡌼ƣlec?|y&*18o=0ֱq:8~RRq:esqO *1 +oΤu6wp1 3oajT*nצ4q@ۨ1Nc>Xj& *k"@mh.eg~6eEcL!,u1PO8UK!$ FR h1Z]]IX^Skxmkx<>/fxRPPjJcYX1k ls[X=-l)I8AfIgWp{Wb36l gIճ c?4 QM7MU̡kC}6uc5ָv2־>qg,Sv4r QT0((T\ yc`,}"$"(FҚAB|[y528hߚ)2g)Y?U5>AپͱT0Yos[!7Ig@uꫪ'15EE%@ C8̖}ΖgMc`6ZMbmK1L B28H:ڗC(>l~ֳ-OLL8Su00,gJqcH食ubӇ2vW-TAI9IY<DŽc ͝_?6wlvos;#L7ﺼwC6J$8iLedm bX}@3;g-/ccq e1?6e`ʾA Ŋ w~@FZBj-8eOlٱ#-9_0aվS:!^(?[5V~ i|ּ5`mcfl[>E.lj6e%>~/첢88ľsH~j؟O6Wgc1e>\b?HؔTW6@Dc+:*Ol2yģ)a¯1:ڦi62a[V\.`YƧUL=@=fb,y$'Ӻjc'cKf~Nr)}KuQf-#cG2~rpv"p\x 'O q9Q9E/,6w?g'9={ $Gs4T#չ b}nn{\ Pؔ>h10Sրmkm 8-yMS:qEy E")R/O[B_`FgB‘ ckNM#i{1^x='ٵ0h2cd>2Cm#8eA-#i51 zꢷ os;%HE+2  Jj04h5o 62,XyaS۷@h_=BF!YmX!B0 ''kę 4GEEŔQT |+3JlRc!ml48B-f띫qAfIGy^cXAVP拫$f9}4F0l|̀+z2byؗ:`P <rl{@L 1BR !(45쇳̏`, ,cSXl%DRaLS? 0zwNlvq6wp1 ?v(϶:c=,S+LC%+l<~괞BF?5NaˈsG#`S1e U i@ʼnɬ$R@*R Aı́iD$f!"=<RSu}z.>KOo}U?!Qc2Ƒ?!(i\,8F67g'6$Q./V) 8BxmB%#f+5Tdư^ n ܘfekmhm2efȁ)g2Ng4b6D9R>:S1hhfTb1ƌW_p.ڂ҂3RvIs"VU Vm5 G18S rؕvicmbene`#VhSGy<~fl₳U=k>BB\Uز$PGdخ 5|?UЩЃAҏ1@20el_q[%Xy*>ȞSIgaUhlZg}%^} J2}2u?ob}lc W#<@~ ] >N=?&wZI!t|LU % !ٞD3wca*8AQ Km %?&i=>:|{$q1YZȡ9(}{g']L:@bP1YZ[uX@xkQ.@%5o+Нn}1Whǔyz2CXGAXQ)$l>Q2!1efilwQ|='vP0\?c1~QО9Ju::Y踘trwTB!g ^~֩h<ԍ*" L&j$V׍)uꈍKՓT+*G,`ۤ xPvFjD 9:1m;nkʼZQ2h(f(yxm( -z.gƔ9(Ʊ줋Ig9oʸYϊQkL7bXR֏%#0{5RlzBDݖhLBtSD6Oc|[t̫uOA2ū>Yja@Nj4yXާ}T9D:j3 m>Έ"͂+EײWVyqaT &0avv 6O4h̡nD&@<1"RA@PMCV1vAdcE g}6ï.j9e>t;>42?, 6;mGt8k0[@ϥL &5;bҙg}cU +ҔXXI A2aZӺX=~xuNY Fbu4R'6F!Cp -3NlG~T\D liK@`QpmLSجPϐ5n1scF1i=u=$;z~4OGJƎ"Nז13 JN|Zq9K4lظqc˶rρ{Kfns'.&ɛǀ0Q-SVۧb6u@mĬ[# ۦD2 UT4h^ SHH晶MS,30F6[06cǡ411ei_-ò y]?1x♶r~ryE1eŮ]rabgso{g9qCo3cvŤ3 4yU)*1ظi1ۗcDu ثo*e $9IPI0NEhH 4=LjWꛘ*(SbqV:ЧX >p($#-aA۩01 }aGPЂʛ2~-OW]c`~چeZOQl8.vPcƁaaÆ!<Ծ0*1_ }~f̈VsLϖ_>)Ӳ][ʊ_-p]<ew{8=V6˷kӺe}pmƱ:ΠO~2|ӟ.J9|Ǟ={wf9 &qu] jWgI*6>h;YYWyAg&!Dl}|>G 6cD5SBZRe a,)3 4P[]j{Ƴh=жKalcjc(k&;Ҏ`GrD3y~a亨qvT&xE^b,ljKn,Ƥگ2PJ 9@}8+0cT|"_*Ff 8"(c Xa|$@]0߹Cz}ڞh~mXXc=`]ow8;N1U9`N:)ocW`osou3 W]-pV:eMW2ڧ),xnAݞZ~eIЩ%fH Kh.Ӕ@% TǬ$4ϡ@Ne,mMGedy/ 8'[_ ),m]6֪ȕaö:?t&oܼz;Jm>5V5NӀbV̯?:6QǶC:Z+~`k;)C^P記Q1rE&ְnf(#E%GGYԮ1qik{23Ìls$زƂ&.Q98[1 2'bvŤ34 ի 91HQ(YkSڎ֗)V]g>hCIPn L@X 5h!(C~mm]OԹs\4Cm>@_,%eƗij۷}u:;B}p1 7ѫW #OY]TGۤG7k1X6ePRUZRYg(fT(E\#Idc.DX/c^}>)3X}0վS}UqhS*뙟1T`RB`?YlH`tݤ)sGq1 Mq+C1O/ڷ߶jKSb}(K_C[ v@7PBK۔`V$ Dc`FRg#!xbqų%`_N?4eMxbhycRYEkEn]{\Jk: Ph옡3 ,s9;bBzլVĨꫬmmi)؇|Z~VշDTv nж;+S0Ngͮ> =v 1>rMŘmQwLIszoc(.&!7jUtۮ!G&$kTXј2mQ?9Έz%l-}x )k 6ݟ.&pV2gBgo//2ۇy7Z@[3gt1,:gCDAeWb}l_ݎ@$T"hTDj;fEdx9~ 7[ZTBPZQ3 /l_W1*9y嵪 {E9uYEq@]4[AeRx\:}@5ȱ%(叡u%qvҊd l0f3N 1 ~E?f'YYbЫ"ksFc7 XQZ"RcB6-`R' +ng@KqC foJ.J3jVouƍyfnilkCGm}c]tQuD?g!%*-ܷ~Z?qүouםĮTkmӘЙb3{$v mBrPˏ?c\$PǍyжmܶPf(෹qrb(k*N<φYpa)mX<ۤQll cG*(լI11mh,)hбJzni6wp18mj *E\: m~HfR3YhA°lƌh/0B yf}C P@>tuL?\/Ywl5=xYc9˭n\^,RpeVtc6i1_j62%(k`E%a]1[ U#!e(޴>취cr §5ˎ!˳Ɩ[K'`,3gc~.+ Io-_88NXw\97}.:t8'?O}(UgϞ`Ԟq8  U vO>=bܔl?mcr{3tb}~ 3b>br,8'_s|zǯ7|ciL:88NC\L:88q1884fĤ{i]o5Ǯ7|zqtqg1J2X\L:88q1884Ť8888NcppîMa]wfՖU6,GǴÖ;þꩰmFǯ7]0>vݲwưua*y5maJ?9 /ݾ5da׮]aaEؽ%lxSMᙧD1v&vvX5] $o͚vǯ>1ٵ B1ݞ]7lEeXI۳Gya^e(dqŗ5~Xa[5uub$._ɴ|}j1vτMU+}o[=]cާZ6ag la 74 7?82|k&W .YNפǴ%:|J0mcBp]"_ŬL[|6+ê5ad2MOmauٕp֧KS+Æm?7nos;u8yh_طss6oPD8U 'ljr`wmkUNw[9|OkVv"5v>XO{m|j.LS=>v ( 25d8 |5p]ǁߊa-<Px䡰obإ |!>~u8{aMn!_mn`Jf1! VO{빘vS5 1{ 4B`|M6R7 ֥TcZzǯ |Krkk$@uW <_N za\NVmk9<hHĤ883h s&qqŤ8888Nc\L:88q1884Ť8888Nc?g^ ?|8vXx7 SO=5X",^8N~ރky5>sO&rZ1^ޏ?'g sN8ؘOp: >l8+_.=㴄ᣗ6ȊpR; ?C/<U JV̦-F7s=O3'u?t>AV8NCK g,8l΄KV3Ub6x?n43o߾?a||<|_zpxQYExX-K/-<3_=|'&-Ͽz߼d-Z9c,'޵4uz[#N{~Ʉ<ֺp?du8e׊NƷq2wG;On~ÿX'׾f͚G_ NIDATp#OR8Z'- ⟝>xɲLdNR:¢X?X8V8k3C6w3JM.Cb\dQW+/mw88 \J|];G{םylo ׎/L=Y'ù3_xhQ yJýKMK?vzX<(z6)G -:.71 ez再P]sW屳ZHy"0;y=_g'E{0s/&|?<>}6Ls8?^>Sgq>&"68v;3w<9ɓf{ %ڵswhld8=.aʰDxlz2\֢8oXo^n?9lxﲰ]_9 MC ;{!)KZG_xkg'y5O.K%ucf< ],nTΣmOkّ}${ oj;23Bן5LfyddcpAŖͼV7n]FBO;T53\6??gůd'\O|h.,/~_Cس0}]rcf< ]i)kz=EߏK}J}}qgy׳w7ߟyN5Sw| <ީF' wLO\^;ys~Ӱg5f$g@O5c}]/b:y%1 wAvqm}3'p|K»pv8|P b{֥eu/V@ykl:j[}5\p})L*gOw{lޓɏ+ߟ{<|u߱޷--Jh|M몆ʎ7ulz,.zs߇8[/ ӏf@3=rqo} bNns_ڳCl缰x׶ A/"_%"F|kdrMY'*/X/1 ާ6?~dYsg(X_\޾jI δ#ޒM[CF}&q$5̀+z=s؈ N;Mhop׍~{~4s ;725=mAy'շ/DЩ >k=)n}U1.n>2n/'16>Exw{{\x}NR~"BJ{fI񦎭4,mre[)?ԏqÖ'͇=+-Y!{57/?l'y_vMn@_osw巺i|'pn >Can k/? 5{dӾw74z m_f|ѡlT/VQ 5o w7_ၿ=>#K?vZ8sYşDfzI@PoغOC>V5^Yԭ ׇe޲}߇8,zTp6wnw*|# _Ḵ&|,{On|M}?zmOvgg3})\ |䷊1|"\>'oo~hXwΟ9,[:NБomw/8s6mi~|}>3/l/?pm wB-~v~疇_ɑotIھNw!88 i$&ş`귄ٝ/jXxh㿗Hoo>'_gUk@%o>'|$%aً9?GK¿G'_qBXt,>;9tit\̱mo3w^q{nu'+s/8#gL=t0|Ϋ*nυ oV̦Ǎf&koP8V[|yxψu'_ y޿^뛆 K;W~W~hBǘl,&qqM܎88\L:88oh;88N7@G̤88ӘLQrO988NGͿ > nqqǩ9_dIKLv188t /.]N?hx湧*qqIsȑo~3,[,/^ƳW."qqqRyo9; gYf QjrCP@e"R&$!!X~Kg+Öa?Vk:i= ;_Y9-D,,b|(*;On^^/5BMsjPE/l©*IBZIU*5 Kϕ=Ş|׿&OgfFF_x23ywt#{N^btVÙkj#)eUOM}]?>[&"xbcqƬO?TTwwBP(TCe2#15BuMIjd4Fs(Wu0Җ 3X$|fŭR"顡k׮}{0,t09y%sZr9)U .1s,~,vT &ms}9YgyTɅS#[Hj/1_j֞]sB<^~eR矗~'ofggR.4f7Kt*JYN@ Ou$<TUhq}X,EUT| 4rMO7x^z饽{UUU Ÿ'8+$q0\.Wgt/2tud0֓Ko "ݞvf~iiYw۶y<^ ?nLR\/ PyIܻm;Ӆ+V,$'OkbY 9a`Ž^yx)2i7(|X]kFk~6.VD$ڠҤLL~@fC[/h+!C9oU4R<Y,]66 4魢ʢ0PJ1UE`LIotu* =2YҵtA;, YU  =li[?ZETiekjPSJ5J`-2AIF*X~pJk` HET ""ij. d vt@ lMt4h+k!({HT dO̰J*+OKbMR)PVCD S$% ]@Vd)-"eesX lH e-dSYI?[fVی2QV81S([JyEYtz-tkX A-m$ev- x=C".xDHsQamm4oV>mlƠK52} @Tʠ{nbi%z ( 2,H5:eScAJ%ՕN}\Timl[@,6Jo51\rKZVHp uAnIe:S5'hs_.V׌ @f 3E!!ol]|6Ao@IlpW(+RĢa-<+?3@TIm\޼93b{p<blT BK&И!>0jMg\IK_/_N焃-s$p@ug"`.&X ?r[Xݴ)0<@4MCv00As .QF5Nj4CUG"ck@sPCu21FuR"juUq`A௿11v>:84Ļ?Qa@K,mb8 \[ׯag_~?tK@!/+K桊=1yK9|# DdnPb!5%uBqRk[pʵ/..Okv0N*Sڈ_=s Uè>pzzթ* KW.إgl4%݌O? ғ \*:mD 1jK!ǨX<ʹ!sMI- xhUk+p)Gz#3\: oL\*lN]Za~91MgN/9c_V _pĽ+;`a~.[|x կ8',_LnOZv_yB 3aгNdO<ouE^~Mۅ'9MM /SaT\8Z%sz@,ejM&hyد㞍e)Ic?b^97?ñcRyXK6RGkr5Tn U4`r5bSdA%hpFJP\A22 }7'={ll.x<Ǐ4!QctI(hM.26jծl+69]Nڍya߼ڷAv:ǘ?`~QYYg_]n& \& S4ծ)ykn]lῷnUˆ_^,7~uGGAn{q/BfTk: T:R6:@UBPx4г%U&i3@zu+v)elG;CG@z}sFz)X+8pH(rlu=3 Ӹm?uϝK Ұ;04G NL3>SѤn ZAKvC 9C 9C%d 3!!!]쁁8>crMQ1 ۹}-@ xWyEl@w^\a,8/_qob)a;;;{߾}~_, =쳛6m9x͛Ee=.xW,@ vZrJyyynnn5RF0jjAdgbիnnٲ%''gbb"([SETi0H_m$(Hx^999|>rrrffðZe;oU4!u Rz%׳x TaY]H*,n =ؚek4"4 $K~ =OAAA858#IIi\,bӆ41`0Ζ&[`ٰ N 6Pɺz@.YR:9XztOOϣGx<~H8رcllL LMM秥%#簓VLf $+O+ȃBYKJq*K5\El r9㡇*wލJzisNaaaBU"*I( PR",:uq Y۷ڵ+n Lբ7F晲Yda=sAw[[7II[icx|>cC1DMz=UUTS`aUnրP-Pi@Z'OBbDYz.++++ 9j"jHHnnv3 Wfu*OYJ$]aА؀W,s3.Vꪑ O dwr$6@bs$6@bsv?<ƍwe\ >(I7`;a7yw7ӿ"V+[қ6|c.|ӿ{oXJXͥKK 4ME:$1dKj Wxb?~<##ĉɷO䞟2{f)Ԇ{ Tè`$yr *,QիiiiwM+GxnjFî-X 8Sao6{X+5Z\\6:Thd`{x76#eFvm)/_;?A6{+7kԬ8zI7JV EB3әcBqn[/_7wͼaTTFPhgۣ ە:ޥPCJGw(}ZNNΝIg"5 wF 3q7X%8a+EHh)[';R/svvAF>=y>n-iM[?]IwM;'8=:AֻD,) yng9Sm]e 9W4߃^v= OHlHlK9.ȻC RޥEjޥ C]Kѣ X y}6L?n*WF6~5hcIax`kjB᷾凊،wŋ~2]gJ+6:t}I"9e6kgrFsTzsMIb5`' ι\~2iEG- yn_ߒq>ľZ>sUPUh,88Wh*IDIYm{K,cN"ӄXػO=ſY+._N/*Jܩt18zIjw֠~?oVMs%vI_< r\`VF꛵uhf>wY_8ZgB;hM.Z.a-:[ij4%Zհ­}:Xػ>xyPؑ3.ڻ\^X,!҅'Y~C{z<$4h' ]AKC 9C 9CCC|ǏW"uX)~:a27-222+YK/_qob)a;;;{߾}~_, =쳛6m9x͛Wq+bXkj+Wsss4[_di#VxbOLL\zv{<-[LL,fX[^%ޭWNNNyy9'񬬬kbi׳; /lڴi֜55vDsmz2i lI 2@ނ`ɓ'qѣo߾}v&X,6999ǎKaKtHEaO Tk` ([SyZAFP-eToaHg0Ȍ'ؓ====b7yvv4$j̖j*{ VVmr9:Hm,,b!q߹soppp4MvBPpy*ޥ؞={g###188ccc]]]bb4TB &)JB]=if튿w6i7($E1;;vaANQwSA(M6]5 9RNԨ3tZZ7ܒnTӹaL>?WnIh,$]>_[tYLuAOҤo1"S%5l ØL7% 7n4 <{4Fpd,k|||vvvvv>;;;>> dOHǼ;24E* T|lS, k^q.{렧q]3TFI1%MS3 M6RiLCjR {deL999XV1 E9a+@2TZ("J7Z2TZ;Y!~?40>|84A,.. )xBqZt>բl,#[|JyEYt:ސ:A(v8p ?????vS588799B[ ErFGI7%E-*cJ~J`d֞|><|0 2]IUY0p AJrr"pZUUՆ bmZƅB+G,-C1prw3Z[[a{#U {ۓ_ (_ERh8ʦ^k>JͶ+-󣮮z5 S (t8ڌ!?*6l'rիz[<#_B|6V~0PDIEw|=֗>T8|bh)0* H%#Ab!皧UjTem:ߺu4͏i18Ma2r\o ALpls@u+hYԅ+K**jVdlhK*?;AF »\8W0}@[$(֕+WIBAiD[XW G O3ʴ6G,-`2$.h-#0 s-+k(T"~rJttj1Jbh7O햒2eʔah`Hq 3aH  ml0"]jGΝow3fF> 24ːF%W._LKa1LNv(!4t7MxԡMob K%KLb" $\4xQKUaa|>s?zN VowA3պl4IUDC,A?xӦ]r<s-t+I7պAXD_3aI4Gy>[ B1ߧF*qX馺w% Ӟ-(hnn(ݴO#Wr[}>bi euߜ6n5kZ<)3Tl*-{ZojCʭ?hnԽOUo=fڿoXŕܲx@XDCk# =46NUp#zwVC(ֲ 4QXsmڈ hBo7MFj1`;S)[. V+M3}͵+o!HE)pO1ԹG `ˁIll1IS&$$K ?m\CUR, =AH4DhG(z󭷾9mg7>Y"]Uu幵W|kmA}m_V]*kU1G5ⷰUQAXRx%R*<[IEs͙3' &}9b`g2>#?qIE9T 쮃ښQ  kEAH4FpÿDAH4I>l x0iҤ; <ׄ@~PAH4˖({`A|УMwOÇ{bF" hD0cYfM,vno΅_~i($" $Q\=8<C*_<? G& `{]OuG%B~ɑ-x;';5 r7N<Ο?_^^en/ztvj~?7g+^]7SIO,%AiCg?a'_y,yJf V!HE|%$J} KKmɇ{?%˳ <`osq7YX^l͆n?tV_g♋ʊO}|(}ɓOn} B`$E|%n۶߽7:BS-"efRya?ٍMg}姯ٺ 'G%" $I_q;SVVvyu8l mjl|qɜ9s̙Nn&g?>U\(mj}065=x@X甖?~8WO8yńY}pffֿYg?>5в I?K7~3am۶mܸ*T3խRvxe8Dwgʊ_|Rn~,W~'N΄_skVC)zoBA7X(¡}gxx{Ij_ ~mk{ܒg¤M[w}UPWSڄ͈,B‘薅饗zϟio[Wwk~|j_{K?ssQg>pR-_Y2E;VDAH8?n%կ)D}WOjsϟ<|8J!H\ LFrD?" $ j{VY>҈ ,B‘,$" $CnY -TWQǃmHAF-C (מ{mo 5[UKs[k`-!.ՋgLo8Z_P @ ]hap-`".hA, warb}Yf44B~BHtDAH8tc΁b{ jV>uzkP &m$agkk AS(蒇J5\8W0[qYfM,zlY#.hAQ[Mu+bѕ+W %@ɠZFԔ/L<)S4kO>_qFK\ܜwzYκ[F%" $C =6p R٩)w&\?7{izʪp,M{|d)ʢWtY$B1$ː~{b/.;}үF$Mu'r>[p  G. #:Abkھ^Q래WΪկ}9K["O7,lfxE3=ZF+ I#]/@#mȝJODϟ|9s_>#{W_V-`AD%կ)D}K?'3׽zrv;x_2!Hܹ~3M= p$YeaHH#  G ` p$ ZH$DAH8={HAwx`Ax`؝zUUwyT )o8!$-g; ~n'½AH8-" $%$*" $"B< ,B!.h!! XDAH8Dx@XC\B< ,B! $I_TY( Xzza,>*3 zh ^GXeܱ`¥m GbVYC+g@Tz, B}6X[DX? X-M|1L]>]tՂ] ,s{~쪨g *!ag(ڶrgW̉]ؿxaiep.P/ sڳlXPui^XL}e#:}ȼlx}2k! 5+֛kȷ[J7U F-?;N 8Xwʗv=ze'bjghSpG3o92Y@Prho]Y֚h>z=Ϟ=Vr jTHJ/\gpտ +!+W|3IHdKS\u"t1:zB}PPn*`CUDdjL8VuӖ? 'Wc~[D7$P(ÕdHC>F 0mZl.Ϊ|Xfs8v[T>\ `]Pu:taN\S7\8W0[w2ё--( 'W_>[Fv0B<.(?<`0,$-ٰڌۚg%e;qVe;Ct ;I܍%Y,oW,qNj@7Ϙ_Piah(0PFY&,1I_׸qI9i={;'ׯF`a8O(t> H7}RoO_N XwkF$ֽiqvCWws(4Z|D*/>~~goDAXoFyy]fS, 'M&|qɬ/.OI 欛Q4j{C .=41)8>(ha]TQeE⺠4Q}`0xq>3&;҇fszaўUQRZ =T#  GZ K/ `plN^;+5=P?"5 CȐD0ݽYh1nٽugG_WTXZJkpP]h%>9se>ulW+h],Tǡݬw-{㧜z1uE{V6<ʐ&"Oۋs]v+8t?Bhz70ycа&i2F1I|Q[Ӗr2/ / /"ܫnӌڟWcvP̚=ȆmT`OY0UW5YE 1ݠ 8p~93?Vz.X}YCˈ' œ 0h2t|<4 (,:aeH\ 5+_^fukMhK 'B;T-|,`]^@8Y[܏5A~t{zuV%x'^];+Q>97w +̀j;ܨswde3 u[6h,(8}8-|_e}? ?ZK RBU#}9nUHBS@5O>d%khH'ٱMMQnrsT%Pbn67boPrsջG cal4Oz0* E[/Y}ª;=vnU, ǐ=v-횃o ~0ұ-(~X& ÖbG[eO\Kˏ IDAT6m)iY{߿ޘ )N*Rbɩ  ~HtH/-_r4Hk|LSb= )~X-ũfU!<RX|cG~xz&C56{+]>U㙢 B7?-؊=(f\p -_YZ٩FGkSjM?(\Z֓OV~bZ6w͓w\[[å?_^ ..zssKų-n\e][T=%7iT8آRR37ߜIG>9=kPc5~`%lPdC0jfy`m2 dY 9_S= ~.f+Ex_yڰ]v?~6 ۏL>9+J.NҒ"Uo>#v~hTA#4nqfG^ϷOi׮'sY7\x=z?l۱9|5^Pڦh抠Ϳqہ݇r1|Mv;GǴ.coa t[X]ֶ[;ŧXQ].nh礪/1mb=]2=,E"p9݁N VmXoӯ(½p Mkk 󨄁seMbj,7p?@`A;y7V9ShYγ{V9[7^l`XS;gM\/hbihY>$mmp6}7 8VG:}zx'%@:"ύ^ߨ:|yyy^ó_TuVP~QHٚl.hқm,kM»j7FuUEJImm{HXk @ķoYIK2 `{PLi@ /K|hp?6 Xoaaaii]{36 ٲ;{F׏iїurDZ-*dow@`K l -@e^YwyA=qwâz_O(/xg@`Qh>I,HEzІ[}mۜykϑ'7_0gzcaտzaR#pR^Fd41gu#{? ZCejkw/ڴ->k!ݲ}3.Pn-ϗ|mbw/gnY V>Q-!v\=H%wN/efm\6͜Utx_׮eYouRmR ]І׿ 6 c /Y"!ٴw~wv5}tC0`n7lO9>t(4 nvݿhü}e^XQ a͚r@o jv*P-@..;ظcy%Mo4qSaNxI˗\2Ck2wE~]%Z4#qZGZ#WƢ=޼4=sd a"E`XncP׷ٷ \z I9~h;Gun-vp(ٳ #]wzܵA %5?e|H)Gx7~!H` xpޛ ]p: J7nFR)WWimcw|Vsnfdp H6J7RaL 8JMHM:f7og׳k81X@7m5ܬؾnk׺{[v#/u; q$Ȭb`A `!._"<µnRH/gd[qfvZƮ*<3\ Y9I׀12-@iw I@7m:n LnLs-+gBơ6s*_GOxJGE0JeK.XR~Ch$@+a4 IaR8N^Zڊxlkצ󬕻J'Sr\snt`9zJvto78X*=!xe rMkOԶZ4 ڑ4^ Cuu8FxOO2Bɝ;: :  X [6zڭ<8"%%(2=k2šǙ~2v'cQ0fvfNS K@.Jsdi2B`E*N kҙa";$ XKՇSd e*nxAX[%zzaQO$CO-d>&Y82RR.hew$KYWF&@z`rYS ؅z7vHg²/uJty@Y;x= KH -B!@8p=;᳿n&[[#iFni5<Ti=\y`:)|2π \ƶ)i V pslq@\ k@7fr>O36 Ո Z DAH4$ Z DYbɼޢ$>MKogTVAXypng2sXڟƅIWMW-a2ᴵBYc{Z S/cRn~:RA53JTU⫺]}de;=t;NzѬaw#< (ѱD X DAH4D@$n쭻gߔp  W O|L44c٩϶s,`UHi"j܌ e|UemҀd4?qsX+nZT9aewĩ#BD#FԋcHF@w\ak qpJ ?S’T6[6|1+XQWJǟm8ZڭvXN `zP@)X|בuslpvr6dZZ_*`ץKI?ԿI Ek_oٲbD࡙nTem3kȇ[J7U`[AH8"pgl4'{[hʦ4 [A!FtsȬWhprV@ɡDeu u|Z \&riʁu ,÷ > z{E5L"?p+;P>T댽FpmRp$`嗾Fy>cU7=hKÅe{dMd_иK**̽ U?TKIǛ `A3aDa0ߌjȟ6E1DC,,#B r$L黱RR*+Q iuDLrnO+Xӽ)u6Cm?hiY^t$M6G0a%T*/3A츒>; jN^,k=Vfjf2J,ko{&g9xa>Uq6op6=Gǐfj=!9`MWX:-Lz-F8^ʠ2,JlTvS! oUKRqYdҮ^ٴe6cõ=Y{3 >pq?vN i8yhBw E ;JαO&ZDXB\ Ծ4¥k?%&ߛ.=V,.{`!.!j~UGév/ Xv2T;qvr;/pˌMnT!v;`diYYZh]giYo+rDЭ,`Fp;+ Vva"=J"9u8If xlB._lրܫ\=?vvUԳÎd{8ZҸ?LU͝WFiHHBrʵ$ ~W Cw{ǩGH&,!.Qj+ʭ*J[{I|#,SI kЃϚ IDATv[mm~e\aer7SW)SD27{*KY*&;K>zz:[@W瘰 H}wr嗴 _ַԕ~k_=~wqt;뫌bٸA\B\iާV PMuuuukmilAAzI B[+=U?p' fffw|yϴqvZE2M4bӍ7z2Xacޯ@i㸚5 [@N =]!趜a4UN=7z>E]6 q +*L> HMg|r߻f}anުש>kAzޓ`+)h +JȫS.f_oGke,w0?mFыLs`;={Zʱ3Q%gsBjͮʎOvcfgvRou BNptAڀP;鶗W֩QoX0{ @@)I$)>a ;ϯN; _6M U۠KzվCz]1hɦt|8)JaAX#+RfwFYz0 lXhI׃i!h,j^ʚm$fގ=f/epESc(>>Զf`fٱne~jFxVH_5"k$[,Sgk=HC1H"Fe¢s ;eGy}iҷiaa^c{i:˖t379THkO^3W쳶/"p{`?%mhypi- #I_HMnTem3PtS]EŦ+W(TWZ|C WSQ,(3a&t/CR6k\Ofi-`U v]S.2ʽ|òuǪ#y9,Iپ)ttvet! ) ,ڽrA{.C^m Z=)}6v)^m(;;n=C^Vo_KfUkܫ Z b^7TUEVDB2n-pdsڹ"~LjUΞtV:ۑ ͵pK۳QN鳽X|LwxW;>16V[]Uc(p,o9ک ?x>\|֗V#Ld$S,U(3P׮ ~g@{Ǿ(L ײ*8V&ZL1@N5 $t[{St t%Iz2 `K_=n۽eY_hP'%IٽvJ:)`Y0Fk!I '{A=ڭ.KrwȤg5$OkO;xpŔFɄ%" $2+"#EԥG=H8 AL8۵/~ݭ<ӀqV)fusS);c2ҺnA!@wJ2Е tlnsoDP,ٲ %HI빝 t$p{ߥ]auSQth= *cNa;1s F{0Ymehz\ƳlPxf kn^2UY$傶e\6]j vj'ڃIRYEMDG:XJ)&Z=} $ud)#S<>'y Co$}A;TWp1b$]zMlrFHDQq{FIo:," $"B\ |7=th^Mv2;X 흙mـc1# h۵VV;q%I;Ue ^C6t[ڦ6  %LR:oOΌҶuULVXM㟤u[/.ضy..F O_T|; ?hͿE07 a&wgo>on R߁}n a X tDq"}uh kewnAcn[vZ/AGdٯ6o0m#[Tv2UN;I"{H% dJ2ézIKM3t:5=?; {[RVRg1oâuCz}i{g97K[2=w:YuvV^:XimMkÎ,YVe&dZ ȰR)-SW6 AJvǿ1W?Q~b#UA2a q8 Ev#~ >m~(?5_y+ &;(ʛ5ζ\{:Y2y̗&O)5v\:;sX?pH=`!.z: FL/ck={a> 33thTi^5ѫS+l>)Zdw}ŠmӞ9iZϜn~ i[ab~lN#~[YINjgҘ._Z #Xn<\G"5 M^HO N}`}r1${zv2H+-WV?=~1c@h @?eYh6`ng6m~m榽[YSVM'P+Z`/ +EkճbN9/Oڎ#*X2cg(X2a qp Mkkk^^cgG%$z·oNDy2`JT0 H' x*1g;HW6FNJ#ϢF8D붯eT%yu=ܭFooCCEQ֞sLY}{|ICu*[X zZ^9_şHi*x`տl~/+ PGِfZٴ]nmXiy5aasl4_X:q x59PGuc'Ya!Ja}m>ѳDon}O9:D)H qA ť͢_)UoÚXo,zI uճ:{(yG o=J b{Ӿ6+؛EUGXK)>*o$]dC^T4` ]Jٗ^ZN_w^ªoЎ!ʶn{C> XO'b vEɹaqJ8Jc,Wa`!.!!@791L^(hkxC}#eee=լ:X5{SV9)]]=@r7uL/zoF[Z LORЛUTv};X4Mt[* B?OaLh`@n"ӌ23Ɏ` h˖C^fh&¬meDߩ!j+ʭf{+Mu%a}#U >n:`x+_:||밟S=$ڋ}ummNSIJ% uXU ܀`"I>s S|iX{.ӪdoTs'g,LMp,{mWj wIQ!wNx-1HP pާ*k)X0mʦZ>UYPWQK޻q罿.pRH A2hBA1,:@(sb8Lˁ'a$G!V؎ePH" F4MdFH& iE]ܧ]uuY੧g0߾a YJ.߾}tqi~a+sʄ=rg6f~ĪF8|oAYƊosbP(ru+!b"RQFmJ)4ӤQS@J"O% 8yw$O#s@RӨMT2d5xxן]ef'0)a!jv/Ojjv77&̱{OngEbǦItpat=O5r+?w/*m?<|>8J>x{3=Ƕ?wwO{wOs`Ͽ5\-df:`?kN_YGAklhZLkDIp쩒,K' &zbUU4x 8j@ HyK@J4_N06ΰ]'O%NK'E?{u rog >wo׹k^^x.O;k𓿸掷nׇw|` :[#GϼסR4d:?ߑA[C_|̞Y<zVض3ܾHϬ~{o.ĭ;x]p_>m;:0nqǗӳ_:B>7o˭l$X !F9q?,^788378lcox񦙽t-uL7~:0yw'd$_x9w oy#??v֟|Pş~ؐ;Zⳟ_.߿}額mB2x`ݿcKKV~ҿZZW.3|[6mvo8{ɓ[^ƕ*G8<'х^yͷ?ؼ`5# t8aWNATi)fV:筿J\bgdtE3-!M0Yo\2`վ Yŧgs5RYpSz`A[NT>q;jG2nOlT~#ȧjM=j-t KA9ťƾ{[t?3KafYoқ)>ۦ?JnܸgԾ Jk=W`DpzPP=jQ7>t L,3A܎WUKVL=!˅^Rz@%}^MO>g[wgg92#3(? i/>u<;gu[#o?> >eߚ7_8pOw/(Gҿ$OL?r}>O}y6/zt [C`-=utNSmӟN _5E1>|۴>]ӟ"vϷU N; "i5 %|r59G1xE P$_ V|W`Eyu.Dt*NTb5ũ^z*e%܉X 5r<5%A((}J>;{tJ]_*$Jkg5I$ݽc]}!6yøaI9v7=9:YI+֑bpf4\]98/2uyn6cF~wzB2_j@8LX监"r `uW|gMc_yZgO0oXF rtRbrqGl&PбF٬W3`5))uAdmb:_& W jV(\{ -ϥ*:'U$ XRP&FtڳPov0-&aJazX5ك,ńSA;8858X qN<  X*+cڀR(^y\Ym /V6CLڡ):Ic-z>{_CYv_rq߶eE-O{/}[r5dooAS;>K+{߶p6|JlX;f]wpI|sgY=k._;L`!x)3cq9Siv<-.0,o1:',WJiOg+*h?5Fpa3apJ!o'Tϊ^_gJn[Yfϟ~ȯ}β(BOz~Or]z@P_gdVsd ~a4OLϱmmzn-Pwa~pzm;ynW ~'R/mݼZ*cRV-VV-t!sVΤ}M7:sO߶6KY~xiGn!?wW%x_||fX=nrpƧ>qg^?6{ ݖ IDAT?Xxf>]8NË?G?x[kشŇ~ǷLdc!=[6aKK 1K I7 ۠̈́X1Yi_CNZm;][oioo=MH pӢS PlM'W)Gbfgn޽i~0 r[-o?:LA=u|LzV] ZoW#8\6σWNFx{0paqgOϑG^,̮k׸cGDyhV'x͵?isfa'7=#k_?>u;5zɅ/&_Wv֟{|??gfYhcpQ7ٸol۱qךG9 m9|Ǘg7=|Sz[)W+ Wa,B̽p~6뉟ypܤ{t5mWB+@V' ?V`Gq_ *Aԃ覎TbؐǪm.@ ⛒:}f}bU훿{:@ ^ƿ#qu) h7G8ͺKGf /O=1}LXss*x2OGO2znz]M\ӥsM}7M)C^F+,+K(rN;885S5;/XiuZ>s[y ||?|2o)?mFt~y}9k8wH6EnPiNCTQnPاhL= +8X KKꥵ⯌1c4V0b#A%ռs8C}Ն5FE z}B/Osr]()b1RC5bKذc4yBe S%_҆?Tޞ̫F TBv4!^3ؤQlx ډfN;885bj[k|=˼+ #+ua<{ĺ305Ϧd0E A1 ?͘Ez@P*5l LvlX,14%6Kȋ\ <ʋy tZyB&:Z Ty j_Xd{>=>߿\Uzʘ  s+p `[K%eam8ˉO{^4X3󧆗3W1L#Yt"2 m~*uyUB=G |Q=Ի׉ٲ%; a `qW]bq*`0Mv 88Pd{C)WWO'FJgN[$ By?Sd3W(Rn#>E(<,UR2hr6_/(Ҡ,bkb~?J:6Jxhq#X ÚKu~iֈߐQPq_ry*1`=L[spa"zQXBsԊp6Œ#m8 H,PYۣأ:J@Nue[NEcH_itk88U @$t .n]'JaX;SLN o9DI!Ѷ [wr"8Wdꏔ+%'dn'N;889d'0l̘"pw j#*vإPʺU~Juh0K6V:T&47o䵵BuJ? ¼ :,ȑ`J FK9+%1b0Ts_&rzvJbF`,5꤃U'v8|)`edtװ( eb|\ޮEWɐ]PVevmV %inM$4٭ٛJrnK lEIq #dqqA6v΀ƆWi.Aj#܃cXSUKpP=9a9=vppXspaX`tZ>"r~&ܴ.%% EUMj@\H6>}qR =O&vˍF[ʰbņ $\‚5'_YgW H|r\~ʾˤl6eiM)3e Zny $]&,N_=*FQ^3gVڙT'MdS:2)zU%n!nRNZ+ߪeH=:@M$I:HIV%tU9tD:@w"Ug[)S1\z?+z)zI1ml9 ! eKn'laEV=Q2ggEr RA;p5 `50px, Q0˶aMG!9c`.VL%dWuJ VmJnzSIJYqmTAWNX]!$@ZL]?NF]YR4z~Fn  0#wa5p/"X[=AlPW0Ze61$_@lay;]ؒ#~%6ǁvŒ3uBN~{kdvٝ 945#tley6]O?2A1ܐ*v*hFYZPL%rWsE]{(AnQj:L<Yo8p),gSI ,'z>6Iao +bVy>2Il.Fia9gUVl1 jF5)z esO,zj~z*`ՙ$!;WߴsFpA `5 aU kA_ F6l-rd$␃|Fd0@3 @3ˠQJ( 啬WDIQɳDyBޗkg#_4U'Wk%/Vk$wRY:gn0Ѱeq*ɲ=#`lӭ%3\b;PCe?e=>|KB|EqxG^pNXk +7c'х^V~1QA'0VWyI'B"i^C-sP)լq]YI\ 8aErBg#HwrVV2d}+B !GőE>ھߍoF]'<6_Z%g1li;"UuyAg.ө'.y5XDV+ f0q(jfPZ֒m;+504g@. О5*rORlEzNXAb8HKYu<YKpr>Ke]i5+@Y<ЫY/"H_iUڀFYI6J갚;U]Xr(Â#ju{+5ř 'K^vJL{2EVlsÆ-F 5spaÚ'/.p@Ն|q$#aaH,y1RSwh̠&G4@U ЪW:PZ7tW2 e_>iJ̀F*VVrW0 WF$g+ߞ0^6P*wʥ;,&6^3 +T 4Z7-(^E}2jkʀ(ljaX) erB^D/"<LŰTAa' y,ުӈH:\6kmRRW e՗[KC)1+vIOv >o^ʶ5:278'zCx+ZkWxOI XIDRYZYyjb4'j@^gղ)zQ֬V0LX' a+\lXM`^:Mr_L6*̀ e~/kj~: ?րj+=/סR:/64f7]h# B/nUL8P##i:ьG )|!,mWuZZoՂ ⒡\'eebxǃV0AJ{'mUМ2f)OGF7(0p5 `5'N_:+~0Kp&ɮ (쉙~Ш£*d"~X2WnJ+k7Ʉ\:-ya@!|?A0‹c#=/ΪFJ է4 97> IDAT˖)8]2`bTrzz M4jDF>mԳD C#yIz+Vh0$Ct媰 U#7P)r,' 񊬹 >5'N;889b ',$!m λ:{6o FuYw̵:+%Z¨A+N)SXjwcc ,#?#5\<2TɀYˮޤqZyt'~nzeF\Y/0QqT'Z@T, 6,s8 `5'[wō7˼Ka6f`Ff#:2_Ab°$@؃{ʘm:Ȟ(Du_FǪ| FDym7s#Zkj=j&!Pl'@=hu@f>lFS%t2l0JU:ŀ}ueeUGYYsz](`:NQߛ^KhdpՍ-eL󊁡s󣬔?]V*^ORJJQ&\y%u.1HեW! !7 RϰTZ#4&ˀ,O hA-^Qlv ͇$)fNXq|NVindQ_iͳq#R\fO{1Ћ'WzeJerTk.8 ˀG6!uȪARccF'VP5hJHJek\ؗ{4T:S%Ě`干5v9#6Fz (D7Lڳ@b -n2xpJ̔' 'B0Y,WikR>`DϪSpTOvogө SA;vppXspaH'hʛ/۔xpE3N(vc ܚa ^mV`Qڀ|FT$iS)up[[)Bv8|!ΊR^lCV^6I(P*w2#-4,O Sĩ~T{,M^LpK,g2ކS|iE@RpJk U ג=͓'66yN/$"/ bR͛lC2\ :ϑOJ*{kma4|U^3ˎG `H) JRE($jHXNkR/bLN&ݰ-Ѐ,f/B @|i *@6JJʆZTUr^*@T$'v8|0jF`Η[ݻY*"Zz%~A!> dF|?ajX# SF)Vއ+(z4ReEy=y)=2S=29K',bj%H%Ex$R,C8iJr꼦ݯT_BdΫIQ},J rN5Z-mHY6':a(w)U 6= 'Ct*.qp88ÚEVApLvijOxù88dՃ<:~5e=`6ͯlM$z$MyC=+6n^m(mbF&OV(CNeyp>ncSLxTЅD@(/2H$M= zO QAwEZKwL&(iujk5LJ![e{j%cNQ>L0wН!m>;vppXspN_mf[FTʫX(d#1i4uJ6g ,Ia5m j aXڀ3\w>GU06( D-UGF(qAڎh9B 0@C ЏR\)*qzЇVjiF xy Pg̽)p_Ь5N; q~QI Iz0,/ ĕEK/y?wŲ 'zdUk#օIz_QPZb"}-©GI1k>ZO !nCg#?BH?T/lgEҐ(k H2XS7(O+ pU #xA%6dkeE%ɥٰ5'π Lv&#ުڕ,Ocop$|/aNLJy}"_U;pb=A@1ɨt:LjgbE>S/(rM~R)C~oPz( AP3a.#%88p5 α$18ΝrX}a6.G2I2m5`HJso.n8{?Vw-ee?L`qBQNGMe()l2Jw*I^zU $۸x[-d#4WSC~(kR1k a XbȈaF4(o=Dءੁmʀ e? *p,mf})؜%!N`[Sc=i7"q(&x3" . ?ۡpqHc-UU%mٹ̻rppS@'[K%|A`N ё7o%4NyqءFB ֖IoO֐Q| c0Kb2qv9T2پ)VZTD=OߙqasאF˄ߍ|A N=^8$Ġ!lc[;Ln~lhz[dxFb6V(kz,VQ4@jc| LU9:J1b=YBLֱn&5\YgU>Ig8~`Ʃ٪v80BCW G:ZʒG:vE)@4w6h(^€]D2E0`y^eXaB!>G&t0$b1DPP=-͖~ PWqpE(@P̖-fV*&aA?iu >Qr 5 `1k#lE\&,N/& ;z,o-ΒKMC5Tg'Xq=ȥ&N_ɀe>+t"A>%p@sU1>A?HRPO+~$+eOz"e~ٶ̀=OA=B̴a^T 6`'w8N5V4o-pNl X5f*ٙFDr6`_rOח% lG#aGփ`?aU4W~Qv)ݲ_-Fiy2O2zE^!#z_1oΕނåkk$Ǟ}ނ%k"fu:j+-61CtԌdɒNqk<-E_g)l0ǐ =3zCw^@HacJ]@'m hv~Lx 吂l򴚄 &?vM9qT%ePٰw#h? k;a8 5\P+iSjDؒ=_FBkU2I[Ojb^ TAemS$ ТV Lz2Ήt}k5U[ʗCҵcW.ੴcbhNzX SP.# `5bvXpxMbD9!~d- m &SAvƍ51|]ȶlO4jB`sܗsР6@]9eJCMjUT&NET~ڀ.wtWmBڀ`]JEM4u@MjjF;2@'H^`.'*ӬxyG%/}@n ѫ쐢WW!̋^-lif^Jw@Sڽ .;Xl2uXku+2BZ5JkPY:ChLe& Z kItUhT:y\&,1O|=˼+1Ep6`O%.+F( 3?K(/$^!<ؠ^:ڍ0$cRaHÜ2QFtZSX͊쪶L(UJ}L~ . ;i +&JkPk*hh^g),g$^fªNpD @+:ֆn8v80s*85<|qa|8K)j#F%^oK0 ճUV ۤ S\VF_@N5֟&g¯4 n7RexI\*lD% x 66x:43L),[̀%x`nT~UT;N;\mjp?ˍgyJo*c@$mf3#īG\pͦ)E֖`i^bY_h"6he]&UW9?wtEyU&&xÙɠ7xnK*n{[aH"4ؔfB7: SgR6L@ZU7h8+H3M0w-CZQn[sxAcB62* ~*e+vV*Sh/ךP.v `^FL *#A,0Qlw$o]Æ!Um$ e~ZJ*yg,vNXc'v8ʔϲju$od/=f Fe=R,Sp(Yq_D~ }efrY J5ˉQܾ;Qj&P}#̙e!נx$$tsD/85 ~y?? O=Qzݻ/ N;88=m'NォxmBLܳϝZ؋b0(b(8c(b`wlw|0^sBܽ5qh[W Po~??yu]wu/ /pi8~嗗;p5 ìZk:_As|a+EW)M|̔0$T[ʰb͆;IHyp)=m9}Ybʡ/XeF2 8)' ThUPvu[G!G1 ]{aPk.,^2ҫYZONr_3;G4 == p)aH0CśnT+3k.d5xD? vCzۏqʯJɫ"*c/|v/>%V8! m[g?~]J|y?s?'5j0c^#v_pIDAT^y.~^揾f>˻ɗ/jo s͟k^W7Nn CxG{qyWJALU"^a66 '~}?S}kKsÿ=y;m۶---9s_s=l6_z饥GyvXʆW psONV-z#o5ʆ%Xbm<-$Ց wR+rtX^@# _W1TŃQR"X *eӣ@?Cí^_O.|s_w:JFQDV _+V6tC:tMsCˈE=`'›olJ^^x:|B°x]ⅯT+-xrT?٧o:}k ϿpNO~_87_zԅE`R\SVf)`GnoG=͗lW VhWVyo HrT, ,E1X̶Rq$Hu` YUh'ҕ b_Jv.d 84**mR sPMZ&X1}~x~lMC)J'٤z:/M H\PYNuJi<,$ʯ'v6Rk<Ïs}D8a &L:&`y듙g?uw%}s;fϩ-w&¦lg?S)D###>y֎ MDdhxt˖ Ws>l_RXAo1&yu-v O,,Йed32Ƿ[\.v/yN[˥N_]t_ER-ҵP{_)2&SH$4)k:t{|ogN;Sg?1ӞG7tVg-96'hdÆ o<>55Ujٽݔem[ 6^Y^fcd$,ӵv[_n;_e<+n֢z+Yd-µ$]Cß }ʲbǎC;SpvxpCVɴ!Grsv<_DK3NE;6BC'x ǏWrgfnn޶-9ߟ]pzyc1+91'}+:wMD ]E @T]y,;~նg&-mo{r_a͕ej~[ϿeJw\ ?粓x7NvvXO[7=?ٗewxNΊIXF&R;"b܉t앋""^9[!" %U8m**WRkQƏw&[6eճL)*\0===22rէ?qɑLm{ضm[~~z<n7)I;{f^ճCShMxeBL(2Ƈsss rrrT2x,ٳTW"Cdee婮ȚR? D@^{``` P@T{rQIG@x d։މD$zؙ}J V7`9D2M"o-/J< iy "zb~ i;]w?_3@I!趋1ހۧB) ڤ'Ϟzx s!QTbd)Rhn_u-9Kmg\d9?DXRkq7ܾ>H~b~S'MuMIpJ{mnq2M?C$OӵF)u.sDxT{Zh;}?& 'F{'/G= :o'"&q `ps2vf?3O T `2BJ A)` P@` P@` P@` P@Ғz`*++UWpV"R^^`%UWp@`H5_~y``஋ر^K~Xw.]l{YbO?4$qG `ܻwc[Xu6|-/Gkޚ\oYD\$"FcW]zo3> +4l~睛G,i[\5դY ZbI!uLxs\zX3OlқC|Z9Ѻ:ʲ [dςKr[jδ#UeA_-֘fls+xN/fjsW44olytvbEs2JS]~-h lGwnޭs n mH|=֨ddI<{#~]֨뺮\օKݝU{w:bվ^mg:#U#FGә|K\ VW@۱7DnJ׼ǣo,욳/6ݾ56&">6Y%7ewH D  #)|T$ KLV_/]VWC&-$u]LM/],b-GJgSRj]za}IWmgJRT,,O.|㍂g7ffiD+SdH=W$lh`0h3V m;ﬓln̫=ķ"v]i61Ko}Ы8}tc2-rGkXs D_1ƪz#k,%Z/("% o_^lItT-lb] pk^W{ѥm %Ң뺈[oHNYS8\ _Kwѣ_џ>(b? ۍQfOf-bu8""=Wl6>Y]؊FBK:uhKZRa37Y]y5lX% 4[D$nS\4<<[ZZb#\QY~W厼?Dͣ(NU:`}IfxXfN߲Z@@:Ӽ56_u@74ms:x=ve5\[cF=z`K`ҘM-vO%V W`cׯj9l+;DD|kh`Ye~y_D$2JMghޚَw:վk<2RP]e3ZZXykl`tMD#F7*sCuuHS)%Y9@c#"bKKDZ}K^)+z\R8 i~%ّU斸1iK}n/~&Kq;ND۵V_p,%28-byǵ43K}s@jlfѨ7E;ͶYgWe|v4#:- jF(VWakc^a0-_ưmH:BP@)7gL{{*(,h0 (@ 0 (@ 0 (@3+<IENDB`DataLab-1.0.2/doc/images/shots/i_roi_editor.png000066400000000000000000003260721511411446000213400ustar00rootroot00000000000000PNG  IHDR X' pHYs+ IDATxy\u=\é"*(yYmjٮn]V(%h[iۮniҴC9xag>3|Tcc# B!]]B!OB!aB!dg`!BX!BvB!aB!dg`!BX!BvB!aB!dg`!BX!BvB!aB!dg`k宮kq}o/su-m}SO!j{.zM_BnVmm{g4m/ !Էj+#cqu]BȍRʥKWXAQ]J{wSLܼNѴh"FͺIԉc'X7OOnMիW{9>sʼۣҼo^q(3pJd"8^r{k.L^|v:?\lJ9s-E]xq׮]n]A$ V &˲<0~~~uuu4Mw 7\NW&=Gn`8ՅY!\X ]C`4у xD{+$RrD>#4F a4`QM`n&;g˄պen,Lx"k³H!RxgiJ^ێ@Ν{wÛi|#yz J*34Ey]ZuLܹ6< `„ 7lo%ɡCbqrr3>ʡqLsvFI_B!ߟAkjjBBBbqCCC?K,&+? d 8,8t 7+}mPA ~! #oޥ#KlV)S={Cرc֮]q @0@xj^×-7Q R37 jQ(K5\Z᭐E̯uy7o ?wd=%=׵46BX(Odž]ŜL"&:*QO",Knze9Qfƺ2++ٳS%[J:TD*(xϹ(NNEEiu:)W`Ejkk}]+FEEE|7فM6K>`Fm۶`0sN!Zt:LDPH$aYi9.QP__ 1ѳP&TqCjdD zR,@*0eY__ߎRiHHT*8XLIT^b'` +GEEoZ #Fpxɰa˖-۹sg@@/PiJ%Q~ee@ ."5ړtBK@~ n 5 gㆮk) oXQvxeYa0,ehEB4J &ΗdpFFƒ_fO`@ G_ynJ1:$3Ez DF(KUssSESA2yV;`б1 /|/^\xo{nLfhnnnim {ȜkW*B/\2lKfD(^PߢDRgoZ.h5DPZQ¡ATxwfE"]cZmd9XaB (рH1>MT]j8{."Z9t8KKK ci[h-ðd U~~%%`I%D"0<Z~#xH846!AFF(J$1X^iӪKKK}||Xeee F#MZvȐ!VNű^>>:`:W019w?{9y36o޼qW_}}/$ZhF#iE%7|/ i i[zѿ~W.uT- sBʑ~+VSaw9Ie2`wk1/kev <(/TtZ99h 0,O^>!7.r*MV=7\>CeO(ֹg:^oz^k-Zmeu5r tj6AXj* &qmiQc{r7o޼oF.><>>N>}=YT* 5f4h[o믿iiip=PSSN yW^}ĉWZ;\P[Wk+R{󎝍Q ImZ '9 -mtW^:O UjKKK UwuQsX"XG/#ا'}wС{>XӦMɱn&>ok4y睺1ck:0zNע_?s^\ ~bG$pNQN?inĊ")c?clmݯ ^p읾~`zmT8fk |!JՍ bD*UƼM:EXEyI%c "cF/1?/"h$öUGzHPvxF[]}X۬9#< ePU]-H,$ s `W_) Sg+$˗c u]rs>[lIII*""W뮤UV{JҺ^q}w_~{ġMO{TtK&UuŎ#R%X,h4̙XY{S#,H7`¸ ӟ7h$9<쵐3 h4|1/ UԜֱ3uh;q^ `ϫ iha5LBAo`Y^[|94MUT(y^VK~?+)h8g׮͚%-?'ػw@JiT~ّ>,ܼyS"B 'l߸pk׮\'j)F/ohQfgm?Yh6 4M12v˗/ V@DNHyNJgԭA41=9]푖),,LNNꫯOvؑ>Ѝiw Jq#?-9@K)ZDf5rVZh4MFhi:G9~eN"WXfyDgҴh[1jkbk- :-* TWh<q\$XА9sg2Fij& FN<75h5F#fa5-=K(0Y{8x=g2O7k֬K. S,RgÇ>DyH/A6L|9v-!yIIW,3;\׭[>լYvuO?ʕ+#{tܹs;vj~eٲe3gf8p`AAs={ٲe`BƲhlii1 <ϙ3ԩSׯt1 @Jzy |$F#$Mg}vω-5ˎ655EFFj[n1 C0`Zh`uFR]n2ˊKh5dh4 񼮹{];DŚur0(?/$}'(iN>MQQ}Ν;]c[LC4D0'+Xjl~a9^vm "Z*N<.((HnD4GhV1OE| K80ZBMma%!jXX+w k}2ɰ gFÃ4%jjF4U NJX"i?<@& <:`0X4O]?6I-]߼rD ;~* >lEmOHahF#["nY͕IIڢ"ED5:~Դv755*yҥ3fXpaQQg}',^^ d IDATwNF,(},0KE)tV#3Dhpz"h{۽l̄ez=0Bh%iH$JRT&4kU^^[gi,%,҇8<ϟ9rA֬Y#tLQæOѷ& ?Xt  hl:|qs"aܫ`hiiljaD" L&H$VˍjˮBs'[L_![=r­!ƍmiPmbM:VFS[))fe;~ɓ'{Cg0jsW~[WY:wT^*ܑI$>jŠA#x׳v􉄬_׿uM6"ygR_}_$77WhB|-kwעgY`!'𤿅  !Z r]w=}ĉu:J8k۶m2eʱcj'υVu|J B!>G_paee)S,]'|_|EFF0ӦMsЉB= lፄx8By0GXFbEz'|qnn3r<+Bn!}B!3B!0B!3 B! ,B!; !B0B!3 B! ,B!; !B0B!3GEh~~~V?688ؖ^zժU`{l,o^Bx=}{T[*9z-B[,BW޴͋1BN2sD !"@\]Ƶ23333cQڍ'zNjkkm,a.%`M|>KoOH7ώ"}e>Siw{ 7y@{6ÿ;{ RRko#?َ5}x߂ŵWn;#]]))°GgqPtr*{=&?%=K~K}NM>^SR]N3-钒LPxVGgězza8Zg~6z >?q;T4o=Yo6(zB+r NEm v9a `3ԟi/a3!/ ҋ!$7%d%ZK $HYTbAvR`gt\шׅ v)Bd=5: ՔԔdgFo>fRṳYKX|>;(p` N!7G,-c,syv֡᰼#s60a^CBTqFږ}-fJٖ3z]VSOKFΨxoa;L:܋37ˏgE{f1_}%Os?o7|ɳiCy"tO1_١侉:FvNu|L%n3yY-Pμy {NBfrmȕlVGF…#3eRAnUV_9e-¾Eu4ݧk[zsg< <1(J޹Fd%g'XdIXƾEǛS)%z:,J*Lÿ|-y ztܖD3:ǥReE]s Rr !dnڻ 0E2%g e~:zs3MXg_=;d}]]^5 {5맛]cp(%0oEIGlNmĬ}Q) ҄(j;-!i;n %L"ɽLtrRߛv`G>ӡÛ rٶ{R8cah֜ݧo>`DU3z67sx%uCƏwpD{ZvkNEwkjurOsM.u{qEBݱpzzzjj 0~̅gX<|,8WW䶁M1GN\%Wmճ*WW b?k+u=Xjj*Ӄo]ltk:i~QOV%Q }aCȔ;ۨķUpKIՉϜڔ8|v` &BR}b`\*uu#@d :kѭZ~ȽQGN~ #'\ 96 "ruMGp!'<6BN ھ+J|`(T3^{#7j![N􍫣0Er/N]it,ұP0tL]̤YKR>:ig"p!'<6  e} 1'%Tie >Xp8yW@ȓ`}\Hy_5_ Zb&WLMA[u!#z]p}V 7Nhq{hyQx;a+*<7xF Vwn*vd0PMm0bBmAnp~vA :#aUo.y#M>Q,ՉS@Q_ߠxEI ~9t*:btr'ZfFoP45z?ڨyeZ$f및 3郤n\ :Ⴣ,ڗ,:"Flp>س`cL/o?q9$b_ߎDr]woVG !}I^D~1۲M@%}I[ۂd*u;)Z38p^keb[W<)B'{q$EhbUe;b T;jrṳy/m['WW!Wr(B7dZض''SbӟʡCzэ 5a5 a^CBTqFږ}-fJٖ3z]V愮ϊJi;,ztgzl r[u+w6ՙOCv 4~%/=F"룋"H>gcz@".Hz+枸8#\_YTKd`v@;u f/+(ub^^ܘ^qȕMS#N$.zx~m7K]]S6fru3/Tc,p젂A7KwGl{RJt(0'r9[4(EFU"J4fےo*S\zQn dGڜaL\Έ޹;:"+ɽX=6_2¢c&Uͭzꝋŷ#_rrBz5bsz#myE,,G',kljy{?4w3"IHnR $8#:0!*e[z℔( .C%$ c_7>g/m$oW`adJΈ]U*T1FO~t-9|ȣ SؚS v589<+g[pdy]FBjZƊ;Rr ~Ia1`DK-ɘz<5*JN"dK} <8Ѱˡ+rwG/?CQAbLvGtdtR~ϗ~QhuB,f5h,Na>2o7A@Լh*欄iBK֟KY-Ԗևq}8QHd%^'ǭhղS? 9KU1h糃4`y4  ykW/#N3''{s}()jAkU*=3Xf!J%)Ѥs/;JSGw>cse{$X.2tANXANlsxu[U`#7amZF-5Sg Y5urTqqm:uI]I o4z4rn#+<ѕ$XLH?h5V=AԦAe#'V?ܐ ASr,^+|8;l,a<qɽ8NZ57OyHH#'U/Y]8jJv i񧉜ly ɔ[(?|51y/>Q{C(lU(\[OlDc/ؕѰ):_@Ḓ-J~?5[*j"⌉F1E܀X]9LurWM倲?m !1WWU`a@b)#lݑs;>gj: 9 'X5e>5e>ٙT3j֒G4϶EuC}Oz}zU?u7{6$SY1ǁC $MUb5ˏgEϊ\3w}x`{҄ ,NhW Rw\-LJTJGzk!;蝓`3A,Sbthr/;7Fy{?D<{q/m9偃t&rkΘhn6qTzLJz>_.f=++$>E{))9g%yTMmS$bq~“@Ĩ[1XXlCQGnmٺQgͤ绬ƨ}Lfcbh8bNCv~mf%Si]^hJ Ag%SE$% 3㡻gG&%YJ܉^ 1Eh2\uPv)RO[[ȏ\5)5vȍ8#Eq`--B&Lv)hHiŐU%ii R^9ӄ垳vjmSJ؂SSs[^~bY1r#"֧Ǹfn;r}g%S[ /5T^-q fG3/i^`*jB뒐}X؂T8okͻ;֧rޜYsA!}Q YRcB!6}I^DHvh(j<ҞݹEx.Vmm^!, ƠQ쀅lpBn6 TJɷ]y IDATWFWŅR▼E=:nKҋ)J۲vӖhDa<6؂%S`h"0Eث9.7\_?^Ǐ?~#svGI V K6XyxIQ) ҄h,j;-!i;¬}X^,XL>zuյ@!t7W,[s*ƿgǶn&SGڻ%K{UTJnQYR^M]Q,Mڒe%GB S==^ qɔ82oN]pZ}J)8ST?u}|Uiؠ[^Eє0'k>2o7A@Լh*5i_nX%HO^1;7%*a3ٗLQ͇IHLJW`athr%Q<؂ڸ|-B>4] -D =~d\sڮ60aBdYsC(ѝ/24.Eo 9I V=2Qnͩn-YCVigCU땔%(ca'6_ 0}e8  'B 5J]] "q;w ^LlM,X2b]pbZXl&8 FW%WrC 7bsR}|l&.ok48Nɞ>u"@ؤȲ& !b8 2o`!"`Ҋ?cǻ;Fv^;<L؂-XH4x? Tccm%8g4Gzudj# +===55϶d& b%wOX1"_9ӂ]cRSSVlxeK]{CQllj\q,r𠞷La'wd>@;#g յC VŮW&N}@ܒ0["t(qG !j匵f2Ȋ%PR2;35,_ydWfN]8 "t(+=#3%TƵ4/ pFrGg>ywle r%kc 2oN]'wu-P?PTn y$FD}|!jF*{ʡdJ֠>,8G9x lr(3b 22 gEe "t( 7r(B\* 0EP32OSR8;rxD֐+ 7PWrյ@Hߝ?50]wmHO,8OB:榦_爚<Jt82O^]Z wQ:;.gT&?%*x#û8 AR{'aYC-Xl"D9ga_샵-cSbr;!N]e,n`71%Ml6j+nH̨h1*,aleUUF>2X"t(c 2-"JFӀ-Xs"Ş>=׹8o /cR=XviǪ_nn 竧{k>E؝d*>##(wYTK䬶4_g OnѶ%>du bVk:v]+,xD,d&\9[_ht!O>=v9.rΖ! W߼~}J)< |Qc@3+/ld*q]Vd AKsAɍJ(NH)JNGr8#> -("$*+J ҋjC@fB6Xe%iF(B{Ez Na-B7RJt(03bY̊3} ##DDq\ՉK_0/ !DSK?&̓‚m Q)'tm)Q-=;sV3H\]KZf]9L(Bd@=:rJoۚSOkw9pWTt_P35Dt"QqaγO(lNP] DGHg/NHd1P4a{#ItښS vІw_ᘈr^]>jDl^⒌ٹ)QYR!( By$_qFږR=*7:ؙ +kvG:k6g"T;]TJӟχ* 4dBА#0x|qm܇モ{tH( ҋzjIԵ?Jv%lޗ%(j ,HHXZqm2Qr 8 =@655h4 MwgޙI?ߧ?9e"xSvuE ?ǞzQ?NMMuԋƏ._OxoeYC6<i#0?ye644z!{gG_|ݶ̠Z~@VF`%wPw^^F9ȝ*qan{7S8m6'vY땔%2?|U=YF-5Sg Y5:94W XEӴpD"\ѕKvu5<2WzF ԫk\] F0о]ظVffN]lygD _;j߯Ujlj1&;XtM7N/塲a#&xVZUcmS&" &z5o\g6oԮiRo# (€!r#7j@)klV#B﴾́``l N2 w/ck]y 8S:EI,5|]Ֆ8(VN*{ OjS=LڿE дhH:' Wݻ<]o(,=o#-dg[Op^ve"S#DF =~F^#jՌWM*ʲ:`jiIA[MЩ Slzc0aSO^ӤRRC!iR3XOOYL.}Һt0wݞ1({6(֨Uìz䩕CӉ*ݻ9"5}L4blFK>tS ,_*riMٞXX0J"X#V-(޼FR!%ICϤ'u]j_o(0!V8}{m{|սEm3zA`' j̮Q:jJ77[͙VC:4AѮCрBE8AQÙ9ѥFU(`)#QByrmOoTڥ̧¯ۗVd~|mf7^O^Wo=%s]~ `?c4wO?Up,)#՚mG B JVץYAjVNh!D: h@c3Xo4 ]s76XS=ʮ+Hϣ޾|=[@ zݏqO>#Xl[Ű =?8Q`)~0 +j'݃ T£ןt?7˭6 Z7 탘}DLymU}r8ky?6Qfeq`VqUc3@7?[LÀ %X(_|> /OOx~uK_ȇ?w]G|޵=urƺΟ};8ig|ogs 0FOyW@oDI"&#|j;nߩ$ CdKvm5LXX#<@@@;0m\a'zao}] 8,!a8g0v~v^8nEs{2vǏ#mkrdZ@FL!) J[;BD\fgm@,!~G.[N_hOSِ$ !MB"\mIta,lڴi$CxS |Lܨ 圵fJE)9`*zU2 E$E\t\9UqkRܫiXӱwj_fגL?Ot+ #iGw%K$˖c%:0PTk H4 ^EȯeHh ~Berr Y:CanR(U˹WԬiEaP&,FBw+`|`)&{ƅE*V#dVTӬFBl,۞![u[yU}IRYi,'wy.4L<%}[  Ьm'> Ga{@WYWY6+>˟y!FʮCX W9<֫nx`P &$YEe6f;CqyF̡aO߾ǿi-`)w( &B8]> {o~{(V^}߰U0``,FJ%#<R( 8}Q}ٟ9<]e$.?|늋!_mVYO0OS8 ?-kgzWvWw7O]{W "  ]_\_~9?|o}=?- ^ϲ7.[@Kn__ Z&"NV(e!YY_iyrˆJ65a06s#G*Xxq?OگvŐٕKDXki1H*& {)˭:xQe}g4|sGO88y'?+avxYg.kg 0',x ^+/YW}+v?ҹ>w̢zϿ'ay,PW/o]5kԾ-bj0X,p܃֬Cҗ|叿x#펧/>a?IAuu杻~L`/~ČgUۂcj`(> IDAT4wo O9w?̟Zb+r`RT[.=VKϜڿ(Acz˧p׊'g̞%o'ñPJ{(eWY\hVԾ$^LZbA#YcbR"r,@yCskW _8;uaݕcW9Ґ4[~;z3^A<|\d ^>޾역Ֆ]ٟ+xJo}q5"7c/hw*ZVݿ9\ B~?to1 gDkH֬ybfڼ"$@RY8s Sívar߁)S6?koxÂaxap /" X0wEV藸mU]yٟ[z=nyo\=b^ʳ^KyLœalVUtϭ85_:țV ޷/=xo}y8G\$cy Ug<+9 9O7%^)1X"^d 'fUr vqOe9ʕiYhViV`VX#LͲ}شiSWN۱-,*\b8`|W.*î3sy;%{\=&qqu{|@rkƹyuDKx(]9`0@f]$Dxo潇iwqOa^_'d honb,UK~"__7?SvV ~0Vc2I1@*XmrφeQ^߭xƮlAF d#2 fY dR60I!;Պ= cXҀUC_3ݶ:i=Sj.Lc5T0HY hv%XIv/ڧby.˔O*N$syoW4`ba̢6/05B\״P˴X,+b,XFe! %2BZ BƐCZlݾXS KdAҡۅRc@LSݨp7T/_f 1l"ei%X" FVk Aʘ5՞re-R U8eU"_Y0R?;XE "b!([ ޽ql"fklyذ d1u-8`[N±j#YHY -ӔCj߰HgӷxmWBрm X.Zt]p:V]肻`OW[o4-`5\uNխRvcaW D9% $SY&ʐ*n`mjWd<2`-0V3D2DZ 1io1p h3 ^!qH2R g)6?KZji|5LpHvasY,] 0|#Ea,|N_|eGU-hN3$*e+.'avU>zh/eeaϮ"EF(2%L( S(tܳصOPJKd"eLig~DE.=ț'OpM$5+Cm5Kwe"XJKYZS7ȑYcQrcIu,;o˳iphV{9)קYC-5Fs ͛N;Y޴ѫ.?p墕ZZa-]tɒ%;έ=X؆GßzKs*o-QZ8YU#l"ڕ^E~(5Ȇ"x<\Q܂ c1kxN>,i8 b7 0Cq Th mMRU-gܑ܂_ d!_ (eߋ{tCZ2˹|ԴtgC-vm{p^'dɒ1;蒫N9NP[lа0l5b /NE+ʍ͚qD{m(# 3 '[GuaC4jUv7 [vװglw SBAW۝KJv`1iтL0 Ҁv;$mEcW߻"av5HC~~&P2C ɥNS\]vG&G&fwIsn-UZ`º%`$s&>8aZ6=swU̙ܷvM/h;v5[jK'J^fl{HL2i+kUî,2v!rQ7=[+<]dñ+K/@ȏh! (pc1L"cc evj `J#LTZ_vvh ij6ưVVXhUcv,rEӗ)l (Oۜj9Ң|Ͷ2$ Z $[$}Y JU,Bٕ;/IߕI Ȑ"ҀhƩVNQD$XI͢06Q\z˓)kԾϖ`VcH9 Ŏa RV{Xc%XACn;'遭mTZ rXVJVZk+#m_-`V\U*DDF!QcTV|TD($Q(*X9E )Sny'yU%z5YÐǚ8 0|,KڎIhiȢEL{!i=g+V;I®t{vU<أ*eiq.HG}2"KA".Eư66yd -BbD E$$1B/?"1!;{ ,rF!L9Tݷ& wK2}|40ժUñWq0&X4䶣j)"l0XUQu_z쪰k+`FJy@ٝkAǷ9 vvRR(e"6%AqYeO2WzRnR"AGvaBb*P)XA>[02Ma@@4 )2*5]]˼[PdRb$e\IgىQ:Тc5Lyg{hY$}аYRV0؅-Tpk#X :` O Sx5뒔k$^%_% Y0| ,KLLWw+ݥnU)GU&рV=<ÕnT).Qd H+X8]B)bQ0I"lia#Kl$H!1,"EJD{˒*,6D,kt6QQR$@wjߖgH8 [s8\* {+ `4ѱ+XmGyҰ [*3|V[_ZHUR ]>8aZbBb(6Kf]VnU̕ăe)D' 1qIBZXH`Kdif6BRY+(m"ҩEFyKALeߑV>$eHYХ3S@:a&;o}jjd1KeZǰ).z+%LB.Zt0̩~.\8XUQޡ-uhE*\Umi+cfT"![T \ )!;3KDRRĦĺDqwsM29.S*wS\"S"QQ4씅,V4S %Z wҊ+FiK2ڰ(q"%DȳC^#,D IDATXXIJ)RX5˺~5ޝny~W vaޫBC)kp%LB./_>o8ԋVUSU-rrm})f`[6mڴ =I 䫢 s$WCee*d,*!R39f"_^`Xf&))]bqbj隸2)..ʄ2Q7qLTf!t3zȔmO vsLKںTEq Qlu-%ʇdu*D,ozԹE2cc6UE-\g|@% 2$;a۠*=4*}Jw7yƶjV{ށs`ZacuG/+{#kɒ%ɲX?SՐPaih,#LAkLxʮs,,%LA&attDt.]wQ Ww"t"%6IC`*PZbf b=(KQ1E2` p#2!wG$= ZB [:@rYuqM䤬ީ[;Ul".^P,BZ(KꕊUH"2 R"D}ʔrED&#p Cb`XF 0kWD Z&Bq.DdkE!bb2)uPTWIE$"CL&A Ly9Aa>^ f2p 8V@#E(>\jA ~1,€q!WkښbYRXMOpXxibq37Qli[D:t..B(GP fJP%R%pQ7J %ҊuMba6BdH\Bxzv/9Ai@`F!eJZdvy͓rk]iLL@rnU|O0çN-~꼪 ظaݬ[[ lXTmGyR ٵ5E,7 -l=Iv9rѢE0sNYS]`. `@%XmGU4[{KUW8˷%#p< R`n(i>F 8ULaYgY+ʆI YuM@dЕI9b>IUC$g.^,sK}26 'Ȇ-;ɦӱVk+UW@B+c)˗m ?EP֕aiSkj e=#7גu.ݚd*Qr{فeUfT{F(r϶"?q$=V5P=rSH& JjRj0}ɩ7e[^[ؽV1VJLVª^"S\PweMkj0GG@ؠc VۋPjܱj50]v*r\st:!$ds~XI %ʞbRF0ҩL4˥}*Gj8P{yE»eTqF,6rܥϱ<*Ea E'ah2=r;d=P:l .d\Sݪ NzlYe_l㈔|=gIJ0`4P-dyި3DIl.rDF[7?JwAh$,vaVzzچ_@2>q%Xa.<9o` QaJ R=s.aÞQ`6&}&37k; 2&Unt`qmY2[vqImT{B$vCK[p. Iaٟ͹[b ;%Z2*^Jq5dUqdo eka@r:`?pJpo CUػ==G!;1˱ Hò+`-Z4Dhd$bISmּjd2XryEBKQ`B XE3w9B6ׄB,t)ճDZ RYoϞP9VJ1F Kڋd*XBK_ı*t֎]&EJC!V@5qdJ"))lQ选DһXZ#c—NGޙ;d,`lKY-2pjz&[$IMtp="l/'& 嫬?Xg]Ͷ~!"s}8JrT>]a6 XX%EPAXX *@F@k@4L !@ ba-5,*~PF >Ri+)ngQ/N˻3wy|pw9dB( _|Q7^yOZFdhE ]ҳ-54Vh4 `X+XEyrEF-ܜ]z[ f}oi'_Q, WXQQ1TL ,FAȺn$Q0Ď~ h 'koD&r;;ϞMyˉXdEBL0@H@`l }w+|ϊ0ُ^XD{}C-K#jedU2eH-NGWc*.QQ>E8#KڋIzeU0R+l"$֐p'8PZ8=sEA"ёQ̮> k%0HEP+Q\Ei{, kI/F;Pe2L. L?ݿoy DIR&1nD/c1#n7F[oYud9cTD#>eIE컀f"1?j^4ϱ2nar cUnѱ+ 3i/҈uN AEH(˨Rg{K&10Bڐ1h+ 5Hр"cJE0 b4 bԽFAAE`U,UA;Ʀ6l^\/L/oޣ煙69幙Sӯx>`=r@4S_Gx%zɆ'>'qôxPc ߾ϞnfB@JDG" 'eDF*R2\:-+aNU+a:UvOb~:`v^'zac4~PNq@Z*O$O<2A!cXFlbYu5ѠQE%SR, x. zNى]AQUDUc(-`# >;<ϔ^ӓq׎Q߆l뮿{7?ͻw& ٜ|0y![Rš0wiiϼ%_˦:Uf3=y/5k^z evaJ*&e6,dvT+v'އͱr_^ʫZFa܂Q8B :`qqȽ984^r Q^XUE(DDF3i6Z(6\1;>7WTE+S!c*x(/G$.DV\t=M$b@FUW=_7}tW';,l*ǰA*JJ? abU9BM 6aƪC"iX,{+}UM =T'!&ARS4|܍{!V%0kبEƔH 3" HA;cW A(ލgw~Y[ҀHƢw_t!-:v'@'=i+Cr׽tM'׽O{ӟ7vbhHYUUrͥ,I^}˝C|K:a.\`E(4c Vk/z&]U͆zȊ%y"I|A*,c,!1d kc*B (e$"Q$XgP"1t$$e4<Ǫr',‘a ,0sx@<9 C K^-V_-dqO# &ͬ5kHTEKD2HF XtHR UIcXXqٸuG^ۣO Ƹ:?{#,%}[~tȜtcШ!ӯ戫{ěX?޷WR^@ʪ=Od1`l)9c>}.*"T( ZtiUKcVc' 'N3:UA]XJGq-bie@AL&R5WX8 kŖZBY]]#{7+6wzviֽthPDplT, W}"3X 0^o_]<X/|Ӝ^}_#e92,b1lʱ-jx\|+CFX'z~ށ5,Yo> c~a,dIEd=ĩr*_*?)2jϫBISt0(N|C 'b)-#E䜴f1 %ҊİDKů^ˋo\?gP8hШA)ْ 6!-`ȘD&L^̕t anw}W~wZ⊎@L6w?qo?u߹/<;#E3) " j%xgHޑQQ>䧻? 18"XՓ=7Z(@,8• Nfgd_!Q@%"# @lXA;,CHH3$"M}re^~-Hvc M4hTlT-b1M24KllcѴ)^{^12BnA[M/"c-3Ry-|!o=^yɭk,e,|A$+5Xua)ghxoQɦѱ+8}Eyr<0r,_pU "\UV!v.a"iF"b8VL l*=Qa1%2 Q0{>]y߸ lUzeW+6 vI#eP*vG_udCR/JY ৷ϻgon^^_Oʲ\HVِc\:s{rq#%iFaZ" !%X]M&{i ]Uإ8]}3i$:V 0M5R!A%vvBWKb">?;\FX&BMñQ(mT,F \>YU_lk  /n]ݣdPűv@$+*g,V|⓯yǻ~//|扝 ,[++KReK~9} cC 0jy5MFa Ft, h/ʓ4՘4vmWy>&0%%3HC H\$ (9- iuD||o^oXCņmpEX 5H WWAޏOxm$ 4w SñfHVbI"eiJY__?5wevaM$k8+7H&V(XR}ilچFaƨD#Kh8o-a&BdϭT!VR*},WJ<*- n>E, CD1KLi8Vt4U.?.>]ڪK]?ZvR3]ԯKFߔMiAUamHڐ>gŶ\qő꥿N.Pq0ȕ`JzI&]0~J }{] >.dkode"mU7Րz/C`?=`Bc!ݩ.*~9{lx. ar e f\Q2` H&t-ܗ[8+{s Fm a#V⊰1 ayIaUX[>?9'^ww>l?`"X/ecX?8ʥR'|_>w7v"̔İWYoj\aROVJ\OĩxϽD#jpiE pKڋ85Rިbiڊ [M]Y-?P0D;D3b}KHi]B唒?,LrHey,hٻ* TXH"`׀XKQAJWl(W^lb(6KUD 5 6@s|LronBD {~w]2}ΙgJZJK!oρ2*#J;5|cwRu}-@ABT$R/cqᠻ @TR -0T 6Wo34QaXwTn4 FH, ~{(Lc৭M%k0zM髬QAZpbPL[BA)"i)Rb)d)ɔ(MyW(ş95_y/?mC*gc*gci5ؐQO?S9rJyS ,RL,)v~AueUz}ԐȌZ*N N@ =c(%=匣=RRO>mn u A:?~C"أG9L0BV GprObm V"D&7F/+\yU %&+ˠ,#e#܍#I)cV%&&^9&x\Hp|G!#d?ZJ}wxʍ;, %JIb&]HJRmcƀ]kcGs*{7NJ$+ Efa@+ˡ$C_|}ؠ>c^,BPR0A*#.B7xWq:Lej^,HOm%{&XXUjB_eWa2T'D! IDAT FrR@)IX cY*98r??__ SD I FAJ5dѕ[,W_k{h㜗okÔ #`*2jL`u&{4$ЮI&&1TXK"ŋ7ᇟʴIA`*рX~:z4%y `,($ Y(ªKlk* J5K#fk妯Yǐoay,oGٗP$F'HF8&F@OWs${{HyBsFp]'b;>4芘 :{fz B+'/bv(%wr0AT,2AۓV+%Z\A[oym_Qwv%H2a5b,JPY6Kt* yd&,KRz B'%XX Dˍ݈fDNdDRP:MW: ;=뵄 RL$"b$;]V;3y,IxL,Xz=$J=n;Lu;3ᮤt.ֿT|)d߮<)A{>}1POSY0*%ZY] A ؾw4UdW(1#ЏmWB+L*cْYX٣t[&XXU7"ֲC P ]?]WF[9^BMYQ$ԷDݥ=gB`) R _"Gt .TfU0b}isNөqid `<AcP8ʊ"*70 TTCD޾ }!7c t060+#7(u}+X%#`U`%.JZar+k" dہPw?`vdiHK۫קnc$#,IĂSJS0x>/ڍIluY>\NRRx VlYJ6 ci)xtiTʾ.P c x+|y(b nrABnhbMwVM9\%XXJZ s:AA*?XiZ)y̹D +@2=,;0e>5K`bfN)Q0KV./}w}u_`&v"N.|l̷bjsPV.W |MeYtdHMR[D+2<}ŗÎVl1;Th,Qr 2DƖR6(̆tk*Ķ+J2vzNc(CAh @,f]ƶƘ5scw!3H-!I,dϒLكu. fbH&j>"I%l`V >k?vf:T;D%3H$IcFbihII6XB7%5R'Cb=H# -R!Y:]wgݸ{)%NlB txQ`}}rVp*,`4`2='{]n{z%n假_qߴӔX|UK0}Q2Ǡ, P[e>7fڋ0'6UYX%Zn-OΗ==dOfJ?QҠ9G#Q[:֒;[{ l8a ! fAL Bpm^kwԭ+os܇}+n!U͟ R ;`6a6X nqKz>ձT|Lfc6 c ;bΒfdJSO;$ l⦲HHpNTXbUުl V̤b6ll\nY@% 1Aa i2jXFDbΩԄ`vgX",`3lbl dbW˂Y)Ppꀻl*8(16XVи_{8a\;9)Ív,dOiuGcY+ĿcmM%*`[rx$Zr)k# K^0&wߍbgX~?&eq`EGஷ{BulY"\`vqnSF-9lLZ3{$n @,XYf09Y zWBóCZt0+cI0TA2$|Yx쫩 fͬX6ax+`tbKEg$+H.XNɆrY [,toe[\K0=WnXRiXfa:*9lUt/w~My FE}}v{^u+gr;j*4iЛ) ,$f ),i  *ΩAмaHX`Hcd}^K>nRe2U9 - /HЖOCbKpIgs;lQ2l#-݊`׋„H!?#we:00m:2 4B$P/c .x}H(TNP)P2I 7ϔIbپQYqigUtfM,ڪ,X%ZD= *AJ T'ӱP>1+Be񱉈훷l+FhbG7qj;bK/ v}?`>@!.m@WA*GҜEhi Ͳ<+@lY;a)x,_TA^laBǂr~1x}nODoӕGb^c^6rRRȰ-J,jU`%.Jܚ{z?(M '-"l"LU3b#=탅`ʋ]Z;g憿dkC5x277K!b![$O!-I1y,<]d`Z%"0yg=st!{{o~,GasieR/%Ʋ޼I,Ū,J*rk+O?kv9s*\+:faLMsJU9iИV_|w1{lYło̝?gMz&ҨOb1φr2Xf#8BbMec,dҟH%Bm%VeV߯,*-o^d.Xdrak1lyXm!]YN]38]Fѭ&pt˦F w,Ċ] Y 5 &bObI#-XF fHo Z!8nc5 =FG ;}XS@j Ro:HjF,#E؝0-e]y9ao*̂{e6Iu*f*Ķ+M[+2A ;HJ,9ńS~tv7ja X+5Ÿ.䄴pu }VeFÍ* )0 R̤h-C6%Ԕ\,BW]F T!Iqe}w NGAwNnէBϱĕbBX~TG* U"tB\,eǶlXbU۪,J8ʲJ+?\dg0 1[qA<l_=r20Ħ_^sk3̻_͂@kOj !ʒX;|?R$`Ĭ4YsV̓Z* &] Qa,$$ -}r!P(w'axs<ϧZr)űUi^@;ЭeEbO>*/B`VY$\RĶ+AWeRUE+>#'|)ΌY$Xee|0 ;p].gKQ5H= A.PamgU2J+vN.zE!R PW,XGH,tx ' !YXj0j!uf#GcDj+hzEb-qvԱOH,: <3,4Jg6qSvƐX[rT]-]r7^X+-,JUeYTAt]zLX B9Vfv֮-N;hȉ'P ݴ{WR8;AW:԰eW6$+vkn{!!+KpdfE dmA]f!r&Ml+MXSv=@sV]{^sWɉ}~ndg]:ȦE3^yS=pdiBLUpU0_391h\gl#g0}g. O `U# I`$@H3SJ .R$ b`(P ATpa2nplODPHc;Mb9 `Ht^B UWA=LD0E0 6U._Y%Am kJs"?C/㺾Sv/TFEXYV' 's"Wl60qBOCA߾@C^g~ q}#x?RDs'rZV}f6 {UBHG Z bqX$gfRrDJGP$$e{R 4$CEB 4-C tQd*`-_ˉv3ZӎV| g~]_W]!('D E yHЊbE1oR&̲ejgaY#ʆY[O<_XbkĒSfiެ;mrtK߬-AWeRڈXvX1wD4֘Z1%ǷOaImՠW޳) -O5HŶ9+֧T\:p i١B"<TX2XaSaXs[m׮YPJJGbA}fIRHJb6LZC+6B)@[UjSiHJ]P~Eb_3fՔ\_9O?`_*SpjXn3AQi0p? IDAT #as"r4W&*b^E8e★^AY)u-\,s4s=`bY:f\zJ3:*.0ڔ;Z*p}.6wu:DؘS9-6jꑆ+R`"@eq 58<=ގ'rH `C҃ =J>99 IdZEhUB5.R'I]T1y 2a#@|.N饅0CycAdrB2O0f\I'e+bVF"0ci0Eu~Ek2dZ"s O:;Ҕ˲jf2%K ]B0-ŝ6hshN>'x믯]vT|8{S;-{4l!!Bߚ1"\`m 9i 6=3 ÏmOmW6Yt|<QMo^4>O+ x`=n9*v~1U 8 RO иJTW!w7 pV6Ux;0dž3IPQY:^a:KBY$X) @p* X;R!CTo4F)P?g``ׅ`1HR2G>zOUiSTf?"%-[,&|ZMHڑo98CkE?g8۩/[闺_uSf>[nz@n2Vj_3?g钒2ќaeYu?o . OGE,`['Mo{gKJv~wٳ:uuA4g٪<[&^=e2q60(QBżNYϠR @eX 4"r0q69J% L ÚP{ I @vRWR 3 Hh:؞ȬmLlAlm Ӿf'ќ}VVjC0.+b#E|'~'=9FwYy~L@eȠ2k< ͡['<9cKΔMZN蕦,~RpJH)́jr !URȗFm(U )ʢiRRHzZ){"́q#t >)vtj`h ͠/!z v=ExntC.+Wֆvvgg_Bu?;m[|OiAfPL }eh gW>&FzJʠ.>L)T(PUAaf9$%Zj`IM= "@JHHHTB$ I)ԅI0K0X0IRo l)rGQ%꾠$Nn<٦ e;aleu'ēX|BM!d+trPq* )dvMB%YlS&κgzV СLʲZ1J&]h1?=OE xn]믵!3,7AEϛ10p;$ anUgK_ tKyq%DӒ x`h8A ?p- v8bP#X !Sw0g$m ֋)Pر2Ƭ#2GP~!;}L4"s^r}u+8 .Brf&26We6MU+}+'Bm%Ve+ṷV!%5MG]5ЦV&GYԣ4APz>j~ 77stQ EsN>0KT:zXait%8f4OJ3`JdJ)|:\SJ1S$!OYMe]T#o*ւR[Aqs 3J~$[s.S;c46 N.E<&KSE ^.r0VcAc z+ Ҷ,OkUimdQ"4ؖ`U`%.ʲ(gKiB~IDY. ܩίmiv79Ʒ@Ivz冣* 4^h@~d@} g>/ /*(##1 iގ=rV=|Un/|:AwOoqz//?JIPsǯoy"LxR+IPyg)!KIDD`fChw80cA8eAu;ʎ*3/1 AA %Ԑ+HhY" e ڻ=̂(@v͘MGZY[hbmpnM5Gzz"ͅә@YV3vpصCo,q@+'V:ЮFvYҕȪ&B<.9[ojxX`ᘇs]?e+O"[.=Hn=ϸˑתD*Nc+NaPh^E_9q#<C2b*s.}:qMv9Z)${Gi$)*÷}2v3i?+&pM8=d-Y/nvC ^`]'(kKu҇䔋y9$20 (…^4Yq:6(6* ,Ve*j*XU%ee' ئ=z_=E_jvf;hjR0NufƗ|0M?}eN{?{%ns#1'BIKyYh;@> `́3 =|<5㛹f2aARD )( \JA`aSd)Xp*ED,Jin'ԨH `WK6y.O3O ]u,96Ǽ^N9h }_n E]|ѱ?^2KMVm['5w>Ҕ_(v^n~ίs]#dWN]hڂPjI*^;@{DPZ0<2XfKn=n֍Vz2K 1҃c0$X< &!&\eΗi0pUj[~08/|,u͓71|@׆}[X8/X)%D=9+ Ϟ}5{=k?)O~+l$6:v$YJa f3 Ķ+ʲJ3WlSuV,;͚G0P$R4oAi̍ͪ_ n+7LB_4u!=p|~aT.{^)`{㑱sԻk^-Uۣ9^ eI @cL ?Bi5ò<!{LR`Q(3:|ؤj#rXj(ƑKI Zc];W >gE= p͓hw_wƻOŢ7tkX?~7/{~`B |4nz|fS./(8+p &rM[BZa&ìVeWZOwXA.eIG?xg=tw]jִV2~p[Ǫ+wD,BW٫(hvzhlDj'!Xo{h7Ǽb^5Y\t'P;flC!;^Cu=:ίZH ]>ZTJ.!"aBUeru_@M +|Ȥ'(O/,Ik|obdRt|XQ&?[)8+`44Vqg2Z-τ+ғJ\v I{b[UY+qLjȿ6zn!Qkq~9idO[^R;_xt";̔ '^oKV7˝d‚f={ϧҪ P2g0 k߹ӱH 4;W7dE<^o.)t]ϝƾͳ ;ޡS?2Y}M^ŒYS<I01>NOb`dª;ˆ`v0Z"0/q'{i#>{R1Md<>iǛvBEǂ=tK7g Zh hB fȦ3[ZT܃tlV"4VbU`%V)[3q}6*Qt /^G^qLkjFWj\u k:`pZ``]? ){e`ݾ`/ȶY"sSG#R!X d]H(/!$?2Y[$v1шW6 EE;Wc\HJ&Z?H11HHH x$ e $Cj)3ǒSw$0s\Ƕ _զ}p]׭^mʈB2 {\yv{an*Y$ /}ulkm~sv=˺Ir,s#tV49u#&rkl[-JlKEXJ7d2BQn?;8;{ӷvu2 D- jXwU*~L&8A MXv0ۮ0>;hm*P z LQrVR(z5)(eU  a6FT[D X/G{ v0X4@`WoK"mZh,B?|ȤCjPثUoMZOѠ[ 4{{:ʘHyxQ=j=2zє?nnj38m)k-oE~0r`smы䏑y#ų3tbV찀V.J)};(;%sÖn^%[eRzT5b;{+&7?7=N #B'"*|6oQk5617UbƊZT`l) HblH3Xs6&v0XoaJR`AK$$%`b%D`E&&f9F?^lZIqEؒ!~CTk]V/sq[M{WC/y0|/=4YQ\ Z$1{-m]Mx]vy-/Kpo聏fGf~6H>Ul&-XFdB/ר >~p4eKgq>*/2X8p7[K!4ZV eclm .ëxYu3Il+* r KZS>+X1oChp iW{SgCƆKK~us<˚8ڌ+:]y6<%Ϗ={gGWLg3)Dv`޼aD $Yb`oJ-'dqD4U ?w M|nqJ^{|ߓT`w<;)uyb ':a|񔛮:ha3Q%7䄀[\ n14DbYD|r_kr&0̖_4$|~y/pEiѯG̿(O!e&"`EZ;v7)˫d -]RR?} Y}Z.+Ā* aXntljnwn$z6Szhv)4B3˹'aҡM̈́bB3Xu k?]<1>xηǽVr9:k6rv+ccuvvݞ&Jwvހ`>z_Sjͧ?;`!$ nxa7:I2Ir]oo70|y '̘0^?_ymo7?/ب6ֽ/ BjmmRJ?xYT))eɀբV.(~qɁ;]M\tO{AE+tԶ6^p#i g&s jﱯ'qpUZ tI#.Zb߶+ H2$ģOw4 'Ƭふs:U, ܟ;eWLH1K%Ez=c^[D%;~>K yjX`ՌkKUo:TRTR T__]z)^n;!~I8Eb)^'/r#\!IvǏP|ۥMnӹۜEt1nuN׼uɂnU-pa ;iYvN=/)3N{gdh|+[tG7~[/' wOSozb2 (NmM^VԽ:@CLX,)$C,2UӦ~m/}Wejj ( cNb@E! [(a./3^C =!sHT5JyBVC*S U+=m_h'w͡!+ٻ~{ $2'gciUm3 }~q_L;Xj={Gzɺ),JYJ/%w;vlĄg>K?} #Wao^-7Ň}P45"Mk E IH1IA)& Q b& /7ڮ}2׻fԃ c0IrpPT kp |\;.8ƚɈ%0 As'<7TԵ[ˉ+.Z8D'r@Dsޚ腂Bb mM.r3nҹp-'~~&@(:~рBP12| gca%7̖?Fͨ{VRuӧrؿ۶ UQbXEg^=A{]դO+ҋf4*?JSN1.}8GO;~rKzN2QC ?| ?1kA̲i\|p#vx7Ϯ]_>[/d+pQzsXE# ~XO<:cCLXWTE3@z%]bL{ Ziհ_GW7XW̘e9k\KjNRoÕ0D)D{wO?Yv~ѱݤVbaLJ_7ڶ7(Ăbb0͙`m1z~V[8Xϭ:zp ֬*Ax<3sC=7C=?jeb~eA=NNT|&@>uYǨh@;بvʵSr ѻ-Y :{vD?¦Kq;-_hxy_Ρ'bފi:ԃ_{bvp(1 5jlc}nxêT6Sg0?8դơM}r)]Ѓnfo~a_hz[dJ|c3l` jvk;=Gd`1{vTz3GE/:(-ZOAS\͹/F@F3|KlXe˭PL;o{ΟzF-sebQPF+' ISqm6 {hƷ_jߢef9]O|%^J.<%Dzy;.4j!ƒfka:X8K35/YjK ,Mpi'tm ;ym3; Z`l3"51&T/o,g?z7_ZcA3ú›Ygy{{<‘?F-XbV߸~6Sv!;g O?x[GקM}|Pq5rº μl#sVL_F[ >n 3X.r{LmԵ'휅_ojpd .2-N{->.8~SM5)([2WdZb= 3٬K C˭/I_^=S߆glߡrDc[zYe*c[ m~æt=ENOHOȜm^ia{..'T%bԿ zXYI\9kJ,q(mf!ӣ+};Vt|H{sк{_R|iЧI/u!.%Ͻi)Rғm}RpJUwMGJyp"|qzpxc݂XŅ&KSxqw˭q;,c Т{vy9(,[4;Q{TS\c )ûtku᢮CF5MSz>lj]1b U0bqٷwakwD!KMQWn9" G}]y 0of4LkU%VAK\etAtSߌ=ھ~oz e¾w2|S>:`s҂qpI1j:[uh{p O\+RuϩB 7,lV!oA< ʲC~w~_r ɵ56XמaS48g+0uMZo-2p#٣:Uݒ#&k]wU{]xla yɿ!=C1t_ҫ(կϒo.EN *lthMY?rh}{9eAݗ:3@{rZCA.'NC{. 砲!4ʙ>%y2XUE;|E۫/=ayɮ]Ǟ"}7O!/T`W/9a`[r~E\5KhxlEwWW=.c/5NJ*mP|_L3>]~=7zm8 gk3f/c ` fX %_y [N3(J켞wɦi:k%_<C;&$H/SdsOu|u,w+=~}1GcLi!omU4G:vayK',6$nU`%.JZ)U΁.9׫?ix]v祝7~\} )Ve}"g= rb͉)'*d}.噞UCfX}zpKe *~G7Y4Ta1L;f5.g;|b`ܞ/lgƫv|&{ͅO~Ӟ<M:7Wr/7/[􄫙$O]J20vYJ]m}25pƘ:[U壦Y:yu/Xe(eԮd.o7 6 q`̶/LО$Fa3Ndf{XN|iW-עKT`Q7`wE:鍇cݞ51q}Z*A";yE>ꋢ  :"",7Q$#̸4;nhE8_enDeBQ1(k"vTթn7}>~}9TTYIK3~._cL&C~:t*&Ǭ6Q6 lVoq}`DbA >w߷ iHcj @o{~q_+?U9ano *+V8\5qYE Ҫ3ey gnfqc2E9H"}{!, 4S<7ɑ][-jn-HZV,``#ZͬZhd) zp嚢`pp[U6leK>S#դ&$A9ar䈟EySX`"JDI c4oC׍)X&Ҷye͹3V}/›޼[j3Ѭy17\8 DY?/7]Ko-c cn'$ma'm )`(%_R uNC5 =hYA(@ %zswnu*0Gۋ7`g`7znqǫÿ׳K8 ĔJ;3>AMJyJb9i}L>r6m,پM#* +:gz_ c"(1\}YE%VS >x7yslu s;?p$v<R: f79' rMݯLxO>tWr&Ϻhւ{ނ-j_k/6e|pu7a 62|նZ<|&%6hz2qN}&|b^޶)ioC_7K'0qNf?C`sй{~{gov`w;;?3׳8~a; D*hs_أ-v.gy9s[mΟ9 8 ,uwovCo;- ׶^xޚFgp2[g}jYR-8@߽h|-ޓQmeF `G`6l2XD\ݛuXvSˎbL #zl}K~I;;B_e?{@<}k`W3򒫑)yD)3<ǣ7x*䊉w<'88/761-| `8p5Y+ҕ'̖9l0Ў;͍unu}kƶXߜOK3.+_7seq _pk'9a8ׯ;s gjrQGԙѾ:™{8|"} s?[C >b~r=[5qwN O׿cO_x>3y̝[v)l}'{VlMKz/};|;OdJ*f&V`MD[oۦ,mRې~rdZMHc ɢ_n6~[uB3;w^_.pNZ#U]8_qT<1Aj{>n[zz\?z/y?}#`r>^r DG+W<!R#r1OҩRT֋LrW7߲uf 2ڮ'|xuEŗ܈oz8&,FcwGN8sۋfrqY;j}hOrw7ƫntUK  wO:mV|[0| t.gɛC=g^0Wf$ by<.HU/w->޴G/\80ħF۔X}߇Z+j"NEu㯶yŮ?=rĖbʎ<=x,S"1~N_|~v+z6/}97T ^q]7V8bTyUr™\|ȯ_L<aqd}Ϛ#\`IӶz{zynw-OUW\~c ϛ>{o`ӥp7\%|l9[O{jcpXbY~+콳vb%v|ۗ܎;=ܹ3KnY+Nx]Yxj/׾ʌ#lww0?b,iw8}[_sGOXxfOAsfN- :'6?f- U } `Y/Yz缫Yoo`lx# ^t4N9 m~.gv~ho~sKyw^Yogao.X,~Tho]MT@ F{\ؔXX'}Ն\D UvZ!ȣOn;Fvn"Ŷ0G+Ql N:BT&";y T fua IDATlmt"q?%Y_7 :@X|{fm=ư6?y74^x"J[ IvY3 v`7o4Cn//Å8I]t~ NMOOW@DStN;lJպ??z&/ $w) SXʹ_O7yNbi0k>hokMYVVDK(R2uwi@j#2Oµ k Nb׌ďrLR,YG=[UBςH=yJUM*d9&J qJlh` t^ G%*a <;Vyg'Zڅ!d!LdcS'1lpn7D`f708+KȘ 0C RP.| ԕKoy93%WF 8 f0P ZEb(Ƥ$&;Y-+c3gC&1gvV}Wb\s˳^kF: t,&x9P#pS3q婆SWp5W5SD+UU͕ ƘjUN,Vy|cSmBJ}вg͎X%'9F_4YkY )YIa.]WUi⦔ɽQFyQV(c\1:yލI,(Wwؤkv &0 ȇ6lw8!3zɋ{ ߢu(@J, &HD;Wp c#`,v'bG̮zшLkH5HĤ/Kc q8 lcF+WH(yX]yU 󞤓P TDo; jʴ[* /.oK&ex`.YV6;7|9+5Y J]o|5ؔX=o&+til;l돜p`!t0bE`a2g <-iJK([iiv rd / /']u̲֏_>MD8 rokQ- Q!QC:7f) -![ՉCEa{-@`(CuĬ Ѽ'qn^ݡ꺪X4sו1/~(Ws8\=GdGGF*.#XIo<2Cֆc7*ٍr5՘ʇ$X]`=!, W2$V!{_xnz;/=mМ_z \]@[(KʳZbDv- qI<#W!z1hO X-p!.͢2 "0}w?4 v Vo$PDEz ](,/b, P !S`?~ʓ_ǞXDbIC$v OB\WFxPqg8I.*=#9L#u 1v !0j W}ŐfB.죵'M$Ut\|@Mak`+ړ-7]ri)nP#` \PuĂ/B0;8<<cKwPyٱ83sށ=L v h5A!8shuLM%~W] ]}m ?uW@HC~@q?oe/H|!UnO*aա`6YҾ2S^?p:QZF80`q$Ҕ) fm+#rX/ؔX=Z z.OiWƒD]m08fSd kqj%˿}.6WK1PP8:zcx@Z{ñ1SR3Ԏy瀚k+TՔeKܿ}agBFL:7b-%7ЕpWI`OdAN6jJ赉vSouO{{W{aMA)/Kz}GeO`Tb81-RK"uʒo%Ƴ>hokMYrٲ(URfeZ Ҭ0ԉcRʜT9xAT 'Ϛ}[> +A*KID4b!0  w &4,U #TJk䯢B,LFĕt=rf+UB%&8 +ik2xq]r+/YgĢLFF(tgx|C %(90Se"kB% XT+] cn^tDWL]AY_CKի$N0)`ZJ*ث_Ûo%Oo:f g q﬛ZTZȁTI6)eG MÙPWUR0i *f0M+aTn*/r< 0Xh5Ħ,~ eVEl 0: V"$ JHS+ @xO9wܰg#;CZV %+X"ℱX,bف`$C#razEGvaıNQv +SJ\>Ȃuu+*)} ,I_{p62rƇZEPH]ŇGóx K5Ppi\-5AE *Zm0Kob>hO;Ք i˜p?! 7z V/.- g54|6N0Unct(T{"|&T@@Sӏzݱ' ?W!TS/+ul}cȨ&(;&1?Hܼ!$±I=ȅFT,4~W@W6oCZ(+'|u~ yIGN3UĮ' ISdՐ>•V@gieV !88fŰB}B$Jx$g,(ƪ1ZM3c=yM>$Ɏ4u"-d<;%.)*|XL&Ud+4UaVOJXYz׉}zD7:sUif;F DE-cý%̢<iQwfǬZ8]"쭷`H"<٘Dx9V|ٽ8VQЦ|d>yyE0l%mt8)8_oy-۽6 ENTj'U.BxӹWRT0.J* 0OIl(ҁo[F:lY$j1#i! ck "ƚ &M"pZnZEا,4VGa#+#[3<>僿'd@:a,080\(%F֪*۩n'cxQʚ>THZݭPPvp*uKHӐ1+B׳SBeɰ8) c EqhP/qȗf` @¬z|ըYAD UCC5x%ipBEta ;& &MYWV AS+xV0)9UxbGb!B QԿ©?_xi{̂x,}L,ҘXTB(%' ]'붅ҧ \NVelQbŎCZx1a,6 u9J@0KRf1QYc'@Zʅz5Ħ,m%[!bT{epYJZ8e2O,ZKJCrňBJ2;`4$W7|W{%o(0V »HeU⹈=z(q$4U$%PfЊUj28 ^9ccAWILx)o2m:q.Мb 9` Vi -jY7,80wbG%ACi}aoԸ2VV'R[P˃PjB Y#& YI9Fzt$iH#aKm:+YҺ1iL Q CbRhL_P^`xx +BaSFM A7:p,Ui pfPC((CI3򏫰Y4'(?S1԰ Li hKB"|:_|q1c@BuQ, B XbCt yW1`Ll6*u`/U\c>kn6GnJZP%)h˪jUT#eU]̓HOlŗ6qU(#Y,Pp~o KsD>,&>XM"4q)#u5mAz5A`+c W8y^gNw<0MNPw)e1P%ChKdRkdZ.M4TV+~4yJ͹rwtM̙}G,yz8i'2wXu@+CYŒ`eX \^o0q~!|U ̒C4w%*+Y+% M$m"{mؔXoeظu6+x:b 8$Vd.+Ha @!*s6'/׬<.鼋s=povu%!aVlliT k%4ʌj-Mfrݔsdd80md9396֧ۃ<'pM[]y<⤼Ykn'.?FN*ˎ8ēVZW|vHn{JYUj\2OZE'w hKXvop]ztQuS֣%oX9NhX(} {j<߉"d}.9Nf۔X}46kE_4"<ŚH+G]akQ-P,2L>`, *E!l Ƀj&ϜKpnCbkN`KC k˜Y#e0*XUuyͥu a$X3L.O82dUbxjU"ʠKp!'h%e*EU9\W^!, m#eb؊3H,#i`VO4b, !ĄDkF[ocD`[U*aQUɷ5_y/ BjrW20s-"1ՐjH\UlEʕV3lq<,UfyBEWt_%McMvqUo`S`a&V58PK]2^aRoS ^`,Y+ALrƂҒ/e߼vOt xX)YHp" MH gSʲЊ|{ZqOz⣇;硇kAWQb`ѕm!ݾxI\ >Ju6k\h5WثlR]-c^ x_]FeHRt%х,EC)D:`oV`-x[|ʼXt=?gZK&ztl0MB$FbTvagH. 0YGɹVE X"G JR˜1wW̼q7E*2x(I 7f>*F<;w8qTv*{Rd%٥Zʔd0(-gARqZmX6YyŻAXٍ\ J "&%m Jv{dcQZh5Ė}'])ϟ?tR`ѩ?{?uJz[s5~+ۋ8A\/D9Ǡi:8tH@j^_|}yEr- qy..u^nȲXA&Pf9}/zgGWlxЕy(/`M}I6-]vR1Sv_TXGy`\Q48'p}'ڠ>!`x?Un-6!27|KXtU{:ܻd⬏"\~:eЪe 4b+X*{s8@T ƾajpMl7͗x܍]zGe(BizP!IHk:hǃV欿rVӥp3J9ݿ @1T=쑾 PKeZlrcR*T&5_#eClhp^fy ᄭy6{I00V+t6p|5s$XwВgϞ={~~ӲMkoN0z1,ʆn"6qւέ+Ē𨀢ȐV@d-Y"f3 cQ-)Bҁ: -*28hÏ{] }E[g 95VDm BL%CfU :Ox{]ϼk?;>ǧЊCH5&ux+.3h-wЕ`$[O(LUK!U҂iC;Me&ƢK{iv܍XV{zxzGyd\tv?gҋ~ρ^W u'q뭷mKC ǐFua8RhV"pgE 5D - D\_Ӂ  $ ĬP`7~ox7zn?u"f-s {=/O?h`rL_Onoxtt*뢩a~ >A.hAs A^H$֧7Sh_o 'l>i_O`qK1fЈuǨZSs̭vCg'~SOv=[羟u̿N(SڜwzG޺ܠ>:/{>ri;sOxAflYF*>peBV0xl :)‘la30JJB Mۮɱr7H GsWw&n Q &qC2H qe]/ynzf2`a:P)˶?gnն_'v^5InDP%2jʂԊwÎbM u;e˄ܥ]ЁL?Hd KB|Wg&vcg'/$.t'Qlyִͦu3XzõwM?hڌ8EsfkY2q֣IbF[])d)bDq;#N\ZEE% N#(`$iZ 3Ѕr ta~ts~tsycmoȣxoۏxN lк9j jtm~mԧ<=kv>܏kSrNoVc ׻5P7 bYAho5X+x7lX735Pױ~f6r|yU[3cA !ˁ|fH!.5Ė;MÌ9<ٳ`˃O7-%{5mxVjpuFXRFbiv xLvrwb,"4SC 'UIYDXHaH,._}y_M{;Gn۷om3oLVH)1vu͖,ն ?XuSBV*pUװH-kU[*B]ط ;\8Up0XQ7i .w_H 8s 픝Lv!L <\Xoy7o~yь9d'#TIb={rRjP(;S5NgƠ>cuU &VDr\`a"d3Υ߹ts/ns.__<ɽmr&>}r1r_^ϹeJ43 @:S2ˉH]y ;gG")5]Ü u])"śȑV$e:a&w;!rECqOWJWb+}SLlr BᤰIҌlW^j" %k%0Vj|9BU흘(PYȧHe6K@:h(h@%yH.#i-yDQf=UM\US;d ](0M a$AWib 3WQpBDaBVdEZ`yC HClBB]З(SyU*.㌥d^l"$`6 l]VD`+$2ta,0=b(`%K&T4*g.E|(@E*-9`Z YIh0LÀ*a[+gG^`[?jZJ+Yߩ]5\BQ1f09r\ TYt5n@,fP^L%l ~OE {=2KۓWB=H $~JN}UQ ߖ^u5,mNCf%r\Z"9oq,y2&s<`t!Ucmc{bD@ R *z\9 5h帉$NaJ 5f HK8-桎TH<I c#j0VXAف&.=vv}k]1'$t-Wy{) ztmIkZ^\:2,s, ZGkdNAlVD(0IJ . hp2XgU9>K + A]rJDZ J WE8gb]%O,!Dt+qbB(7bՖKbXҩL /hK`1<1|Ӊ?=1V*'*ˇwg[ Sa!',<#mf@;Ek=}[) z6լSR0^Da:@T$4PdD&Yѕ $PU1=R5!`5U˄ˇJ8 jZ20e\ΜSdd(U?3L$br Z9W*"88b6-+X]܆]6[@Ζ\Hjoجߴ?a6ղ fxuɷ335l^"@[BaEGӕng!1xsbs.BS-d'DԞV.XwDxuGh66ke5?4ҐpjUݜݵ-on*do8Y(!gnr0fd()98H숝DpR*/u,\6u&Q TwPJ=\D$ 4fP Nk#& p'd "\fj͘3[0my~+lMGWqA4Nֆ"9M+TV̲.fCd =RFTHdYRS9E8 %qW`V1W^):}}4U@Z[5f0Jt4Acr@+|Vxe9#Yq#(3'WrD=1yGɓgb"C~T)' le}C*(X:.61aovD>X'|p5,=+ :،Yew8|%cq?~pbe|+4˥{$6ju"oautչ'YbbQ= U}%텟V{wՆ7)qUq.k9#THZίUʈӭjq+Wꑪ?-pU9\)aˠlr %g, DMy.@zS~aE.6!6,7++,NJ吗o#{X&kBX%N 1k}2ŃجxVTC&&E N8uݽd< QJ +'+޵p4,z9 ࠉUrAЕȂqEy"RNK“VOf>Y +V5KvO<ړ.pcDN,:UZl %nS6Į^Z`y+]"쭷IV8imh<5BpK0 -= 7:TYhI0+M ה7̴^c[٠(bS!\Jig=,} a,O^` UJeAؑoUĄ*y }5,fsj<95;C _%#Ɗ23"d.UŴ2UN^J*g2$ ) z[8 㓁Hbugˬco=X''jT+4~]i+N0%U"pIu<- ղWŒũh#Ɗ>h w%=V_"8|zB̠ tU rPw.*PY!O:!2X$TbW;CQ򮖔[5yRX\'{v2)&G<(J}wEA0V~cb'z6eVE8Yj& cavU0S9piI_d.<4+T UDfKJi1l6WԺn[81 Z m`V+i c<۽U[6,u-`]U;Ғ|E]A]+J.BAd"Ǝɱ#"vkU{iJ51XuFߝ]Նbnb ,`N;N4[obS`_d+$5cY+ddDqȴ$M6Ktr JX ?iYl_ vep+rdmW !r4W{rPds~D+MTRY`3ãi2 тD5;&a1{vι1& a,v 1sJ 2+qAfET]HhNlB{ oS`lŽ],Je#,"FNǐX;f-u$Vq`9'W1,A20mG59఍%dTPS/ TK!or! ߺbG~DeAA`+B!ؑ'$BuU1j<舀s~9DNqKTɁ"oW<3y0X=KҬplN󆠽-!'3ðlyV|R@A;:|0>|+/F2W~AĶSI(J q4P3U`tlZĉX ZBŹ ІMmW*5&v@eR&( Ӊ+k(`fY+"`S/_8%@| dW^G,E,B r  [%jQXc"Vq,s:GQj&=aiUS(t%QKt5iٗ3(C,p+L٬Wd,Ϯ;ی]%JwP;(U&],ƫ,P42ٱP ڲ"h'8Q$"H1kj>* u44%Ѩ``,@+|q,hV]dxW͊F2sЩT›ײݺ_8X]6ұxIVg3 d SƇ³ #%! +sXYveȓ]!hU+ծ;(5X(M7 8F_"ݻ`ĆaqZJmDR>=eЊX너6X6T$LQ$q MGu;ϞA2J0ǰ%Xb^ ǂ_±؅y,!C_ g)Or}D8O'0Ldt88Keq_6fylfт|EwIK.;V"aJ8QiVD:K2YiR Q fS)V2)4imᙬQDv*UY%4vҚ F#Ö`A&; 7X$ KV~a]+$G4ݫ*a( 'KoQ؆O`ıZ*A+TW4e8|4ӵY3XPJ;#hiE&k {Bo]; SS5b R(&0N)QZkÁXX)f΋X@Kɡ8s G[5B[V6P6l`֬YUK0 Ǫ׮Qrj9*Sd>$˔؅Q4cNJTǷ}e/:a3`ߖzE.*<NJiXt{9Eeq@fzcMԭ̯"L;H[)bd[>l,Mv !4 (Pj;ĶY3H+f4kϔڤR fMe4*44^FX  Cx K4AҊ 9UJDp,8X?*0*4 ̲7RPU'|ygFu3*6`aU`{zn\B{9m B?h_.0O|eEGQGQ+JG wCn+`8w?`vaXJ5(EBHaRw2`_dv-&#"M:ҤL*R@]I&|LU"AL+*%hZaK] 4cŽӱT @NJhV@1E.5CF;"v:QMn&UIGUJU8!VӬpuJ?Qb7L@ `\+dR Db9%JHmDYEBBLL5`_N0k)ۯ?Z&HkjD,b"be2+*3 \裣ۗ jًP0B0l `i*DZl\wr IY*Qo BըSNy67e+tX 3# '9)0NV9)lӝMT>AeW0Vc``iٹ) NA kؚZ3iX&R R@K[M sfƳâYl(XA5Ȱ!)yW|ꫯ<*HQ}NsPbN><ǾI&i9(y-Y3?vuv򪆥 ֏Pmd%Ĝ}F̶Whi#F$טT*ƶ{ЊXƽ_;,~b#eeWUNĉ^ $ D&2/CĮ2U,b&zD:wC(Pr"_~DŭGy$ [%:hBv[`jFŲԄB=J7X,{RerPd# sДŢhA $3*>>20!/_90ڼgu ޥEӐWF @U`ub>&0YP@1aX3h!VgȁX_%e3&✧#Q+6U+xjJÜWq~hQ56u~!R :rNs`w=wL>gQ.T+ (@0˿/u8>HGv巋gaXFun(Bfx0XMyưU"jh>؅遲B}[f!(,c<ĜPuHɎB,kNaDy7c`nڳ`a¨߬,~Ϳ31ʳ\+˽P+6? ).(g H[ql!lA$en F#Ö` ñ1Bf5i2bavTL 3?Z - eTp,IRԱ ]Qs r h‡cZ(1 Vj+bd!("jޗ`E25%MpYfMtX=,),DV^ݶXy|XAݧvc;ى4V9Ǯ` u K :5AA?lo FLd܃7nS[*%芋0qptQwll9,ü'!9&BV F%GP/.څ(>*5 u-'/keիW*ho4{Nuy)+cAI(b9QwnO| KnE+t( .bXp)W '͑%K4ؔd;[l[ǖ"4"W h-- 4ɱkg"QY(w +h;]V1-a*![e̩Қy2O`;.˸TquaXsauVc]^r:ݜc#tz _9yFv;mOmi"V@H3]Rhd!j\+߃+1>{9&ڝU.۬! 9l^%h" rT/)}< BKNŏd4tY!Ire\[_wA_]DxlavscZrI hlo>f#&`⌵X!0(D iG4[Krd mWid͝Z溵Y܉A)Tv-Ȗ[1w$JU=^;@,BU"F( NiM])UNŕ<Ci X5b\+))}IY+%3!tVO1"}%",]8ciq`9AIlv +F~5`E$ "FM/ioFICgƐ,`yXrrO- aB*ۑ眲90d#m Cc]D)+"N<KAi&" ;FA}d9, JCi&r\`ľeO KY! n0܄(㵃аb Jwғ\8-^4xaY7,"Ay\ÿ"vb*u:,za $Ύ%Ne4YΔ̝ V˯U+U>Z}7V&Kk P(ӱ%ҬR(GŔc JR&5jYf~e<||Xty%DX A F%0E[Нl$eԬ, >ԂYHٲ-w6(WDy* Wt,,=;\ąP|TЩIBڑ1x^k1y> ʒeX Y2FA'P$k(0 2?w+ VghʈSJR JA)(es )¶v` Xr/?5.7i#h^ UA0l `yU]p4 E LөVPBtSLH0{XukY%,9fly ҩþD\Nj8Ї^1kÄRh"RPV)TXP#,+7Jj~lzf2i$FҬ4Q.T8ʳ4SoC rXoW49Q_N6X_vFQr2ưNoV(T3KEpŪR'8*'{pbxm+d)+<[\YnDha4l*|UspuNe@:h{cA{mhDJV)+ͪfXXR/&))*IY՘طeJëhVYX#<Rn|2+n)d`` L_ԇK.?u9S꣄fU*)ӬVVZ5U(Ӭq'".Sa9K` }|dP!)ae/mc SꙖ (TñRNR$5ϫؿD#I9YDU•V5V)z\ Je*#Q~)*RNp sP |׻` " 39 z_Z]XQp>r t7=u Ӭ$8P&16/V)4 8 k ٦e@Yɝ͍5ꬵ`9MVcc#EE°41 <.a 1&m#Eb`hp eS$ NL:i &0?ZdACerP5Ybg^ Z05mfJ6TGbLs44<ͪR&M2gW`$c)XQ#ikda|M!UJ1M]!k!zE`N /SmtNxӱضjFWձOxOjJ嚗MaxPɃ?p5)e6jwT,GfjPV5V5'FsrSRcU8qjVRJ} IRj9'qpRfiVRT.UjU4ˈm)iZeXnyat4l)W< !``)X53%?KYqͩY59i*zSR޾A\|mZ\8OLfY)TML>]~U+v{WM{n1 s")vwqpZz˜CApmD,4q8)VY N>P)11jfpn晉(E#\@ʄ CI 8aV5NXZ6>K ҆TaKU`Q~X/XkڱP K0P3F4+>uW-,BX$[vd 1Ǵؕg-9b/OLoyL2[<ڹ}eY IYT /h0fw@mH4XMmJ؇*!RECW $Рh)h R`E3j~fNmQMʠxnCsODZ\̻{l &0"S " 'TVۺ/B7:=Ǎ\ep&].jds(SǥX(=ޟ80maUt|q)\Ӕ%tJLZg.Vjif"ax1 12N_1-h_u=JҀ]`YT*Չ7S|HҀnBA?'9Q突Xa`=aychs0v+qձrVCc9s?_LbhBb f"MDM@;Q+VJ p RVs&&( w"( &9NY槉FwYC-cwhV5'&+:V})k  Yd|?wiHLh47xc 8/K0QΤfjӬn)|?۠id˯pYX۰[X +6[}@T0s4!k&R ZiJM$kV5N 4:CX 2V#Af\YAeW6 ~*d"nL>|AiP!6*eqJpZ|Xҡ9XվX@Ap0l ϶"h$e;B/VF+VEWd2JYU ,,'b"˴a;v}= Rpb Hr˿f`P2JI@Zה6qWF"Ƣ +&ML ,=nR1(jpy3cm$eUӪ rqT͢uĿuCirnQn[b 8Kؕ@=),i!ObY/~TdZEAf[*U"Vv*YSr,Wy7)=`ǥlXg.z WY)BeVi44鄍cXcաQK42zf$ڙ$ MwadyhoڄXJ3LhiJ5՘je%eJZi N*#_"fW"<P0B0l @7)QúĴJ( JL|'Dϥ8Xc!(/b%wS+]BKNj\X>J2cLn{Ɯd/@LR_~h=?fPkҤ2)%$DfLWWdlD3*Tfj)Rs=p,h@Rf4QBZ)2LQ0Y b mzff;Nʴ+mxY4[?}ŚHD_ŢT/P0B0l +ARKhgLLADžz2*r:Vy`ZdXybf^6 ]BW C^V0np10$"VhˆZ ĤPs, J)M̔*J"""Jf܅l/MԧiP5EcWa1&EYEWlSX -;VMX o-b,Y~gZ5Xδ*iVUƱq-*z.ag• c9AIavLO<)":UZcRZkh` h2V90aYh`74 vhteql..=cW6M˃bۙ W[|𸘬!J P0W ڀaK"EiVMR-]*26G|,e5ͱqNʺ )K̆i%to|]xkWΨD,A ҏI@b8cY/P)h11SZ3FΰD &J Z@LĊ@ŔS [^E*cU zvSˮAkdvjxŐ,W4-aZaK] 7 I hX/-2S]Y1*Ac)+UcUX u/X(q gT9%[j3'2Ă@L hbݙEޔL΂ӱ@H ŚaWJkfERF lG*|Kn9V2nU3mFiW&v9 EB飯B[Ԇf#X [%7hNjJjFv}*Yb0R"%2haƬ/\(lvPKn HUX16]Faji%`zc$AP:U:A0kҊIp7٪Ӭ#ANڨY&(eJaӲlU+֮PPYA+uwEڊXKE_B0k}TV]*B%X®GKhDW͵ǴzGRVt+q,[ʼnR"cJJ9( UfAQ.cQD=)`ݘX>YNXX8` BcP) ϱL3JB`NҬ41X+(~"&P6ٔ1-`iy*fdؕhWpw`l"H 2|UA,BAo ־׾{M57p7[" rf5xV+4cq*s=ꔉXm }eRp>"]lFX 9p䙜#7 0QJlCBw'/t0;ۆU7;$Pj*£/0}ڇz[r!|<C^i\Us'v+K+^o~WXܚW1|6^8X\BDvD ED#H`W1j@uX`("Yݛ`LX`bf;ED2&"7AiCW2Zָk±++U,,^Bx3JfYpU> o{Ͼѽ>[6U" 'S2H~0W;ظ&lr Wvt9aUPd`(bVLQԊ-`ޢ"; e Z)DZLTc)FJ̀:d0If,ڕWvfj~RGNV`'\؂0yY@2) B00\$^ $}W^ySL={vxر)S+A/mkW7;v۝{nfέomD67VZR*+XE\-by9| Y0+׀8w 1Y^gy/há\n0d˰.d&T$e1fRv~ɒ-2L .G{*rpl;[0dW+ ԫ½qlXh6WCXI4 ^yuԩ'xbԨQ~njӟo'?oYk;`M6mak{. ߶ummI JvRv [4ht)+Xe?#yB%vωXjkQf"V5uX&b " Gfdއeҵ#kNES`91lR #biUwEpFx,x'[vԮHkЙe3q]|?yG?2? c`={L2eر?//$I:::._~ِ*qu8j_|coXE("BJ/RX֜{_vt5ՐJȝx$)h-9+ڠc*nd%%Ĥ&kXNۣNV]PɘҾÔ8vp+R/)H vfCќ{PGU\5pw>!j!2xꩧ4 $I<؟ϟY#V:uԩS'O<}tOO)$$IRO=00 $ zS-3$6Q/,ԉ ^wo Ŷس_!$u9ddsbYfUNSq *K= J9I*v ]rT&%1bbV:Ut˛-9B$o}NI l,ȖW]- )Q`"WE2 ƹ[}qla'hCQ~^}V-YG=rHGGǏ~gyFk /k}pԨQ-:rȄ F"A)`…\pA?8p6Za, i5G쿽XeiU*bqD %"$jסfIK,V,Ϩұ҈gDRv$Қ<1-iԓ-p̬W_\ Uf`Y];U./C(n6"&Vj*ԩS?ĉkɓ'=z7MO=Թsĉ'OĉnR7޸˦N+̙-[*~7n?̙3-y,`PLFu9VI25BĊU~,bIV ?O=+wvYBNʘD5p )!khE:IJ!X*}ٳf[VE^iv3ʍ6n9ocvU|^Й֓ -.;\ջ5-f+^CUWX&3,|mo{''O|SN_~yҥ9p`ߘ8qw^w[%XgWD O?  QC XGxej5Sb_}/ĉ'NطKL6ɓ&O\մhѢh7koOرc[s/i#@ 4G:gxm#3o?qD) ՗|ɓÀ`00= CmiNl{{nܹ&L~o~F5n87MӧO?r?wϷpuڵk„ cƌyw!AM@ 2efjom]t /yi"3f̸q$V8zhOOϸqz?~o?~7B7` @00{0X3f̘1gݰawADnK?~Q@dz_~/^я~DDo~Ө@`ؿ<;;mn1o^׾67L꫓m^z̘09$j7|I]w… lgϞ{ =ox@ '=WzgOdӦM>-_=?^{M}~ ;կΘ1cΜ9{:>\|n8¹U!1W/iOmlx)s@DGY +6 ֕W^}nժU/n /'sݻ'5kֵ^{ih#\ #j$?~ɓ'?xG^''0k®`0 3֯_os>s^zcǞy+rܹSLq nm۶it/ܗO஫:uۓ$Yl Z McO~W_}o4iW\W^7ĉp%̝;wC(x i6ٔ(IĉLiȮWo$O~GԷgSrO2%I'{ă7-Y͛r%6Z5#C=~뮖ĵ sݹs%\2~O2ĉ7ƍw5\}6O<Ν;ǎdsW?Ox㒷ulGw,~_퟾}'ws uÛ[7{`2c8POfF'[7  oe_ypXzո *jǏ?wǏ?iҤ&InW_}?/xG+\q&L8qqG}饗O}OatUa''8qÀ]='O|fԧ>}l'J3gݻ7(tvv&IrԩS2ov- @| ܹG9}tԸqϟ~0bywڰy^uۡۖimF:i=ݽjW*5^aƦ%˱ۻt3\]V5\06X춨snoZnΖ]kD>as-oQەԩSӧOopځ!@7ge]o}{?!sR\ś_|7eʔtDd$19szzz4 nqUw:~pԲ[zG-{a+ϸdk۶mΝ?qϞ8qbǎ;wEkKu[~"=Y6ϟxYچ@ZUU̯W&f9X[7,ްFA} *D䍳lP&I&_׶mvE}_ݱc3f?ࡇ(M3fgΜy,X0eʔ4"|UXx.\ssn}g[߳5+w I~~Gi̔ݽ&G|wwwoY;X0kFl;)B +vڿ˿?4MW^}~??4㏏IO?DͼH&M3iڨQ.t={}O˿$?ޗ]¹:tOfgΰK?'N^n5 #Ξ`smC8{Vڷs$O4iR ƍ+u ؽf9toneYNn;u2?Gj sc-Xn#5vpxӚM_pa 6.ZP[.ي+F~v̘1{_u+d7foqd?g~晳SN8}g~zOV0FxǏy{87{Dt수'N+ʱc|?n~|\ԉ:z+;v̴zbuwݼ |زa1o2gݼ5tcŃ;;|9߁Uw̱mWm^`rzRTҪoؿ%kծ˶/ǖ,Mu: m6˪B`ơKBce$+w +} hk ѣ~˄nx/~??6mwzur޼(ߞzĉ3gΌ̙uT=ViQ@KO7m>xYc->:ph{pgT7m ˺{ظh_?y8|+_}*4iG.ĉ-Z}7x?<8  ]*eӧO9sIzW9K/KO vx@O6Z3R1c03CƌI1BC$o{۞|I]w]={Mؕ@ 羻pڐ?|5{}H\Ӯ-{g~45i{>f`޴t_cew6.Zq̃_z饫쫯z% x뮻.|{WѾ}jño/rgg p`bff6J)LtRj(mXx3P_?-_6m@x衇{̙⩱cp }{RmʕX6gݺ`Ŗ l߿Ɲ݊-mo;D]l vq5;1܋[̼u{m%C]NAPPHSGk<6駟nfV ?휛^5tUؽ|xӒykv+s?tyVŅf?;iJ5a>iM7Yww?s3n[0$_Hň ~ :vݸlۣpoZbӪ?pgsf񆀑.t(9[g!/LÄpK}&2R*MUh` Ft͞-69XC*D:H\;eoh\oH 1G>~x;Ǐo$X7-v 8oyC}[3!dZ5s^Xёs.XqKWݶxE{ܐO炑X:q~m>1ttt̘1cƌ=@,93Şؖ()߽Ɩt}xu{ٹ䮻5Yش&,j_kՆU]Yokv2;iɒ5k䯵3z漄7Rf) ףhwns~0,5L`6>Õ/g/AP7u]0۵f=g?⇒}v}4)wo"[m%A +\b{m+/bMKc Zyww&l1ѥK]wpiwwww~'C\ EۆOP-sl<6k˗_=w#e]Ua̚Q:®sm{=ͮT:ӻaqp6n\+7;cʲ|Sp/RPTׇb s[V<|%6,|(]X+_ ^p @0lw{V,܆˹,n /|}ܺ>?/]^zF{]7T̬a YzloW_$wݸlz˭/"UbҤe⥖a~`m$hAU7twoY+p%s9vOת]e:GD3]ز阍s@'5bW {I{+NuWsX|wcW¯@ ZÛxs|[[WuTw|#K͋d[G1o^t;ݬlҍŋ kNo]N]{rP谩)*RtݸwtwSZ'́@ s$SNH|T͞@OV9Ca/ AK @,DA%@bE(@b@ h1` @ B@ Z !X@ -,@ C@ A!K %@b@ h1` @ B@ Z !Xo[ObgQLf0 @gA|IENDB`DataLab-1.0.2/doc/images/shots/i_roi_image.png000066400000000000000000002741071511411446000211350ustar00rootroot00000000000000PNG  IHDRX١ pHYs+ IDATx\S8L;E܆dj@ȰTt3 v3nj[7J1KM+LTv/n)fDeD4>?6{ }=<n~لu!HB!- B!Z0EF!B!B!B!"#B!dM,]$rK҈4zz{6I`5/68Àe'8tT*rn="ٶ8}/Ɵ>InZOONB("ד.ps*Ȋcb{KE<\}V ϧUlWd}>$lK咍5BaF?n/?-?SX)< 3z7uI$Ie"!PRr"a%x7Y/,s%fM ZTj2PyI!nfp435&Z*"EP)h4J< +R:"kH4(zu4:6}Չ%jHHDG+mvq=lӍ~7%8 _Y 9mj0Ej[^XX?r9Qm.Ȳ]ϭm,$J~!Rs7X*dQu ecQi(O\F$Y %E6K 2!ueM[Im{A}U# JO|$wAV*8v.ȂJSV]UST ! qI!HE=grIO>ץ"43A; !REF$"trEK6tքQ!ЭM.IM522T$!y tvB!!B![XhB! R v !BZO>=zVn!d2X[B!`;dC0Fn07n׉'B!tJSh4~PfVk4\%22rN4:BApŮ_񑑑 Vۯ_? y}T[[[C@V/_lذ!CxF67756BA5q9?sf_aVh:NDgN__ z#D(dutt3+bB77)))>'}ZNiZ^oyF#L zp7CLj努~ƶPxI;6]P+&B!NH:}2B!_KZ>ܵb!K4]>d`::~m`JZڔJfbcdmX,eE;|̾/}F[rzӦ>c.{wj% 2؆Cs^NaG=iv+-X5#-'Oaa t;뮻r|(7ZƎY]N=il_lWEc7:#xنQ0C~H 'ƆA4>˷/;t?q,\GS ,yP)>v%s^O벃B㤲+dN[o=#~|7ӗRֈpSZsSx챫@_O$Wl#COqB-"<9eydt%i`=mIk i|[U+i<Cs|a*/\`I'E&Q ltÝc/X2dXa˃nXOIcEEoiΜ9seﶴwJc^v1"S&3~59Q&s+@}Μ dsT?}ҧ(#hzhV<"@u0}]u))kYFhҷ7BC18Z 0`.~b{T|lC’cK6FÄ%ō%L63d^hIq˂5YItɜt˸V<2"MF=)͘R]}lZ'VQ(tΙ]vĉvAwؤLܽRT*'*!NlU#jf˃_KE=oǫR7mY,Ydkm+WX,mWX& ת: Zcm۶45Qz!B>Jm~NtO:Ym. ?myuuu.\ȫ{wOޣrꨦO7 s7%[WWWe:9an l7@u `!w_1}SB}P$(;Gˀ;G[BᮝN`0+۩JePL;ԝlv#G9TF 5vH3^ s%qMq֭]ss+پ6svdZ*κZȏiuZm`Ga }+zI#(F5;SvUM+{`9P^&:1M'~W'h4X9jlVR9N:Z]B U4}~Ϯ0ż8H& fŁ1Z0eÍ u^\K#ii @Fhld:8K% 2x L!P_`ɕ3gΨ>V[:Xh### 1cl)h~H2>?WnͰj/ĵI+eJNU*#*o{NS)2-%)2>8*r%ks >{ǖ`jo?Ǒ]>9mG ^`5]㡗?hz@[$P֕x={+]UZ Y|; g9);LNA6ϐ4ms8=MkG`p(A劓KwҡxIEq{ Ikm#xylՊ!7|ʏO ***%5sJ("w14Z\>ck&Ɯ.[تT*)Ve7d.ji$N7-f}ɝLX;1****jŧ UUeC2מ8Qyd F7igNbi/f `MfDtwwwY;K_s6%K&^~wI Lz%Pfj<Ⓓs6 YI2d+2j8nnS f[d̝kFIW 0t7i {_4{ʏz3yduH \6=T+qP<Ľqv^Eq7Cf8yчZݰ'GBH ãGaa<.BpW̢*%RVHW&Hy`^Ǜ<[ *БC{ꍩ/#F 6tEv:EN.qَW0Ne%Ĺ\Vc9h[8I#+1}gH2TN @L}({w$IH I$s.)gbĨ(ͧq/&F5dm}~lS=q߀JRQں'Bް| _!POéUiI4fo};O( NJ/Oy!{tO `Bȏܦ8l{-ʈث;7㓤~3Cˊ`j?xl;9~``oۇ#P}!MM)-Ql0?/:ɫKǡS_I#260y|/"G x5IC@!wSd)EPFr|"s)`+S5w ;#B!\,&u7= H'0I`pcc%="#B!ܤȦ)dt MF?`ӠtO(w MYc?$Ysޯ&> 3B!Bv\Y`j)~w0ƀR}~ld !Q Qg˃?Rp׸F|Y~xr B!% 6=2"/>4"=na`%)PGj]J;wM=D+.?hG?g,,4#B! 9>L 44S~ Xv $];p"uvqej̨ҦMISiw1\ٮ:pxKk7T"ADD(dKB!P(qRhy盚"F0G{^oֶn:K0IjttO?faC).({m;~7F;p7&1IONH3RHR-YPulKxdB!ƨqڨqmJW^!$^xaΝO=iximJg~u(,!s~_Y;l`o 3 k7f$8ps*J{!P_&\G+!xnݺKܹ^0T~tuֹ_L[.?ޓ2mG;zSGߞ?Ķ\f4u5I+rp+e-Nl0B ǿKN=+B/{ >w  ^yعsgUUU}}ҥKe+2Ӧ/:Vq}e>t3,y+ͨU\d0\mT'|Kx4B!?E,oofX}i)/=l{j ϞEė-[V{wÇ:+դ9=~!!PdM5B^ ~ʒ /c>t[?+_%{RS%%{'Ny;%ycK) ǖnB!b ܰ|B*"EbAPu Ǘ-ٽj0AmHr]Qunܴ4\YH"Sx^7>>\η?g=2x's+[9|K6QԢRi!-bȪ88IxB&-7<.I1!*ł2S/u&~!Y6Igy @.I!TD"BP$,# íR!~xbQ_O\j$(agjAL 6%iJH*BVB(E~۹_١gg-~*<G{X,f.: Q/nNE9\plA!m}իyبa78DhC~>rQ䒟)nWS[9|dc _h^M~):nB2@M\>ߪgj:9vrs ŦU=tt)2\)ǿ{i뻣G K3rdR$3ٷ"P7y5h(kA餲 $t 9asMK*A޿#4,øBEVN),fSKrBocO,Yč˂f BAc0yqefۀ֍_nHR@XY Tj«*W01Sd A11Yk'P 2QGwgj<yR)_6^R*@UYo --݈UٺIRnBǘ4]k͹W~$Ç[7@ z [VE6ii0?IM}f`)[out7hР5k.$i4fZk$d@B}uu Eԩsܽd7\"ڿ0BQpRW^RjWD֝ێ+Y"TnSW?3tm۶ヒ:::BdȘFbͩ D[P{baKܜzHYLͯϡV!ˀ0 ʄE]+ܜq IDAT2)"Ts !k. - 4y r Aj^g⹕0hР7<_!#w'F#A7 7|rԲ"ۗ\/[u s{NW"X`%C- :qʥѝ{nhIh2 xB&ksS[Z[[1qt\lDT COXיz{RdZ2#"lHAƂOg_3,јHF!Æ mB%cƌnPkF[BwՙtyL##&o@N{wyokMO>^5ZF:N'eG0xi~P܅%%%YYYZi7*ݐl{Fq2~}?\}x=.<ΩM4a` "8x>H}‰m-m+T;va'3vRmY+kP˂&BVAijzdeZ+ZPwan& ?ɡJw7?d7$޳Qʭ=XNByʚ]Og΍w_F}Z?]5ʏpA&Vߺڦd&6F/'"5bcٍͅ)˛.n}i(͞]Ul6ͶMH;jII[DVV_F !b.g/_h"ӨH4C Q`~׮RE@bDtL ::LSe)e9} ط8vc·|{sb^RnHɫ>RhL`.ۣ؛Ni(=! `ն $boNܳx*e{TzS7)yMqtulsn:-$i據O_;oyuDvz*RXf>Ydn5n~'@_E6I֝-f.m}՟rjJݤ;ǷfBzvU U*jϲrئڳ RUV F(_5ajJR UrT*U~PR,۱-"LCR.۱@.zv !zۓ wK^:sr37R IM9PQEuj4v$зȈUG0:##v3mn̦䉩`s2멨AՎ \鲅epV]ݸE+9qe91tM#Qc9:BcX1:ndȤIn_(qQ4+FBAx YPyE"{NQ﹏Fl1=};~ԧ V$?uYθ-?c>sA@_8 C̩Y,Mt56֌ьΘ(/nILٱ(2BVsZxN mOVUծ~1͑ y3MѢθ3Dͮ5~4^m#{`f/=櫰ٵx'c[uN`l"Y^׌˪r']gyUK,۱fס&rҳc!y.p ~qi{HljԝyRccco7xñ'N$''n~VxFg$I*'I7$^(x``D) fO]fw>f`0X^{r]h<ͫCF^< Z>(5؁܄sR<BTRR~") zmO>Š5f,+<

    zu?B] -B6-,X@ÇLFG?Lӵ\fFfXA 4ȿЅwF!WB w}cKNJSB!d"D.[-tH !ByqsPB!BAZx.2B!B!~]dEF q5 $ ee/p=Bu׿M|}TZj5Vtt}we?`Ѓ!Bfu"<<--pޮee @|"D! U=uSsε&3PۅHI湳rU绹O?0B7ӧM1|)NfL8L}755 <ՃG {j 7nZmJfbcr"rX#6\ݘ[&?.rI&TDAX;i17X-cO*yk֑Ŝ$Q\ J ZV_>7B, @ Bnu(i&Y:~axT3ϕF%6HG5 inNYHe$IelY\RI,KVu$nzCѸq",X11,X"¸q9#n~\hq<2zL4uY0}瞶~﵄܋HY_1{<'%'ǜtR=>%!`$hhhơC/1s̑#Gg}2imB(4yuIzȃ-Ӕ.٭;lo@OZe`ֱnRdӔ&5G5q+e-Vk*ݚ𕊈4ĺrC*"EP)Hjˮъ\f0`nIԹ.iIꑮztmc!+ w6 jO>yH[fZnmm}>_/By-<\ͮ+Mu:ݙ3g?ɓ~:;[\Z\.y??^5xՔIwo{by1R& Ue$IeJ) 2!דd3 J*He}gj #/|rڀj7@ʑk޻2p+K면O^WƱ@.Iˆb]rh[,L$2ecqE%i(#I>ur`0d2ٍ7PËA<ΈB=c-rйKzD"՞7။7"@Øo?ou}O7Z[[o$1N%=s@Kp}5ckj4#txIER1d-:in'LZdnBrr-JaJnB2ٔ7pͥrFn*kJ=;r)׭[Gkkk xr?\.p8!|+o@.EꫯΝ;oʟw g8ƢƜ1;D$̌sƍE }a#pƵ)Zt~P^;wf׏ƫcbyA&+?SxfF^eB*lzo,9<@9~wW#=ztǎoٳg= PH)))q@"---N_tO?=`f/Α*=ax?"A4 NC7ns5̉'ccc7 msAվO$I:iu$I,~pe%d뱾݌^~Mٿ777GGG`j323w$O>/rĉŋh .|w,k̙CݻwO>`PZ .XAxT`Ar7 IWe-rMMMGGG{|pWˌ:k mF*c @q_>~p" #|`rnWBয়,BE>|8i5l~;ڍgn1|!И(a ^E#!q5  L=_~{xBB 1XLN :μI cz?=u0An=0|R!䵤$HJZ !Z.gcbbfΜ?>=Lb{z,sC1_A8(>5jԄ 5B"P-MMM nu@"JJJ*0 De۲e~w=DS/FC繯۫>$ 駟;[+_t2bi1Stv9rY;z{NokaMgl[ ;jZYcX,\0B!n6!RM>66v͚56l;ޱXHMڴbxӦMSN}Ξ={ҥK'n)ˉbcXsazvcKkoi.Kٳ Pfٖ-T{Uyw7[嫺W+ fWwso[L-r&8vF*Ӌ<ࡻu}>Vn>=v'#  ~ K.]~kS$u]t:bccw܇ֶddQ ãfA6V-Uݛu|ϢQo4=~ Kfd`W '-A^/tR|Ϸսۜ+M'1`ڤ|OMqpVV-^`9t&5}IIRB~a`Gl%K[iW"hzhVʲuL :zmӤ^fI8ZcJNtm1j L b/U#سWmypۺ;u l\*g8 E%6a;;Ho:CEmUz"zq:I.t'0S(8-So_ݮ|,Oa*wRgcm-E!< -Hp eNeɣG.**a~٩jv}[)ǫM<}|lM=TaBǢWMؽ*rPئڳ R-dEԓm҂e;6SelKwmZHyUnB*4l ŋ`[4eՕ:O.]Jp{|"s@qv3Nko{r_XvS\248{ + 6^,rv!P0y,0OO$r\fvM*25^)STWWq:5; c[hdDFwHzUG0:##"}5)X4ז;WQ/l{юZ@ƶ=JSLȋL9UzYPILaZ0% 4jj\k'[:lE LɁr2N* f7'V[cid/vmm3Į sGW|;ÕpYMӱO[7i __◊-IB|~\F9zYrudqDRH$k^$!QxA޿Aq7`IYPv$H|Cʑ3O~ڕ1Q:t-mD|SwElIKy)Xϼ +TE ^O mEl!}<'M`<e26CI ^Lo_N ɃOe_% y}Ⱥ]B<_קqs*Ts~a!zKJii0]ZS'-"$1N%=s@Kp}5ckj4#3&s X~.,qR^n(l>ü{D2 ' uo^|b؝o)>]ntWI.(ؼvovr_qc'x/|o/hkmjū8[<Z@ۻ{K kת\)-"3͑ y3MѢθ3Dͮ5~4^m9+El6m.tRMkƶ<0(٫ fS2݌˜r!6)M\$so] ]MpZ:sϲl6[nbsmyEݬq/vF{[Q/*>6m9~Yd:o>ߋ8+&a߁s+\n+>=r>ҾgD~toTda;#cG>6W|XVJ*"oH˽C*dp=/ihiiZvĩ* IDATo{9QGGSV}$I@$IjH|xsi(=vjG d>r{֤ 8Bm>w>h0 b^me =C}o.}qb7 EZ6`\QXYyXՋջu'JW}8PIe蠏miw8:‰;$ eZ.I+Ge䚺JbHͯ(,+53 HSd.Bȑ8 CCD5a07K^rC~W?ZgP݈Dx8`:e}& %Xȳw`B|p>Ѝhm6O;:ڦd&6F/'"5bcٍͅ)˛.n}ir.$H@*.{d~aՓ("_mrI!vwoL-IEHH~}2U̾X.I3_<y IJ7(3#nJO#͂Ms2~~:? M34\-CiM3# ãG͐y4*y@<"`XT[~ $I,YmJ[(-ޅܛLu6-GKK rI]&/*mG$Ic/%iQ B둽y^V),X!(tM 6?p)A}C߅/`B=t\eLkojFԗl`nf U5J:#+QFM7;\Xg-7&[Tyto=F<:іps/"a&&J˝\S=7Z`mz99JL>Y's8jmaTda8^~޺#5g!u=ȟIRo/CB~)rO/ACS5n!Ԧkv0M?" B&}6˛Yd%%Yknx%Yԁ2(d)uԻ" BLPYTL=J EMaj@6nz=aA4a:4nN|zo~PPZ --g B>5k 9Po!BnBE#.1#X_~ -IBBȃp"뇦[eS>nl&NS7uG+=d_0 Z '8' H| +7!ҜjR8L"K4p˜zA.I@IA.Iܜ 2G.I#ʞF`}^N(&m *3s"Mlk{w{\eȣTFFXv& PH -ԓ_휶zLя=z ߁tBԒӶ'{$ p.SXkmXS=wKJ5GnCCBeKSS+r܄d(L.,POGeT| 5]Z9nNE}m%rFB '[+0 %爙ٗb S1'-tɚ-gs:i:&do.//w:tF֐!$fy}}Ӟ 0wۍQ.vDl@M|f7wƂ1)}@tW/J킼3W v;Er6۝h8NFg-"x*78ĬhZ䈟 h\9[&@:A?c,&;絆p8 c$+Q*ZДUc lM^jٻ7S}?&z?0Kfp8hئ3Mp]J6#ɞp8Aq"`L?Ie[[nW5Wn)9 2wVLgu1 &u6B4!,)uX#9!4uHXdub*u5ɦO7G>󫚦jp(W x7KeÉ{̔ V}[PDU+u_i_WZ&Ti>Ie: p?zU>i=bOeeh õy𥗞Pvp{_=mjp8ퟮ9w)WLc(%+|[RHB$G6uIEmY-gV+pLe>l617]vpԁݿ(")Y61jY `LpÌ,0/Y^ZC8ч4%F9fnl #8:'1S.Oߚ}U[t3>X9pbEWqPv9[3TxS/-~]kRg\Yl;LVMglrm ` Xr\̙fduGP{.r-t5ؚKKg/Y6mmKG7n,+kjsdmWM>.'91u4ksjHp86 w3U杳mULInx(rY6]9uh={!Vm( 3'llXպm 3fO! 38IVCtV%WHF'Ѫn﷚Xba$ʫuNu].e~6E|-)* :ٹ.?n38D 6[ƨ-0w81a%l56t9sTp#t:F;qqg:F-[VO}Բea.d[pC=FSvokl?g:F-WWLG%F39h3cٻX!~my>Lg5eI2:$"w\.w}FxM߽֋>z VaDqEM~ƙWMf0cso4fdcRp[P ceRs+tzsDRl{1V3 q`sX2UԠ5S-,Po qpƙ - ˵m!&eϘ;uڀûvԹ3ߍHԿNX.ϼ;ip_L)_H^ %{_ d߼N\R:2}}p8Z?e_$܉;% (N(3~o*f9G:a38%Eغrc:u,0zDŽ`x J6:u90pᦓ9zT,(*h_b4`sĺ0sfb\ڲg̝:gmIݛrEfyt/\1#;jS'ݸthl\[pR$݈x]n&txlcA=tb*0iya~7|V3vXHzإi ֱy`cy(^22w-8_"bɄB=c f䊚:oIN||ӄ$`};DGӜ15?HC"FnZ2_ɲQe5\3Jr86ՂP1GvK%%-)*< L[VWp|d@j  ,Q1e )5rcK=`q&1VOaFI8`5bJv&|Q (ѵ`1?U1y[ }['9,,`('&ŇA@ysCQDI|s%EE-rˮXe*WׅeE%Q77'P3p8M!Th :vwX/ =8/$_{3/!"iq$J{n*LDj4NqcX#Yб ;*ÜE'ixr @׃劑z6\حf5WtnS*S|[-~Uk9ߩ~^SC.1qLk*^26Haw>yC..f~X<(oA6fyyfΉƟV"F-ŗsDI- {7x=9*=+VO|ij5J-t8Sd~sN7r8&$ŏP"]v}4K]p>^)Y6jC񌩫]у<glr5#=I‡/ܶ)np8uaD(K{:G.K^!ȦҴq9[dx:`5ėϿ>D )Wt7| $'ZDId8|^v%lw݆>p:+Z$" 5B% ( RϠcՑly gVTѹ#1/\EsB(7jȧVE9gڸLh=oy>=7,.sr:81e/$\hA8'NS+U\qal0cFNwǜdNB=fq~ZfŮ?zc¡w,v%-3s(Gc=phD:M)uW^wބ]}:`,rb&u){)WZ2FS, N|yϮzmVa?mNCJ^yu IDAT矝[ v wbzDy5԰.q D;Ђ<`kf0څ[f$R S8X@-A?$[:!w[#E8-*+Wwv^N%fO͘E^Ѣù(rJ+]rG{?~BiAݩ'^,4?<6r r1G&4j۟HIw.n2,_!O諮p.}&C[L{w@pt89E>Sg_s{ojM[7ˏ6nG钩_[_4y)ZygnͫFoUOd=֧fSȄZqH-lGYpeO\3^qZy IBZf*0-1ҿzT.F_}06qحCZ[BĠ i,TUəlkDDoj;2eQKJQZy#?1c̻Ұ#y_Q1Vp,.'F3ײ$8djfp8u ~zp:,R-vKF4ᛇkmd+k],vˡcZĽ[$w-s ya !nyf$:~|>RƘSc+!0rG!Ve!7 ;Ev]9c})f%:lyzci-ڂ[7#, Lv'.ͿsVp 9cO_ci&GJ 0b+8 cWfp8m^/21RVVsk9BB"O!a^i/|Լ8I&E(h ]njIe'm?aG>#Of_v22י'?]3;왰} \ v<``w=]{0 ؘ.bjtK Nځ'ߟ>ۻ˝N' VŹT<`^Զ!F9OdL{XKvp8mkfx$Ń o $2r_O;Fg-NToeị-ZjՊ+찜TDD4HhQ/6B\wPlz}X;^T}\?\89x 'w0>X>X~]I>Sp˗$Y|sC#SmϏQUhd Y P'qW9G]d8%bϵg_s8T捛o?nԭhQ;Q|3&P+l,*7g ʌͰ1yr`뱵n /MOZ$`"KxؼZM8[S]3ϛtsoMS"Pu"-/Oٙ1WfZ~3ɟŔo+,08#;O|g }Z$wQ I8 <#]g&"h%_ 0vW7[JFXX3 m]ѢLi*]dEQo]ݎBF%geRj|ϧܚ۫*cwM8'ÇW k˦#W~| v>%xp8햓'O;v6 !O>-҂Ev lfΜ裏&U첲.]DZh} #!{_h#-A\+QOjX̀933VPrp5UP ,Кp2=0s9νzLWqXr[n0ݯvO~~UW]3m=zP /,Qe˺C3/q.)**ݻ!C$I2)x=x<#G}лwaÆ?>55T%K w9v[VZLG6h^y(ThFgZěPEτ|OTf}Rdٻ2p:XV.+8hZE6lؓO>8-  ϒ=rBR"Re݂cI " K&jh:l8J:%ƈFapFdME4{V䗌ĒC@"S^TN>bF:=G߹x{ON[-Zǐ]dg捛kTK-#$9?,*&KB0EbdPz̜!BQdFT *k: jT (i柕]-jho~9é!D>_g$ N|Ϗc$ʫu"s8=cuXDǃjkmVZԫ$[@"`I!;6Tdh @9f!7P :&0LdJhh5PX$M>B}H&BaM TQ+up8my;.Ӛ$ږa(+; H1|`~[-$* b$!ܢ%|bUfDc`h_!gx1?{kUt 0%?5p8Jڑ!敟&Ns)H~xp8"+V9V4pelnի>@44fc#~[ }<3]OB`潮]Q@,YTAe]el15&k;D_v94P<ڧЂPtx2Gi[*pŮ}!6EhZQ7k$CHپyt:LJux[ s8 CR2"ꟇUH 'Jjd yLE@A3@#l+TQd$DX 1 ujf qZhvA;jlYS~wq(}LV ҟ/=$f䧮,ʱewnBSӇ4[-&4p([ܬ~Po3yL}Vj#T! -,OLYB7*b  h@t*pFq `eEL͆NJv5găK bZwl"rhЂLՉ^YEڕhն2g";bp8MյĴ^pN!-Mf$Qչ[n&3t=oEp8fUZvyDV7n~Zf|* "Y B6d "d1?@+fj1%*dF%IF"F h`>@H" #'ծW'1tXƛszT܅{uW# U_4Shz xZa5EGvi=_5"ѶIdXϝ$h+Z?t% NiBdĈ"gO44ARKouݛyWLp8S}ڞ !eʈq6* LK.ZͰSR#v>jgL=b$Ty3*o9?O@f1tc Ta  " H BH"]#*0 ^㤐@M8bģu!" `@EBh D$ E*ڸd>Kn0Q> Q]d=?vkI/ggvIzn8r۬0eZc7W~Ғfs8N{\/?_1=u7XޥBZfbͫCLp|aJp7nHipC0 YȁzφnALOѬk!``tΣV.*˦Bn:ʌZ(XuEe"$Ig3Y ~ @Oe@$%.G1(5J)3j$~k29qL-4""tk=w94/sb*hNtV{{ ,۔ⓚ(8jrf]qk#H;p =~Z|UW8\VEG&ڐEN`r 4B"[j}*&{WٽR?5gӞ?bߏп +}É c[ctev4'I!NMdeC\Xr , fV?@6 lX-~H-^V (OcD\~G>.1 XG?3P T`, RQjupAAX DM׳r{q-zAgwJEm93̞r2䶐.P8; bVER~XgVPbk;ksty?96hj#9LvTg ~Kɰv'/)Dt p8 )mgï|hm_?AzmDtC 67n~jͭ !U,?X IDATcB+D4f] Vy`ѕ@~MS*i8e?`rHYeTP%YTJp{,t@hgĒ F9QdD@?]$Tq/*p~|AH㍓&@rmڵ¢ x~kyVv򩚸uI戛q_LC񒑹7I"[kp.z՚ Eg~w>2<*ծW;nTvQmpZ9D1 jXlJM} w\=EM9Vvf[;PPcU4P[ @hV Yqn]*W  $*{ Lp *!SMiЂ5\d ]t`8C 0=G> 3koVYQ .@&0֯Y1mrȹ~҈kʭvWϖ]+s~컶YIU~4p:4YeuۧeA. nMS~1N~{vd5;P(Y !,KrA ED]=Yn0bqT7h˚".5gRNQϜ r.nnM۶ӔFp8yHbu0 X.L>>*eg̽Uhj23jcs(@2D !Ƃ5%Z ] DEJ$R6YP:+.R%Nb5T+Q8U gӍw*e_0Z~j*d#Td܂y{=Z\4e'䅍ICxEZXrCO֛%#sg/Z?kyHg3%wAfj(&Tki$5r2XvuTVU@0tWpOD8KA(kJ_*ц=(D'ڐx.ShaRG\5ǂBDba,f[ UTVR؈ 5}PH^$xlkRv~ Ԍ^ X9 2ĬRgv4 TJں{ܲ=c.П/FKB'X %߈}"{Ǥk'cl7g$ NϏJxp AIz3/YZVV֥KH -jI;N5\ݴ{\hp86Ym?4kFjNShAXW2]daDa!dJqrE#1R;!wlzhLИ3AgD *d/^FU)$ EVQhl' 0+1_T X&2 F$PI`0,0Q<+J! ƻ( J`:GY5tt?>vE Ep8Pz]&/'ڐƿ(BvᙁE&<4u8VLlqeB Bl^eSC :TMR5IJ^*iLԘarTQʠ2xb>_耇&k}L1EBT =!g6_ `aaD#L!ԉ@ 5 'Xr0lީ@,9ʟNWCḆ+ZĂ=M 3>{&L׹shBlpMVYD/aǞ;@4w u e@BЌAs]=,E+*JN @?(p(/^*0p6:4f$ۑ1Ԕ0< H!P,f 3] l>c 1M'f]`= [ :jvrXrr Z -.ǫ>QYB²HoUDŽnҥK;v5p8NG&5jrɌH2vOVМF!FT2uyСon7qe\G!@Kشi !CN> Fs8eiKQF^a]dR''X5 Hi_x`+t;ޕL*QH34&x UJ,t&zCc5u DDbn@y}ժ͘yg5HHI%%B<5j# yd?ziSqŕ:~1/HfN?q8'5|'B[t~_S`\Z$= rs#mx.R͟8ӎ(=oN!q#G^!Z" M %RjFFP]DnRX @hH%~F=ddg iҭ EO4P׍暝D 7D٫Q$S1`ya"aΚڝD*}::НjɁi#Kz]P.y1m̝di*iٕ^iw4Ɛӷ,YG1㙝|6B$}ys*t"-=_Gw9i|XceL-mOM(rIH1#Q>f "QdFt@E^Ir 3P[Ԭ3&$T1tfҬjQ@0N}3Tiͪ"a!Ps SAUuBSs 78 Z亱d{2ܥ&)N6pD*mE:9~E~Y>t;ǾvpR%g*lp8N(9eu) K!"3 l a$ 蛠 *`(`-|T  RX"R{KegT{*U1T(Xmj@Du$"eBB:ulh"."zޫ>$F 8NѠDK ?? . Esgiƛ:374"4o/ir?N^ k^SnUq[N[n8p,k5fܫjBq{0YǮ&G|ʜu9s5S֏:y&~""*䏞}&O⟄"\_@x}w-TjZA8W;2ՠylk oMf=O(}`_,o_+uK_vdnpePjxwۋO|됻߿Z/ )+ۅ3<_/`z`)E3,|ſiŸVN_[1>QKP7 p8& ~]qWV7wHc߇] nOl3j9i+;}N4/^rșjg}ņ>+% &-TP A#UFI;y$*`Qe n4Gg kT.)E.UQuUS%z}nv:-E@ݪu;*Hw.G)6##G8SlL8J(v䣠p:D:JVu|i)Cv:D=p`Zf 8tM%:cAKL<` 2aoN)g@>[4T+uIT-uu2/f:P[mJ{v[8PsۚwY:0nKV:s#av6AHώQPZLbȉvaW\-2cL2Jto",SRi^s}@)޻cĀ$%+I2FwhhApp~⛚A}Odw ^a:z.s^XD> {v)%B\L3*9ksBcsNDWPmI=MwBT;z 'Thě_TߨK4-e!AQT3" jPxJJ^hVXVV U`XQP@n WKImgg9?5d70׼tfgf3~硽 jTj/W줯\գl2 ^uFDX+evZ+uhuִѺzbu9+z5Z+՛WNZwI•Y=e2"7_C/2,+g?޳c{2h&L `43>xxxxtb W=O}hŔo+W?,RgO3fqx!2!)dTr!e?&F!S(# IH "A$ j@LD'D'T$DIrq:k FߨB=Fj0 VϪճ m(6Ug 놦!!T"v0-d_R|9*A&YEh dDI #`D0"p~VFF^JJF%`TR")FQI)-ZZ7PBKV[ =`k{?0xÙ\ TetxW×>!qN# ٚ;UL3s\x7r21{:N=ڳp됌'BUTqhߕ}"4MMhix־64L|fgrE FI\xpk\ɋ\{2ʑsImU-~7J" @2+HiZ!&@4U-Ί7SN!8AR@hP"@j?a`xYa2 pnf V~{ U>gdG>BL@mQp XCMDJEUybX B©mY<[B+,8@(W6F2E+@IIIq2uH;%L Ahja.Š *Q\Q1u Imu-M[n&}+[L6B t߹ɓ'}wD@vw~XqVpn6s#SSy+4VD()WZeg3J3Th$Zx㍄w}Qs{ Jb=zѣ}ظmHi"ΫaERGV?:jJΪa -@Zrʽ x'K5 8–+0$R\AYM.WQ@Qx% 3Fjҩ鴲J-HORfxppSb JT @@HGTnn>xcL,y S|,E"7}z~[ jF݅/k*ãRӻؿ6! IDAT$e PVGmFc7 3Ec X1a$(*fջ 8'$R-JISa\SPٽrP MBc}z'%IɬteSiA!04)>WT! ɈdQE.F$%H!Q.m(S"I$@[Ms㑆g_OvA=<<<ߥۊ gPF#vR :$x81ڋ|Z8 0u$OQN%V@4{5,QDUv*eZδ v%j RJI(@/ ~bEQD pUd(. Pdd J"10*ElGgU;ّ[t֢S -ސ]9zq&M bxtф-KB~"EY7@aMLBjQmH_Ѣs%tht[IcOoE7IeK9e[5@`KMčRWʤA T@b0j7Iѥ/V0H>^[D]p?%ڋD+.ܢ >*|N{ւh}KME,|<ãjOeee+Hۊp5+Kt}^NG uH3_]szxxxxdn{6T]~揞DžHELJhiLzdA'mmikމ [}$"xL2Q>~nmT%eȪ#I8έʦ%S_cMM:cP:Kt总~ZTn)IS9z$ 1>IGoi!w)~pZEoohS<<<<<]D$|RX%̰t>$ \H qawBhDhDjTj)pXZ FuW/"[dТيi'(r]+}?7j쥓f--Ƒb=<<<LQ^vAQ>lI)$AL?`ԏ'7ې dUTmܝYo|uϷŔg8]"iEohx{}𑣰맬|ԯo)_suWvzxxxtr&;k (fsv.̑B?6$a-dP?և/ dÒEZBIԀf@6{J@PRKHZ9VRQW®14p JHS qVe4o IӴw5MBi'!v7`vuEՈUNrr)rji@.Df{HnzdӇ}O/};|hi7Noo~y۔]ss9Ǘv﷾腗8zÌ茔༼6j^4?IHH᡹oL㔔kvkm2J& -:k^uM}a*!\Uc/4k[gew7~Uc/Y_&?xxxxip.rr3b9U|,FJXs RA:uV7$b "&0&Ԭ>-4nl q"R4GP!вj! '`Gϣ7]oTJT'+t])Ā+dDC fY'TvĕPjum#s9DiyH#V*aK9+f)=k1s\D== A(g4pF쵓/0ibtgeȸWQ{>|Ht*a=XE]@C!p2&wmqNފYd K99.VIxW_q9cObz5ꉧ^5?{[ynǯ{8Vx'0N3@4l=Bogg:ns-2q^!Æ^꽷V_-ו]`a2eµS|]-?G OuzNĂR*i7?Ed yϋJsk*$%" -Gp$T\(D uS.Se $1.opK֦4 Qf)Փ^DJ)l}[0+<W;aAl[LGAaBY1]k^F -+n4_pg?|Y!(jwOTW:ګzmwv}Ue|saK_NV׷oѽ{ m8-]_34݆t#+R1gGq%pz偳'oyy cA̔/֒N[[O߀.Gme뗌5]~ݗسwwVur%ᜯيw۰yRs=<<nXvYī*y'v{TZ&UnJ YŒNFO3>;zyuĉZoDTe5]XqSTp^_@^̿vb7-f)_UYM&|*lG 4R4۳K SKC{-s"6{9_4-=_}Rt_]rwo?-)ɨCxo-|I^5k;NV׼?WDu5՗_r _.6U'vmt-F~~{w5p#.`8_ +e4zS(.lZQ9\,Y*`{ÒEp#Y.I{ǒFH,&0*O35 @d$.2UXI,4J Wo'N%PH(GY*J8uq6{vh ]MM͒%K8 yXr"k,_C3^Rtd" [_] WJJPya 84?c֦Ft=*o~x|7Y<ψK"$`;lA$bPd׭ VQ6 ]ٍ*eHjG'v=\ v7uYr S -c73<OhfmMܵrnĞɋ\|3&c}]{?+___6h ~/qӔ?<+mbpFm=COxrOm+ k$|aIavinda{ãٻe]~66lذf;{6H:PM oI)aPU'z1@|׺do&,-Bd(_t'V_, &|銇P#z ߇?/EJ-ؾ"% 5 g_5k\|ɥ vU:pڍz=݆!roD]1freWdҞcj,JѓԎ92T8YPd[ PtQH'~ J|È"sT8-"ٔT_3%j1"},t҈ ?-QUMy4#.0F@)dP;]ϺP:S;Ѿtm%[7mtttDH43$ď"K)9v%c{Ί}zÅu&G?;>%eM~ֲ=F~[zE`묉7X7od``+.b܂~廷[$(|yo~w>Yn~޽z6<\9{+0,lomHKH!O+ (9'Q\]M0H6Q oys ,jD dc.|]n)^ 08 &U3?)U =Gna3V'ۧ<~?э=IN~UZW. Ebɀ@rf{EyqȌPq?vwo\;,G_|}Os0 57]~`jϬ66s܂j3w?i]lATFfeeevko{:5ox#L]Vۺ/}r3n -z~۳'<_:oςƦ?=sTT4SSFzc;vEѐu(Xoύ}u1 Y"ޜ g/,&=o_0nzxx!xuuu͎6lX uIy4GHkZVu@IZ1ISAR{#*R2TRRIFi\cB,)W f*ƍ sh(BBjQ94ԅ] w?~j(3L>5fM"$ &A I©ѧ ;rYKU 8w= N#}(JA)|jL!j~ ڼ\lEfQOOY~cl~{![Oo~8K^="x{IOo_P22'|wX)\cq ?9G#>9ܸ(S;hg#i^v 7ܐdذa<<7;?.瑆@Tj-g^#y+Z ن66_cԧ3L#ۜT?!2ںzJH^nU}uWBlQ{Y?1)xLԜRzã )}X\XX8x3mQWuRl}s8E#˽)k#>vzM+EzJVViBNjoK$YȦ!{.9q`☩q7t=&]# hHH^) N))sAh Xd'E2n"Sf}Љa}Kl7 [MNY+ aӏ_hOZĘioj$[UsB늻|S0d){GF;ޥ|+^6lشiӿt{Oy3͏$g˪o$nVu,ҡ!kYZ Ef9;BԚPR{B&r9MCpʐUU2@Fh:+O?sk\PK vU "h,2@jǪq 8'(jh0$SB:Z%) qaJe+2:9x{1oƖ-Hovߚ"9-z Z[fx?<<<:!] -_(77DӴaÆ5=E>#݆ Hhѯhѥ3iHڔ uӨuÙѹ˿t]5UWUGr{8kAJU= XڵډRCͿ [ ;H,:+T\![%`D(턏YPljhj\~pq8dk`;MSu"|URAԁ⑸Ye4|R5C)/\\h}GhYP~(hWr 6ЍPgmH(2'mHB8QՂ˞~tr{i7R"`=3tC?5@=5VnmVhoy*r%=lwdd2bTӐX$%"Qi7#*~@#(F.zp;hJ<5]AbquBr~`5$fɖD R̉}v֑W ^+lhlE.,QjEզ#yѴF8A6nMߧG`f;42XI^~it[F8S#qOHl>Jk! (PAD0^aD}N[ Ah. B#R# HKLˈdD D"@ ➲D](`V!. LvI1aT-Ivb1XQʹQŶDc#%!"{xxxtE8X^)pEm9FAhV_^n+R""U -V[/mgsZ!$'ۯii¼om!-!%Efwĕ0UFP+لgxczd"J[gTBOD@c""eBPȡ>;MUy|{/\ɪF8$M"FF&Vn6!+ IDAT .[".֛w Ѓz/C^:2IR9|Uaxcr[24*Db#݁Vh0o؍<<<<u7Äԅ43=rG7ȕ=<X|ܯnIK ,h!%$w2Aa!K^O&?KQD=DQf"B61r#t$)-K,ܯ&U_(G9w|)h555[nݹsiСCeeev裏>Ç5[ng .]xm5VS-w;8rm9ΐ(r'YR@ݜX9 a@Ԥۜ8,xnܯ'c-N@ ?W3v"766Yfj`ȑEEE`ر]vYyy֭[O_{I˯0th2bZT Le hEN*?ϑ[Ͼ4uaϾjӌ L`K\w+s"ve0ڥ[ n=:Gn$DdEN&:22KhckrEqR9c[TWW;qn.G2$++?'O.?vBTX4P{;H 5M ?K)CPmmr9սz hLɓݻwgxFY^=F 9-:Qx ;eߥ>h 6ǣm"[oݺu޽{kkkWX7|CfeevڱcI4hPqqۡ槕]ۄ3BH]]Yx3;B]~m!@@9YYYG۷o=pΪ/+7 %OLc`VWj&ZL *KAŽ;`*ΐF3'Mg!T7^S4(ؐ"\2ӽK[v>VL/ ^q;a$AjIz3R5 _ҌT$mU (!I͂?{8Bq"rpr-:qѷ}۷?O D)ݻw#Fvg RLc0 9~3@0Ь ]?k]"{"ԑB66v間nCZO":Dog瞹âvx46&4m=T nwV^ݷoaÆ]ve_|޽{mvъ K0t1 .4aÆ Gtҁ{xx-.+s=cJ\92c,]kx ҝU-/FuN!$Vhbҥ:%q+ J q\w)r >DHrG>)5̏@si"cT&TuS R$sA+-%;-7$CHLS0}@oѼn9|>&U$8:l kgI)،25ȪKt %H)$BE? 6 0`ᅅܾ}{ >|x~~;v8xJ<\dW^CPatQ^1D<8JW:GYi g$3[NC}+'V$ $Lk`#n -R.l=Ʒr&5:$c=[orҗ^ziYYY\sW\?_~>p!|aI Ҥ#KiRh„E3O<îOg9v*8Er&e!4ږʍ nۊ(/t[!Ua_js:+3=*sǤцyR ) -,@o^zM8KtظiӦ_~*--}7nХK.K9wV40nv]u]߾`Ibф<8y){0K1mRal]$nOUO-& &k>.,_>SR5.sIBR. ! [(!TKM+.$B~k %Km9N;FRm^pŔR/%.q_ڙ|tRoo}K.8qb>}9-vOm~ KK+*Mhќ9+݁FwYtчXˆ^ĩ39Nb>b^&L3gB%+mc%)4Zo;ӯX4kGMkUH ^9Xg{E]V7&*be(sˮiQQN}6aD/* 8되b] mg=naAfփr/jD"vVTDDJ"5kBRSPSРЂBk>CRCҠIMLCXxՍIh*ZBNؔ4(*>mottB\ q5udjE u v6"OZƒեr,$%h1(@!&q32-G#!?t[hE.'X,56!DJK9 "Bgqdj $II 1Lf  sMR>BӹO>"+/IGl?{7|f> G-AR JM>]@ЅGI,IBRaRaRu0-V+jXte*GAp2xO}^SHtSJ^i 7ך1L(kک%a_&ph9QK*HEqќЂ4?UER 8pԩ7pSu>^[dɚ5k=zyKdP9 +,_X2o$}\UQ^'vdXo2~輼v>yN[p!PQ^h8CE#9+O:e8PV^QQ"l{"E9]6bSuuuuuSA{u-vȱW,H%Oϛ3QE{<^s\s1Î!fe2'v^xM i5kj7#dJ tەfz~K6boǏ-[i&wUWM6.BMMMGv'Nذa;9G}r:u_ӧhHeEyY8޿s}ko:G-,d;.Kgݢ`p+O>$趵jLd ˢgH|ZpNҥ/`}|=r;q=Q;FIR-c[Y!6,/.TV8* s`?8;!Oڵ\iN"ZЂrPHXffAi *59595,$Xo0!s=;}~5Aߊ@ _PZ[Fn -BBSB C0p$dBB HJ˳I@t_ KvoF3!D@VWWmEK"]HaP[AtK&`@cX8XfNK/QdBM5#cؑ㔂- 'R""w֭W^^zǏ/..6mZIIɄ .rwرc'NիWU捴r~=l$GYlʼnynJVLj0qc03z~ߞS&B3KꖌPX;,&>Ued^;myrE 'MC9;)=xΑ?K7'T(CŢ 7{u'u8=Ka ?$ĵ31P((r^FUDNP_irt*ݶLrޘv&/5j-2 q̊鶥f(BMS}fיGW:$++몫:uԾ}_]]qƭ[ ?<8qgϞcǎME=i]:8 ڌ KVMJ=RL|jɲy^Jq"uY]Om.:ͫ&"9c(wvEL!q/,DREER<]'N17Ŝ lyyy74奿NmoaKB=/9}\p|o.]x$9c_Jco.+],=g%Y9j*-[_(m-:U Q(ET -o.RFQd G]VM%:$p@9d2C1SPZ ';ѓW&*fRbEĝ*2 wAP WMnv~M@k6V}: Ab^Yilvr+XҪ&@VXU BRne'IWQ+lMTs+BB)$vI 'BkSSAڱd?vgkTVz`VXg#yCkFTiw:|}\IGLO IDATp=5ɨSCV`Xc%Vge雅&$(Cc#/#pŏed881׶iZE~)X.d?yY+Z${.G9=[Ɇ3/g._#oj>frăɺIS͂fJ#[a\=R#+(+aw|>ejl r %Qvqak]FC'Z0yH57~xRyT<v9Yo5.nJ@H K9 IC}:ﲻxƑoQ呫r+1pvj\8,ZcM%ؐNE:ʌHG {hm:3Ljrq&ʈy$N6Z?yFY{[W`μu1xWwC5Sn-[466:Ry+>즩}`Me 7ǐB KwF~!9y)5_X}S{+4h4Cb`SC(t|qO R1O-;;D?yڹ!i)xQdLk_z}9ȑ/>ZFUkKƭz"H$QdF0Y Fq3X27:IÂE;&3P0iwSʹNGmZAL,+~lQd{?vEb_xcgt8XOpYH}@\xJiL뎺qNmȗТ9Z:W?;+g}äiw\o&= Ӝ*/-[v4Hp3b4jBt1C_,7NnQ3 4eU}5.&u#M)̐q3n,QH*I{:Q"RX"Qd"+ Jב"VJ%M6@>Qŀ?/L1;H BV-]UH_}`ɪu[ ¤ږ mֹ}2Q8r Hh[E6m\Qd5BJfF#Hx [N'jpr8# /xd>ʻNxqd282e'̭#6?5$\-W4֙S^_xd?iR[wZWʻnTS8c قt[2g{ko禽y *+ {rlqn 8r P 8k2ɿ"W4!~HHe.7bNl';rSRd D";nCXb$*O Aȩc5M!#>$:A|z‰S3P&*- ~Ul˭Z>tZE85F#=mZ-cOꆖ^>x6d*Epm,ZדL|Lp,Fa9lnB=i_S+.<91PønB㉟|aDž'Gr{V>fd/\;B\1aѭO0 J.:1 wdd+ol; ;6<=IpbD|ߵ|"X@[ Sq]yj9m`*Pz s˶_7;@ ;P2(RbɛIJ*ޫޅ~*m~QvPf[4N>L̾Hwk=kۛm'g_1apOORh&E4L<<%5Mf d"x+gWMVԟn߬MqBfy g%Nuٗ:{Bv;(G| ^a PL; i'#Q5?4< Jf8by^ĥ⛯ngaO3ؿ!+q80ML)<)h<819]5wj:DY:w7}z=l±wM15Fh\Tθ;^7_MU!?~`m 䲖|ٌ1s!į 'Go:za-+wOd3Ɵ4̲X.g_tam3>O~VUȤZ se:,}39̒/ﮠТWAZfdzF>J%>m:_F 6wn5Lx }B|4c'>l[ V!M 'ۇ[9/:*W>b6ȼkA p* + Jzbʞp9 y12oкǧܢwAP?U:8ovn 1=ISG5=n䐔s'˻ED7gMI)Neg;K) 4G>;^Vh췏%JvV@V!HFhz#7ϘRxZk4.oՉTEӎ9+o'A6zުmNg1@yRIũ@zd> + D4ݕA[;FєCz6'-|T^QO9ӾpaObfv 9/-6@/9s8'iU}g :MG7sFZO~6vͣ~s_:0_}yǝ?Y H24xu!{s~ #,m7W]=#qr)&b Ѣ8b^?0iOw/Y|cO 5o|ݶcw+OZvW uff6۸qcWXd!}54hCrIB|&HSA2|YnBţW$d, Q23:B'<=eRMXȚTYt4f c̶mf,E,}lٌG|me0DUz| -d޸X K`]ZhJ`6c;˿`Տ~'?Ih|'MMMW^y%&r6.(s_E K܁% 7lt"c$L-ϰ,R$Unc=p=_ʶB EQ'-/ɱ?&mMPxp3xg4a((nnƅM9!}Rl#/W'Ǟ/8<6&rMҜ8,+/E9L,4$WlrvΜ}O?}:h4g*.B9{ջ|ɒ5Fϒ-Y |%헾;s!UpG;n/\ϡe/Bc \֎p'W!c<)xsD;5}bn6Vt 08g.|u¯T oyM] }ZTVE_"}mgCW[}__۴دQ959ue_MEj6g^6 QNc[n+xD&Ђ3ΘNOv%HīER߹aj N\SKP[P AIE`s!ܚ|Pb ! 1osaF(b0T7ʈM'\TߔZ8?yTȿ)'I(IYrKx+DzݐO/7pxѷ)\1af',Y_&eo;͜z{zE5o6թ(FS̶3<aFPFqMώz_'.spؖh`$fX3f3o5[p߲5h4ܿ*&2+y[{{D5=BiQ> #Ŏ(v*p2yɊrND&Nϩ'Ú3^cߑ|muKn>qıu|d|0##q{Y }"T6BXtBAqwvLAcy\T#u9d(GyN]hAYTȘ.+?et{wٕs_1S[M$5Fj4Mב%*[ `֭3lz-G))P|^d]|z^螈Z@ld0szh| YAs2η%ndؾ ,2B9];w es7 "c"،}쥘 t2W9AɯRz¡+xz~.:7./"FU~߹Oha&KQ.{BJoɌ9RnF=gvB ɎV\ -*}K'Ϳ jT -Dh4~|X{ ҈i%8k̘7vJ$5]pSUVD@?"G@-'{Rnaxa bʧB D*0 ܑ%H9' as'R~vmSc!U-i\EZ'*S/@YB~Eh4M"7͛/鷆Sh"J,(:Ez#K?:K/`[nÙytZ^}%k4FSaOm3/\7\Giז{]wR@bsu+x)J$q)J-ʄ BJpj@4QIkBDB L;+"SXnT8@-1O6Iʥ۔ZIlEKWe"@o%꾨h;:luQiE)}]VяG1CsίգOd]񳇿qFh4eѥp=o%OwR8E]ɰ86ˑeVЌ"A]DCdܔH!{4"W: 뾴n"&DL%t@ q+6a')7l~㸸,2.s !r έU614}3qYZΡM*FrRo,c}wj{N=(w }=@NDyPvtk}@Y^.뉰ee2~TUH4(YtՄO<~?{R\+ϭvݻwse1. `Ə? ^=v,Ţmf>rȑ# =&(W)CٿB #_."oǣ41]( H>!M@uH r2ntZT@(p|u8Y,Y15UcW182,IjKk8zs{( IqrLs yU+EXwI.9‚8y޼yEz,ws}x۸!#4<xcOUPt~ ޽+t77˗\8+X8~ocСA-e֜17/r59h4wP]A/ D wӲt+;É/jRR?P^?`Ugs5ւM 7үqR PVԐR{(NG9an Rb".ɏFzC]=^88‰I >0BCKj0OРT$K6CU6iM3*g┹c j6p4IaLO[ҿk @L¿|_ T J׸?n#qcqwn? E"GԌW]`z{b+Y0nH)d3xwX){9}r8#9놧N+EɹKZE+E(_„N0wB9A"APF0r"Ϟ!(PuU \?muݿF{Yvv6/?8R/Ͷ7ވ ]> SQcl6fX:Eol6}ٶ"Z*x云Ջ_a̞W }O;-Y?"b75-+1(bFӟ]2PUPU5+L6ȅmmzU8d2~زT*J:;:6mTyi4=u*=ʿ?\ZJ-ӏƼ-)36K~N>s٨eO{өeʙ|oƯ(+3_+kv9Ƿm˶7-CzE5ot׍*so򎏮ؿv&;N4 >0ζS[;~Y=tiW4ǃbK> fWItLO,lj4|t1^5rd[{D"qȑ۷>^+=;M(Oq=It OƻIwoWB Ww q BB y J}on*_RSP,oIddW% `N8 De @'ApB%“B \IDBP+T<Ay/oE);JuWkTɏ5:QXY%R1Qcr)^51˖H˜ۗa=땓3;G.7[_5uL_W_oXs ^{_Wn}MeasxwHnf\=mZM_1=H$\`IoS"s:v#]tСCcXjI'N8p@gќ*ڋ,(9gq^Z!,:Ei͛̋mwp°&^}֏=D8qCb?ǧ[~{S 6.k>shG.q1iߞ a/ZCO/704FiǴx{J%n O4!s+/gszr4BȆLFz !0e2JE͖ Bpa<ٝjX,F(m]aP:ʲ,.t/zOu7r'#&zցr;(/Cdt]S9'n syA{P=,J!dz%2nI8.a͍;Tq,dd(^ 1m9) w. +9!籠 ?p1`W E:GgׯǍ.u~d_W#;:w{f_S>_ &K\}nu}EOS}fNx P7et9Η8h_ӔC:ؽvM2ޚ<.6ea1}cG-Ezۖ=@h"=G{1a̺{?;_o!HN&DsJLӴ,۲lJ)߭QJv׻@d)d@Abq oX\ _*fbp_} K)µ|.j7O -(85)᪸4a2y\ޅӫuB8Y"7Qt@;Ļp^䈱Eѯ#7czr`ֽ͛V=.@9_1apk’kRƸ!߭8"5s.v9s^fˌ/EյkW4MS=r4m?x[7c8,e9h΀XcVHKOo۲5H[G 2c\;.>KHa̹ᮇƊ0)D" !:;;cQR۶[ZZbX24S%61aꈽ g޽jQCz%Ēp*!V1`$g^^5[eReۛV]0'a-XY61)YOpjG.Ș1c oԤCo&&9Ԩd؃)㜫ƏORGxpٶ [f.޴}Y 3mo2MAxم,+7nذmC[Z[8--^x/|TzA g`T 'Η[D;-[_x0KT%(l GLaI32UpӼJ 9]2J$*:=/;rԻѦDŽ+1y3H/ {i[xc8Q/~\hwe]δ4Mrp"w;[plveeN^מG.F"쫮FSSSss>JQ;([骓 FEw*GGX= {^jQAp]ȝňfcQmTUnNFcz800ycۂJ-y1ozZ -H\I@ȋ QRhݴgm"!"e(gu<y'Q- `n]]mXkjjrv :tСrK/]vmccw߽oy屘cXb;#QZyΤ4Md .*= M&H=ztrZ{]}}z";(O YFcb?ϯD0(x|;Yz!KcM+JAݪwZ=#9(P(UrzeCWl VX0̼v;8ED%LS7pKJe=߶F[JaX,LRd2cM_$ves+ZV^]bD)p8ӍB{5F/Ç5Cp*X"*b%D1֭NBrݵn@#wtȷ}yes'ۂ0Aȟ䁹唫شe޷`g K, " 56 A [>O3?wCs?=]{8sƹ2y'2#f. j4F).=J,fVG!"Ja4I2Ѩ%(l+oɂ1.)-l\P昶laX0a&1ԟvUgJv~:+PVvs-fRA`# m[ȅM<vc>aVFhᜫ+=Wtd>Eno?y?:Bʷ_z葅h4F~#+Nޮ9>OnTQJhy? n9">fG ̉bZ$W`KOABNPp)K(Q@9Y}([H/8X *@g," K>wdc(q;%/Chۋ4;:;RYp@6;|65Fh4]{rm' g90}Fh4}х:#y ti1uQw qRF$R|pN|HD%u*x\-J[WxPpN9r,3mAdО\d^nZ0,aX°a S:y:xma S$"{Ȭ3A??r6 THqTV dR 5 hQtD;OvtH%Ed'Y\:,v%NDFX%dlc6bwicN` IDAT eX$Kʀ?7(лv#k#TʋL &VL"rdEn/ 2klvmsoY_fFh4,+7дn!e^_ڀʺ0LmkB-2FSZ WnaنũũemZcv5Y;Y]xF4%c'Y$KdOf@mlFB^c+B-"?\rIEnmю3 2Zd2A9uۗ͌Ys@]3Lբh4M xJbU/JCYCy}Krgvˉq!D^d" ۏg]7eƖaJ-Sj4NN "bN؀-^sLĨuE x ή #GFYhPӓDZ,=\pt%? 2Tp^#HqU/R{p!)2dy2Q0!DP @Df3iŁͩmP̠ԖdJ8F'>ɕKTГY8'\ U͓d}T~i lMx?|' :}}&OW!kPj@dԈanjvK9^4¯Oۏo%}h4QP .GvjX3FyzVM@@tZ$1U~Js jz qW@JOd N_b[EɫWv @ȋ\D&6\%7{v_徂k%}޹mۻڢh5UH?#8wWsԤqmG^{E_[q^~^`DAh,Vk[9pp --`;dÐ{B:!d7A"\*DnqNLGnv(u8%¦o;+v` LH/ * " -.2AW,N\1L(TX}nco9[ТwSփ%Qpa" *7Ŝ Xl1F3P̬N%'woׯ,w]ӛ.hₛlUې4-HUF}T2~\.Whm&qL_ W^0}KͮuYv/ f٢h9m'6>o&JΟ?vO8uU 2M@ТyUY{DR- IН,Dqw\HZp05Mm-HB}BFԊlB_r0#f2\($-3 NjЀ/ViE9e|iY8dqoy~b;9\)ZDRTeRK.dÆ G->OȧBb⦬>ge620F3 {<{p?4Ywݳ.xw_UUV;%uM#oK*ʙ. 1_^h:܂RhA ""B)\ǐ4;) iO6Ǥc+G\ bGwal4kpi &?isGOh!ƱF.JM~lF -?riR>ȩT=yѣGܿtч5t`;vlhYly{ړǬy_4܊0SXFo(F:}Sh4H5q27y;\uQjL 5.?|2NZ2{ƪAjIC6dSE )h'RwaJ9'0IPh!8{Ow!r+DyY8 T;TB~e"k4!%Lņs7\4uvoқ?140 #3kjZh~]!=C?hMdF(s}[x҇9q`О/Ҹ0vtG,E2qS .˶<P!W$2՚ʙ &`6 ʋ, xO+<>r.d1@YE= rP|XDt65FScmVju˰uY TVjˆb2 j ШhMkB#e2{r]¤aKɐr 9ʑ[-P[ &r tϝcseT:beRmBMQ R!5D::/2 @ :5DjlPΊ~`8n J&FTCNo?/v]?^m~+A;O<_&w~Wĵ}khE׭>+xV8m"k4M%dSfV Ӯ) Ӿ?v3>)IJOXpV"bO <̈́s-fC,kqH27r u|\m)_2Qs "B6dRbs`;ni%Dp"B)F6Zsz![8/J[%i5a d[=5hkIoNv5=ִSh*C|L2Jb>|m^.-m"k4M%1mcР'O@66l$CcoƪԐ?9Ӥ&uTâujP~FsmkWXpUsłq|R]`ܱ8`\ 0AmNmNlAlAR[ȅ0:jZYQ E`bb k9-C.L.Yo9jg w,Y MvQp&C8te1G\\ Y(=+W.gE}ve -zwjm"k4ME1y U1+ X[ Ž%c\8 &3ՈY_BnXƺEQ!hw5-M"`DZeB (͈͔̔,f+㘁2a86,aX09lڠ6ÂaAsR"$GY 9]\Y.nu,`,[Ŀ8gqLƱZBE鹑|ʥ?n"k-qEzu=FsZ!5L}wa$0 ]n.qP~,ᵫfޙZ>FQ4]Ԩy-*N&֗8TR]0mh͐31FќҏƼnʌ5c -jWӧyؽ`n32W9]z/1BD=+xi#G Y;|d#g2n{}կu]_ҳh4Sgݢ~{aQ?ʬZ }oR|Dg&c[WN'>ێwuٺu3jkkٻw  =z>r$?ڕҰum˶7-Kht `Qj`mvr[4J7Q=ztȐ!k9<{^5oo֭Foi{.gvnp&6uD(f"/QmrP))?R<5?TOz継SojFh4(f"ڻoÏ,Ǐ;r#B?pxT;vW4L_s>NhKٕs0gkׯ3ukR]Y-Fh4B1yso=1ztm41|֘iVXL͹7tX-nx⋙˶7a\6H9eh4FhNuVu4",nʺsVf+h4M``j]kk&r4eh4F[Zh4F hYh4F MdF-dN~rO4fh4MF+m{9{Y1ÃLbLLS]k4͙L/2@@@&h4攰m4Mf[#FӑgOrĺGO9 `iڶ]9 ɢuʙ½dBi n\~"/?峃?>LC94 F 5b84FՎR}z'h4'~D,jj7tvf*=nn5xT!vMx,|TH6-7!|6!l_r 0PWf|tm7,Oě_[o-yh4 ۶NeFu.c|=M}muuu4>ıml7X ]u7k4^}ql_>7!xgq*V?mG_D>s3Ν;9&Mԓh4Duu/>fv{_O%B3fž J\zy}]ݔjzoǞkfۼiy`%Ok7a=GVcҗ?&r<߸q㙙F @?/V=tcL.|ڹ~T^ٰq JWS&X+3ОuWkT(@ ޻woh4BZZjɎ[l6r fYzCo$$WљfM|gqf} & g`"r״MKBy„ Fo^~⩿֎eInذ@NriУGK/3.u~d_/X{uaժF88e݄}= H/]zg~@Fӛimm}MѣVZĈZ |jóuuu555lwh\CXhtӶKvy܄mPOn[XwI_yҏތ͛m_| f֭3f̨-2f޽EܽG-FєѣG  SƘmo[[[sPqE(ؽ}tHW|[*)4F%Yh*L*ƿ-b߽gšG|s_25Dd:[cY-ɲX,Vj4@zF9q]o8yw7L~sKo}}~]tttFs&߹FSalnmm=t;.=r޽{-3gϞO2eGUUU%Kh4tMdF0ҪK/4ڶ}WB(X,L<8HXFќ~h4RJt(FlYk:Ɓ 0:.e*L]V]hkg}׭XRi*HW[ME(7 !p!7 ~.}rMÓs[SSե}:BhqssûB===UUUẊhT*1KF!dR,;cF)SSScXBٸAGu]tvX%R(AQrzY|b8$S}S,kCmqnR*g`;($$ P({;IRk„BoNB644X: B6NܬY˱%Iq\[x,p8=\X_6$g|}_oMklCwn݊z__yeCB B9=7!VJxN$ Wj@$,}XLzqDl0 B!)?Mw3;Pl}n\k MZM} r9\.$1Oh4R*4[R!B'EOk6 uɻH_oQ_=`s>=5]x ARG.Ŵ)$}tc!B-쭦Ny_Axptvj+2qh_>ѿj9pr>"ZBY>M&$髷n egKvEM[ u:B!샞ZOU+=}Χ,8nm\gVF!)N[E[>ȑ(bj[NRhVBP(*V_.aQQ;+Baej"[-lNjz@= dryuuuuu۷- BYIxFĜ-uNm-Yco wOiSʼn]=*䗗;}֣ 9 ؗzb 8"oqOu !H*a>>uu7SErTDQ;U Ag/BڵkW\pႣɓyYf9::Z::27"඲⢗'d슸,?ad_/GUO wO*|z^z~Bq~~= 4:lSˤYE]@[t^8MC 7_Q,T݁76tz@&tvvfee%KPO!]f xzzΟ?>ǧZ\*|LVZ:(f<]W7 Rvpp^8ԲA"FܹsvuutD j T.f\Ǐx%IGP($DF`(C^dRG|YY"Qa9:Åe aCD;J-!tn|[nnذƒO];k?f{_n~zeSW[,&u5 wW7_u1CWwuzMKo/~zd^v"t;mŖo^s.Iz4m(oJk\-=z*sNIzts;9t$=z׼n܀'ĉ}7n@ss_x}'?H:_Kh\PYzQ'u!s6Dt'5L 1LG&~d6S&2y!>Qnͳ.ެ 1;9XEYXbqjAiNVo=Y8)a2YIC{s6>X;'7!&F]h1g竖^jr?GN[-}vooի?77w@- ϑ <LU;<a]ѓ]7 ^Rd.,H~xCYr- :ydKKːaaaaA8- J&`YDETL<5WH3V8!zp`N p?t{25x;3'BGk]%ѫQZ+>3 KwUK;m5Ҿ7:)Ic+]lT'799N'PjC0w.<6$tq:a_y ;꩸w?)]xaH\Ia{zG^Rdr8-Bp8S^r'Mm|LYܾcXkDpã8EYqJ^^ʠ#t\% {-@ x; 6RPJI+^N5;!qK/z]E"*X~N0NZdsLlAsf<yzdFr,z0" pqժx\.8:F%\Q W#^,H%b qrꇴEO;a#ɥ w䞑\ɜ y4*}>#ãɎRdNP__O-PWuv1(::z޽`d3/_|zSR!v[LjCLj^JĪbSăKgoIԿԘmkc33%ƪAZȏ?P;_VZLl6xHsU@*TdoFL.}jtwշx^3Z/جye|zy^zOVzbx׍+C$]'>ﺱwEZE (@xeqz) BoУGkמ}ّĘJl 92 ibgDsP2H$Аd|_iA!crwwwpЌ0 `#Ng4,UL5fPmmg}yfٰ˗^Z(}3aBy黉!;`QdS@^j|PMr?u:FCkGUZE~HhxzuHR)S0XaHÂ!dsssBܹs9NXXXddŋ'L`I?tt6Y$"͍iG< 6`jM32V"a-UհSdw r\"444>>>aaa4gMFSͫlţ!daEl!D!,36!c/OC!B&=ȝ%%%o񱽇Z!B!CO$ {;o~+!g%!4"<Mx:Yًt2G!d! )zxʤop{z< ܃l>!B)29SrW/L`Bá$^c2NӡpۖI!!a!?Emijp8"I%٭T*}Dw~q<\HCWF!BdNE͚v,VuO '׿pp(8.lKh62'''..1B;T5 2G]Z-CC`lFc |j$x=c˾ffC!4ڥنK跤#4COf_ץߒq<] yy`ז:|"2ؤ,ȲֆXE!D kM}GB,+i[U>@Լ#C2f[0!Fh|2K%EF!4Z ĭ |JKWuJN3ZTl3#d,Š Í(wHb-$Pرc: u޽[ql6z']xF$I(zcCm:t}yD"___d2>?^\npC.`m s݉Bln˧3Gb/K^ 楈Djjm ߮B#dNN'M:{5{= EdEhg3!2ԼiJpwG-^^IT"2@1pBkccSꈌ %l [bF6/~=EHoK@yH3q5?\XwLrw$C*faB?!#EoՑҗ%#˒߮G/DmtIiDfi%y!BC"ZbF6+crZQd>XAzWpg<. lSB[aE#1o9 -VY0MRpEʮh'R a* B!dpId)S';bQe~ę!_{'Iݢq(#)[:Hg`f3-srrha1U2K%I-5gkuX̆6̒B g 쯌~Q\h $zF!y8#e nC}sa"C!dSoǹ,Bƣd$Ț@u1<<<>BH޿Ro~lo1o o-maFJտ-L(2(`WWb!}"-7BˆdU >_*0Zs-1B#1o|7BCujji0߷઎A4^NջK{{60..1B"0ܸ΋ҏ~4!F8O5;` Ygݻw+D$s-nHnR#PTT$|}} dG!:r;88>7T?Gڝ(}`.Le%퀭 |łKs6G"55u۶mK !sEvsscsKKJJJKJKnk#<`i .^e0 {+~#-#zFMGBVGuȲfJeAPm$Hk_GHbQ?]!566޻w/,, y 7B oCQ$IT`/M֊k 쯌~K,0 -BeTZ*JB1m4SS -B_ss!ܘ1clvMMMDDcA![!4H$wZ:[!haDV(!FBARt %T3-#4COf_ץߒq"#ݽ{WH7a~oFG 1FB)2BY@oo򗿼7n|7B!U m RbTc~J-S -h9PgAruzf*aD2̀`WDňFYgݻwyRP{cλcb!xaLQQH$2| L&6s7BȂr;888 ?Gڝ( F͔ttvvxSLZ *H4'/ED f!3۶m1Emijp8"I%6@ |\O4UB9::޾};###,,l[np8ׯ_ upp-//ooo ;vD"illtuu2eJiiiww[6?HP%A!W}Fvh̉a<";ujx~2mm_իyhsU!dO?6'SR ~_~njj>}{yyQw,@9tBh?awD[eUK =9~c BȦܽ{7##c˖-pҥiӦi߸8NSSkEEEMM 5˄.~.XA˄BfYϏjeMg{-C42!d%裏O8ꫯ}WǏwuueX7osH$'MT^^h""S|?,x}w}ox{{P(\SGGGTTˍ~TTG!{A/E{-^/ݫ15HO37'=#M?B{Wzzz8vĘ1c4˞ԲUOB6vuIDATG[>V 3Ԡ{Q{gD!oL\.C!4,k+J#zKnHo̟5x w7kBl0/ݸqY X!d"}|hoaM  zB!]AAAmmm B^dÆh=BLr#$EF!BȆaB!P?h מ偹BB!BȒ"ee奥e%eeedwƏ7|! b)IY2YVՐe%Ŧ.Beb5ﱕ^4M(:YK}ZϋX"Ξ=ۈ>MK{ܨ6vCsM9)vRT*- \5fvO JZ{ !de b$-JAگA P`}ʲU%K&HeYdYI;dbUW-QkcOcxXh>*TUUo8RXUUJA\5/B5y $?,D]]رcmw񩩩\dN<c x6Kǂ,p<1d`+{vUA3PPV-f|muH3Ʈzsb ONle4" l#4oR$\T7 9, 5p$B2k̩Q0uuuY: ddYI;`+5HP%Xo} c󩵤-BԼ1@AZ쑂Vv ҶAj^dYIk6~e4fno'1&aՐSJJ !$IKG,M=%R~̜ OKe%g$(j]~m}4y oiƇKVUe` A߮mΌ9sEs=\<?hnkc& }mUdh'<"?F{)>o|mӦL 4/Sss:z~?f!kr;hHxׯ_k/#2stϞ.1<& !8Zq! 4l===G={O?xazfϞo :}Ekkk{wǎ/ȶt8!dl$Ev'w<ԕpW_v7 oz]Q˥K;9N;9l &\S݊n6w/umhy%鳙8?gk?쬯Rܹsjkk[ZZV\դ=۶z;\oV``SK z,B#EubO Z!d`uѬ٣vV\N$}vhR"#qv:of/GwoU?f ?b9in?+IN?(a˦d}:::Μ9Cc=yUVV655qKf/+H(.lomJ~Eqqs#BwX CDeph ڣFL%髷n Ubpx=z7]{zI4YV3gիw6gÊמ?>IrmwԆAΎ:{*J":::Ν;5cƌNT PWWK/q8:_[՗(|LHu Pwog#=Qw E^/)(+91~͔]J֛!tn F1w+.*a_<1tKaa aųr2UbzX+5:uKؖg>;]1=d˿kw?o<&ʐs䨝Q1MW롳ERY"\"j9:qhAq`=輊ɮ2˗߹sG"*s綵;w6nܨ @;GSnHWߤo WQoG~~zjB"P$*d^+⤸Z/X,hk_,IZv@Q8"rxX]A7q\!L8{{pM oM㍛Pj5$y//Iz|E@>{;2UBfzp8R 7oܰaއԗ}Ԫ_YcKtçD-)#&_j8!-hJғ%qQŕ UU uvtmo>~ț{c*u uQVaZArxầTɫ!jbzBbzi2իWSɱR,++KLL䡘euϦ'nu? Ҥ=5)&Dh4mi6 &ȜX,Ȓc{šh &u5Ú!]M)2Ǔz@ZfaDSS`{ 3|M9X.GGǡfhF!M3Z444reT(uuu3)5Ae#$Ivvvvuu9;;[:BVm4 p`D//l j6vCsM9X,WW׎KE+5FBhJ冇\vxȪX,KGB B!!B3 -Bj:t!Vll'@$\g(B)2B1cҥF=x0Z/21+J|C@!:ieZp~&)b~>C} . _HsO^|qCùS^ x&z?^|YỶTfM?H(g̙ NorX2 -BȜ"g qS#ٳgjæпޯ \)-J$K0Oe"d0EF!Y%>pTR:3-YTEJ5@DOҳ ~́ &ԁSSʥ ~MD RaWLb?އ(gD+ wDgJ>qJTgN_, ]-@LQfx!vD8 {`A˧DU~IsOAwYk} -zt /E.--ջBhni9F Iˋ 궭SˮioRSiZ4v/A|vi@pYiyiLL@6K@m .ɄJxhWfH*!s fkW.I< % pIbq%SGhLY62~ѣy41a^{~?;w2VBvAW*)\HUEle *rO R/HY/#t2 ?Yl Av,'pϔhK˯l6냒. K+ssN,4x ʥg¸gJu`|LT,\z dGSEk{eO7!4,K_ye38q+l6QL!d vzj^͗ vP2H&#;\t2i^Vu@E@Y!( [hYAeIΉpIUxakjxkK^;D ^3qB=gΘ=Ž}oĦڭޣ)' ${BA477oT*Y,VSSL"H; BȺrwwwP(:ڨ]#t~[vu~1ZkOV5;f6t#oI&D(ߋ/ s՛`%TcUW-^)w#jtYCr7 ZI^ۃgRw&D;ݿ<Sd-amjzA7E6Vkq"#dɛw&Io˟1QL!donim ,Mk9LU!5y̘13'%mptt4QL!4zA$AdYqWǖ!`vtt|6! ppphmm%Iҁ TKDDn[UUy}rV7WKYUԸI 0)&`%aDZ-L˾/B4;#ﵾe Vj{`|ES{_>~J2NQwX]tzGFF&v .#e2iP .ˁ%.Hbkb꾱Ulibza|{eujro#Qc ?yi(. XUq>Wvc ^RL+4 j|~4RFv8 4g ~4 /;/їUt28r`o#~{IOpL&Qc9>I̢NF4]D$ :uD.uU dž:;KΣmMuPq WK <"ͣ%$7I%qY~+|Hȑr"":p?w61LF_/<=ݩ'2mfgsXҢj nzRݿJB-7w6=h[nرn Oz#*R剂J\q}(ZEUG7f pƍ[mJ￷Uq[ڲ~kK{i4j{9|aْ7W <+lߟH^dzX+W#/61^TG7l4>ϟu"֛+y翔TnQH/ovOC~TRT|TSqW⯫|/Z^- y" ( ;_|⾗{ wشd0JN`muufw4R(4+SK^N34HWTUȲ;HD7yA"xue# lT4 _ku;N˟*Br?l+򝾬R^rb2yx&XBG?ri'˭WPh#u"5u$j)WK U7눶W_Qĭ\/=䶶MJf#Ɉj?m59N=\wLI(#{{TZPZKڲI}^UgPтeP>J[0B|u/J&}$ xW?8{vLLIԸQut7WĪj{9,ɖ?8p&DDwk~_g_ۄ]|$GTIf/bkr|WE)}kO;>bՠH\XyQ}c,t7\^W1j|{R"eWo}(FvH_1*c H4:e[Ye6*ozq{?D_Vyx2,뱾{ТҖQ%]蛻5a'y/Y|yja^DQ#_$ ? /NuCʑ#?SXz$t:uΣgE5$/:שv\_)|#QZܾIjoV  {_]TKS^Y״0OҴ^7{ cym+_+dfx~$~n}K_oDT? yp(sRX2kOLvl.7XUs(͏HqiN oݺ֭[NltQwW;M/:DD6:0N3塆٨hౕ\'/_m͇fmԙ18mW6Yq"ZEZ.a+aLAKfHϞUOEg/L&L]S%suG-ҷfok%yT50hq\o6؈覓ʷ{:oFCHr"uS;6r;7 uO>l?)]Š>x뭷}a6f8Ւ~U]҃;\nh:TrTu+ڄ͇Q:-j<ʥVPh#57WK'2dEV9ܸONyUzXD/mذaڰaCN_1zrXrTo#CloQoH(m+'MQMWn:+VLTWD,~j{9,L Sijb$]0‹P7u&n6cUyovX+Fމ7ɓzbfQHCxLTre3 7Xtl4j{j +/mS䫉d] ^8驰ƍ{ Zpыq6lVxE=onn.0]XyE OG巵cݎ4J~Gy}umohl3A tTwuV WKT;hT\ohE_=64]W|D6Ւȑr"":p?wZ4]5=Pv `}_׍{jя~s댴E]P^63&um/J/;xP<~Х.nڡŰ\kt壏>? C1;=./H /ڱa/"kCc2x`B^\ic򊋋?ӥlwV|^%PH* qU/` XV!U"y֭[\\E15j:v3W}9 _* B~_93>v/">^#9>,ķ9Bj!Fn퉽D᫗t0GzFOe9iIå<4||) i&}KIMDåޠ7d8v^ ʵH!"й=4||%1NщRx꤃NԿ'AzpԾSDDeivL! FteDv|%gv:_GeL'/1y3vHzN؏#tR!s,"2<@O`_ivMQ&]:@g}ߕ28|жkvsW4;n?'.DO]}'~#j R\åDDkW&uOi#,$/1 zy7\}J7y')ݤ<\2)_SRJ:k;"1ei 4NɉR~® _T-v;90L1ñWkjjN P,p_ͩcci?xKiRYee8vF^?tp>E3]VN~C{D%|3nj8aozboXuy{,۽@9\}.E`0|<(v%0Fa<_ B~HBۡE@Z$*WTG/ r"Jo'؅J=n~Bw*j}MͪvTܷ\ŵ~Z Joe'J |kv"ܿ:||ӟ5c(!oĨgxaau qjrԾD荼ÊvlwI^ ޹6J=׮d/g]ۡ+-R~_$[]3? zP-AN; O2*sʢ>wFKQeΥ[CTS[ l'9Xx%y(=Z;M 9㯴S<|}]{8e3!jj /ū'T[•Nr}қȯRVh^Ee"\wM%!Կ]v&vqZ;d+#dTzSLIڕIUwj3^󚯡~W6ɒle W$YqKw[Fs <K{JעԷH+ gWn-۱j}>zly[qQ &NiM~[QGE(3) m~kt~U+ s!ѲK7d=+[5δFߎ2i]Ǔk8!}T˅Agvr{<cCﴗ=OP`6"=pA#ntKHJǖg'-־Pk_X&uS6|<_HkM%3/*.1jßA%QJ.SLIiqPT=LKߖkᄝaî%D  ؾvWP⧾ Dm2Ĭwg)CC*윃mX P W0Ho@.C~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_**~~i$6ՙIWuq RKI%7X?6:ouuf7s}:[zٌ? iJ*pIDAToX.6%55)rOWo#.gqd3V9Jfh[E !V^;by}|EYlDtIR}hWFh7I3CR,]oUU]ΛDMr,_-k.7tV4*wXlv9*iB7q+C'߱Y͇tD-dis:nRESgk?WvzJW-z]̖f:y\#]}3Y,=@ޱnG&v3q@jaB~_* B~p=eƝ{ BMݻ5"u6^wvvviiIr ׭SM/{3gnk6]_Y܂[Ύqkhzgff6o\RRUN-[(0ܿ _.-:kc;Jo?뛋9wh46mp'd>,kUQ{bko^Fd2diiIIK6ЬW[uaKuuEjZᵼ\ k Re2L dPoCVwX$Y; p -N^rHd3ŤL.0`/ج8B=>g Z|f(lq?f2H=@65iL.yimu25oA~Oʑ)"6bx,#ea= 4a%"92WZr&LQ>s鍳e- H8FKS{Nv* J$y{Uʏɞ!/e#"4"^JD;[9{ƙL㢕=;njg g2 W{H`Zd(?BAJ=Б@Z;:D,,#7<$r0mf~ a'G.ÍD/N e|qn?p7RZ:ҝDW;psg;m%l"?w#~t֭;vd?pƍ[m# h}?[[ ׼ye#B~AGLl"~z ڧOܽ{PIK\qi3gh Wirtdt}Zw)))Q7ńy~vvvvvv˖-J==oK.b֫w|S?(8NOO͉Z.**ںu߿G~cV!U/` XV!U/` XV!U;F>IENDB`DataLab-1.0.2/doc/images/shots/i_stats.png000066400000000000000000000325551511411446000203370ustar00rootroot00000000000000PNG  IHDR, pHYs+ IDATx_lם/\r/nPC ˲*6ʫZzbWZv핒K&cZPR.\WXtr:kLHL+\,5 ,d+Ew}!5)qF~3|f9CY]]%m! C*T4 hR02aHe@Ð! C*T4 hR02aHe@Ð! C*9:uvӯmJe'?r=f jѣ~ѽJ9J9J9J9J~xñT4 hR02aHe@Ðʨ2VG0X밝 ǁSX"@E!8#(T-c~HeԊuń^mqO½.x?XפByA$fX;I ItOF,DgEf"O P *~.L.TuyfBDGu|Zf ?Xפ=z*[LFge#6?᫙pvJ A*(c D%ZGZ{)^W dWM Tقn\aAv焫ani"+=[#m0O5̎meVN.Y;Qkd$x2LkrKϺbfH"N޸wT*w.l@|I\O'?5]6Kh67_(n\HʋKfn#È'nVLY.ĥE)!/^f,9U6K ,sܶWȈ;Be/9* -s#KQ&>6B+b':˲n|r{O B_eRmoR~CvXqA&byq٫Sú(5Yp*Wyf'p=hTqn^њ?z埳q(ya 7 K\-~Ĩ$|*&157]6KȗJ[?rdH w}fO٢q giv| 7F]6 ωOw(Y(JܹA? &WiAN$q#\"np hR02aHe@د_loeRRڍFwD[++[gs{ yb{ksΫ2``5m%8Y⟕[݋cJ(Mdh:5?9~$jndb6hF_jG@vrU@ٹJDDD\87keP:MVgɏG>DdI#&SPbM6[M>qxYMJ8F+ՇDJg a'ܱ]buլ%kXuUu1'8:i^a KBEy eSW->!J=f/S-VJ۔-L0`(տ74v [Տ|l `\%u|xeߗjo@C'PKߺfLM:|KJLQ\ 8S F35ڴI̱H2ѢWka/QG'+R ׋šrC֔]DnnXlSd6d戈A?xE%@wVOض.{j3*Jz#Lꋇt6v^Jr:=Sfp+fB2Vu˴RX)kZaX =BU# ?#rs2+ tlcŶ`|`zMz""Ld. "tz̻dMvDgW۠2ɴnfHgl1ĿӎL`U GD$3w;m?mtX\S٥^ՔrJplФ'"a3,%Uj`Me"b{OԵ'EE2ٕ8%s$-%Ula2Q;dFC9GDSʼnKo?gz8lgFŏԙdf]b\k(jmVǽ]qڙd6գ(UP# X1Ww&3]:nVjmLm""⎿y*H}#u)qjlMɐ?2sbOԙ %x;IZkI82Ο)|L2MDhLh]]DʯC֤c K&7zc2T*#O걅QһBB硛ƲEvwI'pE 33B=}e$I2dU[i)W LO96z~N5{R!ԊV;b=m)RL`*L=/i\wMMNd~(J/Y"һ~$A{ĥ̽?'-tKk-[B ,=o0z"t\W6kjͲ!{kX=lgvkdmX!U θtdɤQs,E[l|uLc|R&Q\O܌ӍNqڍ3KҸ W bMUwsg2s_ޞ# ?QU;gO#dџ8chbd&m?̙~0Ck5`M/1Ăo S6Bc2W竅'be1ӻ~kӧH[oKuV|bT5qψL=7zڔTxHHRR=a3OEBjJ÷>J|f\@"0z8Fu>[| .e<#Ɍs8d&`(DcVj'7."f|>,c]p+|mSPBx\d U,Rf1[7 糙EL`֢7H 8'z_UopD$p7"m|K+|VxKb}1ODُ}R&TK[5Hʮ,Q֔ᓉ9̒$G&VWu2vd F9"#nX"%%jUһNKNy"C_M%&p ?#2^"Zrp}8y՝n]պ#+cHzXU1O3.,%K%hJaJ-Evr1(;Wivc@ފX)X)z? mhE+[t^ӯmpWQ/qu@Ԅ~eYC@ RXoPQ5@*# J JHed`A D 7(( %%P22VqD|k2mG?6 6_n~rrrk I.Pj]Xl0! C*T4 hR02aHe@Ð! k*5Q0 $`aCJ)ڒ]p63 DYvigLTK#U7 tQ4 h' ";.>y:jgvG2_Q.ViRTK>CU""&笹9țNHj@4Qf6?^ksre;b^*ը_S߷ ɖ?L6c ~gzo*M%ojvsg|Œruyd5&̭)`-\&7:ٜ lq~ JdqvJ㉈By1U""5'HI*᳨Vn8ieOߜS{ƦsmG8eR_wan!Ji.9H7ݓлBB硛ƲEvwIwE9w<$$Q˄WmRަ\a&0u>|=;Y!ԊV;b=m)$_G!{d6^]gw6u!+IYHN?W sW<){dki[Zk17WAzn9`՚eC֤;ⱒ{8ɤ&7:Rm*c!巄f [H2yLvXHw$6pƥ$M;w\!Kdi?* _$3w)7tigvJ2㪡Z)WNzLf~j۳bBը* `^\m5ӈYsR|"[ yɘfv]'Ds]K!-%(m=*(|R;A҉pvKW=l[I5XfĨvk⎟!{@=nb)LVţD!פ?WC.[I^#n9ysj}B'JwtN͞t녰VS˞]-V$eWĨ~kD`qfmqmJF%48ɖb. t\,ؙNG0EF7Sܺϫ-zשc)3Cdhk硄&Cd c7DDdH?uG&Wz< QeeUO~\E=R"DY"]6ROjPg[cPvyfCf 7o1DD, Y}:^y+mC`XR0U}@>X C*T4 hR0U}I-[@CCC[loot`S |F BrrѽІ'1\~ &02aHe@Ð! C*T4 'SMIDAT hR02auMex""8aD#R0TTvHI;eΒ?dvigF/Ld"sVq9G4+$ÒHrM'(2]T2 M#BȎO^ݑWzڬzՒq0>G5}RQ_aˎѲ*m&/;11sOs-'c%dٓ>Fj0tl={˺jVN [X5a]1!b(yAy7+,)fAy{(MLHB6Vd'm{b}ٳ_&0u%TCΜ<ސ zfF(MRaqX 潾חP,5`=-CB0$ a(rJ b2:*Wfَש+m&Fn}B0y[I|l `\%u|xeߗɭS=lh"je&f sS#_ʷ3R~ee/[fSlbk̖o|c+ԩrv)SA =o?& {()71dnMk\M6l0EfCnSxWT"SOD|ϋI?GJ6Y_3,0͖NzDĶu7)\NGD-='9{/WRF)q3n8ԥ -Ol/.so,Orb\z.JcjMDz"bu{,ԫjP>uPnR&0uz|.mLNp:"<o[ZEu|,Kt {HK,#pZ,9G诅QZm8q0ks8{bM2y*ʯ5&Iwc%qڭ 2SIMnbuTO Bo d2>S*intGbg\L2dڹsWϵmK3Ҙ%KH2qK N;g(}WVW bMUwsg2s_Sޞס<CUe+{Mz"5|yk>Us4XBD A2\]&Ng l1ܡHos"OB$] r&tjF.),nM3s6t3D{M6%)7}5'|úl$J^46 _4CD|t.p>q3.E =g#[˃ -Kww}cdF9n2m B0i"ñ}+Qa3>.8F}KEMB =WZr|THavlT⅓eh_b>}g?'"0~ND|u|l۩0xO}ƙ;~GD}f"KO0%՟(٬u.UIٕ%71ߚ2|2>gYh[kҪd F9"#nX"%%2{Ecfz]1˺/%% 7C&"?m7Ojݑ1CDdyY٧jՓWQUTqwr"3DDy)PPq08WöT[!%,oXxL=z dGYlomvѽJ9Jk^hbW -677o6|x}Weq+(fIe;oq>yKmG hKD:z=T3pR0'SI:qzmGmZO?C[?L EΖݿRߢwGmZ[[[v6ޫT J|:bN/JDW &s|)*Le˫ [BMLpK]ltwsރGCmg;?-.֛y'|rddDf+XӧK ϿɮpRb դ2m5<.>Nt(}ciģ򅛹DQ_ywuK_xuox`yBY*Llf}y }47Bsݿ2?|S"2wi|rJkWߡw\HӋ]}a S}"}DE%Y^3(Qϯk;{}NL,}W^owx0K÷]&g+>`PiO5DDD}מּf 4K^{[g;ߵKYz~wD_.l;/o,~%]C2uJ;jyi^R94 8/,,lzj ȑ#J~&wuZUPnw}BQ\wTШ'E꪿!g-QcT4Lk>!~ T4 hR02aHe@Ð! C*T4 hR02aHe@Ð! Z;eW݅Ͳ=k hVegPO.?5*T4 hRsK/]^ Qth_PѽQ /룉e]J.T>ymlgҵBU-T`ǻ/ZtpubP_ 'SQtpuq1wd 4>+[~Ń^Go6}CQqgtO\9<|V-7Rl?v厫-yE;S[ 94|P6P':_xuϨP!o0}?X$"j;{ݛ{r}DDݿ ĢWoaϙ-<ٮ6$Wg͚` C*T4 l%;Ve@ &0! C*T4 hR02aHe@Ð! C*QZ)ADIENDB`DataLab-1.0.2/doc/images/shots/i_view.png000066400000000000000000000233531511411446000201470ustar00rootroot00000000000000PNG  IHDRL:< pHYs+ IDATx{p}x[$z)ZQL9zB=a\ Q`[M\cMe|)<,΄8\!H2S T$rj2$ʔ)ȲM"z ]v Ēdbbw_=QzXrLAr-LAd522Nϟ>$+kEQZD}Swޝ;w"H2(F 6zᲿ;ݨZDyҬZF@ee Dz"yg uΚfsŐ1Nj4 W3<[TT[gi'j?KQ>2ck-&7XCP(g\g4`L9 k B!ͭ!kE iaL#ypʹ;  ƐXk!f9iTD˷DY~}k fD9z5WREQV*v0& XjV|&G\g_GdkuIi`.ho??m*=,'j"SWoZε?+{Qz>g;BP9qoc5Zj_PYc7;k$?,X BT鹟xcǷ'-/_Gtk-lm&|Rx'oc<-Z ֓tNaf6Ll,kŕ02 lT)B$/mRG/*.,,| t: k-&0JsY0Z})Z b2U \=6d:`sREՃŖ0JQEUz,~&a>5C__9o|v+7??ͳ;k\_KEwټe,}x}xow!深2~C|UT->P@"UT->PHvmD"Hdʕ9IڑIFɯ?C"ʓf@|vÆ k֬ٹsGl#]n]G7cͳy$7-#s7Րf]|y\رcŊKV;55%1eKAԽm ppaG1TMyɇ!T̔k02Vw_b̥m[hEsFMZ tEq%JӱӫV]G:8lK[[i1g 1v1CWxs`ہû\glK`܇vC{ zUE0h(7R\]JpGop =AǠҨc  FD tE`mvA>X{!_90>o1]fMˇzC\ `+ūv% aP'rWK+.fU4s*2e }:.mq5YP{[iat=" "%vd^t:/K?]Vd91lTm$}.\7re@D{V1A`.+ b %:r>LCȱϞW:4PE.[Nw51T;oz~AA^yt3Q- < 4_{*>t@Wc+hKg %(^e sq q :-: CjvO]N \dT5p̙4)&#I5nذz~s^1$ֆ#m{+"7+2=ѻOmۊl;tP7@qu6HƖK q ѓ. ZZ)xCnCU6+c{w{-_|͚5?N &]L^\'Ghɒ%W^vu:ݍ70g:$uzYN9۷.η@ft#刊A"UT->PS #/\q%}~lllˊ-kkW+68!" CZ.T=Qg zzW_,yqW.G |ȿ2t\P[6pqүe@rA_~/-yk˦-o(hRX]Eޖہ=uK,!6(\msJWC"c Ud):JB]# 9t t?D騥oˑ{9!!j_:}+ ~]1m7#)(V|BXvz6RV[`1y1!KL:.ۚ%s^b¶x,!zvӽ+NT绝+[j}7O3G>;!'\g1~,5䶱+".nrʴ(ɝP=N|EGTZyGKoɾ_4|~lePlǖ. 3\l]ji!T%V%VTM߹~KL.+^e4=/?䞛wНコ C&qgsd(B.iT; ƾTEke38~ljV#Ty~xO\S662z?t{*\usF#dPOl]~W1u6՘슸I*&D!tNH[ыf eNd揞QIAz %6=jӼN1$h˿xFc7,ZVh4ģ&ã_9*A#툨T->P@"UT->$62L"HISA* N2.eU5_DH*}~094 *oN-ވkw(5HIBTwߟ?+"w#7_4+*p׵F>w:xgb bNx` g0yod6@RmdJ;1CuEO 508)Ny'<`5ke8t XF۟䍍V <jHk Z60gfkD ,[@$r>თK ^.)x`gSiIי:N؃8FI W%:rKʸ5'~5HjF.;Na^7p㓠(xc$厚e(jGe%DC^o[O<onzVw%EQ4ۣFGM Rk@UM^B;f̭`Zg twwh4 l׻yy~XugG~vמ˗ uF O5ZS~UZ #W\~`t$pK6 ZIIX87xdU~evM+Vh47n_PP0_̥=ٍfk*#MIZkf4{,~_{Qą7lVk%՜DSm.I4σj5O{(nj5JDSVphI?z}\ccc=آE$v:7s)G9k 83ǣ-s:,xR1R.w6GQ ET QZD}jEQ'#[#x5[9V#dQx@@ƥ;n A B5]ʮks]G7;Ljcy\"jbKMJM$NLN/ҠD]dN [|?Z涎nRTGWą%zSTxto*}L6I)+n{?DUu/]cn_F=HfMjW|{+%MXJ.MG5ɠ<s>"ڪuٴle@/uMS0 P WK֠dy^H=#}xɎ\Ŝ:iVj/3T7眑f]lʬu]c)=-.ad'x\5rt,+\۞sFw}kr*~ӳ}C2U[6JL <-T3l@.F.[Io*Gy6Buɥ 8kw8gMeOSӪj)UF2]N~޷0#*޶f%H~^9Ar tYG68k*%QMF8ETztEQZD}j!۷@ӭY&CB4Q-0Ν(̙3+--ݺuc=VTTڱǏUUU_4 Pwު}-Y)ޯErA~\{+V۷= ׯ_7pE|5v"dc;wԩS+.:<~J|DUw-~kn@I秽Wp?RCGdKi<00044$5]ŔV%Zmi] fVW->ٙp8K}qllLr\{tYqglRu\U֛b|+NК!vɒ%PHJy-^XNzt4qmR]$: #$ծ[޽{i~< vFͷ2 Xs Az~N>˥ʹGW`auJF+*0J+|x'|"֬x{\M]Gw0lJ8k-KXh?馣v]H r{Er[]}i.ASO=ܡ GyyV#]D5GQ1ZD}jEQZD}dSQ 9;$[gH.>P@"UT->P@"UT->PPVLWgM^7z 2Q㑒0~2}Ζhՙs dȑ#o^`&В|Lhل<9rԩSoF&@zr 1эD|l%ĊfRl6߸q}l&-H&Pxvۅ24yk-\.LO)-(GRڵk_z_|ƍӖ,0(zhJLAJIȧ)Se eY6E4O[,׮];mF1o&Y.tf8kCZ<`i'hNJYbZ -mWb bYlLR:8[\):Oh6&LBM iF|BXyyyfT@ͭnJQU[N$cŔ;1 զ4HyΚʞ&L<_޶f<kdΚfnjs7,$B@w iA"UT->P@"UT->PPRF!ଡr➍[u? ztL&g5zNvzP(;gXCT]iΘpld%ET](khEq4ɆZ6R55 y@8vyBH>G%nz ۀ&f=(cCVs7w0VugH_E]s]zۚGtܓIDATiy 6*@/Q߸ޔq&9~_XEF 5aD L?MF y8F{M0 ZI4W붍.6-R2#I|HG7s$8FI7 .̭~cem_ARŗEt 8A"UT->P@"UT->P@"UT->*ҝ(U,;QڣXJwVG3rr vŝXJwVGUJC{bB)XJw63]09F`m1ӷx\bݔNZ,; nZ2w&tg/3MK*Itg-3M IK,Itg+*bݹ=Xhɓ:iBHWEQZD}jEGndf͚߹Umb$B@QZD}jEQZD}jEQ g%J,Aܝ`Q%E3L /톷Y佴ܝ``rC( ofˬ/dt&в&:8 la uɧog@P@"UT->P@"UT->U-"͂+S^'GAFB!YW7#8n&k%xQP'h+2ڛl$S02 PP:7%%1s3/W` ,}r%XA\ך[C~ݳqŷ|)}|WԛHt 6Vz,~@H@0~+W,@/uM/77(vV$-@/mKY]B/+L2P&K:#NOQRd )6z9QP^g8_K:lq$cӬĆR$5'OnJ&଩汵C[[! B@jEQZD}jEQZD}(\GW1 tg3 UZNg˕lzSSr,tvuNrVS5o]ۭw4h61,:LLOsj5f&֐#x&̕ly^@B6$Ԕ->xImoocX} `,>Cg @!3X}8UohDɒJw]Уփ><Nwy7|]=`ݿll, 'V4 ӏ8I HAM[[[O!j4zԩ8 !T ;Tp)`5|;?_~߿T?]It k߼|kKpbcC?;oE3![?×~\e. Wۏ^Yp>s? ?_R鯬o~]7?;$}kwsKzuw{28\}~hjŸ'DSB\կg?K_,x@n^" o\.F=ZO_;?w~HD_cC:_ȯEW? 'Qzvww胿f=c_5O ; -H ?uM펿~ kkϽ~O[^󣫟 ?/}'Nc;wV; ^©SN:K=3yoDWD/r凕A}wǞMnjMI[l_wt~37>F,{m_jܓO>aﰧ{8]\bFqv0[<2_ihwW~Ǟ{^Z?_"j+"'ϑ}>+;;<}ڴOiM6vE}9qbCfUsɋgW)ǣbI׷C=m {k=>z5}SO]~-ԣz qϼ3O ?u]4 , r\Pޒk7Y'yryxx||t>uw,'~_}U">Fz9sgR?giKG譳WwܯF;b&Yϟ.ޟ(@woЧz*yO~W=W1ҝyc'ݽ?X_KݩO=7L3]~Ç/|+}]}&~tw=ӌ=݇hѲ4U疲מpKe'TYerፋݬ{9_{Ox_}fan97./ߠ;ݟoh~WP;c?֎oYh'|6}SNW:uc v`8o=[__ȩSٕlLM~3o]֍3_ u߱_яmu>ہuM/_gK~/,}f`OܩprZ~ GB뮶$;?>q?B7Z v'SxO>³~xryM7Z_f4h6ǔO?nV:yz]X`E? }gxw~n򯽭]?Dluyp ^C/~#}KO~Sk yc"g//|-g?圱ݵvvw_v;Bvv~=䞀mfaK&1EE/et vI=>{G.ywvɽ<ɭٯGn-J|wO^ ,#ErC.-UKZ?Ͱr&;<`>|x.q'Wz/;MjHc[#]'>wCQCw8flS_x_upΗGnsH#ֽYwq|͐_VW lmȺm‰WjϯakimaG;ׯ]Do<|'k'?0rzbإNТ.Zbʧ)0Ӻ?H7W؋~x;>=3|xws]:| ;};;;;)oſ7h[k‚te9D?zwWn۹Mt[+|>~gЈ$^gGi¾o?񿷥ZM\ 8=_WfD/}+/e}-aO,]""7^}vyxxxg/@fvu}oUg^z({=W{C'מ}Ι'^凿2OZ3❛߼=y !w^y 6qDjOR Zwn~vg"gh"ƘfL`IV?ҫKGmX2Jl<BxY3LPUsii9ZKkۋF77 p0Mэ^4[SHDxVqUН?|W^Yz >`B$OtJ,lΗ~N47nb3Rx~vwK?%?ޱ&N$EwrC75(oŸPjkMh &qeFD-fVmV,Оg,FKgޝ6泯Hos$QGCڽ=>GD }8Y.>^©o}<0=XD~ PO_u@+*,G,hCu|fb?@V:,G,hz#HX_} Cд9wq&i +, ,>Cg @!3X} `,>CgG)ןzp7lpn^v3 Vd?~ kkϽ~O[^CW{^}xbtɁaOOh5JA G@&q_w-qz qϼ3O ;ᘞu7@nk7*9:{ϼL_<<<|>{>Eo8_kHXD3]~Ç/|+}]}&~tw=ӌ=݇hѲ41"7rJe'TYerፋݬ{9_{Ox_}fan97./ws)<'+$xe ﹹmFÈK;osL_yfku} ^q+⍇>B`_ Aʝ^&u4X⍇>ׁkwO~Za..KuݡEa]n׵ĔOS`u}/ۑn(Jp!z 8=_WfD/}+/e}-aO,]""7^}vyxxxg/@fvu}oUg^z({@j{{;v1vlymˇn ӧOntYXz)7=\&6@,`t=X `,>Cg}xOh4 zkxxtA@O!~*ϙ3gIw^4'###Ԁ> ;$㦏q} @!3X} `=TJX?{?| H'mCT&`&ae.j+l=E$oz0{/>MNF#9VLU:r:l]*JC'ZKgﭜ@O`}7ouHb1%_EZ^q",o+ر%L*%T-HR/ F]@S&i%1,嶑WR^a1e(Sm)rzxEP4=6#,_NVz1,U^/]7.mY+֩ H֨Ν?JJڴBDbFD6lAD3b_Rz5?h0ƈHƘDz9Yo#1qJi?K "^%"nԂ3Ks9˹S[r\]ڪޣX)WI2I˲NHadTSJN1=k~ J fj4*Jbiь-&l ""AD6k2QsZ_zF5InJDXٌ9Bغs#.I-0TIﵜ`߶;yޕNB|ċT57hY+ZN&ZB"rI;E~Y+iYIdn"RE,r8!1ׯGSxhDlގ#߿?66M ϙ3gIw^4ƍDtڵFSN>MDea"8i`,>Cg @!XudaKkbfV}^;*M]zƭ.Р++&0FwmVHE##dc(XBl9Ƣˑ kK+.!HXux.\Ex'ѩ z{|U"XYtxohZƢ;;;CCC9sL4 ݋&ݸq]]@hjӧhww7,l=X' ,>Cg @!G*TJ>a虌!|UkKKciUļeTT*>oj:&02TjmɤvvnGB؆dBe aBPDx%ns^zum%! Ye9O|()IlHӴjy%,-9dR jTb%έ4x ˣm]*^j/8e@aYeL^%m?s-jޞݮ4!ڄHI&VUyBbSY92(Al*EXI z& f.kpKG/(l$*ecLM o/YcRQRS+1XlD^6B)~QZeK+^6]e/S|RGU9;ňMefGqf\n&tGݑإ|>z~/.&v)F 2)rj3]J'bKI-aEvٸ7T׿˦'!hDF5=[)|iEn !s;Q p"1&ϟ ܙ=_0VQT*Kx:u*OiViw{VK|]57o۵M$I+@TL +VU$jE3NXu!D!VooH azn;^63YP;;=(N|Sz1 [ٻ^5Hhs2L&<"+iI鉔i\Z!_Ӟ;VX>>gu5E8|L6pza9IU^9wgwFcĞwL^aL֚cz8.dJŽ]n#6k6E(d>D1L5w^6Igͨ,q&eigZ9lzS jhs$M5ksefӵ'HnRzr;R.YW"|8Dz^wnt'r/tc.vݹWr\!q+Feh4]G^^]|&'?[Vq!]&d"4>NM{ FeUBcNZHfpʗ e-{ԯr'jjV2la&k**cI!pU|n-:V66V쵸KاѹȞ/iѨT*Jo44!mnJB8wIT[^I^muL)U*Fbi#)X\ }( Ek9zOD]gRXPחݤ|i6_H.̀+sD禮Lv3`b.@ICAL<4U^vν/n !"oN#3lf/w11j~j:l]RtsέϒbFUlFN78%:ɞ([ IO$xm#\}~&i_Xs Z^$6krsaTJ^P`~`[i*o6郤%nOm)JbS-z;7;?N@M)A`xQ&y N5IDsNvg/Szw"n$̈́ު9Z' Z`F9Sg}iZtc՞KBPb?OE-H\­QwiH 7jYhBrB&Ns4z6n/-V.kםYvY~V#sٻzU8r!x)aק+Ù7zE`:\*]b'@F@řü02T*8׶Amړl;TYى9KrPK?W!FTseNiʴFB.:wFDڭ4NR*w@)qv=;  ϟ[q7aBasw)+8sN91Le?΁^RcJ FmT*%tqaV,+!6!MDr3rDj# dJrWc,_j4ܑ6rq$ElHi"M =>R ]n}.l|52yҤ9_R.zl'J$IZKyh~Z~bMjɟ̯X)WRj4 >;Q>ħXT+(Ji9Ba. V,`iTV%)&\a̙&;tfh^-HͳREJ)ۍ;>>ĭbV.t_qlqBx:t=WȨfyn9ZnR(H9҄LDR~|Ot۞+>Hm4*FRWTqtO! hx?>**9wa!kыvߗvvqhV{*tUkk"6 ǐCWa7*OGʫwŔE?uHO]|L[FRTm0T4 gd,nϤ3CS|糙\/U*R^Z7^6^&H [H*6ǑJJՂsl]Z۟)¢1x~9B r^Xz|i&^F:}_ZӰݴ8`P}Z^nmH4Sm˵T-ew!@Ȝm!s7Vk7[_6ka^E#R~KIWuB!Bl*+W5KnO5 i̗](k@;$EǨ=[;W3j醛>~(9'9fB[Ϩ&lz&%(ECΐZZDn.;\V!0_j~D,_ ĞͿ-= !$ߓ?޺n~W Vqe9sp'q FFsͶjF7#Y?K|uHErBݍܱs]-)7t?y7;Ѳ<Riyx+HZ9]خ(bsq+[?N ޳m$-K ԶM9&NxTGK1z\%'tt<>ijsT=V #璹Ul.cNckv ߗv&?ZN~K=?1M'}|$Lc),_ fHCzJ5FF*gP}pR RM"Y+..YyUz{(!T9:+sN/!M׹Ng2է gwx<'nG~0! n,YN. G8YB؜Np}+ X~Ag/:/툯/6< S*zg$B|~nnnnnNUUuUh8>K3m "ïRFO .udjg2PYͷz*vJhb|JRT*=Nh 'q 1gf>-6kiZAb#-9dzg$PKgg-࿤GԹ!,_42纜%$J]̄b+JTc) /6qf$R^ Ӝʴ?#)XIX)W MeH3>\S&6",{$mv =?v(6k4izxD+ _)Fl*+ˡ{xZcɵ2MdZAnJ x]Xq,{ٔ$4E",ht=Y5=[)|iuJXB Ѿ}\9&VPlRT%I$դh՞X)b$RR 9TTs2tG1 TVlf5<Ba63l!0 nF҈4+#f/q<ڎIE,?_^Z%Q-$Ij4{/5rjC/J"j6($<*RѴESvvvs̙h0\iV]SI$kŅR0\+ w^4FSN>MDea)ra_V5Iu# 6@7`{ X} `,>;"V].--Z= x9 X]Z\uwT:?uU.8^`Օ :7riWp <bΝե5B8`wim[Ј$޽af#n+&'''/)nXpk w^I2kIc[5QkkhohdRpn,...޺{n%pia ES̙3$^ܻw/փFGG[[[O&貰`4 @!3X} `zʥeDD3#aDadR c_pmi[lt|4KQKkgGOJs--TVy4\ǥ}QAa8' :"":7u5un$+=e|!緽3ڔ+FI&븴qg'AG!"qVL|a$""'t8ZwnN.adMe2},<:cFWɉ ] /叶^S Ђ/)+'$%jmmNgB'ȤRRJՂ."6|I$3O؛AXUA!63볜sHfa9-(CAb\%m`9V6]SgfYfU8jxa.jis΋iSB>96vC.& n>I #+ܛ$MȲ6kN5[%3}b_v{RcMU4sn͂6-g52MlшP)"9;0ƔLM?1BFDL {;ͮ&{$*)1%?F-˦\\()1)bLQvvvCT;+❱ڧmZGXR)u3گh/tQC;/>$Iڬ%%glS&+}|[|ES+\qθrB玧&6ka_l/XUIjMDeaGems&)|Q"mzF5σ>!cG9I$IR˵UH3ua$u$!B80Dpr 3X} ώMUع ʥ(^_omЅWN][Z=X|Uߢs'<xx&/m^]B޾{$u,a9ڸuʭ a# ˠ-:__=OWE42E;*8222Fwqo;GWE^nm X{d{@A8 @!3X} S)ݎH33O bup,͓c멦n8i%L*DNjuG0 <+^zum$NYsιAOS +媜r'%_i4JJ4àz.]aʅ6=3cJi(W+܋[+R=6 &㕒m[3+?eieoW)=WqǕ{tf 3qtFE[a메n߁ fH,tke5UjKl]RM*Zs^L^6I?ʱuլj|vbN5+RGD֨3Iڴ\4s[Z՜3 #uv9{[EߤU f!!2볜sHfa)۠Qںe.aD!@dD1"frNZV%0Xh62IlO+)0ƔBle/rq?Sq D:af-_%W9N3y1eZ 1s^6IuF#3 cL ~``tu]6E##4Ry0g52UnWs*ID6pǰS~O-HLkdfxh.FNTvRwKV\pvmYPݵZӊ͛RѴESvvvs̙hҀzJww޽hR[<lmm>}vww߃u#ϙt0Vȹ5ZBtCp2a@g @Muvolmѹ|腢Uع ʥ(^Q\K&VozƭՖ/`L^r$ƅBlй4u60s`%ŚݭףX[΄+VS&2D4tJdn9v8V&wX5V(p{}miKW5M"fܐ&"݇t@k;Ы>+``a^nj;GWE^+tװpZX5V6 ͷa=X:7``!@!3X} `>l=v6s1 9.V 0VCs%}j:&PJsni@T(ȄCwfw]^mgÄءXuqE_Y~ (JQR1&[ 9fA_Թh*C F&\riEߏ" =v^}>1 HJқ~n]jO<[OtٗlZPzm[l=z*()>v#%L*%T-H*'l6[RcJ\n@'^8bz:k_X~sιMKIEs΋i0mݞ^LjrIY^toЯ(Y9ҵ] i,O/p-jMD,?<*i fU8s*gbjfxQ6۶5*YPLМ/szbج $}Z.!׫DčZPsFlk~t`"rƭ\. vpVJj FeUC{IpbK?gi/-a⫞%ՇS=B eY 4/΍DqJRcijjNh*F(6һ`/a^Sr}J~ج5Sk?Ulvy'Suc~RR 9TgC zgAD6k2<)jFuzCᦻ$O?.JJ'!n-˛zF5IuoJ^էjyB{kEDLQ6Z0mZ#sN1_uHC}xyv|0 +҈49Z%VW66Vݷ^%(3EJT*LYT$-LսZϭxT􂛮λ!=zYBM+z7k'*iv8t;n %ԧ-;$I5e lMeiV'_3UlQ{2hy.MK)bJִb!^ּkG`RѴ{KP4uΜ9MJV]ŶRkE xtܻw/փFG۽8jkkD]vh=XppmCϨ\ GWms&)DWֱ'Εki+?%; d!Ɂ `qsup[:+^UkKKaWօlKk/r; #`#gzjá'lCdRLB`?-t.ϗG"ե[tjlxE|L[FRTxhI>?SJJnd6&ҬF(hT]Ea׫QWzVWN]UX0K AD6k2QtX\_!l=/l\ىZ6dP52Ռz~ £JȜm!st0F&4!8hbSYZ91_:Z%VW66V1[N.,eT)Ji:KՂxR4T%I)S`JoϫN$jZ1\2cina4- n:ω$t7ݾ  J5U$;|Z\CxZ5;ǟwy/óPӬȆRѴE^344Mݟ3gDzq޽hR[<P*dkkD]vh=X X} `,>Cg9uwV[֏LU`/ե%0 t'0U}hJsF&{6L z&h^`:B8X`m~wT:}eXIzթs ky5QgR8V).\jrtfqq鄈:Mph+W.MQ٥+WL6)E/0T&۝"0adR)PjA^~m^[zwKخR7&QLzSRcJ\na|R)^d0Y_24ϡXŚ}.LsMN,UI.UN̩fpKj9<1˹U9'8j]>j`n,̷(9d bUʞ82Esy vm7{x1m97uլj|vb=0tY~6xIҪPB}SMʺ\xpf m؂ jmpi =F PsG ܁ED1"fӅQcTdA\zҕ=cL"""9Rⷛ^6BIaLQs74l~ƟdlC %%L7l/_e/SB} W9GJlHi"M K`ہU΍D8\R. x||.6kѤm7ج5RR5ׅЗԌUsxMJ/XUIjB'MD$,Z;t'lb}6.mZtlmk˞/iѨT*zt4f5:KnR@4CaWsn3lS*FywA66:'( #^'R>!XN*_#WMSM]0D$lc&qCȜm!s7V3DaimjʴF1T;n֘xQRDesN_E+ ! Y !qHDȄ{TVrh"SKa8K:2SjJr4jAoΝW$IjM+o$I\tnL~"- n:dέOv 򽳭iV'M-;$I5ev,>&IR;?}x1]=zZ ]CB 5 К}pRѴ*`ggghh(?gΜ&S*Yǖ w^4P*`kkD]vh=XBضgTS. 8`I\xczGd!Ɂ `΄g2I#J\ bmui0 #ڒGgéVm'`md2x7k8.nҹ.L]u]:z/ P t˞+SsK#S0-AuI5E9&+W\d?Wt\G߅)wadR)PjArrR2w}ix+Gʎf+d.(JWcL-z/6k$g1rs&p8,`q{i05w:0_sne5y=.jsw5_*$%\{,-,V5hʙ[Rrz"4[Wͪfqg'ֻ\-``B5z秦FiV$Ќ1"f1'DDDX@DDٙ˜2skl6[Rcμ~wjM,'{J$..Lu3*C~6j!art9X#.M:q%ݭtb CϤRR. #_4*k+=skجE,h4|v,uuT/ZN P8IENDB`DataLab-1.0.2/doc/images/shots/instviewer2.png000066400000000000000000000466201511411446000211500ustar00rootroot00000000000000PNG  IHDRCsRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.79eXIfII*JR(1ZijvvPaint.NET 5.1.70230R980100BeL?IDATx^}pg~'_$!ǑV&d&u5V$HFw9%@2vvϧbRTYnٓfPu,"8N넧aiGh%lteSq%vsf2fEx~E7P$fL=x@<)&!h)&!h)& ChmmP(j ]]] !z-//?c#7r|޽o5 g{Rܮ]쩰 ۛ䎪RGvv^Վ60۞k \#,~_X㿣rў6 WoٷhM f~?K=ϝ:y; ?!K{wg;}h?|s6s־ 6Dkm%7YᏔh/Ҿr{#ۑ].=_8(|"wdbW\mH㑎G`C4H}fCvOҧ?K^WO'-;=*|2.?Ɨoſ-=>҅Oe|[?Oձ/K_x ؟~N[ZZӿ /^S[b'c46F^w>}[?_T?yc7‘ZoES~Sjپwwg~~Ѿw6ûԓ|O>G6TT"_g~{mvx<ٽ =ye5=k|_"* DB?Uo\W"*% zE"-xSf}Vܢ("*ՊFƛn_uN׿M_:Ji nlSR/+ERGz·)[_NϞ_)/km |C/Xg]k}zή߬2MŽ9b;lzZ*o9R.am#+par:NcB^zgn'|>ߡCc|G.(ʅ#,]+G7e̍g|G~k9b醢 ~9}>ޢ/;ړK}@#y<+rz(+<Pk=u=khj||Y}-;w>ڬ#[y^|˥&oi[vV=_}xzΝZriY+Kzf;[] yj߳r3+|>5Kz>7nu"Ϗ5vѣRnϝ` +߸ћ>3_C+~[.~J_'O)61ZOMZWɯ/_¾O}߲m;b^cַvW7ᄆ_V=ʇ/ӷkzY>,xr|g++Z)kovv-wv-k9_E okž[+Yz {u4i*}zq^/O?>m0ʛ}ɧUeqW_a=/2 T[V~LDSOg/EvYRHX#|}Jbo^?Nttt2cF>7n_1PDDtLLN#9~9H2U9>tu8Dd}]ݽ=mu}89QWl5\oTzo|O*Ӈt\~="$Zw;b[ᗾ{m֡V,+]֋R;W, ׻sڜ˃lGz/E+sߠiU}+*ҡ7Ve׿MڦFՙƜhu?~~O/y:yEj?+{β|>>8(T޺aOJpgX媌`=8sut;wa*ߪa۾URQfi64FXUYVVYo jO2/[}2{ִlt8Q] ox )گʟ9v&kK ܸ,i8tFWT. \Po?3\s!~LDc/E|u_GOl2oqwqqqY+[inm& f_{Y^YCF}_۟m{ǭTo_{ޣ_"aCm*mD+Z~ʽS>,Q}@+|=Jb/aI.?ћs|nO[@ߑd]VVKk&^XGoU5lf\01}*R18JgUyWVVi>Zz?3n=8[MnH {{_~;~m[)U;=ʇ/O?FƐx;wVCz[ZآZSҊVtϪ;?R> ecԞ)luGm#C? ##[qt=;jJ|(fMZG=V agN{Wc+M[;팣X?8h |ow|UepxdkelꥹJ_֋;ōC ]s۸>;:+m]Ք:/ID?n^WD ^ rl{KCHmrRm^ B !z!ڄ6I @ `s]l!hҒ-Lm6ssWu:@ gY}[ =&!h)&!h)&!h)&!h)&[@@$`NDJJJeȦXLb*eRURvgخpe`mJ%(\!RL2Xbf{hm֊BQQqJV|~2T.QL5Z[5* Ţkڦ$*66AyB sŢPТkTbq(ZXXU(P@< P,B+5bw_P໷5(#G'nTx85HiAIERUK'roъěsߨ>_ JUoڊQ8Q>ϣBA(K̴&bQ(xēg <ѩ,xS%T.t6at^PŅ.zefpŻ* T)L+,*Za`~+ꊰʲ"Xţ l8wor*v~.| inuY=7.($Ç==;pوg.?wA?,=Nj_ ܚvܣ7^ycɔx7L?;P F\V4rnbQϝQـ֕0K`Is^nxo(kG\x>Oy!VbEKռ-B~U00xeZYeaeEX]ᓃP(S5j3!lH/E="7Kn V+9d!||pqlbo^?ciqX aL6Α/S{Uq>Gj<'|h"s l޸!o-3+A+>l(_ KiK˩Xi;jKKY#|V|*/*PA߫Le" UnÝPNR}cHD$ˇY7֬Oe!ouXݫZ^wM1>liR%MgW)qnxj7S,?CGd""* |Ow|ޘ4tl*]@ =JT* `؁~E YkkTdWF`2]׭J(BW9y&_do':ç@+#>0p] 8׉OFlǔ_0pA!::ypnF?\GժQy:s@it\e1jUD]PE;pA * 3nx]Ed̋RЭb2Ne*rY(rY0=avN' o'T;Q wjyЭY!F/i<D"ynQǭfs2:8F <3b> :qjI 0'|#}uz~6woE;+cj7 |2usث~Fo/9\.-H3kRϣ(Ke6 yH~ƸL<%WC=:A%vK /CRCkub}Q"O|6%焯Tvjqqw-g [x1yNاZ3>w$$hALvaFl_,2;UI?i6gE=nhkÛ[^[ ruٓ?\#md!G<$yCL05~ҰEQߣ>j`RW{RKKKF ؽ{= ߿oOjee۞jR3jfj\=1`[Z3 h)&!h)&5sEkOOEeEx j===T?x") DΌm$c35"):#l6KѴ&T|c=cGVt&dELlvZi&XҴz/~֞ҐCr"!9fX $˲,@.7b,ri.51=,r:A)X6RM1HDC}A+.-9`PXqi)GJ2z { z)@}k9RMB $RMRMx(%BI\ !@j^vR2L&M77!<&˲{4q@-?uԩ=߻x'qQ%`h[ }gŃO졻R P4b'[R9W!APR;HP,&B(Y;oJŮDDJAcRWZ!d)]{+ɐ Y|/ .:-n{2GRH˲,' X$EѴ,@*^yq9DaYNG5Cr"!9fGERhZY)Z"Տʦ,-jܴFeY}\V㲜N):ZK.H)m4''M( EQTu,,caQc(&] E1|2Ji0.?K,yp/hLf %5*3T`yLJ{DQZK>.]1@Qp?;Q+ԦO\|;e&gL iQS{l_tw H+.]|8F!"7`Oj|7@M[S{H<Hj&d#FV 槮]xnSa֚OF) $EcJ?EaxNԤKzq)ߜ1JJJ5nثcjH!"EJND`u<2gfAĈD1=G4wENrTxLNG)3WHjLK Lx, ]FdIP}gOX]Q%_I:Gx]sAJtG*ulIKKK{%-..z^{j}vmOxRLXk(1IDD400`@cO5۵kJ%6HmbIpPRͭIzH)C $RMB $R-$cPWe"f]ҭ>m'~P!aS76RԥKI5jۆLӭn.ؽ^ σL? >Ըu9<H)S?~ԩSS Ժ^ 󠴶IeYӉ iYey|p6Rg}-;_)] B,o!mB6[x b-}.b)Yxtd-k9nwLW!AdzV(8uTȹ?]q?7ߝqfbW-zGSf߸n:jAsqOroC7Tqh:MLק^o-4 Ν;w=uaaaaᣏ>G9VwY\\\\\---|fqqS{nӿbB4@Tkݼ]ܿߞD4::JD D===T]vQTo#j6<([{@.5M2h΃ jn`{@ I@j;b7=1nⰱ%BM,`[kg 5?(Dnڃc3Z$C8j%1W)l+,r:`"-˲,%31|h"TO=I1A%,QOe b1)2?L)ZB(&iwNs3(ɐFʩƩn0LKr(vՒݑ1u`vm*vAq*~3OYڦ/]!HuQ1'(e''r:MO2KgQ$El#HG;d$E}l|}n)Z1~vTOF); ~sq\aY JGB "~K@.nR,FӲ,}3V] H"">74EKB(bx($LQ4 (X!T01>ƊJ'|2UG5Xr~ RnFXkLJɦ~+帬¢(̷uĞN-7 ж@HϳD?iйHbo')39 g3BuQ.e&GٸB!葔ru"L J6^`:wQ hxjhW 5s4EmW)Pʁ>̢x1DQA e2@>%iPtMdl9kG#Sf2LxdFqݴjjQ?@Hu|vp|ѾO),i#IEQi$ϥOF) $EcFxVO-$F%H*62⨦qVNU )Rr2$(R,IQtcԤuD RlLREJ^#ղjƪ.%Ϧ4l wW577w1Ko~p޽{UNWߘGQh"eۃMJDLњ`ԜR;{}TU/~qPz$hѴ2!5tѭano$xnq?<1¹sΝ;gO]XXXX裏Q՝;w{jEDDKKK{%-..z^{j}vmOr ń램bB4NAZg`k=htt{zz&sssv"RdFƩ 4j-i;{57k=3wM`sR[)&!hHIuĄkV* 4خmkC`9[ Fm .%M9_uZIvm].f%B(UCo0PhFC6`1""S1ԟ]fDZe9GaH,Htݜ}dz0;qPRb/mAв οJRK12go|;⭥kɡ$juH1A%.gfx9.51xtwEQÃ9N\enuȵ>x=W$z iݽfKK/o^wv=Ue9jwMDݓK'AD(fQ`TOJaYzZRCge5i>^{ĒAYecTN:a|w=C]l7߳[g;u=uȵ>x=ɍfi}Roy>|%~b{'OsQ >yQj' o>/8eP%%٭,!Pe܊5㘡=R ՟&_'׳-٭,,;j^c ?۳e 0 y qA Yg!hRmv@ I9)-/Wq:L;S! קA.e[QEC]>vRԵK.%\o#\ -˲ϡ-J*H S> ٍ PLV տG%/5R]x=CO: ,:<"ֱk[>. &Ҳ,>JE1kwH)׮ަ}=vPGD. 摀ڣJ2$xq?/|B&U;nooLs/U=*l~~PRŅ7Bj)IC>iS3;(f'C7ZUT?q{_8h_ (iߡ4uҥKצ=EQvUzTqp\f \ǧ88.DPqIjb,2nZ帩aٖ_ERhZ܄4["[QNOt4:G:ElZt `YM\l*?M365cтkH;毢J~Ӂĸb/lHߥ=wߗ{w5GxMl|/HuE}i[o(,bu/M( 3ߚ֙4 &lP"fK5 bd- 1QJMJzVq-tDP+ȭgg|w=ú5ZUslXb}6m z={CwmR`FUU|x>T$䉒V^uUĩ|^X$Eѓa{s=d'F(H<D?}JOcDIpˊ(R2g=Y:srR,IQtp.?| \on;wUݫ7_}yfݻw['gӢlB0H kZېY_dDQSLѴ2;v\D騽N1׆)[VgXWT4 KG Sx[skD -娌Lo}Zp/Enl,% 1¹sΝ;gO]XXXX裏Q՝;w{jÊcK4[\\z޽۞n`)Q4i)&Dr 93(/ńHPk3/`+=htt{zz&sssv"RdFDD6):g*#g).# .}[)h%⿅ cg R0h}[)&m| ն_lw@ I*R-Gӈsp9ەKL(ɐ`~QP)ZҔf{&S.k)Hժr!(e''r:MM*$&q֗˸zϩ㲜NP*>RRU8^WR,FӲ,}3Z걨Z *39 "%%Ğ/tHuk{|tz 8-?ͭ EQcÑ4 &¢(Cy@hW#|poh0,F8WGt͛ig&tN#In1TؼݪՉl01TkR23~&4Z2'YhMiKƌH8*c?kt&"~\Cڻ^O퉃ccp8'Ͽ?HDt:=>hn?GI#T L&J;`q~j!#M(iO EӪ!#Ih8U%2UUe9Q{6ѩ=EJƒ eeHtGn=Gq ;5MDKRj262jEQmUIjRR#ͱKP$EamOF) %yTq:5ZNdRgc(lU@x(LMꌣe'Fڋr;k'VW۫>/ɑki:$EQH\[B;w䫚W|7?0mPUUND`4Wl(kU^DQVZyVrTUDQ+DѴ*'9S-ݨlYk_Q"ݍFѴbT=Sϗ*ګsx^`4Z_D-ajB旖nJfaaaaܹsΝ.,,,,|G(Ν;=5?!hcK4[\\z޽۞H1!&E56"df'@s߿oO"%垞{ܮ]T*ٷ 5[^"W'S3MVOuA $C80$ؾ6>jbsxf2DQ-@ I@ I22nQRP ?0Ṟ%6uvRS.%Kצݱ[vT^eY2岕Z$C4־@j~Jz6=qԩSǟIR5ѐ`6:,r:`"-˲,Pic 5?GŃ|e %!LHGy :&eH1cĘ̎jFU)2]jVM̡~[A)77ߝqpՒݑw4[C7nJ[J*3|`Ki_ %|bM)2u89.r:ME]IH*M˲<'|rr38.51=,r:A?쏤 Ȳ\sK@Ze9HEM!SƠN_ [Z@.n~}^;5[DQNOfKR-{[g`}CaQP"H#i2EXX5j2PlqȍjT01>EQJ \gpV?C}ѣk=C}CaQ R%i.jHO]|S轋 go7`NqMt&"~]SlLq?-C@N,5s~UۀjК$UxH>m{uX$Ed (39'2UUe9H՚b{DѴj>I#T L&q14~Q4i^ZUm(_S秦ޛnɽHRQEg)zzFMMJ cKgPQJ EQYqHx~H(wjOD"%'sA"ˌ( ER.ǭ.3{uYϗ[R$;Dݫ/^x8u,;9#`4mT#WkY)asQtX~ )H+++KKKKKKK++|X\[+2jz\.֊B~uueyyiiigKl/'+++++++++++K?O??ݽ;pş--WLrݻwݻ[XXXw޽{:\^.ϣsvRʵKIҵ)8cpJde7}qdHx抔i)JJj  f'?MuWjqZqhUZ+KeUUeU")e-ܧV'⚶)OX0 ֝*_V*JIjϬ BϭסK`(v}r=O:u'M C~;7)s,˲Č=88GlHPhq?-*H˟HX, BB E-fue bP BwX0 yaTTު,rR}6X>`k[ 5?`jmT*J岪I*xXS(hQTX,6pS/@.~Ngul/R^i]0ߞi~b~m ,HE٩JQNOf=έ8֧XdqCRZ4jQr0بP}T @Zh٪ vQTJ%6ŗuVNju蘿*KNrqq|5A~CmTwwͽ']vi}aBo(,J)5'4hz,,bxpi)h~ f_ܥlo!sz]H^LQ(X!7i2LDP_³ E1|2J+ZI-+TUURI-Jl[V\+KlB/浇2):O|ж܉RƠT!/#_|, XB(Me{1pvksZm Hz $ -zf{" ã<*b2X)ڈz<x Š1jj\/=-!<L 5:tί*W/BE3Nr}V)ūݞ'z-"T06X`*H:K} "lN+<Kgb~ij6j)D~<Mqx(E O>y=F~D19\٫t6uiqp<YR4ktFFd""%GR)1?#QMiAAk+x^utx;xd#x<P^oSvr^N ^G&?ӡŲ2zXܡWurdi(aZVj a ]#uk|CKXXX%---ٳǖh7jݦI1!BiubB$%-!Oiu,ܖo6J26O#ܼ[[+UU uuuxT2_HV*,b#Ij̮1UZ+;6ǦeU%m@B4>%rYնx]].|]]ڌ][$<,Ba[:;:;:;;; ]W|;vv`:;yI]]]]Z6noϷcϧvرc#;yķe=|.]]p|Ee]m`GQx'A}Jؠ!t>fAY-Kb So^-Wt? /L'"m#'؁=lΏHz;vRn?"@ :mJrIENDB`DataLab-1.0.2/doc/images/shots/instviewer3.png000066400000000000000000000575761511411446000211650ustar00rootroot00000000000000PNG  IHDR+֛b$sRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.79eXIfII*JR(1ZijvvPaint.NET 5.1.70230R980100Be^-IDATx^}p#}_ 9ҌG$؎/5qwetf&iɄQIr|ΪR9;ٵMbV2%9+)~F~Iv,G9@^ox="nt?B[YYY!ثvq %S-Ah @K|`mmmmllXDž(ݡP? )| @SUV{'|?fq 1q\.'A񲼼_ E8_Q8,я~tIw?=)YeYRǕ(hw<'/`4SuysO;Q//_ѷۿGmqʲ,rbղ2,? @M ?<مaةSNKox{Ano8d~voV~]o{vyvfc~뵷_T+/"~> s aRz_?߿۳x~28vO~ ~VzÊ bg?@n av~UO "' voy?a&;uD7' )㭥ξx_|o/忖or}{_ 'Oﭮ~+Mk<뉟$Jo='{NGloܯT~'~w}駿՗?Ig>|ETtfXT~6\!OH~_2Gh̕O8 "??}'{i;q|[Aw >{UOÑ37׸u&{3S/zm=^5?8uzަc8Pʦy~+lmV3Ӽ_f@v}WDhrZ>=J w|#'On=1d4*y^xA\d_kx#_C_ɓ'6uwuVBJڶwjU6Ƿwpg?_Ov_}Í୫O~\.o{ʛ/}7 }__|F&ު&kuW?w<[*>\\H"`=;է"[ϽN[+Ʈ:8OxR~Տ“+;_x+7x'ySw>翳}c Yf뵗/|D,{_Y4*,+4񪬮/թ_8]p/?hm׽i" |oVC @{W7^ۿ̷{f{޽ ǢFEQoTOOOOS=V;T|_;.?gxW/\EtwtsU*.6YK ͱ"o_rMo"_O%{lQO=oQ[g[$9i^Ռ{nE;Xy_(x߇G nۍ| =ep)|[ H'Oyoop8.?XAw8p5aju(勯x8m=T|gx[oϞRr||-Ѷ q>'UUr}䛟^օSʽ:[zC'{ϬwY?1=/$&@ѱ8Dp?kki{ ˘ڛbd74®_Έ(3+'Y˕_Y{ҭO(RonFGZ݅V&+>lDΟ!ZQXwZ4rGt޻;d"W^k'?s盷|Jm.K[ϼR=K_w+ů羶\,)AϫΨmww3Kζ4c )zvv;1Ço!":l:H\ "N_ ˬ?S|[4ſk|==& mo%7[+/~Ջ==|i W ߔwóe^GxztϨo~jg|?O<[yPLK=o-8:SϽy7i 9I1ɓ'_xcW}oj} wKݗhO9}̕O.X^X==o~>7}/SsGl_0p,O~iwC?Oծw~?Md=@7nyxGV\~sP%ƞ YLzīo';8Yʷ"{>֊Ȯgop]awx>]]ѽN?XwDT2Ga:+z[ߺC{TǽOo 8Q+q:)) qƩ qq8p4v ZRomAg߱̿ GSxX0N`yyy8> Nq %S-Ah @KZ8) Nq %mS^g҃d՞S=ƩgyCyi v]Vթ'3^b{bOOJݺz[r|Zip81N3T){{gw >{I GΌ\ZיXLOzz/Km7z^3\uߤW/V_+b?oTOϳzZSGFq]Wէ^ ^.^z=߾>_gg匯e># LNWoymԺx-y.nyRv.$pSo^uVV-~r%QUo;~{SoTOOOOS=V;T|_;.?gxW/\EtwtsU*.6YK ͱ"o_X,UX)#I?m/8:>}D"4dWz¢/obi|v`G:KА'əif.ZabeMGl8pS{vy4UUUUe"T\E,MWѤ4"44ӼtŘ:M`|FEKxzE+Z4J]֘TdV.ɵwzK\uUm~8:C윑p4M3Bo$z!3Mx\wbSDDIJqFDi55[ƦR zԔKPaftvi}O?3Wg/M|=ff.CzzB~H$1[S;e2cD@Ș#ɘjj,~YɘԔ760o|^2&'4X/cd,Sإ) slN#22[ٽ=qP7Q'ex8UH5M4-G2-8EKy55KL\Yum^(6ɇ m7ȅ:O${.o"Ӳ,5u LY=VceY~n׻[R?mj<:o~.7od.Q.%HGdMKE2:<YYYYYy嗯_/]YYYYyw)wY]]]]]EYYYq]7~j0ӧE{d$x1cØh#)JWav"7nիW.˧N"J&u3DMFV_G.NL1Cˋ~;ҝ}8z:QڪZUβ,":UR,,1E RQo=)Jb,cY@Ŝv=5G|&9(|9eYr#@$"K@ EQ*~gBZZjjU3@ sTݯWH!~{.s&%Ք\OCv{Y*@@>6`"Ouc{](^-ZV%]Ʒ@ZszpRT*J*ߦ;7R `Zu~oUOWY}S쿖jQV+[J PxjWK^EL#~ph_,z_%}[*>ļq )<[p5YrNRJUHn+N`0 IHw]/r7OGL*jRʒ"rdZ$:Df\*'jZgȵ] sT劫jRIЮv98eO1#^Rf!l/?ἒjRX.$լ9bu Cjpkss>.-H (@0rK7`ȲJekkkskkkkK,_,( -;c Ѵ^ J f$NIdt-RVʹHTgv'ʝsmq.r{AΕX^rEj1WaeEйW3/W (%|}~lmmnnmmm58Fqj*<2PHQ-W늦we,ҹ {|d-=֎ -7D#EdN{{ }Ȱ#w]]T1{2T*-,@ EPq#(V"(GĒZ Y䪽uNGQ*gY~䃡@ umr-pTw./Qs C~rcssssssK|4W@Fl7`( uuwwwuwuuuu jb7AUť'( UJekccsccccssR,RP/+ ȋ'4-&3'cN~aFvb|F/vv;+F'jNp}uscscscsS_\er\I],KP)&/b7'2[vSe (dUV-K!^Sg|'VZUdpղ`0 O=IygЖ}dYFIɶI.=͗`YP(KviYF8]*-ܜ6==Riazu{P(ollnnnm9]6Ed^{zzzzB!~"Zȷ*JE6](eU6GmllKL0% BƩOOQ-E΄GŴTnL4sB5i][](7Dx[yMC^IϿ"W:6q}%v/{v-/dem@ \RVA,K4jEx0 B]y oYjQ\.ol8n d% UJ8VZ5b,X!_hh@0gE+!ߘJRؔq* !IY(DQGU< Yxy݌.yds˜e)qHj"C24؇'qnه׎C ѳZTx=BX}daU+VnR||"$ \1; "N8](-ܜ6+z-N\.%@\.Y\`(9s+?Zje?W*U%*mss\.?|aOe'zzCPP|·(_)X6͌4-iXU E3Z%qsM~Kkc_BxEoOR%m͐6۽.EQE T֕+l.D,_)٣{~yB_6+[e Zc;(K̳%+P"D໬ZT t$[^`K|!"!(%eyC)yP0 "`  B!$ZVdVRSP0 eYUxnsv& Ǽ}J;!UR-k8g#x+1/]vqf=7"3aM;6l OREE'Ų,bUU>lNg!UWV Bz78$NgRiz{ŝ$X$;?;W^B ywϞ m{hVUK|_ s@zYR"1#k0#T\=ٸ^6$<ETyتl.ё/ DƌG=z3G>zѣGGGS6e~>G⧍ryc,S,䝑[JeRْ_qylX :777yYEn!G$/3'9{udڍ (7ʏ.*ˏ6xB{=\_____Çb|T.?*oE_esR$R.o766g$fETKS*~lGG2>M*ZoYtccccZ~u(V~86ŎPn+|/OTQ^Gb!Jb7 ]]llA~)=Ml,?:?~*>q"8_iE2[ϧX "3;OG2:¢wn!"v+F\4D#F$~}yUNq6767$z-Jx-a"P2~ 1`_"ǾrQd>KCȞ Ŀ[k,׎16'ḯழ!إ<1{UDM;\'+ f&'mmEܥO^TU hy=.k7s'7]:="yD=we= *-'y}dyM79o{rЖk v- ccsckk9 |Ҿĩ͹g/lwm7وNDD % C]P+GD$;"E#(v;{ FHKMrT&ـ{r 2:{²dbv+E\W; U <{Q~WR%wub݈cox9xtkO0 9ſ}rvӞh![x6P/i͓XkAbbmY gE*;gVK{&v5t^v? W'9|K _9ൻwX)I"N%<BTߜM{߮ PWWG ?=@\DkS63cO8ߩ+,i^Zɦ'5n6qa_NPY/{ vj\>)(zBfkb>O|C%l FN)rU- [XmDKr^;Z,Eis"'OKsy$_">IJw (,RAb&&Xbܵ|~q"Dy ϩ@>(sbTWwwwOwω'8q'xO9#OWo&AWPDDqv ko3✗'i$w,U#B@u4NoNST*J9:_j'lԉ='9ĉ'8qDOω.>87D~_K'W+j@D _c"d9?ih4jإI1f$:%.FzmTrx/u_[a2d_ ŀ昼&N"v]!]9 ]@Y7_ &Aq:(Nq A'ٟ9q]O<BP0 BA[vsĉ{'zzz孳|o,;>]Hhq[;svD!A`]:Hɠeף;V;DROyVN8{?伩BKQ~R8{MV!Oyq7$?BPo7}4)On=wr<nM~?|">.%'syM>bWV*-~溺dSbB9"wjUV+pbi#>5ϯRDDTQ0"9ğ*[kW*&_ÖT=yq|~QD"WwC]ܵ%y<]x8ϒf_GT}vpk7};.'` a!`U/gWe?dDN>`[[|ԬU| ٻ_,9.ɲ,~*LS<e:@AF%WH-N"C_3S.=^<4ֹHeVE3ub˪x)_%wH/qE,gfQOވ"{j1jg {XÂ8EQq-HPGb!2^{λ]@^Cs{O")|yh.J~# -vy~wupJE)^D!QD?~WeZP>m<\u_~~X#令|]^.E=6G"ow5ØA/BzX͍G"&c3/v%/YU1hM&K)˰EYq="Et˚y/ۗQu7c;/レ"ݑs+ Rބ_lڈ<K|ݯ`U.IC*H8qz{KkRo~Yʫ"br!t{NThU˵D0wS-98w Nq8v`Zt >`٨mz˶cdTQ4MKtIMe~,:FRQrnKQ=;u\$ߘF;cplt6N͛Y<ߛ2~{~t*j򍤖9ӲW1#F_8jWF&-23[vvM*{nDIڽճ^I-] L4FTqMirzpu4N;&iW\2|- 55ei2de`ݗÆeuJ\V'"67>S $"+g.(t~5%Hop־X*%*!=5jƬNk1UU|Cqi)]ncqJp!WҚxsTUUU?rNI~ ws3D+M9,U-]BZ/rhm5sbHduo"1[KaoqC+gl2 }yvإ|n7;m-qt}<2̊civsa$wp>ȊRy3)=MYw&ͿTocKŚ7[j~߈=Lh xpC=u׻zqVb m:7cs[dz|T-h\b&M#۶ɸ^HLӼ68Sp& -#b\64Y~1 h^m+'3#m0Bťfנ_PD+Nigːn?}|ǽOIܞ:f8uj}gZoS{o`Y{) Nq %S-p*+3ڤqČ;Ppu8N=:J8)8:DTT*DƩ3i47w@Nj/#Z[[Ai3l>;Gé *>}?ĩ[yf6{scqߜ}O{zJ}<)6?w._RU<)٧ha͛ }}pt2NJQݿ=7=_{{qh.tLj)8:zUJRia2!\q8ECsgg\Pqʊhmm_겺 ;si@;bꔸ6SwY98@SD\]\,Pdd8jFh0vTd6+'9ᅉ2%6TUU5""#1Q}c"]dR1UUcLضW-)2br6KlU4+|'IE&D٤S`?lTQt iMLuVa$y<: W1v^QR ڤ4yɸ^HLӼ68=k5 /jj4M̍qcѷTȰ\@D7 s&c5HuJL̅55eTfDAfhD rur7Zxڈ(5Mo 6$jcqWƧi(6iǵ!FNsØ)}<##c1UUc#wxMI𘷸<}A_*aQMqM4MW_l2 }VB>62jR!f?VՍ|~8%5ISD&e2b\keLtM M9mtttt4]OmoG_bUeYf&BiY%^ɱmv?\f<}SӔR\m,aLpβ|>/튷DkKR~ۖ:-2͌9ySqi2ɬaBY59ÉL }+־]ot3^G_Rx4+:.4mj½ɸ"WQ?a*L + ;Deh#tiCb.}z~bXBb"'BIMÉH;i㋃#G$Ql,(5EQFgq7bD/]h~M^gt}}|HX:iZq %S-AjEQcrX6uI>iSYB?y0Î:J4YfS,!I-] L4_64Xp?7'6i8UZ0nߥsW\>GwoN.L3KD q29^Z5γf ;1SdLUMgG[gTi>=COҾ))ˋ̋#s@,'v)A3 ;yr1[*ii0)D+lF/H>hR߽3[s칡mITHs]^\m{0xJBգRХD N:&Jx"256[ev~8gyV*J׻}jZx45&Ûl2kT¤N,3܃}VO]JմgWo{Fbp:Hp\ϞrtWI34>>GDh8eb"7 ]w򥾆aUǽ(6KDx61'ԤKf|B1cBRD]O"sP(RLʊhmm_겺 ;si@;vek8rʕst?9eo@nX*ק1w3 0V8:JnhW;G ՅIn`٨hb٨hor5cl2* H*J2K ;5L>׮/cS}|ۘ_XXXp|kAzp|~rGA!6f^\O뤧i94z)#&-k2_>K$M>n/gS^2|iH}8H,!\Pĵ[*:D.'j_r k.T9ڰTUbh@&_"E5{5L!&>M8Eԫ]|^v.muɸ>}QXf`-}b޻Z@_]-1M|.E]C@jTBddx3lwij)*Jlafv6NOɸL:̄yARx4+J 0!f:M:1h"{zR㣨k|""Jc]I{ȉTrVIm}_8VywM-//n旾߽مc QƔKE2eYef"ަ'3G'r|&o={.lf"2=$DiXe/5*q7MxÎ'Y[P>u/λO9^.ʊ|wK]VWWtgN>/hZ__,//:u*>cq %S-Ah @KZ8ulTo&c$zO595&@''N͛l6; l69PN:X6*K϶kؤif<Tl͍?}W\{{ڟH&giVm.z% Kt c-qwT=EKg2MUUUUcce*tkgEݥDd9WihILYX>ŽX&"̲z$3f?+A}:M~@[%N5P*ݧ^*V~_:~I-] L43a=n?$WMM񦬑p1eɸ^HLӼ68Sp`~""}fo+n*֨>DD F" CFM] TaѸN#4'yR3lZ&҂1w{8#$13& DDƬLMTUUScHaєs8mxli2fuJ&cRc##ODDjlZ٦yI}HM TQoTxAB[T˗/ {6*?~Mf x3(,3'tX6(Z@ƧpX/BQIEQ[v'm{06YFD,;G2cvl^f$Օ싶ĩǗ6#s6gMbKE>AMMfFgf.QBve"娩)^L4M~Vp4M32 )4M37.5OgiŴwJOķ/h!jo5M5X/ˎu{4`OZR1HOtbpzUUUk](7fHfj2D\}|&mxlg:[dd, }ij|"RSds*mj^'v qeE\K׈1GMm[*:.ɨhN)[B巓(<WMM4״wV0ĩhbx@#Z}}m9C19|//5Z~ioEWMef&oY pJRm*..MCv1Ƙb@ 3(v)Az<gi-F<}e1f$qjHm|bhZ< mSl~zzzzz.ݹiqFlj6): j eG5-qM4IM4-.\Bjڄ)ΤKPZ'xleŸ(,]B:| /"^ gLocSl2L5[`. EoRk5&HDph)+++2fwZ]] ҝ9}Ɵc~6|ʕ+}woǛE294MusTCq v-qwT=E{.._R{{{{աst8>HSUUUX&B%s٤h& 'N44pc$3o\IMEL,.Ll^f$NS7ɚ$T/Oi3̊6?ok_8hmS;Q*-S_o2ZΙifz|ԎMqș9uiv\Vl4M3xJԔKPaftvi}zYv4ӈhG3MoK6$:K#5#)ר,^3M3!yY8xKg4[13& DDƬLMTUUScd؈7#5ZtKT5v)A| y';amx$zfuJ\%=922SU56<4m]e_Tiݳ:v>Xt\4Mz$#}R iMiEm"&ЪUSS5mk }<$ T!7ʥvǩ9}]9a(1-˲r W:&J,#o^56[e>]Jff@;}M ࠵)NJ%9J 7 _Yd.Q.%HGd9' 3f,3!U1Dcb9T`DE׈gF;bː }] 㚦iIeG5-"OCSqQib"3)e. Eh$u3Tk/&di )+++2~]/zLlT1y>߭ڑ6X*Ggꔸ6SUU~5<.z._|aHSTp!WakD SN7FRQIޢM*fjlr*)1b٨{kCKYށ~N˽#(l(SѤT&JYfN:^Փ-}k\&\3QQ^,#YSph%Nmtn耚//l33 HT\,Px@%5u-A\XYD,^\DwY\;A̟ːlMe#b^2s *̌^3\g?8^HR+OqIM]KY|t,pSP/5So~ރ KbrӮꩦeE2eY^t"ҚӜ\f8r:^ut2wK좿xW9,,Oˉ);H)~ƬʵKDZ,+;B] ;u oX&y˲L3֝NO#MqT*m+ql]=>Xtӎ1#;Kw-6S 2uJ\Ɍ9Õ=X FD#D+}?Pz'ߩإhVEWod(ZhKbswMO۽z%vgnwSO&s4mF{&:<)za)wƋi7Iޏ.M$qMQY4Bt\I|S\/ai=i⻔I3 9+>!1E.&2SRbP SVVVeDkkknl ;sig$88hz̓EMo䶼|)"T*iR[ZgF6a(GGTKXvT93XRO}p|Ah @K'MF&~hO*7lXR1~t6_3X0yt63klTt1X}0t@[T1igk Xbܝ 3]-2c^Z0"c-qwԚJw/ /1ŲQhŲQE*5ޖjbdT&a$% 1#\ev2Y]/~ͰxLs#&Dź=[Wі8Ht`{oC]Mhˎ)Ԕi2dD:#if&G]FYff.CzzB4b-QI2qz<]-H$yhq#FR&&)Lf2IکWQ~i4\Ǔk g|~rGW:qf7#X&"7 vcVG8%JRG's$r}Kl2((qmN ׫\f狼-E6,1UըXD"Bz!w: <4qeZ=%;g,@Uۇu eƑ|޲,{jjhMNs =>ʀteBҦ8n?]N9fY{$c1SL]J>4c|vij06iY1O.CD,ciX&'go@'%NyWqT)MD3S)bf<;\~ф)ԤKPZ'g1ך.&YF>]+#⚦ŋ 12FBHTqvȥQMz$sm:<)zi DYIENDB`DataLab-1.0.2/doc/images/shots/logviewer.png000066400000000000000000001254251511411446000206730ustar00rootroot00000000000000PNG  IHDRy9 pHYs+ IDATxV~z}pޞsc+Ӯ.:gVCB vzYzV $ rRf:QЂGZHE6vBj$IXGg4\4>gϪ #$HT}?h@~[  |j @AA/"  :  Ⱦ(  o3  "  :  Ⱦ(  o3  "  Ƨ3sܿ v 3g  YQdcccM@A(E3G`A)tF @z/AtJsF?8?)|O e@AA9#x7n8NG='ӝHGL=w  ?5:%Gÿ}ԧ?wv  ??/4:-'?(  ٌ?[?F0̐eduC[8~!  H%;ÿgg7kJfBNrcyw.]znOٹcW f}u/ /~=bOegkw-yċSpț|zÏ<{ ,"I|J;Ջ  cdg ?'?o?ӧ~^:_}'bFG!9ʉ_͓I9~0u8!,uFs ){[eq1jb _~ ^ q \Kyn/%bzaZ/bٜ3!-M·VEAq1O; §>?_κG+[./v'q3䄭J&+ 5"[m^D3j~rYn01hFf :LVQuB@-=Ր FeVuZ#{).^xvꇜ]<سRVRoggBAR3s?#?߅?UsW3_=o$=Y"ͅ8߭qDR[Pͪ ȫ3 WB4; ؚo}IK#eSSVL!&iUv#fȂJrQ6TI⁴+!=N~0qk>SũA?yw>S/x5 ?ݵ߻Lc7(!О4%Ԛicd@ 9WCs^AJ&O|'2OWWM_\ GmF͔ո7;^AuB~@&_!*ք{Rٟѿw* x:S?w/6WNLLp~/ |1x1uKs~@ϝ|.acվ 2\xYc<\zɈ̘adIU/S4ϗٯ|K'N=w}O  #@~XOZN~p P8s x_֓??ݻ(dTS?:A(FYAz^#gIEgA)tF43QAtFAAA(  o9ܿM@A\م(.FAd666rizAAd@gAA7EAA tFAA}QAAd@gAA7EAA tFAA}QAAd@gAA7EAAښ  h6'l)aD_8Y\, 4{-sAcCIh x|utmѩnSHzg1L!$8]kx_!TdB:EJ Uu͞6A9J2C`>F@epIݮ;w TruuSH, #<$^uQTSmϡ ` gt:fSE EJ!ˆESA6X(l}bzĺf53OBx[/笚{yA ;bue`p ̉FrMH]0^ocDO/8hS,K4)$j*Cb@{bU,dhhn$n`l!KAW^{ %ۆ<! H"%8-g &+.;UqY/vR[%IۮQM.xU:ך7Xzy_kU4MҤ]n?J_fx0h90P8t68U Z,.(#Z:  Y_-LjK:%5Hm$ ZV=T&DeN0`[{e!X~bSI30`kR &B5VHJ  IfTc)l# I A S7xqJAĺtiz~2Y*xfh!h$/&ċ ڡ7:hqT*@ &8@@ȱ1xP6bzB tA ^uI#3 yf ޕEZc T=agO)Š}&bBQiya &3 `RZͷA9V8O354]ugWmڃ*d'_lະқ-atXZ, 0E7blb-s-~t$ӅgoA'yB Y$! ǓцuښfɊS_jQ/ʟKu כH " 6׌d\*8 4.@ncQP6L/0@xa3t [G% Ѱdk&BeǤīY% 퉓4I#0NB bB@xl5*N5 Hn>w֦ j(TTU%#U v??dMAߩEmgfLo1·{3@ J *"f.Y/h m@AA  d _a %PsJj(HF`N '-3~e}@Hl+x2 dN &D%\6-C{uuSq%8 $>|1!OVڽ ZXrގ  vvvsܿrrr< 4f[O{m "нH0҂Acns@AgΜɓѼ"&  ljh |" 8AA93  "  :  Ⱦ(  oʕ+ٙAA#/\r>h43%qR @AAFHGAA tFAA}QAAd@gAA7EAA tFAA}9=+Kf9ʒdk|ڿrAziBāsFRZ.......2CW%]:BZ & (pVEy{&C4> f$~fȂ >Q%e3H+r/N}e/b(4J \9g?~vYUn'l $o[o뚱 ^;B7 rC{]_FD|^-xodزd%Ax)l[cwl`_~n~f':-1+Z{lC!C ;'3s@ Ȳ*# Ш&[uNj/2&Y?^*/Ҥ9zЉ"O/KQ;q~ጟv]K['cNd82ߠ+zJ"}e_"}srpt3zƿx[p2j9J_*ԪtacJufVf3j꿘 B{(v9zylO<,pU3~{\Ai Z|m$xM^7 vUH~]Jj4*gh{bo{ Z.]􏓳[*ě $!R'IO@Jl1ѱ֢v{I-Mo&'R!&GEBu @ҩWR?#EK"dJRbS!IdSAZ~ݿ M9ԞFeo)jz W\th- 9nyIF 860_xgʻ%oKRNO?.j߳Gޞ2ǍHsظ|rzL'c|=V~(ORgQ{϶ڻKh(>E1H?+–ma okBe,e L7߃1 SǰRpoKwl'-G$3&st|SHo A9t%~[ zŬ/ٽjvTR0mE;W1>\m~gWl{lugӋr*jNnO)oB|`HǢp)HV[4%9)r?F$q\ 1  Sqzfw[u*SI,yh>Pj5o|Kg|~yq&ÓϷhKjU4P!DiF\DT]S!tݦBz^5s<"^$ (r>~EsUvi.|9Vzi`<>$O 6ա59gc7oزHK47CjD|%ϴq#8C'ǁC2yFoX7\D*f,ވ=b,knhDBkk_ӣA9<{'MԟbF bkͯՔr^(oS[~n~kR'..OULfH P/W$W.!L菣bSƥh'JoVEQEکD\j+FizKFp@j˖ (F7Fٟ34Yl翗RBj48Y_EJN9QzhZ! :~3d ˙S1Z(^1$0`z׀'7nsq94薭.A_⦆i~?Hb SdQp~@ᴢ'q7H?y I?i I΁iƝ/}p[)Nu>s/P\?6)i2}B!貟XBʢhL5\Jv]כM{nV,aW̘_-<ڵ_D7 +臡?^|Qgs i_o#k& 퍖^+Jqf ?Ǚ;sc`;NB4ΣTf+`[m1zKU):ƶlsz/Kw;ypgwlxek늆[:֒To}2e8]ku?P_$g[~O_Z˼ڊz~ޢ?Z)cن,փXMa[N[1}S=d+*VF$pZK+̶_0XH}/Y/??ۚ\5!2n2;*?\R/s4(~[Z1hzW\j\v$_qi-ierzyAX[$ rU?!cPVjE~~^oiYjt23'9y i:;n Ptl9Ǖqo=S|Mo p5mM7%?5C*] қ !9V=yҸ=07 5޼TIm MP7Ǻt5I+ ml3nm& ._S6fClnzn] _$+U?Ywv/^3'[p ~,!| `P>c_N7x-^rj|u=o0NUv'&?|=5I1޸{D}sPq-iMh|OЛ3m x@럼q#8EEiDnIGBrS֧%F $ K:B, Ky *ٓ|-5fY=AO7bòf}W,9Ȑ`$gP`6RBۑZΰug̦tceHH{gfA1,MIc]Gj$'J IDAT d3JH fYK`e@HyoQ3c^;$U,,#O?%}AgaƼXq=,1{Z3 [o#C8t1ʡ9O;!  GtFAA}QAAd@g4fho0`|tlkbp+f}firVwvRjԖ)t $O5(Ի֪&Ԫu1&[_AAI 9lHrM!(e]2WowGezU{jB5];A#E4P!Di!Y"DzB+& M4-+3st606  ArF?U.u'|AiZ〺sEmt@J>+2O&+C6:=  H&ti)I`.Wb vs.e*û  H䌒ڂEٰOUMI_nkG=Y̪,9Nk`1{:xdNk)~c1wHf3Ƽգ   9H(Ҥ l]IuAU*@΋X5% ELFHe^QEZw+VVEQv~*AANzONNdrJNɓ'q(lM  \/d8sLQ+2  +EAAcutAA郑QAAd@gAA7=(D?O  tFAH34Y_1EacK/*LKEQY3%EA sF׮aƵoof`,đ[ĺYhҲ`|(*qv*MJ)ԼE CryT?LAcøGęg}ٙGo~ǃԖ)ZnQJ)]1O0cj*G !$~yE -CAAJ`\ ԞrԩS`{08J! z 5_AبLe͎Bl3=mًkΞIoD#& 56ٚ܏+{ٙ! Xwz[z5AЌx=^wvQfUp4hk#\  ƾނGNʛԖӚ_ZR l U:U1U^1K 9Ht07.PJUH c ME]*IѶ% KNgz&Ԫr1_5a &SJ~R[zl`֗?F G"NI4z(MR3{ 6el/4gkB"a#/x*4Boo{jB5]כ5Ԗu\+\C!BB1ې& /2=Ԩj.4BҴf+*<3gZ\zC=+3 -jgJ'[]de 4Jjv/[AA!cwFo_[]?}/3S^|cnP75*; *bjmt/ڲB*UgH \9<÷KjCA#Xmo߄>s!} RݬXn&礰RSO؟_F>n(Iӱ\d{Iiۮz#NkԤ]7A16gt׾g Ip6V:(*UYYڂEٰ#!-4tDAfr ]lƘztwmdRrp[os"La؉y<']3C" G,T._I6q5ʫk}I)fkFm&\POZ|I3 jnQJ-j>1YL:Ξ#Nb4̜ I[Utkҋ:lVYsMqla')V<`nv)*us&jӖ NUgsHk4s 'Cm=_ 4D7/9L-HNS:Mϓ+a>o}oߔv˙ԇfVKnUMgg %T0WsGxe TbǫlxtrpPBi` ,x&d/tsuv-#Jj@)P s?x-=*S0-'St]JJ>)e({0oG.*TI2zUt !"Y-Gҗk !D-뒹9+ͧ۵ nd?)RRn:OewPҟ)-W$g2{﮶z?X@DrI!JsJM+:ר%ssozR!D9Έ܉X~g$l=" ѩG~r67E~̝@FFE_Nr W!<s w !DE(W:N xrB(0'A'}5Tw*ufMY^giz~uec 6`XM E)4mZ*>,ACXQZV{ 跿vikF볗VN]ĺ= EiT$sS_"NN ﷜z#*$K3ܷ@pIi>Ad;K̸% [nz~R=CL8&gړ 8ls9YQIJ0^aU83 A.JZ΢(,G<䬝%j 9هO;"8TGȧڭB| M'r299OOvfCG:7{}/}L 9{T߬XOKSʏIkD70 y>i,#BoZHx:р//}?tYŬ6M\h݆qWhn|[T,Jvm{2n3ƶ=SeM'clءu:uQ6էE-ݱ.c̾ŌWpΩw#',vPzdWΞ󞶲)}n`Lзw m7tv}Kn:彠z9L -2Rx$Esrvʁ]` dr%;G-2vo5/vs^\d2k/u5\9aRdevs k+.ZrD 1^1bl+H}OY5Wl`1 6#AJ1U c`5,z24;Y\|l>xի.9 K`4H"?jfO.hՕ@ Z8Km~K-I/$u3\@jݔ nlXK|R{?9@K@v&㺛Wd馮ԥD ˱=9TԮEMzhypӢ?YHyS۽ޗ 䯅P~ԧt3 >w)z{O_1R o Ku+M?tI8-pyUp!g= Jz.i⩁|*HRT%@iKu0b/A$>U*>K.MQjmF8hEhj5ȇ { GN3L$SYbtAqMګW_W`gRj>`R@-J)U?RK ҨKNTRjпI62Y'WThoDpNu),^^|Uph}ҹ*)r[mRfmr?;~FZԥU%T_ꝻM]Kw% p=Uo /} ҧˊޗt]zr$[t+RT$5'7\zKO;/ACMgӏ;ꌺ.<: i(MzyD^_9e^q{"CyQTbz\//?O>^ON:\۽3n`S\Պ;}G'0*sasI2KHa~}Iסw1߁F>пCOGrF=JtFǵft{a%yҞ|t$IpHsot*K%3Bj^?/>9Iv| &H0J6䧖z3嵚"քMR`igjqcf4NKtV<`U&V/* ĭq3rԞih5A7crF݂oUԳ\iRݬXn[5aO'oEE2NE͟ˬ$;hwqJP7r5`H.*~^3<>̅}JGVfU0f^n2Yd.0,j6c֪&yv0ChS҉1ZNNj Se#Izyyp9\۝IN}e 9pۀPˀ15.TE ۀx}R$ GCS~B⤗W̠ Amym)r M vDHs>^1AKG ך-]U $U׵Y%؆~^drTz.%iL8+9=ZQ)/ gJ=s,VՄm6r] VƚQ_]j_3,?Uok|CKA LK޺#_u1wD_T?s|9qT_nzJ\3*G(ߟL[vʕF!'9O5I#\ᕌ2Z;U/7Æ9\r_Nɰq̙<{dҢ >C2ґZ]k2g #@>_lX #@gÌyHjޱ)t`P) ޳ 9AgC8 98 qa|ǁ"  H tFAA}}C-Ԡ+vGAqQfhJ >ځ:&{Z~fܐ;9ٿGlHޓ̸!UzO uAU?eew4F9Bxߎ Ye {52_! 75r3}fBL8i,JRJ0=|]}K"9fdu;vZ)'fN8d5 pC [S<`k=aOaB>V&eO<(/&@-K~QK< =?CƫV"xK^u꧳;6"(@)Ptx#/<>G"RkѯYg\F]?& H췥/jNzms:j#6>%}J7_>G f`xZo-K نw%B }ŎFjA㞦?PHqWy[ r9|ij"k,nz \ II_d/U띊EvY{:7(4@uXI= &` `5Pj0Ol]j`֫_r 9.|+(OÃRN],r?W OBiT$sզS_gNN﷜z#Mo5Q\v&t}_oz< )\d;9ړ Ꚙ4m~qKoi2G=9[~V;  !]WF~~гy8Vd|T"3^~K7lc~c[:Rt( jU: Ȳf9f߾ʛ/O;[;1%h}!Ivݧޞތ!}HfQ$E_Hɬ0s;*楶Kfxk~[oVvR&&}όOLV*J 1]N^Eq(zSÐKn2{QggU0olw֌+/ێvOk$E3n9\$KdSgsel^d{[me7ckOe s|Rt|Sf+`[m1ݺ9t @jpӇ)/Ƃ:1v lW\{ HRAu(,jFd(G8^(b}}M˟xǫo}'|I,.~{ FGT+r9XΣnX&Y]IjZ H]臺Ԓ`MR7M fʦ -w-5v'ۗ XXꚗ. M;v>i^ffRr}ڵ{B#TrJGU*`Y7C~% VQNIvL۷_גzTZ.@tiW z{v 3}N-j7~o?fXjf`oaɱF7% p5U8ɨ7L3^*]r%=4W] E]]rSg蒫Z.]};%7(Z.+L ˗/gX__t2=toi d\h4҅8yp79qCOX#Z3:G۳U15}kk׫޻Ahw[^n$Ծ%T!̐mb[A丕AW\yS2lll9s&OdGH݀=ޥ%ɑmF]?poQT>]. +F(`=zo)ӹ}eup0 4 [y tF+٣ό[b$XMeg- .q@۝ݙ;P *xq+/ C(24vɭȁ;JηŅӗGV^Abǁ"  HtFAA}QAp3693 34WG3OI <H? dcoj8O읹CS$m?2DAg_N?,Ɵˮ(-nUᷫdok!xyDQYçAb6k 947 q~@6cϔQô{AlMw*aWҤ}p[^փubQwSϘ[ڵgL.#aV׷N?~ _PNZ2J}H7 h{j:|8u џ_<;~8z/z`b.٢SgԹJⵏ _~7c.P]4 ~A"ux|W.2s ubMo7&kB&ޅ#WÉBe쾍 i `  k{6@~'f/[0rn7*:$N`"g`Gf+_%{ EtE[ayS'b?/Ψ_ӂ @?/(Nd-GQѿM F^}V䞏 _wa&]YpnAa\gիo|koo}PEZaR$I-Կ'rjzyTJ1+# mxօKhʩSY̒kQRW\P}!w3u-ݕ rft.IjI_R'To崻'KU7/߫ q!H,-$*I+EyrIJf'x<3\G'Cx#]&ɩd7ϿpS`%!SoZ5`7k$\ ȱij~W_}7xիo|0vg7v|!7>|?/?O~:g E @Sq$=:ꉺú )j~uz&X`|IFCȅ YHtIso cw.vw# 26ЙnM[=eIU O=T"U3:Cqɞ &Z-jЙ1DB\KxѻhoLިiuUU |EOP`'2̱0xxgtnɸ>f)8?QI:Qwmȩ'sE:cvG"tZ V׉,LIs+̲.k5hnnpᅐ>SW\ӣi@gZRwwg6?1ݟ~ވ.-E%9/ Pp8,#}[}!)*in"o0y1!~lBml7Y騺:5Q62eg@In@J^h@G{B֠d P4 lS>1_GJvێ,Q]P,0bhd1yZˌz1 @"*;a(k &RLIi[S0j~` sb-u3>~Hx;Iɟb a7\^v?é~}Jq/n/%F-Nh>%;:e?_,)"vˤ?-_dfAkFZgϞ= yu]Ŗ:\[Z8jdp1w5LXerX 뺮\.jY3K @-WTR5tJ$XO>{, H9barT \D%F=ݽ,'3د\&&FO=Y01ͻ`=ܽGk]OZ\aqmQZOaj}S n&W =gN?=ItOJɥ!#bD!sCQɑ$Λ7o O>BX|ӝxi5GrJpn&xjp="ե'e\%V\Jwal-$N#9Ce>snO>R2zwN"j/FKxw{I98gut!%WО*6!3 `|Zdź (@q?'#bTg%IpV:sbR)sqE?c#\%3:+p.We=W?:!p`vp8pbpgp8sapg!dpʟ7W]̆Co[Vdc~y!+Y>{9v:|.JMz / i#M~z+wy3NT=/C{5Dqe5'ƍq@ e~pf¢QHCN0t6{޶ط/d`/AW}ɾ GvГ[/r20 JNXֆ_a39d,,b8Ya?#K HV>s6m8gѾs:9 a֮Ɵ0O渗qprܞom㷲 |w ?=_ 8΄q87EFF?Zb?PI"{D_5Tۉi;e VtRS\x "RFelӆ8I_x [Sr*js!C]Lmyflr~;|~}xa>FKg*-RT^Vq{F7r1;+$O0 }>*.Cgy>9/ DФ3YIĽg`ln,!Ch8 A8 _-/C(m\ L Pԩ$Gr8"!S+t #1K ˕p9Q5H^3p:h(j`k䡨0*>"AR󧐖;?^+G={>J vO@xmɑ,2ؚWӁ!>F㽜Unn|ۗ#iaٟ:p+=9zdڟeOF;ǁ뗊_/_+_22Ƹmk4EiF?lQ].N= tq [A?Q-54ddsn4rF'~(`&A߉!L-Y? ku@Xb#.ߒ[b<ߋ˾xU2A0^ԗ6Tp]8po#=^>  9\ugRi1^U)Zk͎q&x͏PF5KRћ;dBZ󂵸0}"0^ʹNioFv)7OAY X:/Z[akskxVy6N|A7հ}װ ʍoNso_C;pR> OiwQ.o#zdԋaOf;2yXxRҁ f+;>'qovfϵ }ܞYTM3N+Ci`Cf61` ̡p8WEF9[_ԩDXB"dHNUA)]2[cG]v'%FU?n7'^`y&+U%Ru(=vg.sAl Z3ޫW v冒Cha OA(SOr^9whaTZE\ YRg ݫ+^yY['KPuuWR˷&0>g]L_D˷]OJ\>KSh"gҞ(V/=ϸ~zQ mD&qo0m\WBzYNL7ngXԭmZef_"z)Pù,iE%>YfDx.;"L\R/JfwUNmϟ;ʒ?6[z=7EqOJ/m, z̕UW,=qt4}q /Ar0I+2`QF:[`Ѕ 0u Wp! @sXOmC׍,N֎iO^ b#{Hس=H3SSmuU(tzSGY \Mvj6,E&':< cs8 k0 Zf#[O T/2.1COfJkz$:HhIz?n? oyR\8Ajrh; ֙#%ŵD̰ SG4{cFFwW<>5#k~.!YqIpvFB Ilّu:5Q6էYU7/kG62 iT1^şԺ;'H;T+l{qͰVnTkH) _Bxq̮f9Ji;izBm{;?ӄG-{Z,c>0a~@.+^?9_P:ɀG۴5ftD}:XΡBӉ).sоT=ٰSa?k?Oh IDATq=RfOZ;2_?:8'ƀ݉5Zk0l-ja;nǙb&m-!oYkno yK9P, ee/B:\kޏMɓ'N_>{tk1R`:<Uh4Aڋ*gM gԔw_IIڗ 8Dأ#)ߵĹn( Xꞗ.]J >~ gCQfiU>X Ԯŋ'b 敏S쟴44*FHoQc}kz u}/<ۗg>)Or]׳0\ljGzץ?Ty/~M>ZjƑsdfQɉ1?ӸmYJw]lF3m}Up!]r%}"iɓ':ӽ7o i [>}ZӅ;AWb-gm OWbn<5"iyslES__ڋ2וB &nbbx2rxg}ݽ{wQ2#8U? l? Njg2Qy7W} n +@fUo!xtv"k7]7oZ}99Ýä;\8kgth5*ϼ RW} "v E--&m/trU?vgn(h*vgr„7ΜY{F9p8r8p. r8p. N1Ƕ@'d۫炥gLifp8l31Cqؼ> bsZ3bkbS086Y!I/pOOB;SJYzN6 ՠQXs92bjDaqF~ǣ>w\hv%èoV=9ùy͛Bӧz=]?pք#Ъ5#5q.=#zr8sxg}ݽ{wQ7JӌfJ[5Ɵ ǻ[&H:p8$gq*˿ AT 6]2{2p8357\JI'p8W4=p8Qp8΅Q:3p+r8(1dA^okBNGV}fo{NA{N&~rfTDyQg,&D;r8g _>7<>z,Y|V}@)ȲalkbS08N gmYUrfĨ)'ĚY^W^t=X;r8gcX]*ۗE!%t c7J54t "4{ӗmLP7 )L'qPߎ6}rfDB]PA-T}jvjRܺ.5\1G?x;6m߁T0i'#j Hb+(W6T0[Aǔ) fkbA1JArbZ2kЇmf9Mt$$fMSIZ}iaԋ?%3DPa1nù,EVrw>X|JZnɔ+3(^30[:T)PQu'^FXQu f3뀺ALP-ULLaR'xwrL<Glyg-3T!r)yzB?.IA5=Pu[*8JkycKu-,AGjf:cŲR48+wc{cF}aԋ?SKg93Kf4ďxvvVrg.R2CHɿC($++ BHY/nqjX^j,b3JÊ+i"bS+{& 'S/.KNsEe/LS t\.z.eP&B먪鑘#HӇavdۙ*~HRDPfOzeϔR9dtMpϢ/G/]|aiz6X*4K8:MRT*`p$8ʨv]H:v]O֠獒ݦ3ԫ -!.KP(@g:iUS8]@%zܒ i/7 '퓡^%3pgah-|xw!FL nޮEuv}R,9T&t Z/KN>bF`T(Bmun--? qY:łMsѧeŝdp8ӳ(gov~ʆ fBlcfl$\8>UcvteyB"8@;F#$ÛQuS$kjۣJ&ca$0T'PMT9:5Q6(ցNET(v:C-.von7vÂY4;SYE4 Bk~ªo=gr [&r8x?c7'O|; _o6]To%Z 0^6[*jyyڱjaP})@,tlPb7Ko³SKN:1ݼ_7v~[5-;"8-M}jm=RP˲gZ'˩'syIzN3Λ7o BJOt!,>N\8&:z-bh7AmkB t.&LIwr8ӧO?쳔 ^ݻtM' >D ?hW=΋Xp]18&Q$|;?4+ !mzJ`gp݋aÙ {=p8;p8 ;!+-p/Vs8g6\gg,G ~Y2حBW|4]9v:|.JMz / i#M~K6Rh2}] 2,^Yy]Ϲ,퓗 /g(1ֱkCljnm?x}1CBN>}G|d]ҹ-Ǒ,# dta%lm( y>=s3#dufiL>ù Yj5WG1t$Yo,\omk{Nk's9ea8g[,*&`{MT>Ɔsrdoa`od'-?1d;0gbǏ/gӳ%݊m}%Rm'dL} :*kᤗz6.Ni#H*kغ84E>kVqP+sQ]we毿}M Qmex/LP7WChOJRI{YIGAݏ4wbXNM:ow+ͭYTua՞s?Ƣ~Y} e"8 DФ3YIĽg`ln,!Ch8 A8 _-/C(m\ L Pԩ$Gr8"!S+t #1K ˕p9Q5H^3p:h(j`k䡨0*>"AR󧐖;?^+G={>J vO@d@|r$ t`Ax/gA48eik/fg4}Xsv܊oWϾgٓюq W)6{1nۚ h? &kQgoTb&74*tZo wfP/R@3@@@f?՞ĐA9D#3#QL|$"H;1 1t0Kㇵ\!9뀺:G\%x"Z5)}gdnaIɿ/mt=qFv|t(rΚyz}@ n+92o@Ay.A%;̇SN;@M^Eg}QŽR'}Ki|ѣOWivksRdzkrͣ?6Ӭ𙡥 of 9ҽeU_H{e\c9"mIt>۵mn5BqwZq3GJ.9?k߉H?aA^4hLknjg3."x}jF\Bf1no w> ׉mw%_E_RSp"׌}r>|\}QBsA|9)-;U7U&ʆ=4 =0e&B>"ƫ?Z7~$bǑuemO6N*ٍ{`jRS<6re]rbv4D8'?wjG& Z[r!X}`\:u9'W6~ru`ikF tC\S>\ce/}za˧ð~z+͞vdg]~"uqN!{]k`r#ZG[0L1n6xleYΖvD[[kPPNϮ|"@j0l,%@HR'`ɞiQNswH'8>>vSyɷzgϞ}{_&K֥_cѨj 8LLΨՕ&@ ^T9Kme>ӥ `ORO־Q$rD&I&DwCLRtIRJg<طp0OD_v-}/^4\V>kLO b}IOT7eG}#(&{^F`Ջ]n{Q}پL=GIOчmz?g뺞zd۟nOV;^.m&ݠ{SlR3#0k܎JNm7Ϣ3g >ZML~BcC JD&&=SQK.ùyڅ{{[3I_‹yg\%xeW}ӭډMPw(nޜ\|}TD{j!d\6}8W^&'ƁX;[EkWy}m_:&{M G/jnYЅqeU<˦JÝQԠn ޾MERnr̙kp8Qp8΅Q|/9seh149[>Đzrњ,(jm=mPPDQYip8W;}rs0;as0 =?:39Sʷ5f-vKC?- ̪]Qbڤ8ù0fWm;n?~xIOTnoI@-TD@նţù?x'D:!>A|}/~Q[|3abyp79kk@A@\,hE$Ap5YGk85?4nX×.˚3]>5?m:^WFP?M)vM5A CH՟gv9~lpUcù1,jh'x_T}LvORb%t cl`=*oQ@;RiVZ˛[3&\EJɄ}h!CꎧgTㆶV2o.wNxUw0[b$Fgȧ$!.jb?;&^4k۾mk%T clSf[.izfC'!r828g-]V**- ዂ7+&{ὝR;  IDATNEϷr^UB(2#͔?]D-!Z/=@@\#^L|jڤzW6< BU6[&ְ/T+!e=bzfeT((p.9rF;+ *5M#SN b-!. ٽN$HRcFꎥB$YTRT*HϚ>^3IƁ3~ê p89myPp;.i#'K:vC<i:2t[]'r4muY|SkfrvnOzJ }Xp}w?-p8r1gAoGpKcbQe}QB!8:5Q6l Ng.c~r2El;*wvA"8mtli6!6"b:dlh,9 9Tٲ#|~mJ6CF 249V?Te(p.=q||ɓoCY/gϞ={{ts "SQ@aKFR.o8\N$otI)C$5*U#Q -Kd(,"?5IZq-f}192L6KT2֥xO3~R&p8ɓ':@7o O>BX|ӝ %3Z |*1Jt\*[Ylq{%Ui܄r8g<}>K޽;?Jˇ8'ak#PѮ6{͛ᙉu 1p\(u˂ˡܹ,6p8g3ʹ ekRp8 bQvp8pF(p8BJ˟7\?oÙ %&GrnkN5`'[~1^Ѭ7\Z^H'+7&"oO4rXʫx,[R}%>7qdr\jdĐ'ܪù×ϟa$bBeDuTc<> A;@b-bik#;-Ǒ,# dtZs䃭 >Çgs6(Y|Y'p.´Fx Ց~;| 猲,E^kj.<ԟei} s\¸q29bV>O4mؑ,*ȿ?%۾)ʹ퓯Gw&L?/nᐝ+j;7[ݕ>KNq5WpK=UUC4@W1^=0i#U)A\ZØx+3м3oMPoo/~1LP7WC(;2?>Sri3=q)+:#+eb`~KoeY|Y;?<_c+Upݛ70sg4ѣG<@'L??"%MZd'듖H['KZj?ƶB—-sK!~%d7a<uE1ɑWrƊ.5wÈl R"re-*-!MT'9b +y(*Jf9ȯ4;fz)ΏQϞ?9S-;^|r$ t`Ax/gA49%uֲOd$–Ϩ/rӮ//(XW)vK1ښ h?M%kU7T› z:_Wak '&f, M0OlMiԗ 5Hc(3v=eYNȧp.'`(&>a?ѤO \2A0Ɩfi+G]ԍ%9-I{Q_~wJ&ƫ:҆ N׿ mˇAׁb!Y*8̓2ƫs81%Tk բ#Dt=f@*zsx>L([k^7BfWkV9).?Iw34A>K'wYzw [7{^Ûͳq0dž `b`M* ݾ !f"Ϩ/ΌrW Iwc5K=3K6*g:.͎qlv7aUG~oGuZvׄf d6]L1X:لM 0a\1*%) JL/x6N٢JZn c\`|c˧p.'Wuj%'z!>+m:SUBJuGVi(gׁ\a~o]\#OqL,'iI^_ Ua`,"eWob 6n?ZtjtzSGY EKfIG%>†,bRT&p.+ΈO;[["gh9f5}|7 o9ҽm*_]WEPc,Bi|vxM/D s];)Z4a>S3 O+'MM~u:sˤr>l:% OȚKHqw߀gA[:y>HiۮbZdNnv,Zn ƫ9 ehïc! ̖YgSe]}\uvd!bFEU؉N{$bǑuemO6N*ٍ{`j{+U>Ko#W6!Z)6-H#MOTȁsmC~yvgy>~:չ}O+e &oȥP}Re'qK*[6hflϰOg9Tu:10\Vbڗ U}^ϺDlBv' 'k1&yt&F|j㪲Q5-!o5;b%ҧB:vb IϴBDP6T04bDHVG9q|6 0]̳}HgfϴO%E>UחK, j7^*|Ԍ#8Wcrq뿑3ӭobd .?V>KAR]]բґ$_eC{b}OEPpf'O3u2=ߧ{o޼)<}^ aNwⵃZΚ: =yJ/ڋR8&;lE VJ[,<kHnlM($՚ \9y>,%C׻{$dF*q ~P#@n$}ewyg\%xeW} !xtv"k.@qKi`xO CrK/bLn2_a7W}[ G/:nYqۡ\Yo\a3ʙTح^bQTt. !Zz>׵^ ډp8sapgp8sapgÙ_G{)^p8Ε;i_ȿ, ,{/|ECN-՗[w-}'"rak(&w6p8g1×ϟa$t?0<L"p瑉Kzwn=2#=1t'=gP^wWc}_:$Tl;ۚX3vgߘr)Giulp8b}~w[ǒwW%/v|+$/A}oaټ+TWafuvTRj[MhTw+fYa/#Ɩ ոOj -\s8 3hG>yn$W}2k/ @)솢j49Խ9bpTPR͒'8I]WX>&?S4Boo |y!D\fG gQ" BR-z;**r]zٿ]Uf0g&9酢Y Y}p!w^󎥊, ?q?k{K]z}RDJ V'32Ě3&oVHz<)1ܠꎥB$%QEQ,u`4JR:cbI+ KuP7_'IzGvY䤴*̏:}у >'~W[z{jPڂQ_B^K(b*InlFVӈRlsd^9m7ƹyv,ZnOS[+c0PDM3?`Ip83fhN A/v^hrj>_iܛX*x_K"/[z}JvTIbO)CGPuSujlKW6T04b5@!CY"8 dgBKĶ 12L}bm:O3퐅mdJN;X;:^h,9#kT ̒ sS8.iRM9 [&r8gʓ'O gqoM<[#lFbM'˟oĥt&mm˥`8-5| g5tTI,ug$NI bh8܏:먞rCA)TZyb">4?Z)vǺ,CkEW*0*?R:]O/9)X 8 yIzN?Λ7o BJOt!,>NhRfA R3՚{/[J&;cUp8>,%C׻{$.i+NW%HPѮ6>{u וYop8Dpg4#wn8]NB"( ׫.ùrpg4#+Zp8uBv`p8p3p8ù@3ʹLѫͨ%pn$yؚ0O*dy8Ф_ȿ, ,{/{ xyWؚ(<9]pr / ÙwFa/I"K6 K2SxnFp2R EVi`q}71tڶUL}blME 3p瑉Kv 7'ďesc]ȔXדl[,*̌yL!+A>"$fd0^:~΢h2+=ï0돕<CT$^|Uy}Rue=Y`=AaڿIp]])*UNJVgCxRjufKblZ rQ~ {ȿ~l.kPmuҖQWc7rE¹ E+\/f?x'D:ѣGP>ϣyϣ|{x aF~[0lЖ C0 9$~`<<.9|GaSX1)'[b$[N? 5HC"BJcGn?aPS5#!hlM4?'2#EON31dzݦ#Q77."1p} v0eAba߶žok_]SsLot~Eo_?U6:a%k |5A5M0d3}ϣߨ.S0Ae%F?z°zLPN6cHP" 9aM7I!GBy Nik/ߏ W\c  =ůC{VLWP.~-^1^/8]ʻ=X]Ǐ[`ڱa''H@^oo>~lޚ_v:v{PXǏ[^ _>;?˒.0bTJ&-LCC.[cK䍎K ;:P,Uw0[b'cOm{K@iXSQU8^h(u?}Zĥ;_E'Ip&i+=cXQ*}OOe : }Qu[*8JkycKu-LG0ƛ[%s:/ױ.9Mc]r|UY@?a6;~qrGlELlmM `hֶmfgh615eY瓂5KRkyXxRJ&ƫ:g(yȉ#Q^ˏ`  ry~ ;wVw +Np.@__|Q9z$~J>xlBaSA(WP7v;߱ܩ*!Kfr2![2Ax'r C r]A)Q7)SmWkGzKx+wmih]\R x07uh-yPB !ZEL@Y- IDAT,Gj`Mq{) \ E"%ٲ$~` W/_K˗ݷؼ| (U/TM 57}3zkE"ǏX855:Ѹ޿햽$ ;nWBk!ϙ}B!6l6:C;q(HlSZo-Ց;aFfln irC6Χy>gdn􅛆11;VGsYØML9܊FOʥMv&9kg f(t}\LfI|nl˃kF޸ jXL:qE,onZILltJ0K#ӕDaRO#MCnJ[-(.oj9+"s֝8DUYgqGo+ͦ4/3gj7}"ǩWp\t1 9ˠ<3)/GvhU vݮ_Lǁƌ[7vJ-?ǐ'I٪|_%k腈swWLƸ۞Nr]DB>KsǸinA}NRDMϬMZ1M)ω4TSr%;_>U4-rTkȟW+_39ѺK9iͰNc$w e5(7YE\Fxj>L|\wF,DӝN/ީy?Tvcdf/^.Tߢ^Vdnθe\oK=JUG-vO ,=":݈[R[s}-.3oQ~Qr֯F-7H,H%Jq=_r [WJ)^WTѴtȍ\=2F}}{'4+E??[o p_>ɐdUufJKUGZJO-`\ nlrŒZUJq kFL6wԕ.?(9=>DžTJRJlEdT9Knz`͐v+'r<:eYN:5DU'`UN~E R: 3z%}Ik rppЌ~cOIO_lmV^jڛvc0٫nmsL6iq^~͆9."$]Tktl:i;эeZvGzk`a-Vk5gp77wӲw+Y`}{٦I e*=s)ص'y[6l%v#ZۦU^wٶ5F6[Vכt]tƳ?7{ !=ak{>Qw±D,7!GK/hrtG0y'3ݱEJ"%.-$Rj6M*{pT9f8& >d>ppp02l9>>4oD""ãGr\t!a>3t,ˁ ʝ)KP|K&Z0.w;jSUntr/:T]ZUgR21GJ4GgG=y$"CVO)JÚ뫭nqh32;u}~lMHTιl9%/hK^9V^q>0=F936ØDʫ׾Wf/jG.yfʟq\p?x~0ez x@QhC0 m7A.7?ʗzY($Ϧi3zks7*H@ԃҢqmpd֌~CEp(wY^)vInRٍmk p]@0}_bHlq5jE&FFq 6 tL=521L{x8PhC0 mF (!6І`@QhC0 mF (!6І`@QhC0 mF (!6І`@QhC0 mF (!6І`@QhC0 mF (TJS)W'O\A\6І`@QhC0 mF (!6fǁjcuezhC0 mF (!6І`@QhC0 mFJ_IENDB`DataLab-1.0.2/doc/images/shots/macro_panel.png000066400000000000000000000622561511411446000211520ustar00rootroot00000000000000PNG  IHDRFXF pHYs+ IDATx}t}(&,bt+=lb;]oӬ ` v}U!v7'Kf7v[d{*zomwˣuӫn4,ݖDXikђm QqIIOΙcbf~3}H"""""IuDDDDDIl* pEDDDdSQ+""""\TȦWDDDD6""""ue||QIb5֭[))4_%6MT2::OQW$7oT+"""Ʀɤ5PTTQsYWȦWDDDD6%Nnbכbk)ɤ={Yj+0΃Qv._0=ऑ;{o)l#:?wu{,}A]o~ n\?eb Qd'9׮310䊈, /۷Tfǎ:t@=xo)ӛorF)~ע"""ޗ%~,?+RT2R}Lx`m}<=Io۱caW4o ns%fclvm_磿cbF0nbPVvLNP|;=AbQD=Meo2662[l)Pop*I rسgeeeo =kaΟcSw:<+$ gyn^P[JF*~WqY?exlgA؊,\fΝnŷP}c/߿m۶JEh'+/Ua~y5$<7?jm?Ji:]D ~ǖ*8v`Kecoq8?sVvL/gp PsHN0Y7I[Cɭ䵝lvc=m'?adĉm =~Nl ۖ gUFc?]E ?|_GJkDgrGo^݂܊a$X7Vq+5;^f?(#'Ւ0`ˮ*F_WٲTaW%"""WLnykapa/Gk #{_Q\.,Ky''_ǤwᲩT9^oOg2Ymo2Ua>Oppfߖ!9#94Wd|/$~>λ.`<-Hğ;O Wkpg~G)S*?ap-哥;ȁG)tF瞣4lI ZɒI>-ڌܹ7?Е}CY2ipϞ/+"""|r;]`yn%""""Yg/J΀0vI<-N8sMnf?98MRr"P{3ɢ6'""""wb`!5644]Mrμ)l{e&"""RHKڿ~wΓqܹC2YDDDDp(--]T p>ĶB61EEK-޹su_g'""""ׯ/+-CfU?_ަrp3̡(TDDDD6""""(MEl* pEDDDdS)7(7_;^:ē9.j䪫n(Y6wK:=N.^J*4NߪqI$?z%.wr;UUMu9萠"FWu=OάP]߉t^X+?}|>u%80f~EDD6(LNNrun߾͟ɟglw3uYe)Us5)ApʀA.] q1=ᅋWՀl:"/\U(}zszuk^A%wOz*>!WWFU_N.JPdpRV_+R?x :ġW/9 scQ̾N^|ԭlX(?u|5p.b:MǏ ] p"""܊ܢ"9C=4'ȝddddN{w%M}]uQ]U='qUQdu fԑ!CO=I~d=2ʨ$OG2Ŕ*ʪ8P_ρ,8PJK, ʀ2%ŌH/b*TWQ58;T;#eeUU3'KTW> ._ 5xrݏy-^~\ };otߺ?~o) %%%9rs''|tξ[nͺ~IUe|wvAUS<$._W*黔]ƈk*R*?'ɔ*SS5UR~pp0[%;DME.>^UufR\+AT"tppl2Ktv2xuAW5OzVU3+-e_DDdCfق {ܚq̿wg+K`2D@zUT|q_~n's ;;0W'_7 |KUOdj̊oKΨ`-g: LHj1oi<*ʪ8pj 빖ŋ\gM/r񋈈ly&l*ȝJW?3nݺn:MO•^K=|x쓅2kSL8[Yr)L$]T WtD"A2/vNg&$RA0dI;~)yj:j> Œ>&5̧S;fvԱ9o0Տ,+T˝sJkUO}5\K]S[/"" گڗUYQQ{᭷͛\vݻwuVo>#O3رcsFWn7}ҷŷa4n6k>._LT+Phy_y=UfWra]\I0kUQ޸t]5졏W.j@_'޸ĕ_G3ǃesӕDm{t9WUm*^•+}vU+c\|r'WxUQ2{U.]B6!*++_یB4-r7EDD#`EEE3??>]mf8p׹ۏ_DD$?0<<̍7ҟ'&&,xRDDDD6u}vˮ]fvvvf}H>$7ӝ;w vbdd$k}EDDDDaU\X"""""RwrrQʸ{䊈HAUʵݺu+NY^O|"}-sD/Pɾ^ԭ]DDDDd :{ à0gwMGrDޠȱc8XAυSצ;""""2pw֭[l[7AnyO<͑:r:V NlH p$a,fv{ܹu8~XÔ YsR rPTTf\n![.ܦ;QRÇ Օ;yl[P|+"""1,5]/9g{1(ٰ :M\ =uv+Gi""""\{9{Օ9t;׬_"""" p19‘OY """"_ pEDDDdSYv믿~dC \*H) """"(ME !hh{;"""""i۝D/^y1YEf9]oo 5&8߲=Y]ŦF;Ʊ}se-L)OtIyy9fʅKD`KtFg] O(!0K@ :fAƶԾi64ևS :]GCE P0 4< @0:s48 ۡ #0|d[s`N It{5 2'Og+h;>9oE;oD!\8vg no;XDSA ĺfO |p4a bpkFfB~t3wlq zt,XbBt7- +p+'մY=1NӆuX_͖ s&=;9O˂Zg5gҾa|'"""W\xy=~{ƶ%;xzB4,g{}.k.tׄ^v/x͉;gtn ZR@w*8os>6 f#MVN^Tm~Lڂ­g{|g{@4u>&640BODDD -ouλۜ~/P_(ّn,y#N"‘>9V7팿 ]b)CCq%v'?IeX=ql&;}=PY@f}^i'gֶd+'(oy;ߙ:mDSm;^b6 (;}mcQNα:O8˸:h'e>>)(ݾn_z~?/ѝ%c_ȲykƋs OV QYYI"8rB-<4ߣyyEDDDµkרĢVY6}ǼON3028/q(/-_Q^4-3m΅B)kADDDd)Hw{ ]dre;!""""˔DDDDD""""(MEl* pEDDDdSQ+""""$##kڍe!,!{;6GZD׶skACl*""r[7dO3Arxxͺ|P(4c9CTpCW-Xky۱, +_랬9 Ŝ7h-!YUgZ(,WdX=k|*or);}t ^/(H;l6i3[eHnw~xF:htXtpdw;3Ģm>|`ot/kWs\ǘ\FGעKPQY^NyjY x=g4d,L04fRu_wD ӣ\ @z!pv)a BO:G> : fv9vaNjEu A`3p}kzM IDAT i{NXtKuizi z7c&iDE5 a(\ w6f\O{GO4gm6KDD o$x&ƹ4+ȝ|ҔgԴY=1Nӆ~fKIZEGF~O.`u&%""n??3s&huTT|& 5m?lgoڽK=S<-^g=Iܾqqob&ޖ65-Gq}Ls澦4ƶml;MLC#uڂbݙ9+?ŮiNYwj.L?p" /)Uuۭ`W_Up1198ޟv#I2)?xSV8s־f*/4X.2du&.<4-ܛhҞL 7m7|9ywhT@G73%\ߟs:3=Ba1;9^/~&bͿ/Y* nH>P=k<׉PNB> n̽ԦGNWoFeoWͽ9hGが[iޣQgxmowNmg]A+I2dd8Kx+Xg nWڿ8Nm{ϻ1"(xvvlj;,Yv)G>Q(#$u @ :uמG(m \ 7̙:f 5~@gZIBA@F_f='Dm;H"8<{+'-"|"e>gYO}^i'gֶd+'-vuڈN/s,o{9SߟPt: s~tZi%""700,r39ү&`e仿K{}}}ɑd͛K[^7_o>|-m>V0ēLZ3sd)Lo36D=ɤ?2[' O0tğLG2gI! >:g?I=XQO?oSNAIjcV̽i{~~:Id)uIyIވ?sޝ$d~?~SMd\h5E/oI%D2Hys,%"9%=V 5nՎWOo6Ep-Uf""""fVX}5WSAL 0mܳgdz nEDDD67߾%ԓT?=Iߗ YzGc4ƶt۽3_0:5A9nPᮧD""""ϊrvNV< *q1M9nw7.9{{&""""ːWnTTԷp$`rSV8l,)\""""rwe?8x'\9""""R({xgO]r_#ǎh>H.@yGZCDDDDVL) """"(MEl* pEDDDdSYCfJhm LT/""""d+ pw%7.dݖ,)cGL׭ mۘfu6mbj&;y[c<=WHܻ@MevEdSC[$IY `G;- tEDDfXȢ:?p=,}ٞ,*9xi>s{!ܭ2VyA:[X8&t%GwQp?)PpG,꘷=I9n؛lǻFY͋&`үwF9{ÍwC0Aۇ$7NXMه/&t" F&-#t>NjWDD$-(l;/y1R4v5Yy9唗DZ{tdo @(D0 ѩv0> : BlB Fj02ڛgݼTOqizi z飰 u7ۢs ,85Vt3M#'v6g9l[~u['""rw_ky%/EJO>ͶoK91pؑ;ۦJ܋ ߆Ows²"ca|SBOg9naE'yaD, +RKt='L;L+Ar?adDHVw GsMmDz,KnsGnZj㳂Ԇ}4f5mAOӴa=2ΏҁeEzߑ1K3XĨe~Yf _p=n~J]2̇[eݯ)k)ψem*.ijkI[C v/^~ On 0 ?|Da|g{S!@k VsgnzrO|<~o٩dk S}r&!hڂq;*o@iY% aq[ nf,#۷ͻo?xI򕋟(q5ac@z´ڌ5so"xiO{ʡ'8NCsK;z0~%E!FύLP:=]5purNF[R󴦎@ML 9L: ؖZ`upF<Ҳ'Hlлpm#Cy|<~MH֪&Jj,IOW_hz(SDRjv1u|o{?a|n7n_t% vb"H+Z&<0oo}mpr /|~Rev>iZICG :0MyH.`QRV {o~9zp+L-C0ޚSC/?CCCTVVH$(._Ν(7KhGdC?+~ЛDDp5***r['&&-, G.ph ܀NUe`cG-Ξ9AkCRp~̖vηc3Gm\S.DDD> p͝A[۟> [0q a$ɬL&Y\.mVvw+x·e47ۉ/wp*,fr#""""0Ea=JnzQ1s㊈j9e-ۗXd&""""MfYs =Q #ADDDD3zxB,\W唛u\H) scRxc I.Png]O徃Jِ;y*[h1Nq\9-G4+"""(7}XJGY""""\d=\eDnykjߤ|?aNhWDDVY^7xO}Sٗ_S_>rO=y|teqnP:)7yFq c֒-h`NYgui? 0v e{!UwFzt Pq78眃mgTߍ6pR} o}16mf ,ykRiTzj!Jwjs4䇮3ypھ~u[雈H099IJ|ucxi,%<45D}쌥,μ§9nYX [9heEr :~bn>Cq +'>Χ4[:R}Tۅ/m% G,5ݜ, 'bYXZ­ssTk,i zuOup|XĨeoN_bkjg lUの^snV־;Mc"" aSA?ܳt.6dY[#iYTҺijkFgaĉm:=KȑEܴ'ƶmgYBkHQXLIBmG9Y6YpvDCg@G'Ql&:9+Gy0)|"@Զ|a]0ӷy|H'FTh_"n~ۦ?O/5~:m p: sΏ0WN΄S[Y]QN:uxz660>wji^gS!893Ytbt͊PSܸg?`m#60fp&b_V=⇰͉ڣݙ^vu_j:?>0i9X1|nqP!3.jgfXz*EOY!c```ECh??HS'V# w3\YYIuu5_זՏ!*++I$/lvܙVGHrA&;5L z!ܧid>D0h_EDdvךX܊sp^/۷PmJ̖ٔvηcxWj*k\"Xm޼݈*/566b/[pV;3ˌ11ȝ;?WTTPQQl(YvwK[9_ r<"""KB) """"rSl* pEDDDdSQ+{r%Y pe6^jhh-%h0 nws 8/Bq lzhKnܳ /nyY(D(,:ǻEXw/ [U0dr!e ї mB5hn_ayۓ$A´~* 8EnUf>w 7*hRu],/70J0B ùC4@Ȏiq{za48OwRTy;Ԁa˶n!~5h u  YN" ;pI uC9oi N 2Dgpg9l[(P㚻־Ԁ-7@ˍ-[Gck5ضo1kɞbr^DD6 ]D< *)/wR8W8 %*Ows²"ca|SBOg9naE'р0~"%ܚ='L;L+A=r8~œɈ <jt`YNߛj͸% G,5ݜe^le ?Xf8MVC7.'fAMkWs a͙Z-`{uvM6u:lq`˩:XKMj~/ֿnYoa']がk'"";h炁OS^4=>ү(mjkbz'3L۝v"~gFv" [!tMRn>ilkCSH<{1MoKMqbsn=6kw03r&!ؑ:f mAG<-.0'cb̍2%_ӎebVyWy*XtY[#iso۝ IDAT-KW{#c1McP7#""";xx<13=as}$N$dv9g>bp"@Զ|S |aT<9it͗`jی̀M4t.!(m c\6mO߶bE~vtff#M';^^?ItN-pwv5uW{X>f\BɀVDܩgϓcxj4~+"".pmΝ:ũS8ԩSʘa4s4gtsr#vs(g .}1Qn7n_k C.5sr?~>N8M&-ǝ:shȍ&uw~ލJ'2]_k^ʞ'h%6uݜyNEFyEDDHu'ahhJywΝD >$=\ рk-=m~"k2s֢gC[pRi^1;D4M-W4`83Wx;^=?lg7+5ȸ;hfڂq&bi85i\DJEo8BiHq4R3$[YD0siD㌌Qqcl,aYK3|ȑ#YZZOW;v=؉|ZO:wG|znw!N+VBk9y7݅z:Kٞv.ؼGs"ͅz: nlkqW?O=\T;/ߞf.tv3;J㋧ f̤;[Kgޖ|볋t %\޴ٞ86_w6c\v^z^֓|o.a([=QKv/s(s3TT23[Kq-D&(=7JOSO+wI*\k%kUY2yZN4P4:lwzU篏];f2\3_0xdl/Xe-^;kZf7N6٫^]G n6gdĮw˩K:w{amZ圉4?hԻ=?\HIg̉OImo{ZN<=o7{y}^I^I:=i2}3`]]Z~|Uxy-H%Sijɦ &>ئоz >8ݼ볛5+H-};d[G#pM;\"s^zvhl";]Šui*^/T&[I}l{*Zf/BŹm{4'o_ʵmmzL6sۃ>kz.̣+9>6{:ۘ 8EKR9sN_xtU=\2_r7ɇg3IewV?i\|>夒m{<'k6Ds!LV[Ijv7]'Vjքf7ToY=Z1Nshvnemk{!^$tTͿ| ie/dzK27a>}5'~猎mÇoI;SC[bmiO e2 oiOeh5[on*tSd+IgX>̑#G$ɓ'Ov}X-M/v7.Ѫe.;`nwf7ϵ2fz[3 L^xlHj,l\*~饻[2e.ݢ[U80.EEPq~vnݥo]OYZJ|xz"y+s9+#|8i#ճpB.=+9w֦[>'|zn~/%GF-Hnn>tUݬ;_͇g?x?={]O{nrB>Qףּ~['##k!vnM><{!'G֎g$@r'ln?KIW7z:Ο7=]~շ=?gtt4?|o>,qކȑ#YZZpɓ'>·((\"p(=z۞ӋjPTƇRV3ާALe롵<3n_Z/s72Sjա Oe6@nw;׿*ssslq{WssszEM?K^=>^TVY]]Msbӱ=I ݘ3zn?vtOw~ݎ7^ֻ~լv3V|e}7?ѝrnR= .V*3:ʾܥVR_HsţWvbr_z2\yw;^~I%7RO+,un;d[nٻOoʱ}j/dtrVuԎ͵PW[YhNw.^'yzSsowD.tt-= Xq$;d,ǟ; ؋~\}TˉJc_3uαt?CwrѶ3L+,|MXZL=zN|q7ӳFx4Vx6c'semR=QK=xm ensz]=T*#IFktkޚYsɉ$|~XyznW*n{Ll{HF*t'iqmuwfVʝtᤒs-^KD^o\ڊjex&ruvO꧛N2±V&t.9VpT>t.a$+WgѶ9>w>LD!>o7d^g,\{ވ{YicyNNb:i|3qb٣޽Ťv"_4 2n3R9?|x+^>9=~.^ɭ(]!?~z+UR^2s6/ί=6Il.4G֑+d>zzC綾>|"GW32ᵟmfb&oUJcnRnǟk" ׎-c\|ƩoLfVWQNuUE(R?泺c{M[7ihyy3::Ǐ>طq>'kZx=oCon*mצ=5VZ=ѷj>|#Gdii)Ã'O{pU9L^ZoRuf!ݙ` 7 Rt&y/mp/M* \"p(ʁYw;Ҧ^?d$\ONgi n?H5>^;[8;''S9Rrd6@O舼(M?\ P!SFSr isf)KYr%6og9f8刺~22P>˄I \2|=\{C˫o{h?~>`=|Ç9rH2<<$yɮs"p((\"p((\"p((\"p((\"p((\"p((\"p((\"p((\"p((\"p((\"p((CCCo{ _R3::>[ZZpɓ'_(,--)l^cP>{p((\"p((\"p((\"p((\"p((\"p((\~_̙/۞ o9|ӯƷ:<f/u#qx)p7/hO?]/sfce1޵_6/噧[vc6?/[8~^x|tNGM˹ ^6JrܝYl2?;o$6|yq73O7o֧ottts˝[[''?Ϸ09i}>$m%'Yx8zy6&?~/7s}c3ܽ`?[~[ɉoe[G]^?o;NN9ٴwyyv }ڃQoo|JN,<41K|Nzem- L~YG/Ι?叒{|l?%7~c|-3Xݴahyyyuakw2m.EEP @Q.EEP @Q.E9j|^=EP @Q.EEP'pWzi?h'~0־3Q~[Mƃ-d7{Syun7R?VO۞.ީ~^k9~g1IxgjS<2_k|trg%>'y-U3yΡZLvҹmO+IR9:ffT?`ީޙ/^ڡGtRKoʐ\5K$Y|νzǶk7mS{}}7X!ԃ^n =]{ԍϱnLe~c 鞹fgVzf:=C1gVWڙyPm;_wDqѣRETRZew4Lӣ͍7L'i.(umMGwϧl`Ŵ7mݙ?RZu1L4f/?Irl6g7?^rz+{1<M/T'x晐xS7={ h>ɵW$_doHԇVͤJz+tg~pZ¦]g3kϟϿo${uR;6?:ٵKu\m0ٵ?Axn'---ettt'Gٗp0<|{?gCߒs/~>+jߨ$O୯|ڟ ' DժtNL 8"0qD`!K޿^kwy M/&,_؋?@B#GDZ?yđ[#gA&IL)N6r$γiN<gOD8Pݬă1]tR_`DŽT~y5)7y-^~o?OweZ;/QyϏ0)Sk~MTګoEy.d>y-5! q#V5EE5.B4}ʺVSL7BI%=>;r?jR =b8@–֍A1皍~B9Tꀽitҥ $#r̨g177WVzY$o(w#) ct˗ߏ?{=q8UR":QzُҞSөm9Voi+O7(4IxDߕS#'HޚWZ~ɍ v2*<ӿG-,_/ ]}oӻ wGqݶ]ZzܖW] muV{qsz_L/S%NO\~-:@kh'}jfw`dr3Iqo/W=u}|W^%ŏKp/B\ }y{uՍYֳ={g#\ᕀ$>?)^ӯ;}uۯ]ActRJUeMΔU6+G%UI-/_q_Ot3|"w%Ȟg!&y.V9yV*jUUQ==w:ilۦL& . BF{f6Wǀ+<ϫNRyۣJ7n?UWz1tӫ|_1a鵿}$]|m!-ݒ:pH&&gzO?;}u{Ty}T\B>v)m)+Cs|tҗ* OOdz{PG:+Qbww3l 33dzɖJl҃e2߿N¿!Ӣ=U0rܓc D{^ȋ\qim%&uR $ŋtѩ|`4/^IJL_KZ tRXiː^[tWebT%,֣4֑ٔnvJt弗r_t&/{ﴔ1Mߍcg-HIyƎ<|SSisiT{{ǞZ{F%H6+rtA]yXE*T.ZzGoG7M ~H o߿!KnM+:دI0}!>ƌ7p|6zrd9\u 3N4wJG?52|ƅ7O&/ȿ!L{-9 "GOk׹1N}C->ɿx٣_߲-q :.P.ojSVsZ+ gӊ$IQ8|!U֭2[ru\_znx;֕+.bAj]W-2u>IҜ~1ۥ2ߛTpWNn6ُ>b~qIO;+˗~L˿!'Ec8Q{>&7?K"}3?G7~k=e[һ0,,i)DJ".Õtm?PeO2mӒ+ݤ$i6[;JYU%tˑ¤IIK|agDŽ% >TϜ)֩.3p$s']_K~&|O %C^8Y?}QKekVU~F%]^ SbLZZZmR>Z=%r]:ƻH?'s v(Q o kDqhJsu*=dB./Awry*~|Oa9ҽ`c㓺z3Z`[d _{~ݩqK|oXЙ7` U5!דm??~w-xf5jZ+F\{- WJpҠ{vb*RAZ1n./c\^pSH6r,$/w#ݲL<{r:m0_3/VUywGR.jrXF]_{(~=~Ò[>1{3C "pjM^"ՒZL1T"_CwE?пwKwKDߞ[PR']k?2IK-J5ե_;8Q)}ηr- -fxThgTA7T1?zT}8N܍9X8WluRjr?a*<`?:߮T Fa)Ϭb Y]]ۿ|o6퓟䑗AeכG7<"ɒHS wQ`>#?GtCZ+zmp/^<"pvOf0p|?g?QܸqCz_coA ' $H !h~ToA @&L8"'PɄ$np!cUS,Tگq ȗJtFfƖEf}O\ ;jyfI[?8{|'iۍZ>EP37L$"p|jrfyZ^^ U81mlBbe^9yӖSzHޞA/YEKd{zr^$ 2,j\}}w*8f{58\:ݾ}n޼FTrP0KϟG$_]Ba+]YS?d[Ttt-O~q+dYAzW,u21]m5cu‹\*:\o~!JgG0׶2ހ[En!L204Ӭ.iq˕VA'<yT5x?eIs>W?#}Tϗ|F~JT~}8i>g$g+wEUu.]<l+T^"_|FtT:`+[*\qZRp%vhhhY^KZ]);T_9i0Pvq戶rV*aE3<_:Wm{~<IRAJd #VIMq^/%i;#$_K a9]%9F>3!V<t1|o!W 5o")0@ޕћǬZP$KYB!TT-MW/ɗ3WɕQ!G9]cE+-gXUZQA=AM>Qs+fIdP3{IrΩբ}O|~L8.gW}<38 JΓ<ݿʕ!,ɸ @wj,wig'-rqfK0I;7UGѯ+ߧM^)g\m6KUx9drMNh0a=J`|J%xii{Ȥ|~G?-~L#|~<,*ӶȌ}Ja%\-\$7W4"+"y׹7*L‹?һvSO1pvo# |J/'śQW,˼vڄ_ErEN'-;N&ؖ7hrhrbJ3/c~:^m!qҥIHNn[X05k z{!}[NE5/mҦ9+LZ `zYZ.aڵݺeNksHt%!{kOujU:jTdS//Jʄ|/^uVQ*>ْfWr+PG¢"g&up>$./zSr.Ie+-m kUH^~ocU(|~! ,%}]l3$]?e Oq?͡ҫ驗 Eʗh5UOw?wzTrJȨ?Yߣ>"=z+ߠ'^+?:&`]y Ypqp)5K- "U~tTY .4p ҾFzERZ7r|xIuki3hY!/>O?(뭦^eK_"U_#?cOԦE<6<z٠sJߠvoPu%e0yy_?ѧ^?QKL׿N}t; w@%ݠ# zEa% NtKW[Zz-,ZaVZv.iʗd~v%Y [2T8?*Wu]c9ty4v`|kUz_o};d񍯫lHwЛoI+]pP,e\ ae7քUZ" t+Fvtž~V엊j Qջ7h^b ֞U$|TƵldΚYu؃* s,Dw3IB 2"zz÷{?6~zc#:—{Ez]wȍ+Uꦒ|wt~bBO僃 $J*_Z bADc JUC09DFR>5z͇t9:K˿eJFo~!k#?BPi?օFK֮`$`Xܡ®.oJ{X8"#>!{>Dx{ѣzx }t7ZnB+vVx[)wѳCD[> yΫ~Z|٪~nBeH:]c, |^S$(Ds3A&̐957/N;'Lv@d䕼 =@G<7&}=}dL_u'egCvwqsk>jQ b!ZrVg-i\4`9}we, ʹkfE:|Z-!ر;=ҳQUisseTqMf8HEQ& '$*2ٞK\Z`B_Kϫgo.͜U''4Ris >́L:pIE$:ʌ)6!3ex9qu?H7ԫKBzR~y4;;Kd.uwe@Z#1&c\6rnP`sZ"/oqLn{naf3SJ* lm)I'eRI']A|+c<~ >F: o|'oO>ը2eXŰS 4W̗mQQwR_ g$nfv,b|6AKw v[U6wUŷ?_o&pԘ[#]>}ڒ{+%X__ :F@\N?#>*%]M~wk>>ϧ{~ǩYBUIA 2";~ե䩧ҩZ!TxE UKSdḭ2?+8\B*L_v2 L+Oqh5%抭AwhkQf@h9r:߰ȑZ9\vϯ_u`Iγ9.LJ/G9}N.Z}>RoXWU*(| r$@Aw.rDe봼0KM Ht ޖhvz3@&KOKe^fS #H6VQZ:x?Wex# ?_Ng? x:mIZGJVKyKUҽ;'cVl[T.wV$OuY69++h?nP :9سL|~y>_p&9X}@ HC 7[ `c ͖WE1%\,=n4VmUWEX%熺wrn+6W#"Ljp|Te'eqc oXUv"ܯ_rWz[V"r~mϿ~:a-o@܎|.Q`m{ o3␪% %:''W V)qjFc2atW-cnQѹX\Ɍ!Ò{|]jcez˲(1$\8(1 ~B,rt?'|p -"027W[~-"p!C )YT[8"0qD`L,!5D+d /xdg"s~SbC ǫ&ר6TZ_'\հSe2pRi$T\.e&0@ ǪTMo,LB>|CEaO~~8V ix!ӴoaٷɌm3_zח3d{^9҅I#;yxm\rt/][>_o]Tkbw^$QPD9DוZr-H(?7> 8OO<];MF|@ ǨFD3z{ΖS$+WJWǕ0uVe1@!1|ԑc.oےEEdxEr ^wݒbʗ|+A]$/b%(AKw v#4ڒ=ϛR4\nCe~$=_mI\]>y~Y@ѡ "89XU JpX ]v,!+^엞J5Ò|8ʿv@t.W:-+**TQ;@N݃Z쓿/]Z~ HtoLIA/Fv\/nX L)r:\2??IKx6[o g8>CEfOY~=t}a%^\K𤤻~ bt-78|'ez߿AΖX4uvMMZj å2v]62pF?󝄀x, Rك@M WڤMYJ$/̪^iE|\?*atMиozҴOa!P]nqE hhtN"plf%OYޟ/4R?\"?|G?sn8>y\絎闞VuN߳\z|%; qmZ=c"|}ۍSԶ^OUd>5ݕ/k|=2|oHw2i1/fq |߿7ݻwOYutMu2H(?^h\=d\+VQwmXa!$v#Q[<_8^^ŋU]֭[zOo.]<l+@dTEٽB #7I"0-i5}A%s" )xjˢaO{@&L :X5:ЛiwZ ` IC*.Ѕe]S= q Ik>x@.j~vwW&<2q{ KYu_aUqYL3)ɨ4mF6QwK÷sÅ+2v$[cɶ\y`Zd[v=py0J8i*%S,Q 5@;*HM閵I}pY*\)\Iygv/?Φ]t{bg8er%orJc,`5ΐ1-rKEɣЊqA;±Kz5je$b^y*Zn--qj!ߦӔ۽ʣZ[F j%a=3ʱC%}PxhV*.ݘR51#8^B#cd[D|JE",!+/KO%M;:(E+-)4:M8nI9ˡ->@$-0Qn;peU",ʯؑjlPt8$߿RvG*(xZGht#rH8t[ަ~Ny2ccaCYޮ"ڎwƺHJ`V<=wy𐦳U$ ϖM&---➰VYz0=2qnz3ٽ{ҥKz $*3>[qtMBJ4@Y=4DޢY]<>9-d MTl xdnLҥ+IU/}2tsX#*oɩqECư<2Mx8u^y6/[$8-IVݣ>j5^iF43#IK5{>UBCײ',IZǀKOkymiC%-"&y ǨE' ]yLl㒥r{f/򴾿rȵdtKZ*Tܹbngp|,RY,3~|mSk.Qv۳zF,/vXud~ؘk7Y}Y㦺Fus51u˦;x18&5& J6s`u ǡAU!0z_/d"gZDNppz",ð q1\][ 6ѮYz`b!C 062;Ckʿ~mDsFsO/d. ||~'5Ԥ뛴_ӻUz_Q8L2|À0e1R!d(-$`t'u})SX&qL;` cU-8R2($FӴo۷Ɍm3_OTXڻdaZ>Dl;S؅JRn^Rxo<':ﯷ4| 8FUV DkViJ3p*\iWF@wq rA/|!/cr7VٕnErKEI/R٘ #k޴R2vފ$I9+gmEwKY4|L"p|jtHt2$$%N9XUtiQ qZg%> K+qY\, wKq[\9}dd\EPE9[!+'iQJN׭SV@Oi S&8f5YnY .NiH@vYZZMg2ҕ/5?t$F,T*"+)$ߴ2D^vGbL`#O AnNuΣ-OF/-!|H״ ֊c}S9h}jT^hfÓ)~JSE~|jY\ɓq \=u H\T>U6" K~7ɋݽ CA?ZokVz]x7]䯷/_781.S+|770|VO!גmfXpю& cS*Ku/=%HEPczaeoByv%~}.eۍrQud܄THٕJ˦$Eۭ-GZzǚ^e| /8%2sssM}6ݼySo z%895'L+wEUuۥK ^n<%:妽'8l D0F&n{58\:EdڮYIp6ɿDN/tS 2nojҏ.duqfdYZh@OD]MگcH*G^U18YE*Tϐ8fY//Ӳ^ԤY Sh,Lc0 ”`@oNi,,'!UѴ!g6M~{'&3JΘ~>f ' ݣZ]8obǴv{)!bkt…Ʋ֧z>JQJ:/kΖl$ G!UASb8[ar\xe+\t%* [YTTexO(%گ1 HE7\b$?@zD!;}e UWiwwȍ;81fc1G5lnY[40H@(YCV<> *,LL/Zt\+%|| Ckwn܍WiuCoK Bd†Zv֓sV >o-p;b87ء TY ҶF(nKKZRNwR-tM2iiiwoj%>ݳڻNB.+::4: |] x@QKnvIe7h~jE],ܡFx*P57OtG*lp:$Y!yʲQH*C[ڏGU^{\kw|Y}W_T8ݲsTכݓta*K9Uc=&bN "S/b!KoOe\67hn 4ùF3Qum9r;66h\E:ݲ4 pܧ4Dȵ,Z8@ҽ1 S\Y"눥Uz}W9]ƚ @dIe`JG9Zhzu݃5ZQE$ ٥\ S K9DAN1UQSzUF*^WYE(tW.@B-åtK Us%y=oc yU.f&2"IUg|8i|kei:xk5ڗ .S~y󗉪{~lS0 L1:مlvu4 ȷM^lvk\Fr8FYZ g9zB#:-~DXe9>D34'DO>  enVNNn%]ud*4Dissh:]_^חih4 8@#;nU&---֒7(KFOY qЂ|\?Gz=K'/S@[~J%}dfFwXdqd!Q%>UOUBa5@ (K4sXMM0{;X]ou`Ჴ#!גƫ%58ĵ3jzU٦MY'qz}Xf#C||q3tÓ .e缥˫nx >X_pg78TxZ6O|_%} p:`fu)ۦȺEܖ|r=_UJm;!w”|_( o)f!Kϗߟl|nnmc$0j@$~nE{սM*V$pu71^b^'}>!G\}/m~UM%+aeֱ 2 b)E\p%ϕ 2|م/KCM~` u<]uEQ_Zǯ/=YxO9*M*E9j{B|o]忉*RA (K<]9jƛQv!Sk2ę+kp[q6M)nS@ӻtE- ϖ|MZZZ%^.Us7/>t?O(~ptDxfi!L,̼ZD٬N2\Cq՗GC(S^r٥r0AnKV2#QQ孻7餸/AfY盲GA rV$RQVUݲ78 S~Jj%]u80Ѣ[H71!}g FKvj﷝㨉pȱE$/~05=uB"?U{*oءk4O[\ R)֐ ) Ns`Jh5&4 uwki;破CBG0uBۯ{-AY,`V Hv|-';W`j̯nae64/T]UXWiϑnT[Y:~yKW jI226E{ =y^#h"Hd{ys|!]@io룧}Y6M|Ro+ն]OMZ__R{pVuI_ߤ~M?5[*2==9MȹǏz@\ ]tukU:RvVjS dp2 U8:tPgٹ/~^YZPegUrБ]s2K<峼WvN+&3 /wdazxLΓ>?Lg+_tm[5d=6 }o#>L̹0XK9X EpUkD3!Mg-s;]#hJ ܒKEU@fIw ^wo5O {|oP/T*|1HVA|0I @MCv:(Oץ#R-z.jij)R8mչҝ)6\*ԁG铥* 8T GKu~5^F5NN-;d [`lR<~ϷV(H2p Rۧ*ei0K2&m@mH")K@dID2>+C\&,0y34C5Ep@aMgP'TlTǖ4A@q94Q:)>F 5 .4Yonq!KTՒzcVVvN#⊫Oczc + 49F-:O~%rDW(}0l"jSOi6|#W>LCdJ^4d}3~l~.Ǖ){yY9k:YT_}LWuf$Qǵ|cno9K*:?LC|C%UK|={~I1"G130j F7fyƈYWڶ.B`!jfE'L8"0qD`!85|3iSslD3LZu_MVN뱉 #O 2ST㣞V|Z_Ù,ega|d:e&sc@hi9@E)df2Ŵ}l' ӣc"g>\>/$z9_οf!J7:lۡo9q0v s}%DF* 7޵I)JP4Csa W"5߿_o&w^ʕ+z۷͛zUN%|Vi-zmJ X/Rث)|o,ݏL',ݶ]3y=*@[QHT.;-精̿0W^kx ܺuKҥK"rMoHF5pS 3DxIVB""^䨲Dnҭ*AnqF-mݓCCU[ΕA6 8+%DXG5BKa$t19B6yQSTKj}1_Hi6I^C\TǨZpc<$hWb\BAA (|Jc֋NGאeihԎ"2ki[Hb-"CQ]ڢFwQA*if#'81Ⱥ:|պ.˳ȕQ`@DR [$WrjQ6(4^y۲ġ%C@ 5rpQ-'"_ c@<|\ 95Z\\k r*#"3ϫ7g齽0G-@䘼)oy; {o'h gJYϯ*ͩ1 9& чӻߞ!{#*DW ,wsc ނ?-}m"%K-yphѭ>~NX&ԛޔxdRE?!O?E^߬W?MܓzFcOI\:}S>-̣1#< :)J4W9n<xٽ[ z ;Yڐt^68iNp>W zFv nOҝfxѪ5UZiD3U's.lF1gmqfe(]>oJ~R¸ժjuZ2QaMMbiI}g4 3@EGe'!T5_g<=oJw|;n;lF(}+u?&k&}u?!}u ݲ8h@=+UhQMg)+{"Q+hIgcJBjUKmh~gG=ʪ?h \UUCZ<|__ f>\:li9?C==:LX4Vz}C.h__<9S&TNsD 22~Iߙnfփx&έx2ujKG?Ent񹕊)辤VeLx>e>{.!޽jL#w-C?4׹'.s37O~SPeP!HDY+:"GJ"+qXH}nW0%XkFETPsK+ 7o;a>u/Vn;Rcn'Ӏ+\ tcH|jrURwnG[;m m{]rTEUjlƐ Bd-y9>gi_8k}ԝ%M)#o^#J|<<ȡ2V4@s)AmF|}>' c#'OK)Z蝍 uvR-1kYk W.w witZ7̯j6jq{UEh;ڍ7MƈAհ)W!ʵXzWR.xtWt*.CEeeK}3&?0rȒ.6W I7w\ g8|}rd2Bɿf!J7:lۡoXaN1&~f& jڍbsT,K&P4'G9G.ZI-:Zs4',D[=xHEτ-#+vÊ -%c{o<,YZFjem[lZv&U-x*븶Q kw:Om6KUI:#QvWʯIK>l28=c]!)6!9&orev]ouRuNLRw4po#L -+-ܲ@'T#Acky_I(~0|N1~&?X?gh5ZƤ>jQnVe=EMڔ7g9>cU7 5h>copRdכݻG.][pȿW\[n߾M7o[;^V\Tny3q:]! :J&|kDeOcw^> xW.^n{zb@ζ34Thz[ݻە8R?1Ҵ`x v4c D@$lE^T$uݳWT~XNX`&`@j97t'"_&C L8"0qDN ypFM_8p%j f2|?٢'sx lg`HD`j}5:7&2lMNt^diX}4rYQ #2\T.ɾbx*$D`j~gջZTi)eZg M&S}ӎs(be39唩IÄ0NhX-St]jI$M儆M.5U$lkMncʺx&$$1@37rv&r]ѥGjsZ||XEi}rZ G{,</~{E?bݖ"ĻuUq';=yS;"rMoU_R5K $ (K_*N*\!w' ?ŭlӒRQ BmKغ\4Z+ TE-9WZJ yr\k^ M~*\/nUE|.@-o-EK݃ <ڷE9j D~y#pHA ]~nN!SIw*rR YaM~t[Ry|>/$݌t圫at,G&#?$U8>)n/r p-L;IpGK %ւ(6MD*jE瓣#LTLB}N|: B .Nׯ_YnJ@N۞2]*׶ nP~u}HwEP&Tpg6y\qc!)L"05f ի'9 P>Tk@_J(~0|  ye=OƬ>eT7 <L{^cPbHw!iQ0\[|9yL:|}jṾ>[Eoaf[~}}o,_?k_W}>ÑNI}z_\bF,:3p 19D6VhȺ:ާeEk:eг]C\ R55+1^-X*Ε7@$P|JNn ӯQzt Y[K?% ǐp4mo|&jLc;ŁJ8֬cqN2D=GO 54w)OR3nfTW$36UFV#ZAAH{7dMհ#Lޚu|ay!y&#Z[@xm?&=i 'Z^#kK#k[L+Ǘ/+-:*{aL{N"O-}Sۉ^{>`D;T?;TEz~vORI+/byKa՝"WTG٠xmˢߖj eOc7i/i@d2D~&CN~{?v TN<_/\ ,ik$j)PЊ+;EG.e֢א%jyh;>"7Y C+^Q/-8/'_ʏ 6#"c1ѧNዏ{.cza>z)W=sH!y* tShxsx@{CAq VWw|dҝ5 }@ϵ 빻7҈ztY~;rna#EEe0Ow+KtNԝ*N8"cٯ؛/_ڛo?^ůu.Lw8t,WZPG5˼;;ϕغJd U:H Vih;/%*-|ܰO 1O_tw~ zDst&LeE݋nLmݳIEv2Q6t D2+Gο[C xp\ɻߖ{ܓ}')Q~St:BˑtRݳuDEVz?X+E#xLRzi;F) ]>nԪAՊP".ݘJ<p넣9+ _kz'sƼ6' 9H`7>~ZpOw=El![Fjw_;T*f֘h71",ʸ F)nWx~5D_r-E\`H;zUդޘ0&GWu; 3@E1 {ίw> [~S'Trbɛ8p֚ )05|3Y9t=i&mV@*)寓6E1 8l5M|5q<&o.>I?g{Oxj,ARwLL]mk5>Jϛs0`Fc"g>\>gi_-}ݢf9})^G@mz!s(CDhf愴~X 嚧̸mqŷ>ln9dɌܖC[|d^5g{sV#JEU nț__ puPoKs~/:UVQp4m'[CEfOY~=td ȍw~Bra* Ww(H8ڒq%Y] ȟL&llzSN%ju :f2).+Z9 <2MtRtv@6]LTT=+.NG@빬o;4txupQK5|g|38&9X==ӎpt]i9@dyaF>o +xn99lsEfWU}]ZںE-(msePF` \+%DXG5BEIaO$/*|op*>'@i墄mTb?I7ѷf/MQbs6yQsTKj}N•[sE4M?r+Qǵ 1Pc<$hWQ4b\BWۃ P.ڕHI?J!vk釹?>[ueyS뫱5FFzg.X@/οI7@YG1peWZHF@#b.TG0hN\uP *W.#s-PD茪iL8O5# o)c_1 6%c:8Pc({?8I0@j9:~?Q#"0qD`!85u2!L'[Ei|~y.G>$5"Yo赣[Vo.]<l+FhŤJ*ղqSHkF۰["p``r`\Z 7Hg[`"L4*ꀶ27[ſ(o&U@X@ d Ypf_@$+KNa5Wt3mÇ @wl>aDO5 ԷD݉9n;A K #ket,#K$_ʾD茪iL@ 2!2.^^'΋'J t,Y5HAp#u۱ɯQ6(ȜNZX~[1=$D& pI*2v<hgqvtҙ3J47ANRUʯ[!1B 2-!4"qYjb[Kԯ+_9zxZy:QAEwo9X[齏ЭJ̍vVeg~}u"RV"co i7XڙWh5Zr-Wi.}+׈5IPv#4_y :xǎDvvtCJN\Bj#XiPFeU_WJgWUI [` lq@ 2FI!VhWG2dJ7 j3{ Bw-ct{/T ps3Dsk8ӣv%d>) 2@d<|. ZE ޠ/;ԷTJ;t`yCB> &^'֊ W{K,GS4z5 8hZQJ$ ٥U-, VWzc"v5o~s"S+seRcWѯAń>"Q&DƤWkH֬TcE X 58+һ7'.Jc7:(%6| UjԦ:2$Bv E$dDy-8kOz)߯/ҕk.;`E)ܥƭ˜*p9wug_/LvBcaXuzx$uOEP4zS:&iH@dLdž*uݰ,Irlym]TZ}mIBlLį׭Iתptqm&*O5eZ/PGjġHח) ˔G!Md>omFݟc"g>\>yAyew|N"cZC~DjҾ_s[E$=0}J7v hʻ (@f4=ȵ@wqr (݂EWUH phfAe-B*VU=\$e*q2X2]ܢQ[UpsiTv b&t2e܅ W]1iRvq ᚴʷ-qYXz+[~-N! -e_X~_pϗ/+0-ǏB 0no^; ܺuKovҥ$HJV6:PjTzkӞ4 T/a#p̫Uqb([ x".oFA!RW5uEXo )Vщ,<-y$2Ȁru*V>"wHL7+G~,a(Cbz(zo ?ψʟ"c{O8-"C@EXq/ֺS";N!l 츟/ 0@{~_}w.;z#sgo{=kUjd6N]iJ*]|d2N I^OrJlJ` M29Go}Mo@2d67i}}KmSVKeO5ysTLdW+G^[B cTt8LU˴5lzrT$0"0F F~3zW7,TJ2gN)&3 /f{OGD}<$+#238?d>_yS- $[zC'7хo/瀫1\fGK\:8հ9dze~X暹adq`R r8ݰ|^(QEJw\P^׭9[b5P)f ^o^2"0[VZ:չrX}Z0–JVj7nUr^Rw[ǐ$1r=ZJ:!xeۛy[AsyuykT!ݝE$A9˸ ?J%{͋AXW[֛pNtZsJ<]6&F1"0FU5&/j jIo'ee[V8>DR8he$61긶5BwRxݟX{aQ<I%ޖr 7I[T`fm+nccfWr[D2sssdkpV]rEu}6ݼySo zmZq;cS+oJNk7(!|z7H]֭[zK. Ip6ɿg>.GjB۞G. nY^v-%ITWhf&lDݖl+95{TAhҷeщ rbo Lj@:DNDWU_e~~_lD;zW;sg~g~^ kѯʯoo /@'>wjkFz9S-d o?8&!#PȜ,zρ' )_ t]//[[zW;+t…沲@xIu4SVWzD&&lμ>m*e|f?"gƂp

    piIU͞JwAKwR/ioo-MnQ'3@dȔoM_7}7 _ݿwu]?l3?չ\YrH١ $-$EUt+0:H-ޢ"W0i/P^a-+9VioJ{\n\"lk~(G9]E+m !K&XH[uU7XLVQu{ƊFXr@%Ϩd9UΣtejϺ&lTB,r.c% TҶ:ޒlV3K0??,s &?0݊ρ?qN~u''5kFmF??yꩧT>1ZYYiAADPHRU]?ͫp@$v7kcM Rۧ=t}y__ڣnOxbbUn&~oaQ^|F^0$q8%sUDZpԌa y]R?sIx, z`H ) -!nݢov}6}|Z峟,}gE *]>-mܡFo T T!.ݘ֐c]VW!J-IǵKql65wѤ7K3^5^"b0)O?u{ܲp9&O4}򓟤$h+bJ&8}??LO?:_;NOqQ%^V:ެs!W´EpY]Z Xt{tFHfڵlB aRq-ys@gŝBTq!#5Yolq"ݲKpm8ufC)54S ty\_U*! Dgsei}ůI#\C塗0$_W { HnlmgHw5i1ɋ`$߿w%Aԗ.][0,WWURʛѓO>?~Lj^yofZ\\9L[qIZn޼DJf+X$y "+|ut2LT "㤦ۛ{T,ykMP+ÁS'b[T.;\Y'YI20=ZyN3,wzjKQL(Z)]bK[e*G6,roh<=-u! FN[j1q?ЏO?S D3}Ȱ+n{4w0v D0Fଈf&XF$;8U!W,:qƝ?D&F(axm#pzM`u$DN6 VS !ΨI.63e2&yMXd^dz_u, \晷UѫUI^PtNt^6K͙ad2f0...UrFF*et;o|^_Ù,ee:si9wq0%`1\*6(/P"Oz^)S$xg۹/ց^YZPeg!1hvvf eXUDZ>IkdwA!9yHoޔFy^T. *((|yoG~|X 魭:#1"m\[aB1GH[EHTDH]ɰN#%ov\ZR}s@'hnUuَoTtpR=N&"p|fghjriIS+˗^Id9`HkUT`_v9R!W]XM~`-Nyu e6sdErHIC-irr~H˄l/ݽ'rHouuUx 0iY/!U5|3 uRr_.׬*y@nT? @,KsҪы}ԩ,.y]#mHz>9[2=H]` A(A"k6K eZda5"fu1r~鏷@- r˺?|'+T<#%erE(ȹGU1sYo.U-k}s<4!V"߳2p> qOp_~їI0r,$5mXR6W r4-'s"ښ^k BBby7iFjI_[z8Cedz*6v,s&E~ eӵ U։c' \Rritz‹Gؖ1jlA~ F|EG&JoOb#t D2sssM}6ݼySo zw&*;ɻvC˜w0x IZD!RuҥKh81; NQD +k[8 @`d Әe2D`Y02 8Ҿ5 L^ Lܹ'i 0Y 0^>W&cD`!Su{ _8mU5(CUIENDB`DataLab-1.0.2/doc/images/shots/s_add_metadata.png000066400000000000000000000314341511411446000215760ustar00rootroot00000000000000PNG  IHDR.r pHYs+ IDATxl[/M׉fw Juµݐ6Zdo7ŵFVE g r20<"` Z\ܙ hӧz;ɸIN,yHQ?Jz9Cu@uX"bD@1QP((F#Eň"bD@1؂Hg6{7B Wf`6H]UpXN 2 \ٕ+W4kRԄ21 E{EmX5ؘ`WMM~obb*S].NԚ"e+;VZDBBV"\|%߬!7uUEN,ZU UeP^ZyaB-ֳ*-wrpթ/]ͺJNKf7Sy5Q{";QMM@gQ<9u]g]SCuӸwT417 FOD4:SG3&R7D oPbqe$;t}< X=4 !wU,VL*Q՘Zͮ5{m3d,J#gqF;MݨYzd<#Y[Mt}&,Ã7RrnFThu6.iS20q'!I'c2USj ߈:4/usm2hͿ!CiM$?qT\^Oe®^ttuu^XW%esUJUnLuk͞owk8Yo3 \2FFDne LH}mUQR Ĝ*v^ͨX5-qH0{\\I;'f;L3zOd{ncɎށd,~#z _Yz-躮 jW˗n5Qsժhmhj"_ǃ))6Ҧ&"R=T[oZw@NH; XyT%"_h*XV µPD"Xʼn,W"y ,%kpHUZYRSՌUJo4hEhB|D$w725;J)oH<Б;UoȲIyw{$4/g5dYБ`4rzZU -WCBv4d5{wKP(wrsy$Ή!wCc)xլ}`\\DM3e9fL=Tjv5nP[<:1s@V3Aˊ\.W cv+(F#Eň"bD@1QP((F#Eň"bD@G%,]͚+ozqʷ)*Lj,Ib͵&B%KZ!V]_[p)4GկV/".NIP u]`S,FΊU[B4ט\EV8t]g]]/#Ь=tqUⵖNףjVVj^Tט6jTZf\hDb2**,LNTT` P xt׊b-|HXʶf۹՟ǎ(@ \4oHA^Y0{V2KvEXw{KzY ;CPֆ.[`}Tk-s`y/,ge۹ .cu֥bgYZ^G˥iUP}WqB]?Z-acE>2}5ET>07_ꈮ뺮 L 7"`40(cufq^wT<-z\MDDԯd\8jɑ`4Ǣ#on7!MMxȍtlocfex*Y?dY 7ϸ7ubBoT~τ5A͞Sܛ%o%H~GW0L#;UjeBN%X4ﳻ,Wb;XFVyPk|~h o9vK,=jC%+!VhgYQƘJ?t#[ ;+buH/Yu,/""]Cg{GhͿ!RSv E#,"Eޏtuh$cWK+ʈ^ &;;m_0$ THk")o=zܒ- ށ M{qFp%odj&-]ށXPGye%kThFu 5vT%ϧ @dPdNTv卬biu:_PN5Ii5-?K5Uek5wkylz1oa1LwO_ 0wNRf"Ή +<^ɢ%`4O(CR7dvw@2~b]+5\xckͣa`SvcɁ^<7_Ưt;JѡXF*rZ5_U Z#sAň"Ǜۓ?K"߭Ҧ&SZɔ2k(}VK|@ Y; 'N$zX"mj"5\}:3jPD1j%ӿjQ,JYn*T; Um67Zv_ϮuẸ6>Tw,HBϻH Uђ:Vo;rANꮎcѮޯ7^7q^:??Yb2u֮޾:5 ]#Wv/EFfɀy:\.TprS.xnRn{L[0G[7;UP푄&;TJZ9103k `|).dlVǚ}W,9rجr+i{h8żmH%cŲJ8J4wY{Qx,ZRpNZP!s]P~ۺ2~q]s3pj~@-C>9}Z]5:5P>Ŗ"P*u}~sZ?(c-281t`ƽChSR>X1WjlO %8exhVcSPr}cQ<c@̆-6lIбeW=<|cUϲ iʵ-So{Cǽ@C=ttԻTd?ltquhÝջ`Јxkkq;tllLfiʵ^A2>X|wfVulpXhqWX!QP((F#Eň"bD@1QP((F#Eň"bD@1QPl(q?lVuC`Znu< [Q~֭[Gn?Kˬ tan~YŧEA*Cu`ވ"b*HMRz{4МQw\xx媕 3 u*!x.6 '"o-EN$Y+J t21H԰w` 7Y]&#ENъoPIÉ lPAnБjvңט<%nGߏvw8/t`jhwq`쵤s̕n4oLzt_ЎBK*lN-Գ#tƎd^#Sq-r">kN:SGt]u}f`b0{h,CnEM};|*.u{a_UU~ 崈? !UKH< rY;?0 0Ͻo4-}gHĤGÏ\}0 øk{LZ%r9|03}͹.}bxu4]oBFvnӇ=[ygd -h ` )q--h);k#]&ɮ𘯼֊2WC黉>_0$ [kt]9Hǎ#ק="iK굿V#G+ݽۛ{aĒywxJ#o5.-tC. fIWxF/)K-)U_]p2Px¢%`4Ǣm{Qxw61] Vs.MX\6Dk-"MM$rM)ePnq #Z@2|Ayw^:y`\0. S3v?Xe\N^oP1VmX"L8(=t$ \#Nr ]fܤPU5T`;lh{iVOߙ#W:J#<+Iߙ ;C;L^0}c1}KW<ؗɽ"+CumXZ?(ck>077#ت*=ڽOު@p8 hGz~U;O԰s+d1oGs0hqW:f #+ܯ~;1cd%d2E2FE8dbLmjBzKݤe{Q0}g\}u4-"ʅ3}e.#9<=}س4;1pd aȺ~QhTKJ \ *&R7D$z=nq]MSuNPgYrf`bZ"1fVBqjCcᮮ_v&Su}<=aЎsi3v[=諯QS:\L+O>kv^zѴLy!ׁ-"2y`G.soMKߙ#:1)}o?wvӾfYLRDD5`31Pv.kd)kH65a8F&D;y/_L&ɤSĕߌf2L?ad_0N}"R D%yI̒ 3 |AT>+Ԝ_uՎ0yO2ΔwvU;E$}VUymocF[#W:vsxfP0{𥳐b;c%fL6;1 1_o#kd3YhN2y<L!|X+osW`'|d:>5wN ̘ps}WxF/)Iʅ ;C'B\ՎynV֍]g_F\Z.],eώ-ƽ{Ffż:gl6kdoM*ͧXe`an_w80ϟmj"QZ.Mw{LXk5-KmVW™3vN'Y<~'v̼ {rnJRGJ°xٗrH:ɟ{w01Ө0@#+٬adu_jViy忪ҰEιx;].5/p2P672T$r2~qmY{H00g-^&+rtq`ϙW}3vܹۗۜr}қU{f {y;<_raz)V?#e3g~~߼d: 7:yg KKK-VZ?(c>>77NpJTP߯M^Z }O<1Y?_oFa"9|?[צ/ͻAўD@|a^9%RZ]ߑ hq &t_:|kˎn˽r #+F!sss~v?d-{EK+,OhvvFsG㫓7wFVĶ':.z;%$I;#Cu6l}W&}}cћp~_Qy`ٲeK/t޽^жmnݺt:~F-%ܾ}ۏ>k7o޹sgy~7vI9-[<ExQP((F#E޽{Ν;lqQ@S֭[uֆc.(sΟٟ=ֽ{~_6{.͒C|A;nZQP((FE _&#r,IDDң=ΜtnJUyiEZ ȸ3."ŋCeX`x d2^YsҥÞejG?ϫQ45!_OȈÒ*%i? L"b**Gҹs,.hql%LXHz4+/w8=G:IWOq:I)W99X }K'=qM$I<9u]'2IDAT 'f $Sf)=CG\*}u}VkħEsU Z΋?SLܵd*o\yd2)_ѴLv|&dR'w-BmذW_\H?񫯾̫*:WLɮ!wL%""\c!hDfws8H(J4 / ZL&|β@u{}5.I_Z]V͛7ҨC7oo=țj;N%z~UWxF/(^3K躮ǖш*}c_iU5r+Khy4j:N pg1P&OEDDg=w  哨d. Z$D|#L+Y-LzJ_;WtΝM6/v/v""bD@1Qfvv^廏]Z6(ұnStV=%?}^酛o0̷E6{vwg'ocIvGh DK^jd9Eoݯ̍k{7_X“o{mh?xn;qvVrhOiJlfwE9oʥTHۓOk7eTM˫6 ǎ/_1Ϟ=m$-U\4PfO_v <6gawݧx7z*fzj5*5E"bͯackswo~gg蹃rK2{>}d.~;d1ȵSG'ps{ybxly e^禧k/{>QJnwkN?_r}nVDqW}G =; /-twhEkw2m+r|hѣ"kޜ~lMMyp oϬH[ ?:{MdV'spS{䍛ச-U݈\vwKmsWJ 7?v +i?xaO- `5"LұWd駊JVO [EfϾ5]U$sVgWq+?jhXrKDl`8TK(%Cy.뀨 j9zw0*BEl9űpvv0*bE9 s4+t5GpP(:w%?\%C]P+z>}6a8* C-Vpue8Ԋp8T@4;'>Cmd CVzE"p?\7Pi8TA(+Cz1*hG[="b8T @CZlY:r4CV[mGfإ=S{=tk7lsMR쑳o\:ֽ n Z :fp9jC5wá+Q$" <[Tͱu9Cm;".ЉBC5@t{sop{8Ԋݱ,pٟ{">Cq C5ZDPs3-1jbwX!Há̔p4B0O `8TáŽV~`+,!CD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#EGU7-G&f 6zE]]u]@xqLk|. -G"|'IMfYd&NJ4`vu: _.deI_0F#Nz=\f}"]:7{ 8%E%݈ܽSjb+v{SwܽX(u-'nqH,9XEp2*}A,ʑ.UIGb#dG/`q躮 j=C[ܝ;w6mT -#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((F#Eň"bD@1QP((vpn~5ЎִaÆ^{>SXlٲL&SCi:@ Eň"bD@1"l؝>ٽ,Oڶ8딙}_|ͮU޴i֭[ׯ2D3Y7?u?}[]7[3Wkܭ[l۶-.޹s֭[>4_\_1"1W/aOϾIhrcG*0\0"yW$pןYXLzbrZZDvu]M}ЙJ_*?c\H/iyx=N'}s K"èzX.U:,-3r`Rrs8z3}d}祿QLI_LƯXHҝi%./CVx_JIOeg.K?GV Ov:55zEѓ^<K]'Sѥnxáh9f[P>'X,>oX tň"-g˃Uy{:[.W`%FDğ|itV,kaÆ۷o/g{~i&;%yl@9o~ڸn_kZ~/;:w~Ojٶmۭ[N? ~-"ܾ}ۏ><~67b۲P[t>_>~mKosss7o޼s玱WtnٲkB[=_JG#Eň"bD@1QP((F#u$s4_+޽{]teU濚oT `ʗlA0b`H-+˶v.5a`əڮ,.ٔnKw\ /._]lI%9UPiRybҪX;&ŶS^?8cg^O/Ձ!+t7^?%\򡤘G YeY8&E"ʣh+Hɩ_>I}տ>;_yC>oki"'nw~oCMMݎ^k>V=v ŤNtCȯvukqڶ=+I뾽ҲtC thp"/NKT1u[g0)UnnƗk䊫{צ%W.vZ:?cO~w-;j<31 ?!G!*'82Or  Jj%" 9M!)q%9śX &g}!n];v^>wduDtm{-FT| %˙pgvQOmxzmi<_Yid&־m_>ѡdžN0#BDbVcѰ;>VZm'R۔,`mZ4IuaG~sVdomBDs3W~ :@D%T½U4LW2awv̙yU@L?77 | "pDDtv Wn }tAB G\..Dn_= E[N{"jGB~Qҵ:fƱ;wNyRϳ4RxR#(6FPlA0b` Ŗ:+#SWO.ʷ77nz?'<Px-K7k JxVƢtMO,Vu0gn'&bWC*M#N*J\\C%˲orT .mc&iu9JɢYǨL*%t(B{>nFJyLͫ7;'jzE~ 1XdJ'ɬ;<$h۟ϱ3vã~OaOecMVϤr9Z\^xayz |ϵó>'iwR,D|SIHW-]doASbfBF7Hh&)LT " q7H^Ca(L!qN`Mk]Yrzmvcg \\H9۝{ҍa|+[:]t-)qM QúR)]f{{jkmkiSkkKk[K{[K{Mao'f"HȐ ~~#BŘ >!  #(6FPlA0b`j=kx P?KDOo;yzFu=beCCInʧoƓ:& L6hv6744GDm;;1MZ5>7A.Ыi[ԉ/O4瑄*֋g_o8n.z K x$a^lSS-|$OƪO`>+hg)QCQgΥ)]D4dYe6Љ!+ډ'UmѬQХJ]~7Hb;2/ik_&< ZuD~5A˺)9.4S1oKEZD4.cۢb,ɫde&UҾJ34"QBc}acJ--o?Ʒ./}BV=W/%DzHOR!H*meH2I܉ј&]} q>J!nŖ ?+o~ýme $eB& ZIؖjaItm۶K[{{::V϶{ێxm*p'sq,^}KH͎LkjVeq5mm݊A%j F0)[r-s7;<`pСja5#^J{fUUIj6[)eC C`hjC"rd\A;# Ju5 A0b` #(6FPlA"΄ Z(O$xDlB*AUQx(XqTlJW:7;'F Oj78d*u3m+O,!]i<NkY#!S::Vc{{m53͔e$&]I2gNP`%]k!7}c!t-sXrMeŵ^)YǏo;}3?8>":xѝ_y/~q?{ip\z(I&k $ _CŅ'JDWZi)tETbSKt{Hvr>RWSHbG rc6rŜdnؚPl H1ǹѦ,ͅi$k(6FPlA0b` #̋(bs#%mAΗx.Ts Vπ1h&"q"_3|`4LʏPl j""߫>]Uxv-}l9MDD\S=XH%ADzbJ"@br&dYG)7%eYNډQ*Sӄ?IBTNp@$]I2wM.bCH%Ġ_6Ŗ|iZd֭>d&h?i!"ɬr8J6 8%! İ~[sSIɴoTV'L+j6@' ղ%}%# jv)DQ%Lo ф?8$RCa 8p"9hFݮP!JQn"2-YGFy",GH rؐक़Ǖf6Th[zĈ7#˼c|HșS9̕Ġ'& j{!ZrD݄1than`5rVZeY"C4L-]+ãp/^;+*'sf)K?BĘC`l&)YZd.0M[ijU9 ,.N+T<^[;Ecq6| RdݪvUC$ q!WI}jIf`))Ůeڒ91q 9ɪqǍ_7@+𕒹J߭JnW1vl<;]K 5`Za{6Ƅ_Lz3#(6FPlA0b`ϟ?ֹ}nn `4#(6FPlA0b`by]O>lbu۹s-?(6,X~~ufuvjiQdTM X$j۫ڟz}eN.G*˜? ShpuX?HY^ b|ere>|V b-¼}=|C\Ξm9{%mFbKĠM)"d> JTa\a|K1yb`cj̋Vԗv;=)˶o;|kGb`6,rt{!,'kkUn!]!gBey›}F_F#j PXKΨDDM (MFS~"z.B9.׾JDComzéY3\Y^l)9Jz3edɬ;<ϿYa'V PIYR-@@Sv6(QrG']ܮ]]Dֳ[/ND39۵kˇsM3vHywDʺ/T_|PwIh>3[N t˗m'~:+}}:ŖT }Nm&"r}V>>'Ǵ#q,`M߳ޝ܎ _Ŗ zһB44H^>Kk2n̈́:OfSZ̗:q8~|c6" xc[~_BKN͒QkKFb`ds< 0`  #(6FPl`(&’QkHFPlA0b` #(6FPl-)ףoFtUoZ`bӢeY3f7qy3u6!r|1dV& % J1yb2SP,,ҤVJv0k2+9֗Tb:QETOTi$ƕ|FA\y]ʇFX^ Q9MVJ"4i԰CK+9/U$U։*Pmѩij30`VU,0RnաO L"n1i;ddXt}&$'}$h~ТfXתစFXt$vWog Mf>8wzj?P>cĘ6ƓiPUiqKt-6/e*,IeU3V^tluWz}[4$}L£WԺ_xLw4S7g,P]&ZYL._ r5b:53ճőP~L0ړbWH'd9 7`4=#(6FPlA0b` VH 0K4h 3;QS!Wurj)D3[]^w|Lb3Ͻy"UQ\ẹLU&{HtǯU|Q^ >0ϟıXRH1O>ĨI\doY.B\v8qDZϺEk[lnG/0U8UCL(."R<^ubVőT䪜p}֮ؤd0Fbdl7<jUc9X, ZX^J$Bť]!eUXur6,>ʄI Xb&K\đ) ;qgY2R vleUXĘe- wc\ XK,Y,nlNk^lRqw4`ZgH- #(6FPlA0b`dҵVh'JsL6Aŏ4keY_3j1Y}C`Xi$%l*>bCh͊(<yb 6Ṛ_SАlEDStHKgֶʌ765zRGZ$B*} ˲Aw~/ٸ1xҴaqUE&óжw2*}P~a>~ol^Eh."b` #(6FPlA0b` Vx¶ؤsM Zʣ4^[TOv0X{ %CD|Op&')ݦԲ$0$cKl%9O0ɿ(m_ Rc$@s<K4jTJ b'>M r Ѩ .PD##<QTn6IDATD$HlHLh=QIC4F̒vÅCƖu>\°~[ zl0cH( "Cg6>0~XLT"bx d`T&6 D|H!*gYv3c"7]IoB2pd+cvrZͅt-PlA0b` #(6F?:o߾-#lqF0b` #(6FLn'ϵܑy]\{+9[si6boܞOvͦ1~ʶͿ\8c&M#Y+\>P$Hظ5mKw/mH;n"nGD++BKg>hPZn@ju'߽sǣ}BoV..e}C1 '拐R~/%#Yo?O|7;62a<:NGEH:ڪX؋b)e~ 㔯 9C q){u^Kr.Pқp^S:qq!pcڲQ`8~CB& M PɒQ?aWeu{.Ы[7~0+CNd@`d)m!ζk?1)wP`0)G}>0` #(6FPlA0b`_S6qW;s =qg;[짦v7ou=zc_y:Rđc'@\lNz뭷WuXi l%M#O:uܹ~x͞zeYc#'.iSK)n:KG8Q_#'{h{XZ?$Tl??EEV.9r>v g8yCG!&vÉ=9}G|eU:}GH)ړv! 'ѣ='ߣ (HD$瞽<}=Nm{uzC=Ds'NMaHPey"^uizcϜvU=qcG\msJǞǎuc7OGVFʁ- |3iXQϡx4QOzyĞCO 4QϞSgOblC.CD.߽Zv7>,;$Ut$8O~^D >6M>vSE71z<}":x𠡟>r#GNރݻg4s9C“&Zt-Q|uxWږ~*Z61W|_߱<Ŗ)_؈wޑonppFe9РfWةTl\vr[^Wcҋ9*)ĤΜ9s;n~ ou~umwl{{3g4l,Ṛ2"AtȥֈA zw t]}Ger硇oqCyg+oufkQ~vQQX$fĠ+L)Hy\X&ETu:2AWқS<$oD*1h!@=Ll]]]{>s$'~+ٙgfߜ[q{UR,K\q3 i2KG Sq{y'狧'!5|ll:'/9lw-p Y6 OȚ@| %ˣ4XlT*ee/a0j_#I1\EYBtR;;):IRW0gfcn{eZXԧN]G]-s9RKK붽7t$B4/w8\< ~Ņ2B ?!q'qq" +b`ۿlW_xvrni1?1"] /erfڕkvEԮND;wd=R¤ؖoֽy]w1euɨ;S6#(6FPlA0b`.vZ\.ceݮ|cǎPy]~/Ўm/.ͽyD8G߿p6g6/ΎVfG{;t#mDLktY`={Ŷt>m/ߘ_^e߲oζr 3.hr&@Ձ^}Vo#?ۯѹܥ7sy"Z|Krh_p5&F~Fq,55){f޶nۻoonwܲwܱ}W5X.<]6تd!olC$pAz~[gSdYTq~e.*6$t1*Q8r&e%G!l~N#^ݸD:ur;Dv Yq-ـ6o-*I*٭eakJ$kT YTySխvkDlEUtfWV&\Z?3$Х#U#? L &a]Q!UD+J(lqǍмpD}Ck;>/# vu/o'~k}wvvzmOSkӵ̋"IoOZZ=7Em jUrqvy\5 yUʍbǿlv[ 42@`™ V"tZ` Z"; IENDB`DataLab-1.0.2/doc/images/shots/s_app_at_startup.png000066400000000000000000002521361511411446000222400ustar00rootroot00000000000000PNG  IHDR9Nm pHYs+ IDATxy\T?3 [ nD &fvKlZi"1OLS.E##R7 Kդ^zP8T4.J㍄??OoɰsJWxwӽ2M?ds 'yݮnJf,H9w]SUƃo̝'6/ ve=Olt'?Nn|>L('%ߢEt`iH&/+z֍޵&KWfm_?Ykl˗/,F4K2Fz}5ΥkV3hl/WA6fltM2.GQQN鸋lG5^3-2d`g^yj[͢ U/G,r otf8,Jbz覴s<٫"[4Soʲlr]&ٳSYپcϥaLmx0ψ:h(mZHuk,nk> T}V[$?bd'm_`Dΐ::KGo-EfQdlY'[2ܓ뽛>rR9jiuw (6rJ8fQmҎf4(?v7f/9"qRzymEMc?Z6hroRowmQoQ-?D{ls1^2<`g^ʥj{S6 Ƣ2xz;KSfv_/4ikF{$œ]XRsEf^?'ͻ9dY- g?I늽ܫ|ŜbYQ^R\v3Z4#0Ӕkۉi4:5/ӵ5irR&uI4{e1绶 (g7妲1=@zܑ.06.ϰ^Kj4kJ~ {>C=@q@.*Y`^Ƽt܅2`µ ur ҕYy?irs~yE5{y"khr.,]b~%6U r8•;i^RAGusw&wMoK,ZG}I {󮭂9-eS3k(cXw?}ދ>ѩ`;m߆r-ẕэc EbߙzނҝOjE&/pqPƖBA^C(XiZvͳ#qƯN1sx0˼;RY!ؒ)\c]ܼO!LIxfom <1'O>S9r:2"£K߽󧿵 " x㈈#"2ٌ)XRJۈhe+.7?sE .^t"6>pO w Q_~yPNNN@Zܷެɓ'<Ʀf">ySninHV_Juڊ[s|u;uN|\sD_/S*M^օOһeeDTuk!/VIg*==-g5%{^ng9 {Μ>s 7<o,- `@--D:${Й3gAwm|}Ң@~GLWEMDtCyg|:%νxh7oHVXm8IeDe?"@P9:Q(n',HDm Wg1oiWV֓p`ћ N9s/~s{3:rcL?͛_ݑ6ihq?G"V"j&PyCyg$JS=4;o a؍i75GDL:8NzK*vuNYxt[+-vиr[v"~e_i~+o0+sޓn^% _1_9=c'N:}*-ά';X@DPȭ+/^uvgd4͝+OxxT& rN""#O>7 MeZ\7vc/m#"`2@~@]r%***22ɿ͛W\J#lօ&WlKQx&i$"I?ZɊ/65E73aOL۹5xLxv_[sXuGN;δk_џ }}Tb]?~zݩSDtGs4.8}a[ܺpm= ݏvm',VE,YhqZkXy <7V;%}Tv"[2(^*+V'wttQpP멟)xđ7=>ҹb>-7 6VȦ=Mοbzo=N'aM^FD jˉNצ[:hz4M{k{<>h<9Ot@QċsbXДZ!nvqVvhr~ktBHR^Q#=:D^[+{k *z}*Al:A5B6]@JWDlqwk"AqrE,~#wϞ'{wGw1}{yר!Okmo#"Rۄ?A!-sZcDFDNvo=2C4G%#Uq+?۹~ON]oqҀsEtq\3ʭ ]k\8= < }S9]Emw{-:::9ϗ>-Htwm 'wQ.  }){w7S0s/9V{wG{n L_>?L4o?]N ٽO?XКSODG5_̨O^ ".R9Z}?'>zT/^tw~ ŝ@. \&k;'ߒDbPx:1Kib8jbGϼ 9>՗)uVnl3}:ZA$ô?""yi   x/h)-#f oDh}O#X];6K,ND7?w[wؼM>R""y'4m4gpH'䵗 ǏNܹٶADQ{D/G;??Y{&}Ϫ^iC)cǎW% UU]i=#J/JɓGCCC= e`_{H^'wW<ǭ]{oAL ? /AH A )\[='E >~V#8ѥ)Ɲ/[$$<{Yz9Do>jxS%G~4?/|;~cS~?/z- -ʩ9س*;1fN ¾?嫿XF87,-q߿zs-E&m\=yJ̝l6&G@$ʘ'M̎w T>aX=On6oNpNDaDsc~^ΥמIt?t[l[Su~f"8a̠˷+F6m: \07LN̙浟a p8'ISwȈdGf0lcPu *qa,ӡ-xe&fqx` #Ӣ0ǹӿ@Dwfz| VMd"wQup:L&qdN@{^':w捑xX` sGkotc%Gdu "##\"HÝDDz6..]t$cN0To Z>j$(:L(Ri\\\ee'[tL"&&& #ʴtUJM*h1H%J>|8Ϭ;sL#K&^BS `,d@I؈@+n) tj,{UhՆ&tGDVO6 l`mfe0l, E׽ \_]Svlnrq mԤ3[ȉ=܆8A<^zˆedb`$? b$XhFb%NFb$DÇO2;1 b k;UhV#"jj""g > |M@ %B;1XȀ`'% V :z͛7-9T*]iOl3{D@{7nhnnwF&]tI"̘1#110=({.+_ؒʷ?ytFr?~@ED@5}Ke`a$? b$XhFb%NFb$D"7>@UUU\|YR?~\*>CZf#kaޜ8T:f+ F)J}111j:11;| ravޥl{@c?=M!!!MMM.`dx M "Jv 6b%Nb#J$zy ؕ/iR wR1jſ>%r " t= ܲꪪ,Qbbb d_/3xErDDWNL[</~QK~5i4z%#2dȐ!Cv2KV M "Jv 6b%Nb#J$z+#֝&6m}c&9{ E~(mȍ(F,t!FS `,d@I؈@+ޘ+Ï8" %" )TzqKJbhh9t:]]]]KKKbb^q$ބYspȈ䲆swAԐ1tþr(d7޽>zwq;xJ`a22XOl42X( ځ؈B;( d▒h)/9 Gvc x߅K EGGGYYY]]'44T*JPķ F,#FS `,d@I؈@+)„&KTyAC =Hd殻z /H_+a@_yի9sN  3vAӧO߸q|4<<c|ܢ翳BѪUX]. M "Jv`$ Pd`$J$--x+ǎ+,,ܣT*Φp_3,| "/b)ABIF 2$@l@I o< r`PT#FHNNDq\XXޗQ+G2q Q ۇvܩ?tСCNx"jnl8vđ8ڵJ4 ` X "FM "Jv 6b%Nb#J$lw~i!F,#FS `,d@I؈@+| ؤIAꫯ{Je|0B-NW_m#Jb%A!J? Fb$,X׳O%>p@555~ +**_AXX@mQQQD4}QF)6jԨӧQff&?pA,'6D, @l`!J F 2XS0^>ZVј$ɈFAD6lD"ٱcOBS `,d@I؈@+n)^:ZZZzӧOG>G::@io|W~Owر~G[`jkkYxy)`:.77sc]8gkGM PD=tVX_ohhV`7r<##yk׮G_ۄ #AH~b)ABIF 2$@l@I >̙3cY2{ bP9%N+G9uuu[nu= d2YRRɓ'hƌΝ+,,ܿ+WLt #AH~b)ABIF 2$@l@I Nj~iA1(:k*Ho G )I8xɤaSUVV&$$n)QQQ'O'O|裏?^T? #)Svm> 0PTZZ:n}ƥv=Ɵ?icuUoQv_ͤ?y ^r%::<'22rԩ<QlllZZԩS":ujDDĕ+WcAH~b)ABIF 2$@l@I >ŋG9ڬ%'ɃbB7˛uOOp= jjj󉨸D'_XQQQ\\LD?##rB FS `,d@I؈@+(SId#ێWzBV/QEFFݝ(82 /GčR\Ok׮UTTTTT+ k׮11v)J]g g<JDx" "hSJBcCH0d0ˋo|Em۶ϧ>sDDVrpl/>;~y1կ4ͬY.]+F,#FS `,d@I؈@+f9000&&fʔ)&LH$3gάχ 00+6EFF/?~mmwm|)`N2eʮ]> 9F,#FS `,d@I؈@+^Çϟ?uԨQ|!L LָgH4dȐ<7^\ "2eʉ'Ǝׯ_|GX "FM "Jv 6b%Nb#J07LV]]]XXXQQ!HBCCZmccR?~ӕJ{{k} 577޽vSLdCeeeMÐ~S?IR͟?_V[QHHȔ)S͛WZZw^_X "FM "Jv 6b%Nb#J` xm۶M.O4i={#'0 Xc=sץu)37nܸr#<2lĉ@@>>y?0 TWWGGG;yrLL̵k>ә/_,,moo/..޷oߩS<| ((h„ _}`p|f]]ݱcf͚hv}…!Cx'ˆed0h dP, ( v21P`S`@qݥjrldxkMnZwJ_~l:СC:.&&&,,ܹsތ {.jCf>B( b$[`$Jς=T1mܴ+-\fe[r/(?Tm} [3ց\[SODСCqqq tMMM Ν8nРA---D1h D53O<X@s[yK&eK~:c~n!ɦM/[lŊ/RbbbhhK èQRSS}sa ba.FS `,d@I؈@+~ G^qFISԳPfrAdi^P. )'ԗQen4Yy:3UK S)+x1īoM3#e. YE9}#?ME(uMKIL RiiE9IݛAoA8qVyfll]wݕ j,e[-Lb5oKKWf vnj:%?˕!-ߘj5},cex!2oL-:],ߚ,7wenN7)$Z% ~/_޳gӧhʔ)'NT(50bD,'6D, @l`!J F 2X0 z":j~#yoZ""\O.MYWVktK̳8YISyV$p"y&ZYE--ؿO )#<-utRC6ܪ/lkk;v\.gdB"FS `,d@I؈@+7W>=Iqr`[ov]~-U ߫ܡʟ7WnQ始R̳1Ħ ,%euY SF[2HC&Πr }װn zԩSwﮪRRRz їITOڍC :҅OF~uICűވ ~ ;3/k)VR K]ㄺD.Z7ƕ\Z_Os#9.p~pիW ?.gΜ9k֬`_,XF #@ %B;1XȀ`'% V<8Lz0jAƳԢrZf~$(c- [zK3Eeelb.2JR[jqAyrX*XX-m9هۻZN#/YC[\ev-*r>pᦦѣGw}NoX "FM "Jv 6b%Nb#J$6*嗂2iWBK#}t'7jL _jp?y\WMV Q/ݺq{RCD֘,4/Xt2ęcn,_JDIK8δl_e,ߘQV%#cP>:R75piGL""v*6p7c ThqqzA< p=*-3? > K|K{Z{ǯi0I> 3;j=/XRRw^y ?TdskF Kh(prWst*/%"jNgl^ S9S56~]ZSطI*%EyL@E%Os#NtXt:XEzһoD‘:?CZn_^6+iY$t߆k:T\k :Kk|\IJtPJkc|YW` 0]]R lk_c-u{fLԒS~'>q-I䆐1/ ݹi~i~s!(c 2Vi7"X "FM "Jv 6b%Nb#Jx)`Dķ|g:jgߖm!}K:+D{049s!SV!Ȇ CGQK#P1 Xc{ /n5Eb;RVezz%Zc?lZjhtoq! y-xW6$Շ A_ ݿ跰c۴Wjh!"]qD/h"5\}9$,XF #@ %B;1XȀ`'% V<> ro,3iK1(c|-OLn<~;iΔZꉈi8+Ka? )`ؔ IDATV AC AC<nAamͽ?ڎ;*{bheC<'爄!C٨ КxObEhܯk?g0u^44cj$ NF,#FS `,d@I؈@+ޞ L6aGl^"Bnִ)j>pZy%Fop!kq7`N5[4U)>h8'57Ԉ:S~HIp8RCIb:{Mǵ;;Q1G F,#FS `,d@I؈@+w^ׯ Ln;KSƅfJ=I8'xR)U6hSΙ3 ٷoHA04uq'%sI$zA/>Rvo _M`x$;6δX6F,#FS `,d@I؈@+n) C IpWWZhE0D:P/V敘XTT# ѫDl42X( ځ؈B;( d▒j`` w[p!Dy"2wvuO5 %8 ^6ؽ6Ȇxq$&ᕤ[_Ug苎cNKf(dV"KY ba$? b$Xhb# Pd 6b$9sۮG$p|M1^\,EGۚkLC~t]4[ 1 qIJoc0FTT? qضc$Pfnς( v> SI8{)*%%%x <pcHbhK"~},J$*85Nn>8Eg"

    ' {زqA,'6D, @l`!J F 2XqKI`{GRCfm z"&% F`01 <qAh"H J)DaIF,#FS `,d@I؈@+ORJ$I{ՃY^ⴒ[d 3Pi-bl_ކa FpPѥ&rĵȆȆ:yM.5: h%ґknSZKJJ$F,#FS `,d@I؈@+[k0 >@0bD,'6D, @l`!J F 2X27)HU-#60~ Zٳ8]SPcV `[ H.1LaTN׬<,H?Y_.ٰ4F,#FS `,d@I؈@+7y^z6a 0g` z 3d!vWC-믿.--Jw'爆ӰDJLp#S]|TQGom׮] z,XPYY8 ba$? b$Xhb# Pd 6b$秀RNveUo4K/P$L4 xe1 ?k Xmm;~N{:tNCT*7 0`)`JWiɇ5rBa(u'%ΉepO?k׮ĴYiӦ_կ~z=)p8LmOltz~&qB4l(qD?hRRRÏ=jŝбCu/aG;ׯ7n #AH~b)ABIF 2$@l@I á:  N5u/߼ټ| Q@YeIk׮k׮'&&/ & 4^@1gچ$|gg^l9ΩG@TT# ѫDl42X( ځ؈B;( d▒q$Jn?tT;84cFѣq z^v=1T%%%杲yXz! !"HNS'o~Kx oOO,;Lr3NbxuF#'O~yRz! ÍÍz!Rq\E.Unذᥗ^`a22XOl42X( ځ؈B;( d▒p}$A{ՕG9=@q_jBG /k_*i4Ćr?KD-[y ba22XOl42X( ځ؈B;( d)`n.Y}}]{lR),#i `o#㖼 p`TE-_'{6/˗[vRȨCFΫMMD74g4Tw>YT>3j``{ߋ` S<<11qRT6H$K,ikk>l0"JLL6mڃ>R.~ d2B!J[LAP(2gۺ/mIޝY52͙P2P`Ha@ ?:P`JKa SRh2uͥm65Nl-^eIv؊,˲lk9Vgw{^{s=s=÷r zE+a1)$xh#Pd >b$!DVLH 1f6 ̧^5\qƘl{(~~L=mTG"{)`LDtv[CxM\m{5_|szN\w巛 ݃H$a \;ېj׭_Aijo}Z+җZS=K #a$?P< ( ~21P"&% ,e?Դ[ o?]̏nmt@&ed(̞iD`N[41~_$5Zm? nkc$P<|@I |\@IYJ"!&;?Wh͗޵O}7=uїC͹q Fe凿7r k {LY6:TAa,%b$!DLJb~@VK;ǽ6@3uozL/n-Ƕd[[ɠ0{yt<88.G_,8}ohwVJDҵ>a OܺVJa,!b$!DB1GDOnDBLH wؼ]'eU[cr0ͬ7yխM SO$*\. O{(=;qRSd'yRIYȫ_\=Q e=.whƳN0bFM %C;1xȀ'% !;LqO!o)"'I~{z=M;lGry?>&nNYwtu D43H>uD zurSO2f濼.;_ʸGJ w5ϱ#~mKJצ{@&{i)ӈy<!ĨK#a$?P< ( ~21P"S@%$j ⌫~gW"-ub$!@%b ҇)`HqHM߆ 6M2Hyy9(++ aAmԉ=`I@S$1( 6n$$J"$1/O{7RΝ;{FFFA`v],{իWc۶m3O)`S)`Sf ᬬ2TT* b U?D4::*ByyTm$^4#!1xX̅h d`x( ځC?( dUB p1mXAg 0 )`3rG>L-.ZG$S7QaD4<qMx #@Jv >b%O#JBĤ$fzAUVIRA E~۽@[߱>O?O}^yW_}ٳL_͖#a$?P< ( ~21P"&%&Èed`xO|420<@|!J G 2II>)n TZPPPTTTTT$++vvvvvv% .\z--?l˙dgY2x #@@S,=DHOv%E+a1)$xh#Pd >b$!VDKS7x #@Jv >b%O#JBk ؅ fsmm-Y^=>>^^^fffųQSRES7a{7t:]zz̧JRs555 ">!`^l͚5sI@PF,#H~)$xh#Pd >b$!DLJb@ccc#S^K< IDATFFFR))ʴ'jɎ @|arrrsITrHA.r>|m!\a{#Hb 6l;1P( l@IgI ?E IrcD__h4ر#77n_s5O;@X 5o0wQ UUUQ[[M6I$EOt T*09DEÇfJ*//j_;vX,'N ڵKT&;,i0LFDǏWz{{ ./>رcҖ/_cǎ2|1GY4#!1xX̅h d`x( ځC?( d$Ͻ6<@=z[.AbxݺuѣODh20<,B|420<@|!J G 2*`:… !JKKs:f9NJZ|,L8RM"X,FRV'&@jED"ٴiF偝Rtppp28 .A*=OwwwB-y< #@j wvCuQ,fVA+>Lh J}{ x^>Èed`xO|420<@|!J G 2`:Nuvv.ziuHcmiMf"bv뉂QMP265W {&{cM uꍓZMOyhS 9jW̲ol۷Wo봓"̟4k2`(Y[׼&#KƂȴQE3]DASЬ-ҞtA9;8K`NÆ-6'sLVS2Mdmi3LK{艌f2p%1(ȡ} rСmU4Ʀvc^FAWX_VC䦱^k=4uPRC=PXXkXb?@JG*nڴI) }u׭_~$HVVVvvvvv606UsS=T&,fS~>b6?D&eY|m.ZM23y2{k֖f]aHi5Q}nRmm9x)݌;YmS2S:m7~g '5i4ZӑC-ʹwYbX,! tvvd2o.JLKĉZ>qD[[ۺu"t:ׯ_)`Qa220<'>Jv >b%O#JBĤ$0 c8rD;{[ڴl)mm&ICS{J!M tА_:LCT[!FK0Tеܧrnwȸp^waHmF+?mm9ؔ;Q免0=ydq@ jvwwwtttttL&dăfsF?-V+l'|D[۠!kKU֐~_% ih|d2oPoljl]_? MZi=! igi7/o1a8rn_C8t@[Zvל"cS?3-͆jJaL,kٻh6Zkj43Ϭ5nwW ~"l׆kOLsmCCfcʹ޳_2T4Zdih4#~L`noe_{{{l6pN_Pش^hJdmiUF"kKn;)= ӺD 4  {Bc FcaV"a:dvhEF= Y|mWk5g6^P 'M 1 3Fk:cvs wy}"oO3U ,3]9)M4= 9r21Acc%;`X20<|CS CI,g{LcΈ;?LD2x튼uuyYƈ!2,H @I CD ɶ].WSz JRd.kYS}0涪ڽdl6[f6'x0ʥ/7 5s:l/ =K0'Z-w2M6Awb] !ju4cͥ5kSI&觽0g3RfҲ7oh0Nuy*3Ķg}O8nAѿ$\hHkjX[i^=͑Rus!ߘSIIYTO}u<8H6l{7ٓԤK _Jb 3=CqppRXFW^< K$R5% !bRaFc 9N"ł 8Nrvn\.W)T*7o޼aÆǂ26 QۡfѐFvK]-듰J?'dU|6 ApZ[>mOhj3ݲP^|ɫ򫦦EZn$7643[!-fNii6O8U½KXpS4b5Me06%3KE˷4j ֖Q6K o=6'<5xٷy/}o|N~FB6[o%;/e^h[] dKKϷ8t"fc˺+!FD&h4De,'o_o&=m0О#оz"ӑ;Α_of.5DƖ i9PSm#D}'Mpz'UjHSS[x@T]W?&BVSž9d ̓-6* ه7Pw7Yt㍉Ϲ0bFM %e;&{AKq D3-ҌM ARBJ)H}zRn׫^s:{ֿثQ)؊| eCQ᷺C{cmU+6e^ H,S** B!ˉH&2r9{(_M /֖A2TK_J)l:nVڠJS¯.>WO??ݵ[?z}\2AȐs@'_hwc; ,pw( %b$!DLJ"~{hhM׹0 v o^to+HOyocyWoZ5Ϫ5}6h;PlR 5b8VW׫]ww77 0]>Z3G<^_37<WW97];>\+% ~Jo '/Z'g*ƵPlYp%gHїDaW_}t|܎F#J/^zjMDrٳEEE^j\رck֬ٹsg` @jC̶]g#ּq'g "K` ,!}5c,I~FJlTLD#?:@,CͪEYp&;tԏX,*/^Z[#`sfHbŊvDbKJJd2H$ZlH$*(( e˖d2߯T*E"QuunwzZ$7Gs>CD*؍1en7vZ#tYˤyWBkV\Qz힅]Z/ܴk6V?c>~ty9w~ Ŧ@ 6ϥl"ߺu֭[kkk7o\QQQQQyڭ[n۶mǎVr:D4<<, .+K+vx6+RQןGf˴.7?f$02$M LrKB]FpwcT|t^ðA O9~2Uu6_Q\//YG0Jx@|@I CxLLL.򪪪Žx M9&|Y[TE>1y67aEtપ"6>rh9BRH?*rTV)`RkOLL k:0##C.|>a6/\ $z}UulD1yg_%"LyH옛koޞ1CD+B0<~g-sRHY^^R=Zǂ;?>5(KV*>2Nwty m_ ~ e֧#ѣG_}Ç˭]]]'--mͥ J )cӔ\OcDlܹ^g[#{_z?ZtYo3fa220<'>Oǟ3FgHO`e`OPe$g'd1NO[wz_xoou~ofc*UIDC;@lppjμOVVVYYYaaX/ SRCl_x=5W~NqJ,&vWmous}Kow%o-JVLffⵣ珞2-*nt4٪OX Yz6t:BRj5&oݳ+\$ovX&IWlN73`~3cQvEޮkfYntvU_:u\2hRDŽwa;14@HvBHҜUVj4oW*fپzDžn!;3ua220<'>xjzTޟ)`%;l>s;wn6K$]oXo԰3"XzޗPx@|@I CM[T IDATWWR|UKfL$x}۩gǗgT:/;6fX,._"33_pn g6G%UYTSbC.Ƞ;L\B}޷ϸG6?;]\+\fJ`h~7ޟl?Ԭ cٺ{z= ٹ|ٲiw^U+e{vPXI_fYZ)3tM :&&<ЛJDoY0GwI?%mߍYwg@MWgx #@&~%1`?ݍxT"r,̏Y|\l?Z!K?yCU.=xWnY_R)jy~^ʒ* o(*{goZwS(P[QV۲$7+.@vIDv!% !0 -櫀$Ldy +f޵_xl<!GO:yg|"Lc KgKDSREx?ˋPy?D?00n_lLvfm" }¬S[-r2ƼxDa220<'>8{(IVigoc:}f|?/[Ukm*l/!?%xh21P"qS|>d;dG?ZTT4` @jh` $ވm?suU!;A$tZPCCCϟzlUqiG^/t:.,2HiIZ^ fz^{;#lْlpna;rJKK4y}Uz%0<8@1)9:r-[D"ƍKKKyID.l6/2\&΍ĸb* @a 20I%)mI؝0J]nJqJU\\X{<v{<^.DŽbX,I2L0gXi].АZ9';+x@|@I C? 7ܐ}Cz=eT9eK}ae^L&Z_@,/_V `tt:8dN+**]X `333ۦX,kײ:;;fÝ/E+a1)mI8*?0 X,f Uܜ5kV$ +x@|@I C#A8v vfy_.tŇǰe@NWE$̉0h d`b[.wŶD0CnN̦z%0<( dq\Ntn" "A^ ) ?@􆭦w,1>A4T27fɉv$Ku Аoou #a$?Ķ$(1my/=66d潜C~Jb$!DLJ"wXSZ~N"x #@&%9t.f&Zux8xO ځ G 2HH\,_~#4S';!J<&daJó@Dۉ# BJY7b z`1*~#& Ԧ4h爈~(.R=K#a$?Ķ$dOW˃:NJrfC~Jb$!D"V Yի$aYYQeޟʩrk.4Ǐ~b{_ܻ]{2'x #@&%+\6m0r@<|p._WV[7(**eeeYYY===-[|jFss|YL"|"'Y4/*_N~~N[ۃY߾k^`ozk0_Eן}[W}9tύќZ$a1{HHc?.7-?CPTUcr*9FnI+RTZ\\Y^^K]v@xb׾RrR:#/GIfGyedLΊdeP=rC"mylCw$YJxXs!>D~@ci}$V-r+x)C;@1)hH oz/>oGoz?Jk6lADߴ9fWʩuޠҵ>a{8TME0k_;)Xѽ 08r4;/m_|o'{Ų2Èed`xO|4201/ TyDC\)`GXL>2Sv!% !0 R[?C2շ1\[ؾeldkε$0bFM Lx&GpuNOKs:D"\J<| [M9t \fWiiw@XǃgϫH.ggeeddK$Au:' c)`رcgΜCD6̙3ǎ"e _?+f~x #@&N%VVz' ](G5oK.t5kVWWUgeeޟq|=`2<x)C;@q6::j4i.Hz}3W'ZC}I@_5َ d)`,Ag{v4Oڼ^o#e2YNvvvNvZOMLLd⢜ ?6f>VOGzRT*+Ž BH-JM*[#U+srr|>XOoɓΡyyd4|p"LힹW=fxya220<'>xD^jݪ0t顩v͓J]]m' C-5<<<-#!?%xh21P"^SۃxޙsC)`S)`t.38]azd,ز$` &-,,(,(ɩ  ٣T*b1MLL=lC,+9_K7g-.!V#HbrQ*BLN1J.\hoo`{:::/\x@|I?+`P^c}!>'.\=E= PzzZaAAFF~(dDa:ryFF̅!#>@aڵ{/bDrײ$H$zxHD{!a4:E 2$XcccCCCr3M L"Kbڂ~xg_cƾɯ~ssr'@p^ؿ|B<|b$!DV 5g#Hz}2b57~я~믿g>uq+Wg0;oSs}D<9xN{ސd2YaAA^^n_x_߅ޯY*===v`Q: ++kOfFVWTT̹#v{S/TaּO|!nL7X* mvܴo֓n(ae2YYYiggWHœn g"=B" ?,R7Zeddj4g~܅$Z=aEEw1۳?7Z`̣>4aRV b.GS Ē1q8op3hsԫ&Kh4ǾZ^VVRS>d6͖hu\.^,+-p x)C;𐁓( dUrv\.WՑW|fZcme JKKӾry555y<[oW_x S>rz`S* /3gssstZ-[3gEzJaDs &ˣI | pW*<IzdRkVo>;\_RHH,<ʭLw4 3אָ*zzzOן*+* ?BȈBh wɞsAJEfA'}nn.H#ug3S aߞ!=,(pE:@7 BsX 9'DDZ,{Aex+V " B*l,Z1HXh A@B|Xwfj篭(["~rEhinJx 'AB Du<B.1$XUr ~*ooVZUYnEaB ]?_ps-6qVk?HutjJRZi>}uVG8 IDAT_,_a#ҿDE!???B~;G??r3<_z !,^w>f"WKŭL@eu]a>QZZ@O!P$NBFf͚//ӄMӕ/£> /466 :L&C1Ab.@FS` DB;T߼E.ñ-NX,n_~.EQ&qykd?h`b B>cng0 7l @F%0 X$ HRJJCB@C|SO=wK,(Nyݾe>4MݿH==%T**+T*py>66>B M baBn| i4x(@t&ߠD!B]^{'00ZڴjC[[~pOpd͍PUUהdJ20c̗ph8J,57%NBhA K9&|>oxxYTuۊY]>lCvr:!(w4M;NL!-[^y^x!;wn˖-A¢\$tA|sk'c6p=nپL>DF`zWyYH$vFcc3&P5M>a$@H%0 ȤF$)lѧev2/nnβw!`FqQGCXTB!?`AZh?,7o,\|8 !tܑց1oMs{]CA966*+#8Lj!ˬ@`0bիWze]ˏeݥn+l˲-*&= -ysOC@DLxK֩obTo$-7@YYi|gx4UvB03C(BR|WWWrGV/_|j:X,Օ^<;e<ܳ pv 2pGR$dž* 1 M1HsMS[VimU|Oc#~tt  7#XI3.2ځ0K` p0ݝ|UUʕ+ҥKCCC;455p8n&);BG0Rbt][T ==wC3"ryNQ"K NSd2m¿KvEB!Z ٤_;+ǿ2ݵjuNXbM^q!P~HE"_}>_$6'<|9$l>8pd2@]uؒvO2)C3: Bϗ%tB bcPd4 K̫LGnk|es{"]lJLr,:].MаKHhb2.1$KH1 t `P*fuhOgʝ9yc3~`ERh׮!GBgwvK40/5l<~W >Bhd) (Rc%:w9iZɲܶD"QekO(oJҒ/%$ 1a`KH,ᩪ***x$x.֠8|x`x M\[21UrѸc:Pfs0v@!ccܤ3/6İ!T"K X.RZStZ))jWkJ=n YCo}fZmFs@"`079Gz"Ag ߷A)70BI]hK͖h4YUm{aڧ+qaA6TEGiF)c8>)9b`lDh$%wq52 \UHԤJN|x_v5IͣBhn$T,c *Qpt8~6Ƨߙ|uA[6fX2"Ebꑻ[a#M"EC}jeY6FSS]-Nu\;^5hxh)2 &KK䂄v !B.1$X!`PVV|<)?9#K~۞o:@; ^gu;--S?d-4oxlG$q]Ntc^m>ut$]"e`<O?A$qǺ3~1sX5 y ی덐vQui G맍 OFVk`ʤۼٳ.yWZU舮{$|X/ )0A]K= H,37n6IEŚMe8WE=|W1ulk,6-֞xҒRsCU^;cYu.瘡%rGB;v !A^vy`0!az۔RyM7Q18sʕ+M&n$$9z|f9gE p3W-L|3V.{Q)jbR*xk ;p7il6sqEQb(ʲwqG^_|E_#P֢,wTO߈g/QIU5TLl{ToԟRhǦbM0X{bT*QPG3MkV5lxZ2R'  ~W3?٧'V^=@s%VnO;@*̲!yf9`C 3 :tiM5kd2veT*oD"d,P($iRFT"ЍrO??hWg;ƅ5gZ\}CDL>?9!kz{斖Z{D4}wgw!`~q(dZJ4?/V67R-Z)BhJ |JR4OV0/\j:el^C ~O>tbj4nqn{/^B(8?bF.Ymnj wjղGnyIB\6 {GN-[#В4f&dmGE! wF}>D#Ot;sȑBx"bcPd4 ȺKDtVeX2_ rd;u9=SsȤ676(IgwGa8u%v ! # C̆Y=ozǟmlCrc!5> =,vAFh 6ݻtG? !ο:Y4| D<]½(j4o*d!f"ꅲ}e,BK^QQQyy0[n9ts=g0FFFzh4!t)= ݓy( n[UcSZ-ݝς&ZJm+WW;nxx;BFuw+?OFFַU舮3$T,c *tRc~VPqGKז=|OK&E*FAYYNo;^czBB;v !m+v B@0a3OQO |\b0QdJ߽Ĩ&gh<-uͷ=7rUE[^+cqqBBh&b1^*2R&idBt ZFWGyи30扥\o_&)_9%Z-Ag9 V&rַ9A̚ g榛n[fۡN 0/\!B-a+̣6`VKؠy, sD\$#@NMif̤.3 :zz3aCȤoRٖAW8bcF%{hk-IǺ$' e~XC[U !nhFR)=;e9|yWWkۏ!Bd(8ư8HXh A.k5e&5#>4vk"Ù}s|o\ߟ?q ^Qougc޸J*ZC޷u;\^\r:E?*n&>cp4KK䂄v ! # C\eٗ_~yÆ _={v׮]s^&U !PpB!`Eq=2L*w.Bs(Щe/+6fos/tMt:bh^+`sF%{XS|,1e3^ͻ%bQ@Y!`H$I#(XQ EMMB!kWkV6:!BD" l7QIj e&J!U+% JUfc+ZWʋ%d0!i.ov>YxdOhۑǎٸq\.a>kg ^+!PpB!`8r9r,ZW[WϮfha+qidڢTH8?YG#yPz(oCòʢEOG$J7>Vkjr !B! Zڣz3HDc}ңRHJ%NSdxL߰k3zX|TZg.zL}̡]w6ɤ_)r=ai7^Wӽ٥x>ذGh`N%>g4OL[`e E*B҂_6l6c $İw={6 )0uj}9`0T*hgoF&)dbDDSHDh eW=cT͵ƆjW_c"Y.5w¶ɞ674kb}{2a6>a}hk]>hrN0~MS]]"s$ 1v !A^D!`===wJ.kMe@YYYQco{x|K?IBFXpBڏ}ֿЯCTiыV[#ֶqS<<7tk"yB{Z'|inPr/\ IDAT!ZRO-|O_DZȱѹB!B]|iǦda;y~' hj-پ"/vLX@Qqm֒}{Xפ~4C' KB!ud2^㙹N<;nZ\Ϥ3ޛ[JR> _ U$8ΐG$JAB @F%0 <=<<,Ա;N)\ja;B:|Y0_q8 !<'?ˋDQ[߼OSb`UEIyx! C"r/ e\פr]-:~hv(캳Yr>xwڊV932wS)BK̬gϞJŠNeJº+1Ƿ}ZQ,A!v Mnܴa7hh%Dcq!J$ӛn^ z~;q+nn)m3.,:1~s"V#>됳Eݽ?pXQuu#WX,̰WzmkR2C'l7<'@( 6N!m瓯Z:SN҉L+s9N)G 1F!F?[5M7돲]R< ]4ż*A¯ 1a`Kd(8vvBd;Ҟ)/9/?[F2i47Bp"\~ _bݥ8v$ ^H>HXc|)_ M1KPRg+7Ҩ_|}!8ܡy((w=uM0\YQi5& >/7knnɦg܁l/^%H ! # CtL5UUU===@`eze앫73(g>eiSO-e s9?D!Bp< WWTdp]wl8a7(ic®hBKT"ducqϰJ}xܛy294}pKZ)-6vljt><7pN";XfVo޺ߑ|l߈v۪!wC,CHTgjy(ݶŬ\9ևx-xMfۉ~Hgނ~x`շ> 3v)Sl;և=[}GjyR678;j>q ~q6[oO4wͼGU8B-yXoy9 PD8"a0藇Q/rC8 r) V0޽{I.4M5V*Lr$Ag{-L* ~yljz]<`0MagkŚ _' Uh6:|: {&nQE« $@H%0y(ء(*Uf/+V]|sũU~a>:pr޽tщMMO4mKtR_{:jr޽ \DS@`;aӟ>ONѴ~:ށXotzuItzپ?m!t ӧ/0?'J!wRu_vx7ڲYQSCg:o b& :1. ȨX/ )0 ]BHi.Y\eIȤ L:L$!QJX ^YfRU ;ݾ[G#fS 0T2expKsm4zaiYJ>{^G ]_ b2.1$X!`7ևs:{ބU+$qlɒ^k6SԘkf\0gtGMʕ_^yӃM6Bvm|q/}h6s@{֑'v?WEX4"#ʖDLזjuM#@$BQ_0 Ebq DRRRHJZ!Q)$"QFc4;n}uw5j;=E4*m͉ tRи:psg^LFBh Z޻wŁ=;ڊPN@߾W{>~$őM[v)Y*BM[VysūS>'3[_T5՗yb?x %_^:s=M;՗˫Z_ˉ%H\fznmό:,NTYi7偭JHH#Z Uz_/͵jzO?=?_\[PmpfF !s^˜9sfʕ&nLS%5˲YOo۵Z-Hg]Gxg|;Z 2Dxh?"<x`bÿ9A($qnp19}2agBeeA@B%?.AB;@0Jg(󞷔$"ZbT 6-Fv rb2.1$X!`,b3g577rݷvH$s9!`03#bU(D"۵!`!pB!`!Gh\I&{oXZrMUowMWDQͭ-eY DfqZd7z}]mMa" @*ݶү,'gh2DY`v늲?th4L! ޙFGG].W]]ݜgZz" ?d ib{pfd{GpX)0e~fBf3 1ݻwϞ=h7?>1XT"N.'V4~26C E͍CB(w8l!0ѱy$(R%f-E"UY{z ֖vc"wxgw~y6)W6* DR+VWRKC Ɔ\NB#݄gZ+:n^?ZVӨr㖁לXqqLoGLSeB!P3ħ   abX,ߓf#|>kOhEF_KT<~}\.L*n6ܶ=?x覿kXOxwʄm{?Z`~psW G^ e? 3OD"LRt:\>spF# J̇h8ߌ \F3gT,|>0(qEQRTPhuZF_bX|,JEӋm4`h,X.5".a.`0($IB)x<^3h(a8J*U>Be @Sjsk¶ ſB e V` s2A.?~mtl>Ƀ}~hߤ(֤*ʲv#yh4lvT*--)0#lX*vGgX,fFT*UQ<|`2*36aY~ĤL*-(/fHx=I Ɛ /]}i]Kuۊ_h]>iE!4C4D"pʕK.@$)4/>` dmmm|b}593^{||"UU|r]a_.  w[,=Ӆq,m'gJ%.JGBe&'&&g9JV4Es\,ʲ~s~q ==W Xi D, (f^a8n``0B< &EQZV( D<FTݽlY]h !VSS3:26g[9u+j|}WvdmGx!еbH$8ND"d4^F&&b@B¢\@/㏅m?n,Z=H$(_rE]]mIq^_TT3-ͭ-ZVp ٨T*B^]]U]]FT L7˸ѱuFEE֖2^_T3 %˖ZDGQe_0Lw%H$5UV.6"}Ql,6T/`X~YdRT2TȬ775666(3>L$m '^% AH @F%0yNp,H$ t:ބQǣP(RZN3gV\i2v{| pL˅ҟ!H˫nfH23ooYD"4Mbi.--8h4Ғ&HP BzT*]byg xʕ;hZz^tw^DB2 h Au|e QJu5ieE;sTycMuu&X,^VW+y!~pr ¸ٟ1&sVj2o(WOϸp8gq"W0Hx 0t9*h~衇rLJr:qd! ?XTTH$²D"[/͕d}}}6m*tD/ IDAT$,d4 _Nlrb2~gUeEʼIfҭoa+dt:~~2,^@ur(ɠ'!r;b%FgMuՕNyw7_ b2 ፃvUs<}z,BEQp8 D"<E }>aaY(0V3g|ʪ( aA((n(?ma&Ǡ/*<#5Ӄ0]7t1K-~5H7cKB /_šPH.3 p3 4_ eeA@B%?oo"5ȃP|[d} fcLgLUT4Mi4ecř'TJe֕;jZ੭m揾 H ! # 8Hh!./]@! L,H$b\.JiiJrl6[4!”݅GDR4KHeP5")s bNe<)gBe@! L*ڵ{h4wppppph4m۶ڵ+?nL$T,c *o†H$&$S y  䒎H$ I8ӫ2n1ـq9.s,3 H ! # 8Hh!!Z"hfnBfnZ[[CD"9~1P1H2c{P$V_ܮBJo0cd9 dh2.qc𶶶٠_57c.WC!bP(xZ[[}>dYyQ^^^VVvZL&QBKz$#L}>gh.B abf5M$2^{>"d@)b) G~9|!М UBFӴT*h4uuuwߎ;/_^RRR2/Gq$T,c *`f?~]K\+>"P(Us;v(*>7~p8180ᠪ1BM0hDRIG:W0Hx 0t B!T`8OޑP1H2cx> 4\8J(J(q{J"&wߝyw#z& ! 8Hh!WC!rB!L&˳(L&@~cC7*1 @FSܰ1DQOyճ zt1D08)f34viDffdtd^iqGG[3cy~xx$9Q}X,CB蘰-w LFB$qC;\lg>Gih81'fiܩ.G{zgywڕ ;::b3FhiFJ2~8x-0C<ŷ ld2Y_*""vctt,(&Vkpؐ36}br2S3MvTъfI)F%cw^\D!lOo_cC}|) GƲ jkg6p7HyYy&G!PRW9twzؾ1n#=OCDW2M|Μ Bbٰ,y'?JX,fX>I駟^r%B3ͬq:MMM-[ZZjjjN:5T J~ )nxBc㗯t TWW=j4eev4$O㸡ᡡa]c΄Q@Txbxdthxxα`"u<8LFhCPW%0Z]B ,LLL^KP-9sݖd4Hxq~=DB%0 *2EK(֌6y>U0H@q@7,@+ڵ뺨r?)9onn(`l 8nI=#N򂄊eA@B%?K X,fw8f98Xy60L$M.xD55:6.QRRfN XztbJJؓٻkhFҌcGN*㺸'!!@hRhc ?8yZ9ОrJqZC0 И4[d;|%KF޿?=Ʋ.3/lmg>^ڒ׬ZdXwñt9OTM_211107?tן|YƈD"& ˒p(d NNEEEMg^ee^樦i˚zCW3lƆwNg?~( ]7}ޡɄJKJ%gHAI!IZEGOz)vڼt4uOGa$fmJ)0^9[+\iGTgg,CÇϟ?zj:€*b[4W%%K4~]bYzuJ)0FFEvTY[r]EEyqcUR~ݧOBzzNj5t#OMMF".6/++kZz]jcEfm'4Ͳbea ;΢‚exܻj]lzfpݧpl6l0"h0LzSU0`RKcCOBFU+UVoD~e/dYaI/b9Փbo%3\gQWWbmdd_J]wD,}BDi6ͼIEŠe2$W2`Z+++nXu?, R_WlY#a( x&''8nXbV/dnXu}Yii^PX|j.il\ִ4rhvuK,iL(   OM--7y[UחDѩ)?viuK4g$-q  1( 2$H ؉HWwyF [RgLw %Y_X)<ҢX,6v.ςtݰm:w |!`щr{lOm^f33{};P56tکhQ};Piif;w\UUUiD 7ܐzTի=J{ҳsWɷ_P5}V Q^[H$=g |#i&znBkJ=On˯zkSmmMŧijOu'OMME"H$aZN>cP0V,_6`.r>19h4Z¤ɯ›Z˗5;ϕXֺں`085D"XԢ,6t\-_vaillhlLfIIIIII4 AvSin *ۚnwZMCͮ-+tO*]iպ&Zk*.veZ2[͛7_:%O֎kjx~tͻc:i]E)<-kjz?|N*//M zޡ!~!06nܘ PjgUҶLܕ/Dz%>}OPlڶqppӶI?};^޶s7.Zs~?#J)&e+l8@g"f++-Uا o 4$d CDՕq==QJjvHwjѻbb$/b67w};aʤk`hhD)5'>2~^Bu}jΗ;-J;OaKҝgEJ. +`_ 2$qCBJBN!1( 2$IKI̴7C+qYVw#a(KKoXg0GKth\n3yte^kj_KH֝:(oсꍳ)h4:::ip8f#Rv?6r^^T|mucP܎yt@]o`pH)jYݺ}Z'pmӴ˶cc({ŷ~e֮Jwrd0IXɯd LJB8!!%!'$f(( |R TeeeyyyYY&@$m388+as7ca.k͉Pw@H)'{eb)++s\z >Acx<7oO_hjGpL\[̎l B!i~hX^8|N>$GŠe2$W2 & %!aĐAH J IhZ \듓`~aBp8r J-`?9gϞ{7~?ui]e"M\.W ~r*QiZqqq|nf0o^7pQǴ=BP$$$CBJBN%#%A$i) ZR @n03|Ru랞Zy e>(+ \GgIŠe2$W2 & %!a2Pr2(1( 2$IKI0@~pd)LY?$a(`PAɈ!!%!' C-`,۳gR>`XȲ{{x<&H0~9FŠe2$W2 & %!a2Pr2(1( 2$ \d0IXɯd LJB8(1$d$dP2bPdHH$gXWVV.%RP*Iݻw޽;) 'ٳgϞ=F?qƯ4HMJP$$$CBJBN%#%A$i)ԛ@kt:a]cX 0v i`ngϞ]~?_?YI$X&IJ~%c(`PAɈ!!%!' C;ĉJ)]͋H$n馢'@Fv覦naʕ+W,))y~F??xNc$X&IJ~%c(`PAɈ!!%!' Cell,zMMM;Gijj懃v}||nZW}^{m͚5UUU OYd̏){EXy744TRR*((b񇕖/CX,ad;-`px||\.u]gniebbԩSVUӴ%K+@Wlu=zIۘUUU6pl .;v,f>8q@ +`_ 2$qP2bH@IɠdĠ$Ȑ$-`.\jjjr8I{뭷`h0H,~b~hbq:qm [R 9 IDAT_xѨbX󍌌Qנ[gtkd0IXɯd LJB8(1$d$dP2bPdHUV%Jp8lΝ>^biloE">ŒtrQR9(j6mvرcJիWg;'RP(TQQQv YԔx3 ?/kxȖ0۽l2zllܹs{ݴiSYY3qWa$@S{{{#(%c(`PAɈ!!%!' CĬNpGA4755u;cה'afiV]Ԕ[*++9$X&IJ~%c(`PAɈ!!%!' C ͆3z[[[d0IXɯd LJB8(1$d$dP2bPdHh4-a0MӮ::q TOOϹsB]G/b̂d0IXɯd LJB8(1$d$dP2bPdHL? Z*~gdd^D"V[o=wҥK֯_e^{5kTUU-{e{@Cɂ/0 #OLL!_߳"C3tttoe IBIH!1$d$d C+Rlc  F"=g_޽[}CyE H "HQQQS`Q|xǟ?bX4 8P( 6ßLY`^"yTWW\R__p+P*oV8q_ʻW.b6{aqH8E 2$qP2bH@IɠdĠ$Ȑ$-%A XjccceeeEN#{{re:0 JD ɓwxB>-SeWK,<@ID)..\T@5@y Bn[' 2;Uݷc>X8 ߸`_ 2$qP2bH@IɠdĠ$Ȑ$-%z MӜNgAݾ$4رcǎ;q;/9ydݷ}WgI:w_if3; !1ǬI8 k0d0I( dĐAɈAI!IZJS è#Ϝ95/y{a&COE")R\\l17ƮYz 6Žk6 UJ)ݷcٴmkǻ墳j{ޚMPO]&>^M=,i[1k^7Y!\ CA0BbH@I $%A$i)|>Ԕx3 ?Y)DN7?rwߎ[=/[w:(u1mEsuj?cվS=ر%ɏiIZ] zN8w~y?# ?zOO{ BNu])iZ߬Vk_ey-[wܮZ}J)#Gڏ\z@R\ާU5HIzj> N[jZ&7VJM`K0cǎgjjjK~!1!EQ]D"BH$lTZW'CfӶx~tmR4cf @zy|E}C糝&I8 & (CA0JF ( 9$R4mZĖ`0KM@ΙSF" O?O;ے/.YcvPkS=`#t @N+~G/ЯNSq0I 2$qP2bH@IɠdĠ$Ȑ$ .@ӴUV|L!GuÎ-6~ϨMmck#5m޾}R|ڷmn1J @.K>׏?ydy&&.\KD UJqϞ>}J˗/_|˰ 4#{zz.n @!@K8 & (CA0BbH@I $%A$<J@ԩSJ)sO[[[0|u]J/|WJu]Ӵ7ob10\.͛P Lq[ѨOWquuuwwa枸`|j011'3dzyfiVXXbl>mjjJ ϟ?!c߻e~/Xiee8[X@)Tyb aK0KV,$a%1d0I( dĐAɈAI!INpbu#f;E1 Y'a(`PAɈ!!%!' C-p8<>>iN~ɓN[k0@\qa~N6,&]ף(}JŠe2$W2 & %!a2Pr2(1( 2$IKI^inOFϟ?R) ϔ.CCCَ-]N4D=WV,$a%1d0I( dĐAɈAI!I[CB!Þs\r&b8w٬V ]7p45 \TPPu^:7 LzL5M"(?szL˕0d0I( $ BbPdH%|.\K>l-YbskYjqMCCCUUU===K,If`};44d.,((_' YZZ:'_ q(p8†ޞ {|wi J@h[,p8 {zz*++.]X O7 eQ/G|˃#XO\#ԧ'(..4[nYzu d(enDCR* FFF''RYR3W Ia.JP$$$CBJBN%#%A$i)-`ëVJRXjehܕoYU/-[iɓFɍGĠoO(h4z?[ՅN8oc1B$FK-++տ! 9lrO0aoƺoXrKsZi-Pw/,Ǧ7HXLJP$$$CBJBN%#%A$YkZ]~뺮g;KBMʛn?@+6>>s0\H 듓#7 #OLLi)~w:&.++[| G p8N3fRp8d0IXɯd LJB8(1$d$dP2bPdHL @+--͏ٟ80gޢlh49H쏜-LbD"O<Ν;yNŠe2$W2 & %!a2Pr2(1( 2$0jlllỡE"'|>dZ-U_ +`D";w};xԔg۱cw%dD0LZ/jlذbbb``hCv34b & + IBIH%# JF J Ih } X OjF[[[}}R*G?ڰaɓ'۶mnyxjZ V?3L};RxJ-`Ɩo>~h4_~3gLLLh>l%<e_?J%լi1rZVAh;҇Gu?[ 󙔳?O=fmjjJ ϟ?<0y`}{klly7>OM_\yQa^_5GށwZݷc;y S~c('KWn7x-p@ t/yYX\ݺvrي df&N~_{o>O=ϟycm7#jw&Y'xfҤŽ9xW$7p$;Vۯx}uaMj1$VWWVly{nSJzmfkKv(՝\"a2LV+CA0JF ( 9dp8+4M__?ᓭnZԄn)7e,W`~6}:[ٍcǎ<#1( J"BBH J¼k!*%!k!Jbմw~x@ovyyy]]U_=It:$BP$q\3<&{=_?xC^zAvSCPňFb~?ߟK$zս5s[G;" IDATRj ]߂VPF4ZyIe^L9\k-(赞<9uHcJ)+{Hc+5GG c/ ~'HXLJP$$$CBJBN%#%A$i)ԛ@_p!s8F흚RJխ\rcnrWF76774cp;n(iϑz]eYo>w#No(Ҥ~73﩮뵵˗/ohhxR@>2 #&?ћS{o*x@+u]۷kRK Zf-`fAZ3`6w-,Xbʓ*.r: i; yX}LJ>o?}Mo=z$asd0IXɯd LJB8(1$d$dP2bPdH٣ rWF[-`抧' +)E 47pYY#a2LV+CA0JF ( 9d,hE \i 1@~b & + IBIH%# JF J Ih -`sE a@c$a2LV+CA0JF ( 9F ,Z0H <IŠe2$W2 & %!a2Pr2(1( 2$0X -`6V$X,I+++%&E BU nOK/g{~?ݻ޽O?Og{ߟt9I7n2$W2 & %!a2Pr2(1( 2$T zMMM7盛2@Zg?SO>><" Ҥh`3&~ ~QQa,g#?8 m0V,$a%1d0I( dĐAɈAI!IZJb@|a:ocoph1 Ǔd=1d0I( dĐAɈAI!IZJ"u X8״CX7XvaoN:|,`~4ZIc17>H@޸ ]ףLNN*=zAsG)uPwe7:6g6?|'v>s;w'x?l6/~_◣. $X&IJ~%c(`PAɈ!!%!' C v…ě===oVպqټ @)`>]{R}}Cf e ])p8t]3_RjK/SZ~S)`f6559sbWrw9::S~ͪE*ZX,6::sghxtww9iMNNƯ @eppТb9W߿o+_~gg>t]KN|p.E|(\%E JB΅E-l}䑭z[<ߞd6+ɰ8$d LJB8(1$d$dP2bPdHSWZxwuux;Xjehܕ0ӯ~5k֔&޸q㼟if{ RJ.[.4f6>>^QQt:S~n[ 's8 YvO<+~nݺlg=V,$a%1d0I( dĐAɈAI!buww777ehܵ-`y0HsS7b 锢tjכ`xxlb & + IBIH%# JF J I2 @lh4l  ?IXLJP$$$CBJBN%#%A$ Ұ 1@~b & + IBIH%# JF J Ih -`sE a@K=|4Ei a2LV+CA0JF ( 9d_?{iwyg]]UW_5 cŊrK ؒ>bgϞUJ麾~rէݽnݺ, Z^^>::ڰaCmmU/R8pۻK_:u\%'} KM1x<<<55hqyfɇ?|ܽc9w?vMN:v. ]K>l% Ia.JP$$$CBJBN%#%A$i)&R9Nݮii'Nhmmu\k֬\x/})h[FG-##jxXbc?XO}>}`p20`sn?v\"_ `0d0I( dĐAɈAI!IZJ*@Ν{'~|͵`@)t:Ng$Yx?{!K4|Odɯ m=lrU&-[O}5Ԝ;w(//^|n;T⋟s8FkjU]w&9b & + IBIH%# JF J IR)NSJ=ׯzw}]6n811Q|H$r…X,XYYy7^e8 rWFO3)** BI~llqE)`&)`qMMMJ|pvSSSwVj4M)\dbX,)ZΞ=;>>~С_͖<[4>>>:::11q񞞞 лF0YcrrozR0 s:̒d0IXɯd LJB8(1$d$dP2bPdH0]ן~isImmmMMMSn>)Μ9+VLZ weԩSPi?x7\l)(PJp׿<|4ɟ֭3 #'֜iWY,j^G"h4p:k׮u8PԩSO  ړO`Puiw0hR0 H_U +`_ 2$qP2bH@IɠdĠ$Ȑ$t92}}fu=EիW'>0]mM7so|WZ?3dž ͞#/6 ʿg׭=e-`fS檺Z)/\Ƨ䱢œ^oaEE ''m69́/|a񢆆lrRSX47kg׭ >i@`lll||<^Nҗnײ, ;ٺ0#b svcP)/( 9BbPr$ٍ1Zn/0̟np.e FF[-`f-`uuu3g.] ii=AjZF+f%0\ IBIH%# JF J I$~ĉ oj}>-`7h+Z Ol) 4֭UW1dd0IXɯd LJB8(1$d$dP2bPdH9 r-`sE af<IŠe2$W2 & %!a2Pr2(1( 2$0X io;{l-]4]OF@ȜX0 g,~)H +`_ 2$qP2bH@IɠdĠ$Ȑ$S-`ٳg5M;a+V[R>0]6W@X,fn͠-U"3nwwufKh'VkyyRjÆ W}ϿJ fz<2Hޞ JP$$$2Pr2AI!IZJ"E X(z׮]2g9rHggƍG Ҥ8p8C)l6׮]zO:v^z2W-v|\MSLSSSEEEs߾9sgt]Z`$ZA\ IBIH%# JF J IR3M)4Ms:v]4MN8r֬Y3<<Z<]reΝV'""BD"#####`\h޼yO?tfff__`1cgϺ\K.utt\r[]V,AJ~Qc(ȠS$TQ# ( u21( 2x HIx TUU-_ƍEEE---v*//ϝ;LL;w%K†SSV%''gff̙3WZt:oܸC\zȽ[XXiNwTc&66611Q߸`(;werss$&&&&&>K.]xljvp*X&NPABI0F 2Pd5bPd2.-`.k޽~:k,ϟ^p!&&f…o߾us >&h0x?LӴ0zSr׷oϼrc=s!=SiZnnn|||bbb^^^ֽfim2 Z`2_@5~ݸqfyƌ`4E$,,,0f͘1#**tj%"]]]`0tuu]~}|rb :VCA %81T@IAԈAIKZ|VZṅ0h-`P̓?,**?A`<)`@oq/ uc{(BC_% /( u^wH JB w}I [B L\0@@LNY LPa.PABI0F 2Pd5bPd⧀0h-`P +&9@===?KwwwGGG"Pa2t*5 :JBq5bP' j;uTCC`XbٳG=##e xP_ APABI0F 2Pd5bPdʕ+;wζZ==="p8ƞj@{333 Ì3ݺub%$ +ɠSa%1dЩP*C :D$|<LD/_tƍ]v~G鍍?޽{ϟoXΜ9r O@5õ%''[V9sUNgBBSO=ܜt)`^=gŠe2TX/j t* jP!%NQ#%A/kkjj/=#<<|͚5^i0Ռ&"s̉s0-`:Œ ԧŠe2TX/j t* jP!%NQ#%A/kss:O~]D L\0fT-`w6-[=Nipms4mڴi +ɠSa%1dЩP*C :D-` {&&/g?ʰh%͡/V,AJ~Qc(ȠS$TQ# ( u21( 2x0)fou__7Xz'ߏ0>&N:`0VX1{OtĉGyd(g8]`*tA A2( dc'ohhuرѼ{,lLw|k yOY,vϷZ#"`Yd{1U>O:|=UUUYYY9EZZpB^^^B?ؽnyOeџWZ;V\ JQa(ȠEA*dP BQ&Fȩ0d,@&d2^pFDF󳲲DԩS6l6?GMHHՏ v|Ɠ1ߜ7pꊊZfMNNαcǚϜ9sk&$$۷ruuu-.5 p`0.^9}􌌌ʕ+;wζZ==="p8 f2cx$J^R#L͛7}}}aƌnݺgXƞj0ݢE.^׷lٲ/ѣ}ҥKO>0FíJNNZ"2sUV9΄z999yΜ9"tRlۃ~1YSSSPP`4`E\\\\\{礤$q7o666&&&!4F{r>}r֬Y#oimmu\_|Ŝ9s4Mx4-,,Lp8Ga``bư0fq} Y20]\i}PU~dM{#?{:Mf]?g &(:MVQ/‡T7߿68œ? ~0*15 F1..nŁt&$t'?>妘wLU'tWEP#S?wߵ|n$s^5/>{1UÚݏmq|NELUo7 jSf͚r˗L&q\_piW^vZG 41¤OkBN7J#w}U528~U?W'k,bYY}l$vo}퇳#lCbJݥ0>xLzR_l`nM%S=L8.ҥKͣ 0u;'ED1qךnj3_JЊF>wdDW nwKxQD1iEF'&3[/u.W} UL6:e?yd쏊oXo_QRR6|oV_0U9?d: BwO&NӴ/wܹ m_>7>_~s_x'?ͱ\kq8Pİ 'Ύ(cu8""o1PA9|jd )zg`^_.}wmӾoCbj{w/õ=3Xikޕ/-д{[mh7ocs%&&Z,aȈ{Z[[^޶FGGHDDu{E06 8CZPY001010101010C0I477LJ:E0~'N VVV0I I I 0ٶl:@1++Cn{hCX =l`9 00|Ӡ@Ns Ugl=kkxEagYl{p冪 )vYvmڜYnwKx@ܸh׺z{{{{{g$uӑ#RrԢu>Sp+^Nl 6o.З fױx,m)pϞ]okcV')5A^ܳ΁]JV|'̡7/fb_o/(ؾ}ͲlCls 2;8%Sۅwx 2WWWTlܰRd!>{x: @Wѹr㢗3~Zu%R^It⡗_1]݌u6{Ir㢺jݮg+WpWF쯔+0E$%-B^RCjmڜ/xkeGO֖j}muv}aY]&j#d u1zj#Pvo"M)_:K)E/i5@%%+Ntm;'3wgrl*)RH]FKi^)){m{A֞ҳEluՒ[ֳUI/[M{!C6I/ЋY֜uūEl^hgrԶ1D&PRRR#H۽%M+_J՝:᥾"Ѯu_IyK_TypWF͹}ùd|KEο^iMc/URY]l[mI7m߭WmY~wCR KmHJay@^IPewJmSnufaF:)0@xi;]W%'ܿyRED:y] K2^.y9c5Qw3NzwW_=(URmm/R]%klx%}o)kKڲ!wRv[]^e*;j 0᝻6;kKm|y`n޼ȈZ[[u*(FGGHDDu{>iz#"YyȦʍ;]Z}dKnyO{s*7]q`ꐷMʍWuA/rh@=D~:;;JYD y~(xL(k&m6_߭@ȄДe@{?߲ uLRr("""4t0(FӴMBc5!'PGt֭P iӦ:x IL4e0LK\.MӢB$HF+ y'n[DDD{{_-ip?fe7IENDB`DataLab-1.0.2/doc/images/shots/s_beautiful.png000066400000000000000000004141411511411446000211660ustar00rootroot00000000000000PNG  IHDRpQ pHYs+ IDATx{\ߟm\E BDV"hh(:JYI %i^-e"BҼ&STDT :cm6~>xgs>>{9 IAAA @AAA:tAAA)"  tS!DAA馠C   M"|s .:E >_G<\>%sF^Emj͈w0wF'doc;6ݎ=Ex/jwv/*B c[EkFSzxAA _\!IVL&2 |?ᑿJ ->jKj=[,ȋ$$60@).3[ķ08%l""c!˜=#"+P1N+.?NAAQ>w'MbĨs<W>w}RD)+&98['CaŬ:pk};aKA鎅_R/ v zxW  j!TkIlS؁,_xdXVHJ,伞V6U-5WjRBXn +$̏ۊ&M^$I;(iF6 !yȤD?HBcwlJ*(Vx)Nɾmz@X"nQ~\R Z]_1Rd?FTOdn{0G|ߊr^i6 ^ǁv# (!xhŋ8&Nw6?y{i=;$٪Za'dK;Lن_ȃFHкmhIXSq[dsڄ&,zHKSyy70./X dqgPWgQQJIE |z_-gJK\i'vz`&;:mS(@#Tբ¸HkbVEHCbU1,u}1Xhe7!*⃊o ǀ ޻AAv\<3FEe/*[AU|w4U-}OdS~qK76)VaLۢuM~qT]6|0Ry -U4K/)X9bk=8>-r"%KdEZk4٩)m *EΧ[VczZQHk~AғmW䅭_2,R  s#$z-[s!U+&9Nfm;WHm5yc!ռLLyz)mG N]mdI,h\>>cńB=IytMH /҃>4%KHjMOomVLfas%u'G5V0L[; $IP<Džlchc' R7J?#Y!a pT X!ap`KBRTщ  ҁ!d'Ak [ %+ãEAy>0{FtECX%3ҟ`'E$S)ɶ%|D2 $w% &M?y$?*x622MJ@Xd-*LRi +&3GnR No4$AcT]ŸY哔$5\]_;߀ R@rOtQ0*8xB KB" Im" \::SIh#4c7 AA"H@7ؘčBA60:\4C%~q&6  ҽQAAAn "  tSm   ShzzQ1C} ܜ9  QYY>-566:88hDrtiOrrr:AAt$l7h4I `A4hPG  ܽ{廬5:@:;;6+CdMM :  HE.dWZZmcڂ  tnZڛ7o#   mhfrrr|||+ZIDfH$"I!A^ aann$;)eee2jlLfG[ BNN!DAsJ!4)K.sU7 ]߲3Ǟ=jUWq_}}}H-aan>v7fNъ=ٻ $Ϟ|r<=EwdDT>5`A!BANFƹss.r833455q2q¨QT7Q|G݂H[%C(YVVlg3yߎY[;?7ne囅˹y?ҨV!)Iv@Irr_0LT18u`Aݐ * q3k׶m17[aX;7o$Irs**H)ǏN?w0Hkjոr _pTujg<`W|wttWF\cyFԹF?. @" H'EItJX("EY[mmn?~{h_mmXYA9Ν7ԍwoLBjjSq6_ 㞺T=}ap6A  >|x޽byP(l]:`+&e|9[\P\]Ƽu 5U0yAH˄i%*>]2>\T@1T(8[2oK4`m  QH>_:lnD jkBqᩩC/\XzTbԁFODYuBR7J-C@Yal6MkW}a .֕>o]XNYV 1yY߾}{O<4ѱL.\YP>WR\0bƢ-'$fCA1ūӨnfB0-iL[ped~1Fd*^$lOgASdO{mjj ?olnmqۚԦjT  ","u @!?>UHmhB<P), )2_Ky!Q FmPw{M8ۇpGc+HiR훲9^3ewG@?T=+7 cbZn#Hյ j˼+&ʐjG4%ɳobB0,=iY[t gK\ MAA:"蛭(o0b "33+]'*/1!XUYqNK))vv>_KKLů;_lJMy',#|rq?qQ X} /Wِ\[76ԌMg]|j`%qB1WLCaL)^zxG ThEi4ȑ#(oFQ Ǎ7V%&!>}z -yཀ~.\KŰد~jw>o4DyzOohhH~|m'ECNh;lT˕GKCmʹq%t+h-v0W+KGb-K$<^KDhr`_KVcSBpU+Y%%ꠏ ] Jxܹy7wo4_I {M+W'u<{W<buf{.0bِ^dʝ'{ngԚ˄Au'WΞ?^ TRZ<>BHβ[KCIÇ?$9/A۫SvNQz ( bV=͒ӯS-5Ւ]}]U%#HڵǏoG?y)’`JO$9El˱ޅdP(SMYCD, tT8֙3O/( [ߡ/UPWW2^34üJrCC#0뱢3)nى( IN.%SˋnewZ|'-XymM=lDTMon6+3KS_c/j4 pgyØЖ"APwYCKB)c=HcY6vuSwW0@}鲌߷;=Km 86\հ hCH-QV3B뇬%6t=^0YTLHhї_V߿$TZq[`EXF^"ws8,Hm]U46uVbg2:MMb?Nkvkd+˵(Erl[VBMy%5h ]Œa>,4A69J$ϞA<'PN  H!lnPWX]S4 Eݰ-n bVCC#A}'OW^ʕZ!N~ Ylʫ UqNVg4wTsM=/׾C6<%(;H$IEߝrOMT@+cKjÿf tbr׾kIFiw!Ah  B5dl:)6|}œA5 "_}s.̈wh__QQ0^4lPљ(++Ӧ殟~=zЬ˔y;:=ݸ'6g1\l7{UUULnCmlyYiܿAe3ׯ+ljoooo|A1$#Vֺz`Q|2 }ISg_ I,$CJ^"I $I>hPrBig^X7%C[;zh?qr]lfOGvj?~zTA2FΕ9ݸuϳڭ C}VXn! bT4;V/q~;6ҵDp$AE @`j"AӧN>urUF9;[annncW I-vEdM$ Q4邟UltA/w~-߯o> Nk8C  ])A{8s{Ȝ86}`NUhĿ&6ZX7N rH8M@ZWAANChٷqPMeC@|1\#AQVV&  bTֽ-Q{I7%uC Ioeح& &  bT!>h|yAcnM@H"`H#mn"Gv%`vGkkHWzAAQI~q-e `Ÿ7}`fR^HBH08)]Z~,EBAAMI2{Ll eI}~ߞ+rI>='5`'rn }mf?mbt$o_5z--wBAA:/տа/4f `YvUҎi:!ġ 'Gt _1 NzlNd˯ʻyks"K=VWW  ݖqoL^o9Qlʸ8? q H_7ۇZf7#^8xA00p᯷8$ {H1%+ka[>6xc5ɩ FeR:{B#ߛ#pA>T^C_@ 9ǯgpi s:!ea}CCɯ}۹_߯V|nն/WmZԹ__nW羗}r}CCG[ BSSSqq1_ 1[ A V܌quD ]rb])%IiV(vےsגRlm`ois};#U)$򹬓s~,NVZm$Ik،}g=_Vޚl[΋zq7+I`/8/qcl%?>1V$4z~(ԟA$@&9&߽Gӡ;U'Μ:i cK8sR%|%H^-!t_￧OV:u?wԷ IDAT]@hѝ;w:^ On[yŎ6 K3ZN<}r?Kt{ùviNP P'd0 k~l7s(9wp=o㽱u~ůNs"ߪJ'Fi-v[E7K>45IP'\_.]rsm3)а&S;gUWWݻ6lذrʽ{Ν;>|a{aރ8}Ƽ2eQ;ft|EK {۩s=8Y~qq>ޅ1,I@D { U铕R ^$޻037-E{{{kkkug{0f UBD ]>¥Kת r9,]6z>v}&Bdt[ܜٿY1E10SNmx}wNN\žBK _\yE"K)S8Axs1[ r^ ,y HƒC=v/b:>BHƍΝw@ܸqc3/mK?|GU_N.}ӨC?K I#ILI-"?1cz8kXޝ|}$9o_\BƉSO )IFNןJeL~3n5&B 6~}ػ jP_zyga"5d9QI+W@3'kւzM?E|8)< #iuYJMMh݌:'OR>!h gknfkjGˑ8 ?NgiW~}TM#%X1"8< It&AtD9kFbL #CӸ5SËsT =_y}js'sKf ]z{2]k ^m =b,"'=tۆa$ g툉`g+-c\L׿N/󋩃BJӗIx63UQᣬWX>}I8D ׇܧ"<̓N| A:'JoϞ= 3gΤѴ !DT ϟ|6''1v뷟/Q@+WF}"PEU玝x[p`Sgn.|ΡN:eu)|\B;@Q='Q`ggPA9z<+߶^fԓg&Y[v8^=Ue<}bO,y|KJ%Br8ADwpPAt1b7Q?E>]|zHW'{f :q!,hh$E,-h; vraf :zoi^6d^X"KK^Y#8q.۟XX4ΆFAI~qqpISi$ &3-XF1,PU ˖TVV$N(oO1el'6bDԨ!Wٺ,3[q3StbZqiV  zxN<洵ߛya_z܅w =xー^0h;$\ KR\GC| hI~z-[2e̬ 49׮]_'O^F4 >.zm8I0H'C1ď2g\ZsjXG@]S  YwnyŽnۚ s/;]` gd iErN_DAZ˧07 C 6}A薏LxCӤƥU 4̾L6eX_:vrK7AxzrQ˖ b 7zvq uupBA1 ,"JЅtfd A.ӳ 1O;tf%{P4> n[ +&"t owt޸_DZv''kyµkVɓ'&.h M |\3[>2b MVBA##} AhDk tjzXn>x /"Eܼ7N3XKPXs3/8 ^$B$O$`i bʨi B|d:3 &5.jMmll$Irs#RR)/rC{[&%! \[n HCv.(:AxѣPUN(? c<=v[a ʥK:ѣGkSMCٳui9)c*R]An#r*׼_o?-=]O3,NEڊ4i *)`㢥"E($x4`iii~dKw5|$)Қ.: b(v]58aw=fvOqS/w;~eFIB Y,)tsN\v-MԔ^zRLnȔt@E^՞`0L\_~ʧ&ʥ{y6+`oo?|GGح~< ) ]PVVfggS',>xM&'['^3Ϝ5ŽrQI67vLN}A<.]5B ǢH'N'IF~ {w^++!C?~9$=EF,-,:BA)[N٪\NUWo*,6bjŵ/2M[>24~614!eT{Zcy2)X9jԨQF*MECCe5L&mwr=3+t' 9E:,|"w !{0R~8u黙Ce8N "Rl@yң= JN?Dw uT{<G7s - fa14M? :CM_#)2ʊ]S$p -[D "!${DDr +&l΋${{{Iz-ȫvUi43>_Ԏ`D PQ$IA#*P=(SGτ#-^: [ ҰZg@lΏM(*Jͧ"ZUAA0Bi#Ҙ'KJsH "yTEBs2i\֬Yc-l>"=W$nH2@'I&*H%@9e "?bv_Lr܁ysϨJ( [ih& jOV`I;&gT:i*!S/),|V gB3Pg?)s~Uj#wGL&:TDP|aL&JUA3~DX6-|ḁG%QSC!xQT{ݾr^$3^\=[La-wCgØKn6,CZ]nG-f΄#w5ՙ& BA@73Ag赱 2>2i\_̖+Ƀ$"I:/n\ 'gDl^J^ܒD>_c˺_simp H#o.^OXEJL+[j>)!|dd$II VVV^/P))8bbJdζԔBGl{i~tw2{KT7MjţoSAGjb͢ItA5ùs F4_xe6}ɓ'HTH;t~q1-T$n@J^ +$3YH*Rj @&H$`H#gT*^",_8 0?g6`~m7w۷w|Cބo6m42QIqOYZ63E|j;F[L{/THHm~ 5/w;: L4/vZqqt I"͚Ϡ2?v JΖw|`D䉧H';E6kejJU[,OǨI\>;,f>{FDR O҄' K@v~Al+Zeh l v5;wsi8qAC.AU~طYA(Wa e\a141ed~իWM>24UFٻRN,$&ebVP2GŅD0r%@/W)bψ^% ~q,ĴqvuDR 5P~RY>2t= a Aooӡ * ƍ!!NǔQэW>x 88}!*1S٭e $X12i(˨.J-&BjmJUlc7eA( 2BB^ۿ+xt7ch~jݻ ((˓'O ,ϠAPMVLr\^p"༸ 27GAOO#… Ta>},--=عsgut:bz f@Ax" ّ$i MA(|d;VVVF (d v##}iy@y/^՞  M\T[K%+O<AcM$I2W^y%44ڹAAFCCCzzzCCٳg dccSPP@8sLZh0e4[ʨ5rh\6Nq +h ML5MA#2*oߞs˯Emfi,lzoGӯ^xbjvG9pQt:m̨-oiaс"tˋGPURHH1/2艦QPro޺=tE6:ì sSQ]y2`?|mn/ 5{P}q@AEEwnhA>n"C"uӤ.h M vUF-hpW>2UFMSPUF59ǏyIa>afc '5aoA#^)//ONV 5|,=q}CE]rmxԢ\ILu:T cy\مku2CR(2 IDATArܸqǏ7|ٳwޱcǍ7::))RFoܸQXX(}Id;XR4qiAchbʨi %eѣ=ܙNKCX2N@t=KJJ\\\lGS^Qaei)}I|ټww,i;T`H#I6"yܐR p fPLJIH#JzB%|aʻQjaDDHa'A 4^gΜ# iӦ .œўLN;hҥKmjڗޘcӅ1vf O<VH47^>}ҥNVV3g^]]b,,̵$EH`/[??S$&FqyxiPyKVNjc /2)Er+fa"+W`t?Ա%}|\CvZ.Pi C0^a A>*rhdSkkkuZȌ=ZWyMLmݻw !&0wM_%8>zKtpmoǹw:7%{4cpKAKPVF_'uX>Y%2gx5yDpdq<*H am ~y6 Hq6|@b"TVjw$&|ܾݱL5M2>Cb4&~>6BXUUenɤ[.7#Q٣nس+lKՓei/L{`K[6!16Vn usf6 /Z_bFJ6:ˋ ΋+LTqH454cg`k,OBLE}iΝ lL!?ްv!HS٩GDChee%l'I>8ZGKg(ge>2(֊nj 4:XO(sua2hT#o`Y}Z{\N$Ll* FAvap`0Zb`8m/<`0`pcg$0e4Oʨ4fQYW ;[:4.0cbTAchGi 3.j~5 *J >=-/Ȩ,Cm jV<,ya i43>޽gz۫IF&y~KXJ%|)S^ =-l~aLXGaoYYWoo BX*Jx[8>"ymAqŸnfDv! H !!:x@?!=3xP1vD48Ǐ/e[0GVpE#30h x oajC6={-kwϪJ?g3Y|(Ids?cdA0AD0eư@_I=A208p63T#YA1pmch.zm A`qBd5ې2=QQf}f͚so/qtQ1s_P_f͚~ANeϿH$Z$j/f'R[ j_B BirS eX!a@ yqɪAA Y`7IUȴtttz رcRqC e)hUFG|ɖ-[N%O,x'w⩫H~777{ !5Ӄ/xoц+&9#ғ4΁HOAA<|'˳gT=z4kg0F=i%vڡ>>73Rɝ+5)%c?W^|>„ kVLAAGqKzAyV) SFI4RqiOzp]5[McC?LSX)K,)(()))ogm1zѣN 4~W^y?8p`AA Y`7IU)\(u֊ʔQ}M\:3e)hUF;wU6mڴzQFtpttܻwuYY+qBA@@H<0F꠺Z2T"RUQQDss3d^tj۸tҫZ[['qttWijkk;]A7w-[AYYHQtLi v铒llllll9povY/1cFzz_pvvzjXX؏?z5kp8=z$+;4"/\zW_}5}?յRƥe)ϸliѣGRqBJS P`i vQg^zvE]=mP94 6QVVvemMy\$h M(3MH'8p`RReAACa9?SQv۷O:>tg yѣsssjXYAܐ(ϻfy. ]m5y\4*a}Bj j C)Űď24*]\HjcSSCCcSSSdR2Ç?-K AWgOsyKK{XX0rKzZh Y`NMMML/H4Tʨaw;T0qi7AchGi kc͝{˞~z)jnJݴ5K8i" HW]/>mܴokcmC͢t/]9U NܼyS.Wпv6ANDWVyϙE'/rh(sڢS\]X]#V.=d2"5%E T3:]wse BQBjSZ@\mh<<Xv_mm^Fwrtzg;_Ur~r4/cM5ge!ed2cހ*7 C6Mm\AQfK7v+*,-//5h,,Ak'=bIc@ r7%t:-8e)J8tB%NdJsCGK N<<4 FȞii1<+)ʱ5GGG,RAlL?)*SFƥe)hȔQjl()cPQU5__Kgϼl e]CXXk~twx ؈EQJ%QAA ٓ6Qt0&p0K5uD-fƥG0ATpV΃w jkm77:8}lC.l ֨ʔNuA Q1 ?: )ӧÇK_ j ]nrE^;VrI˥GwO yNsE %rɧlf&"P 17bjoyE oIy?+ZkEZj+-}[ T\ jM~~[$yΙy3}yEUI7Ta5š_5kJ}" v*lt;gr^Gwl!gN>dT4tsذaIL/ud$PU7c!e3)h6fN3M&ُL6%IvL8?4*6vNoz@jg͂'=WXjd lll6!$KS]]FJrHv]b'02QN2^/w3lf=v{9Y^d55uVLz--"5UU̢U;7O`Y0 jvۃظ:C/H37/Ĺ-yo"᷷vv [_hl" ߪgt}ql΂2xR2 b>l)7}xK<˰GEԀdoTAyHzAn̄>i_ 9W Á<X 4twiGG0&±<eRC.Y@SS(OR Y'PQ o]zXŏ& RrH WXx嗃 @QÇ#jHREQ 4r+Xh z.5 eYOȸmH{!I˲Æ #eVKj #u#C-UXr(rK`=8=k9½m=xA~a5  B\_]kt]b_NkT8+u !Re-yiE!2tiP=gc!e,RMPo+c8=vé_iy06MםV%$%I4  hzMo:{Z>axw ABSFE=; ~UF} 2ؐ&x[Zj zNYl7NtփǑxPA(>k}o mб?ۖ. OsVp0dbJ,u4R^G֦֥B&>)0.p~5N\n1vf8&[VAT^ōK\CGR2ʭ!aâXc&55֚0N5x!iu32u ~hg?d#;k뀏V`<{Ρ}3sɮak  vO7iF\-Jux,뉥j2@a0NjEneqňr)0YF47{mN7:{WLr]9t;GO*c^[]891zdB?^;}+T.fVt~eem(*(̪MPU4s%-fT^e13# 7e?wB厊yH9+ ;)︽<Է'z]Z2`hЅ <[O2#E&#E$*HCt^ , 9Ǭ.{ceX۱6t{LѣG=:8jTʄ 8n^:h'D)N o]8'xlܺeY |qs6q\tqírGE2 7wWZW_] eu\E; G9;137Qyb:?@0nDr7=|RW_=ydfju]]2!Q9yB`l*5óDCFy$CBjX> (S臌گ}q6'o;'o3=94υJc;fl6z4d28dSd笜9!E_Wuo`&2b3f.{V,afN߆*ov;}B]T4Ž#?w ;Yz"DdPWDٕ)P,`:.MMMA ~QB]tCFYMOOInĐѾ2u ~Q[\ARv,Ӈw>ۼ#ѽ sUczT&~Ӧ]1##-5Us, HL 'KPsamUz@iVhJ IDATUn WU׭&b.uG yY6.9^GA6&:M4cPd V(HtSXB{"_f߀5g9&/g}&,co]|Gwr xMcG f{/B(yj̯n1^P>kzy וTCVNɶMu55VklfS~G޼P 1;*"XD`:*\ݤ[o23kaNb\577sD )1B2*#CFX&>)0uQWs w:dgu>2[cNc[X'8+u T.===|…dj5Fl!Cp_ &CF4 (SL^XX05+=WsG}MHV". RC+PV>J ^9!aaZ$#5 x^rrBkk+4 u,,aMP:*X (|xcc,pʕ+VPҘ&bt򍉒0t ^;Zl6@ss35RRRSeYRJ7+ұ YU2PU,KcYVӑtuG&0O PӇZ@E^t˲C ["C j@=³ *z֥B&>)0Ӌ5]5]H "$8Y8bYk:dz4`l{֑͡W4KGS9J$;u^N~+c$mt08I:W0Bcuy!ˆ45grrvܫϛ|}85;~?[GA Ki9.h,0B)P~]330kގ;9*Q_x:CFy)FCuc2u d]-nW8tC[,>6{BƾO>)Wd2LVkLSkLS3|^ +af'ADL /s˽_ZXVV2raR@µ:!j/Oj4!RYFqCFL&>)0:YF^[XfLL/v{#z5m;gHV+-Kfٶ,/.րEm6f[/k)k[b%vvxۂ"z)iY )Zbb4 ;a )``@?N^NF[)RX -Ry(*)c2,[^^k׮0sow U2"jvb(MŋnYut$&n[Y9jmz)1^AHV΍0t lcȟ$im`vJհfM䉜e8 -nM 0 `!vj%ݝ9c.'rSBpilgNa\Rì, x<' DCFyc'"*ch_G:F'd/z9lbMWW/mnpeTHmo*PSϒsUX`9<i)UUKM3˹UKM7yY^ΕtL) YڃaL Z^|9"-kG ,iLդ a[OW>]1;]fo{1J*YKI͐!C"I ]^.z)a]X`,dL#2}jLɣGSQR&L5jtOvV-n )RVPT\>{oIzf[UKM˪J֯mI'HLiҼm NZ,*.)e-/f f[OX]^:j=u0KSo[Pڒsp@>QATYû>ymF:zs\Fjw%&i4_Nnj ^~2*jRy\DUS12IegRl6Qof4L&әliq~fݱ=V^n )k_|FOYZWa)ybGNo(E8vOAx4Ư,DMh e4 ̐Llrwh8+u .¤&~2*$˲---Q9l[bnr̺cM*3k5l_qd2ÂE"K}O= BÙ D$:'W\u<ǥ5|ᡤpiS/*־A%04h @¢,eP;䥗^"υ ȥ6^ѽa$v$:דYl߾ZZZHZQax & Yj0v\:wiI$eY*!XP_|E2/Ԕe٦&r饗^"K>qku|.hy,)6l?O.RݞXeӞƸ,;[;iXgzBQ )K1Tg^ /ISSlnT~@H:i= cl n/T7CW2T.f~}U݁L/1 9+V\W_>}zMMMrrrjjj]]]iiiug]tiEE7\]]m2꫙3gn߾}ҥ/O;>7n~hmm}?sEEE[lkϞ= cƌ9~ ^{G}޴imvM74ʉ'|%KKwy{7nܸ>G)//g~_?C$k Jo2@E[SU`l1KIłyKB"% OD$48 WۄM?ަP g;!3-!sΝ9sf„ R /;0ZC(,+׋w7cM?ZQ7dt{~J썊5+s chMpr #L;QֻX|uuu@{IxD(Erf0mmm1QrICF}곿XG:F.C8"n /+z,¨|(.\&b6p:]*5̚{ZiC ֊?055UThdv FT )TúXG:bQAhVhYHD@z}V(P J4@BFرc߾}QH(7}]^`,dLՒeTUG(0| p8Nήj]7y0` @)P~]u!43M8κo۲e6c2J+5!NYQV^+QnA|S`4CFEHLO/wj\ c֦/?եo&z<j ʵe}x 2㏫u:ȑ#[<.TU1vWTH`}yѡC΂;+T;$ Nd`  %3w%6-nW8tC[,>6{B٥T\ba^FO_7=A\uәŕCu+T.Cr1#FAT͛o9jԨx`… V'`:JKP 7eT.PԥIm6Z,)06! ȥÇ>|s(yM ?"vGRl6Qof4L&әlJ윕SP1' O{p^:(7k /\tV4jNHSIFCiQ s1s*ZHhxGKPJ_,ob*V5K }ݫ$3R挄Æ{`=a c'<{S?c&DĭzdQB3e ᔕ mt6pdV" A=mmno⋡x~tϛ?<=v{FP_?|Ŋi.̘xՑ&[$E;Q@aM֯>v,֕H7 T2TiQ[=9^G1ɑ; g|af|0&0̐&<Θ /<*  54 HX<2m^,f@\x` e28ovgdsqc;]˃-eY Q III+ٹpnw ^VhH^릗v'8t:PWQV&+3sB(UlYf8Pآ~ݪMA{/^1y$ uGŋӧ68::ά}Iggg6~/_x>W9RV\d XȌ@Ẽn{ܸq;j\XY,ܗܐP4-dsQѣD:.WOKV6+!u4  (SHE`&t_?1BcHZӣއ|orm遂8Eߒ$(GGJM g-;z{`fO?4o;a>\oxl;],٦o{}^>Q05:J }qMZ຿@IEUVWI)QQ;9 S0uԆjss%u._\XEoXG:F."'\DŽźKrh\3Y9xKDuӳJ}[w -3+shtn):D%A ӗgr} mgm[Y{챵kGk( 1v)7e*j (.T?pX&(gg]khhg C oJ3%UABNDHŻR":N2_uyܦh8㋝iX***nx>gNRJ wNj㬹6Ec3BħAi% `;z(X#t ʯ!u裏hb(e͐QA5 Cwwia?^k h4.]|Ŋ$c)P>dT4:4Y+ Gri f$jF{CBF4#E$"T;2QNQtww[Anܸq\sNKMMVdɒ0a7nڴiͣ@ žLR 8jē GDE10UjDH;  1C'&&t:eziz뭷z륗^5H OXȌ@Sb CFANILQ7M ý3 zal'/)(b|=zT4XK#^ɺڙ{B&>)0uDBAD%L07ި^r7xc߫`:ʄr ,簇X(RȨ5 ӈ7\\SM :eʔg7(zIHETmc!e! H+O~o-DAj rR$}KGTb ESyi$!S){R'kAv]]]ԜF %O>O/Ҳv#:" R@uD)<[erBKK }HF@O)E ǎNJh|={Μ9kɺ'O|嗣"P~G:bh8|p%/hZH>/K" 28+u ZUCkB'bQ笹8k, N2ʻ2 s+þB6BR >)0u-nW8tC[,>6{BƾO>)Wd2LVkLSKd>r !Z*:  \;AUY(4Z[[z-IRRd rEaҨgHye$BAfLL/v{#z5m;gHVLXfٶ,/s54މ5kJgٸhͶ+s6ky' WVO:aوYO,V&! H8+u  I "rۨa֢AV;e~m۶)vttfdǏsRy}xeTqʕ,QaTH L#Y KKSmrle0驧cx "YU;7.c5mUӺly% Y,^{"WQfME薒'r;,AhqV(\^Pѝxn"̚kRÆar' f3OW&S)S&",Bճ!ܾ}7o׿5 (S mt=ˇ7~{Hխe ?g?2ut:F#uz#@VnšޮU;k{Y4#\gYIlZZhF΍9xQI5u#DA |Z#BGm!B;JԲ1E#׫dt 7Jhl6gQe|… n瑨ApylBB'=pycVm1G=zNQ)&t 9IH5=YmA%EeYSs,DFmVAD RC#fHYɺ/l6ak4H^tofyPN')wuu$I N;  !;;;,l6rI,N8ȼEe=Zwww7arK)H}d[ȑ#! ȨCu\rJ6(5YG|IV6~'Ùd4fyo&t&$;[&oN.m4\tz^QE"X7E ,RC#fHYɺpkj&%| YjZRhy3tPbP{3C8tP6y&$$d0W2e^O*,JOOX:Jj]U2<$t t RSSyڐNpȐ!NGrW9<}_~dN'}oz8v޽{C(DQCu U+VȴGAKom?wYawcj4 W6ŒWfdgK^I&F45m9wR#\5p n#0X P%H)#AJ2sriy* `Bkd YfMmmm@T"bݽWuǒ{wk杪1m {Anc%XJX_Sgˤ;ʖÂ( 7/45fݱhjAgdEA$*`j>u KT%Ը 8k%\ \+ R{3y)2u zڄޱ2u zk}p ]tuCU ,WFd^n鄪=n7huGoFʕL,nݾd2%∻#k3-_ݶ~PZBNYYO3-'U" A$ݝ3'L."QSSp]d"<5];k2KneH^x/*%wO(yyyϟA(cSF,DuV;2QNAȸHr$M`=]ƎbY%s h7vdYm!YRU," O K^[ 絵|u͚  q}ǿ8AIN:Ƞgi*E-0a&U :)?#aPG5y"qG LS׶ 4iٳ~}sz[3w-SNl*:x+:3fTys? :`]`{K/A+W/덍9c!3 /L4}ٴF98kW޿ܐQJB;Ɲ{)l?'k,XaY9m]=ϪUVXL:::6o\\\D >)0u:/e|}:b{wڷ K^[DZo(AH`;m~kl﫪b3wfkzM9gN5?& FYœ.iii 0"f#ʓ{nɓɳ yCR;B===/^T(e%<]To `{}t/SkxsE+d0#cyx<~iBx8I=$-O=ڿm.oUB"ܓ \Ō=muR޶P=Qas-F8vK+gBGwbMPU#iH%] m\c]R֎d*)K?}f*Y$ӬkO8!gNRKUBAtJJyB@& \OK]x~ˠ#~y3 *3mlmm_S2 WIG:F.h" Ftkh&zZf{n)P`zKT2 [I)} /N)QPxdan9͕TF[0mE },˪͓)cZ+2u MȨ ;) T GjϿ py\nhd~kQፉ A$d t4&YWB^}%5{b8)N|Daxyb# 3Ҕ 6pe]m}G)lٲeܹԼG y:Ǝ+F3F _]n9֓:lƌ;.#c|Fq-[S(:" |߲вD lϗ2^o[IחER@ѐQR5?@ [IQi ӢJҤJ⸖!s&*2J"Ș^$ o- !R{>麜>}j|SjBFZhkĈmw]&e@M9{ڑW?UWbw3nj&D 6ݫP^6ݛ> fڰyY$LN n^z< k&{/ov?v5$2Mш8+u dBFEPzkP n5\i! f /?sގJHII -P1Q&O)0&{ K]֣i6{Ӣj$5EĉmߜVGӧO~esOlj}[ 26\5 #@æ'* ~u`s(|OSS>В_UVF& ҟaR oMv'=y8m}v|]F[j|IGUAp[[2%GYn]y+ܗA#G#yPexES}JM'1'w{gT+uӹ`C 4^c>a?ЇmyHIS!ݎA8ŋ z c z2p߻[-<T~ Rpvjmpw9joP@d֯>7qIQ@FђϽ*oDdaߧo_w c;.xz#+u?~0H hrKoeeaӧO~^Gk-9g-g˻>n߻[YRp˯ܳM +ԧJv`=:q|Fs'4lz7,^0t혥3WI/d tM!Պ*"5:{B M%y Oy:::@`* lc*4)0&YF<^W9'M❙pIAdmzjjȰL;^} odxԟ_e߻[Z2DfxԗiX IDATa[h%lyYG.B|Uk%XGC(2"ߛ IXDƯxL3x F"  /^TƥxN!|y2PbR*T^1Qs:TDy'y) dwTL1U=䯽#E gkErffm~&7$[~UEV Wܳ'ZY"8O$dV[P7-=a{hR"# g"@t"" ca cE48+u =kKSgf* mz5Nэ KKM&&?JMMN-Ao*ŮX| NZɓD]@Uo \)vn;UVO|PTmrSymA2gNRs2Qv< V(+j(ȳ`s_s ~4E&(999/^$@tF* i  H\xv׮]"M eɺ ^Pe}}O"Յzf|EEeSE >dl$-H9>@ $TUL* -.q(5Bd~ ॓fox,[1xCFP(k|B/`: EgUBS'<%e<^8) ôC.\!R76_|񅌨 zy{){tX|!S:QNeAAYSȄZrM^@aQb6б KyJ4UW]k#j*4ר%c-$(S?;ɳxf2ʛ#-yxe!@ lkks8ϧ?*$$NigYܹscǎO>j^7lmmaѢEVA[ʕ+zccctcXȌ@..vXУų=.P6< YRID3,7Vq鴴4QcF#$md3b :[ԨځA׎ >)0uL*bXK./gb[:#cҤIH*A /ih;p%ӮLqVHE!媢(WvnWP.PX0 M KPL&R)egg7!n"skkk=z]wI))‡ŷ7ȗ~s=Au|S`CFYpAG^?m1 ֗O\ڣ3{oAzT ,g9#tCYVuI1y+3<ɢ6t8n^D(Hf\rZ%Rh› *%q~KvAA&}YS 7dTx f}V$D1 ۷/ԃe\X#iHڟNuuu\KF@< (sysF` LTz(H RG=yP2>)0ӷWT;dH+h" aòmcG0H odɒmB*PT+UW@^hOO)twwzzɷm ôrMÇfȱ,:Na Ii\kr6 RRREvep8HTMNNc XX􎑙R9ceddpeY͞oKs/S&K0wfZZZ4y$xڒԨ3Ȳl{{;ψocۦ帩9r!dQ:!u \b(!Nh9:O=OU=SUwyy <؃z(+h&TYY ].))aŠ Fi*>PUsrt]f8@S8 m 02`P(t]@N*((HkW~~>(++cgR~RUUU6G[WUUAj8G1;#qh^^8fb9 o/%8s&.[OEEZ-,,,,,nι)̩tn@r+INiҚ8dҧ@qi3Kvfh-ڍ)۷iSHciZ݌l'ڨsZo365 {}^٘@4_n =N3zJ4$i-s|AU!Ss+I DHi{%gu*tݦSNd;i6;H+%y,7f/ZXXXXXXX_x8q!L3"xEq1@#Ƿ"gW~֥K@/n0~I$sٙSSQy&qzp---nvsVbǎXm;A"êhFԇ"G"lM'G85L*M1}aC9TEEzu؈Sޝ7G9Rϲ"b]ͻ V^kzguڡ-BRF)aQ>(sٮYfɒ%?O<fI)$I\KO3Ϭfgʰ^C@d@m-zٝ@('FWYn ݍ'MV(*.a0mjNsiյ)ؚOHu)anjJ0.Iًx] b1#SL D>cv?@y؄:Is09E5aQ/͐Y9}P suO"6*7~1O;-%-zɿ@ipYW6R,ZNfRiӺp6~h0F%U1qz,'n> ͳU_Ȁ9dP_kރ='M UFlI[ގMscƌI" HLLR)~W{=pINc"*MO袋RK.3EE#O;5YXXXXX0(?U8t-;F6E.7`셒 n7qWph[OEiڍQ怿ɍ4m-طbPLe<`-z)'Nꪫ***hdذwoW6;Zօ򲲲㩽ʼng_(SR 85R5 5QctQR?Lɤ9XoJAW󡭁eh)_-dexKYF!U{kщ'N81Woaaaaa*N̉ gex0,J6POFRdT2'2FPb)SF3DH%V<ۜL&CV7 \;b,T(ImVWW7ydo_e)wWm<pӁ㦒,.'sSO=5zO}S~*5|4HgQz0 Zh$~= ҩil-J{ LI!x؎;)!¢Q^\~]&V?owv6Sf#G9{Cf~,FB,g8W֟ XeDq!5*y`׮]^FhG3 '"_*t#f%4*Mߘ¢./(T$" )9_-9*ov\Q[@w͚55kg٩曺Lss.Fg}V`0~z?jtڤR*ko>{n:tYf@GGK/i^ :}l2(--mnng.] muu5Kֵ}vHHoq} Yx1m1qVX裏X,VH$ ϟ?_PaGG.9wN}rJ|rAO?Ԥ/jg̘]З֮]맻dܲe>x7ngqfϞ޳g~q᥇~XP)USSMUĜ}{C x\? #p8\Xrq r/8haaaa{zD"***Nnawέ_?_ݔY/鶇}dNDtvv=unmcǎ=pRSO]~g?Ep ϿkΝ{ǥ;vk}ݯ~/73gzK.=z>9xSN9.Zp7gy殻zG/ǏUJq~x<>bĈ7^o7)R]]}嗯_.[bŤI.\8qď?xРAeee{2eo_X̙3&Lf͚ɓ'/_|ҤI˖- /_~iuttc~]wҥKLoӟ7oޅ^X[[8ߞv$̟?ƍrˋ/x]w=_ןy)S^zȐ!Ν{w<}/}K ,83o喴L>}`W\qŜ9s㎙3g~3f̸[͛w9444tvvuY+V׾;Σ>o|㥗^Kwܙ?hР;w?[?F-,,,,*N-M'U|?ڶ;k<H 'YJ̽JѡzMLgXt2\7JQ dŤVFtthZ#;e!{@Yܘޭn)nU3!b-Ay \zݖYonǷ.K/w;q0jAtfTJT[*H5*ݖKJJL:FOK%eGEvNNt;͈Ul o ԐJ4v]U1Çwyꩧzyȑ?u[XXXX (ēC"{ԃ+NP7R^>6ϥDO?3򳫇ʱM{g? %VE(ˢL@u~MyWDZR7f- .aÆ3htW]uUAAAH,AP 9 9aKf'%q-軷@1 Q;YZjI>\}(c1i~ߎD"K7ğ2B!%x-rg>묳ƥqP℆]/7.31b&POʨJizIon!>zRoYōסFHgK[/C]5{`y*v>^zi޽X6N We?(l߾wd_e)0~I!D477>p8 @aaaIII藰yV9(#@S{@ \1ƠvNjexf1-acLI )** 7zT4rFV q('V5$ȓޱc^;VO: LbWYn ~h4mnng۷QF˟{x<߿ꬳBPn| }E1"3"L7V* EI$b?"(v+x-#Ii Z$Nn:V.- uR [ne_aNmiiY` tOt:^[XXXXC4mZhcOߴbQ{KS_<+hll|d{&0CȰJr \e=N2*$` H42c/0tonF۷G`+)Lt7[|*oL.=g]Ia_e)xZXXXXX*wܼbQ"F>ܻwu]sS0j6 :::9e.0C0/_umf܀ 5O@2i ( M /68|p^^-@VL(Q'"2䇤QQ-d֛MIS6G]X -~k1=Ioy$*NÔQ)W71)|> RFAH[B7gTV6]SWYn ra8ɒÇ{[XXXXXxi򅕕SL.9eʔݻwo^hU,2GSSSV`o@+S}ː]526P(Ic1oƈLE֣. B[ح[pEeo.C'[ ``0 'CPCC!Z ~]&'cPhĉxf˺[v1`x㍗_~Hr…|YSN7mL1e3ܘ^Jd>5\lC.%-W9x𠛙h@@V1 7#S#oC,o@L^D WY r( &\r%cE`683ڻ:C~2:@#G :T9u8c鶶;w޽ۿ,jHRSwttKш>L)e ])DP2ޫ4L4뵢JpX,/i+JJJpo \803&@tu=8Nqq1AUqb!օFQ]C a{얁uh\Qօ(*f{n9ͫjiiaVbp8̾`73Gѩ}K@:th { -#|;vG}D|UPPOvtt,^N;4?ZXXXXXh7W .֑3 i!ܯZE _XX$8ȧϠRii)U޵)&eee|M𒔃͋eAzˠzo qRun0st$Il\TYXXv1 e]yyy1vl(|qq1K)UTTy5j,%v ~qG_h]'ͫ*--1N Bx~)//gmTJ] oY?fذa~iB>`]J&x?$XXXXXXXP <+P`V]a̙tKAsczY R Xk(SXuXOO;e.8Cʟ)*^<4ւ}S̄ Ƕ݂8RDzU2J1lذI& 9&옙MOz ڀ<#Wf{iV$MI8tЭ84/==:o޼9"߷wQF|@ `w#N?v姰.vNY̙3,Yb6:dBNx#uٖn 0)kan@5B*qj]:5ʏLyo(,({Mn}8->-v==0q۫{hmmݻwoCC^귿m}}}?ԅB /pذahꫯ?~|n;aaaaag ֮]v/xe3J?عs￟V`֕L&4P J?kиzӦRu 1%iH<'Y[C4e,/%xmP䦰ጀe o)jiG5K9<\InYnݺ^xD"a*ĦviI) ?% 7U캍[`g> ,\y L"f֭[㩤R* 2`l$Le(9PfxYd1ǥe-~Œ(Et fq'Ry1W{ng$K:f 0-cmP(VF(y` A_"1Uui.c&R*'-e^Ç~4QY8m(VRg}j聩S6551=r nn=S zwܙE)',+b|v7YQŚ5kF9|nd8p/޲eKV7S_0;G%u?+Io|2]XBhaaaaqt {/nS2x*t(se!)yyyWXZ>f>g~'e<͛Bt#ކx+jѫ1֥DlޢSF=4 \ 6Ip`YmPCOeʈ1)n:,^W_LK3O?PC<,YofGobL%m'xlʴ:'ϟ),6c 7E@zM IT 9[myMs; `nu]]$)gh$FD.?`,B,K 3E=Ţ433{2lÁn!`ľd4)UӆW_e-,,,,rWzHdϝ:08%k{SNnȑ#ƜuS[Y[[z믿Dg7ya_9Ze*xq۽p?rJKmPDJM1#GegLR <k|Gl6HKbFp]FqFQ\g#׿DIn=r$3 LE?>|mutͮDB49o`ױ;0y$Lz`(2ƂKȺ4e"CSGMOE/Fu$ RB& 2 FhkEA=H ]kQ@F"1tP x0=zɍ)QE-1ɴG^^Ϸc,&:~ jYXXXXX p UF?Oϰ%ڛ z8F_YH2[R{2bFT<{G2JRq ntAIrb,;et :wfM!h 58EM6!Oijgmd2o߾7x#[Q*Gկ_oQ0ndoF T;K Tw|eR@4z+2HXXXXXX}Ӗ":st @p'_1٩NtULi5RZUir,8N@ 3RKB{b!Zݬ;gP]q躊qN}/݁CȺv>8Naa!օ1qR%FuUVVb] RJE",r ]+|rc:3j8NKK 뺰q;PJ=zW]]fC+ض6RTBWo@* 2:wW{innCR]lkk:eM݃CfK^?w#̄P)7# n_-t[<(qe?W:v"gpZ= @)U^^d#<qӰZ>T;Z\$ 4S0TII g*Eu](XII8"@,ZQPPNAK N g:U``B!<ݭϸV/Ȉfh`N*jjjb``Xoii)Zϣ氃Nd} ]dC T"CX[OEĨd)j-Q8MƌVDDF%=T n&06b*5ROZ곟,=Ǒږ c򒾝6̂O6-//J%jè\f#k{o&J,2Z'4-ke(m#.TW䗟\| EQߜX#RۘhHVN' ʋgih ZZ_~O56**5 ur>IW֕d chH(قfqxPtU3]ǸZZZ AMI֞栲JuG>ctJH!2Z{nɭ*++AQX5[S 4xh75>FO[Jc f ~Y?g!F>.=X4d2'?'J9kQ}~޽F %sM`&}CM -Vx#rB NB'PFPq`EΐS~so{@ƶ4'˒0w3?;i;PZ b GdzHP){a 8bQv/to9^*|!ږ.Y2Z7˂!Q;܉ޛH$̙s7ՙ3g'݅VHȻ.%Xwd` J]{V~G0J0Fzd'4J>zWZam},"³ < Z(h_u Zyv)Lj塭[-U:'I1 3"80/ULR&#a`)lHt F]9a))|􁱑n".Vb @I PP?A: Je~Uv,ZAS{6ڼ7v͸):y{μY:?_.(<ᷚ2<{rt(rBGطoVD5>H.;*Yz,4RŋFhyb7z(in#i$LB*[0TCJi2u$0RV R)u^{͏($S1 ʪbʨc&0)yH)/9U_rʮ(xgDk,c,,,,,.^]9_RԞ\q'9 9y^>zRe𧟫j&~ȷ>!пSF?fn.uT3enQCpf&`&vkǭՌ@HM "Jc9FP[Sx׵Hw`Jzl#-U"hTod"ex@ޢ>ؾ!g *ґ"r>swfb!h477YCbzjϞ=R2+ѳNnܓE*G}xaP5hP\cM,,,,,4 (pzlX_ :[|*)m.:M}%btK c^t<>ۻ쪊2s4m-QRV*JR70)+t,7!a=N׮qR,M10 9,Yƈ J  oƭ Qk"ټ@|٣hѢC>Ms9h뱗 =pxYT?!;ɭ5C?{es&4Ѻ["/: CD^hh݄7iټ6,߾s㫼 HL9_3LB4|_V k l33@NՐ^ޯ߬+4 IDAT0pY,B)GV2Va'(48H؞l0ܬvT8 vrWq(9aF ^4TSS#;J%nXװx'-[ر#i!-o9fF)^~{d'W 4eɢ`%텡ę-Ç >d-Ĉۋ3˛`X :8Tkww+^U vF >nKBʨh#/ =QC%&b,J.nlȸ8rͨ܃~LUyI8^T6-.tofF%i:QcG[R^Rrt'ZXXXXX0\qN>Y-~ :Pׯ*/mm<\yݘ>@}GˇFw ]cB#ӷm2G\]$`["Ғs5e$( 3!*'HHiŢvZx0BʺR{~%`e[j8~b66p-0$.6X`ƍ .dBM3vRZYԳ_+7*,_o 4w}l.êngpA芳C}(jaaaaPUOڶ?aM>wSC8(xBm3 #x?[:&BNԍSJh2R)-z$zRJZ1.kӵj f4FҰ JIE| ׼A5 DiGIII[[STI8uuu/=# Dۙ٢DHR+BH%7CAfeJteB?OK@?lS:ǞJ32$%JEƏ l}ɺ&U߬ʊ`XE`DU ꉚwCQW.>OAQ`ϥ7\ѼPiPC?N.zlJg 8Ez],ǵg]\R{{.٩R7hhhVUJ% P"YU(p#X,JQ5t+3`DQ͑dзq=@E׏5J DRԈDMggBHMƊ]__?h ZN{ћ:]+fъ cw6٥Uշ;rx)HhRFq6 tD)ۡ+G;,xvK) !a[[c,MMMx< @Z |PX,*Z6ƺx|9<0%99/Iy7\wiAE[=8W_uֻ/s:ښ8ϔ~]AT߁# +y䑴eu+fZt)]MD_iCFJ]RG-ѬI)P/Jj'8CK1fRZZܜL&8N~~{KPTsq:}q-Y)wiL#//OFBv 馣䤪 j9:(PUqR$۹#//O뜗T(ҺA 7)wҪF"l d-'//mqPt Zb.}>Зn N&Z@ @ФpȒs!Eyyy_pjhT@a` խK/2-)Za&G)zAn㘒 e-nN/tʨx2tى攳ǡS@T7RFq5#X-FH# jEQYSٕ:0F(i7"D(CwF ik/~񋯾*FII]eM+K2J3yz` 2UX,@L~T0q1B-&L+G)32LQTIƀp HJd DavPъEYR> \X;E7;ZF6C"mv\^6zY=(]g_ՆF,Xb1V-;~ 56!l6l=xΠs25y`߾}naaaa#GkNx'%-Sнfzjllj`JQjUҋHKq0Ob(j8<9Js(po)yiC[HS5g"`Q;.` +®d X̸ MMMguJ& NҼSRY+msb]S:-[~AT,6ㄨ[ :89JغuŋB2 DtMݚ{uu^= VVV1ܬbaaaq`?e)eg2e u=q [Q:'ч[a L5ydR%PD]¢ϱgϞl=ztD6Sʨ('??_ .@L&3q}O3dr˖-wdBY?ʓ);ДQ1jSUY15d|֤ 0U3 լ);%F$}^e}:3eI<%VdZdɆ J)~P"6 !#p -bV[w/~at7̟?ʔ) ]M& $v`#$_WҪ۴UFu-#/Ē@  Yxyi@tR3'=6]? ;]+aRU71.TKKBP2ZJݤC47dM&Oq])IH3dH-/S"LF K~siHP!Fx͔3Rb$S}cH@ۓ* P26#Yodryu c~ak(\3W2}a7a 7ѹsq4t27@jF:sX@&9b̭f#G܈чԔQ%$ d6!T&IuRpcz4a(-LDutO։ˈQ L}!Kgm*@R;R+!ut([U5ĪA<F ž<*?x|O&<.K7e &L;N9|HxC߂#$54ҫO$wU;eԋ*uFK.@jaaaaa1?RFW\DF߼%LEez*IYּ(M^2oMkF]+ .~ѺC|,{p\@+h'aDt`L%\q pZd̵b\I*p $, uReXXnB#.F]F<(&K*8]W,siOek3?ªN5'*kqvɮ2$"h|dxC†-+ Sۃݨ[W̆3R7 8K #*MD"uO|CɀB?u-vm 7W&?/o}9KYXXXXXH,;;`8\{ff1*HX9Vt4ӓ+ڶ88Y1xpeZN;fVv1[3 Y<)i"W<+ 8^kF]W>_QHxtqUD"/! (=Î0P^(`S=LM~21.%?sH(9K0ÇTRH*LB*J5^00͸+((;TI]A92FM<',ϔn ! jPSSLNPu6&=Zxn†U -[dX:mC!O)H4BN n1In|[ =2ZYPכzRI!^K7|s[ j59K Zg466ZBhaa-$T$vAq|?;ٺuɓ˅jnnNj1d08uPh[ڡC=z7I*b.Mk Q/]g81, 5y.'BpsstttKxE:(׊`}j a+AEECs=W+t*+Y8uT zލHCc>ke燖 ;rxO^n9~ey YZZOYٗ ТP^^*?8Ғ&k,!8qH]aqiQIi_+[V… #HQQѺu9眣G@sss,[l8W...+uПѡ$R ) zP~<,$N_jѣGn Q%#X˜>b[-Tm<)*u""?NjjKe ICK$B5颭:gfRubbFHtC)A-uiZZQUUEy,Xמ9iH tfm|=w#ngm8e]i&|Td&!ž0,1=j;#Z=81-xѺ{YWWgϞ>gя~{ƍ lxFHfFA-cPkJHncRԗ4%="kmrY7 8Z?G<kEr?Ujkk<.QGСCVzqdW^q$+*1?.ISKJMT1̎޳Ic#T*TjD <#9>Fqvcԍ2XDGÙiIX-Z(2CD"tT#ӲeSPEts)tfϞ=k,y6m;؈odjK\j՜9s֭[g17ן-.vLb=F I$842z}رCT@zI'l}wSD/z`ء{|;sܲCwL\w`gɜbV#|dʔGvs f go_+D"?>B{3eH$~Ro?47=L)g{a7zF H|})s4I%{ {A[Dni-IMuʨcaj@o'1B3TTL[uXqESHpXS~_@UXW6Ć k֬AĶ m|_P !Y/-,{_-阂.m-.V\ci1Q`i89tSUQ&S^ ZaT;I"6lxklRz\Ȉӧ@_BrB!4@qUah8 cB3![Ϟ={}YĴ_tmQ6wF_|E͗YNԇ~KGك#cV4a%Ay-[Pok߿r(kb1B/(˥%Muvf= jSVzO73iȔQ#$B薮1 Qaj)"TzV7&FG޴eS03XWqrl])g().fB2HZJ18Κ5k*'oF$Gydٲe[lٲeKsssss3&$H 5VG[6bl^ D"6mShGGGSSӦM~ɓ:eHkh4:mڴ;9)WB/8Ty'Aإ/8k1~W9~Ɍђlݴ)CD1?]c &O!Ҏi'O$?d]X!~O}D=(-----7,XgfCέ(K{&ZBham:-k?k] <ڵjhhسgv2b47aFdTWW9rPիW[+rH()e:s?s|uCO:QRYbG9Њ$OWLm 1BL 0Q^ՕyDAmbPLTn괘Rg,-9tmH Q2zRYvƎdol^|w'q /PF5/J$+W\jGS/&QAHF5dd*iZa lC|%Kbm۶}oOZ2M`+( ~Wѯ{nh4ܬgȇΈLXWS}sָ[w5>'4͑ȒWyiOު9wv׏$'1Vl:H;gUUWk#/Hy @mZZjZ;S;V8Ό3ǖJbNJ!+>ror}MH(sr>{>;{_vogoZU׃<6EFn\#Kްiؼ?~di78ֽĚܮyy66H}Ro66A<>=pq:cyS~n9ղl<>(hdtttxm*s)yN7 8%"O?G0C11tsy}=0}1',9S%g CUP491`wV6m-dD) hX"%NyxH!Xٗ?/,zq1(Q1ޑxN6se5JαQNzOII`z+2gzs,F$. JK | RVmRQM\ KmD4Dؼys*zm~Gj8{5惿4Tk>V'I"\n7n{Blm`܎7{ܯ;y>yyg^չ_ukz cX2[l>OR)àiL_߾};1+f8bmJ1u:W8[ Xw`*@V#>ڻwa=4B)-\.zQBάl `Y`Z7 K s?b|;@9xrx<(Pz,J ;3zMhDו= N'93@B͘cc[óK˸g>g ,ҩÀ\@˿>FxT +iUΌG̏TiA  VQA@L& 6qkH$r8/j6s&7~_|2Z6hPIqϓI h{ԗ) GVU‰@*ˌAWy,s|UM;i{n9~Lݪf//1NW[^o sNҁްa[ձ1|fvL5f yKܟ{t wS\8fͽm=z}bcdQ{hޒBQ72X 8&f=ׂ֚<9ZB!0BC;gNEӶ&.New3IH;~95SlEgi+f9͍T_p?ܩ}~fYp O(^uҝ]^n/#ל!jM~ٵuyؼb$m}It!"FQ_uY ~⧴=G 7BVC.\(njyI&lּ6i&>3M^ Ëi8{N) .tgg'~!$ AltUϜ_Lu(޽{_|EhooGCh0&@^o[[K/ٙL&GtyA^Ǜ'PV8LP"^0yؑzɀa\CzsKCS aZDz*+|>s^9U)Ct:M݉`8"]-$Iߏߦ-4)&[C?<g ,@4ܡ$W)X?*N<#93ʝfQ>[)#`4p>[AQlPxV@4(zq]1OFw4Vx޽_? ySUo9}]s.Y5,\k|ܯuK/s3I1f fA׿܆V9{?%z@{'w߼inY{o~bQ 0wBXDiWX7~$& B p8lF*>'9󵴴x^ϐ1cp Kgq8bn0 \e`N1ȡb---p;ROaFLu%_D`Njs†MLK l{5CShJΎ:;;SB^p۬lhhFp5VM{80&":B9WBa oWpE0} 4H$~?t>L& "XYR k]1hW\qEqq1~!`S-eG;kc_s6LFm˵)}ٍ'huk=pqz#3ּk7>jԙޝp fn{+-0kO{a'={<3K,|MMMhp UC#rmqGMR>'$Iڊ8 _d2sfGssi^m J !H[WW2P(R%Hh4J aJV!XxsZ2* oCHA$8?Je;dn9.p.*//i@p=,^.ٌ7!tvvB!u?81FeF:=@ @;(}9cfv9r$@ 7%+ZҰ8<!Ԓ7_сz<(, '闆P8@AL@< ł*xE^S >#P)>mǎ͉Dw6Ϻ6Z)~Eo7qŧ<]qouu}iwwwO?/շ3+wTϳ}?GfMMM@9 !D@!Cģ_mnA T*C@{{{ @BHVy#ք*&QN2JhW9r$677`0H*B:RP{H1dS`x3 @Eyz9k(' 0gqDiPtauqMQCF92[r~z sW nLo'z= b:gm?E$؁ -A] p4>|8#˲ %?d;|F@|:\{m6QufET ?FI~?-0?1c IDAT"TG~V0BFT.Ѥ 8 a*i{/ՑAM$"UrC"ىG#G<3o&8]:0I;҅ O|.s~۱#͓(^x{/YP*+VƍbFG mmm`0JЮ;|R,9MnjMC *R`= r9_Jp*! fX7#W9g CZRH$B8Y;v,ZTVoz s9!9%T# ["S1OhJT&W "m[*4f)A2ā@:/Kϖ0< ?%AEybJqOޔhz"LAd aܖoI$hwޥ=V 0NERjܸqS4"!D2M;'άShsjbD]oy0S>?e).\83}7OEe3}?]\w'QxA +*=*=h?xmmm*jll,--}뭷 >ގ޽;ݻwP__ԄŖ-[К9tYZxQ__6w܉FF{{{(J$MMMpxƍxȑ#oIpΝ,M}!!o>4¶oߎÇSvڥL&>|0* ݻwQPPP[[%=rH2,--}7ᅬǎCӪ k{k`&ICyQVlG#a0fL}v|{n5EpϞ=hSۻ=x y<ݻw+klڴ =o2 \VdÇI t)ujkkF0 {6ٴiv[bbg x:pA67ٱcq!dC|۶m?D HG6 رcx 裏0C6r~fΝgرcT(kǎXݻPڿ?S[[T ?jzQ__oqN&" "~;J)lJT۷\rcc#h={j㇏[Ruuu544Poa MjΝ8t99\.ЀHB_n*G1HbƮ]|Z[[ ۷oGwލ9rD)8C}p6m˖-8YL&8zݛd~?z8#]P?۷o lL&K}>~xQWWS8zhqq;hР{nٲ}zmmѣSVV{E444|L&S^^H$ib.߯b'iyޖ4Ѽ^Adaaakkk8njj ^,H 6MMMh~?@YYd)xۻ}p8`<V4`8|@H$RT"D"HA@kFGGL`8j2LII 8c2b{~G6l(++4hPii!C qp =3:Àw3%g>@uIѱã}?wP<~wO\n=nl̅ .DYx.ݱำ&ꟷ4*xlKV/7\r4iӆGT$Ja m(G2P^l)2G",RCߏstnX,NG"LS->/xpfeeeTtҤId嶟Foƒ̏5ﶲA0v`꾿!Hdу.++ YHM @"r9HBs##Β$) eNO +ģa'R [guw2вd(-Vg}66m۶9 D2yt lnb9sQ ~fq7Zԅ .N8'5~ʨS$`oj@Se˖ŏ"G z@jD0!z6QAZӂO,VJb\.Df nQ4 SL7|1oq Lu,..:b:R0AFr87HK+^tZw2Nx N#(()ٕo;{tUUU 2'=@PG& nYNh}N.InB'q=!dx2V zV4ϙ'#g;/D;Hkq:'o#>E1cD󠯏Xjshaɟ3wS{c:m?pw7, <,G^۽y<-UQ=y Ѕ .\Vz`nu<04G^{-lܸ̈&d;:;***=D 1 X"|2~̘1@`ԨQsIXYYY\\L T݌ {2m 8bꏸ#BXx͂%1<HeJh ^;2*XO!orCH,+x#7 OŐ hGCp['ssK0B-R op#>MZ+1jC A~]hgc(-"B`#I_C\Y_r"H*++X 8jd<`TYԸ|&I<Ϝ9s>@^ odL6/ <ߺxa6m_m .\pϟF9!ha(Y"A nXgĉ&L7n_,dXxquu5x$°v~-x4 g`t'0Ђ!DQ.g.:ƱnI7x<Yqp[37R2Ո+6<-<0\rғУ-Q~CH5Mex'Te GGٱ߂ Et*CB0g~-M bc:?q$_liaq 3F^aGZ:ഐ伥VAOc!cuUUՈ#(X{Z&AӉiI}d8bg,^'.\pt@o6lذaâhaa!h"IIR8NFEg-BFEz@YfPz…3g$$J֕ Qv9RC&5WXC}'JKD{$5BPAX=ON#ED!EEE E䐷Kaa!:j⯋l?(34YލEyҷ0W@nyL^wG|Pc'+JWvv Ux.wEOT áP讻s_R .|V5)_w… .\/ ~?`_3)mnӐup㒡8Z{6%%ȏI uNF:f͚5kpҥ`%E\`w⏈Z4̊j믿ߧR q'[^v!~Z0BװQeOz5MȨHy& EՕmB;) y˭JAj lG|w",Ѡvк(ʜ=c@ i{HI $?1F[I|,9gNIsҤI?F5jT{{)SH@>u&)SG"|b8i]qE G""P>(:;;#^9gT/x<Æ 1bvAD+&M5SVX5LupWFǽI yȅcgrco6XyXw?p"F.\pt@ynPֹBe%Y\\bŊCF907 ʙ`!̦׍9 #0 FB|)jN,s=|0׉Mεw =Q`% _K"iMOk8`Js6""lz5uNr]F (DeyY\ņaBNMD1 vHcn̹NɈAcc+F6RVGr9@@MIWYYՔ\KlM6qA /E-ͣ )>+D@;'+p ᝆGkMVUUE[F(K boR0!E>p{T1(¾Mw… ?>{gϞ={x\pauuۿ_򗻺\rQN7|s,۸q#RO`!/ 9(Xyj[:Կ;'OmR(ށ]vp>ȐaÆuttL:u>%FAuIQƅ .\\n?gg̘^JyRݻ+**NBN >wv0y:Rj޼yLWQSS,qhSaW%r CmȩXÇ/++۹sR*FLA{ c9uߋ0E)x'(.{Rm!խm[ˈ#ҐɏȐ4f9csr,dA=8Ԏ#C{{a`0HO˙y?N` 3 /"Kg0PCAp)?ys%R555T$뭬%$`0=TJY !h㉇]CFQJBZC9\wu; N@W]]fƍz1跢hÆ }1_0: FN… .\8xnr ;^_z/}K1 aJ+rÇpK􂂂[nt'ss9z<mApSV,; yu ^x^eiIwy4`GD>(ph2 fp XFޡgXpPO t| !פLO5K uRƕC{ )+=sb-6r@+f Ip| =_([q`Ϟ=)CZgHݘLݘ@͍Ȃ|"6\2ĺ'Ci0g\Q^GGؘNTp侦Ss@uHm9'fy;v}kͼq% `# |$WR*JE֖G"? RO>=ؖՆ_mh<&!gy}=2V֦9qy N6ݔJF.\pƪUO C#fXxIIؑ0-e.C ť6.5^ڛ w UKQ$iiiNmRÆ ;2JZ\IQl)$Dxp/P|@F$<n c'*b[fpB[|[fWpm电nJPvG hqQ1N67mIxŰ +gV;gHAÖfPbJCkrq۝3p.-zuyt o\:΄HȄW:$祐Y+Ħ2c [jz&֋v.fmkl{Eo Ix#Ω1b$([@#hE*NT.>!Ҝ-{ڕ9+Y>gPtttP .p]pE }x`ZqƭaJn g`Q["qD ɾzί[U-$'zzY:tW<@ĉ-;Q).*_wj Çk>(Д%?)si@+\":gSzq?e,GilS<ٳqՀѥH=RAҘv8|q*+ڡ,|eLYN+ݿaL麊Wֱ"sUAxP)ԅ .\"\{^cc㩖6^'> 3薫0(}2<3Gp$2 lھMj!'1Uΐ!g(s@Ҡ '΁%KwSK 詭uqsL ZZZ]Anƙc>! R sEiZy&^yޣ?bN%!lHAmɮ*L~ojY`g2k4ttn;O]pi@ bС=܃O~QFxMWժ*nBnqbc;/w@j- .@ 3Q mHJF y)7@R!`51bZC#׆ӞY r"vV{<ݤ8^wrE?i[,|!\N q58eNHJXxSO: `F_D/ȓJomiħt\B!' le#ߟ-ٛÑXg.k`O'V͝D$yٳg+tvRZpb`1rn7)'Lt{7HD"3<産`mBps YD;4z % '9a pi -tI&#`y]b4/QnhNQG)4,B$NrK ^kzꇤNA̶N0}}"6Zݶ9Dq\9\lka;y;ɑ4oh4OγQZׁ/5v9Ȼ-KOV tc4=sM8 8.Hj=|ɿ7[=Y3$(=%?L'ncلÇʤDEO ʤQRכ.$OCwCr9[VVg !y](LtJ'EsSLJ@ZUy>O:PBy=yA{B`Ȩ2լ7K!ݐxņT΀9DM=I7rgْN􋓷C__^3Ŝl{(o?Bﭵ?Y}[gv{0m|Z;5)&~Vd ܍.\ta˖-_}78o|㢋.:x੖8mBF9tTJr [ĺ %y.">Qb-~a<̠] *VB!/>#~~sRߏ Fbn`W^V͝jխ7n}@s.j[uӝs@`?\?ҝjTse"4}jcW%`eóg?Rҵ{xGt5go\[+*5ޒeu5 k_x/,YkXϏr5]pqz`ƍ|&~Zzuee֭[o9rd… .>|B7ۉnSbV;'3DO9++g Ŕr[XT%z&0B\N'Ql[ ODLtMrEouy. z_w5 !I{*y=d;jGVecEע.:_fm9.,yp5 ?O$2#툤W ǩ$B'*\'G)N O^-E>˷Nst:LΝ+'eU@ӦsΟ]?9-7 v򭓶݋lٛSµKǮ{llw\ |k/q~-$e~?yOfzhaj[6enݑ5VwQO…SN]nu]dɒM\qxroqʕcǎݵkמ={Ni2NKF1-@ikۍC˶ĀV"AQ).sO߼Cþ~`CC{Os@yW߄ڻ53I:sl@`Jѿ9Ao~nFX_[5`t:^~//lg͵ZoP 0RrѺͳ&u#!p +|ꩧOo;vJsϭXgfĿOp7X}}"1%#K9. \܄Ê C7ꦹnLK4^ ؝W%3++gYfH!zutzZ#EmSitޅuAK`>\ 0gz⃲~\{2g IDAT?M(QY κj{ [2譣{YRs׾O0g~|ywKZ|?5Vwo\Ɂ9e##jTsA\YZE7T3Y>H uS3n;vѦ7wyNo`/,-|2R]YKT҇>fxh:/B~q5=h]pqࢋ.V\jq2d{?Z|Fgڴi#G쿐nz?1 -ik njήD*+:::HB݅O! ڦԃohl5e|@ms* {=>vnÅM ch,qfswf`ҳm`dFrھY^3M&{k{2΂[$zVfcbRJݸu,͗+8tΆ^4xRdmY p 2šqН\k`c˕Rjɿl!J/C.…3 ^n3f3UW]WJdaKBFyu1xө.Wv!JOd[# p2M.L 'DI__^·^\Nx3LWύ0)W%0O)B>``a! oFkif1ovzKAY \ߩ}a9 .\)?E O 5IgȅR*ɠ ǁ!D߃6;x>82l\T[x֜R*.0 =@wpTWWՋJǺ.0xB ***DucEŽI`[Te)t'%#NܞGVJ!ʢ #¡ lLCzsm*ĩ#ow{6ŷB_ qK-O $ەWgX\\tRNIa3::7ĩT I55 џ򪫮K6z)SU<10x'O)l0pgTVģd&_i E;sPs|X6G].ЯD.\80M @ېqL&-FX/*˃wxY9(1<{l̃鱽D|>(NR@g z'r#F?~MMMh3,))CQpQ촉$~o655 H{2{3Bqxw_m!K=Gic[}3oӞONWj!>}q{ gNQDe?>s`߾}a|MʈП*[|_0DG@Q%^nVewT<}h(QQ_څ<84(_QJ 6L J$ L2tP?X[/(Ӷ,`x8aʔ)SLټy3 1+i5U$7Œϋ_O^HDiɀUNSHX[yGM;ρzKMD%STJÇ̧lak*Ezz=-T(h3] "ȪU0<څ g2nS-qG qa'7ׄiɩ^(TL8$ K ~.`3+NɸmF'6BbB^gUUU­Gsw]uڢ&ʶB^Gw@*4ҫut|ώ)]|٣KNx.\pi`zFKRȨn[H/n~Go ^9 "JFGB{)?G^$0VQn8 #?!)i 8R-u<?lmI堻zAiHN~LH/s@Zp{sh/.sYb / mq S!b "wYȁ'`zt$3ShƂE+גc\p…3q(0#Rظ|@`F'!'s`CFꫯ^n]l5F1dU)ue]ve-vGӶ71oEח?x<\BTi[;9 YYY)^Q-#ۅj:Rb:7C=B7 48t':D4:'zX\ -%^o`QBo,C8ֻe\OTheO9o]<_G+vo=UּkV/]c ?{^Uq/{~-;!!bP$^RJJZ􈦵4ǖJ9=@V۪Zxވ"lT&=+L2̞ڗd$yxxfϚ;2.Np\Oh.tM)3ϑgZ$\jm!FqLE\FcD^tOjB/&!B )餥E!'RSSVfQ2ۅo B7 GzKI sQX:3Uxϟ,d3KgS%$$$$"}}>_rrr\CJH*PWzCk.- ,:RItGYÎWpeTễ/$C {ڴi'NDOLbQ KI/èNaqWGA.v07).UEH9_Ż4-8D\G.Ȥ%L'K?zY3ZVJ Kt1-#55577(JE"m!QF0}O?c2:gZFmF1R?=^K,Ȉc49!rLx*gYdeg4O:yfffvWr9sz{{?DkOLbQ f13阄:u)+| 7B6BH02J@:{ [Ug\|aKN؝ oXZCh͒&TB|PU5=='9s7Mq:r-2COF-ʘx^iȢk̸dddYD>C8'BK+NqT2vLQ\g݊B0#^4 [EQmj]N(!!!!a}}}v[Z,)>/E„`ָj. 4J_duV40r0RX69 c43J b*)$:w1ۅB(//T?B?|0q%vQf{Zp&+!^Zi< u8]Q*w&!!a6LL˖-{y׮{;p@zZZwOw0>{ウ:+ JBVV7߬_^<`D*kqupt aºxLyϛ7oڴi 1xF17#;wL@pğGHvMĎp/Ÿ$B/99Y QCw@摡!1C6>rPP |;I$|;!Q!\W0-y!gz1 ADqJ!K 3I]+V(++!\(?a| N-Swԅ]|\)DƋTA_܎'-`0 x܇%t<{CJJJBOo,'Cj E*ӴucX5)nhի;Za}rssYf-_ַv/'?Nɑ HMMŞ8v"]?''!svoأ {7?#;N`v4UUMJJF9u \855!}eMm_iiiD q8'N8΁n TOr9! l[=!Qa9I]t:.C> SU5;;[X\F].'p#a,%|sHvUUUbS"(&2qaܟ0hdA ÁlX/L5֚*=P× '}H\ɍ4:A^dP !#Ht~3@eT,Fֺ1ڔ*wE#k-k7lv8*w\!33sx{755mܸ1;;رc֭|VP"(/3n{ؘi&D1Ƈm ӫ|:iZrt*FlkEљևV_P6&3s%K()TM.;C:.XSn?, #52|gHB ܵ- Hjjllƙ-nU ˷mv=䤥]wu(&L(xH< {:'uB2@sbH5nKGD#BQjhD |8(ԊgLÇ'Kl WTXXx 'M=iZC}}} 207M:Og / B9P(o8q:{u揌2)˨)@"u͚5{[]0飌ЋKEɌ'^555=0` oK!g='oa&,1L.(]X*(O8[hi̚5Z:t~(oGG=9tN>>8h=n̤ eqzW4^}DPoF3gޟ(%"p=< 6*U#q9+IT`ǥz k_`ؕD‘wv?z:y<Hylh̊o~h=j2ЃV]$!Ĩ(\?4WKP_R6z.¨h7ULEƆx"))Oiiiiik6`?TW4o[Ԥ(M6'Z' qBj&%%͛7'|w>Nh68u\FD$d֣:a$5>*w;FU5-c"<֩kX ^=oLis ԥ%JuHNԫe?!N: /(Qa#*D' %9CXB{)j%?_g ?}'ƌYUUݯuĤ^X, < IDATj۝NJNNNNNv: Tr&B(CovW$1jlaj!HEۅBh KgTO>J't2pQQ &JrDe2#`B1̙@1M$o?$i 2qavX4.UMMIqC:X&=F%$$$$$&8襛  xHx]aNs;r-R&lsJNˀ .@-n@z8 "^11'C S~+_:LMz 8Az62nZ> agff؇S]K~r8 @0Vn.`ygYFEiF~c@f,s^^#2J׿fL:ކB&A`$(O0xAGexQXZR_=Fx k(d4K%%%%e~ ;yhiO QFiF5'M&-VI-EQ BtrQ ԇ߷$>Oulj~57\s碫X :e2unE`w@QAcϰr|vXpꖀU31bDN*hVw Ibs;88 / wm2FdTBBBBb ~V/L.xtN삁Ր2ʓd3;<^M7/|F+ƫ *|0J8^J{'X>>,$L10'N2-u eco8?h`zDZ4Ly&UVRRrwc**//OMME}˸-:u-^9i:::9DFzGSR_$iĄ;~(0HKK+((0ÉOcb'.$g~ɓu F17 o]*h*Ώ>MIy^eZCF -B3)IN2 I蟓3ΜB(!!!1>ܹs2kMOΝ+9EvvvFF =UUT1ޡ&1) Eq ayD -U5͎xpc6 UPn{1:&:7+&D`0XԚKq!&x284.Ћ"g4T?%$$$&::: c`Xrsssrr?_$f5 <:e&_bʕUUU!tr4J9 oP NEC\===^'=<OU`09!ށ@OK'l X K, 'Bh``3`ee]GI].tmPUӇvLEQpVK8 5F UU|><` eb!1< 1?X#|sѬѓi*:1[_~}:soF҉h-6;nxpX_4w|ϼ|Asǂw-]=+g` 6:8\9880` j {!;n U (j? YV9J7Cggg|] /_F;NG)./hBDÖc40\HѨw(!QB+( 9#G,X@X'VPft^eЙ N)J;8NiFG! -PH ujaI'9r@Bv%%MBv-Fؠp*tlOo~gQf9s8}KFFƍ7SUff2 +_^|SSS1# [6omEw摷ZD(~}>_85_?eTi\ [j&,!,4-b=-r0'Gz>̡O\be}=sn뎥sXY%a^%! M5V'\+p!!OxZ E^Z72 P" kE$j'~Z=H!gRFiW7ʨ͌_l6[IIɸ4Bba !lZ׺AQF C3ml9|x*CEeJWEr?_g9te\мo!!1lnm/Z~W7n6op}g-[lN&Ԁ-|^wMWZ=wvͺk.xpVCǻ ?y22V+mHN`\a/p̀6rss&1|Ys%֊!L~?4---ݸqcZhiQCg3(СC+ma'OGtCVzD2O|S`,bE9sQa`FQl#i-nh^_ M(m[Vo}F6-[kj?x[6Zerw_INQMJL "힆;VEc`0xY\|QRNg%N뻤g9= KɅg|)w,;_FVl~jѢEwrƍX|;:1B$ͳW_}5^!C:m ]F#"B2-BoO}*E1ӈnO0UrR8ʨGQ#ܘ j8j *3Xÿxb~R!1T6xכ߮s 6m5UU+r^b Q]\VaS-;7mClުG6uyyO'ʹ]n}3VrJ{H| ZMv׶(m[δRF;CBb M2n0zĤAP#gϞ'ZλgC ҋ/`!L1<9aZ㾠F-2L "cT&:Q& YKzB}c$b<3WCÜ>3'KBv\HX| v㩳8(!t\]vʕ++)%\r%TVVNS Tm;v޹ق50r^w}r۶@rٹV2:W7Xvkdž* 5-w7wKh1f*Xռncl[]QjU! Dʖۈŵޱclݵ-;|rkDaTkEpԩ z;?2ЩC7$ G&ѐ~VfWg?ΉZ~~WF+l2J3qN8AbfmQz3AOܮôGL'P7f/qz#wH12s e\"؛oXk]T=%UмޱaM_[*[Zռ|j9zZVR۾ނW 5 ,vepa4tQe;q[1ӽjuE]S2Դl$ WR֪ؼpوFGYsɂVy*6ךYb !=vauR Xց9qhϾ}V~ƚTk.+>ȰX}u2@y9̟?g?:DCˆ&@q\2eTV aqQZp N 4Z?#,d mP:!Ƃ*t_ 5y.CxBQFxMos222HC? |Sq\pO! % urIMp8{rsy&N/XlyW ^3hvNNt׶B!l2[o 1,I#œ^%cv$%5?e߁އx| +tA2 %L G/Ath("P,֍tQ|'Kh ԪEl&'3 :Z/эtbGj-U;2*M9z-jRFL9 8?ؠY謎2ܔ]T:g(`PPP```@U"dDȢA|r[ 9,i5%5ۺpEB Kv:^}Yq 5~ ʿN_y?nUe3ߘ.p,d]͛!1-4R۸(%pkw#eӡRg 2*f@^U=z4++Kjh anp\q4Ook~e7]C)0q1! 53#JHtW0ɍF9Lc5: PcA%`!o0?.tǒz[$&>L ܄㋎zِO:uɨM|@ĉUNNXa @rJJԠ/Pvf _~2kRlz6@ZFv{O{}R].f|y ,]^0 IDAT? 8tww0q|'*~k!׋)#<5R#GxxQNPlnnƳqppK/a$}Yfd{{;G?~kى{U.xpvw}_ڷooxx ܮ.\]]'OU<{wލ>TUU7gXO><44Ӄ}ʧz _q8guz\ N $C#,m\x-Z{ܸtvvFfeffabutH>˧K4Mwp/QɆ݀AݷwsE%@O-9_]n s" w}ַ3̞={l6۱cǖ.]k׮瞻+vy-\p_җnƇz_O>y\2l۷oyyymmmW^y?~?7t~_=??f?~;?\p>{?S_~ysse^|Œ?/޳gϲe^y啋.[x#GVYo[X˶mGzz}VXrW˖-{>7|sŋ-[7޸袋ZZZ.]vxޅ s~xxx8''w߽v޽|W^y .صkׂ +W^z}sO>ʕ+SXXu{}ҥk֬yᇿ=W]u:Wޱc7 젏5~킂`08k֬={\{ߛ\z96n ?wy笪9qՠq䱐wnc26`b L(&O a剆Z 0cD(|BI ך<{I$htXL23$5 *3X%xmed^{^{^YQFݫVWl ]}oÜp!¹ʖv YU3M6دV;ƊB3 QFyzCAc`zὼ!\S Ed0JH͘24֫5yiM[2Ѩ%/SUU|{9a7pOOnQa’UfN#G_ٽ+??083czBnTUا'2]Χ~&%%=7j=yk]6pl;#JHHHHLH?+s ܴiӏ~#_ ]FAcLNNT ś:hQ qO_U8!P4򵄥R6mzꩧ @l0`S(i%&+L?4T:0aʜ(N2V;!%QFʪX X IB(1W oL7Z02s ۃuEQ&PBBBBbAYSM[mS]F p14cmY.CSA YΠeTGO-2 ܘl@ܧ7B2*3_җnF|S`,bBxp_kM5FVU]m Fi^_!i=c)wq1*C_A54)Wu͠pa-OEfg]trd61X_cbj1J.R;:K\HzinBe SE1af͚oQ(A vj.uձJAS;~7jyK2wEuww2C3pBW9NQV=b_v&=%EiR1iۈԽju:ժHea%TrsY[|dEuh+(G )hgeNƒv-Fbky{|#* EۋhK -GFm9~72B|]F12 Aww2s ( _N-֨tQkA;`v73(0< ka{K=PⲊ=FՖЀ_V+50v{> K.@-IV,y Ýzyb#")uU/i~pڦ^b80s>J ^4]i j@b*:FLi0$tE;Vo5N ٹp8Z[+oh[]^׺T? m6[ɟ;Xf.5}@vfQD/ >AytLNY })ѨSІqi>|ppи.@?ucrp-9|?mW98A?A`0ׇ&Iׅ۱8Xi#-9PVA2^~:Ituu1ާd^/cC?hLb޼y˖-`0]FOpnjn6PYoXyu3lPT+g*-V-TBBB~_op^  BOu< iL9S "HJWQhXK# 5<1(u"jΑ{R)<4QTu~72BZI 999$KgB~w6!_e˸$BxXXjCh[Ey'cW~?D?^IrM/(<}ZAV+Vsr;V?wv3 9qaQG{ɥԷIF$X(lPD"5i1 Z r/IJJ:lڴoFLBæi:999555Fxq(Tq_paaaP|St`^yZ56zAnTS$%%u w |%sf# C;=00d7e/!1F x=:AdXQB}vH:HE3iSGQ//HE:WVD= Bƈ<nOTe](=% s}iIM N^aIME..)!!!!1p\s]A~RljW[o8qy^5GaBYS zq#'1Qgx;UJjYkt|Xf /E0CtES^2nZ0ҍZRUu,QVjXTa*3 2'J]fq!|C|Ѕ%$$$$&%V',+W]pu?LK:888 H?+ LѫjDЀc\ 'M-`8DhX:m ;A(R&B4z0}$?a;ݡUfNe__0<|pd}= XJg zƂ0`?EdoJE4""D|UG>C>kp\SDsPb!aY #[AyGTβ[<}*mr8-IoϱĄbINN=W\lٲe˖}uYYYk/}H?+s d"j Phf G$4G}+_2.3 o F-+eTIUE7. ̐ӧgEOoתEIꏑ|St(=~vX,wϚRWϫ=X!;*"#n|%$$$$r&S>92o7K)iqM~q4l) ǠΠO(SGv7nڴgP"ڠ[#H ~}{\=w\ߟv2~̜'5Y>~B ?IIkzwpm7j:73QzJHHHHHHL_|1&`#rʕ+W裏x aT-Yb!Fj<2J˧o-JJul*̙3gΜ9ǎJS #v[t_Kv}zOJ>@;ݧs5&G}}}|wvvs̸ XG n LD͈H`5=Bqշ z`N#4H9.]~w"}̂!DTx6`WWo~0h!2s e\In-?84:tr +(?.`bn-ogH?+s 42. 7 0{SDEbdGZo)(>,ofؚ n7o޼yi!k(YYYxH)pL\FVkU?lM؂6o Zm~ͬN^'퓏skyE.?3dbczAMaiִ ˏ|D)#!!!!!!;x"/AVb:.%\Jl D-GXW& h*2T8hw}`x?4GC /W.UUp a:p]g# * zEa9`HSӧ =88 Z3?euL nao2  qi&#SK!22F&Q|)5F7ᜈ0'';3%%礦B(%-W?ãPUUÁsI21F }_VA}D9ٶvq##B'nxlӺ L瘫ږQcZ7]]Fi\ [Tĕʜɸxnw;ڧwjGbL&PVAڔ'ZXEؠ2hc>Q+8 ]{݈Zq&K!i4yW9`}Co{( N{ezP̍2qY /LB4,wԍi Sض: Zi,\-<;wwQ]hE|6.KHHLe:t(^fϞ/Qc ϜuΜ`FD$vg<կKH6ma%6Ch(n$)i1|S`<љ dXxSdOm^seOfvH0˞8 w'(7݆pS0}vV [ثƶ-xtŖ*hljF]Ӥ4VJ4T׵@Iid͑4IHHHH ʜÎ bycJ2EM6-RB*4+сYjf w<=7<'yWcFX(yJgw=/\ꛯ/Xr>/YbU]ۢ_e|5BMj6*n* hUĕZޡ4)n̙]w(0IK%>?"^W#&W*9cB6?bD53xR99쯦]wpUq֒,޺o}ygu-zrYgR_*[\9rzy߽۾P0m3( 3`8Xif2@(ES ƹLJJ?>eVL+ A'"L&i퇌z#Ψ«{37F$8 ZF8|S`]F Ο'ݳ ҒVkZsƌY}TUȘv916OOI9J#k[|TBBBBbl )zϳB*PX%(QRC6!QjgR>6msn|-+%"[z~ۈL2^#̜2Jtt؏Jg0$4\ɜ?4,=t\V@_pCI0U -Nb|{0Cqz\DgDUc9JD0ON9/}d̈geN0$_4̄ (y'''32PKW'{h}PiMŢ`eTG1~tk1ލ@)VBWamDfW)p\F!)/Q^2`}c$:f PBBBBbAYS ?. bC:V5BbQ$d`Du BixoXMwPl.|Ov;J?2i(_e˸HN 3m;I3!c3yX  `̎@H1ktu\' ]OH8X%$$$$$#*&c~Y7  q5.Kd:))nBbO܂G8rf*/"-݄-շyF(NG5e}ݩ˨x@YS 3.d $ռ2A:~&oߎ?V+b DX&{ydc{k֬] Xj\0*3XEB gN̸LqdH/n4.fY?-Z32FڴiC;8: G1.zkɼkW92.eTBBBB"{%&+`|B% 6C!6'Ü#:,/Doas`,(ąJHHHH$W]uUW]w'I'ZӘ )Ñ%v! jІIg CeF }O$$+<4HRӵCƅ9m"va1!A*3@2*!!!!!avH?+s doX ѷD%a}\OƓ 0C^A:!;7&$0QE ŃBcjEkz gVmZkDVx")(C Z$+$cs9?& fwf0; y=?=<6̀݊k26\2q*VKF:L&0=i$K5rtOFSޞL>XGy†zY땖ք c c˹#Ցoz7o޼yHGq;- /IL Z:?? o` 8ofh%vM~?Zn8k260=gL񏦆fgsGkOHRC>kLp\Nr8Ҵla+v!Y0@ՃGt?o }7@Aq$MڀO]\\}RlZcƌB7q[՟eT08y.U"ϒ͞O8uC*Θ ]^G:th/ ["(Cfl(IN.;uҢ"6jz%P᫝WZ-}:#Oni7Of틖̴h7@NKOOx 1^/`p=zI>,JN lB/7*RȧN*J@)?ggУ{=V6w},K_fZ7QS*)GJU&{)HGAC [PDS_Q";Z߷K0L2|#GПq+c3%qz2L$s9hr'?:'$ťwݵYZպ/,R 8 aoƢE=G"fPq6Ν;'+wloo6ZZZh [B@MMM†墮 bK O$ qn^r8u†tF0.盚dw[[8 %z]2LPEFqqq0)'N|k-ns?㏖uwd9bBߌv}0\GUDTʂs;w zêuW޽r^?q]DqװeK{Bd†XVaObblƋRR:g7L6҄#dSO!FJs2,kF߾} 1s p'L-EqC< --M86XL9![I۲m۲ۿ;?u8]vdJ4 >!yٲG V>YZ¾{U6*4 fylNMMմ= (mVx+>$Y@CҳO?\ur`ŀQ"&nel,^| a'rJ^rK=DRMOT1H,|꠿BM=;s;1D`X eq|s?:(!ӧҥKLe %@@;&]ӳLƢ=MqCHEGXπ"<`Ȳ+$_.쬫ބF8:+6*5\s-cdw$3aЄQ鄨T|W%[U.MJJ81gǕWxI؂Ez<) vKdTd Pgf$adwZQYh85Pa:nE_"P0~AB n졼 kԌ:+6\2Jk*WF!8@I,lP%*[$]T`Mz`x> }.pf0d /\4of,`B6C|9-_.r-wuVlQS$Z1/=yO@6|x R, 'cocL\%л,ZDE8?W}7DƆ XRR"EPR|IC֬Y#d#Gxn𫯾׿%7gdd x.lWWW KSOq"Ɵ',B>Hب^z¹֮]+inn)W^ gτ=_~8_pիW %`K(..jR566v\SN~LP_eee顽]>==&+++1ONN&"~+=Rܖ.֚b#8v-~+ÆFUpيDT]sJr_C0z41a޽}ʕ+W^#<g޺uknnnsssKKkX\ IDAT˰aþ_ni.o~c͙3.klllii۳g-??O>yw녅W_}uR]]׿Ś5k-ZqƢ?|<ϟ9sp֭w}/tҵkΛ7o#F:ujg׿_r-o_ZXXxAŒv~~~_Z,a[[۷ofb{o]v~ k҆廄!$=7cIUEJW퓾FY2L1gOp<>xF:L `1&A N(t:b>x<>tACCC' "9hժ.9 tt/&"6NM̀,%oaS:(MɄe'ԚE&=bfUl`2/ EL Nرc 555th49h4&''k8rm7D!b)]ƭ{ BQ$Mdr$$$$%%Ee2%ߗJ}Sy^sj IeZ[[SNveV^^_9rD@:lpH6D, y^luVl dƌHi~Sʄ;94JJJ"Mte).JF#26/A &L`2Ξ={I"2L:n޽¤O=4s&ZE])%;?{/#:Ί̀eԨQFr:ҝ<2OP8h1U`xǎ$) ~Y(Zĭ̀ꗌ:fsM|_~|'!!!@\&" ,'sO a "1ͼ| '[^oɨu_ }dc J]%z^2.A,]6JJJHaTl6f أ~Q| #Z6㋴T0pG6()Mal}K$j26_2 bnQ' $as_GzL n!!fExږ8_X⚊R(%pӜM%|EZĭ̀/LBx.]푌|jvFh m} X2ҕz2/ EL  rŊ*'I߱GqP2 2$=zڼ^8u{L3V7PVsf3BL~jYt2S2{"r! xtʜn2/Z"&nelz[ZZL&lF6/䧖LI#+{5䳈]#{1~:1q+c3 fzTiڼyDDGС۽ %ᓭp(yo)..>x!C82/"&nelTde9}҆@rz-^7G-Ey }֒b4i~9lذaÆJA(@nhhw^iIkM0֚0֪;R]2.7߼ꪫVh7"uVl%SD( Qq~L@-bVfpE`3pdf6LFh3{$ Qrx㍉'~׭%ܜ >S۰!,YחJ| e%' ,]#} wŋn1/ EL NI1B68iҤ3gGC>P\;<`Xea x a0UPvOڭmO:%kFc[[=cX.b?I+0#\(,Yח4zN:h_ dԷn/"&nel,-ֿTuWn/%"pk~3׬CY)oٲviӦcǎvNԴdMb?qO+Ƞ6l?ڷh%s}t ϞdN>U]i]~ uVl%ShQ2od3=S!b_"PPQw~D[{MK{MK">^З< v_}Yj Ɩ-[Ϝ9zǎG3f̹s:::e`~Fa~sKJJJJn+e\}}**ymgQEEGF'!6Xhjj1!Ey^8FBp:1ϟ6 UhooMiO`j#0ڡx1F c93G/78îQ#mg^;`N л͞=ɓUUUgΜx<&Mrɓ/6uDҌ0 _HGu J{&Zn>$ڭ _nl0)Ncz!b6`FF:+Q]] λY%TjPz6M\ǥYdRSSI㸄ajfwLDG.<:mTMn6+U %T^$ֈ{TLM)rjM<ؖmm$g_ޖswxK) 5:.jʸz(gDažQ C{}ɨlx^2+T_ɨlRGm@%2[/5[,i]~UGhF!}ion5!}:pX,h7DMNgED KF}HqBٳ|p3gfee(b(uDhcVf@KF0w-'?i=tI^RrCn@LHHHV^6L`v;LJJv[@[Nq#[ܹsɧ6U FBVxd߂}qa@|tIIIaFeNq\RR߹OAU%%%~.]ט̀ZT=B}j鐝/mg!I~rkB.se_"P0~A@t:pB{}ɨ_3)_Ů R(d_EL ,ǹ:5bog/>,5jlbOLf鍦kN4(05{,(qFߒpJF=c0/Z"&nelTyѤ'@?VlBi uVl%|L6ŨN[x0A%Ҵ%[#:(@b(uB'̟??==]I Ud |Y Pgf)6!l u@-bVf@uΊ̀\2"1ɐ!&!!aΜ9bؐTD&1q+c3`8BqK_l` )l ꧰FGGlOSMC"js\LL\q/Zd_ZyP_e':>@\AB ̀~NK!g_"P0~AB b3`/ɑ͹}-b׈ә~L@-bVf@8p\i}҆ ¦MFDKFUM7`K\2/"&nel,z].w[.Y0~JF5%*@bhKL\PYFm4 y/  {^'%g = ıA-JF# l*R!v2?a̬?a˜yάs{]z<z.w :+6Oɨ RjzŨ$]3}jhPPYF :b5hY~&:krcHY0JFbBqx1'o6B5Gj26_2*WӐۏ @y6E= !\>3Dˋ49/!RRR-Zn̤$XtcǪ{.PW`АjP3+N:pj;FwܱO ?%ҒN[8o޼|u/ 5~41q+c3%rY}[}GH?! ٬ ;'ߣ'%8`0Mӹ:diK1 ! ?%$3f {:&A N|k-[[8׷819MP/GS||}n#LKCDN'+qK_l`eڝKxpHOŹ222RSSbo566v>}`EQ߻464>2=&tى˟,U@>99L&-]/>%%%k,k'ڲ{3f8kM--렬@uɏ5݇-+))Q:ucV=1Uzß>۳g!P(lz@yEyyEyy |zY0JF#%,"f1e'e'bNί{ӧǏm۶z(ڍn`RPZ@d !Y%T1 K&&8-b2/(nd4xODgΜ1cƞ={̙F@70B*Kd.d1 !@$Ί̀(U1`QQј1c*K&&8-b2/(nd4(lڴ̙3/vC (!SH [>{(o*Jr-,Ub3 JFUz8db~"&SQF+Z; >kynJrJF#### |wutt8p|U뛖O3SIDAT6tЈ @CwKrF!m цzY땖ք c c˹#Ցoĉ}olq\b"X aC(b9gC@l0%]bFJFO>K'w)q6u'JFb%_lm[y\SQsJяW-xP:ޑS' QAYﴈ|Hqy5EL%QO %KӒэLޘgk[tI͵vOf _AUvs 7R"/.n- EUe/ψyO?S}MJF );nqُ6 񼗈Z}=|Y7z/w;;f J?3xFg3<vI~Z]_eO \m6:Qk~)s}' z\ֿ5)./_TthNDDT1v&߶o!7;BGScc |u}e cyɑl(@om}1B=v^]jrZ71՛s>wJICr,ߕ$h64X KB˛.t\'dMCDjV_^{N} 7;I y[_45=ep03 xxn0UZd?1010101 9&^OG$~5gbe' ~?Y1wyExw\_ѲuGg=tu&-z=Po& l0\|@-GYZ?yvq^5,GxI)E{yr{ ^(v[yZĽ҅u]\ܱo?\ ċ}`b !\]<;m>kZwԬe{4&F <Bϵ_~R)ک}em1D` "=ӄ^q% n aڋ7pZp*n ٛh4-9th@|0k<ϷW=snnryw? ? h&Rn""{)e;x,z.FI<톀-9\.7ٛ(59KG!!ꫯe=zTħ͕nw5׏N>^C-n޻{GN4$ \"lza㟝 wmMyh7d24Pç[wޕAG!!lhhw^iIkM0֚0֪;R]zA wËcj Kl3~~kFckCj?lhɫ3끑naT>2]~1V.[^}vKK>u3eN>K'wpq6u'Բ.S__^SSJ@@'''d=xXJJJԚ!Q~"L9!y> vQÙw/kcrcX[\5-'kZ:̼{>jy1yzK$Νx1yn1nS扫; FA-^k~)N'zӑ黿&"OWWgzu"2>c|FF ݇n/[ڵ:N7r$f|%wo_(v# h#f&Ƽſ9k Y,moleggϸi!C~h7QriVQÎGqMD _<~CD.`0e~ *]]^%^~_iu=7^9'DDTX83g7ܓ&i(c^'֛o[x0 ּxÅ kNv-ܴ+5-y};xj>"mWtl͐}Ⱦi oؿysg~6;|% &) ؄ތ.1IԶݻo߾{]虻v-%":~"_HMmn1`HYyҐ}PjhVL2?یlo'inG9@`}e{b$"2"D#E @=_>]v'~x*qچOe\Q6wQ3&-XֿuǃBk,@P!tuM[[ηomi,7l{%Sٳl.z{vࠁ{6333\1Wtv<1 K@G1t$uٹ#?uÂ#o̊97gsq rBZegeg7\=dj۰?6zOj-"ؓyZ~o3^~׿ dhĝ&zSar/[qI.Q~RyvSC\jY?H}8566v>}#'bo]w9d2y{A}}}zzzMMMVV* ~[__LD&IxR#|XݶfS%Z<B̝&R3jI1g'߬7n7ghu蝭BU5E|(G6n5)`5Ʃ7vnoPBG=p8TVS;;h]*UoӜ  '/]:Yƹ$C_lhY&$+iqP.3;Ԗ7Bc{pYG@ڶTɓ7lXz̰i *}#W$.@$\ޙM}$#I뫪O~ .dՕ4(W!UblaCey/:{! k6T,95uۈ-Mvnf8"mKGW> ͬwvkrrUVѶͯ}r _@ ?n2iiuU9:[8feB'2mQuUiSeʴUT]9|ڲr R%S-xu? )[P(~^gϙ:kܫde>;beoHzttyy}& ft "":Lz'W{r:SĪFܿ<1©rssDU/_pНմd","RΡ 27LάoUo䇍['L[jwO$[hse9SgVMç-RMYzܫӦ寲2' 2ϻք^g ֭u= n|ynBų@>pL_l`<"=LI#ޞs#j;NC[K.C{>LXGToܟ"hVS%a}D[)Y4eڂkV//n"SL6|l_ܥhY/PYn3-,uLE?[)[@7"+4zV2b򬬬X\6@$}R4Nsυ`?(=~:L6^^G^a[4|\-C|jhɣ,+{ptQr=0raqDDSta˄=߬.33hʴ$\*#!ɥWF`6R腋m[S٣)pWw?:kll h׫RSS XVVVPPR# AONN&"$n{<n]> 8yJB"X,7Z4 V477G `6[ZZxvC"$111M'q=o,Fy^ݐ1"D,2gƒdjhhI5?"uIENDB`DataLab-1.0.2/doc/images/shots/s_create.png000066400000000000000000000333601511411446000204510ustar00rootroot00000000000000PNG  IHDR$Sc pHYs+ IDATx[P#Y߿L H U] tOwfG3;3{Y/ X= Š"6:똕ؠYLNG=}S*Ȃ 5%.G ~R^Iu9':O=$z@,E_rѧ^Z5j6k&pd#BB"Fh W"{ӧO^ rU! !NDyF|u@sw*o|Sxgu@' |S/&,v?/s6x_0}[ƶ<3Y<#Vgbf^~֞+Fdr<.p?L7e]<^pମa/<p'FHC2ۙ?A Uם$MmX ʸ1^Ǵ$H9p-"ޓIL"gįWz>'=r{.[b0فa_TyfcxOրo$MM@jfy GV'?z_:wN&eU:32550S>i0L҇FߔϰrڈgUٔfW0M1wY$ukRU(=訏d1D\"b4!Ġ'q []'ѓXm&+S<r%lKw^3 s<^'7K'G^`a>w# Y}:(g]I nPQ+h  ݿywƾ?ݷ?ݯλo|?{z CgY (YZv(%9RcaBrAlcӎ"+Io/)뚵Q#˗.m!ܽ- ?t4,*ju.LVT[ VZM7iȨJes2TJZ m-- 90@gf^nĿāܩt6eL-vkcĺs.=g0 c]_ .+0#}똟`qGN勃5Dp%2ږȢۥQg%c!>$0 Jx份]?YAחu.NMM;W9֪|S` bT"d4U Hf _K&q8&ĚtM0)&uRtQQVZ m6^l;xu?bhw6S}*Ì,pm05"DsнG egĺ0.G^Ÿ~ D{8e%g5SR CꥣV2xPզDpǙ{(SKP*>}zkWSRz<<|+iL* +J^Yyt@4j]L JQ޾ 7ݼQJֹ^Gj<ȱD+RA)1m0fniܪV<# TSNz5a+kzӰ[YXC7yqB~iҦE k `T]FptBE@>9֜`o?h;鵴6T[ؤ\)̲CʸpؔK+C!J(lzĔR8lQa{,Ж'2,@Qm&h P4`]hKG!Qqpe,BBBBBt+!ABɨXTpnE*AnIH+׃\A4,~XlI܍諢4*A%@  T.K{xT8e c`0> AJsɭ|t7?ЭJ;&.t)Nu Gdpo*e=ʱedze٪o ]Lt)RoOko}G UǖU1xw-NV2.xd[fV9r&Z<+mnyS馐)1Ŏ:fn1ݸ;~Nrp|e!|S=]LG {O odn1.zRKP響t,_;'O7߷+DBlii6B4RNw~9^.n !uNtzojbtyɏ0dhGt=nUږV.PI-Qt+!P"Fjv% W[ [ !A"C"C"C"Cn%8VB9>JɐJ&$M-CFdō#yQb\oJ}UDv*n4;gսdd)@IE(-2! `)ɤXqWMYXDcCe=Y<_[K9tu&t;}~~(IdgBk1~gV:j33Xvks] UQF.-dFsZl%ڒHW);:.;(X!Dz,@1@Liiﶮ`hh'C:cGarsm[ sΙ:E.#~)sKKUe8,,@!ׁ";:n:6*~*ˎk%k[Vgf. GEdb/͇N:̢9KRbxc|ء=2+Ie)n }됌G0P6Iu\*.c')ob<uRL rywhw+e|1Ebn% ~%MlY巹!RK.[)8@9ǔ[ @lֲgX닊$R]׿ރM{MEIݓ ߌ[Z w 9+m9' LZMPciQ RbԬyo?k؛oϹrҩMUN%Se-ǧaa/r(+1G[Bvp.]};:nҚ}V^;88LԨy,U68s`tߩ|Q8ֲ&|>!;[Ih>[[Zq[~m|n }8w xqXxHK&' r]"T:eGaaRkaGǃBOŭדbJ'ղ_ׯ@oSg+YٳJ\+JUomáIe&UI5???#CϤ5I]եre:eG GǃEdj˯1}-R:hݥ`<[)U#32 sW!b>I1hjK*aEīyfY]sn|:5N<{h5H|44H&lU.! J)ЭBBBBBͱ7C}ݝzMVd=!.`(8DHR^c(b LXd<.at?Zy/rM((oXKU4yV#tu[cBnQeS3" -r{-s*k'-6=|`pW2"l,ާELe${~g[)2=t6 )8OKšǡOןonn*Fۛ(ess ȥTHA{֭RȚcTQ(/,_L~%TԒH C{&F_n6C_-Y2<#Vfʛcά4ʁV2.ic oM*i5"A\@09綥!Q(R h=<ou/(3^~(5؁aȯ4ZEI| mBTA$r'HxhruKoM- X ⥣ Ѯ(/ބBG4V&C|pdB"C"C"C"Cn%8ts~/,)qQ}M?n1JK.8..~ڣo0X,#TWS }MȚ(];ro%{` ʰ(saie,i\F=y'OC{f33\uA_q@{)׶-'ςQ̓Y*TeW~.}Q }M L6e䩬:p{Vk2Ptμ5qbu|`p0[; +Ihsb&Y#Vet[w4o9B[ J5OFD\THi( r:!QVͯo|ƍ7׿NOۃ2ʊ&a˒C%8,,q--hʭAi?V`c.6T<Ԅ#YrX.ĒMЌb hJ8y Y/&D#M7@ 9{ 2qrti( pn6-(JTY&(M7IL¤zܬ1?0 3 pԍ$Wƾ6p 1|Dx_>@ov-'zI8ψ54%#e$)t?Icb2(N[lu )ȥqJgo^KQ]^.}.[ !?=JƄ$&Zn?Ur(QR>v]2&2v~(-ݰ[DJ$!HIE7=@efhKk@z殞QevJPof+!kf+]WJ[[[?^___~ IDAT__A(zqkkk5VRsetKXz.5|Tq{rIq:7RV{ko4 Q殾}b580ѧE8jJ:y'2S^~(5 tBo"~VJe+i I:,?[Iq?hS|&&]n(l%u뜖72 o,aaBoҥF}Ư#w'pn:Kg{oI(pgبhE˯ TA7& Mm5x폄wʹ234w!H.%ƶtʿ,In% Gd+gyVx5qPdqPdqPdqPdqЭJq4=' hD=]~zi${ٻmwڅ QZd;qƤk5P=XoI/.?IY]vS̥$;!ٓ#za8c M+ `U9sz7dPBdg6m1ʇY g5X:s5`&|"}: wJiijqF)/vI8TAtCUCl7=WUz+P)?vIl|FU,9N膪@w;7߷cz߈C9+̔#F,':*'g.WB f?h(p {bЇ@ "G׎:LFFaZXAS踪GfaJ4:y~&5膪usKm7sdHx|HE2Tј:n29PUQp21fsu4|P'aԮT,CI LWkx tCUְ(E aH=il%amt[nW9\6Ҡ_'EyO4gI1>tD|H2]Oqi0? ló#~?ybx| e{JҨR'.w3TZ&{ۥo>IFn[&5Ve\L J4yRpԙ~ e2{hD921Գ.H&$s~mv`0J2=B3A-1HR ni^YTms9g6:5 j.7ot QtY Yɵj\}{Nej~0|{-2Wj!6$vtVȿ#eQXEYyG=uGH u.{نCɋn0f[ VBn0tEEEEEBv尳C}ݝzMVd=!.`(8X: !懱B Nfd3vVQѧ}i%!W2nE-C(]Y)quG]<\ eF2d "։냊Zn_kcbb3g)Vʥ..?7 z&\~J=gU#^dj5g*7:37>0"wYCңQ/U'2Fԩ} ʳV=7eu KDJQ~Wh /w:,">+M^G5l1ma莛Ut'^`& iO$?Q:ƘwE<1wX!lbUdGnIEN{KPO#Idֽ&{a"ugObAqž%u6R%% E(!^8ɡXe32t?a^+?d>p'axe !Aw#uP>s24#YQq+c@45GbN eiK}blԭ+E1b!eL B088s0EQ$ IhcmD GI!pJhOX8(28(28(28(28VBS[Ia2~"(jQvŽ#OcFFgz$ȵ<(B r})_Hǡx׷*s r!H^K@[Z" oI^ r5QY<_c׻<=Wտ)qQԈiH*h=-!s?'Hv3blz#x3Ej]8w^ 4e+ŏb"g.UtډZ\ՠ=gOm:6?1R|,wL. N{"K\9y(-^"<UH<39n[A%;:nC%chϟԨLWd:'a&aܑӀRMv#ٛnKzRd/bsM@ h'Qt @HV22;k5mȵ@G._@RSȭD,cV (Td!ШOURidR%E"C"C"C"Cn%8[hブͣGxVul6_Ml"5RhAZGtʑL㟎@DM B9vHu 9P#WMn>[nnn&6>z-JY3c,g:BRmLji3<3ђx$oR:`D5= hr+ߤ^KЃqh^ʸ.&qA-8pYi${~Dnw7-]xBśTizrq ŘE=-[M~L' ?hS|jGIդ'!G d;F:eoy$mIB} 5}$Aw&u9nc:K|x~J .F[1o&QW`n{«3LAJS>+߭r.@.7*[ 8(28(28(28(28VBn%8Z5oҟa=tLޒdI^rE$2ǫ@b7ۅ@  6ap%Ry=SoX-W >]0D ja<# /9 EF:jZo N'.k6v+~fUJ1?mDM1#_*g)gS݋ާHLw|h6+>?}:UN$k OD K{۪X2<#VfʛmQq"=d!#y)˝T|o} Jdԫc|XۦdRĉĭX|o_>]%DF;wB|Sr"O hiNʇC/K.G^uVB"C"C"C"Cn%8VBHBE Pl\4֪"r]а$xi7EM}"AdGm&b1F,Ff;sTyoVZHAdGB{Zh7GvVB%ɨ4Cj?E mf8"5U[ \J}%rgee%VzųO[ ~GGy3o)1]ÉXsh3 丕7e Ds0_dWH/x~^w [I'Oc_MOlv3TlV_ suӮbO&%MML>svDG*ﳠ[0/ M-#45] DF6fen%v`z$gG/ ҂?#45]0F2oG5]r$;ҖLаHVohtB ,BBBBBBBB,c4ai%;r.GZCg6g5Xq׃:dLTc3dh˪*&!F}Ki!f{:S_e{!ͫB{RGUF# H|:m>IHݩK,TlE$1<8it,;昘2.Λ\~_#EEEE'#hi8p$Cr#HQ[IENDB`DataLab-1.0.2/doc/images/shots/s_edit.png000066400000000000000000000267261511411446000201430ustar00rootroot00000000000000PNG  IHDR&?d pHYs+ IDATx{xg/eĉ8q2v4iѴ酤i KE- A,KY:{8⧬"yEKfQZ *6 ^ړK8ǞėX94Ʒͼ(H}@IE6lX@hM-> (nܸFs&B+PxCHRXrIJrk3{?t)0;ϕM5;CHV:s O3ڜ^T9nAe DhHXr3>6;t)P^vJoL6>x<#w`!%ݗ|C ڼNy3=~!ю":Q3[\}7h Md=Z6PNmv7R פMdwK5r|܊_WΝqbsĀwx ?J7etSc,˲D/js6:{rH@ }4,Uq+R07`hݠ0<7\/qq#Ȋ/l@dyRf ([Yy.\rq܊(⋋j89e[S9cӑxֆnÏCUImV9XeY.Ԍ =m!z Z+0#VlJii]*˦,͞Hm$c7Q3;T[onnCYʎU[2NcǢU znw "3-ep Z5RC|NJ*~Њw nf=vw.[BqlbWl. g\]*"3U1^4WƋ+ժט]UKHY#c4mį7~R ޭa7m7QۛmRY}Þyz]*~G55~Z%M*yalz"ng9olф.ȞZa(cqbl) ~(xNu#?踯@zvc,sdiVwZVEVf`2`ZcѩI%_@IvAv0 i3IZDKGke=-?d UN1eOpLGw65}EQU)MYBMra=?1ͩ*"Qr)?DH:|Q%'VdA k}oOmYA &Ն1}kR/oKlCݐ\Q|i 򽷫kZ:z/JVreG*9$,вcj Me2?]\  j,+ 8LBH CHRXrI K!Ia!$),9$tFGG>B+Bmms~K.'!a!$),9$%B’CHRXrIJ𩩩+ʲ\BHɽT}}]cN"%w…8#Dd> sBVaxuǧsڝaYe{;< f,o 9TqH/a򲲲D+,;$YE\Qs&h=4FDNl|9imMt<8E24V5-ua#"ݹஶtiXe wWʆBt a*ћh=mjZ:BKrᄗyMj,} Cssh2i.8< S%l"2Z B.~.¥!^rAk׮!fff|>L&oi'i{, dz &MLӞW r b߾}GEEE'2v%D*08tGz-UYV\]]ݩSFGGGGG/\ŋ/^KN:UWWUN ;lLIbWW$1J,^hc,`_9 b+$Byw $),9$%B’CHRXrI K!IySQ=inM=Jnvw/_hLuhBUC;;/zd۷wiG# qѯv}aAA|Kb߱/wkoٶNm͍;7ܡٻvjz7_>I)i؍7?=}⭷WUrc>'ꎏ3Gh&Ekx]=_s׾15=R++ZTw>oڸa}F,n]>w "$)eeEy_x>¾{~/f}??;qSsceEy6 7GNM4bt1wlh3t!lY?G`xr=w/^|떧]xko=uajTeͣĶu٥i i\6C0vy5csBKcVfeYreڈX۞Bya8RKɿ6NOϸ6_G.|K.C o 2Nkuh -`ණI3 Z[4AC.Kc}NF HAҫ]swP3C2v̮!#P^X5ʞxm^ok=A~ovlk}Sq97T;ݗT7ݙqNKD;"LRШ>iﴶBw17̠MZ$>^矼XT\.xPXX`{O|##no]cp_}VR^=J)EշR@꽮;U(&uE:iRA(1u mZhlфR-iWVn~ LͯN/$^r%;mͯcd>鶧v6W5ה쯻2#)EҸV=UFvoLhzHZÝN* BO.J ITUOxs oo\yST [j,<5=|]GK/ZR$| ޲_{7RȪKJ?x̯_>k*OJI=fҘzEX; hjoj'~yOnj~hgʔm^ƦS($Xf ֌P_kF B’CHRXrI K!Ia!$g&2=եݵ%l/W1 l$+3=vq2Z]VRzZStwؘFb҇]h^^S\rrKj ٞyZ3eR"]"\|WO3tFޅ?)ģ O(m7>\AFg/mEM ZǢS$ժYF :Q.N B(WNJCK(Y s/Ԕ<^ _,ӻK+k[U=3΅iRZ3BYKqQ)'kBAh*J7l-I K!Ia!$),9$%&|!$)LBHRM[rוʀrVZ_qk}7-1 ,NJT/ZU.xUEՖ]W!m0q@-#ƟMgKl&P\NF_6%5m&|[=a!FsBK#m,˲;H#rAsʲKbK6@fvy]zp1QBh ʝ _'β[W[y _4 xVb ʓNe=z٣"m9&|QM@uۓ5KշR@꽮A(KO|s~wZx$|$IکX#vz,Y\@Z{;Id IZVժڽXqHk! _- LBHRxB’CHRXrI K!Ia!$),9$%; h^GhE~oEX"$1,9$%B’CHRXrI K!I%(9 >L&S*EEB%o|Ng?~Nc U+rf4157QCgm"òt8YJ&bGJ` %7"=ɓ'2Nc`*:~tQ~?63!hnal:R=B : ̒xܸQ\$S9;#tcǮ_mZǢ&@(g[YO q% DJo Wf3ժ\gDl0sU_Mbg _3WiCLhuanC[lIԙL:c 8Y'^r Ebg9o$8\6wC/˲ ; N*wHk ] n?j!DYh,s˦9H/9\.:1+) sP,vOEc5R1CU<鎛 xkx,jjbf7?E0xlܰ^ův,w?E>[Օ%f Жz=Ʀkj:XDYh9Zj3})c?k`l#$Hx~桶V?p v+,(W80L g64hCX븝}HOeOjkݶNppN}M*^6@ eel\qɾUVZZYQ^VZRVRR^ZRVZR^ZZ ;UɅudwG8PƮ U 5Tr$:/Q~*Ԩv'Pium}sjf$Iv@$(c&`MvŻ~#G"r-s1m"[<вdWff8yb*%GRYYY]Ah-o"h,^VD/B’CHRXrI K!I77ǜ9cv[Y"2,odeoO)n!Z%;=ЂOΟ=gl\ℯ7~Mu[7WWoTu_+Q _%~-MU’+*,RW{es\(acѡGN^Ae9ݪ. #*r)r(Gmvp#=D(IPTP?:vq..i v *YdEr  8"*'{9ڔ0ia BC$EdvQȑAvBA77ǜ䆶V#ʋ.uiPVQiP&(2Jξßv âDhdQuK(R*2R&+R*uhR{BKtF$ mDF#-BU'r6}k8<%yW|h, NAjT (,f~#|ORi=fU1\q̠WHjhb ] z5N-e2$Z-y#-Bid҆҆m [jՃu{`CbB],$3IZ , XeGإ2*+>jR [=jA(+,w,!rP/M%ڥ: v$VKBJ7)W(ۓ7 _RkkC?5jjkkkku!CHRXrI K!Ia!$),9$%*9nq">;s Ϸsͭ7IChIXr''Nv{,>sfS_l5J*߱tqAvS'ᦇ4߱D(FYT576>s7mZƦ!#L 冊 ɸC5bs#yWģ폽al,@^dۥKS,)'+&̨? N}tB+SᣇOf|ŗ ^?w\z\',̤`9Dl`V$02LJh/D=FE!/g _?'_=+'^W^=4C-O>>;v/ބHp-w8r/~a8ҋXT^ķG'^l B%|ym?XS7k;Pu-i=U[3,"DjC ԥm3wI􂡍?)cA$,آ%H*w;^9Q^kSd4=fw(4Tʳ̙xQ~XxyI^^_kOgo@Gc=M5G52elЙJfWvbV7{,#ዛb߾`ˮMF욨=Uii?K:kh,,hvDw:'F/.p e!,ho+.}*Q B1R%|uf! ʪn_&yZ٦;]EhUIcB+BU-9% 8DHRXrI K!Ia!$),9$%B’CHRXrIJʒMK*6/Ongo-|@+Ǣ#Z#г^fKtt| aKfB+Ւ\zJ.MdґGOp&2 Gͤp6Ei6CKtD]JgEX&&[\ihکg0p@hUe_x!)eYGE|/M',bZ_艄+Zk/|01$Z5RM+ z!4KO=4U1Lakb&s ~@L͕dn-I aD?uIoZ,r"J,=O/y/iw?5Wr>W6V/[6%JQM*g6H8;8_+tGk ժdo{%`DJs; aitd@˦bZ=Kg4F5l)P}0+Z"xODvAt_/*6Mm\в]v~X{X"$=Dh`!$),9$%xq!1}ZDfx|p__ׅ'@ e3tz+tb/|Dnń,M&&&EEEQo(xcۅGͤ/aV9"F1"%o߾u]j)PcG's` )cl6C{45BǢSI3t+4X3Dy Vc ip$z;'Dtդ4YNkuvX -"A o0$ٳoiizJ_]蟜T* FPj́cEm"[<"htBYeY XEEE /`7n\rEP?KMXqcөnӏ raBR/B F96Z,066ԻZ”6ܯIENDB`DataLab-1.0.2/doc/images/shots/s_edit_annotations.png000066400000000000000000000124371511411446000225520ustar00rootroot00000000000000PNG  IHDR pHYs+IDATxLgǟ`0$8&$1(Jzl;mu#VۤwKD)׍r'ߞ4:eOUu,8vՕ6X5NKJң0))`|lYX+"G+\Ap +(W\X\\t8333KKK H! veaa֭[sssbX"n׻!vefffxxx޽Gd!>zJMVꑶ '] _| aKs8}Ƚa önYprw:@`iWh`ZE諍VYݠAVY H_`fiWe]M D" 6o)m(}a`\-J |~yyǏN'pMw*Y[~IJ&ʬMgjZ҉MXYoidKD; zKwk!J I]N{7s19" ryoo{Ǐ 3770 DlxmQSSMQb ggՍ+jhwOȿkd0u=TG/4KxZVՄ#;bA&W}PZ _wwwΝ;KKKr@)AF3giW&&&cKW_}UXXȨ_|E* wj GYe֯,ߘZ\NnDvU_PP}۷3xx<^QQъUJ=U4ݹs|>ߣGj560?װ a*))9V$߿NB6kѠZOm*"k##2 'loБ8e6hELhLZzSbJr!e6}6hӵk&OhBY찇Ao:!ȴF,{<ъHϯ sZ z 9Kh qgѴ }! ze0z+M3'KYi 0Nr1I+_ :t㍌D6mڔP˟D^x *hQw)d;Y$Ɨ<fffz{{0X4=)$wAsW#GNL& wTw@ }%Y!_*ňXrUiO3B];{prh3*J֎ps*3Vυ}R5:JC;J[;:BF0.vx 1mLToĺ%WxP7>{{_¾]yvyrrr2ܸd˥I ϊZ.19sa(Ss>(ɅQw.R{xbHc!\>wnU!J/o~[7`ϟ̎ \^׿!DTwV/V-3)מ99yNm>fn7_$j]&7koMZ.N麌ݮwrYexi `ÍOcfxjmv?}&j3I`ɕ-.x;_~Mߗ%+r0{UT*c'n9z"ilۢISOK.RZT*qޥpb-v;l.([W,sj,zx%_=GG$γA{Gp*/o>t?{{U poU~{vXb<+m IvFq*Έ? ?ٳR~t9fyGAG74>z.Vz .] Bryjב?,?vRxn{`X?.$+榋O#yo:Z-@ Y "O _ژI**[~S%bGaa梁U = GWvHSٌ+kOߜg\}Wn/-j֤<CH[tyEkϯwY$ocJ@q W;.D3#nX)-&wP r+\Ap +(W\Iyeqqp,--I$ D"jF7ە[n͉bDgggW98D^Ү ݻ7o!yи"(l#ZghߠkWkIaɕb%%%eeeO<ə@h)*I%WVA`~Eq|>߿jj*! Rwwwmmmaa!@  b1a@`aað;vl4~%ԌiC5x*kk7YMm3,N\Yo%m~ qug/TNVFfA8kaǘ3ỲB|-D73EIaѯϝ; 0\,:.Dxj>F9z)kjjb㙚A8 l۶m۶mM(mzIF*" W5+-4.P63ՑBE= Ma^ V:l'0ƓSF3s?zJRJ0t\ŻvbJBP(D"HP<hPmFhZ6ʅq\NhQwa鬬ɵ[lRPfm`2Sg?ETSYq 0մڧ+i!;G3W4(hZҮ*X)g,Ob[мoritZq`qB溦; 1):Ѡ3+ړv^i2SRqXc5 JwzX=zI6[qCe`",A~_(:i/j`yJust̸ a3 zΌJ^Z2_]Ap +(W\A WP kG䚊J'zA\Ap +(W\A WP r4+hN WlN3&gAƝS]ISܺup|@d zΌ WP rvEŰ X+PnZX?3p8ښIENDB`DataLab-1.0.2/doc/images/shots/s_edit_metadata.png000066400000000000000000000103101511411446000217610ustar00rootroot00000000000000PNG  IHDR pHYs+zIDATxl[u{$EANl-N8 '¼5CR)D %:%\ƀĀBE@:LZtыDZs_o?05K_npshÔr4-%Q1Bds,\^kz>[d4f'nvB'8% mX<6^{cĥǖ<9&[FJ3)+7uRVXBckqXĻu|;Y}G5ڈݡOﶺ,vqzVq>~m S_XzVWMuvE}$v33RZHi3 7CP0, -X{2VqChj38'hSy̲Qh4@"%qn-ceN8~NuO<;m*kC x9jѕrQYe.dYgKVXѭM4[-̍I-C#i12U2R\g_jp8z6W_n`NIDE:\;<$l[ax``֒Ilܞ K0;:.ϵ]FJ,Lay7?*mvLXv,4V8i 3Fh7neH.e:'lM-y}`w[]aHDFJ Ν;IGiYX8w\FIg4}iFZ){yyY|nn( x(ѣ>q@S]]]~ ho| <[RCbBbBbBbBbB!iuuu}}]ZRkHH"=3~Z-|U^^%$@& /߿'ǎSIVL"7oT*r< @0:ySŸ{#k:]sK `Z@P%C1][ogNAla0 !af[?۫e=C=K]Z`=C2MC[e'akNK#9mP(DQ;`qlg 7}k@܆K8p OMKMZ0i%Ag`&4 %@tQH!-&\^]]-t4Mt:8?13mSgobgQj2$ehd"ВiJP( ŋ9U*盟$3oktZ3.ƚM]5K~BgVڭjuc2¢r-Ci@'py|`g jj iОip-]̓ѵ*IJ8[K[CP4@Mss|(=ZHm>;;;+8ȑ#c%E蔃~x(JVwxHQ"-Çy>3!@1!@1!@1!@1!@1!@1!ɷYXXUH_ﮘ=!\bbbbbbb`gX!F `HɐŞ~9?d {؉ǖPd<Ų9"=3 ){ d?ǫ3BCC>J]>j>'kʾ2NضOލ[|ޢt)TP_n;:p0[0vuBHSYAJ'* -'ѧ=gzD5IVn"홂\W+ğdTW}n[DKQ5IVws+ X>u-ߵEr&jIPSjTi-{4+?cS_)1swź+견=vok^ȭs`y|sRUU]MV)RoXw%;Wo0s%K+K6fNa;( xDUݫ ZwHAv<#.cBo4Tie`|F-a3L1PL1PL1PL1PL1PL1PL10:!F 3yl|ki0I~5 \h3ypYBS:^*FO./_ʘ~"]t EUSsm_6_\-I p"l5WCG2q,`ϴ+Qؒ>ۓH8b29CG2q,H‡W|zo(B1Woؒnwpbmt"6$Ʊ#{O=!q'u2σn2BLS賏SYTV1H&;:쵶"'(R;Xȱg3fڅ:[.L>c[};Б,8bL6RL`t BNAxr]#yenńńńńńSb`t B NA|~u? 2NQGzΙ*cv  J+dw \)[a.?CD4)~^VQf*lniY9)|1(Ig +啛 R-LWw'(y@qmxc;rReNN)zO L1|黯ŋ2OG_J7x_n5$2Mf&w;)eO[Z|0}O{&}gEzQq ݆7/Nij%eOaN3ā{|ԯve7^|Tn?rji.\G:5vtkh?5{4 ԡi;Yu+]P7V2a[՝aS,2Y@;&`m ]&}Jgr9(7 >M¯0 evԉo](gKʞ[$֌¤)JW?[ۈL|BD<[S%$Jl3{RRM3B0t)uxF\BbP)uX׏ň 퐢Z搝".sx8! !Fl$M Ȟg&rX^^.0)-8ZPcIENDB`DataLab-1.0.2/doc/images/shots/s_file.png000066400000000000000000000220761511411446000201270ustar00rootroot00000000000000PNG  IHDR?8 pHYs+ IDATxypNdK4hꈎ&%-p۲* e𮪔5*$*`m\h&apD 651 9 c4 [2I(-knߧXV~DÀ )vm7+Wov$-\ZTT2IHKا"T*" P0 $YMO^ Re>|*xfл髑gREC~ 1g䃿,9`_{>N6FCk)!M(6/_x82:jL0\PIcp4LhI|N#5| eFLYXR)H$Ⴌ|g(.^47XSĞrvimS +&>Ίemi]OaRڙ&4W:a0_`WxFczPݡt3(0ِX̿~Q/\pLQ T5N M< UmnhStUT2|pH2x<H|;3v#-v;\w \yfTZ0qW[,KIࣱf=8WܮR&P+OviU\ۨn4u:aJᓆu6={Ic!H|_0+kSFΝǟUmKsM,-]ryZ.mgɥ6/bZ4>EZwFOb|yp}yH&}b0p%X⊅+Jy³8/$᳄7uY kZ͞v+EY=+t//8[KgV 7⃅=M o!p'[E6zsP jT*D!.HM"(+7&'&J9ϛ֋$ar}]?._vؑ-v[* M[Imm6NF7&Mr$ӨR7IʳSeժ{2ѴFBf Bxs4 <8^$Ɇ@R2Ga4C0QjNy^)&jw\[_e-۪k?ogi4tնN<ޘ >1QjyԈ ض^4)ZJ}ޘZju1̔uTåSyc*Y7T(5:oj|[/~JyȨeqBeRڻ $hZ`Rҫ uidc3l^cqWŮ{ՐʤhdUDcaFjh2RHCwtg֋;:wŒ~^ݾ oK/|}}?{Bw &J8)|Se2Yss3gbYP,izM~MuEqammu떮YRo2ꛊRoA7Y֠o*"0P0@"T*" P0{UTTğ_XXXzuuuuk +5 TCCCyl'"w׫T*_=aIԙRYZZsX;${OU=;7إ9@2_@`ff?22rŲWKJJ(vJJp1w{z<*줦uЮ` ~̼kloU*qH6鹹ܘRn~ed_=Pz'Ǹ1v<ɜ_7^޳*\cc?x ùsU<"Oc) ,^1Ŀ|+dJdo6y睹j9qdXJݡC:`ڰvo?GTswRq~g\6Rwh[c8Y%={b6v!c糇pťe+c{GH6+u՗/_fr,é )v8kpA;#pZ~iXG< c:d ؾ /J'?p|rGO_ݠTpD??}Kh+0!YԆO>>-((2s#N1έ{{NW pX{W;B2.IܸqcT*U(% ~ifaT<==Xu"cR(xj73x+UpTO*m }Ĥ9un6ec'^LUN9:qۍzG<3{$$̫ӟVZ)R_]]݆ r9uy#ZiE(..(Y 1}m:jA45ȢH֧~1PtFEbI! ĒEu ɦ65:O-p/՛Fy>pTЫ'2FYw kIKZ)N7aZW$$S;c%p_܄w_E޹뾅E\viڮi비ge29<4.O]'M m׃3DdS4Mۡ nQnϓ`ԏ)"RAxiID۪W W WK@$&)\]@”4tihӻz\IdIAGmª$i]p;2b40dfAQ@ bْԐ4媴\eFwH, O&YRD$d@Z)/,T`uu`v[ Jt+_zc>S(˫xojeo w4PbOߍ&<U[5iei 20+SSA;y(aE>rDd)N#^'H*Tn߼ɤ|~U]|i $\Q%` ) @TdY@"T*" P0@" XY3::[5kքHKpG*TDRaJE*TDRa?S?gJ6?++QRWчOE z7}5LPRho$_|c |%+=uo 1&Tnw' ~Sy Oy3H\"q_v9K34:MHZWZmfM9 = gu%†d^ KQk#RoW@eS"7oJem4' iv:% EntOo&gJ/ oG3GV,= Lȴa(i$VqYeixJ WK+U*[KnEkzwx׽3|}Q6g`K Cem a.-wNP=fL*j0dk9 R `xh?UG{w7E'&@\oOƐxyP|T[(U!,å a%ZO&=-k[Sp+S l}@@ɹ럫B o$]Sdc5=.e[l2fmA.ڌV{1tʪ%DK4$RaWq0\; EARjm&HC4L( e<3S)2Y?%-iv8F\<}\ O1+};3v#Av;& 9 CUw%3kѸLlIj1/ʉ56(pՋ?.t`8Kye<.DIWUkJ KzQBI0@"T*" P0@"€)ŋR޼nݺZ,JZXXǯo |:"evsoR!g_85xA9{ST"ү.~RY$NMVv8Xw{d}#x]X . dJMoLw_()U|竮p_#SU]]חJ mvI!°;ˋq[7aVnI9 "W{Uo'^Z7z8SdҰ,V/ TϷxW65͌O0J CdfJӤwE9Atj#zPvs]bVIا\w}NAs {>@ cǎLli,۪UÑB`vR[[ mzќ'l6|>IQk4lovf|Nn /;?ڜ[vڢ! l8 h6ʏIDoɀd@R2Gim踾T9wgMќ'pBޭQ,'U$sRO^37nD_׮gi ricXд[T {;g ];mɘggg7֬ZzgdELO)Q]&Ƣ.*e3DJ*_Rv[tTn觚1JJ eLJ{ML* Zzj2l6eHi*nAi҇VT1;u`0*u$]㪟;OtMzcdddcA䥟?Wofy酟^𜯯w_h澩O7_zϜ9˂bTX?;uݵk֭[_&dJ /jdwV ASaJE*TDRaJE*TD}``ܹsAl޼yΝr| j $S^c΍Ή6/~~ŋKV?aHǏ/ ~xwӣo|s?oϥQ'R)y+?^ j#G2w= }S@B={vjױ_Ѿ`ǟˁ~1|+_:w\*l.{vXzIO>dZGzxzz]UxJjΓ[IQ٥K7|ނ?YH'>`^W(H_[k$SP66#O&N"L)f=8cVb$haFTʀϊg_qo͌JIY6\D*dR,+((WܓY?8;L[R|cqPVb3bRg ƤFrEf1䦃JE*TDRaJE*ɔ:003Gb3 bEB cX$Rm6M055ň)ԏi͖H}菊DP/++cd eeeeժB.#4m]2Qq#)X555=\X#esdc5ٓJ ي*F Y{]md3h'UdߌP}5uTi,:7FX$S#P!B L-ʌk  #ӲVb 9rP]hnĮIMB=z4f :zhfHC>yf N͹;O2+Y$T^gSc *A*' 8qjZ$Nl\=zToܸ1QzOj3SЏ Y֠"0P0@"𯩡ePGTDHʕ+7L[}$(IENDB`DataLab-1.0.2/doc/images/shots/s_fwhm.png000066400000000000000000000257301511411446000201510ustar00rootroot00000000000000PNG  IHDR@I1sRGBgAMA a pHYsod$ IDATx^# 30{VK85i0?40vAl+@ [ Z:CNaYhԭعnγǁϧJ%TߞvTJ՟T|Qݺ~- 3@ s@ s@ s@ s@ s@ s@ s@ s@@uT*蘂84cs̱:`Yå0PtQK۬ :YCB}Ń9ϙ5T]gQpL{^s:ئ*Gզ&@uIkNgkXU*EN|o>Vо Sϓ9Y1zm B "ZYNؖz(5)4R9:U(Wn)/aJȞU`驓yΓGuϟV:Ĉ21 ktL ?Ǵh6 <\F_]Y"69toS_x'KrN)y8ΉL )&te~զ>Fw NMGasrǠ^ǣNng!eC@&疒|rol5}n': ZBmg*:EΝư@OZ.Ċӂ[Qc 䴦yZʹ2UG:ZNޱ2A+ۚ>غ#7OthAQսS_9v,墧̩wS/H6/G2%E.m;$ w0je'ΖTѮ w|v#2 D kp|*yj)4 +vi@7&i$T˞zIXKU3{ʇЎ]?.QGcAdlJ4*lqPT;tvN]6!!;уIcߩ+#=Ղ-,#LJbRA̶ D&,Zk&ĸ-<9yω:{R4Jniun+wWrl=s^uYnB=V"?uIT-[0)Lf:ц-z*h?ul/2&,#Aq@:1+bZ?!=JO #e.ҡm,Nb?Ai)+) @. -6l`ɾ3_)!;Exh&n4| <:,m'uLs!ѳO'(\ݜSr f:R% t>owV(? =uϴqF@ 5*- #_hyN>3JN~mIҭ}ö&i];,mb^Ŧe_ m>y'h+f{gTu: (*w?:xB FG2KapOYLOt).K/2NWgϥ0ocs\95ϼRr%F.1=Lz.2qz\*?6z@[t\v;i~S/[1H XdX5&SkHIJ]Qx^vk%? ELwC@LEG[C?яdkkˬeԓ'"Yb?Яׇ y ;`CC:HȜ]$U yb4@l;!-8  j ϯmV B f),0hl@ iTrt*}wM, f?gj穔8XZj'udĒ@TPHOü)Y,%w-wOKB(Hsfm܎reV /  @fSmJ۔љ|i[֗ =YNX<]ms/W˶Y*Gdܖ33\HY-6Xؤ@5;ݽ,HT l:˟/7 r z  eJ2ɓ6uzHפ}҃>4+HskB-@,0 Y&uBe,,0i ɱ)w2`.S[ a@bn0yb3p-0 yb4L_ `@ s@,0 C0QT]_  f؛5cu<1 C4 ^C7u Y`d >t{ȚXh FȜԨTbFǔvF+Gr78Kb`TkI9=5AG+}DzSQlrГ 0fHtX27J.QAg˲kߓbRy f:֡ 򐴥nBC)t/Tl?˿Xtyks;T'nwא- UoH4?l-SQOЭX[kX~>|hVf777ָ9fdܕ&mMyu/@<aSN4 736Hsv$pzԬizKnʫM)naMĔW GPk$c61@c4В0(3V^`z@0 un G"!X݆,ݪ")G<1 HfHX` @@ mEo Ԗ33\9iR9@<fNk3e_%aMWA2Y`ks;@h=hkk˔dԓ'T lq҃>4+Hskc֋Y`@Ĝȹ<1 lZl0b b8`V @DK\$LY`օn0ACjL"s Cyb1F7?W\ >no"r~.rY@?!\Δ |fjVW_h8Ì+@ s@VW*|{f@HwH(u:$Ci`ӘWLϔUzWWK̊q=?_vEYSy[^ax[ߧUk޿'wTϟI7wo^;Ÿj:g,'?qO>g>no{AƮY }v/Uzy*~ZGJHܻ  n^+'nAVFЍ|HMO^ܓ(ܽQTKM &he9z9?B'Xʷ]VQ|?t{*\ȗ\7;Pnv6هW/rO0w?uH k=%_47'Y,f=).%/O>?o??^/叾p{oJoc/B DBt|_j[|{ɻ?_?7*6cU@=.eO.ӖvyvнY_v!e_α_]7~>ߎ`oݝooB^*;Xn{^/q-7gV)-yڟڙ+w;ظ,6y|E͘<5@.g:H{CPgMzSV~iwftY`\ogo쮑[1qثr?x_[1O|fE~6jK~yu/Bߴe>!{q@˞lycC߸?ݩwn~$F` QHӐrT-רn)I⁴B P@,@%0ZH7y6ɘ VZkVv3g;/)6PsJ5S^md0Do#_)V(-@Z` "<-@7֟Ty4Ka~RY 02[b}) v W>`-t!?S!S"@@VBOs7loٚ3`So,o҉t}m0'67K^r;&]&O>~gOBzO|%"__t`~ t!{rs-'uޔݓ;[$ݚ2?n`1(miƔH}hNg}@_'/7:p.sWGUؒv,n0 @@/?>޽w3h9ՍZ\^#ݚOV$|z#d Iwz'wuF/@x>Җ.SH.@D:6肼k|hEb BR^aCRS+r͹~} 2U/8ox!<1 X3DnLPqtNp]'L:_φcCHβ`ر~!/oԶ0'TP=U3cJgowMO^;ow]]/y)r|eVy69am;ͷ2SdH3sO^=q} &r}sr +3yB*B^ S[aJ9g qWQBeh*bScW7h?s8U -\ #u}fi.:?7A{E:& ӟr 7AH}) fa@ Al`WKuJzqlq떼F}fe'k.?-F7 fM<1 YAJ2 d]` sQ"MiGZd$L`*Zj&cӨ򓃞n *+Y/0c[EoGe5{R]J?@fi Yr;R^ȕY*7 @iTUy/,/ _D7nST'Dz?)/W˶Y*t4~J[n˙?.Žd'h+0uͪN/DzY)TG\ 5j*dHK1\)P3#CeҊg: SY``"@F s_W0 q@@er30 fM<1 @  ]`@2 D:fH̉n0 =@@H2,0 ybش -s0fe tHMk_a0@6h_&~B H*7hY`Zn ?^ `Ŷ r]4""!lte`@@iJ߬9땊Tˑ:wzj-<6e` aPHPYjXs*4 aFQ@vNhփu]ݒ'ޥH'<Yb P[ꦻۑBB̪֗Zq@@r-Jr8I،֗X%ZmO_JW@X_hii`|s\w +n-g\ɹFB,0 Y`զtMV*nKn CcK5S^mvhFD@ $ϭ'KcL򻅞<꘢k= ,W^ _͍5n1@bV Y"@qX %60 V 9@:,j4!y $(]b<y]bh"h/Y`4H@+EV Zx"S3'fM_;tD@EBPfdCAPg!?X5Pf `U zt>`A@@K(?KbRA@t@AAA@4@K(=ɇ"flޭku*Τ_z0֖Y7t ݓ't+l'$:z]Y_BZGYAܘ["@~:~BD M\_ˆD@1-"f$q_6L<}=VqnnFHTfYT, fgAv5'Tq A_AѰ!M 3uiuӨZj'uʳ[~aI˼˾_/|X=q(,)us.n]ߓbRƋ-~V0 [eB >igX<{i,ۑBB@Pפ%m/e>TVy4gaDab_v b_ě 0<{~Kl|_V vE'I{ξewIσs 0V=W%)b^@P9F^`~yi.q_fk~ݏnm=> +{۾ݯ:l0u4PIvm93ϥ[ؑ\`9x_Xf}.|yeyݏe]vvI˲c~{WXCx L6%A(,jkDʵtw;3,֡?ZP8 /B äDsȇ70afL>~ޟɚ/va³gHbE&,tLMIo1o(†MX@%1 @Гp7)!(W>Q.0a$9g 0M27AƆIAmIydϪ!H?6!flA?"lm}?|lwAh0cgۤ?ϼ[_a EID`6ɞt1_ת!H?w}kaI6IG/AY7GP}-X4ߪ<1 7Oۯ31VXU3,0@A(04du1oXѦ]Ⱦi B!Ij]y|}z!M\I8+z6U @xOAaCϦ`uCٓ DIQ!O6D?@1 @@Y`&,0i fMu}} UMkXeFeZ}8ٲr|8٨8٢:I 22'q]`YvS_QGQGfffS2221@ shCCCC,uQK۬I&ÒTvևo;)ɱjjͮN"ށKñjZr9zsxT=Ń92@QS/cGqP7tg:Vˆz3OO,˫hQ6Ro\"Š>Zɾ@+dG)?=yWևy +^E},':g=98G$łNTvG[]EN, GˣȚjZ}Q[G]iVݺKc6]`JJ~8%_473ON[j@ ?ڪuגY>F[ۈ}+2F1P ䷃nATJ\g>i^Kz>9בcr Ԗ.7k-wXPy-Z&Tg)#ƙEגk{Y\?=.vCG 9t!!!!!~eIENDB`R)Ύl.dErtFrOPiuH!NaY@[ؐ%)uU Wo-w~N 8|@I2^C >E7~u0a(*s^ܔr[6kmO?>qh z^0~ ;ĘF K2F T1hXE3U/0 eGt2ahPa 2Wՠ(cG,~~0y=|}@ y~7n$F& # D32;_=_~TS -G Ea?`Q~SDAqHNߡa|Dg& ; -""wʖT[R,86& _ڲד:2NC3y>^ai=TK[/~̄Q1 щީժ/Ą.0v"\̿0~:_~C/p%]WFFFptto{jD>AOucn۩<^-;9|oљ7#U1 boǫc_o`Г`J'KD)$䞄= i g^_BQ3bA@r?Z^CP%.11# &J- Ni BQ_d ^\ b-aBC`PPzL02Ky_u(Ox1 [K_%J1,62ihX$RI 8BQ0eQHi$҉Om4Pd{*xnO 1LMYL/0q~HF=&AB@e_PNh5dqO\ bbF0Cw:=&Lc>{`mT"E~f㔴Vޣj{TZmxJZ^ QIk{X/Mf6t DZ DZc]R5Dz"`=^ją"`=X@G (Rk2&;3"]Y]ْ..,mBN/YܐfB -ϲAq^[͍a8QŽߡގ[$ush79$^|@nݖ؞,>xʳEXe^6g8 |,(njPoǁN9NN6͘ܖj^/PKLME:^,Xq^Aqzwq]1di3y0}Tj,J1,9ׯ5㋲[eYv94ೣBe8Q¾S|;}F:8XQBߡǁN1S,23j_ __oZS8| 9^Yp?+|vWwHkz=n)CǁNWd3Wcj`=XN5M;>xIENDB`DataLab-1.0.2/doc/images/shots/s_help.png000066400000000000000000000154361511411446000201420ustar00rootroot00000000000000PNG  IHDRZ4 pHYs+IDATxkxՙI[&E1- $4cZph[*J7OK좖^겸)h!E?4V c[8s5.3a$Y3,=`9sΫGgFDp@200@t 4Ν;FZmD1zñQfD9堎q=ޝ^kVk kă>ʏp%>O˟1]RD.3 shBjaQ k kݳOW" 5#e|71j>#S Ïj~滦> <w3UpYkb֕I;y d5{;1M-]wgo}9{w͏d|8vכ;YeYZJƶ5jv#rT=ޝ_b3P0Y?}ڻ]MAv_.kdg]ÖƖ͎fM Yx:RՅRqӧ4Յ*WW[v4Ef JZ㟼X Oh%t hvL#Lt3cR=SGC -};Y_YYbcY͑ Uanf/vh :Ֆ*;˲hEFA.kMVii-,M6#&"fC3k7ߓYn5Y]GKHyYty9P z[[Cy[[R ()7n4L D;a-WwGa)X]&IT߸A@__L6nai|%;{SL3 *'7m[v Ađfm-~u> wOyVd9F6?^_W_gee'/W];̤D(/nsЉd8\ɍ /*OSX<" Fl5R 2X>W\Ğadyb[իaٲ=ohno#HRĖ3:Ԝyu}tBJAefMWpp!#C4-<͠sl~q^?/^w~V[w`&tb#"HQT֗owV{)6{f젷P׾9ʳqvolI;{ :6SyOz柹?~N =I{TNިd#|oATYkotox$7UɋNl ٳ}A/d^f/NxSdU>]m$l_8<ƨdZgTq)pg%~j2K08@IpD9jFQfD9C9ˏ2$IOG')oǞp]1ڟSAi80βg~T|8Sm`=M4JNƚj>S0F&)e}#ʃऺj[Y[Sh"-͑ I'RN{d4i A :yNN E<ʡ'̓B5986#$F>,Z$xhIF BD9jFQfD9X}y`#PeykYXD>Y9򄳩 .,J}Q|%:4>oFI7;G'xv2[k]'WTQ [j#ɇc,Zm.u}>Nt-XxA)|<7yJ|R-]cl|Mܞ9!<+;4FOviN_YVX2Sp(dʩ]`Ak ?;Zk-M.{k!AiY2ROz޹Ar1.8~CN`k;5kr/:I?*HOw-eb nO C}E /Ri $P,#egvy|d]JuU#e\AypmDjFQfD9#4OiRRR=j AR 4jFQfD9jFQϪap Q 8Q#hhBf/rg* (EA#j>r{G޳ BeHryr=qZlaJl3# 3 2Rîc*B;o{nym_N7Y392igsX|%yW.ޗ5\Fdgr$ZSmq ,`[d΃ojFQfD9jFQ=y1 ?70Q!H"yk{=Gz{ZjbB {t ?]2yŋJhU|ρ'OӗÜ47S9!٫L 6|3BK%+XXZJM`3T.b]\vwԦ 66|>([d4TWQdIzЦ. [[./~w[^hy[[fB:̂{j>$^x^'~KXݤ"3ɘ\)Jiʫ<]=']]<wuwuTQ&گYDz,k7mSa)ojhM:- I,V_j2׀\Hf$b6u"vG]ـ3 ˍ;2-ȰreLjbI4)%N'FQ-NS+HBOٮ t4 R󊼎*369VQ*yIDƲ[`a6. zIԵ~^ḪC!t: șrꀈK\-KXuIRRG1^6w4c÷3 Ab"U㿻mOm~t ;S5q[ ƪW,ݺ{}O_S9c43I'd5:xcewWOz>)8=[;}ci, L{=!@%EkU<>wШ<pQot&֫aٲe$ r7ݿt7_[۰g9:p aXEF'.'7`~}9fTY}wV,L"q z9xѻGnud Lʅ{Ʉ{uYlSy+X 8vhȊo $Li32`KTZۈHL3J7ȅT*ExQajQ}:S=xy.v ت-Up@עV!p:c9;{idE7niAxZS5#23h YKyzut˥/~:6\{7/);]`)?_y $91qd omCV+]^@P9,aܹ{O]='/jݾrQ2cN[^Ic&/ɳ{ غ8MuRYb"r)zUZEDZkC̷v[WTrߖNjhnk ,Ȓ&ЗY1H ;\2̒2J7E*ݡi h_QUg5}T,bdX6?sw:U,pFs[U+%{TjWnLSgi3&%hZwiKMfsL)3"sx(T3P͈r@5#Ռ(T3г(l#=ۈr)϶ o-3x4fs[>76W $ ,Gfl;Zm~G_?=flj$l$;-6kRgNyEÝr~2/2Ƹsegil`ZN46bv;G{E[Xfo鳂Um :;ܹ--TyCíw.m]ٳ7W6IÈvBln(ﴸC;FgEܖ{Q-eRoL1Ig;^,9N7!ܖt8WƲ[`z4Cm2(kGM8J46!ph't/2\pRF[Og;qVR76=L+Ոf"Dsw:ChNxbG9ՈQGoTmjcIfg;ncs%_9Fc3"Fc3F6zq"p})r^md@V[? 2#H!4:Yf5Ir* aX57G6kEŁa2u$q&g@Uӟ=\[~z]#WƋ5Ƌ5εku(9;oH"hAQj0$ ?4Sz3IENDB`DataLab-1.0.2/doc/images/shots/s_histogram.png000066400000000000000000002226051511411446000212050ustar00rootroot00000000000000PNG  IHDRsljsRGBgAMA a pHYsodaiTXtSnipMetadata{"clipPoints":[{"x":0,"y":0},{"x":929,"y":0},{"x":929,"y":512},{"x":0,"y":512}]}a8IDATx^|Ew^齓(%( HDTWymoÂX(6ņTA@PC( i'gn7\K/fggggg7Y]FFшR… ŋQ\\LbnK 0 :N1u O|=rFhh(ի zY $BIPgٳ8}4Z4n0!?@)_E6sܭ>jCz]jv~ }1998v͚5C&ME4ȑ#@ СU;+3l穣"NvlؽRյk&ϒX:H^u P?\Ɨq:yeøҗCZZI-)aw*Qs\ /Z50C8s Hi"Pag݁u%9ƌpIg͖MZIp4 .MB0 0u%u:j`$65I]l~|3ޅtgXBBd'~iVuB\&a|e1| h0D(A@%či 8r_,N36`t%S]Lmem`Z9`PտFu==HwB,;?l~ǽ;NxgUس .餒.u6׷ej냺ox1MX2 ݸd<Μ8c "2Mx.xpXW%'0 6JD3ku^8ΤEphi^kSY GCII)b[p&- Ǐ@thѰ)B]]q-C9U3ޑ~AW1<\YnXT<8yXhFV~:^T2P^lSWڦ.'_`e?8sŐySӘ=Cu](Ѻf|Dh`tҌJ )z,{%B WQ0ʒwPcd]B~Yж HaMq [N]iEYbءSU/* QU:N~:F6i"CVv<>1xwt%ExaʋR0oĸ{o+) SSa!Z*D2U_?v,Dk|˘ QO P鉉28 ~u9i^qJZw]tЁ}2c)MϞˬrh݄U~܋_wtu+^#G8Y;YA.lLc4m>Jr\0 S h{zBԓpZ6¤=p<>=.AD7YFUW]7YHG-HSJc45ߪ[a\kn b6)s T~u0Bk@ĩqU:4@Kۢ%5myڪq)/Z$I,ق"5Z$ڷk/$8+%a*S:a@PGET# 5O(qXl-^b=6>l~(Zs6at%|2N"QH+!Jn%KthAOw]5XFkܳ~TKKB1%ee O>D#K-)о`;ԡ&0Nnmǀu7N‚5)y>:8p_HS%X᠒yy|đREJXSѺ쪴lRMGT.O>)ϩ%LׄZ]jV.=xئ ZV,qa'Oyj&!u&w$#_-㋅v"-"e-Ck,gk4R]t4Y-o]Ns΋P(\.@qmbH=UDZ6F^ɷTea,S:XY2g#}:+Dkq$B]rJ։N;mfhhֹccG5u*2 .`fȋF~0u\0֩kr6V$@?\mmx\e˖"0oi5Y{ۀ-T`0%P!SSkۀasX2 0>wpڨj۽樓`0Eu2 sϷZ Q;e51ʽ-a\(+e<Pa QaP羮vY|"ܱd9aa!C( 0 0 0 -[ƖPaaa{eaaaPaaakeaaaPaaak8(BbN& @_]_PԔG{TYUM]*C,WNmoKVnWV}gHh3[וGxKY}nx5zն80 0 NXB0=N&bq-(=*cP%膎91LL)E{IOG)?o)ӁIcj)&E4+s5w_S5^WxCGźes0vՔ_qJ/;S_3 0 #J*fL%a&Υ4 X!jsnsULB+BpLԪ*: sk!K1X1 צrߋK0Eaa@cBmXUNjZ_I$:o"`&E|x#u1歳1_ib;7oY nxc2ֺ.+fש;;6z +؎ZJӶTfTl`Zb|j1Z:*筴xeu)qoX;.ej=F{WZ:sƎ^J*,y1 0 NPPGKtzaꢺntC#ڢMV$\fsbX}Ϯ$!ZVdʽDs-L>[IqsEl:[C0gTloR#JuJw,֩ۥ0)~/ܝ] uIcUoGcYiGKYiYΪkp|טDƈV>h Gv4Tyo& ׏N@MV+n%,_;GUB&%qy@+)HNCډ 0 0PH*T:z_tnɽӟtוUh;AuՔT(e!d81IĵHjWuJe-KLD8\Y+ף4VQD]ƣm(6ˍs dV}ӶLAܖ0Z\^ `aq YBbkmr6L ؟2`4, ȱYq 2l3b`; }1 Ѵ~L2,Tv&:9nK曧Xتjk ^^öҎJu"t-izy.OX˅\7ll*xqU~!Ϻk_ yוrҜ$2 0 ønҥ뮻NYdRMA\JM"V  %zmaaw<9&aj7KM*wfSaa"a u~6:GMo3> 0 0ކqaaa 0 0 0Wо}* 0 0 0 ֮]k,_VaaalC$B$3clܸQL%aaa:!X0FV(5*DBh/ld0 0u[hn+ mB ѣa{a5ns`U\LX@4$t ?c!U|0 0L`Sz02J&\ 0eq)p4g(DFyJj݂ۜ-"e|)lذAYbj"d%h??گ5aaY%[W6gj.edٳGYbj ǎSb&2-B 0 x~@uBC*?oT͙چ˹w20CIB0\9e d&H>uGrd8y706Et ĝyIh"wCtSЉ>=]Yb>=&wř3gѰaCÇl(+"u~Bedc'}oBXYJ%8@hz9vw=+m~>LjmKp&È|#Ь7 ͛!Q\0q- xҵB ˑR^r% TR"|9 '۴=W4Ap3KTǾ ׌-$\ל ݻt˞b GلΝ Aw=)vNh+QAF>mewvEΟϡrRtH,? J%KY 4|y-$B QÛ(-rxyF_'>%ǹ-Fe6U./"6O=]*Ď#%JJ9yϹh\-[0g=Q*/$LL.YĘ$P''&B s땥q1'4詤St8xxI#ϣ'_ָ6iMpB:%%%믿JAa,Nѡ`ԨQR:3"/;aE ,vOCYЕ+9L A0r:?@z+h!(Jښ2X%nTٱ Ͼ<\}xuhX_th&]ZN>-'A۷mõV0(Bz*, KDz?DAaL à}q5Wz&֭sZ:F-*6##v/jMW:uB|| B.3 cKA8d"N Q"gløw3|wr-ܶGh1[p>Ķm&9;C wyHS~~MLƐ={q61'?yߎzvCtE#_~d_;$Cix'Գ]%Sqnݥ3Gc_:GUm0PnxⲸ*Ћ/b̙߸B//7)BRs1 mF&McYQj9&P@hӔ) jQ|{yM,hemElPgc1CW졤sQ A"KtsF^kS^4Lk\is{n1Z@qKo"7/k/Y 8A]kf}aŸ7m]!4_eÞؓT|Ƙyp1iRې'*S]bkΞϔ׻3X˯GuȠd J[@ÙJaiߧ́.HM7TQn+3_?l;oGљ=_<;%gO~Vy %\-N3"Rӥ\\,J܇pe¢-Q}\t-tEssdt\\8p ~<@qJu;^"/mS~QT&@7חa蟽F?#/f7b^ke~r|hrO@oǀC*1 M} ]_{KK;4Bk2W &?orl[7#⎯Gz\7aP;?tilA7ۥ(%:{8tJgx#޿]6hm !(tk%]W4LĩKM=Lܕ~nxW#`mvC뫇_+4~14LwJiǀ3"ke8źs fޡAEg8OeA/G`,84.t&/')3oA߿gDnp}4!=C)PhIymh[W3?Mb"\A#4HO|NgOgnF`POWS'1q/j;o2ުx2YAWx,Xh,OPGƙhpŏ u]G'xk8 ŢL'4 i,%[ ݇g 00\GXN܀mj+r4k#P_lc@V')"_9~8xP ;#;F=P^=4deeUp<_p ֌D(j~fAqW>F=3G >5;!7AeqjW'NHQsѲiN$/4Ӝ}FXlsQ#`-~MfUJ&jfmĵq4 亪=FW&=1t`9SH?w;vŢgy.غka1q~h1icUYȢI $CCɕ%re?ǥ"]JW"NkuoCFe7C h!VzātP\sC^c45lsg+`ڿCAn]sG㧜8Z!Eh!9H- o T+ v>0đ0o1d GiN1JQYf[A׶'4.~"6hݙ}ПKY6smmg޵A~hvB,N -FP}g"d& /C(t'AcGph*[B]^6Jں mm%gs}SZ!8JF qE_/Hο<58B`h=wƅݑ׹B8ؠ!δn^+ˏGD(h (;3-4#d%%B#W%zhTi1Zxiae!A{5|*W*K C/O}gAߩ?4N\F,tβ3}1K{[ QlclYZ/#EvӦ&/8ZGCa:>eX[mf;\n~ öz: y*SD9-Bѡ6((n^_M,ŘZ-c2N.S/HHtOvm?t3?2$:C1 v b?s[?tbx߰pXaݷpgrxsXY v<#y9]{]oSpfFmFf9rgih@4mxJ<Moi1RYpQq- n xidh<3gg-Yեp<֮Ei fU!g^~/>wr#|<koªף]bo>{nE>h[*ah .</-efdځ" uwui[*r&} ZBqJf}3&h2 "AKh~?8Ht' `,)Fw!( %Zt%gGmA: |qcUgE_ p@:o;p,]`s|Z Dhz  u0[*uaen(Rq,"?SYC-[B_\C%&fl5TR௦ h[!h%=,44Zoz%)@Z+t*iJŽh!@\ߖ9Kxϰ4l^"C=uyف6zj<|{)"¯4aʒhܥb"+y=t﩯`xeπ0g^4V} (iJiP:mh(,R~wDx y(F(*zWbwp;;Q~B`thVw[`SN>I&Y_ 8qA3N֗."]~ ).:$z*z93(9.55mw| 4q=8!G ~8 [U#2{7`rlt!CeBU2,gpiLұ{' 3VD)X(>h- _+ BZ)29>~J^edf9|=40 n3!BONöd|/kcxivi}/qD|:}*_Ho;?*2,g [nn޼_}/^,dq7KK'ۥ-8,Y/RnKe83D`)q-q* PURs,G?bm߮̾ U:j7] 5X~}B/'/9cDZ`bL|Q74v<2i\e8tp_,΍;Wyqlp~ hogg+_#Bh-Mɗ"':A , #~-e06hžcBҾ-xzHyC]M!H.nBB W?P2o:^i4g\hv`8cNW~.[Z,l,^?s8}z%ᅦcuwQj>QGۥyz"?Pz ƀgi7In6v I..`@//[+͂km>vzD.o't]I(>=(C$DaGVByib懒i^)'PZy5Gcˁ>Gaa :Č7;:\=9si S7\\~1]FSgǿ-QMVSY>u⏇E(v DK+_wD&y(:h[Wk>0DT7!Q[GX}CyF"_keL6/BICwSX.& 8|"GcNA߷>ye8cB23 63>N8[ƟUii/o@\*APܻ,hEGvt0}kVRԫ 'ɈHK ZW.t*JoB&g߷"DtHp9q lڶCnCRT3eS;&ѣr'K%zK,&ЦMX1$Viڶ8{o~?.qZGy,(; !]ZPh57 \Չ|eLֳ@N'rڔWd<;;2P:Ai6(>o7(k%Rj}?d@ՖE( ľq2!WevI#E47`8_)'2ѶAQ*F*%/&Ŷf_j>H'?Ro()-AHVt˟b_zW~qz)B3T|旆\Ubd:~]Y<’=mNtNϩx[5éBD~VǍPRLЩN=U"JfDžA*Pr@NVm:OE#Qvw4f;lU2:lǷ/ỗǴɼ%[: }ԟ,)nz\)8LU+[ !vLHt_Tpc47q,Ws_405;(6uNI?!y9H+Mblڴ *NFxXRmz؎BeW ka@'D Ag5^>?~#c~Ͼ6^ygt%ۆM"qW7oCltO8}>Cn敾K֭[ˬ$L 9QRuȒY2uv/ׁi{ 4ZGynz1^fl[pEHڃJ3[z꘺\}O4osG (D_D]*VKVa^ "u7)+-Fr{w/(cpn)yo zBqPK~%cK`/ ]|;{ݨ &?QCT4OJByJװ[WO`C_hp0.Bz3BH#BǏ#y}7JDo }=r$ijgaT6rx<i${?rݺb×#BݒeR$QJcB 4޽\Civ?juR,[ Yf}L<44Zg`^8X_)QrFa q|9&oLEUʋ]S~z Au!\c<\z2XZ׾sk)P[: SNumYe 5JLX,' "f׎662%0I=xH ӡsn\~t-=6á3V/Oۂ+c%?zKW]ԜYKX͇nd9ݹ 3:vd rJPϐ/oI|*Ƣ|9͝DnzW?`H ~=C~82z7AaPp70~zEކ{\74UK!@Pדae(&ZM"% T̮Y I*,ʇ>}y۶.k :Bjaŷ7%|=:k+?2pu1;~h JQB<2é64]?v$ފ.] >|\GVaRGQ*+::ڡ7-#-to\jaMkN>wVF:c3&Z43,Ȏ@MQ-d %uq m[GȾG၆hun4kH޷M{x?\\QX\Y81s/nƹ?a<<%>KٺjXwxZ"L,biꊰ\] 23;- ;¡=pC/^ycPڰ@ϊk׷ݵ2܏?.zo_6*TEaJζEJ/5u.28]hѼLe0Bq &<>!Vaj#WAn5@ٴiT~oCH/s$q4^&F,R>~7/XCO$/4>'ZȢt"Ԃ,L=ǣ1F6%k8~t:bcp ](wBH67UB#ڡ:š]t'$~cB{q(5E+S?.h[zz:l ށz&1i@=!Weu河MjGp-۞ĉ)Fs5zIE@"u\O8zh`<6z9I4z sq'p4&dM_~aq /A|x2ؠO؇[\?c3]*}аh9~1vJ#"zՈi~CiEK\4s5дa=AGϵHڗF=n2ݻvgb_^6W+4%CQDž4oF:oAzr~Wb2b\zIHtKW u8ܼ|4jX_9iP!CC.mzi !#53C`t5ZagtQS"QLs\<SO! &}.[j"m[&11n~(΁^< 4GD,G !" "^_/[ h(Pz]/%6#PLףs C{YqQi qXa񎏃o %@}# O7}99EI mg6dV͛b )CiT gg=\DK@E W\I環3}':3 P祰"؟62\Hh!L]DOձbsPTΉEx4aqA.N"۠2+IfpWdɸO˄0$g5<}nChNE_GDRj)i0J#2P~{b\xVYr@` zT[hɻyi[hѲ{n9f\hҪ5V_]g܅Rqo~**+-[P`y~asM8X˼?:6dcj)ehѾ%"\d%;I)J`Dc?#2>@Jit> hqŵQEPH(vlل=ѱ%B ";Ve\\[nYk>B3HdEw+)۹-t%V0OURMɒK+'9wp!wAM,A)S9u* ^ܭJ$./b22xxeę3X}҉ZY_BNdAe atDtTDЃ̿|B _fo3ӣ;1CH&out#,Ums7uxڵkaÆo{ KO?5kH6mT>dm' WupL:eObS+1݂]:-> "Xt,5j BC4^LĴoN" 4:uBHh$4En7 Ak#;:2 M@ۖ!Dp=!<[6o[cuѶc)0( 5Fde0 ce(0*ݠ^85(_)X?]„7bQ[*9 2KаQ#i'cwݷ5])Kcmߥ?_|QanB(ͺp'xwG5, $bn\%m73[h^\ hy:Wx!D07/¤D~j˶~读@s!`wμ'MbIC34BY=:t!~3K}xV/9-o6jfYsG Ç4FYrGp_–кJN 7bEb1T).w>F3EHRWk)k#6"du$r2}ܲY.cn}4@oqkj(nǹyOawm HerȚf?5E?ex+ PAn{MR'qI=4p> rqWpq%p(OF;б^tz ˜hYi[Odt!T_!KlØxՂe Ļ_y7'i vh]mNB&Xht%y~0j(NL^rsK4 =[tc{"~ߛ.ŭAePY`o$:~H[ԕ}t\J<9a O=4/]7 5麁u۫[ :3wb7Ǧ)mv >;z<0n*ݮ)v=[{z ں6SxMSR=>HXݓpK\4 )ơtfD{AZCk~{Zra˜HReV(" A]ֆ"v2{X#;;, A#z7HI >ƖBn4Kٳ,\G,E8>䅾j-"w=t1P=5 [(1>^rKt=@,Buo§w{0<3m$=&>6EFsF#@{1#e73k\4Q4Gc @M߷Wdy饗еK|5}≗*w ?o>9*E{m[U>A=oҘjOKu9X8Q;Ӿ3NAcwS#K;C!,<g$CfVKGN$וB{\lk;S46 J4:FT:sݨgaY|o nz" qMa\ѧE/]zK hq5Tyf9<5c]rFT"$8 ݻHI>hs-4ƞUٶm[9vf-$>-;:1gclw!8W4l=wܷ941q oNDQξdR! 3gwH3ѴiFF陴s2 g~C'y%0p-ʇк] cݩ}޷mВ !8}4֟X )Jߌ%H$z"ĝyw=܋a:n E3s9߯9>/Dhyږ3m"ӕ^`8X(F6EsU$3^(.dVR~cDOǏoY$@ B{Xj+u(eϟ-'ޤB+[>`%JlذA:"&[B('~}[>@Ǐb?\œ"QȭpĈr,#BjF t^U[߈W,95J8sݨefs&Wlg{Bi` D ג;?z(Kk Ѝw㏍[0-CgDn0OV67n>p)L 䂫ґ&rusNgi8U~l 7XB6 }k!Q_879ػwq?P΀K(ٿwEGܒO$%Gۖq^]_ً~P}  DSN^H׃/A|rm'Y@t=nۖf2VԠGǰ.dk_SB_D{G0V:*+LBD=d*)"B%.~'__(itڼ9^Dp"T%7;mk=r-;Ijow;FQ+YV 4̹OUms1Ǧ%7g1U=܃Z~h,'}l!=cBtv|RHa,79?/jslrrC 0u$B<F J8O4ZҊTBqYpi~ƀj).ҁMAHg*B W1LQ0u%U(n~B4ϫ$B na)=%hn_%+LEd.9iQ@q:!< 2G:*tl=C!z638;ۜ6E(S1B \, Ӑ سѢeaSba˹  q%уDMH!z4q/mX2UE(0 0 0ΠP/z3 0 0 0ui aaaR۫Wo15Vc@@0 0 0kךDhQ~}Qrf@pB7aaa|2K(} QFJ2SSHOOWbLuViq z}wN%VRyDLv[kaX+0I_ zOڎ:Śulxal9v@kq͙RhvǶMWϏϿPb ;_} w/M=xmN~۸Ě籆Ҏŭ1bͬ^| nE"@Q^8k8h_B,zjgFV6bq$^BzaRi {с8nd ⱎ x ;v ?- vgΤtdg YH=xPn4$>޿)äBێǘlޠ[-db͊qRaBVOmp={]<ߝ$@~l߾[mSr٦J"AAy^M<ŭZ48yr]``@lLYdfe,28<\>o|Ǧ~T= tNr ( x~_V^ޝ^fx)cr9mݣP+vQ %V+AaӐꊫƭ:رoرM{Я_?{=J.b ɅAh={aMn.\c-ϐ :w@Ղ+AXaD)4nl'4r}RpWT%?W3Ykrٽu\:%r^K-ؖ[-^cm | 4.Ĵ]Xoo 0 fH=0n鍝;wawn!JshF|ҟU!44 -[!*;͛#C4 Bؚ71ejsHEKŒҕ&OP̘ 2:Đo^iX}Vt399֛ btQ/Ċex>zM${ldS - s|IF=FRz E5K9u<2d|d|PW X-U-[4U!Y!]%>xDM/bm`~zUސ:: jwi1 1!z䰸>=vxj*tdzJb?)Ġj!LZՉqD;,TEH!{b {XRrXlIt?ǗE4jP0 8V::TuMH#-QG+Rt(SS۫N^s91"y7>i4ʎW,jg\G=t(}/RoٶrM|ajZ70gݚ'垗_>?c;c{ܦJ7^nM*&=hK.`DX׍**!mb*aw->c6UFtݛE!>`;f̍Sl0}!FOOt`/6(Q cZB;&T+@)Ж#= 1x`\;6%#fl2hX~AP/2\zcK+ZkMɩ8p ɽb?/sܤBub嬀ݔ<~+Kjq_ݗZ7G0G(,*šC%( 8~pJ8v5s5.d1܆ǶU|h#s?pȪYa#MH.JKdVĴ풧>~--NJOR0 0U <.{euW^ }iuT.'?j&n3yaYH;nJdq?b3oPei*Δ OA_AsL[Q6)F Xz2 }#!R2@]6*{Qfv ƞjh}‘}1 zl7 Ͽezbj<3xlDxw6NӿRU֘kjwP㕏o=D3w\+U\Ke?G,r.YwYTMXeP|;궴0 E;TkslI(㐐ئJ"7mذk76o߉Mwgg6l&zѮu+e+3&7V#nT;+Oc2;k\]5z]loߊie:~ I#:RYvi"YKѱdpq9˻cQVJ 2"B Qe?ħ3;F!nPhҾQ}1 S%M-ҫEhִ|1iBxm&&2sk-K|+ey؏UXVƚv߿WWͷ17AͶy)6bY 0 ;-Zd޽;5j$pM@(tk9rb'gI>G}X#/8eex"hƧqw7~7i(Y#iGADcMy?brU!m>j(GIRYni_q4ߗy~;dee qÇK.ʒh'#!*vBvgٸq#ڷo,} ǰ+0 xCɉ|B.}XP -WDhaȞ{ΰ,B9=XfmnG0kj٘N6Saa܏OкJmZxL OM*)CL4iDI)D(0 0N0,B9hfۓ'OJZ~},d -ZQaa|EhMEh́E(8 #Grpn,@av"""aj&$Ra/^"&C"aA 9EPa-X2 05WPam*Щ|bad0 0"g&*ax,BaA"TaaaeaaaFPvܮ佘,(aaaOм|`1n0)>qJuaaa=x]ObĝbƜкy3> L9sx㹧dɓ& _ZtZ(G'ӏ3ѿoo ,} 1Yxu8q4,9cG*Br([j=Qr 0 S; 7z4|h S̘ ,gWT/U)6% wމ/R RK˔N^d]/k\ջ'~~)u| uGt$FncK47C}d3&S[(Na| UC2 cI:&vj9%FvN3ߵ䑐矅CgØ2 sk8fj="~ʄ(zGC>S=`s/' gΤ corۈS$ċ?d/?0LKMbn)wSq0grXiWo-tc1 0 0nR"S\Ccg%Αc$e~' iES`J3}DcwQՖѨJw V(.DH@n 0WIST>r)LuVGO]iSq$D%M:0 ",D•⑗aӮ}3zL}}H_~ DNml#nPNq{){Co|@4h]">b#aa2$˼m}uʗ,,&@k:gȀ > BNSQH&>3k+tbΥUQHC|S Ov#A%h:;8Ikx]x]Α7$ 1Lw2~l:>|5Lnc9Z{=ģ[kzPa:û/>?|J 0<Ԅ4A3+ )u1 e6vdNTp3!d+M d3x]c`+0#cѲicm < ^! X:m%aaed$Y c~0P&wVEFˡDsV4泂/z [d&BU,c;LphDk-Ӝ9c 0L[<.dc%(RRQ*j) =9S!&6SgY:sD9S<1\˲HzKecu$ t>QVyK%1 0 cА`QAY-BY2M+c-kPdYS8T'4{)gu$s.'j0nZ[BaR^F0"l_ F#0^joMh,L9.Eړr"͌30FNVbP+HBkZ>RsǘPbɔaq4R,q7_xxt ,05w>LTVLrss0 Sy{xVRR"U"##}z4U@=1Vtfrp/z]}YrUY`:LDRg̖IFOK֔$bIϴh4˭r Rh[:BbR*(w1!3=&4YZ) *Si?&_biN .d0 Lj%!|55n tLej(އ2Ƥ%0Pgba Pvea%gӱ#0>}+nTՖVlb;v Psea+Bqq1qӨDd? &<g0qG*s>C~A0 X\,鋼 %wOYٳJ>wڵk%8S̛7OOWʬbf{m+bc7۳*߻"HK?vmйS_˻vg2 #Gፙ*[1 0uJKKi(,,'_Է? ')pƍ+1Phʒu)QF܇'+er{nO}jpð>W`uh?oBvS/2 |(Nuc3}M `98&a~1 S5Hf˗__؛ȁo0%7  'OTRa@ RLe @Q^8k8h'h#:7\AScNxr {hg "gtTR=A5 k )zԔ2L"77_~#:z>lVTpܟCBB[-vb3g~Pr2@gΞ={˰{{t/ܞӽxLG =/QRzDϞmNIl܊kc/k+`Z"औ9X9AQg䲺p8vN~qIL 1,PScӢ~g "vJv]6gpoa|Wׁ1S0}~QS*F|,~s*l֋blj2c!QFS~*UV`áQ=6C:Zhj'RNmBi;m %+1 Gy(FJ<?R+61B}&P =~ :/0}MЮm+7g8/~'DD4Y 1W;,ވoذYYYΖ T9q#1qWNZ+DyW酁W{8ӿ?7o.ӈ?URPIHR"$rDBClɪP17 I! LdK3FYڿo#WTlfTFc0wz*Y$_6禬N*Wk/S^iEʚkR>Tq|yDi)$>$ĔJX;]f/[g8Ӯ6P{=0~nb֒%a[Oe*LgzbKO{{t/ҞL't%|=Q# Gj*r{kQ֖_H!F":+/^a:FUR;Ƥ&clޟQi.IJ0,zIg'4+c\qOaա Nup_櫀R 0 %J>0 j--5dD#. 񙟐,RF)K8a%v ŐL(i+2N &tkEҧO:^Q?"[k[hj(x(s\c4Vve۲y"*bCXHFj BEIR}Yg8ڮNE>Zkm[Na2gnA<ch_rs%ԖuLG2 {$WOw2ʱ{LG"tCiF]Og`Mcf|²v61Khd(>9IWFK%~QYKwM>ҵl&H|v)'_H0 Y:c/1v h-7)m9 'MIO<+6-BשqgΜ;ЦMeME)Qx6WnOwQړgu_9vWqY udSaLg^:ИP{"|G {t`"(BtMJJ:,yyy>}l}I1e:EKhO+e:Y 1Gk$Y*kJ,[I'6-WXWsqPO4TUDZ#y?^1x捙x|ۘ їyQPTl0 D_/nǽӁ#֯__khuΌR fbh | )Rœ#Bt$(ÁGRB2Cu>+BMѓpy4_͚4F-Юu+ڷm#Cg~q|_G,5rsrq De:;OWt/ҞYT݅q.PqLOH~uJuHߨįiK]<ƎС#1v<,V[ q]bnb,J]b4EP;u"ZezOBB]6j%43"Z4mk_Yzt+b1Boz$=˚5Il$+f:XsYI_)R~,kCʢC3pu>±'m_rm%rݸ?fjo0LMǛC-f̜LC 8vNG;D=?FV҅p]: 0OZ{Za ʹ3hD5z4J510x@ޠ;_~_j=]DA4_D VF\r%m[yB!Lk6, xi J̄^GSgRORPE)s.%V;ڠus5NWqi)j)?ZJ'\L~^~O؋ӯ3 {qnO׶%,ū=L~^~O؋w._sL,jmTЯ#؊GMIݿ,mUŋ/ įh gPr!w)5FREGBeKJQ$t)n!;XMH mG[d 8fZQzk~t׍%g}D*]xLͺ{>)۴מ+֙\.J}V#ۈ\n76n[3:ġۗa,?ʒ  I|q7bĈ4OUth4ڷTzבaaae"4 LZOq5NnKXӯ3 {qu&?a/N'Ź=]ۖԺڋӯ3 {qu&?a/^~}>qQCc;kE+Ks|[~>_grEe'^"T<AAhذ  .M(_qɵix;vJk2k{2<Ӂh_U/\|z F_OAiSk}&!kSOGY eRcue})e>quXןvk8涭DDmNf0>,EŦoj!+(KIlܸ]7DINҒJe1UƄ"ЊaaƷY}S^PX`V aTF:!AV6 kڗnd$&ݯ^8,h5Uəʺ#L~籸Zx';AuWLǝʺ?Wa\%աj)(ZZ 5ʾ e -τr"ƂJ駊rk' 1!qS-"9L9n L<;e|LnO+ut(qݍ'tZa -((Dx@ND7_S'0IDaa"”%ȉJ8eTuncr,cn@)xZҶ02 sx_oQLVNu,V$DRZC;<#G+K-u"KeOf սp{_iOۦDn|=Q# K(?~ !֡KWKY[NtLU,xӥyetv\m u u3\R1U*'_*Q: _*}<©`2v^gvZ7T'lRBZz:3 xJtMJ̄IxUVLnww};baj:uXڼga]عg?vMuBfVV6|qY2ɂ5LOV>b%v2 nqAT7 wj'&r>pzONI^h3w\ 㘄G%4 WPgmmB96E(0޲?3!ǃj(QKի$ǎHrG]DŽ;e|LnOq_5^~hԨ!ffޔR ħ/@q)?A9jScr퓌<%ca݅XeƢߗ|>O? !יO\caXp_; #$J__NKu͛5áÇX66Amzj:t۷aѶ:tUW]e:@ar-,XwE(,읎_<,-7N3ca +g˃RVUZSNAR6CX'OD6mm׮_"3LuBƒaTZBg ka4.93=ieqoYB&EIq /_XFvZ13Fb]¸&NJ.Ld?Z‘#GkqLg wGwOzJܞܞ۳i>7&O1 PW M4 ,= ВbocCv:I&Rjǀji԰(Fc} ڠBWq$vvt&h|:&*e:➨ڶ8kܞmKhNA'N />X9g4nO36lh"k/D&zF A"CFFFP `+^T&S'aÌ .wE@e4 իg0Dk!c3~w?8w\e˔5 0/Cqa+oxoL=3r͛Fii֬zUޚӛw{|uf뮻NY[GtvtܞܞWʴO2 0! ?hQ_999(((P`hgTuǥ6Ot!%,BaƗY:es.Ƽuc`x ʴX1 0LE(0 2qHJToFOBK%=zR Dk)p5NynKXӯ3 {qu&?a/N'Ź=]ۖtm[Rӵm mt7^qhԨ!faaWޘ{鈈i3FFF*6@K h``=䚛ݻwFR[%RդIKرc?~\fa|_- 0 ܼ<(ǂ$9zE,d 5qaj,Ba:Y>N1;322rXX nYD ώk_)ӽp{nO"aa}AQQ!vW`Xj:$]6kƟkqHc@<[{t/ܞӽxLG`0 0  o_eh 0]~I?>.]lx sJ;.0LE(0 ($}7t +zDbb"nF}ݸ{5k0sLe Yqd %B=Ͻp{nO^ Pu6MK/K.J ֭[ga|_- 0 Bb m4i֭[CFLL bcc,;vې|f\:/Ƅ2 0E%K(0 m e,NK(nٚźa)U2yfUR*bLW l eaj4l ~i ͛+)&֯_I&a߅- 0 (͎Kia}X2 0 5~vs/ܞӽp{O0 h;lҤUٴixkaMaaٸ,"X$bb `!P$@.~qr((xbf U?0 >,Ba:Fc~Yn.f+^~kї8x& F56yE@`,q {_D(Yb2R&{t/ܞއqa7q(FZ^1ewqP]u k̳8} ݉{=;5BF!Hubc,eiś_~%BBBаaC%Ė-[R:0 [;.0 %~ϋVȉ X  2dïތb1#|e..>F̵@_eq^ઋ- ø;E(57ꫯ⪫RR9x .GI)VBy2==g/ipLwx0u"Է%SNŕW^s!Ġo߾J 0 ㋰eFduH))L]Ej7P["[&YBѯ_?%aEHD Sáf~Yqtk׿2]gt/ܞӽp{z 0 x [cHd"B=1OWt/ܞuYRj&ԁaa<Ll ["a-j%a('PÄe:[ T}]|A>eTQļ<cXjSc\ǖ뗫Pvs/ܞӽp{O5-vz~ I#L >a/&SSm##˕^&U)..ƺ [y>|QӧO4ZGyj3$AEY?uv)ㄥzMv+V9j!רc; =^԰aKCIq6i=ڴ! iѠq;DBĞ6PgER͛eׯ_KPD(͎l7q7q7᮸3LJD ~^i]zxBJaAx&@I¸)wE6$!Sejs^JwveV`ظit# ךR2 |R-X*WS#jz8ʌtuQ0p,ovl"~`31XI!TI?G+#-Wbv2o {N(:Uο8qDesm1z'S-ca?ӧ⯵jJc56 .d?kֈ|"/mÔc.Z-a뭹=w\O&^= {>5WjZG|$"䳖GG@XKݏ$m5zߌQ◶iO0B'Y2q] KuUw˭+P)tۋTQyI{:̪S\68~E/8<=CQB ߍߤ?i֔1,bvlC٭9 ?oCEcc>57Jkc2bg+t8@ǧW&EZ9TXo:v+ץ1?`%3}(A0N8NΗ!NQqHIIA. &2/mÔC"њTD5x[lӽp{nOSsE_Hybɳft$e*Yf,x4usg$"&BDʍ1 q2$8,zZ>SM{!&;ƚ G,ʴ#uߏٱw2 >Wt{ڈIuF J=,;CUΉ:ЉvV8vk%b+_ck ˻_4:ycqnJGЬYk=rB]ѭ܆)DɃ%*e3 05*BeFA+ZmSq$t Ke<ol謫cHM:1SƇaYHXt+8k(v Hl*́]娃*׉嫆k Y>Klݖz(Z'?qpq_R y1oš[_,D(nO^=݋'t#Bthk]\0&Ǘwo|%grut|*ʲOc(;;ݦ~M&olܚ$P=$9:1bҢXmAc&Ҭn:Rw3Ow(n?"X,%;,_ϩۈv2? Y[GϿ3׉RE=F{T`lA'#3ƙ #ZG!ug.H?GyG&ke2= {>5C Ѵ\EJ)۸MKmc9.vk,ckT<''"hJX.i?h={3S-B8]4 Z:@Z VG%cĪNff&>oL૨}E IZ0ѺETۊHJUu)+&uAIX{!;fr3sܛ33gΜyr~<SVKڴi&-|>8*-[6{Ir.m*+V}Y:#?T믿7xCwn֔w^u/̚R);>iO+hg(,XPq !՞׶(/[-!PN~A)18R}_˸̻M:gfݧgf'w>M={j}"E'ޓ׫2T>]]ܔY}e^Á$,{nḤRpxN<)?I0Ѐ+dw_rd%qR4׮*z!$11QhxGYf2f<8=y/((+VH׮]͚R/ǏwfM)ў^A{Ҟ^/}$,p_ !-݄VFPR ݳgl޼Y\V-p'r\SINN.HZn?:R*(B1"?YV"433Ӭ s ĢS8R, Blp\{O[hOo=cE(!RȗMkF d.(]zbl(Oh/,iBN{L{F/+Ӟ ʴgdk9ϟ_һwo'BHTg gU{TO>ScJ -Y~lܸQԎ>@&N)!_'B|dȄ?(.W 8Hl9 |5 !"BHcǎQ_ùEh"NZ J#  ez -ОḄB* q$\c2b@b ݽ{̙3G:$?+VN hnֈW<رYS9a؄0BT$%J.@=B}0Oh0"B/(B !HH%.gNhZTFPsB~AIF#yB{z -g%B*2dzCgHy_(YH-SމWP jjq `/Fʗ{ -О>@J!TJR%;A,"5_rpgH8NPQtk$"BH|AJ!T:2d!э3thlZ- gf}[$-'OH=v""ḑPy -О>@J!T:52%V-NaȪ e]nbdHT{@ "b~z='Yst_vq5f}UnHvhgI{F/+Ӟ ʴgdk9͛Wr-B"h,`c?Q6%Y) D [*zUWI.]T}VV$''{ۧOIMMUtR9pkά) ۷o_֭YC!$+Z!JI@!*P F6< $'-EՊ O(D Ǎ41[hOoFn%B*2ß\$mr̂#U"" &)I3sJ &kRMPX~p\E(<_Nfw>#2[hp\B!&qMf";4K>oyiIOLsEd3Qŷe,0@pŋÇԩS"CҫW/پ}t]za .) F(.C!$>ZS$n]kYF/3O$c !B ı.;Yc|kj2ffʵzS#h'$#HR|! Q u2<[hOo=h醪i5A?OK BBT /9Y<ZE(15Rei8.s(jaxОB{z - UwNhY !:,n,)uK7>ݨoG!9ƲLH EtzT)y"MLD!$98n0.E^X9ƒxaHN~fbhhN5j[n?k;PA!9n sBd8κkNXuN'H1"͛+/hڵolٿz_t^wu} v̙3G \;wTcgf`}F DK!Tib Su=:$KE[(7V [4n^9Dh0nOlB{z -glAMȆZRXZmԩ2So[i! xb?ȺTg]rϽ97: PH&RysB !8`rI3Y^JIi=7@Bb&D{ァiB `_%X[i} }e,`GE0o޼/\ZjeVo\s)%SߤIUS F8ǷkڴY"wW^yE.sKy $33Ӭ) ,NOޟ{9AfMY Rׯ_/>Y#X<#8x=}bB!x&7؜`OI{z -g%B+KM9~PB!E(!B\ ! `B_ f[hOo=cE(!B\S By+~ v"yB{z -DO7PB!nqݴ#{BB PBxĎ;T͛7{ܹk+pJLTp\7P;0H裏dڵfcY`ʇʕ+Z` haaFBh/ uiBN{L{F/+Ӟ ʴgdk9|8n8_6KUS%2+Z ͇ԵjcM[miP+SnBHx {PZY}CgȪ?j ҋA>Qg\9QqFڵp0ă 6%99 &XW2kB#W\QF#:5Bj%>:w2pEL\*@c`bX^(o|0'Bb]sxZ'N;̑/m89څ0m8.TpP:JdBkm|{9vrRp$w zLOCq DI:n^̎[JI{z -g쩒"9q^Srrӻjߠ,-uU~4E jBHdj$(W$1(BɹՃ$'X:eueH`Ȕ˗{ -О)/-@=O6T0EM%}[dnt)T*JۇqݓnpX=.{cӹRt,;==vF!$k(>|YYe=ٟ/\[P}tSf}YhJuu߻Y1.)/݌z#Ǥ./J'$}`8B/q2 DSDhmĜe>iOo==U^ l'C$3) 0Z'iUWFk%槟L}ZdFk1\ӋDo4lTKd;R.I(9k,%rɇqritX5n$3Gəqw߻Ӓ 忯z׆8ܧsdycV]cYj\:e v { dD9\N8.ډP'K!QE@dR1|ªL%Dk9J=~ iuɼ!/ ՑvʁKĥFF ~eğ rȏmRQm0"5=31cwVY"9ys:lW ɺ| isB ?LX vtqX:&fȐ9gSR0B78'7) wuޕr}-ik>(\PS@j$#nS2{ HbdKW~%ʘzxOW1St=H+Ǎ5v=6ȷү򳟥A8$;f]4Gs+B]~SSOiy 8xl_`W=#ؕir8$̝;$--MZjeVoۛk۷unp{\̸'&!lsަjE,*j]DcK}ydP Y$2w_J-sѮUrt:b#Z=rI]IH#6% j'֗y~$S8E^0`, ) ۖҶjW~%"վClg=YEHefҽ{wsǚ5ko_$*fK|~Pd /\?(-[4k|lܸQvj'T77I&\ B}zdS%qҥri׮%8+W?O._\{gǎ\sYC!$?>;Q=OY*H Nͅ~Sse<: i'@!PObd! Η3W/{z>(5N-kKՕ#4ÿl$-.'IjKf?WN^$^zu7UۤT+O#-PlWk m;B&+zFC״8=5wk('`xОB{z {'~PxCpCWu>,;w|%u HRrڗӶF-C^+~w`43^=iO=+sB3:uR (!cSV0GX!YO7ҸqcsxJdc|g-##'VZ#{u"6,\|ߧ-st".-Qʒy@f/bgH&&B[78GD@mB*/>رcGk+yO$7Bx"v38p㍾χ./D<7+Y6qTɘ!32̲$IJ>e2جOpIxu+9 ɎFyB(hgI{z -glGPByWJzz'K>}[n^faYd,dI]I@|!΋QznnN#G(ѣG套^Ru;{vi@ u'kO8" :tH[t_`W>ive3}]l_`-BH5- կ QxB6W J*Cr"}LRWDs'\jNr-AB.<(AҥKeĉ*`Dv!o5@h;1|p3<-R7o=B,X ,SӦ>)VjVY)ȓI2W#Hg4h} `xgnNxBNHlzEOQhOo==Bj Pk}F>*;n͐#fB3QdMjp71#B +_|b"|S ̢ lB{z -g%Ba D(iT:iɘTo=)3Uf/L"DɓҨQ#QYU"O8 m۶KkX}e^!aܹ%iiiҪU+*8xt5g.mnp{`h/諿> !o7iD ־=`M65K$@ Oȥ^t^ЯJ0ր'rP9sH=̽BĉU~ KJJR`kk^{Oړ ڳye2n].[eJHtK^fc`-__Wm>N­'RwN(qwR"l"KxVJ׫A?ſOu0^N­'R$;.0/׳h@BXBH"K ȤYA`t"͢*Se$]ԆegY1DzD#nqjn=!H"P;ὄK"Z=Iy^7>iOo==Bfō([!ɐdE27$&K-\u}څ[O!j` E8.<_R6qu^Um-zːrG8SvB^D Ex~͚5S͊$&'T'BH'-cdNh%-k ee`jAKx:ϲE2kaNS !TEi.kY2!TP]O]6mڨ2p' BFc+zSPkxYeE/+3 T =U=#ؕive3} s-IKKS!1no}3sݧS0%]M^i>^7NA:ug09o4m,h Oyw/KK?MGܻzib"شP O')"Ry%B V}S@jd\R~_>yVi,٫ͽ^P/quحO/2<[hOo==BA_q%geFqDuќ={,:e<!':HveE/+Kgd2پL{F/!aܹ%iiiҪU+*8|o\sf߾}tZf)8Y"A$o~&MTN:37Mܫtrhnyt֞{Kז4]fV] ^RRRs?Hx԰aCϗ;Nׯ/VB*ͣ'B gKi;*VhX焞+EEU X "g4ֹ.VvrA5Ұe,`>*E[Q&fuErK"Cʐyvd%Iʎknxfl7il}v*H4Б6r\=c[O!d[WS"i<rEe9z!B(l^M 1zs-r-ОB{ƞsibV̪|7Ҿ}{s͙} n 7DqARHGqVߤIUS F8Ƿ giӦfwP欗J-))V^Os OH-ɓRNMueC B_!gϞ-:t0k+'_|tMҮ];BHeb޼yYV /G߷B!$ N?"Jo+^}^n^nLH\Q~qU.62"zEr!9~K:?ȜK!p*)J'(!Dnw.=zK/T-]vY\rjZBF;[1'-О"B!BZ yO$':|9|yОB{z {(B !*A3YJshpLHiUp\/D(!AJ!9B4A"K}~rȊxjN([hCJ!9cWKI~.9Bg"i9y/idC8WPy -О"B$&KMo u^4v2K"fr 'T{8/^,>|j`>X})CzO(!|Oh`Uc%Q](Kf}WM6fmd tkoh`k֬qIzGyDHn0T0;7'I{zY E{O(!R-)ȓI2W#ŋD/ Ż\paÆRXXhyB{z -g%B2xLYh"*XIMDjXCs+3w aw:uʬ%rp\B!pܪ&e1DF,-sGCqǝ?lҬXIϞ=GwyG:uN0AyI{Ҟ^A{V>CpܸB*/U-B_uiѢY[yٹs٫W/+ٱcG5_tĉBHPB!&(ÉO>\"sZϞ=[a!BJ!Y q*1z!POyyMI{z -g%BḦEv\)A7oVeQ&^vmW"2[hCJ!X`6uyE%2[H<\UWT{B!O6k!BJ!ڳi2Yj] 1QV{VVI,U$".kke|*3yRTT$vPkj A+#iBN{L{F/+Ӟ p`v\B!&޳[!#)).I"ǎYʅKNN2Y,]vdggK߾}U֭[U[njkM&\p>Cf-! B! OH"9]tJvm]>[?VʎwRQ|BN٤r/BׯoֈԬY3ǏWC8.;!ĝ'?),,duB d mӦJ5 v@޲wײ^)#h:],gHSqRKNKqTI&)*<)gK^.^zBur`}✑xC{>KINN>}u'I~X*Yvdff[: H=A{Ҟ^A{zg( + #fcY`ʇʕ+Z9wT D1`>sF5~RRP &'$^Hq>u\N<.Ǐ׻0t"XC Dɓ'5ggտ5v,Zao^/}:ٳ"ОB{zKuΝ8cǯHJ^Ϗ_+{\e%B+T/>|셐 ~C9!c)ڧHĻI&->( Xb硴)<I:t(y w[hCJ9oR`Bb~1kɄ;-I׭Hϯ$UzB ׺hb/2Bg#ؕ"g?PGxupڋ deeu~[*c~{DZ> "-Ӟ ʴgdrug8$ʿr:s͛7K5Bʳn:yx18 k׮%R 0Y^<֬YCG>_ dxzjGՔ9Uc%Ѭ+&2;X@I8qFڵ 1WKmȡ="G2zҿe]5kI(oѢE2tϯh > iĉh1c\{ҳgOEpQFװ_mΝKO(ZWԒ:j)J!E:j9ӷ*6>k *ތ;r"{ɹ\.7W !U-GNJ"9x>#Nʩ3%r(>sFa0=7p qpaÆbׯ([?~.R`K w[hCJՖKUn*2wOf?=NRx&kTs~jkYhOo=: J/iC:iV^gdsd˨ΛbXu92v3rV~DITt!j}|;w/!$R,"7zN|N\"=?mMf$w}W"Ym=s@׳ԯ_Pmܼ B#JyK5?<# +RRg]MH-VIݏjguu2;!!,ȓ1'̵%\s?Drr|tRڛ!$bn1F2K]w)=ٚ\ゔ9pCy5D5O m|N}2t#R!7 F+FO7$kЭfB*!@;t蠼XV5@JvD r$U31YR׎XW2t,+tz`^_B!aA@-@ły(C֫W^?dvN81!T(BI"Rju&Co}FrX{> BxKCdBh3ls4<׶~ !Sq7!VyȄ%PBtp={(Pel/.͠*M6<׍cОB{PB ʈPx?iGYᚋ}t_Z>t-ۂK!ϠuX^eF/+WOMD"=yzp& aD"A1 Bb-[v{nݪG[cUP1w2{n22m6U݂yu\#<%%g?H:ro@mzMf-ʒHHUgƍҵkWsߤIUƠ8n-־]kMffMv'?˗KbbtMO=?OO?Uݜi޼J4“zeR>~&ϗ{キL.@R7ҩS'xb%1~2dYYY2qDٴiҢE 62-Z$۷oLBüy!V0x̼Gy'|>ÏYRo(9X=^Q>D8-<_~K 1#<BZCq5vb_@]^ ,".o:utΝ;+l׮]^r%$x !d(98G0Y!F[OBұ1b BuS0\щW S0xLEη^? ;|Dh4K-g%B,|曋eeBVZe`uX=ա 1#X Odȅ؂8xD=%D&8a☘zxHSbQ Zgx^S#Sb7h  @^)Sh ,Jka k lwO?T>sUvmʘl]/^ X?h_|*WpH{ *Oe$Zr*pY`? =}YQr8PB!nQ-78ط ,ې*Qc]4aH^ eO~DS8?V^?aX؃ 8kZ B}mPk@DCB_G zax8Qq jh_ p .@%iZdIJ`I!q](V{A`?hk -m.]Z7jPpk>po]׮Ix876uO8e'Dpp6N}aصvh3}]5B!'mP\\:h&Dnݺ)QϝPV>1 S'F|SCaJk |8]D{qnyq o۶@'?W[+ePп]ذ O!^` lk [1>#P#>!^h;>.{A׎N}oUqc ~; %BJ.h}(@A<RZ=x^hAޢx9! Ђ o88bn'@r%\'#PPxoD D/į8mމ3 }a` @H2G E(!b|Q p&}"" ˼-x@amh q@ Ȱ] U*/쯁 rhC`&ځk1c-sp@/Z'oBVo OL x&!!G :pq#7 {Vѧ(B ! ԟ9Sv Bq[$<+'q/u^7D;ޛ*4Y~-[7T` 6y6mZko7vک:>[yW\^G(! lˬa3­{g6sz]$-믫u;0tڵ8;;lzw/22 l=Cp\<|zwTYYY*J00 Cp>݀C\[(B !T{x.YT-]v?9-s+s^1<\2`_RuK̒7`nUlC,c7@$`g@AؠDu;q89` oR0qlJJ?裏d͚5 OA82Κ,ҷo_%K_ O \E§/R%45|@o0 S0;V n:UCP"6ZwU p!4H:sfjp>[}Q&6ER-/PZA'lZ3a.Kuxwְ *@?mac@~1?;8;v+VC m! ߁ۏ8d2`OPB5bvIS .8is~UCm1⊾jG4BBHcrO^tx#$9wiV R bG YE(ʁḁ --H9= J0{BHˉu^;K{B1yZ  0j-*1 BPB6RHރ? DA$`?xrvqPjG\ ]Ჰ[/xqq?``:Wssz]e.cۉ(|u86D㻀{plǵ~{{ѡ#߾}~ ᦯ KA=~bg(1/bs-4B=xҌD`@ut<~BN8.'OɁ={o$|c|3b1d/?rP &}Q/q:Oc@(B@[ d1V9DPU8;OJ >@yw00Š>8 +)xâC?! !joۆBL} t PAst@N>Fr|\ի"{d@p -k`yhЏIp/4.|}}[ Z_lGN8 6 F8O#Sm;@؁HxMa;޽*{.q pn8G}{': +P=C'-mm-qa'5bݷ@{b0ˌt8&g]`:qM8wk[a'; t{|pN (%Dc;' ıP:{ux1jkzvuʁveDŽkXZ}" {@\ hxNź-S=97%iIDAT[^{ĕѡI'C!$>o~l$8`O``'IF%?u\|U'ggK|qN^|Q~`\ÌS+](KfOōH&s!ނoIIIeN5/ y 1#{=5" ̖3A쾇=H0ǽ9!Y&]pA9!ƹ!`ܹB*N_Fe 2#-H0q~>JDrrs&2}4y'̍DUB!PPBxoP*7kL=6;d[{< 7t*WDgdsKJ~u3H >}O}"B'Ļ,_\Jx c8VG&%2PHҦRs {+' meb"B!*s0idX*TYZ (! %Ra'ILSkV⒪ɹTehOo=- % UE[hOo=- %B!S(B !B! PB!-ОB{PB!B!1"B!BḦjv\B!f%BH("D!:AJ!'*B !'(B ! J!Id铐^RsC׏44N$쑆LEiψiڇ SoI{3(B !R$KKԫJJJjj`=Y#GN,IӞL걉f5>2|}JJ歾$繃"B!Տ2#,K(Ք- gf}[$-':+c)zBYC{FJʟ!! y.%BH`&dI]IU?N[%%Ak$3I&#tI]=Q6i{&/5j=c E(!B12iPJ\R K^[#k2A~Y)I}ސ#f .#%Yӟ+Bixmd)Z\CJ!j <&)ցW'9i)dqd &S4eIėڄrKZƃҞ(,d^!Ds$'2=cJ_riٵkKO£qҦM]YC5gϞ'NO,DoRF 5rALx@(,\"4iD)1V "/+gDO_/n%3Dh&'TS ի!* Λo.LcZ'ce~wi*K0!JDh}lGEo)m$7yڨk-im&[}:fM57Kro3(H  {ߗ~ZdnwGLطrJ|1Po|tAB#9y&H-ɷfʚ5dm^>cS]fۂr}#{%?!ՀVkJEIBzRrѵR:)h,g䒶%ڷV!d˨sebxn7BHɓo;#v2k}^;O8!FR2|Yr_l H?!bpPdb}I{LK|M$K-ڭnCpޚ*KKS7I(5kdDc ^(3GL4]IH'J4CO/ X2C:J?Y2~J=|PjYT}ul;Ymg_S}:cAuo8Yvt6W\fKBH|tR˥gϞ*/'UW_}5jԐǢ1c 9O`tkGr Ud<-6my~^>-ø??\Zh>NbpB&HY,CAL=Idndcy3Bf 3 gʈ1 &g2;!!*ro0=qW#v)X2WRyCuo úJV}O7}n'X|sظTYl/ND;cl5Y5`I}B*3x%l!R8`\7+0dTa|WɁ Eǭ}bbܵ}ҌaEJ7,~ W>}P$AH.@ѣGz@*7U * {,!mzmW?h5ۘ܍ҽ[W_=ӦMy~ߥm' !UĸlM<\IR0YF8|J3ƚ;|M2&dIN5c>R=v|Dz痟}" dufZrL~Dً`nܡDe:U6g9]%)q 1,7 0=J b1C aBHecذaRTT"Q۷o#G:x@} wϞw*vlKHntn7J͒PڃWߩOBHb>*IBx'>dF>D%+V *If$y햗dE6Poc zKZ2AI"vN]wgڷɡerNoʹܿ:]K/ΗJͮτ-}`N5 Wy:mg5*v^U|eu|\Ʈ_:BH<!CȐ'>w*4Ck2!\8wMFΙ#{I7$)!TAk8mkS3fڮF2 9qwd?%rPF|*@_ +Cg[~aH@_ΘoiXGNW?eT qͺ2wl{XyfaS}aVy}4.2@"NLqFE^#VCr^_u(\z+u6m\SB!E%$l,KH$^+VZUo}Zp{ߧ5Dh"l*%R!_[&k/W\#vJ!СCҬY3s-rnݺ2tPU!w@TyZBsA8 ߒ}NS 4m,B!$;wn%&"x緿7TB+.@ !BUOh^^t /}ɉ;4-NPJn_7k%%>h27Vux6mDO(!#GHƍ+xl`.J!`UciԨS{cǎvڙ5X=dWYC4u3wE(!R=z8n۶mՋ18d޽#4h^y@O:lB!"P'xI;^KA[0dB~'~ۈ̾Onذa, %B'Q%B%B'̎K!B!$PB!B %s =~H)+5B!$v !E(!Cznڔ "'R=Y|9q !B!PB!B!1"B!BH̠%B!yeJ!Qb"B!TDS$vVD:1F#r?\10RdwI'_a%&Ҷm}jn,7ozB6D;+w_BDDaPB!$x*B!ujseeFN+)aeǍ@lx):g-w-BGn$]ʜF->PBBF,ɐB),IJHRlI#+-3Đ]`dkC$18@x\{}mciܸܽQukպoV_o,:LN&חm14\?%H-S9r"-|}rQah+}w-ߍu\~e÷{ZXvBƒ"BH5"ULL"J\ SF֏^:0.S,Gd U(Ԑ It_D͡NEײ%6>&[ qU/Nw+)M冐{r2im|<ר>2-k Olўm?)/]q @!E(!jB?4| * 𔎗E4imnue ~p5' Ǭ4O:TYg efIj6ȃ!2vɒ' IpEReuSJFE6ȶm!'$^^u{a4c{q!Id>mm[Rd. *Sch;q~j.6/$}0DeTkw\[{D!a@J!o)-yb Orz?-X!LB sKss65Dh`T_7[UBf }7W^@ByIل9X]XKܠ>:%o 7;[A,K\6qqB[(B !T y>-!T$rC!a#.J*// UxMdI$sH͹HH)/"!M) %]/aaKHl٬Ǣ !MTP8Mꋛ9VeUjoy LPDB\WBx$&JF[}&I+:9Nbn^ ˼?3-|E !=B*='4  BdЭb Ƃ8>nq8"bPB+K!hY^RwȢ*(@?6B|PB!&칖@h\#) %R9gUؔ8ܫ}Wo5ںBJ!|syd#r˩3TS:=OɡCE^;er'"f0&f\%sS@Omz\/xY!=,GB=:4wj{Azpl`e2WB#P~@Se+Ya%:PB!9LgL0]:j ?4;'Ȱ dYyebs1`o;C[nO?ToذA.m's$e" Ѐ+aü 0$63(*+,.St!4O{J f/[`-] u:ݏ@\'_(Brq)>,rpNZ]+mF;wCULpSl TB!qBcC%/  XW7_xӦYYۙiv!6!6N:w,W_/:Bb7.Q_/Cm9/';;:^ꇊLS *['d"B!$?a݇I-͚+Sc}ㆰ@f[ʳ^:8w`s@\3l0sWA e֭2n8i׮zlG;<);dٲD A צvK -/}Ք=;K'xŌ3SJf!7Ig3TạLQj({߂^máq_n~gm&r_!Ϧ5BВeXvv0|Ṷ_HH!Bq?'Yd߯Y)Rdqd{lBB}Ez 7kXisвV8ԭ[Wy9Ν;y2k,/~>zlG;Ŋ̡"Rφ uyx9{6Xn6J8<^oFa\7e[}gA}YŘ3MU2>]8W~[ u_ܨx/S& [/nc_H `gz +25C"'B!*,747gJ`/ꨨ I~~s̑W^yE.UƂzlGȔYwbIRd~r,e+|\{L;8 BΡ _R\$> ? 2f)=HTFhru|vC ܆qu %[̷cx7^xzv$#P-"\r%j PB!R9{e2f&t=-b̢J.c-TH69>S6} /PfΜ)k֬QazܣGzlGsbsSvWcۄy`" L /D74:ɲ-x^{>.zŔGOgf0Wk,S:>aI,\nkzU]>ڻ'ĽRɓf01( 5lQds0)gdgz?.570f͚R^zrH87B!T&/]-Ϟ6kRA-\65Np3ȼTHȬPaeÂ\%Xʽw_fZWAXzfDE;@j *m|/>Qk$N )ݏR{:0ti|ZZtRM_vmF; a,a}}c$߫2]sΎ>|aזlǁɊ<*=w)iڴ$&&!BH7@TO@-m%V`7ŭ֠ m U?K..kX-_ؚPVU>~В*.]5?"0 $1̽w=g澞x09wί9g=us!؋ 00 8 00 8 00'ϵ^.qC`";.dE }BxK~"q&9/.ԗu;/'{Oկ+r`0$"#F]X8kёf[oNկN > ??bqqw]6'?ϛX#)f.[F9f)r~Ƙ EEEW\qp85_|f~,={\wu@韱c֚^œ&fSK9%?u餒3'O~j<1c޵zm}ء? ^x޼krr^o/<288Da '1R>;SzJ_G~xp̏v~ĉEEEyyyYYYPhppȑfϮ_;|MS 5΢.آޞT)'e;fEal'M4f̘p8cDES'P(?fe.&_cӧ? ?eV;Q叙^{IQ[/r,ÈBT@iQ֔] -޾|vnsI| Dt@BQPX_'NΜy^>4eJNIINN:G|W_-ځ' Vo,\4nQ3}6^9`1_; ioou}juBN1Pʻ{٤I?wyK.yw>O? eeeCg|i!tB |}q0 壳=&6 za"qA3` xÁ#A ¾/t!0cziDiLW?zrrXvvo].cN`MMB c>>thWjBY-ԑvb00k)1*Xqv 5dps;vl0ϟ6}zK;88ƛo(<ғ'mmGġJVVW\Wx~6??xv{!gϊ"?~DVKr/.RH .! CEoP>9 ¡9;(8H}9u 04 믿^_Μ9ᠾ4?v>dٔE'~V ~޼>X]}$31"F߸M#b*lzt\WW'd`͵bj0)Lv**kk hϟe>_0 ;v,wԘm0 Xߵh8;>(7]z 0 p`0{cer'&$0axX(,ϬH)P\4Nxch'3-rss nSOd^WVv~` 7_>̊hґQo W#_c6X!&`ظK/eO5~Ժwz">Yyyya '''|> S(,,ӏ~pjp(4ne'> 1'N.,̻jBtSTm8y!I6BDo"`H+‚@PΙ8;'+@a9!13Zk_u"+~p8|H/EDs;" @`رyW\1+νBBv^rs/ַNۿ[M ̙􍛉1z7.z7DGӍ/b7y7&j__X82NagHG_x|QH8877W(|>poooNNOY A~%\:h3,^zWX8wn6d尞"x+r%D4bFGwED?Y8Ni_aV&¡O}Y wT o(/4&B Fx{E]GD'_[dB{Uӗ+*'󳳳OZ*t,7w4)13Ksx1xwelŪM$HtxF9/(vQ+W^رDK9M42`#&?? /}Y|ܹso;vl==PgΜ9UW]s=}% eGMWV/04ɩO?9qRu"9`WWT}r0oFYӧ_*}NwR, N 2cr\53f'57pXu;' áP8 BI> 0 }tLpt`z?4{ӧO3"ؙgz ϟ8y24 ӧOkJ  nk 7NyO%uut ɿ(V|+󜝿[&DMiţoLMjVcfL1=ٴ1Xj}E溅~gW:ҼKoo``.?~ 7p}~WWھ}_/?aBٳC,+ܓdeenj/ CCCD,y|CDvr%_4|Nw5_Q pGǏ \wE=f ((8 p gxx2>|ʘ?}p]|pܖ-c C }[Z /ˊ/X+cqEf,x5TZ<8 x߬yy^;s7Tu]_;ܰaz;vКH~~yt~r1@99ŗf:L,]}əK/;svtO\8ə1}cG ~'\<ȪuEILh p80DDCC== X p84,áp8;7?4ԟlŕ_ 4 ņpXG_ՍID7KKKǏpBvv_;xE͛" ̙M'|;w HS~Y/+ a~f߿.!- CCF2r5ֽ4bpaM?Ͻ暷z曮]їIV%=nbrˇ~nݺoϟחrVVօ :O1\W@_4<00oד"9;4 rz r{Rx˗c V~ D48mڴ3gB.C Cc'h`06V 7T޽{͛7vXYx… &~W=?r֬)SHl/YfxA]7_AL +p;c`31c.?O5N4V}ɏKOMw @ p…!qחp8|7---6m ZMp__ߩStUgΜ ¡pgggⲲO>*e'ɮ!":94< Cp0 ΝmB˸wy&yTx|:箟 ?njr.q_xhh(/Oê)_Goyl(Ey>8ᴋ Gܹs^zi7^{MG]vر1^?z*Ύ/ .^|ĉ⚚ǎ\v{~X4xGǼysYX yeOiSu  x``MKg6Kνp sof  P  8 00 8 00`nH7;v~X}jZ'jMQtbCE=FFonz{{5%< _+a)` (> p7`oDب5\lu"Z::)( A{H $h@MQ A[=QltQ𐠁@.HЀ5<^m~:hll+V6 fC]G PwQPwYp[wZw[O>N|N;@.%~iO{NjCy2 gϜ)rcDĘ/Q(rpy Z=ZB-ŞhgggTgެww<=yz?!>kh\UUUթ-w p+AvPW_cEy簬ݺjCK+6MmՆX״x+5LY}ʆMJRdJ @=&O>~v(wT|T45͗Z@KF%65-"ag9KsSuDuDg}M7Ѥ.ι✒s&_;N4_ֺYliǢ,vW7uZ[UUvH9 rJ/!GdnƩ|"Һ7\lu"Z::)< Dt`3C]guPNuDD뚚֔wZeʆuԾ㡘mat 拿S*wB6-+IQW4""Anf:th1"c,AAkډhGmՎHH{ O,zP;jvP)a09K@. {:3A'}'z? ?<~6pl)(b#I,$xE3Ni7`(rFm]DuDgoF"0M87qL֤Y%E%E%LJueij.4""A^xůMI_>eR eCUʆM˾rzˎ U-D45LY[cCU[+6]ݻhXZkʉH+F|"jll^#*Ǐ uZg눒⺛[*>={gV+VŠ|lTA):pB x֬Yn(.n ͌Xt`4"|+!ب1 {AYPK ں,gg{ڎ=zȑyÇ>|~e))@.%h`?οKCz.:@M#`?B5E:ltQ2  7` H 0 $h q:cNbOEFuDuDS*Q@.G (kUw\,b 0BE^МJGLDA>1I ڻ@WKkD>Hw nr< 0B-/h벰' # >#_}}۝.G ڻ@WISJ%v{Iz!ӗBFa\vd8iJ#-޽DDOhtP,ͅOFF} I.ܹr?7f16]:c4n2Zu| }P>nOEFuDuDS*tuuUVVxU"kM}Ƃc nuScin2ꪩ)--Н?ӞYV/f7`(rFm]DuDs+AǬƍ Ҝ=8H>JO>I/DyxD^ XzB_aa|X\@jdY6H#GF# J p1$FvVZSn,- YSw-hOE)kCudgmBGMlA#˕]]]ڬo W^IwA&L$|tdW_e/L(AGhkx`ۂˈ* mD-Wm25,X}L ZIDͫc遆[5ֽ2Uuv1l [Eml&19Q+?o5'֯_#S .@^/}$~_p]wu 7tvvvvvp wuׅ gܹkgOx"(\WȻkFFn`q8j>e=V@WC(>a~;bwG|&k 8?VGP,ŞhgggTi)((ظqciiiMM/pI؁:tHX _+uӈٰb@[%[ƐuI&1& PK ں,gg :f[_z%B~>{ '";E *,Z$,]졉ػ\5^lܯײHDDeP|e)5=]~`[41Mlٲe˖-/ppI W IDAT=D~D;w.{ g۵+翊T]Ou3cޝGz%{/0KQm0FlÁ{zHuAz4d wY "X_q0B5}+$xA[=Q2g4=h#!\O\a\v n2P,uY%;<$hF A{Hp $h p%* p浻cU"[59Km]D {ڪ -?[7ouMMMM +;7lnUb XRuY%;|F#;gy5{@IoKmjjX9=W끖DD%,y[U iwͶ%ou LuBkէ@5& %T?uب52YZ0Y:ZІ9 uבEt`ÝkCMlAS(0꼠w}iY n:0iM9EH"^Ц"n6 <Ɂ y5{cjl#"osтz,3-S -F]ݸn?QnSFGwNrddg QcXUұ]}׽T _y̺9ASHj#±KDGn')-Z_>ursSPw>ltQ2 ^}}S _(曵d+$JuѰ׈g=L5Kzj\ck"TXHR;ډjGź5k""XTND*BLN/h벰'J&w 6 [ٓOCQ]]ʓj/\VY[Fm nAeɤ7%65-ijZCZCp!pCZH˳w/ѢEgx[pc_pL"j{q?|)5g͵[+mDb =ۼm5?ު.M+aAHeaOLMI.ܹNV5U]Ou3cޝ@k-aUT] _z(007`8Z ž(3 ^~ʮ.Om7+;n&M}:y2ӫ&Nk5 n2TTTtuui'O ];WZ683{{{!"Ϸ@M@. {dr `ƍ `};`'O 7`СCҥlptul^[gzn2P,uY%;|H$/{Y!?=Dd;w.۵nUXHXC'*%".ze^m 3{k q-[?_F~D;w.{ ui4^-e$;9j &j4"g)ž(3Gɵ ӧg,q+`c6ᠸ8O1Ǫ֔U&K fC]k SwQPwYYwQw[!=;tȀdܼzD:7f Ľr[B1nInKg,YL+aye X X?n^͢"ujv [+ajV)$1dZ KM(r:m]DoC)Iވ5?)Pؚ0!Ao& PKuY%;|FyA& f^ :Hm~v‰e7V/@۲Ysh۳o[ۢa& ER A[=Q2CGdRvϩ)\ZsŠ[ ˣ NX r< 09Km]D H)@ @\ 09Km]D H)@ @\ 09Km]D ^}}۝.G ڣ@6HIЩvLJ%v{Iz!ӗBFa\60%qUiٻh")-8/AKCRqnQkX٬+,bpUw-hH uבu! u79I.ܹo^-0ׂLyu¢Gm 5薠Sjjj~锠}--b{8y5{vW:LMʢIa̺955h  5ַBw"ŸLD_Vuv=+ﮧTDUReaRm 7`3N:uY%; uT:Yߍ79{p}|ϗ^"RnkXb =ઙeIR T%[z>UWWk#*nõF%; uTiy+++?Y7nM4IO_8V>nƺ9A _K7` L\=***JKKkjjYߓ'J.̝+\{-dŒ=޽=r GyՂmK4R%άۿmItkZ.MxSV1 g눒>s$肂76X%<)p;p8@ KA_uױ{"n]ea;Ta5!b"p~AnxW{.wCS c4!A[=Q2gMK/gODƸs]![EKٞ=4qr2e/8|f^`۳DD2U!&& -[?_F~D;w.{ UI4fKQnvՌ12R"RVoĽFP,ś ltQ2gkO}O [!M*26&#.vB^D\C be4ւ顢"Z)e`}9tQt ں,쉒4p#$hHЀWIЀ+ A9zE2L0` "HeaOL𐠁E A@IO. \a1D8H>Iypp 27~ݴODZӑ56\(ƯJO, tx[nn0^KZ ւ. {drϨc-o` Z=:2{ْ_Մ8 0gؾA>pwlB͕?rx{[ԅ8 3.q ž(m=➖YIG?r<\a4دWM#i*>QK 09Km]D :?s*f:wl%Gwl%";{Tmw--F# wb:;#7NKKFų !cMctl_ ;DJci#Ƹg=v;9rȑǖ|㣣W?rb*#-tt\`iDrmE#_A!mR4n2P,uY%;<$hSxÞ-SgdmyCˣO Ƹ+Z^I;o\5WWPRL-ItmHf:WƆ-\!'#ی"g)"HtD!+ԜOK^?MoID &ZW::?LD[Z:Mѫ+3-zX1啝qtHWH˽gXCV+;_:ڔ.~l4 `:$~ѨLETEȑ#G~ëkN j!tk$b˽h)I6=mƬoS&Dձ7`(r ں,쉒qB :rs.h~Ri3fi6\,qVݹ\ԕ_)ՔHˣtJqTqc\<{͕YEԁܴP ւ1sLkAJX+VH5ꪩя~O?f|v_@GtshwåIs<>ɟhjdD[ZZZQ6(,ʥ{o9%ôEG_1kǥ#h7ݻV-nlnT!&ER A[=Q2g7n,((P>Y{v?!KD||шtJ2mKiۅV/][дusCٴ wڴ5)Ĕ)Rm]D!^D/o۶mʔ)}ug:CD,=oȺx  aɬϞaz0mկ;S>0 A_6e:Q끖DD%,y[&&)~***JKKkjj4YЧ}]jԙ˧_q<#>Y"]1R@,۴v/+q!Dp~1i(ɬFD҂"WuтF.ʋ]Gn w u7PPPqFD?o?3yڿ_p\!<;o]4j`@=[7Wߴ{S5Hȏ$ՠm{Aԛ^ЀW zA }Dl}͛}w+S*j"Cv}nOӾF14tle񃇈hyt5"{gNI fIٷK,-wҵ {Ε_/'eVv%՗wNr)0FAA-[l٢fKD\|2%˧L?L&{oZ={Gi<َ]]P|Lھ㷢gskڧN.)_rU@!PKISwi`>[>/h)bFK*4UnWq#GuHCjUtav\P;Z4\[[UED4}eær"Z@RʓBLN/h벰'J&w7oXZ1A8xw.S_\HJz61Yx?M+W:H#7c(YiY|P5iBB. Du(CyGuµ$m7qVbȌ?(Ɋ+~q nZ &~:I))-BVu#ڷ͎&۱hYf~p"g)IgE2g9rE򤐘kJ2ƗZ^9D=pME#oFh8YQNȝU`Oiz;$hе_$ꈬd;6:ݥ0QaIinv^1FDdE -Iax!W} qs7&68#,c-?mt& EN+8X%6ԝOF%;<$h`VZ  ڋD%h2&$J14$h`ؐEJX5}W|"jllu\ll JG>]GL6ݞR2k,Q)c( ڋX Arc>HЀW4Ix$Ioo%z bHsbp UƁ+8ULM#`?9+=؆1E8eSeYxRwsKeG;^馛b?cDZ2GnҸž(3d-h{ n2$h벰'g:<$h!@v kMȟ>r 4H4Jd3VHeaOtxH C%AnBDW6lZV27UkZS.=c$D$hB A{t6кݻnnmZS|3%+@Kr"kN<-b^PE+VJtJ.) dZ p끖U"[,Rp.@&L9`J{ap3d}x)b2VΧrmf";$h!h5+Zv&"~m_%+ZJ(9D=ǺHTEG\+Qm\^u̝AtkkvR9Ywb]S9'8r؈ d٦M"c5b\or xFHeaOn;<4pm/V NXv⳱@8ay 7`(r| ں,m糟@ ^ AEteiೱ@H4Jd= r IDAT$h번DѸLg:<4pH t\$Ayl, 7`(r|PTC)>E~%hp'@%h1)˧$h/ja! h  p1$$T?uب5VlcŰ.V2<]G B*.J\CkM5Xwslsud&^D AKCHf v A{H+q*| ZĆ(|zm糟 8$h{m: h0.AgW` Ghv $8 AkOitKOYwH Cm/:$hK1U8$hC,AQ A{xA~pm)ž(vx> $h8ŀ t4<6Sd%h5aH| @и?<q"'B|Hq A Wt$4!AL!)A2;H4H$f} g9-ͅF4 AۋTz4QV#@!;H t1꽻?dM/ARBj> l0G.y@"nbi=5Eі]#SŚF0EGIQ||G:*cHj+ Y[*= m6R%]8Uu{/H@&uEnj Z:JeCn]U-͂χH l A˶v A{HaA q> 1e tx> $h8E>DVSWHДT0KX+H*pLYĴ4@I̚Td3Vu͹w;>;<$h!@A4.AƂ"YZs.A,w]@W& ,,.aH֝OvxH Cm/#4vRZ԰sVS"g|~ :@F7ryUjݐ-͂χ={ڝS6}} h_NDTrǻeB̡󉨺Zk0-VLꨈ|ԙPq}ڞp)(4]koZV"[]'C>⯱7SHcIё֟4cfO6\yt"Zw. ^1ҴusՁMT"G kzz>566j}/V> }NXN59a] Kmݣu:U\\9H)NXbD/ԗNNXGEU; Y[*8ayNX/Yix OmՁȏ;O]>n53#HT|Hq\>@+QkڧN. 35?!_A"2e!5hCUUUU펩֔ˆ#StІǝ6{l!Ks Y}$X,/HϋN5/kp!1ل8bǂ*P3$[k}ˑHe)h\<8=ւf`PlQf@= g9t`E.|6(A >>1KjΦHQW$Kh2 :- @\ g9HS*9Tm%qug? }p$A$hMSl y9ꁃbC3 rSPly&Em*\^o6:/> $h8È tBytEIyUM$䖵R&rʚ@`8MzҖ*yKmttx> $h8z bH&I X՚< )R\]]=qok( wULNYUʼm4]yYM`׊]^Y؆;Wk:# #d怙7<,!X (MRڈiqdE*9`tVt8pPB{̚"g&)쩻 @|mqede6msU)pR騻&計(6?~,쩻 wQݞRM8HWi~2ԓ JέrK\(^5 }@- 8 VI#I|E.5o)Kad4%/tOd,A4p7eTnIX(s\QH0 3^,\[֯plyGͧ kA$hK@ñ6!WU+Q#Z96{ ډ4cĘ,4 ;SaͧjRK7+/#="<N2 p1$վp;c&cJP6дj ws"S#vMWյTD=Hյ4XnnJ:A_fAћݺ,<@zzz.uuuݧeV]YҔn]8WH)vM\ /[BA k6$q}OX~g{9:Js0ڋl?Re٫*S+,饎+̩(OquI@&hyR^(p *XͽIگjzW۫4q#pFoo@Sp~ FP邭" 07`|)#&GFJ:P*ۭUr/hK(]  @U.~Ds^S.mV@Fhj=Һ;j`{0dLI7X XzN͓=dܥҴ[2Wg*J"2Y! H@7[dGeIJoL&\ᅅ8tEIc #Q,QW  &7'`z5$xNA6@p-n2z>U&gJE_ӱuSr׈Zn%%h+ d;]u0F)ԺےbuOv W\S$O[٩9'-0"؈ZuV~WPKkb.ŦǧE=T>@\Dzcxmkcfi2Ɏ3C)suݽ^Da]Ĺ0. ܡIOK7fuMwq4Z,ӞSh='%r+f*LΝZcz0Vp 0 [EIgTj_q[(nHfYvMVS]]51X;m{ ZeO|µַbU!? ea5QӼ=U 5y{ZxyIk~nfSUN OEF1ڵT7z/7o`(Slv؝- 9s"u"-"EAE5 gfK> pĪūCi^T͓]y-vW4ulW&n*%u}='e,KxvܽkmUus$`sk$%ɠy'IJ'AaK{"(i?])3$XE$h-7!`@f蚺ih]SSSS [dBLAV1lm W+;BS5Ӵ}LB 1v\fMxtٔDzb~9Q5 w q'ޘ۴1d"^L/ X0bC{,bY&% sݯהHBJ&Om:A!DDT UxɎj\=:g%JEJR& L(uVS&ĒjʣhKh,|ӌ=.PHPڡ^M^#ma==="n9aӲU7bxĐ9uuucHr_EvSH|[XN}='!;lBDiRS\+Xc)xUH832'f͑+"Tǥ M"$]K_;I$]:JVD%c"dEyLʺ-9¨q(u6fyA+vSc_25>,SH0rW ØkiR]_4fT'qŎ-2l}>T3?oi5wu9 !)&Z_ٔ2q /zosL0 ZN[ZΊR | 2 `pl[bThx&ٽrGH^`*rvkԃ6D2Ǽm5ۄy\))^< [* =lMS*W 1D{y:dYψ<IL"C*Yp>ʹafl|cи\#WRRhs=4Fw[ gV3Vd A %\yq/wIzOq/6g3p"0JeR"ӄى1Og7Ro4Hv9*28 Y: *R@aЙfg5.ˌ2`t *Y,fB\6lp -8eϬaGiEUgZM%ׂ+8] [?r5:6R>VjK̄+11|>o5F L.le1a}SXi\;B_\ eRiGe+ C@͉(a#fȌ1Re)՟\,ѭ·[kP;l~IV&3Ӻ̚KmlZ5BFLs=QΝ3lhD0~ [XtX_#µuh-d+,i-j̞:Q?*2Rq>M"ɻp&.&lr)F,5눷WIDAT4Ѹ'u,>1WM8m|&lʤmllKiť՜Lkny#tPjfPc_L"RsBud~Jퟞh R;* .ɮ: plI^s >(eyUU,Fj)-FJZY7yZsOQEP]]mb^NNq==)..NowL*X>+$5ywN&[%LMr)V1eqlǟ'nin - &6z)* cNlc6V&@Hc[&!6ִ`M8];M6w\:;ܽ}Ͻ'r&ӂ2BrR)X!7/Osbg{I :Ԧ8:3ZOyKȉY )\I"٭b+ՠ` Mf8Y[Ily-4>w~uoqij?'eIAYxj\gmDҌ$> z*n2׀W0Uq{xW7y\H߹y޵.5Gy=&k]7p$!# Q)J歬5xI]BrU!Y.9o53k@i.#g2up '/S{8kgّ<A?*|ȖV0b9r*,JK&#BdZ%DyzK 7lF"5 j%^(a 3~_o ps8 :c21jH^e$k[ii s&v1fNzC@Q.uyrVL{I!9`WH@`ZfugA+qIt|juWQ6?{ΊKIbV$ʭ 26`UtDTBr4AۨWކHe~raŋ]DQ$A%\0O8qQ(jڳgڵkdJE8`m# Ďu &](O-uT:Qtr%W$96wxQƫii /Y~ QB4*@4Qny1kEŧ \hBqBG;?ڲ\,2 Līo]$Q{K5!EU_<0 ?z裏>ZUUUUU (EQW^vm||s`W5}kTj3UiYW1 <ʬUlO#X5J (a9JyK-oG_y\Niu3.3))HqVmQvPjm.(X,~ÏiJCCW.\BXV\]Tx3wuv=EQO?t[x+_  kn'yyP#˫Hr8kV¡EK?`_uuM_ ^Qp8$WAQ?S^!A%k$uҐu=Lx9BpY£S׮c/>XCS2EFU-ؙ\iYO"hz޶}]dޣCbkѥ5Q7jL#|8.nQ"?(+y7&>~ZlTX(zrHY⡑ʁo(w(8}.8t0to(SK?S7Bj8`_wgcY?QOAВFZCQwr&fј'\cK5tdDu9I_qp?W&j*le h(ڑH$N}wʹ'oupHē=3Oz~")j8rn'oYk ! X_TNr.pN$5XQ+3a_{ >dO޻,'MLpMq烉;]ߟc7,f6,8ڼfFmx,NRN~,.U}DѮwOFGUU)#cXN>v\ OjdD>vOww; fAf׮]2KI<__wv’H`&RW{Ev+,Kja8ZϔȔ/}0^F{1Ub) m~MMMcbW.$:ow.h~*‘v4|#XOOO(Ⳡ#O8!dɨ< j9#OY5 r:~jW+RB 61j++,o,LZVEXJ5q_o S]8g?A~sZuzyP4V^DC|)ک7qy]/{ o ÌC+%Ц>MLLHgZM%aeFk*3`n~FA/g]U`~yDT/J*FPՑH'Qo. VVVK^ݻwƍH> 0 iV8vj!k%x<β,q||jvp8,^ nE  Mv]f?AAL:`A\FATD9A  :!hAt AD# Fkoںhl#ѼP/Z8M}JPݳўv'y#x W6A@Gv\+-V7=;[}ݼL@G,okFgSihM1"fA;zۚ\uw66] SHMeN@Gᚶ֭C>3kGpNj{z[S]>s_{t7dz@G~=ؒ\<1ۚB;bD6=]Z-qnin_yьޝC%] w5\wĸ 8~WRP_pMی)qg wniNr56LqkO_sIDc8wCcg,.+:y_ht@;]5K"<fko>:^ۧ[xmIQz qZ[.4M"q̀lp,c7I3͌e}.]WF37o~g?bxxD<0@$JRأǫe˖ŽMaՅ."VPXA"b%-t UJ]ֹVNȸ$%M?v n{wjv5kkԗNApk/]vKnNDxwbfflbԽi35ɭ[[ui֓}f,#ˌ'c#DLpǻuܺ593386硇^R޿|t,] =%;(6u<誼Qf=P`(=>mz;B vT~Q|ܹOo^}{,:@R  YjxF<=}gx`hM\^7YOe$73YOj[R[] H$oz,3z3ؘCP=ŴۦoW !ofΝq덑.x,TAѨfު& VZIgm{UKVBïY_Ԧ: 61rW vgη>v@ϥKw|ܽH;cK+BP1yQZ5` >i-`Y$ImwL] F/"7MJ߻|yؑw̙}7nw?>27Z,PDֲg͍Dt:LB(fxc}}^ =>[dȺ2 wpX IY !5bl(|, ;tH$w߿?;˞߻w#5UW"Fh54p)4)<^MDôo]k+v-Oo;ӤU7e;mTP  Ǎ̎ہchI>b!R႐vǥ싸u3?m ;:>oYWZt8Zf,ӂpFllm;*Lg4`2e$ԋ( %M9}}I׿CVSEEŎ%ѵj}lF12ұZybbo+V*pḘ2j$Aabar#˧^D'\Ԯ;;|Y%Jq#A@%U7:JCr:ReOiA&VQS%OpeBh&K &X*E%ӫ[ٷpvFj1&jHGD$qudXA30FǢ~*fpE j+]DvEĊs9 WvfW>ϯhcIad a;}ѕ+WV\)H\.ĄZ- 'D̺eŲjժ}gΞ=;>>Nk7b(Szg+z"&!v3338ol۶ vy;=GP}==~i駟D"YfM4]GGrs}d(\$6 >`LLL|GJҷrVVVZZZpS6q[#<(S1{LꎎooűOPc"KZ]6FB[_]TWWgKtuC#uG`}}}!H׉DXڵl䡇ߺBV|t|sK@C 0ǣv{=#ڵCCC;=\> >eKs{D vqYА,ҝiYq THn rrGF2\/@i4"K_j%fNIIaPFcb(@m '<11A?fڵYY7',8X0w>#555_$p Alذ@" !: &E j+]DvE S0bnN24Dp^u|ЍѐW|eMf0$ &Mig]^&PALXɲvL |v g.Rb}qvZ6n[w*Ϟ&Emww]^۪39Urc ,S/=T_:~ՍVnkLr 4wƵ۷?P|i׮s7nħg|}wˌ{ y5hW^rKfIhԩ/ޝ*fkׯ,o}w;^9ڿj஼`3(9+"!vgߜ>%|0tƩ{ykh㮈?.Vܹ~=rڳ͢ FLg۷EDy-KM{z޿WXF_,̊B%ļwO?=!Hvg-"kea?R7Z eELMЙ_eWuIhTW)XLp '߄'$ O:7n^!Hjם|$A""b."VPXA"bO+0"Vp?aD'<99kq7 #P̚o|_/))y`hh^Ȉ/nՇ#r2uDSY=gH$tVLZ)[Z]____] ]G{WekNB7ȼ0?d%ʑ> U?LuݠޜCZk~ٞ9><ﱷ!8r꺼m!Ѯ7 [GFse+Pa-2I{Os榾Þp`|xIvGc> z~(>[zPmN(KN IntA&^L3ue6"f#b0+,Bϻ1DrPhK=sK+蓇=sKKt:oPU(v({E ' O=0"Vp?aD,  ]DvE j+OY ݹߖ85]$9sn)1dxXX q8$ Ϭr{ݺY7}گ \ "xFn}'gfک*$PY2DძWzL4 '%*ȒANkl,}7;3ch=uB{Qj͍j[y&Wպ?8?2b+ یe>< ={η03'˚[qotyU귁Va {A_b5PZV #r85w={?auGv!@ժAm*+p~Ȣ* wJKzXfCI 9VW*|h4-~WU*$-$BëHk ~ufD(/@eS(j:9"ȫ:PV9`|j;>UWý!+nzJwwkVa TYOj[@gr==IigOX'i~hii\dxΙƍOI!v_"I% q_t_Q",nBh7M*eg_O4 (gSMCI7AB8|0 16@$IԶz4r܅0 3i@RX i~pad;9L'!7Ô}94M$o4 GH/tAN3W_=;4swlK{eZPu7U)+WX i´ +t{YٯP)3g}{rrUf$ 'T:{7jz\!B Ԗ-Z,ΔWs:JY,Nԍ' =G j+]DvE j+F 3pqRq;dHf0-7y,LzlQcArxǯP_f^tKe$:z)0)j+6P7Z5m^x;2>~֭Wcjvv/`hf#¸#t8}l!vϪzu:lC+fw5<5'?r/~@{O>^߽6 c?+Aut R[(ڷ l_-qҮ]I?:ZeKD*=V{O@[(׳H:zNjJhq(6{l`Rܷ8@H \~8˖҂t3=Y9=W輣 B}{\~&aߓB C8 ]㏯[2E"J$?:x >P?r݊pX ' P[OV7tZ$JzxZt3'Y<Lf,B]^-TFO:Ҕ5?藄<Ġ&vW|LcJҔA^ڛH bCݔӧSNNԍVCYI N&|(@mENSmܧ|Y tY0䓴gJJ7|dH̵~ q+_($p 5BFp#Yo+]DvE j+jTNKK$,vz3?橧=$ q:oOL̢]ى59w.E"IJoC02OT[POEԛYOj[7Db' ,۵˴, ,hs]M+7׹c_w%7`ߢ*`6WHλ.vmllLrm""DY2xLeF#{ML؁ab>Oґ n~rw7ΜCC;NWjڊ|t5 @[kʴ9X`N0o@O2QY0hk n>jի=zLV~Wu!f2T 5:m,I<&~'O\|9HRW2i">U-vscuU=K{HHnH Phq8V)zMĢt<!Kr*yUWC Η*pU$8c IDATQ.13#x}33QwJ/F@ehOUBc4*T]brKq$޿Tk@Y˞i77( :QoXFј{|INՆJ-(Mɗ~HIb`noUV_~][ffWuZ *j*(WS_5ԦrufU$$OVOryJ_nķlS&4m#_R$r *<;K( HaoQ0E`srĻ)r8gLI$AxD6~+]DvE j+]Dv>aDO+FJ2]t H$$^YZ{$jes,XW,fK$y4 ;ulø{2?wm$lY<@.mK-U:"B.mKd@evΆ 5w q؆CY[8Y vrنњA0"2' #beAƻ]DvE j+]Dv>aDO+FJ]=bZȵf,G6X`k2L4E5~Z#U0ֶG&oamZA; #ѓDi 6297{M}cӄQX]l7nPѻo{ ѓܘv·W?ܪ%+%؅Km^wƬ*fc[GxA1pڛz:Ir}œ^޽}G8xb?Tlwq~)M Mpٛ~"tDJ)˾ j>q6@YRgbu3ʛ)M\!y@;UG TRF${*z@ /ݻwrp{W^ nU 7Vn%&s deJظz ݾCw*Փ}K\?b#|d1tXmq;D@w/gSTT>W*H1z JQ3IhPE,H3""',;8sUb=9Cw9:z5$*hq8|30)"zvl'hhNMН`u8o>Hi= NQQd$vMO?nذj山XW(?GgpZxF\7ڝTzA|v˗v-^U5 >8G'OZ [Y$pk+>8o;U*kSWcW]̈́A9:zr$4Dň2""#)H?$tn{bf=9SRܸ10$K6)ZE ؓ.t_Q"))?k ƅNLo-]DvE j+F "MOz͛Ng%'L˗ܝ4_ʡݻ!H qؤ^8{7m2㻈f,CFHn?~hV~JlDFyUc,%C< tE;׎ HwKm{gxt՛Na~ǯN\f4z&9߁Q6'| 4ф,K=vsb8qtZZh{rE p@[+gm5:inohBjW~fσqUWX+o‘ǯmR/A@##^s;T0!vfgt'uj0lJHhB^iWZ[w뿞rͳg˶oΝTWY lƆG^6.EvoNL|lmv^}EF?UTyFU7tZ$JlyUUEO>s҂+ϏOf,+ꯉmYOW7&MX>a8E"|Mw، wihOf,+eMH2X;qn/1C$>t 3 ."VPXA"b}ˆXA0"V' #b%>aV썉ps)h0Er}6cY_ّ:f0aoa> tDsLXY09W-D$'z8.y^b7oplg~ ػo{>@GtbHO{ݭ(-7 %tػychxՍf`| :Er}˭ ayUU)ٌF30i'& }kוk$Hѱ\a5PZϭ@%@Ȟ,jXÏܼ!ػy,̿\COR 0#:D^:# F,>:}ˆ@0"zPXA"b."VPXIƍ mYjljծoO_0f@ j+]DvE j+]Dxtu|#ܮ|$G'8E!Bڵ9ο׼"}.% !tb/7AWCwm8//nRRyZVj[ ~pǻs5h ^.Xp裏Ο??<MMMu:djj N;K^,%_ԓӓP(-)_\IBw֓+[hPP1sc4!S$)kW\P(6o\PPT*/}HF4r *Xy %Iɕ$+PZO.8'Z3.BzG'ʆmd=p{=>3?oؙRG-TIB8l>2 ʜ?}e/6_sΌ-3^ܶJS*w`36P :T)/n[шŜ-ta9L9LуE j+]DvE 0E0E3 b."VPXA"b."VFKKOx{ݱ1<+0$ ޘ!=:=yG}D߼y7ވKTWgBCABkwbbbn߾SQr'\PL3ة>(ܿ(/]Gƒ2Q^\,{OshIV;p5[zP +.Qvup6]T5kX,IB111m_ԉ`dKe=(}K{z{ b&\VTT{+\on)) Sre9EGGGrsd`F.?r=ݽt "~Rzs }t$SvyՕsH\RhK<3P֧!.U*s=)䖖*߄v{ZZʕ+j &<[ 9LWXlٲ v-uk$P̰`A.P=FKa a."VPXA"b."V' #b}ˆX 7u\q21(L#l WA{Os8,DN5or8.K"u}Eܕw8P(F>Ȋ\\BŐ]uر;v޽{||7xg׭[MWqRB"vܹsΝG}o~…(ء> ###k֬;Yb{OsS)؃+;m%.+t1.23yv((KtN;>#μBw>vΝ;vKJJbSV|ܿAR@9q# 'ػw۷կfffFyTdm _^d0u9_r7 eLQ}'NG;r=GG^ b#32D"ry])duuu1c̑P9[s8CU qchff-|.K@nian @}b'0U\;',Ep."VPXA"b."VPX~FF8˗{j/wnJ30 vSO?8sڇ InޜyAxQ=9yy=. CyA(5={?+%iB0?{rT\H9zhUz|J֥|«##32֓T"?3Var0@|GNGgU赜*Ymՙ*1lx|MR~>z>، Q9np_;:+l2-jc6bsjѱ>Q}Wnv"[_~?wc}}_xo=?UT鈻WZ~j5Ur/PYJ_S~,߬6 ]WIFM"f)|U``aV\iwufm'O["dtiG^^VM[sQTk|i2&I$Aǔ6@mI S4:8T{5yUIQ[sd\i(?өL\ _X">c$7oo}}ެ\OZf 'l3Z@eR$\B K9\~gj*+- ^{vt̹\"F^p}$:]^Bx-̦4ls H-{ Q }XA"b."VPXA"b%:XqFBGy>ݼ= H8`̀."VPXA"b."VPX|t ]̻ȼ«ݴS.'C ܶ "v].:w4/Z]=Te AvKϟ FBy/ݗ.mPaß_/삹C4Q?NoVVSd"]_x6lxtÆ~VnXB,dyiy7EVSd!"tvyy=͛n;ႜK޺5¾ʫP7HͻkJlq}?>r޺իweh Jb#<_S|ڌe>yaٓ.$YMN XS*2Ix7cp8L:KmIgnoTyntttfslMaY@ihÆ/J <#<#_x AxqCEӛ'_ <󱼪FMI )CZn?d ݧn=wƩ+W>irSW)ٲ%⮼9ģF]m6M},KOeCg;fvkؿ-_2U`(dzF3ݓ'&(@[SS4T]ԨF0dvŊ_&)(x tӂ"ߪ NtzN N!5P[05- ՕWH- :SB:-w.=7ḁ$`a6p-2 Nd+iE j+]DvE j+~+W$o tZ|a!vS._N:}7 A Iܽ+PvƧ!HB ?=7qvu/n9s&=%eLy_f=e-4%=Bq@KKZ?:zGfgÑw2XiIQ[w%G/j}tGn;wF-_TOlCF!V{zϒUnaOݩn\zêU1kzt٩8zxkvdֻSSM==~-|BēryqY_Ԧc 40dO~^#jvKBBRS.LMD2rũwUA>ѵ$IVK ɡ7D/1vֽ;8,5{yy3lZvfS_mmfF:'ϓT%^*jo ss[sr^gҔbQmܸ2##~F50/ryFpH ڕ-_n_b>z'_^Cw؀l(30IDATjRoWu3z3SҒ$IEm,/@kp]yO$:O {N~u6oVm[y8F08B6mrK$[͞=Þ)Z/eI&<$MΘ~}@Ă+E j+]DvE j+!rGȍ7>c]ߞ$`̀."VPXA"b."V8ߺuvdee%Xyŋ)))6mbbO$8;;;|u֭]ͷ%7ZreG fee ݼysbbt'gff|M977vRT*VՙuIz";p,IA=M}U w0q%~7n[v .krr޽{We˖={V"Zj߾}thU*ǮXeY%3څGpbddddgggggLLLlݺu&v />,Y8ݹ˵f͚_}rr͛k֬zڴihjjj$٩>(<(A!lbinP*]C}GFۙ빥>IKl<|zG'&&?s۷oߙW SBifcv(6uM(w@nb(v(a4G!n(1'AϵJnAx\-ݯ;6׸\ %?W@;Ar~@?€C۷ovZ^^] ==}ppP*>c'OgSukd? p}nDy^+/,*h8 8Hazi>`i> Y ǽڹsfffݻGQqƂe˖dʕGGG#x@F-g.=ѡpuiV&ˁHoF{A;7`H*#]'({Ow@ёoxLsO 9? 259ywffFPdddY>OJ$C-֑) sQZ8s 󿏐ȴեMZy^No9GFĊP;k!eݑ^R%v_TJenhUAy~=+ycd1 |#3 (@"bF+C$My+)0666@_p\DIENDB`DataLab-1.0.2/doc/images/shots/s_peak_detection.png000066400000000000000000000424671511411446000221740ustar00rootroot00000000000000PNG  IHDR!3sRGBgAMA a pHYs(JDIDATx^lyWrN ۈàj D?HY6!_+\l "pa; mu?@bBg,L韔Qd@iQt*dq%3λ3ыW}vfﳳzGAD|LOAD^P% KAyCї  /AA E_ A7} "o(AD]WÃbl۶M(\|Xp޽{r|kB׌ww[筭:gaXQηJ!Շ7){O}T={8cg= VozX;ò}  & aY]]5ŮG!-C Y ta Y, I\o8@/$r@ӎ]!]:h"L L'Ucr<DA)Kd/A{*3hwuuub!uc^@0uC#5nk+3GxĐV)[qܛpί[GBF]A{dAq\9|=w 9_Cks~cJF]y^``DHRIHR"a.^0q I\$B*WDua9F\O>$|Bg[ţp[,p'P*h*To}VVVrÉ'` 9|;_fIEI#Z(oB8?]okν׮] ʏt}!O-avTXFgѠfacpJszE,N_J0rhީoYꘝ3uhV1r9PҼ-#'CǞgwv7 #.6j3_ݻQ۶y}`(xٝ,~5C6j<+gz',:\P,ADΘn9ӹm/-+,3=رnnneނP*h [nw?wTHH%{넰wr[uERgajUd#\!!. F偩Gec;bp bϕ+Wv`#ヒ7Db7E;> Uݺ@0|Sn-φ9F*|~L]ubJ⨫ Y+Ͱ?7%rT~NLXIsp=8BPYuUnNC^X{Yr˞##.^q/]l۴A,p[L#uۓys \yΐY޲79B4@.)| e YS;y< ߰}6b97M'ûeޅ61j}~ y2puڨ 0@m{as2Z7!aG1WQK,8 &yBҸB6I'i=QwR"!KBt~U|}Y, 0*3AK"Q-vEMp])&Pw^1e27xȅH sL9*4`3_tq~Ba4 q:wlyf?}Eg hpX||:=u n$6|NzQ":~)RQv85pZ~qj~6d#*wZɸa|ۢUrQ*ᔅn< ~Ag׾!J1qw_7e0^_K#dMu!wΝ;QTVZ {7OVHR2.6^|FUN͕MHR2Nwz|#WKՇu8dqǭ"mm?ECͷt5#,ޱ hHx㜉~9'a}& wvCv>|43 xw=5#X:P>v9. sIK'AlRQW\\EC{6{BxfZzд@ |p.4.ŮM@"1ɞ(;d)Ů@&.Ţe.3AKB*A]=dqeY AK-B>jayaMs297<_N6j|/XQW9%/ljKCVuU h'x)mslV gd;6wc:L^ ȍbEGy1GD𩵵|2sEv}H(CC|ES~N7P"u| u%)C_a5BcHS91ds^i̳p"L>~`XocZ4`/"L>_8pz14 yDDEE3bDn„qٌF:N7? 2`Ɋ ;u8m#+}:?m]qV5$C*zV(G|DĖoLB8C@\;uN!k5XW1b䧈E%rHDR蛈-#t dԃ];uN!k5?a1߶a8{…&Ν;QTVZ {7OVHR27^\oUy/]ZH4i% \0*3GDZdn%qć++$Z`PcUcB8r Ͳ@`8%[aݠ*TdJ6*yZFR]e@tfעwr[uEh:|k)` V4#7o$W&wzk.)| TԱ+XfsG G5jѵk^يD#iom1ն?s|x"WV![!\A]!Eb=QwR"!]7LB*#!E!I\gVV«$CubWDO;v|,vŊ0ﺂߎA 3Q(Wh{_&W BEF]߹ .4 z!%wr);qcI(CC|Ũ|k(z]xkۂݾ0C9qGfzRݸ?Na XS5X+νcWWO ߳Y"\tnjrbSs'1YYY 'NnKb8~αU~?CgKv)ηJΏ1>LB7ot<L?;7ɖOXT"&IwC5Q#vIJP*,y7 3gz:rˎ  HYall]\zG,pF}\b"0q!%`QI'`MXxtr_e)psèŮՈ8Bj(akO;cBB3\vg+;gD33[ÛӦg숪繣)+s| Ͳ_ \A U"އttKoۈ6+/_ضiXD-D=C J MEB=q7[7l93ÛZjg2~.G,tHa_ǁMH9|=w 9_|=u -ϧ[Bh3lM?:j1B qU?!^^v5Ўo|RY%`gN<];5 $[}ZTLjmys$C/*6jV×;=]c/O*ޒqzؒM++R"ADBC.N EvṮO]sj\ŽqV3%p`FNߵsx{fC K)QW [%7*CQW7aoq~ >>g``L􏩦/NP8~q]>4!Bj:G_o^1V\.6>AAG{5,ϟ 4]i'hs,oߣu1`qT3kV0@V\W!`qP4 #:}Hv#! M3;wڵ"<ɞ(`TE/QUN8e.`=t!3GD8pڱ*Lg1X']82*8) *G&Ύ.GޣB EdvM̀? qUޤ"0͓TEP49|=n˷(MՇuV)wR~ ׯ`;J=еsz\rzXK} %NRAutubWVubW& ih,C Y 2 :_CB*' P- I\ P-vEcWwbWZ QQWc.htFfܹv R rbf* B  (E oy8ve$A$D\!&WI(CC|Ũ|k(Roсvw휞WFz{]_]1U1 '\\g\Fcie#~i$U.sQƃuAKHOD!1M-;o8ptJQOh(덧m( e"p\(HtWF_pE!TW{MKrH!E~>S`-BagWQy"6WAHuYR7v9_B@5_Ok~½hhg`|3|y@E-"ip+^") {_et4཯ F΀S!jT1ϳ3gz:yxmvҲR#,z5dENp$HgfelwвuqZ8|ʕ+D?pJ <9g+(.6q&6p֖ FqqS ~E7uЂίX8z.ܴ"G#`8jvĦ-;gDó6=C<0pf#nĆ\(csBsjPe TΏwJW4' ɇt\ [-6 %XtmZሃAT5Q`\DpJAԑ18y֍-;{p0xQ[c6q#UGnk.)| TԱ'<[g۔gG #-[cFT.#M @P| K,|@|A$H Q3UE…0dsAt7{_1V3v3]njvb%N j)]W'd[o-C3D|vhP;] 0Q¢*y#upz Nߵs |8i©SCk55k(RUVTe;"ua={$Rz#]2pz*$ Q# E|"!5}VTmn0~r&d+"t dԃ];u\v;j:\/B'4j'ӝw,Ã놇v~tk9v;ڳ}C '\l0LA(ڵ"D$$*N'N+$r ߪV^:e B*plC+o8p}Jt |( iǪp}: u_^YŦ{X뚞MaF8S[6jl㫆#Eu/-c EF]!, h NsN^oq^,ʀ f>9|=.ʯ-Y}Xo2|C}]z;Vdߛ ( R>tr "ewS-T/ 7^w0iwKc<*QȅU6js0ͤH5:1$*A!oR 11v}$ IUVD;nY\gvܨԘF)\o3  !mb PCq3}9E,iغXD-cErJP9vGbȓc?0 Nn{??}XoUsO(lEq!0^A{Drb9NR\'.pt~–53[_BR Y GnfX."\cB¨>mO}3';gwЂ:s`:Y*H廣m̬0Z,%uezɜ4R.$+)Qo+թ]Zjuztyn[۾#7 -_ضiXD-Ѳ*.\?$ Ӄw lNOA4!Fc}w#ߘZlآ 9d|0'8*k Ο]_=2t];uN!k5ySEh33TipYP<n;^8xY՜ 69 Yn6pbs#<'ATR ̕oof KynsD ~@4F@‡[ ɇN,kke| s9%ũgΎz2ao=m[RF:A·Mu·ׁC>l8dh6GB`X+UFʌO8m|*.>EpmPv}kR'a ;s|iL љ|+j#65pޤyP:éN"'DOcOc| Eu}W6~fͰ"q +4c[v܉BZ$lyB*0x%3I\LܪQWJ\+Ѥ|DGnHDKI7>$i?&л*9&#\/g cQhǦNMbRkh,78DޤTE(uk.?0A@5_Ok~½/DT>i{㾙N6>,, boȂ{ +eh~(~S bR뽯LYZl2;s[Zvt]E-AD, $q-[ZZ8|ʕ+&[ gŅ&V'*W7O\4aA:hAWY I\D+ѥZC+I+?O;cᨫѾF[a;g*Y6B8̞8JzV)Ed~y%`r S_<~n ^߂MH9|=wJ^q|5?!{CG@=0fZxsԢ{|a bg*W]_]]~}[s؟_a1SIuYE?N NߵsJ|8i)ncFiϬ>CͷJ!E_Am["(`s,U lȆ5,6~Oi];5S;8*ip]E߅.q!r sZX/8s tx )arf5x+D|VWW;''8^F1> A>05q3Bvub.$4 (U.)VV8 . |,%DF/ 8O |,$U.s7OAZ2qTʕv Y AaqTȣ|J)G53KA F];'Aԅҝ`kauU jȀb!yi0[Oxc~3*߱3S|q]E_Řyp)eTB^]3LLD'UIGn mcv& b s&l1(bU KmP;>|j-i@ MĢp5@ηs2+Pq~ftroېW, /]l۴A,pG>.: ȵsz\_;pRuw>lU-ͩeqޫu ! ;{UoL-nlQX r$[сZ[ X3FQjr2Xxl9xjy!0ZxsqqNߵs|w'R;p]E~s (N,<ڡd ї=KoK2F-x+D|0e 6l '\l0I,1I,]+Bd\$U.sG|s lZ{锉3I\έ*E Q BybxU2]> m|f' zքŐBq$L]1s%HV_18- ؝\P-!;4[(WI#Z4's"P/grg8bX\ߤaVvloeQcCt? e]Z.([uLj{v??]yڅǺZl+.OSwv_}Mp{%QPSkA1XS;#}qHSm݆~ n[="?:``ZRz׎k+ZqQfeUUo'GeVMLVV8D|7'V;ğyu >K{cC(i Yfďυp}j+F)Eߛ> vT| \5x?w3YlbR6'XpQ1;Ą(4&kVZn߮O~կ~3߳~D/|֛6 n<w}{kmv%?¿k uƛ&w!Y(lTbB^1$X\#Y ^S_KGqǮsg<|S십>Y,~Z{5e:n|P[[GSLq!ϑ1zWq.(; qʃha`h#Vf6y7W[X;~~wxs%ݻWW< څf 7?id-X{[RUntUT8` hΆN{j;ODJGq; mDPl#?~" rLC7'JiV0d: }JNjy6aݺu7wŒY#X/Zjr^k;L~ ^EVC"d؄"7~lhLzt:zYԀ0j 5ѰP+[s{x.ozP׏U:dSd=]?Xs `D 7$%eG&@;vdfދNO2Й6vmgAM03T?*ï_-mgc-|4yw*C;o/۝yS~w^WeҸ`]Eȵ$"b91w7[;FcH-u׿F'ݸH\?0Hcfwᦗnk_f 7SoYp \!KC0` {>FϤ2M,XZ#e9@0]!J'M|!~ǰVI'N>~e215 i0_ES7\)}kU _{n},Uyw~ EwX2o}rعdeOuu;{ֻKk? ,erHjffpkqXubldM="u`> ؾzN2 oad 75| L|(aCsxkGef!Ůvjܻ UQ)`9hDL[o?.fhDhUų ߪc߄$?,Ͽп?^ fgT6zO)}/KENPͯuv{Q#}O|Ga#we=TXX=KW~*(N(u uk~_/ʏVʱ҇,*Jâ(_w!tLu5;zҽ|v_agHLw]}{"{='CGb,)o .,[0]ˎ܈XrE7EZ>uOWaoͤ?Y%;7݊AO?Ƃ6 /]To>ą![K{D,9|=w 9_Ck`kBBmsjX9oo[vt]BU3yw5~0}+p?;Yk}, ҏv NqT956=F~<ǩ;i69B8? ;zj:ec;bppUʕ+(}?@gaqr?L\-&|Pf7O?=J8$H A"0u>3wWQ)8*vp?q ]2]uDjۆb!=NߵszܖxĐmPgajU[1iz|bۦ bBm[/bjz)>×+sz\rzXSE=gfȪ7[7(,YtNup"3Sq_~UW-1PINAIv秺GZ=jY Ԋ쨨#.DfP-1-{M,y3ЅN_a&~-G_Μ䖖m/!a,}8-C _ ߷~Zra){G-[ KΏZ-}D p7~s`v.tF;RCѷY>u{Yõ rh߉M!>˗.m GD;-}=gY֍t$kxaނzVg ;_e!̠'J T{?>i! 49ao|=pwCOCxGv~#(ADP3AA E_ A7} "o(ADP% KAyCAԟ[_j8/U p|_*A9mBqYAf\l 7E_%KAyCї  /AA E_ ,x=/VfLt E_ F}Dd ƘcB[.(KѰ@^O}V'^{;,Koy?xtᗢ/ADѧ'{M,OxA__?xrͰ{L,|ϋ/wq喙Y*yjqKѠ,˛[`pm.k_ly/·?usOZ r=?Å:\/E_ w?o֎/ @~濰x,gN,_{Ꜹ. A ӕ v7?=Z\EWvq&l}rKѨ}=x7w \8~3;kfGhû<&`Qsyu%2˚JVG5JJVRUUCDsu}zgP! Uզmc`@h_ޏSJQ0uS:. AQs܀ Uw7Q4$IdsT]G6hJkm5ӿ :ZQFk9n[K!CQkv!jE ޯѺ`F/H՞ž׹G6pT!@ ~ZTPWpx۩\]"ϛB!ed2eB2:ye1Ri+=ch_ tdS kZ[k#/-GǏ7*Olma %ĬPPrO &gy'!In6mԪlj}ا襢ΨECjQ^Zz&1W Ad\x u/5dekXA"ijτ0>>t:W'8yAff&A U\&?U 4e:%v64UE;[Q%_T\ &QS@ tp8nؾ/v8LxzJ!0q nD.s<߱u\̃yq#Px8ѯf: pWQ!`d]L[%]kwÝyĝ[B,ݯU*ۮĹwD]T7o{z/qڵ_^p:tI By6DM`Qab')w||hjb ͝ "JBO=YY,Ve*'XVCCp7cCCTT.Q3tkνa4^;w͛32wiT* in_+~V` ' 5r8p36p;$ME?z(,|驧o$%a|uEo߰aj]wgZ?Hu]Cz! Á`K4i"f5KօUɴRk2݋9]﬐(6dd|-Un{s6[>ߕz=+pWu0p46q;ƛ(K4 +ssgdG(/;'Zm0P6SNƆnVAly`h`/*#ùv->.UBB hR28n@7 tp`fsss!\bSO=d[Q]7k׮-,,$/?? CWWןg}6 n ֮]+H A\ti A7Z Q`_Pqq魊C}EQ|Zt?C@0/!C [nvbg(BHV p2%krfΝ7qН;U?C?͛7sssαammm7o7`l *YIUU8Y ÕkXZ&a_;wj_ HҎ i) ?O Q]$;+]n5Bf]D[l3}79BYwh5IR֬3YWDH4F3]lqL6 o #atTd2T** 90 ~m۶I$z(77,+++33fY۴iS^^޶mK?xwtc:fgQ*$I^pj۷`lllxx8''?lYe?̅ ֬Yj*HnݺW_tIR;w#Ml ~'0j5KU\HjC3'O###2я~T\\,pf3V[$liPϭ2 09ɓ'm6[WWWYYٕ+W?* Xvڶ6XP(,3< K]76ԩS_'|&fGjj*ܰB7 tp8nB|[d&Xn[ͯ~wӗn놢Џ?|Y#^>9M;y}8{RG@?;gC:g~w]=qDQ41qM'WJqFW!  gg($=۶G>EX-)&AOޙI/^|Q0<,4'; Nt m;->{x~kDQScG'vϬ1u|Qȡl } vl?FvKmU>9p֋$tXt#L?GGARn y߈RZض YBrRYo8-wZBe`k*f-l,ڀX*5C&Jy`ODA'?<?BQ*nlt,0.0 U$!JɮO?D?; gffBs3WN_; DRN\Q'!V~,Ƭ_z/w_<1X("*bKVB3$!XyPs0M N$8Vl`V] z"|Ѡh}5==OlհBr 1%`TN?.Dp `׍Jo?ΡDYӪ[#^8n@7ZVkݎ荍eWܹsΝ;Gӓbo, )=eKaC|,oP$S7FI ?CزI[ Y3`iH3xNtptcۙb$&anۻ7.{.@#dCH?T:CYG)e5qYi7*YmVQSG.,6B*VQӸ4 M_f$1>fف g=Vs @&7"e}y̯O2#52CMm-k__(=&~bvM/-[l۶ gp9ΜIڕR533Cgy,6XD33)Qwގb]0Yg6?x䀓nnz0?_(8#ڕ .+V&J,ᤛgo7}T"UgESA&~[(q}̓[ Eo\uQkR6xJF7V3E\n)=P^ rNLjKXvc]nuM]mk\W=VgVz"fʕkRيZ+?YQ]UT Bb#<.vRkEydVEK\2ju%$IҨUj$5`36944233<=VYujĹPewn>D#K}}CC FF.$V[d9VU_^Q>봣 |d!?\;~=LMOtj]s}o-ETٱg||Uqh!ۄBW;"_jflqGUOnQ'g bI Dtp8`ꆢPgg 웾lŋ+l n^~YXp ]ϗ{/`]D|=X̯bƿBC<V;gW|<9g8:u㏉œ S9LGAݷv5d%:~hH`z\@˄C`'A~r%uÆ,joj@Ԣz$ZTsԕ(kuf52AaC7xpķwJ[_)G>5X 5p*! Ih%!Xiye I֣RVn'Wld"VЗ yeQ2uZaF8U7>pX,Զm*>Zx0 eFQ])g"pixjB(?Z۰GO3/}cfb{%j`5=XNr˹B !g~I-[gVڀqlB > t>%$ɩIPFFT*d Hhʕ+v=== IJ2. JP,,,477Tuy"O:uP#駟~~'|9 n\R}X,+A)DC4U72,55upp0vX,1t7twݷkK@H^ZoDjٌs#qhPR|2Etbaah4ڵPǪR)+[eK/ Vn tx4Op477?f #G$OP%k*Ղ4',<0FfXMNN͉3MBƬ+9c[L;O``<(J$iV^i&IPi-1x]cy~g"t]x..Q$}7)H2?NAIENDB`DataLab-1.0.2/doc/images/shots/s_pulse_features.png000066400000000000000000002654331511411446000222440ustar00rootroot00000000000000PNG  IHDR]mӃ pHYs+ IDATxy|TsٲC1 Z VZ&hZ.-jkbVEZPFV[b"n (KX $ Kؒm{~ܙIB xν9ܹ9 ✃l+`````````pN`؅]h````````c؅]h````````c؅]h````````c؅]h````````c؅]h````````c؅ee{^tMa k Qv> 3y3ҒB(lvqУ_Y° zS Ϡ c6!_^p!4k ?:Me }ACݰlCsB!e]yyAƉ)uG/NZ T SB/~?.xV n l_͙E קrDQPޗBH{s^^WGi릎z sox[ΈIC3:lv˺αc㝝O\wӕ ۾~qD 4}7q bO\,)-{޶ n "O>|/(mB{'+ZګK}{a6Bw{%,sԿyH@\T\gɖƣپp!y6/! 3P|#>žx޳;,W$l )]N.j|[$ޛapge}gfL[*j۴7Wdfܰ!lGzˢ͘i֍0 S<@eWz#` tӶ~Ҽ޿W?IsyizW,xs||Lvg aQ3_cKAq?[Ҽ_;[^1k}- ̟-F ǪW@k~k=z`5=x33!pf'8.wҗOx33A/tH+m^\:lGsw! 4s^==+lW?wnOyMT|fW;%rfw)yڃCծ{ ;v?s6F|z2/ /W\< @:W .T=h[~[rx0לpFJo] B޿A:\g]W7?j :W2a5Cvl0yюZA in6 )^y±.k ~odu=޿j>|Ֆ[ƃ^':9 4a;[TtCfTU.u:va"wO-5C/ېW `Zxs^őy[k}ب6wK;wtg`0P[{ nuGtx]L#uVOtd8P* WxW߻` Zۿ y__BcGB#? lj,L}%I/ĵ*Z8#$ i˲>˿1Ϭ{⪘1"sy[ɂ83- LnKN1Q@}f8^_ 37ܕ, =QI0Q9޲[ 6pcus128p1!I?^0䭍6f:PIgލ/4ю9pqsÐ.)q=z#` # m<l>jD۶; 2{zOcUYO]#%LQ?*xǦ}5ӧë;IWqVqVJQP b%5/\踯,)+]w\Wu1醵 r\QꞷGd0WN1dr8~x ҧë+'3'CoP{z^~5+rJR?^]׺=Bjܛ `V.\6qhmW[WBi䇳Olnꪫ+g}'d c wY阓gkå.[ϛreW˛dSY<#u q־'^0n$FpoL4o+巯e+[U+49a{WN_s|]+ ^/Kg7a/YHWnߘV1Qswy=59R;˾{64 MIuKMKy^;*>{`ɶfzO|<{m$r$ڛu/͢5 ?Smg#4w5nGnZ-h=t( |_-&LkEH4oӤD֏w_w10 >^;L 9rƏxRlĩV1 K60H| K8Ci{ /_9^:2M/N[8c_s~h}<4;{_7% 3WͭA'J~x 9A鵿0>;1KAD߿ Ys^ql}iڭ7ΊjDEIq d'7^ٽ6 mod>4Py L0}]/{[\u'g??cֺrnm}Il4 IM᜻?WwDqVYPͦsVEoqdג%K/^| yĈ&%&=?~wFE@`uzv5oo1}уZ]?q(~9΃ŋǟ~M# ~zguzv[4zpWh[aUvi9>BaӓpBA :S] _ئ=[6e^ĜVڒ%KS\@4zp@80zp8__'6??7~qp\ޢh Jٸ1%S|T3={-ޒ]'w}t#̔ȳ20000TTf9JVVV< \Mm6+V8}u)#1k@80zpK!ԯk`CCѣMу}N?[֥>3CCt͟N:N>TN9-΢4F< VO9***.400H AA)cz74Ts*. a␉=/! ] L_5vn|G]Sc~9'}&ۺ-Ř5Łу\=8A !?ދꩍO^JLۃ:?O_ Ϟ=KW{4[/+hރ1Fn $ﭗ3AC-_s$BC څ_ z1``Q~Lp6,}3FCKND'<(. Q(cq.>1pq`D!80zp_Xѱ`K?a g}}v,q W|qot5tIop59OW=h؅|# 9Łу\zs?(12,Q!8B |p؅(?@644]!\P#?v%K{<@A?yy 8? JBB{Qv^)9{✄4$B \T7Ik:J9+e^bTq8B-|B(,5ɭ,0?J?.Nus?FFO{zP_S=]NvQf1/VY2~dG_|Bx_ζ"}TEُJg]vűWuمugTd"J'ڼ~#kϤqVW YKX4/w#mC VRt>mԋ ! 8Al95屲#-.yi %Ne*ڽߧ珿`Сk{>=۱KO۱g^/(//}u*Y~SF#!~-.ɞ;;Û(!_+$F9 hX9NY}W-5mJ\YUңS2f\ [ڋfE)*XTP؋fYSqF̾vի.6)#lePu]EDom(h aVȘ=7M-{wGE ݎxf]MIx1Br,Ĥ77ފ#gy wd@̚wpH?c6F$$<r<ە{/{so=sz؋Z7s^:2z}.Ϭ^]5USWx0%QWM]1ƱҀnHLӽ6Ӫ,Pܻe;ajB9s|Ս]mK(@ݝFzJN^Wو}*𫫓S\Wϔhu[e! 22l=lON,x,RTO7V񷞗Lª2]aL o]+O;k"{te~z,;U盷D~Iy#mpc]d+9K w>m=c6N} NPR0 3wrS=C]1%%!o%<ȞÁu:ىHY~g.Ϝc~z#AŊcE9Lmb9%'ĩB&&9=/tKI##]1M1rehTu<1)M]E؋fen5%1jV3ʾoݹ3!gN^.vV{K;}O˩+ZmUԎvͧ+;W/0QvΊ/W?sjoH]x0<0>"P__߇ÇH>TđsJKall(-(Q"55ޙkv;!rً A(-+R(}0B V{~-縷pFyK4/P&B$k Qeq+gu FDQ%T0PQ2v \CƤih^#NN|}D=M@U9^%Ωa%KND-*FyK4/0.(0sv Bx߻xĈds4xbxukPͲbcN`j";/>d2&1'}P.*.ZW8+ӷYva LTylR1c̰4+|de_ºg=i)3'/wZېSߺΔ˯_j苆k]v!8rv tz98a#"׮*r_ 8C_}cavPsrJWI᮵vE2z+o?`| J)OE(<{ j B:}2e4${F^qo:]'ו2~he'tjacϜZ3Ƹ{i2laPs<:55yN~|7t< IDATx4ggK9n<مބ:[eCuӕO~ꋣᗾlâ*.1|3Iц?ٺ_PMc%ZKX(ؔEeW=i쬷TeƳYfdxI|= 3{6<$LGlǑ s[c3P%)fCyC~&E P^ y PZ B:$$+]522!`>Aׇh-WpYlxG8rKČK2ͯۍY9 @|y|SmedL( Tb#wx,"GNPۻsoU o_9/n-n{www#˙}}g̢w5JD$+ rέ[^iEnwk=2i>I?]*86&j:Ѣ*Ό/|`7x0EF\JJ|sk{mU^àŤQ&B_š%2oo32ȓ&̘Gyǧ~(رcoʕ+O8y?>cFWs=DfCy , y,l(YvU   rsaimdq$ ɕ1 毆>!7r=L\-3G/7~}uڥ%04]G[*%n_f$1g0. h21ݚ[ *?v9d;./bŋ ~XJ,;YK@%CXGNO_2<6ۻٻﭙCdT$"A`kI/>qW(KH,E^/ie5?% wC{E$ f(h}> 0Z_ 5B7l`k'[I.ӺċE#L"8,2LW&&cְ6S05KbF~+vA?#9rwߥ*rG}s^[[*|vazɀBeV.bˁV^ oQ['FWr5$b4,-)6RtAe``#7vpڥ=qOS(D @( *e&IpAV-/m 8xp_6lkn-2ƜC'[6FX*ӃMy=G2aA^R #]@_ytEa! 5l@ ݠ`* K'ʒq7f|=եu*xF%$ P&)iqkfpB9BBoֵZwq]wu=vꫯ^s5wuW~~iz뭾Ls&0]Gs %Z/~!ƁP1Ô%l2bTqS)cm2'ݰd̘ݼJ̒Yl5Ѿ&LY[$GodsAL@S LMRyקּ6;sM@(Kƹi'9lv(mP0u$3Xgs]m=$!ġ`AУȥbI貥e]Nx%LBBG=GOFiԩ$T>Pwm^r(brNEʢE5Fbƀ2@(]n%= m6[AA#<"bMM B(Gh/Ggc}CCߴ?&2+ۮ\dIkeU`K,KF 1bnV1`FQ:8=&KRƤYVf݆ ƌʺ8pmJHWNP\h[ʞ.XvRlrVԈv[{Uvx ai811uZi7_~A2M;`dhmph,7IC鲚IMVǐON-c.-|H<cyO đG(.?x?kBq1#׹1ZQhđJ$;Qf7?u 0 Rab:֮[֩ _ͣQIf̨?,J( 7fQ$c7T7VS!NCH@4 1OTh1`)~G,, zg$!|d_@c4&P N a, mwnl:-d)fI$s*D|v}? Mo@BMpRR)"qlӁ9hӫ5$1]6*Ȣ+dV[9XJRrȪL:_ַkU7,݁+i"Sm)fY`NU6T0U*90w~cYTHk-;w<48FSե)Zx+rWO',R>G3Ļ5uY>ʭ ^4+"n``ЅS!VӃS,I iqiJ)!fTN& OrkSdߔ%Jph`(*o'UBIȢ1\TQQ@٤&ХZV;#-C(%D LB$$$x0$nxGW7]0j3';aIfY p}$Qp ,"F@(tr&!ޣ </ZA%L>̥AVYo+(|.TS:U x7|L1er4+,4 %Pn3KLҨ,tk}shYoƃsE@9 P 0ŀpϱ߼k#R)8s?>[M%T!b*>ebɘq ]OI@*a(DII]kRbM̓,$E%%ƁPfJ$;PCN)cT>7KQ2׋`j2B^n N{4LPMYSR${sP1 .A6, ?ǥ$R qd_HNu+;*AmtX\#L_.Sv,.M )q$B ]؅r,yaovX]m2̷P/_7ZjrI4)]8a<'p}pm'? D>ƈ#1{n6TvU9{,999W;Ke(dK4ȽaNة@afYthzPYcGv*X$ fYhd_oK1ˮϥd̸wvl%" !G LJ"hT|v!eNDZx1\_8,$Q3¨TY%*G)ffEFG$[~R( F9FU)׭=Šјr LIT’d_[ow-b$.$lk=`{PIDz.}gvGthؘ0}>2ص޲FlGZ)㢀%(cx*{:<ũ&.MoSEő~q̲ s($pϫ/R[u[_F$")|6f3y y4:n).*BȢ@vx$VAE*j3F9owi4hXkǔr0-$ 02N('[L]~;UbT4,٤]aD ʁ m>Pw-ÃYe9+?2Ƹ>S3u*{/̞ip0#G IӠ|Z;@]u9dOKK 3,rEsKʳ lϠeh`pntʝɧNX$ѡhYdѩYԝ|$D(7IAqdJ$QA࢑I Q KH.5}}=, HwzqYf0aϮ?P4\]<}@Wֲ +zm2Y()9p3@;LIDdVXrkTS!K-, n%&BD*VYb#,B(م QR6zYaYN IDAT" *a%I짜Pqk©Jn$`!Yf^4lm=1e&)ˆ.g#N{>*QbM`fEFd ֈ$t](eL@ޣQ,h?=DW{ߞlL`c\ߧǿߚ$p_2xBI ħ|Mb(*fI0.XǴp.ݬ]#3'ʫ^[sggjW/]tUdח]Q^W]م+,(^4w%q9 *U54’dѡ*{% &Qˢ@rp&p*D x*Yl`2*;]Ol }?vf5fZeэ$Xd1$Aш/D(M"t,Y3nxYsu$ _ 9n\>~wQDjqBLE=5I$z4&H11tJ8vڣ;澴 Sn>k'?yo rI1awfL]%L$)*ZdRTmة5)#Ax8gJ1efQTսS`e-)htv/6^Sg{0bN7ԩb Ļ!nuUI, 1UTD\ O'BF=ʢxکʢ8ȂYw8UءL/Ȉsz7oulɥwHJMvgYId$!L[0Y„owczBR3翲s!5R,/MmةYþ@QLoVZyQua``[sP`˒Їu,?`x}@嫖zL:;3@ SꙢ^#0gNd.2-|}h-F$jiZ8Fw2P"4"a̓wS% K2ieq̈́)d#kHvc0˂FXA[#IfY%-[\* 3FL>@" cR$K^{ȔT0GSc~! ~ac,+ӟ岬C1eh~iTLͲH 3Ƹ[6_%gD]OL͒UdAT0e+Ye1;zT>m6IK# VZQY#,`M}LEAJLM)8xtӡ`BJn `ek`֨E Mry' 2IJS-(~7|c4&,*Q)>ADTb>NۑL*т)nRYPÃӇ% ^0Ħb8w?W85Y eQj3]3imW\PHC2zP62K>j"A#HRьq8jR%0 RBK{E Aht]:s( иQ&WK̍M{RErI@wA|.M>%md 1B2FSܠɕ, GnWÓMݩq޼;1жS?!T]/$E;mF V{蒓GB:t$|5ZfyRR8+%k$}$ ;'DSۚO;Ȥ{"`go`j_JKsuӇH<ԝRJyB6Gќ/=2Pb@Ф17u*ö?~p& ]ηeLx2A+b9wE ;aqIxd).Fe'DݠImF?Ni'f4L9Y妖n(*ewk,C!B %prnTp=^B!=r!ԭTjeW͢e~.ZSjCNET7g ¿_#Z*<ެZ;#f+w'yWʷe(P#1R D*^Uliƨ$|)Kl#r~-Q̱`PncD>M!L&A'U:` TBiФXJ (F).-U?٘#%EΤvCRF"ǽ"߿zӂmo4vQ/n᝖ >y֘O5/Kb˥bY4[rH?zA AOKr\*h|0 c <.n6ֹN檰r Y0`3ԑ 6)Nʶ6xآ _oYXa)Oh#EOH-blܳC=8\JxB<#Id4UI3LC/Rt M-2}B1H{<-,[YO3= I_2SBi9;^amQۭ,2I?MAM \) J"f;ɷr֘˧Wft\,o3ґ&mNUYÊ펄Wl3|g=~6u'B6I|.Q[ 1T`ݩ퇺'U3#EuwxdӠ=k< ˳ѼBBrP:ҡpȢ a La1wlY;!"Jz%RY3i/*vs;Mt| _E(PuR~feL ,,'NQb16`dPξzIl-F~|،I `gbsaΪKC*LBtGcuY`E5J~sk&^oxgXŅO#PcD~rz/|A ^aehQ JH`](N[-;pR4c2h ~H#8wzmF>2{޽H)_{gW zFAƤrJ\\_zxeȴe@5tX|'&HMK=hRrm O0;:v&OO]I_GR΄gQ'Ԣd2ŗ^B<|c냛v>-\LHK,J1jra}}C}eq_m~?ސċI1qjyt?4CvGBw2r`⎄___៽7^~ (F-Ŕ'>6򃯭{nSb- +=xݪ}`Wk-'7!B)X}}}ФѤa뛣nEQb/}}ޯC;~G΄?ؾ0̓qO_bDbx {B rmB]g_΄'BMźwE}}}ʗsƗ]u+}7Ņ>Ma6H{gfo=xx_عݿ_MQ.ν&N]me-~+#u;Rs {wl7(F~;_~U_*Q[g&GW.gj{sS覭=>@Jxx!ug~MG8BG͛#?]]7 =?.S+43Z{aH-?2{Tgה]=siÿi߅+w^Ӿi_}@4W]ڝ  ɛq>Ʈ{MiUk6v%?{5?{1gjם1-ݩOn[ӾĞ{ϼ{n8nų[|iK_x߬.6b;[q-ب@uz;̸{G9_p?yaLS[:qgig_5p~žO9|tWM:Vyo:ԕ [l_{❎R:}\$ o U/ )_;X zɔO5zLVtָG^=syUn~)ÊTr^sǷ-ç6/xź~~ώoo=ЂY?g[/ϟHx_ڼIۮ9m~y)#/>߼-e;?OJq[M_iwOpWwoYziؽkw&p&cwmq#Ғ53&U`Ӯ/\<oԑs3FUnw_{욲ͻ;SA ~ɆIR\8o?s%L;ZߪӱN7?{K'>"2xE|W `Yv@-hl?}[:b댱e<$\tфhʿgvHd+UΩ-OHKK~mo]=r]6/߳O•?ްf#x/g-mNKbήl;ͫM^z/u_53GC=Wڙ_OX|Q/s^myy\Y{e=_s|nk̽lsw~equ_;;gΈ~M˦gf?W\ΝټȪZ~冇5d$P6- l?*W-&v%W?QwO_=\V} GgN Cz9wBk[#{hGД/P&eؓCnct$Bw7M0 J3L-Q728ɀI`Du/dmPZS\Hhwyʨb`@#ǠN;cPJrRuAa<.QcH*Lu+?$3(}OofEdf@;\zi&בt MA'Į-QW#]a1OIuNu79nZ/ߓ8#8u'QڌYQLF:~UL!2z3U]l٬3nM99 Y~o$`1Nz>#Pt_G#BO#zR(,]vJC ';;cJ_I\yJ'(ߙLiI]t \\f1:;mqᨛ6d !-%l%̸ sǦD]:=~;g',| ,tB!$w֖?x1`\.\3uGKVjCp| T RЮi{;!\b2EH@(0"56'VQb{BAVb{\q)Pz&36g% i|;ť N[*l?8G׉N:FȦa|(nyaQQ$=Fpb)J*_ʰ͊^nuǘXzc_II$dJZSAR\Xn+*6nsLKqrLbPL `8r&f1 ^|QŗMݦIOf--FciGJFB_*Iq?<ؙ:HVVY%*׌2=a6ˣ) MTd!(FA! Ic_hQ, T(#',F4#8 -a@B)]mnR_ȀA> RJ_ňc.T$dn?՟`.adRҕŌ`_ScMM KR }!#!?r>x{\|,u$U/G:~嘤;ŧ WY_ Jm4J#PAw$!|t4x˪$+ehǠ_˝1e?~0d۝(IͪT)2 ] @@oun 9mz\LE.|phzOoطawnW+=vs+ϹmqC'tsmqCHB wwvBz\}fŨR5,uRcˠ._%`QfZp} N J\$Mrd ed_G*l!bqROσ&-q}Ieآ:P?m_{"0./q *>sz Ʉ=|F\X]d<ѓ'D + ) U`_J\"/8DvCh h\$PlSמ04Pd_ΟPMYxB[r;yE1"sF0HJPg=vn1 IDAT6ω_(0BZ |PʤdD hreYNADePA1#a$,9ە 勐EAn \ήk#Rv=( 8WUEV4˃'D()&hQK+a}sj#3F­1; QI%sI_5#Ffı/|wG-俶!=1#x :%ꊈ'fESS֝GF"l2֢8S{w_ZB*{-7 S\:b 6#R[T+i{3FRp/Į} 7FF˥ch &è9Zt$DbqD\@&Aq%"@G—6d#AqJq{ŝ Jyfє /cpz2?8uo[AT 4ShPR-vBq"A:՘rb5ue~0ўPHM 2,2(6 /?mճ3|ad(.,湵yӪxK@`3Ke3ؓY(LLR/(Xtp!oHq^4=NA6w?tӳTsw4BcDl=5<;g. ;f4sTJ;(*L$J0RYΤ[bcA\\m4 _) ~,FE&%\gC_7"5;PмwW47o,wo߷-ޖ?xφ{7w8! aw$2)RB:0&frC w&q`c%%X'AJU-1r K "+HdΌ(y~Tq_l=wQbϗS?yh_*/&) gQ¥D] E6bHx"7 #8P]duxx&#/TK s5lObˈ$(&U *ZDbiT7E}aܐ0m_(%IA\2T:L X {whĪpgJ}0A#KN M1 "' _ 9_&)Y@E1Y(A\*gRL JV!soGfĠ }.H-. pL !P]9cJ/fhz,` ŶK,4Ǖ#glPH_8,p+ϝ2is,}_FTM ňZsiD  /22k ^LBJ>Bʤ/;Ű883yD Q@,J \&g\oYaO9?P_`2|.=灭|i͗O=Gn\pŚwyH|暈׶8G>flB* A(^]mP|AHÊlPi(FAIͱTU:Rb1igg:0uL둯=0ˤ!:Yc,?ů]o2BOø&Ů/&-qgK`ƼI0B:KBS<w{+\6JGLq XYPMW.ͤ΅cqE8s=X]Uːɤ 4_H1H%ZC ^УG1 K%1B^Fg}T$IO0)a248chMb$rBK %!@gf$1vC]IKZ vqR p)#z9FBm I(ΥHȤ~;HO2g] jdccpV<*1GL\Sf*N닐J̤cP`)/.IfĒ@:)38;&q*  F/Yڨekt;V/LzL1^b {ZL\_;yԏ(Hk9[$dEgR9&|nRL1B(; ;bfR#&EZ⇺R!@HOT$dQʃiKWXb2_kAeqNOtP!if4~AJp4TڌR~0򃏞O/6{\3e²ЂI!2#g+_p8=EV{Ӯ?0N":_^kJpEțUL/9L &I :o )'mZxS;^ug'!e^]޼aϫ>fodX8ylI\slI̩!/?]Up ntpG.@U!'K? 8nOQR)]d峏c ز_݃! D@n^NRG|~֘2\\) !d2☤#qɅ͈VES~V.dBٽ6A`Qew؁@9zr RⰮw *bJ9%<2G\s\w4_(6!Gs?s7RHXgb#,u^%@1H٣GNyf+$wyٹƩIWnP J0BOQ']1:;󞐠< I_1} ર2dN=̱3O:w>J t=y 81W(9.:x} ,y=h$ {1M3Gn\qU`+'%'xtU2kj˗Lٺl1@:M]|ūnQ%'xtŵ0A80^uXV^l^?5fZ_|ټŋ2~ުvŷ\?>#B.X Ozaat!/~\uP@،0BY zg?icP\hRx0%!RZc<)1fF4hR߉v;qy=TVhso̱ǕQ!)WcFp!\_*bPfI_9J`B:R t@QpVQ&8bE[ez!c'Od~_è_i Fk4˦e#[ߝN!2HAol)EgNP8ZO,-qN˅5匦I_tbXB\ 埚5+4 YպL(`PϤX*VlIvc4R *2lRlQqEZw\+?33<Zk?{GKze[[ag'j5qYcp<]}sZZZ4S]@SJA̞+cW.Yeު[5 bزc_IsamZ&EF$ԉ%NX|­S˳`ݟ.[f]][7yZ5_j59C}c'l]5okc(my$ |SW71黶oX[/x̞=q9 sO[G{0ȥD"wyǃwxD"ΉT]D*KeP"E"$ V@paXیp! WFX_R ἨRp0( NJe㮴fQ,)%Cjjm , 7[ؠRdK---1Luz2S C FAP݉D,F)Ob7w9-X]/Q`Zhmڲ.S%(?ItIUT7uLS X7A2HEsoLzyV91TRn19uBѮN1G29EN [31SF@`P`Ȥ\ä/.#O%# c]҂6YϚV0g\psG,m]~(UT8ܒ|۷wOb{㮻_D"ђ7viW>^)6a^|籆С+64z]8 o,Zo~p9~Ѥ8Hڕjp 0vm {KB?8j _>k\SmnW}o{e?h^í䤉g ~R8m{h8wyfP.I icDSтR팱R2TH)Ȥ9pR=ל{FJHOvcYA\V 0D "D" !adUyIqLeD$J!_( ^=4)B0>scB˂.ZQSHI*^ %M 2wUEʴ%_%44k=c&%(嫲s1D7J0͆1AR"-sgBOԷvj#Nv&M`ڂZ/1SFMŸ IDATUArV،Α^"} _%a|Nmϓ2)s{Y4_(*:s* twAmz#P (%`!mR-,B!2(֡( I qBc4r A8moW<ơ7R]RsگfF=ã?v3>|77{pС^'56E[v_bXj2e׭ܰheoPӍ+9af/o0@ܸb\rʕ=,~{S?&533Q__^:.D\A_H+ `[*#jii8,9@n R(nY9zl=D#E q?8_E1!۵M@YeAP*:j2ێ-`Z#:&%! ,Fϟf*l_9oA]hc' 4h1D#z%hJL)vKFB%oB*SǠq Q*By&>u$ 3;Gb@wo&M.TmOĩ8Y2էOϖDW "l@ui@vMmhp^HHE2znTiŴPhE6+ :}]ʤXd $'Ν;Ǿy-ne- m9}kg Ҵ91G^V^!%w L5h{أ#C'zO􅔲`Mr$A.BcH$Brw Uا,FwugFrX\)/)0XXUdRa`9鹎GGhB)Jzb,ttn1> KwYƖP>0i,^Aa+ g u=`&-5#fȈ +Oʞ<:F∣?`Zb|Eޫ-DФ)_;aZ.gϸϾӖSGVJyA3.]j?!Ujeg?7AG>>ʏ|q"z[|x"+S$7u8ny$.PϱJB yІ@1[w Ԓc%b,rίʰy+)GgYzŔzmvͩ#_>`~].lyA=!UQT0OAӽRI%89RJ}^IF0}!)̋U0Bzׯ(ƻ =~/1ڥ6.=eǥ[1I|xլCz!=qlj.\:ՙ&yl&%:]$A׭D$#HLgY$T0UE,ws׼^\pÊ{tDOQP{S'ɚd rnɅ,(ܼ/eیL.%b ";ly,_Z"dnm+b'`ȢuZ#$Y|_|pמ# FBR\H`PePG"|ї/  +S=ֿX|m}xS?C-[z\4! a|\Ngҏ+O>$M{ )E٠}B)EE,` Qrl0)=(j+䙃lRjdAgU#h0@ 2Ps>x\˅@&gdO. %Lg@3`seN3PʰS &ӡ/!@}mhW"I#.1FӮ[ڶ6ꖿ\zc v%} 9a^b?K ^2B8Ɉn'7$T6+Ͽ?!0G>S ~nqH<|a4Lzᤊ5+eR-q9 l3( q@$drgA/,ĪqSG9+h2IEj)=|ؑJ'860^[ZZK  \[DPbe4O y2Je؊zd;4G., i9#@,oJE)iQ *MOUFwDڅ8f>?w Fm9 &ݫ#H8jPIqW_v_qJ/Őn7ao{bx;Q:BD"R0oU8Kko J; p߇#Ek|H1xc##8_ڎD"7 bѰY%4_iY4؅c}yk4gƏy<癩P6먪)J' (6 xfQȩ+ʪh4Ig)8Q`㏘DV98ZyPj#a1E9iE~obXxRלss('[\PgV4<KM@ ]U'I,ۄҲw+1t>-ytgAߑל={,[ g];sʎ~+?lK$aï >sߏޕx/z/4]TpVپ)fW?W]E2Kqd)'2¬`$ћ(n5(a[dm/(ő.őy_)%rIY SG4 YX #_qS_\I/Y(}~@=3SO"错w5|dS;r CZ{4E_[mH»!_,4E}=x`k2﾿)'*^܋xzCWUCCׯ@ `%m<7:V L'?)e]7oD9Ũp Hknѐϥ3>R }]s )>@W(\h7a Luxz"`|/Om>;0H)فK~Ԫ6ξk9雛y}wʻNkx>qT.x g~`X5瓋U\M`A.5̽dͺu߉79TЃ}fp;7=v f5Lo;ȻrxR0I"ۼAB-=X<->D{Etk7a8<}Ha7-,=qxQT 7M4T 29?pFAx&q乏kjs8cYz5 2^}hxMΛO?ر@R.He_ <ֿ/{i4ٮ&;؝s֬0ǹ >*Qq>r/` &ɅX-,7cp6 ]a!@穟\@~dO&J((J0aQEQnƺ;cLk ,_,Q v\M%=. 4 dEx2hv RPItC ,Fg|!79 R-㴒ϴ) y$E.uӌ7MQ#OoJqb=É9L8D7+]Q+#._+k\E"H[}ȭB,z` xtz쁮 z^~zŇX$HH`O0^Bۙ]TEfyI`$||4TD;(!X-ܾ"v!@G2 j(xmلas)h,pue3$Zr\WYEջY8#sFKg_i2vOge`beg_ "(8=G ct$pГ+`fJǑA{(UjؐF]T)EtjT6S:0E*A:o -zCGc!#~wJ:Nݏl4 ;R}q05**fȺ]H)B82Kp-<9ƨh n4oKk+8$@N #*bLZyE=@ QCGPb8rg[)<̚wK, G6y4 hT*p]Ǒ)EM(GMb3aj.3JA&!MW]ĩQ</pwѯc67}J*{g^^L*`ʡG<'h#Tz Gm[\|şPʿ0 | Yx2&Ǒ5JmC0?%՝#cvk]05)>r2<7GfFɿ+>&h#=c *)A;xPԹ׌a8cG.Fì,l,H̠1Ex"p 5 [.uk̆ę4hvLH(ihEx'VRQɿ[ϝ2Qަt,mjpiպ֭ል3&,*^M DZ~v fr&XLyvYnb!CH%BZQС'׵Q%6|@{k3Ȧ18A)Exb1Y.̾uҚِ8.i 04|jt2rQ=|LU:+&9#*2wqd)TX XY +1EGVugaOo2  ۃ4h ?ȥӷ34X]Hl9< $OK>J ,d>r T9nLv[̲ V`VB/.?o0ӘP BKkVh MUh&g4r,9Rs*W{6O(rs]o.ΚZx2lr;v̮P@7P/`WGMotFigI(IO Ha`RnMwx/^{}ѮNl{o9{so8}U{>}wZT3Sנ$2 ]y5XVޮ]RNXNxEkx"aJ*|҆SQ8k&B$cz+itf!gĢoZџ0fKR؟и.\,"]$+D\M)菹Zqٛ[] PO7 i@Jl/0N`S48&k_p:% Aa48a٢Od;,9b9zi:Ūp{s{4|IXN"$ F{4Em5{s{42kѐ pBh4][^7z#1/mE<mH'TXT18&c ]xOf0 9'3Bzh>@Z%ˢ|d)1 Y WSKS̃ t\Y{(4c]Mפ8k xk[uQ\'CaX8A8]ڐ+%w5#G87&Bt)~WME1 Igjq0Sf8)jRY4h,lӠa.}N7xSve IDATRmjxCEd.JjgBqd) Ɲtt)O4tucx3 }RJi_ H/:1b=kCHXl`S{/uG•q}i.Ѽ,.':A=ȫ>bH$VIzH ^{+sł^+yֆ\EM> t6s"AowSOL|^7Q$ގH'k~BmM_[WG8poyFzs|?=Gr E@L-L-[l32SxBTqe0  ۃ4hjqqirV[K\ηn[[%;G\v!3 ~)ݏlvͤ+)QJ)-/<Ԧtlu祣ꬿcӪʟDDAK4Bum޼ 3DԗJڸt2qEǞ&gE}(_`h!ӑIxz"0G~Ƨ^/=zm;.ka`0fH6o$ EhW`MIbq&gRh{k#U7Z鋒ZvhS&&(33o]|bexL^芽kht*_`0مqȒwBqFV_#xvH'd{Ba)O7ĂB!PŞ+'Jjctvo|nt">~#$IBYu61WkX&a5 mxݽ <#j2~U)EJ /a{4hrqs<\|H-,C $IKH6oP4Fq %h4\VkNmİD6@ƴ3mkks8/抛frM{f et 8U*eШֲVU:_iVL0 Zù֌d=!bݽ:_j`otHwG=wvbݽ{?e˖۷[ iu>c_V]ӿ!7~7޸˾SJ+-zqk"fGStcɚU(d?.U*eZU[uU{&K/,_</̭S)=#Os ú7\ .ȏa;r5X RŶe˖'xs7ZJQo~7GMM+qX;ߣ'@ޗJWջDr9|NŅJHڲe˹[|UhB9lۙB5sOb?ܣٚCcj>[wUgE)o_Ѥ7;/\hlߓ{͙s=Y_}OւƊlҶ i+pըjG?ڃL~Lԇ ((G68XXpf[[7xp4rppw]J9L#XxN/4h4lӠ8 aBx7N?8lm Cu\Y?4d҆M-,0e_._<)kR5Ԓs8UdN )[.Ӡ=h8Lv?2c"R. )!rn"iKQV9qIGX8b]{N `B߿vIݎCX鰬iv /$> tN:[bRYn=}%sY~_Zc)&Mr Y`$[tEK%nXEZbOQ^3E@L-dJ vc6;8H)ZǯZVoNxIF!Ӡ=h8L9# |w:I_=v nn=Feҽś_y?S%rRBh4UDBh?g"F{M̉~B]Žvht">wxq3s8VfZf?l߽޵?I{5888xpE\du,G&bMr1  ۃ4hjq8|엿Ν;!W?UZR%R%[coK 謢ǑEq^ڴW8'# _{gX*G;L>Jv)1 HBi|9wswHG:x/~đfQJrx^3E@L-ZI9k-_|eC͑lCȓΩsDt WWjAca{pM-sr?r"Xjg-’%K<M7%۷?'|2UV---Ljx:)%=s8) joic=kC.G|@ lKc`ot^E33dTVk,5Wvȱl(BqdXS3 Fu)ja$j6mڴi=sכ(,zɅX-,7cp6krX{tbxcx9ֽ1,;"VRڵ&ljv8&˒DQ{DQB3,vZZ$v\M$ nH6z& $'g=o++Ud%" ُ#=Dy KԦ)E ipTj,/$ Ų`4 i`iڵ{}/rC6kͅ>Jd_'G\tm~ 4}/3 _D(@, L:y+wDiv zhZrQǩWI::|yz"P_8O~(cW ?9pk]u&Jku??%s'o_sk?ڜ`0f2G6s{?v;9WaiFy'.r~oCDžLp7?\z $F}\@ف{@R8~KO[oCpW}ܺ+ǟ]`a0- 9^NQ|ޱcG쁮D"uD"H$>pݠ+.(2+.dV6l(E- G%f^ЙU w~89J)MZ}+|dBpppP# ݩr[Q?QRr5 \A`11a:sJUm9=!or'ul zYUnt}Y}o_һ:6mq ,vwM+6\uF{uW,00Ö/d0+o1EspV :008[m幔Uk&09̈́l`0$.GVp$V,0ȲZk؅c6&uo ym$&cOݱ5N8iX4AS\ݏPɹxHىϞ{뙁Z ocg8UgXwW/[ zBj-Sh>~ѹ5'pAa48ɹ a:3"đ]X^kKpzYx8iJ c#\X03<:MӲq9M V"לHCe *iX4AS#qd)eY 3ő.Ѽ,?xt[lߗ }Z?|Mem <=(GY¬Ud4 i`]h`$;3M1 0 !/o$L^O۫mȄ&}=ryCv}򸥵q~g_~q+HY:2X00$餔xaX,>˕8̅uEuz~o&ZǓ(n [DB_kL5i`S,h'P5$e5R<2h幆Z /ΖuR?ZƲ4h,lӠaƑ顃kKJ#Ka7!b er]^RƣnS.fx#@,Ȏ5yd)&nM'EiŜE@ q4zk%IJ.D\VW?Fxi!> 叓3xowlff![fAGT?Tb4,(:+0E`4 i0/E:ߨ1!@W4B, h(&ۼBh47+  kѐ puy#t!HOgNpdCİF3kMn1ŞxqE!H+ %@$ekDQp@|@ܴi$pz)->oBh4zE8.D,EqӦm#PPZ#OY&Hwo'x][?J|Q\"B IDAT^8+(8,M?7;xH?7.gy_~'4E>\-AE Bp*Q1L-[{ՙO>RoBE[C~os231csnǓלs({<_۹Wݧ_g>ҸW9sqX`a0->vؓaem˿X.h[rˢ/}i{P} "!44=ЕhPBcfɣJQ5yR \g`0 DʯO,Łi0ηe -N9{|MUP2  ٗUAVF[]9ы48 =hjq`48}>Ŗ-p2+`0ExݫٗB#'e#D4LʵVcb0Lv!)ٲge|vjڞMJRU#WG61 48)Rر?LOg~]*o"=PG-o% +`d0(@!;$yUZk)%7`0SS u_눮K֥6эBF!9Q8N 8ŁE@L.ƑIaQ(Vg]#EլHip480 \< Xln7Է`f Y|?ǑEB۟Jy%2 qbǧX_9 #BfZ*`;F%6˛S(=fmL5 ASӠa3|?Vȅ#źԜ8D7P4!l-˰M J)M(,Z{#(4%@])8Ne2y*VW#NQY`0JgGs51Rw^Bբzqd)&u/B>ĺ{g>*ص{;)WksõŞ+'+$I*2wYP5V oj:p )[8R# ~ip480 \C9p/ b!Ng|zqd{+zi 8~5Kb'~B]S],0V]p'#\fZ*ҠQPQ؛{5 Uu6a()[N G%eLŁi09#Y-acAZS쁮.#%:/ϼukx^Vw>NJ孷ڨj"֪@gd=-zIR*By2ZR`ǮAU4PEj,DU>R ?W 0'ЅH)ڼyst&B>JL*,)//;tD"M俛; Y~}- a ]TGl 4_ϿmV-k#z>z߿M-<7vC} _പgd.Tqiq4_hf,n}!<->ĺ{EI wDf]őӏIbowԊp&?7L=ў7pg*5š" * UMQ)x©f88*O,/X Ӡ=hjq`4882p[0 f,COgԇsvNF;hV d Ψ/%8@W 8qgShz1ehAViFy* MR*pd`0&م@5>Jyh]OgҾ2 #}q_>:}L)4( ,PeEAUMT9EV MB0 ۃA|G6;~dS\*#kTHJpF>N/d4M-L&9`0_zohQ4:R9BST*pgm5 Gf0raBݏlrq`C`8*y"+ZRVypU)<sFy]4h8lZM.,l,,ljq`C ]FU-)<pzR WӠ=hjq`48|dqآhM,IZ2 qDTZxNgqd(f,lrq`CT4j1Yx"tT#Z_ La2 ۃAq$ާQ)#S7[d]z3|egqdS\ԠQ)sʪ oם򢓮U `0MFe+ǥT-)VB A|#e0F%q7Xr_}",$;,d|@B~P R8($nwv93ImDzk*E@L-ǑNVqdJN D<_sdjip480 \6R_$&) s1d-*\x]h4UF]$!D_{BA(VS{RYB#,h`5AeykEEQ n( ء(ވ3Jeykk<} r^mqTeB5EQӪrݺuۨB3|jJuҠjDUS 'eBpppH58퀹\j.2 }jҲM{_ԟzw;!dumٲsϭ| ݎ B@O_v:nGwkD?C=XBD?hJ$]n8^5v;i'ڤIud[f2UՑҿa*^η~Șwxd5k)&nݫ2q*đ큮+wD{Ǘձp8″1'0\/ , !w5Bc iO8qHa?F'۶m-&mkks8 18GViUjđ-Bˠ|!?Mix480 \عR|d{+#%:D"H$B.D:!xRhQ2 "^Bqp61ěQJz@?-H}Ҿ)j*eҙZJOFmhEdE;Q Ԗ!Ӡ=hjq`48sMK&nHnۛ[]@}/XU'e "= Cz jrFgp l緑$QL~EkI^VEVAQUdU{< (څy/ooygp`V͐*#K`!oRHccXm|-O^QYe iL{36I'ڈPWG++Ğ8vO/(qէNnގtF5" 4UYxFmUsz]8LŁi`8,o#՗z^۳'hzY cΨ+o~@WȇH\htF}z |UB8nng4+QǝG[S{: 97<%8]8k*0Nš4 gdiuxL5kfI2x#YW.b(Aa{4hrq0N#)W~Lx.KӛX*d#3*h ,'>ڸ\ة+Z;‘G_u{FR9'cj aK%Arwryf`#ZXPx1UViSAkYyPtTF!Ӡ=hjq`48WcN7D<ݏljq`Ci{H&HJQ5Zk5 gX #eE> ASӠanQ`0LARVlȘ"bRZg'Su6p`y~Nb ԭg͖G68š|PcS|dJκ>22 ۃAzL8pOMI5őM-,brq(MɔZ_kS < Kl6wQc4M-L&48o,m?mڵuJ|@5c'taz2"JIuGP_u>[.*#'zhœ M$BRR,A8ǔ.X)&(3ҡOF;h/`/FpZRhN:K&3u ˤ3Um(r$](yY6cLŁi`95+V71𡣈eŧW+`p&^2Og_O?sx'Wknkf<" bO4l;\z/7Juz}SN+$Iʼ(8NL:Sn:Eh#PJ]dwUMvM+WӠ=hjq`48գo>JGv)tՉ>d]!W,1M{& gcOa4W3[H=W{+vmݭ]ޫ{/[h.!IvCWlnj{'>Lox4%ߋ@ƿOH!l;uJ]{p? $;ӃDx0kTUPPU#c%S1E8EV ~b0 QLo;v'\5+ q.$*hf+,ۂ1WhmggԧpFXp(Q^#\˯)e]X,vD=iߡ3{vFz`tBwF;=mmwDbEJKkfZ 61E;RmIHJqjip480 \??*ˌw){3oY\$ɓkh O]Y_zw߃/ʳ?y~TQۧzs:,00Ö=JW L3󎏣:slSl6l`0$0JKIB.7:BPn% %n(8!\1`c .kw3sU_F=G3;?sFu isIXgИ#&>CǝA }:YUQ1 rGB\PJX,#,8kڵ"2>J:r[v ݿ m2= SZJKKT6Pm ~y͉i *]3e( .D]AT\2v_#k?8w$$H8onr]. "RꔬW37mTםh AVI}~!gN4?3L۷gyO4vӮ둕\IZ# ]#)}ĸ]Ϡr*.yw /lֺ|nݺK=s%)kuW tPƼ}:: *-r)ƅl#G&ssڡRJ?WZA "<YOǣQ q:r3AkiP]jZ)$5ƥͥ"dAng`\q9@: J^ШͅͅBtuTZAȁBK*ϤE'r*./uu'\HJvS\>J:xc`ɜ6hԴz>^`F RH>p##t?)ƅ#'L4}͚5`[f#N:=54sT\ڱ )?չ`Pj a3aXG\9gPq9@#Lz~mmŋ?sŵ>/6/lϕtPq9:|H(p KޘtLb9sAT\z ϼdu-Xլ!cl֭+2wIApģul`#q2? q(\rlB]#Q9bZ IDAT9M6 Q 0"ᅯͫ8p#G$@Y H%#tYL8=[ڽR CǞ2h's =js)N@)$=)YB ݏ;Sy:wU7 ̾ gPP바tPq~y:.F B#% F-!:`6~LJ.HVepޜ7aA [Z3FcOg<`Mtc\O;&ˬAq7 7U!]=QBc\HJ$T J5,"#郠*aQl?L&ϕtPq€a3!5*'RJ r\>J:"XGF,+VƇ^~e^=íG k O'k˾s=,A^A/yR…0(4bdAq!tPAUӹ͸BTș- *.ru:2dSrcK_;MaɎm塋Oƣ#9k؏w>OˏD?gV5 Az3]A$2_S<{BQwG%D.uBBAUUGŠ"MZJ:Y|²=W= fS u |tPq9pAwz_. -^$lxXU?r +rBp]QZZ]oIhqqqvW9FMW()--  !ͮ4"vxC|U :z،~~~Q]f<QzF9a"<|+rI $ &5ک~9ጽw/xt&^rs+>}f{ rCfhX~Ck)%OqΘ~- i!L]Daſ4}:K ?X \췻`\i9@1,XdrsYY\Жk :: *-rЃuՏT7nN;yϧڥ'};}BoS 1lgZ֑u e.D]AT\z\cӁ.wN<'=b "fb6z󙥻ZG.|12i t 6]n6Ʉg_&Ê=GYG]Яw̟+-"r-r}z&up *t'3Ak+ho㹟gi{JϏvow 1g="W:!5y^Y;~ 38wu7;N"[ zNcW~^?ʯ^9#ONP3N}𝧗31 |zzc H;^zvX{5&~Z|/,퓰sZIv~:*$H~O74p!Ƃ HoG޻M?長GX/^1\ EehN^:BAz(#ghA7! B' 5_α/; ɚpM .\mw바t0&-g*-r*.='`jѣ;r>wca29stS`JT)V~gWsO|?:OTcU 4Az3#gmA~>OOU싯#,tPvX_q~}k Mi v H:I'yзo}˦lN:3GJ:arX-{ultPq9@::2dr|҉ 1oqư>cymiNR<ΒMcA7 l(ES [&$ăBA$:r&:%&44js`2JH]޶'J:֑HV>k6u1K ǍK_є׬W dp:K6AL w!x_ md0i<:hGuQ.j/r,"#d4Į[|.^>M2?WZ Y00cܫSyt}}]_o'*-r*.=RG޷o+0lذN^޾xrt2gcJ2X9wuk^x P M7V1?;~I&dXt"_8=:͚o<($m|ljɐ8߾}s@^Q0l._W튚!\t*l#;F l`4BSu9.׳t6_XVVVZZZR  M.`/q0mI0cSY; }^07m x6/Y5~6sM33v8)McA7q X~vBZF`t!Lzul/߻%)D$Ensa2hиx4zÌSGn" 几" *PG{<oxL+cnIvwuX\8|qWp,.lPa Ŭ' )lr*.r[_uC ]+9q6{m wo]#j/7~z<;geeeU) 74+mvViCΑ[9$oWv_0t-Q{KNR g8|E]TZs\s_4srK 7h8GL&zb{4C#8" Gh~àJ:Af֑H_Q]H#S0!V_d"4C>Cs>XcBmMAz!~d]#ޗ~{m!.Ki9@%Dž9OZL\ a+J:ˁ{2!KοԽ#ƜzLض9AU`B -XGŀ/$@  ;iGnW/=W^|K~.8滮垫n'B̟+-`-oh;,7J:AkW{\=sڪMr4swl[$ 8kn{ƅ&d~roCn ::dzdo ϞkhW]{7G$0.%ŏn[yhjƸߣ;u/Tm8X  ^,# 餫qaAQwo9?}*7͋/ڿs[tst x-_͇4\x:2 [h CB_q!::dNoWX4iy/>y/Z.?=`\i9@ݦO߾5V͇=aB=SGRbV O0}TAT\A ͘1_ޱ|V/< N1b>] #3)#kyb\ dDž9ԛ̛;a43q]u0ns4X m. :Bx#3&v|raAtPq9@t֑5LtxV.˯?_2stCp]QZZ]oIhqqqvW9u!%!BHɘ4&7Nd޴_vxC|U :z "e/0TDah`  q!rg8+au f<{q3+29'"8> g<_>ᤁl c郠*aQl?L&ϕt}JBͥisɸ49 5Zgh;q~aW@tPq9@tYpΐJeKi9@ݦOQcYH[ڨURx#cK MAT\A ##.o=4q!)!f6b C\<xb Sh|OwAq 0xe VVQκڨ]o s|SG{Twn ::rN /C\ 0 }ӟx 9s 6gq~9ߝΝ;bD>A$C00t1kY7 ЈQ25tgAtP1nܸϟ?o1ccxs̉xW\uUNw݀cst F+)!1&tJb6w֝: +By.ꢃJ:ˁ{v}qw'ɓO>yWp *e=xHVp+ٹ}g' |Ɛ3G-zW3N~ 4'McA7| V?BuΝ;hgI3~c\#ĴҨk"VG&D] A u'z0KGpij6ʒ?YF0̄nt_W9;,&|,&)14"VS⾨g0CzT6kEׯWkMKfϞ}7oF):2XY N\Ɏs[-x6bP McA7|999m} 'r2ZG\BșË~C5ى Zt:.;vm֧O?E-Z?N.]:,t9X4tJ<:hn AT\A޼y>֧@駟~WZxܲT:p?OSUɸSܠ@4B+0DtPq9@L~?7oO<}vo 4<cNdgPF,& xȇ/@ AL[ރWPP0wСCqrv m2e1ӵijL-^|@J:A֑^oIII 8;﬩a\i9@ƶɄף0_Fo?::`y?9s7xwDrrr($ ]D|a@&vClM#iB-;AՖtPq9@#w͛]?#Gr-{nyyB.sXH6mRR&qaw AT\A=YnkF[X?ࡇ4hЖ-[n喗_~yގ lnh$l6ƅ~Ƹ44budB%B M󅧞z… 뮻c8A!tsνkΝ{'ٳg߾}mrv=1gz8;1-ۣi9-1_8ihNM@tPq9@t=[n?~Ӿᄑ{X[ouK"Il2 IDATHV/=Rx)pC)yؒ7dMΦ қqs~a<(K/_2eʲejkk]Ti s$cԈ hdnڼo*bqTk8=ȎQ`=6݃mW\qœO>y/YTڢz'RQQN+d+؇o>Py§>qjNu os+Z8|E]TZN`7[.\fΜMmud$+qXy oē.jsW=7Y㯍חN7ӻ*T{ͦ қIe=r̞=n HxW?TG,&=Rj - FdAa).`JH yWwn;70ϣS ?\u뺭*-r*.9s:2[X,rtgEMm9uЌǗ±MwgS5Ƃ HoKR !j{tʄ rId~CZ_rޣirZzAT\Aud$+qX9q;Т׿?N,u{^~ʕgJ;dS5Ƃ Ho##CiIW8CJ #`\q9@SCJ."7'6(ބ;::`}d%+Gޝ{6:$Ayʻ'CL:rdX(/dO7=. j AsZc6oV L w>5;ݫs_r`~׮]oe֮]=ཟщ :;xs=KbK|MNvt!s ~|j){ޛӓJ$Gu;AwoQA9bPQ]UU N40  0l#Gv4rKbv7uiͫ7~!PBEzgbJ:ˁ{u(2 P RJҜ@mƘ+=C̴SE>O׌cqe4G ) }>_$ !~~~~~~秔c\aSYX_'r.9\L gW`1!4J?/8R[LҧɃ*-r*.9w}:vܸÇQJMܹs4Jg]p+K\d%]\g{p{W?o՞€>]|9E9YO~3y4Wٴ7Ƃ Ho&#O:u٧nڴqǎyyuںSN9eƍݳa 5E8bKQܸQ_ һI}iӧ۶ WTlkŊ6mz뭷jϕt09 \BD\u'N@AAAuЅzkmmm$[f͌3ʪO8ᄟ`JX|C:)aXߜՑ%,^9p qdS5Ƃ Hoƅp yyy0y~.**:t7lv%:LHC'9=l2 `"2hXDF~ .矿;훗wW.:?WZ䰸P-ѢNɄX\s|rTZAT\2,^.rݽΏyq%E~不:kdќ7`(v?]sz7vmiN^6ALWxϕt5B4\H!`DIY#@,utPi9@tPq9Ȝș SI~{>x!Ti-9kDqMi9%dOeg sθnv[dS-Ƃ HoDmnsy?7?X[|:5h5|! ;:aK!jV7kS^%͌rwꝟU&C6^i,fRGoSNvE9sa3JC}vAR@6`27#Qq%~5! GIH}|gCw+.;q'Mv͗9} /Rм=;Z:,3fۥ^wLƽ+g4y:M>.d]!s9@tPq9pBKm˖?,ܹ{W%^ghzWDGiii:劋)~0…˻Ie{pmL&|Vc6MKMdUTDUWDUWTC6!CF QxgNV^g}n 0e[g2;AUq;5mEEud) H;F_Q aߖ* (s+uq0<oس`\i9HA.$`J:ˁ{/0UJ/^yϯQۧhX}љEu+trІPWSG)g@ZǗ}WI֍udɥRb L{ o9$!v :Aב}k-^O9vԿ{ux2;(DʰjoM!%%/ %X *3|aߨAnEA1/bE_/Ipi}{ʰͅ_ hpϕ6cͅ$@RҍԑI[ 6)iR ɹm6ٺW|tPq9@_k. K-=m7/xkǟ?WZpP9<.$/t3B2@TŒcWʤBr)}'6obҫUa8}3:r*.=640o3,f7p8'r ҵ#h=]FUU‹%M~kTVryEe`YH;qk\q KSkB= κ "ȎQ`=6aHm)dV51dLZ!Q)IY>}ߘHtv\<@7${/]?w%r v;Gn.p[=̖U~;1j]>Ζ8Ο_~t),.n/UZ8.u7I3'C#DtLu݉>jFx̣%%%p)MQ"'~>rwվȰ.e;Es "9"$]x ¹&E^iwyJM)%wv~!Ep"}` Ki9@tPq9:2  >^xә?a]={ dslk&FHʻB633z)$vWםńANIxs:X7mޕ HH:u|To~eޖl?2mB6'pVZ]Vy]$rU}΅Mqb͖wv.14y+5(: K4.7Z}.}ZHT\A#gɟdžEI/HұŵR#UϮ|^Qsyl`]NMB8Z":h1, BRJSؿPutw0dsA 0J I iY/vw=.lbB#Ġ4g\X{u J5auXRZAT\"9G~[HR]С}׾*l:\7%cqII7kU8!RH`/$&s\2+L M'%~#b1 N)C. d7tg|і`GbN/^f\˿P]#[cuOdOe?Nd54+ 㯤sh,(mrGuZ'@LHJHZ5Bq&tumol0maPMo uZn:dȟŁ'mQ}>Qr%@ OBBJz$tR YC"tZ_Qsyl=WK}+ZLFLHJۛ_2Yh"ƅFx`ȒVޤ–& <QWrV@kX*-ru䫣dfWGb6ŞW.Y5_[d')٘/dBl#L脚-2mٖ%A󯍗$O˲=wsC *R<:ikM3*c#\9E[lhVBj 1[4+ X !y둝zqˏmEQwN瓡d16 fAI BW{f tjꢶͅQ2h^bsAX\Lxt-b&c+Yj5L&vW.[ٰÄvA=`m~/'͏$:\IyWH,$̟?`;zBN0!R|eӊՈL#֮`\J[H6#Vg.ZGRr)Z*F,.tPBC8&a)-r*.]W{! 6m ĩUįڈ-@0. %6^W#8\eRJFÄGV{/;56jUU{[=}9. |5ҬBxeЖ„ʲjՑx3Kw] p.k%mm"RDҰ>2_ /d9ɄxU2mi(Bu+ I5,AtPq9:r71]{YI L.Ar!rPb Esz[8ZuBbsAl'_ȅN #&o32]#ͫksRSpʠ;x󟧠d 3Hyx=~̵3X"s&}V6VDJ9WJɅ#^GfBTkeBh_#G aB#D;H *$d_C13vB ; C1bs7 汍r}zyem0.mPb{4fs_`1kMQI RJ[:LhkDm|Wۛ8Ȅk&-؁#B._jv}cCv`(hb<]&-B.5#k ӊܰɄ%Db-" @ 5bVGB6[ ZkBJH°bV+B֩C J&:%9V@kX*-rudwg_C5ڊ 쭹sFt7 Q1[8z Rb2aqhQiWwM6X\l)@!??Ä6$fõ1HD]]8qF %q3gV?%NOڷ^~6;P 5X?^Zeq% 2.Z5BJ˸h5,.(!\g?uSOcJͺht %$8 vđɃ -uP H` uAT\s$'XAbsl>`!e8`s,2-.Ӄ5_΄$#SE9+ ^⪻opَ$~yEMY5mM~#~ϋ7g.GkwWU55.KFim(Q'Gv Q%鄿9O.;_U]id`P QYSG(a\U ҲF%l7X ;udDIL' JG2 ZLT BʰUw'pѼ?\H)Ŋ=) յ8P_ݸ0>}5P̶Of6dHz( lF[dO\(pģeeeN#l>ՑVO=>}iٞ?;G,)@0.SL[=,%e IDATU gSFD'|2 3b8| (%\'uUyּ+Xk69^m_=o`_uqY uJ<^FI(f7;HťEqq1rڨ_|O^^x$U@ŋ5B?'tqWq.%!F?tǎXsBӈIP' ,..u>g=28}r-IiTH[v՚{`H-//_fg+2!c~ô[T/L4,cp.l.N(锚6P>OMb\VGLJT њuQ[RpuB-룶NIUmbb|h|p+;M7ɜ|!RXBpJ KC#9 ;ß [Ljqe|_)y_sDB4Yl1cMBFlqF,&c>!h1w<p/Yϸ4V#W5XuQ=/6uѸrgGx\;Y# .ѥ1:gvߒ6f E몄U{` ׵{~B:]j.=RrL.dY2Fe.|T*˗?m}b}iŊ+~Wֶ3XrWR} |wǹP_`م>E lO~}ia\*_ 5}_PW '~mxtޖY8*@'\qG)6,iM3B\(Je[ZDmA+ @)x;qu^dn˕VvL˃MeB*Fp{;TG/-dӴ/V,*{p"1RT$.… })©R(E0)r{ZS?{|#B_Hq~]J$Rql\_PPhRE ޵V/@Y裱lMr h4 {wK*/TLP"11c4XhGoYpݻOxʤN|iO޼yDalյӜ[㨰 ^ܳ7dӾtGWt/q(Eȕ~ն}s7ܵr}Mq))u'wm`צ)˞d(P%vYڟ; i_*;ϽwE6)_6BV=ƽ'˭yo[py#TYAaGrʞ/dP*Ң I ;ng}ز/ޒ:\?HG剸"̥|cW7|EO*!y+ {OH%OȈyP]R)p!-JtEL !R.Ci_r R=!%g&(_(By\J?^>b y霿gQ}`0ۅHdƩigj=ۇcND"%\n .Ob6}gCWU{~as('}m읋|󩳿?okX:\)X7;]S|bgﺱ2|/m F/&X@$ 8m\J_*'/qyָ!6##.3!֤q6:ҼBI_ɾR(.wc[ڢe>\mJ1RQz R% 9on[ }ia&=`4d֤/Yxl I1Nd]wB*Ph" =.F競$ӚRqF\fz\F.B|/$#r0qbi_ <.mJ].Ӟ.)*9Fe-\NcR:R5:ڟN{+]?Ri_*_}m+.+ZKΧ_kUMu{\|~3ݺPyެ_iV@'>~ezT,@(Ih5qg;~r&9~/k^J6m/~w| 0&@wJ=csS %%xKSZ-ur[lRHо+='11FBE'T[ʯHtIzBI%x\+K {R@mGV"/Ff ;}_4V 9\ŜK.M\.}׶|x"$=ΥREBٔ$=NR&=J—&>`R)OV9a,'{yȞ#K0%$}KI Er\^&E۾r!Jzy:Ξ8FОy ]ȾP~ ]s;ss#\ g^o۞c쏝;뮹- ?_sסE>^b4ԆD9yzy6gǂ}Q]:E>覑I]8&vzgV AZݲߢ@‹Fl+Bϥ% 0sjj!Hj5UdCBL[.XI TyB@c{:dO(+wr.X<}ou{گx.eȦ ?;qCVl̹PtgE{m+a%B8x6BԆ֤}fz_aƕ XdKS~ܦ8 Xp9h-\Z 5F#P$wsIO0:ʢ)SE|.tbJ,KyRHiSP'ji|kCҦ8Kڭmdb|sOӔoHL  80,sqp,#-_,cV[[G(A~ҴhUA]嶶#YpeSe{~{Q<# S z D2I% $? BYCmoB|KiS#wxuKINq*bA+s G& ,(\}Hy'CIWRБZC0@eM۞.߱?*lSPd5!v 2\Q[:|d¥p+e|%Ũ-Br*̪|!mJҾ.1.]k}!JP't## *ɊkpTNybL ZZZ$Q})U8R$;S)qNRHҾƶ^tGLօ&9%=͹8rΟG)HV1,kq`4XǑXsڵ}]j+(ŔhmΝM۶ݱ斾[_p=+nX?:Q\gz1E!qЋ7u dI1JBZ4w?W::LaX< gkL0Hl@j#V hTB*h MOotE==a"c 0BTxТ'yt nȴlT^BwJ)J٬~!AB*-K0ԕ}RK.d$@S|r,% pqRgPlS2^bS-!TN>_(lp.B_*BH /ճ[0b;׵74PЖ"/HWd|CӋ[*gWi#u`0 8|0,Zx߸jl=«ym+n~455w^`yk^\>&R:qF.q(E *"T״ِtmc$d |,usTMpxUP.6#jBCBvΥ aB"Iia.x\*?􄮳 %$ ZR{%Մ--:飫s,  @dFq_iraҞrO%w.rR/A6. Y?P%ø=t2i4/>)p/>`Ds-;金R2B9_h,RwsI0)RE+-J/$آaDXM[ʏ80sD'w,IՊKy[kJHσI@Yw#7)*9Fe-\ qd $mM3w=;سLhg۶dwoʚ}mݽ|C8X^ۊqvkš^Ng*7Hjǎw|\!x쟺cAԮ;pNre4b}~!XJe3Os?iŋ-Z[՞t\ϬRtU5yY˽Qon۫Q )~)`шE ںu;!H!%iY)kgВַ~x/MIí?ckM)!|. Ff?|`ڵr&%(HTh".e"+mJ.-}AJ0JyܦdѢE4S\^[דwh".MȾYBZRuaQ v=`qŦ Ҧ['/Z( u=Mz״paâObT`O#ysmb=.mߡZn>G>;[D_a .YFz:0,  vFZq缭qXRH!ϙ}|„ G W'm~ag;vMu > >js)O,`Нϼm~o=6cL+;Z݇U S ;~Sn˚~}_>yzpݽ>}du\Ο24~z+~sgWL ?ϯog6ndw>ΓGT6\p2;zۯMiP[?<䌑_} /m=?_'߾$'O>ed ֞fscyi_T/| }ԅ?vHzq>pG&HxmҶM坏\}<+ߖOoh +\.,X/K2{^\/sN{G*l?|/O1-?׿隐uڨgQ<}tͨx[bޣoy[oi#M|h߶jhsIm2iX'<(sMNY5}t5 ZOY9jHK7N.W =L{1 f_1ӧO?sgΜyWx3gΜ3g㫫mF:ߊ!R9=mVD6Ln6 9]DN /Slb>J!@ք>+'5ӺiGnj}B=f."@1P:zzxۃb}7g: =.uک>+BC]b` 6͕!LuOSqK %|1eD0"V߬z^u(nO)_Xgbs{sWo7-E Bpǥ Xd³ Ft]؈N`-mʥ 9aX=)j}_Ǒ-! [.K1XR!H|amEMnI\HX)Uq|_2}tTbL1rBY$w5 yF4;-Ӣ9%懺'y+km%İJ`Y2y1Ɓ@ȎSΜs;Ts^vct NlOG}fM\*,}Gy֤_d Y`9?@ ؟b! R\~ϫm8w2lcH€r>wSm~Kk,aU9Timn"J`LYAawB"{NC$aٹ\ q`'ˆ AXL:hðzЦd_kzu6%m=B/s,1l%-R X$r.dI>qX*dam-B*.~rm Y^"{ZE6W&=nQ M]'#F! RzY+dȚME`P4lERヹ%B"J'M}+;"flu\vȔ+~\]xWXR'UmOn\)2 q/!aqF5P7HL.d1,kq`4Xt<Moj'g'}W-FÉغKo_FNӿzg"vI-#Vlh8,rCKxW/x;֜}òڵu^pF8{V8owgy;[O"_Ӳu6yT/|uH"=Řb@(ә Ւ ۔L1J"#V`Iק׆i#751 Oȴ/\z\m… }P5=sLF@İJ`Y2n jL.+ޖR*r灤H]F*l yk#v2.$ \-KeSl3o~}gKC33v!FLM~&h!6՚<.jk"d+=n@FI_\-ҖSX]JHҒRE#FmKmrkGs)F4ųqd_4 cF/e+l/vܩ#2G֧uva=\][*(IT[d]mSR /_*Gy!V(xGW%EȡBw_Ѷ-_4s@.ش2`cShϼn # WI484eerkPc/O /"U&I׷?ؔ{椡C¶달_F)_$<>:|3fMdU5eF'u6cj>6m8 5]m.y'Zֈ5eD֑uJ#DH(~q{{G[ۀ@_~'ivhU%\MۉC+b.B|`6%EM/U&fB`0K9 E޹rٳgO ^}}w 7KHpnٰo[,ڝ3Z`olHxF^TuȪRb7$V[J'=a:w%OX.m#FbqWǑ'Hx¡\0IWP:W֫6h*l֚b$՞/ĺs#]"X)baX܍8t~A0m33ͲxKYX˜|Z(py9B^x{s+9gqu!A{ScLj'MOZv`OȔ';V;7'@;Xt#3 ]3qdaW=PC R.U]M+,e̫SGU#Ab0(U8 0 .Zh h4X]bj fϞ#a`/M5A*F@ ))v}OH ;-Wti%~G:hwz.TN!!m mglB(>.lQeg@P"6.U+kokBP]}6%i.FF1B*ƹ,Ui ]>ʦءۻSrqdQ5!kĺO1*Lfsa|Sġ]զE즸W']A :K:% lK@0/䵳1Bë:cTKʫ 0Z!\l=+:$d}A3FHi_l׮x\:tB`0;1v!ʕ+7w RJ=I "a$<^`"[ BJٌ(/DKv]_83#㢡'#TϺRv/m2Ȣ; 0_ KFo#"6x@E};R>ι]\4i#91m'\2ܺ gcc\aL Zy; uQq3 FjWOBE].)FF+۬2ȒȽ v,96h۱`e?r|3BFe.J]۷D$=TSnqE0B \.+ QUiN R3#$†a0HfgT&oCPg0!UPܚܚ-OemmNxBs0BPu") 5: wnQ`˙G&qbhT:L#{Jdl(B6%ŲS|v!F)?SjvlFҞ 2)>zʰ6-:6DPZd;YФ}))Ƅ ves2kr2R)H\/vye ׶UaE4̅t1Ů/-Q&!P4%aFe.J]c͘?Mbha8A|&H) !ʹɂdB f$H !T~#چm#UA5٢ӎU!F=C'T4bC ӼP`.eO >MHUd {f݋ip 6n=ŒF JB;6x&8V8羖_7Kq)ߎMI&iA 8SZ2饳ifNdYj2`dks2@;w8I{"gR[R~'8>)n0Sx#wb0 w''Wd+W_ $ $Ac ٤*Nk= P|C2BR!tfT T&yʱHn+n/tTYcK#8$6l'\Ϧ6dњ*.հJǗ`S|~=c+=#@MIٹyjT!Bs!tF0BH)e3rӮ>9HĴF}_Y,_qPX! 6dʏ|Iå*1qǶ{{N?>WHGcmmc"-F)1C"7~DQfڀ>nAEHҗgYp1#EDcd4(w t`4Xn ^0_ְt!>-a|! ^lo\{n'ܼ-Ov!?,%7);\pe|}q]y9?}¡.3irt a:h] 7:=wuұҺ\գw7t^QBM1=VER%Bti~ÈN tsW*L*q~~[ן1\1sPB :sU .GhzR#)jh_ְnOm!nڴ̳;WxȪI*z{*,ck3vȮd']CMBم|#mE8xR]D~]O.PwaJ [m;g5.cpӧ,u'ޠL TOCoZuO3r0"1$-ڞv!%/ƨHNKN33 P!# xy}l°CGbX<-%] \(F3[䌑CW71BvZؓU(蒸ٳ聉# vaO:ݸaZ.cTLIc,P[hmBXxO\ YW#TBoX.өh@cg +f b]5b\`_]O*mVN|!B\>rF\VL"jDF0 )NbtMKs-B`}GsRPaȢmy fƗSFT~xp=4kvNj<*Pe,,Enެe-\ 8(]X9W-Um.@h*4BZ W,ne~!lI z`lA[Uݟ=*>-|ᴑU\}6<|oI!# Ν4?E#gݤx3ܰ Pa$Nm .^Evc3@( * )#ZD^ I`we@p8`=)+XYP%XXP"=G(HV1,kq`4XđWP|h# xA1vdD(3z[E@a[xB}{.[s\~Eױ; HsP`0 G  յw[.!n{)LHcyFsz"bz! ؅Zϳh/[r`)E՟bY|+[rZ 88Z?#@cefϞ]:BGV+Lq1V>|tOnzܰ,RP>/j6EK(ic\FɁIBF@İJ`Y2By޼y͋F17.B C_ɹ{{9U̞d5K3B.B*b滑, YhŁ`c!y0ћ'qG~G>'Px{n"x-yĢP>rQiht䔂Q2q`4XhG~7#v b^yUNV=S:ĺ~]Oim \|LG6 CcEMWCwfziO5h,Ty'%|?)**(Ql}OCCCId'?If+,v0d2yHKOJnoc!|({ɧ}P;k~{88}`~G=<0Gb%g}gF޶v g-~YK? jW=n19W[tG.~/ '577V}+DK}s.5)a<-Y}>0EK`Y cKWYшsbnnm9]yO2f_+=drI˛k'OQ߭F7gKnv= 7{мj'>v2nw5#`‰j/[dUSsN=ef`cVفС,kq?7/|#O^󥣢A|˿woђc4X# 6Zfqc=X̪ 7L2L^ƩgϾj64I%Ya^`$˖>`jȽ}οejݗ`|\;4DK6]Od_W^  w3/oc`0AoEs `(O YhŁ`2Fe.Jo5qdàd+v^ û/4 `0Pce-\ 80,sq`4Xđđ ALL{1 f`0 `B`0 f[Aۇ `0 Rva -n%qFgqFђ8hę8`0 ؅`0 #wb۔5F}]btWݕ5&l0 `_]h0 `0v`0 Ac `0`0 1v`0 ؅`0  `0 % ׮][pl0 `( Jf>#DÏjo)UO=G{1Cb_4wT5BzelG{9C屯A+u{[gWfd)R^8xǪ&u%7\Jf|MGc3f7Tip=+nX?1?N__G{=Co`Όá_e?vJáe^W՟v8_Xdsp)](ӟ~`RRM;yqƠHĹ5G{=C 0g@K1 a?NfG{)C?ڻ맅^PI%;2m*C1sJ= `.׬YSSSf͚kT$}RHe;6cZ#-t꼹: EW??^?9+1:[^>׆>[+M(zß~1#Oh{26ˑ~0\Jfo/[o/o捥`([a^x^xp Bk?rWd84&,뮄ߴxWPd9=m[s?ƪ7@ ;XC+#G{=CX ՏchKeG]G{E⡔AeM5==ݾh/P4xS>z~4!ØpIENDB`DataLab-1.0.2/doc/images/shots/s_roi.png000066400000000000000000000146471511411446000200060ustar00rootroot00000000000000PNG  IHDR7 pHYs+YIDATx}P+! $~ll $DIo"wkSM̙Ъ\sNTaRC5G4+ɸ]Ξ:(#ze%$@>Vϛ{=7'xbH;nbȊy<*T$zȁz6@bs$6@bs?At0~γg}$0ꓵžlZ=ƍtC\:[X5X.- feAy9_qAx%%nk:&W[ˮ_lӯ]Xpn~-VTFsJEh믿77ٜ^ RO:euBQxpG)eU?ě}GE~'vɓ`5ZðM6/RV"h```wtԉb#R&ӡomcdwfq]ssY"Y\5V]tr- W.fI,$zeͭR"+WENFRl\.\e2fŏJ`ֶ1Iy<{[[ uZ.>iZ[KP_>a+v>ōǴBt˸!{Zꫯ>/Z]dnl0?U"̢|o Dcq(݅'k@ quX,.>v9"Ȍ"o6;w,//ollſo|oV-LGGL.uUryHG Vxq2V͛>*( wҹ9j=w˙Qw͛Uzťut\,wo[e%w:}e\K)kbYi4?Xxg y_y<5Ew}Y[*-l~ͤkĝV-^^T[ܒPk=^Y)nVJb&W8V^,Kc2L y<5}iDB}89Ϟ:_+(XXَb߱YӇs˷i-a䘘`o//Rml*[S+GqDz7#,bg6ʖШ52iŌibXAnIEČ!!!!b-&L( Bv`}IG25~6.UTx$ɠ¤,>MD8X^hՒ)CW;]60͊F%f b &}<h0TLUKv¤l-%] پ:|e]-|X1QohF$nPGS4`jAIuPє=:'L.S3y\ghS`) 8aBZ#颍3hR%[B\U Lݦ6Ұc6I:#21$ZH @&W@I!#*<) r1[3Ye #1Eu“Ѯ-U2Q;UľYYo3,‰y.h0d@ZOH$R88ˏdBud| -=$9žh98.[ϲI\0Jp`:}|wRM۳O[112MBߥHj-L,+OXUաr@P$Fn7h0[\ϟkT{F 4n$.hȈ[RZ!Lz|?jAnI釴8CS 4ܗKպ1ȌsdƹC 9C 9C>{tt4#e֭=&ĺ8@bs$6@bs$6@bs$6X^llj KTZZH1x<1P.*.z7ofN]|v) 2eBfmYצ'쥬s+إ44ڑ4PVػ9wznc<ݗd]ѽcnǏH'bGo7'q5>3f|,¬d{挌Ӑa$:/t -0+XbA~^ 'e?<1Wŷn _";77ժEnX;?,>Z1B{Gw՚LtFfϙDL)yydĆ;'h&W[EmLZϋn `%ʮm\6`v6DvvMtQQswo\8x0zԶΉŚ/Vlܽ3e&h4 s޹I4 cA,O /H@_kpݺ! w7k2&`,K,*6°db?m7^u nKGhBu8^V -bmYg7^41^#ٟk퇶3Ó10QghWFY.6M`E |~ċ-2G>C 9C 9C 9C%9h.GAfC 9C 9C 9qn*DZ`&Iի=䓬y<ĄH$:|pXMXDBpΝJY?~ӦMob5a{ƍvvMRdxxxpppyyy+((X"VBǥïlDW\pBMMPaaa5FC&{ff>n޼9??ff&HK,i0dT2&ޭW~~~MMMVV힛vaEZN%ct*Zgfggٳ3pI*&%L{8bۂRIg?|޽{}}}rESx|> 2 jP]`Щ]c8b0tj0Zaev),=v{<~}4MK$EEESSS"hvvv``T1'KL\tBjJ9k!Xq\TC;w,J( UʥpP I'23t#0lǎEضmSO=D\UuMŤB݆3i)XA{е$H-鹹9h0gee1>9dNn뙏R nR))~  ]@ p\)NW5T T59}DR$$XZ|>w} -=N45KK1 x[VC$A곥޵o.b%ěl߹scrr믿Na@p?1ʰ|+i/ זxbR%/lfS |>8X"8:w*_^ P(]c Kws$ Lws]IxSS>9k" `ShsW'ջG (KISS1@3T,b偣G=99!!g742ɿ[f $\ݢ?`/; Pxl1Pܮa.Qz|`<zTA*!!yr]!w)@ޥbKыdK C]Kw588xP2.?M&[oeBJu!?hc.HQx,kn_}*b ,b3ޥgjuȻ4++GwL$ڴ?km9'\.I۩.eZ[݋Dt7WL.fD O]&- !Ҭn,ή$Dc1k({q*KPxLr. =9Y ^B> w)M>зޭfΟ./Oܩt%85qgRֈ?ثx׫x~/k^Żԕ[iXxui6Zz.hx>̗peL1uߥ>*[@kr0ufh][h*-Zm[hw)e__?7kx[cى=䊽KK~+%]$bO?c<Q&5HL 'Gwڻ 9C 9C=<<<::+O0x`]!R>$ɫWb+㙘DNs "H(ܹSTzz'i:c5HAAEQDNtS6Wa.v<>l~J'L]`h.:3G$7p\6;s&Lv zHrEx^'$idG}]NN81[tM8T<׏@ض4:uQg2隖h-+B|ǟeܒ|>좓NsÆ ";;{iTݒT+-$]T-[۷/m6"-b%H$b}Gdw."HlHlHlb$oatt$G 'h7o$Eg?sim"b`ђ|l<(y<|:KW3gμ)d7NQTQQLOO߸qq: O?4ӕ^/۸qc2Յ=U$GrJjz1=7n8^XX87nܠ( x<B&W+̙3fYz^;== &-1ﭣΣi'L|L *2t=)ii7:Æ"Z|qɏ^q{밧qd+pn!e*&}ީ 8&}%BiBo'42vڀ9E'?/#v~~P(  srrV0uM*ʐla_%PCS\N E*+o*+2 S]a-;Y!4MG槟~:2Aɩ )x\uD~*X"FȪ=,$=#aUO )) 4=88844422BۻwoiiiiiiYY#IrdddhhhppvV\U-1!ў?crtORR(UX{v0 099sϤLYYѩۍakh S\VfA N-$@ u89GGG5K/!bRV @[/Hl Zd LDʠ!`bbbX pW3mn@IENDB`DataLab-1.0.2/doc/images/shots/s_roi_dialog.png000066400000000000000000000542171511411446000213220ustar00rootroot00000000000000PNG  IHDRK pHYs+ IDATxt%fga` wv e`H6#ř<8%1'HqrY{,kˆqZ{'+τOp LjHZn2GZY&lp?U[TT]~~fffrC G@" $` @" $` 3LwwZhQ𧓢388yOKr9m… PHI #R"ex4UǓ)fuEe]O=h ͶUf:^zGYR1'o E< dMzTN̙2)7AT&`X@ OMM .BDLDH^#+RUǓ)fuERtdJl6!NW,PPmyAMDpAdp :81̂ Z,xV V'Bz,XСp}TA,h!̀ p$!hy)cB5kzzZlАLˍO$ W}ɡmȺ ^ 7vK;]foOY2%xt(pτ  ,h#1HUU Z)V*BHYUES :P jP  H 0+sA+Rd //Bz,XС>4H62N( r PXJE*/Bz,XС*hT*h XGbY9V ,h"c^TA!NW,PP $w?`A'XGbY9V ,h"c^TA!NW,P@4A4`,h#1HTA+Rd /+Kt(pτ  ; :C>G$~CɆ ) ho4'6BB FSSS- tRt7o\i .B:OR"#e3&\'1R":Fn%EXlꧯ7{=긎cP 3YX$,u:V :RVE4{eAptB p$ c Zy03T7Ux14-XU*hT,_GTAf81@R`A+!N& q꽲t`ALXtB p$ c*hV*BLaA'̀ T1HTA+Rd /+Kt(pτ 9U8eP\-ZWy";m\BD{O5, w ohhhhhײgr"h^5444w{Gj\X9V ,h"c^TA!NW/'"=}rf"%l㭋{$h">:7o.BD .d"B"YrE:H0+#Vjkk .*2|DS㞀:ōK,eYK{(cxTP q$L LSUp{b<^?J;/̲]C;W 9mk`EXSSSR>kH)T2==]݇n V'b_!%2R|ׄ+bd5K]X]QY'@[٬Ap彙f 1^t$f"Zq_ߝoW$K'yu‹*h"ĩD0 qXA`.h#1H,he"eT8x‹+Kt(p4,谁P`AAf Z,h"c^TA!NW,P@4A4XGbY9V* Zq2XUES :8g‚ހ6 ,h#1HTA+T8x‹*h"ĩҁ 5U H 8CvSSSDŽ#<k6Q!%ëКܐu z9X#Fqhӵl6^>/SȽ7xt(pτ  :l`A'X*G(B# jTA+ARTG*/Bz,XС*h+UЀ r 0RXJE* q꽲t`ALX#tB p$ c*h"'UxQ_8^Y:CU &UРJ`AAf Z,h"c^TA!NW,PP xtN( r PTRd /+Kt( Xж T ,h#1HTA+T8x‹*h"ĩҁ 3aAX !h#}ʎdCI4yCI{js7nOlgb0ZhQ𧓢388yO3}6^pa V ՉTo '5!fd55^F`VPfڪ~{3y/fc踎cuSMpc,h[P  ERW*h"V*BHYUES :8g‚ ,h#1HTRd //Bz,XС*h`Aۂ*hP%H,TM' c*h"'UxQ_8^Y:CC}&,ġ"԰#tB p$ c*h"'UxQ_8^Y:1HR&Ζ#e"n%"$)2dj"):n%?+1`>"ĩ҉AA 4q' c*h"'UxQ_8^Y:Ie$Ue8e@tBA4H,`&!hy)cB5kzzZllUl!%ëКܰ wA/;+ D%pf෧y9NX\u :0'%l\msAf8\Ո^ Zq#e^TA!NWN 0MG68sEt7z<ϘCq꽲tb1\JE`A+!N&b.h"ĩ҉Af`.h"'Ux14{e # c*h"'UxQ_8^Y:1HTA+^"\,x‹*h"ĩ҉AG 0+UJE`A{=U$UxQ_8^Y:1HTA+ARd /+K' H1HTA+T8x‹*h"ĩ҉Af Z,h"c^TA!NWN!{OQ}6.)Mkw hQ'G{iоKhwߝo#VV*BL$~CtɆRIm :FT^H81JLDzsКה=bׯ3LwwYCࠟOaQEtuis Hu"@+X02b#Ba/Lk˼V dY?{sNjP|iY=ZUsw) ~9tP&{y@1H,he"`^VƈApU:|L*:$ c*h;Xoƪ1|L& q꽲tNbvv-r=&4;]ɧ㲑˙anC^6 ^p :RKD7oTը*m,\=hhkkhH /I{s 3,^tCAJ^p\|Jigծ;2`=@ZUv ưxc^TA!NWN 05TA*J7Y5O) q꽲tb1H^t7usW /+ߌUcx‹*h"ĩ҉Af$r.h>.,h"c^_8^Y:%;Z}s4` X]ܛ11r x S*EtX!ZbtS 2V*BL՛*{|Hy A򹤼֑t64:0l e;=ʡΒul޼9xSyWݴp€7hkk x/ /)fXx!533hd2GՀH<}dK:t*}~/bԾwt=xR)]˜ ~:(Ž UJE`A+!N& q꽲tbY Zu^C_|#e^TA!NWN 0q`A+!N& q꽲tbY91|HNLо, &0w0k- &F /fff(Q)OLD4qzКTd2;655%峆A?R)">tZ^X@+T\",Y*h}xcG,kDR^;Zj"#`sRLk˼~݃vdY?{;1^tfggp""xxWny4ŷި_zPr TA Zq2XUESS׬=yzNݲb%(8w좽],۵r\XU;*hKdI^) q꽲tweSbY9V* Zq2XUES1@RقvJ[ ZGZ 6VG`A@ 1HTA+TGXSY]bU IDAT!X{˰Xh1M>==-,/\=‹afWgY>kx=PC_ ѐ#.ؼyspը*m,\|8܃vmmm>]z{x!533hd2GՀH< 'ҹ?-MDT𝢏NqVI-NƜng %eg)YXݛ : :P-]D_ Zq2Xp+YUБ+K' U\U!:RVE4{e 21HTA+T8x‹*h"ĩ҉Af`.h=Ve囱j Ux14{e # c*h"'Ux14{e r "7r Z,h"Ļ7II1!NWN 0CqimA 0+UJE8XТL?f+BL<) Zb{aAG*WGr$ē" b2,TAG*Bz/,h@01@R\Y:4*h:|DYNUE( nz_0oƪ1L<) Zb{aAq% c*h"3O VG^X$ :rTA+!f&0R>"Ĭ‚J 8CvSSSDŽ#<k6qH8jCCJ0W5o! lIuJ ݒduxlSJx%ߐ@2zoBjffrd2ϏJylISy?OPQEl+^izã<>aU;F3ȍ>.Uս AjDZUJEPTՑJAJc,o%(@:b{ *ZKRf)t Zox#!fUYuH 0+sA+cAK|KlLToo悎ubY9 ZH #\U2+\Ju,hH! c*h"|,h /q2Xט q꽲tbY9Ierp;aA+^˄6T`A@ 1HTA+akA^dⱺQ_8^Y:1HTA+T8xkTA!NWN 0т "*Af Z6[ :W}*h"ĩ҉Af ZPl1ukA΃<}+K' hxZ@Af ZH4Fq2Xר/Bz,pFأ]ƢE\ MGx Nniay0`~Sβ oA«P@3u{p!7{aw… ތb-,J "WzXx!533hd2GՀH<}dK:Mɚ (ˑc\/XJ_f;<~up ڶP{6A2}T't ;=`vvXՑ*hYZ5VUЬ:1XUES̪h UJEXUAx"?ppo (B‹*h"*hO|j?1@RXJEH^*/B#cs.s'21E88k_`AP-0o$`VA⫠T`A`w+U-V'B#c*h",h)B|Km@4 @RAi. dbY9!k`XJEoU|:a^TA$Zе%T1Y0gp~fAē.\PRcՉ,h"Ks>, " c*h"^r ,h"*h04J1HL~8䚃aA+!X6 @pwG"qO;;<|F;GȄc*h"M]VUxQ_O zٮ]˞4ڿv Q"=ra Z+ ]ZT&! ] ڎ̌#/7NѬw=xSd2 @Ss3}y n=BFUITJy!Ӿݞ;MDTpp/ܘu9b#|+3/>yKly؞ B 6FGGqURtvէfGG \!{Uq =!cξ|AGAkإ16;<4&7Z#c^Zճ{dav 8_zp-)$飣wz j7=<dDӧW|,Z*!rd|"^TA+#BIv :O|W3DDTg߾Nwtt5LDͦ=r3a !&"$)2^&)"VՁ#늮*h;i>̨ܱdЎ=ͦ= ۙj "jɜ?%C+^@W LXΔND_k*Js$x<:xjɜ/ '#N:|H,>,hPC}o`AsAIgA3O 3-D}UuP(-xS9xѪ z.Y[{lU VWĪ1-YRgt,X$" +Vz^]Vc־ øOD) Vzo l"h7 oX#-I"|{G~$Λ><4tN>[>bSM JA1! G"l##ۇ#c10km > s&ZSHr݀zo D#_RQO?plnɜ/[".g5rOn!:7Nܓ[<ˉwlx9C/:j:xHDD^LדO߱ܟ>cD._\.;8cx;ѦocZ^|ZC殪1v,h0{*h;bOw/OR>\/wrz~⻃#D- 56[F[l!&#ujsQsn_WGDu \~ȓxLi~Ўkߛr7;Ca鏙8CDgOLQ]㑊_m ,he!݂R=%B#%s8x T13s'^!˯^m2mgZhD|H9Mޔ]-Sptt:SVљ6,h/D7ܨ "'\*n\ oeZF?˂k.rk6tcͰjY[܎ ~wsWᣀˇ+{bޭ Jc_9i;Ph٪}`Voq,hoA; ǰE_oh)xyg86-'Z;1hj^>B"Y«V4j80赟y`5Qzնŏ'C 5c>uxw06#-Oy(6c5ht1Bس1CDۇ#T' ] i*00׺|8"m_(/Y^m Ua:߮CXg##DtZs90.?{z\ U9[x\uʱܜpuESx|/1RD$6&xK&‘4FVxB{X8˺"):|Dhpp0 Uxc`AWs~{rDj1>-hXS?㑲åt`VW*h=bE:R%тA,?X `oz$x=1Ě$`Ũny%i+R<]aVWtWA G.TA%C.CLQ[[koC}vʕ+KI'CpæMb6Z]֥RkoZ^lg*+(vy-ά˂nәlիb.{D_kJp &tn_8i)ft0wf&Oww:-۩ͳU6hn>It;9M؆ dʙypd]ϽŃ>ZL ɧP.Ϝmo bbн3K;JA_^ydn4mI4unR2E hmҺGW~fxQ5V0_XL^7tE"ٹS`s<>>sۧmf&]5랉+ztx`.97>jG>i+0v]{F Zj;V>R#>)}r{qlGok'Tr1W4-/X[;~9󱊝+7w ܶ_Ȃ ;=f-ZݵoSDd>RIcg]9e99qV>i糍x|}OgZ^Ȓ~'zKM7۹|p!?[X1~ʓrk8ꈖ>8FW˚%u}i3F\1u!zaCX +f%s2zzy^g$eܽj 8N'" 69BD۞|O"&JDEՔmL$ zJy¦Gďz';I ʹYI (NR]W٤u&Rֵ8_Xh|hpxPO5ufIL^y_pNu;S#j;->@"{o)_EV9uT[^n4ܶxa}7XQ,VU[/EuPWΛ7"04/Ww5NZlSVp|g- YGe\+n-݅VT_jN; :&P`.he"aYE6D0.iqv*-c T*Vf( i͍rZָ T1Җ )u:R?%/z/pd/'*3VMk+w+ay:e+?X~Cˠôlg;e2g+D}Ҙ =Npٚ.^g@#moӼlg=VyDLxsϳN6 c>%OLiu_3EzS\kss7_/ob.f;ZJWtj~lnJWLZ{CHZ|"_SM/)JM{2W&ЂɩW^z繢3kCORv-V`$o}2Ⱥu~xm2xKY㗰b#?&Ŋ- R^ʪoorDlDY>MDD=GJWX~uzŬo/ohՊ[-{] }' [nVlr;nvm- W*` 57wMvSVuVQCMYq: :ʂxgff (Hm%ZJ?Ҿ.ޤvfYyx{QeҘ1z?=|ٗrGG~k5myhNӑ“[Dtm:i1zarr8^\*Yqv]0>*k ױ,/ U^W)naP[OZ6ϲIv==8 åk{d8`KdQvo\*K?rq0i`Z:S333L{cccMMMgb,v_ ٵO_Dd+S FŝbOyu#+؉Û Is˃EJK,5A/:y Z.*0#YPzi ڋkt }אɾ;LUﳨVGaLQ0]y8Vbs)IDATp8{ғ<,*stHiL'ȴS~ThYKE1C[SGèmpSs׺eՓlhGj}]ف&Xi!R8ݰ ,nҎ h /w4YnLW_jV&U,hEhd"ToJyf tU4p5$!e-"VP22"؜E$~{pqdbF#qg1WvN>}=b˰Mvkt-|djHvTSc\{uYe묻"YHeO]Ht:h5}~xFFOPƬ *jHGf1q,ko8%xhpH%~'Q]&֨[.fʏk;Z{^կ$XHδsrLin Grb꫏٭c5趔z_z~pX ]X<d6X./c&5tjIqy^orn.˴z^?kUU.[\вtRYA`AGX0jH5,/mz}22S y9mҪT3*0;VAO<"VЖLy\c4UmmaRpl)Kh >6n+VOzkژ2e,-3n5$cM1ĿEon?zG-kJ_OwLko嶘;,h8cZ]<:]k#&+Q`AWՐ\&7CT̪n멅-"zrg1}8soFlo-);_;K~N;!qիW:0Gůec>{Yi{w|'?ɟ3m|zlM?GY[ړN_v=8Z,~֪+'aXN*ϴ}]sD,777']{G377'|z{ՐZ{1m^:}fy*jy|EiŅ_B" n1a+N>w僛_;qB,Ni1+I]2LMMؕ]6s魧{h{l7tUvdYw )yvmCj:g8a%#sWģq}v%x놫N:m mhޔX=-VCh[ܓհߖNєo(?Tia*:|zPM)~gV(z2oMy}λ{n|ޕAO枻N㰡]`MM կн)k ө 5bOyjkş57'B;&U|Fp2b BP˜|v~GNmO ƒ+joИSY Z\Y^GD}ߪJSω`yzm L-,nT8}y O{?~V(mJ9(?Փ!;=$6{ v5ٰ .;jikk㠼h"9a}c?<ނ>O -hAC׷ VCa",u`*)/]V> N>UZ'ȴ;u KeZ(,q\cq#TM5 U)R^QuY:֡<*nY]ӭ/e'^^^򸊹GAmi8vV{RYi#|=$࢙&RάjJ$g3_f;S˻Gh=ՙSixJhw+jfmt-?0Jؘ-Jc-ϲ(94N~ {* |dItA;N~ IPbCw,^Ge_줴_ _a:ӏ-ʊ&ZK_6Ӌ-;eu\yuNVMt˴:}Sz~!HA\% yD}1>*[ )]E&6+!we*X`1ixu-MڭDDk 9цP1T#K};e]v1YnZzX򲪂E}Kdґ> oUUDZ  -fsEFZr(Yf/ V&H&'Hぉ8@Q=M{Pqȸb&tR7hIFsXp'q a4LDf8$%]=7|7lS {r$0DC115_.%5zDx΀_WGiA*0$Uw8{A|UD/Ģ1ɻ"4FH"*h y   ` «DX)R^@" | DF@  D0H@`9B/|}펽'm;Q}6.AxeS(",oJD{I / QDD4ڿv 5;Gқv k&[Gx2zZē_9|hAZ[_FxRh^X.,ٸo_O]LD䃭ou1%;hzBxS7nYK})+&E˒[߼u+.AxqΎk D80 }ݔW'vtttt<\m^X rFN[BQ$,ٸoh#w|oKԍIp*wuяFU4QSSSp:`A D0H@^Mm'0`|矧97w U+`Ӧy=Qq|w]]]]]Q@ 3$̟_px;Dto|[?SW*شzNV/56GKx, 9(K{RR"E~M~{dg/ZWS?~}"۟x7|#u+9ߦiA=wU΂?YwWS>w ?zZYǎmGKlq=M.9au%nӁ`N,Xʆuݺ)z:ZR vZxx]Njڿ+cc?mL'>R~R>{]o={t099g=߽&a@=EV-LN>ٯ{N464Fm>킩/TH@iAwv&y{i旅ԁ??~?gh>>Wx,#ZXYu|ݴ< -ãD''uuw֧&8%~Bϐ~O[ o7;DPٻ 嬟?vd|X''':~XV#DdcIouݑcGƷnpJlUl -tny{&O4.uRb*w~wybW;4_ݴ~ni# О֭%jܺhi%ٴNs6DȭOMCR3\-۾g{N2qJ78TOD:)| q&533^zu9uF-? t9膤cccX_/Ńt-[0s|wŪ&_W@ a$`J~}ˇx"LN|?H@HƂAX@  D0H@  D0H@  D0H@  D0Q7Q7A3͖_z饐[G]AMMMQ7A>ccc^CFL 2%& D0H@MCy*$`H8J>]WWxtu lZwҽ*xܳ>#`Sdh200${m?9CG_|H{8> Y_1t _m$λ z. %!xGu{oM@Dt侸f_#[덻*'"=AW)`SygAq#1\m=|$)jޙ?i]x<5ta8r~\8/g--W 0Rkz\sHJD}d۞Y%ʯO4zj)}A>9WH`wPoY={]/5DOj9kfff{66rI] r@" a#0 *h 0H@  D0H@  D0H@ I$IENDB`DataLab-1.0.2/doc/images/shots/s_roi_editor.png000066400000000000000000001055031511411446000213440ustar00rootroot00000000000000PNG  IHDR X' pHYs+ IDATx{|t|%'RC` ;eK]J - ,$%P%6+ ,exim.e$$؉\ȶ3?ƞ(uϻogtsy a(4`d$XY @Ae`d$XY @Ae`d$XY @Ae`d$XY ֌} Y?t!IRoot8O`=ztxx8sI$It YHzp8 WTTTRRr>#Ytww{!+vCCC}}c=~ظhѢg}Vs,mmm yR:_3yD"^wS05l4ch0cD(%EK+z9ɟɟ'Y|g=u+SWq/XQE_x2Ŵkg盿I0"YYrE%$@۷o}Ez~ݺue ȂVd2b`0۽{g\{v}6n'O~r)?oLT]]]6mz_ey\vb4 P(o8&˲ڵ .Hԉ%姿ѿy5N;n/ΘĨHc)EbD4ECƲ2`4|>,NS*!b[iEs*}tK+*&zI˴T|O'S92o޼dۓ** o;>YvKҐF !6EY<DsZcd6,ˬY,ZD"###h4a'>}5dX|*W1!6iJ,+ToOկ>ռ:*|PIIY7tʒߴ~ig8묳21+1sy_h [s'禛>sſPo('9L&DK-D3VUUܹsտvcnjFDha2 WT'z)"q qF:98/IG_BF7nxP(4222<9=y%OEQKC"#Hߞwᰁ(r G3NNڿ ^~b0KڊX]m0b}}ph0w^G6," oG?wv8^y|뭷feyZ|nD"55;Mc7FXJK=O{_O+^μb(8H$v=zTo4,X`X8\.WM"_BDǏW7TRJ99EݙiZLejFt)]Ѯ],Y2L&-Re+W,--Mƪ*Y`E,?]YzJGc4 +łDD&S?l.)),//@`ddl6^oqq#GdY0:֖',+H:H! EbQ#X0cQS\n)H$ká+WL^D/EhѝwO f2h67dyf|VI"E1 .`ѕW^yر|pݺu .L`2&|7߬lnn)7Ym3 H$eY6%%H$KVË.Y줣W<EoW]qe]λťF ,) Q% ͞=[偁GΛ7l6 $L̔W zl) n+[˫_jϝ;wsΝ={vqqb)..e;v:thppyꩧ~{3 wޱcw߭?AeJ%P}oTVMQK@JEP0LA x֬Yv] s5@z{{ˣٳEJUO 5\ӳsN՚y.Q L%%ƷΞgFsj1+U7_=fE!ŠDJY٬^J`0L )x,&ӽbW_[_ESN):BTr~[ovp PTr(`э7߿nݺx }vڝw9h'x={e]4 ?Ϯzә[X֑@Z,JIIb #hh4Ry@^b!x [v=oq2GVL)ԿţѨfKn{ޢye8w̜ e"_'1ں~W" |ر_GΎ;}oܿ,;t]J̦KK^㾭j@O1iVJbFTl4 ѐaooCLHZRRR^^~`0 ~zG,UJO>dz駗/_ND;vؾ};%$IɟqtM|JȲ;MV > ,ދOl1ERgLvV=?#F2lCCv"3kk_xY FO1W_#?<鿺(vgyw~؀!h?csoհhQX0#! `Xjwu֭[nr.w޴iӃ>c>_W+** Ñ#GDPTT> F|Ř^E&Wep~_SYͿ~$7/!d 9(v5kVYYY8VGE}jj=z&aP(1e_I>i>X*XtDTr$XO=E>[Z2iDykFCEQ?~-ܒX*8S9LvED69ݟ}ib1:ȐN?Tyw?wVSJJJzꩯ}kk׮'>{{}rL }]]]uuui蓟󯾹7o~.?W!2XO{>|бo"Y1YR2! B!ЮGbP3XF*kEӗ> ;4X,a-_|V__8!"?2w^k+))?O=e9s~tU׬ Qʟ u,>O<|v%r,b!teeeG)//WߺjL4=yqqHyyy&l2)h Jþp4&+gX"JJBpdp{C}l˔#SFD"d###ÑHTLa`yv{oO`L&ɤRdِ8NH'<D`lm8W_}G7Am=تU~VWWwΝ;p00 Foa4?裾$c`k;ZA?oΛ;Ӭ  %/>|poo@lVp8l4/^r< V,>|T*5e[*rʉqȬzo;W^yW^yUWep >OV`pY{{#{kX3Ɣ`0X^^vѣGDJjFP(ᣖ7onnnV̞={֭D?ӟlZP=*WscǎLp8\TT@݀ɑeR:>o(0,r,&19Sgo0H$Nh$m6<}+V;B +4رc"=vw`( @`$ >dY9vXJuR7"M׾FV뉗>\N=U:Փ3l&X,o޼9}mkk+..^dE]DDoօ^jʜ{޷Ϟ={ݺups̹+$IR5kּyʖ;w۷/ኡ~}U~_xqpviX|Ҫ|s\6sS-}I^>h4VVV&3l~zI293cWbΓ#6xƥ;tGʛ2'?~~rgz48LDH$@ 0áO_w_I=oή=z^H$ BڳVFbvieQڳgWg}_VܳgOS.ϙ3GP򁁁  )>v+ _lopl7@sP,&LĢaK42Ԝ]t=/?EsψDGXLA9<44|>h?DD,"+e%C[,Trqqq(3WU W_"c#>;?tv>*X`J`=z?ݻ õ^{wǪU(\-Z(W:[neڵ=PiiizOl6m8y_zk֬y衇R쨴IDa9ݿxǺsFه{_U1]ՖDMc6dYeyE.++zfҲŋ[,X,ӣ>c4{JTZZzꩧD"Ç'ؤd4X,&ˤ"rMU}G}=W7NR8`0888Ν>a4ΝrFcNqM7رC]t֭ԧzzz-[vKCmqL&Y˃`sa$(d-o}Jp~yo<3WQH$2=;uׯzPn/.uey4e9F+D"H^a?eɩFH]$0OVCh4rUUViyv2 O,|>?,S64.ɃF~_>x{wǎ]t?٩I>H}}":K/F~?LD_7lؐ!*1[DVE6.RP6stنm~'jb\d2+>o``@}M\|ű VŜpoxh=ImD5n%m(ٓORg=|P[o _(].޽{ռv O?^pﯫ$/^|ȑd"$UEQdY]F)**裏Xvߜm6Wz,r9@ 0<<<44Ό<~&P(}v:00rʭ[^qǏÝ禾J]4W|֬YEEEVngef;e"%BAа_ b19 QcQEcl.*,pk培LV(ieYӐ_M7ݴdɒy8f/;|sy)v{8]CQ^;1̟/~5x1Y&"EQGGDLv/}KW\q]qO=/~oyi$X*tگUm1"zx~۶m555#GKEƭv 7߿W_fɬ`٬" F*._E/_mVZ8щh4၁O|WsUGNE",>=ZDt| Ld J*cE"ѿAEMLy8c— Ͽr9[o%s9"nP(dۋL&$I%%%˖-3-^744CCjj-mN$]P\NkXQp8,˲,ScA}]t>6-RZZ:<SKqՒΚeG%I>~x$QΙ3g>\"5uDaEވ!k$THL~Huѝ1!h?-3y>Voo`!?^&:|pIIɜ9s<ڴNg-"r>|ѱFHQXTTd/-_v{lܹũO%7CCCb7PeOTkjaḮbD믫S=D932twwjK濭u-*6L3f鱘|(ye{9VP(d{*9` YVYeV#nIXX IDATwج4}gaDp8sϹ TTT?:Bb``@el~(0́@`hhjl#GrJRXuܫܡodxX [,uвYlVbzN@uWt8p`Foh'yr116&kJ2]6Zbx)ĝ q4#&fz+++'z5ׯ_f͚)Kq4|MY`ZF&"(T&XIv@njB(Bfh-a!z "ZF&h  BA'ZKXf=zh-BRHr KPRZE׌%"YZp@(B-B\5R!@TV(h5#Dk a!(" E04A pMT5P, Z|=Z(B@E H" M"5\,.B KEk!_3BO0f=zh-BRHr KPRZE׌%"YZp@(B-B\3m Vk4W---̚\9ǓEZ·6R@iK{Cݞ:m"L|a#~c&E H" M"t`%Y3SjE:1'ZKE=A5%i3><E@Ek&X\*( -Bfh-a-B@E A̰F&h  BA9{Sv5;fCh Q(B-B\5R!@TV(h5#Dk a!("2(B-B\5R!@TV(h5#Dk a!("!S"-B\5R!@TV(h5#Dk a!("0$h  BA'ZKE=A!!=hiKZPhhiide"YІZB/BOk𥽡nOtQYm&sp>|ذ1Bor"Z C"F-B\5J@?f F5#Dk a!("!S"-B\5R!@TV(h5#Dk k¬B-BP8E2-B`!(H"5\,.B KEkk߲s2fB'ZKE=A֙I-M"d Z Ek&X\*( 5E׌%"YZ@@dZ"(BPEk&X\*( 5E׌%"YZ@@dZLAr KPRZfzQ0ChAPE rM g=*lv>>4QpjX*Z+Ԍ!_3BO0f=zI=}D;o7޵l؈ߘ 79Ɏ"ky6ݳjâ6Ec@IG!AE("IZM>pcR"r^c7}fI$1$`9]z6#=;^Yr.]~ɶ;vPpDdE1 ] v'LnKKs[2"Dk aDMCDTsc\$7?NtI AEXx>EAEhNםk]75יܹT5P,jF'ZKXf=z\*^k׊KIx)ؙzDTYY)ȼfZv5;  Bh5#Dk a5R!@TV-Bfh-M"d"Z|= @5R!@TV-Bfh-a!z &X\*( 5E׌%"Y o`qjX*Z+Ԍ!_3BO0f=z\,.B KEk"kFF¬Bke& KPRZfzQ0`qjX*Z+Ԍ!_3BO0f=z\,3  Biܾd+'ZKE=  枇n-Bfh-a!z &Xy˴%Xq{\An22kO;ֺS=L@eec|iopTmV['Zlh3!&088qBimm]zn7Ѵi(1Rڨw0Q{iC&$q8EQM} &?-B,5J@?fjD|=Z(B@qM "x Zf"kFF¬Bk d} \,.B KEk"kF"YKPRZfza5[&X\*( 5E׌%"YKPRZfzQ0`-\,.B KEk"kFF¬BkťBbhP3Z|=Z(B@qM  Bh5q>ݥ(B v&X\*( 5E׌%"Y o`qjX*Z+Ԍ!_3BO0f=z\,.B KEk"kFF¬BkpMT5P,jF'ZKE=  Bݾ)Gs=Z(B@qM  Bh5#Dk a7m VkKfC#Fڵk~FUU/ZqZw?HWcf1QhQj0sO"L|1Bor 'իW>o"̑RZfzQ0`qDBE׌%"Y o`qjX*Z+Ԍ!_3BO0f=z\,.B KEk"kF"Y o`qjX*Z+Ԍ!_3BO0f=z\,.B KEk"kFF¬BkSs>@\,.B KEk"kFF¬BkťBbhP3Z|=Z(B@qM  Bh5#Dk a5R!@TV-Bfh-a!z &Xy KPx9"9h-a!z &X\*( 5E׌%"Y o`qjX*Z+Ԍ!_3BO0f=zxۈyk侍w-?QpjX*Z+Ԍ!_3BO0f=zI'X;o~۸q_{6ݳZ'' @otBXbO}m~3۷]|)sE5=R!@TV-Bfh-I4ɫi_|Ŵw;f^ z6jVy|/:]zMZ'@}Ul!_3~E)"fbqwIuMMDD$uwR}cRw{kNWSVHmT?MYh1M9k/(dniiγw‚n{ΌKC+uuMIԩt"o-Ծ B]/"{ьC0GfKsZ0'%E= @52@)rFœBO!z &X\*(aN'ZKS3-Bfׇ1qK6ҶmlC ,4ťBbi@Dz"tS:Qg*׍/yG#>B5R!@4Es"Tm)g[]Tc`,e%'%`zOl\Si Z|=;mu.[שl'EqQgUcۻ99KbBPp`qjX"9^jZͮlu .!3s=צI]mmmSέAmwK:y:'5D7m VkKfC#Fڵk~FUU; QcɖYug5K1.s&odB/>@7Ҕ u貸 jXwO#[k8SС7x#nnsj.VX'=59K""%MڽzR{F[w[[ r5L+VQMxdsdF4;azhձ|nrwtk\$I~r%jV=u%;ڻ뛚q6&!_3BC\h`esF= I11+V"M~Z92XHCWܿ%Bq'!_3B/U$Oޡ.lOD6I.mkpS4쮆 V;RW"ݒj/l'_|-ei"{ь;AO"0Q0'KQ;س=3uwJ6\6%5vwIuғQ:KLwVzM4j%O{V,v5m^yYn5ب\:[w7:2t555319AZsdFTV-Bf^*ZwG#NqD$ݭmΎnrrwOTN"p-Bk,crwv Qjop-±]w=,.B KEk"kFe:Nlwx曙D`-Bf @5R!@TV-Bfh-a-B@qMT5P,jF'ZKE h5#>@ Z򘽸vnc ((VT5P,jF9{,.EZI9]I/7ZK;'lp Z|5R!@TV-Bf^ZI+@O",sjE׌C3cb;S$O$].:WW)TNZ.VXGC4aojG\+X\*(fˬBr-I5,LHmm=\ cכkm/mNm}bm -Bf  Bh5#RҎ֯ k5n j 6:O:',R?Dž!_3Bk2B$.:)YzTv>\ ᦸu("̑RZfz)hm.V4Jct;66oQ&IH"kFq`qjX*Z+Ԍ!_3B/m\C$Gk2;!_3Bk o`qjX*Z+Ԍ!_3BO!z &X\*( 5E׌%E= @!~A9 sKKtݥ`w$q)+Vz+++'z>t/=׬YyM{ьZR!@TV-Bfh-M]e;f޴%Xq{˰1za.B[MdF\Ll̨1 &sPZ[[W^mۓ~&B ^Ru&k0k&w)Rk'~cJoܷOr>ƙ㯃57' ${Si^ԵwL{&Rײwͼ~a|a( 5E׌Zph5#&X@4=] `%3)&ns&>dwڃP8iׯ_N{ь`qjp, ݽ#99^3-Bf o`qjp, ݽ#99^3-BfKPcTrRP`gz"(™iFqM  biV&v"lfzEq4#&X\*`wm֝v'ڌQG3Bkr҃kťBbhP3Z|=Z(B@qMT5P,jF'ZKE= @5R!@T6ќg"kFF¬BkťBbhPs&o<`gfzeQ>ͬC/+pM  Bh5s,0Pǘ{eKPK4~w50KlU70pfz)'X;ongglq/`ƑZ_%5}7n؍~|qpjX*Z+Ԍ!_3BOZZ0pz)$XMzc4-$"۷]|)sE5=R!@TV-Bfh-M"iVzE׌K6lGGst-97""jU-Flh06 , x>yr98 J qom 3jcr ItϪ =q;j..xR"7o_qOڣnOMkkիv{r a[ZZ=ߡ}-5ܯI/EJ~JDcyEH&W$yx\duabP C-BkťBbhP3Z|COi[0p9ZD|*( 5E1Q>C@Zq{ӵMu) d.$/MkspC?e}CC[hyr116&088qBimm]znO[専---,K9Q'D.EqG2ۧq+G3t ${j;u?YdOc蝰!'5^VĊoGu~dXG56 ,~eb|a( 5E1Q>C@Z +h1BV(g;3Z0'1k`qj-?қE"9'"`1hzh`o\}L\,.B KEkiK"Oc%9L/qmFgsE h5KPRZf9 0PǘcE!3  B͌Z0c 5}99ZD|*( 5E1Q>C-B(X0`qjX*Zk$^h5#Dk a5R!@TV-Bfh-a!z &Xy KPRZolLvfh-a!z &X\*( 5E8CF¬Bk@_T&X\*( 5@F¬BkťBbhP3Z|zٚm5}9 2k@Ak@v`qjX*Z+Ԍ!_3Ss}vQ0'+D&X\*( 5E׌%"Y޴%Xq{ӵM圱F27nŝ8$ZF|Ա16&088qBimm]znO[専---,pd9[(iP"1$y&zw9g S>*;]\ske"Otzΐ^W+b-Z[~'Sr8 if[/sdFTV-Bfh-ŵeW*E83= zdkH?L`%3S 5gx&Jz8^4I=fq'Q0'`qjX*Z+Ԍ!_3BO0f=z\,un65R!@TV5#Dk k¬BkťBbhP3Z|=ZZ0`N&X\*( 5yPwάagFF¬BkťBbhP3Z`NoBO0f=z\,@KkťBbhPs9Q=f"`w8z\,.B KEkXbwzQ0`$2@`qjX*Z+Ԍ!_3BO0f=z\,.B KEk6'FL6#Dk a5   Bh53 =.0D 3KPRZf #RN(B vcL`\^ \,.B KEky&n_],(E[w|keE835R!@T<`"ϛBO&m\Ƀ!_3Bk ?&3´%Xq{\An2YgkZw>|C/18Qhc70s98O>6 &J`2 uv}OdF3y&$cY)GݘZWXGer9qLj827hq8o8|>E@J.>,Tyepme $!l$*)6 ؼRT712I=6kץ>V.vHNՓ(msp 8=bzr1XW_\sg~?GGgy3^Q2sdS.ɬ."[,Zh lY2ŕ'%JŚl,BFқ/^x%EZj``fZR ًBD5D2,-Xr"dĥs\unFSSۉkB1j`!dY[5&?2,l"?z!u_'˒"W2F=Q ,HO2\I5FD5D2,-6gԮqWDϤxcs?zE%2?D5D2,-v!B}>B!Y zX^8 j`!dY[,W2k>y%dBD5D2,-dBl|_ !\C!$'@"ؾ;c.T *wb .XxpkR/PB@XJ,BH zXxpUp!BHf D[,!'@F, =\[CȀX ͛&+!Bb)4߅ $cCȀXo>omB8K"d-0j`\Kz.@ilOSMDD4=>H}xpU2BJNa3ϐE5Q2F=wwwwww?C=giYz큏m&8Q< 8Ky*YJFXB!$kQϴUwot.,/%"+۞љg1~:,Ov&oӓdxZu>eĔ<طo'SSSHfX(]ЙdֈvU-̰KJ-|NZ0)DhpMӯZ, ̨&`0h9k^Zv:of[jIC3s>Xx4vvk)Ť&+@'lTHR*SOgtW"y>X[ [Hg͚\H"5.]2 .>{ug|p3qeʭLJޘX6O GDI"`(Z@Na|"Vpu=~׬s۝Yu~1el hyh;񡚚"wQ ?DI"`O!4(%jAYRe/!\'YQ/qXyvw]pTujO7@*>%!JxpUA%U"bU'ٖ!\K!.0j`!dYj 6%$'k>[dvlAX"L$Qх!BH6uLzXF΍v$l4w&k`!dY[,Wɜ*,Bb)Mr֒bdNrwxpU2A`*QJCuD"W2F=Q=X`B0(B6s&D(we%m+\ۉ(ٸsk DtɖF=Q ,Q< 8Ky'Yτ0/AqpU!dy S2F=Q ,d*|/ \|3(Br|"VpE[lL*z QBTK!RbJNV2gjz.Dt=(U!< )PCinIu遄(BF 8KMۤEv:?ɉ;op͚b!D@ܮgNQ/AD5D2,-dE1k]5"V2o"d Ddk_tzXP`oOʃvox[@5*rChKg5qUp!B~V|KsC׳d[ IDATBr3D5D2Y04ŲޫX']!Ǹ %xxbV8&9)]OJܬz|UD!DHJKĿ`yEr6ާӅA͚gzL8 ibo+Xk֔y %j!a9ܠ ?Z&}Yo>NNMM%(g2Y\(HԔb1.]Or;q9җ vw=ݚ@]w:ŋ9({վ;a["4s^:aŚ/ bA1f.gǒ\s.9ЌmY8;KUU9%af>E~%QcS\ҁAדBr;.~Z`ck>xUkEH!B3eK'"_W1. LIN{x>yNFsT`@E4M:,`,< wSTzbL{+85_^㴒ήVU!$;(U^K2頳I@I,B1)VA#6p`/BzLN[aa6[ ƬNK ÅW-H.@b8}5',dO2u(iF>-RufzbnَѢ8yKjtDrBВ9!JUR[3%fذSd$+ZjZ+YB̉WW]fbj/BH s%JURɗv`Oy+I ,- EF*Nu ,O\5 ,7i !s?Ʀ$"G'J1\g`$$?zTH$prˌE!)Z=#oOg,}ؠ*䕬?ݕB֪BvU׆MNz"W2 ,2T~<˥.B%5%309LSO=7_}RBacZ ր(]9Nfw+Yfkl>=c!B-5\%sY' 9Y!B,IᎲi<'541iW4B`Kd*hN'כqrN.f,b"C`Rgc5+4S3'V3/6qR&DȐByH604[V+4;Iqԑ1,Y!B PPۋ!'ɢX~e8˔_QdQ ,dBgizNLg,^7s Q ,Q< 8Ky*%!BN2;\y3^LaۇUajd%X6!Y F=Q ,Q< 8Ky* !BH w|FrؒD{%ۂ,s/¸Hͯ"z$j`;-<.I2 [Ɣif ~f`ʐ0\J۷䩩)$3I|nxp`퀭kddaXti6 /J%S]xQ:()Dhb_x;F)$w۷mdc<`u\imm999VL;Vlc̓e PS7 <o\%#P\nzr{ML6Ĕlm5m,{c$| Aż+H @0ݫ- Ҍ/V5#Zϖˣn9CJlk %8S"Yr:t=IPW" aM*xAi>cD5D2pd&E>]/U+-G&"ԻՕ^MYtd%ML/g䀡JeE_3Q/fKE+:^`]Zj`!dC"bJFP\ief,p‰NLk\L2Y2LJN`^k!Q ,9c>qd*!Bq%I׳<_^A,B3H'P裏J qY1&P\0LR􈘸b6GC@T613n!Cݞfbc{Ṅb- D5\7&IU2BJNg< ?ZFpt-Y,>8QDfZf$[sd2A]r$-e2=bXrΛ=ҤKNaBPdzr.o Y&a62/Slhvړ}3,,O*Gu\ [JV2vb5]C1&X.tVq*!Bq%a)l^Jᦒg*XC llh~Mۻ%⵽x#RkW)L,9ݺODV,PoQu%JQr AV\ɲ*IpWL5bvD|ɗSuDYFT @L+OզfNϸua52\\NEOd !ٱV^!\U0!D(dt=b)y{J!Ef)&,ʮbH [K"瞰K0͌kT3F5&㏢X9-dŕ[,ٔEI{FFyw=NFgO"Di!5kry`-Sb]a`QkkkU07-VHN/$ 0?)Op (Y8INa~SXD)ldQ`X6#jP84m'4h>qA`30l``30lX6lҁ3_=P'<{h{K0lOSDD@ہXNRZ03mZ-'8pg{XWh;8>:.'.h;noJC/,ٿŝwPMM ǻ(B8ޘHEmv␷^kwWm'>jkҸ<`0: ,`30lX6 f`` ,`300ӧ1`3tnnpDzПE"&~,q:W  ' fVVc&;d~KWzc'Nd""kքn5{ ,"zZ[[{1dp挗" $U\;w.^:r-` XD422r??u\˔̼K<=Mw2#ɉpU%kya۶mի'''} 6l۶mժU FMMMOOO(e=8"﯍l7z{{^ouuu`$XD}>tГO>iӦ`e˖]6 mذ[nя~rm۶ 4yfffffNv-xCQZ8fnUVB!u?e_؟oyO? cLnnU^7g:;:  IED{ ZZZo˼ضm[ʕ+WZ5==k-]t˖-6mLZ'N/Yׯ7m]vW܉?ʬo'Q};;Kx܏F;*Kh8 dIyh%$`3P|t)gt5CTݺ_ų.\~z8 l2|2Mx`jjjw|$jk׮ə"YYYW̬'Nۛ7o޲e)ɛo{\D<'Oq2+[psg ClьWC.7HצJ>LaB:  }%4200B-9bѥ{ο}+_[["6*s?X+W\bEF'''sssX|`ظqK~Ea۶mϟ+V(..^v'N$Qä#U34=#;r&]䕙+{UyIrey>"fw ~chW1>Q4|WVvt}>PذwZr"uHͣDD0l "A}ucGe-u,JqFYz#eE{h|TY ͟o. T >_=듭4n_u|q H$rҥ k֬~vزe˩SV0<}}ݷjժO?MxòUVBG=4Օ_*}0O?w}zǡkZfLDutU޷z{մhٲe_W?nF|P΀P`08RfRKw: ~ ,*+ڸඊ`0ENXϟojj|;pCPcc?wX}o СҿS˖zܼkʕE^]84x %omeW>Xʕ][~<6//v--jzzϟd'{8F(|t/rGi诟  &''>dhmH:j*ZKDTXݑZ +[?Z\&l9U&ndF]hi9U9k+8LC,(Nd73ֶ;Gx}^/Z=}kԍ]v}|?n殻fHGuIɂiUo7==}3E._.*/iz:oѢ^^uMJX*, ] )77\P`610##bEZdRcǔ[~4<>a[tww?CN* 2> U34NQ^T 1ֶv4z!Q_h^%˿88j,LkQȖcn""ꫯݻT|8g`-_˓Ç9yn9?yf^^@9S?E~~k7x[oUTT$EX~{-s. :~LsgneH8sի|;v8|>k׮cǎ"ˊ+ R7l@Dr̙WgfvpR$́^nݭ#HFF3/^DH2/F"&g?{I";ͻoxg?YXW{Mr-C|@C[""JCW=D4{OBD}ާۚvW21{{BkmG]["`Σ>z̙M6=SSS+WL>ָ;nذ oڴIK_K!###D"S% BYYYHdҥPH. I4@ IDAT޼ys$Q0\zn~R!=#_PX(oU|l|a]TV!+}\xmt颢lþzjLUDR,} o2?%͛7ov_$YYY֕Ē%K,Yl-@ܹ?ݻ5WúrJ__rɺzWc6>J;H>t,n1ޓR knCBiWzҙ*:< ˟ru%[ '8zh z%Kܹ{]pVrtR}=U77!" VogS22`kBs(wY R3wL\?^QR[ ̙)P>^/j~411uVqwyI`\߯s[8}uhh`<Ӡ?y?(7;7.T^2wxGe=#&_8¶pX\]}|ܧˎ. g2LSPXLG-n*Ze pet$&|Is@ߎdM9}rdB!dddBF'H6F;7tQ͞Z ]Zt{o_U7!&++… N|Ivv+yX;odѫv qIH~@t @]?͊MOQQUW?P%(kiU7ŶN ?VjxOT=9z׬X… .\H ?V(:wܹs4$0`VQlz)I6\hh8J98~_qma]LU+1)hxW;R220RY"-[XpMLDeuu |BҦDR.7*Ze%YDz̟=#/" ĻuM?{p]C"33377zsrr33MN AIOHp3DɎC;@>z!K~p+X,i. FǮA*M_\&KL^WEveZy' ‚y͍%ʑU4Ƭ|򓭈sdffnܸqƍV$ $",.Gs3DO°A?8Q4|G#)OdZ:YP0/?(/JRoT//}>"( 5hi!1 -{ed~\62gVKFlR4yeM1>Dm\:WՆ̗YvE[E(oߠ_4*KQb-u%`%X6* t`0g_&4t|.i Z@hU0 UNUUyeME+y뵤EjHjcXBz#*S( % bDq!MYWdO@c݃b)8z=PL6H6/|<[q͆ኪ::5vZtL4H)ӡ;#43u]֊D& o VYa`*ei#/X#:0Mu]] $#V%1 6%"v^"hwF+꺂TQʍ74OYu9Z )DJi,R 4*6BVNнGASͣ T(V.ٳ $77xc\3V9 U ,`0 ,Af`` ,`30lX6 f`` ,`30lJ<[DIENDB`DataLab-1.0.2/doc/images/shots/s_roi_signal.png000066400000000000000000003054331511411446000213370ustar00rootroot00000000000000PNG  IHDRX١ pHYs+ IDATx\SU?w?'(IZTt#Kz*M=Z[aX<ɔL%TZ&{0qwll9"9C$   `yAA.EFAA3EFAA3EFAA3EFAA3r CL Y</SPc֊Dn}7^]٠@ fHcSaV. pƝcki\BH4ӛlj  YdAf IQ^z1Ys =m47\.!Dj.uLlsXG?5 M/'zm.7c+;VH\RQc(//ӔWGא$Is8A @ ls2Ao|š|H^:VǼY_!tw-&A9rfpxt˪͛KQ.HjMq(%% ʫ#rcNZN.!%xcjm&cգh\Bdxw tеkY`⣱2}>(Crd#ӷh\̺SV_,Ѽ'&elf$/)#xȴ6{{2 K- .roo\O kV n(_SH$fPL-aیɰ oպaD̖i{WRG5/̡6b[t,}i"v 5-fe(dsIzh0% YTV0̞V4!t-Z<$/}8m*/oHꋻ_/4sȖpa3P_)&(dk? AA4orMCJ)\-^i FYIh7PQ3wӕ"{ Q3I"1W+oQb1=$Fi-Q/o0uT{ma=;:墧i)$:ƪE\̼B}q׳r c.HW+{TD x-}E'>nLW)iP+ˍ׶{ŋuID%/$ _6zy- s"&-15%`Ͱ\37 rʳ/z黑,ZC-/(ON&%CEMNFtuo٬;nj~~Ќ Y{Q]dAl...׽@Y[wj[c:Xl6 kobݖw}iz؉CGh4.MWWwwź+e$s8lZ )lvo~l6eA땿=EɧvGC9)|#Q/]V#OpnݳJHR M-QuO3r)uqO^uN]岦*uīh'_5?Wuj}kkOKk_[vTWWWWWͫ=>kܥgƏǏ]:7Mm!X'?k]p|9{Μ%ȍnm8A.mm_ ~~Y 7@m{qW9GWExq!>_|3;!(1a8zkgbyuXp^ޣ7%$=Mnk ALB,NbJ+..ywݺg͚qM^v|TGUa[m?z<S^qqot}`MͭO|~ba)a~e']?;ucM~>uQ<[&zpg+20!|8> cÇ 5rP'b.=eM^IKuyK##### o>ul {8Q:D[7|E6E}gKM~Y_`k:7L]VVV>wϚO53Q 6X,P('3`쭮z}Js/:vJbҞ҄Krz+M{TIDi66eK_y*~úZEu9|߇+00S $}8͠q>$hA· jn ׁgl.2'Xuu=$+Z<;umG!EN\ښTtAX`0lmFy2 9+ΔzV?1OvhZzQMߔXÞ[vw`wǡD4զ`wujъMwklUDq=:wޥc@DqqIL<"tʊUgO'$!CZl;RGԡcJw(1z̫z݁)Nj5ͽeۇ_>yǰSNo?8:zƒ5cF*Wn;um^&J[sL#3 㠏 )z\䲵Szr-ˆ Ab989~].o]Iy2~AƎcxTY DQ3-_`Vn;5(PbsF^5V 1y~e+sQ3Y|,.=aʽ[ĮwRA 3.VZQ3D}$6Meee111}2WIOeNO}}}ppo'MѳA_֔qiiirmID_bfcV[QQn*PVV6qDf--EfA1ŋVZ-#@tD鏢c6ͤ.̅XO"٠[}1 ,|}}GX|100Zŋ #w Ƞĕ|/~.2Bkm}F @&44l6{ذa 璵Zm}}}}}ر;g̰  .?쥵7BjX]|! pƎ[WWw9$lvHHHxx8o H.0a a`Cri #'""""VН .r@ s؈_ner8(ĊO00PT6A .AkԿ*uzU>/FMły 8@j HAzO 2N8Y7ZcCWJ޼=c~~n/W țZ߉@܃\h= ``sO{A]_"t_7uѪ_Ehw? Aj(a/~_Lw Mo{,2  x3v\dr8C˂&Uu} ),z-I<5ܿ`^M Q.gAAOgQ']0!Ъ?qF kMG}Ə#XWx9  K _f %Ce,n܈/MZ=zXcG#Jyrw"aⓏ=IAA,>7h&.I21pe ٚᏻR+[|{M>a|##&Ra;M;MuMN!ADLaD_('  7Ahq;$Sibv CKﷴKa$xgyNFܟ}(|3# p': G3lIKDPHBKYRq:ϺD!Kcbg   cuA5Aǂ۷A$nݺݻwZ~?歳g~yG4wĐC_/a F2F^+^ \9"=Ҫ$^L\[З# B.!D̚tJ, r{@@祗^zw޽n:NGǏ?K/dА)7Ǟ>+yq{/|"؞V2 /S\).#a  uB/$I~%?dAI!/K~o2K/2̢!-,Te9I>ځ~LҌMz:&x AvmS64ffe*wr?~3;wCӲ6pl۱jC#}}^dLt@!ۜK;M I<k0AYs&tgyt]4|4%^P"ȬAق!drZ󜥖5N.Zh[܀ }@)sž^ k= Ad Bdi!&>1f9L[;T3{s q>/$s|DSSu/痙K-<Eϧի~mkЭ|ED7 @v}`Кl ޚ 0-pB&yă%.ݑAX mſ*[9lq3o:5$ߪ1~,{A{s?bZ GHԍaAi̓9~ÐnTa?)ϨԄgR _=>c!L! ^Řnvi ,rZ-h 솴uS) nE,pyݹzA6"^:rH&JK@~~~rrdnG2=]/i_8={io\h7î 34{$3vw׌h_ӷ\nvFWM](ȭ3ro->qi8CœjK׿MUN >xeԓ&"RkՕ hK52Z0+K}fnޟ9;d5FMnzj5^qlXO}6P8p v7\K/:R7{l{.2fhH`A8HaqX6}<"z?~;r&ƦGZrR5cƕ_8Ls-*J?z8[I[̞s-޹|J.(;'[i]p΃EniLVqP=u_):RCTCTaCP_MtW^u$[=ئZ\R}Xy095bnvS92rB0l9VI:" KnzZtcF@~6'a%I=HSK17?N}[[׭>vtv͈Ew._(*>L[FSBQ΃.Iog4ckf$^/20!xu/>*΢G(m_ wk%)wV/n 0hQUY,XR!V&\f܆Ds{ vΪf H~Fq[ٞQjߒsR# inu}q+WTW;I /^={UN ʐݓGi弌SNy1ALu=d %"o iWwpCƍ1c&M3f uW}rQczGG(Lٷ9Ҋs*Use%&5VEiFEisLRHRS{+9Sd ٺJQ]̭ȠM.,JJHRr4@D9=&+Lg/8a0˻փf1̺Lnm);YbدJ0 ͎;6~Ѵdx^z98#b^z|2ZXv4%Weptwws8Qill6lIN8&&ƾV>VF,!P`7Z/lp;G r:5!\ۇDD\,h`}2,=c|o i"JLr\❥vTTvQܠ .#75j˴]Yą|6(7mF=wGdĬ14t4|bo};_4l t_: IKV4sO {ZNul&q/lpSgC nP$jM euٓ?vy:Q(ޭm~3Nw"RRsUY&ʚ(iU(*VF֊%?s~*sĖw-*FT,t,Fd S r]wޙu9s{Bew%x/g''Otdͅo2L|ӬjZVT`)=[-t!CkH=v.#F Qq5dAM5",۹լ,"*8zf bؗ/Z? %vC e֝R(+KJm4b(HfT$()++]0ёBփflDJiy& V<2Z/:JnjoiqK6knzj±L,hki>{x:N$HG|ÆO%?{A篫f+)kצF@Drc@Sˆc!ܴ"w.rE,X;wFݶĬs`Pu%f˨OٷsωR}c8}kpiEe4EWTLBYd_FJ^DHfTMLl@mxE?da-U۟2Z`[m K_|K.Q׷Lq]/T}}U%NuGƵuhh~mkeee111[`㋞9cw/ $IR'H\pOH* qXEөI@)0P3gun0oԩS̳ ,\z0/S,rBBR8vv2>~oۿ{+/뭼ߦ~vw0lVHBA LJ5\PQ ڋtM{6i|zwa\ uPxPبMF_q^Po-cFS\ة-ܡ`C?, u:ݞ={%~'C3A1%W`G00^ۺ/lфi4}°Ts0\Wm].;6]w( #h>^-N S/gDTIIIA;vח:t谇X`veZ,3bĈ#F0lAT AŐ«9{`鎪roS Y| یk/D"HP{AA?: XW#wDثq=:Ą/^_TDY)!<:nka Ș}MwSa_#)(7p } r]-1j*\W[ sYwe. ;2{ \<2PK B%e X!)xLBDyO-6ִˉ[ޕ'O~xW]ݮ'S|v=]/O<u~l`JUun9sfKJPs T$}=RvȭHKJ|FJjf1? R⩦L  nMG'ڣC_fnP=yCa }3J !3~D sz߉ a 噫s@!+\" *Y߯].QoOA'bEaX^BbwஞHزr2z DݷR)I<鰹ZB%Er \m]t|8JvЬzD  PT jyIQG2_YSlO_/-ÏەSh4]][l6kƴgW.7$@\/4JSy'ӊ/|)@a!d0q,D\f'37o'(5PBQQ՞0.=sz58ɰJNyɼdH9Tg]N?7?,鷻mߥ_&/2JuuҍoOiDO%>9ʋn Y0.3~)<4?n8{S;ZZZr9hZ^R2#TP C% rjnSb^ݾag|D/ D=?BR ,, H}h]?̽ bbbBCCWp?d $)yJe'ЍOv& ?dU2YMzKWAsk[sG*ޔ}z*͓!!!Ú5 ;g_BNdd@LsA$hCr\#=OZuŕSxb+ r?N>}L0b_!ޱhj)t6+0^>ҍ́%$QyM Ajkkۧjj={֭[Gduuիjuss?_WW:ZZEM`(ΪuFX$*=t'Cl!{~崃)do9:6P0u~篾O?-((8ydGGy.wȸqƍkm 3&hҤq4~Yȷ3N %r*:Lܓӓ -ȥw좐ś s,3\+嗈70 2l5 /\oEu95[I(NJX bm̼tՖiDn%\d#NփpQ0D #F΢ٳgĉC G|>_p UZZdG?EΪu0m-p@ J駟v*\3jQ+vZ{'ƨEZb(#g̸<{ΡvҋI2RewP *ºD0/E:|Lm."ņo?gsNMu@Q/r 0Հ 3ZԩS7o m'SxE?daΪu0mM~p@nLVQY5/6 ;榡_fUFFFss {RYٳi(աV ^\)(V?Z`&$M|4|:,5G s4ӴTm y1k_a1`P6:AME vm4Ң@妽P~xБBփflDTO" =F@TK/J Lg EDDg-Dš2n ȇpr=+bkvgq$gn8疑l6746Ů"t>lhoO~[~ZooٰOBA#OK+2ۧ@UчPӮ b}KJ&̩GÄ95~~~rsR*bEbþ42ܳiOSbhozЬG$4JV>S=&6 ww>|}nΝ,zh-Z1\hbI@ yy bC'0X.ngie+ IDATØ!D(dp?;.ݼysX]^[=$Ij]Ѱ픺7q~f^%իk0U08Uy5XO ɺgo-Yb/?߬YF 1cV;|f^yI%/rΓD7yaتWzũwfdFyyy{{I̿ 2ڮi; NIĝ<ԩSv\d/ax=iC܍P?  a0XLw wΜ3w=a„ &M4i$*K,/WC4ũS/@M5l|mmm?80$sTv͘qLYQbدRT׈ΘeVRT2*ŷ'ʸnD1ձԈ޵gL[Wf-9h%`̕5 U*ĬsKF@==하ܫ,]RKkӧc"IӜV\"!pSõُPx`E# @ [`[mpӧ8p``yM--=P~ݺuHW&$J3`a%M $&RNө`_ɘGˈ8E5eD1*kSh<q܃ |mF+"!t. ָ, tRWumml.ڵS?TvneMѝGV*Kz=9)]s=z4Pf ^Ɲ6jTE]{ WƝm`M ffӅ[70栬,S7#*j(]3n4.4~v$bAWAz7dh} V4` Z Wfjo177ׅjD2nܸqZ[ƌ 4iMw)5Ѷmw.](mʾ%ؚ G,BF@bjr8gl"**Xs+_f1Se%Zeأ5 )ť آ)z\طA/h=<=T2*[8&m` aB}vcfigl flI2m A/_lq54}Q-ܪz 02}sr-U:;5cr tj4C6+GDz &fY*k*@?w]R s~[P\O~ygUW|-Àb{=2t CE@YSa(H]kK f+k*0vmWcN[Ιt_ $.\^_NrAl1kNlH2jň勄 Syʹo.~S[Ŧ$xaH#@ XېO[ yjuPk1pQΐ`#Rx:ruIOĬvA0rvT=GY\Fh{gz ;f̕sĐkMdfϘ(ׅ%[1 τoO=#Y7/5t8x|2Z44\c~FScjtkт Xtʊ?W͞H juH"RˈQBDT΃TBX yA T0wĕR,i#Q !쭖4 #쭖ѵ3Nyhit˯, zZ;. v֋tb0EBgg%_,5>ŏۻ^'QQ7dx?Od(<-]jp/j1[^%I?no)>mɏwjYdθ) zl?,r\C)MIVf3TKe>FM˞C&J{t.r(WF7mЖVdu\.+%V,za߷O:Qj:[Ă%3p~̕5@Yiװ&vPl74鱒K2kgHHBՕ 3o͎D~vb Ă'xꍼ4ygME q 1 )++ _lfM?vwk?xII$$ `Xy!H\pO(sTu1*Ve4 ~o瞮Vk┪ϒ|F<(a׃jmo}޹%7- F$իWN1|[U {`NOg8Z}a& 'M_V aaڗm1E.;H6Bn^O PoNշÄ \p8씥,}ӆx*{)e)˰%s]g+2(,\G|k]d;x|+2ZlPxZHe5 ]Ìha"{_,*Օs"a~)>,T!Ȁ'f1:44jBT6 qEHy刧R6[&}Cko,2Y{]I#4L=MƗݓDnG{.{ohqZNt`hA` ]ÌAWfͪJfrtnzimq㋿ސzc9|e4R­j7:&0Q  ;W޶R/[jɋ\{tǾn:ʿ_Ҫq37S>-3ZQb9^q++Ri/Vj٤245C 4P1QT9"3gcp}F?Yk?k<^#sl YL9!ɔ<8gbC]є!a{;:3BӏiZBdYK5|v6fCWn.:(@DС\" t}/,Ԑ3Q#:'$J|X/ AbrJn֫\hq4.mV8lף+|EYyEО{;j\)B^+LuaDQEQ1kVk@&ƴJ4$guӕkb$K8yCE}MSӓU73~/)zzX AvwJGs^l|L`nB!(J("BMM5j/ v"U@@KorEK5N;u[^&>T*KË/.Dq==)!$-b~b}0fZSor9ޒH,hSZӕkSS\05bTh6$:/>$MOB8X0noPm0|CЖ\)\1u)v0-d\`YdR08##î ; h\n`+Ŷ z=3z>/cV@#"czu <ĘkBvSЫXUz^}^iC+*VT卩/]*} ]n[Z 2zFo8gz@ՐB (,իG:+2?S!a8˘+CAW$1Id۰`ah=of᧹$MZln(Inf!'V]u=)Vb^-Aт -т!PѢk $ZO,*;R @aD"dk(U̇tjy>GjDkΝ55bOvżaECgk؛Ͼ2 SMn\x7NO7¡a |zc``ܜɽl\zfٺ~y̚5a'FkӍ#fy=gEf wж9cnp(>ouЛ`Molzc`(c8}C0ru/WaYn}CF5ŗ\l:qvHNvFS\Cvt`>.Bŗm1q,Cd׍?Uj{ H6` \5I,?Jvwwswja#7FsQILMh<bJR|4!ZX81 ~9>fUzhΛWm!>.*oZua2V+v\M1%A1W^KmF]\VobRRا5q176nhcβX A, Aт>[keXr$E]׉5;/x@uДxP;m,;;;""Ū K^|޺tރ!!N3vS(Ą}i'f%7dyKKK@o = e a~IH4dpd6͔+35M5²'>hlk>Z !Vg)u,-hn1 ˺h-Πu-ZѶ0E>)qiO_O/?~j=7 56mhCN|"ysBjKO6K H_Tpq˿5##p-,oדMvsLnv5TIA`_mt{hݰ]-{.*U}Q'V'.߮\pܜ4b;l@ɢ;!1Ur;Q :7x_U+ǙX%Z}NےfQ¥ 'rl"o=l !~zPOJ܏C"XMN\ $ 'nA3YUU;MĹXLEX b5E?R;=UQ|,.3+6UOAa^1 ^jbBPIP\Ų%Zx%nIhfhtF(S IDAT6h{ܫm~nTj':Aq۷otA2"(00%-K!Ĵ337 +ZS4M1$-[*Z8u 'S_dP>T%⛻7wcƣ֙HU8cAz|{1h*x?[{A[O"3=UU x*_2D⥊xz!Հ7+qz"wcAE/ꌠm]+XΧQ¥ƨh.r QUm4ZjZxt Hm5b@_A~ :ګsTD=Ư/e\[YkԺ4.mV8Bd."ĭ'7wVhtVjD4=0"- ]|N,ԲuL^>$RPrg*uq 7ǡ\V3Ï:׹ ߪt Ե{=C{ U*»߮[>"꽽l0 ZTިϲ35akXmHx˻Bfl8t].-B.%ڒfQ¥ 'u`a:;0AQQکcٟ6&S$t|!V]\-j $Fֳ4=rַF_[|wܙd.mD[w{yj}(cjOԯ1P>'jv:˟-D4`k-Zjfh!ÑZ:TbHk4.In]w$R8Oy.777wb-krsssssĺG\:ׇni -ǎc5uYO"R۳l|Ԑ]:!nDs>lH?#!e_U:4{("x%ue@7DUKBd7+"iZI"gfXąB 5B]:?&.T##ҹr_Ar^RE,mܬ"f:Ul5'[QQ\[r5T`i5* pPGJ%)ꎇƤPxUi9{(N^U\9(bʙK#.M|uiQIM\9W8rZC? /dͬYhnG.4u%xD&>7iJ&_&&.Ynv9d?eDo05o T7 @{R^ED١OdZ -\CĬQUI5I kZ +ZTi'|v#{qook*ZS-E!t -Xhဢ=FF'uUn:^PDl}p27T\.QxgnΝ 4rɖQgZ)ܒ8s7۝= ݞ Kbc˞ K md.MR$"vI:M\:+[%noh23Mg.\>wi͙3.]kӖM\jh&#I-oF (ܜ9sl<zWl֍^QȚ70hҙ@jx.lZ 󧬥I;V8Fnh4YXjV( vɺy3Gܴip6ȗrB=ĉECU5!r] M{slDXHmLOPLIzQ `VhYtwKHMM8UVV}:!c0O}!cط5FE-4[ҬzӹO$hxy:X艭C>jΝD7nxEݧϝj4Zow{!xܥ]voH =5PiKaM(a[`+ ,ܒX1qAfWXr *94hj#Gk r"WqMҕ (1c*j܉QNWrΏR$gy6( KM؜$U8t6v PV`r oAL vm"mذ;v4Z,\Mm'4E?pKp#"c/;eok+VmXssI㏳V\U>}4 Eim-!߿ ͩ[dcclY%q ,<`ⴂٹKb!s)[Lkg^1Ěm2FS.ܾyfp6 $.)PvV6=si[_ۣd^`;6#2cl{D 9lOϗz{{C#}||l߻Dujص]*@u=Vߎ,f5y^nxT2 $jt\6?"@}ELkfZP!!>WHNG-2c C?ɾi;CGɭP\h+zqC{E.wsO(SQY.zsÆi+gC`^dddX%Iر7K3(Í) 4 ˒X ~Ko(uKٳk,rKh"psEGG;,XD"jƨ3FWӸ7 ^%ds,AҪH{h/1SEI@*=F$[z}a`Z3eDZoGť䯎 cGϊmysHę -b]8$_W-jkkϝ;G$Ql}3MBuUU1hzDʖKPw0#B[WljhJ1Fng7-y|{zNe 樐G>\=Q(H+f0\*_*3̈́vxJևW aG4E1-!ex=!t`mRXQ xޯ}-f P$zFQҴ!>֊/w| _r'\hqf3 pl%Zi6J6ζBz0¥>` 뼬SNL*Z*+H듏}JHC8c kex_D,➋-P)k-AYEW zi(PBLDKX算G/_c}=#?U"…t"#ܳiFwۏV]hRc|kB*Z 8yW8wɣ86- M~BPт $Zܹ[/kkkBa!(J*ߏ͐J$>AA'R0 T.Vq.^;{EK/]tkW]^tzѕk˅.( ~sw[uA1]+ZM ط7E  r49mW]CE 6hQU]QcETW ^tKKx|yK7?  }WR-",m Ѣ!1MCsB夦kn `줧Q'Aq lbyn1}haBAb5ѢrEZ}#$Ț.ש@QCdAARZZqݝof޼ySN:uy曪*m>/ AB}'ծ\[!M!t -X@\YQ~C{YYϢ#FftkEEҁ|3`J_r˯PF5i! *4ύO}jZ! |S|$6 2B+j\RJe<}|eʊ/x8OԖJ9>Aieo~ر"#-HsAO;jQAOsEJޓ/]4~ am#ôqgI㌌ 6,`YYa:b(bl򈒒.@Ӕ\Ř]vȘ @jjKl.r^u[1~[ 4u 8B߻]&ZTj32hXZ[rs0g>V{=W.~m0# X,޵kף>j =$aCV%B10q[ɣ}wE,eg <;c-/juhRK5-Yd7 7n.^J{^!>7֫??IͨAqQQQ ,ذaC^^qV=X%s 7 EuJ }vO>y2-Ahb}Fa5DV5EuJK_g Qu.2R>8}77 EQ_~ʕ+MAgoȩd^׾ͩd:{nACBf?0%%}n]h4گ.Y.Mт!v kh-d2T-] */; 1^^ 7TD7\S?|IpAi!/hˤ'J[Cm5$p-ȏLZܺ 7.UڄK3-'QXUȆ*Q?ATPPpSEp$M߬&EZe90w1?̎Y7uΈn|S'6|uY6igj̴W,f; VXa\YBq% zӷ*ᕭR߂/*^z>l}r9QFpEnw@ Y|c0¥>XE)j+/wQcBPtjZWjU:upot'iAVhGݫyY~E҂oIUw+rʶyW}ǣ׾Hʱh燵zb"KHL;eXK'^yc>w KQ?AVT_})@}GYysW^7n7nn"Ahx!EFXM O~JBKLGt~2{ 8;w|W[lu{4EQ!!!O=شgV*SWYyʥE:u-Ǽ/hAh4?S\[!!=.KH˄q︾SYyIh;uenAq={4hX,H /гgÇO>ݫA¨-21,-P)km$Zإ{{?ՒAA*r1TrT:|?g29[O67fx}AM3-A6DhhӧāzɷN_(ZpEno@EjZkhr/$Z  mo/ZyWԍy`dW.-bL4 E]CE $Z,2 ;0hTCEQP{` ;+E hy.}{K`<1w&R5T`N ȽP nr=yhaQ8Z]CE L@A<48Eb.5v̿rݬoo0DFAx_EE ;[)0ٮ'p-PAw}wE];z b-M؅5T`NbTh]Jg# ҚmBD@a b YN~uSDeG[?A+ZULe_dsooƧ4YTpiMk6tU.{Zjb}9xAq"/ A͍{.r{K @(@EZY'ZL)]WlU7p&t  , H ,ޙ?/߾ ƙ_:5Au U3laԸ-^jIkÆ](/++3[,\Ma]YE FŘGE/S~mala^0~[ D p:Brwá%B.zD.ϸuH_Ύ_jÒ׬H  f,`ͫ/?_ZZ zp}=b{ !qX hnkde~ٟE}-/7'A3oЌ R[UܲG:|[Ôݬ|`+ݕįΊ  iW&ZygM,Dmzn'o=[gwFf"M'[iAHPr'~SBjth9ao6 Q¥ƖWܪP0FE G}D c,$Z ZM3d x"jKA!W٤5|uɤ,Ru tA_cBIژv,+Zޝ@O8h,hax]dGthG)v!t -Xhxxq-AMC.~c±Q|LɃ=ڞ.2B\{}J"8zC,2cA^(ݥEYܐGy 9"˻CH]mmqj=\nE.6-+ZQтE8"#SĽimQQY<'ZBPnZĶ]#PfB*Z'CdA &V|$:Dyg+Dbo{ (fY0ϼq omeIuߵ<-:s.!"#k(aBJBZf@-۶D nتkh `wr64+Z|~׳ܥ'z}M;Snk=_\O]CE L@ANɺRBh\{\-8t ;8v0DFA%x_Tjobokw5*Q\jll)?;*Ćy4?,h  ·_-~%xջ:R*ZK3B*Z`  ggbChQѻKExNr["J8. gAw}W 4M1ܦmt-*Zy3pMl1ֺf>.p-,@';-\7" H}wE H P.bokzB$F1-EwPѢVlM kh"Dٳg?… -ZhѢ Μ9-7f̂9s[PAq>laZH , sUhy !BO;NsRܚ>pKb`@ߗ vB7dȐA r\.*˃֮ شN  <ϏSA!laZȸxɤ`qFF]v0h`%%%\\jk`tdw/h1AcћS0NMM5!h_ jkvha$oF{$nnAAք_-xyzCC-mO"F8ucuKڔK]cB[!t -Xha09G%nn@}rAi,hÃd\BcCwyIN=q'ɹ"ǐ{N!2!$''رcǎ|=zkyA^`ݜ%lVhǏ^  )=Q k]B~;^ \gl v+Z* kh"tE !QQQ ;uJ&8ގ>Aݗ>;uӡk=q:/hSC{vHK'sֵZ^DBF0l޵̈́Udr,m,т"*+geC mKeG9[ROB;WspG]Z~8wӽzSUAyRQaFuHǎUU!2 HƾQ p/:;D B We֮!lZt6ͻFP n3veD b5BRBioլY Є"c !uuu>AABPjT/Q^၎:R*ZXbBPтE8VC7n;*_C7Wт2YBPтE8C丸G}ԸFֽghP0"az/9[@Ƃ1!vuFD1Zh]=a~u!t -Xha5yʔ)EٳG*VWvxYZ쎱Z5eAAga-Q>"ÝHKr5\Ɋ%5jGd`\ A̱]/>>>>>n:y  AO7%%%[@jj*ɭ2Ӂsta p'>}|pN^mtdաsRc»xϚbؼk MR5^t.G5"ܳ%Aq<ݼkذ\|vEQx__/4Ŵ@"Ӄ޵!d#PTpm ={gƿnۦݟfW*[%)1[hֻ˄h鯖>Ew~W.;G}TXCP AZ-ғ((*fg*)Ģ^8u*Zhtg~b3pGoY.,QayV ApܙDC!qkb’IJyM}wE'~nL>/uE L,pE ;];umG@EZh?ODAZ̳wo[g\qŔf5qrhqI3}˛rЎKP@"#9h 8mEql^5,T\]`׾ v MQRRō[ŷ++`Ǯ޵<[xe0 3wI#lzg!@צ-/h:ءBe]r-!;;;""߿ r/VZZ z}㬞N&=6͜P ;&PSռkg4dp$'m<~ )L3,ā{e5 _@s!.%bL5FKIV;cN8.{-p~ώbok,I()ه*Z\_ 0O]CE hQ]Sc=nv{3u?~q{zx8`Ad::**m*H)BR 9j'v̿߮S-"nUe|72EBSB5nZշ?7w?ݼ)>_lÇKYt֦~K}ݍ[ŭ4 e9{93>1 ^ĺ_r'_[[P)ˑ!PQ~ hk&BF0Xj.>ɣlw!@S0wb>su9hRX,"-Xl"G1zǦO=}]{/^ߎ]w>$Y>DAZ=qr|"\x_\nl}m g:vKص'o>[c+`ۼk֦؅5/5 Lp,_¢GrNqNMǘ 1D"=;!HΉ׋AA (>y1-Ryx8;jsnU+FAy93X1ŷ~ޚWeu5kP]S-}Z[Ki}G1VtAA⯋-xɹ]Kh.VѻIEgItceq&cX1oܽ{ߟ3n.&usH}LGSApN2dߎ]h%Y2e?1(`cC[ZF!lkB6BE Ɩy_,*rlIh-p-,w]ncD>#=?^T?|7naQRwl;wa9~;Aڪ397._ۣ3Æ!}BG{ VƞlvGZ yq~l֧Z^'-yvƭ'Ξ;mQƍ?zظWصcݺtOw,ݸuCdA6^̑zzw /{ֈ㇌"Kv1JJJ8NqT[eeeܧiu9Wr$ )(.É ᝦ jFL1j-#,kؼkE3!C9']kr<_]}'Nu4vT1/%5};wH$Xԃۡ# ÆkQQQׯ_ٳgyjǞ{"E Nױ#pޮgk~[GY1! mB6k"٨hha\侊Јs-O۝gߝ?lmD  I}a ?h萈>>b_G >z###'L wޝ$osslȮG*Z8ס2r }R5}]֑7sqBNu+WJkޙu"-xz>^{SYjKsC9{*30NzqlFQ]ڐ|蕧}>ʙV (Ǔ'O6dœ'O}?[f.{)Zmzf خ(J!5=!"vhO&:ӍYc[(0BPтE8CdMK% WCnGhFG#e≪-m-@5JGrh;z#FUAQj*0am &9u|k9/H|0؏USጁ CVgL桅DѢi9]ۑwr(2BPтE8Cn]:f&ZS[qjݵf?˕߮V_e>-k6~!3jZVoi. a/u#M^eqXi/=:!s3bHk!`1(_zwƆChPhAa9D&,5x/CDKm>w_XI 8}7IӞ=rrkmTnfn8zMmFU7\̂#GFvt A6ɍ 441kVTf"}{C !Ηht\,vmtdU%{tG%06Dte#Z[zs0¥>XB8{ʧߤJ%a'sû3WV5" `Dd^"Jd/ /Lf뭵ȵk,)."zKpd7sn'rsw_8Z9W6m4ϿVOϬҸG<_Q\;zۦ3s^PAQw&j+LJ1kV|+Z0P4۟d)Z,dtߌnSt1T !T2qs-X:[]CE $ZXu |̜9'{t9V-xBPтE8Cd.NbǧN_[}%7~^J-^]ժtJMe1pGh>G|E IDAT@ˑg5 wn"zFܸF9R(]^}輋 HkH(((b̚uO΃_)Z,%k|^=~ƹŮ9&1*Zٮg޵'^)|,I"ȥ=o+ҿM"Z<@xړQ?Zg>ʛ&dDlg',n0N~1M&mIPd_f|]BGD✜/N#KB‡o5؎d[Y Ɉ78Mn @b Y(38_?x#Ɨ޽۶ݻGsD (Zu֕;5\,]XBF`-z"R1}qT󮱊x rV!cT`i A޿oلq=zytErGDAZ!cvݱcŹdNcǎCp:PF5yv9%.cǎkÆ8;v4: FcG0 i]7tz}?Uul&|cÚ7b.2())"]㄄Zmni_EŸ0|p 8N7vh,-o|Bs4m ]v "izҮpS%Um_?l}7***44Э[{^i~{N1h^JDE$$Xj`<זK}nDN^[tO!/?лOvGu7_f^Q^7v(SY*!YL^!QEFASTUUgϞM6iZViӦ={TW 4%qX"E׽.2-"[,EIq3!K 6Vhaz,Is( r"K0/*8O47$|H?6]S\ׁEc`XN;g,v}3E색%Ȋy׾.̻Q1]Zmqkq"7P!M!L&[?L9w2ɹ.tkzȼc'EN*>|axuwhiE-O+℘;/.iҼ:#¢4 0^B PhiڨLK;9|N:IP|e{f**`+yѢЌj]u6S~0KbY4MIœ;B>pXxk1V@8O1 ˢVDbp>ӆ8|t9wٖua$RLm1À\$I"yיWGۺt4 lbӡX0[ -Z`0Lel/8z@*/QP(|`l/ua(ЊysOag sJ zu7x fP|8!j5H`0c⻓m-`֭"[¹ĖԠEc+,2&^т'J3$I-z;5c݊q~Kbs鮁04އpIKKHBl0Lqqqnn+W`QQQ`0LwᓿSi81foeW`0^ Ɗ$CC#] CÊThV/^[]]6^|QQQ8`0⠲IK>Ȣ%c߲pf5IÕZ>IA`* 1UUU.\CۓJA4{ҥǏ+v*cavu`aKaʂ{n;UxZXQ`hF P,Q]=]thCBtPBtPxkUO.!##ڵke@@@ttB@;rHRy… .\p_~'Ntww[5 "c0Ύ'hA3D"fgڧh1 sx VbE k}\CJ6>9rdhh Innnǎk׮UTTeu8loh.++sNʯ'9q~} jj 0~85H˵68,EZ$WBS3wX޾FֽQߵr|L3ab/' 7>v5m1>Bk{u^pʕ+iii2,22rРAnnntҥ/?A 0 &&&$$C///GtQ[[w=UCIBWHz%JzTW,k;!왭[!'4 t^~J'.[d+E~g ݊qƹjf 6|HT3(Z@C JںZXl-rpppppp}}}nnnnnnmm'N<9`$\@*FEExzzZLa'p~]&_ٸt(/O63o_"D_ aV?B ShC3bUJ$}GwX[-HF`%y-3thh㈾Foh&(VF_.[q -<1rÇ_r%;;لDEE_"ן:ux:`0a໿kylCP/n{ \0]2f0Ukw_.0@rY5M?1OBRsx<6EΚo(=(>?6ÿuuuuQQɓ'?aaas]`AddСC|{',,pɓ'p eJ||0 77>PU>:<niRs;6}l;*L]g;Ñ :/| >)=laqҴpn,$W' 0*boyUJ~CოM~:rqƍ>++mĉGvuu=q?gϞׯRu6(S-,OtX8Ɉ Ott?1I=Yj2ʝVמ]=!hV4ظx\\X:x +ڬh!uZEF#\)WaEC&)ޮQY4K+txlhQ\ܮUzЂG,00p-1bGCCÙ3gPR9==;}t}}ȑ#-Ztwt&k q9jZV$g1Q~̈ᆱ9b}'97iK{TS9dT7[snh&ƸMÍx榷n} q}zPPܸqʕ+ Ä&$$,Zhذa*Jt:ZmǡX&E*ʔIIRi|l Ƨ)))[gYL/Gz#KDcmQ;[쇱ݿzlv"lYG9wНЭYANx ؙns;VcoY j}}> ыM kWPIw*8Aq֭-rr,L'&έ(x{N@W1 `H7ޡ!Ec?}ܹQ-w̙Ǐk4z hmĢ+P@eujL's LOe&A-K6IQB褘T}:ȁMju꒍s&%y(-m' /}5+ա2ZNN4N]~iFC_qslz 9nq矣 |k>,v0/qvT>Ff,X?ޕ2t[9~>~ OrT7jqFљr"3Lp>nޥdQ@ H{G[TVտqw=51s47h=]:]s[6(X?u>Џ|v0/!l'<3gزWؼk/]xe)|Vn_W|:܈ 򥰁܏{YYλV;)j ,֠)Cܯ 4 ͺ_)\gn8aNc` ?aَjN15P&Tt4pҚV_^znǙ" XcP*L?Df_~gϞ1cFI}#Gm۶cǎ>}WÉߔqaʔ r$z _؂iZ^*mQQ̅ټoV^A" 6ϗɯ I!WY&"X"Mp}Lv.C8}'t`j'#1^?} صEȳIc%A |n"bj|g[l[PIqzث9Ye&__\UOwrdOZK`|G闄͐bډ 7سЌr)xyRV͵dk/7q2݃ߙv0c2s}ډQ0lPBW#?O#y}[&;/ Fb Ho p>aډ{k'm!%qH)nlƽqZ} u5!8v{yO瀝A9(c}1ϥA踺-6FC3:0P^^V<}6VhճٛdU*Uʃ#DRjisoݺUV=6m0f~6LO -E :lCci,BTUU [h7n?iJaaaE YYY1116{6wLrL;)++rHMMߙpJGg V~RЙUjjj+H p~Buz6L} zON-U(/C=(4k~>TZ^=x;tΰ̈ Ή(21-u?8f{Bמba{%mgG#w s]w.c;7- 0BbZ,$-$߿\Tda qB+78뚚uϺ m4~_FMⲉzS0/cx33bg 6c!l!i 1uI?E-K?=ox ;C+#c0ƈ+((^zVLt58"N'dY?uy M8}Kɚ4ߗd`LoWShA3{3i9fE^IOYYPѢ8UwVޚ׿9EώܵCCgX[6޶+Z GrZ8p`Ϟ=bs Xŵk~ߘCL\؄Eԉ*]$UnDm#c$(^6!qLh!QYoAh! 5wyH%9hbE cE (ZX"KaÆY*7ǘw=Y62*#vuu袷?-[ [``GNjLe]p c<*a$aQ"-stE  vƊ4%Q/s䁣/6{b|Q]H}nt) 1]퉭mINkP^_}v>5KNJ%2]$n*2UQQ!.hG襢*Q!/0֬cN&[1И{3^ ".rЌ}-KKKH ==^ ^z +?|1ʵ'UǓG r{Y)rZ>+vZz`>~'ZV(uH5a(NBR8D6;/ ctZZ1 {_~i/ 8;~sbɸ-ghw E^`&e[;عll,Y&U-( zˈU`0 q*{{)ZLǾ9ahQ\4z= *ZvAյwg3m#E-O7th:*k6X<8D`0LᓿR`oE (Zԫo'BE8  f{lhaЂ 1 qvh\(ˊ9tmgsU`)l M3$I8\) UMɇoXoh51 ،C'h0pj q-5سи1hW#M`l[ӡ&k?E ?_m<q_ v`E }2Y\PFu -9⍏#{zF4moߜg.0 9:qHw^iz_k8s]W7^{LXѷ~= =$Zymc_1]Eu1!yZٛ5Eu6v`08|Ni\4Rw7D|-C[Өv+ku" qCBY˴^-l._hqJicL\)^e26;t67O`07AY:MQ(|`l/8GOObЌCmUۅIW5jV[]E ;ӡ-ὢE;-׭ZMjFn| %_TW7i,ka0  !&ᬖp&YL8GG-$`Z[?j @@}uFݰZтaHp0ߚ75FNT'7>F(9*Տ+`Q`0 lGJcᓿvR-՝6CavhHx-h`иiڎF 8D0Q`KA>Z0df ݟ^G_lsoi-Sh󋳪IgBPcQPEu q:.ҖᓿvR&b-2١rcqMWR;Şߜ銎X@GYr E0*:+Z BΣW*7/:\Pl jqpAEGTZ `BG3R eQbxߝư/EaGlBYz6}2#Kj.OF6/p2 G 旛Zz\`0L_;)Zyu;]o'5h]7z&n=rĎS^ǯXܧF]䴅X!> xB^.mH»`0 P 7{SyO14iEac3ca7N\!&\x;A&154('Rм6 614C:n\.ڠJs=/\ШM'vR0ش͘EcƊŢFVV1&=nRW,0 cs >䀭%-F~_U0RWa6wXBo[g@K3n.xe-{ܚ%5Mrx{sG8ہEk' D m`0'o趍:uEeEE.-6Reu*0 [!<4npW#1\7%[zvԓoW zsͽm1V@8u 䭗+ߗW/,i//QjeJ邖)ʎ `:ss3Ҙ.7WKтߜBE8E/MHtl:W+n8٪_pa lWhaXт L@w%5-Y7d,1VB>929ZC\rZV9sd +. kлwp{fٌfRG{v>+vZc\NMF#W<H=XhNnY:Zokl),f:42®> ,O\^DQݡ++'+0@6*9&df.LNDqJHP8ۅ|b0 w[s2vGMEu(K=gWOss"]-_S bhk`_zvB>ox/VUS<kC`cLrA@loϗ?|LE X>3B_ c("”) mb0LE&|t}eCNq_;)Zhlo(T)Zp$и _0%2pc# j%[-Sth$nwB sB UjvD9gT{?N_jT(Ӷg3+xb0LgaN&}TeguJrube&00"Ir=ޘS$\xIt'q|D:vaAH9haЂ!r$3)ZnMDz]bŪ}ŊUK6ΑJf`0 u:Vuuu?oV]U)qaguMݍ Q {,NB`jdύɾ$Ig5tLb}㋃佗wC{44Vﱹ.F+2,xдn]5fP`0N 7>FI'OXSu)G{g5hUK(Wq”k*+SIHBku=+"jn`[E?8ky. U i -C|@tb XM:MWljRhᓿu TuM.Vd J(l'䷳7Z4sx^3 ðA-p1-Z mvʑ<|舒RUYYŤmskmᓿ-/)Ƃ rEEkkJ}n:6s_ϢώaxV#\.)gut1V@8O1 0Ӥ_HdR՝#?Ѯu}Tu×,Z2Cؗm#-op8?d^lhw'Dt4jt5Ǯ^[Xݤ[ B =it{{>]k#hQVZd$Je1VSkV RX33u+^tdBlYv-LsB h1 t 1 c7鷓Epx]Zu?5[Z80zST_dS0 ^(bsV[Ά'%xjT`BtE3ToR|K,QoO3h ',<4n5sW#,?ͻ" T*rb;\CcW!8zNchpB !rImۍQ\5Yq.` ܨqF-(|l٧ qHE+9rrԬz[㞵jʱ&Cr[5p/5~7V#3C3wZ`E Ef椪j4!2/Դiߜ^x`M.߅mP(|`l/iKYٟ^>Ĭli8ٺPVˤ_cp w ,.[חmeUMZ]Aܒh{Oe^)Oze:PڝL'x+"zzLF!2ܬќ(is/1 $$s m)><=F< v3LP~6v4fLӖJ.o [nܪ '&gAi:PV]W,~*JBZ;4ސ:f/gUMgWOqS|hT)`1\o$̿_>5C aCoi䠧Ŕ4d;P8g~> CCWj{!1LhnݺVu:]zd={tqqcP~6GscO߻@q1[&-3~SO(U Ҵ7\.! >QPՠymfz6:UPт"sPDpthܹltQlvS\ݤ^)jSW^24իWe2YDD6yU/1>[&c[0:.qvH]CB(oΆy&o1nh&Rk*QkoZ8rHLv89G?5 ]@Ķ;l8,V=$<`qg;QUUeԔ[ڸx)ā~K ̿rQFYYY111mv:L6`:)EEE2߿W=Fʼյpms(?;c1K8bC]s =[=4# -ShQ3_99``Hbޗo7/7nltpϏ۝zf͹f:@&`ܰ4M\u4A3 0 :Z0S}  (/7Uiģ~_0}>9?o1Q/sM[ڊ'E*Zw &*Jrr9Efvh$I&m{f4th"9jݑrFRXZp˻O%Z r SkW*}Wg{sEM:fcvcV@]zHp"P_~}?G_ycBUt|$5nhh^xLJ̝ͥwy[t5kz'Щ~)St:Ncg{[چ3Ac1o*xZZP' +6f;-?iܗldi{9v/ן[s sӲKR s xHEEA 17ʨQЁFGW6y_މ@~k=YX7{zE}| Z~(ܫtA\ǕPbb#ZVju> X:v00}tiNG6]37YAٽa&oKqv7HL@enj\oPOY R@rKTتF,v8w˨[1Ę{beo m\18S>5{noO]~TKHݬ{ZnqZW^n.D:s͇Knb^;yM. /qULg [j$+chZNGg} 6old]w^=z=!"Qt4slhuδ8|W.ٳ\._}ٴ+zvsB(zHAB:pcP(ZP6UI=\E;-׭SZxIJȾUˍQ|}XۭM[ϯRtmZy/4wE';9GRt@6.kvrlq#`D"KvHNu2İr CEQչ'L>샷k1ܛqӧ훭p*{\Ɔ=$Ģ0AT-TI& bJvho x|L? "1иd+Z; JE3췀)h[^Lnr6V=9xGz\m^ KL2*߶w^A^L:#җKd L^^ܸm=[ -rيDn;uk%}"ymnܽu͔1'\qX^1ah֢唥 us|v{ugG;|y< $)$%IREQ$EI((J"(>'hIWaPPYXbC?ͦC[b -{;;\.//)GԐpʬry -KQ sbio|B>929OW1 oXDn\2'@1sA\v%}TPlWߦ^y{܉_5ލ׵qkIy͋N}kL8G*>| 5)S⥈F z)23ezjvreJ"D  Prgr_IIEER$E(֐L?g5^u5==y ]H!ʵN"$FE e~v\&6.!S$ qJHh훡Z_VBhitt<3V cAnjBb @RԤ_2AJdZSOi5+"HB;ȹs=2ER>D1ї/8|Wd9$eZgb\lWԨs76gΨth\]dn -"in.хN[ha\haW'd.OuЕjcHN +lAr2?;.Ex @u=E!2B!o)z_> @6Sc\½(I٦=c9BR⣷/Qg(a(f.۞TP`] p|Eyg.7-C'Þ0ji4E$IQ>i YYYBdPhAn(#mo_< nVR8,[wKb-ZRHH3'=`KsJvpjujǂ%]d P) PhBf.sѰEЗc{wʔVQlœ%SQA̘pO /5&iqRgԆ}sǍƅxI5Q5MFyݚz w#5ڰ-LuT>i[B{}Iœ%諫yF c*%MJġjmHؚɓ'Cg-hTo;|bKQ`R;~}zO54b}KC#ɖFXbٕ:<BoL Imm;zrp]}@Xa&錚V6]deLh#KX*J ŀ^! !5U1;Cp 3DرSᚡ(9++ ݻwaaaGա"[5_gh((]~ecwr_A3VpӴoO.;9";pn?7ݕƊPf:e:[5+mq,8D.S-\*, TE>;_HIvǵJ.OϞ=WW}}=  d <0gv(%> % \-'X"1> 4:FB uYa*oH6q(yQ!^C.{wWnw&liArd?gF#ZdOTI![;S!vCd6>Q;D$W$BCL(N _(oooeYvݳc:nw(€d zT*Q'EN4CKD,aPra=;1Ԇ5X_ñ܄1jBӡ{k Lbk=ߣwZ6Ђf Is}DžvCpJeee={D/ iC?2̦9)(>^ŋ^F%%~~~; ٝ8(ԊO.I={E#,ZjuMF]$\'e-lxA/T=nV'P3>="lC)i w Y )///++ksXӕ޾}03g͜>}:3ocPp&9n_eo.HfŞg~8-`i ICw0޽:E N$?=7&8#F1wg[q/<ʤ~=mYeTB.{"*Z xv ҿRy%$OxxKHt=c#F8}Chn@TVaDfγe'(Z0 L_hMU!)Ur=#E `wgoth<3kH0R[n>@tX.VڨhaFB\\=-IbXnqHG; tZ-v9~>}.\8?("~Ǣ"44M4!~)׳>-Kk韽/Lӛ"-&%#xFQcum_岏?wHL;X.`0n22>|KyyǮ]~]v]pl/Xh$T]a>U$ ~sJte E{/Tu+4 }|w.,' :ExjOTZob@OFGS$ج'1Z1 @oUUAA9r 溺:l_14 (M]"1U;FY3x>T,h0&ha6ЬZ@0- $B vP WB 0[hn5M pHƌ>lp1 @QFyfss3a͏=\]+%.+Tk-bђ6Gq5Gڣ~ܪye?Wgnnxd" 0-YS&NULfWչIwSMh I4i3c6D]7S/}ywͰW q ( &IOb2X:ƨz)TF.^XE 4g)?^x [+<4!5ǣ)Z57;Ŗ<(MCO""Yu!!X4[BwszM?m-.`0k!8{ 2:`c6&Xl.1ZӬn|' ` cZqq@G3 `Θ'7д_3ۂRH9΁#zIaML&[Uc}Pd^.ߚZf|z\N](/ls}]sg7{}㑫bXtMHGn &`0΂WًQь f,>2{ĨT*"(`+Z[5/n=Mˌm- n@OTRf aȀw,-5H?+ S#{r`P`.VpgllR۷رc߾}־=`06"hiIHR\.S.<䝽5vhw ^p#I5ex_ӡqh i3ECzSyg_"UhjXx$]}@ȍMM.EnR7ZаFk=pN~^`0 ǯǖ'mXx^ӳNP%E J8S.=>'ճqh<+/U@aEbi9tL ~ka1\[W7g[bTki̺R~יf.-"" fj%`0bpB #݉](a3TRnV6%h^Xd)FBdƍAE1 Jkl2e)n&PRq)<ޜj[itLtkŸ^xFL^ MR IQNnѓo̊|n ®> ̅jpsuI ZdTC'`0 8|bgA^qͳ?c@;hrF+x7>ʤ~=>pl_=_=WT] E1 l;e tk44sJHhgHt -@B ]8DY.Mr)K|VXxomUKf>1 ct % 1 _1ZBȘ" D\.i ti8EKbMޝPQ0,6)Z4itn.MMK#, -vƧ.UޮilmFG{R 6ƅvц;w7iճP\! tߊnFK1Ud@"=ucƍ$Xf+!Aaq1@'I˭`0bx_}[Q$'IH2PT"=Ϸʑ$XVuܒ2>Q3ο5v9`I\o 5:aW_d?ZUB^+_ -xH%Kh>Г7lpCcer_@ߞ~ ЏG! NQ@,.>NXg(^IZlς^C9 W9 G2̘p66tΜ9s8p… v68|ZE,?7PT= 3Z-H _36i IYdqy^IUb)fP)PTܝM]0׭;3/xJ%W]cEtSUBFķk -ޙ=9"0-q1.uAL7-^_gm6OOOOK>яT|Z?WG-(f. 1[^L_ afC M}b0OSSry=h&ѣcǎukᓿb-\.K-}h((4"YE zWOO`mR<><417\.g.V \]Bn=>bD c)pa 2h;nj}WEUhLmBaTsS}dؑsԩS!!%%˕tѣ:thNojQsvG氶-NXYE\QX$~O0=n~4sPd&t9N~ 'ųPaX8Dvljb tz^iR 'iYhۦShqw@ D4]^^VPpC{vޝf͚uyqյvsGzpM%3K ɚ5P:RX;^^JMC!RѷW65! ~׎S6q?/0oStÅkYr@L ҬggovP@ "QQQ'N>|x=njsw<#SN۶m{;:蛿-8cgK0W*E ]Dĩy"^-lsI3_^[u\4륡ˏbE:l3'^hPQY@UBl@śMC%c3 Ђ8:a)Z4R (EF [𸸸֭ڵk͛g6/_>'zkTr-|fhQ`^x!vLXPZ/%,h3}U;cPFcbp|a-R#)P l꒦5R-*@ DcaA:.$$$::e˖m۶MNNNMM]fÇtcL0". 5 qKY!EϕNP `لL1IQ_N%-&=ya[$^PT|wlc?jx^XpTJ˻/|-i;}]a -_"$,)?y7S#S,ǫ,ބ2';~mվL-sժU&MHj4w7(?:e 1 8`pMjcaT,LM) BCCfv-Oh Uz{wTnfjK,[` Un4z4bx!ųMȱ\GeMعCPhh}WKXb6Io=}}l:Á?MZ:HXl "˦& 1 5nJlVlVzGtot<;l6:ijݧ^ -4)c'N% ו"{-,u{y @ WZKoǾW#Uk+FG ol6i]/ WMa9~fФ{{t=Cu3GBoE`'@Y)Z4h j)2e{>xYY?Ƭ{oYYy@28Bֺ=T5~ LZf.40~r+@SU#ǖ* FPp6w5kA6p:7*sgYk<-Y }L@ E͍Y Jc-xcbH[ȦW6zz_(Z8e0i4YG- -pB릺aBk)ZԳۛ㗯?3~lWf]:MYZ|7׭º|Вc26 zT=ƏQ㧍_{֮6~@R]ȳxJo]Au湓Vj='}|@ "0Xw{/WzF^ڊY]ѥtDPjҮ3EÍ|qbkkyP,5?>ڣud_sGO}`tz츎 xe"\g ւ77~2{=:G*20dܔĜXz폕% Ok֓U-ͶI-^@RrӠ:U;s`QR[ Ҋ+M@ "3"n67dp@GurV+\.<&K@2*fHc_cȎmynp%fsbGiJjOMYuTw'!->B_v;#E>LecThѠ1"wJo} ^YEwJo{^{Iϩz:mI0G87ik vrUEHSi?ulR63~P^Mut- č7N/ŚfKJ=sݞ.ڹ8=ld$+Si4-T~3Ȧ&='*Z G(Z!7D=9A-^)#ڃq=ThѠ1`fI~("7]uǥ 2-z,,̰fj:D+D/v8a 0B)Z4J (EiHzfi_m $f EO{okEw~[)=ï 3RÚz*} VP,Ti-_ߘ/{u=G7q@4S$:UBAqkQ2,iU)<Ѕ.T_ ߐ'wI Bƾؕ2n(Z8=QG:CŇtp1$_,bW)"νsbc*! zW b. a$!\w{/j|9q 4 "#ĭ<: ~Z﹗.qZC)&wҠnx7U)tVlU>Ehk\C  9OѢFRMEI+vXUtHfV E (9==Z}2ӬiUVT\Q  bLGb -4"#ĭ N5Y@Ǯ}Gcp+,q@B64v蛿Z-lBcQyudP#uՑ5Ӷao՜nAu/ײIXX,z*wE! Lsip3\LTէRMWhC@-C⦂ga?_.y&vm;Oqg~?쫂r0 a$ZΕg9n/M U^n|ގW 9p3,!PV<{!Rg=\_2E|`8> %cް YǾW#ӚMdCm)dYPsKu)Ok QBꈪ?nf%B TD\Ł?[h:.;;@;vP@ MіW;2k!} kk))*Z[}뿪D7a%՟E;v c<χ.?Z䞭YaER-z)ZX8!}J1L]XMsU1l*ZLx_Vo yXZ4h JS@ n^0]ܱ=tq,4зՔVSa]BT|n//am69a%~K(Z,/T{sb_B.hxQ1_5Jւ$wE pa@y}[=Qf]go~>PEfBn'!'/A9i+Jk(Z5-jDޱHӶ|£3$ 0zoEbWUѭEOcMb %aT{.,FKj*SSn6>m`uwܩe/chѠ1@ n-Hpp)Z By qO?=d ]W֑_͍zwFc!)ԠhQ%j&"p =;S_fMm{mC F ݱ I8e!Z<V)Zh=P(JomEjQp-F5RmQ@)2@b,c8LAA,y Iб=sϽ .rvl{;8<`dÛr?vrmZG`!E`6 ^u59;((EF [ $N@Pfp=n@D `ZOwMJoh7Z8v;aF룍!EhL651E~n\LJC65Rä-RtU:?/yQGZD=fDI*s9[ _ _d on?a[#RUdnM+_-0y𰼎v.֥q⪳֓:G׎Ş2p*kbbbQ~@ 4xTTTdd+W;V}7PE iF0o0ယ?ܥhh˷Xt*=*E hwn*ɽ\?8 p\fֹt䱅Jr<^vLyzhRaϲZQ7I\VKs@NXNѩҚ2F UC{{xNr$38c8p~ IDATLKxSP>O;%74 K~~9lc9yy Xq|S-ZJJJšq3UTTQ 蛿~ -.t޿Wzi1p#@-?t~|t|3 1XbKU{ݱ{G^./QӤhc,[,a OMUN,F.)Z궩Zp_B #Dt:q )#+M)=HE>֢KѢͅ\yG:kM;mzEH ףhawxA: Rf Ils0J-CYM*w&$O,QH~Zg)Z4N  )>:KW*Qn/f&V\ae1qwlE"EERԮVoui>k@ 4毖 ĵ>6 8sA7\-uĊ[Y-m˦FxlA:"{Ǥc)J:$/V4J tjv뿉e 5~~7P5lKe@.o*hR*.tQf2BLfKaar$}ōcvb!M#@4 "[ D )ݥu1dZܲGIWl@-!ѩUdƝsjy7Ody-z.\PYj rzIJղ4u-HA'"S8Ơ=FE^|a {{R ˲,˞Y!)y$fg&%ef Og/ቔuh/u*Zwi8)SԎmplDt_Y'WlʦVbB v/Xa}"'8ු۳c6#O jbFf;`DDCYMѢ^U-KCr~~)(ȚqC.=:mC֕ fG9X7; tyYâY߸ok_]w@ ÈBa3E0ٯ ǍK$X`ˁO>!>6~ VP,\igBN?hl C̓Yѐ4毖 h#p-B ݁WF($5waI`Sk"6 ]*q>U{jޫ ~h#q|V,;b &!$2Zn~ob ¤ _nyscnzrp-*+b I8,lBA@uH$a~ d+'EL;W/7w(6[",#GEt\0_l:}"ylL[n^ʑ6[1> nXqhOIU'@sbGC=I?Z֤N~jo;';zT6ţd#*WoBdEd0C-ZdaRB<xī;E⪃ ]_,fxY!*VgFmӬAM[BM}J)(,ULk 24o q KIJod  jkm9~ >Ѯ +2EU HJN߭T)c]e/3Wxۨ{@ 0nt?߲ NP5w蛿~ -zLhK~YaxOA:wj蛺[ij12Ho }\!IϏJv+PU9@]Z= # 1Zj&ţ5Қͭ'΅nbrB*HrB}y=u)2lzr.k1n:櫵{ZDxz|B LɷTf +IO}r~zJ 1LG_3BG2m< Mav9@XPöi1q=uE i qj--==oBdï ȭ̸fbkXX'hQ[MFpPaFB!&h|1r*u/B{wJdYn_GO{9aX݇N8~^sH HM]9q$)37[/$hz0 C$ѱ)nOdg Kֶ͖|+IA_ۙﻧvf&lx1ce(aY]+ *fHVwzXc{:HrSkv~[QLlFX8^lrQӱXʭ8J}oSYxcE7Ww+>-"dޞ+=iqaґ=[AOlNHp?#/Yuc$ 1 \!ez V8hMZ]!eY<ݤ$%%͜9ݠU 0fv|n:.+w&,wN80NJJJueEgkGUWm k>~N* 5R/[E =E{PƩtKQ\B멻2E H=fE (ד~jl+~>VUWz/ٵfZ :C,8>[ - ђˀ֣%4B z'z}aaacG#Gj <<\~\>CBn%d!!!ݻ+,(zZTTܕg^ɿrY_.,,9~&n] &&I黎| <+i" *ϏJ pƂ?`wiB-r@10p# ݋)2%Sw((y?Piqvⵈ J:2߫[u!2]۷ *nN?˷Xto`sNHtDT;#0qıkE~_r!"_zCW7?2{DGEE\xe˖-,,T:4M={6:::""%#-,[XXXTT@Qu7T PD]=/#B`;?#;͢ʊ9eM\qlQS;36<yk#Z+-D^okwҤ qҭsL)}#'vk!y? _{ hjc1"`CUlv x^oپKѽ~jp*7mXKT$Xۤb t2_ Sh!~w!_BʭRhAQTBBj=rVmV$ɏ Kpm pۍ~ڕ| zmH]i_\`kƐ$-E-X'-`w.z)Vj>6̀j\-p(B!V#KͧFZiݤ-2<[B )J Ek׮];$K@ nu5ȑ[i 3ؑ F$چ ҭuI.vդ8ƬQFXׯڕr-Ե>bXCm9)E9Ɲs^glޭa猔kE| kAYQfz.?F!vLX_joU˕=J ZPOt֑A~,J-2@ DJKK߲tAA "^JJ+ܾcoivW]3VU[fWavfe eKQM0֑j>}ǰv ؗ4cϾP}}ȯ[oE BG*˖Wz"Lqcߟܵ褗IGV*ݖxeBEcuJ+j)Z8rr*:b}{'F^ߤCP@ :VXv^:ĥKQ$$n xܙcXx/I;y ;32>z$#Koj9u$Ѱ)šqNyG]fuJnZE3RNگ E {"+Z `HIfH?]|#Y *tlTn[ -Y*-Th@ WP;˯خ\d0<e1|Yvᾞ$JDƼc]Džqc"2XwJ~ 6Eu%[E{ahZU.sOK~"}4xB;FU^&jͰH,԰gް_ױdɯ' L7ۀVV qUGa\x##&W=wjeeMڀ7ZxtoRzb#ٞw\fVP*rT8>huqYۓ:ٵlN2ZPt{wG zKq:*{NGh1k¥. "u(-P5d|Zܔ"z`ڵkul/^r.\֮errr~~~ttdZD4BǶbb .3P8S>1bt/>㑮"QKpvcAkXaH\SYݏ0"<ɿסh)V褔h_r.J9~bC/eLhDP@ 8LnݺnazaE `^4n6 x]4+y|76zbiZƵדe܌Z*B?Ż$(O)-=)RZxscnb s=<ݿ^@A;:T_Xᑮ",GMYDJ_&[@ hnݺuJJJZZZ۷o߶mۖ-[FDDPu3ȍ³iB4֓G F hQXNyPQm3;׭/E id3m-_<ړ,=HIwZ8i[ź 1) ?].ױc922!A@ &B/`=%3֓d2ĀyܳhjҲ2ꕛJFB*s 5h 1P^g ڊJ(l[/j]@@PRE S+C:,#Y]m?kEc i("z = FSOH$cgN;@ -r6=Z "'RUWǂp~~wFE 7h찶G$U5:k>oY,EyɂGW=*q dГ>haX%}Ot>~Jmyu?_О d -0Ӆ=BALi上*op@Z(xKi!Tܕ^@SkTcأEG_%-evY^W-4.,,TY0ڊ쩣̯VK_w=a=[˸ΊӒEb-r[/ϼh!%~aRiBt1E9y`xLGZ '}OסBA#%.ܸš2ˀ֣e'w܈1HQFwEshv<I>xҤ@ {^E!JC~@n~w[ *ULUтxw-+ecۡX,o=|Ero :p18r3Fn&լz|뤸s&6v U($A:a>yhysCA,@ "ƞx/'oŰXsxpwͰR9 h o*nGdJwH1 ξ1FWhJ I??%NaywY^VWaMLц([~Vޛ*vzo_uV.WzX#Ek XE'2+ZOҮ{@ F||uxWx>vjMUhՖcRCqEEnnn5h{ }`o|yZ܊19SS>38r|xX8YB:5_43Yuo4Z Z={AzYq -Vߝ.6X Ru~2f=hʼ9/+'_bO9_F/ #DZ6c4DR*c, .G@ @7^cÌ_׸ -Z+-4>, of!YjA+ZxuVPT|S!ZHyS{wvm.SQt_:_D QU-z{;B`#[_4k8"("&bUdh n*$>>Uxg%zh= t@@ kk}\C˳C+zJ9E`N&t-+#WEw{/zxĄdI2!R|ZƖCKn_S5ȅTJD؀ZW<,rptlPצ" t碽c6F7%$oSde #=K߶X1Ƽƴ%^C2q IFĝSpE #4~/cq^šP5a l&lBjqRśs?Ǯ5ӝZ],vten05uPu2&Xt^mZI*xkR'流v,(| CC:j*Ѧdߴr0f6m#dj ƲB7!2H=hUbwLD/8i瘱8vL5vc/v8\t^14~!UOi1X,.0H o!Q+ZғxV[V9cOl] LM D(VAsZ,) =o;~^QQχuW5JZhA(hlp1 #/p{I }EⲗH7'Q xSbE,oǯw)]J[5Jb*tVhW;>RG"t\}DX$W]0:yAuLB`Qige%mof Vh_Y'CGǃԽ1~h/7*ZXjyحn2R8UP񯍹֖~yMNFz~I ف"*Z}cL:RK|Z8mg{?7,qrm8ZEY;+xY;={@xim@'^(*\P_q})Z8׃u$VҺz}B}ŀ6|;iMhqJƜSӛ{F!GErTlxeDB0`nwSsڏ/-\9`}Q[K1!T+*Z0Dتq)rLyÄ@(Zȳ H/.;(XY BQ0A-Sd]ThJy2A@#@ ;W^.vp?hQRVǟxtjsY- d\& kEz.w1![)>%(ZHGSポ/l, ADŽm^)';,^= g2ȿ*U{ MWht[7˯&[:AAH^gr=TB[BP'r  y@#dO6P$s5>>q۽]CW^[voXlLq_ޞ-S.au%UMCn_i[֬{/!K!q̺DYMY_~QyPo@ /?d,^ &)bjm(:'hEE :#E,~A֩pƩK7="W_]SSawxGHe<ݾs7_%+l [nܸqxh>}# *#MBb4.fi~VU4.$vmǛ+JSn ڦ#6Jpi:_T)Mc _5 5V/Vq;gdlD:5Uem6P,(t#Ed1y;g9kqѩ>)6lؠ}!YCzQG[}4E䞭;&έl%a_Eƥպօz]vjbkm~VWjb7/.`WZ *`N I?&&$$H{x|f99Μ %GK)lnZ%o}籷3Rk|=8`ȌCv z H[ >fTCT9^TVK-8G(P(Fl靲aAa[UV [?mPM\9 di4Ս1Qil Sa>-TlMؘ[M[iσw`Ѵ+@n4FQ/>2Voa:\^_}AA^˾;gHKIuӕ)P}=q/6j̓Kr_ MǩQa}u:WX N*ւQ_*g_/WnGF-ND%H\i"Q S)ѤG̶#ݾϙ ޢT\,y[zRו.2l*ahV]O1SEFyʒH$Y䶣5D)o;&&_,k6F~L!o4TkW4@LyfMu -m<.L kpTjtJ d1;-޷1mTTԵ\dc6yha*ii4& %xp52K8`iNgdT*lķݘmhѾ\`]/D\Ʃc]YV`jr"NT@A$ ]rњZ""$o4*N ǽhW;+çK3VdS[aC G$qS5@ DS߭}ްII2KUrZӏlvCj9bHb[,ɟj榵^r;aHF}W9Ncp@$F1ZՊ BCƋ#?a{zbY"bkwsC' YmZ;D6^%v_ ܂a8)'5RT:0A /=wy"5YߜaG|hC)1A\Zf-,"Ϗg ه=Ra*CWݗ^t\dPdߓG?=zNQfZqEO2 6> '~*sdϢ;BQVG;N\7j$ZPy,2XͩQ?.y1A"7\X3&HLxPMswaY(d&H"%ŚlCP\H˹V~Ϗ0+ƸK5тK.#*Z{nύe7+JIz6 JXx M`h H/H2&Aѡ^ucO [\e80Y/^ sⱨ+{;aMN^n}ݛ'_*˷ψk __)0NiM\3ㅑn5-.b[a4oBt"тdp_ϚfI`@B+O {յ(;{s٤ª/> 7 XHӮmrXJRT7012d7#<]9=߿_XxL+ZPOaٺՇhǓ .lr]&,^'iöc%?QQn 87Dqo!]( HK6 m:uh?__v2z 1SY1&Ju6ųC_(|w7>챨\gŊ)KۦNJ!>e":O'Gv-ǠCྞN|bdyp19ʩQV"+~o=R}C=Y6~@MrUD =:VHfE6` $_A}ʴqp#!VihmNo7BxD kt j#6d0ɹy5杀.02lO^nЉ*'F{?+UaFbfƜi,&T&J?0qHTybNj@$&BF|_/oQ#qp:5uuuR彐! Ee"#8N%pBtZlU&vյ ]թGV>v*M :$X \e|{iҰou0!qZ,M?VK};Ae}+ "~?=`@G?=zyTbEVk|W6ϕM|e['K%u2ՍwVR ˔m.:\M[N 6ӕr.>xr@Ӻ= b Qg#ؔ;CyqMjڤD"㖿z2'٪3yV}_7"0D:21BL@.3rj+OOSUтT5D"2mLL;I%jZ=8 -ҚV ܪ1B|_ǮKd`XYF[x }=\j^тaXQpݴly)|v62P=vqTAAg#t;aME Zn= lմO~65ӆ(1'lzt\T=za1Uj Q lMqtcpYAߪmyrXizՍ!A/ǵ',ߥ"fe\d'܅_*0sDޮh5LDu^e1@&a3v[x~r@K%AY¨`uWײ@p״a}K?ʬh#}^@ˍQ?~R4m..|t~ƥwYТLHm zDѷV(B.#x(%4ZWfQ>A⻍%3:H9"wW\{nv†2j=X +,cp91mq ;xWH$VL+cé84=󲢓6dxM}=\zlpT#t.rڑR\z`lgTh:mNN{Z-*r&%qFŢno7>3437kZ7=DbUԻmjmFcppZ"E|M48Ƹ9 EnkV5׷V4oV4+#ı 1`ASaD̲@Aó,ldO-OX)l,lRWDtHX wi۔hu5I'!\FE'7 @h6TlLJZ?\{VFm[Rk"eTS+ZXFO`.^[( <eV Ui*FڬnRW}RpdGKxNސʢ)bjAۦֲY ̓A/@RrW۬a=6仺yp7t?ӇBC+( #qxهEw 43G R\N$њ ]obyZ2,mUe\hU<]w-ka Or_-Le\L>Xh<.YaVmKQ5!$W n}BҤsFyv<: ݅_%VٕlQ-$[T?]4#uݬuhݻ+Gw,q7z o.8 52x;O '4<ۯr IDAT4}]|PoAsGRAz&R\\,HDnOi2^`0&-`Kr\#5"b߳MA */7ΪWy_dt ?){vg/ʆqM 3N\mV\jz9.,>2F?<ޏ@JwоWn7ka'K?nm3,j_w0lԮ{2EKp=|!>;v_A1ó:̝HMAMuoZdt0;Vm{!Q獄GzId ώ|_[u-7jd|=hTsTG3mJPSδo_Mbo:JkwuqJ0^To VݐʀR͈iWF9eT\9 k$ lk46ʚk[d 3~_ Zl{>$W./9Z,J H^hʩQ6MԚky<E.^n)O}r> UH9Dl4uL  &!n'ŘxS3e~=ri=iAަ.sa1~у}gAn K3 RM6QecoZ=b噗=>P9]9LI"݄!A1nHƘ`XӳA+Z  HO챢]{i{PQ2-϶qgGxZb=Ew6%ZH\9.oM|pr$&ؓha =s6滲/7GaN"Hte3=M*ZTַr7/˴}8,?ovaEVհuyVbBQ#H?VΈ  챢]{iD7b7׽YilUJ,Okab0[ڗٔhs-VX95jB?M{/G̿ĶQEen2F1A wo<瞞{IL"?{hߞ Wճ)ehr>]- O ܯz  |rDYPAu;q.5` ox׳#๲)Z=rTַJQ}Wԑ{R-Å-SL+]NW҉`{ sLD6,ʎEi</...n„ &L@nDG[[AA_cE |];!{/_\dOPhTk?U}Q#٠E2߱O*X?>۵F.ѧ}j5ڟ/ޡա\* OsA챢]{ibIsub%t<>_ ٦j8wު G&@x9h% x\vi `n?Ȣo1wF -,}J{?`o>{.673̍Kf%ޘ:)b:v;SAA1B;dCo|?)ffzq=GJM]βX#]'SJ)I: h8 Ңa܂!B|ݿrl5W(2 <8=Vf>o6qq ЄPG}Viujf~vǹ oU^2î(@Aq+ZU؉Max$'~uFlD E"Ÿ1h i+?$Vd"3ޘiW E+ unZ XElvIuSG?nHE"_sHT}R,vjC}ڼ$O 27?  ,Yb0ZKQAz zz?*v8ܡPՎ"G 7 s7f>OT8ip \Q# $xqEFALcn "{Z XxD/vP y}xmル?lE充_?0*! (rOE2店ݻX癈t:e4.r]]Ty/d|`h@Q/G ~ }}9w/ŋK30`0,|uN'Lt@P5t 3 OWp\u=A|S`z.LPTKj* #E/A.R9(|R7 ң"FAz9(ݯN`lNh8iM#RDBՉA?|q.25 ۶?ݫ H>ѢYT^f V&-h?ocUMA9 ch1y2̵z Ev+L&cf@S F[j.ͯXAro f2nfC)2u4+!;( ؙ^Uq%:hZoMWQ!qSg] R"#LlJ Az$  `]9WIY^in4]T*  \de[bAhkf:ѓ5_3FfuwE OOn"  `B"xlvQu]YYzP8   GCM3SBJuyMݥ  &'%"3z;z#ˆ-)]he qv3g"u)8T.%1CIa6|j4Qd>] EE"QHTtNp~ݯ ,%c"XSjtg.2 ?nu-o)=T{)m"CM"xWT*UeeBPՎ֥ AAANfrXsOFѴh4Fh]dbV[o'qis2AyFw/A;iⴔٿ}|[b ANJ dd$ޒY]gRœF֖ ΍Finnvqqr\^VU*MMM|>Av2i@cڌu境N3@K[JO;iHXkAmYL3%iL)wgƨ B 2!!!n߾Z;GR]]<`ڣNirX's#l6u"]\.WT|>߂LJR(WW) PMQ䦦&s_!_W!w}5Fൟn\i555Z0Y ZCqnT*b\Bp &X,x ûgnG 9 oiskk]&ۧX,IF&Օ"va+aÒ&Yn{87]_hzHnjAaz)<& ӦN4ig烋~wG = JO?ڵъ bt]<8t1_J'ŒO??hRM0mΝVpUm1 Ŷ{~9)NbdrA>$6B蟘E6iqqgd +bvc AT*ծ].^(\]]KHO?!"z&ᣏd2 ~5 J3qv&NH|ɜa[i ƴ~[[`F'8쩕W S W W& D yqn NctkO_YV,OwOڣ6ӿT5&ju}#v r\"1] 8>>:99""9vz; xjz;V$\TP"( ׬;DOk t{SaqZl{tYin2ǼFhKŭcؔXHͥhcFƦ0H9)zRkROkKPb'+g$.k 3 v8E6E;p ~(8~#CדXV⹻?\X.xi7}m^*{-\.(H=u,Nu6eětGPHI\dlZ'e]8`%58{vE^ ~pԉ%F뷋ĕeᲪv@|JxV#[C7b`31`:>tL}p2u.!7nѣ9R]]h;nܸ7n4551̆_ݨCu>Dz=k эO=Nq@7W^|+\huށ`z2JA Q)K $PP"Hsly+%}! ֖ۘ~'FČ'7DZ H!lHH0t,4J0sin1F8lr_vYU.Z&[!Rju}o6X>5=ۺSli?N;N_wl6?^I- U׳gwħ%gW=E(pdž41H(ś X*":Kbї03\ 4mڝwjKg-iUV%"甊3 D\* {\Q[}A[[ @}-Z:TmrlcZZV;st  ͽR-!"Hy]dk8"bn.&%#ZqlQ R;XsªNbLs]W<#GݸB#}FZ-trrЇ|BOyTy敄NnD\RL;n/_ߤ@0 FW]BfϞ}X\UUVccce2J;w,]CAhٍ2IF@{DwEPPPσo<(( ę ֯/ V "!KqٙgtS Rxk5|n3Ρ r"qZ,#b3#tjqv&{9[du;ZIZ}#3"S(bp TbkqDAlҦ8mq/RPG+ gJ CF!K䷮VnIG>gFP,ΖŬ V\rٻ.|Ww3øGg(`} 0o޼oF"|&h,X`z3mўG$TOj5(0??`ksd*;fО`|qj -=d"#4Ӛ\r zeComY1'5#xW/es6.-7$.E(VSĖŧ"aEk~o` bwX;m!uIg]]6뗫WXZ( !Z!\$Rn,50AZW00GWAl7cS̛7oΝAAAW^}O=d讣EuB>0uHNЌD ډҐ =IDAT -9)i[J3WX d***BBB, :ϷND?y\JIoRVr٩jzjt4[[U38ܠWyrr,Ykb M}}g}w\.wܹfcsHNK(KLGY{45sGӡ](J===@V^^^6* XF{ f]L]x\}u\!xZ^:qƐA"X,ZbLInEb8m OV [[A[+L12?zt=ް{87L&sn'G,hBux% M.2˕J~}:>oqnLB0Q*6AKo*\SS#J#ʨVݻgv2;Ě{87JRP8GUrBh]AM &\_l6;22'3C'sd2y<^kkkkkuL&xf! ="É~j<&#8L&Z  4@AAEFAAzY BRYYi% J:h-y@A̞=*tD^D AA1]dAA1]dAA1]dAAɓt\*  fo{u1,}U6}6NHߗ;ڷFc)-}r4i` ="8ZAC5~s0vSĜ.ss 2k1Orʮp2qFW18IL^ڪYHӍ eeߦOL?ڥ65i~2әȩ(盽u+AAĹFքm@5>~[zⷊ[n]X "9FP|k0'Q@3yV1^ذMM{=;O—D7fUZ@޲b65555]d @޲&d.ڗb b@^12jr^,w_|# Ć/y;fUZ^YORA#'φW]Kjjjl*Kfq?zpɩk!Ho]dA'&aƂ/g>o;KP( Eᦱعf_~U xB^oV)X4_BA M9aƂ/䂸` r6qI|98qs箕AŒ%b(& OOo%J̸ZؘO.5T4_$4)ZY^hpxx,QV^53nb`!-"ckftanii͹]X ؏m Ł_euxxk`Ns.:eFXXy]@ʵ1S?۫ҕ9٥ODMּLMF$)© ע P%-;EU1{-|if6[ F}}dV/ ;$ ȃT*ZMd_| JmK3[^dP0TvrrPlK(0rr?\xuP7m5^-g%FZà>ңE~w{>P(,((i6?+ODA~謋lb'9ofO鑁.2lk|РotBA %GcgMM9Z Az$?d/,^j'A{Mh% Ve0VAtln@OCA1GccU\nssVu"݄U@zlvTڝCqn M+{)`;Zn֯fAhaӗ8r ݀K]]G @oerTIENDB`DataLab-1.0.2/doc/images/shots/s_save_to_directory.png000066400000000000000000000236011511411446000227270ustar00rootroot00000000000000PNG  IHDRI'8 pHYs+ IDATx}L[g'qJCȴ7;ɜhr.;&YżM6ٴM,Qme;W1i7HF.h;F&Ιv$CN />clߏ>>9ϡ<>*C tV!U/` XV!U/` XV!U2X;99977'b%Mȯ| dYYYYO?Myމ͛7de1?Eqjjjbbb˖-D ?4A3 XMLnTh4M6-?~ܓ I2X+D)z?==h3VPP077Ȟ?MVG_ǒDHٖeVA**]n~M},IY%ʒ$8ߊsyj NIE%JDRD*IRlN+2,I"攼^R/!K$I~HE~D<9H'i^-ȯJfi ͕M-T ]$yI8OY}"A~%yE"r-]j2xH`}x!q9%-̑4q&;E:I7ju\&Z{7MV_5Yw >]dyvYx: d39O)eZݕ&9W4p]O_]cYkI*|b#"YNX'TIK_$ΐ85R,Wk-A!kSqK58d%]Q"]ѝQQ25(; JGx5mHc-""]ꮗ+֡!]}w9|rUurVlfnII$̐4%a60~#Ǐ٥F|u.^Ŕc#c.3Zz#W)-J~u56B˱X288z'm]Q?O֒z% al84O,I׌}U|;hȎB]mU5D5] GXR.]_6cYkI+j}B< ڙqe(ZFN;1 8'AWd~Y^ܵ0xtg,w؁"]m=H}tt*($rL..ٱkdb^j-Ӵ\b5sDQ& eX}]- NCM}/sC@|+BUH(xh$/IM$yIWފo*Pl)VѱkIdMC_V+#"nb̮NGM'u,,zu* k!?<ӑݻsN";=$H%*),I"gNm,E,۷m۶n+{;%<+9Vot/ /C/_)YYY }cAO$൑Lw֊mQgggONN.sgÇB/&\W /<u{AAĄZ޸q*AܲeK"{HZj://o۶m > B~_* B~p=ۼ^\Ϭ^rssovuzgNLLl޼ +(SSS[lI$p}DQܸqc{+ǜSFU?~WPyA˳qzz:ş~#ozzGA歚(_ R ے όs_#[GYOQn$I#߈ױy9MNAV'X0?`Exi}~ZEJR?%p_$Iwfc $ S/nѴˤקOuR`-Û++|3RI:5ls"8*[bGI9B@HE%ѳ@_?OID(xzo|W%I$HHPg[F=D%`vǹ4E:"I=]O"},IQaH"Iw:GފJWTHEa^ܵ$xȤ3*KI)QDF*(HD $}>.`1ǻΡGě5RJRą7›++JyC o'萘onjj-h*Ϳ z p)Kd +JUhBLK ~姈־{dED5.(OgH,\#O?5T^QaroОF8-R$J($(Jgi]' $$$QTcLz,s&?Y;1 Pk{\h?a "O.<%؈77*wf,sRJ+MfZ |d#D4(xz뛨˿g}sw7ڢ45w{<}nNvu8>Ol8(I$}o\d}XR*&"Rx])^E5t\#t'v+*qwrSJt&Yj}HwyG )Ȟ't8I$A.yKDQQ /|71 }[Mţ !ȎnAڱӛ`?~K}79\<+zFd4.u; 9Q}Dۋf!*h{qEm-з*!fɨ/]/yJPX\c#-2VHwΑU^v)(Nw.IT8>Q+EQ{Y`%3DAG<&$_@vzw>[?)8;vg~ cW}ǵ1 鲘#+r͕eWꆕr""CZ-y|L(Ķ`k~_م(I]#)4kldwIah/^?ZV18ԄJ/x;ƕ!"F3Od ;\+RF5 Xk6Kwy]_h6j_'lt/~x+*CEeם|w_ s`{&QP&EȀ{教{IDI5^ܶ8k#Ց3ɲtm ?c'xseu5s: Zo}EVILr* ǟZz9W_½{vܹCt(Oy?EÑHIJt`ZoCΞ|8vۦ_HyÇ F?+y6lbָڐ/̤DjzƍUa+ [lIdzǧ_JVm۶-w UG` XV!U/` XW7===55pCeX?!755}o8333_cDQDxATׯGa P0ƍ|ɓ'O"?xղA~ʕ+sssoFNN/JZ7nܨZ-X:jxQ~~O~O>d{_zI~~ɉ: zs o?:=Y8bҿ]D ~x[Z?/͏Xk=' IE{"߻wo~~~ٻXwZgn+7x\)?f_J3fF1ڂk+@\l݇77 ɭ4ImFys_z %Wam=VJ.>)I?QڤN!$I2L}Y>d21prZ/K5jȿe6KwCl2)ndhYx: QD+% d]'owan6`1T9N؈77]kr=OoC99JzdYL:*]rqąRݵ;xU-Ջy=~뭷>}g|[oOgoKaUfq0rPԲ!' .:KjO;,6]Om."Ǐ@kjw+OM^,?ﶄ5FҼۍ+a2e饎W+*MVJY,ٰa?aÆL+dʍZw9ʋDb#+B:Bi{19,\Ub,[AⶹXI#+3tz<Oqa2jA\UFD5v\Hzi0‹pZ7/8]P;?::wQWWUGՠt Wi4ݻ"/FG&ۇ";c ޵K}(c׮QKhWs@G$Xky]eMMMԻG}444Aׯ\]]>d?0{v|X?B~%/++k,/Wasss8:~&0B B~_* [n$Ij3??VDŽJ,;ߚ`cPyd XV!U/` XJ Y@-=ehӨU&wOւwOc@[xO.mn_>ΟnH9}}9h;tsenr/]:ohnx9ܷnRތE\ڿ +eMcWi+ǣm!"d|((٦*?sFSƞr.bV_ "rѣrr7Oh#*oVtc-WDDqCBQgnrߺI[w{e^:}qwP6?8o$_g(O55Xې_"Cd6DJz(%MguLtEǕ2ncVz4wyDiOG#.xT#[5 "7"~4OtUK[1lS-s5~ircߏo|XJ7x/&E+c|qĖv> 4mn*|IKtlEEQY[H.YΏѡggRFPSav>|=1.FƐ}CFZ.k}oƮsG0;| EIǟڵ 4=fg%>3Z+y_ XJ]/IS9nď5ް!%En^Yc?˝_J=9Vx Jdo+w~;޺I/n S;m "K\u|)MEUou!X ++E~{}or/."EovϾ.kaA~J*t)Mirc7o-<B`7d+E[i KoG6N8?[7Ǫ.d"FcX +HRݷnؘr|iOY$tKjjR rf o<JoeX H +Fk-amC~O"ZN^T4lgUiᏧs*X_Т~:~;Bn \~k|?pȯYm7/߇۾6/-znrG** ,/c9˹+?ڢ YJo˿/{X% >\>N w7]tx Ͻ[}m r7%;|7l_O-N#[lВGCk?gJVΟ33g>%ahh|.N6y`ʭ쇔;݁=[M㋎᢮^۬MDq MEM7IafZgzoߑH9T??z,dTY{*hRؔv+q,bOԅ]isEoV^1H,A~HR뷕q習m*!DցE(bwd Qrs-Ѭq`5c$~; >k?,"$~;JS<:Mgz"Cm[/sA(͜ [oF>Z]qzѡCDc-勊;t9=z=nRjpaPV!wO\%/m C CJ*V  B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_Rg%q\Yi8 axz>$dbƏچ!]\Yi6}ohf^~/lF毿" l͕Ix&-"xD4x<˜lJO5t[Yj ё{JwWJo/'IDATb#N*ޞ+*j-h4Mٕay$X~B%z*kr%2*f8|EPptYR{ar0[x8XN{Fdqԝ{dks:OpUuwlw9kiiOpw§:hqUqq9G]G\UY,=",/Cp^>3455B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* B~_* z(XmA,OR G` XV!U/` X`Uq?[n?4#f/)P[ӾOSNNN͉ju&GžK׬g~ls"NLLl޼ W8Q&&&lْHUX=}y'votGRs}s?o4ͦMWiuǏ? |`YƞL"NV߾?iFYsssUe h֫ƛR͎HV'8cځrzkYNXˤW(&Zdddm_Xˤ/w k-!ˤ?j2ŤLz~&.2`/?k:mMz-6;eg ukjB*Mɥ-P5YYq .Ȯx!"mPk,;XZsɁ@3+`y˱o\2e[Wx5aY A8vq?F]; #7idED:^H^m_>ePIeKWT:.َB"U_{1dE^N9;v%Ԯ ,4 W;%0,6PЀRwcdrO@ͫR^kS|ew0qzRFDr]^X '-cׄ"WFzblw]]t5Ttױc1/aǮ ][Nw~VRx{G{zF=Q?wΝ;?۶m[p7U/X=gyV{kVVւyeNWcw2٧2݋{j sb}=99Y>MdOqvK49YG4t<3ө[߉OAAĄZ޸q*"A&'''''lْUjxH,Uz>{'͋Wgx)KVyyy۶mK_*klX_* B~_* B~_*{EMIENDB`DataLab-1.0.2/doc/images/shots/s_stats.png000066400000000000000000000262741511411446000203520ustar00rootroot00000000000000PNG  IHDR, pHYs+ IDATxoP[t:OD۝#0d8L]Z8[<ƃCj0j덩jb㔻3dÄ,g7 ơ#:MfbkuIzNf>}p$!d#5Lt7}477'j#eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #e¾v'+r*u_/p׽(#"??-M6jVVVVV[ZTNVg ((F #eˆ2@aD"]&WP[iOhi{ȳҚYJ LY2V< ¢H(SĬp2^@ VǺK_qwǪk\?Fԍ$uPŴ`K#)VQFaTu&-Oy̧]y}r\o8r:"U jD,:xpϥ3D yL`(5> զg2Ì! z],ͬd;#W?+*5v͚]?ZVc2G Kaw$h q,cqVQY ^,>cDšH_22H_2LM|fG-|5󭾦5Bg{|V>蘈h ևGzZqBTHjn]ˈ~yYuo3Sjò<6c$L&dG_>cDrv"W'Ԉ{_,8{_>T԰LUOjywTdp/P"seBhSz_ц'ҡn[tʺ<k--v5:rǐ(sop툴5-^7ZU%#yXrw'>Y4bX }Gz<;,}Du-dc[-mmiW#NP[K~THrD(?L;5ZХ:m[iw)vӟT>:Q莨aY>BB OP1BB ߞ,нPdckt^a)'rL>29m8~]PUQ&'AEɉ|P%@aerb!T PXDoUQ&'AEɉ|P%@aerb!T PXw9ʄ<&d2-[oa-,|"xٕX Wjݗ=cƋ&lj-zfCcLd_6{~VmT&q^k֚34;֚&IL9ڷQ˻QD$q%8p5 \I( ]*QO.MlL-1yNKƢwYh{]vh)ueN[j#h{Kzg?@O'톿?M53t>t+\Q`@d[k7톿²'cMdgol枡s!I\pu;[͑"r-gFWonoU>$Uo~]*`[m'Ŷ'[bDXPo0xBY?=Yr`$p"8bO77Wן\FT0d3h?|S+lu x7k#&;_Mvokf?=Ϫw>eBg{EDG;dpX˫hx\b5H҄ѽ9`[%^bKܜ8j/}wZ4!"WoWEO#fGwóntoDDJO"2sn$.w6U{usEb,"3/o8qHbzrTD=-Z*R*"V&l~Мq&? [ 5>{i懺jj5[k;*JDZT]R/it-8-:- VeC>yb/CY%l#%cDD\␸^!W-GY&LGF[bVKQ;XPdV7hA>YdDqSAD4O˪xء'""ß^sn{hPJF`! EMDd`\_t6/vD8ikܢǣWϏ6љtOں-1#pÖY[XQO3`Ikűdk&>-OنLG5""Y-3}KcճgD?2eYե;RCh엮N,N=j2PKǡL rv"WWmsш>7i|ɓEAb&}>}ꨌX}ᘸjj9v%U$bqˣ2xYǡEOH$~M~q~GMWID9=veNף#% ݁=؆DDr q3k"]ED4TexޜVgTFJ}FMC"Z>K$0qto 4VNc# hշ/"bmƇj4"/㚈Oת۾ zw7 -,`{%BӧiiX/KLW]{#pgνz~aO_|03{Pg~qyYYtjDu?,)F;m^Vջ|i#OjE477w+rϏyLUitKZnhӟG' 5LV:GP^a j'F_^^ۓj||Ϋ_ ^}UGed*rL>ViT.ȉ.(,LN* ( J"xC>291ސ(,LN7* ( J"4wMQ@aoLOOW.・|ÕdpAo ( /?jV/&ˆ2@aD0 PQ((F #eˆ2@aw9ʄ<&d2Z-!~d2RMVYҢoL:O^E4meSEMDou """7\=cXz7e\₧5-ۇI5yOzfRѾZލ""+.oiJzG%WZIzڏGL+h7>^RڏG{7lOS;*y0 DK DRZNe.Rm=-nT?mܘgu_/*Fc!MDs}=Hu}@HD dߝ*J?g>!z3vYNϧ+>g>gH߅Βmhicϔ`kt1Q&䩒d2qkZ-ٜd2LTeŔH=-I';7;T9PwK>{K.Zr`$ RQEWׇdgO~sd[{M̞T=ΞضZƵ6lkMvƶ_X5z{΅D$q5oMv7G~LȕƞE\Ϳ5VH,ui ߊl;|-톿{I/ZdC5璆;2>  wD,pb"H[ׇb{z\,~Z3=?nKSi $ڙn5u{  Ģo_*ݩv_;LW|O6~u*zl_痩@賁ŗC⼫Sc߈ 6I̜T/ܦrrp$p*8 tuEnFٞ}nj1W'hpL:ߖ=ds{}%쥷՛⼿d6s\"KGE7',KDj]mM_1bvt7<6XK7Kf,WK\l(kֶ8T|'R'yJhZXeWW󴙿k;׎ 5C""3ßjmWZoUL'~WL&tv_23I%Y]8%@`dKu&o+")wK |3yl'+\X3$0j\KfnY~R_CoI>_Dļ%ZX_E6U"F}{OၶOH\}֩-%;%;}uiИd.l~/F}#oT-7D!2XÖ6oYAg_; v0o/'R'CrRˈ|c`s&sY*kd᎖4|m57f;{\Xx&:O.P;uLDch (D\kU j$-rih_\w|)yPDD{&G" 0kw}놣%yƵci1 7/+s6<3e9*K?sa[D%m]bhY?s"Yaʒͼ)7\nxe9Kdl(*6{UD$}wMF1P?[_}E}1P>ǎE+y(@zsQ Q&'0 ߥVEjZEDlk}cawaeWZ Ѫ4Ԍ]}x~u&IEj?hk',~VuT '}RO0eOS<n#Ң8ZV;{f? N8̊6;4¬ȚI\%KZ+^ʌ@?kv)ݢE#mCu!b,eH$K;jӰqm͈6=<' "O/9ENچENƍ;dlt&ݨOں-1#e~aجhc-,Ѩ| L\n:I !͹d6\ҨZq,dqkKNʿwRg%60%Rvek0g4Y+©x;Nt"s'[8nO$-b~36]YqyO|';_׿bb9-z98pb~%'l]R]᎖z]U/WUMڝ=hJ/1H>-sEV_TY:Sg_j +#`Ӗ^VWJGWSuy"!5IWZP?^qh 4T.s ~\xmHDD,b Oabf0~M䚿CtCdhiHIJ#\gĵ&x*`֒ƪzl$TY̻O4EDu["b5]&yY$`\]uЁhqӐeGG1%͕}7kDD̹4ӧ) ݥb󯀈0Yo͚#~'y΅ꛫ~[qK co vTDD~X/g|"E~wˡ]}.ED?߷`OWLC"o/w!4p,}:_p~m7QGVVU bIDATCnvIDLsss+oT_u#zHϧ%1ݗvKcjViAm:3b~]wo2dщBB ?j|Zi hy{xd 5LV~|Ϋ_ ^}UGed*̿0:pҷ*Y^@aD-WX2@aD0 PQ((V?T,&+w ʘt ʘ|]P_r]Pd ;2*(67iӦB &0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((F #eˆ2@aD0 PQ((;\gV477W>&&ˆ2@aD0 PQ((vWŋҏ"OChiG}7Rl.]̫(NL0eVa <!3 Vc4C%0?{xn[ާdk[ݍ?{}7x޽,#/n￿/sp2SǚS/m}ڭw_/+++۱cˏynnnnnϭ63wK1M0͏X4Ij(q˖-c{~-oGr9 ͟|Ҽ= dF R2 t Z3v}-ɏV˂Tf&^?@ݻOGy_M٪F2k=fu’gwW5W(Ic;LMMM&9'3ϼyAwR#;gʛDֶoOM@Bcn{@DdqgǙ{RŘ:S|t\3rmߨ}W( Onx*DD~otU?7ek *~m'zO>}ry1օo{><hݺt;v}O0}KxHTWQ#L3A\>Uɴdj?3le2˗?kEɵ}\b` {Sz&l/twgɡ֩?פǛyMO3+eX&O~pD$ַ3C&L`h?iOٝ>HiCck;gDw>뽍E*Z'?KL*,]nʤ[1"rae"kG"b)e/[~t\v=ѻzZbZ7޻KD>&Y7^+,iN;lyT\#lq[Ed3l4>7Ƌq?'Ey@Òw{""c͟5E`ݻ{?ƝgzoCaLysk>3{ kf2@dOnx*DD~o@yxK>xsIy>(Obi2`埼3=0>53&2?4֘?iѧ]qHEx`2@A7l}g\޹eKgLh_xTH-""l* M[װ禹5XeNݔ{I۸L0eˆ2@a< @dbT(` cT((F #eˆ2@aD0 PQ((F F2)gIENDB`DataLab-1.0.2/doc/images/shots/s_view.png000066400000000000000000000230141511411446000201530ustar00rootroot00000000000000PNG  IHDRL:< pHYs+ IDATx}|zt=IO;QD" +kw͓J [yv޵e޻SVNIi!@BES{Bq8,3zhF~U=d|ݩSA4֭[@={Vs@?MMM˗OI ϵ@"UhT-=һ'&&cXIlkM,D5rvlllvv6c#0uǎjɱB,V믏FbZ{+!}2\53d;uުNM&VTTd,xkV밓~C0T{]M/DJ^Wy_YSg0/LՈE"jgStʆ΄lM@d} O+_A@1默Vkg2Jk.Pd$5p Ԓsz7)r? '|yxxXXi @>2ր3quC73=azY`{PW#q z:3F{wgI:a>=apK7q\? yM >VeNbmqϛ6mR:pBv l;azEQT??5uƙMhClg.u lr7& F\?H6nsQH6 rwO]| W e.qak ;v~X_Ctg-6'S Z@JO {o2~zjxqc|8Owk-M;hn;4g?7h?ȟ@P4Lk-kA `}’Jbs冔j 6Jk֛~`0]I@;6J{G §pA; yU-BY<'.EQT38])s7QEQր3$$,D>֓>=4tao]7>rKw" qnղ+ޱag/Wi6<3DQr|7xE@"UhT-=P@"Cjc;0)R'{~f̶mMz& DDU{th7c++O.rOyꑚGnp3DLߍyގ;=~?_yN1nlGkۖm//5hC0$+YmNlAPhXb hZfݹs0?bJ>iMvqCUCGIٛTk6^qw TldMOy y7zħ'2|~oȱ[bO7jDۖz[gy^849b)k81qjD͟zɗ_x5Yu]k7{ǽJ[Ni7uEb%sqk(靋́%tƏz%DTzs籫o}^6io?g6\y}eՕ Kk; M mKtYܝg!Oֈ5u6^ߍ]UyծncW^΍|/ [,|ܶ9.hBaɡڹS3/}wfu//Do4Jݶ\;OW(ctlEET O}Wl_w4Q!ĺFW՘bmZ$k(Isq_Y=6gV8D|cLԗ~h:?u˶JmȲ/|wFR <:گ>gܰEJuw^*wGkw}SELУh"UhT-=P@"Uh٪E!-LD.9 0>_QSUde5V3?FJG!/ѭ32%]}ZD4DUk>dn͜͟ EWh4o[>oV u>2z?:zdP}&:Hl`ٙi]Mǯ?O"dVpo@,2w:6ul@A}]F"_+]pvT] wus-Ȫ5^<aAn5Яøf`3/N_|snLa㱽p8\BC4 I~n kun16|; nGӪÀiZ[ido >VH #1JY}aN`֐"LmX1Olp]u3SpkbG$Wm]"Ȣ@RN5UqOG~:}xd< jZ @)陴 r5@ΉLď$jm.7 "b@Yi1smThn6p2\s+)`<-=L=:svuU qs f@J a zitͦ^o7/d0t[ ex6tOL?BO,)Wّ)Z!6js`]c:k0u1#ǟK;liwԥz%M5f=]Z@7f-;.>kYb:ԥω11jkdEyצms;bѨym3(:"HaW԰fz]44e'1@"C)^R @"UhT-=P@"CJSSSMAd"zĉ.\8۫՜HCVᄏy;w8qb||ѣǏ[z&II"HoX.F̏zMJ7Kt =agoJO1 nj+3;72%?7A?_%[nZ \w3~'^e}(gL7:nO`zNAM;a, XV jO>}1ɤVXmo~'o uڵk 97n";ri[E;~ߊB7L7 g}i&${ɖoNy 8VmybÃ_H덱` B rvOw~yDF+k9dަYJfVjvaLP߼:M0=}.73oˆdf]xx^JCo}wi 4gZm˕¼ړ@GFo>@7y t.h'2oV{S ٩Ķ؁`[૗Tmdtei[S/#6E_yo+k˗\vLHmSY`zJRHVG_1CozG 3y gRBAԽnSNMGh"f̀6hMkӗFWP";'R5{[L'OcϿf_!y N9#7YmdAVhMR@\{Ƈe>qqb1A};jWC?#J'6QЉ %#kZ_eY1ݲ:b@7_'[^ll@{Påd2o-Bs-)Wf[fn@oֽ8aI\Nс#ƒe~y򿟵.׾TÊ'cˋ7r=f@.aP@"UhT-=P-8: خú:Eq RHDU?HH ;M Ar B8;)]k[+u?[ij[L6Q)i^ڹXZEU>/(kYݴ >)GWąːlY\]=P>۞KQ@叝 CS;SC&` *jnZ.._.! W뛑+0I.EhGlϥjZsC\NZb@»"\4rkV+Pѥk-s%O/+#WAWx^\4r}:h$c:5U=G(?uA oJyr%OD謌\b^TyS6!{ңK<8y퉯7|w8ߖciB%Um,ԁc6.+ _6L \, 5G!`} V ZBU=f@.aP@"UhT-=PڡNAd[ÇʦnYLεHd߾}{tUUUUUU:nϞ=D2AՐR}G}tpp' 'J<~oRX-|w{#GXV[(k[1.]GFVow)!Çoݺ5C}zƍG#䊓u@+wn;6)k4D}ň曏?>::ktt?ܵKa()p*t!&ЊWMdj=*\5jkjjvرo߾ ᎎ߿Ν4XL96@Hߕ+9]#WZu]{9pSSSؘh@38@Ǹv8$w] Bi*en7ӕh'']v<ˢ'. NjjjjjjGg.첢Omtz6/>!]kqиx@.УhT-=P@"UhT-=dݯHtr&n2Pˆ~+_UTwNՎ]f MgT2]{&Qg4ΌH6iԻot,3omb'~'q 9,>ə<0==9+fϴ}[~w}d`mdV%c%*iY ?F/ĪWwVTtө[48RpјXslPܮҔnKA0 Y1}ftTatǟH\嚶A<V >##6)Ֆ8䫱X_`2BSk7O,a~>zl> [۶`Z|cI>BR|JjK/Ǯ͡A?>v L m6}\Qtv,)<6;ޖv rNx,dYBtKUhwjYՖ8Vԍ7NYuD]V^<8~Rhew*+gw6|q,:p::5^J㲅dvu>)N7s=._V4M6o(-7PG E4 ZD{j큪Erk*!5'qAr+D{j큪EZD{j큪EZD{jjV*WdGf} X,G@`bbS) FWj#jagX>?zb̦`%KE TѵXWw\% h=u-mQniL%Xs3mL+ )@HL+oXI@}nm(̲沾6x0\q.DםݟTfAOcIX,>ѵx-鱴?)i ]m!nm .@܈kXEg2&aI/,G7 {:R+ H˄bQ \mi.!o(!GݿD30ZD{j큪EZD{j큪EZD{j큪EͰ&ؖ!半ql!e^]KIDAT@ rGE(K@M%gI>t0DQӣkB΀7bL.ܳDm[ѥ} <]Ę\{&۬a0DY04bnYG?@z1&L-5*zt5KDCt˙bL."Bzt1&IbL.[! B@j큪EZD{jQEY:lܸ1sqU: \! UhT-=P@"UhT-=P@"Uh5U˴%JF_qdʊaP-b%P-QWW3Y lqXQ(X,B7r YX Z,=miLͪHW"Y3eUBܘ` XQjhmm/D5+$ ofW.I *N('lL8 y!^i4`8ʕ@-^~qtz,m+P*bam|{ƌ!t^”XJ2aoWGvU>Հ4Ԕ$*VMB,2r|u/NܘFPRd{AWSB ,N}}}xmPqmZ)\.*ry`SY)*n^)!|!|!UhT-=P@"UhT-=P@"UhT-=PPWvy\ftj-|h ^tTƟ8 0r-y!uS4-@ݪhw+f F=FW0ė)&̱>i_niV.dp7U2ZUDM 9V[tvANJx3a}7i!@=@*{tiw ͕AJx=V(ҝXuܶx[ɟ%`uɱBp:=,vwymqۡBt!KNJ6pȩvcOrIG?@ ?Y__M2ҵ BKjȺ/Y^n:]&fp:iJQTsEHnC{GH8P# 7/. uE7[G}!nQz]`oË$2dR]ٰk)Jo " ArEZD{j큪EZD{jrj63e|EnRƪ@n(eZ#S[UʈK0*ӢMᖖv"/..NJJu&ٳgϙ3'Ñ0-; D/ܴ$_tMaT*v{xG}t*&?OyF)(qpZ47QCKC) r>`uؒ~>P8I)ah _&1 a1]~ O<9WYD[+w#FT-[\g>e֫tοˍZ5m" Ax0IuD,6!L}C:>ZZW2mHZWRRgt-~nܸpϝWOfUAoUSYs|S x _ +}2Z\_____QZ\Q=PrϦw_FKZo.-Llz˺{xv֬cfaat?[L02228g=r=g5lk]ck﴾;F⽖l~E|}lޙR?{]j%HmVCB: fa?%ZgpPƏ()+::_}F6iSb2Rɋɋ )e&%/V$/ҍg:-?Oߜ]SF )WEA4ꔰ8_-lyΥf򗞁xIn *SN(x|.xNsXz=Ů7ڿ漢W?ӓtw_]75s}UjfU[tBVucy7lr.b3;8% 57/a9?:S2*_GŶ uV:uiτskUYΎҾ|Ds+2L{Wz挌+LϜ1+HN1ڎZ~|ҝGi_댽tٛ:npw42g ZyQ*\}R/~CХ^}BssϷn6JO{KIwJb=zFZg*FU}'!HbGoÉ7"7Xʷ/_k[6mnn~]_Ni?}{WV|8#u |G|zӖDz USN7 CHU^'  Z[uQa"~h=&-yˉʷh<-d+YHGn%_LNgn')Gmv啄яUJ=ۖ|{DyqF"}{3;ID|Ϲ[u[{""֬Yc|$;]O;΢}WOtIZs#pob'ZZZ9?x-\'_IvUƵMgK {.˗X=n+Y۾lW~,v6y ﷏ _6M7' hp~(6v h~^/g;׽Wnl珛嗊iNĖ(=63-cppK{w9ނI{{{}/+Iџa땉 "Bu?&gۙ3SUfG5Ucf.WZpZ~HSkk.tRUDEM.g`8$Ypg\5Ƿ4qXКZ3}7240~KT$=D4=;sUƵ/["zE@P,Bq*F჻倧vGXD6 T&6"{JJJJJJ䮰t#x4H>}ָskv!Z; Pb-?8k˟z(KbGX#{|?/ "ebb;YGgcPL%=h߉ = =4չ[eЧʖ߿kmZ9Hq A"Rӕ+W/y vnݺ_7JǷj* 8`qϘӧG[ğo8~O=YYYg̘g-YzG-Zf9 7XT? 9uZ喍#FYu•ˆ\p_=TBd$k>|fU}6>ӦM;wnenܸBD f%''YxhhHg-yn_zիOkK۷o߾-Jǃ70Ͽp_WtS*-iR(III6mppп(a$s<:I`1{$B% BQu6 DGF~27I  9C됃: 9C됃: 99hKM4S8'M {jy4{ Qkopzf.V:?Zal!~Z[ Tb;b 1 K4-ɬ/jzg!M,HT*n$[(#U6UL{#yzj8.9\kQ3U>}f,M/nv3wԺ1X/$vOxCggoĻ3;$czN;h FW^zi5n2U6TVl-?~dU:f7dTB Յ$d C4wY%%ZmgRniwQW",n3& :2:x:TW]ZEzk#QO9~{a\ݿ4ZEJ/hgT<~;گLrWyQ?fc}N#m;Dcz#}*/\Py0YRhizUЇʅ;Zv^!w_t*2j5eeUFBu!@75J|8m T.SUN5ҹ;%/Ȟ|& Khi,F3%֒h@wc;WL·kJbN[f)p%_XնU{=WqU:U}au[K履&@Sk4 TU˥*cgky-74w/Ft!Ԋjg{ ˥OF[v#U4[e $`;q"Z@*nHl3pIy">Ul\ ;عT k೨\t)6 zQ7~61)l2yeW f#Yސne<1=XA`rX!uA`rX!u/?L.zӗEKi)Iͫ^?u'=@`AVzzw`pRZJEQlx̿X9,h;}52v_8cjvR<[f$ -l"Xdf$#pٰrAKAS#Uyn朾3:SSP@C(ܕ%DX ")ݢ35e N)=?&KLYvʗqc¼lgNkb@N[VojzJosC{P&I%I5w!'a"K5)$,WB%99a2c51sWFkqj*2KbgM Q̹+'[ϞB";j<RFMd$'ؔ5g~ɛrHKItF'2i)]=4⹦~e42U`&p&|bwOW>x]vr!?;)_ 0A: 9Cp!MMMK)))֭~b9ȊÇ <ӧOd2577^:mO[OچM3g]`ʋx7n 0D}?j=}s|]=?ѿZYXoXLj A]y{s|{s+ojT ;Y;H|_kPVk@jRl D<J{X--矷i9ed4z-#]~H-˜,:92-"}&"R+5pŸym^*r /088Fa1dȺup'9C됃: ׋?::V222r_B?===֭/2:9bV`$qpD" 9C\i(wS5+VS@lB<-T$wnVW6@Dجw yCXJ@x^tRql,~@<&o(.닃GT?gi *N&"f虜|Q8`kUa^2oXRq Յm6[KUty2kx A̓ikM2 ysiZ\XVy>Y0К*rv8}+LDg]L9ހ$&E JWջ[)OzKo>Li;-E·E4=~Ƴ U]DDz1ژ emp 2u9hCObf6jP\tnojlտ@.Wh sieڻG<|lqMS·|SrSy3LI?.nuMIDTXݶ@GFHc4 Z W\SVȝ]jP~ayKbZQXwfKӻr#hا& 6_Tp[P7сT(m\DD-CT6Ty;ǁ7oI X` \M;vNO0F8SƃPċ(ƃ1c`yf Kjj͛Sr "֭p\ C됃: 9bcc###)))љ9ȊX` Y : 9r98I1z( ;+xW~f\AqF˃/"|CL15z(p|Vxkj۪%3Mem-WP]XXfTZy=[:tl <W✚بWY_P6O1 2mLfxݳX|%f36Q_ﻨZ&WUF9BM9o;k_Ι<,W0qN:'4~[E0^QѾ.OЩ폸Ι'G<K̷SENnޮ78voK!;hIWO jt<__bq\U6T Z|N ׫]˭G;;;ϙ,XQaԈƻ@, '$;) ~ IDATpڲ*yw3OZY)|Oj8rjV(V:vұM zUū7wI&Y2Bx[h{{O~5{ʗW`b.W6[m emA\c*pLn퐘W^5[Skl::8䊯N^L{q6 so8|h{<&'OOw櫛wt]mUb\ jmPCu5z Pt YґVCZ@o&"rWyN*6d׶U[t!|xp7uƃzVjFAh4vOE 2\e-Z 44\555Ⱦ<=z{BP(G^ *Onm]nhW;ǃܶݛ_}udl#xkv vȵzsx}m5B\Q_?+++!g2UFU___fffM7;NܝF5+6С5+rw:uê]r%ț6dtwwϞ=v{'L̮8GX>ڞPL EvT%>u(N`_0dE L0B&MBB fŌ3 ͛7cYRSS7oP(ndb`rX!uA`rXM/]4!D s15됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃D9 uwwG:gϞvJQh@ 9C됃: 9;j\iѵᛷGcݖ :gݝ HwwTrJJJFFFbCxW?f=zl~{87P\|yΜ9YYY qў˗/ϟ?_N*z{{,8Ǯn-JuC&ҿwϑ|ڵkiiiQnUD]z֭[ d?kɲXbm[@ E=Q544$gI )p8#-YyğRaB{{[+Z9ygF>aa @T׭>qё*K)Co>rZrnou O|J0?#<8OAX;M>8<&'݃ߐ'V Ɯ'8=;-RaOv~CD r *\ia00B/_z+Z2 EާB_fQu<ۣ{9ڪp'Itm{m4'&j/='0$|zu)<|rJ%~;MvNKj}.ɗ>%KD=QG-Z(b8.!|&'Nۯ6yBBԛ\~ܑTs'֭`tsu@N6;퉂7nYI|խNki6,K7=Zszͩ?n#2YYY/_V*S\v{ru oϛo붌Wjr],;5ظgdd… ===RLMM]hIrX!uA`rX!uA`rX}QиOIENDB`DataLab-1.0.2/doc/images/shots/settings_io.png000066400000000000000000000241741511411446000212160ustar00rootroot00000000000000PNG  IHDR0 pHYs+ IDATx}XT7耈HĘ̀D0kM0!aT:KM1 XSZSMykJ*&Wq5n+lqM$@ӐəEi0#y8rf 0/3>|ϙ-"I#C됃: 9C됃: 9Cb"k|||ttjF#&HbbXV FGGꚘ Zq*C*H$hlP(<@3zM gl6G#7#)$"TjZ_rG9XaBDepp0%%%99$OLL \t)11Q&͞=~9s<;7X֯jܹ'g].LK_k'EJ$\Χa||_|hѢ6Jd2C9hZg|D"c) )Ο?Yzzzfff~%..w\>22BDׯ_[}7NNN6:TCD )D{1Ο??<<hss$"-aL滱L&u)4981&Hb1ƆdG3ܹs,Xy꫰Ƿn}ᣎD\&ZWݽ藿|"}`栬c?eњخ|z垱eu%o2[]lF.we<166z"Z|yAAAl,.F/o+N_*^u>Z1/^M)wtM6h -x981*?U+5}s0Y&+$kd}eWN*Hå-hQ_6+yUmaMj2Q_h}Kc{ӮWA[""Cca@dh,,ll=UsWc…Ґ_F$$UXII l>//rQiy{炮ݎvhgXh IyCϥutDU7+V=(~ ƒ-jB1Ɔ-۷LH(|Bs./9 ڄ^T)z:JiXOl=TXw?rۜy?\vu8GE{GIHH3]>kxd} w?OˤUo<'c,!~'pY]W>:V'&d2u;@DۻKM&t|_m* Moc%'.\8vRz~bz~I ''ߗK=534?7Kc5Jcי[OmG [lk/vؙ M`d2ىwT~~C#kӳgUOC4u~ߚ wvJ@DZ/Wgx;(ኾ^q唻kkgcU嫻rswuLǿLD$BxÐzo^촌TU3Η_~wu>C5qwO畽>}~_͵=m+Gڝ/(4Lϋli{AAɍ/HvT̡5p+fQN6l "%ٕlǷ`ݕ_][?\"F ]3-td$[t] Z>>g <\վ}%#lŎ3Ur3菐<\^N'=t OW)J?}mBnx-oJz~bY~2SuG.7yE[;S^螷 ן]|oB9 9ʤ7nҮ_R,JK%=6~Аμ,?kq"Knbbh˿ߚy?-.Ç^fRR:=1pEp{{Qsp,'nOx8Ÿ5D43j*v2HUy\00arGMP v/^2竌WM gܺ(E?{S3^]2童鋽|jwhd2.zan(H鏿j|ϼϖeg^H5_5|^,.*-?Y^*xMWRTd k&rx[n*\/bll[r'^nmݞg=%O|²RǷ>mڴGq{=Ai߽8uYR-P6!dB=v]ԍe#INJ]/X,Lzy=*}귍r۠?Nsd<êӧG,$IԻhTulU6O67&N&QqGRRqynh,k*½,DH$M6MsEׯ^~Xpv@>_qۅ㤉6oH V^KD RTpahL[knP?1Cw| 5ȗV"H$5?ܕsr,Rh^\Fm^SA5$.2vwgk\HD*Mg]lTt%8\A> .9n.K+jsgB]Z=9N |+֮.AlD8Ŭͩk.l.vPq-a}6[./3s\}AA}} c`I}Uvm5iz-bkr2jn#ul$W_PPUU~ 1tφ^Ϗ^5?㪧bMF#o }a6W_z_]fǏwJ?sCDDm;"}|g̗ksX|\؞WUii۲JqUz6}k*4 \μm:3M+ؗ+;f5JҘ5Zc*Kb癱 ѽ o@TKOOvS[o쿢r Uhz:Id_^!/#"3nf:3j5rҚ`-uIY^V-˹e$N|e%k*hgϛYDDyYG/g#X]nAfmEVODyul{&uYbμ,?s /.U7>lXA:3%6{(m>O)TGR}U=GT`%&/knx[nvnWeג}zmS^Y/`?rfg F GWN]R֙-ZD ]u.U;*yS^]Wk' Agk[ u&!sZs1qb+lyܠ5S>~{.*p춂{mnQ\-r™;rlWQxlp p|ugl'}\µu868|{U+ډ>k؄yݸNoՙ9_ن.lvpt$fSΣmM]Rmw}mu;x@"3zTx{^=b~.=>Z J_CABn*]ʢn^ۙRuj@*i-[^3t:Nv*23d4)́8q{\A:vsWzPΝe%jRVKYLknՒ;2A#~%Q ueƾ{wGw9s+23$諲ksvxys:wK;BN\"aB9j*BkDPR|fSSIMY]j prN~z%G8]4QWsvBkԱ6֋ItRa|\DfTy|~έ̨~9O]^]ZM$N `DXGgD?"T i""LEgF [>N{w}'#<i\,sE D凩 K0>(ls:f7^b_ؠͩv6gbP{F=~ٵ9D}\dģzG?s?,UB~Y% q? 35mVtxέ+k={ .?P5DW0}@Tx h: 9CRz---o"BaÆ r᧟~z֬YKt:ѣG׮]Abo՗Fjoo7!Dnݺ7|3̽,<*K*Z_| M9@BjRm<NJJ`֬Y.Ϋd˫IZѠz:)GѪ[[C"!֮Ν( nu|*Xo%n$"[}^DK;Z83|y,-EH }:@"gyz`Jv A9hOWWmd "楁vğ!f砰ֱ2"Ub|PM;*K}iL0D.DrX!uA`rX󃽽{*9/@Tu19C됃: 9C됃: 9C됃:1"IDAT 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃: 9C됃@P RܹsH% !uA`rX!u}5Z*ꯙF&^z񾾾 $''KQ}}}iiiDdhh( ";r0c^ͽH0_əZ~˗/+燹W!ڵT->hύX5/ҽ%txxXT?a<::HK p9F/juO&u0duδ`pS²+ @p{evqo1L.="c@ '١ g-Ǘ w=Z^)\ۓ/+QA=NlUrv7:jBcm8{±8zpG.yo6ې9|L'\'\vAz:WoX+9uf{|JDtRj$z/'ӣ':{w3=q{WJt-I $DD{a.jwdx>ܕ:{8"Z4fܱlZ0_,{=_0A:3=e0?B#VoX;2 =\oݽ:Mmyj6)r J9 p L9yeϻxk'g@.b4FcZZZ > Wz3dF/5/^buK?~``,͛t'A~0MA`rX!uA`rX!uA`rX?C@"IENDB`DataLab-1.0.2/doc/images/shots/settings_main.png000066400000000000000000000356531511411446000215370ustar00rootroot00000000000000PNG  IHDR0 pHYs+ IDATx|e/oB[* {Pw]{v^-˃*eNA8ՃK,\zW Wܰ{"﮲k .V jK6$Ifm~4ŋW237̤WC Nv qqqqqqqqq.-bAКqBRM4)-- G}pp077WVP\rq 88NVT*vxx{ppH gffE)\8EA"R%! Mv\nHH=6eddhZ! 8wDv\2}|ix=Wo'L>C/`<8ޛnpD>NusW]W2|M"4i`Ca'.䙪_r7~ǽ𩴮V?UsK;V_8#nLO]eYkyim Zoii>'?r*N>:MD-&O/ ]$Neݥ)ХK^{s>}ec_7^ˋ;w-==Vc ׻.~y1=҈Ү_j` cw{=7 *_q9t=ϷznGGG?Xkyiceߙ,H $"?q\ַT鳨R ]?p,iܵlǽo;I W\t0ᓌ7}V赏wd=3U'o409MOZ۹kY5=7_(Z:ϥNAz`OA๶hۉnʇ wݵ(I7d?Zs0 u(fk{s7};jɲW|LM} CD\+Dj5{'[ !˘qeѶe:㺮KGvv/}?c9;L3CCs(cFmko,'n:H =`?O @cضhѶ@F :w-[x{` c{efސ7mFfVvcMt+oڌoef ^sײ@qt8QA^ćȲbU_~n~uw7۹bUtaSmno.}WsirZ+ZY"jm3\.Vհʆ+So bj.vFQL*4RgrŪb:LbUFqW9ٹkٲ]6dggo8L9;9oMAvZ׆z儚b-/ѤsEP4(~ ix75{ai]O?e?2ߴ!c꣏>yXGM3랠m{|mWL eddy[|9e]wsoȞ=n ?p/ `$;;;,i03;fqPG/HGݪ~NYiR_ʲNj0ږN"[6DODˈӚaPvPyrgܒ;-+ovYiYy3nɝ];{i^PnPcֹ}J m; ĶzÞss⁃ջ:;wU{=0-2*z{®NъzOl&:?(bnl=_=OXQUqiߚEZaڷ-Ocu\z?wX?o:aBaootًջ"nB{2 ny?MoXLD\OڀŘ"]K%oբ-.A)rꌵs~uNu̍Mf[5 |W5mƦSg\:wnǟX{6maO^Xp h߃|dǏu0i߃߫Ao ((Yxɱ3؝wtgh=w{M]k󎢙C6? X^f_adOjĄۃ$+ܵ.R’A}fշg1g^2tVâO[O#.·N9ۊn}~G?wYٽyye:e*Bl_<ԝµbyP=ɭpxnJǚ?mi돸\p˞^TAWM]x)ҵDXwI̙}˭7|S8꒙]wbn*3Œ]Sz7sfppt"-[\ zBgPb$//Я]/>~s3?s3]^:N+֜d;#mf|RXA4醜ׯٱ7͚~Ӭ7NϘiN䢒x[CCOoo~ɗmoϺ=7oyYV?Z-a'm[h=ի&6I<q-{?0?Lo,Q}ND\n}J) SJZSj)/ҺW!\fNשS͟dxJA~̻h˙*nN3U3%mRo3J ;8x|͏Tsacw(YVnW)s%+Z^Jz衇*++G;|5D>AxuX2?T?1@d $;ľ0n^XX=aDL6GD*jfμJuY3sr򅢁\q n`|vo@;+W#0:QSX(?""nRI0S쪉0Y49R"CUODFe(]0Zjg̘+W"D] '|>%;,qӧO(?J~\᜖6{3gMFsG Iuww' 0V<'%~ & !!!!!!!!!!M80~O <1+MH㠐DX 0ױ:&'3Duzƻ&C706V"r͝DL ɘƂmw:G`͋vM0;Lщu{~z[[R[Ֆ[O˭,k-/ZL&Q#J/Lt!} 9R|!~-%m*__fAa-8Ef:W+mg-+ ˘/ B&oalI"A5LmQH ϟ>{Te2iqK۶\"bk暚Ƶ!"5k-DDR۶'r[ E;Jku6W\x'9 fYk RõITX4kMk-MPYQI(Լڙ"]썺*ACg)Ԃ"7HuS 팼"6.CDva[To0IpU4^T u7{P&vZU\ڝРmͯ|lChAv޲W|)QIK6W^RR_ksl*J#CD%z}k{җAmjk;KԦ3m*ٺAN]Cn!/%igɭ?%xTL]'!FZc=UbYXB].[UADz8oO/:ۂ/Pr\&4fXkyic%V>DD%9K clә&Bj̾x)3&U5- nXOHMWlS_RZjwHONRSUK]ܩ`f+KdwZvhjO$(,di[Fc%lTRtη]Uȵ9r)]@oC Ö~V%p^T.-S)q1V:Mҥ{kf)7SĿ^*ަ-g_Rl#25[|\ۦWQ bv(B댪=B;^ ÔٮT%p؍{}*ͩJ|uϟOYk3@Dط"F(եߓ@5ш{v-(S>8eJ @l!!!!!!!!ҥߓXoooWWW?H9fƌ X`j3gNFFFcgϞMLuqjs0!edd$Bqqqn|A!3oJRSBc K6bq\k"/yl 744tYg %9FS] GGatZ^nr/];[Z0E/3Ѯٺ2WYf|b6㸺O>DxjߞKҗNeXo])NM WM &>g|wP4lsZ#bWA DBҘA]K}\uV`dʊ<;xP H ,T[*5;"]Kkol2yQQ. Q7\;ASL=أZOb4Ryp_esjM Ķ^~z$lRm-J\Hoim {O4ŚDG3XO=мx#}&7 $xyUOOO}}}a ?~1mDӥn@\1twwO2"0> y@SFHv+bo``@߾?Gf̘\d7 ƴZy.Ԗ|'٭Hm.CCCC_yzeFLxL˪ 'q8W/Ps{L{bNb}]I~y+b{8KTucpB ;V^K '%+)ai1*Vݜ&^LU-mA)d2&ȧuȓ,[[R[Ֆ'7da^Rd %3Ի\. z$\Z^X*Nsz^=r#d3V(4k5[Y"Cբw6#TB ixc̥p3GF*0WןO撤+Rm;F۠'XaH6SEg15[&m'ǜK/^r2?LN&~-եgv&|{n01HCO!=]1oc_{ny$]q0Y~X~?/tttx^0.?!60v.Nm`9.oTѨ`㚎W`8Vkec/IgZ.D)LN:X{#YZ zx}_gC/)-N"A;.w~آ+ TSfxI4?S7ҴPe2/-N$0j_UZf'^?h~ Od0yl2 X~bᝃgt-$T|is2qF-QņzL!6Y?a6(^?X鴙}aP:qF'l_nWJg25ͭl.0-{%+m[\xaʧ.0v?a\~P,^`S#}1( ( ( ( (>ǓVpffVۊxBLm}}}n@\|嗉.Nm q CqqqNqkqiXkHҢ8< 3a18Z.[2zlڵlZ%XZNJTۃS WU9 :rr%obPşod(^.p#C{]㸎Vۉd%亸TI|ǎZ]o0j\fsVH0Kpnt:]MֺT-fQ-A;J'..mhBN=5})SBAg/c;GگDD̊UK J-ֺidtulU Ŀjea.fl8M|gtcjZzKpoZq%g %rnoVKPϗmwàn39zLN*]1E';OP<'1L:!LҬ42D%z_җc1V'κKMV_x1AB˶*phv }_J#wߌ{_X QIDAT]@ذɢ0\| #n$Sh|FF%v(X~74]4E%Y{c\0l8MHh' z.V1BAYvm϶;äW{|:+b{mhIQY>de =c7QfjTiMOI'iLs`[ѶPoiKD'Si j񭘪l.z7DZ*{3ўwVS)@$o'k-_K{kmmY5N6-F_0w vN'q|015{-NMHQaACk Yiv.bw A%T,zd7 ƦNnݺĬ q0Td qqqqϋS}^LxL*5 @8o?5̴+$Q)&#͝\K/͓/uE,c}|ZT!n⽊ELaI u=z3u|n~X2SӜ Cf3.7aun@jHbi86T9i7Qf;a|Q_!(~vrJ ʼn}m\a|jdAi글|Y߈|Lf?˛_;^8TBm4]tU ~v#B#qP:.h\7cUF7 / *r٦~&]PҴ$y&{79t 0r);j's񜵼5t1u_^WbѫG.4]9cA`e -֠4ʅ,/J\.]Pz+7΅.7_=rg"ԸdjKZvmN ?S5ajx(lj0 *c^]oٽ)rd|+d$'3]V'29<@8)ndk]fSymg—&SbOV5Ιì55/lIMtŜ7}k鿛v 1@ !!!!!)ŋ].W3fG.#)$_ÙZV:khh̙3sUS \|̙3sMX(DLm}}}n$—_~)f̘1mڴ7)ju~~xmݖ&f5' *0ۛ[~~JHy<^:UK8<G*uIw5Ysh4׉ 1sui8Ri} FC <}Tj"C*Rsp*UoD*Sq"Rsٓ(Unx1iILuKabQoږu)[H*4nJESsZq}9ٚSywOVO+Ijx8o9qS4 "ѓn(4ȷ[GUfņ:VTy9eًNE;3 i _4|ߐ<oFo}?ſ?iDh\&GO׽8=Cmɋqް0غ*ս/ c~1u\ ^/h+Fq$n<.򸼯yvnvsI&W *!YR5[G/Bv|[YpDUI-[FOjkf\NjK"a7]u@ 5u gFCā;N1l]YY]z_a-nN֕ ߏkuk X$G]SurqWkyu{%ݬ=Fykyv"fӾeuOo_[Nj:Vf))fk/.YbB]v4ITUU_duC1=g.*{wֱlF sB@3"y|;WF~ʩnn#o5y;鎝 b=J؉+dt7Nu}}񩧼̕0qş5unLG=LͩIG/={!Zۿ trނN? jcVZ!.жWqKUN A{P\>az%ğޒ%qB$n [_{žmw^3+V.~;{R)}؉mwHGThۉwv'RǎOwe$`}H>jqo̘C>Rl·VuV_$T$|Bݹd~a#ztm#"^tm'N_ ᎓Gn'\y7Dq5|} ѩ;ẙwtnw+h!帖Q59z-W)%2:^\" f*:yVT|%_zK{"[G(]C/f*:%uOodB4_H[~̊Uη#{Xsؠ`lGt-,N" JW Hmw?}F"fJz9 1+V;мB"n}Kd>} 7Lx"u$))9z4݅otoBJR5$S{7'w^z7If:o'ubՒ%pԿ=F7f^Wtӟ)?+کzv~L믤.xPC/Ӣ-Uz;=Tx!S${@vgPt+'иvguk{uL++y+"_Fƿ`J<)y;G}SPoooFժ~lcq[t5w٫Uoύ׸3=<ڭ/dS,X@Dg1w8ԜGőTNR9NG*JI˞z׏nomHO?t޼ya L<'9`ߌbݳ,e*hɋGaֽ+ cʌ9+Q7.AhBۋ!g& }Ʉ1LjSTn$HZmwDsʕ섭n](deeY֫W&!_SN]nYf9sFN^tܹsRԦR Hs,?9Ԙ)$---''y`͛nttttttttukjj~/W$ zg,m'o DC, >:[&dt-mDLMKrpzK\HJhqlTVtԙ-U 6@ ncf A$< ʕ8[xkx[h0U4ڣIZVPjܼhZh2W4WDcß3"/Zʰ4oItW>nuVbd 67 DT[KDwe CD5[tZ~lҚ zK]i\%U6WB9fڶ-._`ٴZ¬ZZDnS>a5 keTPoi}EIo "oJgׯ_A"|rfffZKk[Jm6W} 3Էl{|nhGG.\=v,Qs'OEgZs CR(J9X|leң+BMZr/ÿlh,i 7 "/Z fC+(+ׯ ;\!sLة"h*) {h1]#NDtl)\Kl]h__|)Ih$DHcrT}5y҉BrDx{-i,Zɶ; ~Ǽ 8L2!+$+Wl}z3%#t(V틣jvS;IX6/7BvgEoŀv;m.pv"`?&b%yx*zXg AGNSYf3&#+tJS\F)ķ]?GyIt񣏆2_.,h{i[ZnYVĞS=O";ٳ ,Hp{O?3gNb.C65C3!_\VOLo @>Vkpr&MNd{ʕ+єs`V~wW9ի̙p x>TwLU&??ŋ&77w vg͚My<'q+qnXM,eʮf:5\gxx>|2hN:gΜ( ҥ|`@@@@@@@@@@?+Q IENDB`DataLab-1.0.2/doc/images/shots/settings_proc.png000066400000000000000000000424471511411446000215550ustar00rootroot00000000000000PNG  IHDR0 pHYs+ IDATx}t0qxi7֍ŝ܄8+Xdnm)jaE,=/$܍΍j؄SRDoh#qF -'c[cfѼI>Ñf<3_?hECCC c HADD"wP;AA zuA: ADDvT]Ν;g9HGsccc ,(.i"W^ED2Ԕ\xΜ9EEE׉IiTfLP)..vZع30dd79s攖SSSccc###hիW-ZTSS#=g'''\r…  $ 7 /B~0o޼lLMM}WYas! V KKK?tM .M\\\\SSF.]J } ^$*1Gѹs窧!]_vJ=qMMML]!Nl3`{FٞZ`裏&I t%L`0 KR28Z|(q(.HEYetbJ0T:T* C+O'Lj\uNΛ(o(ZpMgPߌ4\k***Y ŕ ar/TT׋ddjjW_}ǟ] ~4jܽ+yTn?ytbқK._|*i *̝;wlLm5K)LCG籯O8h _mg~,GJa|tU: ">xskm y`jE%K{SPh"\{o bt/v㵦;$qu-~)g=_yn/ ~ܿ?ʡLU4i.~Z~ST=`gP+)2)LN|}lI?D~c'/]lVWp 7UdF* ٿ'NW9Uf) ,pFEtftE^gM&m'Kx~SOѶ %k6,N!24~lz}ua Y~RL~&td[LKYf,i{f8q.] P4ba~UѹmA:d >](ٿN +&M("B(.*/*/*.2,d== c!X5l'xhɆq$O+)=Dok?JE+Uӑ#˪t+-G?4~ބֺsG@$p6Xٜ>,ibbbb jyjϪU{N $g+kt[7T/\\^Qu /?rz⑑/Ϊ7V/\+/A7m0tI,|"Ȓ&,oMݓi{"vn}~k-IJv q}f~&U/Xe ߲`aE,^|˂e }j| ҞZ(aV8.a&QQcXր~ 7wxh`|k2 w{hAELmH$yMW xq(8Wriǟ8q≻*+kmk9´g׿N#W3kĤᄋɇmW;| ds*.oTVV*S9ӦJ"}_woxܜ}PrP?_9-B^*{d]}?'O5;6|nD-jCؖc>g|}f?o_ A[;˄tLښ~/)vgt}X^kX ĊҎ`8w?o!x7ڒ֖KO:ԭ Zr剾g35'V΍g쁭:7=In;~5pd]\~=A~&UI#75YM7>u`ϳ[O^?qH}WaÏOڄ`o 7s ,^9бvjN܁6Dh*]?O?w=qU{2jVzAyt&[z×+}%]_ZV|Ջ/ݻ?Ҋyz×ݺL]eg'`2 P>n+@/+TUU{~_OWwKo%O5m:}"MMѬ%W+;p$Hӧéֺa# 93%7O+ްtq چ§_LE'dO˾Rw+?kyϪY ̅%)(]\yn}sxZdPI#4+3m(3]+h-^&6&~=Pi((o_8%m;[K_/tpx]Ӧ³yMJK#N)Z1cn~/𢛖.i钛 %OjY=e||ǭ߿qO.vIxIÕ*CSm] Lג+Ouç>No}Z8-2HM?Zs ufv_LV:'`ϩm=K FӪuֿ` }owUUM,iӃyȶm|S|5'>,$??/*|_-)LVw0~US'دOY{4:4[-sզM_ h e [ N"VOp=SRRvڵkצa]&]- OpȪ=N|n|'N/I 8{̯wIe/"?~Dќb_|!<7gs$O^#*.$e$42222044T^^DΤ?ڤLof[*Iy#uJJJ߳#75%Re`hTbBe|: Nqz)..fTLcccۧ \xJW&}5WE0/e_XhѢAI_4tҥKR̅AArұׯe 9s,[?/MPUUuӔ>ysd f;I Oz4 Bx@`AA zuA: ADD"wP;AA zuAS:+!w2BpX< ,8s*z\NCQin; Ʈ0K@$53tLT2DZڎ Hdz]lmЬ^vJ!W02s4g,M{,[k[-C\$Gatb9͹<銙_H;dr9;KolMr-%eZv] mGda>800 }2+e(]pZ :u`?˿@0^agt|L-nC C\Ah0;%ǡ= |l|p.IPCa"jqv{vtIA$A&x̀pz\ިٶ+˖-KK9Y+E9AA{;'_*;XUm02;:(|U_"mf/!^r< j`67p8VKuPTbt 4X3 mO Lkre3{߂ew/"}Amac1v5vg^PArL M?dn%LA>~b.Jqxh ͡~ًdziWN/ikAx)𵛛mBk?ߛbAdd~1ik bv{IomI$Igv;??$ Fŗd\}~و>&\qv/>VM/k{ 1vA_/@v.Hʉ'i%~A-H<)IPD$?wtNO>#H>AA: ADD"wP;AA zuA'×.]JI)0 ŋ+++5 u0׹tKKKhsA\:hE!-P;AAtt[cc[ ZJWn<i!Hs3E%k"pF Aۏv 2#/\|rs|%%%Ǔ>;bgipD3>oxhnqpJ~ ]F{;@ake]->{'`=6fwazacC+b\ 㳷N,6jXi!-\@=Fnәcۏ<u?oOwvx~3OE;C%Dܹsw/Ǥɓ/]WKw$V!hb.V+1CjYr?ħ'mv_@XBmY6sl!-񊤡jYg [l/+X͆"Mt~%EͩIaL+**Lu Ejea&F#'Q0)**fہh4} XWڵzhRD-IavE4npW eͶ5uk_@~H¹/wLIZYrj2YnFD]D!;{ft|[Q>$ TTT<>lE4An2ƭfqemu`!Jjҷ̱v , J0L3xbUCdgmR:ہnpq{CMrO${fECCC)]VSS````ٲeӫXZ#͏&gϞ53bx\#yJ8WڛTy͛I׀')@c4&FDdd|Y+lA:att4Q ֌ mQ:/~v )Aqԅ:TVVs=َA \#wP;AA zuA: ~{ddDl6oܸQ`@u^{~Lʕ+~gdž fyĉ_VzÆ G8E4|;d\-Ӂ822R]]Ld@ fCxr-`l7uxli}*EEuqÎVCΪ7 f 7iEl8ϑmKC&uAEqH0;c{^h-h3lB-pO'Y;Y\+40^ZPA@$12HlhO !3ż2c qU\io(WZZYń:6"!*,|(clCp>u;QRP? >! 2Wd )zy&0X؈L@ұ"=,[Rl6M9fs/"s@ZH~bܵ/f)mHj%m!_ gJݴza(` $CXGL0ϰ̴*X{nt˥KښaP >$z?V.2EXT`]x.pS)j2(0fHPԜ ɴCjuJm Z>?h/YAᝬPC;Y}yk@՘t-FXZ`_~]%+WYhcWsk4YŅtvw9"o }(Cj1`0kH-&Si:!$)Y/N;ҵ)zzz._ld"~Ç+**z!cӎ_dƤѿ8WpT;c $Y~}ggs=';+,++[fMSSi e> H|P/FIuA: ADD"wP;AA z'W~ˏ_xȸtWUy#\~ 3u0|[*9PU>M5 A \:xR474@'{;*RGI>vg/8/6}/TSZh4RF$htغýCwN;pR4@Ѱ{_j};cp< fsN{,1 sMCXZ)IEcV7-N?U%M >ҞQi$e2R7_XTZ!ә fؑ,#o*RFYGqyx؅޾o*3YVO&#1Ӕse~ܴy2Ѭ0FUy|6`] IDAT/ `> H!AA: ADD"wP;AAӄ u0A&4y.VwiU`/3B&4Z4 <#*)!b_-(Ӝ4!22?2a+^iX:^65X26ޜu/tv 3Hm 4!"Ku02Ɨ%6b76OTl4!@Ū#LN坆Oa4 _MY4!"On렬N*L(OHէ A:(44mr4!2 4!,i|/?#r7-6?(y-?rBu0p9zArܾ> yP;AA zuA: ~{ddDl6oܸQ`@u^{~Lʕ+~gdž A>m 'N"6l8zQ #*V&kӨ,p:hvoiNf3bddZ%AYY쒙35Po~O,(Ͷ\]d&$:H{,>>i:՘]`C?<QG2.p/^_rs0ŧG,tV)S}=1gS]м29!T(-߽RRGX,֑5f f x&ad_e$̵#*k7ՑFW0Vu(8X<9A\4:iF~)Ql Hg:|v*Kjz&3­Ƭ=8#t3{ݥҥ^+C  㳷S-d/ L}q<\`vƾV6qE8F_ex9|DIbn3Wu(8:IJ8Ǐf |jE[oDښ8J 7_Ƚ*+ER]RBAz.2(..sm0>pRꗉXI!֋C h#S'Ax O8.9J8$Ǐf)Pw/WWrQvn|aay,ƮpZ$I2U[B(?$uYd9j vVko+ym!W_+zes~n7 h7?$@b|J+W6.pwoNQvjz:uQfԥD WB q\Ahg 0{QgEdؖeZˋF`f`v;^̂>MNOO˗m6Sׯ_?|pEEC=}l:ᣲ+\ЧIG_瞻~toYYٚ5k IFnَI"q>Ͽ/FIAA zuA: ADD"wP;<};$:ۉ ŹNvn4S'=!AEd0!ޡ9o]8#ewl}'43GW'3 2.>X:k88:a@GV,Igof6]i<?  dwGpzn5]_(ebB-P%RhtZlVd)cq?b8ͣKH6BRd5Y3e&},Oh_;kYC̉2dIѰJgu@Kp>9鐙NN:<_ϔ7i] DOy}GT;MtRi1U ml0|&:;!w7d&G:;!0v5wȔ(t De+ O4i뗕C<̎.XrWq%Q2NU1)=&"mfQbu;PD aa|3CP/ R!KNS1xe2 P>*jZ>K_B[fcK~Vbdp]d*pPc|&A) D 3c]z!_v+f8ݣ8<45WFwTTyP)I1)ޒ%۾鹆ް;D 7_:I=#{W&pVz}&t)2J:[Mܺdf7uKsNلTI  L%X*ʗ&HT{,f | 7:9utuUp@9ΉJ,V"׭5S + 'rf1|}rvҞ=2-kp|ނ:}; ُvd4^`z y v" AA zuA: ADD"wP;]]QPsDL\|;5ؐiyNMOq|;W*].5C=7k2.f-rHf ;[:U.0RvW"}VHt bzN 1G $(r+p•D{,rllge$j$`vyi%itxHu5J4@nc=$.IEĤ^IuQrJJVKIw @j0J~cH8"Le;My%;MI`ςɸf:j/t ] z!&5fF(Vi~"}&jGC?xd0EL+Ĉ 0U4楲*(ʵW`ςb DLU~2"R qƌQd([A6@_$ 5Ԓ?;iY6T< REf=dt|\[زvƌQuRUL %mhGV`[Q24c 0gf$-6זY2Z>~9s΍kV!J4Qn>,tO'lt=`:B]&L[$3t-;ËM-~Wm[_ejgaĂ<~|g=A]X8ظeKB~o&>1oH/ 'O 7;V[!=^* zM/*4D1)`EEEV@ |>[怽6_5YgtO'3^Vmh7b{'MS?iMgg;7݋wĤ0" >"d |@8Y㛻y|۶jxvP'+&۶=7?`#LwRKwzSԳxq)ZRim***}g}6"蠱=bQS9jr >5M^U4YGj De]At`. s_w6Otgl 5%f[-U ƶIvR)rS&.cgLE4BCSZZ_УogsYј(4nk| #/@8Wڋ i?cDz3p> lG Z3::j0 烹ŋ}ah Awq6u:sO@BAA zuA: ADD"w@ZAў4 lAAA zuA: ADD"wP;AA8iX,Z#H>a=CQ"M 8;0 ζiPxXx-Bfa/29['o?:GDLc2dS A ,\\JQ -Jۡ 9C޳eˬvuiake+KtvZϴt2 v{vX]&keK`ORnC?7q%&=#,$Qj$VԠdEb j3LAP-nnt2N}iHx!j'R\c:hI^n)EcAA{;'H,fVBk@>.zesf/Y:Z*I%TD{vGF@}BX 4 > 5ʧ(_2d41~0>{/f7wpfw/"}A8T4,vk4LLg9"dRi%v!sC-Yg I (Tb."qxh ͡~WziWN%?ۥ*:wݕJl"Y\Ji}ϩ4S qA|&:HښCw$kv6;lSW z}&-lz./I$TQEk>S- )ĖoL4>Til(ROqڵٹZp> Wr ` ! Λ7ѨzQ{"AAj3AfCzk w} ! uA: ADD"wP;AA zuA: ɿK51pQHuuJ2YؖKy b}^9vh7*7Wmj]L{,Tff͎(wL:{{CZC`e)ڬcWsz+g7Yylz9zA番6L|b(]at  t,a]-Zf @00 Tb]}0)y3 L*jm6 k%Nc}wAT tH#I^Έgr REJҨ lh22?I\:6PC CܰwJGAQGv)2Ahv 9ٿt ĭ)J!2j=!#Ygvp|:f%NVqgm0>F%PP 4%1Lϥa@Q*ik6sr<Jʑ׮<:Bulsz[@8|V[&:dHQٛJ=ӊ\gh p(1Wcąfj=WQ'+5'61Yݓu&>(z BTv Qx[l H&Ev*%dGVPop6=͞$>hJă/yU/1ٰZ0ׯ_WIpʕrdīXs[H$z F)"3 $G 4˔ąU4X7*AQ&Iwci3|f}x衇f[;@W[_瞓YI H28A$"wP;AA zuA: ADDr޺042.UU^7/J$#?_xSC#7iA!H8lr!i:# @Uy⨑1;#%&vLJ`KBHg4x^Qt|Ȇ+'j* 5@d&N`v;Ç ?`1N32=,jH! ª8pڂ>MŮs?}y-?_MaC56e/A5;7 ;!DDmwCIٽ K}Ƴb[̷榽m[DS4r_G0 hZqP:3t>fh|AN9X|yvFFԟyrvcc*! dq;VH7&wM/B{]qGbH?/6YwBh hYg:_3;V87J(m$^ =wuE_.-[_{:#on ૶{D#Bca'usw >co<]·9(im͛C{c6wG{tq= "~َ":3-Ν;wwj|˗/O A3x ^*dhT͈So sQIۻWEy鷟_QwܹZƣW^-//O%%'A1/Ueŏ]U/l{__զEJijjj.^h0,XP/FK.M%='A>= SSَe/5y˼:_m311'\re*l0ϟ|IP;y?G%AA zuA: ADD"wP;AAڭN~XIENDB`DataLab-1.0.2/doc/images/shots/settings_view_common.png000066400000000000000000000267631511411446000231370ustar00rootroot00000000000000PNG  IHDR0 pHYs+ IDATx}\SW?or ȓT[m c--0TnkquNcg>,CXXUGŝ2L}\[izc}FD"&!$!DI|/_s9soB&v 9C됃: 9C됃: 9v` x!D" swwR)!nhvr  V*I$qqppPVzh_888822ҭT*Boo>e2%,A}}} õkbbbFDžr\ۧMf߸)F7ny!M&˃ʋON nH$2LLnQQQ Khh̙#F 0C$ɔ8ŧ`p^F&W GGG8{B8n='(Sٳg/^8js* +FlY8ya:719h@{$ H?!```࣏>jii!x[/^j2G=/e"W.%KgMxʝ9uO[J$"IڻrW>manWx ܔ3f8)0}t߹KtbAt)~ ._ rzw֮]qt}9hNI5gW6'Y8]=!kLDe'(&SU]K@{|Z~Of< F7Wq?H݀H[O{i*i@flOgA9st^\6:;Q@@^l1(t[TsVYvZ*4Vn;|jWHQ@w&7ҮÛKD $sHJ6""Y,54ADK"cMWWWƏ9P AZw7G鉫>gÙ#"" /"m=#\OCK)hq)cGkbhU-ɽiQ3CB9-tzd̏?ծȨ}}7?j.T;"⮞ۿ03~os}*"]~nLr]t 5;\Qr%CLD*Y57 {{/eZΨ3pJlg0Hպ@ w!ď^q[R6"=UPU]DD̕j$rqyv#|n&3've݁t:]%)eʫiW%Xݢ;0a4,PR؛f͍9`4e^qqvS_77Co̻mW_~a Zm_DF8#[S4ڵk^ `cc]pxp ?^vK_@/_ rb"2F$(VMo͇&;h'eoL`G4-N0=: ofv?{fu. ~2bvζF]kYqM#Hx Y3Vsgx03'((1jWWD D _wA,:K1| Y`}QbHabQb;Аx:Gz&fsf͝=Zm:9Nn̲^_obFm#5]KoJ_/~%ݰo֮]n:vNhG=>?( --?sK)u:)n1' ,?ܥ"IR#icUu"7;{'u2`#OF/Oz$4""w$4΅߱ةUTʃf<% Ծ㪪BefrMS\Fê3VFAddڡTm{(?̜ss'h<(Q#6$1Z+ZADw 4Zc ~PUcxH :heV)hKNWiUBQpDW0¦XaueQ4ٚK.]|8?1#|0?I՚r%Y՚n 2O?@}~T\Y,m6.ZC}4B MjjjX8[y #m"ޛ*%"庻^3Y"m CkG cOOOtt2ZvA500pرA zzz= <;\M[OQBU*w>8u\.u8Q7ws'xY=I/unN0Tj0LpzήrW $Q>_ϤRN tRF׋>-j̙3vڨDm:M5`t:_+VjVĨjZpg0:;;;;;] Dn ~~~o+8.< gW: 9C됃: 9C됃:7}Nuu$JCBBd|%L9nǻlrCNꑠh /xGpaq#|֐)uDLZcb7nd Sc ;҉0\ } 6ϲhتnl81;hA`W4ZDiAb4l:Pvu.xȲt+@ޜ_|M?0A&T4΍O=8/Uz~@?008S~1??w̷kNSr|sW Q\4 D$8"¥⊝/mfݡ75ݲ%ӌ=y ]? Xz\kvB-r B!oε=nk˗/sZ'7 ,Y>G ;>Q/5[h[:,lځPyO;b``*e9M?*3=wh~=j^AN*USOu>ȥkSÌ*}#:Y>Ǡ==3_p-f2^iqQ}M tuؓn~lFD$Ih:NDF#I4![&CWWrFgRC5Jݺ{znͫV۷r1(_#jP*ӫTlM꾮y*Q?m;w6i[欏hDqcR$ϏIm/P-]aaRܘpnLLm__+/HLmA 3++3ILGQR\LOM#w|UnvF'3f^=dYljL[/L:Ih4V7!ƍ  JD5pH֑o>T\ܤ)s>M.6JVL4y$ 6k E5:NRҜ#VCs&owzxq=cNs]L;wܹsM١>L?8oDD Seg [+ҫTa* Gh=Zߛe¢~ܰ?hz8ZSU0t؜G}hQ񖟝z7lڸq[: f8ޜRL&"ku%RR,?;Zx5CuJV*ÃBBBtz`Jٹ{W9^/L_-)uZŁcU*"Pr[ynt`o:~a} zm`H<Avi4չ{Wm]Nc Z 6V&U_7Y|xͻġpҧ;;Ey}ŢĆW!ӯNJy>7{キ#>~VtGΕQєj:x5drq<Δmq'\OVR<}#"2 z>7e 6]p:q(wɏ6|h2SNDqqvGE'Aş{CsU =|qQtZӱEAd~O7r㶤mDDM]Q[1j&7 #x0*J_W*%6$rn}A=o'kæX9\[kԩZG=*ro2f4Kɮ%$ɭ.] QL ;w5G,B0顡cٵ}w˭7F)ϘFݽ~wOw\߿9?~E?./.DD9hdu.5Z HͻϏICgPۣxDoSS to}{ c ^t$C7&QUb` d aMɗ;;uy󃊂#G8a#gybO>ǎ D  D2׶O < A/'$#x9ǃXo7abMZcSxr1 s LnO\됃: 9C됃: 9C됃: 9C됃: 9C됃:|/?F905p7sPo79>snxV=w '  ;}j!uA`r&N&c9WU =LNnݺSNmu88nSH%ԑ7Z/KM-1VF-LY+u_>jrC=[oTڕMͥms|[k ;Fp-iM4'x)%-G D̗UrsLQphk`d_}գ>z"|Q2͔֭IT6Bȍ^eYE/ǖmK˗/ϟ?fsΝFg3sZUE"m8X_P Y bLL;*(+**W+mhwCV|ᅡuš#26fBMM}' k[y嗝/K/bMub׳9KozX Ժw__f¦xl]\/KMݴix9aGTX}A(++;yʓ'OFo9_A)qrӒ2?(FZJsD=%))%-:8|$+UvUwbG\OE+x"E&5%QCQkN̴n&owN|z ]M%֭dQ I"{ubϟn5`0J7ѰVu5/g0 g[оb#*%;[^z7x'O|7^z%Lݶ E ""2_ADķ7$"RdN)QVff:ۋ*ٯ1NYoU)8RJ?"e+2'rdT̬$[;tDy\+nO~'?=<=3ͳ/>.fzuu򆯉n⊖oo^V/Hm}ngKX1 rŮV_xYs;OYn!!!/үkqQ  oi V(WfNWI|,jZF#;VZg?_tMbYi|}昛n6($߹.F(tyh1̬o Z++C=@+-TNY|E~OYk)Iin`N;17 IDAT11~'RY(֒?CDDvץEW?-f{aխȷ7/[M.!!!ꫯ!H:YR Kȫщd9F+o7v1I=Q&IsvMjHy5!z߷isE;蠥m`G&۷Qm%" ;JSc9Nd?6Tly~ͽ>lK֣_>o٢Ȳ0r ;_&AaGC%>?%&3$KFGG;)V"WST[[[BB[a—ƞyeOӾ1\}m^^ӗ%66vlujuXXRlbRlWڜMܠn\5O xƃ>9>8VVhZ/93g/Zd/v+ '}n0 : 9C됃:_ ?fϷ X﷿mPP֮CXm)ŘC'466?vDr>íFȼ?1xtWPbΑEFF:)`|]|_73>&f%t]l5{eK۩,GҼh=mgδZڮë7Ga3T4Qs)%-:ʛgVt:]N"u ۃڴjyҡџ3x`fN^Á:`Χ#̥*Y:Ʌ=}Nf۴Dm&)?c8?7 uʚĢL&YleV4Ekl)C[Wl۝cR,"sSm#Qw\dwPV-Y,n>[S=؞?@WWWpp7X4)e59C]r%++<cymk>OϼOB̗n͛D3bŊر0((hٞo'ǃ#ün!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX疽jܐaaa !ƿoA`rX!uA`rX!uA`rXk` =5 0!uA`rX!u`pݰPש+׵Fo V, z5=霓2jZS~~.ErօvިwENkn_tO~1s(1cFttT:l4:::̙JJ=,I䉃WN/' q}xM3nrJxxxTT[5:;;{zzf͚5jInw%ӽ 7ro΁{=])p` \8gw'#\9~7 9>/KM-=r( e9nlqܦ:op6Y5;,5v66qk_\fؙ& _eS1zw!r3JR- bζRubiԲyҶڹ3k77 {6 xz 9|{5+cN(ؙ?eSd A"cZ3k6rO|Y0rgVݦ3ϋ mk?$Dx1ZSIx_MlB]Ѳ"qиp22#,H^n=fz G(% &GѲ5+l+mIh/~+tZVjyj0x6)r3Ji^ݦحduز97 ExݦMuDd a=Ŋ5db&jѳ= ir[ OxgTdoes E%rbOm0xPe_چZζEZVڶo>߳`+/^^VnqܹswqN?p] Cؚ(_j[l"rT:f*wGA[wv+쏟__0hjړk׮RتZq+AuK§pukeG}InHe;::8_e0jZ3g+> ХC x-5=㖰nl388x.awӧϟ?II?' 9C됃: 9C됃: 9^mvIENDB`DataLab-1.0.2/doc/images/shots/settings_view_images.png000066400000000000000000000406021511411446000231000ustar00rootroot00000000000000PNG  IHDR0 pHYs+ IDATx\S?wr /IjmD~H+llQqkuBer#-_w}"'Nv]6vvk;Vmiq;!D$἞>s:Iȋ%$~C!@쐃 vA; r9b w h<DZ{Jq qsL&իWy~||ynRiHHD"t1Z8""b^޾7"  ;S JywGߏ@HHHxxL&ccc###qW^MHH?&i``O?c&22rzٿvnyH wXP#`0d2۵D& i/\0>>maT*9-o note m`裏>I-^XPBb}a<fCW3&#ٛD$d$ilh_ED7BC?׿;s*Ge"o]_̌i|L[xhWD$8>cF%s;6pqC7桌 rdSsuD$aGq ~Y{L gZnJtt-@LLLeER&M$'~{mSG}Ca&=r4&{J(A"Lie3}ǘ+:S#H:)`Qw}G~wՊg?F}?׿͝Y[ˉ+ On_|/8yn`r71vx^_Ǚ't7hqkWF7?QXXؘ4g9RG/Iu;K;>E_T o _m&hVoǶ&O?!y / ]D(2Rɤ'c>PLlEQ ˟&=qN_ix8[5br7744:?n$oZCBnܸcw Ag_r'"nj"IX&&Vrፐ77nr*jV8S/\ݦUVfyëfv/IVQ,(غ:˕ rXB""2:Z2YYkansUGGULZj+_c7] yN vӺdOWg-"bĈȨQ1 ~W'\?ظ[' ""6z-֣O!^Dvk<` zsoݦ/LPj;U~PښL$Xݠ%6^аͼhMXfQQ34*aIJS%TIxd 7:ܮ,?G-o]s}%lO -OEbe>0zǃSП'}N=D^wA- JuKn|ND̕B%.7>BL̈$#2W7-X˩t틲;MZJ WFrZ&iYOeHL _ PdϤDtVpFN33"C5On_rF`빖=Y;(9]֣iȼxrrp۵hSm̴kvǷU?z?8!q {ߛ/*~Mݬ,;M_o0S[LVD-]iΕغ܌] !e›E#Ü$ M&CW\v} w|:!tKHz?-ёsrZ M׿=-K O=nɓݓƃƴG]HǼ.)NiTltX~R'o=f70Aӛwnx(cjd;Kn}eV[?N_vew,NY__ {>3w;K [͇NO'>9*ߑH$=إ Χ7|z[_/)Ev>%ʯ7tdiz/u6C(@Ḅ\l$.)RkVQ\~:.q.JXKB NV[˞LKd9-q- ?[bB|7R ;׾MG}'{6 I$|ICDc*y& nQҶ:Gy,kښKߙz VCY&Anz6Y>_/*&rE UeȪj߯(͐Ɉ(8;2y:dMDTbwSXQXV$kz"9Q~}eTb'w/WvߙR'۩ӧ6ODdSշz;e(3+X/Wئ _nF sFoZ旨ɷO-zPscw#[$LGz$v[+yNZm>N$ʬL]իWX2?sk馃z? oj=D:eO>_o[,C] EqCCS ".[ wk233?O?[&Q1tP̧A}'s 0CBr%Yu)o&BQQ+:;;'/'^0ضs#m"᛺O;~} -|趨I844$=t:7?TF}\K!%5Bo|#5u/"xNN_Io!CDZ&p>}:99yLoftj|{'Whh,Lr$8 W{IR< D>66v ksHHȒ%KΟ?&0wy4M~$X旁Y$S.: ~ !@쐃 vA; r9bCE`0 {;Ϝ J###eD9( ,w/fr 0jh@j&i^YGEEqX H$z~߈hh]9 ?AYL A"y>ư+stAi3|K/>F_V OMGDR!\gU/ ai7+}J_ID3Eo~Ap[ԿzfS%Gr\6r*ʏwdetI|4!kiB҄;nw>'=/}P* ʢ[8% _Yew  mrP۰:a:7;HAׯ0:kqʕ+VX_ ayݶкN/Rc=5rmUjmY;}ޯ|)uee2LV֙rXrZd^f[b.`xYm~K;Z؁f+msWyޮ]ydKuQmV x//^xb^?o¨;\l16>6 +v~XANCIkj]>㈑Q.2 F&SHD3ho eh42bCKqSfvyWچ-OܾRjYpkVrPv5n[}A^>?y&m^pӾݶPxY01/:::::za[[y. 7{M0?y1(zvmKՃ} ǍDW:䙷.t!_;r}DMJQrZ:+j"M/jj?f{5T$ɨ*RT$+k#ʯ2Ӓn[# qK۷)yNX~̽0ٺNbAedV#"J_hEeO&4suwݷP]! ;-u}hTʲ/8jUk 1+o^K8C0m:p~l\mXbI4#Y?Ev:"_JiC+\X,;?܈^2i;nu Dl]f"mw9˪:^[o0S[LVӋ0ׯ =WeF;;kSq_rdxPQۉ2;Z Rb6m6mdiC:.Hq444Z5S#ڡ!oDh+5 }I&OvW-?<_-_x󷪩vV[I3ڜ,m <ߓmQϪo:@WƆ>k,sCaV |䟾]wC:NN=;;'Lܽh?s vA; r9bC!@쐃 vA; r9bC!@쐃 vA;) oȈx#""6l0OOy湮PGYf q1[[Aɓַ܆ -X`ݺuo, p9:צ*Խ<vddd7oCf`Q?^Qcl]LV40A.W&(k3/j+Y e[=rے:-+sjڡ˶غUU[brsmlԮ~f:-',FD(?nr[[M l+˨R CW5EbupKQ~\EYBu-ZZ"Ф7Q[YFJBm+_Q&+ล"PQ}{de[ډ d{5Y5O) g5f2/1awkO5U(HVF__ODY 4/*&Mj*dTuttk]V]zG^>(ʏ|w zȪiq1u뻄p_o0 E-i Mu\uRn6 A)rPzU7w+ ֓yUr*r:j"bXzCWM]ɶ۶eٺmQGC6ZuZ OZ̉A&`GU@~}WH8TU_'ɯoQVe_)ء4[ED2/h^v Qrݶ,9F(QT$ r\7JvU^ԙ{G-OTLȽ EDq o@DDsdppsa\N\غʹWԎ9r傂"qơC"##yth" q}k֬9p?vT8o޼￿p; 19A7 r9bfDaxxd2f(8 IDAT21C}qqq?[yrCs*k;)>;+jV._A8eN+fZR CYzjCb^MVZR+j""ȟRUt@ߛi͍r.evM)<'ӹSNӇ\~Qs]/*n*dEݯCD)嫻 \ UeOS<~`>8#Ḹ889#A@< 6A; rN|9Ù}b2wBu}.]S{ Q0G[k}_ohQVmɋ޲Jq dT\L9EB$Nakh9êVI$*Us<$1fZtu6a1[*C5Z')l +YYZ1K5ܲ\%غܺ2zղ:V輭;Zlӹ;.Y,;ܯVY~7O~H摕+9Ȫi}m65YY5]rmYFEXSTf94 eغ"jM'l#ТMetwov:Ф5Z6^MSUEvڬs=\ng^-&+j*Qp;"E:u)R97As m^My(XҦHQR0Q~}}>n&auVDa۫&tUN"SrZDMY:c1gvܳl}y0r09mBpd)ț t_o0 E-;h^nUebLMm`67[;cf1|˗VsPQl95XFnP0|%ʯ7tdiz`ˑCkvM :R(Tr{HLD 3-Ze:\'󊚈=wg!mL5{#t|oMnLFDYa|GH֔Uu˲[ DDU*" Yv(ej[kDDv]UOДj"ʪj]f=[oY[$k"ʪ'!~;Pjղ%e|m7++|/Vdppsa\N\@td-Ejpݽëme&kz>>>&+̬>l?:.::¼)q}d}[Z Ak{"MޛAƃsƃ0Ye>H ܏zv횿;`O6O"lٲ߽\44 r9bCfFc__`kԢCCCAxy\P_12LϟOJJ ('&&&$$ 6T*^^,߽p$"a% ڕo} ccؘh4檬',$98KΞco*-NFXԨr.- !}X̧͒LL2K\4݇_=TV2 0Lz*'G~΁]%׮%J[F]XͶ}+Qi\v_0!!cK 5=qϭ&/ܜխ%gh훝mq,|kFD/&ˏ!wh0]sBAD*')m ^ )NEʼnnd67곹b´a<8KׯϓѸTJD@yaD$5&iAQqVea# uije;)d&Gmb'O6VWZZ`U999 Լ1a4:5q=5nԪK-}pa7۵u6] O~R)U>o8om./D&,qckS%&o˪q~=LHlg)H]zv'ql8QRAcOmvvmq'*8!Z5͵vM~k-SϪX"sJeЙl"r=w9,H}xOZЖUmѪ<{}_=eek eV'l ^yvag}\w|e[-h^0 ddtCCƯ=„L(?6śB W# IlowX{H;E5 eng{5ٵUW[5E2j NoNS*PSra¶n+ldκޤӱe͛Wfrp6p766VՏrB^_yLʓgJV҅˱}5a}WdžUc?@ϝmw-{UjRlXc4rǭ=<ՠwJPP+=; 7/d lyH$_8¥Ȅ. D ɲd_w#6:zJ "Ex71ϛeb[bpCkKqM=Ś å1ȪJU,QA#Sî;eGHA[ -lvdh=`hN B?AΆ;培u[ɩCAK w_9zzY /}`P2|aQS)tsـHQSi2c%Kzj޵q*hl,Jlɺ'iFRB&l_KlמraJn [w:rdCk)+-W./&x/`H= t:<;{]w506w/yx'yiNwS.eaE;}tzzth" [&sf|p¶lw/|I]r"<,h90 q n9l 9ߝ6xȋALMt>暫WFEM.Zʕ+:.KqDŁCCCXx!!!)))59 BQhhhzztL 9bC!@쐃 vAh3 -***11ߣvf4ϟ?/˓RO,400pBNbbbBBB`nJr<>>}qEp"lK]3I% `Br`0\LDj$I)r?p~no>I `B-G 0ER:]O?G0uIۅ IHEɦB;A v^ks&,[XU829}!h'8?nt` IBY`^b#}(DXUNjiJM8q}x0(.xA2Ŭ6ù"Ei}l'? EC$V2Rʡ V:tِm0}=>Rj^Pv, `U999eܴ}>ʱT'u)Kwo!`P$.)n_Htu>"3rr>';}4N8p`eU+q\ _]q'ˆH]jS yk+ϮyV)*Ns5Q&}LaMh@Β=׭dg쑷/:_YyH$ ]?A[}TWC{0{,%J)*VXճDPLp(!4ٵ<2wz6J,ݜ*GWQv:KDAZ}#ݹDv^ڒ:dm#Q=rz ha<$nhW~M1"&H"# CD4?G$_q7k{8k-vъЬ 9;wU7tS&I=ute<_da𞒵ZK9fF?|Ro V*>e ҌUXF6[{9Ԕʩ )GX-{+Mk{7y:VSXAF !}X~]hB=/h29*vv_BŋWz E1?^\-<0)DDL,KyQ{e*SID]#d ۫={=%kTYP+XHI{HqBB8U8qKaҳ-r$eD][em25U9>PCv^ڒ:dm#Qsz!a<$/I^TB8?ZBv#ICN4rǭ=8-N̻*Vz`CҶZMS^-sX>d}}X }2yF "En>4cU*^$khG;5%rº;?!Ec05BDD*NRau\wDZ?UB8rҗ'r0(qxUVSX#}E U /l_@~g.EΒ= s$ʡ+.VPo–'inåm*+SsT\qb͆lKNw@ z.1<<,=t xvٻkI.G?u*g#W||ә\EGGQXX7&sf\' N&' ST*wr99(|9BA#盋<`'n6C2L%&&# @PzjTT{I-ZtN%8|r{? MJJbY?yK ` MII I(rBCCӧs`\ _A; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@쐃 vA; r9bC!@B|ҊNI;9=F96F@쐃 vA; r9bC!@쐃 v^]ns9(6yr7 C!@쐃 vA; oc.]8}xme~:CqN766f2ͅ]X`AHWpv}O?Ă?f5?H( n\..LEyY@yЕbwG|MV[ܮ|rlll||,jF z뭓 #7;߽U N'Z;22;r|ll̛A7ᰓpӉ?t01 ιf, $VbgeSAêr gӮ.eTNԺ_AYªrRlT)p┰Z9ˎ B PTR iAcO-8b Bui ='{һa䛣b^UӐ6,Uיa `{5ǜ"E~сL!cG+S\z8a֨+ϮyVʱ # ԥgw Oz68IvP[0ϫ ӗ. %*aи,=*0ОBJje7,A EvL$ӗQ5=LB"S=^6]k9yq{90; jv.M$eEZMl󁂪ZLETMDn)l 3vOg0K'z('r' Xg %9JI+( %#ivIAEZkVk{tmpg l{{γvՅ g+IDATY,8}ҥK'-b; pQOKҹ7S{pvWB~5M6,,LffիW#"")$}my'75޹zw௛&*#78NtEySIܸtmG>9r*2]1]E7[r{qŋeabbb.]$ALr9bC!@쐃 vA; r9b7+IENDB`DataLab-1.0.2/doc/images/shots/settings_view_results.png000066400000000000000000000323431511411446000233370ustar00rootroot00000000000000PNG  IHDR0 pHYs+ IDATx{Xם7$@_ĉƘ&iQl7 A/mc4MSd znv%v6Na6m{u.-g$do n,|??љ3猤Ό&Ot 9C됃: 9C됃: 9KIt`E1 fd2YZZZJ ^k jhh(//O.9/"c!Ȉ(anryJJL&GFFvА-1gΜ{ #c[D7$I!'@.t:ݐ$%T*}a#""uŹs>-n N:P(233o={vhfQ/_$D7a.OAHKKS*adJRJ3g,X ???la\^PPr… "ַwQg|L&c^(p\iii(J,tF/\PPvY()μFDkML̼U&cͅ ךO\_.5zDDy`G?׽}wk׼?7^~ROWg Ixrxvq_ Qʕ+& )ct5Qt*Κ/rƕ͏Myg^s ?Tq|wښVl9,./bmԅ<"QBirIF -h,MK"ܾԙϗC_ O:AWraG \E%UFwyMj;;'?%y/ݻK5ɯzkI~|𪎺u=ý Gaܾ뚻zX N?ɕ}r+Ud]$aՃ65{oCuo6%zOкjDx {Jjk版l=TYR#OKR#]IDZ@woJe90o2X,b'?)+oX*FFF]@@W}II}W@z^j+k-+\Ș='^FfV[ۓr{?pvN|n5sI22fnkk.ZG{ѾѕO %c~֤y@ik>|y䗷;wD(ױs PU7H:NfγN:fuޙ5Iҗ$ӗҗ"җҗq{l[:yz$2`B:lֻ=Gy~J*7oщ>~]ef/.\t쬜w/ k}?G?ʊtWx0gvrPqT3D8}W^;nyxzuDѳ ]6GKW:V;@[l#[zJw?lVHpgЛM|dg-^5gygY:o9[:o9y3[KTZQb=Ut'o!5W{pYY-UMdn|Ͼ_}}}b?卷ZOF]hu^^ ԢS֘MMm(`k!ko⍥:kCk-S^aԴD]C"DQTEǾזTBm_=Y'}獿?kyc߰? f{x9Z#'{Bܮoˮ!"#)隷|[&Ri'U ؈H6pJqm*^(EGi,Zo"*$eJG+CAF&?|xz@9p .gh5ۅ-oY{o?ZRHd˾ME{ɳv\v9mYE{卍DmOxB, v?쳆<~埞""9[ޜ_?䷿ߛzmj]e:m 4Fԑ]o,-n:9'!If{EGk?R424\eͿ̗óEE";%-G^rv\g6n,ottU6 `xD06Ng(w}wzNO4*xB2+ DD;b4zڭjT³fHl!"Ih SݪW-'* 6u{Az%w &Qq+n-L&{~눨X]R[~+TĊuwQWGkWM7]/QS|ĵnEoLdΓD]>M)oNحTtQtЈ,E+_c/qկ~uٲ_DC^c eddlo{T1{3Z'fzXga,H''չ7r~1!eV8c Hyt~? G)344$R͋Rŋcgj($!888888(`ܹsvn;s\gϞ={lWr0 Ӈ\^t✒x? MB{78O؟Le` sn|9 WuA`rX!uA`rX!ubiAp:j4Le, !aq:sIt+΅ W)n98M߄HtME▃N3+++%3Lp8f3MI%2sܧ?SιEžEx5JrvO$"QYx;e5 ˽WYŹ{[Ny|B wOFN3>'y?_Ȉ.\vۊ/T˯Ȩn|iJI|F BO|~m. "xz?1lJdu)o;vݴJZAc' o\O:,R')) A~W9J{oɖ}^JJ<7<[MҰS6 <3UN/_>^!'߮7:u~cS mlŖÞ{<)ӖuYX\Gνz7O#= i^}RBg9c^2;6 >6(ޝۻަZ;I-pY?,iՈOid_$LQKk2V\THo.QڦMDT[~xyF n =Gڜ_ʕWsgGܸس~ڨ5-ƌ޺&(L&OgIR|~y/e̺5C w9|'WK$HWv~bkM֩?-ڷvRp݌.N?g,}odF^Ep枟E޿9v]|*6v{e/\.W{DZ<`4HArwm8pA`rXb.݈}^d3}[>.tA ;@B}Bs}W$ >΋uA`rX!uA`rX!uA`rX!uA`rX!uA`dt݉n0gdd$##CT&!Av9μDu̙A #AH Q? 9C됃R#VMJ[4(1g@($]ګW}eq=m0۬Mr51U2ٚk%Qe]Si*9HEJjkȼàR4d )Reci獥55JRYclTc=⣖ ߩw dpRKhrUP, jT;GCd=[ZRgnӛ⇿ZYj ߨ "Jk/*9Hڭj3ofm\Yv ڰLmn 3ƪ[E`ҷH-fʠ6yc#"G'-{J[TFWc&sMqVLwe[[:km5ŞB Vݨ2~cEu]0$EW)+yY|{ų\#`Rb9 !*Xc䉴MBw{<\02Z4w-3\j$ߊoo#WHO#t$I\E%mf$ig DD:.bZ0]%,p[b4z\ԑIiM&eqMawQZJʀi!}[EdnCzP5u{wht JEJoM&0 $,TI7[ڊc(~窥$G7$ 2hKbUİ`E/t:  XZwG~~~[&DK18/HMHbt9ΖaK$3mktdLjCl'{ωg@ PQIsM""Pm,mw>iwan;*R렺Aђ8WU,VHk5J-dRvG=D+jam&۷7 Z{'ZodEmzX,5j(D֘wZA"Z*{tK⮥˭K=mxI14'^tD)`ۣp8 `g}6᧟n&X\&y1@ uAv<@.OII`JdffK.%! 6$~AvdD hh A`rX!uA`rX2|o`8܌Wo~r f> }o/to܌]2Hq^eK1J(%ao:6G;?cdI0'WhZ {:Rf$xUInu\J>c‡D}itW^soZifNҐ )dQ+BgmVeX )7f"1W;*hv9hgK39fH4Z4E*" wi=[:k߳vi~Z=e:}N9P!S?sjKooSd&"[I${ \GSm6ޙBˇ i`Ut ބݪo1̦րr@Mݞ wpLAXzSV-'*HoMW8/ߛgB^&܌z5D޹GGM>42k**5-&3iuzk/Onsd&+(846UBe¶0A.f2K10cLdNgAŤ<MKwxS=?nc6 ;zlfHUTZMf[Z7<&&0NџNOW)cp#9(6 &B)tޠiGA88nf~!xYjmMUTҶm J2(̖ <47v>jyP-mt [YFNI#9rM V{n/J*Jeq[ek흵zԣދڭ]YvS&c\zAr3R|E(7c7J1*nl {$ j4 BK+kQEЖ{ c~hom2yB?͢(yHWTjxrf2پOq2w]7K=aQt ]፥UԚ̟Y K#:k__2 E7 ̄ yAU!80i&> A`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!uA`rX!u)qnǥξJ%9v$ 됃: 9C됃: 9C됃?39Qmt\SDA`rX!uA`rXf\_xAw,rQʌ!{&t9##cΜ9))1Er K>>ϙݿy+qߟ) GFFN>}5Ӿn… O^pa,Q(뛂fL#=_4ne^O}߾&ΝϟVMgϟ?̒>nޒV٦Us?;ށܩl((($r p:$7]qIvOvp:R(1^i6x! );WOɮS߹ZyQ('_ӱA)\$ԏ-5w^k~dE8!Պ8905Oo<ONa#˞~?+|bwN3HА?|=p:BL z}W>DDOM$?H]rnoC;ѡ>kiÿ<;WOV?I {{SAD;Dmku57- ]ܭ5Y{y"}A4.v# a$k_6Y!;AL P}L$oZJDwϦ'mN$ zl1VuvSkj/"Fa;=?kdcpmzzuT_ vzl?y w}9c&4`qjwcz1i}7*}X%~y}. ?p zn~n~g XtMnE)~A׆O>曧=S_dɘp^ CI͈_ 7m"r\>f*GA`7MD"~{ΊtoZZnL/fddRk'+Β?tK A7 ASE(?6-%%%D[,luBrjʟ~Kڢ>O> 9lܹ$I ^,bS(^(!FGG?@II׾d}' ?#A?~ŋq74k&2>44Q̃?$ǒ{I'il_}+ms-!m 2F"Nb$b<3n{ޗ}5.[;?>ä?D$ $!F>Q/& /6|+eóÿF''>jx|ə7=@PvXCcl*#K׽Ycq%AքSaľkY1]Y@ge0SfVxhj]SVSSb[MFw w/70|_%ЮLP )L(L’i)BkW^HTFե.Hd/(s,ҪEظ;TZHL<Ѧő]KK>#wVZzF{Y3rg߸:#w۷a_v]3rgMw_Ժ,ioqG<'@dWyP?6흯wD v9?v}b-k5Z-km]-ZϾgǬ?bFt3Mj\1EDj!JcĹZDZj^gnwrq׾qNZ9 $N(*ȿkg>7ރ'$?sqcE]'Ox⒅Ү^tmBDZ)QKu4MӴN7TW _BYrdÞ沲nT%&{J6u{;njְ_Թ1?oc\wS7aA关_O~a..y;?~x =N6>cRXHJM)Q--ru|SO2yO>cYrRQ]֦3c M] TXSx}uU'+\tIz+n޲g>t~;S &ÁSHO b]@}k]A_?icYFW@| ۗ?XoǩҦ]p^=qVJ?ť`S#_7ld˓ 'Mh!̶m6N_JOyyjMs6VW&LiӮJ|S:4n E oQcW7 ,u6 rss Co/y'5SΌݯ{3re>]t;M'o0$%zWxJ2|ʽ{nά9Vv7츏#j5 ~+E?Nqx};+*Ϙ1:w& f{4{g =S!w!bh?3gfܜ~+)xic/=G:J>Z>[;V8ϠYΏ cODa͟wϽod.#wV>j} ]>#wN5=#ؙ;aX,U!L9A|;߹G|͖k~;x㏂yPjҭ죴*- o{ˌ}҆ҷwcʪpF-չ*I%P^SZ"4 gϸsήW,3gϙ9{s%N:SZ~%FGG~;w͜_tv~'/j̹_˪D>'|c gygvϹۆiݚO? NJʽkfJ;xpYѻ߲#ߙ}>Y[F4ȼ{2_ 0p8G~3 s_Q֭o Xz;xY뀡>"JjV*A~p~FGGO<9F$1"Аgu I_׊~!d|}n߾2000f2x tqc73tOfF=VDJNN~PH{˯yO0HdقLx.\;9HD{&hNMM 2fddD"1ͳf 2͛!Dmz\"Ph{#XaVϜ9l6fEfzիW< B(.:22r礤y]p?͛b8;;OS$_^'w^uGh2ċAaD AaD AaD AaD A 4mZ퀓D"Qzz${"$$BσVuƌ|G;7nݾsMשQu$~pM? (f2 ̼ˇ2pFǝO?=K(0W?7?E)nH,۷q˯/ !F;?tOؘ%HHWV?*))vM&Ah<8>7 OϬd^|Y<<\IIu4:2d18' Y$NZv-&zo~-Kٸf5aF`*  Ns%i֭JR 9Die2- Y,)3k vg/|~񋽫>Б?`4e`=8>7j8OOX̛7O4H$)ޫQZY ʚ{:zY l c  Y2o/|<;)]L%sqRR> !1ϣ ' z> `rv;D0fb#0.]GGx^4>1̃nma~ˎlzm1gϞef_~OIIb$R3a{ӎ)9_fa_ES$duLo:@?ݼi0̑[}˜ŢӿҜO0kM@iS3&D^Ժ,io쇎#p>}ܹs%-igg\1IߋB]ǶV&qi)J+i*nC<]ˣplukh D"r/G1<*Iyn*-mN$_EniS7ԁbMxTQ lvd?>]~29#uҦefffff6MKOOtGFӦ$Wֶ)Š*QKu4MtOsKݫium[6uR(mcUuѯл]}%C{SR|AwdXƲVx-▹pc|DNz擋Gnj]1Z7:icTv9$ N-"+#oZbX<~JN)e_>xp6V5c݈,(zۥ>a:;+w-y M4Iܳ!g,k~^9Թ$ˌO># Ц \awhږ$' ݞy[̈ ƞ,SQ;8(XIsT pd8KV1d':ziq>$"_--G冸)*V_7&LiӮJ|S:4CS|(.--p[FwQv;3'b}b+;Y1#oiJ3<_ `ۣ2EJ+ *D ::fTfkZ?{8?-ttgYZb ?D:8 MU`߲rǎ(_M>|ps38Xo+ڴ8cZ_ S>EAĤ':`ڞ;¶_}}nSRZG WvC+V*- o{˜Ubd0 qǟ|)}XWfH$t$9d&M1Mxۭ3H=H rj8VE h, "6+`۹#'ڤaZ]5듟at_?|yCc'?iϻ{RQmTr4Jګ8.#oI%ruj CjzeX}ƈHJ3wS~ѐi`[{/:]PLofz+kw1D0ʪ^#~SV@KwS*V쇧ل2KLc_睝bt\h7,[,"V@eewcJ01-)I$*"ߺ g7Oo:~)oOdoUöſYP:'*~{fOu [bkiݾ0:ǿ9ݹP,aD!9?!<:̃!<:̃!<:̃!<:̃!<:̃!<:̃!<:̃!<:̃!<:ۉBZv(166&Hy`ZsrrM5W\<(Q40 w.BBy!$tBB8yРH$De5dZj/E&bQ$e ΠR{h[a(E01s__zUyLM`h٨ >#H mlld*P5/aaۍ1wt":{[PZGTU ڔDEUˣ5.ucvɴZg5iUXJ+SIV&jUlhP2-2HJ+T2㉫t={Q8fxBik]]G3&s-W~&UmVl͟/8s~T+V-1Qa-A(K[ʊ*V=5Z ԽJ8X\Ɩ:Q& H.cն)k}UK \wbɭCieJ9{ C6nޅh4K 6bCaf׮os3 PxC aZ|l6b; 4|g2͙0|8;.F<:̃(B%Q$(kAASGVVV]]Q`D!Q__wEQ! ̃!<:̃!<:^B.G}_NKWPw> QOӒ~T5?A!Ix\#Z/A0>y5Ob BQw:y>qJ&]{83f, %X&qي|Pcn]s5ro)Ƕ` .ٷ ~xxx|鯝rMm6]{k`bA%w# 5Rk.,v(}t0Bq>EIvzrv*O.|p{cQ&ByЫ[vqZc^bTmjη&y9ڧ\Y >}KkIM9}j7s_ &XO*:W=.D/NSo,4=vG0 )(=z mo0[ HE5tQ^t!2ʪ#Wֺ1/ Lh{-=2k۷MHm>iRӫo8vq@BT!هm=$o"={=F$ϡ˱& X'&;-3~"_G J+=A%)#^ 4<~O(F_`p|F] j~Ӓ\I%4B A0̃!<:̃!<:+ jv@SXZZ#xy`ZsrrM5W\<(Q40Lݼ BH0" BH00!wNO380Hl [_TC9z} ;|׃{4 a&?Q5S}r80 s~qy>K%lը3fڄo0`P9W2YmGMO'Sj<Μ߾{'UK}TĖ Sq1afM#oi5=՝w<>oKZ*^oHgGc BOy5fڄo0dÞfRR^+?n:;7!# g,n*4  Y(`\>|F g\ KɃUZ 3cP)AGꚀgx t/Uo'^{[@z넴b,T5 $Lن]F(AG:DUn+ﷅ -UNGaGil8Ć̮]&0E Kا ad4Œwh&{}E f"bAփ(D;qPDDq|N^zzV;4udee AA|GPQiB<:̃!<:̃!(4Պ]QOw̃(՚whrJA<.F!`%aCp<:̃!<:kNieaqxȃV3w+ ̵mՑ]-YJpj|s/b'v` Rv=sdCg^UvӠkn ?v;3 0 sXYL_ao7.L yҷCJ{=5.u [5:;j%nE=UWjN\e*ӵ%(Lժ,i)6x3^t~%jjL*#tnvq= -zMkuO*%B{P 6$45tgIU&F8iI{M@ieJ`tȆNNVMT%=^Ǜ]=4mSWg.uݎwdn[>+ ʟo6*%vsixU-]NR'ϨCoj]PzФ4vG`XUIMg Ц 9o2Y)YP}FhSK]^مMNer7r<9l+}Zoz1z!"Wֶ)%[@,Co uF0,'( =츞PBQ`PItp=`J'wq" hS:JЅnTI=N փ(Q4`= A| (ޏjMYYYuuu|Gy@D}}=Q EqT"/0" BH0" BHz1 jbcAccciii jj\?yQX h`\0" BH0"}Cp(,f&ӺJWznPwm$f9+N_t6 >.{4Mwǝy=gش1>L w 2wƕ? N {% I_ryɸĻ_|Io:0 0H#cv G;yVd+d\ZϫxBn\N~HA#>ƮfvQf(htlv[10Oֽ):9 $exU/T?l/.s>X2zہɃY(6;YLemۺ~^Idqxsb;_g 7P œmo fསo(JK[fTs5a!g5{@pG >xRmk::ϸdQ^^)<إ.o-[df)WʕTd6D"4"G a%j.̪1D"!YL%{HVf_zp٤v9veq.nqeORbq[_$_J++qA%)9 r s=&(1`/$;LvA%QL%>QXhz% MA"Q%5 !==]: z@(4E!^`D AaD AaD ]\|oftt_F%Yf%'' ,XW_1GEnqƅ ,XWsYf͜9 BSH$;Œwi:1#67f&%#C(< !1  ~aF/`ro"N,ەȃh ϑfɈd<MwK@(D鼅P9ClET"9x:pN&b@YG t&=)O2˘W! Ǯ:<E%ynɓ<4%φ\K6t1s{`GPk+<1p ޺qQ|#-<6VöSs'PCFBzlNj! yd Jr65nB.R \&Rkwz@w'TTk :Lw뿀o8!^AfZl5pҭZarv*@fٞ8v4Jxxoh\BmT[yη 3+X^p'Af[ T76icKi*JJOrJVC(vm+7]gҤ;5*" '$*_lWx'@S1(یUUFG N~-9~ V g>^]8[ыR }D(MsXQdgCN>p n6333 %%%a!9?<(m6o9&LCĀId~ ҾwPq#VwΧx CH$fy֬Y| ,wD͛|G9s\~l6_ PlW^v- P2 w8hIJJ.,,$y.\8G!4a#0" BH0" BH0" BH4M?)AhjȘ5k~ ,X a}Дeoܸq… U*?\zu֬Y3g$&rssbdggE!Cˣi(<o>8nK'A 4-GD=A(20&$&UyHb4^čQ lsFoo`bπ_4bn0ޒKŃb`Bbfn`f>lDs6f[hV|"aKL70;b01ýD WQ_mD po0/ӐRcW< K!<ɍEQsP ߒgC%EOٵnڵbXVϭ&r2BCqh:_Z׫!{rMs~Bs1q|?^0?q{`gINpwڢ[Es)^C^` psLƢ MO ~,x+7N 100|j 2l6ٳgx .Lua&s9߁Lu9؋_ӧOO_lpx$1z0Fyt do>_;APE"ro7xȃl6Ϛ5@ ͛7322I̙su%Bdٮ^zڵx{,X@Qԇ~0x/)¸jN 99y…~Bq1B BH0" BH0" BH0" BH0" BH0" BH0" BH0" BH0" BH0" BH0" BH"ӷl6GdOB|@LII$!ci,<{`s*H$@wRZ9xU6Nn<d5P WS_[tv }4bDo'a5|aBgqW}oSEcrH]hI/D`D(&BIa0[!.,+wfLL_y*ܶ0*8yj4)AbC]{E@lܻXcPoE_Vԡ}'GX 3Oݞg!"F1zYqQ$~99ʚ5kԃdmtvs=mF;pB޲臨E䉷x/}<@㉁ӧOϟ??0<.F AeW kD.^ B9~("WL jJJle<1pʹpFuײ}0{ ܀k`خ9~]s_V 4&//_,Lpl6l6̙xN~xCgnde'yf{.^x &wY,gee͟??$BB5?BMAaD AaD AaD AaD AaD M(!IENDB`DataLab-1.0.2/doc/images/shots/windows_installer.png000066400000000000000000002324421511411446000224350ustar00rootroot00000000000000PNG  IHDRpa pHYs tEXtSoftwarewww.inkscape.org< IDATxw|UE^!z'A((V՟u]u{E@{'@z//#%y= D~?r9gΝ;瞙(HHHV; Xc۩d2bp:hAE\@uiڃm`aq֖re gB? ")r "##Q(x&lݺ;QoL& ~|__ZmuO"M7 .$/\û֩u/Wt:qJj5 V{8NE' *rԍݱގ{>C-=Dc+jax:u6+oK `_]^)/09u'?'_łsi)III=mjj-+h4jd2=v^N[Hm9y˹_/C 엃{yO⹼Eb9L&j5C(!vP*$%& l>:qCJ Ҫ :z -r+;E\!'DJHX(ťTTTITTT0faY4h|AմuYM6tur{_/T굶d dcc8g?6 w$$$LlLLKvYh׶O%G)-Ul! :ЎO+iM߼&g[3m$R7 *mz!@AiއYNƾ9L.Y w:wfq;Sx^>ﶢdA &.s'%PB-$&&4, ^eiw:q؜8mezq5^C[⣻yTхz-KV^Vhl2&&Q0eYLYYk]U^Zn8w Q;rz[LXXEf ?i"1G㴋86~$0NTJoR[pt>kĽs~vq?5X-˱MR*JQT>4{ŏ\+.{׷lfELl11~ h48iʨD['EA",,&&&:*" ;-7Ve,nVfz;/+ZI7͜8yҭ Gh%KYv}(y6}u޳EƱ'.sQFu5SFcOs7ĚHIMSN ?)TVT͉O?hpuf>Atg,n ì $,(hX>Y^¼={0ezxLVǭV+|uΞ=joKiiYs>Ysxgl-h5]mBG;K&R/$`0Vɩ:R0MjEư!#o݆h42Ït-GNQr%$ڎNɟU<Ijڭ 6lF6ɁhK$>>>"99~ZBKEE%_|{ DJ=Sn:| oݻHXv_ ^Cێ<[L rk83oKMD@Qs;p8|޵?.?MJjj0hDjx4!K HɎdf8ZԁW٧Xf-ǎo!=lݺͭnnw3;gΜEQ_Dtw>_;{h}M^_7~YiP(P(wsvٷg/_,BYl4eTBf jLVˉWE rсQL2~=N:͛s&n2.[ATT$ƎwGE3&roGd2W^t%|W$$$ߟ$**LFtT}5\}% ܹ\E\4a,qqy5*xFdc̘tu2E\u̺&ۻw[ ѢXb3X,66u4SLXX9<"~%}1=zۜ6'^dVNQs܌ ,Wӻ?99cpt6Gcٲ(J|>>)DEErt67n&11'x ;~ӧ3JyE b4RSSob4j5˖W| {vGtTE~p1һuWOuu5{vdÎ/{:r~iueLFCDD_["x}OS{ߟ&444( :hMB7G*W("' ,|{R2v7\W$''jƕ\y#fQٵko Ç Q'G׮i݆o`1|7lܴWr u1O(uom6Nщn?‰XzTvGr[3jv;JKJjjyk7ͩS\ņuZ,AHq8;^l\ +H X\6Bhr0;5B&t:9"ptzj-st&1x0qq>|m W8<G,]` Jrd'um:u^_6k-f ׬%K1̜F"miڢHkAu@Ɇy ."3qeXVVÇ2zH&;+̸֒r:~_z_]LCnQ)..!kD#ٴi+QQuLtrm6ځR`0PQY@Xh DEE":bw-|)l~ p>44[o͇>tݤ"(l\h;ib|ټ|6;-P&tN#f,r Ye9r Df5knnm&>*_-2s9[Gy~Sٰq3O?8F# DG7"DÏoߟzJ'Nj(b1fkgr{/B4;oﶩ!d =en2Gp{F|2B#?FyY\#F l(Mh{D'&8g S!-"D"3A]۽$jӹkXb%~=rbcb(/?"4$7CLL4)8N-_I~~C/ ɗt,[u7^UgȒ+8t0 N||zgJBɉƚYb%GCsӫWOTj5/2vHw?@PT\kMf#>2L:\ kjjxy z{\pWSPXȣnfub_ѽQQ<3er2#G K祮w/>䷽Y%B˖Pȹ !Ks'[@^=w7=c_~eR֤$'#"EE>j'>.)'%9%w=7p^W.P(h4 9Rd[\~KwR\&bP(QnZpj4MnŌlF. Fv;JPL&3Pt:=""J{{﹓8BCCQ[ڔC)Z~K^ױB:M|0b}ko=vop:n7'dMDӉbA4cq8M>EKgYQ1NfzDo &6RJ/v;r, VkZMH6ِfaZ  kCE=M]m jP(tzT*2Y]rZŖꫯ@Pڢ/{[$[۠O6YGE?ÿzn'v>_fsد!(b6Q"˾aRPBN)DVcXIKM +DFz^|`BAddd۹Z݆nR"Qͦ:}JmנV[ #(+*wd20"X}~9k9.tTc[1o |zd2BF|鼐г{:ёff}{jy[\NTo⁥R+^$v;_r%$ ItTˁ4条/- f@#<*p;ڒxt Xֺn1lRh6;.|C{0~ыiq:APS`ly ygztS oB oeVձ.:A? [q+iVemې-㴩|Ϋ_Po_CQo#49s^\QY{ޜAw!h+Dڼo"Av\?ڂV5El:pxDWtn6J,,3誧=mvPt}ax˿B;:.|i: .Eo_@dwےŖUg[^d4%Aw;~ZjGi{˾JH:eb1q˿WsMڐNtg\6Ip>%g3;6 MRMyu7M:HoiԢMl6J>OGBmoaujg腹5;()-m{ʋuIbc )l;m 6d/n2;ܤsgfBTdkhj?ZݴfԸ  @7dHRE\*ܛEn\ K.w#EJĢp `P1N먪n2`o1pwKO˛mW/gg)kzO6"˛̓~ou w6Zoց͡uܛ~W{#t qҼ]0m]jM%PBBBBBBwOQo3oΕ;y`>\ן `[_)s+I7]:\W9:6zbOe˗ U\j?mÓ@v<JHUu yd0Vvk:Z{ mEEBoNl `tW.Ih.z:kf:e80?25kH'=, O``@%Oe}19 >K7={k*EkOez NH^q [Se4L+=]S!]k tp{lqLaly[Ǧ7nPg*?[I]?Ԯh O㜊N)IhrQ5/yJqJBbR/'>#lL7z"ՍChtw1=Ͽ?;|8fRxЉ1bpK W)\݇V~.c`D.|>}C'~ܽ<;3^GDU)q<G)a} #b e96/Kc,Xm?Wז]McVϭO}1ALُٝi7cA1G"3quFX{,zdjᤨt&k@m{ZG`,fksYf:o}"ez4j!$ƆV[q'/BFjBWίsR!j_JB DUz J*$*\?!:X{4j/zcC9SДb!4-"^}]ku~f=6۟o $mcm`>g,ĩL Y Iѩ]9+1C(5b Ԇ`=B[O tk>m ),3`Ekuz B4 :%F/p6eqJ_:'El(r2HMSY\-ߜͦ}yh vIJlBu Akp0b@ Z*#F=jgC(!!!!!!%颮^OJPIYy߿Rq[ #w:@7hK.7|`jrr" t_(i_>ӷ[&v)_nY3=IЩ26!D芹LYUm?2~h]9JN) 4*511DEEb(*.l6Lbb:HO)Mݒ9k!LwJX9G/-TNM\SB%>=zrU7ɯ[{1a%==PMdi]lt8.XQOHd _{;,Gl1!B7~|YL61g\$[w"#5=Դtd*' ~p)䑼騦ev-&5!?\3Ԅ(].tK%9DG5?D )R5QUcBqΣ2*.F``~j q8Epm-xq=pT9 $Ǔ1xIIt: |֧;]g)B(!!!!!!S_57 ~xPq_缥&jhT@ &YۓH$,hN0`3w v_v3gn幖܀L۝ ~R4 ǎZ0//>{vv06 E%$$$5%lv@#EyŘ큯-5awlo76ʋ 6_{`qwQ6$ltSoѡ`zVS=}Ezޮ7Y3 GVZ4dSꏌ }xh@fj}M*espT*#1)aQw2$PBBBD/oK?Ǟ9GnrWyueyCQ~Jۯ^AYƪ-*5ޝ5߽`wWR6s~f>uB_xϿ[N*svg=ër2ZNl/`wѠ&W/ޜ>߮xPye'EL@lt /'S)/':isqV+kEwwxs*h׵ f7O;GD E5jG޽ĉS޽ݸÿ(a=C(!!!K`Q}E>\{rB]NjD%T9'YuEZMƴix<*OΥ `T8-,y>ffL4M2o/y:wٺWnZQ_womٹ?wԶ㇕;Qד-掗b@oBvx@ޜQڈӣDztƷ?#5:,|ʫ?ݲ"FVRCNNeZKU:upڨY}hu؜ͮ@wִoo[:w DCi仓@muhu{{sV &\ dfdm$ מ,RU%; vJn^^ORjHk%$ڈ 5Б8?29FgsX;7P>n ;ב0]#UO8]b3x@Ӯ֦-dO 9^h<|$hF6'ɴTaru'_d"q@RYQvEe8UY50a:큪A[;lԹ|[ϚSٱ v5L|XCVV˫9%pYS^EJtn<[ʄfluKcС 1/C/w^ʺp>~,GjP.+{ou榇n = +Y$V 6y471m?\bLb#иf-Ƨra'\HB7ܤ}!.dQVL1s plv & qnb:þ|!0WDwqΕEk8[ Ɍ*`iݻveԯ):9ݘy yظf'I/}a{ݴa7v?2ik%0ht[52`tB<ԁ(eƠIg&ٴz;uG'`*`aFg)&,^ˎ̼r )"jXbzL]b\ oOIeN.&ʝrK',RȪ'vkBxI=>yN&Mv=lù$rh|.\lh?\ƠC Kg@τڈ-fm3TOXj#p;@+o$Ko:lQ yX%Sv|wiOA_.8J6(ZVfY.Ͻ]KLyyre2qC:a0Y0 Q"##˼+! AN#82^aY}0wu)Q|.li,zrJׁ=I̘ #_7xո[Tbާ]5.1TΊH2YTia OMNz:P1,,'nEfwoINHO1de '2zedEoa}t>nVɌPrÿxu"]sde$w`iDWN˗ywM dXwBޝHDe>_-6~Ȇzl3?ϟ<^ Ma;3aboǀCOerQr| ݈b de]̨r[~@Xx;8+*ؿd{55±U:N'2 (64ރCu9ET͈Oyk˙11SeEԘz68mh237fS̎Z+YkԌx/(o+NuY1yԘm і_HΌ٠ }cYf+QQYVDnlfyybqRND E_{mEY*sx_pv ;F"2pZ WHɊA N+ŵVtZ*)"7*1aُpIOan.yM h4/ܼ<6ͥNeRm":mhˊXp-瓛_DɆPEAn.ŕX]rcu c((bV'f}mJ,v+cV19w49%t:J r8y$K,%/ٹTԠjj4t:z}Ï`h4b61XV, 6 ݎnpt:q8}7g05y&y{1qQ*U;~B9JaA5Os$wOZZNUyu$}<՜.`/ hJ.l07pQR?06ert{i='գyD/-~v #ok&J+5yc -_Nr2b&v&G'#4d="Nۙ216_ġ.cX]BSDbe>L+g{ |jy6~9wexGejbuUTi0ir Z3垢Kr\COmRC&c8{ϡPg̱X@+y$,g]"> s{K+IX`nՙ,a ذ+Q 3s2~GwDfz(ԧd_oD7_TT8vx e4kIEu(sIjB/Sӣx} KL>+8"+*`͏0sZثD]8w] gIqf]t7Z'] ])-:U\{.#1%dy BLGbhK0ksXh6e WV1k([1sly&RdD ե7>[FIˠ^`)f-t^z0pVɃU|~dD0,*aN)Q莭rSFq]g84bŦ(o!)?ڙ`SXFQwS2rm7s,J݊5;wιHƊ,x+*!-tл2_o aŦ5WHIjkJi*0 HYGNgB k;{Ʀd5йGoƤP}SQȾ0LU s Rrt ?ي"8ʎ`㢍TXXb2r_T\w}&8#]%TIol$2g4pDFlR},G7qT1.YbRTb:~>شsca:?dX]SIeQNmcѲ82LgXuBFa}}7o M9{#'>~g- c߉]\x7Ș>;ح)39 ȡ_ݖ\V\3$_Ra[?ccQrHw`ܸ PSC-QRh[._ɷ[;sq琉0{ q.vk}e2Yr2wd2QzL;z B?o~>FF Y]DPp*jJS\ʺ9mq/fͲÜwgQmjlekn6:d+4N-E٩ ymǞ5B,+)doi=~;߅9e` (+#)CIVPPúVsl?w+j+&n2h(J&:,\nQXb[ԣ2'}:|Zõ&r?gԟ*" YXEx"U<˄$=́<6==N9]g [4[AdH"_EDȻXEwV=or ". h),%\_}ذ:KIA كٗ<[(X>;"(Hf>%G?qFVmGdHʴxi**teK?_.VCD啌ró&2J2‹c%9lG14_@A |9ckC8œ?,硗&)G^`Nȣ۹e{ְ~ b{v }'!_w۹''^LxRq?uY=xI">|{hL8J~/"j';J:(XTJ^9rE IDAT(^} ӻظcFj^|m6bb"*N)tEFRz_ }*x#̷░IZ&.<UܓQZɷkЙA;çYRꂾE@ʂ7]WW_F"OF_%'M .9˘H/ N)û$A|&'WP7<;دt/l\14}n.eo9]TQT23[ԓ^ ILr?)cƍ]0:49~j!Oˈ ֯ΟŰt/x< ث}=Wog^CܟFN<^҄ L,epq4b_fmi$hI)ʎxPUBțw /xt.V|6*}ySoo~>qcYn>J>}eː<o衙}x'so;H"dd A7-')(!\+?j'aK2iBx4pQ?O±#O&?Kn#Uw0{_QcB#ԬxyFp͏/`pn¾t/7yOI)%Hrw$dQk M,Ycf> ~q%s͹SNVWʌn(ju_V߃aܣFBt =Y^|!ArCWmCz\VGX3:'MV>u}iH3Osl{ߝ⸉~yfI-() 339 +M_vɺu뎝3gλ_\?ʿ+k}n/C{c$\O2ݱ:]3:~vdžՙm;cY NwK{Eibv"+{&; ݍߞugTSϩnbi%#,B|]_{v !6qg#.فƬ}( 򂭬ZEsk)AY9/$=@F3:Mm /lV. ޴̙;'p(G7K>YJu#URٖ = z=BԺ;wQJ'PXR,>x|"6].mko,%I˭%&VR/>뽵d0DuE}>^40ZnX, $hQ8l`>ͭQTD)K^nf6l%ʎu_&9ifo|^H 5 lS.0 iii~; B_`_7P_vC:#W'no%%w=+)u=ul̮*N_wn"vLEF~b"xn=H..LSK<~tu:;|dݭ dz(Bx1d= ۪ٸy0w:r0TjvW43g8!{ Z1᭏wsƬRlb*((((((|P^IyWpnP;㝩nލxWnлC;BOTڞDm5pwn/$+j{{nr'䥚'{SҎҞ=sno~7㴴K| "#2wX +6Ux^T6D~BƹXG8gtY6cl~-uOvsQF(B!֥ٙma ! Ii5nё=Kw/f_x/v02{@Jɘ1cln_=K|4`]i6J tι#B%ے #)xlH ԫsuЂKu3IVES&SBOhs;]TPUU)4dGL|p3j:]AAAAAP@2gΜCmWRJZ[[YF`e0nǮ]4g6=;pn.c il^"8e8 ӒNYoڪ0D&.&)ڤ\s2I \aؐ+Q5L =Ѩ6 ɶDQ_.6oقӧM!FKKˡ6AAAA+n¥,]goF 8s& ci{ѱ8E2, Xz2 H~$:JtHVV]X}sv)u^1et똥&*x?MZu2;Wu:M"6昚Nilvl\$#҂m+gORxIǷ]!g ]A EL"N`ԧ+L{aA[$ڬPtpsgNksQC܁.M!mWML>~)&/P4g\bwsvZPlk'(B"Foo!x,IY@`"UvH6!qt)х 'kI FA| Ji Js\G1-@t6!$R T$xPZ.F{aP:`nsԝ L)uaĴEHaeϲT581gFc|٦A]Jc]YCYAOJ$R6tхx$'bء6@ƍYV=X,+((7Cew~O)(((t)eOuE,*bL%.]P^sɽ,"(@6ꔣ%vD$22Y+ajkcZ0i -crHIڏۻAK糌"iͩo>nT%UNr)| 46Y[먪iCiA&2"\v477 V+(((t _{=rC#3M>►\"\tjbYv 0EU9:J̭ʙF 1 iu:N|-1~/QIm.&' R1ȝB:}됦bu)5M#.9.XV_1X5G{zIBFlT '{4NyEzk=o. #/K$9+((((((((|QY `l`93` ]&.`G )Xs(Rj nI!L vxsgi&R$ pIR$ۑv.dŠ:LT-g6kMۨ8G9QuK/j1pcBRJ+r񐝝ⵕɥl]40*Q̞ЛpU*((RUBmBhFaU IDATLb!_3c=3MvctiuI.V;+ϕVLiRIefcJPlIMKTJqa%{v5 fC&I\@5d\n"Nf_e$!4jR` $P& 5阚q1hx,_O7i9{ƫIJ>㍏v򭓤)YAAAA-ze4n8-BNb*|VR6na =S,Y-i1P1p,YJXޏN;!1Z*ILZ)$1ҴEᔈ6*!$<֫M&Ml6&38qq}9)]~MFzzgd͞EM(+1.V +wRV$梭3m=)>E[d>&*ieWJ<%d*(((,LY *(((t8`z5-CT*S Ad"2XƮ g Xd]SPg0!rזйŽctVeg>i{A( d4!FНmPo!?猩K[M;c)j!|fP;xy[h^deq;ee}2[D"|aT6w:WmC+?!מ?n9ЋXi??y\zXfM(% KWPPPKQPPPPH ۄ]\u4YhLg*nCF> rUPPRig *(((tnB C$4`xj6W&43d (}"3n:51p(m҉ HAPyMT+'˔0;$2ͺ.A9m%\ǒͷ?;Pu6NQW9hr"_OWT8C)|t{w#6A=Of@GFFMM̈́CD#2;>[[ν]]C/їVe]b-&*B`b?h7IԀ:),J"rt3!11J=SJnUls޽Mg5Yv f -U*!`}nz)u+Rt-wZco-[R$Qk!z}i mȠ2/D?FKK @`0 yo>x)`]90;K6H)u1= Zh ͙—pM[yxR%=>zGAA„<.ŒR}Cؕ`["u]q]H] K%E"S f')n"SsAC4a7FH(&tI*&`q)X:Stm=K-5IJ?gN>aV|Ʉ=wE-ӧ#dĀ,nj{c>^]NI~]0)#Х%F]Sʚ*ص}(&>1J%TPPR0kqsx# {)x:Y·ߤ)Orj^|g=مc1mƔ Gs`,C/dYS 0+ 'qW*O46YŽ< /νlZ乻x4f}Ξ6[WOqo\y!*!}9S(J[5C/tԍFT&IS| }jOV aEY9ZHŕ:hfU C2J_8DUc)TVV; T7Sz+IedqiT&)Rc٦Ojefl) 1&*): Wb{,j}N)-fbLl&O( o?5pn-$1R GR$ob[0m/٫!A 5[&MA947Ց]X~C]jkkYnj;F9ĤG} "ܯJTPP8"X2gRL>?/>J. {I}ƃ::toi!ScO&t+jixSŋ=Μd[YCWX3A12*j]% ӿjހ.$3&pL*&jk1=*;aAu]Κ $K y!vbe088}MЮ˷3nBꛮR+q.!ӥCdR{;,{1l.MI,eh !1%7&@:n)-b.]~!$qMn54oo.Jk8FAn NA$Dzz: ,tXE-a,w2f(2w9—tWRs+[w{ƭjd!xuwA[֏J5e,_ǾORxR<(oxoy>[j=85lnΟO/O1;1Q z6|F*g0kNOmU<|gΣr>Wd ?mSPPsB#KIpTwDge ;T#44v!AEɪ\WD!y1]]_;RRKcK5iHs$BHa⚮'1;@ /^H V}Vnc G}} BXzuɠ]ٷ? j(,,`ؐD"*Q7uRU)'JMe/UK?fV&ye}V4qCXuOcrQMMy;C{^J8YSe3>3ɢ}1,۸!s ټm i}QD,".9oe,]B>gsܫOMQf||gqIC!^&VAA끞!4#.%f>l 7W",a`jm(xs"-iϥ)CtQZ 1,MMtRtLc*5e:qք O?<] C ˎԛY뒑[3hll$##>>/02x<^Bwfxsx¼}oȨԓ?sOhs"؇i`o4zJ,a&ݔd:6͈L1#kd-ˑ ѥSX$JRdl8s;I6+fOZ}m+D a {.{bnC;\HB'Lg0 R7Rn uQ,\H,mlp4>2f$BwH¡c۞RHI^3ܦl݆^ENNP@Z>ׇǣ! ux Nkk֖Vj먭e ^ܜ233!++t23 ]UPPP"e*(((t=M*dE:T[urL*ŊDˆyI&^, c$Sz4-O rsgatgtqvV,?͵͝p h<1G u➭XJn)V&;09~)08Ji+/֜5JuVv _"^/;5X4F4MPz=!~x=dgѻw ͛Pu;vBA0d#HǕ[¡uԲ#ZU'My\I_ܮV]7G,r%v]2Jŝ|t}w0` 4U¶)%8 ؞V {:NG諸m\eԄ|O25MbV9,J#qHi\`XfPPY:iB!bQ ˉFZp8L8&mIJi~ƎM}M:e2MM͔Cee%#';p8+W'8if-;%&%G1)lvVĮNcIR Qḩ$t47d', JȦSHEMZר{$6¢AD:h&&I2{]nVR)KV1 B4M)5 < E_az]E3ʴ[} h$팖7ѥHtG5 'ېfw+>E%|w9hU 4ӔjC.GD"db>u#0H-_?'2)IL:R:sX҂Oi^hFq4B23U-Ao8zepdg%PZٕS_]AJ)-&$vR#PU7N UׅVL8d̼0.ETNn,1QD&Xv e;0n8H>"ѴU}Ja8'q@dQUHIe#ӯ83H4惔^*ϧ((((((((|mBGGRR tq#$$0g#p՗.DuĠj_4vv O1n %IVJY-'lj"r4U4k(NHc(FPۥ-}1HOHzhoI)44C`LhVp'd6Kr5 j^CX 5(CBDBMf4MC7UAwewwi6_HK of/VU{9$s.ijMw/669}a}No(d',cTU GF9oz"2FPnh9wu RVuR#%Bt<,<0"B&%dw&-H)p%$MEê# 獷2#:܇-+>!s8cxi4Yq ~*̓z8񲛙U;wv0yTiž߼͍1w۽[ʍ-_DkY5@7W0%S#i5}Izh'5zW'O= (((((B|G}uF}Kv)unHtݠmBH.t3YAUrA3U$)$I8? L:Y I` {.2UK4>fRSML(4¥]&~U^@39;1Nw'~m:*+]DqËʚfꛢy%=˴LNv0e͝ qE64_D28' O&Z*iug|WYP7擗r Nme ͭ{O! µYaaɻp7)y}CsN%@ [l> bZپ?AKWG>eg#\kzQWAQiP_ }|TֶU<[m!>| lʘA~,ջo>[Nh}秷qx`';*I 1pp)[)(8oC9Ս:EhڱOkL6 a-l[/à<ټSZ6"+i`g吖ϐayT#ںCFS]WF{ZuNb(zo}µ;![(HqAlپˀ޹l߸0 ӗ=U4W@No|uDSPYYMmS L25%_.7#KŶ4Ž:x}Uٗ> $e)[c`pF>Ž҉Vy²0طc+8+uB+%̹8'l}v|H :FVN)A*I6uƄhZu\Jf")Bh cl #\*al+˦$ IDATfO[cI.Br7G3vq%)Ä8)N ?;6ҥ ,X$|vH4I7 z,%xH>ٵideezb --^rRe'BP6PVFZ/^}u;{l+H?ew^߻c/zWEs{*xƇْ#3ϣb&e'ߞd@oW͐A>Vmsݿd\^^Ee聅TgY,޺]9?O^|㏤7Yx>^-'ycFcs')6?w?FsQ_l`ƽCqN?rߏ:2+27 Ӳ'zCwxz pl/HO J֍Bݚؼek&pɀ DYh8Na5d㍥{cƥWӸu6`մ՛oIWnYo>muX/Kg^y/=Lw |i۶Љ'KErK1fxbw0tlya3?Hyp>! ? zM-}x_>ۿ3 .=,%3k|P3UҢFY-3E8X~E |h>lZ fW9s)M"7Bzߞ< d'ؿq>[0J{)-j P#}c-RBo>BVQtie4]FMJ1f2q#.P7ٔ YnjqGHu7+G1׼R4BhB`,DHԄ&^f&p!1=[i3JPHĄkBQ"i'1\fEnv5auMKhHi퐢 pq Sɖ]5H,]u (* #=P(H}}~P0HqqEE G"v!3\u,{N_/E>]ч (ʿ>K3ċoQl7ӏ"Ƹ5?1ǟUԏu;$7a֏/Èm yo]Iر 9)Gn}.;~r4UP:o\r%?[Cr5y7 G'XG1v}\sķÅ\˷kz~Na1?k1eUpӝבij]ny3hؾ%MKNgxo.mepi~_їғ ۅfo!C9 1ṯz~YT%!'Ғ~ҧmpoh0TkΞW[V-q[_Q== ql*`1Io'R"tDDF͸+i!#&kܠ@i>yi2\\ĩĩij.!,8lxECƒyHC^<.R)LeL#tad ׆b&2}ZVDHg?V4Ɉn\?hSvIS$I3k^!R mUºv7#1s\BٸO)L ɡޥ%۷Uװ~|>?nJy >$~_2}C;}.7Uױr_naHdٳ hjiEHK{kP!a*0~e@.d~0/KyN&;xx132>GO"տzO, gLϰᱟ*#QZ-:4o}GmS{9O>C =qDZ2H? o6*P&PEQwċkNWgٽ[ k sHwi"y-޼PT]A$l/|_4@&ZƦV"MXqMC02"Z!]bbTp2@~A{ ͝t/[F5߃,kޙ@1yƂ_fO.S][a%WPPPP=b7nP+g$7d@.B:XTQԣzOGLJB~Q$/=4M4 DŽ%u݈шKũkif_S3{#D[hG/^ Ft%#l#̈́6NT$|r)p1+/h}X6HIg|[J;Qj*z:ca\cT]c'mNLGU&Phhjjⴣ8PbU" ׷/{x<1tJKoh`U]Nkk+h'L]]=Yzhi*yЀ<'s%ӟ t-SXrM.av7Hv)g_y3FaoaKi\vϚH0S{1ߺrLC8ljOً ^>/yY#RE,7seL.KI`FΟ;~pϑ[:fB }ưc?֒v8=70߾ 6,b1()23 lţrֵ?q%T}p!? Ō?;n#Χu]\Ҳ'0=M~rٗ2i?.%exՋ_ҹ/;x~yxssscG?w9ۿ Lb؉ b'qӥso_f\cpX_BToX?`.2->ƫ槰8_ Ǽr)Ϻˋ'4P)mo\c2Jٌ20}^w+wIi\qVnń[u ~ydgC80ICx33h3sϣ⺳GHJeϋ EݛsϿR)ՙDu>e'3%BQ]GDcxcaҢi 1 P:>d ۚ7EwhjiwUTwfC $DMmmSڧվշ}ͪ;* *U !l $'ws?fvDq&w̙s|;[>UwMc hNꮠ)PSh6 B-3gFELtWv? SՆERBlxTҊff X-'I} $[yg֬_9Ν;%11qq|||HүgobR ϼWs`v]> /o>OKK k8Tw'4 ۧÇ S9擮okk+ٴ)JFݛm>'Z~Й`\=׬xQ*ˊ{eƍSş|ok3t`]J DQ:C*+%0Y&~䀗bpz2L!Ω)$ҐV;3-Y5@ujyh41MEnrI]S#XS]Oy[5ʋB9VaLDIevZÑb0j٢zE8vC%9*"Dg04(r#ΧQ5jy|5PycҠWϞTUUׇ;eTsUC :#SsGq3i|lݓmwG\g#M@-~=C=llllNY8FfO* de# ~1nʌ㶁L $8BV}a,a ?,,)B" "FɌכ;.7 *M߄U(eF<.`,ZhJS!&BkfxmNV4)0HafjJ i 0J 0ܔ jA˧F ) Mi@ωej*%R 3|!Qx~#m'#QK"`60͡:Jq|޳v<%弥a4{IG|SyB %- gcSI?uߍO]lcccszP?Pf2ZBh>? mm quZ,3eza}RHp:ϓܔIaenG9JZQ8 zr~8EIiN G*CRZ%BȊI%up~R4B=f1xq"8-b*)Z~G} _P-e6+ZZZ<Y7B^лwOALL av?i~oz/+*Bh8AU< # n[B빚X{4 ݸ{g~s/Ϙu}]~0Q.\Ms0]x2?oǾCUq8b%k^~v-y;_:?f<:9=_rrڔ?__/f+֜HalAhcccc9QD*t0InN*:ab q߉ j?!G)2c?YW+W7PQ8Biu!ɚJX/"Chm(*4(jOna&E)+˾Up8ˣO#nm (Ge ګ'ѫ-w+9t`n a/ +T;۸ӭ4xaƌ`sob3Pn9/Z'o߳q\}x??`scX'p,/Ρ[ $_ _ܻfE0m0oUHeƷ/Zƚ,x.;ަߝ~|+c,k6B`{!U*7}37cb\CY~=]3'c۶L>ݎ؜3;eeJa ʐJbr}tnOaV2:NjR3S? I1G$s|қIi2Bw( 0Re#dtd3y9I EC0V/IJT]#V0 :tJU]"xȱ8Nr]{Z;|R:p:=rכKNa477pbV\?8q_2^e1Zi;ŖﰢKaosz$*gﱹY'[&Y8qYN@'g/z C ,r\oϛYUe2jyH}&`Ϳ:B&⑧ѬGUCKKqt!7o%5xqֵrհTa.X#Q͂+Qkڿ5מ`]S6?ˆO*{N{p]L,Գ'ݺWLq>OɺeBzcw KKxSGd^߿?y%D~,NVL׏O&31g/x~-u9#vo'>$WgEKz ;VQŒ{cǏ#' hvaѨwxqy]\$뭈_~md4/f(,$Sŋ/ߗ~aHf#Kv-W} 4󘵺ݑMRnU+ؼmZŖ=m |)cRY[=Tז?/yu<79* N>1= BRF@*3MTH F@vR;[јٿ'S"A(eYD4O\C}H 0G MBhF(ðj&f Uw8nܢrVo?3(.B;ZB0Z5d68^8j))¬KhP?$)WZ[;(o^;Y){/o@nE:y0n,ǎ!|E Vˎev-3IIW9Ъ-cGvJW;k(~;% 'L!3)OB&!- OEٷi~#;(LbŃ)MϕW`8o:cӧ\IN!5'eڔ`j $EhV`dO;+"?Z'j.l4|N\D2 RSJ@;~/ 󌀡UL=Xfu.>pk=WM]&85 "Qhĵ7sw%{6QŒxZp|N=,]nqhX>CVq^oƷ{?mrj"I,xo&]@F;^ߏ~J9[L:gŒ𾚃#lo"ۿyw2cQdOs5;1 cvՎ;ZX)~ZL[^H 2=ی讓͌䟳vr"&\8egq Gu%{h +Q zK[A`k)BE ~?= Hs'?'?Bמ䱷T[۸oU* IDATlА֝ցڴ! o0 )B--sn4mS9ؕmlllNCozkp馳h+%\Nz[{*W';!/;nWAxCgMDu,#P.JEfwU'!5 ]h">wh0eJBZVܮuaAfE-3E5AerE>&"zhDqpI^Y_]"P@iv{m=>x;wsp\aׯf cf_m+{6`ˮÌKjR i$$$0ꢑ\.mڏs8o hQ 5S!|8N4% CQNnnq\rt}kxeƑAqhMȑ =S08%U=yE/>xD˹!xDzvY0-6W538 >ڝZ]nrrIpiE 0rILއUe[嚛/Ъ|%G<S8]ԟ`߹2z$-!6p4quxg^ ;Z5OAr{_́08 ! +{p͔4rѓ}zз'1gy=0ovʪ,~?אAx(YĆ_eɚu $:XAꥷs֮=HA}(((eKב7D't'%FCX]8<*+7@ 'oB^y9{R宯3l%KÀxFeޒRNeh6~W5:nVdLՇKG(9f8qARu{9xh7u޾\1qՓЧOw";7g/ p2c.G'ˢwN;}F466R[[|aac~ϔP/=\kێ}\eccce7 (TS\ܦI_nRV-2j 7]#8|FG -KAaH & HAYu=sUSrĠÓ4́fu7 h'= F;aÈ]pdD6I>ޚY 21W#h%wuӻlL_zz3RѝvPPgIٳ,NHH\.No^ʍ!8ˈndCv ~OK :N:;;owmlw)b$41hy]{"6666_θ@ F;r1_o= jnE/Xr$7ǫ!u,llA]BL# 4MqA4@ظuM\h'JבD0&ej%*U2־f-@!>"D+Tez 1FeH^e7Tnc!"r(.`r39x):;;w~*n9GyXeEhrB!)) 4̬L֯/%)) 666_h =ۏ4dDeE؜kÇ'))霾ֹ  `rf&2,Š"3Wx”'fX]cAP)$ CiZo"P~F@yIBF_e(APbR݋!BΡ!SPUkϡLh #^'SL5'd*PJ2d&Mt>`cc%}~5Ҡ?'9) C[h`˵/ fHv(h &C(6J) M9szOOJ#$ڄT *hcXu~`ahBϪU䘱j/*CIk o_YI% \ LKDRja™{"w_=Ͼ$ƌEBBii?'O ,^557+)g{Y9nwmlll>9S\µxIq=yp3% ;8DW?Mf]tToLgzFMB^捫o 8sƂpKS']LvVf=6W4N4 +RI%$R Msp:!BRrq׆^(ҧT̐LRDWiI8N8;5x}ՈSE9"_$\ Eˋ:9x^ _c$NTWo~%S0yDٶmK>\JYY #eeTUW_W!!W(~>Y[gp \߄Ѽ>f?TQ;.g`ƌë ŗJӜRrb7Zx?ngӼ]fv+,Cc[(;ҁۂѴngaYE",vaybsJYnBzYb)5{666]9ђW޽10C0J}YEQBkz!Na3:hhV2mY4Х@HPX-!hG/ @!4ilq/@ BXF.l`)ZǨu"j f AP"[hK5 P2 zE?ԇ|}8>X^gl}w11͛ϑ#GO9c뉍FGGgp666_ATˊVݲc܎w_ȫaia˒ţ(.Ϙvn;q%Im&{=S=^͛wSZF?>Z ItbF7s?pr>lX&LC)[_7?8s;Ys.ֆQ߿΍o'E}3ٿ}U=d"KV{ڣEQE7wR)4nASVo󒖑Mv; Q*HJN~>d&-_YQNJF6)/yGhiҽg|=SYU]ncsv <ޞ||B&0P-\HJi CeJ1 zD(ZOx#S;# @C3LAH1FE о8v1 FUhh|uD0"*-3kB)Ih6_1ݫ軼f0 :[2<`xr|tݹ袑8'O$BDqqII݅+.xpyK_> a;oo@ޠ*]/~j51+aĵ52ZzC;:Yj=ڈk|X sН\0:&;hHe̤I z!cFbhN+eUs2k?Y5o0*T}^S’U[ `PGCԵxIO ]8#T'(*[ht%ۏIC:ӿ^} ܷɩGSo(. h֪y]XE42abZ-cXa+^e+(XAmASɌJMP#ع ;A87Yfy32$RPusf4,M4`|Jd&V 'M'ێ+X4QÊ AiHЭ!(!bPMPJ) I(B),u͊I4G4u/}!cF1RDiP8RcQEu]O4[j:pߐ=!xO !1dRHHJ!>!Dbc㈉AP]o$RJZ/DzwOf͖3Cr;])ۇɓ&كoM[||V'__NmC,bG~~䏼0ڶW|zq~q"+܉1TBee /ƮTVشyn.}#Y>%BJկ~ÿ4=k{& ;YYZ:[}_-Jc<ۗ\Cme#xҨ9ښzZ:n4El\<@ZV:vƑv.fG Zd'?`X^Jh86Ruk|W駹 M:PFSD1 ޶fձK3= <=MZK66Ӫ!tz<&]xfLZQ7 M33!(4T?aD{>PȠXV{8 d83"i#1DXY+ZHMك02qh0{ E)nzB(@3g]W! Du2<Pnh*֌\P3"鰸ɠ`| LJbcn8&MɣO?5BiIHB DˈECݡ:=F04&]UHO!+y#3qDh ĢkNMiX$YJ[X, \?Ad_g\dڣ7%G*ZR{\ݿعy^M(|W_}.q.)((8>6,UCʢSm?w:q?z=g"`t_~I{~}_fn&ͭJ}7qYOo]lpw$s ! ~PY`]g=GIE҂&iTPE B.`Ų5( 3Sd#-  C30̉+f$Ь4 prAYQ̪N|+Kh(gB8Apu* R)3e_(e6?k@v]iHX*Q1kMMo= MBHA%4/BZ1('}'3R*[Y¤毩/Ƹ܃уrh@72S}(]@j?p2neVvǮfy{s:Wn&03lAhc܁mo4>SU6666guB-Tgp:CCfv-"ywLDXMhfoԂuzC!4^]W&t5EM))4B S=>: 8lec!iG K ?*|If͚$.LNջOC `P+D3I5`/Lh%J#A!,'c^R(%PhJCWaŠ&E\Lqki`G_I]Bif#V! Bg2 E=ƬZT"BRHe'ň)R3zNJz` Wir5MOS'>s\.ԴPU|F*rʁ85(ʯ\}:q4 >^xw+j@ hhcc#śEˊ~ ~q#11s6M$~Tƺc/LK@G RLq:蛴Z)2Y'R!!0ċ(LlT-HN] IDAT"uhh0Hp;!֡Hu"L#STHa*S 2 ET Ɉbw0NJWHKZEʘ6fʨ* kIKN V9g0'L#pCABV!JY0!ACiRO/KN}'w>O}px\ŧ2?%|l9wHI cHɀ4ؓG2d|X 4U$ھ;+dwj62.>>@!HKt]C:.@fDa+)P0t.:fCzT] 0ή,BeDzR{i.A )EJ>94ƲafrAp;̆fR 4QM5碎IB]i+>'Y#By9C]XqOj0R1 g* frtaJzn4J}aGODi|=D@+eVn:^M+LdfTm[Nvxv5*wf%'KhH^ㆋm'O+mhOa3/+F8&ZncccI9;wǼ?2$n/TiK؜ B=Bs:aƝ,OBMb6xה)t낀hLդ=HPyR@I]S3K+Ӫ-=xU.$ݒ䧡qagE%wqP2]L#SevQҔ_m`jqD~Rbq&J*&*,1ep ,`?k; 4|^} jDX5\k  jh<(k0U4tL0JibW27F{d5LуV!{2czc E>66Gk+xmvl߸?x*z%{60$o..Qy~@ZRNcKI;ɟ_Xˮ;BR(94ܳ~3%O;c4^z}U{{;"99ncccsB+|IgAA曇$Ԇ(%TfP44I ]ih膆n8pA:$DjP|0Mnix~~~̺BAX|x<=)YN3Cu% E֔|cBPfzi8444]a8f':JH0\~*j( OHفZ4!%$Lg,$Qhagm=df@85*RZHqqrՏU>e,gɊEK-xJ 'P"8%Q]j#M }9Sv;y!7p3 I}c;CGNq;3 s\LkUẽi̜RT?=]^/-!bJF WEe44vt<@GwwǒBf|1P(} $>#lz6Q4/q:x= 1pts8RJaH) eHZB+܄A0kus9 Npwt®4LaZ Ap#5Efj<2IKrФD% {֓@L ۨkhr]9Ɖ cg6eS !NRbu4ob6ZΟ뚆j `xOF#2Le4*"4IbRa4jU0j挩,.Dc(hmiq9|ځnh$rBDsnb.?0~X..癧,n5!af'C!LdVay"tV3hʜ T xɀD۪;_'1΁@4 %O;hʼm,/O]iみR~ l9R8̬vp#Eedr m"Os^ D$Su ,~/ _~pm9;. ٿ2;1R||t#횓P{8{眙ٙ-ڪU[u `6Ӵdǎ8q%o7ϓI810cA2.js}23۴Q3)m~1~*N+|i10-Sed9~}MՊB'( IcY`!F+> .RhEs3{~(/-@HׯVUY hil$ H(^u?S2hˡq'PAB?TCP="!B0Z4`Q[ չ?%4J c&ƻh&PZPBmϝPF yLY`-5'x";V~Bɛ)gx]jgN3- $ {8+3vZ->ӛ8Pz;_=)^w('s<|d+ÛVtyBp@h[_q~,V:::8s)߲b.S `㗾i|'*?9zOǪ}5ޟ͇:[M5 o$&ZK(`lFZn#%QA, -}"9b!|hl]6dJ(o6G%g!FiU|\HR)ކfY qhȰb'L[t(E};BcMn`P,A-b+# 1z8>;wh+^_i]6_f#|8{X\&޷lgٴF"p??w _u|K?'-~]{m |AyBpR>2Rze˩ze~a'=ͷz\ynRįw-_})./~w-s/?p>}dHF Ig%2|$4="""zuf }VpErB()DlVMJ8ȌB!HEdFhG*ET!I( nO5]hF%ܢA ÔͶF֞^[E ZZ95:"WChmxzJ@jkS1OVKKTSdD[kM6;3e=ӿ]; :ُRۏG_|G}2C>;ė .eܖ?ް,Ǐ77vᤐ >'M g_p(sQ m M74鈧Gp80a^\~o3z'ɩ OM|IFer{2_ 2o8C }*U 䠧X4F"Fj+Oab'l4:+DO٭p,*vv zly5QPGlƨQ5b0#Jā9Lc5P+Vǟ1dži>q=kK R˟~;Ys>s;_R5|([䛏l7 eOW_H9q}y;{יj DR$Z<<_nbh%⌵^}gpqLz;\g-=/aY pYXj~7C7wkYK=~ ZRvM`xLi#|zܯƫR "||U=EkT|$Kd0X#RRR\p8O+ ،$Ǫr%!k/gUV[ Yih8Sj3"B'Bֺ z"(DuQZt:*^z^!jJKcz$o{Y,qްϝbc;(:px xnQ~c~{re6RGs,מ (\_{3/`۞iװo[pysMۨ`8!'_`ar?\Os'>ԸjnY7\;YQrܾ.R);.ΠMCz_z  BGk#t j+\G!-Iʱwme+%JP-\gQ@̂p*1e)5Q.V}GdR 2 G(bk)[u&Hp\w˱(/a`H@\?|BJAs&Iw{Y ђfNg#] (Q*iopӕKٸ>+-ɥђI IV,оx{XuzO>wp9xtH9[`0̜[ ?ORqei̢Zg֚B@>`0׏2|UBZ_MxR+#Ï㊙Px@gCڪph8Ys#TDͣ٢Kq yz0{Jf%`<̲xjAFi/p(UETXHڎ꠫Ꝏ:E`UN,Ε %BP+HZP,&Lh3&``ةETf졨T:ED@}b! XE+ٖftLcMCBRTݺ%>ٴsԮD}3VtQ-sѼxѺ?63xb!z -&VS e9bUazFXWpGꎗId}OT** Bun5yeWsv04ZKs.l["e ! l|d¾{(#OrOA0S|!ZsD.?Bb*muB)[H@LRou/b&ܘBhhJZ,jo`pC#,hbۡ :R"QaQVXlXڄP1ޔDKD3~j]OM @Ȩ*jF8+J se|FH HXy" bTF hBQh9º'T)B¢dh/c/HƋi 225mT|i>K9nj <~,h+T8ma+wo0??^W-gOupI ay\e]wu^`0T&Cn26gRF3~'?8mIΘgt2/RYbPI5xL`"Q3+jn +h ukLF?$qT 도] <| P9R3N(:v"^] 5G IDAT3H:V4`/4 H5Τj=$UQIүc4||OXObN#u.gng<ӘNnpH8`)R6݇f= S= Ib\wuyW\ު~|H}YY6LdAigjMkEfŽja W@+_ >r*EkO{(<"˜4w"^ر+rim,h$a ƪ1 3-6 " ).T-y(a)D!J+6Z״u$(jJa`u?u1BJ+h3F_9S=O/8,OI}}P_z?= y5X,p;eng1+{c B@Gd₳tx/p 墖Hȗ/U4`9SzZ{ Z$@Q+h&2(MIZvضc-`N0RPE >!.<렫;w㕲ml.iЖ [01kHTRb%R?0Dۊ@AB't3:6} 6qØBfh&>: %=F#`pɸؑ}&RR\$˘~Bk^!F۷]ѓ nmYg֋o>Ǐ7NdL!z[ 4x߿*:Kȑ#ܷO,_wJT .y QB&nxᗾB`x1 t[q+HDK건W$mI.Ztfn{+mM -\n8+ӑn*haq7!+ޡ"e_hl֑cWc_x =nl*c0rǁ LT Ġ|!X\F!(~~v_xUR*n~gwG *S %XRb[ca̳rټG1* %ƴcKRT%M|y~Q(Wmt00Rpܮ4ՋjM/#cwzIg7^Nfvr^FGvrjWVx5Snrk,`0ހLJ*dWƅVT!@֤Қ[dnm m6+6oΖ ۛYޝA }˒T\16Ŧ™IXƛӜruK4 XAӀus¢ZͫظH\ϋ%"E1BU8տc"T`ZH p0EpVE -_/*F!]P)KN9P>(Qo?}ߴNdgσ?FJ+#ioNrβVXL:qsGsGߺUՇןUyR*_3 /f4W9gɍ>9 Ϝlr;|ԵF /njj 0c|UU(H)7x0 D:'JW|Br- Kb@ݗ%AE e!}\֙9io%#5a6 B`Bѣ%4r2g $d3RG—ն(OlEPqh!U9e O"WU(]xFQ J5(?4Q:H%%Ȟ;#_t.|}MH|v15Ē cB)rϩ5!|Vy̓K K+>]tangg/䬥Z GѭWmS`x=0 \fM^TzLa~CQ3@Lh5=BH\ 2jI4sR63ghɧAShCs*C&!ll9)G =_CV( Ճ`2SaaATqA5e -Dz$HA39ElU ZV$`Z7T_w_"b C;R;yF^o{c#ϼ؛.vkA6@vV~mi\vN85 !P>nMy7m )޽ i<~T8B8j.REr PQ}Bh:@*c R @Ry6 p8˶l+\A8'=VPUS"b([XM}: ߭iBXK@ƗyBUtOkE 886ߩyjW{𙖱 Mʢjop<-Bi?k7w}!P \/l mM6=MC{;n?e&/),K`X>ZC&TQ*>G)hEkE&eޤQќ H%lZX\OQ(47&^Ҽ) rdZؖŲOc&7)=Fre*BJAs&IKc _ )Vo|S`x=1 ;"{]sKR5EmGkiOP\.G;36lQqݪ:R~G ;ʎ]L6m,Y:TaDUs-сbμ%gG(w}KE*#[*"c ABkK A,HE#V2%ıBhBES엨?oh@|`˕[JThmY;<]b}}E~Q(y8dv[^8Uf>%w]Ӄƣp!ds"}7βy*||Q AKҳp ח㿿OBNlo([3ʖ@[KWַ,c1ɋJkv=.%߼k/Zhf Z۹qetCq/`i_5}vxeGX j Y:.[|t/ !PJ(WRQEKkXjjQ1||?v 1-<|$BW`P#qhP3CS|E^D(\==O|l WB۶\Gjs\u~#d$y(Om·vҜIpр+v·v}l rŰ=X:ǖ1GמYg1EsVrF3xY3Zcr?oYڐ5\hIk5O|1+^߼ds._»?yd{`xuۯMgn:n1|c0 K);>!DPcDRJe6pp}'w9XBP)U. }yxVohmY8 ǩB R=٥#(K DJ)X|q_cyT/$B "`ƝC\u^7͙ɿÄ%s3wznjϣ湝Xi=MS46ؼ'4S({<0S+ϟcOY \XSXRpE >=E W@+~֓x9sC`0̀ [ouR,K1/K@io*Uh%[h{>\NJȰ؈R QjE`*>Df uRB\xn HNxql XB` *aZ Ƕ8ztJ \EIJtCëq=ZַgLT-i2Fr.Gs:=G,=hm tg|5%k>M4$cl5Rc4WfŢ6R6,26s:Ք<)z9<;5 SΨV-Wnҩ^`0Q_"xhtdt]&Y#m tՒ3>L>_r9#t_h 5 qhZGj 0RR$8qxFΦJᡑ\fsfXc1JZH3x0x)y lhVi]TkTOuE4[腭J5mpضcWHQeI)BJ,JpP -S )I/ptғ+|?*?xg/meVcPklŃW\_sN!s3l7:ËNtj`~WJ(Ę݇F8<<}y^<8‚MǽFʳm8YJ-F  +̌!@oo|!gRTdW>R:bD4Ze> Ed0]kmTpsQ/Qm2p,m|}yQ `4cƲy( *B Cg;  /VFZmcYeY# ^6uoݱTc2rE7|k.C*6,^ʏ=pnjQpv |R_Ύ}#lzqjg>0BRIVeQ7>G <>*DA/'Wn19u* +FmWls=7=`xY8.A`KsGj}ZDXJȉajSJmDi P$1+Rq0n8[hq,DqBQ脢ЖRL&cd4ei!sRJ4o$7f4OS(eE3u?٦f1ͯ:K+=#Cej *b1.2 3.< Ϝ͗gw *9__bٛԨAk(U|%|%_= %e.?wg.i{gPvǺ-b[=4~fFq08Z/p& fA)km7 =v 7d׭[{Y9`֬Y f_Bbl,G\!  D׾ PQVq>eaDD9~t\-PʧTDq.($tDf6 (OXvxа)D0’f09[y|MU eϳpNy9Fu7oo wm:陝we(&F3/R7g>x ~WaŢVd1~s *|r7O).[5sO$X?O;̢ͼGO8G>U/>.8 Ym{y+-q~`00O03NwZkwed$aC ~O j<ǭű%maqDhH٤* 6 LXj0 Wf{]=RJ !NM5 ;[Ze *m"_Ǎ"/bMUwFۈjXx^v12)8xX-h-'K '8cA-/3Z*57 >*!Z(!:?미cu `xb"2 m֬Y[.& !fe1`(zBut\jf #|BNZ7'XSQZ#uh A(A`w/d#N:sjP㊚PU+j*u̸"zָ*;_x?x5?2 tW`0fIq^XsEo=HC*djNR_@TRb&^5L>kAc- Ah_C0#X4~x 5(tUWP=~xX4j@x]­kf< q]wMϾkxTk}q`0ޘ,J% kj{M_'RN+ 53 ޔ2EԊH&vECSV |l6>HQoS:Vŏ=B}A(yƩ.>|bb`4 aƃ`0fI?Z)3ΔRTd"Whܔ⏵\>|߂ԝ[@ѱmNxq}/0NVZ !BE4FBuk>6FLq F  0=$ `0֥̀Ezc/[ rIJE2AK݋z\ PJ#X`prD"H$e~5> IDATMd`QQyLU q5ǯ~.1c:7/mb`16)5 0%Cы `0L˖7ܐx@L:dTShj1s TBcϪUDm[8áCO~žpZ Tu4`c<8t\L69nQhȷ4DB`0]続8`/ Xz g2aÆ?W*֞[W{l_5.c(c0 `0^*/ ѷ|ۓ{=^dެ|\ynܩ5ָ [tV,%8B q,ʹX,%=wqGwa `0 WJpm iGܶ77R$gkbQh?6ф !uuBWC(D&n7*{ BHO~勥XZ~a:|Gm#Džh8 !IJ15Nbv\)_5WJ?TҕReo< 7CZhd, E%8؎…=4k0 `9Dֲf͚"?=ط=˔eRJiYV[CCCY)](V*,!Z_[-ʧ c>ttEU.g``9sc|vR 06 *jM̙ WӴ E>駝F2},eM*###,]T]O)YCssZk8xK.tJV;q=zpBx"lݶRD&h?RO?d2뺌fS[q?ommq;`072 éW_}-BKRyuJ5) 9usOcbxM/H%di hldˎn,4AuP,P*iiirXV?A{[k\ճ,IgG`3ZӼyػwΩ[##456³ghM184Ȣ ǡcq9B6ŶmΝSw ``0 y{vxk_5 /ZU]u bD"ACC榦MD2A&&V4d#GH&9--̀fvZeT)¬^Sǯs)%#455|x͌*~477!W< `0 c SL:@XR%"ИI8A "d&'Τ;7myZZZhko` ~,R)oddT2Uїp*aXmtʄY;Z?͎L[[,`0 DxV 7 #} a\ۮ ;!%+o!l\eh'Vv>R)FFGYhaZfwknZfϳ`:={hkmc4eAM,)I;}|Xvuulٺ&"hͲeKcHKm k0 `9F d2EtvvLhho gς3`?ZŒŋfhJ#:;ikm%;6%-z̟fN[\.OWWgXm {m62ƺ}gXb9477 UJ)e}˩`0 aƘWQë۶hjj2O6[pRZ `0N"Ɖ`x 288H6;( \ (S;: {n [\CdGsc.FFGp]{qn|?PwQϵ0##a6\;wfb `0^fL`x +E R0T ,̟O_/ͲuvnJ00@JI[[+|nQvzmw^R )eVJLDl*`0 /7Bh0BId$+9t0RJ ʼn… >ޟ5&0##,YJ2˗-e߾XMPdaOBa¶0S܆7)`8{Anll '!tÄHDl̒lA;eYH"ĄpD"A2`hhqT)0ϫ= 0kVKy466dؼy vmqH`aͧz  (rPkgݺuOnsoZ !~hYNt-NJyBuon۶NN L+?B.8WO[TSS}urn{etֿ,]v_jqzmYZh;Sgm7J&\RJ.YBT}gOtT29sIcc#---J)cƪshR}\+Xè`x)tΝg axa`ύ7mOhn^CoooR9Nsk׮mT*]g2'*z{{;sR׭[70mw[0cjwߝ>jԯS7!ě?N&_*B,9)\JUb ^PsWn=˲nZ_zo喦uonK*}->_+#wߡɎq7v:3T*mo<8 `0 Rb;NVkI,WHoo^`Rsڵ ޻υsoo=A foo]RiX)eY{JRooYի}WJm{{{zm-dtoo}Gn4x{w8oOw}4^UB*NxʲHM7vj7|{{{{t]T*= 6lQ{wU} ;rfK&-*.wHZmkm}nooۖ>b^k- ĕ ("`ȞYϜA0L2}^J9LL_9?T]]O}PUUUV]]AvqIS%uB@*ȄrveoX1c^MӜ99EFcmkAn0 X>cojUx6/`c8we/Nܐsѹc7hWUU%g:|4y:2nV7_x, Y9Ӯ=&m+yF_P yk9rx{?cWKL,`%Bz*8B7B!dNE!gׯuuuE}Pm~nݺM wX>YjUjZe0\ `e~{RQ6'Nkyuu]HK\lt8T {| v=r(c]2p8~ O?qzse־)뫫oE ~ +s~+qwB!k0Yb'#qt1X!Ͼ!Ts…~IF. e<`;|p1clc,%kP9 `rO1J`֬Yn03}P(DUU a_i3N쏚I ?KݟX^_82 ۋ?9*ͦ*VWW3Recrο[SSeE =s$IIRF !vvm7jjjn?,UiAHyUVV:$Izc-`sjjj&q`c3b\κ^oٲefuuuB`9V&yx$-ӸOw M .Q8`.Xd͚5g9 )N;ݹN󐆴iƚX$yf'V2pΡiLӄiCeȲ BV"!$'+!4M㜯R7CPa I%i)2ƾXnRSS3sbg7syuu8:ݱ?0ƶ@0\ 6 555}=+pT73 sG[VH3(qmeuu<9eY544$Kt?X8? i"Auvl68NJT{!hg-*`quI`]  >aso}`0u)}۞ *++G{& mkOy5#-Z4@kkk3.[Wt'u[3:F:]EӇ~X`0 B/p`k*h4ő#G y\AB ecB?FrQJms[eeN׼}O1qu .go+.\xի71ytAzkjjҧ1vݛE so,E/H0^w… , q*gz֬Ye]o0MӜ"£: H]]]2*++'7444w1:L  4644t-'o-PhuMM.yammmi]]7m@oYhQ8o]zu<`kii9TUU0Lzp4_momm䜌 i"BUU8HǓjJOB! ?By/i*iz(BT`0c$)z'\LO`G[)\'B#cپhj JR8^oL$] cc&18:wO}}}| mb㜋 i8A[whL- lp$I1s}`nJhjjYElN7~x4A=}|taE{{;p8viZ(!B0f汄t>`D4'>; B ' 9169 -1M+80% (0テHda1nt:`1Q'jDoŔ~CgN59slñLi19Yf04Ngi}}`0 5 c 7q٬Y׿(Xz^>):~~sF"iNt:o9hM5kֳ(N89~$]hkʕ(Np8J?(EqB0<~f+I裏jP An6MspժUZKtas9G4E[[:;;H$ " t:S#!Bhv!݊+n_z!qP{Ǭ0 $I˕ j%y CEQ\.ZHٻw/mvŋ/_^p;<֬Y)"dDQb1Hp8p8rfČsD"EQ( AnG~~>v)@B!(!$dx^d2d2x<4vNN6-5("A0 *t]0MN. ~?%B!A(!$d H%YAUU(ph^I "$I$I|9ޔ{ sl6ȲJV34 nV< qύȲ$B!BB㥯˳D+!b%EQ:+9<}LOn7N'A8XrΏKxXƺNQt:zzt:S4!B% 5Ǔzs4STӉI0 *IIߩ+FH&P23ے~[M$c # B!,KO?v._O~ MӐL&ۋH$MRP9O>. @eB!$BMu"#!L4ͬ볦F"D"Ȳ ߏbx?i"G9cbL&qAan3J![(!$dzZAIAS8m6AH5u=J(2n7dYN%|#@]E5zh(0zzz Y@ QF ޜ9A,äIr%BM2^b%q,LRgRCIDATt1M@4!qhG$8hxI9PNi\0z( Z[[˅L<vB!%9$E( VxIr 2dY>a$ yyycc . D"hiiAss31a~wM!)J  VqtXS;{򙦙( TUM\TOݞZ? U >x>nHBoo/1e>J!BBZ aGY=$A$nT0Lz (7: (x!gw➯}ӿ. {s>m exw+mX 43v?@c}p&Fb7~`iڕg5BRͽ=xV(8x1hd-eϧ8N@uVl7Q1a1c^彧) ҁbxv.׬CcQрo pnb\/_w=,{ILuٰ{F5oP4nB@z6*fW}s&hxq$6cgCy6ȗO @ZiJt'mމ Cno~ Oz=6(l[9SQ==^xe:%7]s3fF$n|a7|Ylpw1xxQ> )-uspIl)חa럢ĝ0 wzZ8̿q&6<_6Ս[f⦄B1j7 IkKv=^#ضs\c d3 щNa\z /Ο7Ĩ 0ٟ nŪ1Cه疯Bш[E`t 1ė` W݈ )sBه2$_;2pmx/#9l.ܙyZAË{1nVΦ G7?N_x.x:Ɣ%о ,0<#%*l؆[_}6,Tv)ڼm}0 ַZ0֭o^WF\['p2.݊s~.)Au,wN1l +Gŝp(@J,p!<n~>Q^|ʯ-hJA84FȰTzDP1NIaPA+qȿcz+ۡcsœE1i;6ͽ`T<61iT+p%ȓ; ph`X(:c.oocY} Xvu1;DB1܀$?FjEċ0{d"|.]Hj&@Nm$/>w4&:}RR_=6o"ĨK0m&liK:ۺad_zBGG|z%~b)ԋw~K} zs!321tvtmaDlxуo.[/8mF=_z=[8vLW;@0^}lxo [w[ nBRNo.gpv++{݆^βeFE1*ՁQ^.]CC ѩ9}v(dc}vrv$;hnae:}c^D/%2m@.,l;5Mc {TN!DBCX?`J>E7?<7|Y_n[5\v tm+>LN̟Tx<?Ip4?[;q,O=4v}j4k3ms寏W^%ı O><}Ў)3&` &giiD"g .`_F{};g̘q!!ٔH$>Ӛ}V"f $.ƒ?2&㿟ZpŸ+qb-`ոrփM6\6e9s^8d^jTqs>V4bb wknw&<*ލ 4eܽb#(; rJ1MpL&S a..9֜yEAABHv>LߛVCzs%2h2!ÁlE}X0}xL1 ~"ZCH!B!#iB!BHE !!B!@ PBH!B!#% Mr ! 594M󉢈X,6$"\( !$d8$IP!dX2M Y/6ݎ!9!H$F @xBnqdYƮ]hBNA4ٳ% I&tuuQB9Gww77d#$AQ|PeHI!@4ڵ ]]]lԘ"I<۝gl$#)I:1ƲBFpxTUE,C4fAfCGG^yC]΅Zdxc13`0ڠ*N'A`Ƈ()I|>qa 02!;W6ϙ-#Z#QBƲpyDQ,x<˃$0Cq~3$Iػwo59~s!t/ކX&{̢(n,Ce+aoIENDB`DataLab-1.0.2/doc/images/shots/wpcp.png000066400000000000000000001042101511411446000176260ustar00rootroot00000000000000PNG  IHDR B sRGBgAMA a pHYsodIDATx^ |Uř%񥺭MjilJn7dkPRJ]Ił6v)*fQUEM}Cb*FD|OoݻC.?#VK'  /HRƋ˘1chرtGĉ#QFIwb!;Lx z ' C{ƌR^1V`n!,֎6Nsg7ϿL_ھ}aOH?3 YVb~s&kK'QcqV%\kDz۱[D~kiL&3k"l/xH-lƜgLqaqwF\lJWƒ0Lnzɯx$t^x(} ^^aGP\ o=˛t`^ܿ/s?%&=NB9pLƇ1۵p>M,6`ac #_L8vӘ:ɺcnM~YXi X2tW𳛍 oo{pɃD+QL2nd1N5`M~%[ɒ0t/x=tZM_R{ܤEƎ 2^3JϢ ͜6]݅94b}Zp'f/W:pYi_A-<=rMK/E= ]MߗhWvs|)IBEw?+/SYyɼKk#ëՓ˳W믽^e gۀ˿~'J[x~zn~XAj"Wh} ~Jzbc=ߍӛ(ikk;2 Fssi=nH /E3#GbՁ>-l/EULlVzvmKo|=97y}v=[=M)!~y%r&G\Co N{K ;HTqOJGz3SEa8tUP2V/O]s\(|2Mx:m:w"r ?iߍ΃;VgEޝ]Zvam7&S'GBqqV\!%&(Bf>-]G{^gqK Akˉ&Fͯ"~%zsn}m-B7oV=K_o^A\N9TO)p)!ی83;qvEHX=sWЃ?_{qmoC˜?kF0o\K~j#9`3K%wu~эߎj',-=yς-|C//>9)gz7\W f~0K?9GKNA?-?g}\+uO ?.hX 'rzs?ɓBf6|u1^%]inyz >fʧ]B?j˅Vz?e _BXSj zg$<8M(U9b)|?}uX8`$ |J8 '}  FfBg$^8|-0iO`ƽF!5b\FXp"k ?jYD+UYڵSN5 7MEcPNKk so.Q:5 ʄ;E'XK[@?moY{3>&ʐ`O7"9[ŋ/O'.Y:N?FvF͏o0(҆/Ю/(l,Ыwձܺǫjs^WoE) gn vxa&I4 d8gˆM~Y߫tɰpKd:^d#LbҝL7,(3Ah),(r\Tn"Q±ɦ1qFl"I&2DKnk~i0sBMm2ƏFN됸\\qУwei&m$Nf&;#m9omE-b=7W`nOo' ~Iԍپ9m; Bq / +}k&S؄^z4[ '|IK^NA(wcN|:|=HLń^r iF̭ʏL #|Is4hdHԝ}yxz| ?A0O>33Ω5,׃Tt^r ?|8# z!)d_d$G&4AәOkq +-Nr1 5f2M8E*2\ x{2# ʰ,f@rIp?UaT ~N*h78\~#l,8}V /]v^%_'2A1x#` RV 0d" 턻!l{6؏_' dž%VGYq +}XiLN2L]K7 7 EӒ|:q4 +YdwSOyg8;ӚJ~6l8.a'җ/d+FZ SiD80mxM9dۍ*x&n] 3HɷVHss[Pp縦g[d"\ӛ4g+;5P~$AH~ϓ+ ߿2=E>glϘOo2a٤▉uMN7ag-|c0WD~d#l9>ODI>?C~'ᢋ.RD=X, $#i,$tR]A<ںfҲQ°_2uZ>du|iTw^jy/׉;$002$%-w-jk?4, Tmjj@AiMYH)>B̭M@/4UWҭ#>C#$LYx߰֎r+-u%;)~v˭kWͻGjdt, #e>u BY(Ҷ:֡X͵RHռe>s2\{U 7 USur ͛^QڂN=ͫh%mESKHgeoYt#HC:%[ILɓR0p #yiie6#}2""=SWͣsVᒔu٭r<}VwzjlZ,?"?#=~Z%:[~TwТ/w)0cMU?l[On%öeD:*dODșFvJ *iHW:Y "U,2<پ߰P<*[#mǣ=,:#5 SXFhYF7xV]eu iƝt':3-^Ubνi4cekT6SDp0E!ܯfBa.@x ӡi)b ? 6"M鴦.Q;Xme;}SԞl%i?^e0ز6L?`Dš~9’ 6Bw Vn?|F],uE3tR]4mKI0w,6@HpZ9߹i!vrAjfΜn֯_o Go~L7 #:,@#`B@H 0R14c u l8p>LS稣I&GLa رciϞ=V;pꫯOEEE4jT8~sǎ'XPGp!7.!)@nwyGؾ};M8;8e.,$ڵN:$e<%LV(魷ޒ/^z%6m=ZˡC矧E Gp _ihHڿHXQithKV0DE 9.a!-.G o7;-iB |:͖pX JtN][DoO;OI2U')!{_[FJ:g벙4sVu#l]F3g.7!7ȷ|6Yί! C (M,6M<&:&}k4 qg̦)_'pĉrեu-uܓthEb%eX(ƅ\/yAd:5ruN16lbp#3'At4n?egR:t[QKm } E'%ݧm#p%c /P7Rez/%GUDCCrA_n*iJٌ;in˝* A7l&Kݺv?Qm1NYH/)؈t呫tsSk ݹV\GQ!W{/([iUh\Ӣ2T., h­4[hoz `Ž}$70Bwmb=NGZ7}LH:xĭF7{[Lgennf;) wKo a+{}[ZR0-^Y%U_I^;WnfQw!_D6,jegfcf]k1V xh!Չ^6墲Z"l m0¦,\/NweivȕuV9ҥTwʸ}S;da:m n2 _^w=$Qa!l$y﹃+/bl@U=Uڇ?w.5i #ߠiJmJ[07a *'Kv;YGko|$VXa1L%߷C[ֵʧ61uڌhFF]niECF<23iw&ve.7hZ# 4~ngJсnÛO+u٭5[oS\i[t<Ո{˝|(-*гXNjj6O;U4~F(n=ywېQWnEvPUtf!"tA˿|/CB } .$/wyrzVV᾵Rn}Kb BБځ/"H<q!X{҅<`zѡ{KqO(QWJ=MP{G %#FZȸ Gt@ Qi>U{.с^g#S9jm'4? c,.U!ǕKQ29ߏ>b<stt?),?iY~}8B+`%; l $lY7^{D8R=JA:k~Bz|YV? a! Йg֣7oޜ0o z4j^k_8e˾}dG>n8e.;vGE}34 y‘GI+W~[9?(xW_}NWPtC/Q?kÀ Rx!@HN`dTXs>|M@H 0R裏}cS>! |̘1 駟{ʯE x$NRBFq (**R ٠ߣ#)!Gq|N#b׮] /{Z:0.=X ײ!Ya߁S?>ٿ[= {9zvW_U22~}3gn Gyv7UTMXb24C.91u:d;Zt,V!o=C)tHf9|xHhG !]nx wXxy]K+m{l5܋hÃRͽch9_#z_^M%\3+_~[u&$:\p&>ʾKuI:pWҦ}gt GK ePҹ.?쾋.Tƙb,#@DnM 7{Qq4۴u6ڸ1jB*,Ǣ@si傈Yl}k3_& H#ë l79z#ʘy>b=6ڏM7 HpI`muڹM*qNtm\;ǯ Wkl9eq}~CogBz&nRDtgk~mWgz.:/~m:a3qȗ)};;0WДr'N}W~<ޜz!rL.C""g+q'/DT< 㬯ts"1?Oߴ?w=EtrN7u1Ǝ7Gٗ~EFGN&=]?_G'ڝt7-nuu_FƍdB즮k&k,w42ҏ_{tfOs/:]ѱO{H&DYҊ͟mK 1N^a A$2..SN^>"uXN猓B3=N>]T.Mn$W/R':I )gt!):V ۊ}4>D^?> 9.CJvdkk'=HZlX!;y-^F/&=}6l.ӧ AgDM7 UH8wiΝoѭ^CZ=_.WMnA9{4nғ/ %:5Dssf۞gJ#"ˋd Ocdڵ{{/_UOyڛGh>ɯ9OrKQ1Y>j#ҙ,G?BtȬKapZ>0gZq PNwؿOѭFx̃ԩ v>HL?#ӭi>G9OqV@i cko_S* f1&嗴ȵ{TF"_Yewx7ShsGM-}}1=̏p~Σӓ5D'vN\5zfѶ6 ak#rOw<=_%F]MEmk_'8q` "J<}Z吘ܳ”VSotQ/t@>Ae ѡYJu.[\tgуWHo9Z`Qk xkZi/.}E+tO︈ vm_H+A#<2\gϞ=4au{]D[_.K3$a1;8$Nqʅ 9]MLk["?ShOӏ=AA`vZZ:j>u+w1"~Ȟ13#$6n-~:rz'8Ő>C}t.?"h DvzA.Ҝ0ҋ/(@X0Q>8ZhdAHxxſ}c@d\H/x(]oߧCG Cɂɴ!$BK $7Һ  < n:<\:lя$OXNTHtOX>&F $#`B@H5k ֛D 닿~_OHֿ/TwūJ'|:?ۓ~[$]ܗV! 0!F $#`BBl]F3 @\uLYk6JfrgҲʈg2a#E:dtNS~eRWQA!!DVBGLK7Ъ\غv0!1a 3N24DCr ڰh*䮄30ٰ/KVK[6K]P" !nę~rKNmW:HvT 3|9AzgjgR]̨]}xO0 i4$͘GRFХ.|paս}Řky@T۵٪>1.Ι^Wuu1%JBBhLSWҭKl3e!W*ϡRp<_U Z*7ܺ*lU3;|Zd RyNScakS~jdæim@eqP蠞,3+ ! e;]EGAgӦӭ{pp1pc%J!%l}a8Nc_6ТIVίU=|:jISF&lwi:sMX>&!d* +w["w:H 3,MBXhhQp=6ævchRUÙh,\+ jT2[i-IOIS{Y)g_dEֈn%2XtEҿ+aԔ!(I5zJ$rWhcLQ=ʳG\鬛JNy[']T{.&{AZZ 3 @HHSޠulSh!A(U,ӄu R`tӒV4XҽzCrhk) .qZ WX)` YNI%r= +m^GXiYaА>ָcǎS2*FxErZ hSAmQ7T=UkwŸ[&O\ƫꈺ(ģL.3m,5jxX6g#>aU*uvVRkiV/tb{lU~iX>(hoo'>IEdeeXXz53̙LNXKD% [᧎*œpN~g_dfaTXXHK. z^7tLO$BX`($$5MNË' &*s hy@@H 0!F $#iN}`1tT̜N~ AHt  < $ |Hw.{ +e5h?k7=7%Oi]Aq2\ѳN6髯0 <"KM|7U-gM$W񏢃n7mw !y4 WA9H_}-'40&a nztxV#pVGrͣSRt̋f&{?30?8LGn?F&3=_ Oq#4wNyߦ:hed#?(Sgˣ<4 cyW4H}<#Ԟ}hktsTr|O܈NOP1Th]S|Gq$Vհox|@_j'44]qeF$k785i cy$8]jw?pwx^wT.M|_pQ:\]'G&/ҝ-+1g~!~t@GO/xG'?F͛hIW9HqBVqPk9Ly/ ռ#M>5Fj`f\XDS7+ȫ5 CCCg8woQoe˖y^KtBSxකU͂ iƗ*0ԞBHH>35p0ƆҕN?2TƆ_O T>AGNk *9DFC<px$kRv`&ts)< '; Y"EJ*?$_$|MMtرcI&ܹs}S&h# \Üje^dDǏwkۊo6h=?l!mzDGr <1*|sm<;Az9vt_QsѰ>K@IO7. :~ցXozmvSU%?;r nj $rmWfU[I,rC)/>8OtwP7 o7WJI(xᇇf͚nI<,\=:u+`#Njal-ZhnawP]5! -VWŔIp8Szaa!/ ],<`A2!e~ꩧp T.h_9^Ye7̲ o-TDonzۤ۬fLG q?==aw#{R P-0-+u >$80ۧٱc9|+;/|9-yt&ECX3:y[` dUTٕg\I9J\ԯ\W?rh\<7Zz`A^( 銉Z418[i',t>gҰQ [ӝsN+D5漊.M{$(vӥ5vxfLbyWm.&YXK))~;[_R9D4 ƣeEc#-M}4w8]#n?8n~\j? sx]1ņ##jc-N5`5[uX(eQ8[)=:Ac_LxG `7|ҎwņW?X&i8BkD^pѲ_8;P. 1蓢;k/+ň)3ym$qS,=<uqc:q Q$>Oަ|,32d<_^Q~h|oc`MØ .P6bshM࣢ hե59Rʇ 1 mj]L41ۙ,s4 c/hYNg}>ߏ }&~rxx9l$ckN2qL :aomF|i1lj׾Qٶ*d*"$0I՝Ѳ}v#町]$ gk#a_1$Gw#@|y,r`ix2l}QUiςQ~Lxg~i~F>i24 swL{62af@@$0_p_[_cWȿݍ4(Xz'?IuM |n;nx'I 0!F $#`BdcJ֭~ۧLb;v,s9te)`xSʈf:x ]~RbǎIs ͞=[|qQqF}fҤI4w\q[[Z}b)\UPYеXĝ/J=v\-V^{xn v2G-Vqdʖȗ:29|k-BU[ܥw-q=Hv.~j%{{BvZOD"ɈS , )UQsF"&[/i-wRs'*jߺmjH;ªOU'+K1E54~buקo\w"u#]-o|lL N~X/<03U9RUٲM2=۫Eɂ*m\n]"KKT{GYQsg;f\ĩG먽t!~2b*-a)(5D$[zyp`@Hګ#.KmUQSPo asxPkxQgy3`kq .Yqy\/rA0AJ4>5%e4j#LtuRmCX_DGDBֳZ4\QVT}7t]_;7֜Hďf7ǫVz6\7E`.:}1?z/ ;*S4_x_"~0TUJqK\ս;:-3ߵ,l_ѵK۔w=RЅ◟N) Qs T˂Bdܝx6uT81ˤT;2FM%X-Y`~3HX'DHyc)#*hvD%-#pV:먡JTwۏT+ E{%@8_?"etJA~/}@wF2Ks 嗐 DdZ.:57em*w*kqx{aM5V)&V&4.%"7"O펺hC,R, <B/Bf_ Hy萋] }kUOccV/rN%jkz#\'Q\g Y {7- ƃÕ9a~iyZ{ K.BG"ċ2Y˷ȉӕ<6N# $$mTK|NuYw QQE6Z2x΁D8HSp<2\ʩ!g+eDx:;jY.Pӫ:Bf@SQ%^چ61SK}#L]ΟTAK# fJmXLu+5.HriPjEE4]ZVMFýc# }4h^RT/5J=XL**9Ov<0^V"^RUوQcC-Fz7bdᗗ~l$_e% *sӔ=^B9Wwkq5voi_%[c veb3{O+"jW XP>]пM:1tuGw.* n$ekʨVaԄ<qXVaHtQGN|2@ͯ>K{G3aʼng2*᠂eO-5-@q5v?<]GN: ֭ozϋ?#ÕZjSF[W0R!eMKʔ0 h7Jv)M7D*[z6 x'_nu}" 3/^Ȏ]~v*x{Lzti[)r k֬]vI!`ٲe R`XRO/{T*H~ɵq|o#P$2֖eTgi`t3 >p9D |ŶgAX|]ϫ;e…tlB\ګE]]$L!fQ;<귷b:Km h:qGoKn0a}!׏'x gD;^r<5]9%22 QXj{^ޫo.9'} TPs-#  #wUι}"NHxGرZ\CG ܱc2]@HP+a{~sqsfJk)Turc cETZp W <]}ϙxizV@@<BB=:Yl@sP{~'J=NB ;<u``I?YW7 yR| _y#.|!o>uώ;~O!\}Yx5q{ ~ZkJNIjhn9p|v9L 9"9NAVVV&yիi̘14ge H\DX 3gي[3t|={6ҥK凒nI&Wۺ2iIT#jY !.ը=nYe6epvtK~w=O7ṷ8$uyԮK~w77AIxhϭeg:33yj6qu+d{]{1?^ncXvg& r#zh>zF;@YVپ ~n < ſDX 7cA@H zizƍaddl3r˯wO~yyvTZܤ={B)=(VF 郧X ~S MHmTXt;J$;/rktkѺ.˽jDZ:qHR,耋3-Iq@ANj"k2,!j_gn[,2u喇:zЊawN?7RL;eTS]Q܍=K^R/w$rWĢλ#WGo2(\J=}!AQG8 ;Q{O-Uy ]WLuУ^[bVr6>O:X]viW1ye6e/_*y[<=w"aԓ|g=܃a BS{ G(FҼ{ /N<{=[BB"ZmJat ϗO9S\u;ٺ մRm t*wg Hv}]z}eT2r 2rB)ORF]Lų##DP+Pc6M!դ^] +TFVjP9-MO-QwѰ5Uh-/,w80-qa? Ws^=Q>V:mwzڣ~-Jm-.+}l. }Fsgw$T;Wۤo==q$qyOs}O $ 먝I$+6%4\!DRHW:nVZj)zZa=# REh)Sx:)S{ur7@1V\[!٪XPo ǧY˖#"XF=MQft-6~QҜlF voD{;}^u!^X?k:nݜ^y1:~u?gmuW{e+>Hka,&V&4.ObпzESTe*uPC}G4R+|hElX{!Ͷk/#SK ~%@ůAŇ񌃖idDEq ָF\>CIF[F"J'"}vzI%,SxW8Յ8q7?&\8U2 gdLHXnxt{^GQ.uhyc}=vF#ՠ5DmrMKʔy& ~֫~J x\/4JU+v"ITLPɧnrn@2"$Yv%e˖y^,( JZň[odJa-2m'SxjUzJѸAJSxD95i$[I8DwnBik_6u-z^ZͣH6,<ʳ88үW{P7Im+tdDHظq#]|4vXebfҤI4w\z駕IR8AsL`S ;д8(?hT O9QlAZ? % U*Vi,6]9GĜfZBT~QidOGijJ5Hl9EROZZ\xƁ)>kZ$uMG\}4S6Z]-o,Ujz|DFcBayWzcL_]H&$U-S~ܥ={fϞ=2CKWw$5)… oWw MTW7lE]]T>jYb WI|H7gY$Usqo{/󇵝&L:$Z},\>Ο*6*J5 @ =kycT F4  :TGQ~zc2d/ptxKeڗH'jA~Vi HBwؾGн{:"twx^ۮ|%Zz' ~{~Ϗ{{xl:D̋1@HH7< dooP{٢ 1a=~@Hvs#d.袎Vm=F; nDY Y;u<{5{4% 2"$ۧٱcG)KϞ_|7}x5q|j|r ;uFTgL::_odz½H&PQ.5YtE$jibGFk ?Ȉk*,,K%y]7tÜ9s̃= !:֤D5oguҺwvū-¦ -pz|13&]f?xwmo]~8fعى9wqȿMy$ؚ.n%E_xEp #x#nYcUY +TN>g9Nyp-[S;=#EgG@`᢮qkj:uvFFHۄEMHḐjf?Rp-MY ^9]11F+,7 ʼn pto ɸA)x济ٞO $:268YGϮ&j_N=f`m"{{?-AN0G08>'q)!0q뵝5.v*Vj-m"I[c<Ӂ`GLG@b/qɓ*lMVձ]٨? GtlMXp #r 3H#j-oW[Q@@ְ5|\2iB!F $#`B@H 0O?4۷O2vX:s.S&$nȈf:x ]~RbǎIs 'ƍ/I&ܹs!s)lut~KeEE푄'cp][A,\wWB_/S#DŔnκZ {@HjFK=UeӶj,w+U;8j̘18:o2e,\J=}\b'<*v:f+nSݫ:1}o7ȒˇŬ4o z_l< egSuY+uz8l=w[ǘ)9o'pk(gJljKcF +^!; $HDUmӸzyкK' Ԫ\]TېgG*h*"$TjQD,K>?2AԤ*OEsNն6:TWPh͘3".}"2<JB-jv׵St8C%+_<ܲx-#wZ_g{ŒGZSci cz9ƚӅYET/JЊ^4)ի}jhΰ1z rPʸj{4u榸39f5hu.yܷuZ/{Uh|=FX#հD-:1N$ŚZGˢuEKD\lz*&^]TPR'#*2~y@!׳ŝV``B@H 0!F $#`dTAA H 1jmUy3/vUmDMzKVfҺӢYg[Yk Km6N{k8uQ_oqZAOik"Z!î֚"YqI&yeG~y4y۵K۔SbuI&-ޢȑng&۫cґp>/ $qZ``Umx"$F}ler.{ãpknx[C Kе` ;^if%d[\ M2* u$sVM#]+oKG#&XVLpK_9<3IO-5d'Ë ֭ozϋ?#1V#y%:ԪH8.^ifF-MFձT$67k`noũO<-z^UG0:l uHzer{f@;I[&"|#2"$lܸ.b;v213i$;w.=$DX$#"g# vFr~yQAUJ,3Z/ "y]R#>*aX֨0<ϰ4CWcW{|;S{ԋ[N2mnLkˆQ }JxyQhԬOV*L5CFz2*FE '{fBVjJUm2XӐD<04{lu͞={d&ai=t͗>HjXS ߮ }]UA0UG uQX@h*NlF`f4;~muws}}՝?0a}!RQ#Uu&w [ AJ\N?X%me/}yEVŪؼie  ݳ>|"n譽r~p=? *tG=:Z,0F%2O-MTFNu(/9 j_lSc֯hy!׼H  3dDH#۷OcǎSH HlQT(fO.o!۫ۘ8G1Zz`A>le \i*U>@uu3?:fjiL9R;?B7$V߱أ#},w 2"$ǚ iҥCI^M7$?0g\&zdn G3B;FX#X^>ӻWdؚ.n%E_xN?p1r߱rM@ZE2SSIYc 9 $)/~YXp`BI(yq c+?@@H i,sǁ\:Q:B -Zj(bT`_۬'ZYZǖ[F~T?>!' X#`B@H 0!FҺôw^/=cҨQ+ ɩ$P;И1c o сh4~x w'#<2F@غux@~e Fi<(n<@׿U:ٽ{7 ,$`Fi^yz{KgyX裏ʕ+?\!˧~\顇ROH ]`!bĉc&Bi/c5O?7ߤc=Vgعs'}Pr7~Ew+zC#]ɸ\zrځOKϧk9WNھO7w}/kX"y _Y@DWꝾmv%g ~ğG(󼔽?exh5{r-+遨:>:~k;@?+gl^z6Uҍmۥ^'~bEuGǦ;0Wrd0+ixQGF xzXP\\Lw|ޗg3Ye(bv槞 T,uқh:=?ezD\OWΚE'C{9ޗ@8h:2%뤗ޞuhئx="~KTxmYT_ӈ~u2?lZJq2m:Z"tyKT7k>Zt1 ^ M Sm۶mnO~"ұ^BG-0nb.):A]^qVhFX+8J^,m'_o&g|vu/7h>6SYvn# k׮;Ӿ,o׮]Xk.,7L7|=';Rt h'@V~S۩A+ lN3Fb @x2&$[+@^zI>'B{)@01Mԫ Dp| EC4ЧNT}GꧮaZ?8V6u|)M'藆knO=k*\y#yf/"ckXxg_I*//2 8zw_^b4ԗK qu=\u^Uxz{ҿn{t49O9;E?{oq4n~3rM/6H5WҩU66~!b͢bwS$ Ce>ޟ[uH{ijr6iW5 $&!Nsϕ_U s1r+O't<Ϧ .@CxZ!n΢y;E`w'9u $kܒJuu5N*?ğg>iR2erZWQM 'C4 6HD5S,\7FLAv_&/.X@~[p4e"R7i$0c</E- HFV!ANM7 #`B@H 0!F $#`$' B0r)B@H 0!1@H 0!F $#`B@H ahhB@H 0!Q|$}QT S  FMeXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100'Ckm{IDATx^w\]6d Y{uj]V[m[@pȐw$w#@Qy/jD  -<AAZ -\\\,<G[[Ry }JdܔǷT/^+++ w*#"":u1I)v$UQڤ#ݾd܀Uem!рԜ 1W;!hʣ$*cįLyD *8YljIc*50D&]u343g'LjV]O>5RE?tvH%gێj/ *LXR+@̀y(O PoEv=K+O =>gB?">ljP* Y6Pe@,¡U]6m 7\1C@Baar,UDe9,8'SVz{nkןIz̝۬)gTvw_l3 3I;[9]J/0` @<;{I민P˔eg] s-.D"~^^<=TyzN&&V.~CySsAZOKA0HMʸ;F8Iѥ"!)î@MRyݜ1p_КjZ'?u&UN6|m-eGbd;O\4ۈ?jpk vstwü |sN%}{㔅Ci8%Jép,Y6Seʅkz6Ju?l}Z$"#1 >#L>bQ)s"Xؗ< ¾\.+gJ)0T"Ԛ (>;{'[>(bXu{ 5C*zdJB9fap: ?80kSλ;zǵ/g}Qa.}1gRE!%ouIDw;SY0%4{IBaW) {sm|eS*t=zӝ;Mn/{[Y?Of7zFUzm("G [gn`^e&Y2}~󏽮j;SEQ ts 9w7OҺm!$R/-dggwx;9vs6'1ˡ]F߾}Χ*N)A 9{ػ[MybAD=ߤM;v"E"E6Kl䔷ݺǴ Zvܓ%s@f=)%>5v\PWҦM<> (dVU,FSDҩy|YYڹpL)o3vFI;#*˸zki{)@7%#u-DҽG*~M!C]{k}kSȦ]ʓ|655 6GOM]3(O Mm6G`0+++}댎.SiԚMZaLuTU\{=,>sk+VnCWɛ~1O7ﶾwy?taGGo2{ħzfqUxy K = q{&xjŵז^bUෟ{SE_)v:MeΩFWofMLE}Tfy Tpq_ -*踌"9C۲ ocsJ)]k+mL בKPu؞.'޸3mf{6 p3m6EnݼamiO 1zA*^4R$3$W΅[h[H=wPg;6i7ų^c%Ò; 4ͺk6cp=ORSK3~li G[!HdރޝZ1HP ln*48Dlm;-[33ғVHT8y s'$B1ͭ{%ݻf=a@ Ui{V//!ƌc|?۷1 2gʰSȀES=8 yٷlG |=,жVgj KXJrU|حHISxt=OBQE9|=z,Z!MF&_:E)j\a" >mJң@ճhb \*JXULz^I0˿K*VݻKUlB D<#ê XP %y`ljTPOo.GSVRL]geݝqs[_YZ; [z*)}Hg0RBU5oXĺIhkk?{ŚkޝU/ /YŊwimmm)ӃG oQ+'UTBͱP§ ݣҲm_K=0E|=\=_QVĤ@ehTup¾Uv8g>CG:W9ITVFC6 E5/8P%L[_$+ZZ:&%FFE5?}|z| 0mNΚ 70@HQ1tJ&C={ U+9bw$()_BvAٌ&}-.xE"`(]go|:`CW38;uʠ2AӧIeτ%%+JЮ߸ťWǞ jhIs:Y-sl$%FSxmR)v.-ʩzDnV&sxXVzvC ~qg2q-'F~sֶȁays!1ѷ8y^29\qN~Օ72?;|]]ݳgNmmkŋk}6v~ŋz6蔮4 t^=>#V]0!FDdOG>j/P)qfw6g8dX=2w/_3 (z9<ݢ쪘$r3sh<'_D0eFFƆ&flL&uл1mWt8ܾ>7_z*.4LQ<%ѫD4B ;&aR5P׉Ov=C)Onˮ^y [Gߩ6/fDž%ӣZu8&.OnN-ǭ^޷O#=\'LunݧkdbG=`:Km[]`$)Ѻoo;|!&IԾ<na9%Q""Mp ¹a݌r AR$ֵȜ2Tx\MVKVhh{=k3As9 `6dȐȈǎΟ>rǏ2dH`li> Ru+p={fDR8虪 TYi:o7>^m6̞5%%%+-[T:fk2Z4A*K>Xz̛T Z4QKFáYs>*U .&s^MyħƜ{ NW_CCT]~W7ekzzD:3+;f.9K;|hJJuc(] k>Y#[<),{uΆoAk1pZVe>aڭl:4(71̦ɞztLe7^g[0^["W)vZݢ40`#C ޷|}QEzpLXLW\8shh7oYϺ=}Xݛikn/Q}7uncp{vhg?/E$Wvm30sƩNtYS;طpj-zݽ\-Oз} ԩӌ3f̘ѩS<87V]%S 7b^νL>Yu;g:u8Hkp&Rtpk9t{b ݚnIc?9:v>q;9Xw}? {QN9< L٫OM;+}V98ZnΖ6#wmÿ$ ?T|޿w49)c *b{G?nlU{j}t,8C6k7# n=Xcٽv>Ƭ]ckP#–twvt< o' 4Hydv'5յxf~CQe)| G@NU#Vo 7 txY yҕ~-M^0oAdOw~w, +ކn5.- '>: 0l<ː9Y|͖"[x%M^0MA7 r}#r T75 H3$ңKڍg5msh/6TwY<WgkGodmms]c+yM!^D@_Nۧiơk9Up geQi%JuZwXpfCT`瘣YivXHT$[c~%^ם,.:<+I"KZ5Q́;fn*:%<ܟ;D{p w7*tT @ ٦&ꊡts# #SêhS51 HL&ᓌ|MhK8PwLjcaae8TAIIU?gBT+^ 癙+-6)+rTqv86meоL^5֝<ƚ-,]*/--kF?on> r2r*B笘}ۅh"Gи8mI;>%aτc귟2 3!&z,Z!>%=r/zcrC0M.O%73W&DU$U!kNͺNȼk{Ϧ,]Llrp ':ŷ{~TiޞGt(JKʵ5pg^8p%εX{'LB޿rkv!ύ7T۠b{Uq/8@^uft)LIKel+[+=AΜna\ى?G_(5h\[PDY)|88$#\|UJS[!h.iO.XGcIGM21]墧5mمr)z\}ﵑrԹq}4?0͇2ҷx`Om:A˿s2r]k@ :8(.f9ÕvJ\M/_ۥǨ?qw Un 0/_ o;5b9=F`_wN&]1ZqTϖ[O}vEm|eeН}=eZ|Zy:[#]w Uݝtm>4ǻ].U> M[cpP[{qYtنyk540 m:wЩ]#?S6xKݼӶ 7|lylEaf) Mq]1E* %L$۷݋ S5ň7%]cťD"mg׳S>MXAEA zDA߁RAi>GFhAA}A?8OH7ohii8iσAA($ˋ,,,G)rUTAoT*-,,411QQCPAfa>!/<AA R =A) \(A rDAZ. H p8t:l+H G r#jPyD ȷ#66$IWWW|^|IG)zDfI"iӆBpuuǂ/RiPG(@_cG)4W'|M Ҍ)"|&_`!z [(y/.Kʔ#̓. N(<˓/d⚹^\ 4 '\P 7N(6Gw~=Z:T.( |7MISֆo>򏎐utƘjoK} ܄)%'E+aE]z@Sh$E1ըU!gjY>E guZ[ k6"Ξ_NlqS)z>tP)㬶l:ӴES99:N Drxy{1q ?O2tXqRɀ3]q:wjPk.N[566uᠲ+o]CTqL:`Ѳ}.H͠GSTi_~h,j&A۷o߾ YQ)4e JAaR%&F4ş&\A^a|dAHHET@ y*fHg1l.,&%@ ƚbyAԘ)2?+"n6......SΗˊ򭩵ső rwhWrQiYӼ/@EQL DS56V+/D) *E" ùfy4x\-Y+_}(I/7TE%ͪovZG#fHL,.(PTO9TvF"HAfVVd" }Ο? R4.^|П?MK2_^8~αE6x]LnzhhoLHl8h_2L4뾃lC~p'WJ&[w [@gM)ؽJޱ+ (YQFISAA٘i(Bй9EQ,;g H*=ta%EQ֖f)yO/W~1!JA(Ayo"M@p`gu\]y4ޛNS?ߚofӶMclnqӳvpʼn5C;s7Zv|{V̑m֮c>0.=3!WuRM߾ԕxufn;;PEZM]72Nn.u(@ǴN_3c;*Y}3 |M},ٓ$HqSQf%Q>KD{|h (Jy@{|h (Jy@{|h (ff$a>i0 #If+ JAYՍS! =$cccuuu_ #4W_BPy 6<ϸG D= H˅RAiP " -JAAB) \QY***RZPASq(JAY PZGxxPAS} -Us+Z-~د->1Do!Wy! HKK#IR4 5i 4Y,KUMKs۹>_~y]M>:MRY'cҺi1R Ç;::VV[C ktP`ڛYR,|{K/Kj$=qc|b۞<o9s&..nԨQL&Sy HM4]EˬӔab3+9NY|_;v?ݫȿax[s>ofvU,2R3r-@?!oyֱrDaF070Yx]D{mL ͜U|#ZU'2H/bYv=LԯI֭o76_ֱo=Mȹ͔?ɾݘ_b߷BĪUTUU.\\A>M TiL K@|Ϣ^lq<3cawR ?T@yؤky[6l$gMI2t\^^ɀ_mz)%\5Aj^nV?Fٳ05^suC?S(Ps[1RRnnۧgkb@7)Ww{vb\g# rvOY9mGv顅mt{ukpn7w^;m٫cW-;!6AmݺU!8sL=== iYbfjl`I]zuAAj"ʌ^qyxDlz;Yl@ @XU_Hy} Ӛ܊۸O9_"/+&uYۀS*f޾Vu4NNW1vO0ig mccM5C!/&kL$Ϻvl6V6 n6 ֨.PI"O]]}ݺuEEE+WD AA>C <RpU$ %*8gMͨyO竺/:):v?6#b^E:~K㤌s&P0Lz,32#Vg L#,QMujH^JNNJ*P`J{|cǎuss۳gψ#PCAO1N@ĽkϧVPe3\7(R4b+yǒ2dE'Ɉ'McVqF&:Z$&OOE5p],xzFtAq4N;6 wrTi±ut|? %+-Z0H67q|QCAO Fw.^єkKVOmK~<b3c[r]|![o:TIz^#,먢 [F{ ^Ye Ns}hwǘyF\Pӎohb۵gBv~M{djGC=CuΘ15T jHҥKuܹs=A AZxJAYCqvvV w r}F ARAiP " -JAAB) \(A }Ri֡<Ag|R ,xxx(#<<=;AZHA#4W HKK#IR4 5i 4Y,KUMo~ؚU' ]hbTUu :NT"RlZhDtQ,BF#bᎎ5 A~M^{3K ʻK7Ψ aq .+Ư %ygmپ.EfeF]ZݽŨ(U ^P|QL8A:<i4AΥq1ձht:S׶ߤyD+'>˽5F¶loao`ly֍CZqxC/ C߹[prWP|eEQrE}[8| K( 6Z _~Lg6Γ>~}1AVBߵ H5} U+wu,$EZs4J>Pf%c= yo#ܲ]^SW7:y?]zuAAj">A2I^yLo#si:]>x 7k_affmO"7+G|eKcҒb0L9 2to8ؚFdgKwWLOQQL`\n&)<[hʕ! gho;{l?Kzw]c|*o]N]9e%wTW|g1/x"LO_OQU߼ `L 6t#ʙA8`zzZ6SOETMf_~رc3bDS}-FǶ nBj om7bK*J X8vcY2DER1`8 Sq1w~ڛie=ϯAI`uo{\ 0@a[ /͉y }.q|QCAOR@ sԓQߺ-lonkh]4o/DOϨ͌W~; OuO_+oz_7q/ch?ES}Wh)gc(3f̰G AA>z,tEyhwAOPC3Ribbbb:ttt"B) \_ |P " -JAAB) \(A rOJ UllX,#p86moo<JAY(\y ߩoh45DZN:)Ev=///5|F H:B;>JAAB) \V ;OR [3,|$zeDf_˙ËO pH~m UxГ%?'ͭuAdJl+o<~~K9 4WHA25 %c> tf3:) Jxq1iT~,u%OޝPsc ^4Y,g;b @o.iLA;4īU%O-GMcsIpƻ JO]Mo汄V4OA2PƉkj4]lFS"՗T# m;@3‚OU%z2m1{,))g>rrLP.4nR',koO_&\!Dl?Ϸ$PgاA(9#GȔ H )H$>ռcN\ʧJoLr_s?4Ȩ$dZ6\ߔ#Kvh9W*5-u"nkc:Yz)]`' [6{@Wc.ϪӢ+闗t2l{y$R̮4jBYZ~.zr~Ϋ?;/mňJGL{։:+MimS#p~ÜSdƹSGtT9Y.L\ƊR#}?/3#3G*'$[bE/)&AA"u\  -G4䩴vCX=?U!}*.}! /h;4^#tT0ia44X=}ILn>ц$S sz:̟fr!㬶l:ӴES99:N|dB"9l=؟' [ sNe 78H҇.ꡢJh,!C117D:!Lw184kSsE=/xA.1{™5@"/_HKǵ]g\5PEU Zqnam^tLA*N6Petz#ǯg?T+7UԠ:=u0qtdaDIIZr`j%%P%e,uw4ԡ㯁 iS^C@sp>u*琾dpгJ2BP>| @usmlml./-mXPILШA34֯((,{?"73"]\\\\\<?Kkru]:`s8d1)L>2!)hkV-!/&gՇyNq/EwO^ mۂpXc4&V)7Nqin'.Sv=:;7 _gbTt#S₂)H lS̨ijkXNa6T>p{Uc 9Ź=vUMvLC?Dš׈nV֮[3ܹ44XeA154hkUTojTYi)k EAZ:G/QrۙZt-S2`ҟv9qCzr0'-[UPNw,IegWrk@p_Ɛ*)o.tn>{&8ϑde[lS1# zqm!C`@5T/5{ -0ԌWgW t3 #)>k\Ut|Qq54c]mlBdMu3Yd;R4غ:k* }p~Xrb:YFjn˙ ȫ^dTpZCk:xfτ!~dž3X5RfݧÃRed}Rd40jWrT;w IrBt =+ (I{tj+ta\X~d5{iU(gK `E{t֞J) Bln8b;Cy ?ǕuMҫ{&4هvwnĵ5}TG ݇2*0v }E6|&/NYu5o,X,ϟ9YO~y'V׺?k hۥ䫦[4wx~e^KG/[:Pym&Ǣ(uwP*ꔯɈó1M]5~qsutZ8`;O(Yہe5N'D }L{{^Ո~3!Z}ʞ?9|"\m48@|ׂ<NiCo{D ,#TZv TP wΌ52xy=! ! _a< Hp!;>JAYb/^P +<_ cҺiտQ1|pGGh#Ҭ4e bqi&AbX,?5Rc>2p|g3*BؤPb۞<i2gΜ5jT RGS h0(~g2p"2p}fz##Zyy-sxt]Q|rsŗ-"aПս{vö )"ȴnm, })G+l1|1=8Oͯu5w7˪f[<Ѽhy͗37A"Nsyqh󤹃 {'MtT:uqHBz&3t=yi444>}zꂂD3;Y(^ cRi^EUHAmjL763daY,K;RT\ E\=vEAakvnckemcvyii)s5^="pSׄD^֭V ex^$B]Cפם-`,--WAIr`v Ks;٘8tIU# QWW_n]QQʕ+QCAP?񮭄sAGHa`t_ZQQQQGJ322LbrjX^JNNJ*"#FGx<=qԋvSdVZfUjqFX]PQ\aeqcseܬ܏ԌWgWʍfDرc3bDSsOѬ3xT ̿\j=I ׆R4ƣ={3)Yi\VAER ёex}{1cO>:.ܳFl;eNS5V1w )؃TЬ0!AgEmTqK/K `jZ*8[[= Ƿo߮5Ta?k hۥ䫦[׹Nnӣ -$[?ݷkNzL&d9Pw]cѥ0VmXv}mx JAAB) \(A r{D*66V, ]p8l6^ybH$#S\.WWWڨDX͕G w۷4Aixll,IJÿo/_uk&HKکS'ݹw0???-Ç;tbS$m $rL&$I$)drYdUS£Ch8N!E\ PQ\:KĭP0 ,M=}flH2T=5;lI_uqoG}u:wZ{9ͬ{\OGwnz_PSPw=A1} Taaݟz?e*O5!7ziX,簵s?8go<)Jȷ.%EE9yo߾HOHOBX,‚‚|aaH( "P"EBP $ED,HbX1mDR,)*H$D,.KbX,HEEDQX$$bD,%E⢢⢢⒒⒒Ғ⒒⒒bEIŠRŀҲ⒒rD,KI$bX$D,E⢢"DRTTT\ReJ+****+*ʥJTZYY!Je2"\.I2fwﰦRJi0yGMo.4>sZ_H H_v覣ޟQplM>slۜ(Jd2Y|k񻞉36)BSh`ڛYR,|{K/K 42p|gD@ZK$IIIIVNNrJrRRBj̼ܼۜ\PR\$.%"E%"IX"HX "H$D"H(D"*'"H$ BH( "P( A@PX=@ , EbH$"P,"P  H,%EDRLbH(, BA@( "X".*.KBP( P  /+(/,, BPP( "P  BDŠr**+KJK%EP$Œr\NT&+//Jktц|p:6uVnhm6r鑀=]=rKѹvݶDIFlM ]zU4,I=1Մw1DtK̦(8xQr;:r.߿ٮ|[1ѧ}E.X<) [h24/]]=.w@zcziw_mr s:Yuu\#bt`x?!WFqq(q+'oy!IQEso)4y ht-NS.|J-3nIxBTqğڛ^mFOe5{DeaLY.ۍ]PU'2j }͇}[%THyqq߶ֆ<ߢȭI{-_pY{;[{_ʐ5yꍼ֬o  %orrӳ2r3 XR$/ "QDRT$KBH (( yy9yyyyy9srssrs33332ssffgffdffy&%͛䤤䔤Ą䔤بW/^|*::2**eˈȈȈ/_x*U蘘蘘ĤĤׯ###_xaXXhLttLt?EיRZhخ%>>:[JPZsKR/O(>h%nNHMM3 0^^HyⶨwJR3㮤f=OcOW%u סH0ɭ7 ~o,V=)7yu{lUOKJ6v^tI9ۭzQe {gB_~œ7h@$̉s'r:7ೃV`4Fchu4+M%EICr~Zn45xy&|U1C$E 1x(Yj-Sbdϖq]LF97johum(<1hQ6|%T~3MSP*M|#iaiW[3nhtpRVʝE yg._DE oeKI9oYgۡw4\(z\PCO'[sG4k{ڛ~O+8PQ^* "PP )2 jLum-5- A$ QkrS@R8`bAP $8`I$E@)H)!r)!29!JYeEeyYEyRVY.,,VHeJYeYEEyeEyEyYEYyET.r\.+2E$JD]eee%%%%ID").)VJb0///991>>63#=&:*9)1-mNvD,*HJK++* p^} =}1T r@"Svˉi?yL3 ./.F4X^*ecyTOJ]𮟺S @nm6dϮ?ٕFZ0hƃ/p6DSB$]:yB. l5uAa=>F 3kcusEGo#S%rM['~=է:6O6LQ;P(Ar۷R(y򍗖k=xݲr-4FVxI,p13560$} w\1pT-;{ O 4e0,:u4MLFgȸutߝqDgU?u(ǕtÑim+^ @:tA]USSFX1)"y n7zA1cCB|L0 ~/3Y/WT0 ,Qr T*y<-LZ{$L˭ + (JVV6OԿbGŔJ7H& pNWai4|}CSCc y¬AQhLb2 &I@yyyiYYT*\0Sb4:Kd0i80t:M3QPMN`RB^\\V^^QQ)-/UUHr h`N3X*LuU :E,6؂3\簹:lmmm-]6ZYZZX;9rnݦ]vCzاO??Z6137U*KK%E9o /r{7E)1^^4٣v&JHKM<:sKzg/U叓Tk$U%VNdgx-$n;%|44#;D-rKK/W*HիuT* LXXRB\>[S5q8wGz['sc|cSF`+Xj_;M!p].[Q _cd\u"ݶIXr(퉧O2?ꠋܿ~yVnCP%ْڹz =ITO|`,m_u4JE!U")&Ag9م>ä=RewV9Yf6s4#CH>@de1\5vV^ jK47לi( UL&KUKGWS]p,TUUUQQa0L&S`1Hh(VP@8Vs7(>0asxzOV(^Փ<#Vj·`KRiT.d"C$!dTS-O3IH9!JC,Z:0@VZReno rTVYêr"]'*^&ŲAry2DEJ$HBN^e2T*L&(F3YLɒJǙ:\>eԱMQEEjA啉|5]S_hN =>`vYp.慛{(yi6wsuwkվc ۿ/{Y]vJb~xovlK_)pC^܉i;|@uWf:VI"uU큇dYGzHj1Ǭi[U+eq񛖰~w:c'Sۤ;?P+ۜL媉<3DW[Ǹ_m趉"r.?Zw}E2\tLڻlR-{ }sݜJ49]uT(nelQ <Vt BS]fh8X~]9%+͎u;~=򪜢(R_ JעH>;tf5ڂ+ڍr' ?]~wfۉIA#?p#fa(~1?״Swv󉘟us[{Hq+ˁqxǖk.Kf}fZ7gE>lLxlHGߵ-%W{Ћn5qB7u%,*'f2>[F}.))I612622VQQӪ1NT3 zXFA*uU|?wQG%5zJpϡ&q\){ R&PA LSC̈N^6r?hчkwz"bgi~ fgS-W$د}**k"akgUdFc꘺vwme?ZFKlU@dGGbJѫ*-Qa 5?i&^cW>o._dhj i=nY^l7qQ‰aZ۝=.6{qukxvL`(>?aG9Jo {]/M"Oppӛ7o3ӵLMLMMlŢpEa,TIQUVcxU0 .5g[󗺉蟬4 j̻_P{4EQybFQUfE^Y՜|nɪ/"DRF3t8l] L~j@^7aL[EcS1c6^m>,Rѣ"Oa?~ȬJ*hS(f)$$Cyh>>>CN}F ~O=TzCO(IoͰݒH(2ugW*Lڍ< ­'o7|+} ^ KbksMq;C %::ݣxV˞}*zgWk=ᯈb!slн)GKo3n[Ha՗[~l&q:^3ƿы;+oM)Oh}/hAS.U7?ٳe?!XMk=}A}4SM^{3E9'Kp"[>YW0lR^RА5~tfLrw^HNx[֖?Pa.w6C޷ >qx톍__6='g)QR}4SM1FM2v>%6ޘ噸\q= [~v^<mkm-ڏX`I24_;#=C>+n>*);;ɒVv?ޯ(t<9t 7]ی%Csך0j¡N|}^fwz,T 7Nٯ]+uHk1TQZxd^ Pkog`:xm\>쒒-rn3eúso7fot9@Y)~6zV&5"ҞzF~3!P|.-`l@"\_>įKU?!oyֱڛYhx_[C.c(ys&6Z۲s|{ssꉤ\\ssȆz5YQ[{:ڶ!v^={M}=~6?Eyz`ӨC1LJtmնF$l5TG̽6zfN]>ho`h&pkY7VmkᙺYwl_\<HۯrJx4(0BlԞ^n΁{'2oSoP~*/[*OJ_ߤUυ;u4tCbS&U߾yaai?']4eEqhߺ 񡫽@i>M^~;'~T6cawR ?TŚ'xi注[nI2t\^^ɀ_mzY=O =~̋qy/O ϙ]w11'vONjm{On]u5k ˂qSPkR$K ^'&>6ιψ.)g&3A݇Эwӓ}Yuy1W73A xI{# 1rv}HzAF*㋓~S^b~Aihȭg=U/PIR.?¤uGU U+7үuK ĠjMMUp6M r+vl>|Sd~Nv͍9cjb(Ult&J6[WZ>|zǑEʥO7OMDzyV>[g;90;zdƥlLL DnVcڞ>6dtpw9LS] `H B]CZm |u#sJ~f̕i=Ƨ$%^F`XÁIeN'$%(4\ͬFgf\37]DХĻg lC9ة%+dщjʷP5nz=?_7!iUݤdNZ"a** LV%_'?+ꔳ2'=0tȌ'[]-w0ӵH8ϖd uDf~pʬ*B 39|Wu_r32JuR >%ܢG̹au.} H5u`T:$?S= ׄi8)#8kIy}yjƫ3+y;нϫ*7*۠ GyWg7?xe{}۩~0F9<(;0m }dk IrY8+)֥vev{UZRfdkCR`P|6MqrEik ϺxJ K++TJ [ϾYW7E3+߮(>s;bwL1Q0h* Ak%Tѳ #lFeEEeco9RNU_\/Qip}g'V(|2>*.& n~d^,xzFtAq4Zӯ:3z鍊9RmGb{j8}=ZAUf\^+#)^;|%%+|?%4AݟnYv*d'Ydcܰ[ԿaԴ4fQ鰵DӜ:,4ỳn5s6"֙"04yz,FG^"wxWVFY^|XH_ eK T@ay Gڳuttttt-fޔ6}gw1hP“#\|pgLHsy*wtZԾ'dӛyovۼgWSNGGN#(OYSeܽIEqܻ]ýyȇT&;c0K*P!e$?6w"oUlZ{ CO\=۱ {k>%T/lmd`<sZ# |'P( | H˅RAiP " -JAAB) \(A rDAZ. Hi)HQ[Aog' A (  O~* |+("IRyt JO,---((h4ABA<O]]]y\  ܡoVBA*(A rDAZ. H˅RAiP " -JAAB) \(A rDAZ. H˅RAiP " -JAAB) \(A rDAZ. H˅RAiP " -JAAB) \(A ra"n߾<AAG]v*jAAVU)  -. \`ZG i5IENDB`DataLab-1.0.2/doc/images/tutorials/blobs/02.png000066400000000000000000000651721511411446000211020ustar00rootroot00000000000000PNG  IHDRosRGBgAMA a pHYsj։ tEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100'Ckmi)IDATx^u\Kҍݝӳ<@T΅KK}Cؙ>ϳ3D^^ B!L:EGGH@---555sss03!Md˖-% o~|dbr꤬lhhgA|@333v*9 !)?~ܢE R~|)))I(ADAF4M)))|>fY:111C.],E'"""(f9BA$MӑxٳgC /_̄~JV( ,9d)B'If&K$ϢFeL^L]{/9 !~@d& Հ_8rU{;Gr{iSߞ&9 !~@_ 34oAB ؙO%xV+# G#"KQrB@f e\RJ\RʡW%#$;㑚 3GB/BYw$A߷=~{hNj!%nw<ڱ.{H-SA}dӒut]䱛Ior#95HKSs[Hr BI523efGƈbTuu$<82&-3[rʯDgsi pw/9KM/FT[Xzv׽JToA+S_(QOx@Szq{%MwΒ$ı0v$Ǔ4M_U39X4`/goć/Y$$~L[gQ߅<~!wHTLU?n=rJrJQ.4SE\gnscXuvgN#w!;ɟo"½2p^w:=}Ӥ\q'*5}Q'wTe$gX*HqH$!*4")܂$? I\s #SӪѾoa}Ծ卆JO☛+@>v# 'yݭc\7+9#lA@eڶb비v@%PBͯ@E2LMiӃj|I.s^/Enlo4Ջtt55ҰHR_@:;oǶͬfi1GSgvݼw/h֖zjN}WMH@yZZKo&Y_sǬ++j$djڷ8vZʢʡmg{Fwnm74k]_wӯg6mz-/=g]L ?i{qSrV-ػms1"y$è+v{޹݄Iulncangv~(k{E5rj[[u\zyq,Lr?_ˍg: ]̫3鉲27xZnSJG3ճCk L{q{sksK.ȦN=QX!B2d (9w7%hXZEλd_}R3nLL|G|T>&x0ϑ'z/Vb,I/x|8[yv=Kyɿ\U D'.xxxFF^gю, zӀ{8i F 18U|J?_D_X|!>d%=X@b"33nuz1wΑDcifS.FF(S^a4;4Ӗ0Yk<99෍Y3Tn/6${>vP#RoyKJ寞f?xSLHBO#|vw{ѾP!墽luamZ 㟅qgFfo\w)U,DQ/J@ &U# 0h" R_A*Y_4RE:DQ7DtZLR_ʾ?nΠrs -Z:Z+rԘ ݴY eۑ+'r^yo1pT;&!osdЬɴ1!DΜHru7#9R޴O<-&lF~\@P|aAG"sWwߺ=Va,Ta5 aRBͭs~Xx6(L K*̛|ӈhկT0cN0)ɬcKIh@tw;(v7F:.8㯒/_'\^MzNVTܽmg-ugJ#y|m :s G&J[i?L`u7UmVC;In~o%jI][RF,i_ ;BY`g<&rc>*Bs_3@>< HrJ&ψ,#LAt|Ǣ%]٤Q%|nHjx@`ɢ:jvz>8.+'^OEYYFHh(RBTX,~9H=;;md`b+?tj553''ןΊ25R22*t]ҥ=H &S3Q99ѐ6 (%%?fN&ʊDQv33[vZWZRҀDV%7Qzrjޭ;t,/*dqzʵzV]&gXګ2]^=Z%f4jEdqVwqh3`AOn tq_Gwk۲kGbJ?l5Lrr@ϰ(idK\Qb1i ]Uf`jTHdVe鋲 (orebҪn@]_WGHM˭0:heՓRXEXY)4J\dYީCi._A3/2y(Kc澓Hkv5D4$I6npK=u@ee_پ}w=LNP\$>5X@(pk:b `1!E4MSŅ44(sIiBqinrjxrB@y{WӖ_έi:בQ17Y3&bVfaVNŏD9ԧ[XT=[0i4(h4M "] 5ɐ9q>AIWOjƥ!bI ˋRϛlkZhoj݁5gN4?лهD%$^l@.)-x?gn{_ˏ$Iu~1=vsCrO`GQ%'ylzS,>RƔr"5Tq*sSxښuBYW[>51f"5 R+j4ZPbef(Q]`X"B\\ѭrۊͿYxݻrZ޼8>Fr>=~}Pk3HGoKKlLr.c ~OPw\ڰ@>ծG9uR۴R~IcnG.GY'@X~P! Rʂ~$LkW׾?j9f,u^4Pw2DEM)*d4͉;wJEV樰I NOHХť &jL|\/&m̚sFhv}|r=n2ȹ@_k >PeAoH,_4C@F_|:Kʒ&׶{iA]'*֞a`7] H~Av-iZPR,PZPs jĊvXF V2a--"(ElaVnЧy==u*0{4徭}Ƀ(֋PQW  ӺGI<jiU~e2IH@ʩJ1 jҮ˔;YM'&ogkjL؛ki:xe_ke^/la=zL֮?ŭ&ͤ'(~v/ХggCx뗻gnQz.J_lNku }nN@Oc&oCܻG`rmOk݁XtG:&zCoJ{.GS=e:~zRn5V_~ @_ػu'f3݁ rng]hmn+)+{Dow4\mjYc֜ۋDߴgp=֧ڵcivRUyU7ʁa=}a+Y4rt`C?-YZY]{2I@X3OРN[a@@hY .%ǶA6e]-Y mcu Z䙎v"R0 UmszLF>,Gs,vM29cCGR'oھv,Gug@sKKV}~WK,hq9k;Ѳаֲ^iJQý%2JέI& 掕{`eЌ8#9Z$Xr?YnC?dN:y8dT!o~Ww9VZgr6c>ɣ:h4Wv=5Y5g|yYQ>V4b0|t-ojZ]уWn{uII5Ä}~Q4븬씈Psn@|V^nNfӋ4LBD}􈹷o6kL$}-LJw~<ͱj; #00glV;t.lv@dLJ<p 7xcw$\טM(ZxىJ~޹Gs {PpٹsUϜHbU7#9R޴ϪO=-`BMt:,1uN]]H3Z˒?[(,ݎKu Jج࠘>Cٰq!Bhmo"Ri *;3_HcGVf | 4n::wxbC^OKLR}ס--_ZRR>26/a5^{RMK3sj#(;QFRn/heCaןc8Y[XXWRRڀ̤%^iQZRZN)CX\h֯W50wwj-uy!jw}yUm]]Me'E $@Q$GG=+9-<-"ˤ犣)ɯ:^h|ԓ64,.6:ٚ,i刲 éܬlkP+UJfNwD޼ZSW;?#utzR!*>dCɗW Sh +W1R@Wۿ/+g BŤ-W^ŤF\$<0eݣ:B!ToL2zoЅ~OZ˺@P%}mWl*{AeQb2oYQ kia]i?xn|X0.xuT'(|rE a1)}>E++FfigɪZ}u:R(^V;~/.hZXPyR Դl}~a>dBQ(<7JqO|X]59CfMB!g&lT8ܡNo'5As S'Gstlܶ{+L_;c=#]Zj$$'mx8ٍ%9F5 ]<}aZCum w>85AXο\<#7wUɻP@h ZFhܻ^Z~Hh3F~}1;5uZQC.3z.MB j{5K+cmv}#ۗ |BOg-+!Bw5OOϯR$?A7{fdn(Nu&BUjBOMmmcbη~#ye6!B?2bɀČ̬J?B!īB!̄B!T7L!BūB!T7L!Buk3->|(YB!,ꙖLmڴ, E!BÇ]viiCǧ B!3J(U&L!BūB!T7L!ݸq͛ !B?>'6afB!LyfcϜ@j* ߮l5QkGHrh ~әt\!\~5K23 X[SCZt>Oy Vw1Dp8Ǵךf Z15ii0]V>ً-9H7udI#B?>|СC:x8Я_?)3(ݫ;[] %=+E^yk?^%Ǩ/}vD긍a;!ow'䐏d)7'CwSĵTt說κ*z~_)ZTёvjr7 ˲94(j[KSSN_ |A}ؖK{177Jk4RWVXy,8UU~xWC5x~V6ֶSekw'WkCnǥw*V.5-u7H_LgQB232|n:8pHB諒gp:0f'/w;y^S2"& =2T%?si~y1ajSc ǟxҕ RZuNX-=I]?`EeIy':?@!@uw?|(hj! eϸ߁^gL#fBa`Q0=ZR}!Wf|b)|O̼? #v ;xyxKyىh^}ТȈL^ۃB 63pvEeXTdv_:e ʍ纨1؆Nl! Hˈ .g*#IYh`_GX*KL;* ۢc  nLr#tf;$&t [ڣ1" v-%u gtSL#+0 L£$ɀ"J^٣qBhLY&E!RdRPn ]coP. TnjZiY-lmmmmm=7G( (~VfMi׵5r.s \;^[ˢ㔃2zK[hp1נi)Y+rBP_QFL#յ4s&54EYy h3sĉPQs@()+b0HZ(ɝv(ƚ׈*/Bx<__ߗ/_7o޼yϿ۷o% 05uzv`Eޖd9rpxؔGKllm,q%*+=;:~ko[<]lUA ~qRZ9 [@Gwc6cZښ2Hܼ:۲4q'&*=5R\`B!Tt*+)w."9:Z4]4!kOz$eE_ZkF!P ڵsssk[M6[nݺuV\+HN)]f&:Ѷ<"Q⍿.^F Ft2}򰒣+H+AXIxg"J`#ݾW I9%%9TհDrtrCg!eҰڍyuJ(x!O݋i@W/%1gN?HTڕGJK;gu^6dq`ۘ}V tGܣ8`m>9"*CC*٥2x0URZ+l7k#B-EIצ 3Utѣ%|o2evOiZ-7=14p`Jriڳ ϖs.dlZ-ӜptN Ne lYWMonc`hd!!eȵ^sG.&*ƭlͦz{6oyJdL6XkpZLrdDl6w,j@YBTGνW&[(GdZqfZmtP' mr-ɽ4ن5k'2OZ?E5TwEE11uכ!B?"//XDÇ۴i#Y%Jpw|uXF;^.n\Eomw%B!]qssYA>>>p5OOϦgD;oRh  iѽSUwY|1ti>ƞBg&(Vƺzv^}x%&yQt2ӳwS#Bg&Ü!)Yۆ[9D9׋|~i2̬􌴘6S!B g&B&LBcz _z t,Ԕt&y-PT~io [pjۦhO߯v:nXן{XKAs_U.Lr F\Knx/G? W/Fd[V\e3Q <tǥtGgT?F4il[-'|Nm7u#{e@^;'nbl:.\,4 ؜fRgCjpQgvwh1:_`n ::ݶ~{:*/Ʊw#GҨS>'wìtn24M߾W >x{Fdj&ͺ`,sɢ'^BR@SsjQI=+քl~@Ԝ\3\ ˥CLŻDǂ F i!~qb#Q/,m?ôvy_`F)kZt=) ]p\Ä7.-h9;ynew}(:_e q LR ΀`?CJ(_+?{U , R[m"HxA`dZSHEm6{$L(Ӱ״sFfߺ(~tͻ&̛?F½oߤHj;8D /,A> G^x<^ F3 y<$dC:E3}& uFO|t Lժ /_sֶFE5gc:+#G֛SMx*>FJ \xK'<(_^BY)5ͥ G2nn;7@_c8U9 chApײ):C( diEo{83+sXQ]{ܹuԩ[GKnڿc۶N ̬!/&Z{RbicnxD5s2Rd#FPaaE.mLl-JɡQ2BլjٶNvhXj\Ք.ڷ^Xƛpd˱dfԳf:Q6zrmsea'guQW6vWvPɍƚZх~Ƶr54u.IiZOCEEè_)rEw_/2F?4ZGUYݨM/rh(٠ZR޻unzϓP:XeG:{k:̺I:޳[+G6+2 K{;):[}7EiͿ7Eװ\;:!kS){|x&L5 ҳI=WXDe:mM*CP}/F[f$(2}P-E)ӧO6ݴF0.(As̔3fq7W$(nAf/X0k t;L|_E=(Scܜ fTN^YšӧOWޠrr L?oR՘dwD*u?wѼ cϩJO(ן'edU!taFfG#]iNOIKH |"@y(7;YpG0':KMJ]jV,cIy~~+rw<>ws/agHv~nJetdBï0;xyxKyىh.s.PꇔG;]Pշ_?w/Y´1r6 rNNctd⯏򞬜pPϓZ(Z(:Njϟ^wx4O^ܟUn̺W2rM3_8n|^n͉Xw2JxKCN.3dՆ8;gqeE{_`uud_[JV;RYoo!l\NJ%k%xغj=7)(Ԯbzk>]TneJIrZNmm5@*iJf-ZqYִs0!r(|b:ung`([q{Prqb U+W{R1*qQNTPhɊXXZ--dA/?;X,}]ź ]^^NaR9]ʓ[0:R\w6l߷5ꙫ>׾ŷ_RǾ VQV6PTc++hj*ԕJJiuR&QqScɱ/u5e C |`%)!q9"&et ,KcX@Pc|-,//xRoILe "#[kA 8%<w}?:Wb H$ H(]<]I2r/rr_ b t5oFOKP@1Yu`1I!_0hΜN*B`j$ղPP'@, |=-4-]W`mHGQ7oTÉښs̸ӮWeOBIYIGH)sEi##mmmmmmϒSǬQZU^OOBL0 d`2DBx., Ml ,}ԴkZssXv;.>{HuM :'SܥE:Mͤ^= J= d_~juZ׽ ooT/>#Y1ST,_y* ZŁvP@P ZTΜ1clh ‚Z@@3]ZQtiI)((*TAE!z.1CAA:]2g^9/jjQvnuv?´Ysf$(tV9OB*vEYV@]]gi:ryn)_#nsASVKC.&$'Y\j2/:{,;t/.+<+S!kOz$eE_ZkF_pYrTH]C=yC"SS.M'7W>KE ]hKZњ\V\ݬK0$T&+RS_Oru MI{Dtq2^T"H k^L&TQ%>adUt2d'"j}ߋր-D"J3KH)aU CvճokͭUߙ E̩*~WK(;Y L(PkP]Y\&$mPF +2V uM ~ZbVZp-usD@Tͱ4U(ANh06f0X,&IdՃږiq5vI'ӈrhQY^RhT@\=X֛,!)MU6P!+7-{6J8T2 HOQ0׏VDR|TMBE4% kˢħ'Rrһ70/uHuu#w#HvE"Qq -{0!W%>=1xGi :͵k%"`++2Iy%EwQ.Ȭ]TP,od(>}AkG=r#@ _]*.XNkvjtypˣ (͎}|eeYzՙ}򰒣+H+AXI?t]; v׫#%;pOhXYiF˥.|uVTuQxqh]q7!U!H |^ݻvڵk!j*da gGnAHq]/w E`hzA@٦b}{='4jn_Sg]z/_yW>v۶>! @h99ޜܳgϾS>iu\H-VC;v}\`٫smPu~~ז;.(BӥOo'vnyIYϾ*@*]޷mywkyZ]۶8t'EӹzZh%EWCBe|o۾Ub )>^\t0dˠ]6l߹zգ'N;w;_f'+zttǎ v~NDm{֕~Uk޼aN,ӖάȠ@B;mOSY/Onݲ~սTP_R„iءWOZ?E5Y~6&cUfnYkݺi0Ѝ_΍vਨXz)G(iv` Gb֔C1F,Pܑo}uӁMם]U\e[&,VUR]\@r{ݓٮN3V_j0tM^Ԍi3տݮ +bBcڿ[c;-_Rvcȵ\BoԮlDZvϲG &@%fwZ_hi33.fqvX>R/LK: dG_0ٙmt'}w/DwwS ?72}wըݖN4µ[T~lAՁ 咅 ~uO22dM1v9lK2 ߯i=ϤRo Mpcw?)i?nbș<&P7ep- X%K(,0ё+{Ϙl@H0my#M0!IMCut [.I||/0~j?c\MT"Щ@a"%H5]t,P@' * !$|=351: T+ !*BHfJETd7P Tm T)}W &@)L!~&ggӀ ,ljL`TB*B!$L?i=/LiW-njnuw`g"f@KK1kȭU"]0&*vK՚ot Q;:t۟ްmƝHCM]fѓ:}{/v6k){Kd \hBRf&8ɕG޹s7}c epeI3m5U͕(|zCww;jԬ=[sUs!~p 3Elz\T}5.~Bo *:>bU}#]Φ#w茖$o |R?^FEGG^OZ7zyx1y+g*/4m3󘜢CnV۪œ-l~Y}eH憑ޯe}w!*v>Ȑ;{V RWTQ|hDuʶvFV' BN3]Ǎ04/+6"29__F]\Tq @?gV[闑~{}0\=5p'+]|kOl~>~/>.G?Nr^ה/.&߲(-q<! |1e _uiļ7LL76-6F\~Ec\1V_DFm^DttuuCr^u<(y;F%d|89тRT1” YGFM?RI.+C y'& =2Ël娼c~I)nxÔG*֜ !chqu^Fڻc3{[S:.MNvԿvԓ#,-H EGF-aЍInv0:]$'0eT[S50q}RP 'wԔ#-&j]ZG??"#F^<|\y%ETJR%$Jtqqwʪʂ|G3`7RXvg2)=v$}ſmUL-Es;^.A2"Cc;9‘z`YBm{ۂ, /(=mkDY/D((3J  >HgtQ$Ie㻒eeS ja$MzO^Q´p0WP8oaȍqmg.ucJ6㖌zraEem m2DgrXiZKM&4mဲW`0ٱ!饄Q-tq5A}cM%Xj:-Bn?g'tuv'hkk53NZX{ WW`rVC'U1v*ںZF$>$ @ꙙԷP\^E"uu쬊zZeS6u3nb =ҶnizfKBAfBDYvVQ#RȗFɻx.ri C֞Hʊ2pל( z\H-mM~^~ܼ2ν`AzKP57 㹗=\9l]J#Ȫ{LEa>v(7Paa\{M ;&$Bhyu+kҩ`?Xqc6c~ko[<]lF.%>w?0rf6gŇB*nԉ7V 0ɰNeV2#nxe$`2CYI /BU__1=.Hn4G^QDegZR_,s` }z*6UQ | OC2um:Bߟ&L o#Se)AYzjM|iHGn_v]hAaK^eTKw?d(`*(2 :BUÌ .קN:)A 9sYm@eT:s5FjpЊ ,,(Uhf(<|*@B|YYac^yz[u,JOް g]=ƟVjXcWÖ/>vߴ-w:dK}i>vgsqwK9\EdzyǨ+(NWurcbj<6a1Ki;.8x=@cbfF-~kj ;Ww0wDO@r\?q1[|bGtਫ\!U%`O\5oTaV\y%63rm^)xA5t/*Giv;ݭ= w@a:We ۔N?Gh9˶1Z7sܵX5jXT*)^$dܴTnW6DMr08T]VS[5 u+tOqt{eK]Q֑ k;؏8!`T,-z8حW4{MΛ&>0HLl֪JK /ϻrs.z…\  yϏ+RCEyZ]qyYo;]uumI]u ߝsFl>$|6k߸~TNwcnOPB;5f}80/~D%yZFUlHQWB臂 Njeo7E݇gY~C!afBsdegFxony?G!#̄B!T7L!BūB!T7L!BuI{z׎CBI2!B?L;o߾}׭~YǞQ!B}.31]Pan_9;7 B5FB}İ9kF7.z!B?oB!~,B!ꆙ !BnB!ꆙ !BnB!ꆙ !BnMQwvm|ZrBRSf& 9GΞ;wܹsgmNHG!.5qf U01!BGę.ucg=^&9!B;Ք8x7`*>a&B43iژjqtcD%$A!5ef`0H)gB! 3?#*,1ƽ 陛(JB!=jDe?z}G.lӦdgPWW(? )$P`g}R7͌MIr T9.adIdRVa %MLBJ\4la~|@r|)+nPR]BqKY(v) %u;OU?\1Fׅ kv횧'|_ !BK@2+tU9f&Bw]~]QQ`HAD"Q=3!B?)eee ;lll%3B!P03!Bխi3K}uؾݻ8~?_ B}23 [4u^FJ8!BԄ 6j߭ f&B03eg+|GyTɳB!KMh~9ʌWl7|ʌwGJB!=jL&-HBhL%'f~DzBPe&BAC];0!Bt Vr4- I"Ltd=!B{ф X&zU}lCWI]%A!5efm}fϚ:oElC!Џi3B!Џ 3B!P03!B 3B!P03!B 3B!P~Dnx~/{XKAs_wc餧q[A(9!BM2]5wd$U_}E@I:HP|%E2l03e饱{[2 @I[Zטv%=g{|R.g@ [8RL~~Y [|"_ 7˄ћկB!kDE޳ee/nS0~(}YEz:6]ck%e%qN!P()zDGs.˵z8F!>>$Ú A$ɪu[=ǭ3b"bOVEZռ̊#HUp$!)ν`AzKPW4- C֞Hʊ2pל_^!Aԑ\8Qjph+|n@BOPоE-6xg"J`@ "sp2T @zȍвV,]<h!/iJP^VV. reYlӦdgPWW,j*i1'k74K|tAΛsipB!)(TwcH$(*,,CrX ׮]lz/J&ِ;I>^ɔmB!33]ppR+c]=}q/Z> YB}WRQh}!dIENDB`DataLab-1.0.2/doc/images/tutorials/blobs/03.png000066400000000000000000001515751511411446000211060ustar00rootroot00000000000000PNG  IHDR>ŔsRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'b ^[f±ucM\8RDcBHC=<zdŽGm&}G_:&Y83$F!e~hWSvw vOǻ3yn1+n}J뇻K $={+?m򘈈iPB*={߾:_ܔ{C]Zݕ)~{F \N^r.C8ߥ9m{?4o&Bd usq]޵dާMZoo' Z~PHS_:jo*դjB_$Iܴ7M`mЙcag&Yp_[?B<&l\%6eVor o/![^Z;\%B'c9YUnF^8R EQcϮ *h9&tl{?odSE"BMG.ެ$"%2[!YZ{0)~M9D"ȾTTSRRxϾTmYS'rKdyzmꕒk^K#oJszO۞]8zC&ǐ_|{5(˫6uW4J/ 'k\ۏnNjbUu.+T ps+ Pנ:|^faiq[XYH̏ u­lmڻؚ4=Zkg a_]kk/s0D}M /\5B!"6-f9zayM|||rFaC'\isqja;ڷˉZz>oW 1ϓȤ2D6Z8:Y,{'uoミg!'g!~c3h&fSÒd;_?:th@`PZD/ȅZPN[0Rp|>|#nPYzRݜS4Z.dƉVɥ 0g/=˶ˆ`Ԋ`=ŇpWJZQԛeĚ# q Cc[߸7rʫ)I7<#-_^9>UQ@itY9:999999ZswC|jYٻqTe:Ƙpk;)kBB"> Kw醬=9aӉu~~~~]!JQÒI[/̸umJ_ۻpȁ+a3DB;?N_y|퉗R&DJI)W,=qFBby$nkB7E𷓙s=y-h3}`,Xh9 ft}XΖhJ{%=#1xa1AqOYEFXVL "]Ml_ pa 9gK$"$uwΤtd\&G*'kt{5g8\L32W\Dn೫®|u)by=}ߓZe#[m}-T/o KdIYO!DV~VBQ+3z4 )!j:HQqls;yʢ.EMˋ2RtwT3PWˬʈbi҉3l ֨T6嫃\j~{ l+IK/ 5"%ژrp~?cfyNqyRd[_?ǸOD=Kw$'Q )_wNoIݜm ?wy,R$+,#kK> !Cu"PBd#z0#c 3wr\k(a  _#GDKBL7b[0$z|Q1OM흷䈔];'Ga^iGx1 z$ňrm]GKǐv8iC\]MZkZ584G {U,[7; v´YO aVW.#=~ϕt欞/#$f><;__GyL}ZOs>,wF>nt{^ ^0~W'~ X7-9vopt^NkzJ~[wYv 쟟b%oww yϖO&gG{> sw<!v7߻$;t* m_;!}?y/~j(~_X?,VO1QKYxtߧlaхndy7[rv㯯E٤Z")w6/}4oeaքhs)/@CTv5v@5)âCդ,++0hs~M7C+M`D"L"鼡;r{YrrrrTz }^r: J`Cfhp #+ng5xMI<̰T$v̙Ԍ;hŋCBB2C 3:;;+ ggg 0L/ίWH$IzE qΕ^,Z33)lGO=takXX>aF6> ~, J~aaGwwz9w؄3Tg-.;yi[tAP( E r'X˫7MOZ5s|; %}>u}CtOJǦf =n~Y+NN v*,EawsA=B7 8'Bο6b7-Z3D}Ҫoo 億>@_B䙳TB_E-SRRlBjj*mիGuA+|/_}uow{华]RXN^l2#JT%ZݰU/yg#K~b 6!Bs4׎g>VceֺKuQ&q.-s'WOÎ# D5JM~ޞDFFGOSQQkljn=E'n'nD.)zd|q2ami 2T-̵xEIr!~+blYB:"G/kOb=[(6|x ܳ<`K/F& by{߬A޿?;< YŠoެχ|>:Waz{0NDߞ"_ 75ƤKֆj?B|[-B/:)6]E$jIoa'|pUDҋa9 p+͏Y6t{?W,"W7oėvB2ppgپ(/zv, ߟOxͰn_k1a>V.9X<czrgKJ\^R^ۉCueOOc^g/Okiȷn6AZlq}aV&LաH@뻁TW$.-~k3.F ӷnK59ikya>/!A^Eq>KZȤKyGO2Ŭ0D: "x^,|nC6򧌟DOsV ^hshS.bOp'{WGrmm]_cfqi#7Z7mȟAĚ BR]yQ, 7 1]yuظ! #~/}̟%Kr2rukѩֈI^3Nx~>vZ7ᮙ<Ꚑ5}Kٶ἖s2uJվ:!q23]'/ǎs fm֝u)E$Z=^#ig#{|9(m u\sꨭז-T۩S@MWNs1ʞr/äz&aw CC,w^6%s呑\#جȆ_d--|>Wד'm|SBb!v;ԻX7 ~y3Dq?=ѷ\u4/}Zo-WwV@)p!$ik\\Ea9{fHnf9V4kU?.w0Y!CxYY-"6M𱱲wZٻaJkS?%0bO-d[s9>3:YD6oG*U5.55g(Z );v;MY:LFO DӋةCUi)o};ڵw=)HVOi= C4zȎ9ZI;BT*= [[E, eSR_98׶66',n L g_Ga,[]XO!g>R)kT`!D"iUȪ[dR*K3Ɠ/So rqS K$B׵!Gs u$apڿL9R3)!bdgơz<{^L"αw!ۄk)7H,dܭiO^l 9Ǭ#j՚ \qD{ߜǍܘ_.*5&glSalOw8NXc[g^Hy}9ק|2$yZs1b^u(jL{RD")Q;Þ^D^}oI5z{z}kLS #m7ք26&LqM,==i[ƌO;0fxږJccggggggLrԤ.,0ˤ_~ߥEj.Ҧyٱ?_ɺu7;O&6-ٸ|T9BZѴ˯6{ soc,U E0@>sn%o!9A>F86 iyVLC,a6r 1&1Fꃀ XsV[0kyn4Ȳ]!eUb)n رosw!X6MSK BH.=uXWL]8v3#WG=6V"RE ~B/G ǜ\#D&" Dהn^:̝yPaU;6zϭ0TQ}ԃuTfd$033333s<}B 066~533dFuTc>Bo.8x U/,<}hՑV,dӫfĒP3 aѣ9u,Ϝh/`F޳WεW!. OW:gYKVLVSjKzcV[sX>s_~܉kZOJR&xMFƤf ZuѳgQñ,"*-OniC]&6u\>W.u >;>ɿm$Q_]vt;:SR^.,̰!C 2$poJIK)Z3;R_*:zji<=zB757p.ɐK#6OQ >bRXʺH'q詉.۪EcI9\9HVVz몈="h鯸v=11& w _IULb\M"%Gį aYFϷsO:qo:K euf O\Iۧg>ɹ|V &*{3E0[Wϟ {qٖqE\vP4&S׏!r3{Ï,eXjpa}~bQ׿K2|w4⩂]h[.E1yz".ɗ*-%Y5[zyK B,lU#ׄ1ѢjW{M6V"7O_Ik_x12/҂5) EO'[9&t{$'$[ ñ?^$"&Ջ.*͗9ΰaÔn< :[6bDސ!B...ߢBVcs7pp''3wq["9!e3s]~"~1!$;bȏ'p\̩,V6_z{JAvru{f[m,x8BlHM**Y,ES×֤7޽(L'G?VQ̧W=bX.];w.}E7 r̜_T[5gXm8ϕ\ h~_]OSIttCXmO l<c.ٞ5ߙW9)>>=OC]A᧝p>~{*>/ZޏVIo9*cCcK= IaOI~5-y욙{tM_>x #rA#z+_g]WI |īv~%'_~ Ԅ,އ5~z⪌{牖d[Â6 ]́w>8]$"!;xj/?"o|@i}#ԡ8['cCwiBQ?@OAf8sҸ 'Z>sBbŤ~jjLՔ;ǾrOҝfS[MecU8Ϛ5 $))ު?jjj4 !${oYa_/a'L }."Sf'Pp:8 <gN!t17mK>]e)F,q,%~Hpe<!adceWOW2w<p:8bVٲe͛Q[[kkkKo]pwVz8PƁtƙBD]*qs1?MXFreNrYb 'Oܱ0?zdw)a }S>|HI鍴Vט6]P[" %pMR\W\!ts1Oc46)!.Z䘖EG8eG!m+>鷍+/ *6V|0Tm>&Q&y_>sTJo'eQŗtM]]i@K/^xd}uƱtv0Qsæ,{f<:oꓯDZcaCg~C>iB Z}rzܕ㮜wŁ/#!rts/+A2^P,gV-9$O[1#.!!СCց[3fԈֲҬ.R?}c:Z_c[l7Smm-t #Z@an);dk=;g6z?}$3l0̒!9[:D%mdImCOWőN7UH/n_N%2C8|>!ɃL̝/Dn,5x?%Ҕ}zs~>eΏd`[s+א'B6v}7O+Yk n|6o65ۀСC:90 |K';MJ4%fg_MH([+r''_[F ٔUqZzjJzvE!7oHKM(y5ĔEB%B)qqIiYe RVd_IOH]-!R4ܾp%=hII:!De%\/ϻ|H(U^QFh.LONKH~cpH.,HIOHYZ^""BHT~%>..!f~(O%҅  w7 hagt ;j&yo#0#2N^#5nTGd|>;r4qz -B5'Msh#Y]Q[s^v}S|\+YK,nll(p3n;^-(ơ*'£}5>ȓyޫL%XT՞e4"Eo_fư{uCHBJq]C&p1HQC'dxdiÝbШv¬*" ƾaÃ]⬢f6H"\ yKAѱ~Mw2KZId5w2C"cGiR 2,#bcc]QYVAk vAѱ1Ç1R\_\CGƎs%l9"eݸl5$rd0;YQ~ !pOpQ#VJH./w12:QRӞ{ە,;b7~=z,/sqT-K+7v=⚷/ܛ3g~ooR'4-0Ak@MG򟻈9ږ2e6'p{#Y({ba\יobSûyF,xf a,G{s0edȩk&rQkTIcS#6BVX<~n,edgcZqmjkHp[{s> C8ѸDs8xVB&S7/[ ønz}>#/ ƴR3 =@nAJ 8k:IƾW;(C!A!1!IMGR^.,T_Kj7;~{&~j׉lxR19C}P7Ww?inUi x̙OogQ#bcBٷ9*'KD[٭ԔZ%lހӾ BÑ˨T +Rewq2!_ϠR&UH=HFT*g-Q}511杪V%N~,$%SfvTRp$I+IIW(B.'cfԿ(TJ4^Ɨ':`ifLz0800 q`>a9WVPȈ˄,tՃ3C<{ɔkr2=H-uH,^X$~uiQ0;#3qp0@f%9qU K^E-ί*vSf}EL+(-.;:zT.6࡙3gΜ9sgs\.SGDO^$̌Jdl<6ˤw!\.qT|r{="f 0ȑ#}Mޭ7 ΩɯVݹdi֙wY!Q \.eP^(ΰid'!DTٛ8e q#7uz Biڏ~l,3zGG`'^&Rӷ5WU#!01fam!+)vSݖD"$8d[K~ߓMIcfՅEԕ{<8- Z\_*'"{3ʆҒ&9I*KX6T VTU)IR&,.ic++Iy~EDR,&nhOT6HUAʚ[eX.aamHA rp~BP*1#lj?K7WԈ DJʛoRv¢D$!7 4 [3.`q`aA+=@( |h󴻃7?F!w~tq#?oy/?}N=-Je=6Z~%߅m?>$y7eg|a+n0O~^yoY.B|gS=[Ms N".}|?e#B'K4+;akǚ]m$>)} WS{Lʟ-oGyut*x llO9 CRTFBdS^J.0ܫ=SV6K 3tw2AMy)J'[ieE =MYH^y3!&оH;wJE kf9G)Jj[3u `!B\[xID, 1/UJ cl>XZ]\/{yu ʝR`>_!R6e߭y\B .8Eڳ7e)k|KW[<4U!ySY^~Y}9|3w_Dt̀U0gDPZ)5wq4SK׏Cf#.Э!={4L T¨Gtpk4}Dr!BR[Tjncrs=Q`L* jkk{Z:F} [li[ծdNp* :F} ̟ԲU}sQ"0Sa#FƎ ֿ! j$Lz0800 q`>]! ÛYk~ֺЃāq08G֭[M< pgwr!d:}:4a* Z Ulpf.`q`aA+=@( %3jR2&G~ z =@nAJ 80u1V@ =@nAJ 80]wfHhhM,$HPfe۝J*ЭBBgYnŚcE=]xŋ.%&ݺS RT-AQq{Yr1z;x@^~P+W ԅ  w7 ha5 ]if["B␘߶ڳ ,W?a !F=9f̨aC=-eUK4K Ʒt5eZH+CC_K4 6}d^}!BhM&O;a,uHDŒIqqE2|1+W $B&fJb\\|RZVYQRs=9!..>1FP)ɭHr%%NI$+JB\\|RjFY+RM*34FZjrF$Dy7SٔQIJshDsYfzrb|\\B5b+.Hr5>Mh)˼QmLIOJ,UY/o,]J=IESI WifLz0800 q`>]yf"N|/OqgD ;}ܨwynl$}766Ʋ& Ii0;2̋_}Fx[,GGG{Y`JaAF^DllL+**hP"$Q$;jd0O+Ʊ嘸GEGG٨^Wd߮\bGfQYBAk1>bȘ_[#&<਑F5ɭl%E -V~5R1XYf~|f4 3̙,}=7#Av҂̢f2:"6vdtF~fL-]pwVz8PƁtK2n>fIi}ʺze4sL)Cw" BNTUI= R*8\WHJBH.g~T*p9BW@hԈwN]N~FOcX01]pwVz8PƁtMR***Ν;oW0wܹs\?Zh%w%%%^$I$E+O3 3w5H\X,#9L*nnhOT6HU8VV9HYL 9,10YSq~HA"R!njQRRp ;X(#IH[E LF)kv_ Bĸ# Jd$RJV*1QSiQ@JQUQΒAT֗6IRRVRDz1HQ p98UH@"PjW:}:4a* Z e֭W UTN!U隔72z7;opǏ Ƕ6B?NIcX01]pwVz8PƁtM?2C BM7Ro_\ω`xA\Pz0800 q`>]ӏA#3;v, @0,J͘.`q`aA+=@( |+ 9? "#F(+9s:6FI%yZqqq+#@Cop^ӗ+"=zY/ACUr9MR䯭R˞okn!3CrL/h^|kzm3f|w{qXgqcR?fO=uO?ԑU]]}ʕ~)%I2;;ʕ+uaB)Б  #Z@a50Je3C9ÆÇSw oуk׮!p={} ݠ_״2Cnfx픔zk?EFF:ުǾդcooi,:: q{{.'J @Gz8P  w7 ha@!;g:~xxx3Bu!  ˥ ҦOٝы/h a:st-5o߾{_BZ[UU_%''߼ysΝwޥO:Ee %]VVVsYlB #G5kԩSgϞ}faB)Б  #Z@a5,f#JKK\/ncc陓C 0ܼy3@Gz8P  w7 ha@@f@w ³g۷!00!bnnyKKj 2CK  4C$Q k!R@ Pm1 KJ1q@nAJ 80x၁qqq=-:N,T(%L R%R#=@(Fā0k 3BCC+**jjj"""<'''www (33jfO8Q,#ǎ[SSSRRq_܀33.]9J @Gz8P  w7 ha@Nr<++)((:]/Ý Н:2C eff&''ÝߝJWZ'ߓgݷ[r;;W[[{IkĬ,ƲB'OԵr1TKa``smmm_uff&8|>q05"ryMqiU;;7v\` v o߾BoȡC[u_2-[^_tpwVz8PAhk?8+'$lqLu=(**vBٳg[YYѷ zq@[c_j'Ndee70Ξ;=hbaH0(lº?3VVVӦM2dHLLLppƂcbb 2m4M wf(:ĶZ#h :z?p2n vmC|jjjQQ ?qV&0 5&-((@uI-yB~3jdֻ|ۈkCƯ1ڌoiʲt),,w@655<#5I,9 S,c3A\!_U]c.Bed! ]*1,b>@1800 q`>]w5];a- O p˓_';g137f ba dy7vդ`_ǾFդR./Ƹ2c{ w$XΕ!, EC# :0440ѭVq\!ԠJܶ` bO`aԖ실\BǰTaHāq0蚾IB?ӥ˗-s1ShG8SWPM IE/ʊht_jROQ@C_K4,,,^{56phsK?\eP2yUY_Dݻ °TaHāq0Im۶ݼycq69)k HeOIII~~ѣG]]]{ I@5i@5).ruuꔕR)bJJٳgiNY~hՌům !p'7ڲ ՑkG>1666lX|||_ ›7o=://رc666Tx?/Ma?74Ҟ$"38ٗs /|ǼtpwVz8PƁt T`Jդ!Ro>LnllL_B"))ˋ$ID㸭)A5%<|3+c6B\whٔcfX[ͣ,1Q#zQV@[c?==2CL Df""55555DP4558ֆrttdXJ2//o޼y +Z\,T%T8D-zye]PQ8GEE gϞw@++6SSӨH777gggj٣[Q{*1,b>@1800 q`>>țֈFR\W_<|ǜ@ hfj{0gd S*8pԴb 4 ;$s.ы/hK?Ƹ-sgi\Ad ֜{ؽ/!9CX,E]hUѢ#-$Ɍ \0j(մ{dct™{geB=;g6zM'NPw R%R#=@(Fā03 fc!fcH~9޴Fa3GdPGkw1 躶8Xlmm"Os~b8@1800 q0uu|Ƕ 1gO\voEqőJNեJu4!EDffO@m::5'eo[N;JfjdtTuuɓ'oݺbccnjcbbBȠ1,UbX(|:ābq`aA+=@( |=%Z+3c",7 ̄d9WV(B˄,u4!x) v-uOی*@9Ӷ=NoG] @z5--eӧOwqqoWRw @Gz8P  w7 haGeUNDɋJm-pΰid'!DTٛ8e ޛ'3D?x[ } Sf0 |S{W}}XJߊy]\X{~aO}n6Ni߆$7@/`=u`6M[ܳ+WZ6v 71fȘ,IG Ƽ䄧G|{H}}=/̥~qEM^#XnӌϺ|R՘SDޱm()_wYBfxi6Yn}]rCeȯ)潲e#H8'[tB)fgt,w#aB֢.5jj!}bLg6BC'qe g) dݙߜ^ _]Q$c>8~Ԧ  0.%,QԤX-& n*z >mR='+v.O&R}"lQW]ojJMY\ܝ5Ս*d/6ڙW{~t̼pdR+`0,UbX(|:ābq`aA+=@( |e"j )p[.lAma˗K TaeWǩ"ێ11,Sɟ;pOa ʔʞgz;ٛM*5]^iyCY]5Y;|}ϡRy"m0DdTY^\βT'ʲ[Jl}?:0\}dT%D[!" "!Ѵ$ZrȿP(ro{p{9􍈶V e?ZE 0Ibnɩ ))ş}o4,KC>|}oN҆#rء6%ۙqqVP]{ڼcΚg+ed[ΎUL^8Te^6 +~BQ}oaB)Б  #Z@a5}cUE@m7:ˮe_yS"H4[*G }_nY=yg%zʭ{7~gag ?4WBnmR[υ.en}DM4r ] 9?-r4p Oip l򵰰s 6d?x1i=?,Y=n _4`]Ĉn0KG`eff^rV]r%;;Hj8eCU,^U.PRjWi`kk* :t_U0v ,7oi p`aA+oHp~8h}I$Q5p2;ONjɷ/(D!y P\^"LH Bxu"$2gwձ:gΜO@;2fv6r[؏%aZјcKH].h0ɓ'T*+sd_+yrAƍBq>H&2o=BXWN:ыK 4_M<$yTZHaåt di!"!Ic yE{))N-^U#3$(]gl$h>`ϓa<^K ɽQZ O"D"H9)(D jlMRRXLx+ڇ~cXİPtpwVz8Pơ_V7QMZ GB c7c컿Sw,4q{<߉Y7unB5)&Iul!F\V*՗p11gqzujR^|]M"M=ųnHf_#&x]6ʂMK:hjɳQ/8*-$dB |q.N&t;3B$F!aեRT0F:1E!Kx$mԢ$ Z;Bt ngGd,T k/S_J1,b>@1800 q`>]QfHCU% 0ĕ!DHIf ,l!?n>ͱmrYL&'BWrd媽/QfxgБ  #Z@a5B?;Hlo0_L^y+{fm1l0F8$BRD)v4r?!itC!m•-Yq06bYv^͉Xa]1,UbX(|:ābq`aA+=@( |~2C``u\׻3CsCg"Q^r!R%R#=@(Fā0k 3s܄Z`tN*;3h# {!s2h& 3s{jmaBz!$t{[KB~F*n$OC`ȕ>è8I1,UbX(|:ābq`aA+=@( |;Ӗ{Y2 tO_DBHFJ1,^Tj #.DhQ-9V*-D]BKpeqXGZ Af@ pBcRq\Wka!e"2ABo1,UbX(|:ābq`aA+=@( |I0jRB<]K*I2I.KI +cx qIB oY"yvդ.؇jRKmA0,["0/366w͖iiTP-_6,,a/ 3R  Dd2x ~n!2iZ6-9Z&ڲe ûu1q@nAJ 8h>?t 05!B#ƭ t\J aFFLE"$֞%uf>T$k5_j݊fYmfcVsV:nl3SZ Af@_`r8llXql7`x 1q@nAJ 80jRLi4<Ta ?mێ;F_`XİPtpwVz8PƁt T`jI9P(vܹfI/ʊh^|C5)]TWW믿?ð;v]vƌ3fXv;ZZZ; 3[=`ccj{{%KǏ?~?d{{M6D.] J @Gz8P  w7 ha@ZMJbv.Vie/C5)V&''XÇ_~}СGP[_ e?g67o:B*e޿q}$(+-zG5)/n79΍Mܛu.NSZuȑrWk2xSQKǍ769j⽃7?~7^@7bmExm"!L).)S%I>w\```QQQG#ҝc:|8qt94q]p]'[`W_mذA7CLQ4p RWi@-]BG'W=*jWi Ϣc$Wie˖V=jY*MnAP* ÁZ`@-]E[=V_C2KB5)6V$P(zCPI&>Pz3 3ëmH,G!qmM6} ҋ"ڢ}T7n&@3_|=9fӛ 3ܾV4B?_hw |d$py}wJ$c>@1800 q`>]Y5)+2z&VK vI?ZդUh6$jR:L/>5&"gYYj+3j~^/̎x;!a}СCUrAT݌p3m8$rH!O*-|u<-t!_NjGWTYro+$?+>2x(cs;00 UX,dUm( Ʉ%L+ݻL!nڰaW_}eHi!R%R#=@(Fā0ԺIjR'Gdaޱ(ע7mm0dauD+r06SjR0xZ&=z400&mfy>!i}^sp{L/>5&TҘ49YL! I#IFgSQGZ"xT4Q__}ȈSO 12"Qy*ݷ~>iӦ[nKZ& 2C C̐DE}׫ ~8<ӧm[!ޟԍ8+wzxxL2e…vvv!z꯾jƍgϞ>}׬Ycǎ>J OJcX(|:ābq`aA+=@( |FjR>yyv4nRˆ|+W~yc{:B5)].q0&UʳZg ~ElJhޒbOzo%Q#zQV@[cI:yΏNg͋ݾIN<ӐkB"S S2O'=Xoy֮fLȿSUQ۪P=d EOt] } PYxL0?JcXİPtš-Z8zNqCU]EZ&+J?KiMbzGh8^< Bz8PƁt d@ݟ_Ɛ{%U. "ŮBc jmI/ [ni& pU.JAزe u3k4\ЅgؼysO4\Y\x Ȝo{&Fnç˗/S\|Ȉւ+}2Ap`} , ?4 0e0*|_ 2ޏUec/d?6Bʬv;ֆ[q='/UJ5듕9?rսoQ{h(#\\,: 9s;ûJN<&<<_r*0B͡:PYYVc5Һca@Gz8P(ChD"zS7 MfV5V@ PEz8PƁzCT|}o' [GBdWF-yᱰ3AsRx`Srΐ( 381ڠlJI2ۙގj57cKĜiζj:M]0Tx5/)JL]q-rmrs4jm!@c(}b4!Lr1C v|#ڵ0ϯk?3gMF~letc4X&.{3G?@aAYʪiwٚ&դ4$n}ݒ؝yā0ZdqA25yyg<;shkI,/sq7EuiR]#3f[)SwA9)ji~MmS-DCe[>zhGkr ^}.H 8XYY [$$,WT!um>{ZX]SgSʄ-AA`BB 8k::Mvag/d}_ERImOֵȟݖ|[^}+"֍ڽTzO5BNa*+ ChNNdƥP\ ͙4lVT(YN$./::5:dR9r{~yANrq=FnTF'q"ά3xcز?Z [o_Cdɍל`{W;Bg*:Q+e45zڥ2d`H.3$p!RW9Qӛߘ&ُ11pV,))E,#ވJ6w{MY]P<|["3Bj1Qs6>o1BH&W޼Ss3Z,Us)/a Ct~˛˛x6wRjh:-} psaD4_/p;!':Bo9?_3^7F) &%!‹R%R#=@(ǁ rᱸ;fdwZP tZ6gB5ڢa5)E ^-hBq9 &xv^*l^ZTf5BOā0[!ijrm~RXЇŴ_]/Ü!3yoQ˂W~I@FYZf~r]O@ fIva]Na}AV!F}EW"|LDDp vpTB %_{=ED?Pc/`cT<`zٜwykVԏLhohױH[TΧ 8Er>~;=PcOgZ2swgr A2.eܭ[ҐWҨTNvMKw;藾3CVaVcⳐMD1?vfһ ɻcY~+cjDDݱFѱl*1,b>@QDYu}:Vݗ/*D"Sx2:șZW5*X_w".TbeEBUvS A/.q0蚾IwHAxQ&,B}1rגB NGt4tI \5)+)iCfMe"R,JQ)))R~۾)(8ִt^GLzjZ@<95 CU⨒u@aKq ;O-l͐E)_CDQVgZm^VlϙlBO#{J bqNRTmnpDǃCEG gcWᆍSn] #[W(;k0_ R%R#=@(qhi?Y8;/mm 5kjjsԯ 2//1 Q.&I1jI( 80Ѡn7ꋎvJoդI6H-vڽ[&C2pդw+K"L9A0}ҋ"` ޳9DO.3G-%%j.L㸗:1j/Ā4Z0i0 jt^|kTM/_rÒ0kK\FV}XI TaHG}k᪞ݱYh/.1TW˗{IEuuu-T^.ON pRY:uwt@cq],Ç8Nz|C8~ӨPa~v6QX T[7@a5T6T|N齚Tbb^ǯݻjR0$!S, e }>Ћ"`]-R?ݨ0a$Y^QQSӏcbG{m ISQT.sՐDhnIrr=:B/>5&Ugo6~jBd:`\n v6}TP-_6,<*-츔K/ vj. +*{KBeUU^~~SSBua㓆8ژXЧ%{YoljjsvVFV,oWK :' }_s7g4򸶶֖ު-[l޼ #=@(/_n ӳqSӇqUE"QSSseUj8Y$KF/l<f@( 4&3tx]f>vddҋC`x-7<1*șXW__RRJk Ül?&&&RR݃ߖ:.<^"s<>LHolA- E%-0 p8\N;8YxǕ6H$BHT$A\&HRTT{DH D"wz3C͟?CG d@f/zq ?o74wdRjKNNH,ᘘ >/\.k-rT*HH$Di`fd$02#p8A^|kt < Ogx=Б A6J/_L_!7sՖV*-xNNnC<=<-y<^¦&_9 aA8;wlCd[$[2nʨWGsf@( | 0s_C&-zk7 ' Vm)**K$N%IR.d2L.W %A핢g8c8cl6awPORA.!fmeEo@WǾaVֲX,. RT*mmm!38Dmlzk7:/P(ngfq8SB!We2r`ЗB |_8Gd2wӻ]hqFo , I.`0,S4 ?cKʪ+\It Lͺ[=CQwӆ^bY 5w E}]-[ \5Ѥ>/رcΝ;wܸqZ.**E5551mvAgg>c#d!@vQ߬9HܑJ$l xkJT:>>\.r8.j d2Muu\.g8KO?'(geѕ9w;]n@J+thRtN꾌ᢣIŒiYp? I8ځ|ca0@vƆZVnzwj4vk$Ɔe( ן#n@ ȕGг%;GxX߲B(3el-z x3r7Chv3DQ)v.$Rd7*W)*r]Q  A" !¨>WghQQ>h4Fx_ql)n޸3>`K5 !rB eb`ЉîH $|dTzU*B+0vXcg$jJ(; M/$GԃEY\!(,|)UX)gʱ3V rBfVu||r9rI9C> 7YXX4{饗BЃ>dW\VZZnlldW@ ȼXH$2*邂TZZZWcv\V 7i D:R3ϖUrܡ._0Ɩ&],]DbN"֮ibK!U34v=   :;;O&YJ0gIaOOM6l`WN Újivf9H$#RVVƮHa=ç;>~3@pypÖp.cNbץ T*m46D}>|?d2Y xKJJn kP% `]/>;ywTr3~ovxOV6CC'_jkkKKKS@M4Ml6 ,}rd2L\hooϫƍ3LrzR1:{m-Ma[s5=|ѧ#JUͪx/=9 `W0qę< 46 ReXNA$eςfH9y A-ם&IBs;6ڸdxc>\;x#0{/k>󛷷p<2Fr\ .g8*w7[IދDgJJJBx\H$I2/xӖKsO|@zT2)\Q!P%RI ;J1[;r_.-,"0RaӃ7gpx3$v`h <;3<ӓsH/Ƹn~uk+D}Kyib1@_oo_ȸ;9"*iL. 32h4Ɯޞ޾˘#HI Ub GY/=t<z{# #Ei;7|O-;{xvJ4ΜҫvW)s?+|c}G455ҫ;{ AƲ9[ HEr̰ò0۝MBPWTT[SsƆRAP4z'&,655E+L\*}ls9Z A5ek+aĜg?:qĩΞ1#cAi8}ű͒FaQQE}ccCAAF™fS2Rb1)nt714`2ݓCiц1Pᴍ ỴΌӐT(e @.ӱ&W1Hcos湪T3>4`3Lq1ԔudxX.~P@0!bAC&\Q*pRc.xP66uݗmT;hl)UK?Q&Қ 9B4O::cB'#i:N˫kjkJD3LՃhƺ ԳyWP1@"h:Fc^:4wE4U "oy0:jjKq54 o3d4aaNʊkktR Oc2CRܶlfk1gBUVh+WS6Gt5jƺbE MaBN{XRZg4j˵%TDD\T9s ALMM쏃@ bP0#S~@􏎏oOl~+7p5œfT J#}6du[lټX#,mrkFP 9M& :YHi `f S&R@0tCGC!\.ϴzjjj * KH 4 " 2 9--,.URqKf 5!x+U+j9pe MzY8z X]\fLh@]mZN$>dtbqyDyMB &ɮ'+?'>:}gă\ۤPuyyKX9/@cS:?VenT2m$2i 4Mam܋Tm*BBr _a%1~@`0@*p @'b`$Bd$4㠠ɍw$i@żN/%W@Q& Ph"N‚Ur=&h("OGJ9u4ɠ|@eZ429fEMSDMxIDTP>7F 9]AR)BpRs; h"pG%.B!{ ~ZFE2>"2N$ M`0Je.+f*y5&hhBqX&( ((۲B8Qi2qx"uqovGEI1&s4'w9]LðTq)->u%ԩSOZ=p U(]jMd}]Ӱ+ jp u>cX\.7W&_<gKai88ځ|Fg7d2ʽ Ĵ<nz㙻dDzt:Z-`||\uС- _wؑK8*sLIP+IA9(h(/@8UZ!t71>\T".  bΡ^/GҺ@zFZ,mlsZ"媔=lhJwl%(.$RRmPdewxB@qH_$RMBV?FPE mIJƜC#Qݡ84zV:94.pgr&*ER$AsΓ]B6'PP\!IUfj .\ܜ4 % VH"]X%Eb&2 9&AX_$ O':;4aBsچRrYFEV+L\UV["qԤ"(ERΠӯ c3f^1=mwj鏐 IJbZuY'xFPT]/J!}4ej]Y2{SQZٽ"A#HVXHxPD1eE b\Voܸ]I.`02[oFR$Õɴa\aBqy6a̖B +K,NKXײהlk.K;1a/͆z}-@tVcߞ!;G;+n*|(˚ qUrh̐;'1KPU[Xp/;gTՕ,8y@?N!/C xr*Va9|$yݻ- 6gH&F~5%zfUQטI%*H11t> ɑ 588~\|*Ejbs޴iS./uttyǪxy J/N/KcgZMg?(7tniRA&+ +U!s?$Az{d $3B_So4UDet XSQ`4 B@V*xR2AhKhii]sA.6dR!%6Ox/vj:呂Xj_4-;e~fhPEa? +H$i+١,~;uoB:ם{2+p8zLX.]>y)*~[MJlw~ke>v{~ /ǽhm۶n^YU8`F}r$/C\%si<44vZv] %2˖0 +..fWI!ȗ ,yFb>OTrXP0FQMaeE eU<M@ۖb\.V3gv^~ɱi0}>f{c3|뭷7|GSSSl)dAt:^? M~_TxjjjV34LϟiZR5k֬_^$^  !\;5%nk.ݸFwZgL!J zR9}p:w> MFX<0 eU< {{{ۍFcRժRvڕf+S/~j߿ooyyO?w?!]+xB H`0ȮHA.?fץba,{w$7\^^2ڵo뮻,Vgp82oG O>O<GxÂvuuob(MZZ2- ’b4xlq$RtJUS]>~^V ]>+c2gh2ߟfɓNsY44<008[K$r]@\=sΙ3!JKJJl6b9tMt=s{zrյk.t.ǎ㏓j_1.i+r+S;ԫ @-fIa`У($Uxs u{X,fOϊa8ځ|#Wϐ ׹y^nF1܉}74 O+!rt:R^?##`d2+V99`3 I 9EjJ4T!MڇC)/J `lH$kOf_\dt2saŌ0uC ]gv$OLL0QLv{ݵу;?W~_|Ӆ@ rJJJL%݁@ ptύu 0UH&'͑BEu:&|Ƭ 2<2 ȒgFNLJz{{=: ˵up8x:::L&ӜqKwKyh뚷ZOہ@ ȕ Idc_i?C8JqW'=@;0eDD*Oy>i781cEehpМ0C m:hvX3x<=s=s/Dx-,RՐ"CZC  AP8˖r8*q Ozv`*]TP*Z'odR,FQϗw~ңI^ƒ7B:uC ]o kM9s'?E}fgJ!䊦j -@ P)4JǼΎζQ UAAYYݞp@. 9yR񩩩7G^b~wao}{ă_ޟzO䳷޽{ݟ^|!0h4nd@V<ú:|}-$o?(_a}Yg3@ V8o|ͻvҗ/y߾}c8A&̣hjg߽^4m4 Qȋ?*~~ȇ/EчOXlS rYEE8^YQnlO`dB@"AYF\ ۿ"\̗r7¢t^x|j!.~ORu$du; 3L/wvvvtt0 }]Ht7'kEI 6p]g@Lg:zθqsS0S@3\y3$_֥*o|~K[7W;߂=zΔpYpu^6Ap˦50o].NjAʊB l-.d_gi/p+(ć5}Վo ~&Mxfvw9:thޝJ?mF1^Ow sB\IɅ kr5j(qXǙE Tq(dJ^W h%"liCyrKhp>O;:6Fk\l"FahvK:FI~wKxKѽ(\$y;u஻H$Ph֭ bqaaRd/2ˏ!JGR4Qi:yKR|]-mǧ( 8V?= n(dw(sę<ځal,c{ >9֏.LGbQt#4M 31nȋe2B^hv@6ȋ~oܸ7=Ю'0Cyʅ-)crg1`;w\~u6裏2K555w9~郎.u3;YT9Ė-VV_|#ݭ-7ؼԣF <}}֝7ނB䪤px;c?vv˧S.2 B WnZW̼#I_I7\J3mA IUVY4}l`Ɨ8UHeŊb@®N##<>8NX*\+E"A3INGd: MKfcxԌT X}G wŌtL<\aR)haC˦͛7oZg ?}qi͛7o2겆R@ ,pcdB@,X;^[߸x#0ϨW,l-~I=o H$ BV/apx@[n! F$bW@ YgH4͓۝f5C4M3UW* )T$DqGw" :tdz>G!*ԩSSN?i1TcwxUh㝣C6Kx1$_R9ԫ~㝣.o!wPl1=ĉm^TZ[[VF\46[=/=eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'S;V}8]g?6V{dx9;6)*lк ׼8LUC>|l^8b{ب;hOGum7<憛o+A9M: 8opY#a^+v=NrY6QlݰQa}5M4M{y5N{CqUv։]2ajݎOT\VCFkmW0wl^9CVٿg c=Rß|úynu]ߍ!޺ป紺6,/~s^ .ގYK%F#?w`C:+"ъO?/c'̡O*-)^=#=}?>mP'cUOzsi:I.*iߝb77ןxØO*X4M4OW0m21m)̓ڮIFmȴҽ ]vٖe ׌nXǦM[&!Ő#:8Ў-5hO̬~⻧%{@]Iw,&}JV6i?gWJ}{W{̹ >G.zuOo\1S&MplڏT۬Vnj<ák?6m֢]^Zww(w9t76~ݺ ZWM>۞}hM q;}ޔ':Iw?sIC;&rg ڪqFv;s[캚W=>WO<]&Mrm_WKws(D3 O\|/IꤔcXŇiҬm3|޽Kw/+5OߟY=_mSv/Eo>[ v>$l a5ͻW혏5I/*/٢g|8Ԛii[W|I+7Gqrcx7/¼˿yK;gE~vMS?z]vfȪSv\_z7mž\J.]oݏ 0&N#~ x.fՀ&~?˛mS߰轳F=[^݇{E &e_r外O]aϿ2 l><*et֭]:KfwjFT/bƬf͢vM9sK9e=?g^;f}3=,3-=?oZ3GC?2npXLN8 fxu=eQ-5'?lGi'rO1}Kr0kzy5eg>nX1qW1~[;?[{W(+OhwS=١~'#>B3Zti0:Zg-CӇ [a @bWx)ԹɎջ9NW6X C.?; ;f ]?쾧o%?;)'񦐬 .9du/'`aޙgDSsgnF?XI\ݹ_= _E}?wJ_iiv0HqÓO>}OR[i@^zǖA"O4}nDyIeN5WaAyfʲ-?}4ƹ+ed_LYY(+'+/KRe(+'('?ff^~\UzwСS[H;% D9ߨ/-  >燧{t;K=ڇc4}k-wא mEYIeA5RQamq;^Pn{和o}W[c'77ӗBT7(ɽߟX2vAF4ߩf@o?wzuszg\`6!|g,hַF»U3Q}ySM4MӴnv rկ_~rC95,]yvf~y1@9񲊚9jr/wo饏h0Ll/ x(EÀsO*We]߲az2icUv^rUJg>2Ez[/^xѼOSnToRA8`!p Ϗr唇:λ妷6_L;W:W]iKM9'+޴-#?@pѕZs-_5"gWo9-~u] }SU=᚞mڴi鼷f+^ C`E?Y+k>G3 j/ V#|m|~}ީ&u7bA+_6v9wiNz:%P'SV5OlRf?{zBÝ_[owase3g`yʹw'+}W&Qn:N#_M4MӴ=ryI\ WrWKO͏:wo} J~{9G~tѨ3Gq>xuԕڔ`̢\s~tMy-//]q[E6WJV2?lu^RJ2jFm/k|ZV; ͏>Ռg=y[ SG?:;؟( nyҩg=z?؂ ;ggxkQ7Ŵzm>wzmz%=wڱP)jil׼ӾQ]^_z{sۮɩolU6.p` v͛}Λ ?-0{?󬏮تa>ǿro鴟4\ݚ6l5OBѝ}k32MC.!zL:OmA 'jOiݤY[%6^zⰥ7oѰ/ȋ^x2a[?~m4n휉-zqC>̿C}=T|{D7|\c8pAֻrs09<#;w>6i1Vaܤol0Wf~е_O'} c >|a._GM4MӴ3?իxyyy7l޼yM4M4M;hRe^!Խ{o6|@-hii逈7nܘJDRD"HdРA˴ɓu>W4M4MNA @!Cj1W?!<KIty٧_nii_~aڵshѬȋ/qެٳ={v~csׯT=qܹsK)T|hFΝupG@M:ULJj=?>wM6W"LG̹wsF8a/o}h'YΙ0nǞ%}Ii^  >|g6o r}iJ j4ﲓ?n6K~o#?;ɧv2v։:84M*k֮ ~GcP9c~K~ˌܷ1T khN;.}9Fv#οv:QϾ&cS̿E":i~N4}K Kt񀶍uq͏'vm֤e!׼t)O{Rؖo3gNڃsok[kn7 }m-_f沪o7]in">w?3/ /oi_Tz/-ܵ?a}p9-\W tZEk7p}+_%oU_zxƪU^:ǏSOŷrol0~ԍ`16n |ct?}Dm)@VLT/xs/~tA3{kys&.Gf{HvxM4M̡ ;ԃ,bC|Gԗu7UTUiѬS;wյSڧGס[nٲ_KFkձv}"=Z4ZstÑ_PU}ǾZxGzKJeQWvxn>]OҨɣY$V,5.F#8YK~:gBjK-Cn v`Ӈ>y[kv\êޞP!IV =r 9O45wWlÌz՝uvܿi&sXkǀpŇV/[7ozᙧAH\aZpT&3H7ۃć#[n>_ﻷs^խ&uǓXW/ꉇ-Ѷ,{jI)&d7{cK8$z"}wv&Fal ǫ Nִ3j"jR)m%eexbS,_v~5Pvnhv875$oxʀ;tWSSTX߶yk՗7 իW^zR3Hz@ <ߧ±8mNO̍K@:5s͂z7ΟYٺ͢iv ٱl}c1VW =/s|sڻdw\V~ziҨiUK??[+**WaNe{/TUsN&7=?ONFNTٖnZN諫.zrn$iUmM{???нwiqU֍x6 }v%eB~b[6褧ϩ`wΫ/rO>do?f/yo?Gk;a^N^8ͯ86?M4MR춬t!bxܶ)iyk֔vkP8ܥc;/y']9? L 0ZyVtMn67onO$ !iNC=juLJcQ6ˎw< F85-Ȋf7q#e$M[3w}*=:ˊf7usww Ƅ8]Ϲph+JwxEٙY:w9چK?c˶GEdnrYorfEv B7쬬Nyx7~2HlIWrGk+MHo'O3>_6l崯mL$Rem(/ڵkD_⛖,Kv?鼾 "٠g+ T{qڴ;_븎W 9>9WL&jաU?Iۻ1"xꙃkL#kټU?3R=>_]gڱeV]^ʏH9f4muÇf6n]VW^c }kiNS޻Oה~ߜ9y**tcz/>p֟:b{SkJMʍ__>I+6-"Or[s>Ə+kZ0cJE7w'|rŏ~mY\u>yCi4୳G%K)gϝѨ.N^%w ;~ĕej^<oӲUKt91x[ ^{15je/#So>~N2wc^}7lҮicMvq~ 3{k]e{M4MӴhO>|qwEfikpdZ~L[] # 4hРAxܩW/ysg Lc7 nҳGgn~r씅*w)_w.;KM,d0_i_۟Cn}ڣ-_k?f̄&ұ_ͪnԬ1].}+W{ ū5v\G޹ǧ.[`?m^~O)4BP4 xRxP8}]=/fqMZqӑ-R0AE8g!F8egge8֣n~ wP~޴7g7g>2;IO?ݭ)# an}ڵgnqMF :lH? ;o?ih!ɱÔ9մ0A I)!uڇn;wOQ/o>~-7z?o?sO8w}SӖ?u _n_p"w }M׭ᛷoZ&m\R}kH#XV#~9+7nڰzɌOQXjz۶~x~A]GE4MX#/6yT;yćBN4F&Nrp8F~_Z'"<_8-:ة!k'NXwe(Qr4g= {xeهlBP/Q`_?{NtJGɱt9Ur7|#qM5pkf[w?;Ap?C,m}MnONV̴@yLDrmuht2dw_tdזM4k&I)ʷz j:@}2ysզҾ}wFwI9n(+]:r@|Wӳu&͚>ٕ[s222&fAM[*?z ] 4o6̻#3NX|q+=uy_yN/?#݇wᯘ8"⿏mఞS4Myeo<8C32VοT[ qь0V#.כf,Y?zk~DyYUVF3D3~(h@޹!}wѳys78홯W,dAY1'խ[}u?Y ssXR.o*@J …E.ht`g.((ȍZPJ)'/纣_jkV5e^z ;jaɪ>>L_Zjp? k'.--۴xӖ-Ŕ?!J?tJ͚w;{ԩnpӡG7ss*L.9L%RN3 3de]nThԪAV<ᝯvӫ/gpfo `K4]z]ymbC,pJ;6DC 'o-ٸAmu n 9M6_ C\չ^s'u;0~G;MWzm\O_69q9}Ymfti+V9IvvAC/|zNy]MԦ[;Rʢ‚htSfuQ4MӴ azuq^y&n~}ʏ_]N_||im_=ޯ9sZəm0v/O|qyޙrg_||ϯ߹E翽Kn1ѱ7$amsn{GyO2eĈ `|}}pߚ @ƿ,KZNm|H$vZY]!N8dƌ%%%s5M`[':>4MӴ>Ƈ9^?|eM 7nإO#nZs7_k9@P'4MJvZi1>_de&pˣ7<4lWپަNc,B١ަnlƞKU|8iҤEi#i1>l6}lh1Mj^͐C}xeh n6viv08q5M4/[@LK=\36ֵϴ4Zh_촜SxK=|suQ+sk7hii;Ǐ_;l\i- `]h9_1oP=~o2*}W){{j;E5M4M4`?9$/k O}b.q〉=m"6;>Zhv&y4C#)󉬖r|%*pyU\wZn9>s4M4MO}ו.JYM/{M|S|9N_i9QF~2AL+)pZ1x-~`dt@\3vZ wNviӦ ڶmvݎ<|7{n֭F9 ?j:uVR:/Ǝ':whGIX4M ֬YӼy˗7oGNRfDJД3 MK~,sĺ>0uV\iA_݄ Sl~cgM2˶Ь vsPg,+#EkIF 2V6o_6kk]nD֭[kC3Ibaͼw085^>ۤUU&NO$6jؿW-5׫GӪc[ ӛ ru5e26sz6p2r?2ӻUy?iigOТw=swuH^W~Y:-{u3oן֯߭)_TŖ5s9Wtv^l'?;N~?5'ttҫK>wbC/޽˩olD &^֤aӯ{WZҚ,C<'_|a݆^ӹ~h.U +XG\>yN9u_*f5郞PEE;lF^r@ ~f;sv+*͙CO= cqٍw23x ?}:_[U+[b%/? G[re>Nkb@7VVil[9͗G5Mۍ_2ږ;7mE5$q4}GbÇ{ή2۷{O8_Ϋ~އ;ǟsۡ]=6Ϻ/7mv+CUVS<0cU?`|ɶ]ګ(еmrْ핧Wo7iiejc:wܮ-\xK-ι/m_ذ됳F?e镤{6! GBa-a8$M:ennӮ9\?^e #Vm-+}ou:}h~P߾ieǀpoC!oMWcmQϻ+ox[ W\kkOy}tӨ.Qs]Qa= Q[=S5,Ti8pڰp/C@iY}O>w wl*)su/<`O}ӵK.|"}Kl[eACUUAةDF)+0DMD(gDi-x)63>NW0}aSK?@ MA׮bܵώzuWg!lyɗYSYc V_8sg/S#:}겚l&iսsluy!;6yz M}PWvQ\xj߶o[9S+}4(0dSq͏_Liݡeɒ%^SImnؾmxe.["ܮC#{iǐTmYTYǀ؟li5ïOsչ|dPaf|2O k,6iMZ4˿7su7W^pæO;X5*~yP<ł|x~0!vT:}MˁҊʇ_|v}/m_{mӼQOs<[[0z8_ nq==[`˗<59'p8_xs88=gyOhVz֭hWZݢaV5Mg5c?ü'ـ҅Hw͸ۏk_E2cN^;5;;aZ6oy U.Pfffy^q5YLPC7?qF.zG@L[W}~QH(s.Ҵɓ'۷o)ầu,dzfJ$Ç4iҰaj~?)y~pHmBpu"9qڬX9W3j;.ZC>u7y￙‡z6|rE7f}a?uك.KD۟p ]# 6?;ng,+lni_ĉk_iThκtҥK7HWg_O\w|i4M4m? ivp՗_}uCr O9뉫wQwmU:߆>,{n~ox@!eS]>#_ ;q7<: dT[kt"Y2ihbw:34M4#{ J|e;@[6loXlݸ%=>{^W=-A] ??Ox[ܿv뢺ܿ V;uQ Voo}=-A]``[I Ԛ믏^{-{ۙ⩧B=cjή=M yEEhaPĂ+YM,nyn)(ry<:{`Qt߮iځkXU0WꟅ n:@ӦMw\?O!zU>o7_zc6kG=SI#>bRB&[݈O MhUzN햤"j#(,ە؄%KH|F|NB o3 rT 81v$Y8fPJ8$C&1jd~A=;7"PxPp aB3 o]"qmL+Ca#`},'` K)2DBl!^;q*̈gAo3DLs9^Yc$35B-̤To#(sTv$QgAqa(ax%^ s2+''ss5jFH4W;8IM3 @ȉoJfJ D8\) lLӃ\a6aQӫl.as| "|'Q Œ 2!46b\3 L"x`APN"abYR1e02M l$Id & P}A)$0 A*ِNV8T:  8a Aez\R79IfP:$ԬtCydoGL?lվfbiJl Xer9!PDMD*p@3@1! 5W%C^g$78ةJ1Hd~o'1 *Aȉǩ]XL"3 3 %(A)pK,!P*0Cn1F"N)4}TFL̅Vrs*3X&7*$DP&+}Ä9$3+EnKEYGBf/$,KEs 33D3T< ̤>'a#p_?RxM҄xd077{]ns]t2}Nt-777}/>FÒh9A?A6CKln~c QSfmZ-5zn޳༦j3'3O\ؐɹfxǏF?; #jvUU[M/^tJ4/Ίluj!0t#II($Qk'3 3zTqQ-!/TRبn~_uVa̘1Je$3xL̙@N mB,eq$D1LÏvy*ChJVuR$I}{QYr7 Ux!53l,X\+Y%nĀ"dBlˍ '!eHQ(@ҷ(bHdq*rpl)aA8qp9q9qRf $5SԌY*.#!# 1le ou3R@0*|@+5,&!$~QӏS$Q/SQ@B$*"^(E @A4mJ%Bi)f@T=nTI o!%,"5j@(c*AQB-Ĺ3MObF\j83Hr3D(PHX9e~eID9SqNHLJayLmHũ `ELI̴\*Q#3R4070oQ$ Ls1#A$.3" վ]6f\˜oK # 8αRJ8F3R}N0x~j6@vi`oKc|F̶ ?\tjg_~F~-dx0rg=Q, 40 ОFFv>oUxg6$N P>F"bԒ$2MK*IE3I1D\E_6> jq JM$3Mĩ)fXyDP#F$)fʴPq #>R2Z .aQ86(!,b\B8!#Pyj3$Nm( *2b\55}&EXUme2 6r95  1 e 3D(RJePb<$b(+;N-e甹 BB1&D\r}3mŒ TTˌX`Xإ& 2#N ϑb(v Cpav"N5`Ā~8A͉D)a<a@@R[U(RI%2cFFKXX jEMm9vKHsB%b٘! ʝfZ^ÄFmO@, !B"lHY";ac f2 T"兌@U&c$*cf<@&@!y̱X`Pؘ1̲< (U(ȵlͷS 6fIfdۮMyR ?sؗI8-wMmk]6i9ȧ<[F}=}B!Pd&`a-̖?zꎇ[q[ WP[U.u쮨qZ~hrz}/?P2C ߨh岣;ELċo^ǼͲ=*rD'Wޛ? ŭ__]ly3_]=#=C[Aٟ8EVXS9צiW^Rgڵ7:fE'M-78(~tG~0gٔ𷨻cƌ)q#\;cl|UQ%8jzL T\"$,%b FN%067=0>3Pa(!$9I1 '9 Ts,7bcLE *`S.L% 0}Dd<ؘUN0a#PTԍ8r( ^@ $HRIx"OPs„Yg.;Ir7jA$ L $5 HCT \#^H%EU@HX$c\ eA(TJ6cЈ*@|;!%rCeɰɶT !$t(KE|N|FBFܖrT3DZ>'6JQ ,H8F HpIf$2L J7H$N$*}GLr{RI15æO0!H$, ߪ@ .! \8!B RB0*QZ6aJ *V-CP E@zĨUL1 ̄ ʼIu`؄;Ix` l2-WHH%RpqPD,OJ(* ]NŇq:g E:-4ϝ xPzןxcv\[i&m7!D!C wv P=I(]*lAm3RPY%Ur;b75xf{ƫߝS]e.]u+i|R1ig@DE8,{kA~,iLHjіoi " V9Nls__{kz_n978xY 6ګ^i~uVᮻ 'lP6(ZJUĨEMh*闤f{H F*='I͸oWz\N|N"tM"Oq",æOp9 f嚘Rw  $ 1<;J؄1#HP3X.!*ds )f6oy"4#U]ےdˆ f5I0j e$ \ fp )EXY1Uݷ-)METb"\f|C"(  !B1&AC2#ˠf6A'en8I$5]F2L@-E l9kbnb"%АX~9v*bHIZOPT:NY.mUr2 J/T Ba@BV MijT 0912/2CJ01 ʷ\J,ͱp05} L1C| *:)!a2/T$DK1| 2$ dQ(nam.3|N<7@00/_8 @NQS㤘DT PX`WֶTDJX9\ )!A@"A2/T'rͰJ)NeH2m@8P6Ȫ"PU-ZD*_PP@(=AP vaNҷ՞+}@2IʯR#T,M1qjrlrLޥ׬v ôN!>p&69bh#^Y⺙הßqfG7;&, `S@Jd|€RGJA QM=e]HQ] ܀h ~k0 ,c||A׏/"}=eפs{L-B{Vj^3.=G ʴ @X"ժ"ؖ{~m;#R ?¬ҷUUbJifM(Č@ka(=gs2jb"L^ !ad~@B*6hs\F2m7l"lTxnFPD̷+Sa*C(K-f#0TA $Eb@A ũHMh,Ou`Ᶎ T[PF;TiTy!A*O!B@"ŒK1C{EG 8X'6f "#U"( %ՠ %n8t C PPubP*mh a1#R YnHs?0,d5B<R3Dh>3rTqjRm,BHXM-@b!4Y瘮MNF ϱ\Є2491W%.3733LIS J9V6 lc1#[ E)f8FL߀BŲ)f3mWES%n@585CԈ 0XLoc:1lI%넄*G1˴]ZgY^T#XdZEXu`TaU՛N)e@myeehK2%qjb$b)fd~lsdR̈ψPJ%Hx^5eS\;U)fؘ JRA>#&enKX? 'MF J5؃Da(Q Ijz"PudyQkM@:=GIf؄%eYgj@izos +}#ac#4ᛘSޒƩD@BY&X̴]ML9dbFѪX`U'a9UMR+}s B dP@Xn3L?X>\:c(5RT,؞&C!ȩu9A\@[۪]kn()PC8a<LU+_uƀ"IX^DV" ]N%Hv9QQ0DX媌u%׬vT_G[l1bI#NG1bĈκK^x_kÆ {9A(so]\ݚdSVߐMYæU0&>+CUuI2HՍ[}v!oF>_>peY6cdgFnˢz~zj00Q1CƟ~ںOb@.{;]RQ"v榊Ǟf;e=QoʬDr)4MӴUo@( L"U KlA/r-v le噘#(!c{dnlBqfjAP!P,T!jz! 8 <'$Jωv]f ͰP 2bbn A|In)fC-KP|+@u.Ț(E~+47_,5~SV#MCcGyq(+++mALiiiݷd̘1gǩp-B1vRJ5EpC#Y"o'K q5T*+Ljӫ 5Z(HHr,/NM!aLͷSB$31*vR%s\;%5 eٮjpl2#1!  L!#*+fV6G9PƌJd!9 ęQYY2TJ530W j: Q#TNV &A\$! 1C!@I"C0#P2 +(憳LO3419VIN>%Aict9ɱR%n$XyMX,x>T,+Bv",X\BU6jzSj_T /ay*Sf* &QPZ\BqOf#f@,B S9'JUplanb@Td`6o5 MxxU`ۘ1 U*[¨8JRFFD& !H$0P"!#0R/$0Z #40/qa#{HB +b*߆PAB Si iyj 0 Jɶ\&P0 B *K 05Tq }#cYL *pHPwT`1P}#^@2jn;Tlj P82!P(xP5{-A{2e.  :CY5 c퇱Xtp]h=H:tk0DTWh0]w݅ܚA(RpBz&"U!B=j'I0@>3@[Q+Q2dPը/X` ˽PIjو#(dUgs, 8N1#Qg^A(a! DQf 3W=drTJA*#2F&Bu&!rz 8Q6UpsR9Ձ HPceF*O5"أ.R/,pcs&a uFR%<f~"aUYMYa$|F|̴10cWˌLS#` ##B@Q/#F%H`*}'AMr?qR6'"UZ冤TSRHQ3C 5X`.ݰˌ3 gDQFL?r=N0cnjT$`K1Y]j)PƮ U J ̣m>'a~20DljJ(ga QŲMU %g!@\rR7Um@!$LQ og[zԨp)5$PU. e!A)f"(,!aL!J75} WCԄ &|+ESjFIQU[Sũe*ZLT`㙥ngģVe &k81„;L6gQUF:hkVV }#>tCN"P]&K FD-$A*/1#,PvK٘3 d[݈]u2)$t9P"Ѣjf!1 $R9. q*pZL3Um 3c$Ic$R`RU0p8EL*=U+>jcMp%PX N2l.5NN ٖkbAB8I ͠07owK͐ ,.Q (܈ݑqq#LB1eFM.(# 8vmAm"F4}5dE(E850F"ED`A&\J/DPY!Mh͟H;eT>Ja#P.s ) dbizNi!4Pu,u#6ajD0"N Tg*6a!ADC憓jy&I PTvv#L5HA(Q/1s0C:eb&$4 (%x`Uz ?P 7_mPp Y·0\lۍAY2髦վ2}uB qI0/pQU=9F>IY7s EpB]FJR*߮f;,ۍXfP J HRSyK0L,' VwT}2 B  |čqeTsRS#6spb"*<8V q%P8l/]'5kզYv(pU˖hӮvjަayy^2dLI~vn/iA0f̘lcJ Ubc1p@YϨuqjAp X,۵0B6f.3ģ Hş=IR#ݩ~5T."q86WMSa0-/v@2T!#0`:A1Wl'0}.! kh|'i"Q$L" E\ PBLkH|[4p9)u#LR7%LQ@a6w FTÝKf@ @''F"g~JPļAZHuL UgMxl;r&8 PU&B @!9F(Qo dcf`a!B0@x̀!$F`@a i*LRK&rFKL0}G:H96P =NTD%Ƭ WY5TlBM5I')pd1؀@$H8};(A*ωv A"(IU#TA T/SoP``v瘘(2L#Hq]jBmTLK2CDv*v˼"XYkcʱUNU8SA3R \27pi.A[qBYJ |; `C >"ow'f'sjшQͣ5%f8R%Ua fogRsHfO׬kطzuV3N(|ØkW?oV6l VT4M;M8Q?w9yae LjDY;QlBU:UǏQӫCBLO2:U"'`f,FT Sک2/1D4Ie 5!FPXʶ]c sdZ9L1CEIj(TyvwʵS*UNH\fC(c%*|'Lhj#ٶ[mH ,%@\ZLQ VTF F~T aa(sun ZJGS1)(M5g218 )*Qǩzvayj%US+۪m  W-T #PO5IR3IV92Nd`K*#|-|N $lB6}!菴vSY;hh'5M4M[ũ((5C&P.1 #&♖Ԍ@%7TEh* JQ3l2aCcP0 Tr/mϲ]&PU`C(UbF\FTTP֫D 5tYdzSHfH TPջj sBɢp\;!*P=|Ge<`XGRʼR R. aB leUUr&5OQC*u8IfؘIMUy'0\OL'Ōn2t%  jqjq}NQqRBxoGz ω*˼IT0 ,!BS 8Vvo5%0DhÄJTH)&RHhb5 ,Uh ! V=8#)uZ6AMBBJXpՀ AQ sl7J/AHuqi*uR.3BdK"%-ND˼:A3ȱRLl AQ(>q.ϱEu$$q!cac& MY,B85]fR,Nfd`ca ,QS#LeN & sDN2Q^s~XNT3`Ff.[-/lAD*N1#F-*ps2,I>@ vZxxcϾkCp >K4MӴPݵUu3f@Tq$5RםJyDqjQ&3b*wC$>'amrb[" ʽBBi@Q|N6YjvuJM()u-))NTc?M~8aVMmnJ2#I ϵSFc# Vqy'6faBUx-ģPren8Ats"St&H۩m -BM̳,OHJO@5s,\Z|qL̋qlP $PܷCY) 0>վ07x~(bu%nD a"N9 UJ%BTdХѶei] :ns=&R*%%EY -,V%GW0GAYUJϦzHR"EU)J"DfFFs=nZ΍ n 0{رYuMX 5`JcoVa\$ jE |*Pq)Rja>ZԛR@7a,^ɛe@Lg6{yRD79HkYʅD*2J]mpߋCO֛2Į*d{S~Rw& Oߋ[06[$$zT 9|+N`هikzxΔMsqHr镴^'2NWMكnXmSf`|l,qu;ԏ"8X:S*ip$2R(s^^7v5{Yb0PG.~_ů>}ēoyppx|vc3hȾynۙz=:aXjf$J)ohFM)%ԑ,mJՌٓİia~w%cR4ovH55ϩtSy1l k.6)쳗4Q8O]mЙ*<6v4Liv5:Zvc4L+.YID͕eph6H-pi1\νmYbHSnUL(o׭ng4ۦ7<܏R"{y\^Ҧر)`iȢfM޷IX鰮] Hxi`M] tPqe|d Iɇ76@XliLI0ȴYFxVMi`VZx.S&27[әQ+5,Eu c83ᤷNoJn0e] g)U2Rj>T +-qq[T ld}p[D®lxvj7I<4a᡽l X]j[<&A'a D(X[tVovݦpyLXO^ %Gno|&\_]%HNS5^P+0/mRJIMIȳ}Er|#LV2xSE)~`D(NIDi|J6Hd27/bZZVRfU^)6{vٯlr@Ry YXMauX ~I!Gk?-.-llUJz)c)JԋvM35 I*O"JtXlb\"y"s6ÁgFk{W=Pq p>㻡g}V&ʥӮ8i mQ&0^^/n)U YiYd'BɼL[*l7W+)2E;qBM Y'2R&Uke[(aRkz( „\."EJnw3öL4Ly|r!õK+̃C{oꑟ4,}\ؼ-7u;9۷_8) S~~hֺR]1 %[,HDW[THSmCodH®Xt{H 2/-m1;uPvjFn.f7FB(MOW8Hu3Y |0ˌH]kRԴVJzDc !>{61tjJH^+ߟ8u.5MJj$f"t6/f2:=&p7!7.̓*%XV'?zq\YހU⑸DVߤZ$'1H)4;HL$#VedT+MG~ަp]M YAZ-\ 6.^td>J|-P>r]'A4r]b[^.XeE~{n0TFTm:Ѫm},DI6Lf JJ|o^H'$+U,+[$QI|*#n'~Ҫ=t&{)X &E{:!9bRs;#ʥZ~nPo(+nJ)JKJ`aZڌ ՑTTJ9o]^ >ʘٜ~ [Ʈf?뵚?87o.sу?[?~x/ a_ߵQ_D'u6lSX8++(-/X"+gjo 2C&#E[HE( ύ7jt;vq&^K֪nƥau@Z)aFnuN@DF):28I)E2kjVZ_د#;rq.]qSq~V6]N*V>ʐܙ*bUeEQ[ӯLG>dip_4g^F7rH""zS VN ?_:*%'WJŞ8͙.^nvtR\sAl ;,NA*dJ=_) yкqs$0a#mu@M@JjB#ClLd2KVЪ|w؞a,n\C Rp4FX/R' A!L \"jЙ"Ao.tg!SOtL5K&5 d ɰRXvgV. [ޙĭt&4hMqm6KKoTj*uvOd߮.wñg2DlPq2u)c2Ƴ79b5BZ3ag6vZBxw 4vvnrX)a5R3~a/C¯| _`8>Lqo{/> 񗲾 >:G.ʊv`G`2ETXOܱRf4ŝi7\:&nzRkZn&WR+nu{ Ym*uP 3TCr nDV[,0Ȃ iR5Q"7+Ckz0Od,ʥc?Or+/SN?&7Uv60<`풰+0LlД_u`@kjnԺ-]:Cv걶d~J*jM?jga><81VJ/ VmV z:O_Q)wGkgyF" Yfiq5!`V.J3Ao 6`\lkFv?n1}M_n,@aJYM =V;67"Mcus‡r\) 1ⰊIuaRuU\ma> dj^4:` ?['ԭ0:Rx;IA`PJ8šM(G͠ ?intլ*籗/\>r/'.ns@fQjՎt{9ͷ}FK$!"mrӪi .E2sqcIcEi@ <54HL11&6zӅAzMnv{E;Sz[V.¥K2HM) .c7jV∶)lSf $K80UJKvu<)">rD gqn/7/ܛڛ⁖.^]n_LSЏuz}i{G|xp#>Rj|W~Wſ|/,??Ͽ۾뻾˿r|+&3e}q} ^,l>vQZ6O,<gdb &h2\==lRʥ&j-p^X`)?L9`MXAnz^,@SX<<|&0*Y-Gt6k=WJUcfjW.К^$\USMv5KbБQʸKڔD20U;U/)KA5=W 7%`JҸziS6P!#?BLMwXܭn4F7qӕQnT;Zoj~&I+fE)L)Dy ?`u,nΖޔ`R35VZd_O$O#Vc/RJpgʃ˜f)rA쩁L|mVJS8-Ĩj^LM}BJw ; Ild#neHt$#:U cqB]Li! |*vf7f|敋Kn_$uGa͙܎Lժ/BDeZM:dDe*e J5I\ Vjz6VMOt]qe)/8mBW7{X7W~*hw_,}7,/6[WK[#C.\mo`m%屟Aah> nXRNkJe],\TL&3IdNQɑ/~;͋XlkZD.S] PxcWǟڙ0pp/9ԏz_ W{'?? V=<6Kƽc'1Y ķ_Į4кIR6O/js5yx~$BtaLjI@ZTc5Rst0ZJ(3gv*U/b_Hߘ.6.=`RM"W.բn 66?L}%O]cX$t$W`Rjb6'桷e0e,>`d?;.nr@O-6wݽi" iwL9rcOBtv"2`#p,n3wִ5M7Raej X amz*3ea3v"H)EMn,`f ΰ4"i9Vg/"q&Δ0bg2p&v>cqtoʥK3LT =4Fl4j68b,wfԼa]~[q7=Vyڵ(%Z\;[V.lZ8W{gB8̉L:ҙJALo <8; y{oQ)u޽۷owx≗^zGx!T\$(ns?E)D F7cϒVm3X:XHԶ9X?1DFr6yS%գ5UL%Vfvmp鸛(~Sq:rbcug{y^H*CsW[x;o 6WLdyFn1? Ә,1R7q9ns(  T8ݛhX3&mrwc$/n.va<&odtJp)~W#^2p`v浏ZʰQX_H6|Op8z~ʧ|fjտ@ƿx1xgRc+ gޖ#;Sqt)G..m}cos% !)` xxԉMb*M\M6WO@+`s&uH)-[7!1Hw‘A U\氍A)%%lE*,O.6(3v#HVZ7LFcE҇ .\li~t?-d]NndXTn\[ \M,6Xܔ7-t;s0*vZ)t9/Ǿ0J?޾y咔fu[Y+r)d.RA) JH+zae =֦TV,b#*!S.60R쫿/Kϙ 7Rɡ2+\VΔU%0^a晛Hwnܦ8 J)倗.MIC2@w#?7ĤG KG>`fov(ǁ¹KGaL9&꣞{3"^kgy&Vs}q+NQ)MծMWɃ4")bRQI >u)Q1nP JXppi=,ޕ0W#݀&$σ)쥸)UT€G>^nR$Ӕ*Ú#4]̽dI\b7e7ED$-c?wI>ZDb¸/nnR)Q4++3j@XRp6/m^,ߗ)TM!5ْ=S&3S!JE`bR`a:S-.lm>1BmpYOikJyJR*3]Zܛ"/RZ&@|q3;>/NƶZ34?|ͬ#kPmTx87 nΖګj|j#eJՌ-m@Q7՞v:W|6)2}q?a ( ;nu5)^lDm >y!Qt_[>CO}/V k`V5}CaMMG2)HIf&ݤn_6T|{qfiȈ Ҵ)C]kg|xp=}?G~cx;~p j #Z5qu{G݈q=U|1 q>&$}i Z$DJ/\Lq@cv2VM5*S͔e0Jܨ>V)U+J)EJK(0un))j#;N+s%3' 9:"ՋZu& JJJ#Ϸ]Sj-V:[5יuٟMCepXovcfpLv5IdXDfRgltzΔ~ٍ`aכLʦ'仾3VkfI!1]KRзIJp籸@RbhF8C"MEʁ>#5MɄ/]@kElc5Qa@5o*`ՕMY.c?wLkxΖKb5M)U G.r+U' AҦxڍcvcqb*CkŵjV<.ךvHܔ.`uHpÃiɜYÒeS -Gyɱ4L9ie¥#R5K$'jsm )/kS5?}7 ;?g?|rZ}Ĝ|R~adٌIFJ(+v1 ^U+dx.MZӏ> זu{0pዛ7/rȬe_e??|?w>s>'~C*<^[<H+/~_( %PRoq6̘l> ӭhf W6YK&O'~XOȸ-ai& ,'qCy$dzSz[26B2-.u:@Ev:q*&2BRHL!̄^ ݤ2^+5U޴0j{[P4oRI _LAv^lILf3†yfvfQs!E{WυP2r +.DedI+ֱXSd63d|p )h%2w@Zk^q⅞J]i -sqנԶڴ@[4ҟ gF)#l$ٍctgVnze`G7 6yR%bZJMT-3jG.I#ǩZ T>s"xЎ]djuo.c~É3 }Qσj8@Ky;S6)7eRa;3EZF^k{6V* XšVƵl(q15rP l?{npbe$M4LJbOe^놚.6;Mj!Us#S0BMypVaf ojҏ=ۿtFRʏȏ|w~|˷?|}po ~'R|g~+?>?;//|?xV=:1~fҥKUV7k-ȜɜAY.S'.^¥Los"zљ&{SŎc?DMr@M$YȜ0CeXe=,eτF󿾼I V>3zM[ilVʳ|$rftеn7t#7d)<.j.`oj!lCrX+ce8mq{F]O/ZӅa.lO a=i.0mHEvSThH2n$2Ӝɀj"ǚ$6/|lW7 R51ѝ~љ՜k]g2HRʦIvfOqᒸ2ޔKZlĮi4?7TLd.sঃ-G.`}n`4KM\2i݂-ۃynS@KG.:9ڙ jd^+aJwS%~`wԙ0EbxAX)PLx;b@i!B /+T&s6 Dp+].y.1`&ٳ.nP</ltÂ(ZqӬTk'?^~NgqAJDc5"-M]T,)%b٣mMosLŹ??5l{m6{æj>}&#q,ﳗNU$JD(ƿmq4uQ%U/cvbw#LT%MKlrHk?; [GI!xݸؚ>&cXÄ\Gթؗ~_׺(&V܀R!4o0պ 2T:S*V7% H<'TU$!vC}nSPj+;,3A@Ԡ2 6RԴrfBZޔ5W\ncHNp)u7>1Rִ89)xӏ+["YF7\ jc1)+M/ 5-®ΖiK+WԾxequ&nP4OUSJj2yԃypX[K%{K򴼜{nz{DSmrJ a%}G*)& ޔİi&s}񩚹M R M H5-9Rϧa֛:'x06Xj4nR(Ka,aovTVHQp c.޸LBngt8הZdj U?9dY `][C90RjMbr3nU~oHB(0 uˌ3,ϝ))2ƅtgʾ0Ko+ѫƮf?뵞Ãq~ؿZ|t;ƿRGZ?xğ 987ODeno{/>Pzkgyf`\6&b7joujO$~bxVIVaʄc " v?Sqb)b[8כz/S7+IJf-{,,[^3% ibe9´Aa^|8A\MSj)*j|~iݔRw-5}CpP'$Invx!Y>Mj F0yW`6_"v[g%d42G.`jF @ԘRj~t,ke.m XpamdaU2ya2f4/}$;P2A0ÃyXLd@)kﲸdl.&VGgooz8oW_?_}/"ַ}/WkV>/jWA sf7՞coKg*7}Ia$#X -m?OۥMQ*l-nyҥzqBϧ#7n`LfotD&^c!Jy,c͛6EѻVj#&% W1Pӑ10j^QWZLFJc?T-wBjpe&H3aժ }MG>&Ft5(4e2J+3ҭrkRؙr&]..l>  ≟;S^+.W4 Y3s5(6 _ y/?O|ךw}_ſ/s?RJ{+~;>K_[&?u͇907?"N&OWGyp_Y?C?ч88 >;ߩ~oVoTq;ګ G^wp,~xg$%]/XlFZv`Je3]l}u76~m>z}?/N F,` fJ(^A&26p )Z7TSDV6WFmiSgxP7QwbI7+አ]u%V2vq.16oY]eBY6,p0޴ `J0nEę5 &yG[a.sQ7U&TIkeeqVJIIomp69p;SbhʇoQ7TeL݃ylɌ1?2DJmƽyA pM[nQ+U<֋oK2ˠҔeMd~*Q4vI>WJ~꧔wcG0O^?_? ~͗g?VxO=s>p 3cok>"ʥڋ]*u܀2!vf۱W6T3;fW'a>z0BC&/nqV7ya3LJe`%ioEՂnKŚtM ~M WNԛr䢨^{=raDk4/m:Ƶ{Đ?VZā2.\X tL0nS'B+I&&ԫ ìtS9 -1R`a3[G|oR-c5v6Y@V s5Z<|f/=d>n[V&Z.vx7tM=r4M)`J"̌F]qnv8T\%t9jL@T%>UD&3:$5M_I5UIBZ$qhJWkKA5Nf2Z)P*٤Nvŝ8\fȗTҥ2WlX枛)laJU~] ;S9~0Ia% ZKnN3#7/] pZpӗ aV6ɯɶEiGj JcH E-@erJMsF7IMd[Z ߻]O{%zڣx]fk[VG:7|??g?ч88]>lzgU&, Lu{?0^FMͽݚ҅MWFTiѦ.\^"2Po/՜2vW9ܛ<*@\}qVaf?'I2vK 7ҠdժKԱ-ЏM;'۱?O]oia ~)$6ޔ;fǵKXT~Ό/OKIG@cd hi&4X/n*"m! y!^Nf96{хόa2аaEN3ENa⦕jDJxp_5-ty$OB \5,.^ͅlWQA(̑}0%U+{UiTm`}2ՖMI0OiRwe vXY)Il>fT ū"ckZ])bvOdb?W+!FmO.q6I"Ͼ7EFH8XGfoxrWTzA.c'KC[(u#LG>rӝ͉8L)SqH&uڤɡ)`.c΄O}Ҫf-(PP^zVn`0uӱO¬*2#qHԾxݺZ,06 @O.x1xgDϋh˓EZ Iiۮ#ʼn$j~tIvM줷 e߮'jbcnmncיpi[nb=Q:*$iS)5V+4 C4:wH21^&2g&όAd< 6Tic'̇\=}Z)iόI^6L(ҥMZ]B́nFiq{Y+_ϵ0f騛"&b'2g`-}qtgK* Kjaz[f\$MU0ᦥf0W|E9\Nҗ6©)nDKNdz_U Vg5vX%g2'aZhnU֔Һy$-QJ$¦0YZ7 LA̓Emv,NO,j%vh6Kr LJ<FzSzSai,Rx0s馕qV5MMmzjذ@bLd^ j7)w+A/$L.{n2 q@~LPcJ5մjZ{V(ϛR"֦jXn[e !-LnJF۱ԔU Â}26()UxcWǟڙMBousS+>{Ͽ(6 ]|_o ^|xF_{D VrLLuM3+1L"MjIj͕QcI5t13jdre d#+Uw6ߛ J`ǚŭ|̄Z}X%'?wB"MaWfitLaWy#~*vg,m6WӚ%.STӝbWM]xg]ns@~v",GpoZJ9! bqjG>.l>QذΖLh3[#=V,IrG(6#MJ]=[ݾ7HDVjBenivj*V)tI5M "㸜;}R$ti(W.?vso|WbG )(zIiUKrNɧpKp7~,n&V.5nt#膚nи6HBR5Z7E@>qiďVji7QS؝>)&_s[Ow\h( أv/*O^`ڦM闧@306!-lX :;Snufo+WCniWpYVu)o"^yXͷo*e?>;_Q)~;}o u|uW*#{J =#"|lׄcII>pV=>&v0z ju XitD2I9`Ծj$LnM4nwQ)d,б͛wō ?y{i^)q0e9J&/lK`m#SPӒ$nt`*1t6K//ܼ|j!6_ 'BA&_.1Jo!jL<]vI.Fsoj"F{L1UۙR dF c:+g6O6[_?|OzU>7SsΝ>O8)ӟ~?V|l_k~+j7~??_!g??Kwo~| |??o}pb>볾;?#G9BkFM/owm0y_R3E8&uhHHQc,]všnK4)=ה X%h5'2J) 묋u+7a{o^87< R7N?ׅB'$˜=RSc6ok!\LeoN8U'٭q*$L[&̌Z<pceHov]gp{]cL+ԙ2י␶z3L*va.R' vCkz>{xS>d Xx_Wc0+N<`7lZ|;),Y6 $!SlxggΖXy!udBda:o6BhdMgԛզjzR+KyÕx/Q7IKNjWAMq5 b8VLðtiVVk?fi TRbE]/OK!3a"#[]JaI7iǾ2üi _7WZgʽxgJ)h`IM ^pp(pi[c;P Us@ L3ky(Ƥ]cq7$ U%lJivMd`VjaVű8t\w%|J~_E^)ZB$L47=+*ay!B<:i=)ݙ:R8`McRjv+]Pu6K^i{R¸2L+.:y-EO)lC+N <Ѝ0E2̓)cq3b*6~"uܯe O13*ֹypX;S2ٴp8w>ğNQ8)t.]ddh$8n- wPO,S0s]Y)am+R^:.7^/cZءnE&fR7U;ؼf˹/a"SRqӧݸp3V.!Ͱ?rX\VN H+7Xx&nzRjH|E*vJq|a+ 21îxU e8 ۑi<شA66UCM{~{$P Y]cq6}6҃"ŤM2uh~wO67㱟 Ti! tlqHf.%2XevR 67 Rv@PAyղY M cqS^~GKO~kFM}GGG__0|~J|Giѿst>fofN>8> xmc.mVʙ:ؼ4?^gorө{ӂDDH̾ڱZY} ɠuLA Q 4OdZa֋O.{{Xvi½6ܟG6 L1gf&Q9ޛcqe"M!f7zDf_\vdfuiSoT̟tXo1;UfI|yZlpzhgbTd(%KUZ6PJ|<*uvaTmV1n"uRؔ.m>F-iM;){c_J)*&vk>eΔ}q azrHL}[xߧj\Ʈ3f7ƕbv˫|\T $tV!%2kP{BohpNK2>`JfvV&py #j>5] ;S.RVE~|o^nK8Gb(̒5jts@k.rxi:O476nj#[$DX\g~_6eFI7.\ c"_EEe*.3f2 4mLiJwH!i Vm\r@JfxWB!Z+EelSw6׺Y yM][  EYiM+e]GF6[q飐^^7v5{YͤɧpRoۿk~O;|_}؃o矼}/7oOg|g|x88)<3ؔ8%"*kjR"@cqdT&Lj7K 6; TvVh G~K\vV>^\|bتofOmY`e cdƕKnVJ=Pge3WյL)rq0X]FYXn % 1JޥDI-aSNMզjXi4(%]q7E84v)V OQ6Wә/lW:S@5,\k5wX Yhn0S9 28$\i!:CfHiݟcq’iM`p͢lJ,`Q7-C:6{j:2υq0S*ĸqX\F`[ӱܛR\^j 6y0HJmJ_I!2&2R+2f/.NqzIKsq)1PnZ2ur8T^t?.*yX;p"w땏 t2qBʇ Xc5cM~iú9`-sJyiYM)}ns#r+b8 s{Zuɫ]j}F+%US<#Zӧ({Ig౞tSgiFK[bp͙̓P,tGPxcWǟZ?Pw]>~gc8/mȿWW|WOo~GF8%c@+/W)j/l\Zuĥ2V.틗n:`7e$7`RJ15X\HbT[m6]KZx&!^$F\j`3jlRqaH4vx; ty0ֺݟ)[$-pxgYTj3*urqfbD (|bur wW)Sa}rvؔMU!7Uvu.LYڴ(.u6g0e oqL=kbo;o6{xwoEG:` dM] .IefF2AbL˨~aloOnt#j*#+퀄[^4'_H6!~vc>cKgg}||ʧ R[[?;;ÈxpDG=}?CڪgY,͛*~ڦLJΫXA=jUcda_\kzmy/Sw;䀅lJL(aJ܀yqCg\-(Nd-Z)VfOdN$'bE>Δ敏ZTE)`i.V)U%eNz$$_+uxRWHh&vQX[ag υۣmEtH~yDo_K'r-X=yiʦڴ,VjfcqR0Wn}t"@}պu sO 2NkviPMzSL t[K6Kҥa*/NKy咷5"#6pHB2 6'vNjKn)Y؛rLfc?OŽ<..-LFINQz_S"MFyF2籋[b֗eu-9A=XZd h6O`H8iғv&$gX R&B؟-L2lKd_nf?뵞ÃMëG//xpwWO?c1w_N'u3hSq"sO/64?1lZ+HFN U ҀjD(:ɇv7@ʠƎ3 ouaf2m Mjp&ikQ_o +^zJXaiE2HԴGJ UdE:3)]W.Nu_| M}$9h6Ho[^H8֚ޤrZ@_h4U+u+{SViX$/3H1tx$ ],aE#*XI7ySR+q!\(Y(QL>D[qĮ2 .=M 4¥iYc5mMkݖ.L03%Х X Ce HW1j0XQs&u#M0&BTw{ t{S&‘otSg̓ə>MNF2'~N&Tq&##~-|\DVrdt&#OI62tf/sum Z7ک+5UªhFM)Xib5X\a\~">9fzfԙ*4ymYv֞p7efUJL,a FXa: Aiڠ Zi0 Ճa t8 H44` $B*PJMw8i%Y/J),/ndsno"OAd~NMQ_ ?#8#><Ew__6+y7o#g_]|'‹U/kVSPӲLj{S|:YXnr'Z$pZ;k*gjfI7.CqMJfnZfp}kzwNGߜVn2J=IXۀjW[SHi! eob֦zߟ;PSʨ -ѭ3e0ern7.btݔʄO'qf_\mLJCoJoJaƀœٛi!1H@7d4Bj ,p1tXJ ﳿZ] ױv}BDXMV)T8b\Mlؚ%BcerDFHڦǗ]&c5[`5};RM} M) ͝*!heu.a!c %J=WZQ;8 ,tXGSzS)nJcv5mDbz[))76o\@MK Cf3"=Óy@9 AoWF7qJ+v:[С{anlRJ52O!jGZHXNŵn@}M)TkP0S„R̰vi4.SoUYJ>2Vs`J"dX~΄'~4#)iM7IM/ S2㉏w)LϾfhީ)=K /?qGq~__+WZmW_?}}G/Vj$1"i% "N VpKUCk:r4R[G j,;K/Sġ`_mPaTo2\~E$J)oJie W>.ՈJ!05Ȭ}zS@`j% X-?0U{kbDX𤨣0֦FyJ7Zb ԀU2EV.e2XK%E+u T“h݂)Z).R7W[GzK7ecoܴTi6pD29B0WT3UMSt R^] R ->MMӠ~2v'2VREX2#(ՙ"dC] j1 ,@iv)5e,4rdYܤPj9dFf8 GRZH[ͧ~YtS䓰\mNd_R!{ل8'+5#z{PmesEVIM_N\KN8Tєm]!m.i6"Xմ^]-Kj3V7o pgGt]ܦ4VLQHXD 5oSxq;xwjJ#8#ɂ|K['ê__x#~\qۉTm!SC82M!UuC]D=֩DF)`͠&,hm 9n]ͽ,HRM!Q1ZH3ENKj"`)DmBMX̓a/s\jޥP0PF3/c(R oR˹_,Щ_²T+!p! *R鵋~Y洒`OIj ^UaXT7S'Y-dZhuSd,dnJvTn| M `v5uG4 ZΔL!3nR\"cjbx}rO_]iFe`&" y?u6ɕLDG6FM'ш$2Lզjj6u °}W6$,mX/SrHg|:3.ޔ06ռw}sN¬$K5X첿Iav3?SdJ}ԪyA]>j#P.4,`H%ߘ7kL;S*ZI]!t>K!7&5=++)\LM ٥m b-]Nʽ)7)FY( tatz;b|sGhSSzԗqGqO||>'|'~䖷RO~^|^ˋiȄ5-.a(6M 1`!{$煗:)0_E2İzI&Pbk", >{+y 6񙟍LoVJ+03FD˞> ˛Ӫ2"6{)|[q(4:vKqSqV.IÉ"M36HRqȄ἟ e, eLiM_wkʦː 3)3@"6[sW8M4#Zj"y P 5w6K1Ʃ_Fvrqma*e(gaHZΔ_—i}v9B ٝs:u~τM샩W)D2+d(=Zx MDfNd^ԋy,bZzvXj `XQ5PJ60k%) Q^lfW_Sft\ܓy< _KM݆2aflMo7;w槅]-u; `M5:vw~?˃ЛrET+6'%.)*.yMy`!*AMg~> `JF=3zczSZֻARPie_TFO)R#[Ox x/VlϠzGqO!xuo!_9U}NmSm[J}W޽zW_}5`Y۴QSڥh^=v3Xaj*{ALh068]zZ -Q465U#GPJO5&ŃB3%Kd2RcY2,yLTs@p{fCBݴRhe2xQʙբnDMҽ)D,Ʀgƥ'qppI^ܸU[4,κڴVJ ߷9hF2#hհRw7Kd)(b5+ T\eL :S-`EЭ6+GFjQ'~pNW$RV'q^z hsn:۸X{͑̓e݌L >KN6e*vpRDˍױ+禵j#KF MWi\ci&<7;'ǚd]~^-e( /v{ZCq6[ e 3ŝQ>߹Zcdj/SI:qgJSv5-?O,MZɛM_Nv(*-̇EѼ!T94l;:}»^p{sxqGqOe؇x{~b|__o#߸N9|`u՛rLkzvc!|&`5=hR5ҙ:|o82M/L؛+rvٷͪ]B6S33٥Ll|4MSx #/m)i)sX+%YUAf6i=x\@iwwaD~{Wv9$Ca_wi*P!R1or8TwCS[dʥ} Uk(Ø tF|Hᐽ7U)%Ѧ'6?O2T;D "U{ϰ]5}:PM"FC]蔽 $q+B0h[ J}eX#} LgJB!ҔѦCq)ͅp!,gݴ~*u;'ʦL6X;UM?\֙0:iݔn/Z}i8dt!2J|`\IDAT6%TZI6PyA7g2ӛ2'4mJ`ʉ=Df9VZ$bMI}sqVii<j+)aJԾ؁nTEjG^\ $&J.6 Éjkz-K^V[cHXJ#YTM삭+. 6liX m3K5R%ME:S)k4Y*TW&KtM,v!s?T+V7&u.IM EO<̒)BI1UBVy.NZADF^ũ_R5oeX]ڦ,N?D`5`mM _MKi5vi*^ZO\F#$y7_N1%2KsRϯ?7ܴ2>r,ޚ$Jg㒤&uNŋv0SBx(c]db/%R*jJ)$]1!paPnV31{e(ny?ɯu}eJ i,P!HDb2㉋IVpwKÄEdjeMy s'pY*-nsLd3H`RJɧC&齫} *Ca(SK\m<̅64ޔLj ~Ue@K5I=uX,V +2ܤ`7M wxًz'g+Gq?IG?r?'n?M?u7^˔/s?o}T?Z)u{< {1/)$~w+,,R9 Mqx%\ lT-ihV*U'TE]ZTjL ƥҿ bxxSv9z[{K5$§M9@4K(R/;&HC!r{ ~KnwxirVǽ)a57oM UyTJ튿Xjp{!:S>E)ub&nr/!1&2Wm^LѺmS Wۥp ܠ)u,R0uւޔ3hֹDh}ka- O6R1dsZ!;ݴrIj$/b/ٹi-4:QʰoPZ7fMJme]Lp;ڴF" raul;Se?$%Bp^k^.uqR ZHBjS5}J@ԣe 鳰^Zob_O]4nk[Ndv)H,A'~e )<:$ddfm 8). )@=G2!bK eݤt~Ey>{s&|n> q><#8')oUO?SIi?[}_pq?׿W)HEc&syG %2P8A#ITJ $2KqeL"+v;ݤVJ=VYCടnN \"y,ޥmS6qGig5}ºh/wic"~.uճZzSjH{Bft t;qqhsg\.}S u>V*ֻj=:9\a0J?<.l6u{*Zn6Hļ}l\2P~Y`dT5}b,̧~MMғ1e\@T`owH{Sd&<ΔX'(ɨsqv)ȟjOng~9'yiK/p>6vI2ZARv R>Mߤ9 m;bs?ؼb0cRP*IdIm%ԡfNx"Dt*%:RCt:+u(*vrY\WD ҝpe:Ԕ>/ <믿>o ߆GoÛocqGqďWWw~W?o?t?l~| _?;_|k^^{0՞sg 3Tޔє`*npM etC*E( {$pTW^wv8,uЬL9Ki}mZ[F5}RNr03:SL R^boLXdnT 5_~!㑦j)'~XoR*AHj'c0Ս'aiJyR jOV.[,Pf&$s[iriie!{PJ23I*^Z)DJOm)}PT{yj}um0M3Lt- RZ4<lLfg&i*X)jZyorwB$#+$Vj0zS"U1`t+ _Nâldң빸ޔ}(A23RRtYA)m&y;X-0jVuXK̾mzSy RRxHPV iS$Ƌ8B6>R 5b?gWDe2%LB4*ãi/>CZKdF`y% w_7m3CeʄѵrqT_&B4,vѥޔxfb@v) .ԡnf/띜g&۾틾Zu[h;;;ïu[[˾_sGqOA|˷|˗|ɗ|7~~>wsX)RW}o<__ o3՟O֟~̗i72vB:$i_$~$1dᤛ' *2WW *Sqb7 X||Vm.1oVRx2?H &5}(.7a٥^t:)LoM릪ռ/~㖋86?:t!IÓ8xܫu`JeeO i8]۴-TC<ۚ]@FHTxϸirIaC&xApu}O"STOjvoRgݼrIw:uRH w Q(z-o\NJ)RnCaLdN2J|֦_-7U ]L\Y?jT@Ҫ1_+5d/iUM7G2g~MbtznrBH N1 !Yp)F؏.%2nN&UJݤp˥MF$,)PMkwyLF^7- viRVM*R=΂jgaѺGEXRMf$2)vnzYIi^}XiYn[葮bG V.Wi7jH.vJKVS8UyR+wo;}ߋFiƷJ,˲m8 #8#~`j}gs5}{}ߜɿ jFV9}, f9GߜVFRI%EFN}W@7JEIitelRYvJx YMQ;ݴQDwr{8Ndh0\AyH̓sHfGn+$ sռOi2Agʩ_z˸irjToM2'\uY9]Afa6yFnBpyS{,'>BfX5J\ۄpȄoOy~F݂)j<2E2 %n7Exz jRj+h6 tBgiJ_}*oi9b=`A^tjvh"Sڥ x ԉћꐞ,c$3ܔ2HZuSa;tkSdHKİ{ ;+6.jS)|_ T]$;<2pLY$Xf)D/bߔ~/el*vZjӇ po\,5(J\.硘QmF vX! +&uM)V>KHOSnw>U5}R!NBa§j7˸/Ι틿A͞[ PuN7m~Q>Oީ)=K8#8'5/kScOΞOk^^{)au@ћR%RK>^F8]qN樍ֵ=vBg &Y,A4kJ|\Ԛ{TY{(`-RViV?/N+*6CkR >.մRSFNŭ|ǗR:P6J^_w@(sY7 .wVm6 $goy?U}2(F2Fsm8tÔnjHCo˽0Lm +6.yS"FmW /ANQ"$G*ԀzK%+$Rj3VMRo !(R`9[t{Tf| 4:I櫵x.nC0P\mh6@)b=É?tsz{wa='at)V IOR[e Pip˥fo C$obWRʥ~JhF<ש۸dtcn9S.e23cn+_393M^ߝ(5WumYDK ~tc܉Tͨn7Yrq"KZ7W.IZU!vX cSJ&?yωl4`䰞7LFfR۔\e=Үx/ކww4{^Ԕ~fKGq?P~{?ƟotďgJeF9m F8dRaXQ3?sӝ)%俽)̴ܴRa.V%qd"KscSzfJ.;^?YjzvBo.ROf+ү]t@bHFYRMTT$^zaA2`iɍTJIg4 5m4? ,V nĐdB$)U 6K`$\Mo{/6TSdN[}4;SE|?\aE`G@ڀH(Y#\dijӕ3h`)|gP5V&vK5 Ws;p'24<,}*Rb;{ZKtyͲp;b\ZTTH`d,"IX"b`E#K*LiJ5e&rXJˊé_N]lJ ..E5=␴R#|uX{RAG<5Z66XZh55n5 Ne(d,蒴Yt5`e[$iMd ^&{A^ʥ~y:5mTh9#8#IV{+?ɂp}NՂnnm ITTl&m+2Sq.<Rj>ݦ @tbי-2LO쟿[sH/d0>G lVa6aNݾx=X`ˡ5IO; (E N9y<6.|2HA,g *ǹH ̸q^8 Bj6>F2A|K5 tkzc"JjZ'>:'i--M=9;e8dKnv)2}ћ*i.M OAa<~K2f2_V66'2Eٙar5/ ;KNM Kq>Tm.n{'93d"qcv6MTt\^*r=:틳@7?d/MX>0t" OUde_jnt^&sیb򰓰}FʥKk+c1NFJިhhGD2셊&Bj7W{yRsIfW\m:V#}+jٞJEdnb5Ryfg,7 G2 6{SE:|{S5"H!\>ԝnmݩ_b5~ph^3;;5G}GqGo'>wsO/VeޔGÃaYq45:yXRgalIA*a&:KLu@a'gw¼rhJI}K?Oʷ~z7?7ry\%Iɛa]r^ݕj>f2BްXS$KfX~rX.0fi¼ry% F&E_?vXOL]E)0c[͠H1SJ0u`j`T˄01J'2<@kˁgqw_j0`Q9Tz;a&H:"ɏPZ%2V;U+\`ӡ8F !U#UBpt0EP uM. dDך~I hj6ݙ"(~=RgKoARJ6WTa[gf\Qwtl|`YhnС`mJb8E2Sء̡)ll6rSBVƾ)u8Ⱒ`J0Q{ݔI髥djHFmcSfRWK?UhT$2JBRKg~HM_.2/ ;n:7Upsc5C/E^#ܴ87.2'~\搫!SJMt,6[;h⽸ .o>o]`8#84+~=0>w_./'sc6Э*KKsq)tXeA:.Ukg`{jT~?62Qc$BJ;JRĆVlҊԓY9tTܾx)eì-VmKdDV2EԴ/`*f4nJI`2;Z̘ k0g2Z7aVVxfjZVI=nJS/wX@L C!<P7۝nbjۃ~q-JHMosvXFK^hS)33L aa(Rq9e_efĐR.Ҕo)LoSי?](B`$] M'w󇡟`4_py~럾x ߕKm_<GqG}/ݨ/]~o[os{#j^^{}*Fx<m?ѭ6LYMAtӹJ%2Wlv@Bh?mhRaIv{ WNQJanjMjPi/zV16IvOPG #(ugѝDhNTRm,R 8T!TVkXlEWSb+Z} VJL& sq6ӥ=ITL i2T kӵ6vSHZFLM ANyWdTSOqEᲾ\`ʽnjMK`PDl&2~_,U/[f2iaYM 5-Q| y?1Ci,ӓeKia X7.l:<,)wÌJ!VcR%FnZ-ZJ'4X X_^m.S Pmy[ h73Ern7&;yٚ9]Z5IoHJPeXETBs.CqGqO$/tďz^}չ85({SV>vR1or87t+ ° s+s>z}i_D:.S?~h= 6PUӪXȁY/2e5*CfԺu ɄsSޔnLxS[i0弛C%=Ɇ5VMX a"#,dbg2+z7c۽pӔz]ʸsגsN..\VЭ0Hڥs*S1sq;)kJ%To85}''.zOQz/VÑzد2'3mk^M<֕MSqSv7Tl"cnY,PR_c)&&KUb5{㰖KPʙzbS5rJI+f$uX)G/ckZD²8$t=+}5"4PfqwypiR*cXoL>ieش2浏w9dM?*ZHKRw)Vbo"4nZ!SDR+edT[,uoRPM?^ƗB<.dj8m pg35@ C"N]0e㉏|HFZ@m>Z$V*`eb+7弟RR {SDRf/띚ңEлFJ).w ^~M R ~GqGSשsH,:$ƥa7EF^}mOca;ۜ =H0\;[HK0Ks=[paHRh>Rsq*<V6!u(5no+ԡEhoMm sq2z$i"jƥ8 K! }g*3l0Jǽ_ B2ue`"I?ItKpli)4Ү.]ncfb䡴M6.e2t{S.)ritNy=%h86A7#HoF3E =ֵK5O *Q'F PgpL&[ Ԝ4FDa] ϻ3!ɗ|&ɎHo>]/iq%}x>rUtK/kܢSϾ?(9:8#8 m[J}W޽zW_}u$$.6:v7Bܔަ0g+Wm敏rOMol>ny&#ə* Lf6HTkJ)VFhP33cnFNRȌX+!7D\y4A [dTlv."薫zye:S,,2:uS瑚N\gz\MSj[RmgK-LɄԴ4; 3Oa..:73U6.*T0U׹ VӚƮ0^š6X) O:+ Gz tS^$l}($AX 05};ڦ͵u=hs%pXUӻCqP_?R/+ MX@2jJ>y@`PAwMW;fшv,HyI!̄k6.>tyh37!QVJS n 7ҽ)kM2jZ$2BIy,Й_3Ka.6Ri U#ILɝ:iHKր4|"[ő(]11>SR؉2V+RmiUD&1İQR:SnV42)p ̅XDnԴk=ƌ֡+/ދu:+~}Mou߰~5//MW=x6o2o9#8#~Bo* Ih wOݦln|4@ oN]R7}{GlJocwGIw\e\ʫ! ҥ6XRJSꆺ`kP^svpsN.%04oNJ 1f} H,Dt6V6K!jK+nZt?\>l9s&c.`ڥ02U{<w 2űB=vKV;մRi~wߥ Rx獏 Ҡ36vAT!,Z)V4k!S,.jNҔd'x:BOtxe8שˌ:nW.Hؑ.۩_>>H?|hW=_5J)R/nD #8#8]%^ܛTϾ5ʰ@wjV.&E&u)s/ {vIVթ $S>8u8L1` TjSJQjBCE K۶ًfuY(ʷ$Mi<c,ГyѮ7etI:)\̃4Qs?9*CkrDX"u)2J)!CzS3OcoǕ)6pX%T XFG=ֹڛi" nʸKy)uiU>/;ȌҎ(2T.fT)/Y7i2` a3\G7ހn`s04MR .ݎgԳ0n4ͻ2a:Z)6m JJw)ݴ/^lraҿ7IyEZI=@xc{;SP]qga rIptbt&ܥ+j/SG Z)YRӒy?Han@tkkռ|O)QJSX;[z">égaN3ܖrmU)VWL"~`se4q;o*;$MTMoʛ3EZ:aEMR"ZhV`,RJhީ)ԗoo/~@,?j}ϷnL/{~uk '~WfFy㯅o̟;/#o_~ݯo//{#8#~*[[KKNNN{{wwprrrrr~zZ8X8ViC* ;$VjXiXٯ]%gjDh9A2C~\n );᭙P)RĘAϯR5T|(3e*?'fZVZ"M ؔeW6Kx3쉋oVa'%>$,="VjHF9:+EBP6' hKτLXwk,(*!+=t Cip1 sr+a`i} X֩1Qwx VbPCIb4 6?]@oReI%F Y.],:m ?y{ڽnߛ"n"<wT Kq65dXӰ#~Cb\ۜEIxFJ; .єɨ鐶sXk쑨iF2%bteÙaX\qb dr(,,K/Clom>7bLϮ6Xjs5Rn7)]ؽKi D(gSKZLNnH vԷ pmAն9X`jY],7đcXşEBk@2`l~sZ5A`J0:zL8e.QoYFG^ѥT &_3j;S.t#uX3PB8RxLɌSqۉ_"yѬuSvHY?n)JM>^`,/c X ,@ٯ]e _A ]e؄o{Hd}R[&|(uv_otrGq v L?N`f_N.^z^{5V0*$p0et)S.V#ΥVmFκcєn\NŢK0=qX_w)~H.Pkviմܞ0_N?V.5V$3j&\`MSqjT&)sM)j.boRw„CqF2RwHd,P$u= n8 ;S=RX3hse\;p 锨{Y?;$mC"?ءn:yJibJA)%6aHh"ڥpDF6.dbqj\Lx̨["4ūMgeL֔h0KTo|, Jm ⥓0&Bj:1*b;S ¸+^Rc^X zbW?/{n5;5Wg~HFfVR{S{$f$KY`X¢vpiҜ}!, suNsS*Vx)b;&1є]] yڔE 01xLe@%RxmR*y 9HCRJCbԺqBfj>r`R2sܸXӪ0rSq 3Ej 3ekJ-6+)LqZT>dT&rKORڛ%2VmJZV*"/wHtJMh:SGSsb5M8Y8 YX^<ًz3)͇:ݎp=r%&g5~@P^_ Jsq;mj/:O᠔e -оx9|xX+8Uy7ݮbߚ2nz_j Ʀʰul\"KA&*/_=R/{/ĝW. "jɩm43p `hu Eh~!jbWkWitkJ]X>PܔTn2ѦzS6>f O^fe}29-dln*֧OsqM+T#Y)upz[RlRJj79<7atj/$r1,c 72rp"?y壐r¹IKh{SN,z1W#uRԴ>a# S[w<|jz\[qR)k6.nҷa$mU2f c0/g~zE|R"%ؤuj2F260@>J-d_C<}uZA^tf,x!m\ SxS S8;!0~ kQ:0D#M|Q1Lf2/;j$3t&3aSM~y؁ntIʧ .o?|hRJ'Fkp>?N]/jM?=*|pqGqĻ8nG_{Oo+gOGոV}x^z^{Jojڙr'p kU2*$u>P- }SG!8nZ5ݛے )ʥ\6bMuv?__~+Eќ$T[ʰN[fn vK 7]RJ9fyyJdKyaTJ=:ϻc?;Sb53մ7"euڄce]}^]dj/AV/cOM \RP>,ƿX WMل8ڌ+K0YV.P,RRle8Llf/$Q Ȁn-)MAx[etI)E Tl,ubPRlkz+N<yk^W_}U!RPJsx!#yĦ}qF7 taNDcYb%$#|`}`Oվ9@fGk%3 MwKW3]f$}m@Jߤpyp4i tNbWsGX*w6XMa0eV2@JL  /:O*u)' fn.|Uet<|K'o`m 6ocM7a[[ yNkaRJ!X LN|JM5-lǚGZĭW-F$Oa_ݮ`2HawMI5M= K"+jL= n<3~pwޔpXUz?e>{IoGM>|}T[O6WagRyջO*W#L ܛkJx68 Tn"@VJڴ JϤ"ժw2IjMsepڥ4h f ,Sv?x}n4k6ƛ*U?=h^=Wkf@AW Sd%l2h teBJw֭&2Wq>W3y'vq7%Y6?VSq Gfoj!}"SP2~2ًz'gx?1/Η⯄_xF__oҳr#8#xqr?B{F+J?o᭸x9s}#~ћ2U+!(S5v.94HFĊkO\z :륿\y-[0-&DB'Kqr]*פ<67UXiӓD؛"I7.+ 8mM줆D3A;ݤԩ_@&T -o*(2˒I^"Se]3eۺћj4Krf!MO0H`8A~ڸh5''Por_ E6T{m> v`u & )]sH+:wӰx|(n}gG-`Rm!t@."g"gi=2XW6Sj%r,\6v򺄨dF)2&FVb$ 7^~ʾ2tIMeɼ9D_$h.d~V- jLwn7z%#k+N /9C~W{FuorK>n8T|oӟ[8#8G |*ՔR=' {9V~:SqSI䔇>7D'A7wzX>XR^w@8qݬ&1^,ʜL ,I=d?H7E(-A7ǍM;h>nmNdFS*MSq _] \X`{4+:XMf.Lؚ>qjdnkeAd1ggbPM6o|ԪmM'aLYq KJj$#o|pZ(^%d_~!Wd0$+!7pXG@TTeJөaֺe!p%, ֗3L!yS9`EݖbQ7j`)}2ًz/(* O_LJ] Rm|_u]/O?!8#8G hq} 2vQ_![ms4߆^z^}Uɻ߸(o+uHKa1Қ>'N*LJ>`Vm%uJ2P`3f_Ym%"uy.e2Q/ &`]t91RV. yHFN~ЪiV6wX E<v9FMҩΌaieŁ9K3{7y22fo0en[:  Xs8ה@s2wT4INbuָʸa"d[kc-)u5L $/prH*uOQFJoq4@+ęʴ X.WBkY|'> y{iQ7+N|tHFT\&L]t(hX3`#pf}o3_ްWJĞYd Dz/H;J/MЛr(PhVjvPK_DzȾ)u8gxZŎ6&b_%TAa0HoR@F;az0%*uI\^t=Vi,͙p`[>\v:tSjʥm IF7tzd Ýndd28}J4}b5NTJB,)7)l|<ƥL}oE.K:v eRwx2Hߎww4{^ 'E[}`8~/~W9Ga *w__w 8#8G~wDVڨ&':W 7Ďx?pHZ@+UPcfS5oΣgBjahkӃ'a]$Rj)g5 )D2ٝUBaL̈́pΔxUM)n+UR¸5jrTe?w(Nx뻓ؔgʐ$2k0LYL06t)к &2HľxL)1J)Ek:^*P@F;d4666 [],\pMXRw;nU\Jg)t{`,L5-yޔک}Y6SnQ cEdjK5RsR@Ғ'4W"3|KEm WHyY̸^A^vw,.F2wԔ>Wȧ/5JgaY\$Vj;n$g'^^sY?|rV떊=)U)(nbgt,\0xS)0MsST| S>ܤ0U{; Ed uW{A܏M"u{4-3jnr`Gu؃j,lB k%Rh.nCz:MMY~ŋͲ4ƹؕ6X<֦iX"B^i-n?x?|>R;!>8(=?mK°9ovin*J€E#!H"UȄkp{D!<1mbE JK3"!9qmmѶKGF9#BgnX.tAb5`ki,/q@j:N痲|؏^4eOVLt("qag0՚!h(+q&vK~`&3dIRa\ӕR^e%+> L-J,BlbwKo6^;a`.ٵ nkҩrj69>NHH#&:.U 5Ydsp"[Sѵ69o=T9ia>AeInR l"n;D^'S>Cl& a'\15x4dEq.: w[ [pD+rI(euK٤l2&t)))>]J6 4dxUTB M 6tY5T/ܦT@WE[$3fޫ ? |j~?8#83IҖZ~ƅ~_=R̼9xJ !AWl;?]w]z?SU!+~]~G ?xx饗rE թbݠheFE?tD:yg?kS{!;,( o .P/Up:[,ס\ǎH^7ؕIkG]rTo" [OcbUe&PK~ -GqG@سH'!e@ݑߢTB#)ZBD^[I<W?+O?nB??o/~I6~;! &t)\!e8dmRE%U:L*sV9ò؊tl<$RL9k3Bd(TELR O.NeRP_tXhNU|xTXѶM,nB&OlhdIe;CKNMf1 ґiK:#'+$$^DINצ%3۝ν+=)ΤuRPKEj`qer\Q t󹛅 u&JBQVDl"QAiTbMnubml#&"e[`Z?x/4/#8#NN B tdmڭ sCہ~o_T M}ۿ>ƧƳU/ B(TM,JA}iЫ\l\IT9r~]~&WED#\trHm7qe#K 9%I XO7HٮB0`.@B:;U4BǛI JŻqL( )0@w]G )|H6eUVP-к- eF e2sD;s>Vd[p̓JddEa}tXC{):vNfRܝAo-ꉛv5:,IcqXd!4)| mBm")-V!:{9]\FHRRJkP/Co* .C?4DrEll8"D٦l*/ ;t}H6U Eܮф XP9:㑞_m/`XqjNE[̧jM!=k//J Tt*PT)[$xZ4! R '0)T!n~qYd6Xo> B ?0 Yk=T4@s6NImlbD !+V,D 'قhI=Mc[n/DB!nBp?My7J?Vl *+|ցnЅ.M.5ln&+E'{W+e{f͙4|#8#|mlDEs$K?U!k{xs/}n|> ї_~ӽsΝOгjrC"%t&NBɌ: !>z8ul}쇕ҫԨFJ4ORS4 W=4PȺשlκ5'NEZ:9C\:O JV&󋉄< m0qb_ A' HY 41VmBRD* b֑a6AqKkЫ4IMN٬m:K91TX5܄*@5#b+t&khZca)}Vs,6ga t}l~%N\n+$l䊑0错IatEH_tv98:NxkkbulNE&CMȥKTX`xRh'4< 'Q@dqTElPVpa*jMtJٞLEY?2׽a?R1W`UT!I0<>fͭ N+Dq]2V䁹6*rP,}6ekҭS& =Lg9u Й;cQL|$ +3~xS?~qG﻾뻾S[>!{_Ct;#-6#ȯo8\տz;^j%^fn"c?c ~g?c鿳W*!_ⷾG5O?'?xn. amҩr:)[e&u&pQC6;nA@ ͠>Adk2UtX|;Bg=贍r: ][S6ɭzdye E+&CI7qSr|~=#?a"&:n]HuX.Cq5_7xHvm=g+?p߀beb e<#?(YKN)N ]u ja'5!Se@L!T-+WXR@nڼb\S"$!} Olo qvԑEpJf0Նlά WW84/vNg9&jrl/zml>jDCٮc;;@6~6{Hv4QCE :Ev3_0@Źɛy:bFl{SXCQ_lmMV!wU'tbkPyekӲT\Pɲy6n,OO:d`᷂)wsjpR62Yښ,BmNM*(w%U`BXzw-MX؏NdAjS%jE%dB}@"I' ٫|: v&+ 賉ozzܟx??x8#<C.=xw9Rvg7SP`\.:kO 6VI!>Cmg{c EOEl; OlYvS2c56d\tOl`ʦD iENƫءl;xtSM !ԏN5hbn+H7:uӚERh 9g]rv+5ʭ %tkm+OxӘH !΃lJ* K3fĜym;j O-{J;y8tXS7#)NeZ,*sփ|nEdO7H5BY&&&W&0=2H(P4TW&2Yf͞ã#8#>_;+ B}7B'_ݗC??V $cxZ!o?%_ޯ/zO˿P_7-___ן_6~Z^M>7TԨ2H] r lkM)nB|mI! ˖y>&r °{~qƔL% jn&D*t*/Tz^g9Ssd0 !97y$H QVqBG)>&D"uf=w;{+_tFg#hMX9TjA^^eQmr49esTnBLwU˓QGI&XC\`8V|љek Ԡ6:)L(8u7waک|E άD-Ȇ*&-P`(Y{QMr R'0<ɹN /.k^͔Mo 'ݬ3mQ(Ѣ9a NE_Y7l\a24tV٫u/Z!i$Ƽt EkB䢸2Q&Tv:;,wʄҠT&_6 \MD 50@TA!)ZC6?QP;,Q:H(zXԜ nԩVs}A~Q?aaI1%v&CTaʷAD"6¸MIL\՟#8SLWUT⿋C9~#n@8/\GW_B!W~_髟pgV=/-\6H/]8ʒ8: q+rfp)BG%xe<ݛwTDUA$ʶn)7EQ\mJۡjg!kq^w6yYk$^ uӉTQʖH}|9RVj}6d:WYAU@cqb{Ϙ@r~ ERD' q6UʦBQ@sۏ&lK%uB7 !߃l\p/#W\tHeeMTb©Ii ]a٨A$DW+lHG-FzuZ2mˎc'rhm: h sE u=qi"+~Gx¯B>8,C ՄH}$e"FP 5:NgpZѨ![! jFUv*Z,4Pi`x8"h鼒5ڄz_9*R *s__mr/P;nX, WMTp}6AnTYQS- ?~XOxR^[& KdT^t>mz:iZVL EsуN :,K ?LEoqzQ&| S5XʄXƯpiuN@Ù SE RCE-+oذ64a.Z qF6\)ePUx@(Mt"bA;>U&̓nT>d^AMbiX4Lj::1MMrCV@ !E0*\yOFxnB 6O2 bubnS٩4paPϻ`BV֏**EB_T,*bxfgEɶ69 YOlkB^V-7)>Y_4Z[f.aA 尰s7kJ#8#jwO?|qJ5tb?k#~6zn[šE/[)۹kdI T(ٞK:J\Q儥4Z -V s7iK6ݤnʆݡW2 Q%RMNNd-se<pZG,^}_Bk2d}Ɠ 0 D%*.udoUA{A q_>z4 8-t>YaM,F I&3iDYyBD›EBtf_4@Ml!2!Ohఠ ӆdEYl]k eT4J6"YR;H Vhn'e:utr^P7. @j*:7XdmM*dkpBr ʯD]UVBh _4݀0M**SʽNKcIl~x0-8'[* Y3o,0Y4qf*:tSqJ(R%a ]t(+Q3;&=A ?]OsjV`&tXp)Z(jq llۄu1@I!L:W]iilN'&Yt.+߳FtICHU|"mB9X\c|Cj5s6sW_٠"q$!&$s\f͙#8#|Dr_]qd7Wj!Da5Б9ڪgॗ^uw)gn'unRT&LNe#><,@g^\8.t3Eף>K?*Xvw)B,t}⬛>~`L9GxR)e6@jd BJE> kp!TXu Ug}H{x;ԩvO2llPfw {)CBB'!Lx}@tPN8D ϟԜͨy7 :ŢR9ktN;q*DF*5B~x3*zRs6TBpNk2=et%Fk}m2 ϺSÜHmc'ewi!X\tR sRnll +5)EUu\Ԅ&=i,8,7&7E !bYY?*_^-u\`R%kRW"WdOurwS!CM$ ;J()DG $=}&z{3 3Z,ɕ XQ#9~B P ˠ$R dEp^Hv ס.nu2HhԩSE+XԥQK* „R1eNXuւ !hl@Jr$SJm6pXN Ch)D$l\k>k ɭI yb҄X@l36)U4@+QnF1kv-c5v<,u!5YY !BQR]r/M,^;,B,I5 @5H ܬ&Mmtd]t(+!yi5~xO6/\UY|ijU/ܚtXH + 7qye&&P :aϕjR]ts6s6MXfOq><#8}V$?{r.jIGmvX 2xH4H+5!Z70W]"YɄH:gP;y``"캛y-UXI~莛A EB`}rg9sDf3|5ZXNb?6 PB;nt~n/mƋD80q|r]rS !ًi:m-^!BV!l̈mX訐,!YU,Mqe;Gk 6ɂH+J!llN)P6& ݫr jxOC6RPz~ǖ&v:]*,ttB Ra.ZCyde"3f͚ң_}CJ7?ԝZGqG|*X׭5O?OZ[O?pħ}6MI%[WYH]Lh4!4gpF(R^2Q=ئUXbQ VI sEȺP dX, *n{C)!۩@ZQN ~YkkR4Vus,BzxX -W'B:[([ KPHE_Af$8!DJ*WLAeG:4JױwC  Gх&~$}nmcX b,n^:H!Cwiԉe=Gp fHvɢ+OԽ]wb©aMF•YeƢrE;`.z.:ԄE'• NR8KOEK!6ͫj>@ʩg]T@Ugn4҄BE#QPnшJŇbЉ잨v(!A%.l|5bVY1@sѵID.O"TV)ā7"㎚@nB,L<릹}옭V-+܄n -L@}t7CJBhUZNY4yN?Dj]$L4@%A>^ө6؏)HNu& > }fMۢ/mSeW?;3on;}{w8#8SzG?#"M#ӿ%z^~en5PH(Mrx H W&Kk/sOSdS6kЁ)33oc9 *'vPnH/yPn$j(zґ5C*YdkBOYɊPYu”͜M*T(DxbC2&eH(+';ôL.YdN6?O<ʭZ-Ody\_MbÃe+)N~(T0AvM\ z凹h28괶 5RE-Ld-Mt |,ϐסτ\iT9F LMلU#1ͻ4q尬\L\8 GBz)۩SN].: q&${HK- hB/ *;U>olެ)S/}ai_cz=+~o?{ϗߟߎo/W~~C= ?_#8∟}]u_uO=swfl~3z>99e=gH)?g]oB^~Jvqx*31V\0PRUU S>nj.WHOLxn0]ŁjKiYIIu*'Aɱ%U'>\IQ.* ZQQL5,R0lUybVP&nBTiBlBTN:I!S%WE_> \ 5 .tJ j $d,Ώ8g 6tX$?[!WIš7F0mRzxrS^ThW&(S6J> Sĩb[됍UEd e}t+3!;`PIFBOM:mce  5PpyI!BX/MJP<&,t'va͍& >n݄jNg H*V6쒝 E-mE6u0B٤hA*i5^[CB-PԨSة*&a~m`^ܼIW9sglN(&vl"m@?賉#ӛހ<z%(K`}o??3i~?Oo>Ї>U_U}C}{K)؏W~W|{iGq/$-"~N#euܦn@5@+r(0٬mPFDġ%[ʶMebXƖ6UEAMt,E|UaIyq { *&v+bo u踃4YvMxXXXK<8UXɖ׻1Bѽʗ~p*sRBP9Uዊ8, 4581~-JTs]DD6y͙6y YGRkh,΍["dj6*.: T0s #njB&wZVe;) <{:t ɡ`1URRLT'{C6W+ hBPBI9сluiC* u06!)&7]+?dS+C6 i:l/:u@Wgݜs1ZB$d%RRM,*y\<&V!lټdT!笅Ns֥;+nHA$\t(zm^rFԽaNfF ⏠(2Emrj_g&~ˏ7[:_d>? ?#N o ~৾3}tV1nGqGV=/rS1ĩn݄6+:X&Rqi♛c*Wg[j;jER*,t"Pg5d.}fnU楿p{T~nE*/j;awo؟&vdd_;,lDI:&jBQ!XWp6mr۞>ox|XJ)Z,@4@j.ްM< Pmr*JtzaMX_~`A6 tH_tn ҁ:'?0g#@ R uȆ;@j:Nƕ7!6EOٰɮM GtSrλ EUP*ЫMZb}iTL+y dH!V_A49tj=Z\ِ -pf^=Ra<5j04AC]贶&Jјɹ 4PMa. T~*lŜMc?.MuZ;+T*XQmm4XwUXo.f6H! 3x i^wrѠq7<-vɭB䊹i餑rE;,!^'46`e>mr&tBB#gD }('^Y0DǮ梯|I)ND+l8$[*gl(XT"E^N5Tx7B4!RE2ʦdœh"I!.COvBM쪐ll~3'~‡q{gXf3|gmƧ1qGq?Wxr͝NmtB] l"VEwMb$'^光wWYAW&8oi#ǙX?ԚT9 &&U;b쓥 n^zv(z؍:IAMqB:I-;d38gCL68$발@墹N dBr%zC6 (++ RkRA-fR7mBwΪ*LѥN+:blLr/Hp;&Ig,B*BNnBwbN@(6˕F ,L QJK?lB**1e f\"Ia&;=-XUu&L쳽)ɩ<_`tTTܦD<;2 =8̉I*Y\ODfêb)U~&D&P7sX8veCePym-k͉MvT尌*)+_ gƝ7sOow{8ƿ;lq><#8_,xb_~9WhB^Y%۠ ts37ӠB4e Rm*pV*oٔuK&EyzӠrpXYϗ*҃b]k~w`2w.?) y(*p*[,wCa`ZEu\ E3iO5(ڣyu/+)[d@֟ޝl׾w0{&_&tmr4A8(J]tl\x6tԨҠM8 zT*l &W: !.9hX%RջXˡ(T45I v-m`ܪ,E&RfYi6aa'[;={7τo|u/}=Ƨg|xGqXO/VX[f5:Q;vń,MUC?rMtz!Ov5OjҪ*>  =1|4$V&C6 FbKU"!W|4s\JqݨAzqML:ѹ:N%#PЫܩ AxͧG]rשMR}tu*&6!7݆pVP&97"n- Y 21VPә Z*lY;A6VrM2Dtx9dP Q*I-꬐.P\` *S#r9ԓEŢ5c?>B'G~es(6t(4u-]Mk =;?rY?B`y=4d)SBJV]OR^GRt\̣iaBMy|eZQRj, [ /fmgxhݴ6a"3xO\iO O(lW60xZ&sV d{n1Y}(D{@4LP btrb9d[.{%*3P'd'Aڤ/aUjS7XzhnMX*5W,MRmUFY笙^H'ƇY,TpȆ׹臇+!>{YS//?/<+~Oo_07 ƷF~Ч~_zG %~NK9Oq2FX>d.LNC٬LBv?~X,Щ* ά\:u^nP#!Ɲ,BR/O.wl>7h7M~( DZV 4!ɦZDN@UPW&E"ѩ :*qOD%k**Y-t㖚 * ,pTIqڤR*.t>q>IΩ쀚k/.^R7XBR6ЩWi*&U2M4b,Q8,5@7Mc쓻RŋyTP}B&rTu\!E][+Rݏ GZBSmmC\wh$ekB8,;] d^ٓ@8ȩlV!P@jiTz=|`01x(:Mdэ6H!lV6(Y5ԫOIsS"jHXTP&\nJV#9,B6-WMqk\}6KJl?K.n6ѭmBB*ShUuMF&.tؤj41Z[϶Ƴ~ڄd;q3e-lѬMEZO4Ѭ*^P5u Y0n/ȞL RME?/ùobǧ,M īK@2G>}65?-Ooz>?xՋ-ȑ~|GqGO?g̟k=&z^~}>k2?UᙛRQ eEY︉D{8-͋}ױ@蚐eMGnLE M<[[ Kqyy~E_E}}/___靏,elAWbU:ERdGliea)dE_ TBBPDY ']=~:lR5Шc"d-/eU7nJױ&T&ts1tZxnZxf%-8uyͣNױ%{(WaQP3UDTXmtl !Kv ].W|u4Bɤ|6~B$}/ W4 Ҳ&2Z*(kNwQ]t.ҤOqk0DBUPAN~E[yD]82WJ!BѝʾhT\>͒Q&$_٭Ш7؀BxRdN]B$ /Z0"-t\#Hʄds.)C*$Tp0![a-*Z,kc Gp4w-&\eOlTx1@Sa935~uHX*pD#kRH`eˣy%˼b ՚&G9a1HRAU9WtPw><,g2l jzNV#q=-W E wS7&O@NiB$_Y7Odob=7")uPx!ĉdA{croC&B,~kr6@*VlBRʹ&uݖy|.ф||xGq.//_8 =zt޽|===ݻmm<8ڪg_q$RGTP$+DR/=Nh\RbU) '_tgrTAY\zvd~jʚswzn4y8e0qPUHHB&ɨrE*[XԔIjPN )/j\^XF"mP#9KA'-WA#چ`i"5$ׄT@u:bQj.Ji,VN3;lX E kfR3X1 8ϼC?FB_I7/uM:}Q܎3Ք&vYYI!a]0v:qAȃiUuz<H֩*Z/Dg+h'5-D[w>&tRWahBM R n:jp;_PuO)CY| ٰC2HI1?+,tTmMG~*5~סsXN&l!MtW೎EXo&v:5! g:[7!"a8Ú*<D;nϚ>w\P*|GVH!Ra&4ueB,5!bQ #ObE-Ty~x4>WE[,Ou4Cecf_Lr(MBZ;,{Eѫ' xkggfMgM_y|H?_'x?xǎ8#8OO|~{////C՗w|#_~V_;B?GOtƳUK/ԫlPN{}sl$:om16tx$GVrr>A' 40g3eS+ g~mZ.:qޓ:u3BX"֤uMɚ wAA E[)%%OoMc cAj0AӒIŻnRP=TFY6t*MBO`sK?DTT(z.d-BQUp*'BnXQlCEO*U r Y,*\+NZ,٫RTb]"ETa!XWYjfXѪrb}e]ڠeʆ^'$%*:^N  +'6Xx~q5 q <,M\d wbUL@<.LF!UC'& !JI]$P]tܜ)TC yMԉ .)Ωt )]s6N ZgJSW&ګLMҳ 3\1W,I 8?4B<LIN7m}6K>ۛ9,g4gnBXD%yN i,*VF&'Ѫ"Du6@TW d{nmBYr K~Tv*oi.z0^C8w*ZVʴ:$kʾ(JT*UvΤy}8ڄ EIV&<EB0* s6CNML4qmCBʆPa!l|/MfR ZdiK{G??rQ`.*(Y&&;SAB=mOވv6{^o @-O 7g߾ߠO?GqG|jx{OwZM[{K5i!<}M? lm3K/ E)Y{8xRIECM&Uٔ za>~àʄuϺN7-m(cQF&D&uP.+'{HUjK(at:dMgB-%dI.::1V|olެ)=KN/ymYv5vsιk""#%`@tS4% (WB\*=cK ac`!LB( )I)xmN^\sʧT %}}sݱQGuQG}zZ?'˿W+wZWn?۽3ߠ?ǟ;E p*vMK5єHh^ S7djP5o 1,TT\$s?q5AZi2ghF.nR' W W͒f} ƛvHaV Uӣk1WM鍏 ˛]-& fVPM Y+>^Vx!d3mYRo-¸uۦ+)&vh~x&K ٞw{@&jp(A,;AJR:tMUFw颛,F Xn8K${FY\Qkf8)hJG%*\Q5h}{Brn>56Fx'{}sqP&3xw鬛S6Ỳsŵ/;̮a/ۉW^U,] ױ*M#>]VQ`Q_F+jvP#:t#0ԛrjeSR XeM'ƅl$ =kC?4OM ~QGuQGӋU/믿^}(8J ]rXh JnR LY!;Ȍ6{Buۄ)$AoJ0DS1@vCtn@ QwwꗙVJFU: LX*e.1>^ݡ{/rEl> iXN}DӰP 1wSgHJ׹hJՏ6 tt=5XMim!ku31,Ypf^2O3e#jFZӏ a .if"T*wHKͻ?v8L\+b\6+b=>7U&M M 0,P ceKQ©L6 /Đ!3BJiո]okis,h P.\3d9/c/s5~9 vͽZ_*OnPVHNw-Np+$F&< yVMfԵKͥ󊛾Zzu0TbOov4<Id ԙR͜}0`sPSk2XsvX<'v)X i4;CTQj?;ؚ^w6l]:q@_Tzgg8PZw>t];~:ꨣ4%_%w>]o;3eo\[;On5jy;O2KK;6[k,^1_EݨUZw[)R<,RgNdP7n:W"ƋnNi-X"<@PŴM6dW6bb R5Nvw/Msӹ\Moʦ[R)5&/n0Tߤ0e/#Vk)<d6e'OrH:uM47ne.yC;rKsizIa!;gjNb`% uA}ޅ-3jTuCq~旦L^wJ/dW&o|lM u3X{Sy\5fMNH>At>Zta^]Zw [*FTV5檴ڔ.K2%.nSHdbJnrXsHdbemO,ބE֛r?\2v?\&uMT0h|7(|`֦2JBX[ZRq*TI5x8* v'7+NhJnZ)jUT&"T=9}m:UZZzٽOFȺ~>KgT|kz_ƥIXκ7e.s⢃879H!'nSoʣ8lPQ.&m ¼ @iigfdRPm@ /uTͩ_R裀U?}G=Sz̗P],)ʯcX՟xG7+U):ꨣ:SIk~)?|~_UwggN}_U(wѲm}ٗ}֟Cz?3Z[ȞϣK>Z€͂3IͭZsq/kXv4id)U\jfi~Ck2pӃ+R̾8iXfM6-Vt'L Y栦jJ 6kb'>. Q+uӦAΖHFoQ,p0$ȳPܒyHdG\1Qʥ~6OvsF~ lJq`GB L \os8*;J4$IWW>Sd.DLŝxM@+-rcWB;Sv;?^aޒ{8y ױgŵ)`DvV'7dY+$ii EuMKNOd@5ќ͂߸|s1~W6 ndz0jR5oS']f.n8j T8UJ̀IjDQn*spx3ҙR?捏)঄gݞ 4g .B\<̲c)Gq\M3C&CJOV.T{k^!.3~`cd_*~I\M$z.}aO~}%}(|}E7_8t~6JO<𨣎:ꨣ>Mi?o>_K~W@囏~~ -//|٪_im/@cMiM'F U+/nDV L6ݚdhWN=R&[D^Ndk6T$+`1!ٝm&[(Re, R맸\gHu[e~_Li0EduHfÜTT\|ETMfLd,T1?vRq+` (uwodۖ8) y/aFplj` ,c[Sj.nRR(dʦKZ5V.rhto8thNKuϟ>Al⣚/xSJz.}w??ο]?}YuS3=uQGY)·׼|ӷo7W5?7~7~W|q8|^z^{==V;Һ%2ga#VX͝%-VCMLi0Ԧ.5Py7kݴjEeꅢ!n,R fYK\Pu W)\ڧ0e.L]> H>t^Kƒl(MwZ5[[WgO;;gJ*||G '=|ov_}/ϾOģ:ꨣ:u2<^a[qn7yCZ$MTꖫ-FRmuBy`nq_$-Uc5Wnx[l+:Bd/R&Xҭ6HMXMfLiMlffM/dcBaHdUgRFW!L!k$#~s5Y^hjD0}<@>n_ȦjvHmN" L,v}ft-7 c@ 5GoHx*k'"Xl@ZHly F?wJRJldnK5B 9HCh3`^M]개N]PLF'.mKi #}f_.!69nUIw( $SrEك=;0de}W0Kqp{ԭ:u\{QGuԏG}7|/%kk~/}乏oyOiƘf#yY7x?~P) ?Vg,>Tz/Pc5MT_\>7hJ]/3U[,EpkRni2~knRo PM)A8vZ6@/RkS*QdM5?Q*w*vZ`aB2nOlM~;V Oa1l!fjH&mLza*T-j~ jM f%ƹ8xQ6e(NEj[ Y\UP cfBv!1J f@%쑞Q:wۄe! .n1RSX.Cb  RL9u;S$ًly8QGiP0-us齉XMmZܹ8J53 &uuS镏`ʾ8T0Ԕ; K0eY7C >AWwvqwzl8TJ@x?}7߼w_~g?8|'󨣎:ꨣ>M9BƘZk!~~}}?kῊ^pabkJ=\v+qx0ʦL4쳗MwHSqoLޔKJzSԛ2tvn5-.\JQz98uX_)LnPoRp+C갊`YKz:S|K^i ibv 6Oˁ``g/VOMim5Vs"SV!`J&s(*۝,dkӝ-|V\Mg&we7J]ej/ ٳe_*^NLU[$XzڭפŎ [ӵib@7JuH=jլlLmx7)t pg$'vxfb'z ( R5R<(z[p 1rX9h71Jݥ =FuHga&^MJֈ +WaP)6.T{yM )d26RqRg 18C -wv6{Qo ?7Os>p郇ԯ_~뷦yUfEwg?;>+;·GuQGyyooy{G}FtTlF+U:SNm"5-;oFt>=GM!IӺhA\1WURJ: yS'TE"T !zC#)jaU:] M06+&@vһ-j֝[!m~ ze&ToQ:K>&,MO2@`.n{C3Ygh~w"e-՝nG%P7鹸UZ͝)&9QW ԦnI,YYm0E|T6>Qe`=>o0K5 YY:l^D0dTJKC(K?{y..X{S@lgC)uf NZͣK>v|ɕRyXŗ>-*NVSFh- EW> #g!rIKR6ףM4`ܔ*ddT:hZ=5Ea㢁$XWK/mW6;l>31 6GFo}"3N7Qӑ, M+.޸ 47O\M@IRUH-rd\ T Ek$Pُ6b53Mѥ{ն0,]zAv2cgڬ{;9~>0|tGk{}o͇?gpOw}ٗxO:޽oJ7ٲ͏TzgJ0tG-#c";MIAj*F)=R 2u\aOd+ܤyoiE R4/d-Vޥfn: 6S IX:uJ)g(M4+JKga']v궍A&yhg5xϣpΫTGb<'8N`T+Pv37Ej$!R' -WK_%%Qk#G:' 6+ټ!zhE8n7ˌRް+3%U馦emƥtohCr㗙`J$;'NŪ^RK'a 3ꀶ)Ӱ<ײ:}8o+Ij&y]s!a+Z$<|O=敏2nMr}qa?D)3%VӔسңKZ7:v}0qsӨe 5$6ݾTͦkQ`ԇbuy7]2/4JB<ʏy;ѥ˥7viR";e/C0-D&J)8 v}(w%#ɭ} CZJRHTlKܝn\3JdY)! 3'蝝Qkz|nW>et7߹g.o|QGuQGuԿ^8[k7 )jd0J(QX͙_~9Ua0Rq!+kl2Qәat)MЫ]iC^.3nxT\f P6푦@)YH! eE,,)M酬vN:RTܾd472vw]tV-a鐮b/$FbȦWK/{rI¥שzSl&֪ g!+]Z7wg8VC ,05\5P%:e+aH@sS Y]XTI[/밬|I"F)Tr68OdQ\KД*oN+ TPc3٥؇xִ}ʫD`>^;ݴaJ 6>ZTm4ئ.:C%P<58qQעʥє>l\J\QF\ 5 P*bgFeB.doR*nrIҿK5Pmzs?{XV~3wߕ_3>_GuQGuQ?~1 mSe:YAXr.k*g +sOwo5}(N~37a9M«6Δs? 2UCtJm42#6jrE-)CSBUM/dDv*~풁ꠞ'3٫yJ-ZΔѥT0$4H~HC A_ DZS*)== ,Yәlf H*}Aױ+KqB$ӚmeIݮH&;%t*lspPbϺ)-01yU&r\XewP7nZe-mNdlM>JR xV..O1S7;RR|Xy'`^ul\<B6WF5y6[a3tiy#h; n4Pc5<̒kMW}[kK1B&`ᦩB:uױ|e Fԉ_erUK,,KJ0|]"Ƈ/'h HgJ7b+zbNB5osH)/JiuҮ(hDAe~dbax+.¼7/ {b5쯖~!{iAOsS!pӣԠ6`.㉿L3q>!T~,w?To>{'%x?juQGug^ִz7iD_F6>& UΨtP7qq|{PM6,p&V!IhT\kTJI!&ࡸ%#%>t$۔T۸(E'V6ZӇn2VE219Q*%h걞t,.ET]\ž6Q7T&bZP2_λyezo؃<)(`Ca< T6X~ǙlmT3ذ,؛+6OŽ5&e>PŪt$vW8C47.5TEv)]+~es@`]dy98j0hzO²qb47L ʼn!vwKY+hNCu;D +&rc7}[+ƭtnnVJwK,̣7)pWqx뙟Qs?_clM՜wsgսn?qVͨ&|93H\'rzOI@7flް'HF+vX  ιr)+3vS0l~l$ SJ9*J;/*֦sK5Zɸ>Y$F a.¼qqX$ot?ȟ>'qle&g,/9nZzyㅟ AL?lj,v% 薪lnrzk^]S5!y9=^fo5 f.NAy*C;IBvC}iد\FDܛvnJ}yf/>?<ꨣ:ꨣuN7Ŋ7}77P"6 1f na%jMA)uBc5)LdobJ].WL9#ܴ,ԍ. .].&YV>j.lN1CgT=4Xrfoq)du-;&V*V#]m6kJ E롸T'͠3DJ34,wtfA6iݤ<`-k%廲6=QE֚Rױ.J@dߚW Cqk/cMA+Hgam44"LKEj $\S= d0e4ebUz.NFJ0AdqQ)u%f8dxPn jJE)ߓi!cpe@λc&IA5m5Dv.u+6}qc1ʚRZmބ墛$ZyMŚ_w:v҅(c8ͣͧ>EL fjP+Rz;#Ѻ}فV!Ɇaq^Q7b@y?> ui 6˸1J_n)r#ʦ(M6~_iu?6jwq_M3مlg.mb<58.gLogGuQGug^z^M9nIšjSq7Pc5)}azjZ)r^O̱f,PaV6,}0T Nͣz(Nk%6 .msHRڝ/#!t`[83w鴛3pӇk U#TmJTq*N&7U[̹ih31.rqn2Z0:f.2o-+Yer$*^NP%&.P $MDI} Mn/;pZ`Hص2Hwti.xܢusX4,e& Q)l9wXMgJSj҉WK/GQ)j6.7pAٿ1eHjm:WܧఞdW6S`TLdzLiJ1C&3ܙbuH'>JITSfAH1&2sqAf|8Bi/n~CqP~oRM,7khH$Shfe5HlX6CRJY`Y`04jަp(5/x8x9Tq45]XA*sq Bl]*/cæ3VNXaRFhT6v߿;_*VvTH6U#͓[F:-?^ԃf5ã:ꨣ\ыU/k}Wwvk;nyִMb{Q<0`jp:S$ d/O%NiIVM)Uzw),C8W, (={,I{.{uj: X]ԺUCR`0W6k$ۼQƕ%2WOMaSN|,sqשݦ*G`ohp/)Wޤ DӛYaM[kA=(sno69jj}[*֦Vf0Qѥ@R19}my:ezu܎6 \Ctg$扬PT2z$QŵnUarjoR؜2D2-(YuS1"d;SSUhw[$-Jlޞ)=K:ꨣ:ꨣ~hل~6_tSMA|xBoʹO\\\.Wj0U.ԙ_ΐVJx-rYI9nPd U|X[rE5-d]1dJ*Zu]LM> >;$qbgHvc)r]nAtrośaMwy.զ҉J)&8uQGuQz٪_*u)V3FGT 6o\5u&5pH+IDAT8[RuaTDͣKW_t◧e2 p0$iB &R\ԊeTEAnD 1Lr `Jex #e2~1#n㇍t7Lޔ;ݴNJM5KP:rW;GIe s릻A7Rw((݌nR f(T<*,ÃyJ2J3ޡlnrJ]~}0e}gˉ+ҷ?r5_^>Ϻ:|ra `pe) $L_⅟á3PGMP_KIi>ĨtCj.l3NҠIX̘+>ZfT-YɈ%;ԔŞ7e!#'dKRCӕ. z'lndJPKŹ}K/9 -mcx4b/΢X#RJ&;S{ þަT1r#7mCZlpqQ}q YihM\$Ƴ0K/JtsPW6gatSgʔ©[dS\4VrI\t2oMT +v)ݤzt5?RjU숑JE9ˡ8M񆸁TYO\̌ YP6M˸aΟT|xQGuQ+zqzF$f)= ~ oᠾ<.ÓedR͒?\tCi1 *EִqXs5Z$k2>Kfծs7'{k0%VNr2nx8MboR7ʰ{G_nW|4,;r)iMnh RRH72ͣ͒ 2itE`T\S2ܤP% +BM$FV-poJS&vanMC@ZRMifd4[f|4bM Sq ;k?F/uMd{,/ϩuK-dK% B2v0(79 t V*2"0j> G6aN7o& 5W\r57}0$ݏU&vKsqM0弛c5a;=CqK.dw)G^~n/ŌL+O͇#Cj$ 4,h[:W3JYu)VєTQ)%~Th4 3u }޹yM k@2o#j }J} y< v?\Qlp(ŵN+oUR5`T 3hJޔth>MXv1,dVP?VF[4dŲvPO]~/|q><ꨣ:ꨣ~xQEu/sm>q hb#jfԓe(5r^p'>J@SʛRJ+ݙ Tp2dΑ?'T"y7y&~.?M].Cm ( RXgPlS8̸+@6nlM1PSeX;!ULJh5 ^ƞnJOdeM\7t▍[hMbj+J%2R,1.dŭ\jiӺu>JNu>AOR'pwH|Cc B٦ + .{) -שˌ6۴0?EalLŝAE){,Kq'.m|SF֍lJ-dROOVYQCdPA`~O qe)%BH^nb2&hĬm>f ,]&lMb妥DvДtM[IX.i/~ٔ^= nڦ0/?K$Xi6Lm>KaH՜%7zMaL *[ |:Q=>*N {Sf d(Ěx;tl||߯lnJYm~˫heNFq>Tr5ZԚ37Kլ},e:v7SJ]d[өG˰Twc=S\T?G~v8uQGuq_XQCq{pX+'6U^KZ)oh"+qҵOzݤ. %Zg6.`!vEi$crӲvz:i*nC#uHҼ}ER5)U9Fsf*NjnzuL݃jʾ5-AS,Cqױۦ zhu:~zoHIE \jj"DӰ80t5m"aot\~5 Eʼn:q}bLwK~E|xIX5qde6-3SE7p`5UܥAN]SJ&P+%3?[઴niaM,׊tM{u}ԻǛSt(̫AoMknZ^rG0}L zggwv3z]:·GuQG8S廿i٪^Tz;"F+-6\LnS. _+2=HU驸abD +s̰vIRA#$D'3M Sq7%xnm;SNmMn'q`<)Z(U .o]nd O#mz̨Vgɝ@˹~&ۛr(N GTQfTM{R(xI#8NR~1!5ݚMm|< eHՈ=|~D6M]b0xC%Ό21l56a+x˝)BLCz$)ɐ#*&2E#2Rt)b5שe;,RMeyDVyK՜3BAJT&'6ZzB.2:FٓePYPRQuKՐ`c4IuY|<3Y)6| ,Va@Mnѻ .cx%JMjT7)ubpf-;:vbkz}$+D*u+&r8UsHap u{J9+kVM{dP'~EAz>;2Ucť$F2`M*iRa&@*"3#+dҔ: 5-t0$fR3gZfY- 5|.Cє)23ZJ\.{<3SP7 nRw(PZKi$Qg31d2K5kRUҔZRxٝHz!rW&vV,)P \&Sq2akTq 8YN++­uPoɱY%)F3R{^)ucy+;wgECJKP#39`Bv_iX2hQKsZb)ͭZS&$)T[+sE ,a`!3{4cgJ˗~8uQGI$I)W]񿕿kR={y,(O[Vj&+SSbg+/Jm 2~ 6?Z؛d) b5iJ&+|Ri CS4 ֚~;Si=Y$ᴚ>\V)RuLusHsqi.V#c.ִz:I٭l p[(KgyOERAR+QTB7i \E72xMل%Mq1Wys6"ٵ$q\tSg|6" .+v犑DInN.L6JD&AݜxI:TtuKs] rhX1(bqt'aY$Ǩ:w⢁:ݓSJy!RW[^YmO}D.mBYټvbL9ښՀ%yg k"+qw)I= `C yeӉ1lU:wFn7Y`\Tyz;mj/ {,FKJUI-G:^D`) ɀ-nJ)TJ`sT*ns'gaP Gba`ZvԚ.'i,dǙ^.QJmJ2WɎ6M5{FCԚ^۴2QR]z҉OO2)>٩ a:_u>}kyGuQGc67]Wn_/_Yg{/V_>wܹ>w^{jjbW.ms!3nP٣}q!o5c Tj.@} Y77V6Qn\LWfEڥHrH)M5#KoMCy!Rmu;&M*;$HŦdG8mx;4lSAiz)N,ocw`qP ,GՔ)x*v_|UL=ٕb/cdz;njO\\~i؁nqe*tM))b馗;M:9'K(n0*V?٩ yQsG|>|/ׯ.:ꨣ:GU#ѷgJ7×>xԏ:SSxbghn 05H.`)[<7j' TB6n*A/}{,IgIX^$E,}r=tHdߞWDX43hT*nAUűR>d/zO| RXJ2#SQGuQI-Y߷oK{M_?xQ?~z@%9j.P HPGRʰT9mvPΫ}qNCױ{ V3YljfmN 0]<d[$xrEic[xʦue-/l#V\"0ߤ^ptl1Ċ+kӇ\>"1<2n }Iӹ{Sr5Yb`DQ'R*vH7.aי"M\)MGBLef>o}_[o}σoy}G^թ_{-ŕJ?.URtf}eؑFJblR=&#=}F|ZUJ]m&EALF,e u6͡Cd */`TIXt]6}^8w{ o`3jp(.3 `V -d-[[askXo7w/^t\~!J1C"KaOvpӅ2PT7EN3DtRBx;>0G5oď|w\o|9ꨣ:?JC~W~~ǟ\H>GObdoR: dsřl.nwLyqMZ1u6Ky\ c H#KoV.%^6t,Zfr]niV"p sR W?37e0eTi3R({n1(kiCڔ*Z}q?;ۧ Slv}qsqCN޽ѺGa-.(=>4İBR1!I;|a\4WU?rśRp#EFf*^+57< jaY"O>ϽKŸg]DEwQ>gҷ-|k~[_??yoR'y0,mY],?B6 I868ִm)HECs.#>{i49\來<7.:7 jtӉT/~4EF$ }: ș B슏\%H13:s5xf_W.hZ$/$r7A5}F(7,>eorظq0zi.Qc')*jJ[e0O[Ӈw9dƥfy`+7X2za՜ѥm o6QD6kV.YGp3-szqR&~:ZNk'ay?:nW.$VZz۸ѦDF2lrfuM:¸q"]_QŇcfoKEm&/YP2uF.>Yi!na&'iΔԵM)t&n6 =Z(M2mb(BvWRMz:T$fٓ0|"˨* ?GO?w='7ƓM t5&טZ5 Īkkj(M6~^LJQ*CP76`n}8bS_.Ŋ$i4~ ^JM I!T REeg/.uH$R7ؼAz,VqP 6]UmuKdbДJ 6(fZztepH膚} BH?  o{PT|z~lէkJ튯 Z)٩[9ly$4|P-Vv P7. tBSqN ZSD`R7*6Sbظ($ɵBt HQm*.UqQ!dZbg> 6j{S,%4)<ѥ'l:1*J7zf>{$$~pKJa@TMe&r-` 3;io&2}ٟ_fTC]tmJkfմRhGZCvdbUZu}M7~:vsqg?<ڼ/:v|g8SݤAy5w{SĊ|uP{SP. aq*n3E WNÒ+wx[!W#xev1g&-f <G hs00JNU?-ZM;$v~IZZIُ.kғel&dz$iX<sBl kT:[edkMN,Ϗ1ʸX{+Cm -犽͝)rѦ*m^ +/Ȧ?v8豬,jڦ!V9-}Iys8ןsFDWEWr&o9QGuQGgv+ROQ?r?:r+Dǫ2ltκUS'֦{S:[> PY}qpXV%Id٣TMa<6uhdl`:7")颟 T,dKjP*Zumé_<҅%͵1X⤒5;A[ӠDZftx?IsUД&/B4,i҉- S*^ƥe֕M 动9UkYwoc'XM0a)b^qGl-0+HQ{^,' .{~ .LPJ7!lF؃* `av̵!`J5 ݌ WRV6d̫})EiԽ1;Ti\0ΣNb4D&DdCF)5<$~T0F2 al> M2qq0)uy75ởGuQG/廾mpUc~u>{UuFW!i.Am-!&3Ajnb:vԠC:qK@ZXOòqK|044\StM--_ėئ+>YC*<y$,k#㡸H ^lSx bJ:'TRa= 搴nש&zjY%rWa͝)r m>qhnMOdP C"#`ʡ69D߉IHRK_x[Fs$>!i.CqOb~n.6-%T||H&i?[SZ(01 nJf.2 kjU6l@sĐm jwwx~Iu^fJ6>6mSdVahݮ~R$3<dB jޚWCE8Z0+#&gaLf{V6]r2ld%6_t7e)3qi=5݌fI]CmJ=^)N\lM I2颛CBtaP%bw96$gPaLa=QBiJ\2XnaM"iUN7Cq=Mn'6]&upPcM*́V.Rs+R޼~;;>i͇:y=w^ݎ&wS?_5|?47rQGuQ?rٟePiVJVG~2? /mR>>Y?LS^xNДBx .QʥL8LI#1\g7dzS,Tq]8IB Jtj[zje8WǛa2R?G ҨY84wDV1$)Rb,2uX@cj@!RJ擩P.˥=1RceŃnXIjj,4ҙa9v(]D q.")ޔKfǓI(֩k0ECq8VMG{-mj#][ :69A؀jFSSJUޔ֐Y=?/5=zBtM3Y)-jm0p;F&Ǧ!E~J=y <s0HnFTqe35R a?x, _T*+STAj!Uu&G Σw^.7-B_>}F̓0bB ʣPi,[D_Fb b6Iۜ{ݬnkc;!vCqBG5gԧMOtZ8gxuUxP :*X%U}:sLYP~Tj\]Y_:߭)۵&6XdN!$&Ku~q^\baL߱el#fGzJG@7t3~q-b-8pߤFֿ~-x,oz7^yڗ;]u Б27֔fOlPRqq2󩏎Yњ|8L:^/8|dƔ&Υx8vS2TkMmLћZX 빆v6W&Ѳ 76XbxelÛJ XJAŜy3|< T6>9e̓vHPT\gBG?uI0ݦejPRbSQYf,0e}qCYz"s?`ְgP\'xS`yj0+! A (DWA 2cdWQ̀jCBHEjCn`1H t4K87qiƅ.j-ޔi/RM&Q. T':pVB Eaj ʅL8*L8[5ra&I_ܽ˽8vJȾHP6[$6 NACpF_8" Dm@m,S㨮Sȁj*VwU /c3dwi3ml9n4$&V{<\=f2~؜m T[g.h`zT6jYzZ8+cgPZSj8 x]ŵ6kiP-=쑞ҭO<d-b-n;Q ϗ/mkiM{nB\l&.Ss5Mb5GP]goj rXXilР\maJl)X!yU h}6n/SXe9WSB ͫ'. YޔXXDG6iS#>cv}qؙ;7r HR):`0FOS cqcEGL SZٯ \XmgJp0m4Lybs٬;ah],]&VN ٥j @0_jT%uŭrc!U񆸱yS0Gc9K(coDU#$1#SfBYLd3VBEJz=aB3X,Ō c]Fͦ8;Ija-RTjϵ͕ ՝u;~ CfLl޷A05mL9?Y5 ^Ik X=MM_'j)-4qN3V!ODZ>U CqoZn"xi֕iƱ85ж6[bG<2utl`fNTN"njZqj%&ԩuXZ:␏cK(Z:#qsG{5??u&[lN-_Q4}O\awx/}K+arq3[>Ypv,/n6íUEŴ['ƔX]b>Yq",Sic*v3-|\0w/n[ %Uc3u\qS2ZnJ&3 &c5 u^~d({~('QSpGK@cMl֩Bo9:f' ,$T8&t"+=1ULS\,Bʄ.jW)ŵ笞F[[o!cF DPؠR:g ؙ?V,Jb1& [B`$iA 6Pv&_G NSX54U3qI;~L:/fmm!*c.ϡf^SvTt-sݚP)q(^/a73[傈/SW+ l[)\&aP26ͮXp )O}~B ]1~[lvPku?s?}o3[3ܴJY*{ .76 RPN[bu9yPt( S8\ch X, v.[:guU X)f55Wsqelb-q0E[Ml&d˛icƜNb3q̏:OeM=IjeSPXiҙ0y7eC>KOu QU='.Lucj\,Ew66YZTa,V2DZBxh=?'}j\Ûykf6- +L r,w?5r?8<da fL, 4" KK H3RBjV iP* Xi3`?;Oc3VA <'=;x` ?aיEh惦Y>-ءΥT~KTqds\*C}rZXz>TۘBīoi7yK}q')zUl2I[gPl֔Uh^+h|5o5FT͘E0ҭ-qd`26UH>;r%f,0)LZ2-~Ԙ"I6M}vn,nbn_gstNƖ;秷wEt[Ʀ2"*g,Vkү= l[lIa@5uxoգ/}JtX6);aeݬoL9&$´ qd.Sf>.Yfbkϒ`v6kp@ޚz8tO\:i :RX5j%q7 MobLMeqFRva܏k@nlŝ^& j3h'^1UϘilbG6ؠJl=≜< Nb(EHCZerTE~vf83 %6prϞ@-O'k)NΝ"dg>N},L $6+ϼ뵠52Eʂg$ CE6g@1$ہ TOU"jMiMm-%6#AA@6F r0zT[lFf,>-A1 \ 'AU,?h%r>>ʴewMLYlTUH뒷346ZPactR qbL*x6 4T^fU0d~SxS y' O~*ƖvI_b3q>PP:RPicə9~LEcP?E;4x3G_L!  ؛2uOC4 2T^\>׭+SvqQpsGy#=/#幯O_+}۶b-y̻27m!Wcj5<3VlN^̮6! 3ia0evyS[:KìuITݶx3;ԥ'`j_mlMB) 9ԥuN\\6(^ \:: XNbi/Xm= 1!h:*mibsVQtTR s057%Oj* ZبPSZS8؂Ql[bkLYj(AvkU͎ ^̫y6!+k6.9Sco}]vdN\;`$: BDݺe1# L-ֆ(sZ4U."fd$"TO iBQ_<"%-q !wfz}qx?? nۣuk7v>>i_ׯ??zm[lȏWUQuu+[KD˗/ުwo}ݿ~pLj 6.j<~`تM=4rH=)b2Sh5Xb8VNٜ 5u"|B)LT-| V@g[G6cqO.*Lk6sSrΝ(T:}vz{iG,;cy3B ,?LTUBڍ۱8GUG'.w.]\کK2f71% E0%آ0-SӺ'0RSdhg!ewU$Š Me!*b"Uvkc0#3vVP̙i*P$bPdFv] foP #6X[CEL_W3J` bHȆxΥ0j;?W{NO֛ |ָ5a"@"dϵڣjN9S6)46kdbj> 1 C,l EfAK4> Y,M0\9I6RV}ԩU zѡ/jژ)g&ojcl+LeN3Tʥq|<,cfIlQ il"kwP\gÔ@Z[)H:d,w(0!!f'\ngjks,v#~ŇǸ؏zƷ?^{?+''~䇷~eZ>ik[l[c SWnF=LP31 TOcc %3ڝ0jUmT:3,V (33ۺa]Z " SڬwРL{MO(86S:>66Ɩ;{"T!0֛S]`zSS53"بO*{͙ }v˧a&hl\>tr]P["TPtƝpԆl_baIBd"y% "fBB(t& RݺAA n*Ԇ x8疟sDP~xCRnsó_b?9nl[!*{͍\CܕI.nfMB%<`:{cz TP ?\?se86MΝŁ٭rHj' Ig\0y׏#Z0TCqifsefalmlTB_#eo|4t6S P)j=U *vĥilvZObNb⣖-Į8αp/3LaNbq *,5h堊ޔfm Pnil<>{umݐ^IըP3;a\Ԩ2YLYOb#~/{k؛MՈA!"R*X,L}?U94gWB VaO*-X2CE`&VT&X@ x9/.ӡΧ!T͝GޠjTZQ >>Z=4T@Sb5I; *3G&iM0T&-Ү/RAYк|-؜URxyؚR Xf}8NR;XN]Ԩ$ԸQݷ5fX)s ZU괦mzʅamEh,6UcO|4VDcWnMlZ -A=c)Zrۅ5Ǜ+vǡwQO[TדGt㷷p-[~X\:u FG5~' 3,ՙK2SvP26]\?M 0iIl>N|X; 0ac_meJ.°AΛcf>i㝦S"U'؂ ^ ߪy^PIUojFv!Pęi}v7 }@9Ү9\8\)}x7 )k ]՜ĶYًR(zSP\PksfǣKuBfd"lI)si aTDMn]Jg *E!`ّ1b1٢VQCj, #JLk qd,b,ItVSiSڿa饇oJ8Ώj2ƫKe'آ-{mGX*r}qn֚9XLlƖKÄtVݲ Cv3~TK3UЛ-3U@YQ:Ϻ:[`P\F#ZZlm>Z,JjDZ7'ٰ]!:d&-X'ϵ7sYGl_VOYb7DhNJUV)}D\LbAS֕M @0})˞( {:(XH FV).yf/}}GZf(Ab^4#tm:a~' 2wܻ=߭U֏y63 P52i5`uYMm2v363ӽ[&+8m.6ŋ4U{'lː}k3Hv0qT.1 ƠL\4(EH")p|4¦>k,$e m!U *)k9N3&{cըR0.H 3Dta=eX8vԌthhkͬ9j_"/-;;GUKյW@s4y[T߭`c]g:Zv態GqĪ *73T[)46Թxuۍ-%_$6;>OZ*ySO6UCko~o:vC25BP*ǣ,g*#  W'l(2ޘR썾([T8*QLd@D 1`7 ֈjz֭'.!~zd tTÂHhL hP!@vWYxy8;)&UÀ: Unc0% jtV0 ^\Ck"4wpmd l앎j[zVw(4Gg5M OD(ޖtc͌@i' 'oڹGc2VL=%e%2Ռ=kq;ԷqsG~~p|x߃iT<Ͽ~¶%y-b-qbxK_M,.3]'- ٜMM&WS'>yS% CߤՀ͍)ͰƢ-WtkF-j5U"tX=(S~Ll#|V4qjXxjSwu3vy45٠h5&K|x[&>ҭ}9$6sBLj26ʓ"gXKܘr8L66L],|fA\0q20*l E@ LXbQ jph; l1h" "-RH#0*qBlmtII BhJYؠC@dOS@&*{CUc4#OUAoBkxA<ݔj4s( (8K>.u6fc扏CvZb[x2Ʃ )Vs{O5QTUԥ'81 ;m?m1eej,!.LǡTWԴ\Ujj=թKpDo;=PV[l[<0`jkJgӦ\ͥaM:hz2q~O\3zcYOFUojb+cWD56[.Xܷ5ș1LTVKx'jUC'c#im N 2زP0UF*,45@f.V>@5L 5?il>3Ka5%/U3dO(LVO_,Ya. XѠLmVkb%G S5cNS@>;Lqf>v.g׹ڬ5R5},ӫ|R*3j6`m[UPa1dR,bv=3?IfdX:t Ԏ6ءb21"v`Jlj7"eBUJ8+riRҒFݰ'QS F켭s`(f>r@0rkȆx~9*{1ĥ[潦JgnmEk]bR&n] >Y*JX"vȎV՜fIjV)e6l֔*qX*uT=fbfb*̔ HkP7ec,~&@u9`Sz-F)7mMQi8j85fk]$KlZ}q^,8V3qi@kQRt)^!~wv7yמⓌw??b-b-5ٻ蠼h2"L}q/tT&!ä2F;g.S.:S/ aJ~桸0M}Pl_L!U;~j)\&3애4hf!V_aSS!{mZ8 3-Scqz={SA*09m\gB[)fN9 )jUM4\V%^&ٱEV) R՞ ]R5+jX ٫?0UkA0U[vybzPf3T1HXSsiB%`5Pi ۳E?`< NAuTS=e!,SDD6gP&NJbjg;3+9X ֛ڧjfƂ0'YhCf\ S=mZ`P4'I[Ql/lfm"*K(L=߭qOuy,:{$CW/ORsfv*6*{[4c WA\rVLMҎJ 6;SgaL6D6/w9t鵆TձlM L6rt9Q/+~-ʴ)sI ̛;\^zPyS՝m(n,.V=I:TfbpifQ5SHyw;=ΣZ£{/|~Ɵyv?_?~Y_| [l[lGz /݇ :w$ۍ:A)͐ XTL='CiU-;&ُe&D`880h@nMEqI/el6P574o 6ڭ1*%0>Yj :3d" ʕ:ۺ"vA%֮ӱk`!^ZVijni Z(xKlPdlwH ƛhKKԽX3uҼQjnBkǑqj~(-Ņ9PjC XE(2;;Vjc(q  `ʬDD DÉER4L_QӮ3 bt֑= !6PQ]=zq=NèѲԮyq3L.^ śS6SClUhmkEPޙNS`fؼʡ5eBf:\OW)d6GzC.iM;h0\짺k\35Vlsĕ QaU A~CL@kJb\bRmf @csbš*zN>Vej %nl64ڳU)uZpfgF7Tj Z8qnqR{vQ:q%|Or{so̯Ϗ~O&ȇ?yi_-o'TݟOW?7rxxxppc;{-bwjsM&m>SΧ7il\Zg CcqS[9 řzZa2vSQ9 SgςXԥ4sdL=M1h9 :(T]?F{Gc7qc_X}7u-iTmӪ4 6DZcXVRB!.M]\堝Դ6k⎏of٢g۝K*m)OǝfТ`, w)L\A[qB(@gOM~Bn9H,T3C`#*bb"5$5eab`J"B}`ʎG*7iRW,~'Y EdϠÍ*iA1#[ HD!;MEK6/3˕Rs?"hlqL10kLlk[j%OJlSMyS`,iPS%Uӧ,8qf(zA\Lhe :M?q!/Bl4q(!w0V;TK(g6't>U!u Ge-37묠SbׂU /nǏ.U; =UUM'.Yl54WgLո&k|cXu~ޗ?O1o|܆ _|}җϦOYw3/>_qc?_*Ra/}2[|ui[lZ3ð\.g>I{˱l,"n>vvc3/AS^f> !֓X E/UK *Λ!W 1 LؚbPjԖ#>-=6/cӺ^O5ez{5$6su7%3Xv]L}싛,SS+S4(j]0oC3XA>hMQ.`R. %^I2u.XlZJNS6WٷiwYpG%ۛIlPcH*RF"@bs'oGTQ;*@bJglcfTJmZI&ֆLd1Hšxt* ;1L ejCTbs8t9Lm Pbd-a)4_`6lTp ]JWCT[1٫|\djlXdbp\<<$U*լS9=5ț PmeLc&q$SnN28ua=NmfLl>>ܙ1!LI 6ȧo7p>X"E"NOS8'ҹ,ޔ{ѿ`t7w4{G=?>&?/~ ғk?s}ʷ|?O_/z{ŋW?O7_]f~xx[l[R:<<뮻$~zᇯ_}g3Oׯ//UFilT|Gx,qx0 lK*6FU !j mN%9#D=?ŭc#Jau4Ͼٛt֔fǓ}fz[f(_'$< U(rӱ=߭g.V n}MgfT8YgoM T5_&ҹQ+Xd:+Cnu[$[S,X-\|p^yfalNl *6Ϙ=XDZEo8,6ĊEJbY " '-E0# ءMytFQ(R<~QAvhZZc"WOgoƑ[fA84Yt{RT$vS~&áhl 5IlRojfTU3[[c3d?٠T:alMY@ 0vϘTMęWMy)y+:څҪ[䃶 ӕam &{t;߮OS#a/`v/ -܏4\;ͧTnEH ؙ296jtl^gqdcP44PUQ;m>[ByձZoJcaQ.iFȵnГg1`r?Nrak~zޖTS50t1"ҙ4TLUꘪ՘eBDZMbj/![bBώc2VunRTV"8Il : R;'qw/wyqlcjf@d{d~ F}m NUp;'uX5b6X: @Eٙ6n]k0쐪 K tN乫N3%aQdۡbLpS*@Yt,f.aoSmbU//VaO/f,- B,;>xAf :{CLA;Mv' QEq̦/ΛL٤pyr>+M)ԱU*s`@>mVGYd`¤Z.&&hM]yNc#Sj 5H\͙ѥjXpbdSc5DZ TAKu#kǙt)#GU:ٔmLK Ih>W46R5.D;-sg~ZdB#IlEf>j ]k-ݺyj,oa¿ϿOʷw[.PNn6sËO;\[lŻOVeǂooooƯztK zޣxO'qwX&a\RQ0M\DʴnNbX-'$6:I0{c0LlVL9߭>-T,RTEt*AS_e PGo7,xa,csij2ћYǝf`5 "kilf>j1܍Go7'U qV{ 5sIj0Vؒ,SM]ƛr8N. `peۤj%9h6~P#^^ DUĥK3-7epAѓE՜n8)Xůkr (SÁٌgRA)32@!A}5cbZ:Sb&1e*f(v]!%,m6 jkb/Pd0B3,&1fG13"XG[V% XJyc ؚB jⳋ [Sb5gjORglÐjLF/|6jt c0 Y之Nk'CQ4S,N| Cg´pl$UtDp~ 3uNt8L0w[ql`7eǏ̳Е6Cf3VL̤1HcIWn ءX]c\&0uih$v{4inR5Xz07w4{G=2_Jv/o{rJ7loxË׿ēo.\pmƱ_zOKz}k;u-bw5J)W\۟$_ _ޣNL:SPe*L{̀ S5?0RaŪ:LIlW]s#5&gN\Zw3 qbIj4Ԥ \?h3^'S ײ OR#yVPmڼZPR87c,Y>V_]~L@s9VӘRXWxVi󕱛٬S8[ϿQtPk"beqR(A()xt)e栊ʉ1ȥ3vS΢nMblЌ,I,3"Փ^%`cPb6vSRRfY8XL 2Pd1i7^~cMTrY-׳W1Q"곻[r(B̮y5[6k55Wc'6g&qKz`#Yk-c Cwv"B8r5:Z)4&E3,cZ` ȉʘ:e00![J)ڽ000>qla\pyj,*3*5x̮1[Se)*T`_\&Ae DmmXgvTB˂&6k26}jt纵.6E5(QS^D0k73@p.آϿX6}0ef{'ܛzdu)a4ej&6fxk~?_w[x~g[_' =9AA{?ڽ}koWϽfkv}>?pg9_/?35_[o {'ēgȇ}3v_}k_{}G!⅟?nŷ'zt}݈ry3E8g~zg~TA͍JoT8n~DOc=xdڵ]-sƮ2YgCHydyVoh>3j~TҼ*ټhL4TWՋ3Y59U3 3Uv|nmT0Ү[S69n|]8pۡXlksc.,ġp͹*lM vo c0Aom} \|:CydE1 ٫c0_f32eADK5B3V@@*fbIJ|Z\3`bZ[[VA!쨴Ăh@ k05!%`@L V`(E!hˇ*xB?Cb@L}98Sn*v/>1 訲00P3uU: #-L=a2GUR lCf5č)ͻ~qbzp(BR5iIDimO[ ~.R^vq,v핉aLS-r0Ms JF#n$63iG\gkLeb٨D?sQ zD(Ud?[2]X^. 7w4{Ghnn~3IWػͯ:CNChu?o|4M >Q~x??k>;\܏p~y{Qӟ{'AӯOGIx-b-=_Uƫ7 ?/|{).6Snn7zw?Ν{M}CsLcE "Ha:I%Vk(N'.! !Z.ٴM_X핱j45j`lmP\fXm,8S/Ssk,s`AmlQ7ٯbJAŖIl76Ol(X$CqcZQp8L `_\8V}h3 fGu'.ݷ}ij5VTw>^V.ΛʂCqͫb(X]0Թn޾ejK|a32vQ{8S$O d=#<|i1}cGfobmLXmɮVM%iǡ@i `H)3;3Yܦb |%2ٜ&Vc{dn0%6TbMEM;a8[йGwzSUoEa& cT4JwwLN7G6{V{X핱;a \g-XLT0<{Žw2!e )#w߭5tcxG=r2nu_?OPN~OyS^';G?ļ?_Wz?폾揺0{>x%\Pժ[l.3+˿s'>O<c]~ ;~(Э/}KWgJ2.jtf/Ull>n 7n3SJr59ej4>;y*@ 3vQ.9S[Sn>Nsib%.LUhǏKc[Sx#O]7Cdse*}(c50)B{MBDZUeOSȻQT(gB3`;M2oPXA)BCM }qW]Y⋛i,/nV{jM}vj0E]"~L|[WZ(Bۍ{J!0c@*B@d ,ԖHbLX"dP)K@5?6??}xW{ݏq'^?O_s9x>YuGw)܇|ڧ\?xg1t}$[lȹÿ~\ n}k~oO$a}Kuwx'z }ݝŠxPjSZZ[V9 ~] Jku:;^@UcoU"U3YOmҞ Aoʮ?La@ƖXԪiOe96zܹجjzb&.ySթCZ KìY$)E346~O]BG\ՊVN]8Lg>}LGUȇba<7qy0L'UP{,Ҟ0lO3GA[.AXJ ;r5s5ϞЮrsݦŔ kY?<ԆU_u*n] BŠ+3CչY+@ RbR&s0@faO BbY(1;bD"؍EhMĥfڲG|Mҹt[T;>:uq'NlA`@rfLYϾq~vi8{M/jff>^+(63S5wv'kK[G5jb?=I3u)KO ~}q931X-\:>ˋ;'Kqu.img2|svzK>hwMO~e4Υ׋M`QlEP}XPj F+=dOuۺv *5M_Q،(G5q+f7 bo=ϼ >zx//7~.; pǾ˽Ӗ)?bcp==˿ˏ={>RY6^;o菞_Sw\uMP~7[qppob-xL<0^X,;nx 4_z]aO{ΧϷOFh>;_񩓷[?~,ⷾNϯ8o^|?\wK~~K[6ٳ܏G۲*Ɣ@eJl !;߭ :{jL)Lۦ´L Q}hX4# dkjk0ѹe1eTNF1 0sj)z+c <|͛a,L}q45cqn.<2OS#0baȄL9}QwĥƔf,P0;1rqjL5}L:xv[7nXX^3llFLa Y}qg 67T6 xkU R,\[k7t(1 Ơ'' ԊAZOU4TK/,tyԞjgn֖I.EUNdOx6dJY@)si W]U %!@x'>6U*LMVux(1vG!T?L4&{̀ݤ(NVW.qT h\f 6{Sg>f(.W$w¨rzksfsyh[ 44#kzf.[ObLAlf>v6iؙ,yuwP- zM#J.jS5-jv¨r0 dKt6_ Q+:y#{SjL܏ʖ^*{uqcv|HdYXoO4}}/|'}χϯ'7{ܯ?`eo?Fs+ 8?|,"At?_%c]a-Qȳ7<oy[.^4͍7> #x")g-͟_߾z}+_U7xCx?#@5Q"o6JaS%.x[6kOV)h֨viP:{ æ8OL:7ѠeKfRgiZ b'.%6)@)},Ls?^X=r3_Ũ 2s]i$,XSFͨsvkkŜ%ЈE6 P]e"U /Z=Q`8QshJudςmD,{*ZeA6-ָUc bf|˧omL4L|CÜ&.3(2ui/􇱋:ۺed{4vcLyx=(Jw>imN&& Ca!Ɩyj 8}VξOnnBflgn'?|[޲ >D?|?G^GRGk_Eׯl~7o~玿M˗/k<w]uO!s0T&Gvuif6s [K"#&y3hyWAKs[b&:'qO @u`Jd^Vq|T|4muS \3u梞^:e jL#&t1bFBŞfA6(oO4kQe hAǩ Nn8J26X>mF&Ri*xO-Δ@u/U45 8y:sN+:.yˮ5%+?gz,SgbWZڱVO&0ez&X*5h5GŢֆB`ZQ Ξ1*-BG$.1UCLWŢ+5{۳J: |{oTmb^-5SltpWĉELQL{0j)IjTilΒxM)LU3TM-&>i$ 1YڬA:ڧ;ad3Nl^;a8&[j5V|OX;K. ZLiMT͐= tk8zuC{֔"8y7uBcsgskalU,lS&6_FSV@|[BkzGu]<ͥqL{ѣ/o{_zs <~/50z;~^Qx+ci^c>苾hw?L?[>s|~ϮSpSկ~N|~ﳟ;s͍xsιo:l?M|PۿG+_ʗ%ׯ> ^W~'|o'^S{>ӿN?x{xp/TvN]4“ mӥ\&Z0L#X\peSc5 0!wT3.iSaϼ0fG(WIj-x5tZPU?TJIйWƮ1E9^nRh\lm\TS9ԹphEp:$,JN*ilZEpM}xexSi#.)WxPU DowZ`AU M\*D6}/;98xbS_il  <s.[zyPCu=3|کyPJLM"Qûț Yڒ4G c٫?G m6(F4wi˭?e9>{@ Å|c0R5(!F0\?}3ǥ=C/|t~h򒗿>c_}xɷkyK^r}],7o/˾﻾t܇O0g\x3#wܑRs ӞB֗o?/8Ç!".\ #lRpAg*{o!>N)S1Upq,TeZG(kT)9U3ܦ>60ؘB,t4L9ۦKPrd)59n3]Tb7[ufCh(cvmXKܹXlraObvE) FxɀI 3uMa446Gc':*ZM1YD4y=nmNR{;c[N},КbORc^ϡ"P6v6T[[kg0`Ţ?͔jiM;@;V"DqN"`T!,U'*`#%"bCСGʔ-a!}fv& E-Tybs0-kc~GB9h`ʕY"5v]&CqǮV@Xq(\JդbՀ}q3[e?u ޿\/L/^MO v&k6oEG\U z)ZϏn3e'PmdCU;ޖ<׻rmtElA5ذKLLbb4|F&cb3B,(*ȅNmfV{\s pzϾg=3{z# LB!U:tWMYU \5VUqVD0ۓf-w@ iBUwQp" $I}W̼!`ʶ3EVm94u*,7UߴrbdZ5~[ {gZ-IO~cmGo87G'*}3xݟe717nGk6}wg&?'Ŵi JUˊ= H-&Qg>$[hl',)F,F2SN 72*AZБ#z˳EmsӖ#o3ϖ\vݡiw[)LZ5י풫"̟t62eukb[! X(#o~H$K{ڻ&u 0m8$YiYHM;'B O2چYdO2Ǘ9c ]퍌(Xc#PW|1 zL'GƕPXtF:#R=NzS {̈,QJўNddl4 HzbU$]6K@kEY b $#01.e#դi(]9a.i!X 2J61_WCX '"wgpX?>7qr|[NCqе>Ҽ?<7?R]4guV$1'FFtA0$M I2Mg5|QuNMD \9cr2[nB'!l,NR\Qj:r[-rC97S4Fơ*R"ƹ2kV`D0~:2)L/Uh`O%U}btY*VjJ,jA9Pp.5l Z::Ů!6@%XIy+I͔u¢+2b97)V D" q0WI$ɬs.K7 b! q(8(% I ARA XMВ@h2(: %YhH A "RIRuzE,e,ONK)6IO"KVM"Ȭl( #v%fYi,eSՓ$?gb#RFV_l pfDD= k\lmCRO2LgLIL32&RH.(.Hr6qPP͔ۙI,:ڇ$sE"̓ZF [g`Ŕ+i’+mܔl%W6A/46)N۶Pqml"l#ldEuTZJБ\ K2*)*$%BөyH b@zOb 9lf]L=fQ0]4mRIB+ &ȔDi䪵wfTG_Ղ?Н&%nr}O{xܓ'v^|w:viiiiii0l >䣏x/ ә{ƛ1ױukk㦮|AyǼz-o:x?;}΅߸߿;ƙ -BfQ7KFF:lTGTa+L{QiW|A,*할 @+#"e-(e_%CWa1pšĢ f䊑o2EKHkCH*$$IT!33j1J`@$j-]Ѫ8 9 ^n_B2$&T-깲.Th J.\ms5%eU4&*)8*&CKrc9T@&Z8HflN㌭M(TlN,z)A9ܥI*m9 F Il EG{%hK5$< &kg: ¾v>ITz[wW>?=OCq\|ƖV8ݴ{;WTo_|.cCֶm۶$Ɯ{3@|}w߾Ë#nucXӝ%"Ώ{C~Ε76Vg}rR qI)ze VK`N62mL[nLsiLe&j<[FFդĢNj$+v5am4(x6SORWDF#jCQ#_td'VEU5Ȟ4-pc5Q򳶖L7wF}"0h}BSDHz:l"XB b]M6K 0\v%hII`TUF;{B-THu.I#IY(L=㬊iڶ] 7vC0t&%X2F4JF֨AB'2tdUdK ,l>ad0 PTb(B 'jzF Ed0ۖ f,JO@UG(' +`t޸q,Uuϕ|#Φ**v5,%1 mgsMcܟg+*Q0 =k!BZq”7b1 I*\.| XFn:9Mz-Π-w{m I$´!E^ Oo\Yr,i0"eW%Ǝ ES8 ^ H9 Ne_J$sGGW :گeglsHw8S.[ `2bS5FAmR3E.׺.ge %(8^>t=[Sz}}iIҞ[_y٧/g~'n !.w.hgYg^7u^7/7.C8l^/7MF$>eyg~Ү]뺈?z)scv__x=t޾p+$z]_6sK^{,[~+k#{BXd,k6=n5頁);'=-s䝟g/|O z}_ћ8|͛r_y;=xrN"&[~w}>y?~gHW߼[{yG~wG~d_;~C}wɗBꪫ,{W+׾]tSw~=)g|O֮KztEI+d,UnwVj`jbKQpW!Xi?[ND8hKDW&E zB}vQy nڶSfuL3A`< 6u0M5q-ծ Ԗ 3$%W.QQQ$cH%Y1"cd<2fG6e-G.7UUv{tlh7\Ff^-hu$4*:W* }1W9x%e-<9rbo/ nxxd[ ao=04g_g|ghB@fף^Q7]s:jt_yq^Wc;g{aܜHW~Ox`9g=pJSzݧ- /\q%<䍗l~>=Qx~qp̳o[sw?Ņ}79`қ֏h$L`s.Bձ!e #SY8 r3XwsB0 HR@D OLW FHwE}ve0ӨDD`HF!q*$$" T iU$a %㘛c   HPvhL]㬊qdtIVKA0&Dm1)4Ŷ$BFTΖ3S!FEHp&tNn@sT=퍌0kbe.\m('tڨ`̢GeM(Asf`J-&bt:oҦrmFӶ!)zbЖBH8pEWl3𩕜" :$sqʶu0 XtˮW $p mJ{#BZlo,,J6a=G`LSnv9,3|3y%,?ꎇquRHW|C_~3m|GGu$pė|?]Zۼyg߂ߟO=w_z?&͈oz#+L7=y6^3y_%O:A8g7Ggcvʓ^\?L׼w𨇞rS }Ku6kҽO}Vpїx; \'|v;Nws_F%x~;{:?|5A-8y|cSN~m_>{;sχ۾yw]tx^::>Q=_}~g^ ~]9wxnN7y}.˩CqOބoEG}?qhN8cg \x7su)>ػʍ8hΫ4_?>'jpYO{tcy !\Xk-B?{?|?Ǟ?ܿ{Ʃw?wNPUO盲zڽyN{=O}{p3^GVW_}[~qqqAk:묍՘X4Aq$;j:o]"T^"LsE=mce ׇ#]'m{奧Χ/{tq%gt?hn.7??ȣ6_{}ٻw\2]/{K׿e~'w%|!xџ~d>Qॏ>.޺۟Ϯȋ|#^C2Nx;>]8^؟< /]zozږ˃gc1|[/ [O}[ {~owr+`ݻ^˟k?}57}'@;_C_y%?zW/~ qoݣ\uw2s'uwڵwa+g,..?Ӛknhco#adF-j!1s-H"M'Ff {5A%Q0$՘VSUh_i$7(Db,@JF):#L,A+2vTTHդx c8KĹ 4b`ZDmȤPQ$f)bG @ϩ@X l 2=hΡYuC# &Bdh}.H,Z)vWڤ21}Ŭu`J*:$EbaSuIrL׸A]ڵImN-'yq pDm$pgzbYiUߣߝFJMG6+|TY7ӾWW`UQ8 PE]Q|t*1f󛡷V妬g)#S՘zd־m7UJvY;IEb&5 F4cbmݙN2NF_(A3y[0]ֈnU9 S'?+`]sC!_}ss^ty>=Oի?/|;=wR/7>LÞ;Zc~9?gn'A[CEO8eN~9/?G-}җjyљg>56zrru-kㆾ)?FKF=u{{S{Ao%R욧fgguڪI IjLV-:EGVH>I#90\;L iڶYk*KL(nM E"QHA]I*J⋅-o\FJm9*#22dg6+mnh`S5ZnK!X +j4[jɕ}@#iLb:Fzswv \YLu_j:_H`f5.gcLq 0mNb"[V\>j8`d߶}RD=l >GNr]t蒬`&VHĤK3eKP5I0Ď4z@}MEb֘ͶP$6($06%,@$S:JVd`%0&:T7 ŻAj6j T>IAY `ePL9BI21nF E3_Nr.<6MBbtQmkeJ9%%E' ˺XhLV\N͌m a=\Vp]d-RSn`"t)nF3uIM6LihrT* "#c)Bx+ud=0U4Y_YR$S- DGmgŕ9AX+hN1KjlKӶ6J[̯&!Mg-z; h )lXdc8 lwzm ᫯W{S'>7=EX;X3^ޖO>_7_gn Lyscv_15;WrNd"Y{ziqaez"7r}*C*%~yצ?=k͏wXyG?)^;kw|9SN9tR.^l^LWf;d9Wr!8I{R}o;w/P;}'hw?Լ~& G_z]k\:m1\?yǯw?]U=v"!rmx?ÛG[_~@?ذa:]Pp&|RQɪ&YP7oJ+Vfwݓn$2 d$tI-T$+TT \=bos/4 M7ZcV$7JROr{";tx6iLH_4Z&f-IfcЛ#hLI 2(AH.UUB`kL`Ppߴ _t$lHQ'MCW0,:]vO̢RalRG6`r2l;[6MmmԉE4I$lғjc7Y $1)$)`VX D 1DR,1Q`dQ#%I}*t)!ERB:&RH4 Rd $%Db٦(J m*Z' S+uH}Iգ)"jx %9rS9S&e2ڤeIU\ekL*{ƕ*&i@$^m(6J2Z :1CW4#\hkߦ`7u1ϛ0@!#iQ0A 8[֛;Rƞv Y=o3eZ3vڶmT)S`zOna^$KՂᬭ{aϴq|H$%k] jC8|9M8D^r#HwJ}>u7:ny[.ޛO3~+~ϼY bhV}oz^O@q;ûq9؎\Ԉi箯ssAԓ{}3dq}u۫V i5}v7s#Uk ۟߰a~zk_t __2ذiǽ _^Ņ }iW?"V "sU=߼pnqOIVtkvWlnA}>̮*q srfsxղZ܆jB A}_>qC7=yUK 6n(iu?/uѿ3}{_u_ٷ75ۮS ۮsH5'~/[O&6R.T87XBju09pD,ZN:\Y!c [te[*hAmrLi nr&a0uԎ䎦76$-j7'ճmΜXqEԖ=<&`dZl+`eLmR=2iA,d*rMֻvOS`wNzYETwl[iH.rFET0uϸ1. qMomV-U!c"zC9ڲʴ/UPfZՑ<$r\ N YLc `VuJ%`Q5)2LdQb1# #Ȃ87Q``T,TmAЪg))LlN#,tDvR}6!ݡD $E$TgJhrɝ˕:j K`,ű]̢*Z\T(8S`\Rh2bkۜT9cr 1v$*' *$w7TȘ PG{A}.>UN1{6U?x>׹y^_'.0*:G~p9(Zi;>XRbh9/o7g?'}^{U ?羹{;D __p$2x??73g4Ï9⃟E fNiWUr4o^y#XI@13cv\-R)O|ίqɹ_(*] 1Ч?w.0[e_~: sqigC]p_ߣ&8!0d aOӶIfk\Yo('.Iw5#HX *a1LF:8!fJO"1KJ$1Y I!Hc,eT id!WzcW $ K XH#A @XsFjмz_ >^|}h`O~oovc_ ɯ:?=nG'?:]X=G~㏾ |>'[?O]'N%|[NG?ݨxzKyc=~;~<37 85/gq!\dYf}[\rI]G}'x 'xG=KČk'o*:)BBnQ2t|8" InN \R}DW )ag̪q٢6--:m L ذMk]&v7A]Hfr[` V.5&Orq?S[;*Ti!cHrS53&$)F޶a0U*4QW*&Q Mg-7d慌L]TuMim3/Pw]TMT-KҞY,ҡ!h6`b7gk]R׌rHF$\l:^ 9v[ RDbAG1[q423AIRM},@" fIצaГDJ`$鉕E2ƉDX)F-%+bG\@,#F Qil^HlKMˮ0 I:u)#(AmRsD zeCZ] @uR9d'ơ+|R. ' rORt먰ԖItH#o6wF|5ϕMR1N,`"|Y38Ŷ,d$BF΢يi̢ L_3$}mۤϬmF06&j)XɨxdyS1jRHRpB.m8j&e_V*VRq\IȔvĭep'_5||n~q{9'=iX]ƒ9/>/zo(Weg'n0??\so>я>_6~4 +/?ϺOZ ^O=-r擯 _ཇ7?x/<~ڧBJoNs[t.N8h3,?"~Sz~W~ Ƹx!s9W\8tők&}_+ ͪ9X`^ r5;<[4mTKm,2Qa%Uns91i}y8Euͤm2=U4SE3tEZ{PwP)ࡷ9zS\<&>:36R4S4M6 #Ԓ{ۨI.Uto[D{Td Ys`fGlp^ .+#FjўaNϙr9v $9V׷m+JCƨ]T0"̈ %0Ŷ*T㦅 @`dR"D=bNzgJ"%H FRYz XIX6 }b @&R1$#1lj(Mf%bFBn15i=1wؑMhЖ$q0MddBnלD)ۺsCj_A"Km)mX*dhL9r#'TȺܵfeV"IVŹrOٴma–j_bqx*SړF($lYwoSsͤO *Za$X{]&{).Bqʉ1m N߸eW :B{!X8JPOvT8T0WmTʶdi \jfm}Tɑ*jPp6J͹n`5"ك3xcc͉pէ1>ػm x[/ }Ի{ mg5O]_\k#M]ĵΜ7/n=⠵UguQSKD86Tc. ˮdM&Gʤ1 ]QGY,eϸR@rW۹|0$=ZF6qav,tșӶ͆"3YD]C.,5 j:T!IQ_4HfNR`F`"M0SO oKKps΄gȈs("/'p6wW`aK]fGx@qq”mU`4* $H@S+j3ͳldH.lfC+mI] )$9s]-Z:zsU7dzJMd8 ̪Q&FAFs`dA#Ϛ\@ѹdYXI"0 $"R &2 Ia;[NdǗV2E,Nm('.9;02$Co&jlU̩;.h$bDRrs#9IM58\:2` )M* CJOrc9*D2hˑ m%4eAؘ@L{%mDdb B,"S>D;f|Q[L]M*䔔ꨍ MG$Tl!)60J&JȈH(htT{M.\r1%MxSLDʩ%5m)Ӣ\vf5Km+j5j<'9vh Z 22*ȊDQaaϴ?h/:VF-Sdl '*\RYxCW$žqmTy7% (BG1 It~Ɛ¤1t jsXI$NV)X  "c$jg+T $@#(A }4#2(}RZwQ%:2>tio]Rd5bu-e*n3 `%QA"6j$16QG\1pe`rENHrun[/B9H(xʶ._dh8ĂrKa!D8ciJ:IEd*&="cBW쩛ہ0fZ~DB1e۾q)d Ӕi in 1u$6iӔ2 `\UL+=%&5 6Im1ہYc?*KndtIIL$e0>*-F $VxIoxקOnAQm_p ܾq{<0֏ύč?P7\hX{oZ7?>lcoF_;'Y' G/9; "1lQ1Gfώ ShO,j 0 >egEhbԘ6W#$D TJ)A0gR!8w:e1j̒+]RmԋmeetQ`#a݁AkDPwڤ:w m.TD &=TuԒV|)'!02'9_NUTsmMuC.{H8U4$$&Җ!ɕGmԙT̻,`4]biqau0mXX4Ҍmcz5JQBf=g@z#%'A rɗc[cGAFMnXJ f% #0`N ]P(qdQdQ$`)Ts((&ӻςƴ3*Uȧ~l϶F&O zv7ȸʬFҔmm4N-g S 42l+Oɹ>&\vŕZ rpKrH= ko7Tw$gl7nڴ 'ud&w!N6Ҏ]1rEH2WQQ7@I-RW6Q'"W4#oJ;n(]Mw6Q/F`\+ g˺g\ևf_[$RkBHS]j+ba0mr~LQUwEGqD3d }뤖j gfjL|$W=?s%@uc5p1u>c\?񹑸I,e>rw_׻+OMݠ%+++`Νk[qڪ:k7wF9-(&5rlQ+LK"iS5WadH_2ע`f1W(EUiFù^j;˾vڴEWG2PHXP8EUaBrI }R:e_4IF!8OHogm$E9!#0*l۲}6 EA6$@AjzCo9n.$LD8SJ&j<H 8wxFB1m6D86l*N!I0;'z:h#S$ d jraRVB,Lm0>ɮqiʴpҠ٠12)sq,s RR X)mE`y5"0RKd0YDG#DbBDVM")]}AA,Ŏ00:tIQ# YKJlx42 `0]30_>V:3/oZj02J+c"$z,Si_iԘL7QQ4@ .82IjL7\˾ Ш8m[-ӴmXN wHvTИ6TiZn )iLY2:]4=ۺXh)*]R.ŶI0Co1zΞL"j.3 @ |g:g2{7Ni$u0Wԅ(xK5+/c$29kn_6܀sn4YjPE{XR<ݧ}{zyK߷?SOs~GڟZƍ/?kݺu7Mf>8rwvRʋ.x'nqK\aU7ttT(UXtͤP` $ۊ-8I֎],d<7>$e:rp.k> Peo 0oWzG3OJ[r5zʸI#ouz & |,\mLMR.\M6Ie@r6 ``#2 r[![_1P%h| A]+pcgVRPHo, -)]|}~?oy_ا(~j0:ֱuT\yx<}:vn#v`vvvvv.-\:>Oe=u&z꩏zԣz}{ ׇb7}~g#7NcmR`:w2n٣?nI@IiL#u8q|9vIU*hrP#9rOoX-ʶ1}v6iu_4]j͆ΤTa-Lbʴ;n_;-S& xW4kڝM X˔Gt.Y d׸d Mz:O:!aԡK3^JoU{ZF̢B[)b*TM]b v bK"an.ɞ$VRɔR[!RG:깢"L,fm)мNj Z,ڨB4tEj1-2\š11=ԟ$&fHLer[)8Lf zN>CoE?ձu_|n?څė充[>H?=%O4-gx<-O8bUppG?=qkcX:s96Rφ {.y'>OғOq>Y_ffBRF}Ag:gm3XbX޺"XdKL*jL9"ML3>QOMW@T߶ y]Hfu_B[IT3 c\ThglQ~WEHrm6,d]fb2v0 mNao?ZِIQar;zc E0l%L9Kʔ:L R&99e4$Q\\5tE϶dD:|¦bf!ɎaW)H`Hئ0m1}DR:D"1+%='F!dÔF =I@CM@ddj(WI$}-mKbʇ힫]V|!ʘ^D]C_[ZtUfP+r`O&q0JdvH\Q{G'$`6TpJ)Ӧxf6 f)i4TdrQ:hW䀇+:ioۨ `ʸ̹9Փ@clQ"HF Dt߸~Bbu}$TsqF/uOIco7wF9qm~422QHuD"tTXE8vIƴ**E϶!lÓ'}މnIׇ79p1۶ݱu?8#]O~Wxۯ-ױuc wS{_|'q!,&dťim$6:D&Yj9V4hq0` b!Ȇr UbLeuαX;mG /'!Ŷ"DɔҲH!BTQBө$c Q JP8%I!1G*6Q/22ZiQ 2Iv{-U^%RoG{)NT&u0ӶYl+q6M M8:ϘC5KAy`*dt$#< dX4,z8q0a(sE-_5rQ@/1t$7=kNIiAFQ`)gL[(0Āj` 1tl`@Od$0$J0Yjrq zq*MS]\1g.tȩz Pm3nqmH*7[p/5I 6깢2)A׽A EeB˴ʱ+aFʗbNHfN sg]Shz9Bld"+/@]jRHZPWrgǮpIrbգX&U#s= `phg8_N@=tvNzKmU^#)AmRr"Nl: `w Үk\uneՎ p5Y:V#EJ[Ͼ>'x* ̭koC0Ys97.ڼyW_}W|u@vCu< {Y ױu wO?K?[V]zc8wpgg" >&5zʩ̐{B X^:;¿m%r/nKڤryDeeԂcǺl;U4#W08 9X̘6fQhT8,u*-UX0]4=G.Ud%n8)Pk\"\r%d/'yhVMPxmT߸)k%'TC~r8{bT;ڏ]Q(*glzTWrQ_n:][ @JS䦲RU7S%jt*fl'Sh`HQS2QWϞJ`V%舕}dY ܬ]l7b- fI0F,bT*dPu ,I zH R-E5~ZG5Q@F9IDAT5%MZaI$.)#sӦjo0Mizh$QpMG]~"cV8gR]d0݁DjW\嗫 ٢mԎdK1|RV]"[%kfc9.c[vE߸\lqmXLtRЮ-R{tͤׄ\%- lv¬mrߣB ۪]殗]1Ɠ\jBEfQS8 &(*,OA"eOz`]]7WlZioU,dMm=Jn`3--n'xSO=u6w4?W>2;5sȱ祓cX:~QPUՖ-[>q}[^uUkXupƛ㬳h_b%HQ[J$Or YBHB)jL ZztY*ۊYl('m cXZ' (ع{'䴀eWF8vW'Y s]QIbpMk#W'UOtX;*08pEbL NUw}ROqڴ P' Dl!RGbadj^/:'xs97P1GkQx$I ;Mo`MDϘ5IIc-$"j=IzA`VMIZLI~&+Ed#B]"`SF=Ay=pWjA mg瓜xs{j RqJPB`$ƥbJqj"vUh)d$b1 mMcI6I5QOqIZ"?O020Xc- ڨ;]^jK"TV\zMxM/Ͳ@qS9ٶg[-ȓ86jUt :Vi$coGs$EW%9sڤr$q0VYU/4JT4ecν,8]4 A.)a0I uggU۲!O!w7;~pÌyYwv ^o_>ox_z#v2X:ˌ͛7]/رfY~D=pE$"=WF&!8 }A,A=㈅4c 1D3' %ݓ.lFӎIR&$R6Co'hRs@!c$2䠋_X?I0o3o7WWfr`f|R11.1jegG{b$\rb[ 2l,Fƾvp7mB]sJ*}ThROH5ntT`iʴ̢I*ƪ\9QH#o +$#SC'MG\k iӽw\?3I XH !vT)d0uF02d%Db;2vT*P0Oj͂T*-qBO,J^r|9$7to[ ۨwRgہ/ڤڤM;SF@rUmRF,CoM~ٗ#o37:EsB52j )ǓlRAhA=oZ)x02[qێӶ $RřmR X#)$OܖRp$# =]mR`v6< F\G r՚ҜyǸRl6Ag+_F4z*L|w7"ILF٢V(e@GBĢk\_,c= -jCQR [!aG阵[{s>ѶµK.s=wxI'u|Emݺzugv턓}}9+cX:~!c<xp ܀j8쳳W ۨ$s`V{jr-}=kH@>씨h`MlQǴJNNMǸ&j@ I2DhdXL._Ɏm8I-j)X!CdF4[>W*YI E&G6ReWqp$Q}0L파iŴn{46GeY$K$J̗\ 1:j;_LBHC_ INŜQcdqW]0>j˖10i;Qك%Q2zJ5I$dPH,b)C_Y\ Q`!Y;h6꫞~%RI "jA}sŤX(x0[#RQ5QOI mTJPIHӬm<@D8f슎Y,u$W\UYlO_1x@uWzb׾TȘ_ gm=m/29m܌mFV*@"]QYPjĂflfzڴI ?bi3I86jFM gzhr`2T02f)M׸RúB,6U I L] KV\Xt6mwbBF+Xr}to\ y >qpw 7\.//-[p#{o8a;$6w|X:^w#YĻv:VuYu0"LJZPu6D3#m3g|{˞fz^r%\LgkX:~ q衇n۶m4}b/wqw.Ek'oq Ų+rP(x) b3Зu S$ $me%'\l:`F:($$*C׮PA`G%u||I)M[]vWA}PL^tVrڴMRp6JqĨrjld2n('E]jm8}hzѕ P]Mg-(Ujડ+\QW*w&ZhڨJIL]' pff>@M8Rr>Q眆~ۤEt$Q$y;nJ>MWR7M3EQ`=G&ẑ~kzJ\=cUG=zlJ$?{o[zmlɅrAd1=uƢ!XAc.o U Xf&lqaǙ sĩivÝS"a&̄Bupn-TX8;3(cBJFNGr \EFq`ab+Fu!:]2syw?v۬A։ @U D gʼnl4}LtqXTF{_?2LdJ:qit|TDzRxdt/ڶUJ]rҥK7/o~+__[]o?җ/}~N;G>~~+_zֳg>FDՇ/yDclū_jx@y>\GB}2 m9Nh RθajT*\QP@V EFBWWgKI, )#W/Lǂ}2 ΄Ä3 ՑC{v*W14w~pӨ̝*̄> @@XȷGc+eݳQ PlT^ M̊ѭ|‰XT ʿUsy0Yw:n['[t W9с \*,0_qC&2L| "b}2?lu^K!.;h0KiTiz1i*H,Xd*i BZuHUb$b!wXA=^-w܍gP:Nǹ3H`(*TP@V':5an}W cVN% d"٦GQ-٩*YԪgTX4X !cQ'[dl0k(J doP:RTDطJ*ب'e/0rNLBf6*DHJ'eCJd1U*|c։aڪȀ7(Y-ìPNAetJ32J!wb@']ET.k,'!!A&Zvk5):m ;_S@Nt>U7QBm7^|q;N;}S?Sx;nΟ?_xR:?􄏁Υo.ügGvcƂM@Y9X g}.%*J{HU$~3*s54\!ٴ*ƬǬۦ1-5GQ-2̑PB׻XAs"0XN1eߩQ=2~ŕܡ?B&HETA(I| X$BJH"U)$<dUPAVB"!g>*ZRĬ&&,Žp28ӱiR@}2'c ZM8f 2%tJ^C2{ZsJYJJuB^:; TV%@CЩ){b3o:=!D 8 c-R#>k%i:24{#W*In @c֙KSBQL0Ƭ(6<3A̪Q]Y!ns,GdL 4Pk f_S`[jUm4nXL3}RU!BQShle BIFe}xחÃތguqXQBR q,U ͹SC!JTe*RHp̻B\O{35PTJK:ls\p:8 @)Ž͵^ւX&:=U'*Y̭JJ3(B RDp:6RT};mz!I2&( E%‰ p *EB[v +Ȫ-sÐAQPd:7łehg(u OR$dDXBa 1BQh".pk}2t}SmhCd$t g\lS4#%(svzR?S#3|#qq.\3gάV=V w|B*/{+-Ϲ ƛN;ѬWx;g~g7E/o//{Sr}vzZy뮻dJd f2PձD%-CAQiLZc0]GY2ϪU\iUD @ s;*t8h>纔UhYՙ; R #ѓP B wM&\!.7P4 qLtϸǢY30Z}E%VYH6qώ(sbYmUV! fEʪhUhvTSiHtl񬨁d:&^69 E*SVG" U9w~ s>ڱ(DY3@NGٱ1w6#?Em{̄oTR@3%mPP֙pS}={}I ox _?)K)]r%,[ヌnv=9y ^o}v;//6?ӫ9K_ǟÿ ?utttxx(tM_q7^N;~+^qS… w}7%/6q'u{RʍW=ܳZBoO~e/{ٍWh>_CQDr (feյR!WY*7ɶ*|&9i-w4>44gT A !JwmR ȵ !WTvb,V^}~ٗxƲ/}VE6mpШK*yg&6U`1/$;D{VHR@B'\$φ xH0umTbөαK-DB>/SPf&Ys~q\kud&nsc㐵b Y3˞S>OZc9n]Eg &:,6= 9$>}+,*V n޹fo|tP~_E_E}XU>| ;}+rN;Gŧ|ʧ|g}K^=y:w*e,@`ߍNB;}ep-M%)2A٪,&sm238ר45Uqm*ezzK^u(%<0dĎR%'c@V>q[6[.Mfx8l,RN%rv&l)U* ZnHh]Ҟd,f cޥ~ N:Qihl7qkhjô3dRe$NTG2C]'!<bCzk>ln=pf“k41v;1aUQi,7( (kmv:dRe\XRIfύpվyFIfUQ(_`9N=rp(FĽ~ ^೯fYVz1I>rF~>N;N7Vu]nKUwhcQ8,שϚJF0@X*JR +XY'Iv6$Z%4P5ʚ$ )HIIPT/U#U% % UV!t탻M$~zi1A(h?cnG:9PƢ8g2Y!!VN5UIx e:v[ c`sbBORTT9T0d}df~3d9ZU,stl|QD0DRL:-ȚQU⳪B*Wс}2 5|PJW1Xvd\ * _Ttul$B00nG YNe5pi-U(+*UuW TJ|Й9JPҾ٪o8ͱ.Fq>3jf7RTnXXF'eef NC44TitBLϷVGNSbOʖf'DQqetU ݚ7; dD du*DXldd޶gMUsnLLBjyműO@P"U+S:$mTv* Đ5/"*>!RT3LU s;:̌i@JN%2J⿋U,(eP.v\a,<Ng 4QCY_b>)`zbfO^kzӟ?C_uڷi^*kKz?>Y>s77pvivnwyB.HDGCשd0#sݶQ9NtUS&L9ѩOfI& *1+޳g]FrB*En(V )EBJ!D Swbv~RD 8mƬ f-i/J1a2DMNcs["QQ^VG)̄cVPطf~uݕc==eXATu]r?Yk Sӱ1lu*YBp:n|q*::.CT[OMhU4աqn|(8eՒZθ0żIW؝v͕aRjTDx0kA]3'bN$e=% nAN\g]0 &&dv@1PhO|{e t̵g~C"TPc]F;ѱQyF:m"!!e1k(p1Mls1EI JJ،I/g<6٢ty;.Nba=Zx/ōUY oFǙԄ\6[)-fez,j,*WhyaKXx|$7̡~# !/OJЀup>khU&CB_:wN4f\.HBM`&wsr&7/]6I0=OG#;i޿G|#_K[o'SsOSw~Oʻ?~çv7hvivz2N 1d=w#zJ0 !. iLzzBʪd}.4ШgZӑk]e:8Xڙ~UBbe-sD@(rpv-Z`^qjB 뵤}7f0OLY%>T$4P! A`qȁ*}ֱD!~rN ӱ-UrJx&&8-ee=1wQGۨ43~V\%zdudIUn0E !j(7Wɕ~ Au/`Yu* Yr:͌oUZ1UP@p݂Shd8Ȩ:P&:NtOUAJ ;άBp3m.81TdJCdVZ,B(j1)6uUd`I,0M2MM !&-l?7#LDǹ}2`fȺ Cm(Vnߎ:metVg}e ihMuE1Z# v2v}2h/h}N%8lMߨtS4CCQgEB̭v N};D˫삂J$*HY9WT%/pRR1k66HL"!kU!@ uj},*dkώBօO}3s ~\*^3χ7@h?ZC֧|ʧ3>ʗ}'17dvi=I>I'QO8[u]wݿ As K$< mJAɄ(k .MLr/U?Sn@)H&:rQ>RA!$)m"@j LcUR* +Ĩ*DyD1k^*:D…l8dL@Wih5n̪Q YoF1N(+Qփv tŌ@hcV<$vAۧDѲ7f=cpylYo= m"XF0Jup->؛Uwd;QMRSRZMR\8*!d88$8 EmYE 疡(waD= M6XԱo-=mT};n&vC8$ DUqm!6XXZezPT!HS}0' j!hU{V EBo;_G75`ڧY QkJ/ӑ1ܵxntY 7JV2ʺ QNB$F!?ƒF'eT (Y7&,=m*j {m۴: fBV 85ShJ뚮gr`G$;J˞U%JYWƎ`4Pg`1aE m8$ IOdZ|Ӟi>>}sι-1^VgN;ѮbQkpZcPףd>Ω֫ 6YnV@\tqZDGBZЪcU95tj(/C%&*Ʈ @R7tsU12N [@ !jV6Ik( ҵcw)&MBTBV$Ɋ)UĩCBVВ0Ou@C2v0*owBE%ձٷ¢$ TǘUȪ5if=i_ЄrD$;=4fxO[Lu4;6 U`{>등cªKC2hu21XƬCP*Yd@1k'_&NO;}Q wlVsXBU-8n !C3ȺBl9m:NcȺOmñM$95!!ة V'YTͺVG E s8>ieipSy5 :u2۬Q*˞8IN&:*@a~.%br*Ym/eD;1Ӂrrbӳ@SD0IB['3O8;|bBl;J'iv{=fO8~K_9yγ?}]}s~}Ө>?{>^ӿ zտïXwcEivXbx#"~{޽NS5* !XpH" !yizr$Ei^c3CIep-fSIIr*6KH&D &)> )PĸYvfw.CU:  lAYV ||Q*iR,p*1PeUf:ZTɣ˘ oY̙0|h.╰MBאp *UPXwT:]ǐ1Z 4}żg~U9seyt ab6=\*tQ(&C[xb7PiD**6*<|V> j *U٩p|':jyd(4U BUto-PQK:53PƬbQ(`> r2Fev4sSia6}aRt* !dA}BMN)ȺŵF1#;]|6)܎,U)Jr24BH!+'W#Y[9=XZ&L SPCcDP*omONɣ:FTAIR6F…yAt nHx3QI*xd6 ɵܢ3B !5*Y)JB\&h!*C J(j囅 *4h;CVc(+KNVXļ?l=2Sҏ=:_cu*W~q{6׵N;}h !/ry-g=Y7^'YOx՛>`뮻^^zq: M RP$$7칑K/ OcBJu&x!Lif0aT etDv o6hct$TerߎdLtL&lScҍLTZkDG&spQ o쓉YiW25aja=GX/LּWIcuf&l#Ӊ\v+dmU)ā>K*TGN*΍ 344Jh d3n{i%bYEk*E1۰TY죽8] YB+-΍EIk,<焬a:,_' qm*HB*;bVpn| \ӫc7zyZͦSq&v:JY:F-y1*ٛ*aϪQi~R0ab^%+P䧔 ӧnk,3Q֙ aATfg4,fry:Ϗ| "v*19Ʃ$e}~F>n~gݛ+Ï\wi>0χ;=F=7, ;9 (x ihx4v^3H!@R$p[fmc2S[nU6P jl=nsSng>k^/*F ǾEd Аtc(`Q3BXJBKBS8:)bJ v{k$F1 S) "0XJFxk: ],L:L.NW 4 |۪In@Xr- e]E۪NG t3Mv 膤& <$dHۺIh5Zov,}2JGcgǤy=-a.P/@aH&CJ#/VD|ᐵS$>ۃ/UrKJ! R\ 2anl-B6ha+dmTZ'eͺV>D: 7<f[dUJ!ag:n8iHQAB;lzՒ\&bQ!v{a}u*oBL~Ƭg%J`pQѝk>+pf<@d"e&SQX7[! `?S`2:~uXep St dM:\&˙v[NoB!mWId9|wce>|ʛ3??oKZkcd}wz鿹9(GN;ѬF',J3a$DYdm嶒u `Z_!ZDM cydUU٦T,\jJLH_dIT / Sbfo*W@u=άT}Vj`ۉoƬZfOت?CN6W8-[ܲhLtDQ&U@sީLd|V i&i(賞b&2olJr M<5񆗇I!8 -8~ߎnXLv>pƒ28.m05d|QW`ngsQOBCBr2ƨ:ٙ s5J!c2lEBb{P nXPZ&*pFqWƎhU*KYEEYWэIk ebTGFq7?_G꫾ ~$Ⱦ__w'/{_{nֱN;Nz}wuc1e. ܕTo0[38'Ƣ|/5!cTxLAYZ7Uia=ϴ[.ʬPR̙KHlC!ܰ0~mr!'c͘L(jzfB&SbQRUtY$d|t=ѱQU%IaEX =!D* E9|hTfb*"xtiLpۋ5&T&r* cL7 t B"&Z*e^E0/ܨX,{vTܷ^PAv*qxZԄ7pѨ e,ja<Ⱥ ipj0rr{bB:ЭcAh-LO8r-v9POcMao}ͷow/~MR*LOGO/w}['ϼpS"Dyǫa<Dw_~~q}#ivY7Y1k6iU@`Rxۅy\9ly)kl$QejcA!rNM&*4*(cwv6Z6(IEB2 yA ̯ɋW}uiޣw_5~W/~vi? GЍ'_aK:b囅cA&Z Ze2JBv:[FNvl5łfP@'΄\pOd=vE9Gc+0>*o,?n~V%%LM$.Fs2&-e=:Z MOcl.ł:Lt!!cf;0SIKXBn1:Z‰ Ve!꘵ E:JYyBLO Љ4;S\);vd[lT:h VE;:]m7Ƃ@0W4*UdǬ.V+dCҩoݠd JV9$CU2׎e Bgmgϥns_Вx[W UiU>mu,LNҲDUƂ DV٨$( K,Qq}2*8)* f#ioVcQ\I{njϝ=dhU87|'jjB~Dǩ GbU])IhNBŲS~Oft2pL&*aOWXhcQFB!7oƤAgBzo\w1)r߮̚PXԑ.ձwx V'*^%|--B/[_~~wS^IpS/fN;ǪtcW}N?/x_0Ab۬(Q l[( ; ٻe5*o= )(U^U\l5X@VǐŲL~ m ezLfaNz a1[(1+"!1B0ީgOʩ\x(!$wt::ηRc2ee±oh,72㞽X n@BQNo4ut g_t!X•a2$0>Lc1F~E#߮{ 4X:.0YX/dEGY56[=mm?}>?t8EG'bu?_OxӞqϺ߱Gz_s}ӞW;N; yipUNm2RMpP$7C$^&'Xs TVw~@ ^3F[Ϻ~2NR6Zd !l6Ya&2v W\ Eł1+)nIt XGYhǎެcCT0P:r1[ڍ/g}uGs* Y'&0$Ë^ gJhU6XRA~MUHeE.ǖÃfHW oT*ٱVi$i( Lحhc!nU +JIR JR~b&XT6:fM!UJ ;2cS,M*gIB,CŒp̺PnZnJ k&I,ewTntt**ǬS4&IfNM2T5T%ک gn/0w&LL@ !Wba$|0 EfBlixT>m3ݐ |Q{7Ǭ7Jg,/L(皾OVڙv, r-|VJYJQ:ZdVYE7f}ۿk6?"3?/|Sۿo~w*8[7꫿7w]7{N;Gܘ Y۷#ZG{2<}=޲t䀜/hƢ&&mz!Ę611PT&Dw?_%LgG B}v"e]Fg0T`^|*08nnmL*Y(8 NufZX$Ęr*u:YÄɇ|n<0L&|dp!M(Q% !sn l !+ 4W̍W@vn3qH9 Ѫx:̼W!Ⱥgu2B<;^&LP@JnEk,:!kSibBOFk]D >@VU>il]'W̜3w:6hٝr*)IdB߲g0af3O`XuJ|2PMWIȚ IUH%du$P^v*!zy6ɰq]`B֙Xscas4|~}ֹ܎BU"|:;ѱSa>paD!+N]~2 Q$unB*8&s2tR;L M`oz;RT:Dp4v pķGc:&* |WOi W!Zѱ|cI7cGOp>{k=?̗WKOӸw^=K{?O׵ŏ}~K08{n׃ӝvi'--oyǪZy뮻`YQ`UYamt o |VdOtgme K$t0s0Wɵǡ9 ͕q6*]}$I{n]drnͩUGc;$SFYyx`n:Tr4sn83>Lnc>Rt$d^g"ڙ00:vUTiTf{ LRCQε[-lebGq!,*8Cl̄ǡ*Slђx422&U.@BnMUXpv23Q|d5X4[naUkHk_:d}yDBd;?1|Zah솬 U)\;QOf0NihxPIZffDG)zJRi2&si3Ъ4~,\T 6 PbLll0[sRAd'c;f%X%piBxgPh\,*\;: 0Y?7 9M3;bTDM}U@Hm(NƂRT@U$%nIs7:l|(lJ5o h)4*%~Nvfƹs~z $;ׇ T@d#ݬ}={חGoy~ᓬ=㏼?oh_ߞsXvv/K_) ԧ}ݫ^/q[ڿu'Oo/OW</x o|vcQo{ۆax3="=y{3lv#"QU\wy'S \ vTJU+( k0bQUSP3ƢXՒ!8 @JR"xz?eHD@@Sio/*rlɅ}VR։ Xl$!( 2A&jIU!(w#gg&X̙`d*8LBV S&n`"6YRȺ:Ouɸ5YA|Lf?+,;H3MN% !P^;t**gW![xb)%+g=$v$4XY)QQR,ʨ+pǐ̐ wf*lUZRe"CWSb Y1Q)ڨ/SyfBaiUJpώ M DάOCV>p:dڰM<&npIsXԞ _J[>癟y_O+?Bzu??ٯà1n}_n| /uV~}+o!=r~KbB_/!GGW]kWǿ?W=fGvi>6^ԧJ)|DDRo}\vzEY̅G;Dh=1:fYSP n!xnf<ηDhUfk dU@nJ 2puU2f=7THEY(d9?̩ohHf\$TPVJykjB!Ektqz5WYMZ+6-J#S IKYK%±T0UhMC2zQ&dN D5=}6RC2L@UY/C>U*7*+,Z* 9[fr}MfdM;:Y':FB滴*Y Y -;YMTtYߪtC1{n`6) PTG)+zд: I߈F0'ۺ27~zߎ38{eQ孓uN#nX_&_Ƭ8볊J?χt[]w̅o_Ͻw?nz<~8Xo(,~E/v8~iB\^ow}{N;NH咇G|z٪`fh3-,M6{c2}֗S5U'rJN|W,x⻅>NŘUXT̃t DtƓ k!a*&:/U =;"z:FGePƬ7po "eO nJz !1RaG 1Xxj ;6ĂDZbQ$c0izT* Ym͏JEJ::%kU9&tz尘^ qUĩ c2GIriLx$_ SAqn(N j(|Xf=o>\5raOu\%UidB{=lzRa5XVr0!WXQA$HlφV,$܄UVTP46T0NT[=ezvbQv˯{*|^`TGN>3eIJBLM0X]_MB\p\6ZCmLcQj[ J.>nehZBQˁdPL=:N'^D OEM6Z4{bzo/X#H/? !ϿKco1͇WV5 !~' 0o4/qٗJ)B?1viv1OW^Knkzlםw޹ Ȋ e=rtsfBPuLz#fU >P1FȷQI.W٪g`ߍC։D= [|Vc$U"*TaYnUN%thURX};rŽHUE)BM Wqε>[ ?J 8tv3 :YW6:IY\=lm2Up܍ *ߗ٫$&W,Lvn[&Y&ۭѩ)lfUݻ]pMoƬڞ!+B(lnYMt(LB nUaCQRVyyesL_saG/}wwNE$k|Za͙0J?]walx;F\V!ؾs naECY'Yc[_YK˘_Ԑ̕~ nż>[ڍ`7L&|4IsC?9GyHoW<U|[xs...@y?izVmwGB|?Wc_,-w4V7ivi'L7麨eh|J* *,DpUȳө 5>,Unu*u&ĢN|L :,LّN%TRv#eq^E;&>fYDr*;,Bx[7*Mtt/BD8ӑ$+4*\}'B:Uj̚;0sFǹ lX,%UX-q5BY1oc>+Y*jI EI !51Di(pٶ*Ŭ"A=ۅX/A,U({LX`Re"-CVBWdCpuf%i-/ma.<1*IR!\ u*m1Y?$suƎ=A!D#OtrdʥJF,kJ6ngԄ&z\dO e]QKb:Ő*LHU!3S&iz f{ ENUn+lP:v&m2Fk{@pjAַ޳Λ7<ueP_xp7[0IĂ~ʣ̙v [b&s) nRV'BXa-UɨIԩ@ZDPԕaYOu4XnKUY?JmpD`1(`̄Tc>qG#3/}8! CDxٿ~Oп7#%~Cx{ߎB\||~տ?{o&N;N;=}EO8[u]wͭ7~85RQ1Ba& ̄|oGr*HBPtP2vXk;mp -(U,le+:V!&0|a}a+(cU! JM"< m"$[4:7V9fu4PAh9f&MS3Rp雐J1M0aH ŌB!9J*>RAʊA ypg͆ NMp`ݐszPC1pavDFc:LW!&:X3hq-]ILd7%5:rkΘuj ~xFVNL*E>k44 ̄4WBALOH!^x_ ѩبnݞϷ( e/IW!ysdTba0o=L Nc9pþ̱4NED\+ NNljQyn[̓Ô1kOt̄ yxcdηӱ=[R7 2v<쁨hOk.9:؝htL9 .},.z^?\|Uz}}7}򕯼\kk/{nOgCIVX4@q*Go a!}'>$]רĘ 'MY=USgJ:nnWkNt<}(ǎ>0 dB0D eT*U Iƪ̔9~4N-Uշ()٦Jxa'-W4elN@9LYtX`TJ \|[2X¸u ꐵUE]E77C(:Tt Ƭm4NWѥF!ꉉ}|n<RA)+;i bY (|(sj03)o=;n{εXpT~fN$j,Bn9bvǡ# xe0#DY*=;!hN&w2\y*XqY@).Ols4vsVyy=OZsES! #s{0m5VլT6)d@;hδ\;EJ@CּhX̿n4F_ SqXR@$HDR闋vdg NCsV!N|ۿS6Ԅ!7(IZ1dʛh;':8;}$5Ω鸉@2!z.?6o>~q5U8 -0h %]gOsnaW[ů~{ϻ~諟eEo/|7='Uo|}>|Ɵ|Bn,{ܾ/ͳsO|Y!&)g?~^=X.9>>>880̇~gY۶pԝvi?>Zhz=ƫ>׽uy{_x|^zLwu?ss !RmQ}VˡHl==7jIc h\UbTE[&mc!U(jzOgB }4SaAse&ټH.xDcpF&0X:O}ÆF;"aLC9'1X10J[1!΄NGn6l҉owZl)!kk%Z̜hpuθ~:NGi'YX?~-74Zs";llڧS6n=U(U6Mo1TY ,(蓱;̊P@<*ݳ^HQ6t:>M_XfE=C>}7pҘ{?J"v+ 7^(·JZ묵ZkN;)mۛ,g>zի^|Mn;`9; *p"tIhtmLӣR_—Y%P/zc >k>U@3DˎY+IK*MV-ܸe0,}u)꘵JIBLP` =N}2N{v0Y;G ?S(w&:GcǍF>b>h1m­݊-:LJsw2}QѩSif| !NBJ!SAVf-߳vFaYX0Q Dt*3a7WϺOTHBR-kTUnӘO~j  fehcQv/j(*amg¢@Vku賽J̻v(Bs6dgݨdp .>Zf!Ti1Y  өQiL&U2OŪ\a޷㐌/*W8t={۶zY*۸n)}{tZ(cSɪ<1!*vBt:۲Sqj_ Avbt=BHQA )!$ ]QDz!DUPAs~oiOTɜMhL`wC*Hgz`ntD+ 2&!k~33{S[ѮDKB" NL*AV!D&:,>n~GfJHk?C!ݿG|'W2PoHɍW|IIJ7M?Gw7>#Dن;ӟI)?雾{{vzԪTD|ֱN%)L`ȖSXV!bQV (Η6:*I\BÍ\%"S2A{ ?[j ,k)Id:ƅ = TGaNJnv ak(($I!8{'æ1\acr7*4h h/ RU٩Ԩ4wme$TS !IuF3B-R=??3>?In>iD/}wu;}p=+b:0v|(  ۩B,CS|ό\a(fgm9*o9ιH 2@dFPZZQVYQZ;mgAGe sn|=T7ܘބg=>wթjwh9C+zp4WHCM&%ǑTYϓѠWbC6:nDKPBƐ.kE0}Va%3Et3Xd*mAd~ñEU*-U3TLL 9ljC52nEB}dJN%#ҩ lVC^1И 8& zEJN%-SyWղ$S>kW9ϻ/Y*TCW@YrbgULCV̡ K I:V*2H# x  g̳hI/]Z_30ȄJE# S}J 2>k j +9ct!lAZX/:fOh߄"l\˨D!d} j>ke^Z g/T>,9*hvO:TtjI +*)ȬeO)`+`|&@r,J+HK<(9 f+"wd{#JAaDA&@Ϊ esRMdJFP _eEj*HܐtAN 1dE1EnY&)pێfM;-no[ጱƘ3[z _z >1nXߗ1ƆyFmlc۸?/~k^v\pjo)p%POZ*:(4dUS-r&\FYG}ݨ$̣Y/EYXZ_ Hαt싪UҲ4&Q$X$c3fUEy c,ѨD-J@*z*eFШE w -d8FEp]2M4CDiF&`*U2saPhDGeOldq:KÊ>d@I 7BE^6@~2ƨ ggmdHFGѪ, $þ|-T iG|.-g;wp_uguww+W3_U*9(Vql{ɑ3^pTZ38$3_QHHP7U/Wc}C>hqJ@,j 0&FPPcd8cSB>eۍ \$ niQvՋG@Y~9Q`; &*QK U&P XRJ(883LR˺KzLeh@' "T 2 !2cZȩB16^2HšM _UDEA%ʤaPp0Xǜ`,J*`\p< 8G6m@6'\P!QzD^Q*uY'٩,{xR,VRqF;+}֊,-narm~xSO1R}NySߖpmmc6qssy_uևq{K:9>(?Xղ۬Tv? nUI@ElEȻh(cSrI8!8 (0R(+%r!+bM#2>Ly$*HuQ@P!3_f$G`\0ԤgQ\ 0עd2y}C3V"D㚯]2"7&SᚯNV%'sH2DƀqDzғJ y\Hbhڈ1F+8*;\+,q*t-JJJ19U[P8ʵ;ֈŠ'#E,3JJ0 \z(Z%ۧ"I:PL%2ƌ*d,N2|쪯ѶPՊ=;JPbec'yFJ,yp}JpN|8_;W\G:Pǡ tƞz>ъBs$jQRqBVm"~ztɡ֑TʌbuY2=2heYJF؜Z;/\6/8<竟[UTߺOkw=ē[?/|_ ?6;RK/׾1ƭ{zԭsر=t;^zӉ$*, Ő:c(@NNb((4IYFX4!bo3O(8cZ@# Dy(*"M1MOLi[d)`#TJXߌt8}w0:) !ʬP5+DKj'~pofRWY5CNJ|W۬YW2bB@©d|7OF>kDZ rc7:.1v;gѭs$@{?9 *31H_96d %eu%峞G'Ɠ|JgcC5a94agRgA%&̣mIغJ%*!,(P7HFa]jQ0d"ZcY&Cu];*Ƕtƍ̵Jy2F jCȾiyٔP0gj$0Nßˮ_q]p׳褀 b"Qr@F*YU>&NN>EQE-~{UGE̵BA 鋈RB8q}_D|4E;LD0vb|" d(rhUY20.~CAf M%J.8\!d5 . blҒԍ!Y6?CsnIs{-:K[1Pɲ5S|{v8g)K3f,㍊C! E΢=RĨyP@Is41x yA~X5gQ#3he>35O6&kDN%`)4e"XTQsN3rUR0ި4Pq(~P@,Y@we] + CF@F-蔺MڜrEQ*,R"ڃ1tyCx߬*Ԣ$VFG0|<#ϐ `$H^P]kwg 2.i~'ɄAQ1LXK΂n:ܞC8G-K4:ҁG!MC_ԑ~EY\@P: #iU H ypy65gLrTXP '튊E5* cGL,CыZ0$Ec GsPaQHm2cCrh*,"c롒} ,(ƮшҘXed=+hΐ!FZ200TeoǐK_Z-@ GA 0^&3K˚̓gceN@>4LBcd4Y-09ftPɎHnSܹn)￿eq=~s{"灸uߋ]p/8·}t;wkmlc۸z׻wF??Rc̿˿l}6n?P~_Tc@,^qXQgEfgSO2f5auJFJ0N`;n^ 58al=m`îz%Hv`b1qO3OEJ뾦PiCA3~Cr+iJVfPp&4&rdLM!+ein@OFQN3JUEnJYq\v}cB_TPG AHfW͗d,TiXehyaadC,m4*$e UlTjD9`q 3`%*k Jc/W⸧KC @ndQ f#鴈|=Ԝ1r4nNXTc¤k2!`, P)N':U/&T"1xYdFkcݠRij`!Y[lvYi dt5v gF['W2X%sɱ*88T6"XO\CA}zhB(rzd:_U", _%gZeqJ/"/ ;ԁ+K笏]Hf-en#ww Ē̜1-WaA5= )6E2ciOy/ mhyR故j?(dF%́&kfU__=]ucOp 1{ۻc `~>=y?wg{ȣy;ܗ?~OG3we]q mlc9җMoz#sR?}{o]a7f^z뻤".k-`WR@ie1RKO{G$WMgх|V@yVf-20dm2B {Ϊxo e;i,~-PR|K+L)cmFA`;E,RiHαҩ/J tQT^R 7! gT1qdr.R,.\@̢/8YL&Ya:*KYO 㪯}ǮWy2Rc}Vc#c(ڙc}gNZEʊ 32@=ݱJXxofu$d*2h70ϊvAAc7:J4>d 2E9. h qm"CI[:nJp̕/2XDV@g^gxwU/r_EdYuYJrd&U @Ģ8ǻ~=08ȀRp@gܹJT:,ɝ{6F2 ]΃ 2ҕzh&T2zW]2>ܩ|Pc:"rphBבMȖ9},1>6>du8G4Z)|F1ԥճPM,R%CA2ZZFsf9Gjݠ %b9̨{E(&YeШ$C)@po$]FcYP$+מNr iT:xjՂENl?2#̈\r E-^q(%Ǎd[UEV}azQq̥iyAN:'DI. 1αZ gSQ-0ց3 >+"`dIA]oD42NqdBW,Z&d (i3p2KFF}֋`,#}ҋ7|őDe'vn,fAZJ橯/~lFp<UKLŎnqvkCg? TLp*2lV+.k!L’!õǺSeE,8FR@ҨyF_6KEqE%ChąSgÁ:ppjdYv~#*s$~G;G1Wz #h_V~o^""ӊ?Qw4 oc6W\quwbm2FedQEmW]FmSϼZ88 #3i3֨%3~,Y˖BӉ1\n}!띮Tv:fde_$[dYO*:f}V2HO:5P 3cHru:R9b%TX눌YQ gH %%3O6';}uA L0ȚҲ*f^$F%CZ.k- -}ֱ6<ھ(-'c,E@- CV .BE,xd!׊BQSHO42z'3VRdwno=mjt)tPGK21: 5"6Z'% Ce}֫`#Ta,NGΟ1\ELAsƙhfE/C?c`PDZ>Yp}Q$gheY仏W-2p`TI/b SR(cθۡYHuEq>kd(9ĢF(@Fff5::}p^ IWCQC&W:jG4 UeF\ɲ\1vS1vsږcO*l LТDcR UT06ٞ%YB06vf^$8YH<غ[_~1fۊ__}#I?>X]]җ?_+lpjo)p饗 TB8v=0Y!cJM;AIh@%jQv\mt0,ėPHEQ :QjƄE2#gxmȘPodRRڬgZDTGj_$armDeSD1itm2,T"8T2;&v3RIp,NXF"uYz@GjA 3Y,({f+6ml8~ S(q?~|^u7ݻwݻ'Ʌ^e8>Q={'-xNK.$NEN#f>ULu94!d5Mvdu(Y[v=::T(iW*1UȜAL֓בVib003sdJ W3KU@nDW&΢kY$+8V2Ol%N>idLr SH*Ø9(;6yh1Bw.Mt*I}QN%%%C@~&N_qXqMIQdˤ@J!v9:C՘l e38FJ_xAAD);,AhYc;\7KRi\mbRj훉YG P'>ճagZ>kqWvYϢ+Ȼh۬ f{J%j`77ƮW(;V 5V恉̡H'&sҮtf"H3V>-gtYϳ)(d FG-v6Y\u|=lQ Fjnkӆ r-}֤Xe)V2`Eלa,JWleŢSɀJo/.P!}18C';k#Pe%6ZqW8 (섊;>Xv}#ȇ?'??O?}}?/~uJ1ޡ}c?O]{w_L= 9hje-WuFb-TXɌnkr#\u _BEbUsl Y3RJ"B @䍎>kr9NtIkZP~9*)T$Np#(Θ`l#2624 xߐ]p5 4\yZ3؞1VE t &P8iGq?ple-TE2VfR41QXS ?s>P R8bZr=Aȍ.- 6kJgD[Eqnf0@P"sDHzH͂s*[63J6%ȄPPGQiR3t/g8Pq2GXA.MXQϢEj 6ZƱ/j UenD7=4mťcL@e_2P1dwNe֢*̢-(Ł{zC_~h^pNO1TdF.0Ʀ͓N3(:8}QP?ك<7udDѩDc7U^:>t*7&NGl <}EYv=oKfhÒ먌ɼ6ɱѱRYqDc&GƎtu͢Y,mh3)NCiQKf6~* d*Kf-I1@Y]2X$u1U/LRY3D~Lumd!FG'FrKYOn<رd.LRiW}2˶_6 ;Y:M0(#v V({d͐19HFZȾZ%wuqu <NX󕑥Ϻ(QmvEM苲"+2rDg0ﲦlء{926vWzJD!8n^JnEp`+< $,"gP\\c, DjD\nZȒd Id 2FǽY+k{wo\fö}VV-@iuP8#ide)1v7C^T*"r"~uc6|5 Ozd ̂TL_!rrUE_j,JN(NiYgyry"0N5*d . "m:- +UڈBEӁ !'pێf^릞-F~[?ߧozm=Tw̡l.+qk'mcNpC3|Âw@iB.r[Vg,<~ևq܂KfE\'Cpƪdk.Fc*rmc6$SY"ѩԧ♕JR*E 9QJ )Ѣm,.UBȕe[Qr*J} y 1"hG+J%sUJm}Q4HqRm2J1̂ Y͢Ӳm2ZɡKfR)Ԗ9X5KKW3%EV温D6+sA+:Y/ VyZΑdEInM˺d̃_{<p`(9JN}Ļ}p̀ɴ\ʪL~(u8i9x,RrWO  8Γ<>Ϊ) S ͺ (qHr~li)GA*x7gњ NH*19bJFYcCJeΘ/*.gˮs*!rQ8c /m<؍$w;]qTE7횦%O?F SimjhŮq <KnO&dY&ӨX'X#H# ?jTĞj~}gJFZfApL ʧ6vU.YvU}Dˇ:S*}VZGa;>buh>͈fݘ`UEpV֑5,ٞ뾞EfgMjN')@s02:F eK"72-؈V)5N}Eq F8J%ƱOLkH_Ɇz]6f>^pt*rCwv׈|hBYR DXẐzõQ@E9#ˮ~ qp*(Y(}3O֩<@0TXp ;1J(Ź:D֫`qkYNCEmucwmJ21fV\Pq3`|b=*rJEpo ]U ǶGѾU0ƌʜ!c|#Tm2}}b<7ZFUkdtQf,"TAd1βd*d"A/ fL xoHg;'j-TȂ |kNEƢ[vVLh@q` YDIE]ɼzV::IW(dZ 2>63CoHd_h&5U4nlakOkfv*L :Z_W*g+Wl`1fEed^n+z+̂ɼ^̣YKG4:-`C,xhJ uG;ng 7rxgό1>~ϹsRO47>x3?nt;kxi{6w߉"na}7LE aZ3)7)VmA8K̵J#X:eek>J%+l`jv@:p`8Q?JVQp_@"(m2ȱ (h;D䴅Zj{F֏y}҈|]Pe`GluL!9Q,ˮcc*2dA:jNL)B8n6BUkQ8qϊ*+VlXjc9i@XQ .FGaW1KH(N8c:?R9C-}y\x3<о4fed"@^o%T WCkj}uA"QsHve Yf6:vɒ(8I@ 瘋\rH{`l_3TZr=5׏&[@YoK GƓ&T˽+e@ $73yA3+}g"c+U3վVmq`L0VD)ǐ"'j}yvtY:YONJ' Ef%X@G@.9F+s*kGFGwj^$ZYe}A\׎S99y2cSbͯmAeQx)3FS]֋h9FGɡ0>2FOU"*"/iz6Q9f}k(&ԭT.kUOՆpێf^릞m6n7c}/_tfUoyֳW}|ֳ|7ܟ{=uy%O!_O~$|7Xk%~?{~ˏǯl VgC֯+y>y/_RoY[|dB1 !q2l};:9.#KcA.~"R; YN|zJF\v]4U7"zUT `VȘUQWQ!( @ *OtJC쨺|d[k#d9Pẹ- 6|%d,Z22^HgҲn朱, ,p,XTg5v@hY,FiNŠ*WT-Ȳj c<v,#"Ed*@e9}w; uĂ@|QjYBCFQiW벦⾾"Xv=۾(XƖl_Emb@GQdٕ(ja5SrRTu Dd{ΘQy̴wk)AFsh |:oUKU(;֨,,f>+* H@egִ(>k0NEMH :pPIZG#zUkQ& m4Vf^ rD@V2kQ6ӌbOeH)@ XrMc}Vc F(gtE͂['s"! YV¨frWȉ fYs (cP+\Ft]2|CծQM!pێfM=m^f Gxѯ<};O쏜{'?3CVze/O8Ny/_ݤZpಟ?_s )pC??vσqg_ůXz|o}>13/˻>wO㿼oWsϿ)>y? ﲼkFCo;~ܷ{>A7||۸yl!x;wq]_\~.[}Ӌ^-^d2k" Dꥥró7QoQX+׬m مߒ2|G<ËQ g㕎UQ,Z#ydHi+nTr*sCݰ/*#gMG%G)@@V**؎2dn(HFrjZ. $8ΒF[?c!8"9G!vۨ ȗ\ߨ'A;TThE *sypxKEQɤP@8Cx*-nd=p*O+ "PTQd(:T"Slv Ok+C5]nL]/(p;Od",V卾F䡨 >kT@@iC]2k]mdQ(ʤmfF۸p Nqcygλ}FVv]_3=][&aǹn W:wsqW}%d7y3}?\C_{a's_zWzk_~g狼sW:x+?/~ÿkʙk }΃Y>WƷ 2-䟢[l][ _ . _W.ON˿򕯌F?ƁgΜTDs_8\>:묳7~c +~»^| X[u \z饊cgdU  &L(& t?hEYvUZE@$ZDhA*dVCAv1Yu̎U "*.Eq_GƎu'.>\$Y5*U*i#e1@g-"R?jHŁ2{ Je+Jh7X󵖅$ j>龨>i-f&RϞsblAad E hd莅cKGoBV⺑Vf+ʞzfDPhe&m#ՑlÜ "XъEt(HFSV1VP$fS"5OخRF[A#I H 'OȏL0PXAiJ+ gVikntDcRW1asw;j! \hw4EeNF.d|=jGe\ӑ3kUB5HgeIEV2"dy6eYdƨLEpY[inWkRyu#Pzo2@&~Hͦ1 *CSOfȵ(ZՒ+XvYMfO=[$S[x,RqbBV$N R-d-7Y/U y,x;. _ק췸mGSuSO鶿twN6sx _?_W>hC=6ul1K_yhsr/w 'g}W?팭︹ 3 O{x_|/n`hY'invw~?oerK!}<)Ked|炏yO?yK.?]r E?^S[׿h?q׊1a˟Vol_}ߊ՗򏟺ڧ_n n㖱*w^)Q>]>!1^_.|z#sg?W8pc,?xG>7ݧIoq%8 (Eb< 7:ljdVmd 9IԈ00ɼdI|Z%'Z+JR*2f+D>AɢE: <EC$5_`n c|VJdUYS_qeq2"ɎM/8DJJ4h=|LC Bȯȃ*YrXdj4^deZ$n(Plj}k}beQF,jWEYYh?Y+>Jf-`PQl ""Z](30OfML@GbexLBP8t*'zaDdbBF}Y,*ƥ#s_tzu 99`I܈nЄ\ ѮIբK'?gr3Er|P?_ʍ,Zl?nz# H1%RȪ 0ұR6aWqC/麂9$SQ]UkULϙ "wjQJ$/n`clt˺ɩLFp]QF敪Xo8\?:б/4I)`vFŁfewɄ(h3XHI;b= _E YE| 6PVZ2*d 6m2G6Ze-kUZuQ#PGΏ_~)v4OuVuagWOo.}kcrno~B_tH}5/O~ճ|cZ?+şyuYkO~ޔsr>ん\ߺ4oODb' 6y+W/^__OK88mbtSY='?'=w_|N!Skn㇙hS!ZcۺA?ߩ<: lcz{};&ġ6~_;Ds.۾z+?I=9|~2g|.ܲo)M?T1{0䌱bh#X?ҡ/Jp)bVbb{D~`1QbV "c<6k#`c%eA-D>Jڤb`BHGDAWLoEp;9yܬ媣Td1PNOpRj-TSlrPvP0V6AUbALbJ\rQ2:w %`9*YYYtX:Jǡ.)N܊U/蒮t&E!MP7\$ 6hFP2E&hgQ'2Hu;̕BǮRC!櫉m$# eבT06TP,.>7d̕JB@FQQ4ֺfh8 uLFGs:"gɞku|rZJfɱƈro٤}̷M}K>++glBz/=ΛM 1>ww;W}_wt38'Wt>{^ |ы+<W}TF]ϗsvH~n=O{v[aw??tϫ}܊n}=Z1/}A_L^zxu~3Yo2Y0.n0BߞxkV6nJ)_җ^җ>%/8bwݾ]G?11{"M%ĭ[V/vw;'ov޹/r]v­: K/sر=twAЄծNV7}EsJh.H `;jtU YQjƶw*#FG>bid*u_SQt*|+jhЄ}lo==)&L ^Yh܎.\ё!EeCSida+EKڊ'֓+xl! ;Q |=KvbϺ苢rgMُÚJ=,YJYQ8 h|Lw֋e׏Mp2X$2VPhQBQ;\7:6*kfJ'Ar4Z%J-3 p2# @pVc %q_38Je#I[3_Pjh'KzĄU[U*U:M\d[.k@.)'֯j#TRd͓Yvr㻾=;C.YJd3^.es<4c&VywiYF:|"Yrm֔IB}EYrT$s& ĮjA߈Mh^ tG~whE[d30}swb cL?|Os(Cy~>O '>O|#3~%6K/ࡀes/8.(8/~'77̿n0}|iZW}cVgF|5z ܒ16?ԝqGUn(\#u3uOT}ksu}Ƙ:w?p0}疖9|`K>Č1yȽMyyR<1jr۸!+FAMe-6K w}=o?M/{GnW\Q7|ozK.zܹd%,;&վQ cS_R*o1@Nfj:la(J2ԑ3FZҾffenTTSيo%Af cFy2T?*  $B08X]R̪˚<, yl#Pڱ񇻡ES|`; LՅ\73vTmDA3{ 4}sp>&o!20^A"2NYc}CV`d!q/ɀM*7u`YUy>k+s: # fdv ȍP{H;$CJiT2TZ2=yS҆SYquGv"t9IE`TEk, E O((Ne EyK3ڬ/YtD)@06!ƏzCSuF>tȂJ*?қ="Sf:ŝ[X릙'">G/M6*|mLfO=L&d#ӳ?/}G.ɽ?_=yϝ!=n0}~삝/~ModGdOɮ;'W=nt8s}.J~B.?gEﺗ=u0}]vh3{}gϞ3Oϸ{_xc zͿ7{_O|ubP+sL =?SIP˲d3P%5wY#s,'J_Ne@1Ar hd9g,Ep-gKf ΢^}!8*9}#`Hԋ2dEо]׎̱yȳkFyd,*%->K|mvFtHFKC9c]_ ©\PYO\fM}6kbtuuVZx r(*U2S~Ȳ>_E24MZĉӵ&5ŽgdaEKO}sbDfBqL 9É h4PͣTt(Oad*~(xY۲^WfjW(`-cLW׿z2W?sD13|xx_qpmc5|ׯ|Y7?'W}9cz•qs? կ!;>G~ao1f=s}Wڵ >6wggVFƝůO]RU5O`/x'?+?_n~Ϟ™}$3xc̟#Gj=~{ϽBӟ_[f۸nMͥ;_;2#M8~Y[=]E?GE­[qSK/GgA"c y0MJhJa%0ql+ΐy̪^5"\=]>(s#FDfQ(Yd#0p2Hʰ  uiv2 up2[YzRd.Rp iͪLqNTߨ4vbBA8szhWg*26^q8RkAnTY"*]|gTҲh>krdD޺GX$+-ˮ%Hǁj JE,ד8J##4Z^TEK65_K]2F5>ScQ486Zq/- r)`duQ_TcB-Σ7E"9:QdɅ:vIdF*I_/gc(]QZu_5c/J 8 v FG;V"T*9~4 IH=K ˮ bbbBQG $s<7gMO]2Jxqs* i R8rYQ\_ApVih,Y+Snm}Xjb{d̨2(ȇ:$Fs}]}eeFc̩ Ch(J*-@LFDN)>+pdhNSݾspkO~÷.b]̿z&~G C6nx|<=u~\י n6]aΝ忼E/z _/x}{|\w/ٗ]jiw#_5oww=^{sk{)=_g^<?G{l[;9.%`dS$z6|׾X@mDWBp6Eqm̵Hd옯Yp\X9vY"<>neISd|N'T]곦0򔎍'+0FAV%ۏg Z-"#)9ZY|CyLc@N%_k&Ƈ"&lDQC+TY2$Z6: d\r="?7cGK;۬ - d6QԢPE_. +h$:QѤ2 SL/,.kʀxh39h0 RC cHbL,}TZ R0g)QC$UV\gMQ=Zn& iHa/jo(K]BQ˶fN7v4mk}}x7}Wo\}7oW=UϿV~O~˿q] oO 缺o߾:]ﺕۧ#G>[3L,g?W?AzЃ׼~|c{g=򶷽~;N[#/<KdoǍ.}'7TUov-ݶ.y#dfcQJcکOϔ(䎪=9:>k#Rڧ&"NH^UKd-gL E)Qle#8T*":F F_jBQjTuhJy˶+ ΒTp92NP8 ")JfD>KZ"H%eo" P::}Q*J 4sbc*:[H6eehΐ8#y-vXH}#3ȑlRJ(&eP(}4'8u|-g鴈Vr"[,>]"ux1=rK?>Bk_TxFK_$AJ!+-Kjh,:R,rl/J0&3}L,q $cȪRIq Iq^2nSZS&ʫjӆSd,E2 rW>FS4:Ъl}3БNyXP*f%(.|u}QJ傜(9C 'cV48SH;Ac5߮8:RR,}Q}QFd GڡE #؄#`uFoHP*2FJR<U(dcPYrT}@5*E# ne7{,u)cz`~`mlM9mrAt4- F]px;񲗽좋.x;<ǧ>??L_@7 j댳cr3κ مwN:..FG-3 'Ҩ%DŽbh0lhP*9&Dcy,h7*dt G+hipTAizw4*Jm֡H+ӹM&dT8&(CG/Y 8IwmfFF'zHXEfZy!+HJDnD) @8Up6 #982^qU$:2M.,d*gSd5^Ft95M@ dˮEU2[iFևCeuJ cVCɆ8cG Jc:Y+d#ZG* p92MP(iq٥Qq_Y>rlF"qk> 6V}2Z@% &DVX :gȲy؄Y@"@e (F( |QypJ uFJ ,Ϊ/8ZH;,(1~g'=1zy&y;uɐ#9JCh5D2h;X$+tEm3DWXϪ֩Kzb~`^"/J27 FE2 "ڌ< _eEtKRM|CZ2R%Xd84:&/~g %ۯny6Net*duZ Y$~u K?m8@EeAHF'uu_@#0)rRktEYr7 kўW:qZ2eYRjt" qEF(tz 2~h1RwRCQǻƊeDfE٤#:6*-.[͑SC+e#c bl(#lW(=n춭u=/x^:! ~}?W>Fη_l6p,--]yDAW\w|3_K#iqTϺZ@5ESjdjLZgEUyW!#oGb!+d|h}*橤H7((h*7|5quJk.(itP:Q+%`O0XPF}Tr䌭 l,$ϣ ԧ8T*isjϊ*hngT:9cK "YXaX7X$ȏw M+u@15P̒%?Q0Eh|}lc$xQr;vu˶E6:YO^zƢ|V+*(#뵀 hVFgd=i ֈLReM;)Ej_=  YY4^]:@Jb\DH(JBdXmֳV\Gd1Ta{-J*\D8~/P; j*DG 5_E_IU.ɬeEb*׃>^LYKUGZ|d|Q}Q뱢t֯c|kR|;K3^ LEK`ZF'#J9No:@<;_?̋GfKwT;衍#ں6mlƸ]?0>Ou}׻d=~ S{NK/4Ik]P\j"*Nf!idQ1&>JekdvW׭;tiQ%X?>s~lMf9fs2dWb]k阥@) rDO524abtlP@DFd,[/9RM;B8"k(CHb)TsBŏg}#`7{U)ded9؍lBVHr{NOl?^ri`gQ6Z86UĐKXD9m2 X,yAQGJt ' zw5 )2 n캯/ZdI&i EvY+ 7 ar{3dܪ<4_.R&vhBAzPÊNfÒIjY5:ڡVe*P*ֳ.}y٬kvw1BOQ^-2DĺGd4Hxi,@.N!HiOoZy<ޞ쓜lHk\sk_TŜSuGSqD,= %}Ǿm0oCA-ЂFB#K&9'&HC7%Rׇ\0$%T)jYYEoURl=lF#ih==w6{)G_~`>\g݅/}sͧo~wavxg؏1>c?v8~޻t}k{챥 Kʄ}7QQRҪFԸ V77PT(Ȝa%&[jg.Mu&[($Q͐.ժNYhyB&{4,,Ua) duPJ30A6$4+$nȚ"3IxPTRB=;dFhO},dVʪ*PR.$݈ipRZŐL}&9f]ApTF{ބϸ$4Gswٲ %)IvqBGE\e"+,k'zEQ}Vs2\< Tq4w&MƻB֭zXf- P7ў$CvB˻"N%.Lgl,r3v666K$>l,OB2uY/_9ဟXsVHJ%˝:z4w,Q;̵NpT&,$'ӪsZI:9BV% pA  Xg}VHA D;!Zs,HU<$s1BbA3%SL46S\S)UO7zSZmTbo!af3m* X̍JSZS% I6Zܕ*l6ɞ̝t{nQT%h%Q# ϖV'խ; UHkNmG7_׿~[~/|~|ͯg>7')R;T]܅|6~n`3_?Kw#:ўG\>eU I), Γ1-^inUэqњɓ _3+1W0_n-Hڙ3ǡJބJUYKZp4wcr)&@8&͈8G^BM!k-()\۹թ3!Wi17 4C(jaZPk֨$q%E`$Rf@Jr3DTexBIcZQS٩,sQ+륨's'E:ih8Iua|oUƴ^n))!YgjѩdHQꜴtPŸR7.Y5UX[2o UHeYhUvL.OkT=wk _Ԕ&Wady׍ɜEgUnU" %i f֋^k7Eխ`.؟Ʉ7FIVp*TJ)ULHPp6ZT }sp}\ޚ{kU$Xu۾Yl eܔL4dd&t:6ߺOaطDRcUR{v `1YǨ(v4{J9uMJͱFzZ.oU|XF!&8&l#ၛXڄV}3s,Ǿ ۱-܌OMs TթI9룹$SA-Eksq9,Nǵ7VѪtML;8ղ\rc&7S_%`9]( .[1U)5%FAdYpI.ԃf4􎸿solMN_<8C@-Kl Pte{hva ޻ڶoWUK7n܈1>swqڪ{leL#e7Y+de1h,7G)OOV{vD v&@\0&[dnP0< ih9J4fucXLaק4!Z7XdժU'DHrބ}ܛ&l~wU)|?{X0'=feaq\/DIeNnb_&ykܮ6%¥ 4`yL+NݘjV2!sz.NLr]"R3YvFQ笹|v$6XuTm07aaB9"ys7: O)$7!JQ{>~MJ 'Aq(!a3]nޟѫms)J )Ŝ ? &{ H6ca,8g&(,c4'I$rdrΚ {&,L*sՙcΣ^p`gT}7qP-%ʘ%tZf|sypj0ؑq;%T܌sl9Ĉ(D<=.oqu}XFQI̎%cѾ|?hѕ*sX6M(7< vƞG$qP K1'iE]Qpggfރ.g?X~ߪ?r?o@ /`%;;ܷ~~{_wck{! Q !^1LrvmuNzH@\j\Ŝ K˶Y:bQa3:ͩגVn>an6F(5e;@{vFQ qJbRf( ^$ebb,9_y-`Såy1$ ˙o|֙d"w&8fbK͘HU1W9d.!vH$}ּ7bJХfjUs{m,J@CTũoVnF[07g)[sf-imK`YV1gn#sxI2Ood(bS{nZߛE&#DX2s{ܵn.\W2:Dڭ'.UNjYƬ7.MXYϟyqqX\_93+BWQI 9ְD>Mt .<{,7n?h;XV|+꫾ꩧV=qumR@3_9ϸ5w5$UTIUI#Y/ 6R 㥨,Lr3;e|u}\*A,OT[R+V*2aZUiL6Ov.Sv&ZYY?dCSyi8̉ytF%γmu^m̟{&zl ڜIDAT[=[Sӗ?.|E;;;.}])|7|ãqڪ{LBx_T(dXS2(*hubUܘ)3JjtDA5*%Bts|0VNIh,9:P3G & 2Өā:ǡq*! `0q U̓lTVZ: ǡ2\֩业93kTlTюɌƂ{vv:1*LHQoVIk2əK̏}ƣ,9M@IU- XTUyLJd DIDx8H]"Lؙ1WYV&TЄmԌԩāam$SVGPE`%IhO}͆%s֩ՙusvc"lUY񞏄B!ړLwVF%S-_vŲb9nN-O +%8MQIc)U,GQ6%UyXܙ&R!5*=כXBAJu"P3ɥ eXj`<)H>&XhNC+E}پd+/je}j;:`I QǬ @XQ#EcQ >Kx%IKʄd!ng+ +3!Ju JnX/D{\/::/?1MY?8g7/FDrTȄs B|Cdr&҄X&8)ط|P ]fg>=s H .^RWwav/| ?>ޥ /_k__1MSuR. t>q-G>}7IQ}V>k 9Yqe6TT&93őüLNgN9YtJ Ut1\T7d2!^Em("DMaHdn9C wY7ɰqÜJ&skTg&ZJtԷ:mw.Wn,t Pbc"Y*ߞ;>yb*xtQ7Ӂɶk©MVu]}pӂt/}ͽ|ֿ{;.7] }=o?9{W[[x|rx;_W֗|sy䕲~ەOIcY[m KxkYԍl131w:bʺ΍Tbţr:QܔF\nv#8.tL5_(*qDT>p}sNKn|xq6%N%yVz&%$414xQ4,:*$CYd$̞yTt\ШD$XM fM`m,Umpc(qQ@hIEBn|ބGgsQZ&)@vF=;;Σu*)k\%GlUGM%BNcs\T(JdB-iS/r;)*ϣK$,d,MR3 Qo fAAL{NZytuR>om2lfey;UrIa3JRTbʚ@ĂFM䁛~3IAk7sͩt.N#ɇ=;HTZqTwD Kd|QN%-ii= *UQsk;k,y(i:="qieiU6KDU*ZTY(ڄܠTR3Y$4OKJQɄ`&ycXmU3QTBK*U&m3j-K};Y/Ld;͞{gkJw,?ď^wh}vav_UJO׿K>nܸqz ^rBrҥws?/?c-^ZV)/hB1yHqJFɲoSYKss,|YDvN$6TPTStn @VG.vMXgf9,0$#K(Xd(J`*dncp3G&9gNhti;̋"T<q*qcEr*YJJz `1Y$PS-X9LX E(o<'su;LQ K&Pީ NE noU(3igZ@UW !9bM \MlvƂC`.XXg'N%5wc2(g ط˥f8pSk&)Fep2(IUV~`,Tf-wzF:::b;}9F;{_/Gׇ//n}\?O>#߻??~Ý|}ŧ⁽>Ӿ,xvaߣ_?u??/}W77?_ǟɟɟ=н%w4'sHJVX0 ? jc*8D;empU &Bs糞RzS=;@ju<*}Qm0笍,Ϻ:n{r~zZF!FG_jri|c+ўEoFm2 #1UAHQXeZҘ5:FHa33O <.,% DlƲazl"<;©|۷,F%u*g9BҪdUxDݏY4ctn7Wקs$T y 3c H*΢Srs7'}$JV]a3 Qg=&}<ɺ{v.$c2VFV% NLn75PRcJҵ~.gdfk"G$[!'[O|P IΏM+ϖds;=#W<;t_ܸ|x^iI׺VGi߆Gy@;[H?*8F;[~>k>~o}?qz}yo7|y?ŧů}[Yݽ;{c?cٟW_;OR>C|+??|K_ҷ-o{}woxNjŪUB+J (ozR32_\8MM%Qd֣\$Ohyv$NLՉ d=7h\_i^Dž vTHmNLYkYNna6Ze]((E EYbQJT*J;xB&6(QsJJR 0,D={<)kN|[Y:Z;:"!U!DrN5g͓iq}䞆`%7ͱ`ueBrrÐUylgHQш͓R)ѣ^i)Y&&MV%Gu{z:jHpIzzd:\Tx?)ST6MlJU0|VF7Tii<ˌd}:;UeQRTpy;{0$EW\a3.Md;:ngsIޘ!Yx2Iv[vs*H$s- g,,u8lP0B}5X.qʺձIS%s;QJtlUԒbLx\TMO|?摏ǽCE}\y{hw|I#G/Lw3@֓W?_9/O>צway~/p<K??{Ba~E_EJVJݼyo?;=,%RDUB$V%1/۾u*kY% C\hx4wRtb\5 I%ƴ8 SitB}ty0~eBa \pwo;_IOm!`u',U`U.tbU,ZԨ4'zrXݚNE)jȲ2% T%mBceqKǾ](QQ+d$0dUf?-޽! :$j`Lu˝B2j,L2upg |>_~w~ 糿/>}Oo _s/O#y&{}y9rЗM ozb^m}7M^ >/߸pa~/W?_לz;AAdBF8gr|{{Xyp硙΄LYnD|\UA6nYeVe#a3Ĭ1+)Ytu<dsq٨Ԩ^9bĄR6v:hGY&&Jy\(*M2s*&EEtԲnqLRTW!  aA USI7*gwаqΗqR&ToI;X7%s曕 ǞG9՛, r7hڮHERs{Ը IU[s7$I6^m+:ĝN%_T$$΃w،JP(JI:p3]gWrQV֣m2dݴv37.ݼ<)LȢXBa(Fz{ ,6SO kFcTcO곺ʋ1Vd.7/|?LZ*: BT同V!I\>%S߄@])pBbb" &;ܜFoaRoϺ3R36*VIudͩtt&S@YGV\P=Jy](|X̜ӫ%qX6ڳƬ7j,TEQCk[S1"ˁ*7Д5ߗxv&=4=w?<3L10A۵|`gF08@E۷0c}a mTprڳHoanm2Z{km LUYZ̭J)+0騑2aŲ4guq3IpW)p#?9ۛS|g:C79S27~ΚtYql]Л0u8`1yb{dcbySX|:eFRžcQ$N]Y:niœu(ؗ*[΃; :t%7ŞLJQRU<8PJ E 'N**#Yp+㥤VCԒ ɥm*h1~QQ)Uy%#8vZ9QIJzf7OlqƬQP,(D$3IKN'²`itR, PERB]jN%.1nN}2D .txg }33>oL~uol?z@^oapk .6T/oTzs;>Ÿ?\>WSd9JK*I$!vhTE*,hji0|1V%ig&Mpק&\eŒIY[:*|E bsҷ}$]#xVvMF-yg1)3[8d};F !+ E]PdS*$V: V!-)TXv4fUiŜ E:^ipOsƬ[:VJ(:Ui%WYH6*QTY^3UsTŞJ⎑E-D7'!M>MpTEzvGʹ4l4&SMԥFXPz2ghY\ IA~Zcޚ)kݴ2*U4<Uu%(dfÌ?͉ol|sܭWXd9Ecw{O|x؍Rԧe*ȷ  dCfJP,)³>>M"eBQ~zX :$ԩThUXBQˁ [S9eᔍ,8)^3*Xfi=S„D2,%n R곶*/L`Pnf, H*CV눧s{[S61\ž;"fEm97ytNJ׷KgqS6C2([d\8İ~S{֔ޣ/}?n>>{;~}[_q =#ׯOz{O~}/|w!?#~[ǮxǾ[~#>_wa޿<ڪwFd "4R8R'/oVFKU$" ; 3ߔ*NJ+欹.6*;~]9dM澛Ssw4w(6Z:<&ǰ9k@*:RS6|Im1V5qMN'5{ )k#Ytk;7*i,(AU4:jIs߰2afV;bAa^N}=]feu,&%JJYm޿9K *Ŀ@!95 3̕vr3-˕nT* b[8&WX:*,s$\>@έ X055$,UK}CUI*VRD7&븲>YtO BRa9 1)f1<=, 2iJ7s2BT~HQ6Z%ǂcּCބm2(ӆVnfr-$VUکhUr:9 X}70YMYUMFP BQ>iRE`^ꀂ|WڳsB ⸠X3j\%Ӫc2|*Icd2jy,M7b1e!}Q&pCFUz&Z-ˉo#7$TNݳ33pgٙ~סk>_g.ww@ _]|꣇/{57K_?~G;~|ĕ+eoS_avx?}k{챪$i!D!HJPcқX -7/BUщ\qeB9JJS@ie}Ȋ-!1K<)dQw%+6CȪ*>ur f;<*XZ̅/x<(44Z*9RQddEC22e[?f=&ݘ{ַ&$' YkYJT`9͐LjM'B9K[U$Z,b` ,1mpO+)jb,ִhUoϝ4~aBHJjdgo7F߻ˏz-? q{ǧ7_kC맧OOy;;<jKi4T8Ɗճ>[+G6nuTCjziB\i%%7.L\G5C2X|Qǡ$[߾Yo|ƪZ)iƌk7o| s,z&U`^#ߦ*9C *UD£;RϚa%PWK(ɩ\A;\Д/*mU)NIKsQsVNTU#qgٚҝtvavV=cy%HDT;1Ywr+k>,CQ{v҂ӹLёc?3aennItF%bUQ8qhnmt:Z5 Q`zeU(Fp9Rz|QsқP4^B%ooO,4`(Ȳ#w:,zq<$M=e}1F&X̉a>nЬ0&SH:̑%]j^[k棹[4g fH J(xnܬDo#IeV!Z X7%,M8)i!*(!NஏK^hd)$ WhnŲIvzȚ5ZumuLve9+%1Q˒I.tlTZ Ԫة\k,je|,MU$L)gGsǩB's+EA(OxkO|Q+Wǂ'Ihѩ̲I.`<͘5&(Ic2ꁛOoe9nYkYa"lUds|m]2Vzb~bٷszNdS2pথ Zw̹ME9L()2ީ|q:Yy/v`ih8!v7fT$QRŮEՒ=7OI7:.ג fgڳ~< ʄP$UCpFF%P M#J}g03QԨT*Vv,RT YQiͱouoO W7=m8ݗ{Y>/9_Sߞ@*-e̝J |VNX,GS?DSA,MxH%ԥ c2XV!%),Gsg& *\7AUX3IB{d|\nF;B3&sQ$A5LfRm|#$ɜDw}X&B^"DРTb$w:;Ճ{v>L$4Pc)$\VOx曳Є8RBU:'9iZt&Dtmݴ4aaypJÎ>+K jS߰'V&C +K`YiE *X*$;5D$ymE4'<BMO˅ ZqqZ!jӔfn7$cp@(QQ7Qs/Yݜ7Ẋnbxz =1JhsV bj&y2'ati% nN7;ǡMHUFRqAU pܢ 2Ӟ!ka*B Lzoz==w6{)Ko5xOǯp4;;oGٿ`}1z]~lutE9'Ւ )kf˜Ũ|CLpzeL!iwD 1Z`I$$3Z :*S̟lm0S2S9)䞝%};ߞ;.[?nH;987=*!9ѷ;pڪI)uJ 2b3/*F:em0?]q}Y"4CF(M$#+ خ u,jfκV1$S EtsВjBmNv<ŢPքf亅v>hǕ@Db&Y;K6O.aKnmɥ$ w ƬƷ*p8^"f`ggzN 1-|Q,ŜIרQ7j!y& %YYRfUXKS2RFv8pU)Hswc2\^otZ9OU\לrgw*i- EVXn6q*A.Wad$U U0_$YpRT&n 8ׇiNo[$4Xޅ ih3g <:cQSekbk"ɉ'\r4w:ܘQT! dnN=J:{%Rn6Зf:pS#ˆy_4nå N\kf?\"t>-dNeYSyH&dT6jFB@I p*;b$5%ai}J΄Nǩ(JsA)HB2T6&s7g#Vӗso%s=/y?A}+>핿: xvNex`w?ѿIŽ]EBΡQnRUY$H8&ӫtrzVXZ{ibFBQs7{g~ٚ߹tů}']3t]_xco3' x~Ex`w>Aw>tD7va~++?????׽ޗwx7pf{\dRsHUTI*@ZF BI}7eb _Ų2b1\^e&Ʌ{s,I./U*Q}RHJ\djLfZ:D7YQT%hX NI 2MYx2dUGAYQ.f_„PԁZ5.=7o= 9/=1Yݙ R'&'EoK͸L6Ppmggfϳճ3i~4//;Y~nO~ݏn/Kx緞jD|i"xܻ; J)m4M44|{=c=B0yTA DaL#| Qj(xwS(hT:h;rU9*x.|L\[JRR k|[y`H&)TjTb в4:2D @C+`+*-u8c2ZfY17hH4aZ<&:XjTFQd7%q%~a*{BQKR&8yNѢ0F>V% Q)Dd"ysd'dQ݉ \SKTSIp3Dc1fe1sV6٪ĂV% d*6s\gaҌW)jgr.\HJIJ (hzNVå{vNcQ<'&+NC#3ކd*BQ 8$Ӏ KR&9${΄M"ob3 n0m(꾛9'TRV::ޞМNݕvp*,Ih,LIױQyH6ޙC6h:Y0I %=58ׇw +fVfY%,lRen*|Vip}Wki6юii=W)e%*q1'ceCUϭtkσ*. [ς>,ιV?g>͞{gkJї>S3_3W_|@yꉛ`o>q {3>y?Z#^{/bxj>5S;}k/_4 K_z[x^CE!SҲXY(@Ԙ0*W K(+XZϻYNGv*:pSč,\jeߣSUi ,t1e),N|{#gb6*|{@|~I2ycdz[sD%f<](JKZ(E=bPc-'6'`HѱձTİO 3G$E= ߋ*+ATTHޞ:Qy)}G}3uwq܅7?@=s|仿}O{Fk r|6+3^xɛ޵闿?}o4c޻;XJdz7_O?g)k>_x\]z7g >eW?s|g}ŧ⁽>Ӿ,n~[c=\c^};/ч}؇kuӶ/x 7`<ڪw %UDneURd}VK5fz%;s6&3lrbN%t\7OhgWYpSi, )kr"$nZ0'CƯ蠊 BT 9元,peB(,5(#hsA 5deUBI }\w'=ޜzIZ҄Vye$Es'fƸYu:ZYŬ|(fQF'&a`PoePp*jJ bP(jk77*-tຈ&-]Io5{'B&#k&-2F4mt)񗚱EV:vJSC\}4*ԍBum#B= nʚo%pɇԫ8d=,z#ż3hz{dRA,Lqe}!rtkhF%Ξٷ3J:cΣMhUb6mpK|VsIǬN[1kh7JQ3r]*.WˢV, $%KV&@ Pae`ci#k>r*qZLb,N%+o As+{no'-rЩ*u};/Lh0:h 8wOAoC/={w|GO_~_:_| =?Շỽ~{ 3>?W?~ϼU?Ͼ޵ws_~g>xG|GggggggG?^t#_(`_$8_~'o,${9Wr3v7цoݱokdj+N-ii˜5 T.>.Ǝ@;r;YEdc(Ul]Y!.o=ԟEtR;ZbȆ 2IQ .DFY8VS$/ D ܋6х!UV'M sQs|(f UR3*-LhMbJ$s{Ʉ^Ey޳s$eĢdz|V O}˹̀1)D5*J48uL44J Z 9mc7ʼnoNWv6dQ_i,8٩, V!.L/LU6YߜZytS2+W&C2ǡe 0V|;X4˕4XRAe`zLvegմ zc2؆*н u{$v:;,6a.^jF%Wݔ6hBroKR%^+bFIKvY+I!;#4]ҐuCȺTߎQ\^BCTŴI&d;2d]V5 9I Q;Vc߾iqgٞ߁P}~ˏ~?飵?'4}O<{{3Ro<h.B1; yw >c?E{W_ɷ va> 8q,զifl6wx~ӡ9uHBnDyB6-nW;xS ,JR0ILVRVD ecR#J!|V<@r[tT:5A#qKҍE:d}m;Y$%IcNvZƬːĄZeYhvBL&M.7۹-fCY5P&g{sӯ5r4vAYp d0W!r-ㄩBUNt۬5@XzNаx:07*k(KwVCaw.*ϕm23~,طdB"!O|㋚xp(JCQ@itZ&΍gT&nV }(0e~[svY#ƌ.4=Ț r*4g*Ţ8@֩<^8fQύkr&\MrncT$33r!Ҕ*}Tݮ O'}uRT0h<3  ]l:%neXUA[ʙRVǙg!!|Q3ͱIЩ̓BDXEUnFI+ n~ߎ|qwL QOJ!d6Z,jtt*_nBF\u,\RTZws(("'DI d yaÕn v^G 98tXNF JwόYm${1xvWgwG xdG^z?x{~_w_~/Νz3v}}Rw~+o[I!k}o= _;~~G>J!g~VSo ި:l{tހfUmIsp;ic-۲:1l|evW*wʏ؏?GGG._]|DxoՓ{L(&C$IU(dwt0#ǓL31l DNGbmܙ`UvV*6X3*'*Y!UpʣBATE1B~nzݒC2JݞN% ŪLUWPL@cŢ}6 *8dh}UN|t*qAXL"5d-l&:& FO_|E2_COE>F% 76+fjU̍BQ^EV!;jhb&8 e/44֌T NuDI<&T \8QQ c֜grN<>NBæ1i SmΏYFʺo!m/6*L8%4*5CQ}2$UU z*&£],PJfeg =BP6Mpm$DFU!o@p~r[k(8eCjf@ӱ R%*d2z@k(c%h΢KZ²3 BkÌ\&B:1N((褬`Nr RV!+l飝Px?bzm8dMf~9ӑvP@@GqYtsбvz3dL:TƢ S)kUݎgw5{I4y{wmDC!~C Ƌ>z)/|髾ׯ'Ϊr|~׋_¯?+A.Ow[?>Q-Knn67^G/c?Џ'v0e7ipav}SJ:w]z}?÷oRCP* Z+JIb[nDcRȊ3c[\Vo'Xp\ Un)L t^hzr Ef Fe,8m2C2cQ:1unYU^S:y jc, CQy"7 SRQ@MB4d<)Sj(J]nwt`TM2'łcTn Ut-@Cd}QK[[!|C4SypRxOطJi(Jx갰aVX|7:L0dd@#t:* EU.̨4s'&\'ɉo|8v17b)U)jn&6(vLB)C1RmcR\U e#AfNBE 8'e(,Z*}V1<3sO_'}{c=z q|];~[ %Z?a!U~}WO/#_O/>6VN?ˮw/RBe/:_=BQOOyK^Om=ڗBuva>:\pዿ7~g}苾+ꫬ??--Y{_O^fMJVd/ګm_v-ɀ<ųX o*YȉP fHf,Uhyqy$u/ +ƂJv0@$Y9!㺟e0~cҩRoh N!8Sϊ+g:*YQC^V%sT@ny|5S U~ ^ihCBY&̬? iljCw;NJ)R**A"27yc%EY37:ƩSA} NЩ0XS7l85~~'B+(;&bM2< dh${lgևص;3!`Y*(7SG Kcڨ nq*oqPR1DP㘵aGJb Ƣі*[,)DQ9Wťs;+ 3fthk}֥J YsB6UXwamRMpzMQ3UBqESXCTĢ.[u`fB2 TY$>k ŕ(7TV'd_!ph\Z)G7qƢ8JnJR 4QI:MMlZ6bO'觾LM/ j4g=BJ^uѷu~+ .R>J1Z!*}#tjs?>o~ͿOqlsz~woz_o۷osP/o?wȍOy٧(!/~yЯc_r?|7$o·?_ b?Ewh^_$ڔͻ}?IvaT,+WLS!g|g}=/nd66dx֤K#u7ljzPK*l7:ڋvCqh Uȵo&t*tI}oYZity..nhtDQSLJY9Chx uz;BVgͨ%]gW۳L,G $e^i$$6ZC ڛ=BBb"* ]R@19tf E!Ѝ~2$îKR&ߜ6de0upabH8U0~n}5W!ĝ3 m 7:ZUP^gcS*Hʺ eFnKU!d|B=;JYW Y^Ȋ*~;:-nၷHX*:} fJ3̍q'6jJSC>Raz&,LHj׆ 9ը,8Ut +87ZlVNL (Tr y4U>s'3^ hs;<w/>?⋋WD7|k>;~_W DM~[>WY_Wj!D=;wEJӕ)u{-_B?NB{oo^g޿K>kg_B^ oĈvc7M_ߟN_%_roUǾm^pѧuWOtd!O|%BQfu!߬JPڨ'3qa<*_ ;fszEyY7dN_J4SmrYǢ"fY+V`^dž=- qGv:v* Y*-W@ږvdQa+YOL.WYl0s; ,Pҍq*|ފiq T蓹YLpP MThCin!EP*d* T)/b|d9~aҎڭϚ}Q 扎3s1m2p0dAV97a/Q5 VƋD@BߐՑoxRɪ$>LJ3EcAÐ5;ONtXhnTVeN1P8&͏R1X8T}ˬ},7Ij\-T`Z?#m6Uibjut;IRT -}27ǎ &#fDDihNcr*EB6?3v*+Ik0SPìJ}g*d `*A̐D*UJYB~3,x/k6Оe-wuOZ`G쭄[ J{vtL׳sO\1͐tqB3O,&XL elAV6ڙlE$t2{? ::_'pg&n5QN%d1Ve6.g*,$NVI{Ҙ5G\UtK;†N(i- ӑ͇wvlGNupNTEX@d#?r%Ppf|R"\'`6X,DbQ'k-8491aSyzDžNRSߴ:7}`>򭆢I}ֹf{'H;ǁ Bũ*L$H@*(}HI>LJ hÐ5 :Zr nxMLTTiR&J~&3~\RYCQRR(jC$TYq*'yȷJSQiHFz\gcVgqf! "B(,RZ%J2*[]hz1KOX8t3<30o-EHE4}b6˓5!di;" Y x%W YIYʢJ48BYdE63qN#iIdYL(UYZj].81Uh̀V!m2B)8wϊ*&Zֽ jZY&(l웾-Ot,S3WPh(Z/P!铱muYY[dȭkJg|VcQYtclC-^0;A,hڐ:7aEEI!}1u-˒ǡD UȳJS @>MTIBR> g}DwFLf g0{͐+ϚߓlO0-U!;H&E!:*yrj}RT)XaFĦ_|jBO@)o,LN mMld0UEY':R$pgփwt+ԄNGH3˛E<(hofYo !LNu$@ڭ~ ::OWPҐzyLz*:E>k4͏uoʑ s tPT f)sl䒕Xa>m$I!bQnDBSps,j ํ|PVT Ѩt4*qq^phƤY4M/h07*[ QiYlۥN+ӕb ٴ:]n7/9?+ ~rL꼭 CS<>fO1wWp^~;1RJ v5MӶm۶ι9|ZMR<=aj7JMp!Xb]6GhĢ4qBU 3AABBɔ*':Phіs 6qh_6Ъ&HJu ǾϸnÛX+0N>VGOș7Q`ҩ|;L3,T( Zg j$U!ei, Ѭ>*7:5J*|CRօK{gwNLHYQ7n-X [L-EX fub8@B @TpGq\~ݥor2z!x'a:[ULBhIZRtB΢[G77@9kB*Y쳞8a  c} K"`X*Dg,LyPV%._G.C?a%}l*#bpP??m!Fm! d ֱo8:Uc$;%qt?wMcQx3- 톟JXugcPPTMvnBbzaFfcpFX0X&*m!#|rRaz6t`7lP'8XJY<2ί/UNtXEۙ⎐>y2UN'7pmN|Ӛ@!ذdўV0&Z,vT`N3Xp(*EŦfjBp4v,r ,gEBB,U!UhbA~gلUDXajPUNeXGi5Y-+c oоO֪2#s{)(2$ß cQRV dӤOvE-;; n}l|c> gL0f@(-vs[3{8UŜ(|^s\jUHT*~*̬E {nHD.E)N! Jq"کRQ Lt4Pbάش**1+`O&W#.tluLQ A:8,| kϚ}ybEķJ )tBT!v E*D,xg>ۦU@P/if`ICo>Y̵VA!U"H}Qhd`E]9QT Йo`TpzJb熩`ɭwGc\'CUZ̫,f_it`g}rό׆*8;k4d=d VOE9>k-IY Y sy ?l;  y5*Kk)Un*Z QIb-TaLJ{vR7w`"Y'Nđ*$'F:5 HS50Y[dJ!+x&e&٩BTtlj>+6䐤uϟ΍oUbMߝ!knhuXBs8Lf tsCT Q8HX0"kIr3PB{M; 6u,E*islb?~)n ˩o]Xԅ2zcҩҎ)V*94 M=7xrXv's&s#Y>d@Ţ'Q@ԽfʉJ\ ^p31)ĐufNcmc̄LGKTO:7t*I!ъ*dǮEIl:M'6Y; T' h\M$t:KIOcM@ JdQb*':"IhjTZڑ}ҭJJ{};13a-oe-8b(DlELO$!ïCgw5{~~x;~;;<=2A~3li8#X;eq i&ʵmɄd|T|sddlƬ5͓TaJUƌ'O;v?ֿOA֩ Jup\0Ra4&33aSKWɲwB\n7xI \W̍apbáƲ_ YEBVPCVXPS9悗±Ne)k&YKe 9OL K76ǎᄵSZ%we44>\aJsNuTX ~T!UQ eEQ}4XxLTJ6*T%vP 3Ta gI飥*zdzL7Umϻ1DqBt2x|Md=hzLp*Vq\lJd|Q>i)DRb.ЪT<7Du::-ICʝ݊.BT2@d`*n,U27>T!`| BI* qhy"{\bQd"!s9Ox,k 3!ƢV%Be9R%ˉSɴ*Y̜Dz[9W9&#EUTyHxe>y孹2!ĘtBAK݆7 f/48;ʲZ7R|hQ*Y'&( -O}}[k0hwg$r9vf=:qC͘ŽD@B(I3ﻱ,4>+`& JE\}VVF'-ii%U8W *(R`Ѳt8MyHUIʪ$u:L(7>+ 41bEYǬX-?ey's8NB:prje (Bi(lǝؠBzl=ge'RAn8سC44\6ų40O7il3HB8dfua}gҎJK7.7*}h;Uxhpc$Z"@Js B13Qaaǩห,4lYڟطJ˪Qs-XE&]mdNƖ E}2J_6Z_҇>U?w>|׋oSavXBL&*i( (j8ipJ4jTcQ3XZxEӉGc[YMtXbQ`TP1>,Ona< hSu8-Q9PtVer<**2dG57)U),Ԅ&W8 0T!@ƒ ƢVц(j:Y!s*u<Yǂd f!ĐU̍D{<ʅN% h׾Eq<:1BPNTXo3_Tgٚnݩԩ+Ew>8VP!ԄVjcVKL)}z*RώR1uزxu̵ad=h}7LM !8e垆S߰}74W1YaY찴cf+eD˥c狚bD81A (EEk"EPܛhdN}!C xeb6>kԄ1i~HJXNcQ}TsYoY`FYʥdbAUM2dhMVI:n0T%U9XheHBrϺٻG;Yc`bQBnSP&p!!\7!Yv*qI7]N%4vcP&eT1P@V_^h*/ 9& kK7l\az 2FNvL$ N!EMs); A,llصxs(rkDT@6MUtJfq3X9X,B@ F?ZU qL0dݪts7YXXhu&CS^<Yd8@1~2<ٳ; mo{۫^GciϓB顳x:f! 3w)Nyw =;|GzVh~٬i0a0 w|~19_rw~gXvdRʏ6ɿ2d4xS[JJcQsϩC2oĄw i ysJQhDeZ&Dי nі*EsǢ찎ķ{v$!ɶ:69 ķ eLγ ED<,F*D"سIh۱SOJ"d@v,d&RV%k(@gXИҍTe Ӕ>kldJ<0I k\Ѫ FMOWł/<2̄\D`:WXm~\rJNN7{`JCS)0[ƤA]*Ʃ Eͬ_ݚt*Y,&4 Y AťvWIY-1+Z.GE\KV!,EµoN<(emTnU:VeL2T͵̍EK(jnB4fSPuS>Bz] pǾsCCRUn}}έ?M wlBV% ҪTC7*|luJiu2PnfDñs*;|s2٠EH,8BVxh Ƃ2+n0 ͇6V1+~)r ;?ت4D@[6Ptc͍B!D0;́T0W!ouj=*,}2K__nV͟7n?{1*߿<ы!xҾEϾk(]z鏽}""yx;!J){)p;~~H=ˍtƉ,.GkIV!CҭNT&Z)kz+i~a0Y !&::̇c@:̅nIY'*侥0d57!v:ɔ Ag!}>kRZͱ Te&hulTʄ::RYqƢdez|2twNzNYf:.츎6|sn7ɔ Zp?cVAB **VG#ɩ &!Bz?mtdo S,s Ƴ*Yt`prf$ t:򷉷Ƣ֟r>um$$lt >"$ <*ĐҍC>1<1{cHYAD 8U$4 Nrdc69;mROmw&};yhu~B97.]ǟ~4?av$~|Yçgx{?3 %ŝUJhǜsP:K %UXw[W!o}ȫ>>jt :I膢PTr!Ғ|Q(uvz #/ 0&W'c.ܸnbIQ[648}S[N>NDZ( Y+NG(I&[O-SY+(%@`c"\$4sLguLÖn(6>z ̝psM8 Nd %6q ʩ  IU59>L9T a1`jih"d37CC7bnUZ'{dZR1k1*I酢 f^yÇ}4(dwύYU!ԭ?dB`YSZe,fDNDdݳ|fzU$WY:oĒGR!UnHIMSb M[)Oz`n]l!!!ĄUh&&(ujgI!87uj/jRIcV zάg&EJRba5W7S*fɊ;'΂B\hm6ZR:# UHV! v3ͱN}# JLЩ6*ɰgU*o=h>kVιQI&3D @KȪb, ëГjgSC݅9O},~=59B<xvavanVݖ*,oTqmR2J`u'YDt;;INF% ʍJC֍JWZz-+cQEHqD e=Uh SN[S ,Z}֩!{rLdT$PܨEGM&d4dL3,gu4L.CQ۬+X/(UNBdUY wbL̍ŦkgTj4g=?Iu?ȘQИy&vav9\eP`m PJc y2x2znry]RG=m09&\7zVϢku$o GA*yy:&t*Y(ngY1ő:v:V!(t& p:hQd9djAU3Lt Y7w*'BŽ}J[z&Z4a EU|DI{L@T6ñU>I :DGQe,jJ VKBY/%!̄M2 #߶:Z(`]rOT dlD1@XTŒ@ ;"’18zYt*| 2똚Щ0~gmTskYر,s#Uiq{^6ٳho }+PW|3{ۏD?d;;{SZTǛäT) JYR%YV*|p8X4n̚ s/6ېkTQֳz6$vƩ3BdB6׬e*ZSy醱h%b. I&UƂ$'r=o&:r.+[F+\E{sŦBp6 qH 1dT:5Gh Y#Ԅe3\춍d7ɔ*k D@U*J 7YķTb~{vhTXMl.UZ,}4C< v-:QQ:7~nG du*S2J_{;'/쨱X8C:8c:ʩ טuYt1=7* n2m2 mL&`ihf/0;\0d=emtdSB$S\'U*3&Z5,HUYmB ɜƆMyY( :߿p*Da)ԨFL(h6:IYsDC*ɺZ'rh&t*qSdK& dH,dШte[üAeTA:7~M V&:^[,f(We BXo':έ4TdlcSA"8LGv/_#e䋲/v >Ogw5{';X=7›^zᥗ U7avaѯŰZׄxx_ġ Bԭ?t;<Ozrs=xK& !ZϢa`y<2$2c ']Ebq)D{}\QbfOc9 j! 03~a| IHBYO6dBE*mdZ dzs77̡8>keEHR JPlUTZǑ2> UY.ݨmunDž3YE*q"d՘f$!X;R@wNVBKUt!Zn=j4g=_~>;;|QQ!o uʢBTQ$wMBUNTjU'`$F{*}VZ Z% y\9/ۉf@}2wtZ%O&oyFQK'EäTB[M2X<!UyFTPRb-/e)JcV%n+Ǿnp*( 5u6-IBh-MN\N{n4PnƬ3A2,T%z!h֞ktB6*u&\VJsXNu\ڑɉ,e9L6NtdYp~ώlܳ#!m2V;ŽىJdI2HP,4)Dlj3 yct*9SVuK7j,BzfN~LtQ$)Ӊ $(*OB0Y3)Rc%!؉R+[뭏RYOM2YǢ {vXRADYPX&MB5C&$bQhHSAt/gc{:6c ;悡 Jcҩ㗹Z4D,g=$m|`ߪ(kMM&賾9LBW\X L MIuTǹ 8xQ,FT85Ui-j`ȯ&'3&۬#!]M\EN*xyޘ3]k,Jʩ @IZرQS 6c>Ƶ'O' &txs_g~]B'X)w=Y/s:~?avx… ^g*1?ouwW7/ׯ>BSE4w ߖu9 nd^GBv:3-!D$0@$ģXЩ̮H7cgJ>ݲ7%tkuD -x\3:Zp-j DYd4tD{:ھQvvn5qs& re²8&x7uS443rC2NU[o0Ϣc£UViL OYZeUB&ˏefj-: @Ϛ̩Tз(k6D foT$hR%K%mQ4ho[̑_Sxk\g4*͍&CBnu*-(TJ+ m jTZGUƂSPzn&xh3賚_fƲ>utϢUb+ukia0'u)fp ::JEBe # !O}slwŦ?NGP|v̚FKct4v<&P@ QԳBVo{&{Ƭrx.ulUzx3_4( "e@Wit Q;ltjU$#`v-E=- !rXQEHH9Q ƟfiG /£'ج#!DIqm3ktRXS|2,P5K!Z2 Yi,ՐL:!d"d"pP8-bB:o歎$'与TQn<VDx4tmU1JǾ5/08LfnYAeR=KFZ¹|ώ&?oo-¯c#Ïcgoq2<܅SA{B C};\+_ʓ'{ x{?_kO}h_7ByKi=!>hLe3LM[϶IS١ 1ёvXx)ܩTJ`̪Q e&}jO$< d1Kݞʇ٘湩BQ Kӣ]LG!Đ"\:=]4rYW!@WĂhɬz7f!`,4D+tW$MuBmB2g{ODe=~ 땤T <B"O Yt́/Z̈́\lʾtkejL IFZ4Pn$1Y7:E*Tҍ2a>Ր5KdS.4Yݪģz< /**IL 7,w"6ډ`T!efz`/BdTAZ@^tDV%|]f%K@fӦ+%J>XCAҘ̘آ$Y\NW'0c3WH h\cBmAS,Xa JEH~Ŧ$0*T 01#jN>]c$U^DdWߚ7~2L??{/}|}|GGGuvṃxCןw׋UO*y Y}y! !Dq{'G]RcUэooE;5w].b@Ä3Z|Qujp,*TFdY`%Ig5$3fU6*q9NH*`aG-p*׆z?r1i\LPhT< D* cQgŬ8yRVʄV-RKg:lb< MA8Qd)QyLFCyd) 6n1YuI#P2$,SBnYtCQJhCQJdyt5:άW@+VG\a0B3,qBQ%b3(P8KND85AKb]lg:ARcgԄJ:NRDm0OuH`HFcaJ,:]5NCXT Wz Etw7ѢRT9vJѨTqePTt*oX8W HGOqiz|&͇ܶI{R!!̝7F*t:.6.'ux>?;|??w~~~?S?gwOo?m}{~;|Ks ( ~mݯkb~u*Ĺl'ƣs*G6)v1Fvl@!f^P6Tʄc֛9tkSЪ4fmffB*xېª`bªN64*qԄaw[-Ba3`3 +(&U~SǬO}kTmX(l-Uj5kU3R˘;5ar8v@,V' EW{^>{>Uox}7a~z x0 ַ>/ϿW c:x1$pNYP8Pc1*n܈&3PS&&0ju\4g ƢPA_ls͢ .BPԾZA։VsAґD>k)MB&E3X.G hg {bmUbnwZ( p:ypCSUiLbBl9L L舒̍ Fz4vc֍B%)~j(m ~fBk"I77~ /^M$̄u&Z=UdOe=h.WX&Ӫt#KCҙbӳ-pHad,F%JNNJZ ;^CaBg'jtd/1/ON VcT0ydE-B;f=dBB̍P.xc$m>T, !c,D8Ձg}7\n7ʾJ?H87f;q-qs&ǷYS}7( e upG$e1 F1+4s#DGx}knEYJ-f% %$8 f:vsԩUkMM ۗ Ql=mk)5YO.e8JPZF;:\B%/ ŇK ޳f=KYl+AtcWdkĹݵZnc:?y0NBxQ|xq=-/濼z8BNkޗ|FXl\xᅹ+3ҭK@CyHQ84dٵ!RIn8d63f: SI-l*aQEPek%N9Ș1H j%I,`A(y1R{ ` 3 WJ|ơCC1 j!KQ=4@j%u`0]AmMN # SP (+ 0AYJjuLj4|p=uciHQ2 >u/)\[BƓ-#B`42RT$3# Rj̖ukYthk9CIW0 Ij+7rq>`PC++*\IΊ:a :/ShWp]:6ZfE uRΓ-4̸C ei9%~Llta.ʚP]+NI熗Wf؃\BƲ#^2[Xugm-ZjGWtk<<ӄڱ2#؏zVl cc*m u +jC1ŒChnAx:ҚP5@?oL1BskI.,28¨ k!KS0S$ 7An];q#ʀ̬5u.^Y\+mӘSGgiW>+[kp8!ƇSoGR~"9/TMj|UE迎M*{|ƶďɃxdzsn#[-S-5<>sx?|?O.Z9~籅-#VP!>[EY%T MO;UndyQaJv.JN^R1%BHRTpQt̜'>$,ӦJq 3$8OJjsÛ*]hF/^֮31ڱy#3FTVȍB"4$nLƕrce]ΘR=i,j8@1|iQXJ; qݗZIm EA[,K8 ]PJmS%5F 7RfBB#:u@:/! 4^PdhQAzՃqUKלxMs }[!+rՄ-2Drmٲ6D9rWEL;Z2 GG:%"X[%$JPTL Q@u:F1' Γq' %INWUhRh9Ҧ] 5@͵ʢҗYG Û*qPqp#8$.k*QRb8jOKVGUSfM=͸ėb 06!> Ѳm>c&afX%SɲncD@̱M=O B)2hi02W  r0STK _ ݏ!='Ov;FB6 _)_˚ܿI=@KLl0>w ou፳>6}?SNNyϛOMяrխ7 $Ύjͅ^h!<bdݥCb_:n#'=wh`v[o5|]vO_ݢ_ė8kh`vG'7_>s2[ ׹̂ŸN''Jj.%IP,c YO;FԄ f+\'1B <$|Zljz݀P5.IU(hMiY,@SQ23Z]#Bef=r\QZ&8,kځ+mi xHIWٶ!ڑ2ӎGZkĊ FB,xj=1Ѽ[> 3 uL0#JfU5"7&HhO] e*s/>:=uS썣c*mk9N] 7dɩոrnjBȢ!˄P1)2@RE2 pJ`kByce֓!ؙ2iK%и ªQun pXjy^%B">aCi|Y]BXV@@CI\i٘JAsh[-,+3 T1bCXUJsu#fd$7f@$!Da9tf\kG B:P~ YmDSEؼf=5&zy0QsZh&#y0`bWd+eln lSN짷_ړ_?ʟ9Yԕm0a!(eDMlh|#ԞH0:ٯ/spQG[ ik1yR8ƈSO n Bun9t55d)+*Γ$ >76"ϳqBᨪ3 8!.˖ԕDɈIB5Dpȸv=O֒DYr Wq Gdb=pQ d8L@x &9ZO(#q5q)׃xUԦ\ I8ԅj2庣eu_Wjiɉ 'GUZZ,- ]N`I4] ]ˍe2i+rM.`ã(6kioO:Uf [k܀bPE,'t:{ʵ6\8U%O'>ŝFa9^Y&KsJ<;F)*ὲYi5d–B9#k-S;Fτve@(GO׌ImPڱJɺn冷+UNeHQgEJ?r0]#ZZB#T&:V6lYO c|A0FmSQsyl[z~C?d_ǎ}60BcLZ/FLu^Z-<7Z;3_uN k_*Yo}g}^,ve{jugp;n{g#n7 ?ro Va/֕1D"c(*Z;U*(L# gy^zOf]x(6P[n."#(@n Rp] 3$I\C@BDP@GZv 4ɍ :B(`(6+', 4W R"kvL(`iƍv4<>6:/EHrq) Yv-O %K10!Sq*Or&{ Y@2NA/Y]#;FS$!F|&\B'M8 8O &A\]ڱQ K jmc8`vVҲpeDƌ /)cS2`ơId/)m#) ^ZeZ;ʈgUZ^µ1D}\ "Vtkj^WလVicL:G]7D9\Tr3ff՚#J+Lu% *<}>Y`\A_na3 6vfW2eF(wk9'?քɲWZH&tL i_XV%\}Kf SP+ǚ*1$SfjBͫUpU8Va)˔ .m*㌺;=*Ѽ:II-'P% ev0ښ(ӚP!hJ|5օ] [O I]V6lYO c|4_m}is.ޜlPJ]hG>o=QwGUc0<շcf z$I960BCn}9u{LyQivB'm-'onDimhiGB1"x[GB!q uںPpYl  U hU~NmMбF8Oc(s\ h,B8I]aǾ.ʑ[ăC@@b?8&7c9BxJ*M+=Mer =ikiPDRJP҉{2RhYUaB5q *Z]gVG|qО@ɥp ufV[9ę5u,uL56MZ:^XQ=)38$eb=Iv'h#.*P\Ẵ<> 3Hǚe:\㹶YMi$EJTY#iiwf՘JSv1ꌣm$ouӊaɬCtlmx DPgI1%m#2jm 1JBhv}fpԄJJ::]Jnj$$uKFhY^ĵTvĔk08(YAQ(-_^Wf0sU(UfRfU--%ce-ϺuQLJ@ZHwbˆeu(wi(򜰙adWdùyujU`+__:m-B7Z\o޸ t?Aʥ=>wfo. Pd_ul~Я{`ԣ5fU /,S'QͫeٛiMSf>Ҳdy d26 "(Hf.ҲmtisUafV5vBii9X/ZA>Q9kCH( N彲0R ڕвk)@c:@zd1$o餴<*˶35u)3 .Tx(CVB-ǂx¬$ş $y'd$ux %Wi@hFڂ.Bӌ IQP)*y$B'p2c<+ҲvteY@4&8qCiQ O %;:"tZ֩2Ĺ{0‚ Bm#*BtYPaWr-:)3"` ]#R;F)B(69u#)3`5iaiOaZO*qO BF|#)ze9:9 3ڱq5B8Դu%]# TKp dxqЍt զJq A+?NK;iWYy5b/k[QSU2VUu  B\Paԕ\`ߗl іQ ?fOkw>`Nּ' q,p[fZO 8I],u*\דMK`ׅk\3ll|X nS"[#8e"B(BHffhrB ~ݯ?gnW~mK闞|Zt3:Wcw !@vy^0G_?>bOBb+o#/0Z7\phRⵧ-LU?01 !pC*38A]os@nQ28JM(xN ^TICцPUe1A^&Ԍjt8Q:Fp!A7(5'rp<S9uPY[{ʈu$ % ӳ R@_ 0SlJҮT9*S@+J2a0VFv VՉ"(SDa(֓eE}pj1-#9uUUH{^m!K-UINp(-(iKch]!`A\@"OBaɌvidJ-!\Y7>`e#zRZP[oY#1cDMs@\aZG5 FRddԂ='AZCx쵞\8ue 12] Wtk5( 3}SEN8@mZ(j:iWBSɄN$3*k0"^B(/.ڌpIJh8\RM pLjymZZvG02-Sìj*x R#*QF]i9GW䵮34Rf:ZO 1w9u=lȲcDJ튼6^S,#e$P#Eܐrƕ&Kɬr ӲN#)';uI_7D)#TOZsh 6lYS|2SzW_}A~]׳h|͝N礓NZ=?>lpҥ.엞?qCd [nc?7uA$<?N<ĩk`9s&ϟGOYgV,_4fZe;jŭmִc 1ԭ?wyU*@u,l J'-3AmB-SA5cIޱ5<(bݰ1quBvLe =Qt}Γ -@ia\aFR;RF|iYlaTRˉw[OqΓiYed MNVR7V* 5m#8 Iš0<g@Wmd67":Dd)0[zO cω ~Y.eą !)PpYOBA#ʢ"MmQ>%SD&sq;9kHd 埘x?>g}{ߙJWDJK߹^7y;mA@󆋎ƃw;삿ojͅ^qNֲ/͡4f8qޓ3=Sf'm8vʔS^W%ufR;CF&Ďm QfJA~RvpMSSvHi:OB1N`:H@rbj-˄ҎZ@8qQYU(- U3cxI%*l!Bᢒ2ʘO܈P.`Kj1B#$y2BS !T:V: r2tˆk8u’iI{eYR 7͡5\;Z*{M-Sf'Γ*ףE?NuѮڱP/1B ;=hS7t[:q+GF]]-SAmv]lsi^K r⠙3ѳo:s}gj=rdk!T{7z󙩧3nz^!]K:n@+X~k7?|mx>iW~Γq!fu>ࡴ U! ## =Em#(YBR[8ƉKfixGrPs/ƓeՖE)kAA;ֲ5${rIqBZZT> 9:婲LP6CQErCny "--eK'ʱ ܙiiɰr=2m]![mޛ1Lsq5RG 3.`X| # B0þk%# SffRf ȷά8uuiε X;6R C eEJ8Hfp@cʎpϺccE6" #TbA8 }`$o4tdVFGJL(s˴tk9dJZq:ZjOF]P)3=iQg\TR|/F2AݴeKKB<˶U# "YY --wLO;;̖ 8I/Ɠ Q`ڭqMg8P' 0"ˆPm-Ǯ&ܸ)UiiOs#Jǫ@dNuBaI-َJɭIfBQ{EQz.P֎Gfـv+#\2S:aAcM@ypJWUL]uM{n#H gu﷾|oy./=Ҁt勖|f׸,Mz0<NuQ斻@fsFoG8l vsuY* EHnD,, BazE)quv]-Zָ iJaA?uB!`(Btʱ2piGhB媪KJ|J &v&$6c}I^zXOs1SqIOrBU*TZ<=I^PďÞ0̖֔RB\ ffc:5A!KFN \:0T ↋JL20SZ[ׅ::Wut#*ė e2IC]%qejyQ+raʢ։5$ʢ!J:0Bey #V FkĢNϊNM; -S}]*X 50Tio[;ʑ%enm*i$ ω3(;YP3Tuzl`[#Vb}&s=y.l7"ȖNT*{챙tøE]v.E|Nϥn_瞱 "HD_____f1>0nOxC_B?xE;~bnF~|׍ć]{^B-\>B=hW+uXy XZYq c1B$nB%`5"c=m*t2JΤJu QtUɎ)7ᒺPʲzr@aHI*+ OqSzE1S=AIjj#1 GM Uô}w>1Jj}-oD[q0+2CoNJ[uфҬWt)R>Xwؐ%6ttVO_[O`&cOC_ ,š/0ecDHS0 >yRX>ucM2GJM]q@EqXѩ U:̶T2F(,с1bȆfO-e] {b O $_\eDAl@?f̌SGQB QP,Б2zRzy Q NP=Q=ɍȺy3#ʮAݗp ϮO%v, CUV[Ve]23cyE2ۛ=+3Hͅ8L9&Qi-*\7u"A ʴZ=Y YYA\̊n*%a_#RJ~ڱ `*t-((ӂn-aF;ƉB_psZZrB =?'>/D"[%1>\~oWsuoңvxK>2;.m:zk]\xlE^O pkQ㺰c#$@BtH.!4RT(Pc`ԾݠUʲ5YrzE1RV ˇL=AHy e~2rP$ $̉orqA/ȱp m<8 BHrsk*80*4U!텀\ڭ]A# `M]-+B`A]u逰!uLJw6[gLZ+?ܼDԧD"Hd'sk>q6ӧO>ş ^t7߾x7~M|Yυ vƱ.j% B,2fBuQGXPG/kkYZ&n(YO<-FhiΈ"˘!(@K޸J)r0ȸ6̌YCX fἊp{'HQօD*qt0NdF^NFVd07>#e!`SiG%}iΉӞRrǬI.Uֲ?͵ispSͦ 3+ {tėO1hܦ:4o %1@Bex!K80$q:I'. LoYe#RB8+ ԥp ˕eyE(Hdal Pk+jMZliR0Ғ'.ϫx*Qj[F]N*^Qv5D68ڐ%/u 65B-mׄS@ Tz:t5,EcF?&u :ϮI*-#tօJ<4Btl J4'm`+3Xڅ*T/*0rxLLayoRtReJ6fTUƊ <- MZ:f=0c֎sa< q}a_{y[<'Mo0WWOWʫ~{UÕqND"H䅉5)!>klz\x25NoW˕yS%юJFJ±n]9%uQ*kJI %yr#EvteQ)-זT&e ݄چPi2cE[>^Q!Tr-\0VPu8.|QXʌGH9֓QPOظ/gVZ=)3vT0]#8L-!CsQC_'9%ʀdJA|@hin=%3DIqArP(h+KPM6`m>XG A!Yky] YNKӑb6INPĵe/ӔBGˡ վ$W2K70B78X8tc'АV$(8OIY&ʪP>YeIP(SIS!:)L eM~G#8$6d0"NaI7)R ꔣ٪,%UGˬU((uz҂'XO }I1c= )M$E(PK%CiGRd$'|̠Kv0pcP=.6lYa/ַWE%MٺQF[V?"D"H$ҟSFڜj벤wdC zd8t2ҶuQ+SC,#mtUXLaĘJe ёʨYmOKˌPOHpHU#[rqpݛn Š2LE(l'VyB$xttRd9\kP #jBIfA1{eP1= F(6NFfcƓfJf`Qi1]- {XaO;R * dhj;Oϸ7Zf+jU++jnyC7 -cU!UUµ di{dQ:R 8mtlJ4r0Bz 3f:v'^QRpmk F#mf d=xfD]bZM,+Tjti^7<|.Pa$gVZ+JKKޅ*PP^Yq4! J0YP@8(,/,8dBe#J#.efTeMcašO!$FTչeoOz,ShD9jD5gwuA^4O'}`_B^xz} OlԧD"?7}>Mӫ{wԑEAr}71>)4H$usxԡ5d?n>M^tR4M8<ϯ<ϧD"b;no ,,/_~;S׎D"HdxjMi/]+EY"d}$eB}}FZCM]/D"Zsm+2wnʑn<c,H$y:L(}2Szp|%B(Yooa S؃l#H$yzE端|u7rUkz-kW_WJ[=!D"g+O 7B0Mן?,1ƫ5l`QJD"ȦciKt(]dλC=qVvRԛz'nެ͞y7k'nެ~쉛7빟y7k'ԓ LJP;:M$^21>D"3BV{>\l銁K=:ޑe,_p9/\222;j3#H$l g͘J7XIO!a$D>!}jyT:'_(GRiq}S'G"H$6SO|,_i#H$L1h]| R Wh0"+V/X|dtbܭ+ڼYO{͛7oa^qfm͛tؼWܼY=qf=67o?ey/y^hl8>D7ͧמh}ܽQmL>?;omݼî땴D"Hd#sieK뮻^[!q>{ΌD"H$)lT|1>C?v?=8gx=<#N9)u{^[q$D%柯slv*>D+GQ:61PrݭfsH$D"FŇkBOH$<#!GUx/3F#EV.x^ ǺH$D& xܹZn8ƇH$yFH >ty6$V;nxƛn_rdƴsϾk(EYbZeݲVnY+q<!D1nH$yv-;.E?ȝ:,X9clH$D"ćiwqG}GyGqGq8;#8"WD"gk… ?lvh"cZ5wsIG/_BwC$D"fsC!dڴi3`̙3g\`SD"H$YB,o8∃:CyAtGRJ"D"fa$D"4M͛;{{ns0D"I#H$lY:n Ĺ5׺[:SEB1M[SwwO8k.XXi.y 'n`$ƇH$D֋}Eǽ'h7/0vɉy͛7oCvֵ[:U;cV]/}cg8w8bn.9ptZX{軧4g#^Woν%B?ya$D"F?vU^Υχ_?|tŋ/u억ne_oEdqw?+o+Σ~Sֺ[B|O_ŋ/~䇯ś|p%E{qIjiS[2?K!f!{`Oj!ƇH$D6VW&)7kgי\ݲJo ?3w??n{`[ +0n`Y'ƇH$D =+[xC!r26sv Cq  k-tm/}EgΙbRe),>g'mj+:y}m-AѲ%B8iE"H$lA'.}P#d섃lرD*{9uu넣~qK!7?e=8uk[ rEݻy;3}5uk[$|o8Y&-F"H$Y5_?~~qߛ//BO͎}w%#nm4m}K͚o0]r||؎lZv{?Oqv|O7>o]{`[>~>_̋l^?;n>t?q*ʭ6D"$= n+D"Faabyʩv-\?O7[ o|k_V=Y1D"H$D"6V;hOϬ{um*D"ȖBԧD"$x0eKՙ3j !5x=ل Qr>G dZKvbSY$biS֍u`dD"H$٪ +sœtQ'~Ỽ_\/'Oz}!iox۱Ǿ.N{Kw%g󍍍kF+_zꕽmH$D"VIh.ˮ/^}~V!r+|#{'r_߼|<󌍍1ޚ}~[l$D"Hdރ=n=jnŊ< أBɎn7tQT½;;|OX$粱# e~o׻Oy9s?7q֛8|;g[xH$D" B(!0&de!儐cxD"H$<\ ]xH$CٌHgÞ`?c!47߇b 7굩kG"H$y+_Wrpp|GvY}>vYw?zYg=pԙH$D"H$y޳ ozQJ͛7oH$D"H$<لPJy7p 3#H$y<0F"H$l a$D"p#H$y6a$D"H$DP#H$D"H$2I#H$| 0D"gF"HSca$D"1>D"H$D"a$Do^hZӧT)D"? ,بḛdSW<~d[~zp_H裝Ǘ,uo)t:ͿݿbD"ȖKY\r=W;3/袋o~{ߛ:'ero?;ywM]D,q5o"Bջ!#.^8毹~$1,Yd… .|;?7tp|"!#G{-X_MƁއ;X|\s#[6S6D"OF7iJĥ^z_r%eYɸ{~~O=WtY}<1[rǼ=hp~sܛ}/8o͑_u#k2{K}7oS 4`ڋ:3O]d{R  k썍`Vlq\˿qc߸7;fg$6.4noܗoW͸=}FgE@~39oH$l|͔ғN:iUvmW^y^;u$~U_:ߜׇ&Ĝv߮-W7 mV_ <x&:SCDw_,j[bෑ]L,k#K@'9̽'L-''|dq޲boO`nȮ/s=9m-Ow-Z4䉧_:VF[ޮ/Y]_zʿ\w[| =ۃ{j[eϿXy1_+[,BlCL@$/(Qa^բo*=^ˏcƬeQ$D"[_:ꨩOk馛Zw:7?YȌ?~O~oo#;~WWk)27cyo}̓_SqoQ\wIC3 v1Ǿ7>y1ǜ;WxO.7U/?~???sՋ[3^5V_7fco8wui}߮.9'OFc㘘@=bo\4wOz.Joו]+c:a|V=o򻯟 v6{!'޾_ {ę-Ň<ǷB  (,Oۙ9vf͜c.G"HÊm= /_.1cO<?nm" gl|`Hdѧ?#-g7nnxȎYk_Ƴ?y#ܻ'|9?g=vꧭ%܃O|o:qd]}Тй_]_v[#m-у{wN5pá'|Vny3 3L$I)-C~1Meߺ@7o8}_z.}_PV+>%!^8_}v;-!w雹| LWx6}N~x§~p^ t8k.&'fjI%I$u%w}ջs9GW;kÓK'_~X*o㴞Zm`#4By컧8oގb/a8ǮPK.=vz]܁z1ku!_<`֩ӏ8hߝ핟~" PW:蟻i_8_ផ /}[~ԺlNߝ!_}/]ia_Gh^unsNE!f7l'?j]K"p/kɮ, `{k/l~c_>}αsv=kS^y@ܲ^S",vo}⸁Y/{)k/:]yϻ^[|!vg vϼz.B<~37,k.}?;C\7\=xw|c|PygNh?<>/'_ ~xؽ==?y{OYO>3D|x 7Vō{WL>#waq˿>;6wi+~[zB=+~x5|^}۾҇,xggFl]g{sHvQ_|>x.]q'pE3A_gGW#}'}aͿzdbK_ӧp}{_,x15b[~v=]mqU|\; Ft7~2uCa{Oܴ|\BNy_{K.B!_U!=}֚_ԯ7~{3޴ ޝ7Y`}bW?%lۨIA7@|3UneH$lXk7޻b5ѓbSk7h; :8wvbΠ(Q6CN;;AYFƮbm5X-?>tk^W~/݀BY_|^/_ٸѾRKzxgxn=9k߯9{؛~59{:㡈?vnx?§y|\|aO }7>Fuچ_>w~7>8p~Ͽ^>S>m =&&нN>e\{Zhiد]37}}'9}`ۣ~׳AY~g_߷= C BG$^eor;߱{~1=t׽g~ ;D~|b%C]PqO8_n]C3kĈD"HdKg#+$i4SGb_#w~x՝{EJ0rË!aX++'o;Ob.DB~wh~_~3P!\_ѥ?[\kzGW*\sdN/_뮻K߳_ԑɫо{{;̝ͼNHQY1>4{ŧ9k [hYy{鮻.|:_ xwk1o``'v]wq{r!Dz`$}pDnzckBꡟvfy[nwj|{?GruNW~G;\7u?spMnGCG=t^vtu^o_t?;zĮXk g]ڱyk_&\}<\m7g6vz w:]F}29ZVgπoΚہ@$3C1 v{L;u;xziu~~gã} fx %ۨY=^N(s;__r_6oG妛}`:D"-y-Y^ȱnj(BzYz Kxχ?uڛ??tV柿}/z2pY+ һz: _{iB_~.ϟֻde02Lzz0_ߴ){!q%kGcœ_ſB_ʙO B89kٳgs_fgww|j 袅 9;l L]xlɈG!2m_I^亏=qSg9l邩 Z02;p'vٳ5Z ^ܰ׮h 3pBcЪzFQȧﱝzIos~7sEGyoKC9Fu0yD>w7.Ǐ4JmpP,_lRu|h왳 Mb$D"[n.꫇'Co{_{~d:cwϰM]x;'nڇOCD;MGV_ͿZ6=Gn_;_zklvsc7sɥwtg{stƃ 񻯘?= kEw\][%Zg}2l׽vzk8Ÿ}ͩo v7= kWI;DϿEO=s߿\?rȫGu 7<gNƞ 7ϻ5)U9Ϣfi;0 Ph)#l6Ѿ/6ϾUfc潋<{oe?oa\KQ֫\N3PPaҌ$9gSޟ ߿XF.~seow%$hѢ6aJrw֘kǵ u0p;Y@o` Ck{#g5!$M9| #PԢ=ĤǔBpp,,ڴstu17547uja2<,ϟx񂸢ȑ# B\ݺv:s!b}.D1l&,vY5+!z,m# !]1W|!D;oWDoLRL̥|aa N/?u5s#ר=vBX7;%!YMt\ի1WLpOs+!)4~`o 2y` X~sKKhqYm{$l+N~Ԕ_[[2z?gykDҌ}v32=k S Cð>Ι2ixOErH<Ӿ_n;ФXZZ3fĉ666BpܹK,YdɌ3 9zW$#ڮ{]!4a֎=~ kdH/8 666=z2dȑ#bDo<~QQqA]+@7S򋊊.qh ? ?PCC5 ? ?`F9~ˬދ^m&//}w֏O>9i,ϓ:@  Ԁ@ 8\ֲ˱ ""BQ^ x<.`05jEEE5l$EFFKH$>(?GFFXZZJ@CYbŲeˈKOȻ!Pt4|>%j-[,XX&Ҙ: C#[ьl}j!bf:ꇅ!PBrYZuF(qɓ'!dzxx() !>-?!DC 'u/-..ίcueXl?6ۏcatbU)+s\=}dJkJ߽~?! ӯi瞖0Z}km?~?_BHRp|5[̮Vё"04gqXFe*)5 _XE11hr* d!p~=:O;e=B{;;s_b8$p=lΌ geH}vaaЌ9Í7$V2VXA,ҪX~BvtOȖ-[EZQhB?!Ͷ#Z![ZtYB+dS QUÔvOa5d/-/I`֝ÆhoT(L 8|7I,NfP?gX{B{lC{[ e+sۇ/*!B3B,KQJ®]4Ҵ`kkim<7HM \.W*M ԮҴpM4-,X@* OTW]D}b҂V74-}a;ٷ~j] ۄ2UȾ?ke>gq!{*=kd_1ٵ7<(+CiU9SP2?$$nz!YonI3=bh7m/8ֺ2o_2PUs^mv, b!m3sEmdÊfFա05B>(P:X'JY oCr*˜lZ#pHdRQMAfҘ,@$f2Y4)q.a,TK7:0H?!d;Ba~BT/hG 4ȿk@#[ьl}R!N 9;X"G><"z8kQhl}j!tUIU:*Gd2 B>ȩ#gcu~1VY,QU$Mk=8'cMVڸ|i4簉m[q&c>i&رlڥKfZOk/۞8!SUPC=c.t1h4Ĉ)00cM-9 'U}H4)&~_۲؅lY?Cm|= w5̻L]_ݼ-bj鳗o^:ԅbdo^=֋F ;#c !;vB i jC>DڊvdS 1#V֧Jw~H3Y1yIFWM ena*uceRxeZY(WH72U.PH]Da~Bv1;G 4h͈lG4 U3L/l}j!yDp֢ BT5t~hj";)Y 5t~}!;#c !;vB iLilAɾ0YB+dS Q;?I$eEBAQH(Ȥnj/cы[ ' CB#Ə'9 M'vB+d F><"z8kQhl}j!ttcc3+ŅZu\H+).|^DEYU4!V:W)AS;?d\ K++qECWzQ ddL CvG ! Bv&l;B P1#V֧Jw~4"EEE)))&' CB#Ə'9 M'1u1_/ԥ#B Ejrٹd~[&;v(8󋋋@꒘`P6r//W̎]1RŬokRaa1$kp0H?!d;Ba~BȎЄ~BSGdBG(YB+dS Q;?UW ʏwظ)WnGg4LJ)";#c !;vB iЊړ1#ZPGD =(B>U:Ccb&'$%$'$'d𜜝U^RR  偏Nw~ܯ_PpppppPp|ۛX02 qLF\Da~Bv1;G 4ێPhl}%R<"z8kQhl}j!ׯ(8sY˪/ EyEFF7\. ֨հM@N,U"H| BciiI(iǎOMMML\Evvvaaa6m̈뚐+VP!]3R`չ\K,j7&$B7n}?ZnnnO>}fBP,WUUWF!!%$S( mIh!6hР| fΜI qESDvG y??Ԟ"R?c(4Øf/lǩ툨ak9 ^g:# BTA~@]t֭[gvqq!Q@v Yl4olZSD '܌OHV7X:B!yrLCEV֧ C'O8qbǎzyqqׯ+@5E@4+ʚ@tPMf08{hhhtruu%hp0H?!^EZi?~BȎЄ~BmG4P)+=k/!R8k=Rhl}j! ?`p~:3 ڵk׮]{.T!.Lצ5w{Z":[׬~~! uk]-Lׯ ( =OfՏJ?!dQhB?!#Zg%u(+=Ȟ~)B>U08 #,,,'''++++++70g`Hn+444t@'&BHgkعS:g%#I x6[dg7͘38zIbcyyq-h.._&`(\p3|MSGM6m6b C!T094Iw ̱/Q(}ym`s+Q||,?>ceb0Toq73n؂Vd8QzHc(4ԑ1iJ4˾"@GDUb g-_ O-D Ξ_^^R^^H$ϟ?D'&&x⬬,Fe7oNћ-ē%FVV4͊)JD,fimQRT,*.*Bl+KQQ_bέ2*)9}g zv]viZiV*m / yP(DW,Z$/Q|/p\B34-8p@*M ,дJ&wUj(4P}WP]ehF4-5yX *M jG՚s B@~YK>T*M dO9cvswe-+""") r XVTTT6 MRdddxx8TD"3pdddHH%wmۖ妤TUUyyyݽ{NNNUUUR4;;}?~pLLLX,VFFF-R9СCVV71 oo_ŷr_^:=k9e<ŪRc/I|h C}i-yef- nn]{NŒ4i鴮uKlC6=^gJA(a5!XjJpi(DJyۻ_ vt恚!?ghaQQX,FٕUTTXYYl %X,S~V[1T1-YXq,LJҊ2TQ .+-9̺C 2C9:/US&dv=3oϲ=x qFt@C0¢El6[Qekkx?t"0&J)9D1LCB)9DXVdC( =Oَh?~BȎЄ~BSG>͓pS JGl}(B>UCK"ӭ(є>0 r hr}@ ʈ+")t~Bv_'oShB?!Ͷ#VT3"LG.YB+dS Q;?Tkh|8ln?ԩ%mvv:;* \?HRǥR)qzӝJW%U9ʪaJŪ@xa $т`HѸiʊ)";#c !;vB iQYP]9kQhl}j!tUtG!>cdޤ/Fx1hS 6Qd8Qz0~L?!dQhB?!#Zg3"PGnG uꏈVVYB+dS Q;chS`3zآ5!Pi% RD0$5@ga<::vH]/";#c !;vB iLiK!RGDNq׌l}(B>U "d8.F 8unޟ ' CB#Ə'9 M'vP@*pDws֢ BT5L~(m< ĵ,RP a;?I$eEBAQH(( @AC:<@EvG ! Bv&|:YMҹ?uUd;9kQhl}j!ttcc3+ŅjҢBj=1 kpW6' CB#Ə'9 M'1u:3!h9"?V֧ ~z@@9t <EZj@@Ea[ژ}ƕ"arZxGz $=/%6oq\㽟PE,Nxx8HD"3pdddHH%ߊ+(|;iorE@>QB t *!BHP^`h(Bhi{_@maii):KÏE uY?!:R瓽D-[U:/UeUݗaR@㕓SYYٴ)IG2gQG.>p" hc׫I5 P/լNovY˪/C~hrrrd2qEK Üpa}+'._<qAwSb ?TF[W]PՐj!P|~'T %gnܓ.Ne])2 Cd@?@~#&j!PУGbi'$=v֢m1iƁ[lX>ЬCLE? B~T$$$tޝXDA~AS'$/xc_6fdGo!dlB~S ![`C7 6l}j!!_ T A* }'ʫ>MH}Ǐ$5/S\WpӄB9'htUyLf~,5N 1R={y۷oRiddd@@@fffyy9F+))9s&x/R&,,4ZsǫJ+]{wry/k&?۶bTXR"[rͫ2qYPd+4_#:bh#tD!109ۈ208,#i"V愘Es _(q5CJe"C5wʪE4#4/◕#+kӺx9bФ"&R?^(3CLghGyJJ%w{9v-9"~ )p M1Ҥ/xj.,f8#c++ZQVv1ڤ/htUIU:*GX#,}U 1jر|>۷2ӧǏ0Xnmkdbsm-d2)IyIzc5ҊY)om+' Cy QU5Khf'Onٲ%VyyyQwaVF3+эJe"֭D^^^"`yy ;x<=޽{|>O>!{Μ|7ƶ`!QYAD~+".d֭ܜm̘LFQ_bloVsb`[GGG %2))):l6P ރĝ\-Tof5(xIʵ3'FĦWڴq21o{8:jdJS.L{Emڳ iB1ϾʒV YԾ}oTڵw׎<~N֧ X;"~wj2FX#bmi@y7;B!tyx=ڿ܎|I.33N4mlbT<̍Mh5zpb~UB)nZdg7͘38zIbz#+WE鍵; p$I>{؜A#fT{$߳5y)3'7:dա#8?fW2~x!qs,;rfNmGp^=?k  ic../c1fV*#P_oA0 /.$׍qfPq-GJѨe?{ZHoa, p+sۇ/8};oJ$}ym`s+Q||أmsuɿh0_D/N/4G~a\wG|0;sAw #]10Ħū WVa4\SKG'+&ktLd\[ &IT:BAta֝Æh3R@* @B̢8jaLl<[AfN;thʆG=CZ\Tbam!V~` nu,Y!ڢXDQqeq !DrJEQE't5#%R~9'VF%5W>.[g>ere#C$M;sq1ZkGjwB[H7Ԏ4z6 X8fzSSSfOML&ᄯ}&L4|TA&%Nx!tĉ~Z۹3R ɾn2ibű>]آM c Z `(O8b70=b=k9e<5W6^pssf|IKu573AӔΜF\]O,[ۖg&-`:"I>[}~3?ľo1bGfn$ :*Zy$>3=8juqFi=!AyY|aכ]SeB~֬m|`f!?A!B Z~+qu"(-MLDX,8&{K,#>*ARےcd$¢24ҎH*JJVf# #= 4AZSDd`dd`p˗#"i0] =9DM,qrbZ)}R#ɱ2.A4}MdZ+%# Kwa툂;H:b }\prssoA<<#s##DD܉8;wwNiiF74^\{Ǐ7k%UCQu5_P0mSe\gz?n̙3%Kg͚5nXb P#?p8F,vJJjrrJRrJrrJrrJVYQgJ)g/ۇOva![fðFwg`t_vYu}veJ!<d0ڵ#7=P@Cih߷ 05 iJKKIjԥKbisi$5p~X͆jԇڽ@LÚ&U?|fC[Cg+"$bk)2bQsEk4]7?T U`V!5 3𳰔?8nҪ{adL7<>P98cK–)LggџmLؘTDӬMZΜN7H]PAo~a} ҿsEk95^ja]} A`|H~g?ssp0@غ {αc#{SX8E5auf,6ضejj4e6J|ѵJ?ƽ B۟xqB{6vYB\SG_.HI>S.TɟێY9-FU_@{N;UGw]B2RӛӛRS1.FgGF3sg./+}Xю)/ajx_nĞRTT4ssb BF #.˯8.gi>}䮑hlץHgH".ccLfͮ]wW[]Cpxhd׵.!it#SǞ#:fKperoN.:Z}]|BVG-oT ،gO6o۶Q-hEy-E#Q+Vok *X1̫{^'P|%'&v3Gν'wvɘ>'q\kڷGG/pewѻsߝN%i?[rCp^m\z[$>0[';{7p\Kض+bf$*ʌ1SK;[{I-i~U'{twppj?hTs8e@~bOx&̋;z)åOptŴ79vv?oq¶8z{$jЖ4)mGOwovҳC궠{XrqFZNNV~k'{M)e'=Nwͮ?ۯ_s^|'8\{IಒߍXcΛ7| O` =WL]jV~xͳZjE"T[^0;s"//WLÇX&>όVT?vuQF>|pK 81S?iq[P//q"'{q8u*t¢/|0]߅ BF>:9=˚,:~IW\ejIz pdbm'.pr c0d9ڜW4=_qx^oٳ%aa꒪%CCՆq966V DDD(/22RAr F~qbw'8~5啉(%DC>^I9=B 4ucP'<}g컸Bߡ.ly}Ia \x)ϡƤcÿW涒=\yk{.lʵm!,׬ðK.5̒\AnQUoDn!CFҘ,=݇!1 Lv{ qk,]@HbK?>BOhg3.wjDCOuBo|O۝v3.v.[%R:]\o>J_?&,-p_edw^F!TzӶ/O-V[Vn=o?r'* M{ H| BX֊B*=? S͎.;xMfRXid%CBH)o܌,1$|zPLllǀG_=QjBA\Q빻m?;d0O=Εn{~!;~efjПT ðh G@!=RxxęΊ5_ܖ3;9.6c Pr޵,5{ߝLlkȐmjӚQ/~zli9 !$8y5"o/u;1aOOMb|eFr7[߱+^:߳gk3wֳ#c,1<:j_U~+]3aRK]]T״ uk쯞'G}+yJ_?yP\9ͅygW>2=[sU _&{"mqk6!i?*[Ҕh4= y^|hmzegO͸k_-fۻC/9;hm~+nx顿;?ugb-!2>֯&?tiL=~{)m*;1f:I/hYU|鳼ũtbIrO0#ӫq˻Fw<ޅY.tDB6(嗁;<<+"ncD۲*2z?#.?Դ u% c0yp6 }{)(,ӄ]cuvn=5\!ZjaIVj橭]p?Fa~*UQf{>~РAFF|?gb0/^WUIU:*GX#,}U,#=Fr!#f=}k!df8Rcʏשf\b,IНWy,#lCC=EȪr5war&j\kKvռ6緹 IJ)}x҇ Zjm9ھ!GSš:^u 4mlbT<,4]qs!t;j7d`y8>hȀOG/"P3rذ ?x!xDy-b=qLtӠ5f,{n#"נM#@tDŦK/*?D%VT;kGMBjKӪn0{]:EŲea򁛮E<6mR]НwEȧ-L~~t 8./AK..J=3Yj{{i14R/M~K+ Jd./!2hCj80_51)B%%%EEEMU+j&{>=\_*]U{ҧ /۵p8>%p uǧ]\I[Egڦ H~ǟ~+-r&Ho'ϧ_ᅩ)@6B/>?;dދ$+Fկ.nZ빇o\rR'|#YȗQ~qN;sq7̌aԕ/ 1])o܌tnɲPi+ϸd{G vvIt0,::JV|U>b@bptNLuսZi%8ǹͻ>*=yŶsE=َ?kτ?z)Y{ rv&*,[vwC0!iҖ!&_]L~5˱ۧ#ѵovsw̾+(6旕.t47&fv&ﯮNp׾waR"Tw~8.#FCp!$ .gCS叞sx3`{:ל0滰Up*vGs/ :dŎNnpB7 {2Gs1)K9{ֵ^"zajCTuT-gC?b߾"ET|Mi#wn#uԒ鿘s?ow?||;~g[?8zlC vxqn[4wS [ĚC;{!YNԒ9k>,sZׯ{ZcIs#EۡssW<+ UYq9Ua n\) K:2B׻ }+xm~:.x|`N#ܶn8SCNN>Y+hǞã-$ Kә\~Xb5&Nvtmw 9S]pS>go=}}KN|}vU=Z?|ڣ!{v}ٙ9SvaY Q)?=c~X~}l𬨥|` o}dǖኞntZ 46kv *nOm!࣪[Ѝ\\88Z39?zl79XrCu8o߻#g sec 3'ty8a!F˞/_I{Ga ns$k"L G7?67e}k͠x9ƕD1SwW FO xsPȴʈc+yW !OB>I?rBN=ygK^b!._{|jRkTc{W=7gf>-|V!9h7~Fr4Μ|$0 e>븑aCߌ\:3Ox>ߜ(Y* /:ptE)sȮ\x2z/w~NOZ3'mep1fjOR_ \:B/RHܙܠ/v`XNNw%|Cm͵R<66+i!~<̴;B!Hd`',I͔cZaEn=&O`}VުԘ"NÇ܎X{¼eyg 0`f{#J1Nn==|PݹgX_?xP֩c`17"ԥͨ-X ۾#S"Dk4z`;.FŗC$eJq?yOn#cdĚѡU]2sI+7+f:.Gֆ6akݻaѝ%,^{҇//oQYո$֞.J,]mY~yJb mv-:1Ж{ >~oB!i7S8B nJʿ3ץ-u42wMMaf1D*-{E4pj~HT!d;jiNGҵ90|nTHVU~B|00QEC "y֮e3-r[F v Ch_Fהa_}=OMm~ќGt-}#ߙt%mߡcN!ARC].~(YlFC/!0n=)zufdybgҧ츛WDi̵gXcFr?!:>::Ax\$F<^Be@. pjwozuԝgQW޼?^:RY]ھy;w;]?}:}2|-jFkOf^;v;% K?}ӡ`AyYzƫjC @`󗒃=٠F'œѐ_:tP]l'nVک>ӏ1Ok:OI;C-:@r_Yᯧ+sG?v neW$;jɴ$ ,^|\UeD~;4{OY*I鱪dY!Df#o~aZ?hgT*WhpJӀS]᣸+{!#8q"+zwKGCwI[nYyD?n/:Ɨ]ֲt|W͍i4|L&(++sww24%%!$$5h4B(!!!<<IaXTTgT9yyy^^^uP?uPUu_P(,((tz2$T*JmmmMMM999vvv@gee : txϨs[lI\4Cb}є"BP($hLMMMMM Bwܱ*;CRb}Д222RiN*7ǏtjA䇊BM䇤dddW4W}}BMyza=>y~ yIENDB`DataLab-1.0.2/doc/images/tutorials/blobs/05.png000066400000000000000000013052101511411446000210740ustar00rootroot00000000000000PNG  IHDRm\sRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'۬_WBuox[X9,7]9LRuSk_Z5r⌿2L&d̒x ovm4P2:|ç?ٜZH o[Tr;ڍgͭ&U~2`ᬥ/שZfN}3eG=۔L>~"~~o7Њ*[&|57ox&~?ݡB(h8pg< y e[ xXmխ~R~/ⅲGMյe}rHǛO6\66DG~#~vzw6ӴZPکӵn|lLɊ͞zW&ug۷jRz8&xxu%K*[้xC)BɻpFZF*v-lۊ֘T]ޣƗnPyl5w5Bղ?_gu800j:?_{:_>z8~4$&Mי2'*Sce 0\BlTcjO_;(.Lj{eotm4%x盗hݬ^^LfnW%bbێZ>r'_}3Z{naeG*.Yt|ɢyI _X3Te+5@eXޯDVu:y&3ZW8(i%{:]Gʗ,P_W=jj{\6=ڸّ9kܭX1ѥ) fy:4 QXl[;{ İ~ClekW E-Km2L&*y/}^\Wά};zQ StԔzԽgOn{UqGMV5{޿ LUO⦹k..폀ft$mj28}[7b4;`qrem(6v_i:nCU(!lYy^d0#7Zvٷ?o^ӻtv*KVvn;7}Tn٫v)@-垚˧\K&ݛ_\jn.T:hK^5g91~J>δ/^8c&!zήXsR(U:O]$G[>Zr)WCnroy[<8Ќ壞<Ǭ.?; o+Iݽ|xȕV.F+M-C_#m2L&s@=Ųe˖-[6̤|.kξzQcێ_aҭw_)ʖ- D?bF5 aڀ;5GD``ptkME A!Ay C| YYbp-Y$ &9ҝB|> .YqQ/%e<1HOJ1Pߠ]/_tKcF[{K,j$̑3*`#珜BHBb[>!L~_GP6<g&9דB-8`W ~ԝt\ٝ>1nRǡULP!kyWbWYM\]2ow|'DVZ[Tr0l@^]c߷ٳr!}co?fqjÚD?/lkݯԸ6L&dWHu[lٲeˆ糼|zM֭[nz'è1jbDLsqi{~ zRIͦ9e_.F7˶l~'>Yo#l܇㊯٭K9ҵKֽKHjR|rJыK\Iܰssw)߸#u=~tz߁fX3#L&d2ksF[""-"#z\;2% w뉢"Cl gZFnJd Ob,F#q )TCz˗ jHB1 JM^f& @:Mk#u%^ …G yۑcG(mC(3V}Zn']IbB vV#]V;fϗ}_?E5-ãfgMWͱ a(̏w{Uinq+iwf.?ݾ6RR(d$&o^JdM_qOmpWmQ#V v>7o]_|h˗{5(xԡ]n3ycGB<u-Yc˼?Pnu1?ز_~ T`Ф[O5U'&g$8BCBm?yVW5+E8R^}"^b+uVjۜ[?Y[ۏ_*tWfߑ;7Z AWlTʖw[6(Yt>MߎUqL&d2= W{ϐ%}No^/.@WY%y[{I )k~\|w?_I7UTkǤofaАw&)qn0fhbjk{7⺲}&/.l|J3EzI+mà]畹};@!܁lnbʴO7$+s淏g&g\$uϲR%Ā +00^ W! t) c5Jv g@V_e% zA@p`m8UJ [1tk^B}_|+2KDf10qUZ|S9ۂܹHvoݵxx#.nWҟ-UY\[K읟~ygX#E[?uY@G{^}s\K{v]!\`%-5N(YtgVōi_9]zR/Y)(e.8}an]_~scXw5gbAJXgZӫkNqZ_K/..½6ztiPkS~wh‚?;UtX:mpaFƀNiڤm.C[`+t}"٨.OV2fWQ'dɲn&ҪR%+vIxi R0 M iҸU>3 jbצ եbJ>Zu(1E=8pl2* QH\ؿ~wgJ6ej5۰ToX~М.:Rcd2Lm3}/T3zZc|[.~=K|ߓxr.-wCuk5Zlpɇ`gM&d2Lw8w=e]d b+ՈnM? ̬wxkә/r}Ϻ)25eg_m,Ѧݧ ˙L&d2~If~|2=YlzƧ_9G8z|GqG䃃zN: eJ7)Bu~Aໜd2L&XjR=o&?TMj2L&d2}jRd2L&d2}LyNߦE6L&d2L"$ӝBf}zΝgٳgNgzz#%%ŷdz˷d2L&?Ϩ&5#gbk֬;㾙iʔ)D۷ooذo2#B={!TF E~Pٲe}g޿iBlt\ASfnW%bb/#ʷ^d\CߵDٙkk?xqѱ>KRpt .̛w\3M,7e 'X1ѥ) fy:4 QXl[;{s7f2L&?h֭7Ӏn +V1›5Z|ى4&->Q~8_}n>^Ʒ3gߘ9y܎Y%jteK;OV=^vfϧ~NPudwKfmzK4۵f@#$_M+Z= +~` o֭[-Zj*Pnn4‰9{񏓞ЅSjPK&:|#, @25o?sfG,jhǿwםrfKZr>=&/wP-wf.|ViQOcցK|T݆핀> ] +yd2L-4+?4&nfoUSQMZD$fde/[Jr5V[JUת^V6]>iڏ똊,3;'\r<\|喗NJh٪@ཪnn@uܾ C?۬F}/tݬE@;;ѨotKWg<դC5([/{{Yjҥ~m*/y6[5ʕ#V+Gt 4vm^ؿMZ˔k6jyPyy\X``PHtǿ>*c]3TIQ+*{ 'Tȇ{}4Q:}m{*E5.pKkQ=O5zq&9bjl[}Ҋ#ǗsagѢEfpX 7c#&,U?SJ?1x!WϰJc,B`Cz2%r{|W+k~r~͸ۭnZ2qj&bHgW59/!-YKTeٚv|BGF lݩ8⃀K>,ÿ>QSzu˼ظ3[2/4Dש*iszr233eHmG4"Sn[؛}{?hɖm?|j,u6{bV?y'ygSȽʶ nwlW ^h ~oNgf$]f0ژ5\D\<5c=9)'ys;jgVdGlX83ͨ}ol~ ]|v15ŋg׌|kHEO?ىi_t{q^O[sv<_ѳ={a1|g>,f?N)MNNIKKw:]>rs.\wa$-8z#AUY@]G~յiʕTNL`#GzY+G7[nݺu뵟xW\N*{esyC&5.4oIMJONQF4[am8RqG{v]ٷ`|L&ۓN> owC"PvNEU%H}sjz&$ "̝ӌ]߾ԡnWoI[)PٷնϟseȈȘR>1E [ YޖyUR}%un\}.od=-?smwsM k OCe/^߳K Zq~sN%L>J5`#igOtQ!RV`1D˧U 1X:i;7 >Gi]+ȑT癬 \ָ:nې}SgEb.? 4w@lҘ<֢k RYd'9J ޥg9dv1Wȕs΃z2-8u=xZhɓ'}[MVU}]JiGǏ-1jKŎ :m&o8xs^p`Ha}$9)TEG<ݹ?1waNWn8UW5G.ݕ}GNߐj5znի\Q+[fm۠?<&d2o+@ElSoĮXr\k11b2sV=GX˾}e4O+)=hɥ+W3$lkCerY sͨ |!M}`ͅB(ld-A3zܸ̚g Ln+qN\4mϵZ&6drMu.ύ?13-:oѐ%>w$ii]"X %AN)-$bL %0$ȘŊ"* -xCҒbc]ebJF)ər[Y?;s "@˖F8c#4$ܽA.5:? $c O(EǾB}Ru住]R RͫqXݭKЪ#竏hw<6y*Pՙ*z qvV%fÄ?RQ;~wL&d{5m樤M7G6ozdry'nzt,g07Nk>ѻA+խn&S97oTWnic;T~y@g1=kݤn.K&@|֧MJe*?u7+B fY1r;Ν8\[N5+ĕު7;3)\ [2gqe⫷>y|dƳ{G߼杵OרvM(BP4Ϸ }g\f-HnS#2"""'䣿ޯis1 >\vop"/yoaM=n5[J+.LÚ е??zy ;N!W=_I􄄇]BD1Cz*xܹsΝ}[M{mװL>6RkϾ>?ܧ![cv4mҶc!-o\1Lɑ X<`\?+Ɩf𴽙[[2l54.B:LuxĔPjrdz^V KJXd2LMҥ-^Ъ] Ģl>K6lҧaæ-}|"C,l8WhEx.Ѕ)YVo^rC3I觾&8~xRU[ޖ?l^~7ޭulޓg/dsҶޙ[C 3{)M{wﹼ;?&68sp@\Z#IJ9VBXp"Q1 ٬>)|p6AnpXYc|?/]?xO^2\3y>oK^VNFX/sP(kǠ%.~;s7Q?AsA!m7=5$*_^2u=sv (/^`;uM<5I uwvo3a0!Ք<0w2oH(yfu5_akOja|s߻,޷eų?_ؘ[z峇|%b`#[q W.ڿv S~Ćܬ[~qbͰxӟ,}JǶ/ܷw ܷ,K ^|}~¯L&t_Bjj̈́aGի}P%Pp8GUf3p8dEZl{xW*tDž _lzA WxvP[Wgȿ#UNL#t|Jֲ%J5TPG|Be>IW3okw>ks-+=.麮(J]McvM < /߰uv+%?xq"3֒#-WOE3&Lzb3?&mG](~%n;ŦA冮?gMZ{eoɑ=S|8rʰj`cL B뼖yO/)Ƨ]B^zNR[G#Sq/ӛyj_T/9_wmƍaa d{#˿H)Uo&}?|Mg"2'S֟u@\~dVrͺNd2̈́aއOwWK"I}1zAӅ*Ν;9VZQn̋w$*<ݍXfޝuvw]-%e'dZp`¾5K3c C_lW;z\z'l~7UV,9~p2M q*xpb 5SAyν㘼hDUAp8 4c״w?m,aT7Q-;`WͷEEF_4Ysa7vw4MoֹG};ʥ&ɋFvaC?yn<Ö(?v054hsȅE~萰 mr쳔$In6nجY3ya}[M{jɽzm5ڵk۵kg|E+*pE+%2@RuG@lLqK[Њ+Zj=/t&[D6d2Lܹs!!y͛K 뚼mV3M' 鈃CRrcbrF|駿ᕖ_}`ޝ1rma!kkOa߁}{w|dH!g1(r9tvE:eo{<"zC9Y{'ӏ-$>A_$}W+2QV1Q3,4Fo߉_^nشeA C4ys.\pbfXh2L&ӽG۴)qpZa`HIMsSH19O'(ڬWZVi SM[NٝSɟQX2U? $sŧ +%~6 Z٫1S]+Y<׏pyNS/h-1g9Z5p=|h(uL&ӿ͢!\rJiDDxXhÑQ.>抾[4L&P)T2W"%#o; kWmjRMb}Rjl)e:Yf:yIv-#=F3e4S>3',=Tһɮ&`&I^ΠkAA^y!դEv[]_ssF[ ZYķ &X|ᏏlޮndOh^sդԩS&)33 qf5i!֮]裏Revؑ~5Zrդ>-&d24+,26Ʃn-n~RE$n*]Eu^O_C<dza!֮]۶mۢG'NÇZʌ M&dzaդ}ΰ<Νσ;weuw>qgupKf- ad2͢Т zWnNh2L&adz#\a?[7M]A^YVWLQݭ|3ߧ7LO 6lذaÌ0L&aW@dmzԩS'-?g2LZoW(#gH)EB&d2=Ԋ"X-Ey ^jwLkm2L?q!&7&d2q@'ŕ5n, vۭE C2MBB,رsξ3iӦ#Иp4;sLNNNff" a@c2L&àIo V(U֬"BLNBma=1ԩodFɓ|[M96d2L"GAnRwe^(~uֶxB>WGr6b 椖2#CӃom5;-2#Cd2FE "!6w.8g3^*|ĩ[Zy+? J1麘.9jR#2\nYڹsnvO[`֭-m5L&S>/۬8.YB;t&an*+< ei6Ku8CT+ @.Y / >GO0|S/4w27hwLKKu=;;;`w1PtzvO;MxhI~Ϥ@Ӷ~tA~~!ڌZtIMmqktxKz,=Qr-F,I5SV )SՏʨ?=lPyy\X``PHtǿ>ט,]L׶gCfd˸ {@ٶnv v^^lH!XUʖ7spKkQ7-Zd&TLna+n#_\g)(2ĥz|>g͎&Ӄ"CQ4Z:"0@:Lφ?Tro"lenk$Y}i?FF|I7?|stld~|?C͒ۗk$u6Yyλk-ot~Xg_]7 }Ԙ.XGN̝^OΛ{UGt>jݕc5b)g /;;$ЏOG~>ӘU+8KZ fNH:al!?lao  y[+|y 5eK˧Vv:_(w^ݿc?n} {kO|wųkFV6s M&hP@Ŗ::Տe_7ݱAxơ5f4sڣɇ̝?^5|LJ\WۻwcWy #ģO\̚:u۲p֌_WI[I?mżY?}D-+)V6cܵU5×y\ٳ?ZLV'&"C?wF ;L m5v%Q0FMD,teeڰriTv%֭tWm؜./ݦ\\1K~М_?S;SsS3׾^|tyvZ_w_i1|.guyImz' O0-N,\y-7 hTJ!"fkoX'm:g?WؿQ]ص^5;èΥ-K:tJ+dJcZ7?|AݴɰhѢ'OL&(܇&wTc0^uYrK׊of̜ EOѺ,Þ}gzﯓ~vӍڑ/hc̛OlI T?;4ꍟoC;׬mƍSe %c?LۧI\Sv4mkwi^i[͈6l#[o[\U5{{ǚLEP1B+3ya(0`>龋 ]8cڇop|շGexaԛ}55Θf-+Ɂ^ڷ߷ֿs|SK.g]^3e\ֻ S&PHsB T/)GWf%|JBBBBBBǧ]%(mV;kOk׳IWmo7`,[sFFse@Ӷ~\ebcK*TM%gbZuߢ!K}oa$|(q|s &dsޭc{WKvlq֟2'ˇ?z]zMvƐZB`!o$fmSс?Ѽrۦ#xQ_# MĚ16GTFjp_nЂc' .\K{6oݿ/pvãm>۝ɳWnS@e| _rYτ!CS|29MU:qXaVrG/BwUnsP&d* g^3eж\@ !TJ|m찁%c5&6v>,%1 Pp׎1jc,jN҅']Uwn9}k޽$`24}yGǼh$ C[:A+&S! :g}j3=BwCwS;[Z9;=?HKgtՙ6svgy* /`ߤmz/iW6o0h R%U=OU4?Rc7L^W (dw#hH2V* WGW%Y22۴S^|k ZޢGF9WԳ]ޘ'st rƹK\*YqJc~:`;v.T|c܀#Tw9l\΃,{խ1Ġ KE9@ I1E0L&SAȵ#W|C1Rҵt”}kV ޺װߟ[7Z4Lxl;lv+u (,J@O\Z۸RnXY9:u^ĕ/{)P:7W;~Z6٤ʍ?j)ג'LBS$euka!v=y؛>;hXvRrFl 'FLpC!咬vk0d[eKnvc@6 kgy˦7Llꪆ!Y}"e! ?XyMk9[ q(hf=smڌ;h`q避2ؚ&޻rGVZIv-0a* A{E?J{_Wפt{ƵgscbOGNVGhx@P/@' ?`~=7n\o Åʟ1Lk|wmmH 8.4mԯ=`QjP-M}ho\O-x#(@ ` h0B8kܶ飶sL&$Is{߿ U;w\Ν;[m۶70*Hx:շxkѨ~M\.e+BCڵlcݦv*:t5=5%0U/x䓚 ^|Ⳇ;FVٸ=hJMmorFnu}qt_FM@?I2qaH2l>Ȼ~tѕou+ZtƩ2eP)7d]ɒ% ||||ɒ%}|`iWNUb7d ߦq9T72+O)ZlyaEQ8&C}?fGuV=$zƎ_4CO>]{WV^Sk+'|3Oe'q#S? |tU$Y@TIe|ȂrIY=t/q[7 tf5xBjR`٘2QM&]c+ J{G4,M_PEotf:{ߍҽqmĕk{ԷkVv7ñ}fI__a/{~r%1- 1wHȲ竅ڭV-|7]QY5Ly<դwEV9nܹW:U+}MYvWm޹1A֭ٳC}\4gW2Ө93Cg. ů=?mWQL}7c, .GNO2 W'.nd(y~7w5,^^$Va2;JMEqI9Ӥk^z725鋙/,&6*MʨyrbJuƗ yHI?w[lX9q3kGL|P)LQM/ nwp]/]/٦IF9JIF3ϹM>(wdg.x55ۑ{{QCҨȼPxr:Ԩh&߆f휳[Mҁ_x~؊rS-[L[~ \u>;/-1AҢA? ɵ+\)OdMmJ^dzIQdUi]d2i7~ԽzCK7`7Nm&S ?>}gǗ9sbs5ª Q*H& (o/r1Lj()Ngzդԣ h/<5>=7ȵԳ'?[Qd2LRk|ȍQ  rs2o6͸q|xXb2_/ lAQ9-?߼ y-o3sqs5rezM}|0i?ܶfˮ)ف{4ƿd2)L&A/&/^}iA-׬:S=+ @U|x+o-e){e!]߫O>1bۍctn3.g613'װWǖz_1a2L`I\}i<0y8ɵCc"Y`"c®_soQ}"44YOt'BCC UD*XsVV⭕ם (XoUDWɓ'4UDע@ yKpĈNW^aIꫯ0'N4Z'32\YzHk`el[if%M,1PzsNp7a:w_c7|f?3̔2z춽'g'4mK_ŋPT;3T7T`oӓ[~w\H?GyR$鬕Uy_ec0Y5@2%KM؍Mr:D/YͥF#PYce:#Q 'HvEgy˄*p|n*:UP4֏3e h [Ig9F)R ccU?N t&PRNJ6Nʥ Ecl.h)Jt[9g4(uB뙲) ~N?NɖE`bANriPtFd43,&h"YĈIgS~6qGg5 8)Eku&13 9]*/댅dqr,bLJزd(BʋFES",D?H؏K29(?/!A~,Q(Gfw):jqe+" PFc1jUmX(E,5bƳh[Xթ kuv^9B_B4Kh("u+AúUӼP˩Q,p FrJl)rRrNM8l4S-UtF8`TH/zQYg lFc1q|bugˢm-qJ,^ddkի,":xZbQ 4N'Xq_HY(ȑE eu![3$V ѓ)[83r,)&*,&SAXd4DU`D Y%)r)!أpV3 &Aǣ-s 脢`}RUy"KxYFXn 0P" H*U`4?^&yy+:+0h &.4.P8c4J6NF~O~M|آ._"3 YޫZjjժm]ϐ>nVF`߭J v_:!״vT18٬^[j/i7 GHMf-ԓSc# *ĸqQQaDRns8gt`']XY5@z5pd1:u sr,{l9,.Y]$z-?VsVNɖiQ^t^kdGDI`E` ٲsX9P(x @aubNE`尞)ile M:K)Ea6^ xF0a0t֭w*hYy5)"Wr]y4hg# <^ %B[Ev^2NUHqEsxAT& BT8UgHVQ0+PQQ?/{4)t&\lt,&,`M(E3xTPDU B4Җ`J#.Y-*`]V /Q9ūr^St&Kx4Ωy+EY%Mz54UfD8QJ i'{~Qr<(F1U)v*S,b"&Q)f0 '@2znuI*5GJd)ݪxUޏ(z+ũ VVqS`-^5@(Rt&GH#.H02aK"B9N4[:K(j6SW3d+ducDRy1^e0qS^ƈfVY-ƈqjR1Yŭ~̳ZSDRY`m!Y]VDYg\*Qy(E9p.'EAԸ̑*:VYa@F$x.eU^dUA)Vns feUxY#8ShyYdtYc]3z=P}%۬7se]> ǒ.[K58|A9tA9Իּw͇Ҥ],ZR- I*]iɱWNrO5#'ʗ*p@XX+U>l>vPqO ]8Ɋ4gzW/vuU=#kP~%um_B͛E-Zo⻾~bBm 4Z $_g &BG'oe$vO^zc0---ͷ0C5׶lۛ- ѕ""£ʖ*[Ƙʔ2%n)ݦm9)Ьsn_i=aTRرcD]*odb:EaVh YgDV5ªvNΖ,E$DxtPdeUE)ZX5CԍN0j<{%㰮 $b6N =: #9ƩyBmN0ng1a0Q OR\v@!*ZecU0ي(iB`Ug0nMyI`50FjQ#LFX ;Ty"󲃗8[Y5CdL;(:bY茕Sl(x559D0P/'{Y$z IDV,Y <:SS8FOڜ*$ Hl98`  ԩD)2SW'إ QJS"lNJGxFs[㬜jT %Q0Qy(L)2N3^UU9`\*oDSF~)Q'묅U휬S VVE PNM XSV^Q@b+kxchE2f"F!GdP)vN]TS/@4,#JYMX%t8` 2bD#9! jY%Ɩ![= d^28^Ug( EcF#8CtEģqFR# P FқAxuBTȣq׈x-j|Fx[9)NY5V8s1z_v1:uAjq.w8(lY̒EtrdQJs u):$x2e1p)^ .xfugBa贔@ TJpRv 3fE Mno1G؂ >`s&(fnfcK}k Bl)GOΏ{B*``C˚;']/O\ x ;g)Jn9o.bi:Q4h4-VX8jnQYCqH̓khHcXts5?_wH5lSkf] A?߯VomPw*1rC ۣnRs9c#T23ɳ<23}[?{mxLJ h޷k̀0ʵءBZM֭[-Zjz$O$7P"5.P&2zUI'-QFHˇ_jeB4϶ku>3lO=< X!PQYUCD7aK\ =*W9ivKlAl9t& \DFgiOo4ۺQltݺkڲ'w3 .gDb`3kʐ{:pUkQj5rR|>Qiw'gx[w-;໹<]y1С-}fͅt^̼1r}yYθsHG~1z~-mդC5([/ д=]d_H6]2ސ[hƺw]&^ח_5r4}W}gjFFU0~6jT5ׇ3/_T\OyIsyɳ!|cV)[_ϙߢE6} TMV3[4T KФG'n4]ᡄ?}bcofW^IUqƥx,&ۭF%tF`@^)u֫ (tK~ltE^R VDb Po[='iL4rr~#LdKZí.BK*㰱Np$xѝ̈PؔFňflY̐-~`R?N"{l@dL8UmbdM1F[XU'XƥKV` V0KR9+"]*%Yl3ѫ (EZVMڌO [YL4euJ?^6B ` 0RCΪVDEc%5$SBQiˑtF'#fuY8RdQ 9HtE$TtQ4MdńPUy4]YYcM HXMY*:+*Fԫq^V4)F%0U8F0p !ī:[XLx٫^+0>Ltd#ee0HĩFڙPQ,iK<*oe%e1uD`5KdBNJlbeUJj*.UYATz,= jcU TUHl.hJN)MI:^Y5TBhPRlj8eA.H"BpYIgԜ"5Έl휂ca5?^ˆZ8UX<:*ی!j\RW4`)V)2KBDw %{5H*kA2R6Vfɢ:XD3$[n)Ey5֣rMG _-W#C쾏{|S=ͱRv.ڬz=<-ץF#{ ?vӸc]Z%=kDZa+G7;i U^<.x{k,Cm˶'RzWL*\@[?dwٿNiƕ=*:~/Us%! .KN4Os 4jaaGQ~ڹӘybӹҥuN|yCRSgڥY5-[NWFO?ىi_t{q^j-M֛qu/Cj;K}Ժ+ǾkžSRK>Ӷ]NzМ~#dRYKG<=5)ܒ4xi;I~j٥G 瞿m[\fw.^r{]zfpPf VxӅa4S& /> TL@Ɲ *رcXl aV"gB(Y4BDȪN7}nYg$))Y*L$ꬬn9W$,K,f6^f1ꬍU*$xyFhWeJWgctQcbu).w)B*X8FFGm!ʪ~"hl,KVd2H0X'-7 F!HNE,闩&Cj:8 H`5s xb%{QR"#b1U@G0aj[QpNMd0z3=*axFM4ͭnj/${:vNqJg4#FYC*D-bHF,&@%إK"z(1nu6S&" j@6)"Xx`$x&ټG)R 3Qd",j 6g`p2h]F˒-:ȣi5]RFAN)FTY1@#Nt@@!u2x5NYIgTX7kAᢋct"G#G㌤G GX% 5GyFVdR-Yt)E,&&.OYS,'H%GE3@%3 Y,VV5zj+:cHL"Qթ,&F׫q8XEg8Fϔ,:<3%KEVE#u*F'.; R,:ʪ`D=*oU) !7')LlE̔,i^[ǞN2@)E E]*o au8^RyTª9,k,(CZ-SBBLԣqFӟEVU)E -Yɇ''gl k݉H2Qx9`[{^w7Z).I] )wC]~<ǃ]~z h9YW2ySU[X˘fMZyO2R^a zi^<~O֮=8~ʯ6mmuR|Z+vظS_ʬܿ%_LLh=%9V}>gzZQ +IҶUHHHHHH9b#rǓEҮf\ؒ:~s:ԙ*ǔ5~8T  ə%cs/XK +g=f8N$il3;wNHHm5 *ĸq8F|e;:C!إ aT7*XLV YX#FXS.?c`?^0%$"^8L8F7J(E^Mr;D/y$]:UAdU'1Kh4oyT.dj1>QHidx$+ƄF!úIgy6rNQ c;AYѢْfɢU#l ۸B{í.UPd 8BiB$4rv@j)Qi0: fe4Gɒ,Uy+["Eg Eg5:5A*A(V*1ZXhWљ +1`1'X(#..,uF@"ƫW~Ql%ʪeQH#h9e05ΣqZX"V].5g4 NWrAY(G4sdAƐB?/9xF3S2t"#/,Fd4k,d\='S jيXUyceJDWH y`_s;tUus|X;/{4.D^P+x4.Gdr)2"y7+2zɒEƉFN؍Ħ3ƭ;$StNX/;ª;qw ` A3@q.9sr mVZw }rrB+IzpEm umr5G0,hÅ[%SԈ~YD(qOE#Qię*:#i3ErBlnE-8L­LPbVyIcS[g*Šjw$fT8JS HsFo5}#bϽ l5OԭF-Z0C|A`;uM<5I uwvo'$);8"d  ]ޘ'st rƹK> u;֘X sB߾۞MG~Q:zxd^u7$^0B˖E1@YDYL42EcPJ3PS[Y ޛDgt(BT#6NQY5hƽEV%(UpL d!Fq"dJYqWl'HVFa"I֍۔Tޥ:*,"NY$2%N1h;et`bC_y9 sX7N1VN Q*0K=*/57%:)[.Y4:)Y"r_4XWu&t&kStֈ/1q)6^9 x?Pʪƀ]שּׁոݥF~_\*/Zţ(skJΔ-ո1Plq*Qʪ%kq?`cOcQcUg*c QlT0Y%mC@L<~@ld&v%hKVn`P%VrC ]Y;&0XgxFh5M nqY8ʪ-YT-Vy]vT>fdq]*Yb ƛ,zs\vHdvN![YUYQobD0tƫq(ȣƟQX{BSrTA&Pb*hl" FdU46V x/,"zBQ= !Yҽ{-ۏFx4gt'{T^RY0VW~0nZ#YrT'[2rIg1TDWd5/-sdQ8S=7g+E: &@;6JYczĈ-'wnvΝ.s֭sqkcy(2;x`90x`FmrOa+ǴAMexⶅ?V ft2z_^bo;ɣ PV (=6nQů<ƜCW= T~o&=_4}#FTM *SW#.ONx?cC*6 > >,΄YiE]to!6+|kW|I*Cd߾}fdh YWs:E6Ç}:|jHc`Uc5]dw1#ÿS#ÿDVY:h,ZQ]Z\-k95R(VtƩ PGJUĻTvcEXrZQXU`lUYI¬.Mg2),"f@c=Kg+bTy {$ fI4 +U.Epdjth%llbt?3J7U%1H*'rv0ْ%K6NkB(qutdtc$_ /%y8[X Gfq'd q8F lJrd)u3򍻙SLe)"zm@uCdU 1q:r*F$CQ9%+Fh(sdkH5.Tt(˖,!Bޛےkߚj9N=35C 2cH(=5>1h41F4!Lj4؂24MO3[;ަ/Mۨ~ٵOu֯4oV#Iǘ `ewjlUbM'%E>k҉z;;4'T*xT$mu%x{?"˨w*"K`bh cccQﺺ%P6G\Uq =t5}N#U%`B/jZ2&y.BEHcˮc'32I, cekz +*ck/iez}*A@51e)py33FZR8^@c=,4`-#ur^8/gzFDuW]x&t֋N}Lhg=}Ӟ'?yO|s?\q,n;U?^> yσ'>_'?DlUE2cb #;366Q]]蒚gdcvE/1 I PpzhZ$sʣ2"(DiF gB Ee hR}RR[%O%]uA R1iBBEhZ:r..Xxa|V Ǜuu@L#Uw!ÐD.jʕMEprgZbhT(#ORܪqJ-p5ɌnWsJ&F);lh.>>9.yF7B?p1@\qSHFB#cHD!1fUiGCWXi\]OE}Ԙt^H$cϝD(w6;4XxYɔ2h2L._qVRC9R!e!'ϴ#NDր6\8s L$.@4,@΋pCke$XBpymفzGhSP86.e1R1v*gLA"7*(i#BUHrzbH{BjJd2 :S*d,B:ޮAe/ge2I@NѸ.)^ g3"Ed\yXG3wۀRخZFAY[N1"``Ҩv* x~bYCB!jX%5Cb]eb۶߲Þ}U0S=XHD;K҈DCH )"@Bny9QKKo c3㇮Q(֣<jJEj2ߝCi MYT,:˜4a.$D(] ogu/+TsWgg;j{= OnW1c̻߾|gg.jg<g.^WYM9J?}͍o 'jүs%dpIfƵ@ >$I4+#qV`)q݁s廤R`d^' &$I3D5۶suVՏdX'Gy!@2-3^hnրgرWhmOC,HqH$KWk$T|W0wU2^$,5cLŻvIG'D27I3>Isn#YBM21^eRdTHr^Ӗ9YI2﹖Y~>ӣld0 ^DP8t?k?C*L!F0 (5OBacpl]$^aH*dP"SC9nuA!.qsoIYH>LॖqH9#iG-d`,[ YH8?4V{ )d:^bɳI'I3p\;4۶E(*0n'9Xe\y)qN>^]UYPX.+Db{{0^GGbSP I"&]!GeXDU4\"FQ N֫hޒ'''U~XEwniTp[?j3HE=xLčppOxI7` 6`MޏS!!()D]h}z gH\CEu4Q7*V| eldT4252+X}j<؀Rr^hjT 1H 7f}R]Ї*OuH1]ԹpRnfU#1'gDBus_o$ (qd{Pݥ&.Vxu!A)6PGE[E2%e!]Ĝ) (O0P"S _ECeb|V՟ .ù^DW*֣\E3F#PRG28 o`2od,wQS!S\<-!9932P6L%#}BZFJ#Pu ~{?ƃU0E"fnac}WH]0CR_!De♘tυKʣV,bVV*Rw[R*?wZLh8IV_RdjhoUEФ'&f(M ԥ 3.UkRneZtl45շtcR E\DZrl_ɸfZ 䬌?Kor*sᔅ*ܪY-Euk7Jc:[H>)M%l:ǫu@"ŀ%`T(=ؐdal V#drF\,ŃkHS;tk QACZG0FEg ܮ:y׍SBUDc]ឝ.Vs c^{?'ĉZ~Ng/o{`?9loo_Fll=h;OkU<;$J i=;p]LK2qI *2*Cq aTt11n**}WOeN#}W PҸkds{}'ed]$հSu۷CԤ6d乖4zJf<AH<2fIأ(TnDHFyb_Sx^*S;_q힫)XDcl[df\ce*\'P D"+J`-H$BE <ؽOBZG}[e4% M33l>ATR rvǪNZz{誃e0}RrS=& ^n[՞={S+kHFa#c%uuPu`mJݾ匥,L$v]D{/[UO7HWwp;?ȏMg6(^Oy>rgs'G)|3{CrO?kph.|\oyBXWo~3Z"/#%+1ϰcC_ٕ /%8]^{Jd IZQaDJ/ x9ӷt]Q2E)>qiO>I@d$WVF+*@ETݾ[ ۷9g:ܱ=]͟^.-h3^8~\h62M@툻}Kr}32UaM-#7CPW4[̢0.xndՌzV:/ s^j{6IR7wHXus^2Rj *vIQ3`4)ѣ<լpţRJTVG,s"C\Sa"yQs_m^|ૐQD; RT ^@u04uQ/t0&i/珟.j i^ ?VuCIRLNM7C Ph*׀`$#@j )2Q$EM,$vB\Gy^/匵YPH)U;H} OңBeχ!罵`fXz{T8刦,H;U}B LE,\eeT\%x (x2%a<ؙv).HFƣj ^*HC{fU0@:Qc}ឝ.oEwC힝x?I` 6ne o`?ct}ϳ17xoE..뮻CH $2y8 vHJAE•Hő>)`eJ ,rpUH)y(xյ k `#^f% $WaH! Aw諜D]:Hxݣ\594J QSKȰS;x22ʔ8ٮh#Va]c]Rv;_G}xՍjjm{,brXdld`cJp>)ŮzZU>yCi+X!E޲^cZ9Z&,<3FŕD^X8+\*}%%4*lPna) V8,3tI)I:X{FS?{C3veݾB.VamDpI ^(zbf"b3c36$EeBk'E3 _z]&XQFckkHT's{7=Ѫ`T1 $G"cLC"o!_+IB9O{v6ZwVnԤllww}kً_|w}Z)wD QVޒso+j,HW ۮ&/Rd+Ըz-xVB͟FeReFb,ϙX2zYH^*+1xku*©=d7*\R/8/Ҿ闎`Ӫu= #pϔ-yn7)n3  )74gूDIP:CИ1vje4HX{*9[b Pb_,h;[}4p^Fm{F&yI j—QJR9e1E(P(LYFWR!ɀϴ;Qu)!əq\T.eRq]4P&-l~f`dZx 1*j@Ko{S3PYCcP21DmIQ #{R ܶV_.Ub fXG,&v(`h{">99cvaje4cM"f-}PRbS'/ h(\R`K`@,D&)glfZőXQ}QAt6eNxep4VC_Q}2 U0ːhǻ羺y9р먅gМFh(Wv@EV;U'x*/< }qԙMl!aG_ pw/yZj{O_S(s]Eog X"geIl*3djT0]dl"wQNՏߩ\:YԬ]R$ldHY#ΘxZ@-rDs51l#"1Uͫ!CqJǪ-$΋*f18/>I4S*vl ƣTG p諑q'V3ƌLY,$/R,b=1*J`01RbQ\}oK*EP#pݐSuS3*,αdCC `w`hcT '5'U=U0dV\Gvb`%012rH?ƋL1fAY"膤 3=P:.)|/GZ`% R#}R a<=,Qs^R *>EVF jfPT \F#Ene4]0`(A2VBʌx1\0dOVǫ5*4$<{fPkHp"/<lvJy}᚟]L|k_k_f 6`>1 [V[Rd?ΞG?z1^J^\\Iu\wu?U`|c)1>юhZ`,AeCTmۯۜX061.>w"؁3.!MDYqPwIItFƭF%0Ъ!sC3Ѿ9$R:ـ ]0}$K&LKY\.hPT#V IRq*॒I5*H$%ǫ.gʅS"p\u,cTd$.xROWgK"3L33xFF!NECC.W!G5*h;4ʘY(lQV2.uIl D#﹚0]Xzy޶}=b9^M]%xv(S#/-qZUi p1qiHTl8weՀȂ1rxt@9D Ka,XfVq}DiP)0HCW5*\>IQۥJ ɪRtH]ʌS:Q$̞avc{!ajM6\Th WhRd,BI8kYAzÅk~va3ni_SN=YzЇ>k}s)FےԤBd%d8UVLe0tj0g 3Dώ߮טE)Uj'\,b*`S& JʰT I:9>>u4񕷬!\h!"(]` wWc6%`EKkɅE}Zυ dsQ$QwI9Z.Tq-O%55Ca| .ꅫ*kq-ptL.)XW[먉\·̰e{ י1!r%㮫iB"6)hݮu{X8XL> ܪOوp3]t׀j!(!QaHʡ#tP!pRs/so;F}C\<3⹷p3;iOlKjXy'aHj:ݡ9U/36v"ڭ:lK ' *ڲ=t&`{}_}էNK&O8q7%\rĉ=A}_&c ҰuO| ﻞv1=5oG_M[~p>ۻpɸ+կ~7M|W_m@ǟ5ݧ"}5h@˱z=6NPY9O}K2DJhI)Co+8~7gVe`} ~E<熨/J R usE|C`SȫhV2PhrQ]0$|@<S@#q\=֮q)-FCE풒["1֞*+H(pE,.H١u=>ӷT5IfNc⬐TA Qk@?e{pmU9!)uf魆tY*)誄S бف3&xqIͪ~jjP3B"x>۷ĸE4 *$gl]B\RFZڝU4F`B=xi3  /'v`ͽuI,c])d8۷:ib+\D!Q1ed#+O7M(ӡ^ڑ+OD#퇤V]e!T(CcY2:G`d%Y+[$e0Rd+2~f5*(LCT-c%ҪhUrt83Cu."fXJeUGz.)zU `ݹ7iܝ2ӡ(w.|8KWѠxfh]Tp(=5\󖷼{{csqoo !r;Cb"^GGK+u^E^ opַu{݅K7̇1Fk{{kycC/G>p  WR]]w]*Pr=e3gف*A9s_1RyTHОScxQcc$֏@ӦKjHjD1 fh!&ڟSq+#cuI/ #kvF 2Q 3hkhOuTZT8D;G[CSEc!-iddjV* L?b0@jk\뒪dj3A:;p5 z1T.R9cD va!ETxu%#lD0fQ/BdC9?o<٬RC_uQUJʨlߨ Iq.eDXypZwRڷ﹚?+'sR gHZF 5[Qx^!_ffmv*buaL0F !))rP8nĸ!=W: /3;xR#c%cf.XQ2s}pj|@ Tr"d,Q~b:CWgw]=$e 4k<u{^C47*Lxq١u=YES0R^ l=WW2QC2}_/)H1*=-Fbt5ظe0gUD!)@*Z[ KjENο~kgguip3nR}{߇>|;o喧<)7 g2ƞg qP?^2n?~كGzAaMMڿ5_+w~<3[_/rk4ڹu7]oΫ>zw_kK3jgW=?yĩko>/ 1 rr2󍷾{_zO;I?7|~۳џw}7_Kl׽n3~[o}_W⦛n/2ؙ3gN8q\r%~lp!I-r5?]>.! ɋ!76gD R!3 ZjjCzj̉f29zT2^.)$e!S)Wh cB䕫RT@KI U!Vʉ"I ZdxX;06R0V$y*\@*!#nOle")r"%MhݡSB(Pޮ Q]}ܳZ2F*u4ȡzYQ@ݡZu0 ʸfJF, \ ޞ-[/c;L㬤,&3;\@9\oG>]v=kcy>~[a!G^ -#/x/W~ǟ7G97׾࿶wn^'/ȝxx#o}+_r>诼Ws=/3_k7"_XKw=yvyx ~+~eß>]=x=7= ?޸/ர?k0L>QZ,ti<w]w׬Vtz%|B\\Iu\.1áY*N Qjdej7RԌ r4~(@ h}}WjDAe}!ITHBHF0Dk#YPOR25Gyow]`e@yY"zTVES4^.ArfPQ"TĢH35V{b*qzx9۷tٝتSʡ̌Bupj IS >3}`e3&zaW wW332@Y#lB^vw(_ic*L & H1%UQ, %!'e!ZjDr?:=c3p$A`S`=!E%c3̽ ۜ 'ձ[zPjH[1cL<Ҿ]5x]NP#3fq*05N!ݱ#Y`aH~jJYCRJRn@XCT* ,FEʰo,IP<\ oThT d@J?"2N-$꟬!Q9fhTx^EQh:x,2j#!H% U3A 1$L'OV"j]@GXx?4e##5qmHlƁ "Ekݙ'plpo~UW]͟{z窫z}>ye9]ˌhM/'&Tw˺cro|R|/nmyK_O/vpooȿI.KO#y _X=zߟ߸a ^}pihsg<?S?{p77" 7yypq%Epu׹$ZG=~c#>,UԵ ?zM\[@ ظu=^3qwh@, Zre@dn(-m C5` b`eHj9CVFsbfjT3c}Q*;!$sT"XH[Pya,b r%ԸyF;qKBАB5'({f骃]VvW'UHN 2r,$xpfY5l!%xCMM}wVLZV[IIV๒QJ)UaBybK=^25qd5+@,υ\D*@!2*lUÐTLD0*͏xTVuԥ˜:g,&ڏde?"8Ajme\GMې乒)XFӨc Vq>)j.!RQ ɽO iS9̸#㌱!I `fͪ06ҞԀ䎫dT`&e!a잫x@Qf=ʑTQd "F4`H:$*wXeN6ZF-Ӂ_,)|Nx"/&ڑt=SIkf袎EPHA[I5EV1 ]186N-G4̬e VFWS>U$K$uI "X12/CN:9\Yt>W(KXT7%Y̽jU mpb#SY uu"⑾ gFd+k@!ra|* IFU}Pnr09\FESh]ր#4XV򜱘x Fbfv}mLs_ 'op]᾿X?1\8geDjN^3Ra%<+@d yAF x9)r.|g%[V,\U d[q?{q+ 6a{UW]e}{=+|s}WN8=>UW]= w=#L؞rwM;wSc'.91~n>r;9/8vD'(q vixZ#mNY-Vttduˍkg._:>m)}s nc.yӞFϵ߱X,hJ|_|Ϟ};iO{ڱc"@:u4B겛{K٪e0!GQaG+20V^ lo@:۷.2ڑ#d דJ`-cb@X{vh)b}"R8+"GGI[!a0L+9cQ`)cgV'U$-=WSk.|HX#\Eݣ쓲*l>!\}VXB02)L%Yjt'"ORc#iL *f9CR8#MiV,2C@ Iq]RCR"١a V2 wu%-2Y,]SH!]ԧvb\-CirD&1)D;)po|A-b+Yq_?Th7wlG6 `~]y!Or}R[H d>YvȌ7\'=;]|Eg7WFn𹊓'O>я><<}}۶G'\}{{{O>y ⊯^؏g1xп?}gOx^~Ϻ̫ɝFo^KX"/?0g}l?7"S׿d~5~XcL~5ceyk;(~vp۟§ohOc|'=I~|pz~5|~7~7~ɗ| Gg?IOW\\Iu\wuc(rQHX#}]:9.I4aC_Q&LW5Lh_0U(]n,F2v3ڙȰ۷!>j1 ^rCK@38S;`) AcXć UxEϘhHB{= vo(rb uʕ9/۶߱TʥѐD{ ̅ LRA PCJRZFMxR۷g ioubź\ 2Qٺi5d@YAZ3Dmd(Js@)X!!%9(Q5QaṵUʂ $}t[T)}TĐ*u0CW> R)|WN$EΌ]=.ZV eJw@eT2­S>X2P䙂j,$ ql] Ū(xWSh[~Y$Kj@ <‰z qfU_k?ҞD_M+[)bW2DE\Yp",nƜroVޒ)?پ[wlg! ^z[qT)Tnߚ?lg8%E03cl}0Z% {K.I~B#.cEU#0ݝ*/dR!-3\, `m!pf_ ҍb@__{_W__ooٟ 6x!/~CGKy~#c~? ć?Kއ>??5}t>^kMl4 /}1oCܞ|OG]jۘi)9cL 2]RN:ԍ~૔D;JV\#xk xw5(`b%c BcS3L?+|+dBH(}U˸cZ{-vaeT"׀iN+[(@|Txv}T`RFEhkHnCy\HȐhb7 jTElJWabVW1^2㭌ĔZ* cDO ^|5~.*l:pU5f v*3%V*6*Wo]bbZ iߪlٞbivT c+E|BӣdiəC0FF#0,j$y fQ "肻0e{2rfv蓒ʤ/ǫnH{s#بELsI PJ@J:%[G VC<+"h uQ`N/i}s_Q2ZsfwI41ĝɐ;Y]{^uͣO=`g?]u饗~/x}^?g<g.^W˷|˅K D+nxӟwmt7~|> W`{wun7oo>)Oy^ԧ>݃k^sOyϻpg8wcww _۟t0DaoL,bJF$]?jTpIIG,Dl2—ގ^hZvHZCDer15Á cZPKZ)CaL PR_BҞ9I$ވz}_!Iت D 9>zkwlDkO"2h_5$! o?5+g,ẽb+B##-5C393NlT aD1#ES\-cE\fz=wUb+ц ȼ^k)ruB(B])y΅m,HS|RѶm.~Rx,p*:*E@! ƬtPTh J_1X#1AS>OֽE?`hZя~)OyS__Z !y;qUWqΫ? 6`?s7_"?~w/zZRs $8U0 CT`* c o1 nAUg )wlO3S: fq} flvQG㣕$kݡY;clwh ct}Zeg EVz,\39Ea[f %B `Z%-xY(@*,"B-%p,E`[uOZF˖Uy@d%pj 3}XvG=W,Ko}=ՁJƉPQN"c3=H[G2:!x)uA3ZOի.,D(S Hy IU (sciy{eVE<2?UcEXi<,vfѡ<Ȩ!:FU)|HBkOD߱z=2ʨ=f"$O8}Ԩie22"Ba(w%zEP R#(MnKo[ќ53Y.3Ʋ1VXjdL%R  șʣ$6xcEX(mx D2Q72lfqI"ƁZE%E odbQlv-W|%##.nȇ>;uOS>,/'__>#ϸLCWl=e=Y% ڱzE -\,.D42J'ԶT@XCid(q1vЮF0616L#폘U@#С$pd1 ƣ !ɀDJ *hVRd! ]%EATj&<^u 2ЀcJ}۪pY".ɩ/FF%!3]u=JT-2Z3f vI*,`!)cH݊Yp Va,2x ZJ%0$*clf)p@'%Dd^H~@M놆IX ( gl41nlR"yV}RbuQ ]0u`vm@ZX20Su+o)x ]c"]wtoE JF B1E33OvOcLb<6ǒq&{c!'˩tqZe+Ъe{)[fd<ݷtbuH yY <1C9&pұw/_}/zî^^m3_|G>]'Q94'#_9=JؿYK;Jfe<OV5g16: cs~pI78NԤÀD@ΘKʴR+0VQ{B%E|[7*jƘdq'E>M쐊P)pjp< R佡TjXxkظaJڤȘ9Sb|렭J۶' mJ[&M(bf2V!"9ެ**P c>jj"(%!\. ۻGe$]Rc;H^8+H<}51o : i4OR<$EcJֳ Y:'--颮UIZАVЁBߣtvhƑWDs9׶g!uQs@ZUCs^ u$EԐ8АB3cl]C)яWV Qs^]ГjX{Su}R ۩gx׵a`wlc(SᒗJƘ^r^td$/eaT2vI©.ڝGg#SʢQ!伐ʔ,D>e)-7*|P82Lu0vQwEy^RECq?.<y'xD"`P3ƖW~͇HGe.cJ)&"*,H2EJ"3VI3ƺQ.-7=?^x2:{v6Zq5.y}'rX\~UWX>_E[#U3oV+5|wwKM}߷?̺W/Ϟ>?zW^m x;q[ll׸%quQ@39ݍ\T>I?U) *.#D; rvեo]O$Փ.uINm+%03 ?Pۧ|B[3E,IF* L4u:be|p`l*i$gl}fUd'dh< 0D2G)VlhejO4 kRG5yc$/10>)N>GeFTYTR`o&X,Ȥ@N<2E V2b4(oZ:>eqݡiT HQ|vhn^O IQƙ,0Y ^B8c1 ˨}R9 yH5W+=Jh &ڑ5nb9bM.|OcZ^1+Ȕ d\E+H3\RuӨ) PqX8{Կ*OvcTAFˉj!II;گ'2.jXL@:T}R) XnLl) :F*( IOO4+ڑe4}Ԃ13u"c PJ_ 8ƐG &c)1(.a GG!XH>D,p(Eg0֪0$; w{v6Zw f!=1xuIKc<kj6|k/7~wwx{d2G?ʸЧlaWgs廿kݵm=O1`Selg#]v7^llg2"e5Ewc퇤|uૹrE@^yaz < V%ϧUoaj-pk$eohuԭ3;XDXЪ@7T t1Z]Rqdb IV ifTx.BJYؾqi\E= {p ;U7nl] IQ_f!eh7Prm̰v5 #*Z)r2+ĭ1^3;0^+Z$*` hUj8Q&Z.)*&f@V eb!IتШ0 _FC>ŽTCR8" ]R4{Ͻ-ϴT4UrnFF2H^VQg?VJ2el7UQ*Kj:,0"(#OryO%I5%%$+SᷭTEP*'!^SSxNEPP +B (9c1r+sXE滋hQ~'5B IZ ΅5fᒢS;!T2QSF.|wh-;x༌gPN0Ҿ} ?tU"e'E#etCdY ܲH9LĒ5,3{vS-"eb%/Q̘ ('vp(%s(byfZ!#ZŅ$/!Cm"q].Vß?8gxg_v&2{ɥ37ߎw{_{{d2\,\|-ұ f\x D>t"XĀD.3PZLXglfH#]O5uU-پURlT63—J2WqȔ93CpcFh Ѯi@Y(#JccQQ+rDh@"lCW[S ?Vu`B BD@ UکJƘAb!m>XqIJx-IcYQ7t(i +fcao}5_x5OM/c04͑at 6` 6+.뮻ԉ>١JԤdfj%PAZfxiywURd'_b*ɕZCjTU}iJVe4>$ beԐfa\&ٖ $R(ţ$,1먻h4 ͊s_E26ȦU˰&dHE [v'c}WQ9Jeuև Xs)gL@oXyK%*ѷ۷WO͐ LNޡG;a,ڣ$Ǡͻ`3㕌wyxV<5þ漄 T^;pUB+ŀ2N!Zy0^;D89F*D>C_1ƎLIy;fiSuhȌQ<)zxZg:у)B8/PrZk߱B19s#4xꢦhS*)xvl)下`(4H "$)NfHX<ǜ1+mZZ@+owfH(4ei+c/k4I`Bۓv)Ee{S c5n@8ѬoyF)cV8+jg1L=cGJTybM"!hV̴*\E+I(axV {v6Zw/ %;7Qs5\r37F!5íO^~ ;O2:u`7qy߱|C;H~X~>~Խll!R4M)H#)[b+(d\s2!)I 죎8/V&*5YӥpycGI]m oH@BQ>cpp/$ccf(=\K6RR2P㾫ޖGڅ !IَkJ!3Fy3g2F gD X38c`\.V{OjMU4#QeQJ Rdjz(Qant2+I{md(w](^iV pbJRÙ~Y\zG-}]q [V%E)Aao8 xlOH瘁&G*ȭ >j 1tZ2޼:-MYV۶ꓺu=bgceauA :.ZƑHjO?CsWako)אȠب02~K_>`sҞ;H5Xv ^g΋1>VA4)'y"J]R󾫭@  v4y FHvǪQssW:Xۘ|W.Jd#"f%Xo}a|` ʳO#%8ܲCJƄuu`!5*\p"#k9uo@[?6G֊M֊ Ta4%oYYJ T</DQB <\R#/D\82G] x(c4 GiJ#%j-Z}Pސ:3*!*"o]MZdB(,|>2>;F4DzV[ޒtHBza<]KiEMZƹ5,yiTHYq3ѧpO|\vj|$ [ʯN&˷xC1vW|Wp 6` 6 B2j2z* .\E,Z<1d@ZE]˴m{buQzFXgl]5[+)šZ{)*u&*:V2rV"X-gs}T2MZྫ5غ-3L`W 㕌;ieKj,6J}`cN(+k(v1bYif:YMӀ?{Y?ֵWv=%' A@#2!* PED (hhRFi"BMH9mxdKTk_*:Yw; l-yڶǼmgěE5ӪlmP}ݠ &A䶫n\i_Z9(F_o6H ۠HѦ]PKڎ3Cl4.!6țcjnIp̕ 3jr(1f0%(5'gy=Rn⪹גeykRSc+F;2ll랢e};}2;wIČe0֪v\%]7Gqf6(% Tءz!h ]3].zڒ#͜4c4Vg>R>cwA4z3T>y ʒ0dn ]JN"? ۠Xf_SI.LTtB;82]˺w %rPr>[i뺜_t9;8p_I?>$g @H?.-v:c3wIPYHkr]4^ڙjN FA1̅Q^ěeuQJCA(H:*3lfHۜ(nI # ޔ`xQ^b(q 1dGIZktSPxɉvHY&t絍P5brH}y\J6  ;RF'NAa>-|qGK5ҫ3?3Ǐ7?˸O\|'~/~~׾/G>r>a;p3Gǩܵ9Ac@e._du ?E?͇?O4̃~uvt,E8dk%ZSQ%"E#S|7R`Sa+)ARIDAT)NHbzш2ū_24.JJKKg,,d*ǠWLGd א-HYQL]ub9ddP(B85"R/NBxQ kٴ\0gy)Ǧg * ETeS,ȖT_`vuSKjRf.Y>:51(}#yjrIjca+nɡ۠t_ w†GL VLG%mUO"II,ŒcemWmY6"r}P}m9c)lL%B<H3rue-}?̖'y$Yc ķm3,nʝF[Na}|yqoSjtRN\2; X3;3q P2P1ռ7֊U"R@q^<̵3)h=#hbcmF9km|U3 3Sm&ۭj"fE<SO(EN$nGe&7/| ^Wu?`8<~#/_k:yַ藟 G_r+:/)e}N_Z<_n x;⊽Ko.[};ox絓k _0WRǏG.dNeP<,"f`ڈ0v _μq@bxfBGH+ڶ5W x &zr9$>kjySK? *e$ш蓐8˚;,KO}$Kkq֤jCVZ>HD|Ullgf8RFIWqO"BɅU"Qf73N% f#Bx3YYDughLl`XZԛEPmPH)5[DDṼ>zj"1đ*J%}?M[3V$Kacj׋B\X|ϿG5i?w^/z3=@xO\|ϧs/~rnZKzxi8\?nwwC=@+qle8XåOW-ιx}nz(Oɏ<.W֎ uu:WMO<GW/⊃ pG^HS+LZţ9gg&[)*$&xض5Bh_1\D SF!3wle̙ E6)itKڦ]ZhKy?rC"H5V)m6RDb"+c!e}ƭNifmPgeZbv\EAG[BVΝSIP 膂rZF8LWbA9T<LZ]MP:XZm[$F_}ԩv8Pn ->;~w|=P|gd=|C=qׯ؂?GNO~r>LϏ/7|v=Η\w/>h좜{2*(+˩`ŜPƄ,L `H:ML3 8"ϚТ4  난*v L$FPקڡrjQnkh$FF-VF3c^7-x4"9dJ\6$^8PnkHX,1V }FJ-0<1s!GβO2rV☍.qFkIt^hA%կV]%@>lZD-BeMbE.pꍋO#bE;h(GiH\Mb B%b#\ȸn% jDVZ%fzQf0Vh\O3@!*˂urV>c.m^Sj>gss'>/ f.xO{v'IcOO}3_?/x5쯤Ǐ() QP}lZժvbOIhGGͣgQjǦ,Sr)u.B(D Vj+h*w|E9z\-=Q@Sp4cR[\2=5 ʶ:$ HZY~ J 3|EY~6`*O^bT"4"tQn52Vvl٭8g'~C3 ]SP2RqMw佬I'a^:*7~m)L8:F wI1[|eYX ;T-̝)W#T LCwli7}kD7QRP uխOBÚ@@Z3yjh8M ,$H6Z#B-A`+ nvM*R4Y(˺ ;Ӂ)c%´Pz}|cIlBG ;ٍ+SoNt#mPC]0Q LӥˆFq@PYrD/,"yDP2I56%\6 l|K")>f^>%m׫`h~n_ln =P|?{{W.x]OeAJJ9'K.?|CUW]uUW]g]ܝ9c]xl4.pmƭ \=#Ot~{K.K.^ݬ1r'>nw‹ /mw'x{Jx _ .Eѿ۶>}Ϸћҩ;o~Ͽ+ CYR_»guC~w_@e]v%]z;x~I$d{7c܌ygp 쯤_~MbHV6g$)1fxE喭fD*l:K(۠$& W<5wIL3VN,9#E-[wQV2@* '>ԶTԾcN$F٢0" #bL(l@%Eg\3d?%h$87Ԣ2lo.@}ikPJx(8wKaŪg>tYH̊/XܵoeYڎ7B汰EP!sz}bG2FD#6 I̔JJ- `o|`L|# nU]!rF>ʉeKG[.Rim,H.~p*C.>6\ܙy6sY1",3T1 E$$c捍`ga,hdo}P@dJ<(G$&$F>JeuQA~63ofA釱 gZO&΄$|So|9"(@[`P$fGMBU d]Ӡc9 0fll]^[#t}dEm_tļf1@F7HA-6J#} 0xeQμi_8\0̕6(JR'QaU*Lb"Đ8i/h^TIpNwcû߽$fwu޴}=;vC#5#%@96#͜>g\̙DH4[V%JUcݯ^bZ(~8+sH܈@*Uϣbsgra#eu?T;NJa%]#RH$66(l^︊rD%fOCUk3I0Vv;'ڒ`R`^T K,nXچ5хfQ *|So|FΊO%!0̓QAx6dn/n34*ȊpV붒NK4 AamɆH2GVhd"E( Pc6JEK|*D*!'!cĶmy(=`d& c1o(Vꎳ16m%|L-²H (.M]Ħ.)G2K#gyYXpę>ʩVt s `-y"PʉB1/>$NTXTH|ܙͶx'G9u̺!qiDV]EZ3!s2Bbj5;JcwQˍ[*HԤ8 w+= gW/J};ի?}>_:x^;Ws8=I|w_?~S`{c??l(av?׭[<|׻)(޻dVbV|+gf;+obe~xMm=>|hL׼5v@֏,>>8 p+v8~^K.'?wWfYcccV`6>qFLu@"1m܀',{%OtFek- 5M"e<:cP(S0ãKBAjg^JaH9P$bX@zkyR,/J(IP8˒' 8˕TwrGa!sy*L7 XTK?uWlzu8VvhV߄WLybP*ƺO=<ͼQ72VsaG9vQ W-'>nqP9) iPcg7%1ZbvImFn_8cQA Ghr,(GDғuQ̂^}#dYaZ: L7X1ݲ[}E삤a8eKaӠmZmP7XY1}#`@9)⎭֪p5_jQRu%e5O1q ]面z f9CϱQnu#E1n! 8k:<m$yМe '?'cut=?Ծ5xg/|]/~>w~xogզc7?-Oy [?O{NOY|wZ/~ cW4>s sWߕݭ\7rhͲm_nxI729sW| Q3o֜^ ^k)Fy^OajDθ(]8ڡ#%DuQP-D;B(T$HmmT. DbS-Ȋ$1otRxvI">gܱ5| *0i(=|IkJX'\M|<.JΊ% jO>qĮn,4n,]3VtQO(G//EPeP5“.} (3Gm$At3eJo+M+ E#XYd%(7L)xSF#b.4Hf&d@̅$ʆkC+IIO&ce g9f,$H$9Tnu#B-P('0[k]Ezժj+X,$RƐrH7/뾏rVȊͨ 9Nr펭B[΅1(Ccm##mcFI횭n5)/삢w\|5sMH/0/~k#XEA1q wA-+;֖.JSͣMr %W"ęT}=&*I[1VA}n-O!ҭ>>y{e]Qzkoۿg=kƻ??ww~v?/_;n: _?7?+GYg]ۏߑ~]s_>/l3y+ןU/e+ vNu#k%Nz -[S=*@bz8u^s4PZyU!Jz"(dFP"vA)SF{>iv׬Ջ>JBɅMPObY6 J#e*Gd P[ Eՠj|[5 (,ŐhI QssHQ١(f:.ʡ3}ěJ9dl;$ "+Kiܶ ,)xܴ” RMiVG-"R0zEYVg>sE.^r۶^1t7`0ge 3fJC gyb!7EDPZztH8ՙ71qy^j\%}Ɛiy2Q4yQL0KHΊ%2̏WQ|MFPAV"R5"K2D(U?`^'Z(s-Kxy,VM7ufjILҘ8@A"P.iK_.JFߔVMGؤ7sjist]eΊ|ʹ(dx4"jL0qFD SQoA P0˼ 4A-i; 'H1dtI+>mP#eCI_#+P9J!IAQKэsaL"U+ٌrQ.Q-'AQmdymD"cɲqMbTJI%'jLsP8+唑SEPCmW떾^nj4R{$4(]}3_RVDWM'D%o&ވ Y\KO-]y,꣜zӈJxlDw' #P ͣ$0͝;3!6>JErt!X~j|@7Ej.-$> -T; 7fĜ ;Տ&n/h^ p{_8 /o__C]]Ս|ÇҟT]yf^|?_^|S?.?O1~һ\_ڻΑN}ckdyP3'(p5W<`ꐳ0Q$L-A .k;PN`"HJdHFsK|@:胺C(7R.d}.qy\)lo$dycnb[GL Xʍn@؛qLP34>CB`eYfĂ{? .qœimX1Kkot[?{~ 7p 78'Sp_$|s>O?УWǯ׼5יc9?ɏ[|oݿ+T!cjU"1Z`kIlM2m;3 *+4sEJħ޴Ao|͡jAmi.GgD@@#²CAmXH ˪rRؒrk A9Wt2p5nj @`nD fgy}6J-’5w$8.J˼:)(u *LzYP9#䢘9YdnQPtC^#a̩6s0%`)nH)s),TOZwVܛ(HE\kCU2jSaro8P.KxF*5Ԫg( Ơ(vI?p3ܢ'\cm 3oQU+M*ml Ũ r5Iy@ŕ1sQ$vl raFOY(}.yPS[" tQR™ET @YeSA(|p2VvY.Mۄ96ʩ7XF8˥m[w^}Ԙ|!ru<Č'.Jzkz,XFV7sAqL˺3`%UJbƘJ#Yl. =V<.^c< eP{;gE42P׻UALVNdŲ͂c^ֈ0 #!L|&ngmP5a6mWkZDȽE dXoDBx#N_O]v#BG1t7JMc8q ݏb@6PAD~BxxTR<l7g*{r< E{`~f:pKq5N=һWXvP凍bQyArʘ KjGx-ONgT"j&HYuVmP)#EȤ3g 5BaIېx86m2bqQ jlfaD!Ǽ;ΊaM%e}2JRB_ZDE@Cۮq%S ce$Jg*N l T~`B3Ab<O䦓;lMz"8zyfВZ,i2"*@ xDd'X3m۵#f<^}R}Cm"6 2VCPш1/^=sM8O>CfQ0vSgy즭 msȅCbaZ.T0$ceW.dk٥IُCjQU>-)W[ϝ1VwA oNw,`Reko =GMV#mk.7FEP]> DJāN5̓ڰ͒,ؚ2J77-F]PJYPX0e, A/#¤2,|DQh`PkQoH_KHO-)J#=b&YiVM JOWvl26ʧ j'(jRm(9%$R E8f4}i(6ƈP 0fy3>k ˺_V4 [5=6A(b8:X<1PqI[#"M "H+.sR&XјJa9AoB@9ꨨD 1L<t Yy)=rVgU zCTkw4[NpP_ԏc~]~#kOz~cec3ex{c%2s胚( +'L*'A7ʪshvIN jP;! J3qŒ]P6 Y4"2 Obk$G(fLm3f`. pQ–UθK\bbgtS*JB}zIۣͬ2f>brV̵עy8so+so^+#[GiIJ?%adXҖ7Sœh3c@p,$^0qg>Rv 5Vt@;ϼK&+Ln16uolZl{kK(!qU$^S\k.׫  0Dxn!>JJ-=o'1qP[ƭ第no\ν,*7NHZkb|[ѐ| U HGJݺ$l3~xt2<.mWVMW* 5O}ba6 $.FiDvLpFA+S"҅ΓIHE$i#BtQ̃I$O r U@_-F1泋݈y"hJF_IRAz&=p_ ?}3~>^S~Iލyc%>8~FP|-BiC\<ɻ(SAin}C,٦k[iWL7TT7shqoX,pJp3J zMvl0,"̼6<0sP%Qjr3} s%B!}cF?HF="GGXB{it剫|X0ԶA`>. %6s_HU'lzĴdzJFL$E%C#q dRXLfn#f0 n ̙>x%Žqpvx0<.f#B,!!+,~^Tһ$O')`و'gXY#zAY6"+zj} v_$(p&At}ce,xZv_Q̩863 E0PnEw'Ĝ I`>ra66JD.rᴍFA.dP\$eĚj2\9 ʒ:e^}|EHb#"yYSay.729/h^>?{ҭR(j \}2[n.g[~{޳X,.첷-zԣn^{g=Y{8mn۾یOP~|鸭Oto~#qW<ܳjiiiϒU/׹ K+r0>vs/U2N+EE샢Jyֵ> E^/ j$1ͼT<*RJ3k2(AqV(bton,Zd(4˜a*9T;{coٺ>dhGβKb $`@@,wG?{~ՠLGymi|G<7{ޭp#;?hX <_m~ox^'Tm[ sQČ׋^^ 6""pV֪vUw.m[7+L!q܇ cf_ce1B}ȱ }TSXD LE.wNWɜ6j9EP\XtG*S%!XqUe rO S)cA{v m^,hDܰfߜǘ&yJH0xtIPwO*f uO\O 㬜\\ClkUkDt7qnsPv3h.” ͳ`KAkc^X 6<4$ϋO/KČ>sJ%"ջ(|]Pؒ;PH-j60S#jՒWz 6JXڎMwISqI}]]:FXKy#+BEDV"6Q ӑr3"{/+w^)7T.42"+!#%dk꒠M O}E{eɼ XInIYF76 #P G'ZXR ;Tͷm5qq̙ě6֫H<1VB!$dA.랜o9#Ս-cm[QEU)g>uMuW"qIP ;1jIP9+A)$ 9(btu5$c4}GtrC 4"ch g>~7!Fx*gk%rK Dj]X9 B IČ$Yt?U4` yZvZ'@aOL7蓈mD;+SAJqa풶kl1O)Ǻ+kx]Z 0iL@9nZ{RAzTO> %s|HXsv7я~y{sp饗:t s#~O/ H) O r:[~w7_%rw+ػ8JW)ƦT< VD**4] Νwl5flkm0BmWRa'>jrtԇ!s#恲|*baǙ3E%}R˦t̅UdL7Q c+@X9DKB\7 Pr0řv k_11etAsacl"0螳|HY#Ⅳ)[#eתnt<J-X7 z)\q$=`JQhj(H fky2.{XķB9\/VT0 hYwGP[VK[/?=W>v ğģ~x4{w{loy>[.}=t~BM?i8ZÃ?|gv_zG_zc#7E]tET&Eo=yo]_sNjy}#x|.?vu%mI1IČȲqOzM'tiTp,*z[듋QL|j+O!-oyDPv^l8h=c_+#c*-avC] 8p`/t<|ӟ޻ɿ|]~mW]x_>O/>=|~~/^~)7/ߺ=>//C\{px2s@KnE}7ok7.򱲔Q+WKj[M\E! s6uR3nz ='4sTX:j,wIP@xq)9#)}#mtQ$0m׌3iFDY(CAE)ljmb}!F7رPQto\ *G }O$ZIqySa[HAcB#6F*e ߰XBӒjc#4dRʑjq^!c.,fkkضTKOJ> $ Gҍ=)bH8 bQ浪],jLG)Loh.uQ5tIu𙯚VbZѽRXu#@r]PmP+/|˺D [ Q. ļnJzJ(?s JaHoxZNSȸmkV"N|xlD0<y꣬x4<5/p5<- 0B.`YYڊ6JfSW bvI׋q-T"V$ I\6foYPzI`AP\*g%FbZo<"|(U ϹWhV7ɷpR闿cv maZ#n#nx8.9/被ݸ/~{pwY_[[[[;_:Ի2yس~sop]}s~#kyΏ?z7WQ.y =iclx#+U'/zj>G}cN5M?>ý m?= ̛7.^ﶴ3+k.=E-"g%gtDMrꌑA8V`2"p1v8 z5L\EakdeE6(E6ě$.3n""\۱pCJԘ%+EYXgH3 1G(w-ySA8wFcYTPSg& ҹ;b>6WHCbF#M]FÈn1xX *}!sWLGmRaKt;<(7ZF2/Ȳ<5'qt0[5hL?9m[Q,j"(Xt´Vǹן"+$ŬdX6=2:;RnմGbƱo\76Nt>לm[;2AapS;yH/0W"ν9CfڒK @H<$2Pԭ!.*jH>> Œ g~츊dy(=E,)ۈ1g2qxoX١rDk4P`,~YrQ⑺+C1Z.lemW> UKAO-[iϖ\yZ5Llz͙YuްXrI|j2Rݫ}$)xbLF㎫86}3gf^o ў(ZD@Z(UbWa똸Ctd-{Ԥ{.}bPsTGޓ?c{̻ ;nx{+S_+򪫮zO|}{{ޫo=w¿ꪫ+_q\Y_M'G~K.{?J8sԜ9v>2ɍ= ǻ\*ŃOwgCD*`.K.dvS_(? r̵}sKaǚĴ^!qPq*#]Gwϊw+nN}+>4N[}M*]}DžךTlH 0I؝r+9LbGY K BAH3E0WވpmY1V&M<oZtzcơ]PSo_8cAͽjPbF(hPJDg̃|S_-, m DT@\U퍵56Jy#}( V\T G6$ڠA&=<(nxca' ARZOfD)GY;1l-f{]fA0Qܮ2,+(rYt4޶,fݞs"G%(Qks[͵ҲJ]VVani)4J#JKrݬn9w'NM IX|Xg^{|:( %I52* |Sό*^ c4zu.JegQAzs!^B].^,O|?{ ,vO%E?I;Zs'O|pxx׾{߶>//yCw̙'?p[_?ÿJ\|}~_ˌ?Ua1q i7+7}3E^U_ys;Kme/]\Ro%#})~3m?g?G}k߹sMs>J'zyK˼8HğXx;5\=]s5r=~pQqV y #X{j3LcR]Re0'!,!%繡P`nYN cE%#`V Q l:?s-Ox.bɒ²3WB F&rF5$jBό@JDj! h!*&@ni;XkߪW]}R˨C#ccZ4d MFG@8־VdB{3 9g1T"|˨)OR0C_1^|>jQ%ZE)3Y"1fȘ _E}$-3ُ]@TĆ@!3n +T;,B ܰÉz5~**293"0RnM%"ˌ3^(I(d M T13beЕiCWsJ˶7 y"& .XTɆJy!IYBFpE΅/aH vI Vh \y!aAVFheSRV&¡(q=3?*#IlejTď/燆76PA2jC3Wopuᝠy/o=nG^$ì˿+ey7}SX1\.W_}xOдi?|cOƻ~;.>'O.M'˿.ɗ[Ot!pw^O<}d?)<)OYX,|99gs_uUҟ9Tǒ J)ldlw(I7\sICijY * $%rY"2*lV} xed©ܡԐNF 3(<ޣy5/x.zJm_H˜I8zLپ^Gh˜]%jm"߶z;42 GZHF .acw $RЪ8tU v]uXx̂'+fk@ݏޒRDe\C9!IJZ('Qfp-cC-xH9n%M":P3f91n0ɘUk)O2^as}Ȩ!m~ V&"]J=أlU(2b9*`VVͪ'pf?+~̿K Q ŖoTy1/bӼ3X{5oaac5FV16|˟u]~ oxj_W>ϼ5>s[_D+MozW|Wmokv:nmm%/l>^@_~ᷥ_{O]܄x} }k3cQƧ]wM7g<㒻%[/}Ku=o~JOxٿʅߴL *H>>1-ThUXC r%cBB1N0Q@Ojp !$id{k ZYD88=OnɲϨE,KޝG_}"%2yRx̰SuZWGȭ1E#MR.I*=(9/KokZ"d(OԫCWM;Նv.Une¡*cd(ׇ1FeԴTa@i΃JfC#XT@sW]3ݧa`-[N 38fHE i"j .):RCjU{eɃ!G( $*TIX2$]404V>1"ڃf2ȅ72(k9/.*KJ?gg6g ߰"XΘ1!lء#d?owꅷZfAa)ܒ^WE٪; %IU2j˞7@RX@hHO%ECx[쓢ϗ釨))d`OpkXWTux^ExezaS zk l'ctJ2K՘1[m!mUեp(ȅO4ÐT0QkBd,W]5RPςh? ݯer+cg경>)<'1Su]R`"7***fPOKՋ`ȭ c c1Kal46nY*wNl! BJZE%p MԹl# DHr\B:jGJ+:(cJYlW]+` 1|o&gae#,J熶0P"S\8)k+H#㈈#Z+D "+@Թj2)ÐTj!)\D[)9޺4 }dVZE+S)| S;`KonGʌk?NB-J %RL`eUa DiF 3PZg,fh`$ i+:1T8fl/_Nh@z]&y٩W*-Ԋ!EҀ)_w F&b cZT T|ΥwHClAcp.|duRa@yY`2N`(&ded`2pYHܿȌGŬG.swnyi~Mka^8|[0ₐξݿx~s\c̃wMӜ?KKY,W^y'峟K/^9tXcv~o{j>/G?<;]#x%1EUɸm{bohڟhRbj7/R X (ȂKd'xрH!\8+V1 X I΃,vnbezs=^uniG|TBOpy3 Xx+D6ۤ"T2rRfQcAW*0ƶl (P}y;oUt]V2${p ]}o]Iĺ"NsECkՐC'74j,|v GUdR\OJI{Yqb]<2BVMoٞjGړ!![+c<"&%qƨ%H$G"V{EtIу2chz_E=DU _aH 7һ$mBUMcRH $7nm)BjU,i~ߔ­L4RdvQT;rWsoI5i{l^4๾%$R@8I -&S}RS8/q2"Gi!82IRCɃ瓤rlYG$TE4'D;ƘG3,(}S? ҏ*IaHBĸ+Qȭ ^6*0ƺ`NT+ X0$G=(k Xz/{974XgljՇd00@sf?y٤ǩI͋/fF|WoOqø;_ٓpGݧŻZMهNoX5xģja^$џx&/_Qu|>c n浚3PLgQ=QcL AYddhEZE2T2\UԀ;v5^Q缐 -c ^+) IcCsCSb3me4aoc0-^ k%9|'2P7s^vmwfhiXxhaH2e v ˤgu+naohQm$?rTF(b!iQkTf^ Jjlcdn$ĸO܌vJHJ\Fy -apƖ6wЇetIV*s5ېEar婎ΘG n (+H`1 h! ]IJJbROjdESYF ldQ/1TM$QC#P#3(Sv02,@Hs}BoI wuBت˜⹖Kj|0F0FzQXoYN@dRfHՋأdt(Vk5`d/6 g3L`ȖY%Y8su'1ExMgRRV-}3T[.jEMZ|DK62͆:vY-Մ*`XDB <([hF-W2 ^Z|E嫟3Kӿ/t^߹O3>4>./U\4/d,d\u6k6{X2 mGRR߮V7_5E bN$+I>F2^ Ywu)VvS 2ʐUfZjSjkQo oku'΃fZEM%fmW fd0%1V&$ʉvtqABzeGaFqԍPNpnhcd+mQVa&)}sC3̂GH$<$y0 V!ie7q"e$5HJjH*b o)(U L"BDxRc,jHTa%e! ^I]EeQJ}`.",IYT*^>ZPEʢGyP:Ȓ`,>F:P)OhvnIt+J wr>/iqa>O ɪŋ?ھ10y?z{c!wWm-.?REOkk-!ܕş'|a‡~iL85.-nvUR%cP8~J"CJ᫨1ժ!QcgelH{iHJfP}<7*VȗJ T2dN-3V}Թv%"jPh?Ҟ8M;2 'g36R3 ^6@iy<5%C-;"z쓊Dp3BR%=oZ.}T1CJޥM|.VL\I/hH:vbqg,¡)sIiz c} "c$! ,5 qs}Kä '$g]+T"0 0ڇ 4*lSw`"E)?5NJ[J-XUԒg)2 Z 쓤VLy׹v%cf䐔C)E2H Z X8]Ȍ/E-*UҔ9$SuDuʢO*")hVW3 ,v>Vݪ,DidYHE03o@˶N6K9*U%:cwD!t]CR01ш#r+VxalH.깷)F9f]u%UG,`&3NZ_y[ҵ 1g8vb <Եe*l o]EPi(bsup+ 1e1.: ]{v6;Ywדᝠ6o17GIP_[};gk[ԋג`Y᝭83S>$*r׬^IYހ伤"8cY1O,p䙾e0eqJTxHcM,VA3<֡b3!^44C%,aL/#X`c[Ha ,XY0]RfM*j?2 ۧ,BX{ 22RN)|A\yI 3"M) ϺJ(X\x듢@HwDmy '%$G*̽=p5EDlBe0tY42lݦ԰ 㫨S{3Ra#-vEfL &IрUOHZ&G:5tD2IQM+,Fc3W) "Y,ft9+]Rt62޲̼:QvD%zYL+QV+>)T~,|`3c jՂX]GA}#5-)w e"VzUe`jRa|}e)K)ĕ^F#;摮I1+f;~яOR/ _EcL^ukkFUޙc!?Ҹ1u<uȋXuo!%c:_??zp y3:7xĉ@̢OJ LEp^(֣(O#D[\yψ0sUL2H^F#ZJFi"T[@ EO ! Cv唅?>)(Ee9LtgƏw?{'KS|Xc5Xӄy`P;?6%>LLZ)Z_19XcLJ[/|O];ڼꪫ>kC1~G<[}nx-wJcp 7 Jd+KTpyWdܩժV+e{mj 9,'鱂d$=¡yפ"NT-٥@ªh t+<UGV"#, (kILX h2n^\hMWIB$ x#Ra"\E M3lXꂙ0Na6'±L`@YT*PEGa<e"Z<j: s GtUwYV*TU8.*塯0e0!GD]±E4[u@jUЀ8c]Ԭp,|H:r[U]u۱9螝͎V.>0|O1E?|#Xc5XӀGf'a/rO%1V0<+I3t/-r-~$co~{ʟ{_x/?wgޚbcP 2ĸIC2&z`r tI/1[[X22*ta$yۅgZ OY [> rR3Y`ntDOBvOUanDPx5MD2Z-3 B£\FCdH.K /$iL˨iyxmۯfHj̃u(i"bt+Y T IYvȅOyiUhd*H^C :f4D2BrIIW!䅺%]hodΑ}ԚDCШP:$E97T)R.îfŔ22…^ɨÅ!!Dn7;pL}]j8te 0ΣTa\]:Sn@f@Icš FJFrb 3Hq<ȎnǷucb+k'()uUA2`BT $.8cV ߶=cL|+pIU0|J)2uJ  \,Z"袅@N8/c4C/;>\,fHRs. I-!k5Bi}J Xc5ָ7!pI7\3θd?җ~{V|kpg?՛>px4_3O{ޗor'_ntO6WRoQ0&y"QSY􁫩.,XacLDdKYlV弫cƋGhӍ識yPY& Q9<9]y>.)bwn gee5"ϭ9z lv:NYc}[>5X3ŸO}>>VS ;^_~ﺇ>Xcgv8E/N]{nt_woٹAȱrለTH˽YxaXt殻 oxj_W>ϼ5>s[+%9 ~N>[;_л ogw{F|wU//?sxsx?Ƈu!QƧ]wM7g<㒻%[/}K#MGꍣٟ2e# |죯AɆ_헇smscp7?YϢ_({7y>6_'}խ}?tǍ/|t7w%\ܶ}*" ­LԐz+oiМl*r]-]F@)ru2F\x)VU0S3P|Dj`Mw( s}{y8;4甡RaC;*)S$S,iORřXd\U,HxR¡j h 2.k7ж*̃aLAL8jS}п1⍗>t ']&snGN=\E;.ݴg :A7.t3}`e^ot ?>* }I+|G]y-xo9wN7^{+7ޘ8ա}RJ="(:,P Z&Eι36ѾުmZVj6y!Hx-; 4QHyR 9e%.RJ q`}Ep S;H-lsok/` uQmO*s>) ׀.Ifi![?Ա˜GI))+<3uH ;P$c3_ ;j#e\{j Ro!evK-yh/enMlti52ʰUu13@Dn%c gBUY B2.j2>Ň["^-F>Fv4E/A.|[Fsnhr1;U/)p%%hHRqIay*΃-I2ԆqS"y5 TЀJ5~W:ʝKỸɌ/ G >༜WoTت)IX"Y>j~LYP. ^>!EER/%5NE&TA]P2$ϛvPPB06R* VUA2*,|#7 kJ*i,țh*i U2Q52[m?$Xa "{HVRD;4%IDg[ƽvhO0Ƭꑏ~=􅌱nwxߛ 0 W<0 0ѷ]d0 N;Oo%^tMn]3 Q_E㊙P}8_{woGҌ'+geG}'~p?C/mW='_//^1g>t{q|.1jAdTa 0 =J 'n3gz,0I^jk$΂%90JƔEL2LIzYh-x.ђX!aʂ"H9"sR2iZ= 8I ()Q^x@b< xnhi@Ջ3o cX*a6Ws ^"c`kIv(.ڡ;$=J) h(P16pc3ўҕ >*.B0YPPf3hoh|Rʹ`fb>)f?4!*88g9c+|Ts/ÞSvRxb!.FFb}_:*OG9F`%OJ򲈚2FWgƤ4IiWE2 ^h+Y0 ]0P(/4R,]a4`@.G!2 ȑZ4_3Di8}1U]R]qt)=+f*RBcI$kH 5 03nd KoJYH+Hoߵ.}j3;4!\̼PrHVF %&o&gQH`+NE(@K>cZ?q$Zq{v6;YwT^&z})7{*w`>џZ3t(cx?n˞'^ ǿ_|,Of{n\w rW?\9ܽ ?gGc9?G;_~zȟ|x43up QY__;<~-қ#CWkx"r66N<ws 7tz8C8Y ^VR0$ϵ'e+,XX8~j a2?gc7k\]) "ucTQJdRuACCTQLhRj!aV& 1^V ^Qa c~jy4HOhIrdYB[$L ^NYpV c1Ild0%4( nhHY`7}cOUp 1 (EVk7dg~W[,Oc{]YT1&/IoD/}qw#?{o'N8cɵ/woozk͗N7޷8^Iu n.jI2KJ^/9 H19V>d"l1UJ8漌L`!M@خ2c!x""xyۨpIOcWNf)ۖqN[ x`j܉jE}3DiUuf )`ۤ, ͪz B2J@j0Cÿ|Pނȍ1 㨙J7%E\2 ^J9/RK)|R VV{TAr([AR]ġ]p/TXG/#f8uTFY%ga Mb^a8cV&RQ*3os` c$ ?3}4΂w4ՁZ%TJI3~_HHX0%5ޣd<3̽퓒(dlUȅSZf]up ! V 4!cEcUx֐]E]8^ZF%`sT"eu5颞fpI)r'"2*Wg]0Xa߄̃=׷˨Z,.cQs0Ԏx{n52"$У^8TJbBڪ:#~+rYEzHji*LpH2HɨF Ulڡ.ٴN Rd*gvHqE@3Egg㟕8ߥЯ7|ܙzVƴ>߬=S|5磧R]o]a2Ɵ\xw7/wTʟ~{fe~c1ySvl=[YW><EWgК<;/-X_]?#O1^݇馛\uaϽRmV|2p$ej.c ?NtCW>AWlKF==+;xx%1ln&$ t?P2E8V%)Nz F|e"؉z.P1ƶl?wWDO:3NC"XЧ$^F] &$SCe՜F"'m]f3YkOU"O0z*k@WMvV&X;?}Ft+x9;{x{NY;ﯸd ;W]C'G;`J{6.?E+N}!=an]3 >x1jUsBi*Xl|m0W_5̂͌K3TZYlACnd\f|d`!Y/hI:j PJ^TXlcq톨 $)qve⼫QϽmL߶}%I l@i7RKiX\Z'g#-+R7V^_#3@Tظ>)2Pq^8cԣy2*(I}N1rV/uJYpƨWԸ85OJXDT*QSgݹF|E3OYlgN5M;IQK[abV22#chhje˜`xk^b1 +X{p]U8VAxbF{\'ը0R~4^C:?4]R3o=ʥe:t5HZ>ˉv>I ±0x^mTi2P'fYٰˠxP ф$Iqv~l-^ Y+HFv$LI%F ʆBlQf":eȌ}xEf<%G"7*ōSCa,g" VQHtQ vPRM,Jh8c H \ g@jU kn86ae Dޮ:Ӓ1σ# I$]2 [א$/S3{..蹷C3I e̐ⓜaufRDwTդkq/eyŕ?\9{7/z.h.}sD!㧿DaW8׾`O;2Ƙ>5# [a_>1iT,燻'ClnzɈo9}\믿(k=>p4.ӴMBnP?擞'x%18j*|Hb[s^mՎYP$RG*"f`P`|ArYnN<6na&vwZ2Dv0VDɜ|#~*>?4T']1Rjʸ\C+"a<{`]-x9Q8c'偫ʳ}7M3h#} F\A 'Fr\4N0<¡<ܴ9>1N0h6kv땅< ƈ*>@3zgY`]R4K^Hv8$EV2fqjbJ%v:e##a geT,b.EKaXehH۶Wx[?3_2r1%pH xC%5e+k E nDy3g2*jqƒْc\U˸B uHEXC}@s5eDjdwu.g [NB#xoKˤ.mTتz \ZLí١,@|MR@(ǥOjKrjzErXsC <+VGs*C'#y׸ {C㒚yHWgX!)a,!C_QS1|R"@ 2P5gL6*R{T>ߌt]R[fhTА(l:eЋ'C9U) D mYLj8c)T02 Q^>zzkNU2* d$-(1'%gȌrhwz幡٩:*)N4H{#Meuv5*2c>*)m-Q#47*'j _MBO"lBeNtIi1 )^0C.d̅&dd s_q^]{''UQg`ܴCʰaPv0^X8gU~Ba PgAA>O1F5 R-に#Ș93.ykKs`6P`eڮ74.jV&9Q tR ҥgpf?<3\ckMklu؇?|\/}ΧuG|cC/~W?tw:~/uwY /{>j{t<v.:Co=}>K.ew3;B>gof>1wkm<)OY}(¬ם?#߹xN729.m^OΟne0l{V&^4rJ>2J١^FH c@d"Js3pEO;p55dlW]d[*$ϴVI ]I 5$8.epIͺ;, Պ1*jѣ$$ϭ 1B.)ΘG22/TPި@Rqp-zU0TS/#娵)2TϰCR] GАJ@ i@y0ԫSl H.X)~ E%Eu*[WN6FZ"f11nde1CjלC_Qil(ENˉq;UG&ZP5zE0t1?5 JdRcʠNύTȌiHIIUߪ xt2^SvQS"kHv }͹µȧW\ 3}^2҅ 342*@xȰ @Ґړ D"cfC_љB!prV>oz* KwB塷sM!wѭR>1c7V믿|3]3/| _X/7{އ}5܃t]wM7g<㒻ӻs1^җ>/Ho~ֳu_wn_2+x}yb*@2Υ,*P ]RXqgfg,dhdd ua|RxT(9/]е GG1!!VvCR!VV yh4"|1mXD-swϳ`K 1)r#cBL1_2>=YZ`Y [)n VX eS!ITJCa FF ٮW]4 R-#f'u^YخTP??4.S*9cR胑Reu.\Fݨz{3, 7 xk34`axR8T u !)*NUߨejdځ[8c'%M;QZg9e׷ī,\3̂v%ϜVV.ZvQψQoځ1NZ"J '\K3$u kwލ(&13xs_pu̢Q%YhH>CWk1eujIˀE0VfTXK[+X;-Q wy̅_.8cK"Pydr615BҀR*TD@A \yC  CT#(y&KqU!msKo+hF όs^7R^U0$Da2cWZnYeTs$1gL7vIݺ̃- fQ sRJƩ(.Pk"g%51cc+L?$)ߨhH)>)%UK ϗ.=;;*HjһF)77]roVJ]|c5˿o.Ɠ'_zg'Gz'sKN!֟!D)nkeԤܭ\䥂TH\DS %M(S 2W@:Ȏ 7|R`g@(BR*/F&I"Q{J&%z󲊦KʡpĸC3DD0Y! '6H3q8) %f!x! VX d^*h\bYR G8poQFP42X%SH`OwF!) ٮ BΘ`E Wnp,Uԍ TXA WgDրXP' .t!IlɒEmRX롫+v+۶猍ߪ>e4H8tUio XIY$#98ӏͪgSVmKQ@9#yJy E$Ow#y5 sCԉX"/+;*H5iɘ/,˰2Os㽇g8^{k~G?nPg|[>wpp7q|o Lυ; x2\8c|=cl7ZzQ"g3eS3HNEbc$Br m (󂌧"2cTJ8 VaCzpI*4jI `XV&l~tqoCSx̸Ydb۰؞'<+lʣ-!9T^hTP)Tޮ^2,YDy;3I*&NR# V>RxalbCYX%%!%d袶Th.СԐ.9#q4ȴi|I}!C@TldܭW0j. yGEx<V_CDTCCP$/ U2 VHu *@)NȸFjͪυӃ[9g>Rd!qK2ԧ̓1r 5ȵ &p(cc8/UG铢k+ S3Pa )#۪Y ?z/L(x@eZ&:=J)G\"+@vڷ IZHG7*DVF}WiN#f)|0v~h 9$]?ko /؆@-U}ggE4]џΧ=)Qξ/>ٿxb3\^ϐ1w{6fN0N766>˚-(b`&v)фZ+F& i+3LQ+B~%C]FՓ ~T(6;;4U_A T1V =JF*#P0If4tQmW}̂!ϛFR`*xiU8MPL;Z$d$ߝOJ<~*+Sal*+c@YɈ3ƬL1 i=W */!F*"rqϹ:"#o,$ PKG.<&ht7Qk)NݸpGƍυz9fy(wf ^殢;˹=,WQS2p̂~S O $@ CʹT88s0U1:ZB{"ȸe)0P F`D;)ru#Àju hᐡߵ$yҡ4Xۉ"c.P'E* oT'y=#(@ꖠJ0glWZ S3 /vjyHaS"E^FMCW >JE%0mmU* ˦ r T俪 jF[Z޺ N9/41HEk V4$z֏J}Q"THYzK՘Rf9 GݪبzKQ_.8/TvꏯJE d,QdH*fa Sg mځrSJRX{jx!fa\J1NOjǗ!)nBkZ{Fم PJᕊ SNK2kͣI: r[7&ʸ A'σ]FM* lUuf($ E4gjT #hy p^9;j*1'ByalC;*W2 ^]QQ8/$XY̼=Y/+qXWZV%2n"U4!C!2p^}}+ "߲|5s%AeJZ\(yN#DjkGG#S@I*ŐTE3#E^%ahnھj fyD.) xεƥ"W3o]/8 GS La…}k!l;L?II$@ sư3-, "QuQVC_q^Ze#cT+H.ZE*<۷[Mqx-T* iLaI-036$yj2* fqYnW``n[`YF&%p@d-%D^㓤p8Ɏ8cs]KAy%/!Ԝ 6A|u0ԇ"Q cd?"o+#`n`2㜱e0`j/Z`*ĵνQ:gѹ͌7M?6j$*J0FmEQVx,b;2s&ldܴD;C ֔a8/]d\"w^7Oldʅ2"8cLHR223OSh]Ŧ`k]+OEe†9+ܣ̅^[6=mhdRJ)#ckk ۗ8w]u?};JbBg,fK]R,"3SCRYɌX*ꙷ`\ >1FODlu0*Z`.Kj8b6.C&b|'E [GT,1G-EnwI⅕fGV4C:1(qbi5ƦIuQQ.jG!ZNƺ`~ꀕZF%xM3l!2ۈY)Gިi9>1."ju5RS;`R hUkG U?ҞBQ[Ad1'U2e0p徫)@-Ko9/`V#2/gQtRЎUڡVgaa j4dSӪwIp/4 Q6Ҵja8jL5`*"3NJ`л)j/o } &evjX8Ӎ+`@sEu8T;UW )hv,p,jc dldܪ:, _㒤^'RyK ?-+ggM{8xhAEDM jpt:D44@bDcTlQ ={k,/FĐ1i :NwURṲ\2y0rdvъH|8D8mQM2(/oȪ`g QAe3wm.lc`˨ƨA3ҥ+sh'w$?a&õZkZz!r yqMyaNaRy/f\A_@oE(Z/LMcϝ Dە4 KQ3ΤEV}{^XPa1ȋ-Y4,-Yx~*.[rmq '1w'fTSGV]j<@V$ \+`,9v-R(|&9&di0$EwdR~2ɛ: fv*L@Ցk6;5ʨ` ,̔/Zʐ 'v3nሶ=-qVc႕SͰe^ydQ ,]7=g0O= I*L!!F1 1Je"jh+h'i^R<. ?v J`$*O"guX*K]Mm%> ZK%fy̢`>`ev`t!*re{ tCand~v<&d Yg$L <͡k& I->i`rYpVNFND"3,Ώ=B|^y 9؜իhUQ*'h޿54eVmlWbF˱k &ϴk0u"n(1yT͵f׷AB׻>'3W]{o'3מŏ;}{FpZk W7tS,;t텱oDTNEV3R'"ČiK]8toe!x<ݾȩȕNcgPZ+(052ΏyOm 3nVQ,:8/Cu5"\=O"\UjWsI2 l]]iBY /!*@LoePHt mIi&}+"\|*Fi"PL4" Aze JT3nW @a(3j9+4)2_̌",gb,$}"fJ+S鉓IM-ґo|Me$YpV5T+Om3ZLwqvMdX-Xd8n,|ی;Љ8*?;bf*L'*=Y]E*O6U^'27E;:+Sj-ݤVvYQ":(M)TNع,$+Un o_Mc*&aT$ɨ\M Oz~[|;M^WU_P¡rV޳ֈDlp< *'XuI6 O7> #DUT Y"t2VMm5Tج"Ol&=̋` &Tc< D;b/Qʐd,WfZDE$Hc &D{g+ui ekrK~Ot}d^ ZkZ. pu7"`C-3*^BV\cR.UTSz7Ky W\jkX&WFi\)`;ų`)bԖ{beEbթTX؏IRđ7 5E=m%-U$<1*y4 ?VF1e n6㖶>"ЖrKo4τ镯9l.X 5ΣNw"Ro\TKǬVىY%ZfY!1-\ɂCƞ  ,UYI,2 {+6ӘiJ&+$Ic!_Ȉd$r@& ?o U~*) ^%fеӡo~V\K )#ɟi2t2(mrU#"?+@/m% `+m}4"=42L6\7\8&%/xɨ72 ɡ4ÆrCVTU'L;/ ZdeLR$ysV r KeuICAVI*]ߒ܊X4M83sJ/XQ<1 ͂ ؍n{:Ke6I K̸-d?6CdDB^bTYA=tM2f2u2V8:Fr7Da:$YU92RYJ?SnیAY ^,hD9oR:fvN P 1D*v<ȷ7.S튳 +f1h27ecTCTqh[ J7el(kEcVM톨Blu,cV#R<6Bpg-սoD,Q*V9܉83d5f0cj/T3{2Ae &hH2;ZWAJySFV`; 8C! աo]Dz΋`%dAu72QnM0H.!XMFcߌQ5"$lk0V|jg{D;#ҙniX+I0]-'7t,3d Xݳ}'Ƽ\/+'S<t:h.I5"m0,6hL'k实7Dtgݽٕ4NZzN/~cZOk}z 8 _] kZwK^g>IOگ[naI+og$l}6B\D&eł`.|Hʶ]m0iC ZVhW~t`;QT$gEȅKWA4ɣdG_ ~* yx%;#_I׹և{un}Ӷm۶rKKOG=QzӟKK(Y!b~'Dy"dYʯcJ3/MplǨ/) YQ%k4-X%g%)yCF}CV[mT#Or"¡oreZ\kƤhϭaVca* &$2Xaˌ YJzvgJx ^bL!soVQ'pZf%y&m9:y̢Yبl!2E<T"/gJ7LQ}1|MӘ'ϔL< n.xCA AQ(lD$۹j\"kL.e ;f 맇d"eC7ڕʖ¯ϡp#\٭ف|FIbTRIgJ̴cDE,WF]:ZXЈ+;ծ zn5ZDm0M(Ǡ%fJ2KX=ӬX*4VL!U0$aؐont"l* .欜nWC;wM+1l[*;p-fZٱ7`\`hE&ԓn5j=יo.'nn[q7\ po͚[@^cW7|叮 yuݥϟ?'???e/{OO?O>}3q?Kt$tM71V :2HZ$W"j2o1}qL1e"/\&db*܈0*1;m,^RmǬhy!fXy)߉Hg2ŊĬD: $;5>!*j $c+o+1$/ nEH׋1)[mL;y;9fq ocTՌ\0˙fYY}NBA@k &{Sfq;VSı7cgIlj172TV.[n]lTe ?Ӭ7V3n5ámmǵQn{_P#E=T98ծRǾY,Y)P~#mx탁(.d DZrW|ק_5C=ս'g_{R'=d~_=N0ܹE+y?W %Oyӟzקt]O|c+.gŏK|Z|;nnn_Ew!>>ᅟo}յOx3B~sYYx+.Bk}nV!!}"+pjJ, ޶Qۡ`etٗw>۞W=Mկ8zoOu/|˟|艿sM??{_ƺ?=wo9::/zNt'(wv/??gG}R,>%/yɟvmOO{;_a_/_o~Ӟɻn.u*̔0Q'quȅ,|S6S咗fT%UHЈ1σ>?LQ!7I˜Ϣ(]".&62!Ns'D9U)< 6ۇo\,̈hL>Z`e4cU3 VN%1I QݱV$'[ }\y/)Tuȡ1LHcH%9&YI$\p#bH)c–QI6PA=Mu#iƂCQs(+KXE8&dAʼn7|A*̫cF_Pm)\2Nrۙv 3, ;7>FDsQaĂNMZL4]_3=ɹVYjñ*?^Z*MmH6IL9Fsob Xј\{XT9r>@gD7Ԅ giFyTnaD[&fLHU̷ K+blg]}µg7b{_(KKGEvٛ|w\k*on8zW}7owd|Nލ |_'ʽgz|ȓ@O^k/|=h_7'.e_Uջ߸߻?_r#5{=_}_x7GD}{/=6%g~}o=> ٵ~ Y4=yx3ҕTWM7˰m,56LCƙvSi9DѤ%( VErIn&CK}CaCAjc:kJet _EX PRϡHSf*HGGł6 dDVU&&9eDjdTO\عaBqTfMc;0!#4U^+ӘvƪyTy2#L0FiVy}x mb~R/H SK~Z$ʨx΅"ɼhFFxRQzшԊ8&0Sh3W1Ivs^CKEЭ[ڞOn.[*hLlDIb8rJEc4{V`. L chrI+1*V 3NЮ0V1e21^ V*_C ^/b^Xd.\\S1Wel J[lUVA`cׄ.C${%dZ& T\E{7Ue-j_||LcV))x!"ΡkKV~8˕OG^r93gYQ28E0F1Ae{ɋv"\Ur'#G9MC蕧}]p 4vL*| c8+.?Iwlv ]I<$ 6q`K 7}bUW_CL@~WƳ~Z.,eNNw &ӻu__z[ϟ{|k;”)&ӯoN-~왳_7D~Z>ѵ>A{>?j83-ʳE93Ϻ՟)c?c?s?wٱk}P,]KopY")M VʗmCǮqI,1nȅ\UN8/rsXm0u2\.DYeܱoh*U2rV(I<ҩvKo(z7&`ʅOc T0 ^XldP"]je ~##PURսwIċlRų˂,YEEU g*-=" cu %U 'L^Z km;ZCʰ Dbܷm(X*eFNbvřvIXE4 dAɱkH gf@^$S7je=]%uL| t7pt3N5N3ʎ\KSܵc2]9Ֆ.`#Z*xne`v"CŸNyJ,P 3f"3m6V3"jke se ΞG{cTF9W>3V [Ͱۮ:7J/y.#+!TJSt-C 77G%g1]7c5\3/ }"/;(|a x,7l2gC9Jl(7Q+[Ee*!/ˠDAqVi%9Q!U(]As' wҷ"q^hQT FzzA|AKRtck2T_Sa%P+'@L?Cç /;)G݉| ?}ˍg#=azs~[~5hG|߿Ÿo k6t>կx(_$Og{+WtGkKZkAu$tM7ƨ]3jRb0EW^z3v+P Zcu|s%0iUlOAcI 3c+kc孈FG*7D]2s#QؽMm$35 &Ǿɕ ^|4.EGYEuYniKײ6N-3nil EMy6 CAK.0E0SꇠEmmkee<+\Y,$Ϸ4va0!+! lY=vTNVr|srv̭ìT/P=5*BNJ߹mƉr *MS;bIжN:L2%ny|¡iW2V*t"x hwY$cmcFRx`dL7D$f)!KZI՘}מ7 (XQ"T`:oZM2~n^&2o('xU^P{g+uip=~1뮅{_N_~'k(>/`1 67(?5>_~>&77~x}tOWox+vO=c=)/?|?kOoz0~¿o7)!S~pB{/g>zٱkI+oeFRU6Jd5U2~NEsYHV:pԈ(yI Q28_i#za*7aR4rpdTz$'_,(];3XCT>^Ŋy|†UJTY"Z_KUH.V/ l7C4\*˂ЗPp-˭!(XD=a#T`RKrx3U^W`袜IQ ̌ m%ϧU)\BR|R8eBm 6 d5Y(%kVQ ^ζ-m+1*INDiW+#I+#*0"v2(cƽQ"r%Y*l,7/.]Ce6Vy cnYqI@|* '9FIy_q^f2Վ\sj7Ǿd|X8cTa$vn.\+#ʘ$)iD$VƠƌCToR>cƱkbAn8 UP]1"RܔxN s, :Wmiǒ=> nqSF!Z2SHn5c+bC9kl3n(cV GmxFVޜ_̽!)_, $+5܈+Om>Mm+kGDw;]&H?9Ӥ̹8,ff~'-\ݥ|xk~m3_~cWwk^j>/_ZO?/.n>F( j/UU?RZ[^k}no/>q#GZg?iOSJ?#?r/> <-j=|ߝ{{1.ccH,2I6U $QYE'b+!̕7iS]KVؖse6Za6iw1^jeȋO҈d0 Iƌȋl0Q#`et+Ærԥ ?.WQ$^f+5^-3R3Ho0se>fطJN &`,FV66Z]CT&l #+ .RY/æ+'ʇh^9lR-R+dXe99 *xјRDI /+ yYzs]澩JN3ĂȊb"+8~ա!Xx1n6o7n,`+#Q̸  g)5!ވT(ڊH/hlSCAʈHTzd@LB/Qzf>N'2cB .I:ZR^XеDьD- W 0b]{U?y.e$@f%y>gq5И TduUTn}&#wẗDws FF mĠrV`'|j:NfarU+mԁ1ӗ8Dwlv*+@Hȿ_;LE[ ֺn+~>/.}ZV '@`ݧ͇ZkVo{}ˏO_W+^G ˏs߻}ct$t7fu3Ԙi2#m,\F&de , lƹ7\Tyrz巛ʠw 86wͱm.02 _q#țCo&/V<(\kD2}as4De>#51!es=:dIjLgOBaRh5'3{/fDVi0;IrVǤT#eAOhvsdeC;ꐤq4ڊxRO2SLcrffDI V8ʗ{Y/; ljՎ;p^-3VՌ3톨8+Rغ,vHsڦ ZYaӑkH/[fBTQ*oE"]XxsMHPٌ̈$u!*̌UTtpNMR+?&IY7Ȩ1112N6~aDVm *E  + XYx ,|1#~Q +Wu= ^*T/E,H||]Mn1cgIi"wr6Td<S2Q>LVA%7`'☤\+[DM2զrވh̅=M`"6"n{[*̴3"6f9$ 2g- !I_m QMDwi-w6QwM~rI o~џ/?{?eLpӊߝZke~oyψ=^GIZ^E/:w\۶~ʧ|ʓ>mW}=?7F37__z{$v'#n~lἄ,8fw">7LLvАSra X%f, k1#̣1$.1QalFI*TYk8j4$+X&i#LoDvv{!3O5 $BVCm&*Ǽ&03fWj,Ƥ.е.C9N-S'2Qa&gHbvp썍 lHj"DQ"qL2,$\{M,' mQ\T+oB f1$obHyI0VsCT>XT-m X=Mg1,|wcTcT26qST؊88##I4g)gi;+*'6hD4f|eƑbkHE>-s2PɄb E &y]E9zpQ. K[*cZXT9 njE"bT;\!$xP 1Ii"܉1s2ՎFtLVETiw]Y䅱j k|xю"eଞ'Pt|qCv+y.$P`)c0iwY,^xCLZ2d~]yD91d}Uԇјc1IZ%vGEV|P+pi9 ~3G㝻Rg>9 4۞!cp?yF*_N/ a/{ͷ}˖_u4S6/3ZZJ?zg _׌=H1qvۯ꯾Mo믿}cdr{gw[J7teᲘJ0s E6 vّmH D*ve0<﹖/p*T]ٌCT! L 3V6@*,!a̸E4{O7=;!%h%ACLc,iG~*'b\f8t cՈ OAkhMt2"~t#¬xʅDTBCT%aDes.LY"+l y)]E, @*' dA$fcF$s|IcAL9MrKT`lOJjL ̌I$:iш Di< hL3`zFEY·HV0cUR/ޕpYȼ"`iCAB t: fV6ю6HQmkD\xՌp͌mEg*+gT :Qn *yY]*ϕV2*B2TKBa6"W6W>$9+_*FH_BЖ:U >^y* GI7f`Zꓤ `0ݺi cqOFD1N G^BAjkZkwR#.jQJ=}K_җ~꧞'~pItex1#H5&Tٞ΍=gu"=2. 2hDT`m"N\OҐ֊ۮ)RY75Taw"$BoΏ}.L9;z@yXsV|nILZ^+K9:@- F$y4;1ܛ;yZ9bI'qV!UT}b&+kd0 BHǡ7pԥtF\E1oh ԉz]yZ@^6%I,P9<0L%0L'b+Lf<yidn⬞wHČa!@(b> *ﺐ5 HNH~HK+0-}1*е{C<ČS9 ⅚-Yj7͸ӮbVDZ$ L!2X^2-4qAOE-!CiU~Rف+3il, Y[ii'x!*Ә<-};Ƕ I,94")̻flepIR;JC=?t`2c"UCP Ype'd<6yԌzhJ^4қcol _zȅK^δːܛ!q|#b*\DaMwfW>>'gN%=w^}oGK#~Y'õZk>l~ӛkLzիXcC(C ވHh3Re&X= 0n#D&u2V+t!(xɕI^b:'i /f: @SKgLECx"ʉ:S+cG,;flEe!PpTk9BW:).l[+K$Zl Wws_gAu.(yiG%ϡe:B4m* '󩫠$H gU(8&yNimh-sjbv;*̒FD-NrȊň R:j0 v"wV ig06ٮӘhb&I˥ CTGIĂ**`/Ht}`1-m+cT.IjlDj0:RO<`ی Ε+G)Y_E0ծ 'UX^b&/z/(yј)Y {!/;fhGDyzgʟ&޳^z'1 vQ\&P>SN4R\MжԮz"*U fLw2ZU> {*KfH$FZԬ ];9)W Wbr'7*TŸP5FF: $ L:|}On|/7?͏5iEZkևSN}70}˷|gg_~Z7]ZpuM75"6'MD/J_zBm%R&" d$`b~%1Fu[$Ǡ$ONDΏ{㳠Ioa*gΊMRb+7UdTf0u2c c97DII+@ke,bS巌]FE,~Zi;g4U/VgW<g1.\EELNfIϔq\#b+"AY{.Pqb"d,|mcALLyDU0`;n Fe0.IA"զoBA*uXD݈DVwTN)_+kE4r^N+`Lșc.Ij@^3I'o _ J̊7Ӧ)mI LT8z-&yj2JV4T8Ř;ڡ0юad~*Wi2Rn+2Cፈ. `\[335qϵ˨Kee>Y!+:JK4!/dn5v3L,1C/76ɽsC[ *L z֞nW '\MOr𡫠FE"1$jj"2蘑GPۤƴLj%f XE-$Z0YV$2$ ;zr1@Y"-]~&ɦ1Վm/eREI|CENdH#/ *QylFDZAwLRHK^R3\g |A/hGJ=)ʋ&1S"}ʴ-mN;fnjDFDZ(+_%'p&pLo&UUQCE%B$=6<Q3>Nb{fpV)z9S$ "LE\L9*c5 iHYS(y\eВ!Io|ƙi0Qw4,VQnW81,66pIIJ̥piS\/Ps S8%dle +g%9SH }4="TCdrV*_E LY,8TrC [Ă 3\)}Ռ 2*/$f, ȶso8pmY=.%/! %՜PHl512dlD[?G5AN9TK5}~ Eoo|[>w|REw>jZkT;i"cЪ!X+uZG5ˠWIR+cVQynf$s݈GL,RQ1W+PA3CAdu*nr٨{*ILCCSϊ /CcclF^y'#]jLFD'nۭ6vX lLrX %K$CCT¬y #kbƥn\z㒨ꓱzvǾYDEPa1% ar(m[X\AK*|JcIfHgA3ȕ©=egHeIV`gK]C/H{(+O?Ř$6'2lQLU([Wñ ٶˤ΍FęrfI@ (DҜ<ӎ2FeFB%cV&yvY2ʷH)\Y.|4J-T7b0KeV3ԑo\CiK '9Uе1yNy1DVT/z|s%M$T"Q2,vUgXdeԈ+i Q{?$$ϥpi5ެLc{(cƩt@r_4"RpatI.V%f*C$|URp·C. bޔzR7I'Rwד(>sPo~.6~~ugZk>tT7tSLBum'A m{g6䙶Ren3 DI"/Pi#NpY4YaV32.䬒S‡S&sIV9ԙrT/ zHrDV X% $6qjHK.ɘ*k]+UzM*0)cr9~qjYEV "y#-I̱\ Tʈlۈ/bw)~!',hLȶd<d<޸$/6U~"ipJ7"δ3͒ݽ8A|[rV}#xiDdPilELiDZTx,i%1\bLB´3 ^!c/LΝfܺX̸E0 zq˕+()X)_2Ybj0-*7fDijLgI3D;##mu|lX5'Pc׸!4FmFU1S/H<6)E3cFyXm0QsHJbwAaj)~V2` ycMńxs .'T"- Y,aN3gSo'w />F$z9َ WQKVH3FEmfU, 2*iW*۷m/؝f N3/x]LGnC]!IK'C/ævgn*0Ty.`*6I,$Pc=U @aMBŞ]KȪ ValCX,SRŘiP ZFu`UD{+[09ݮz}TO:B%&]H0_UF$+y2$m,NKIogcHlҵֺۿgϞʯG=Q|G?1ycG?G}W~ٳg__~ǯ?=Zk>u$tM7M_F5Y] QvZhE<-cAW G@e0Q~u?ﵿdu2^ JDcrer#- c0+Z IrV;HL^ 3*BmW˨5ZIa: 2#'t^yrcvaWQ ̵-mKes BM+9T*&fhfӘԉQ7gm(b(ː (Ke m%/f?&oZY Y,YFL3`$r*9?>c2Em>#nzUĦP1mͅSW~"!jXU}Aꦱ3m 2&Y `d\EuE#b(ݡm)HܛLe(!/gb~΃mHI\YȸFaжT撜Ȑ*7"Ō> OzdhD伐`ЎJ/pBLHӼyIQ-f`0!̭l56UTl(Ǿ)vS剼za9Dg(xZNi'A!ajTH^+{I!+soVQ!+6 L[s*x0v)c/B,W.yMQZZMX.x61ko]S孈pu]ϴ3y؋8D5w{˨cSݒՄa'k.I5IrV]]E f˅Jwlvdz2\루qw={f;;;N:}{DꪫN><`ˏ\cMp5==1գUG`䎑Nr>>Ckߚnw.\CWuD"m3jW2*.=9xbC,\*2q0|XT/6FtoC/=uj_M*x H1 RoJ| Zai2G(G _MCT^*ZfѠbM3j N b1#pVrRUʘdd\=q u $bcRCZT80%Ny*LDLt*Sa&鳠qZ"雤v}x01.yn0ӊx[&>&Y|ȋ܈x<2W6DW*Dn.'ad'?oUTW 3"Z$qVH 4(o_Mϩpͳ .֘v`ff eFd%Ic*˕keH2i37vFFj~G^HjL!7D+=vynj! #i*=gVxԶV[V! 8/La{c\\ r>M}4/Ε2L _-[E]*kd`eH^U,jL.Jʹ%*h3VWQ)LeзCTy<leleȅ$ZSA晱2(bts%و/BF"UTSCͮ|]4ZkÊ1zoy[3>3{__p)?y)AWB ^pϩKItҫ_oGZkLNgƞmVfސw yӊ &2ʏ]I,$-.(S!R*g I^n 12RʮI:/CԥP0WV+; 7 p`@VKRY+biHJcvHdH%ϔҖYckY*;ri|,n0!/L4":›ZY 4ǞjV&̕Ō4oL>E0py<M ›T8BU" ^fy0.PpS[jzlD" QIS,Z}[Ɔs6e0*VĩhA^z[]gWlX2#$S o(%{c2UsFcgmFi0MYmUbtf69T)xN_-H>UTpb]CPY<1IߺvKiO"$H`̨0JDB3/SR4+ʆ$5""2V\Qr)5kL-&r협X.I`0]cDdP}#oz%ϹrUrZ_0+O RIL+ jXw""l^D핧v]!#lLȯ6Ȃî2ϭ 3厃;F ն `Ku\Okuz{|^[on0Ƽ%/ .#Hί"d\P5_} ds7{~䧟>{G? {sƷٞL?>߰/yÞ߾>ngϮ~~*W|Χ\(9M?Opj:ٸ!_?>{OwG<{y:*ɮoy=]uT7tӡo &E'6aI*UA#+yЇIS1#Bflh)ZHr*8.7 m WV*A= _w6{G}JkuO!y5\C?яw]҇Tu^˿F}^š'?ÿgM?ΜO~ϯ_co;>s/^x޷c:7={%wǼ}rm7⟼sE~wo=O￴=}Լ??>;~cw7='_gʅ˷o|}k=]u$t7/P%5VσkRQk~1U.o;DdTC׮Ε9 *GXZ9 sȂCuIJKᒗ-mCA(4cTԡ1]Ӧ/؎JF,"$elEQʮWKӘȋ[D4v䓨!7A] pJ/%Ht{0Vi8DU.؛XI}`y"VclV&0K !p$ϱp]3jLɳϲ+Q1S8!Ωvˠ/ $[-mioJݕd ^%mF %qפ{QsPq0Q[\AY2L;IcKg?shଆ,}sZ#u9v'c,&ʏQU`fv]f<խJeˤVQH[I.t"^EzrLl#"Hm DFU.U`VA,({ ԩ@4dP$+ȳF!^DCb ,NuBVvZ9a7$XMgq[.77$3J2M1ZaE<"dadHj,X[+Q|ag.I*0qI*mj~5ԊMvJˏyo۾5-Oʿk/_K{_J>:]ZkugeK;3ܡn&ID~DqhH5HD;G48F188im`3tXU{x~s/;tp~ySgW:uwg7ʭ [nƉ ;rR͹~ vvw qN7+*]Q* 15::We1k$aȄ#}VP ۪>hB>,1BڨjH1΍otԔ}V2fوDdT;6\v ;}2NvPD 糮Tb@E,&(C4Ր*کxm.$mrqFQI+_\?Z%MYPH=g&ɞ9XnԊId.6*3| JdM YwnRV]pόhݸ]nYidwV\g2z4dU"b|j֪,V4EFEl)_֬g Њ @J>kHX!'::"!'&lս!LWFe.(GA+n\))/a&&lA, $Hn&>QwYF'˘ĀN\qb–"z DZGqf&L>+dq|-_Y|U-Uk{J*LDMf55ʕJ'ˉ 5+9kbud%l$D5R輎Vg=scd :1A`fG">uL)>7C PSAz/=?p1Ak^׽uoxn[n啯|M7t7o7oxn׼5yY?y]koG?я~>5*x~#N^/z#ϟ;uV~W^s@['.| ~+>vU\/ux⪫rPW^sE>wv`!x(p?яt1a :]_Y*8ڪ7֗t꒑:u0X+|2.3^K&ВF%*sAqvYk$tr+Sa*JJ;6Y[d}] 7nU]_YMJA*dIe\G?ևWVyQ Ą}_& JU28(|ӨT O g>>j̛FjđH#UyZ/!ʕJjĪ1alUpծ`3ZGiY͌YQXCqu<٬+y6V*-ܰUc6SnlϤU.8f%.ڐuOVIygQ)͹M|]hD$(D|~hW){diıĤm.8u!悙i:ݱҭjPPĹX5}S5*k!f<+B&hn좍L:f'-rM9"+M٪ B颵*mW(YMtUU2ĒsY{Vy/kV+V[,Dv*NbMe/G}-X4՚>-}_鐐B(M (ҟaUYYj֍ mUBWO7WO6P2gf\PBYYvn{^Q.;>p<ck7Ozғ믿~{{{kkQzTԩS}ck}_SO}cCotS}?(WW٭Ho|uDxo 8y;ftmwN9?/o_ڛn}ϭ~}IY$Om~Z^"q䩍o\_[!ү[ҭpJ 7 az}PC..Ziԍd&2h HDq\D,"O.7d>ݬZgַ:ƬcX!upDܨhO6kԎ!4^4Vz ZhE2'ŁhbTMڨ.XQ cSz)JG|Rp^jV dF/CtY(J 74*͌ C5&GD) ԒwFme\L:Z x\Gۚ0t1e%SK=@>C(8qRL=_ҩTgf]%(V؜'"jMC0ePCF19^a I ?1RpܘSo{Z%k}k_+, tLfµ^z&~RNz|{O~׾{?Lw~ʧ|ʣ3gΜ>}}/w}닾w??/_e{x+Vۿw-#ىӋJ)俘=/nz% >AG_5!HK^uFJMw;oSg<߽+;~O§W1Ho{7|{. e,f! ɈeH7DDg(['֟h ԍ MRXVikZ6PzzݝL$VV⚓lG0Ĵͪ?Yu%$mT1kȅ"FeD)nUՓnlLXGGV "v%8%r1yrKJ!ffڳ",c(&:ڨQ&wV] RA+tf_lT`$ 61I=(_j9VAZT Nt/SVBFUzv\Ϗ-3U:*,^G~&KAPF )$=d=~ Uk!Zw`ʛntS.76]˜0T>+E,O *7>2utѶ6lXIa#(bUc1iKLeT&lU̙4$#Ngdx4Ąutk_YVW:)ͪ_F 0$ *dKKa @*>] KY[M KJV}ֲ" Q*,2Nzb}kBHZ#tTWp~ZGvU *JPdNSͺO:ɬݨj=O}0r,1FnL肛JA)—R1de]D,Kx5ڃ{*H/Q~x2<ƃjGG'Of1.?-''>5yRӾ_mw^ʿ?lcy~wX-/γ^X_YWOO/{?rzō]^)3?>)oxU?_O-6 Po|ӿޞ^/*}F玿xғt<~DFO?K!]}o4]2'# 7& 7LMخz Gk¹ J2BchhR^+( `,$)2 K)xv,u.5TNsl79;Lj+AbUꣅ B1k*MԄt~l*X RU $U`jGebzH[gn 펍TꅬnQ5q*s7:Vƪ\dfn<$,뉺uogHJ .d5&%36"/}u3|ҚdI͆n-ƺh%#TY7o/}%yt8V0Ώ͉zQ C0ETvaGMOf,lVL`UzdbzFefB 3;[7`T.hhhǬI)sdI >ɰw+`Ǭ}R?Q V%/YU:V&Hܵ-4ɺ3 ք>Zl񮢳*5B]j֛U̬F%MG|-eN4t*N'2AքZas eMnќRjggꫯ~=oL&bkkUzg}g|~;T<)/˟ԧ^rbdCWݏ*t7o}67< J!7( CSnM{F( 7plUC^TâũPU*-Ǻ~CX6p+ɺC,wu8vLڪ,;C듞U*8ISKWjp*%VIlVfՇC,nr*wj0&Z/عa]%ZcohYF'. Lt&pAejfVՇhհ .15&̔N\"epF.8̭?ՉBT:?!+ADX򙇬|[U I7:FV {c3 EEm2 AiLKށ c37!V.lu^GPʵJVjڕUYNdhYEV'.d% [ \TCMӆlv G#2d!\p!ka `ә2rAe:f |zgn=ݬo]ofn Yzȧ&'VK+[E+Tpg{}3qީ|E{pzKJkQŽe?R)1>}C0Ts;2*훉 !kE)oWA.h7^Z%OFK Mت!iXuTXژYmV}2VҪ({VL`/{w|ѷ='އ7t wV+[vqm۪w>)O{SKKZ"jo|^u]_1qc\>i| /.x:j[܎Ns;;"N<gkb)%7N˦K1J 7JLXfUYR^E'νTm{'h}{Q $ʫP 5~ y8&u$8gLF5qdF\r!B6**ZĒyFP"<륯ldd:.Z쓎4:T*ɐ U5KKiu\j!+Q95ZRQb!">jEܘxy=_7&YjfG jJUy'֧C4CX:3B҄DV[LQhhj58HCsAĢ ut {cdp:$s+E|HpDF11f@BȕN51k1OB Ml.31THT Oz [ugT֔ P5a*. ;V4&7674:- e+]|!*ltUZR]2_>]:j;Bȭs1!FǦENLJ,a [Mn;ICn 3gnS3:n\ѨY MnojNc}04?4xjxV;c#e QXRi\Ysƍ015&HRTJ+YxHqO鱚w;s^rb:1x3s|#7m{'?[[[m.˫ԩS?/81ONK3jmtcboT{C#;&FFǹJxo[wƖ F.\O7+aŽ>kr0zrzڀ>b['i(n NƬ1vA}֩SP>b YMb(Jz3d P(S7"ElTVP}uG7_GV$X_i,, &gO1+ eY͸Pkbq:]99LJ%CLƚdJY5oHvjUIjOf9T&YW:Y[|2",\ 4d]Ԙ"a2],19a.4yRč  ImƘu≺C0V1άgU*X-8sFO"т*,~:HDuSQȕJrRU%S 1 C f[u K0LX+fXK=C8լJPp$ɖʭ ercBQjWE0YBV!Z9,blO V*5&jd.xjFǤo6bJ%k=~ʒvLȋj:5~z0T)CAMFʪ|dY+N81A2X(fF\p#Ҙpü&&ɔh@aUNĤv6{`{}o&-g?߻m~߳C].}&ñNq|>xxPդO8*]P<|*U[@ÿ}߉3_o~Z}-ƅR! !!Ăe+|Uo(Zo=녡|X`Tf&"f&䵸 bIYU:b! -N%KOF:6B5yx̍CspHZ>Zi;/ Y'#cT#/ğ̌T: YmT=uJI_H`@%S5AR0^򽱩T", ШXY T> NSʇCmu^alOa/[u YOk}-\Hj/kVZ6f-#ڿSWPBv:Ny>J!jdD;6w[ A>n1('JnTᚭUp'W 7YSTVtqͪJ>KyLf^ ]Srd*d}#!k7A^K vy~hJ ̮0TT$RTT.rͬCQ*,٪쳂CF10*Ut2Y[ʇ`,$I0$ Y4ƆxL:J%Aq*vYt:9ihTXjKAYYMMk_5[#T:"@,뎙C'(c#քꔙN4kCÍͦc'0*aGsM7ܾ;|Nf w{դt/!Q߽c!ݷ81A /ދ[_ HŏO #/η}v>CkU^՘́` O&d'R3뷪dnuvdO7+rñT:umTrLv*i믞LiYd&dLF,!#S뷪1PYnhհY B~UZ,dr_?>[L!U[~u6|qcx7~G uG__G}y?U =%xJoqfo H!N**ӝ,C>+A,i[fvtdȉ *ʥhbPP >J%M\ mTÆ#!D,<'&>Om ĂXvvFKYSVdr&l5UéJ (\~հz2_*EVs;nWn*!OfJ җ5]_{VwrɀVJX2Sh#kY3#aٮ;. sDH3y2Όg&ݑ!etC֕F1i5&Rl`Y& 7n+Ͼ:G_qv_ ![qŐs) BsO4^*t7._^u~="%eeH;&zє nY?f%;cTw vmy  LNV'ELc2< jqG_Ȗ^^q[?n81ϼm 5ᏽwvu1iy~`]fB YoUݜJV>ݱp=f*s;J @dmup3! 7*hN>+ LLs;6&Y(RɪtvVi!DrhM (UbhTZҘNʼn;cӚn" Ъ,*\EV9䝌ɼgXdȤ%Et&FVN'Utd&((٤NtYnLLc"tYEXJAi),Nerfb& }uҚ IR>aT^^Sk$H N*nIsxOM=Y95\悹" "CAȆ ,l(((ˤ ϓ;tuojh%g\kĄUcQ'u:_If܎\Pf. WO xPntTȚ82ډ%KQjT6!d ΪZ u*'}Qvj}b>gB6])PYȄsAmԽ&YJtXP& mmkd m²nJ 14s,Pȅv}-#\)X,0erE3Ƅ̔ 9hBV hCV+|V3-Y=Ř*8V!Kf.83vJe9-!p?lv?{ݳ^Wyk[ͯmO;Ǵa81qc|aśeX]uR P9VUpޕF1xjL҉۬|#Ad NęVp 4&}2r:pá-e<&Xd`ڻW]}2+NSbKbVF3Y.(' 78]w+qK&&:Z)WȖrf+R'K)@I߹\QCVE|b)P 78d6RijYT(̭/wƪ<5>ZGt Y)dV&(,Bfg=f]T2szq?WgNUp ʩf%+IXepp~=wr0D,1vdLM*2[}.PSƢ aY<+ΝwfTB,>>!؜Bɸ55OL?]E/$zwt3ah7ݰ$F|ȑF|c2\.D ӘrLUd5&Z6|XWڹ[ o` S٩Tju{TQYXq*ap:ݮrA.xW7NRqLL?ͅDޜX e /͡JڄExjFKX|=~olqcԍbT YXB37npj1R/JbzxrKOC2GzMz/PwB*[ͻѽhCiK81qu/ގozexg g0ōX]{1zb´eۭ[N0'XB@2T Y2Tc *- Njqj"vJ AƬEy!(QU&Z7 \ġBV;Cn9VI#KSQiQ 3;J-ۇ:?BJWUĹgUpa*!}_o]@Ĭ^*'tڪZs PpaG\ vPL>id[Zx͓-([D M.L̀y⸱]WWhwf\m(17:JAxk;t K,*@,h]X@"FT@!}\(䢐5!La\(45rme+",cցU\{wztqbd$FU"Xr.IJ?4sǤ'& 4"UXd꧒+>utvէBlj!MV.Z*٬Zvdžs3D1#X/քs:Nn[ .",93uzʩ 8p~hvͪ(JZ%E#,Rj JR@ TZQIlU^QC#C[kvKQ|vӉhB%²0~Kʩ|8 UbZU*Z{`gׇg2p t NLIY~ݫ̓PK,LT炁N6k243z-a9Qw y2f7&4&\59n;M 9hS %iD-蓑 Qx+JUJOdʒ1#51  dE [;4c YلB^GGX41BYK!h%pHHC4UGx)u&&qf8 :d5wbVJ 6Qh CG6:X1k.w~qs &{Ր@.Rsve&ÈbK[bMP 7SHtq "l:m5\ 7\sf==VLڪ;I/R(BNJ' xԎ|ґ_GTu\VIFg55!BRqMY:Ѭh5%NYnWS[+} yVJ''ƹ;4>!̾AQĆVIrwv0*_=9W޾h!+}S!$ٮS!I:",s;R֔ɌIw&f i,tY;Nk˭TkL7%d&MY]ެ*91ܺ!iQ*3XOX1:8YgvZ}_[SE5:kKHL RI!2T:8(\',ܐLWC4Iɺ\h15!:TQu GBsͦ% Y:'V<1d%:P#V펍fE+CdF bC>SAz&7>t[qcx@h6~quCǕ`u1XIu7J49cVU`%4C\Q^G)Ǭr̘͘ ²XY|CXfn&Щ$Eҝ n-h䘕DNttS6:AM٪4fQ*2uf=F'; eyV t:=Y0ΩluJLPK:yrA<3 2TѮҘ՘u311uɜ&2s|u(̅j[#ݵ}4!kKi .H"E81At}2h*YE\Y!0&Cc 9$MXjǬ.N!P. V)2gB(j .Q*̌\R*X05 s=#bIc.qb!ݥ\S!N!޼$dNnglNLHY҉טP1ZE'䧨d$42Yɔ哥\XuɈ T{cMXLNuԔ51uטꘙhqA ɪxܶ^ `PW*lײZQ 6]_ ZIh> U' Y;$=hjF54&lVZb}%+dfҽ)N7R0ݓi1:jbC,;ebX炑յ}qNNDr(4wDMLPhP';)bQHA5a: H&{⁝^nɐpVy~81qq;);5c'e>@q(?nt~hvupg]\pzLO 7tr: v]IW*dJA1Vrƹ :ݱƐf[nHD>>U$,!+E]lT Ja E ͬ0sc2:Bw#!:dt2h@H1b\̔˦4iȅ* ԯkz(>\0SP$mx*+(|6:P*mMF`ƐSYOL@C<5>xfbz\L|΢0&&$忥s˨!‚P0Ԩ8U( FF1֘*zӕNeH.$bRjM( ;f&MPQĖL7Y:q.$$IJ"P81$N.Z.41X:"h;ՐX ÍVG(/`d/ܐk}֞Up\oK_! bqH΍7*+!UtK_n: e܎F坮U\k*H|tT|lM8ծ2!ޮJd݉&`CV35Lxe{ۘlT;U#ܱ XI 6P,SjLfnF5Hvxlxv6 }_5)^;~h~&C#CG1?#?|+/nyk_{wJ?~ޣ>?ܔ.~Ho|^Gqcۏbę Mk\'Orj8ծDV>P-R ՞0\H<d*W PPX8~H0T3;1vկ#,>!tݱŅ;) &B}`N[)?VR$V}2}CV :6&(,+_tvɈ5ڨzIC%,"+gB 8?~cb:ѬO6+*fMUY(ʕV\&q~[o溗B1V-ZFb 誽lsd!JR)'ȵNBAy6hCxm~v*U*I(K~34d%pzL>1ȩЮ10܍rI  a9O ѣa\Փ}RcbfSdO&&:FV`c O `c%!XʍN ;YkF.tdv&fŀS7;F`Z|CZE5LLj}fsH:~Jz!ZSJ ?ʉfMXdpHVd6ݰ{c}rNA6ȫhe* 7jtjÎ}2\p^ J}6\w|h&c0%/[ٹ馛>>q^ F~jK# Pw?\Z?{ۏ ʯsOK?E>5:8q꼥 :+nZVrJ1i1U:zVWOsup;c 悍8hj ˜Aդ\д&hcVg"^vHZ;|RA*c@.xT:J$̉f-݁ZvߔVy",]2C2)G G|#@x|jb1j81l֕!u'9s7H"nt]j␵nLDV} Ŭlo`E'YXGV1+ ,CV*dvoTm+~#p kPcfX@ED6j*XhM$OU`.@fCpz a!P>jHP5暲SzW&+}5fy'E ̍p{7',3SThJϞJPcBHl?|AInY:fe)!>!tk=T"U:.K6O 1iKUd5>18$G%[4>$ xG( Uʪ|Q;4` &U.$ezƤw61Ii,X(ADP]}4ESϏ͘LFݟo;!iӕ˛Uk:Z"Gr-}*J%ԍ dR="~c9y3ϼ뮻.r0}n~u/ŷ _|וo?gC|]^n=Ƈ pxv@ͣˈrKp?JnAhSzLZ8.RpnDž'&lVƲUwh+v63gvfbSij\ B(+_͍Q!LLBFG PAYGU.u : N$pjW xf 7lU"2Tifǩ?YT:T\9u*; h(KC0HǝөұRYsC_I ²]_[:*+ۑW%*\/Zf2KA 7F\(Bw/7h "թdVXdo iĴnֽ"Ft૛~7!kX(RCF.0N ̎rA,-I 6jkMEaA`Gl(W(d)ך Y "r9 yʩbuK\ '/ 9 Ahh3W2'3ӪtkiOՔ+ʹ"u"( VFC_IBb N\PV$$gX,d.2Zi!(]hdĪL 7\>Y*>.UtN3߳Zm |՚L21 BؤdfO賎LFՁvFsENϺ~H21OFŠg_;ۓhepR ʒ%*MW2dVnL<Ѭ3S,~f=&0 |ӛ䛾𑯿c}#?#/zы1o}[of}Ӟv7_c _?YpRޘNO)>7|?|_.̼W|s㛎·/ˏeh3K:ƃ&`L1d}4!f^Azij*ݶ0im!3d-uW7=Ąem☴S:U1 3;DnLTX6pu01Z:-ӦO61>Z8v!V悊$ .r!xL3㫣$H}VRi5mHZM2$s+!grZ%""Pʞo[/X*nTc(P6~6~bfUbF}_](b +bŨ,@'&p>ZRV:8$Ov .#(2wў'`̏}7x՛_/}??~g؃|U_w֫[T̫{kݟo?/?{?{ÿW?Q[׼r~~ʓ~~7/o7?7}?y7'v]O|OOt_]? O{|˞c# \ 믿w/~[~.򔧼/Szbqɖc<\yPJ97DIuwo-O<3h݅N.X[UwVNV}_ fU>4sLp{dR\P" @\-y*'}|_A`hS/V ddU:>ڳz9?Sɪtgb rjduCupShL?t!7:Ze AYE'N%,N.t]_blMmLNVZ"CJPHܒN%i,JL2$STz{v7^^w(a!6Be6+T4L\4Ib4%6Ɯ+*eX#uD?!D@Q(E0`Tu* 11[bHJ/ZQ*B}#3ft Y|՘Fiϗj\'u-a9٬%F$2ĉ)'nzג76F.JG \ͦVn+E&>ȱWNuw*i$)',m;^܉dOR!KRKG&rXu$&eܢ2zG؆[ǚ YE&C|+i4n85jdiditkZ'4LzVhe]Z"jzpP .U FZGF5䂆W{=#]<]q^x%_~ˇnzp&w{>cCǏdx뭷~>7a{z6ƼE/k.M&>)o?Iįcu;7~K+MqV??oz7\KB!~^ԛ_@<ƳoyճE݋oU/};'~;~K6 M[O|3x?})oϘ?Ǟ{ 1V;a--~/9y{z6'Ç_|џ~(}TdYY9ʇĄ%2),c 7a`̐0g X&쏵"gNL5RN Vn?62:J]L,4H'fC韛 wt JL{ IJUhelt4e죩M<3@cc΃ק͙&LRXJj9qn0,\0\sj5&8r "`ȍ"XJO x7a䢰B!,tDR,B3u* bX !;]\\'+7 %LC2'ngl {ccUt~ Yf&d$sF.ٳt^ kUcn]bd=Q燦֩tNL d -dUBy+CYԛ2ɔd1˷]hz{.t nǬB =eROv]&>O6T%iZ|m({{c-\! rkTYEVnU& Nm*HN%+dbȄ[(5Amud["+tm&4:_|ĵ?ݗnno~O1d2KUqUc_W^'?~77_WX^OGKG^y_ euxWpUWo=ubn58-m<v6买] w.j*Kk"۸ZˮL^g^O󯹟1>>*ZɄ\' -ۙIhvӍj*XfP_Nh Cud@%Qynǩ ]S*h}EVR1GQC4B֒r3kuܰ#bR0d]C2Id;4S7:h-M炞umUI+:dep>kKy\` nlMFF̓ͺDepLPĒXCrd%!<\p Japiᆙk,r!]wGJǙgևc7͚K}2Q )q_J ؒL)pՅDLB.0ِ=]&{$NrjZ 1 !EfVQ,.SȔXynǛe~c։IZ1XB\pw~hPΊX:d| h &VO 4rY{{4UmnP"S`'d'S)1*IL,.XʚXѼM'&=.YY\~"trXiX , 펵Twd3iLhM8ٮ%S HȭS ]joh"Z}_q WJLzGE6}J3;*UF$UOuYPJs1*7_C俎'sϟUw_5\rK!o _^;;~oGЩy 'O;o68~֩*ȣwO|?=m:, ;nC M:fvup\pzLjVOɈofF!/'Rb;6`TY6ĹІַ:Nt4*駭 C\p퐌~z].t8q:&ݱ"K.tz.a$2o*FU3-ad3Ef'KQ'F(A@LQrLdKR^_4E 0ĢxdD rQCB ̕,P*Rr!(PߝW#"^3:zjǹD\먑SݡQXdfۮW ɕA&aYEZGˀm na^e605ϭdj$sܮo.kVOfR' 1̍~d"+ ;3өvY NXK­P$Yctjttr*۪JZ(᥷wݱ%JAO&dHX?K#.\UUlWs;r ;'sY81A(hdBC2!ˈ%RPJATwV>N 9<}Uf~~>|py s-?soUx^mm}s?>A _6M3N+//n_)_Y˟?dz+[fzOn_?)6Oz<ѯ]t3w~>ni}^ǻ+w^`ͪwNb76[V !(ۃǺ5a\c{}s8\pHFKA.UX 2\".ZM\} 7Xv1 ĚTt|FZ3TBM&"k} ]w 1f%s HXʉIRN I"8Eaqj}FYgisZ45&L. @mcf&v*tf5T*EV!ZznC_!sdY(B/d*pluj P*RE G2ױA((Sp-eK:%q0J FY  Kx;FBPcI zC9+iVj@֋}nNRVXty5 Gz+ juZ+IJ=I./ TR~(YV UA11qZ!LbI YݱՙeEs3ӹnY NBf%(4cm=up`. u;C cһc#2T]NQSzH& :Jf}Y[J]5+kdYsAM[U뛘՘LGg{~Xfޏq~>÷-= L&}K1z;w^}7?__{W ^zֳ>Yկ~1=3<+_Լwcͯy'^>^׿{Q/Gƿן5##~Wu9ϺR?~G~u ^IzˍOkO0y}^?y|O40g_~[>_߳֟ z=~{c<޾t+ OC,ߘ5ܮzMy7(TҩCEȥ$0I}}Xc!<1U.==%3_} .'÷-)=q[=wNRgoC?Cpwv]G>҇~pɠ#uӗ,)5?~h/}1r'dx -n?y~.85n6g]u"N+P0*>wu/$*8KI 4qJ Kpcd]s#A" gSWdjÎUb: v uM̮SW:ʪ<3\OIoɺ+cMX &W Wц5eE,mc_ۜ`H\Yri(. KfhCKPA +P)\+adJ)WBfEq. Ay0U tr)qUQx>ߚщQ0eN rr"e>Ck(#Cܘ֪ uqiO֫}ȀFa28 NYY/"!+evF(R0 Y1xq@a Y&ȒLw*B)+V 7ʲ˜ bT yufէB3wF_+,2 Ҿ( 7UpӚ%⓿XvƄݔT62 ު!{c]4fTcV J8Çw_{S{f5?=nnoz`'@hT7NL>NYcV'GYep`H |醅*Ό'(\PVȁUbtp XT6*KɆ"E(M NbYV:5!BE|nh+"nu4*7:h-Z%"g#>Uhb.>dG{6Rie4"NL!J!9Ŭ֯B5dm)OL@}7=fd/"=? u_]v|]xl[_o?G>WNǗI>m|g}UcTVNZF.չ]*ڮzejoMSz=g](U9bݱL`R*xt9wcbuzC!GzgSybBt &hYV膬ƺOa=R8&=f. 7(epBNeus!*Bkj \QI/˅T: ͑0Uz%,5=Etg鹡EBm:&E5tцƤW}43$3sLoL1֑ )+>upᅒ= e@bsV( s*J$jEPHBL(F Ycj Xğz̹R2ƒZX1.g Ea!\(gJ,3HSM fK$$gQX$gC 0~fjH :NkhnQ+s"8W&s7~FXN6kI<_ ̔.Z9rۥ[!tު{l(Ϫa+AjܘLdu.Z\P.1UpBvNvMOY:L(R8D3$cUZt}uc]HnYhdRU:qBV䵱PUIfM)k}2'^UkV#ԜB2+,` O[sʰw~F|ヌ c}Ǘ|ɗU/Kx'l))鶝[_3_sk{wy ?Ygqc}^@,= 2MdEęOf~|=?InW=5Vɩ41ި|nhv\̎C2 7tM} ]T",\pfŽ>i:sC;~VFZJ% ʥJ%F.Fheg%a2QR#28K<^`XoFP2:\G˅ ɍZ'nF.G$ap)+CtjLM&^'}t_# } Y M*$,kH< Ϻ n1.8D+jF!\N]əDՐB̖sQ:(@v*%a0 gQ;E.X ʕʖDnXrQRD\<"+S-aRk\ԐՐ*Thag7Un+`LB$4fP|m):Z'qG!@L}2nzg7+4&,+{YTPY,gnXrA"GReyC_VA\J.NS%Ww:U "/C՘@+LQyƐugbJ7^jE 蓵NC,OM )g.+wW41+YtJRmHfLg>&w}34RZxU{Y2̊{l)傍37nWS=f=SghkӓOz?~O-OO=_tƇǓ1qco%}nȍȍ4&V:.5[N{PJ[ OR1'T۝pč m:>1ȄX(6O,[n&,'UI *JcW>H71![WFgUₕJ̊2 7\.%rBhJݱz˚܍]2j)TKXoֽSIJ*aNkBA(]24b(_.d5RzFtVy5LLhL*oV=T&ʭ jB76jg֏C&P\koaG%W$٩K!l/t!ȕbL"ˈ-Us^#NEK2ҼR!d$raC 悥|v=*O Nęgid"uHXJk㘌!LeFr"^ ѮCPhŎATČ:fAŜfalcQpD1aGE 2dh Uu5kiZP^[u}U{Y{2(1kܔm4R}bBU 22|הxB_d+ͮ,η.~)x>s_S<@?o|w韟ݟzl||&%hN:G?;^\nH8m&rwA(p_:>eqquQ+GaoRJ)Zssbh_1SKȜ(@}Uu׸RlI14-ֺ0Mv%F%$8:bIuRw]k;#-ӒLM/-hyS(*hTLMԅ SVZ&fa0ͷU׸qumTM0F+: g"wEn 0c ".(x/a!tknl""geWRI6{PٕY !3NMdU2Y* Δێ" ւR)㒷  LQ P1A +A$b$+>D2iҥTH9![Ca9PzJVt ]#3BN&(Ed?ё2O*$"DnƚRdP5)?Cnb2&KsdK<\V*JnM E7QE9)~9CDH>i@W;Oj-s}K&G̖BMёJWdLsIce9JVLVEdTY[=!8o%(Ɲ~*$im(7'ٻ(hA)۴I5I`%H#QV'F`&k3Mz´g8.MSQpi}TD`a0e}$,U` S2eC&%ө۝Y赎>ΕCWE{5xy{'?{pO;Wxo~0<1g~ir׭_ޛ`~߯  >fswqJr035M3 >xWFe& ޗo7ذaW&&o*.Rq(82LFI!pEʱa/:ZmK:LorwFZp%QOur,UE5nL^gS ۦ׬#o9E,Q ab!6-UXh+!o@%%8++l+oVS26huЁm(걷~ۨ":CX [SSp433 ..AdD 0:&mN' `b%A$=@0Y!dS!sHJSKn4s*en)!@({R$ΎEdݑ,= T S>jT8`.MGq Yv#jɊwnyyd,Yrѓ5ji{qs!fB6ɑ.KR8)I*\DMy#D]Gr *JƬ*ab!甔LŦ(k)28څ4*N7ݎT 8:j<6m^@XH84pDJVƮqADB @$sʙrYQOv[i.)0i%o\F+'ػlge!'#\| 󯿚Is1k:N|ۯO"@ы{ĉ?{O޳_n׸V&.t:Zڇ?VaXyBkm:wq'_~w߾'} Y{b9Lj,]IEd!|[EB%OvhBRSE=i[J{:JUq IfZhQ0VƩ(zWڏz'XZ+*Bd$Ensynʋbt=q:l42 #r30jALiK]tEn4VI*A9}qOO8S%R/2 o:)Z;L}Ӗ* mbhk_:웘5&jz?h۱1ZFj3 #E҂g"H,@52 #ŎTmB, f,,VF!\{FHDmb)BW1 2 I.cEbْr,%BRs*3 A0q*$R`UYlӷ|[%FKޖ*I5HRqԑTA4tL}&iyC}G&%MRb(Y@rL\R`]\\PZlC, R|gm{RѾR]LL!0f9z6&PeԲR\[EYLJ&#Sv)uh.d`D|[VDuh1, `+$ۨҶ#+&&mLƪHm l^ ;nvͮ欝{ gWOG o>e浯}+|ꍟ=s்J)I!ӺO_9 7C{z_GyGq|wkkvᓒHF&O2&闣a(x ɪԖ]㴌d(9Wfge=}!.2DRHM *X\RF}fsX_`=4[Fř| 3NVD^I2nMX+雤%nF (ݤiۨ mjuԥ ZBBނ+ ۤ&mkL"H Js+]!FИ;Kهc.L"RWjeGrZL$QJVX'+c%SGeש]r`0v$TDb=`كc5@d$L%KrW$&M ")b0r g]3e-FH$-;]ᒚM֥@ HV@de{頠LmR`-&< @в*2(%HE"rLtYFq0򹷶oi¶ E]PG fծM*Qbr;\eI*Avdb\p1P`,Wa0ƔF$SGUȘlQTx&LYkAKhliBLb߸iLy(*璜kR5ըTI*Ȟ+?ңz{?-ۯ?~%5[.,@sŵ{>>\۸'[=_f'?zK}{w>faRZ.]4v:6l mbL H3xES4 V ^/Ӷn&S騐qu50g[y[0zH QmMD]\X ]U+Su^gD5a̔cb!2\鄤r̺o9[`HJPv_rEϸ+gqQ0 'ˎ`} \RF+NW{au>0QHc< fmF0;ͥ{SHFfq^Sv1fdbY +"&-v$-0 HS,@I DbUXT I!= b3X6Qi~Ym.5d^.9#'+8b`A ]z'DS!c%1 !":ab2"2n1AQEKm)}}IjҸRF6<-o+)etI,_ZBZEuUq4M6$GK2_Q2%F%@cT4s3bSfvy_#[(QuMBϸH8r) "2`Of-S42eM4[6q󮔂| ȅ܅ It32Nv~`sTmRDHh- +0D8U5(J ١mT_lk:}W{v9shBQ!`ڽfw՜NxegVMmً 3igVMCOc:/q`w}x;6ocӯ|+;?ugxe\N3>3܇9;g=Y+GO@qnnnQq?}RW^}mwّr@ϕnY۾O~veswOG~G>SϗI甸{3Sp̏q6j%uQ + W%_f)η%z;[ &j+SUfnMRMԅmR`:wϒEu D-EƞqYxK1Fh|`gl i]*+V0'gOl3Yt0mdxik]GE_dےӾf\9nqkj/Q09c܄v`ltTbUa# 2f6m]TD,kܢ+3i}Rf%YȘ" ]5n9QjH]gd|=I @!$B@8e%_V)!X@iH%Ĭ+JGjlP\/ -dK,^tgs2(vPDP I8f2`vcWjU"l>a"KU謅5`ze)GG!ؓnCuk0QaӸWi]R]r2)$:*¼nM2c*]RVH[`uB3y[NӶiʝ9%*Ad.sl'q7 U` sWmzIQc`e\jʙ8&eBnUh?VFƞ ͫ9B Z˔;o5颩Zlrd׾*1$ۨХc?bL!}VK٨`R2}Y9]8Z9t\_É6}e/^-7 {[ΦK׿\{ ߧ}G/ғV_Wgyp}sݣ_tэ~ɛ{Ѧoow7yK1~۶;>e?F??/nY97D4ʑ}؇}؇p0{gX/Q ^~+lD߼>~{~^_k2x=F+U2eR+E`4rgF6q01hS= ntzڍiy {Mf-DF+LYuL,.b"FTB[>#R!QK@dUdӎt +cI2*$}`/N(IJR O%9a <itW#f1'lk15I1Ŧ4r5+12*$%iQ!X7Q2fH]}TT*II,"\uZ0Sq0h`uܲ`.$+Y dR! Ȳ!A .j @G2g/1N8R%+11dL>10K!R`$`PM IY!F )T Dd.~9 C6YQD&Wo`Hl/8xr>3&uY(AxL1IE IF9}5(UXb1ʄ!iL r|[-r¶`5]B+j8s ]@;(Sjyi> :j#)EJET0(f'rju0S#FbЖVGTQ[{帎\ndZu)\O>U TtTE7nm527"~\w{N;7_~Kk}kWw=أ>zUa OZx9v `ffmo{zГ0uF:3uhé4sɓM1~g;}vj_z|?yg&o5+K}xx}؇}؇p{>|kgCrr}O^AK|;O ~-}=_J]cÆ BqWn2mTV:e,/RLl|O&ok:b9WP!c6VžvmHFq]gW4&$gz,D>Lc¤m2@!c6NӖqOD,'ٵ&zu5*UI&ӶYSJηTQ[Sm]peTaR]JQpϺ&S-wUIR)$\q7Q4mRmR`60]֥ ;+cOLX.̔Rf[8RI0*)Ҳ EU0qdUR وD30HJAK BGl ĂȖ1LfJ R`)1J fF(¶RbuOLh8qRZٰ,Ovm9 9=D]flCMRZa4S϶*1J76j&+8&hPk%R!c”i /MDơ>ɎqrGW\+wvVwurtNpк=5xƙ-{)(G~voz-?ϿWz{{|G~wmʣtK.vPK{?/w:x}x {{O?|򡟜[ʠ}5Oux2pa9x x槞td?|ʕ]%貋7]_Ҟ^.ݰa5eժUzh_o)5QW3BGE_(\5Q`G{1MضR~:6 I$x\͑)gco}`ۤ\Ti[ͅj`f`ENTۖYbm “SQ=$ۨ󻍄̢*lo:`Du`&咺lo2F LYwx4u̒/=l'rERLĢTaMU. Z)یh_kwȶǽr9wE1Zc(hugԷ-l:ѽ,&M艴UHsI  Q='?C,`"!@Ei?'(\)1R}4 HA;PEd*Lh2(=Ab􎨌'`fEXԅ kᦦ[G1yW@rh&L;pLdO ,IjmW ,fڑ,e)7. iّ+}KT?ܛ瓲*V** TXgzmg!ɥ`/rܟT􌫃֘&F9BTl7/*;*(H'MjF51YNƑkD(cmۚsF%˱9"cA)˝=`4Fn[#ch yIX${[Gj~W i˸뢪hp:RdeL`*2NvgoL%hu5JmR 2.ǹM#l 9Z %̭8T$JV& @DFG,AzB2v֌Q``ߓgWa"m =HJHGy\ C"Dْbb!VTM#,T)OrkI,rǠ(U* (\ĸʎ .&Lb*To.GFnjzyG5SWび.)Q`eH3E=SUI ab"l&ƼeV`ֺRHZRB"i6lYwd2U*r\7wFơ+5T823X&;QdQ[%4&)/`v+'Tk7cRJ{+Sle̬{h.$뢲26hrF~\tN8刷_{߽qk:=w7}c3?ן|?nC_Wr }'#5;x}ɿ?SO=NZ9!ws6z7uN>wp;Lpkm,w M9`+=uWR6lTP``ju.”K mu`ʋmyܓKڍ[Pi?[YⳘMΊIvUw,SfE0NF.Tlb Mj&` xy\i_Ni(;L] 4qM09#GU[5JlietIMMB~ۗBFIE)Bj05omG&q]7"ub)"Lxl3fk $5 XfQj>`ACoRF+F wx{6)ƓA#a(;=#XFwH^h!GQ$֣R:]艥Pu"'sha,^,zY)0 0VB'H:S\"% RsY(~~hzڗ*Nv4VRFq0 j~u5c0UM]NJXT:D` 6սMGK.jfa0qԗMT`$RɗM8r0: m2M~}gmrS_u$6)2U*S&XY{V}vTxH.֔rt@wQ ʷLvfRHۛ GJKGLVyW2lC I*G{iupu9IY`٢NmЈ1u+TT׸6f{w bbKԓOòZQǺ؝7^2c{<>{l?;O<1[_ F7Z>x»߽l^oR]xO/Pq {]Q#dz7gt}fggn~|x~8n| JШx'>e>;+Hg.w>.Ӯlٗ.kl0y#^zK^{/ӧaxq}֛NHwg?}}lc}Ǒx~g#oy#ntwg_W}L'~ֹ\|Qxˏo[{Çԛw{h'-M_pҷ^~z1( \7_>?{g_;K~;j ǟχJK>w~'!|S96+>fϊᤓN>x#VpLLLTU~џ{ǿlʇ GW^#/>v1uE⑟~;WWzG/Yޤ'>镫N8M=&_VSo:9h{mC!&=J ,ڨWWH8 &7n2FB MRcl81QB R22no:?ڨO2w@M֓2.y^!$c׸h)uoۡ+z% `&l g/ڨޮ .Yl뢚Km͒/r-hGBFO BU8+㖦4r#c" f dmPmb&F5]4+o䎷]3eLu(fU9bGS`se ie)+c.QvIN6KۛNߴQ RHdD"y۷l$i7Eߴ' :0 n^]pKwMz7_kϿs6﫣ɇ ‘2{^fK op=/~ )a=v O\2%[֯|]>zON=+3߱#yf.['V'ozQoY?Gʋ>z?Nz#o4:͏y)>{/әo=Ox=o:qG~6;#ϸ긧<7w߼z㧎WyįxN-G,qkv ǜgΊgM7izs.|Ͼӏ_z}pOO7}5!LZƍCYN8lRŞLgqNG53Ϟw!w~gc{ )'l/Qo{Gі-z'.\d/*tpaw?DlER2.`s@8j4*ɹg8,lB8 &;OfAB3N n` : ziLZhug4,b}wilvd/|h1m66]xKmfk:C]I"ei(ڏ2sH}ut${@`ʋX)?f]s?)a@y3Ti]['m MHGޓ,dcm߸H7֦/~ͱ5έbFOAT@B*eV Y jJ` %0ecҔNAL "Yff0qҨkDOdP(r@FTHA ITJ=`N)Dy՝ou~T!֦WW)S_􉰣}xR~]H몁#5VmR1Ɏqʸi'g3UԞdO2 _V#Ib]طm4G&3S{ݳYIEQA"tp\anjn팃MKB" j8*<[ۤ 8R&c8Js8a00jA`rL\2*JVF%x-%R~d1SԺ1[-:ߏ9$,rM5][9]k`nŗU+司K>s/>SM{Ol?]1o~nO誋s}x+t[r |q˃rO=w w^rןt{їxЫq};sf_yʍ{ !?Ȼ%IpǛ>vtܥ?t?S_~pKo~~ld<Ǽ}|TxbCnꔗC8sii/=I w9z;}v^W]Q:=?z}E|y睷'SA߿rt3y>Y9z\YS{Ky~FO^^3m۶ek 6~6)-S޺(g;D1-[n ׮Z F$%xkQ౷Aj9;PH\o(9"Qf^w%R8iqVFGrLnFB3Na+QQKJ4$L=v2OeMЈ/M /Mm]TK/IWsGQc" 2$;*,"$)OvB7B"1BB Zte}6/Rp~ &UQh1M:1.@tT3vU9&n߶9ёnrҥ1ӳRfQ6%S^IGHl:\+(R%FPMJVfZx(xt j$-XJ(KIr)3UVB f)˞_xm/>=Co}R0\P:&ծ &G2w qnu@86֘tѴQi6)#c!Ғ+]ve|1p>w68I&SV,[Mts _ɮ smQagK*.[." Үb5@L22̹'C,f7y_#xEGQ0F ]HP0+ϓ' q%Raѕ(x5Q4`Ǝ]"}vRwϺvrp_w { `6Cݳ3k;>_} G> Om fo?k/{?|a`a׾O|_NO?\i*too9ge~ף/~oՏO{%OOwK:z[ é/9g9~Ko=mѺnf`_} YWy̛~áu.GWm,3|[|^_ |dk}c8r=DKCZ= >#8b./cY9 |_>W^53Nf _x}w)?xo6s5+53Spy)02Jήip`m5x8;`S%j:(+Kr8tPLQkL䒷]eh"MfK321@4 .T`0Wwt};HBh1ecQ0Y3d,S,kBBJ6Bql7'o+@$f1]ԉ L϶$%W:0q M5k\12"aW{Y2εXf,{ E ӶcTio0zRc[4RB02fleltuōoHZ s B:dP1*v%zmb\ dQS ]%H LLR$У \$dP:ʜr}鲑L)Y դH@ A@$z"P(e1,2&邇[EWZl~,6W* jhi2L^ KȔ?H`gqU cG#|2QB(_'H @a|/4U߶ f[-uP  ",ꤺ*l;JUQpN,wԠ&™1OٺF GrE*zlc`Fd s%<[ N& r;x]`@m6L Sl1I$!Kf/?qQ>iesNLف?=qẏ.?cW>!/ެ M/;k辺3V]y-HD醃|;zojx٧]erj~;Lh5ivnv5S[7nZv.]^~M:8KGZϛl[hny֮)9ks.wGvL 8׬|WjglʛrG;_h_ =lj" -0#DZD y3OrB+cLk]'1}(xMS*UI6Qg,Wu+U/3f)f)OA`Pmc=Jz QJS"a+R$+Y DdV;h!F!a R("3ȲI&0JO,)U65Q@ i= ӊDZp( Ӣ٢2εebE-ޒ/}[NmY$ 0a&'[ƽa0]K`"FɒfdXUFƎv)jL &\6ϷU8-m&)GB&%S&"c"Y(J ˦*.ʔc"f\ V cuw{ZwQp" $gq}WZri¶SE3Vm94o*,4UߴBbd]X5.5 ;'UR+y?8at?‡/N~h]\Dn~zh fy-r χn[uƫ&;gBe8X>QwmK}2;sҿoO{5fyȣ~UAr]tVG}@[N/ 1s3zλ__0g_3 6'_ kfvA1=m/=Qb|É.qUƔ󾍌Jt颶۬emwFV Su+m;H2k&]7<Mj-y ,ࡷdh$K%E=]o:j4lgG\nHM;'B ڏ2NۆY?d"$s0+JQ4v F$-bl3aCae\ K(aL"#D(;|D{:U%(d dK=`$]XXcT t)[ݨ&BFq]tH RUu9@zL @SEcebb6Y=*;v-hh";fFГl7S]'2aY B"E:|*.Q_!++yWm{Bv9w$%R8)x]g_H vQk,F8 1uO`ЛNK8q1a _fiAB̢a-`s*j3oQ0<爵q&u`hyI$1-y듒H.7u0h0􍫃aMЎdWٽIwf74fH=wޯUgG/|.ffe>>w[C ?}~vǿ_{Q.$$֧у/;e?Vp5K/ɩ+reo>{}w x~=w}޽)gy yxs|172R <93=SneJKOz|G pM 3$pzUa>}]nvoi{1ڙu; yWGcG7&h HIӸBb[YEG{4[ESQ֦edP)tu*1J$&)rY) %JIIqdD?sD,H$=D,OZ5d#T(LRŘHc)W'7I2ZL g%YHq` N6$X$sMi=Iitڤ\R %5e%%IN&2 n4k:éy;U4EGdHy;C(slc"\pEv-UwR[n{9 %.bޕMۛNԄm'm[8zҶqIc62LR:*t%F %nmi{өy{H b@zڏY|[Y r[!8;6Im{̢Pahڤf;B6EWL eLnU+g+`f;a*sΩ?޺Li)ZpƍyUZ3 mPY3tI/~Գ?q4-hq:?yr1^>QZ9z'x{{7Ox≻3m[m[cA>G q;0< ?.w޿"o{TpwyB|+I`q} ?p3']g(ʙ{v/gx2{*6QuFFԤm´q4elٯ; &Ba0]QamZoڗ2nn"kKRAVP˸FG{- \Tk"]6o{ +KQYl4F)l@ZUsATH}ێm6'TN*i嚡=,&11zTF.>Di @B!5QwG]/N*T:@̤izt{iL]yYxidҶ5&Sh12 =Q`$"'F/ A!H#g.2Yω@Kejٟ&'OHr-+Kd%b)1HOYlK$X)]!\N r`\֐Kr`L=hQU 7.5&F)[:1i.E_U2U*,4t5IiLv]smq[Yno:]Xɭ#o@=zkU2%[{o<ǸC?ώ VýLp_S ke}gC=Ž7|Lvf}G9x= ?WSIklذau9.TGL=㲻}GkyW^4#vEC[h)L3iiy՛4AtQ-S%uR`,bkFlc1/UXtEd42Vu`9EwG|baUQQ:VW ?mk)~mgط-&.BtT`Q㨵LM̶>+ܗerI f Mg&M  Y$\p%hII`TU;{B-THu.I#qY(L=㬊iҶ] WwF ,TCOcH#kԣ Ki]:2~I%VHY BE>ad0 i! Q ޑtO7r=+lI*C(=BUIz֦ڨ54D4]TPɰHpTʘ#ym*a0 =k!BZt”̝rjR{O0mM'IQ/Ԗ[G$#ɐdfk!\1]])$*| -XB`Qah kA)1@rUdh ""@GŶWmwSeZ ;dU$k j*vSE]ξK PpnOG~=cw!h_lG* ~y[=8{\_c2>Sϼշ~i/M}sw+팕V|W\/sdgXYkc菏;_y]b+=W:i_F=&0z$.TQČۚN@P8uo[-ce\L|S$DZR+2`e*&joU\.:':M'Gd[Qf1686+'}]2*U)A(KiU94 mЃ`ub aFG{) ԡL&`n4($:*$RP12=sFzk0$ގa`mg`#4zpb̂+ A P=T"j#6OTHyzA,g)MZ MdX ("TTJAl=bjUMԣ$:1.G  KIcGRqMb%Eb 12K,)!,ED׶j*$s_:vS@c\Hrɕ``:*B0蛶ԡ2M*o@wKX=#ruzU9^2trI&%oii5RΔ2v]rvG@D-d#-e3˹'I(oڅ4YL}zFAq6duMԛF}+(#Sf`j芞q):|1]ۨꨗ4!pBH8eP(0@HsLJ=4~Mϸovn|=eU9yG˫=`%h'w|E3[+Gk=iyg~/l;=圊}؇=Wu[yȳǑq߽]WD\~+r'~n7}gBKV |]Õ/vC@e+)grM'ԎQ`Ke};zGF"U8)hhBbۛc}F%IFx=%h[͝VR}L8dїh6zԖFMuE%]a &FJ,;tuN`Td8Yd)'Al0bB_'#`ĩd 2R%FVuRdQ0Ȗ@"Ď @+d F"B%U1u*F%Yi/ lL\[KJ#U*QgS ~MT{"$D8ё:1 2[hFR{ 2Mufn1lo:mT0h fQ㣲;v%[3q0PG k:WUlZ~U9VTI i=IbԖBH䊮Sٶg9EvQat"I +m` w\1 642&2+퍌 ir\!*ڤU 2;$En6YYv :'=J-~^s ?^zˠ?uuN0p//_8Oo /O?[ɫ8Z!7)L#{b}a#}7}>G?^w}n/=Vw{~أn+s{Nx~x%?Oۇ"nsQU;eV}o:uoߝx'!\>[z衇Otpy01K/t[wͭ|`וT{jD,Rp׸r6 t *tHLQO&KJ$sR7Fբ+}.u-Г4m}ϸHuCࡷ(MjI V\ZgQ!@9"W$Z#BB6@2$1jϩBpT`̎ )1F m5TMԓm].ҡ~u1uVFi6!䒒`ڨI2XI q0Kl3U]e*DD Ƒag-o*҂,ڣ'2RF$T RBOcOlI$փ.K2 ^5 aXIلA d1QDXH`)bG%4&B,ȈXll"QM:λr'9SBq ت,\9a\ª62)㾕qM5JK徹.z8fDd2NM< f9s&U3MYHv9ߢ~l9N$iLh@BKJ nr$ hF~L|X@:cg&TaG0RJabJ< B!mr´1ɼ2XU'+6jG7Hi$sZ Gce**nw}R˟.wޝ1Cx'?y͚5ƨz4zSc8?wy333+h/s[tQ6|p4,/2}n9[:/>:{p#!XGu8N)[orڧqǤz=37z1~usq}[9pC~k~UNbp0sHYQK$IH ]B@ HEI&쫑žqMCo `L #o5~fԊC{էV+GW #8~SBw_~?zMN}?S]HR-r'qu߼㏲ۯ]+K_զV6/~Q-Ht3?.'0wz'~]=wx@ɿ/vp=/8GUS珞]\^Ox+n)sN<7WL8S>_ w/}WWyU߼ǜʳ>rrKϸnoV OIg0-)?_W?7(GgY~Wc]vY o|_>.8\>0==zPj:b۶m{eaÆ}ٲ'GC"\lJ<]֥ `|'Q'>)OoK3٘ŒKJ#)n帍*4IEB$I6הNKJ "dj;Q2ne_bdOQ~vVa0,(xޕ}fH2fڠJFi)@HqnZrE‘̹yVFʮ=5nmUrG6YS D߸}(,&#B[rڄm8JT :1Pĸ%m8A'0)kn@ ]% A,۔ )ebrg&l)Y)I#RutFɢ !@OSeRՄ>G(FY&a&;QAI$NU,@$&zY 7`YVyPT,"V`s7;\JKAJ8q(h/hdјc-8{ex y#Ap6`VR8 fm Ѳ 0 ݶ"BE㓚)q0.H :KgHl:RΕ!ɩI6Q0CoŚjtpb d.EYd:>coVU@#hj̖ln{Kn!V\/ n󜯌fBb&ϓoGs1+GW # .8i3Ӈ߽N?y-9xMn~;ʋ?]1|OWeg/{8&|IG~g|]"3vno滸SU3C?yi~Ӯ0`W${ w +|ҙ%Ο痧6RƜq?])7ILaM6HDc|6Ȗ 3f6t!əHKsQ:Vjo6;Pl+Qޒ4VE]TSN 5]M0ZR Jər&dN񶘤`8֪}qQ nIYwUF*UXpen2$ CF&nLHƎ ۚNW{QMG"=lV.jG2&ƵpbuC:܋HVw6yAm 3&Y11Ў2 B6eXБؑjRzIPzTȇ +T20:!X H;$GFAJУ b! ,=B$ ꄞb84^pHH,1[LYIo: }ۺJ@ґDhb hyca9ó}urp]%nL:͹Nfy"T_ )G*'DF"lRH=frU&e0rQ^vĬTYv1Mjhy|u5rI2-y{CRQ ^uE1 .sT'?(Q}<ec*E3T_1kggyu}-/S.8 ZgSL14=o#4xT]}s3 6%1-qdg'gWmqiNKO\ܴuy^嚿tO׍vۇ}a S/z׏THgWe/AҦ=1W|8{s?z}/}+>=XQRu)V|^_7, ?/q88V~u8H$ڤJPa}o5TP!iu09pӨҪD,fZN a!c^ιMҾTA N`rbhPp4Q;(ؐdHr R8T϶9IbMR뺃#`vU02͵2&6qz]9H-XT*VS.\>N6GJ*i2rGH,jo՝3aJ{Gr㨗\iTH tQ) "cH12\鍼͵ysmUȘ^U8l2F1YZՑ$re 0Ý"1 bA̪ND &BI,2 Pt$=a$Y&CB0 UBGJ S!3{$"1iRH77˩rG}1i݁D $E89B%Ҿ8l6cR֮]Sd,oem\l .*X )u0H.Jqu493#$9tŒK^V)tOmo@22fЮ\[B䶦 sq)Q7($OX6LVG<6i[SG]蓚2ͤmK#ぽ'Y/칺#WJ&C#WDRK3`Ql{8 >mRMs r΢/]=w_vv@s=CS:XE,{1{~'/|?e8R<y̚c5t—7<'=hO>}>핏=`Ny|}胧/$}p/*m<凣=>aXݷ(t;5=}'vnۯ?\r{f=@15e6_1w7 Llr﵃x o}!CJv+\~_җ^OhN;*N;:k+b| rZ.,dV+bWぷuԥbKݍEHQuйr[XtKj}o`*uhb+KR8tzeMY$ԊJpdRF)xy5mi !R2)r hU!k >ʁ+g:2$=K-Ȫ8pECUۉEbDE=PFh{-Sô *v(j.d1V(UXh%Wno:` R6rlC_뻃G E~{[EI$HF=S֫ʱKR#͆*%B6$sHb2 \'Pub9FB:X0Dbb55b \n* R^>Q]s,T0p,Q0$+c!Y _Ds6Y]kFY $ Mw  \&-.dT:%&jr IO2wv.Ag.ɦ)U-UQ B&j .;+FI`[ؔm9iZ-S1T>R (5ҒuW " +( /vI,zkL4攈@21EW"R_;dOĢN6\vۛI X̖+ŴW0ΰ^#R|[-"4IQMpe&hȝkʑ]RVFT萝~wͮ欝*V\`_YE<է71eg+\+͡Oigy) ogM.unnm>Z:oVxתkmcáv#kTz6ݭpƿ?]/.]_xÏ?79w)}ߣ ouC/_~MovG~>Ϲ8Č>*iar_%-Xr%~u}!wӵ;rp8G3. 8c'ymw]?ϸÙ$ aPJ$ P(:*~[:4F_?[glXQELatog>}n'b+Y{{uֳ<ШX@Hبk6U4D:7\N |V _ /^~~. O쐋Dp]N%+s"Yg\̣!6tV @9׏(TPcY,^MXfd[hTpT)fy^ѬYJe ZŞj$foVm̒ #sOKOZ"mU-oZv7IIitZRPkN5۷<6~1!EYZM"nI.ud'A@J( qi,OdGYv CHaE"UEP)ThԋLJ`"(HlPrAR ([ m jLD'QcNk$ݾ.EwSi˵|5:l'0j6V @DE Hg)tYqu . Y`k w$rQ)"d)F7*zIE,`ReMǛ%ϋJ(U;g*q.&nU])"fvgLsaKhv|m0Wpj9Y,wxIYM /)E QIwW*b6TFfҥcnvV)J"Źw`ۨLJ"9\7ʄ{Udybc</W(xzl.bE͂w{w6w[}9gK?/#\|%\v9Oɜ}0Gue7> ԏQpp| ՟B|s~> _W?iO+ ַ>!Bܓ}@R>O>mqh1/x e`=И9$gE͝f>پ*KQI;$+s$L'ڏpΉՑz['BBE*UI JG:ZMjJ? I7HR"Z)h+R"'UaMDai!+˥y?g_|\+DTbrL?%-D\7ɓެZ[zuCDC!6Z1WmUW9-'jWco_$#"!zw^ QvYHQQ#^X dShj sXP>Of+E.sQTg˥H,R6ύ&rȩ (Ry q9Æ$EA(%WRu UL#]r @!@#sH+e,ԫ`G+AR\GJRא0{ |A\`;&DZda46M(|Q&r"ZF81H")ogm.w3XxtC=HyTV WP!j!J*(86le͓y%"XseFfQil)d`kAt{;!Q˴dTʄ\9g6TNE#3vIg!GU9J .j'|UO' srķWoz5}CpC#[{<_W/{L ֿKqO_|ž'' >@DBlvJ|'[z%m0/6Ă<֕kK{R(U;9x\7 w$.Ij'kS2M]NHݟEREܸTi!'%r-x44R)h#f }`d"!˝V2O`UH`w:$J\-ȓzCV#:(Q\oeJ!HF"A8\, c'v`w2)HRx^X,1r#a"eEBJE;CT|s {HK @)"1JۤW);n3CUv2Պ - "ɖ8VP L>cE!TDA#6r}"F"d$Ƣ,zJ!x̢RI SmDezA:Vm4hv:fYBNElN(S;bKF:*'YTPIQ5;"*ʓzoet]*kEiV$ŪY>V*,RvA 6aHzMͩvB bXJyC >)C؞oVeINőN#Uke^"Mfb@AExJP*X$/*nnH6 YqO QL lIY(W {lqMyڋoy?* D?ϻo# /T"z%W=f P?6n_pjqCⓌyā ~:^;˦@G@t"8CV(2Z&{Vfy]t*bws١|ϊSXĂC#㻤3œ܎f(E>JŘ**d\پLD8d5$HuZEE!TFck?֩[T5<EJG+ % vj3/ͺh"@r~j2$+V"1XTځ*LF%N$(V&"au(G:R gurE9f -=&QJ <_Iz,>DevQ5䂂O"u"AHOde0L>E$@j4Ob$,B)ETKj $2ő"7ɕꏘ%H6ڍ]%Ù.UdNيF :R,u\4϶㝮iVaPJRP*xDEIfb$Y7kep\RCJ*>j)H b*Et $VU1H|neW| Ɉl-& ±񹈽2+e!c9$ y2V!mb!+2[cA%md`,Jʼn[YD9 "U2mTSAv1K R8_ w{w6w[} YO7 ڿ[ʟ=[O׽7pO3\.8_|wMy!9/'s$&Vs#U;1R{jTp2K$-el5Ò0dᔍ hV޲ZC(0d9r%G+(L`v.D fjcBDjt0j"Ye$%RD . -@E">Â"60@E A%R5Ƒ"#S.\q@"`"Le?3ȅcN1q8-GIPE@8Ѥ=Ajsт߽(%z2!yQ6XwZ"޵Isl%H붣"B۱S$}V EYR>i2ڹws_U,-&fW"Xͧ7! wUw0'gĝϦ_C8x>q.{i㤺{\wu>w`9Hc \iHEc;4*r=S3HA3pv_ϼ+m4 g9Sc>^/F@El5t^V:.;, ش]'zE+ՐP[|( )D5CV[㉾E}N6i8ێJ]}V{9D6K)@rj\?ު l$JZE)X{_EQ[U:d.he Ur6Td8$B"!EHSs,ÖJǙw]4{C2ku۟xۏ $7F#e;(P,}<I !+S%E& S]  RrHq̩^&J ,E c- E % %k)( 1|YV*Wvl#s G;&{(` `W{Cur2N]x8N֪1G1K#R6ymȲٝcE7ؙS͢%RDϒ+;`+v붛f]ié8lvһe$)̽AQ"a 96~u3_Ig\se`(gQ2hIo ]4FQjL}U76Y+Dy˹w#FawDVDg}\ (< f\,e׋hJ[ݵⰵ > /܇z UFRtcδ!دSy[%t?;}){~*O{t:= >0x̙3;qT^{7Kg qBiVK6\0H9OL7b PFX|PRĦPbpuCkfp2"F*zab%*Z'ORkW!J!ձf\U,ک`Djm9ٰ]rE,XxbFEAɅw(8`%3\:2z)-鹾'*ALbCԙpl$'mUj!63xo؝Emdj>ypgsaVV%"絖"C4!ˑijyDc*DȴJ)aJTjUpd(9E_\ JPs>l=A.Hu$r)BTTIl_PPRd$.YuIPAO( 8dd$ Nc3( ̃_鷕y/n BcldP| Xn rMCCRc!t"By $k}R*>U`0,QШf-sS:zf+3GF{~uS3X |Vk"4ZOzghXkY+XXcES,fD*(BU4hNc 2ɴ: vbeCX`uNGD rA!T2>6mن&/8F]{M^m'_|˞_׾}tWclWUzֳ.}-oyٳg.}ٳ&{?hKr[?~)~{WNjߛko3~-qճW_>fe?/PfsW^󟟾.ҭc_~`.w¯~ԍ}߷C׿_ ?wz0/~NE~o}]4/>zl??/ nᆿۿ- op=!y#qUWY{cRʿʯʃO|SMz (s﬊FJYp`uJЩvr^.=V7`0E;C]fϷqlH6:,̗4.6TDQ(lr+[jC*/P̲ڤƷI/`uэ}V붟WYF72Y,MeIީ&~aIo\S?wGOz+n=;owo+{ʗ_޿W?/}{;wj Y@ì4f`)\E36l7ڪ.iUb$dEһS1$52>wa&Ɵu)\7~v_iJݡ2CS3G, 򕮒y gQ T}bc;$B-s CV#1H΂uׯ>Vs}A ُzY$d;fHkfH}Vm;(B .锥Uao*WИ9Hc(8* U@qE"A@Jdv/fKl$̱4 5- EB#F2K q1l[R y"EAC&#I E Xl?O=[pZͣ[keBQI˂Wճ`*ؐԑzed.U4#8-IYr`>斷tk|! Y],|VVt((= iӵ3_Zۻ csSX/ ̙1ЬYu$5f4*%s&PݡFF.MͽK$sgٓA-3 Q+KCBFZx,Q@9V4]_qus)'"II1<V³l8NNڪڗ?Tܻمz^^Zq!fx 7< o~󛷷fo~ſoI3d#6__K}о1W~.=?`7ïFwޕ|r[?G_^{}]˗}[_|W皫W ճ_ʹ+_}kI.y~;grl?x }?O'nիG<~gy>WfGΚ?_5_1Cfxo7܄6%hS E qkvP̸|0*qz gKvT8TҘJ;NI޶NPȗݵ${jJ`-f%sMMc<ju7*F+b`,jx׮RQi}ō#, rVjP#`vHzjJV ןRj-3[jaea0W2Yqxy\ ;]_/ہ). PލZcnuk7ٰ,e?[<)_0Xd qqb"N2IT$)H E!Z@ ZOq1ln3fO"Ezb~D.qe9tzz5Rq+ M ]65^(ʮl\7VOz9eHhnWL\',hԫQ`++O(kyf{8md^3} Y*~6,kb `jPqO wT^:޻F]0 yǻTHF ӫSѩ%](\:5lHACGRuh^{YrI"Xr42W2uIO'~Y<FYp#juO Y"vYrOח3Cf zX,0~wwA>ٿ>;_{x?o~Kݲ?`\}w ]zU}۶/Oi&d+FZGF3$E ,+bKoTCN5;C#E٪ژPS[ud3q2)c E.@2e0_6mTT+I 8;OzWi.+n̄N&V,F"(Qn"(]V]4$WtѬ~g}RZ5Io5Xp4WѱKHA``v2y$_/97,R}4&ƬYEs^^̗mNrK;IYzǞt۩/2iAFe,(27YXP r= I 0dR8RO"#c!LER4١,d~Mű*s#ӑ[ @z5w"ؘ"}VʐJP)h jyW+EEFC[+=IH'yVv{?JF si/T}-#`wzw4Rqj9ZvϊWۖT4dE#c;(fUd$9ց87gPTHJEtjةP3}S8AJ"P#㻤yd}tĆULE-fC=ց{J!>hkPBPo~|+Pн/xs_CV/!']p˩ Bɋ.f\tl?/?|Mhꊯ}|O;q?{;߷z}Ew>_ ~)~[n?7gyX>_/rÇNϮfqCx}W\xww]r ]]wXPڤm5<Ud hzE9&vPT- m/^M*XIY\՘_zWV4*rmnD>ZU4)npZ%k\?aPLnKQJ#3ᮯo$QDp4ECV\^uJPr< V;\ W+*$RúX{yJ͟h뛑3& `;JEH>+Hu\,*0%ecCҵ_rԗVJ`fH ('#!^e đ&$&@dp8Re\Y!@@шd(W lP]$m&)DK#{깑 ;Y/`&I@FZz2=ZdlyQ!EsC=ў=VCT*Et8hѩ7T!JGJ#nh}#Klu*96m_f|fޝ>Vwm8l=xpp</tÿk=!-KJ;W?䂴 .٠%q!? 7o~_^(:QI|7#/^W3%R&]q!~㕷? ׼kAs`-}#?7d[^?7q>q'>n[>q;6Ƶ^TdcX,h3Hpђ)B"yg1$ӑL1W*j?ӵ Y* u)HQk$"0. h7]{ h`W oSA#s,0`O 7+rb \%öұC\4!Ka*pY[LF #1̥h,R$B>\T"6EH"dHZ♭HO )d"E@1UQS{y<83~YvjACsz5YfBC=VV:W*cA*~bqHE >'c$n C}vnYmN"q)_[?K\XeN%!FvGĤkbcU{xOcn\&HXal2X-(~͐O:LWzV5g`9Ygݥ=Piu.[:zȊUhVK͂"Ϊ:l jT"MmR\,R|RvG* f)vלGJdGw{w6w[}2C'2f7DQv_ww7^xɛ;HspW}\ZNV1~|?r%OO~l xѵG|~ٯs@?7~œ䅿v>cw?gzye_|ǒ'+7~O>/_WKvWʋ_ t_Z\?!>#sK?n!}s+N.ݰUt7pf*eN \8$lߨʹ;tn+KXHTH!' Fű*r1;IDZE{S!E JLE)jcXlO͕@9^e bxjjsf&vHpHL7Tv7d5dfu#]_Y (}ڏZY%HCVNP-eůM:&/;p#ĥ#QU, 01e\"L'ϼ[fHғTZHtQ4B {C%EI$QTD^!U4gwĂ(J4e|(bX0oTԳSiAbA&7ԵS3pNﹾ!lTppN\lZ>׎Qy>qjT|'GF{Fꄟhwr^>'O|+ |,x'O|חh«_o'%ew汯y/}?0hRǿ / 7ߴ|_f<}|pCa'B_u3ں'=E/z]+ 4w¹|u]',R.NIJƼ34;C=6bEI#HՖ"nYLN`d|"fJE62o5?˅kq34 8Zn֭\J:`WjO++OCyS;,52ME~7WǛeғ4Qw1+H9Q++n_( L EЬU$]SZ(mǚe%"n^qv3M~I[+wȤDYE.2ul)JG[*o8u|O]u.A)Ya"/˹B b LEPe\"@(E2Bd(JUNr"eJ F%UX ӆG]z̆J,p*6*\CS; Y,\ET|WS8ZhVLQ1$ }V^uFLX@`0)B\ĐݛZE!J$tw| 7\(\Z%LSA#st͋ueh#a.bC&ՆfQd!N(BQ4ck-xO2$-ڳ #o`^;6>ltiYpO@@Úf IMGQLʩ1wlUm1RaJ~D8՚M@R'yܻم % 4{{{/}K_җXxĉ/xx?pG^!q !xܿ嫾~_9'i!q{x|@n=w..k"x2P h6y<[W>NE|pYgyYm^ HdhHãU;\F{z5aOflw;^/=}џKNJY?zc3_)USۣ(f\|-zYFIƼ a,0*\poQ #9fFSvxxe0nHzUl>+BuۍTu쳊$9L7^7T:vIHծ>$5RSdC.&:T*ۻ1˼LOK K4$ͮFŐOo8wYLc-JTH BZ`w`Ar""{"z9[QT0P(d L*d (=;̲t?$:avVU6.au>)ģL>ih"I;; Is2qr;W,#\c桾ZE%ȩ8ojۤ,WttI3<Ӎj-0֓t*Yc̼d2u4W\U4`eak&E>+aZåi HNJET'`I-cJ, Fjid9'< "Z+Ǫy@(dnDj{7|0Hwuhܻمka a|{7\;?wO_o믿s{t^U_?w|׏5\s5<)OyS_?c?vpC袋nry+.LxQ GU$K{$y2Et"q̻M5:H-7Va$9a 6e4 )d N.䤙NEE$}VmM>D 0[AJTGiyEѵIolg .uX%KWWF&+ӑp]í[k;*3'¬lBRdV1K~'E IsB*!+(2=I&eWCV`jX'zݘ/ӹ1Lc//y[.} c5d^%qf+$EPjȘTḥ $x,/$I!=a eyegNkvp2 (>iY!>TT;YN^%JfO*eLC.\P!YT(e$o[MQ"h'/8raW:zZ{J%煲H&nuL"! JZf6N@E5k?FF'9сa+NFf.,ј}VC C( WGD­t<۪WC͝욌Yn؞G|GEFQF+$N22yCRPD̲) Dsm2GQt7{{CR *[nFßß@ # utѸ+ЇC#ʝK}I =x_ld>:&R,Ea,+~N=(>+,\0RA0A:⺉ R1rG6\H E97ׯOF 0Yf tOͭ;[u{jCm40qCcn$( 3fzT<8zT.idT~(LoH<'#;,ۡRQ"m.QfBR|n>T@Eh$y( -'St2E;8Ω%= EYxgdv*:rY_kivzD:;Yh~j~p!.:ws>|"#=6JJ"QTTGd1U,r*eX3ͤ^DA Vfi\\no~Z{m[?Z6:Ld0d鳊Y*( %<:6~j#!)" J}4ѪPZ&"+hZ6 I,lif[x+*ZV#U2iJКWp'l>EpPk1J6)"XV"!`) V`wVѬ->*!J vI+AJil)A4:n蓎$OwZ.<~7x8~sܻNϵ^;3}dZ}. [ NZe(RZP)©^D8d5@lT]."<7Ԇmߑ m2C j;d-"Jsm1ooB\mdFJ%#JYkTd9ӎ|Vs"rbMaf:(jbu% .aBؗ,ѢI*C=5Cc̬L Qzt^u*i$pcgUX{j5TѡfC Yxܽ'ͥ$t,|?1CR"-"\d^}嗟_C;WZL$"6Cȝ@}B 2B`i G@s>L-WGwJa{s*tB!de5'hgij`>+F׉V۱II,A hod^]4[SVf'( c!%"@6(}B;mJJ-IA>D1oTtPxlb'K{L?Y…; M.D8$uIG\s_ Q[VSH}҉h Y%‰[U'A YșCRfy^2$M_dr*v(K3#Ӛ̕; Q"Q:l`^zElṫJ# YIAF%+cN_TGuvHAJT "@RjTl$ "J)(A;a=|5~G|eY*LY.]xefOپ\RuKELJ#LN&.T2OCRR r<^_ ؏aѪ]$ qI$]EgI$Wp:Nr懲;~_տ~c:!qC3[[[ysnƟ?7 Ozғzы^=Azmq1Tq*12I$ 2e`4f"dT2Op/m접TfY 6"Hk'oV_s WPΞ=*DG2!RHT!l*Ѥ f-3 nͭi8Y/G:tIj'`E|*i8Ӎobd-Q *EXp݆m/S2*Q I,Dј*y`l8Sf1KHm47/kj֑6]'VK+SgUY:p!XlRS7,a`ʲfb<lՐծ֫sRMw4"V2mU2#ӣv%O3~>4=f(AXYHEF4f)dE{Beo"-\s#E"ymJX-sծ ]&ñ(bVISA'DZ7} %gKz,?>tY66\ ,WH Kzmi.FcUҘhvF L?*bkV".PЩF(2*bHde* 96d%EZvrW3_}M O-FfN{Wf¶ 6|+}FfhTHD쒾i>U*O TJZ NZ&!J"t*Yqܮibu*$DᯩKzFU*rD"xxrHU!\ʴfw~H4nG\)y0 "La8J⨯ks N&δ͒ Lt8~obVf)@1_%W2,S'shνt䮑w\ɳh`]%m0Q7\GXyN:e/ `dy vjd"}Vm4 ʺRwTDb.:%W*Fc㹧 ,(c;L0 !iP:p O'B/_^G #ڤ#ɩJCRt3lTjTik\M۟S3(ʤd9L]4(`d4SIc$_?x&?Pk{򳥵Bǿcd3C⡿6 ޳ws3ZX2%ȼ7TS;pg >-ו" XPPAN%ѡVӖWh7l^2{xxw_z ~zlxM薲fA@*Rn+O|5ǼbAq'DȭnUSׇj)W'*Cһk/9L5)`ƬePb`}VZZJų}S02sϛSwrH!D(k_ dj&‰`(u #XmtITr*(JPgP*ؑ>Kt}T YIQuYUEhh &* hNKfɉ*6أrlzc\Bᯩ!N0PبԨxj5tv,XN/Fuscx =_m~$DDbMX|bmJ!˱LJ}ekf$\ ɴ7Z%npD8fz)dTެ.pJ#c85 2JŐ'n&Pҩ2:rDo!+n]r.CqkC;Cfݡ4T@lhRJwBd{wYIsf۱@\:,kwzlQ:ݏ_ej9>?\S-nݤwƗ^__? |>oGk靡>Ӎ&oTkGӉ4WCVD1"$BP(;*j2I\<8&Fv8^/5\TkgqibfBTW"FK(p_$_'edbΙ91~JVl78JE$铊 ۳<{bm/T;C7^176a>Tʐfdu1s@ 2=_Q{Y&=^/k<(8Sr(Kp;D$sWr,I%o0s I" Sf'd):/l.J!i*"f95BQ6Zb$TpjHJNE yP!IwL R& <LES;^FU R^BBw1+f .~tH#4Pe2XᡛS{ ?)Oܼ5Mc}<7Lt/߾ҋ__WDhTI)#4nJ!mnMB3D2K"BNZebC>˝{ǽ{C%EYwo7YYJEY8ӎ5W: vrJF ?tc'I::|.<,Xq} >ˉ(ZPRHcveZFfshH\ Hy>TgQ&,Ehc"sy|ILdDq9d\F#RA*?ZE!Ok?,L\(DY;gDR6˩g!J$en;ҡRiCҋ`WνcVqu>++<luR)֑ ̞ >+9BSY .@j{ D ˜`l5;DJř dnHEJѪto1j]ʒsg&sq"6o^?d>x&luԙN9P*{ ~~_|U߼?|1qC8EKzzd[WkBG%'ujMD }hgN"mخRq(ZPlըW Jc!T!AH,"IH{ţU&YwLk&5ZІXF32LbTĮ"I!ʐd\W}}41$igѶ'7:`欝NEH᫤fC7ܣmok'ɘ@Q./ͨ ]̝L}/̆l7:ێ8zt]&lT62AHR<$tVqBڨ E66x .jpJfm2kF'ܳC3dUɄrA}_Ef{.[Fßx16fi۩鹡$0CM$.2f>URP)b܆9WfKaZ!} |nfD6ݳDM*3݈'W/2anT2VJ#U QKg `ji'½e1+R@ IEm4B\{e5OP>KO&&BT&H!+T*ֺA5 5R;.cTĐ؛Z؁|4tlRTSfxԣudp!' W~}h_gsKHL>ݮIvQ0SOig\~UUm_ŏ|#snccc2GO69=^8g J)FD,x|'ka*KFr*G땕I4ҁyTÜ ִUd@E?9(2dD(&d"DH`uΜ}F&+tW}ʹ#UrZcNڅ(h@,m|R `NERWܾpO&t2;:h. I'$Rgs}Fa{% cBR>ĉqz"'s$雽!]4YutHU4Q`o{*K֫NcFQJ㇤V̥ -oxXwDT6ː%7ڤwU hkS'`$R Bf7faeZzwxa*eieRH lMdB(E%Ċ~# `h5Fne`u'FRa2څw 96>dŖױVG+T Z"؊n!j'*=NypH8ҡVg3vZĖWDEtp2(J%f Qdo="VHE' {eC<I <ɋG#U8|KB!AxrP88oޝ.]\s͓䫮ꑏ|c>RW^y-?Q?~?{[M_gTWC(y#/^gqC|`mmnbr(#0-?~ JT0dE櫺@R I2J$g*"B]dByW$EiTTJGIul$YF£AWtDLf7py9',64gf Yb΄hh(JPXyuI˴U"WKQ_]K&-}2<9feJ$Sw0"Z V*fBğPl池xX3Bv.h6ʴn%BR$dl7j[FՍH[UHT˔ 2EKky41f1/Hd,XP2,%+.Q(E *QqF#U;Acnm_0n%BeЂvOZ"-3BV>+%inWX23٪F53V:F|k 7pBĠeuEY%=dE!IV6kBgb$)@N6j>@R!(YikO'½"MsA֊%W\2ZW *AJ2@r<(&}p݆bAlLPrACQ,[1'Et5$jH? i- 3h'H՘}VZ3BjlOOR.4hWH"s4tҏv~f<ķWoz5}CpCsx@xͷ]E?}}{CŕW^9>oo?L&+}V^;^x75gE}tp\m)_U"gqBi4QYqt<8fH*lTRHSDd^xw!;3Ϝٯ|p kv|8z6\Ez%ȩei_&3Գ"L{k4jFHKG\,vm\12ksde" ޝiCo1_4^>Bʺ6G $+}VBR` Y%0{L#7l6\g-P=T»UQxqPwFsk z*Y3ϊ3B!6\'(CR[U'5~Ϫ`~tZOPq:zW<=볶2lCm}V|?#/ݻٽ x?}Ȓ>O-.gxnu<ᎧV__q|rMg?t!AxӿCלѴt_N՟#u{>O>Cs|J kd6YQH1D ǸL`]7Z.((j=ܚьḽJst&DQ\o^cv*2ݾ:lT]̲MUUW3i2E]WJD>ːBLn)X{6Nb2Y1E9^v}Cb>R$7 0PTBFfQqjhW\̷} Yq}՚Bu]4,q C](DYqHϽS`E[=i{T* - "@ޗvźhfk-s)bgl h}c0%RP]L4de0wXF:,%qynTi̝vI;%@pn_o-%JLHTpuroeD%DZ3~T*.uX%"i="z6TK/r H1^B:^/{idf]»]-hW,BQo+&]kvhY,N!AZ!)؟n%2sQgWCR #ɉ@"-QHeMQ2V@ no8LE̼32G±JitY! N?ۍGU&.ĩ?<~E oO\3tg)}/x?%>Zkch}ѳ_w?֝P^[۟=G+L zp}gl _ >_58!ѨtBhIR6Ep`9d, 22PvRDY5sFJ$R)GVm";BR`|,CL]_Ef"O*(%CP+$ebFE+Ӑ{ƶ;T}ҕNdC"vu*3T$B#H ej"Z4V:`͐ { jr{;YIOeD!wjJ*JL7ʄf:7l? <ܸ:kEĂ Jxt̔c|V2V2 Y#S}ИBaygAowEfИwZK ;HNG(EHA>+"\DU)ώąwL OmުdUp،"EGc`#nNc)bf1`Y8{>P]_bMzg1gr7^@,`hYѮI> BF6SYIoD3hABZJőϊƔRGIQ! '(ASg1BQjbo5KULp_ 'pw"*&dÚI$4^\ĺY>7{ZKfGx@mF%+SȊǕkY)Ր0HfXv^<'ߵu={hN?xޓ^7_(?wyrx- 1 !|@%]~V׿ eMxk7Eӯ?扇>G&o;yqlFt]G_6?w 8!{x[ad F&+x!+m!!jIF(Jf}/6}|p+rx}>;6?vٟp77~7M7>Oȋ;W񫗯nm^gRtO9vرc˿v{CUk yC/~෱]⾃^xaUPRųO"" +rb;S)rHE2wQjڑ'!2Y(b椇 2jֻz<4JQKS} bͶ?}d9HۨU)eX.#bݦ+JM{A+t j/nd (=يH+}όMH7}If1P;"OMoZ_͂D2uet HKFd e$8#2#eQme"̃i:ҌwÑ8L6j-vplB\Pj'&- W`DG VW63H;-T@!b$d#J OHIP{9g(Y)ﳘyE5T^D@zDl[iYEt%ϢO2 ꋹ932Ҋ'Јї͠O2!3"vA$'*Ӣm^|7FeDk}IBx[(͝kW y~ɴ mK2OG( \n҈de\4adY )91ih}FpE)Â':ݻQ w9ï`=''ݬ Nyzփ_z x?]}bbm?oDq8xUW_W>Q?kWz/;W -ԑMwsExuo|ͳY/G̫~W{__+#YiUO_CʷAg %*$+'dP,Nih{ +7hgdn{C3T"P1T JJ2d2,y E"S4sVX)?t͢HvdK-^' mjt|'PB;X)f>NDfWȚp+"rv`Dž 4XyuKq/|anh'A.5z_"22IK|pGy:)xЊY*Sg3@${ςm'K^#3(od*?jNPf|lyP;[fA.c WIو4 +f8sX=l+D*h a ,R6dʼg BYx3\o.y]79}NbGuQ:V`Krn'B]uQi_k&*(SW"^t+̷i#e͏~HGo:藾A|>G̛.oϙ_~ב[}?GM+ћl'I'y׿3g]+{J]M0"|%IxWd9ѽqAgx2lˢOb,wI0J\>zR)oUW3z_R`HI }!x IP5uIP7׉f0nѶc2rUaJdJ}Gɺ$Zn!@B~AOt2 {ƈ(v{<[˙Wm-$Hɟh>ɔRJ WQΩHT~bzX92}>U"qC3g׺ Q-1@F$WGR~'#ȻHB-R)) {3$L$9Jl<&NJy$zΈH6-LX4{ ֺ*d3GҠ;{id$3[K(WJFjMڊE-">jOvo P7BQ侳hSi.}LOd۱owI̓^EE)@Mˢۼ#P-wNpG+2dC֫_W5oyQ| j¯ʰsO͵ /N/K{y{wU5ωk??͏8sλ߃_պnnӽV29؟,_|{=?m\}!_}׼>wm>ts/j~~)j}OڛՏѸ]bυ^yt*)u`,5IgFh}D"OΙ7VDΐb';4R'޾LlBp -c:-o+kof`HuYj7DWQXYK'de oR^d;J é7]3"Q 橒ad%EIQձfWV`8Ў6hj誔,Q, e[)od"$$soI0lJ" 6$1u|tLxOxj*x(O C A}IHb])CBNYe3>f嬕GQ{S(3{S)碜S01]4g}EWCMTsd)xrբݹ,JII>C:ãY,X2PIqm5OVBy+CDE)j*fGU{3d*T\HCMWLO/$x\xFyДjoF_m̼OrA]Tso,g+j<-&ư~M9"T+( eSoے1,U,-os8#:kD,dX a)"!D29 -%lJ̛]T4q{{w;8 ]5W 7?}o|vW7ǟWg#?/@ -| ^}뮹?|ޞ]_C+/Oo=o>,$?Ϻ~G/m%nns^7 F+&V[o?7C*y}+=Kbmbv!IE `DR<ϼJ*77Rp}k]%9nO@TMeK2f>p39낢f O٣ p[-(=")Y{lz+"9=2`xMg!SR1tQJ ]T}x;(;Ku-v2P岱"6sg%ÁrKm{dg YY$u.$O`ۅC`XKI4D;pQQg(y,#0%> ÷ ̃&TlB l t%@_bUL|l:pQccݓMZW V%%9=0œ-g[R L2kh+@J;γZX4"2@J׺34ߥ/>/|<>/}`1mK~G?^8ͼ)쉄7sRRh_{#XY<4o{]‡$l;_Y|ۯڳ~sFgIΰx7Yh8ñ͒3Z6*D,$"r"9\wʼn<M(h$ Cݻ$6]A~-_LEJl< WL#Y.D('E>2,Oal.ɣ1che ".Iɓi`|!ъ gy6ɘjWcЦ+F>d~ʙI$8`@d,%IzZ$q`YL`h V#b<xe:x#7! B̼!dN|/cHQ1nRx3\mEul~L< 9ܽ;Dڛndnkn~ίq?{SWFo{~?Ut>+Ox/~"0&`.俾gj|_N--?K>?]_W|닟=q_Oѷ^zpI[~5"\rnKcm tϿ);b_:&U|9?϶m{Ygdu]Az_wIY56A/Om,!2`(H3gǦox3htQ)f.i y@!ɓF<:e3W2' $]P<1ݖq>Pj67ڑ{'tRdb|%Eû('#EU*?PhȸhڌX;lO`ʹ7 $[o'3c 6(hj')3P-g%ávA,p)ˆUc+f``|楈X)c͐ZJ\tҗ%Q0"&}14=h<%s24}gqˢOfΨ{{}xZ*Z싁Soi(Nn5Aplz򞭽rISr5\G1[}h[ C 1RiqHF. YB3'=JQoN}t'Wl˄*d>P~H iF/d$diibY,v/á1tQK풴"&MP ,*@@9e$OblYBF=MЎ.֊8TM~V Oa@ʯ/UP<5Qm4!.*X0ݦ+OΜxٶT+" $ msx>^(i_;^K*7&cۍ IwI_NtOa/;]'磗|ћ>L_o;y7y[҇pVޣ;U=c,+>WweU0UWM}ܱ)^]ܧ[U|9+K/c|/sDkUi)+C{RxB懪vty[aD"{K2!"Q22.vH HDbmuFD $Q@:42 2be bJDM/J|1 !ޢF`.JԆ,XU"YI2$dQ. QX1SzNrvT怅 ]P!qV!R3ف$,&h;XK,6!oj<,Qx;I, 2μ!٪fy}16+ʹ,2tIJ3.(%RBx¡rSolDEysxy+Xc,.sfmmmpVR]tEZD #+ .&*#kvQ,3>}I>辏KrJJzetdvE+E,:)3LwASmmve$5(3y|ADz_΂pI,fv mTdJgb,̽Ip#غRp3j{bucGd7 .ڛÎg$,JڑuOY–+4"-ٶ Z0SU T |Iownv?ē_yϻ?5_~L =ُ%Y;rK34Ÿ֫ =Sޏ~;ou`K<8GS^775J)R|\))#[4yNL2/$%)H2&PQ*lb5OKE3Ԯj lb;PHȺUrmTv YΣP;pygN5$" 43ndp+ͦJ m7("_-$t&Q46=(CR*(IAhSo-FD.,qI|pf?֮3;hn+{ ;r +fo_7ҳ}&B:|=Seh+NW"«/n Mn{B}~wFQvq?}pO?cع.v] oF_.]ٖ+z&"s-"S7}#ӻ$y0()'iUdbD;ptnev8& sp3Zʵ"Sԛ.}}Therƶ;P [He2Hyf2$ I4l%'(}]Toʏ#j ڨX(`KVW@YGI)7gEeFW,o%{*dqUr,-Rϼ z|)&V=uRrf_b I_Zq\SyCq7ʽop_mWzpow>/;{i>]b._u{in+.袱鵈ͨR~]9$銱b]!P;@ WEq. ,e,9dyZ4,lEYkg)Qo+#@P;"jh$OԲ5ֽz7\2W< vr+c fސM<Ҏ3\*(E1$w~EF `KD6h By`Mo>)$A>1, ؉f@r>J:jQ*̝-oۨ'I}rgL]2@EVEڨGrFđϓm-eHb˅}]]T p]F`UXA9ЎI ‛"t<{ ۠$`ꊐrX*xi@i˶ [ny`}KR4THyx Gz4dJ孈`ֺ*f^0wVdE"$mx"q@RR8!0tIVWZƱc.*ʯ(f좪W7r+ .;(DC󉮢2ެ7Չ???uz#cي,la߾і}z"9e4<єDtFdjW8R> <7^wA S)󍾔,+iZALٌMTl>Jp<2UFv6bȼtd{uJֻl &Δ2 )ownviøޗu0JBDrFσ!!L}v%?T~y_$H ʻ$l{?$۠( 2E'a b0dA:&**+}+eh}'10n]bb;p[ n  ["I<2#g-k-@9#ۦ֪f;v @hEL#9È `bM4VF KȕH>Ʉ'A`!bFRR<2bzH;""JyrO"̏4.MuI)sd@;ŲiǦC#ѡ'j<_mFx",Og68#\2ԉ. y`ydHr֔yX3$h>ɗI.5g' R$PY*6]M~so6]8UGQB8 tnxS=qI$T z>R%ےb.`5+d3!1d p~(9KeTs߻pxs[5d[ J$Bdjx,Qmjd $yVͽY{'hp3 c C嶼,VT(cDTi]ENE'K\0݉v@.JjDz`8xo o:IivI$(,1#+d"uI7Q,R,SvxpOr4Mk]eDLٰ( 7!d ٱ\jjS@dVF0ֻjhֺJ KԻhD,K(g.vV:&!y`D܉=XaDx d pyYq爳=-r))|3̙յ=e}I]C2:*P6%J.oDFvFƹ7G;֍MC3gsoNɏinX3~NՀ|Õ)sfl+X>Ҍ۞;;D$y~7)~{^}}_4/xɳe;V.fAsa l CBe}O~V}wfҗ2kGQY5_w.Osvs]fs9g;K.^/xSlnex 2=\tEy|_Y@@^{Can!>J%Ҳm7'E͞^)$[&` FJ>)h3_AސG%ڠ.ə7c M}}T7^Wz;fhHi)Ag!XS9x/bZJ; #"jRtQI)Vf5}GDQGFU0Fld nF @D,tmTr,m+y:+E*Eͮ<8ң g`[S$]Bu0EC"Zĩ]P4x MDEEg@'xBdC+IftwnvVs+CÇf-jqQ7>tjίp7%Pf^XX7ŃCPJUUeQJ]Ώi 1,{+_7K} ^xi['87$J@'pYl9kd{2wIIAmhGEPɳQLl$uͽ!OE%Y6"$`Nd2 g$ÜyBFP23"R]`qlo\xwee$`z$ֺPv4t0"Q-H>ڛP5%WABO2f^P0D>Jv+8 tΰ RPu|󼧬L_H5sFHPIJ7[}qQ5A'!<!7"RO'[.&B|+A$Yn!ڊ 0!dB(9.VlU(dY 2JI12,ʊh6>Ɉ|6g|ᳵ'[ry" uerm$їFDfW'2S1"2'lI$\DO jƦb7QU#rZP0v/LU>r}֗!gYL=SgÔyT2tAcH6<)s%GD]]*&dXm21Gr_N!PL'3"Vʏm6/ n22rn?Crr%||}w~Ѹ馛vnex'=svփ1?s:?O~_ؓ&[؍:.丷ެg>}k^s7ܶ袋\+()Eӝ$h=T<+RFIϼaFMgP 6!yGv$xTۻ)2N?p]T`5tU/uQ.R~ R.I% 6*+we%,D$-cDpQ$IȥH# [*d!Bji˂1^E O+rʠE<*$dzݕ{HJ;0 Y MO]p> 3ʠD2)jsUF\4Jy%=?sob'/_=> ɐbRZg(( ё oHx9n.(@B>ɘ1<9Bę7đnb+!gyn]!C gHdTՖ+B]P}P>ZW,N2j)+3bY4A#2œOO*vbՉrI^D]ĂNt M?~#\f XYqdXB Cpk D; $m@B&E!C!#-i)xEeR');m8P FJQ#J!g,a4mlHT <%'N "rW8C⺠2ʢpI,J] Y"Izmbz_4{w;8I_ZqVf `{7~Z> `OvdeD!+?[}GzƟ =77W?w]bx^+N /rBmTILJF}EMcʑʶDq9 "L&ֻ*8+Hi@~}]TZ$ :쒚m" 'x;_<w=Lй(d25e)t!؎3,dX0=,,v`v /֣ծzr;Yq/%>y2"$ϥȚh%.>Eӎu3Y*묃əSxS.JCdYμ*0!'^z3GQ|])4A+n\_!'#PTp<9V'פ֗ۨڠAw^I E)c1 YH;h0,lxf\g r5OF1#WRC,n" WcHm۞`y.J(G|B*Y|D^F2&VF3gMtO i`J\TJ_ L(>*7[[W-#N=},}wGloi:q79^>/ߓ>=i;>߱~/N?Wu|;e]ce/{yWm۝wFKbbbMW,ڮJ<4=OȠxrIA YPqx=^+Ʀ,IB>bYbd!`9d`:%K!ިHw1 R"vIӸ\41 36]f}  30}UD3dq?R:"{E'd; șo 9֦+r<1m}k};dTdhD\)9Yne3GW^-|A'kzm~[燭;}O~_|W޳/Xq|?%o?a7{V;!]v{wyv;?5b_6!.袢(^xwnw,/ަ/\tEV(&$ @dFFVƄ|p|b4WH -W̝{#ujW;c0jd[!RFMQ򜑹$)^\(OI)ê(ѡ jb:r!e[ ǻC g7wY2dd{:k*DIpKO[t﷓ʃ -5",2*l77c+;` I,|K{%g \!0eB

    hm3<$R\eJQ{abJՐgBuQ,t?nM Hf_ E (T0!<kGPzJ;< (A 9koN41}+7llB LX0PR!eNdȨXhG.K)7Q!P;P0,dhIU,(3)eX/MTn{wStukי/Wn2| s!=PV}+VϭLv"7s\O1nȧ/<<"T|-=]xәMo?\x*߼3#O4|skjvCͿNw [򖷾{?׾6{nx КS;r{Np$\]T9syC!iVD-xa*,|4$6hy^4-"*}GaF撘ys}q 9eRgn%d ٵ#ݰKrueDUZDЈxʴ'9%їkgeMO2d^P)#(  2J]iy\)Ӈ,H)]3]&˖ "MW$2rsDbkL7Af-}JH=&Yv0'yuf_,O!s#R<5Q1G>,994pȊeͳYl㾏ūn,*#y3oYP!A$I2 ",4O6"g}AΡvj-qManxt+\2uj [#S9dqΝ퓜GMXFvddk}˅܊h$}P0L$)>6 Tc%Qq` Ȥe9Cb)Qb̼TT]ӍMEuEI?&"+> FcۍmW)y/E"ΞdéS%c)dȚBv{ߴd&荮 FEJ0fj^MwG:u+MYn Uw=Sׇz裞=WG=ỹ~Gc'Dz{#y'>}]g]vq/bo8y p;~}==yr]<d,6>KI5~Gx|xc?‡Ƌ2Q|/zӃͿ@Mʟ w?O~se?wCo{[I?qy_{>;n~7/~{!3^Iw]r_|__F|;SJ{֗_~νwYwIVʻ,B拶,/%9󶉪HH(d[S|BBQr7AwA176=`ܞnh3*$˛}Iq[P,+c7T"!BĚ* 3<vdB%"h}nSo#Ci̜|S$oI\JQ2\]]dPy28*WٗH-O"$D`r~lvFkr<2$d> rJ_n(eDXdp"`,/7V2Wár)L$ f!qlӕ E5 'Yi7)R9y!s+\!Y*|OYOLW@OvvHmPpc=Ym oƶsQnU}g99: BmPmT糘'92qb:sd0Y{U"6(J(D32,ShGc@9mj*[-V0Dd y!sTT¥T,CߞۮzE %-wT!YiǚaB%91]FFݘMTuМa) &*2KϽ9 jojorfd s Int%y(`$ϕ e.e9'%y^ !ei[3arϺo1?O'=tŏgcN|[?`nex_GqoUϾU>Wz isg:=U> S7Siv겊͛\?G/yϺ7nS|sP3rU?|˹6ر=Lw~aOXqk}U;^㇆/y˧-7%rޅtÏ=MWtO.vq8~_{߈/| SJ/zы^򒗼%/y#]|!NI*.۵Aed7mT;<,@9v@HbΒuř.>J`8P~Q8}"fyțC i//+E3R~EY,f>6݆[^L˶^0\2͡jJ3o"r*47E2,.&*tIJ 嗋˓P/4A7#5 m;~#/͢m pv%Ɛ̛9&*$@yp#Sn`ޗ}&Ƕ,KAϼ IuG9IқY.*{0.7됬HHIs2"C]V3/Z(TIr]5 f03\{l{pE%XfMTDPI(%h=BpIH7 7"ζ^̓ Β+t/XFd7]@/#M/ɈHZX.ks@yxȔH! ų,}VɳO"e>1;-pf?*zދӍOjbWs>ur}ۘ1gCK;.~8)*=@8r;qwY_>Ŷv|4?YGÑM ,hmOgG;=fnv>{Ǯ7FO=K~a|e-_?tQkG3@vџR†_|u]n?S?T#>vswqoW\q饗ƥ^}naԯk/'>[[[w)]Ņ^Ei4O#Х *!2d2Ԏ1}<"C*mK-/!t>I6ֽR~ٶn 7vxO# DFJ*`5 my<+ɬN8ÑvmR`J6E+b̜\4}VDa>ڙ}P?=NxEH0q|}:lcp,bc)s6}|!/6DXĤ9Cd%.c(j#ct!RmGFf`R~OY)효rMvFF#c!@6MWH$ co92\4d\ˏ9V8<\|s: KQrvVƜ9nWڈdDhFy&I$Bq 0Q$:r^2(ÌR~+]][ކ$VJ0cD/e9_#Y1? < -퓆XU:%5.T;*Ch\^W>P3lO䘙 \*po.3+rOzғƓ•W^5Z_ŧ>;۹.$ C(fm/ZokMz;4dʐ2"Z)@%CgP%Zpف rQfقqRhZ20s'K=E`Zݬ/8%"R`Or "`> i8K)zrR,GÓ1d)q3<,\AσσfGѵ@;S$U;.I"Q*Jc}YxMJR6*q,]T>&>7]猌z;%Ij@% $ͩ^.'{FKIf .I*|iBEY6",OV=|ٶ˹yѴ}0*OZ$.cͰ[#,e^{2'ʫTA f>Pjl$¤R~d3> <%U,ra'bOʏMuQ͜tY0@#rG=1 .}șGg~Y0. id 8,$Wjd3 x;z; Rފ'$ϫX=$^2tIP^񜨨c)hۄLK mgeڛZmT}P) #@;œϜ1QK ڍu_hN{3JuQh9s0j^j> ΐFUxj7,mFuЕDM3WAbkx_6?_;4o~_mwq}|'×v~Cy@ v":60 I)|߼z3Ư5k>]owSO# lWcjm6FǖHV.N_B#ȭkb\ks+_ʧ>ׯooꫯꪝpz%ipEq*8f EG قm `jIɦ_UD7跻H9-R4y$G grcdAp j_6 9!N4QYJ9\40fÕ}95ōtVRĢ(mkD$RQNm(oD 8$UBD+l;2pɊx mTgJ6}9ao(y+p@?hq12y| zZm̓Sz[!vߝǞ^k.|O=_\ry`5|7c!Ka0`Lo`y3Žkkktⱶ5b'-XʗSI)Y&/6}FF-b|-g84=)IIhDzϜ,cts=HV9;粠ŒB)VBѺ,MJg6Ape%} CpIPYŲdyhBG";g`;(2.I+CՍوGyX3 8]dyɶ18}TI<2=02Cf _4]s&KVf-DXB3HtGx+`ٶSo۠ fΖW2*wՉg<'d!< 9`̼%X]Tអiy4Q* EJnm'y5Q?Ԅ 0_cn\sp8Yl[sh<+8ϕd3xyFnv%I*g [$}ݧDF61=MJ,0@+diii2F0Sڡ N2cm;A-] #`6\q.&YPad%ÂǛaBR#9CJHJ2T&4}@(rQݻQV~;w4xY翻d_tߟS?gJ|3O~o|+Hw@0鞳x]EMXj+Ȭ!#=.dg#bB6TҷrD&h$$u!s3""m!dytY8 CjJ%hH$Ñ]  GvFk]EuWӝ3hʙ=j61$`.Ɂrpj~fc6\6" O W2hLgeoO(|V$l,VہObYΰ ZDs̜?]Y0PTuQQ¡|w`>ɱ(Gt}1ҎLv$S4ByDv剮uɈ 6d1uЈr`R~rÕ>#H,YI4QY`]9dxȷ\FEy udr'3*قڑg)qSW CéUfCvm[3no4e]Vw~wZ/9rdiiImt|;żϞƝ:xKy;Vz_3iyO?y^g#`x+z?^zCl_m2s\e|nyKG?u_u~:Z3_i[r׾^җM&S;3.g=Y1ppOw/-ip%\p)݅+_+RJG<⻿8㌝{c3j{w0e~;袋>]T$y_mb_Yk6#Z'R4g81Z2d<he$0ȚsgH(+r+MgHcկRLD5וʻ*|TˑugP;!B+H}QHlEz#y,'T2$&[. 6T>$1wvGwIJ36h"322D4" ,[io]TT6MQ5ڜٕJruTC.m,Y 3ҳ2&eA,+]sΝSjYD"̇ڵQU2,f #±v8֮JpI,f>3oPծ<#@|]45I.3\w`xT5P v R4 e<"2@T!c,reHKp&{{pHOtwU'jSW,ؖz,n6 `ݖ1Ry9BO#r1]W#D7Pdž+rVɲdHHl`FyX,J:hGx }I֗tXNA+H(Y^*%DbyVDpvIrDy)]*Ϝӂ:id LdxJ*f>1}P*+?<ݻ<7v>/{7ޯ"?] wqWAߟ=~ܛ])1gۊųg܅1.%A(n՞T;C1_yҪIo=#?#{^^Y[4C /yEE} 낦0kXʵ22Z"R#H0 Iޔʇ,joB$!+df ]ض'hB!E,\ ɆDDڶ`۠]yF&y^4")hE Y "ν ODŽh MT]V !&hj_͜uQμU",H6蹳 E+y.Bʬ #,~}MFĄ|/blI9q/O!QC[f> j[&6|]Hr֑5. (嶧Bfɺu=ٕZČ̊l<$1 ##5I }'"##F$ Gq30D6 *[)ΐ.dqhJφ. '`JvXk}2T!&$ep(|Dee8@!#蓌ȷ Hm i U[+Gڱ(nV"I f .mq(rvݯՑzLP{wa\?7ߪ4iU"HB&' E2`c X& 66"& ,$!Aqp82V}٧C=u .xj9f xKDdgt˜h ӄ :Jb%&ٚ9E8eaHtK1>SLBJN%'&y[TL &^T=  \bƾbv"/$Mz24j삘6p/bD(GCͮb;HMzFeՕW}Cַ'z/=F{^{l:tp-Ny,$(]ׯM |窺#2ADtS$Mp)ͰZѸKp_I&bʉSM؄,hM$B)KL$ ms:]r";S`'\OJXBr=y5vz$ GT ;;V0)MENRWM /~?g=ng} >ex}ఙn||rϷ^}b]3f ?p tۿ= +}`.3n~uW3xqyxg |؋܁7wy7o=c;ٮ}CkN<#P RZ y}t-IEѯau\C3T,3SEh; 2Nd/X qd&EELfu {bL~ HIH I/}dCiGHS{~d&>ujŔhù2CiɜW9K|Wjh2$YB&62d <$Z g#/?7`Ft_"f"h̙PG3#bNup%6&)#Vдԕ!LRƘiE% ihd$h4j%.2<|duGlr]<+]|/=`a \I6˔Id CHl+DsV#d ,lEXdqU%\vт.D "@pX5)2m6Al*K\`Tv4HT4cQf 1"')qBb%9쨥 0W I4-uUqk5%$6I )6 !FNb낈 w4=] 2%#1%.XO8F'\ʄӭ@%85A,uHl*+iVV%AL5>.ESM2mTiJ a45Nnm"$W1"8b뵘= ?1Mʤ B@HtA,"dڗvlo0Pkw4;^#]MzFeKW9ax(=z~ y_wgKV~w%ݷ{_-]|K>LG?+cŠ>^,]Ł;6 j]i9_Yg}n[?/:ꤿ_~kןØXoysMݤ(L/O4|5guN+K_Rb%K%6Ya |vln'N§LFS>Y܏/ڱ)p,jTΤ' ֨9n@٧seSq 6r%yMe+f`Ofhc&KDJWJdA20UeTLtj`Q񐁔xՔD B eCj 8 u>zG3 5ƱSGV4 QJ&f2v5کWXkjBb>[Lo{vLJ{3A') /PVܯDU}C!YaD|th <̨例mCdFw& Ɛh!\E6;i$ h2Jgt;P&%y[y<6h4$"e}=%S&7[% + Xx2mT,(-$R H$,YpOlVw b=M-LdŢ"M@:e#_6FD{I#[bI`$&^DmbV,m/S˶ו/AfAД\=ʸfEEH_L 1OI}P^ș,uղ)@.1Y*faO= bS\d>UJWHEg:zVi+i z86Śs2Әh%xUGN)`01ӁIÞ7LL$V0˛KzI% >1X',Vl΢jSohls zIIn+2!Ӟp{AbWzJ8Y ByGBL wFk͙j}i1RIEA)lL6WӒK3ƐiBM6rFS_ڔq촏LOĕ`q^7Sw5t8#,bazid$D9u/-Nqgu"{ޓ bVu>S,zW;`$c$ " BbyKYLDr[ f"bn` l_8)4@l,8U- \䳺Ed9zeM!YՅLZ/Tr䒅SEl+ Um{ME }%W#Ĝ(Hdfʝgju_Zx)!SlŒ{hz[ t^~ί#AvGCuңMdnTLWW& _gʮl˜GwY~GF_8o |w>XO;/Łp{;,?w_m>gJ~io>|)GPp_z K_ԧ>uo< OXר>${wxi{ Uԧf_2!kTl7^zw^sFmtəL>[?w_[m<ZWxLbަ7*ژ:/k/=9{^P]y9W48WpҮӄ5aṔ>f5)+yTljb)Hu&riJ-6iŦ7!')2W I;vtd'P4&M1R6$l NR%Ods53( 48|##$+hdNw `L7k; n)s&{HuS#-w+Brŝ`Ӹ Xj*@ڽ]3AR_$qs$ 'HK'>_6>K,`IH[{91 dAc_ZF)LE2Ő%SI f[/% ]H,bm%\O]Up?d{=H-Py@o_vDunߞ $^ bXn?>rvq )Qb.rٌ2+VLMX#r 4T[YϿW??g}Þ}xWO>}m_S{•){tMyMW67k#BWr~muۍ2^(rB7k&Tul}>s~vsx=osg#ܛ*0PG V}#evS;1;}tz=ަg#ǒ/cMt'\I3Qw}l[•L{< ˙(!ӂ|+l໛>+Nf>h{}eIؾp/"$ FL`h\b EDawk{!2EVr3a$a(k5 ʚ4DH.W,N ;[T2(H:Vb!֋BWFzx^䞲US 3!2ĩ왁pɳe3R݌ p u7k̡w,b$;AMLƔ MtF!֋}]U{)Y(4L kv;:93AbAdrickO8ī7-odK'ݷOb;G{B.uLB&.w#m) mD}&ŮZ1\c S]49df:8YGI,jgu7qg)<%;fiN@ 1ig3p ds54n}ٲ)KI4bSnObs1M F@ڔ6rrP4UcNӜn;[ K m}]EI([vRm$ft V.s.;_{]moܶmL/'>9zcVz?r睷xoe|y>mN?N>yum%7Ga<}MSy__n§Aǝ~@?7_wdǧ<ڗ|çm=vo{g79+ywCg7ػ6ܤ-oSO=ao~w?E?N}Cx8MJ)\ӆz ݤ?SnO?sWt߱3.-wZoMzsiB`hVMALz ]S&. #'6R9i>1N#є3A{a_KIcgYYA!XHpє2S0:FnCi8Mc1'&Xt1J@IZ 6Ʃf*$i|bM] |WL9_ָ./j0DV7:0 L^ 9I8|EHLԒ{B &.S>1 1QN$HnƊc`$ LLi#)K(@P-I;!'% mYmʴ "&zX5x#˙h]!SId{iwM[{BeC8%&7A`g)~* Tg"_2Kd4$ڢ'-"['竚ndYe%mO8XΤv8[i$0E"+4:2' 8MCaL)Yh%g<&HyX;S(ɕ9t4""N)NfAҸl =2zW=wȇ2V_ U,$1R=M'-F) 7mx>>SR4QpHN1Q (|)B7M6rH&Hh}@8Š-ld>YzV;DJrnR{/>PRB_~.+cg_SFhxa<=7c(f7m^lʼnn |?[n}>Q.g8öߜu>q0ʞ?/ Giۇ,wSmhCBktZ#j~tpZdw!}~x{ހ]֡)χЙg9u <$ Ru%Fi:X( I=Nr8''$D {y_).9MO c@ӖLĒ)17u'!Y(y̙4AL94L3ei"!1Ĕj/µ^6Ahj&Ê-["$S8ix@[)<"+'NA:M25Aڂ,YJIJkIIf$cn#<^bxb.Y`Qd@jeȴ h-)ɈL*EME>p=8I'm#3KGC'-h.g;NwTlJqƲ,Y@gHw>-Es}as&{qDs1F@qs>UYDf%Hw˩6.p"INgCCi%mS,w%tseyXuihNaV-^ 2 &V#q'f )fu*ò)C#LgFm9JK ߈(!yOW*DEf&% >mk)lKm/BS&қc5>[,u9}i'^)5GfI68&ߌT$3Dc&}a}bE3L2fb#_1b!g S4N)9M@-ML8ME8#YT+ӵ;z/u**CQ?3;{:=_ЏWO~q!|Bh.7/_F7y.|;}扇 OmhCP /~g>O33??:?g?i'Eدr%Ꚓ>%xж-G?썎:ᖷMwf}7&z;8餻6G錛__~h/4 #G܊-VMҕ&r٥gj#xdJӪ&rBrTBɝ,,<:eBi)CHn]O(h42q&-iu da.}XKgUۗ B𸼮u]Uū7:z_[> _{?gx;+3ՙ{'F򔵏-o n{[r[_uۛ[7_צ?/٣p٥_|G_668AsL&1^I`08H)g?{5pе3|'|k_ZSO=ꨣᏏ|#c7 sڣ;tgcg]vNn*F O3 VJ4 ]@~()5ȅ$sCbEhLAcRV{ȴ!0fh&8B9qFum$RsDWbSոD9FI4! c ^ͪ6&Z{5/f YHd fuk#Ja9. bZ,L&^"[[{ٓvlR85^ܻ}[)Ci /L+,@byLJv7B8LHHS#+1sGIq3$u9R'N 4;&ͽ)b$1 q hmD`=#}\ֈ.@sfTW{c4Hh8w 1Sˡ/]@2ÓM !"dvY F4N;O[s}ht^ vLy29?.r>Ş-LIR< C4xUޮ A){Br̴.$jO'-9guE#+xzL 8M83qm#i4}]0bߝډ#e %ɤ$iî!y,j(ힶ7[I'qTV,btjɌE1@&>wBKޮm*U+ȿpCC5g_ܘ3ܯG]o'+}} mh#;swQw{/7e}}߳z^Y6ϻz-ZǼwyQnv`0s54 pc?>~s{;}O~O=?>}#:-[_xoӑ{ϗ G} 7th'!tg^vB{Lu`}iRĝJJS 3)x8e  C@baŔ.@r'kw&Qxi܏$E Ci9M}^.B҈H%b!eH+I9Taו].HŃ`q dPL$1QJQR&$,b9IXS)Ql[:=DI&$+i3ZN fuD>26[(}b.p|}^ =0fK1v I $k3iS&p}aMk <&j^L|d!QQ/rٖ{Z5KAS!%2%ړ%w']6r)dq$S$AR[Aϔ18hBv3(F+MEh,D{¡ 5gBIFO ].pș^M4]9Pq&b0fAS/׾V4 M{޾RUHM;PډS)єloKALBi+LS9gʘh㔍'Xf( %ih{~$VgxfyID+CQkr˃~+㉏ě,| Ǿx~?y]~#N9nRK#}5%ҮO723z; ]3y#7~u궇?56o;?vc퟾I[p~~My/q[yڅ˯ ù#o^{폯-sΦ !G&7k_Z)sNRJcx/zK_i, ~SQ+9ՙL޶7ZE LƩWWƮb/Ss&䡴#͖ صSFO4$~:lJ٢]uZXY'@AMI*:]@In Bb#p.'zO`\dh:Ny5 Iib lr˜ƶ6{X ge%k}02%S+IS?R G3I3W g#:}b0ujht%6p r_8A)AR_ؘ)> B2#6+FSn{J8x)|E; P*X' &rHe0A`eOv*d3D^"$*IUS^N8&ϙ4^2LHvD9Ip623[(k(%yFus]-(S/)dCjM#+_Y\n+lx ,IFyOXbai hb+{i>2K 6. J! ɂELhr)ܒ)C]pkLȮFnlMsk+Ec1e}2*Zq>'\jmd&4c!WHU]YBTi8l_NWkw4v{Ё?oժ qQ'>Kҫ*~v05D?fa|fEc`o͟xQ>rw}?}{z78B䝏w'1|~wque?8@Yşx\/7N/{'}[Ջs=CyHً/}[C+}q~[}+}ΣYv'N?{~矏/Ù/Xۉ7O~C~4A` ^1bjE㦢9JMa 1QɢKtŔ6 Mޞ3A)(z~ٔ1S1Z/1SXzXe[^zp&<' DPf3zI4 U3aN #,襮j$/,%)fϔfZN J@2.r ?d4m믢-iR֒FT?3 j3@Hj$t5M -|ίMgu#R3['M}kȱX,x^d^LU$il|$ H6JN/:S˦x2s.2lrJ!=!yVwCifVکɼj*a%}i J>Ppi(#hZnːhR[ g>dJܥ¤JG@4mfj?Ȝ$8F).mdٖ !ө1QMc_JګhTqb l ]<4AL-Qp?:䎬'0k*5j!ђKjJ2% 1eSR &fA8qFNI. qjEުMwFN@څ)Zl.1DE L^Rźl N\BY8`<,@FiF|+R·\gt*;uN/>V<_Mv6!㾻zSF#0]m>a?^; f)S^;}!$]tvꏮ_Q?;ɒcos)=n8yMY~µÌ_xoCZ[qyԃ褥1yN{/8w ~˕1ٟ^8q§~c,uCpHk| ey]7ޟUNC3taӗ# z=:4U5 [)P}i!eSvA(CHV1DM/79&gY^j Ůq`le@ZlyLl BbasYOZ*l-?GyLr$g2;%i$WaH_ڑGCi$M1Q1Ć0rzAלE EV hK-$#Da"_ʉ]bWi{KZN~0viwD~xo2Tf2$ hX-i)KI]_J&{ȄȒ{l^q/YLc&.{, Ȳ+7Sj0$^:Ȕ 5zmJژdDU1S$$oM2C_ژiJpWktq/kҺ\b&qAҜnvFu^6ADT h(xX(ID]m4 J LY0qEf#4A)1$yHKKu d (LI.X4!]#iJ9FҸbGtfun눮Ve8R~?oֆ7npч*Q\sІg$wG^mGV=g:7?}߳}v'- yyqtmy9]ormG}?źnM)]b ך{2߼P K{GAݣR2r~ ]u'|u'_gBַu ]/}@ZbPY!2U܇LNhZ8[F}MKmʙ<'ԫIL}b]"/g$A;XƞW.11h{;)N1S+Xe픋|lPyo1BtT4E3/@ZNS肘/ڣ+O'% bHu!KYb |l+@̔#.rWS01ZM +YYv)IEB}Ih"`OL,vṲrrWqu%#4u`.K*s&pޮZE"&BvGkuMzֶёwo~}M7}|y?w~)+]Lo躩{aG|bssEwl`Uv+K6YoxV3H7ypGke;?`dx'Gyޟ~mǾџ]r%Tgqŗs^zM_X6c^ٱ.mІ~)WƁ0҃d۶mnML0vj6E{9g/.mF}d(;n*21cb( .CME-H$W@!\d1%["('HNA4v 0e6KXdS00cK+V몑4r24(k\uZProMpfTWЭ%H>~wKY˵Y;ɎT[]{ $L(M> 2uvA(LfUKi!"MdJN#dc$I-]䝗cS$ Sz ]dEm.녲˂LBD92Z4  Ci%Km5qJ86EeDmDDHTHZP\Mm.exYq^iib #(Ʌ2e[ +] ES 2,(| q,`+\cV\7ڛZ38iʤu2$i@0AgaW|uFWuշ__8g\B\<]_:p9gwk߷?Іz ~3>_v~w6_r ?|]׋'Ͻ%oxg=[|/&]9%)38碉1X2Ҍ1HM>~[Bw~|59Qw}uo4=zׄOy&]y۾ovAt'_wІPwg~~Mo>}nw{YqCC;3<@NK ]y-ک.ME3R v,D9I&{JSd4CaM& bDѸ+GH*$F$^$Xm`4Q >a'bI%M:E LBbcS,ue=w7^^2_%nٔCeu[aOl癐s2f-{S۾LlaEi{}is&HS9Y/&d)S,%i4&negJ줵A)"1EFN(I]}i/-lW…Ȧ^rG X#GLNMY;e/3A]`o VN"3b)M@2>bdquedŕS//V,\2ArOt%Hu)ME3)_-65 8Y*h\MHm0&⒩ld62p]`hm䭗6F+t/o덏.|b\Ѭ? {]A&R-Fk-v .^6tS_77?ϹOs7a,%孡;^A=y]ǵwcgnǯNs}??.Go~ɭN۩ovV y-ǝۼy57ym7_>9A9c ^73EH7|]І6:^ߺ_eYMozo~wvn]tT/}K^!Fݤkʲ+uUm(\7/͌&N*i!-4^^n62ٲ-Wl1.uF^0 k\b>&S,6^U"ϙZMHFhKtFCՙ 7[…~wȑ+[=z h4bC͓ͬL*gU;[ m{ۧÉ>o3T/ډr?ˮ :EIJ#H!?$:q'"QfsQTH@y)B%<B`d$/&fnsYLk"=ibIHLi{4 }VmOZ%'-gt[r/YT8o6rB|n*j|=K]9I}a4dBH pEIoiM_CY/-gq'\)|!Ӑϴ =U< ZP?c ΩN3An1UdGyFӪ-[D% {L sۊ; 3B7Mv0)All.х4M:&a&N]<1.E>uj┋g}6cl<~x+;8O}gq]1CtlQ14l*M!Yd41619]#F^Mlbc+lb!2&ճEhx_/V6AtīPѸPe[DKu y&h!PZBf 2&Jfa34-uTp-6r\OHB2'/WDɂIl()`N%[D3nW6AL6u) G_(]mv*i}bCi|6̙́hfu+i{3H$ ]bF,/k$ FBQ)ɫNspEH:nn"G.ZVbKo$ȦVϗu4HIz\3'Ye0=H(w֚Z,JW}Ci!%B&%ҶA7T, *8QIxp+Y,w3e26LN-r4%Wy0p)ӕ,ZMvԣ{NҜn.b'NK*Jd~`~H4n>)QPqg@R&S{ҢC}Jz34[6%f[3u =Y[JWΗMŦ^ #1hkj PNӲ- eSSCrb (d/-b&.ƶ@L%u:偯[ f]]5p/~ӣ[/[?kr|Ox1O-⏼߽}!ѐ|t=%Y󰯫4&)]%(/+ ^^"At9liXŜj1[U$CdHF KKN`G&iIGHLzce_ف4R&Mm&8̩g*Y*"3 8I=e@hZWTp_qŐ+qR8APw=fYRxd tGI:MIru/۲jHTP דv(j_&s?@y%M)S=r#ɜ&$́@QIcOD vM"yӂUagoW3$9X!唐LVv}%3Wb|+QdLd,hP4iHpnU%ҵ;z;H7ܤF~ӆ6_Ov9F7\+vy;Yr6jyha'~6똔R6t u31 k$ ak +>q*pzܻ k#aA`Oih9M8X{)YDN )fR-vOthf]_i ӓ6F6vzBm=Ux8L$/r #S"p&NJMʻɵS˶hx5^06#B2t aӝ [Q&96 12dK͢tٔ.rB%n51QARN3XvV8#)djA!сu,LV!oluKDdʉ.ŮZ%%YBrGFMCeJ淔u)p!QBrDDFӑA`H.%~%Mz El N)$m!1FSO؅"b( !J 4Tq_ IF4A2ImG8Hf4I }I9RW <!$.Ք%S⡆BFͮ^5]*!|3@K|7Ud&>~o|I{ҹ>!O} = />18p{&/bVR~3>}?_ 6t uG?1Yt 'D2AzOłi^Z.IOZ A3A4N5dBY^-w%(CaՊ]{hQfbutHb+8/ô,Z/L M. ,Z8E;W% 9D0 S/ k/Lx.Ay_WI {3`0 %5 8V0["ajKK 9%%S!R6ձ}ikf?h4k/L ^ݤkEф4LLHu@6ː)θcL̊)b1ĭj/c4 \>G{q4$*Y+hT>S! GzIIn4.2$z '^+gu;q`oW4ZX 'hrRM/zY="G+@I;hȖ !Ů*$ K<|zš+!NS)OtFGV Ÿ@U#&J3"3"x (k7n mhCЕ .8묳oys/K///CXKuh'!tg^eLH5ETsezY!jUUc %jtK!#sdAS%܂nW[/0^P;EI-'i!2Nc!L5php%F2Ʈt^톍aEWqcli S3Ҹ8M8)W=i6*e2ՍWM?4v!K{9X-"$Mj1TӂiNC@H~L͢)&^qNMU>1,V\1FNBbp &Me=ېXI 6 i'"-X(B򞦏+$lu^zkorp9\ڌv7c*S4^]k/m̄ A$ .2Iĩn9MCi&EKIdJ8^bKt[::ifu7Pf&NBdiZ/M{A@FR̄2N;hp_4Iжn q -N2 $KRS&N1qsbג|d E3<Ų-v6|RmsF# xB')2`$L5+]lbR8DH3#;qaKF.h4bh e4A E-êdy!.`RR8LO^(3Ha{d3+[)1fI+C F Fu )e2R Bb Y&hJ\|d]~:R&ŐhjENL2#iO[6%n#4D)ɫ"J2Y*D46΋dVvz,.)Y,f2vFک]xH2O^2`qt[J;q b,w\Y;m_u'ɱ8_z$/ ENE &e[jId)ȗzU9 Y>SnدnXZl{>F56IH2 b&z9qt ZmpFłdq{=4"ꐓj 4 c$e4IKBE3St&L9vjW6ڞs&S3eH~ lʄh fUۓT?DCe拦ەK:/gvSj_<ʠEL4[iɽLs3NcM4ej⧓W N/ b#"BC\.'N V6{gktOW:zȱ}⣎O~G}/ 9n8<8tfb_7\[o{_N'ozÓn_i>͟-a=;>|}q[ϼpz;߹~ӆ6ۧlkx6=q]?ϸ}>f7޽{˲<ӄ}{_WSFIqG2$gSIpɽ{7OVL\xAS$MU1S.Jr&s]쪡2{^)!`!fH.X1JS LQKD!.]˾>2(Q+S/uH)U*lRHʙ\dd̓ n.kwE_-+KrjP @Iz܅L[/p4ͪveSl)'#]dE)<"|1Y{&rlRN 9,(&pɃ M,..ەp5 h3ΙpɜEdܻq a$Y Q+X!2q)|b Y4!}w4jb&j#]#)5Cݭt屣}{^_8L9)R8L0BETO)J'ihvڃ)s%$^DC$S6fJ!ʴAVAϴb@R%\4f26Ŧj91QFSDJTPqUEcvȫL sSYcnݵEId +VVMc&DMWFXq2#yH"5wFfaaÄ1vVwDO's9AaOZh M+!Y /'yW;PQ_ ~_0jU!ć=izƍ^W77:z~?os_d~p='؍T>{11x{Awȋ|̭^ :W?sO}%7Wcm>o{'_BStІ~;]B~}{viƷm~_WuQk]8e~Mug~"sJR&fAI̐2HUGgL2^,u̔+8{x9fwOx(X4]6Q,v^5 J򮶏`w$8MFtabql|sY+lmw!1XP6JH]1l+کUƘ)0JWm1T`DȄ4rNu&%pNS`O?jF6Bdw]-LT4DjyclϩvrW"nqUeF3$eR:f>Rf#eu!yVmxiedD}#抆W8yQJד 8S1S8zٗrdCe) i0KA sʺnŖWȽ++rH澶jm[rd-toד4j 3=iQm|_S XX.B8"V;6pfrbv #C2Z>w]>9ĖmI׋U4ȧN4vszŖ]KlHqwBؙD3 UARO[Dfwӗ< ,3DcsEmO8BĩqWT1M1V-I=mohXr3AFHaiUνם}?+ժ8g/jN) 7cya'29wop;*p\u>)?І/|-f-‡w˟=tqWc#ߋﻭ(OCƃoCІ~WO7ٳOg~ybIth/e&Us$sB|!gNo}<ʆDH$l&IOŮ*, %Zx_n$mK>Nb )NӪ 14Ci, U,j {Muxyϔ1тc&3,L Km]6E=Ng hihP4"!4KͮdxV|tȂWl$FOf0zDѸd5!{NҖrzdX( -wՒ-Ek ͪnFw 0qJhk,0.٢"_EEΤ<̌b$3kl#i& ;ujl~Q z @ByLA6l_,NW Ud.KrKVLytt%iB&@r!j:JJ8B̔ф 7=g/Q"&(t=:R z7R񀁴&roqWJ b Br}Hn#\ւکk9B $htĐ\;-4hSƋWg*FHSt PکY*C&& ITpyi^vU%9f*iJh" >2FFBdɔ#D[/dF Cij/SEl*pn|y1l`j%)@%]ugT 22]ٵ뺦U1Gn;'wz=/O>ᯏ9rc;<9=%:|Ÿqg!6twA{MN-y.O1;CKhy?+1.2w7o4lhC] 'pwݷm9՟߆~y%!eBb 2?04NZ5|l}I4}L r&.1NdODC <$x4M |^ȗv MCm<>>b&^ Xĩٲ+DL1S [m#J8gLv#~\ 'h\1!aheMIs bӤXL 4 BFBc[UB u3X3Ql析νUS ,b0)nbi6)&N)HrL*XO8c `oW^DWlRNVAVs{K,:=zj|pl䜦9rWU"R%0T4rnGC@wb]}'AHŢk>llbhQ",7N )M[Z3ZRePwDgmKϪP}末{T*!-HD&D+\? ~+~`i.pi4BD!1 $!M%՜fݬf{x)+R d:s͹s5sg }Y B RTZ% rcD=MJ ܀.TTL`"47PǾ J3|֝ 36Cґo Q:ݘe6"u$lu5 mt(b ^ AhODPJFe*cW 8eY⮇Mr6 `i^ȕ+|q,f)Ҩ*FIP(N^GX==V>֗&nOv[f Ȩf:hg7iCk&Y0nGgS?nG@;R__q]w~ÓvR}ݐ  X DR $JJEt4B3 [a(Tf&k+c(jəfd0z7bEc\ p](V .thu:8um*h!nsiit*Bӕ[WpU7W9Qii+yJzz e8۰vύK7Ţ) NNGtw|2hG\4rӆuT79~B\*dV[ڑN$aѵ35^gLfi<ۉ9~tj3dpibBT׌ʛh!:냬*; fL32^w2dnR@ Jd x.Ohl(+.HH2Uctf-'78LC()FL_biӉ<%h4:) 3ATɁ:K7]v۩ĕ08 Y(}\3R''.gQcqP,ftZ:9J8;=; m3!6Dho{γڷ-I!Dz>&+o}X~M^|Q6T|]{U!|}.Agv-ܟsX,n}b?B d9JKA IRD$e=JZV 04٬ ho_D 8+pL&賶*q.垝θ5V wVvߍN!8$3&#tPpgݑoh!+)Ⱥ0TQ(2UGUǾu*V> HcXZ:X̹B(B O_^mB!VNGb)+NjY Bc8ԑ*Jpz|5Jn*X*țcTe,ja&)Y]'g L|Ag=G  r~3.L}vo)d!{RԅJ,D-  zύ( $]gc zmY*S)8"7+I!+4fuo};fs 3Od 8;mnY ,H!6PL3H!FK41Y&^&(IkƬ업@  N T*U*Y,(qƯ9fᘍ48ujlrfQ:K.4O¥gMv,u:>kv(M<0v\!dE{djOBsmNnH&W΄Hx|Qd+|]SGOSᆉMj{!"!cc1ѧ=6 M!3'+ߴ-7;B?zB|?)|/^K/{~ /{.x{_/~w;ÇI{Jkd&! VT,+H9ͲhʥxygP`>MԪaʚaSkh8Bv`)U8éE9*,׆Y E‚MY*IșJT _L[$v[`DؚFz5g&1kN_٩QIc ETe E}>L@p98!ӉlUfrGUۮN|4anʺMewbwbRThoJl3JB?@!LXeh)v;\ӯ__Pw[R2\%mJ\5 *-J`sy/*S>ڕ X05'+ ̱ U}zTs$ ᄒLD7$3qi=GW@a9MI1+~AUN|3%#e/RPеq Y@37 ?h&ևuBM !dv*ZNZM >1*0TB|장*g7*B4f!B9ptjNJ%bQBV ,:!hAx`}`B쬟`XL$676 m(1 :JY/véDccYW@ /jzf~ē;=V031Է}C_?~w=|ɭkf?W?wy7ȷ}LAϼ%!/;><7;| ϟ׽W~坻}vC OIuwWQH) A2 B IobI6wZErݽ۽\eӍk\YÀU};qUBiTR@Ҟ.۹V%"Ua k{rR,ت`^: S֥;F B@تt}jdHMpUc/vl3Y9> Y,f \o4\A2֍JSQhٷɗXY9v*UrPLDž +ΪMTF%@R*(¢J֐itʃuNLN8VƧ +yV͆+$ ߻16ϚmR0n\ևVyݷC2T!Y9y7 k@UjI ,emOBjƕ3@{ķ :._ 2GUP:0 B:VF'k9 KZN G*)IN%KCV[n1,tXX>w g' ߏ^gUyCVURBm:3U97 2>Ѿs!NB3Jm2}:d' j,c֭N3뇬dC2{ַ&$I5Re24XN}'w#ЩltdZFVQe*U8 (z%f a TE]J3MIIY >>,t mExW{] ^oO}ђ8o^ϾY6B9|7ܷ;' !d.тDE!VBI.w `1sar6nEHuXT" ׆>^Y/L$8K;g07A ѪتnRef8h{V4_Qh3A{6ox4V'rLcƕ6ɄD!@VNF=p#c ǡ1XзGz(I|QHx8uxӬX! Z(hN*cQBmW9Fw\$**d,리}^4DE rRƬd|QзVsM0'Bl[,Bֳ>!>!)IB-ULIw*&͋P`Y@ fO+cha[ơw{vZ 8 !MgvtESw9 \h7cGTj0sb,$qMtmV  QKR&BaJlTB @IRXs>g&ىwW&$LX#B|C&k ǢNccpGBrm,}܈6 Eq)wc,*YQ@ʓ9Ilס>vJsWn: rH8CQC!k)*LY[ k'$Ŭ־ 53[ Đ5UywNBpn,K;8DjxL=$k}[3@!7=׭k;zts=P")aEINgMǽlcIl_aF`!8թ,Бo7LY]f( ")_'Sʩ&tέsyFJ P5[^iMR}te<*̊*9OK럱G v::*ǬY0s`ј&A:qc,P6?9h};RT0ɤ+a,:,GSWd<7ffCp\M1fs!驨qRl1u[%I 1O2η  7֩TAFN\4O&$8{;(SQ'ǬQJ3+e]g sT% V)i)qlg&pcШ&)kTY RFC7ND0aH& Y2gB mߙ&Xpa}3pGwNB۞Cb-k3 IBrgRAYߨtmJ RrV٨t`07UD2=D y"Q !߳Hf}gOڪjuXRAitm1# 4:6bNڻNCL!B0GB: 3nohʪ<͘ t!_h{nR^m#_AR-_o,&vLZʤ7ų|(jip\DžuX_ EݷYݷ]۩SFm2h 1!ā&h`B70!P(jiS$4K~3 .g=gZ,O?۞ 'MtBf< J:n*QV d$iLqajT:pc(< TԞsQR&wBX\hxrglp >6o23}va$g^6_vm_Y߾e;P_J w0\f߲V4>< 'DYog6,|NUBnXY߯Hș $ԪdUT: VTpo0}2dO|Ã|}(4ߌY[|{yo5ЙvXXT&Ye\Uii>Z朾>VG+,E%!$dU bፖ! } 蝛@R<%r*JA1Xe5*K!:H!bArtʔq 2&!.mxp]$d=awSIzrN '<87ўk9.dm1W!M/:?m1Ƃg dOIpSV> J)ct(_g]pm Y4m+aU*NʄyW`Ns}]ZoLIQ5҄C+dYYJWl*.5ktyHO>8P>3d::7V NcyyiBqhc2dfbF뉬Ff JB*Y&0fqeT:*MtW„u*{6eRb&!@ֹ CSQk lX%Nb2|[VzB ZʄvqL!ZdJDB \}2AgctܤZ޽Gr{_^_͇Nava8NG=ܳ0l?9Q=<yQݗ י3n:\W%e&:JKrHfL#77*( T$;ŽT6)FFZegIh"˔5  }#e!dqOve Gz:Zee'|>cTEu:v:Ȓq6ڣB8%Xʐip)y>L7 *䵡t\Y?7\vtϿu&X6Ff&: &ٓT!Ѯo07b^a3CFRNNJQ$6צ@\tlUTPƬd,tY:m*uB!Ш4$+p ]6ZpAVy&Yc fL!FeNAQtM(TzÁxF >uT&Z_ԅn[,TX<XՅ6Z.$%> ~1~f…n{BQ7XX`>MCJ}g08ԨTU6*- Z( +ǁp<,U٨XķܢyݷEo*xpr/.7uyZpv:XprАB*Sʪ*jr\ xrg'Շ3Mߺc B{~k&vavIoKowwׯE579~iL(@g&l`2P@Ur\G"AV S߾gw}BV2Fs}`d[ȊM&X Q; O}sS hDYLtqa܄up=!,@ȅ'Wuߍ5)IJM[dq)dc(t:j,0W ! Ң'< s$RV1MoyO`QQ7Ksۇ"duuc}`1q#kֳfNBUimco֡ae#5OoX)]X4bEm9 ɟLH|Q.*Aé<̩>9ZTf3$}qqXDlEB1FB ̄[DÓ;=Vtܤo6_yx;N>;;όw)={Əǧ>gS~boZd:}Qo5üMfHfJZɌ\md<8#o|ŏN{vRd=gJL"dlU 1+BT@ +bZTPf:HQ;θϜJL(e=NQMy.4}::U7hcQZ7MXfB{&TcQ 7.LT2P|QB3~q.emTFQK zƍ>ijЮM]2 c2,oY[RP4D $ٮGY9VW 1$sh(=;-Lw%*\F%)|B9 gQ aUMbIQRA*4х~,fA!a7៿)=VC}o\);; OIu=\Rd*xψӬJ'YǬ K#K,02P*6DMBܷ]R>X͔uOVZ&%Wjg\mקd]ie'ft(5L3pip+;R$W6M$XBgKD[o&dr a& pnze|Q,QƋVm޳uN2|QlIkTJrAnB7BI4p$QUT9&6*]hA7ZbQX#zyr`nMVinL*5$1h A&F0uNBF1МL#+8O E*i„,)\$4Z%G^Z偝V&8&CUʄV\%OZY_$ &U3.Bt:.L2ιVD׌ i- 9ױvaSyHfo= Y72acD^)zym<MJd3"zFZ%Ȫ|/3f)ST94Ky1a6[c J!ft'c,_ Mݔ܄RnJYŢ: !T&R#,>Cyrg'*8,t`Z*\ ǵxFa6ލY:*YxjI bJ8{xvvύܚsYۍϪ C$SYAAziT&F% r4!LE!҄*ă"W9c#)+ ޹mFArJ',NGv !h;>kQ%DBludqARVy8.bDdUYۑB(5J 2>KV%ơX\Z6.6*ddKQcARg"BQf;eqz֪0l35rZapsVIBlU(J"ZQ%kt,6*$'p̘)txxȾc6!~Xu^O/K{/>'mo];;<)ԇ<40yBdUR7J%%їsyxTBt:i hb|QS r:L*>HTF;WTY*p?@>v•a^tPHHޮِiv̺)E%)iee=؃GuIh+(C +<Ɉ*-wX(ku:,M@Id;rgwL&0ABLan1w&l; n*RMDTٷӹn@C2‰o8r:6Dxb*,Ҫx=t{h-f%6* /ZP\ȷK}G: aXǬh &#\up0#EYs2f}4g;. ɠ,N@U3%MF0c6¡;B̍_ƍdSeƎDϸP"Bl=o$4tSs.t[EK:}7?hup\Xh:( E1-m:cBPtXiMJUHqhdZ46g^ aĂ{v %duJ(6m(ꡟ YqABHL!MB07AqLGfz􋩨@ !z8d7UMlfЕa^*X0TYms:9 =),$J{)Ų6f*gۺ5kכva-?D}H&~?%oҭ?~OO~_0 ?x,fo_ߺH_틟f ׾iw;d__y_++o|o}z'naq=Lj*J$UҲJ(_m$1WP, ,X0̭/>k4'PR,dƬ}h} XeU=o!œV%&\ͦF 7:j,NP]ܴM$84}6JfJ + A3LYY,a!P"Q@y-.& ;,fRʺ nvHf[h(dƢ̵ʹUMt61< k!XG4%FM%)u:oAȪ YA2@gڡ5aLdjR%[CQV ^jY|nB UBił驲Tyvu}8ɦiiBC iƕ<z)%W5T!ZJL0ӱӱOffB"xzb[#JS2ǾJV.5TaL|03=k6Ǿ)BT,BvoCRBbU!ĞopCVJ[d7i*Nnd7έ2(ۙkA9 J`6ufg8Z,VF%RL;ܨ|ֱ U٪n1Hg?p:ǥ?w&4:TqhɁxb& L0ᅷ >{|->9|Iouva?s?Rj۶iiq|k_{z;<Aw-dPMER% IBJZ )!tn)68D n%!fY6u*ST%3XpM!@J%bUm@LߩԨĞ@RCitBIWG 2BV!Z !Z:0[B8C2B\aHxlōXF6Z &Y±o7qB{2Jʙ :J,je.f*4V9F@~Z@F\E8amF%B ֗nZX N%}Y!k I!ƬXt$V%G* qc1\V`.a)+ڙ 7jU[oUFIcSҵJ-\gT0f$4R̃m}2BT E*GqVXSXZ2Ao:.uD ^fWN}G7ho٢n\SI-ux}NBs2vީr86#V!&0ب'>MhhlE%'nxB4afoh:g1Tl#P(BaT/u%T2OKSnCI])1\aR*ʐlFѨ:gRVYY}63rIKYƳ`q*:td3$Z[̩*<Js_xiݼ_<:aȗavx 㣣kZM>iOl6/n8sOEIJ*V%@SUPA$)kBG٩^I)kXcIa9ndZUyyw:ipB48Si, ecND Xb0%CƯD r k(piB(45(t8rA5deUBs4kt<秼88CIU.LXYoK$ O44\ȵWϪBFRVu"gbFYXxB, ~v4u0X4:dp'sMJsa-WNIo6O$9qdJz5eFci0imt1ge=VY1>k.`J?%-f,l7Xshg:YMpf*YOE:@WvbZYOU8 nL&4OK M ȷ)F%Nٷㄘut3Z=eGvB|1Ʒ:KpȚw&M k&(7E2p5%MT @ H&U% D=K<yy3Y͜"#aH98Vw\*uNUF':Z^i5&xÕZm47̳oW`b- !nDŶۇNAē;={;~Q1'| _BOzᎋ7Q#wwK~]w;On]{'g䛾;^vMc SOOOOOO_~͓Wy(%w?w[?x? !? {o;>zO{߾K}|wWW!_7|7W~忼~_/??%{;ÓvZ[ks}Oӄ]ۦuac;w}7(GTDiC!D\g.W("і*#~9c5CqmjVMVaߍNl@ U(EpHH:өox8C֧ѱ *.瘖Dp6N]8}Q\Sg=SQSQHQ-eFi7ʉoqmBpJD T垛n[8rf 95e͡ Bp䘵 *mV IRAB0w>>Z)kgBB9{Ol8[=r3T/_}k^WԷ};whg~ZA3?[/>#[ [e@!kv}~_{P_5o;u=!Vp~/oyxP _W>㞹}(~kbsCOSOڻgܾ Ay_}_%#7GvO:goKpTEy׫~/w4 ~G;~G{v_/6=va8i*զibtxȡ:$d!7"zTżdm0[(ܖvەFerd5X!q歃 ʝLF*$kD}+Y0YLʵaoQ)y-C{nB,B1dU$;fzjv*,c3jJBر 0aHOO.4R3z)S9 7r}N|r9\ `B{vN3&Emr4U9a#Yk,V9rǡa\;07*k(<['#DY7%Tiv웙 -Jb~rfݳc0ሔmpZҹYǢj87`Pf:(ٳT! !dhx}L @ʕdZǤK'Q!dCry؅fό6uPnU7:ʛĻv'1I}(B]yXJ@HB2C6Pxba#+ZKaC2ǾY*(JgW`03Qg:ZCQȷ/`X Z&+,PL=776MǡF0LǙN㩥*Wv:*D"XZUIU^:yfB*8%%[LgmUU62XOU\ x jP!`_NJy[~\ng)8q |7G}‹?5}+ <극}e_])mA,?q |}^ӟ܏ 퓇:׾;Q׿?_a]Omm~|ɟRBm?w ?㜏woyΟ䇢tn;5xׇ?wdw}Bȃ}mk;f kàzjj3w[*6 FQRϚ4ۜmMc\MOBT*B &Wf0a^b> SNa- Te,Ģ<٪DU.:.? ZXMHJNe0BpL*D, dBpoGR%W^mngx[)Db/6 QOJ!dZ,jtt*_h{!jRI:B_Tp;] J4*sH QHYCA0R{vD 97tXNF J7LYm&{axrg' )읿sG#?}Û＀/.zھuS=Bď|$>͏Bc?W|'\~W jwzowͿ);~?OU7 qW@v]3CB;kn.ngmR~͵eub?vaG~Ǧ7/uuyk}׻_~…]} zt}z f$JłU:\t'/noVf_T \xEqB"g-Xθ\۷[̝ V\aN_9=r!سL)B0&Vy}>iUa@Ldgݰ4D=$L(:oGSIC*S B*;4Сؤw4u(!됍 N!!Z!ĐlSݛN}Lt*qTL"5f-KvnU̍BQ^G6V!;jhf68 e/$4ӌT uDI<T \8SQ S֜}orNќ; n>8,C)i skOYFz`1:皾 6 k bIJ PԐ iU>ׇêg=JO&SghCK݆l5g!BQ}η}$DFu!o@ܹuvIΎtsԏfo]aƟva? |Ji\vu_׽Mozի^ naOCP* Z+JIb4g eFgF47Y\e+9uЌ3O)I`\ Un)Lm t4Uy݆NBNvύFe/vYq:ؑM}2c2SQ91unMU^s:yic, CQs"7 S|U@mB4f Rj,J]hB̝\}M8XpBѝR>w];S~w'4V )J4]|o~`_jT*:GYI!ǂc2JR"4 H`M`3`V@K9hN,T! aq=3 8<Ycw(磄N]rc,2t4!޵Ҏ즜R0W!AZe$:DfEY(XC2JqfR{!D" Y( HK:kSws0֦&l# 'Kg1,RJ|oSj !]o}?s3—}z~wB+zw-.z[ʇ=.%3{qBz7>y<}ۛ¯Ʒ~;8sڧ}ڟ̗/˿˿Zz+^q;/d݅ ,FR@Ϲ,f&X,BQdq*oqPR)DP\g)ka!:RV% %Em-U*5:Y(RVGrrM 3-{ ff\XƓUY*vҌgHUf̚3`֟kTa܍ Bl;7 0P:AZqXh;*dW< RZ:F)*M$d" ٩4$qh} (Q҉o,N B&@TQ% g=]gצ)!${*(J)PLG%7JD7qn}su2ʒf X>qz$1[ {ѷse~7|FW|].c>ZK>\O7{/O>^;nO}?KBO׷_9?|=?y/|޵_H4~?\}sO$~_<'~ _KcK(O'|Ӷl /;XV.]BE?3?/9Q +`^_fnBB8Dk0_-)N#ezCօ(j 2r&>fG44h,+$IY (G볞^lw$ ڀ/XH?W@s/9f E!a6&KR6cߜ6de0/upabL4Un2~i}5W8F!S;m :ZU !E<,&(( /HU"uKNg,Bv} +Tvt:Z,ǡHX*:C fJ3i6$jJsC!Raz6=YR[יHjǥ 9Ԩ,>u@V9Wp:%7"ddUYG;3aab*cN>hj.-6-*k G= U!k.[f0CMywOfzu[% $}֛hCQmVSriX,6ڥS ˔t DY`\XF'e6uR2Q\iU٪Do| r?`uŽ~ϭ_ͿD%;.>V_?7Bt^ßz?~_}?Ot'p%>o~~ڽwSIOy}ͳQ?WH_~+_w퇿 J!k_xm_+!SG?3OOeB %/y+_?88/{n]c?:=nןuǕ]2qR< E5#_ͪ JC23Ws쇨renBj\|tcndHT0@ 9&W8Zu,*kVGuZ:kzy*ntTnUZ,ܨ_۳+ ܄Xazf|8uZe(W`ZNMT=þfS@̽jab0oe:FR-ejqHJ֯߳Ys/ӌ˭ V`9:HY7=]&PJBIGc]Zf̄NFE*؉w-#g ?Ps!oy|eu޿~t}A 㥄}=ǫ^*~|@Gٟ[?Op$?;EҥK>Ws>sn]0<|~ի^iiZnY>j"ooo/wݯ~k?R>|'-G=O>0mEq*p6fUTR@s*hUf+Rd7*IsbQ|ި4e!(iݞaO'DVۻ;K#aT&\`|Rj, ĕq6ӑr%Ppa|R"$`6X,+LbQf-(493aSyzkąNRߴ:4C`[ Ec1s M?Ο$H;G Bũ*L$H@*(ޣ$]V%a̚#Ih-U nn7>8,f&t*-UZ,鷨c]d֯kt\u k(J aU EuJ)+NITB`1MpUQ0w*5*Y/âӑSpbʊ' )ĘnY܅s% Ǿ*JPЩyE ::|GYJbeqVܳSr7ǁ曇ipܜYd V!VMpgV=OX8_OF `^Rcq"$GŒYǢ6CbL܅.;" Yv rnÒ EVeQ|L3LEc2 -Ra֙rSuiIdY-L(UYZd^\qc0%+5#ZpdrRp&Uymu;38VjMP@+l6%q&챷uKɝx'_ _ԗ;-$^ =eu_|N-|4;ʨQoo/%/_'zvnc\=6D X,+&hI)JR%[yX܌dBqc#kkavo\4:i̧٦&b>n5f@QW]mJKRK bM+=HZ!UP(B@b!711˵>NAIE9(SQW9Htx`Uة3d=;3aq8J[J/T騱c/>ETy::F}7U!"u.(e-!KJ1WLR<>p e>Vǘ<ӱQcu%o( eJ&7*U9&]mp`Yqdx:RaϕY7*)1EcPnέ5!LGR^蠠\>pTbf{5Д UL0 Y#P!H-0$Ӫ43aȚ)c^ k$ !N}Ǿ)!VNmpSVd4muPbU'S[*LmW ժ<ťS2*:8%iՌe}v&ui>L[/Em()„V%%>kM3U)l>L“;=V ?$5' yc?{w|_xK_tK_toYOO]f wav@@JƘ|~ܹ;O3{Www_<ѿh;aAE}Sa68"NIk ifuo2A1Ƴ}qhʷuZ- U7dklvi}.h1_lTeY74:^37$C0lM[Obc''֗*EB=7 eu:ŗEөP1P } P#SL;p?[+Y'LBQV噎T%I! nsi@cufIpeqvЌ q6& Pֹd[(Y[ ۺ =8,RARҞs$4fbYGg:$syXw:>H\`n03TNB8,exΌ\ :G$)D,V2Wht6wc&4xố=(kc*XhTm0;6.pʮMIi0;A`nTARA7 ȹ{;.2ftݦ (fWٹ_`Ս*~Pԙ]ҩo?߹xv[;RJ)% 94M۶m:vq8|{wHUj,.6-s8tlU Y줱EoZ: s MpQ*l Y ~9D&L3r\,ȅo BxiHT9ӁD+0P 矹hvin{ƍJzmTp1Âd.Xuq:ɴ:zBN*+Nc(eg!FYHԊ>C(HP}TQ0t( NtU.?hM2>kT*Ǭ+g):3!eEU^>Z?6Z(s !qDƎF=s(e O|ݒ !!>Zydj}VJ3Q%iI1s ;nxw `"drz\f4PX)UX*ǢPT!6!k edSB*q&Z,ãO ! ķGUhCQcǡ6!SQkp,2eMvJ  ySɩdU: JҘ̐5pb.&t J)Ğy~A3PP8ݴdUP:wۅgܸ !NK(/jz˟k'ϯssv$ى8#k+;z)~)bOl8[= ;;'zt}LP LK0ĢGS1VcN8cu*,(6LID5X(UXu["fu8uc\~}BV%֜Lo'}zQJ$4NMp+1 tjک(׍fAIsQD@ g5: ۾$>EUJeȬǡ)4JjE`RA4(!tuKeZ u(+s9t48BtjrznZI$9id5PϷxNY5#eR|J!Nh5 :Y,#UޜV!Z8HcY nU$=;ۻuҩE]I: 8E*KUU"L >M =;?ӑePTS@ tHmqJʚ *I fmT:(&\)ecv.{ Cʅv˿JXMcPPT'4 1e2v(\Q*t:v:V! JhA@`Pqe=[@:N{6Z( pj,x|d7/UtXGۙ!y48,Vv: ALYI2X *:5MJUL8  0~Upq#vJ܁f,zLBVf0;ƣ};e "a$0?['}VRV8dPʧѥF(t!kiN!kQB(h4$#eU@3Fq|q*.B IoLyxיLp` ݶ1n5P ȩMv֑8k|ɩ7ETJ m2d;hnfu:Ɔ;$s(B3D۪d0hwsJEȚ)!X0Em0aH`^(Ic먀)뛚ϣ!)6sMpd藉pjF?V>K݆D(vHvPü~L܁!IUK*dUsߍǾiMIlƌ@CS2}'U̴ge1K!b=;)E'B)5DBNc3d37!W>u,r,EB!*Ę:4 }6`"dJ"A07a,$j, ʃ|Ț!kV`%+! :pZUvbV-5BeXƤyse},Jj3xjH-;f}\?ԃ Y\FڷS&F 7 u?.y~ϴ;}WUH0ImV[=(^^>K ǂ`3c!!hHkx9ޯ֘BB꽯z^sݷ IC;uB)Br=6}RaU}xX.u$=q׏Yw\IΤ1ۙIJ/[;L B1^L*FR$0!vB!NM3VX);0pdžΤ֤Lp%*ª@րzn]Xov!:(~2(eP$Z )LBT!wQGVR"!^U(BpUU |uh>݉(V祝cL*W5Pɍق" 8dP=p.k3VYHYEg [ 2X:yĬ{׏s9[쎦n)ĝ)MɖtP;(#4йUک38_Gq&ŌŬ1nOU_4>|nBLLBR$qh`vȶTUΩuIZb*uu,UChYC2PL&ř7RTQnEI"!(* uJ֤![Rʖݹhg&m(UNM2]I҆VgֱәUpDk<8PfXpMhD-N*r f*=6[n3xNbgIVp,|NyB1^z'=鏞3uKfxK\ċysW! zΐ-+6UInIjXARSwsW!B6I|/Uac Q. !L0jM(EpԊڵ:uuZeD=sSgVP&-ԚXhME@Z6QHBZΏ]Aw< Ϣ/U2?ZژlLUz( i(*#@ B6*h֞L ]N !N?9A70{8pPJ~Ob=lcrPQL'Vwg.(Y;C{Xeݘm"Q4QImUQKY~4sI !KOLB1 -ih6NݐzVMFq R\BXIpǺqOJֈA)׻wN,BjO,abnMMr?/RFQB-8ԘDmF̵aߏc1GuAsÎ:6!9xIUډ3imbrp&9ӌ0sQڙddM!6&o2llY=uB)YT0\izrf(:Vd5:︉C6΍xC;q_Zif]27IN3rM@ MC'E_}(<3D5 ƍ*.%.qK\x:RI{͸Ͷȍx\B8]AV;J s_B3wlXJlsF*Īlx&)!92⺿ EbldOBSEWkEgARd 硦}JփfE^!ۣ !+mgPl  *Cs_%7i!4ӭ,6^ghSZOX%ϵZ TBʊ=2,l5HؘDuhc˓ΒPoCRCmv%;.hE ^' )f_;6`,!mmuvP8e8JrV*E= ]Vyz1/iBᷨ;ygxz#kSʄ:#Lq.\85Athj$#iiX̹4[h괢^L*ZB@Uqv%Wt&QHXJU+7):Pt"{ e1!ĔM*zB6J֫ݖ&4fm@}=ȝcE_pl?]MjQ3"#5Oss`[k PSvgу$CT[$uڅ ̤CS6+7u&)BKZaOIg Essf*5u'.FҎ\չ gB W OC@mujII|E&> M((xA֩w^s4d{8͎br:_!arn#(*f:FNg)VdvIH*~hX*Y@{ e馂J)t!xCFRR>bU y|&5d;˙4,AOs;=^ld%.qK N߯%W\E Hȅ Kbf&u.5UَV oOu{ vX8 ),ypT4$Lz( ʅ7:ieeVZA3mpDXJPT9H:/mJG6+!†F}?6MssYl&d]p*+EU=/$bܮ:r.VZѐԒu@-~y$Ι)z}{?^;Y;= LjQ;g9Y)sĪza#˶sVnZ`JYy hjQPDPG$-ViV!RCgYِneKXu&X9LjySX1ΥUȄj]!#]$l@TrHn̖U)nH٘+džg_8E!BVb&4RmvT74:6>M pǎlOƮTu"jBlI}vC1$$ӅC%*rP }d kg&9(d5i3Zѐ\!euqlّ8pX (B&MԊ~&|[Q836n[lbkvnҵ٦ӹeYltE QTqkBmj=?*E :ujΒAv:7P.6PvB]+N!VuZǿ鞞 .nj|K\⅁˓%Kr$N ʓMQȭ٧=MԊl$c9׽d~Cl.#dJ1 sB / 1w a qaaNU*xۖNC3&˵ U%RurDdǣb^ƙNBB8]jaYDjV:C6;~\' MB0bV9eIaUZQ̤zhlj6ԝMw/6,Mss, ѳj @OmlucxjI 0w A֓V!ewnNق}v'SߙNRM7ƹ8YNCfLNʍu,f׍;njtRmr\w8u6ƤR$)6z.)*2&7d{ZQBl g6 x]6NSUr1&O ˜\Gvol]BY;&&UmVg%v,nT%U97L5fP̐v#iϏ Wv&j Pr!is`mB@8*B79 pj=MͣbUHBb6 wl={вI G4!PCU-nU>r*l1y'C<Ħ֊K<3ruK\yZ+%.TfBԠS JJ8e<ϰ1+UQz:L66&p4uB)jFXq:LDR ԰GԁLw{kES,=6bLd'aDPΈ5ck#IFԙp媜.+?֪bl@Ԁ:qfҕ;mq,](UIY9 r$6\kUg`ܐS-Ly~\%&D N?~tAPWTd՛LjzM 1BM]FBhFҎ P̔ GDp" Q;|4tlI39O+™{n5ͨJjH EG7dN ?I %Nly,6ZG%VuVn5V~ju^03)z(h%E'3fM~B}8tjYn*U Vtc&INVma#ΒGRD IE>l$UJ!B[HŴ:4OH\hLB&/9QNrU;裏io{~+bhF)'%.G XHuCv7:CӌFg4dۚlN…NSu:R{~QQH,zfBV%zSB2n`UWG;SVBn[ya‡63"_9Qxw9!o J y{sx(#lIDATTr0Ao{zLۉ/]~oOg=aټu17}#JOpC8%.qO@ ""tsLxdaoo G>+3&:N$r=E- "jr*ѹbq©1[eǡ l-IhTkRF癊L܉GBD4$6<0n: tS&zfTBIGؙtkt=P-bC1V 6ѿtq ..l@eQ6P)iZ=MF@!Y{iLjtBIAa,6 qY腍J9(یN!Uu֎nN [3Kl2BY x43X<*dcȘ55&'eL Ld\B1/>2.<!$p@:hMv $[&iR֙oNH^ XMY;lp EȐM(ܘVy{*jMjt.&ysEqԲ21>{}v|`Lnk*Y=p(ܴICsl* (ZȰ`U+BFJb|kuN's3BfAۏ 7yc;.m= Teg(0 ϒmQVQ_4fۙ&0q$4~,U zP)f EJTœBi,&=e;s'co3)5:5X0FMtNDW=-3Kf7G^{,~ks/~^3K\x~b937Lx30 e:FmrHI'IXSDwBޚ:%*p!_lyc(19"M:IF Id.LWfHnM3Vy[lCtcXt& v&Mٰ7u&leIBL*yXu,F+<'QT:2M'PlKUn$lǏX6?9ə| YSoO !&z=hI̝. HHq1Rd-6Ɩ{s oUH LXSBp{f&)I]IXU!N.:ٲCUv4P \ި%َ)E0ݚ9ji#Gj?Ԛs;=^_ʿzqC;<3çs2~~#OO G~pK\%.;Y==~5JpfLN~,A: SJB3r,fO C1M6 !Q^~hFzuDpo6[P4w!(!jNݔ-HJ*TӅ"xeύܴ6f;w5yϏ;~*UElIHUzj'3bOIԔF E 4ql)R196V!\2^6Ŕ6 "3vA ~3m}XI+;;C}8RȈ4Z=5(2b(M"P&R5iP:y 3Vs&hZ((2pLVßuhf6z[#jpa#3,L +,l}_&_zjeO]@Gl; syoq!7:-`"uititnM>_*C1KP< VhֱARI&s2MbNcCU w>WnsPb2؁"&T唍Iʪ$qQ' =l +h֫&Eq~' bIqd: _EN ӝ4XFl} ?]WaY`ϤD,66=]qs;=^O0> O?:g4e}6_%.qK\xޢTYB,lLL|$NnȖHQU3[bV6.}W-UY(KU<uv: !nqezK+fHj,,$" GQ%/Ll4`Sؙf8 ͎"jsd]53 а B$h)Q?QoHV!B33i,Fz{b3@Y\NB5˕bQ+r:llh,,il=%T vmXhQ}S1# 5(QIʄz\(Z 'g$~Iha6[~WKUQh[LjdUџLmm"5e c1WCPw:k(h&PL$D !!B1 ʳs;W6Lńb.~dI44+7! ~*£;:nkt;KiqhJUT%fRXM3nOFT壽.s-mwj34`eS],٩cTDF0$R^IhlyMKW[2G2)G-B1\9֤ <墑u a벲A DEl+UlCglql֙<&I:TTLEKޭlBΜZ:e%!l]7 !< gF@IJe.<3U?s#}kk_[ ?2b֗%.qK<sxPt{aUCv<-QKZu>KN %q!KIXϗF!Nhb؎tJǢYǠ*.Lv8q+fc6h+?MZȆI-kaI]ZҮk^?Nh$f!:g@T@tkuך$ęhX%ONTN Y-fBp }q̶ 1uP c YƝf.bJ%VEU:+? Y$\)wl;bJ8$;fJnYg: Y6,d9S.TL2fGq̅ 3>DϣnL$ Yۘp%Ŵ&%Vĝ"\gzl )vNŜfO:+I kc.N6Z&FTURB1U9^ 1f{(M%H*W%V!٣ZR V a:1YʪqFhDB)o95HT[ -^gn (YP|$[)̤Fgjt{;|i+.*)҆!9p=wL{iuvP8,cZ  LZIdjŽ2: $*_mQ.VP;(WF%W.XU/<-zNx^|x&W]U_W]}`g^zK\Lj6b<qBL?LB|DPG.TO￿R$DkRYrC,=Y @G$Vc,`$r,(emr7y$(U5:;(xUQ4q6lhu֒ 'S$+`vNZ'w8bL3؏^38({qH!>uuYAQjn#V3]KVm^M7k⩘PJ)뎟o0Gqaa"e]i?Zu&zEԀBVCN")!"2^'#(df=*I׺mc2LZ$)LzLEV6¥ W^b1TXl**Es6Xն_i}e>,)v$D$)DB ]YT"8'`y/Vtƥ66&?ՀUǡav&R +0los 8sW۞\h5:5i}"els,ssZ05$\9Mm+ZjJR ug*MBNgsUCѻ~iFTmqUtAK۸0R=?ry…YgS;d)2깍,FHEQ3U~hĪѳ@M(t<(ӊxZxOmr}rC &^ә< (*Pt*:!l[N~*hB1ǡ9Kqxnggl^?'^%~PB~/w_MUb]D+NY/_Z!U9ӹYJ4+OJ*Cљ@)jtnuJ,JD(W~fN3ECwuZ%OgK5 ŀXIlAѭqU !6u,*!3)ˎ<JK⢈Mr$_HI!BZZII6e*|t\Ţrn$ sΥ* wN4&*PLj**U& HUr-]BO`V$!dsgn4 )ܤ71-P6I8TufuwČe,*\|Wq쏝͎RMJJYg&LrPH[Ӭ뒋c1U?*Ce(n;3I%IQ\ Uy[e*cB`_G;pnCL_g&I!mКT\293&FR/[f2 #j5!&ƥRf,&l= cjIK|afԞNTM!^J:x̲TY̟C1c677{;.d-bna+AyӰ2nLtP o 9e؈*6:ɁV!Ώnu:kCS6ffJ@R`.s^Um,352Bc?i\fTh٤PIߊ?{]7N.X){yM.qK\ z٤USyh+/]_~~Wo׼rAQTM{!^p&7 Iz( uD,ČLDo8@!D"e/ׅ=$qhh(&͐7eMkMEF)EH٦$GU7n @1[u&m;vht/ڞ={(ZmN=R.BiFI>t:facr̖שuK,YLu.Z2)3r/9kAZLr8Uق}1ZQ_jb ΅bXÜHUdL…>NgEDԭIV&y*YT>6IU9sMMZ'W4 -VĺbrO53 %dRUȥ N${nsKUoHjIVuU*YjYB>kEV6L=Τmv eRJ\؈Un+7 !BJL4\a?Ù-`҆>[O뼲!$IIԵn[(Uy=U. 9O KKv9w3)=--!MϒO}tVc*p|ZeF&l*RZe"57bC9 P17y|f;\9 3Wv,4}1R>yR Co_.๝͞~/y_qv}Z+{s_~32C!7ڧ^ikfW.qK\h};ɏ_~˟/N+=?oʹI\|337ѷ&Z9̹сԔMUH^>jEcp܎k<] ]7 3^J"jWa&K,t!Q@VEz} D]8ΨDU5P*5ԒVaPL"uQkN'A1$ٔP;$qIh[,6I+~Ғx WaT&x$v3>]=_sBЙINjS1F!z6"l'7F%dmƹT$u EE*dmB;?['ɜJѕf8$q Bv*Dʩ9:fBhE+@Գ#Bk\ν|S1}r[K[.W+Z E׻iN! QlLnuf+n`^-E=-(BڛdŢ(-#c1&n1VwLE+Nc&/c"'GԬ'!DTcvјwl*1y.I6d3sB:P N;}t\iEC1\U/hMc66W~*z̶1y܅X􎟆l$2 9 ABz(lI$}u\2U)Qbvt2Iha=5 VGv:Bqp-dUBhc1W(t,W*j3iG宛X=~ G~{%/7=??~ 'ȸ){u^iJϺ>e8M^K\|g|ɓ_{ Oy?}C?|?+N?VwJ!/>=[RXӌs.I͓nBL9 /;9ntYl3в“c%9( SZ#b*|Z6&?֊~& !b~I”xbk&SP !l]'?$?cT޶سdԙTu B&ɻnZ&47Qq<|F%PܹgO![%*[%ݜR@`u<%IUeR799K9|<B47 (PNKdR45*6vf}$вZUȈilBϖv̵{tXPN:EIgIUΓKV 6jE\lXUDž Z]Mc҄VY, $lw @Q!uc+5òf|l:HT NZ?;vbZ 2>IV!e>W~AS!il \Viq>͎g&::6>2\<3i1hJY(>%"8llO$q1}(h"*Y[B6 [%Ԭqs[y02 aU=?. b huڵPLk{9hI<G5sDI,LUv6>]dFkCrR0Hu:7&u6mlnL*B-jenb&I@G uFPΒ׊filPrQLj0vJ9=?rȐ*ES砄U)KB'K'=#0{=͍g뉩3@s O w[sa3bϽ|##NU~5/Tܼyggg~]z׻_xϼ' ??S?woO~"%. @(~GzX<U- c87]2c߿Nag+Mn !@r>e8f{2vJM /%Y:zdžmC2 6RUTSx$h J`Sɮjt漜,GZ#)dɎS^ ™5kɖT~sbNCkucl\@ aVPu(WƵjIR,z™Ty{g EgSwyvfZe 8 Mr*ZGHu:[rr}B@$lj:TVOd]PԢ&x]T8I.]['gAԳˆzb(!dhwqZ4xVMȺ;Tc86XihΒWVG/1iQ:R܀bۭwIl OW Q*AQ,T9sanۄIT)e-U9*kG*"Ģ[vPb"[B4zQX֞P%cOhNSZVB-ilxtL2 Q׻Mss˄#@g:KYy9hIB)iEܐ?5PQ>:[wS1.g ²&H 6ZJ3pcr6=.l<.FtمwXLҊJk2lUgkx&zz"hfxJfx^ ſz?uU6!ЯQ q}qX`U%^Ї>?z3?_}7_~g~?uyo췽M?7ww]œĕ[7|ƧK&)\0ZF u%K)$ChuQWpȖ *6ld՚jF%+77u'ltPf:뵤J* -BֈzϏNJ֙INsAQD)FDBfU3:~@ y4uB8(VĽ| x[Y$MZ<$ \8dunuuPnL=7:] ƙI ٘ nGS7Ә$В 39dH(Clbz6dP]3B% &r7†Hk*#V GS636q 7ar@zeUGHc7&qQ;(*T49~93ZE}rlhI $qQIh$DjacIhbX!daH5^p̖?h9 Ks@Uf*䨞HI.WEB\E'= (;U1- Å`IM )E3u완p8=I1o/h }1I.~鮿?=}<9dZQqߎ`..B]z>hΤcS$չљHY ®f&!:MB9:չ6!pƓLwaܐVg:zRu.ZYrpygҎxF 3d5ٮ*n:hNc#(WwޠhbUsP+Yw݄Ug;IJVi5$DgҕfBhQ;bӌ#9^N΢E$DFC1nn(tP:,KD~eCfOK䴤 |fO elM -Bjv1I8~Fgf! ܣh5.IU!ʱ"ՙu'%k(CPf&eHP\ e5Ά6Q;~\O ~ؙI BqP:;6u|٩ۘ 6:QKY6t&=6gxngg:Gk/<%3B|+7=>-B|7]=q߁7}|=_/HC<_+W_ W ߊ38?w v&6kEwouampvȶi!tA+ :6~3hIṳfuӐ6?^Յf̖;bBN4#7%JéE ᱴΤ8gS($'I~\kREmrPt}^pjanP쀖L8f%qInY9]bؕʉ5_&M.!վM:HH࡜VI:M!U<RՄ$6gKb5zW}xV b3qn#GC#xlǏXTLgi 83~R;g&ԙӅEn Z ukʆ* AB߆fM=:>MDʅL*!hICrKN 3 )RZT³ fG ee…nL&-5Ŝ&ôga'~J֕ >rLij(AY ј}qQY8>ВBpӎa.eLY#A&a/=*JUV6A5fN> CsZ%J3EZ6[<ƪvBZbٳOѹ1y}meO;e{kw& QosQ{>/D)v]5"*TL"B٬Yʅ'Աe`fY |Z͞a'Kfxoy^*ztwG?}/Xfx%^?CS_7~GEć/ˏ{ǃNŗv*>q/X\'ވQ j .p&z.]sZӿl3iiRa%!,l0VgNNױ9:46ǡERT؛H&iYסYG WmkȌ0&#CYGcB8J![STB+&Է'C6 v&E(Q:yVyYCs@MUMF҄GSB:1/x]94:scU 8v941!Ĭ&6xATt,CYA @YGߚ4wxXnb=j5T!qv9h׏NW-#*l$gv1`ϋafbǎ<#GBm[Mh`eNd|9K阡^wwc>տG2kc{...B}͟o/;~^{wUe"7/P9Q?x)}޾?k|W?$ޗxIx2Q7;6p~IjFXL!UiEImB,MsNcy%x}rty@\q QIo~ښt3,lC1BKgbFldCݵ&!XEWZ:Wlln7XYh"\'VtSgȍ7u&1Xۡ;iHC)8f=W&QZ$!>v۫v*faLJz$z],;::MpBFRcԱRK=8?%mv +"Jֹ 3Mdیj#,4}1YKlDPEx[,Q;n @p8h,iZp 7Cgb dzf&4ZR"Nܭq%Sd}t\ 8\Ӏ͊b'>[޸/ؓ  L;܆tW^ XMBˣI|0ܚf,.l Ew:kI<3)\^FߌurU|TL#5#*lkvf#+J'NB%O\^tEIK$d&#I朗lz +Bx27ppFU*Y{I~A:r{wўE?^ I87ō~ufg3fϰuKka>Q3^'=...B"u}o*}&-іϲX>K? Ϳ_Nk__c7|駿՗O~ϯ'|+;>}_ٿ;>[~k/=_?0$w~x .žoBͅدtMWW~zmK^75]m~g${_ NJM7Il#n*z}љ#ٱYlLnMffhCrś|8.Z]F%> mFHpc֡ۨ$ Y-&E,z4f'+3k"h:ޝ39I;KB-RU'pS\tjdRc1{n2.ʾ@VU ҅Lg; X]:VdePgFxym['zd996#q'Jqhlk-fwZoMmrGSw2vX8wPA$ǟ6B*6;n.j &M86CU99WH`46c7s|sgRApPbguV 1k8F;IXYhBV9JAH($H'&wlufh&M۸rƈp䒒CS.,S_HBDǡ]Iof*:l]M>rׅ g6CE#ӕ\;1S0lnE!#\'2-t C'Ta6sZ)ozX  LF@ g{WcFhuHh@;I A B*ukm؜N-Ss;=^OdIʃ}KVxܳ9_y\ ]x !Dկʯy\?~|W>}~ [~s/y7/xծj{s`??@/S<%^Dx>ߠ$n5 EؘlIQܤo컿l,w~R5|:<P퓻׺-gt&LNt&قc1-O y].аQFRW^:cI6?i!di@P%)YAB ۾TWC1ɬcsڈ(N!TcUVfOԮxP~YTeD=7QK*N&mqnqי+V.\mFg$jDԝIDZ⍩l7"lBGʝvi&@ISFល6t:4!B$ʄPb2̤]?u܊tU4㎟Ρ$B)ۅ gP!)H̤\GњdܞI<mULj`gcUS֩h)Q{9' WB y]Z+AFgPhMZ8&#E=u;Ӓ&ԻnfD2'K(C1Ms.8*"(euP"T62PdUBpA(g& NŀN*VȫajEl>T<'q{paTLB'ךwp˞-R).MrMι]?E 5't&iNH4k*![&uJV!j@B.5e(B)5ΦlDlߛC˅us§<ێ/#Ī37Xm 1Ig:%H+4ԙD>[홙*l"B,/g|@^R\4!>qiԍŴ:_lCK<$n\9J&)Dy]]i{u,:-QE{0qŽ,i!A3hES xtQ bϏ:L-u7:m|dfRg℺ܙɔBĢ#;ՀW$$bM J+mM|XJY6g s&qFVUqO Uܹxnggl>,^xv}>.^ Wʷ߈Z~[}co|!"}|_,$*ګW33uJ??__?Ykr8}x;?ċOa;ḫ+#S3?}W{_6\栜%MنlRl6!jI„ZKrNi\Yf6 !Bh=|8qp$%kkcӒ]8tQٌ̅f.PUH*66,L EN]AuSb:)[#ia8=AW!@YDlMB6ۇPFf&U8eTP̔m46 !X]XT%W8~he劋$8f˳p䘬.mֱY+ ʆ:"(!6p=U6ZMT:MAw47Q+ԲL. .!Τl9FʚHPsdݳ SuhpHC4S1}tXU"8 -7UHYOjt զ/c a3P˝IrߏTՐי3T~jtz8CnRA8 ^34&/@ W:*w?sˆ0+ЀAɚfvŽXj{_&Φ* Cƪ,`bjE6J*B{g|0s3uu&ػb9MWIڱƸ 7Iy1kKlAPi=(#e}lf"(< ЦaaC(fu~A(,NL ٲav̖Vp F^< ]わ^/8@$S[HI!4ːmcRIhܜil.\ 6zjBZO;.;;c9>D!&9y> Il{&lLfKYȵ8sdlx2"t=[NO]G#~4f{~lI ق$-NZYOcITuP+ЖB& XIXJH*U9zpQZHD+4.$%Dr:4)t., fI ?qri(ߺZD.v6{>/\2Ï W^x!^QQEVoڼ[oO[wwC77p|'W;g>>^PkU˯|~[sVw~6x.xTO￟ AQ"[83(LPȥ3B GQN*nEUd_ڐ6.AIl&Ԭemk E a}F|$M"RB./Uŀ$XXh$nVx k(NЊ6JYRìT noD,`,T nOݮV.x]bWm̺ ͮOZԞ $RV!VǁBƴ8:Eʺl<>"0~d; -+vϏJPt]FuaB*Bp 2jT#hE;~B!lon)G'9 z},V4`(h3­q>dIBG=K 6QogoW.,]m秡Vh[Lnfcg y4uT҅07Aty1"L\m2XB,mWe^<=l{]Ѹx.dFǿ짺4?zw}e_em|G~J|//zSO\d8~7݋?%>KK/n}J)w}7|7Z.ly~tw{x7{}|L]W|;̤uaU* Ckx@+Bxy q*f£NB3ejZ:4I΍. i + ciN^3y [b3@ѐd!UP.LdRF>F:Cqd Mrƪf6rDr>V 2ŦVuM_L(3)=$LM7{6ƶTɎ\Nan3i*&'S ZU5&p61wld$qïy )Wʚ.U:):`l"!VP{( #4:SK͖죛Q/fn6rI<Q Y3Bg⠜ĖcEkCI#dERIyt*bIlPe&8(FVYB$u75:st-_n0< !ocq,DjD NxBذ:G]lP<ڃgFUZI(d,4sBrRT|k]F!kVэ~au kJ/L YB0ev2"Y](ll}o/~;_wq=%.$8887?|x~~]tOgx%.Do7|?W;>^5{<7TOx+9ڛ|n3SdB"Iy<FR[x'1(q :4 +O!r@:;wFρ7X%gxC12f&q2j~^QxWڞ)"j*t&9p UQ:7Ͷ.ݙԙ"Q43rU7U9eul<:PlBWDR;n&/mwnv[%jcRgc. Q#۝>[GS'E8{i0% 0d h f*UX5S1oZekN3I/+%= .DUbs{zy21rX fRZk>9(tj7iITe(d%!lbTDrݐm&5d1ݕ)h@-e-2B&53)"m#3!֤҅w C1}r}nM ɇAl69 uh!Z%(2B% ̹ɥp(̎Vv:\TI+7u&A{(ΨJ%+K)D"ӮKkW~ )ON)PV.lmMŜ&qSṝ͞a':H_nKc>_ fl `XdK|BB)#?#3ޥfTC+Rk?ҝ͏?WYo|?\s/ !`DHcqFZ3n3 !P,6p)ȺZ&Mt 2pKD==eku(ҊJVHL@f&5:?2,^8 hʱe-3C˔Յ$L7 QH"-LdETUHp긙 x([$.X5^)5-%뎟n3j+~*:M*UFp(ʤԘʅ씬3z79B0 _GpG CwqU׼p:U3"Db- %hyb31_z}3Ѩ z^@@*W5J3׼NSVO TZu֩:O޿~ƱBhYO6p(qhojV- Wi<͘k m<-m^̫!guкG=B{ru1Y1Xjce t\6PtVgm2FFvS񌑰7յ㫲jF.ม?:w1F̙@| -nf0qY[hcF|+ЖQoL6}qWeda)vzQ>Ȝ KW2KpQdzzAx8|W'zoYH@ $Hdӓ?:}eqfBV6):BIfa} Ƒh<6ǺRUV>BDB8BKN#I!:C|gYɩׁjC+Jn#l*9h9C#&ӞЖف 7s0^+{qv67 P,QR#=&UƬb n Aq"'*Fp d$@ٌٜY]ZNBMkA=~M>p#6b#ic82BS(g8`%Sx ȌmJ{1QTǑʳZLjBs:1az !7Gܖ*DC+ Pt`HBTlL6Pj?T9#YH0s&*@Jn>Uy憐p8@J>++еC#W#}[hx˦qb}90V([BN dckfV!dc c,t@֞IZBSzQQu#Y]f}/͙ACʊY1Ւ7s= V6}\ai+K xޯM$y:*N/?xi) ;ݵjZk7LںcE໐yTLOO["c$@1>bYƊP9>r8#6ϴgS \+ )Yy۟ :C+]$!\mF]mr|wFmnrnRQbXPoM88tSuF>A A¸l %\;<]W! ͪ|12 [~L6s&˙e8H\ͫ2B9#9dH 57Md5#E iSe9-)VjH9@CHs`!uj}$sC+D@8Fl#i g4ZH=0 %HjT>q,"j  %F:SpwT67!bA|:HƄZW(blR& !#"̔£֞ 7}9Bew& ,&lfjƳ͉8`MP%n"! C.mq;i#HNB[Nœ*dNy2Nܔf LnC}T59>bO7elHܬ*JfcpoГH#; NlM7| ]ywմgX)& =tag u:=jO zd.FNB 8[YAp*'v栽LSoߒ3[rjϩbnָH xv{(|E%uO3+C} VMzxO?A$t1eYu2l[?֗(_1{.CO_x?w_n)?l_3 W@ (F sȘm 2&ّh~)rn#BEH(]S }sZh9FH/@a lN@(  (1YT]ь4r1B>bIF'~h%t6F9Y52odW(h jW݆|G8EqH5۔y86SJalUVHGVLLS W-'"Bp^焄ڊ:h,^rxT֖ZY֒:gv`q rN}W㽬,!`.#NAw FTiq<3!mp& XvRBkHY,lB"VV'#bط 1Bd=e0Bc=j(1.1ٌ= tu9TAI`|`l,a(Y3ڊ^^זH\J/kj_gǂx Aq^'vgm:eId]>Qwhh\/Z7Dt#+ ~` >cvN=9UH n#Bsu*D"k -v}ijh:20x&)Ϡtdd/!'U67fJYmd΍ tM1lAr BKqT1 H-AHR7~C1'+ԶQ](-  W6kKfBx(5y\{^913#d3 I/FjGYW,LBTRUFBB1P: r&a' ~Òq-4ߛ[5pAgPGeЃ NsqsfL>Rs] xə}(hkh=5(c"WR(ge`*pꭧsM1QT3my!4>2V@њ1VUf@a1c9s6 I}x ptn ܜYYW-r44r<B6PֆʼnC#BЎC+ !bC@NHcGhJ.#k-TN[md3r^97cBϩ+[-4F.AL I5bv\R_ nBGs=+3 \ Yp09s:)t@6;6'@S"ɦoeA a 4SE[hF<ňg81cY3]BĂ3a !G{5;KZxVX 3H@$I$#?q5k֬Y?E=?wѕs >qIth]wݎc=`StS{)un aA=%lhrtSBɼ$@]8ABIPͪ"8$$ tpfHv(H>cvrnjt^9pPUV@Xȩ[;GHAb`YO[Ld5'* lC Jn$>BO1pB>iUYEIY10#aL*I]N#Ԙl2(쏵i 8ʡXRW91sJo2(x-MY{1`@qT@)>v\# C!l.]893\g[p2W9_$ t<͍r#I 8f ͪTdb:F̩̫P_#GFΩbU^9Ogďgu)ւF=5jdž:[Jt彚-oֱ0{7~׿>%B!Dhذ]NKP#' uZi=J*+ZBV@ǵOAAH:U`8#4s*w@BVgeDVGPӈ;BCKJ Sd^IO#NЊUy5 D^?ĨйqcGIW`q5cu*ժͨ\S@ U@Jf]$pud® 0a*uzГWO S o?/x󭟿+_펛n+w~;tmnZ<-I$IMbl ?0]믇~z{\mH挧#4Ƴ َ=̎Pj1 -dzz83M8יx)ƱΌgp &*+d^nB׎/'A=d":@ǹH̩@B NKr jh[!Qqlh2Վ77`&"$XЙl"1*#$u99}Y.Ќ ThpY>1D9shі5f$@إzmnb(blutGڳ9]QA]/kzY]=&Ya +vmF=Zt4luw: Mx8.79dUʩʫ91bh E<Bq\p ;K vP)SuMPKntsuq:28䖓5uETp5wN#r2#khb M1"cS1fOW i9uɔc>rTrIX0rM ̩S=#+YdP?gGn\j -MG*tNg}LjG/LyHc7jYnc\Wuk)۫^ִkO%s-$w-nfUzL4ǎcyCԹ@\ nj.up nz"Bh|$dHNB*4lĩמA,p!?ZwP4e8w: O$Ik"m."gʨHEId8FM80ټ·FvZ1rc#`s:׎e9Og~]k`UYO!{XJ]rȹ8v$[Fـ9uŁ+cĜFB51BP::uȽ{pndF4TYZ2P`O66Ӑ_:UG4rm9`8h+# *F_-4F#<AJɴ*cuY #Pp?=u+FٌnASveU;ޕV9Z0 B%7=@"iN]Wh@g}a%s4"4b[mo8Bw #ĈϙE_!bGHqM8gv!ڊHF3:Ϙ3ild1H>, 9i<8| >= ٶxA}MW*cxά GBp8;;NNLjk#m^9z_螺3;UԏɩͨZ#Ԍ*Q XDx6 k-E1BE%A;-n$q9G*#T^Y1۔ShM97۫Hr, $.!| (=R;ef9 #+fru1BG\0cVmI!FrW%J5&d`%lO1B3F"! IXJVj눐 @g[cShFq o\$kԎs0]JfY;Np]ho<͘e$@M1Tv!,y/9ݔzIݜ]$Yͩ/uУ1bA]Ƭ5uC++jǕgɬC$8n٦aPAւفrn#[ Ubvhd)tmEO6馜3 "֎@g:Bͫ|w՞mٺXJt彚zFKZ|Ph|ۮ7oX-_y/^5>t:/| ;ݦ 4I$OO 4ZBwuO͛!Hy/WI$Ip+hA3TZ!MnoS֮]wwqw?~[iXb8I$yB>uc'8}`&I$OB#vY@hJ#{#[v.,-/iyZz<7k7XO\ެeO\ެcy?qy~&gy?ny5 Boםw{Y}x]39frbjzb;=5O$I\s31BF[系1Nc sn:]׼}$I$Ia"C%q{?6=W\\]ʗm~.瞵k}$I'I߿q.QY>3Kҹ*BD)L$Ih&2=3rU$Iq:TsΙv)2L$Iy_^{WO{~}o׿qߞ=3kWgWZh+YRZ%eYRZ%ey:!@1spMӤsI$RZU#_Y;~otÏz})lܸqSd$I$S $I$9?C;G~1"%e&#?ַ\/K9K|_tl%&O&I$Ir{%Ks>ZeN8N8zC[%W榳wd߸k_xm:_3ߒb{'77K>էn<\K?}&O&I$I8o^yӷ[?OOeqﵟxh۶m۶m,K07__scs{z۽\}蚏<fpXrYB?m۶mOjp~_o}_|<ȃ=I"$I$Iq]_S9BWols?+^rY\ap ?u*?~K_}~^s٫GrleYrp7|bw?is5P?Kya^$r4+N9_gO?{ [%=O?z5k֬A&O:Y1[r>?ķ{w4]~opǎŷ _$IVo.[#LwQ/կ} _`$I$Y!H㏹PbbÉ:1aecxO]$:k։ƒ+Ւ'ѽv}{4MzSSM|{,]$I<$I$8Ȱn~OЃ?u`0he&I$qX|_I$IG1ƅ^]q[|[^w+- w_\׽E,4$y9|ds>cS>g/$I$IHk۾pwCo|8wӷ6_U#rw~|ow|?{Ͽ8B$y9|dΞ;&I$I$Ký ;?,8]G)Pv'M]pѹ-pz3;KgOrkyWw^s~o7kqկzo}U?l[/xf$I$G#EI$I$I$Ǻ&I$I$O{g$ICiIENDB`DataLab-1.0.2/doc/images/tutorials/blobs/06.png000066400000000000000000000206111511411446000210730ustar00rootroot00000000000000PNG  IHDRBcsRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'/nL{_؀m17oޠ| /8JYf8 @J9$W ۋ8ʷp=pTq Y^Z؆[IUݰCm͡W Gbgf=sKK0NQikZB"voBFDpĞL6qy:sX5&S!.L /wݛt5u6^vfő@lR|m>G rk} Q+-2v#:vE{|+m3u5N%H9]2''5 {Em x‚D;b7cg==XH=Vns1,vXU 6?W>jB=y.-rYB}8sK٦|mhꦞҴ);sLKO_/-0kkkh{4utf!LLDZ.gi0Hb{k] Kcy<q {}.=mU%OYB'1Rs]`>T$;lV!z5{s$AvOoV5ߞHfĒsܬ轕5m𼼝SH盕[i3څ'c# osN/S3dԐw m[>yi#3CUѝ‰G%-vkc32222/3 4ֿ?uQk".}j67: PQmzc*:ԷO4m~9e%e 0%Q)*r} OV{>!x",Ep;2 @55Xާmwxqr O>w:Dв1 e3 D>?_**$z4{6R8WM2r)Uufzs؄t !ꊋ<^Z ۔[Ky)7E Hi""m'7WvG$11 U]WUp3 ) sazfaw/ Ko6!I(=zۗyЀm568Hvz}?des9vnf;&Oo޲tYoOMs Fo ?F)Vk&}WVWWQ.kv1G⚨f#@K}M,kvAl&DEEy{{"NNNĥ͡5Qq͟ߣ "e(B@ш&`| lbb"q)adeo*//G AD|# e(߈(CFD"YYYDdeeutt -‘E"͉ HHJJ}C3WTT[qs 8DFDʷp]<]'0ߵOOKUEMs'U}PfAI;'|'sңWIJP_g:A0u;_?A3`+冿׺*JKX#sq}v_z:v]zmC% [2;"hÔ+ WCMp贽q%88y'Ow1T4iK6+~ͼ맸:YK 9n诮a)xqq+팫3Ԇ;c`)o)OSy*}̖1&i4!" 4˭)**"*JyXaSC}Ⳙ*V<+7=85&{Ùl-YQn>܌4 3&57/_udbƧ|wA)Ʌ2_^/sOr}W[.G=x|s躳=qha=ݻzhϟ Rolĸ37^r=pjDfa_6q]G[q'PKKw>b6m (((!, k)+nQ_WTTpg8wଈ9l-):cgE` $0@\#񒨋3WՑ$Ih 4Ix;a*n3hPv/2Yč;UZśb&  %FQv ɴ1Z"5֦ˢ8"˫񡗗g5R]cr2`J_JY)*I~./l+5ċ556ob9|QU%[]-֣S172 Ja.( ы_j3wKw*$/q Id [pjkzjդ0%K}f8f[3]v(bȶ?;؜ PeT$d2@/>(j_;+ L?j}:ag.PMj3,g~_ͷG%m݀!.^>+kڨq_Jkc'=SH=u MwޡSzfJM:[8# o!?o TgoC<|o]4M^^QU]l3k lN܎l2-i2VoO85*iEqq1,|\RoҞ)yז: oY#eMR򳔔G<9[-+c#9wR C<uҹiNߣ%1O_2Ccso*v`ʗ5YeNFRlf>W^J*S>*鉼<5.' >%߀hP^ZG{ P$c=t+nfkEML2 {x3h}3\F`qr#NśSFU`W?yS'.rH1|4 ')7Jy.oefԖVr:տ>%;']-"??ߔoNiqdIxՋ o{~M'UYS򉿦&\& IϮw3FSRhRJ?q؅-lƍW6qxawHIl:CE"^܋:WsX=nAU`{0a)+`RᛢLJMаaռ)Tj=;+˫Z$oX톦fuq1=c]2?=wwŋnԳYu_>8o\VT,8%/nw4ɧ&|OyMr>>\{>q>6<=]M>^bwY42=f1#͎Ǚy(4NKxO h4y_rX: ̺:8F;kY)®cF6EN'.Az7|ro~HO9qxu (fֹds3 ZaЬF&:<Y<4r5Ġ|3oOƵ}F\tO|t85?~ƛjkg?mgWㅨY}7,8b=s+};urq!쑸U4[`>ro#NNPSVyqәud߰Cz]O ">c9=bĝȝΰW Z$5nuQQQFp~إ0ƍ?o}͚c'sFLqm9W愈 ʋn[>Bu`G\F'ð۷o Fp8vH"HFCk-YYYL&iii⺺Ķ&33uf'hqh8oD|# e(߈(CFD7"PQ;UUUĥ-HKK"ȏ#痉ĥ-$$$XXX"ȏ#痲|r8m¸>[P^W:)3zֈ:%HgY~%Ju7Ul6{ĉFFF F\ p-+t}5;@Vw]Czܹ4???qqqb[vNt_姆EI>4C;9^QW|v[IJ|l:Au 6aIIɠ Jo6_-;&`;8.]Pth =-u.֗`\wDОe9}Y[4X[[kU#o2 i,7E^+w2jи Q3?+1?[ge]Z5ZOCMa֑DE? 5죥݇>q2q~:3~jJO]4߅cƌٹs'!w;w q/X16]y'Ie 8FEm7YC.=D-+9&G KZz 27wC[э$3t^!³o]w&RoeE Wͻ&[9oRn'tI )O:2#####n^]'ːN E$h7ngoNYIT|BDFjn=4$G_I1D0H2#5s@ƤR[' X3XL3ȳƵ ℟2`t ?wJRWiD9&C]sVT}\Ȅ (T*cƋOu$I&Z5Gf/Iq;g PI[JJj˖-֭dLN^b6Lم 9JK# &H8Jؘ]_p>pi{|8Ueu49VfYͤԫKY`mmg PI_o @aqUgU<5kɿU՘r> bW%<gvLؾ6^vbeNIΓG9:<8]Y-ޯOg_w`O>󯅡E?TkAo\?2k>NmqUb=Y=Tid qM΀iG:7.Z%EW =PKmAA>[NLwU@gۑgp8>(sn63L~yL ):vi@u-ÁG%@>Vf[҇w;kb/L [zTla-ƱK5As}+V߁ R\gkaddddddx:%E@;::>g>\f$fV'ċ},nN|u[؄­|@\ڂ N'.8xYWj'͜t͉|w#廋?_ Yq)Mm2މl BFD7"PQ򍈲g֬IENDB`DataLab-1.0.2/doc/images/tutorials/blobs/07.png000066400000000000000000014107611511411446000211060ustar00rootroot00000000000000PNG  IHDR.&sRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'ṔO5)/PԎ<11fƏhmC@׳fek۩=%Uoז$Gm];51)Q!/>9`[]4o[4LJL1-ѫ5#g%^;3o{Ѻȱ4fׄfO{bpiW{o5.z"{x<1 :6aQY0Y7Uo&ܼm0vaYF^ݲvZRz^Nw]kd2LEUJS}\9ts&.ڟW~G{)EQFcXr ܃?wtkT7}ه??̑SnZm8{>I7|im0z Ku*w*owBí5aZ~)#aۺdmӦ;2@-_=W޿鹾f8=kѬOGd g;iIoWٳєy*;bd2LIJ I [p9 ^c:oy}YA△ޑ,IPLWjj9zY;'nξUk<0y^rVrp̼J94/?]C{g-?N^^Y/S/N[CQ ܻ?8a{uiq?<EUܻz<<:-_cìԌzW {gU1- \&vJ+N˞ֵ2wښ'[ۮީENÿoztFYժe54jڱF޺k]=O]p}~]۵ӬFZZ&d|sMi7aUYh浪UU͟"sV'Ao֬UPʾ٠Zڭ=ѓ=O[Pi3r;?bypztiӴegQ`%K'ܵim=??M>d5^jk5|/+׬P/:2:1qp7AMQoBd% ʼF\Q'zݶ_ywLϬ7++yc?:=dE-C+|RkeVkDX4^鐐>R?ۺsDW뺱wgselvYm2L&U ݷ#-'߿{ ) m9O6v}w֭gW"+,hi{Ww!`UKt$NږE,s!rK+tܼ͆OϸMK-{}˼%7Г&#de[GlgKw-F"ռ箰u|n閭?N8}dw޻KKgqq ~xz/Z|'+KMvK?+eh閹KWw"PW.U-OG6~yuC_`͂~9xOuKgEdm^͸NqǬmYzs\EO[p;:ůT_S VU*b?tdur~_zk}tMm=gC]-53}O?vC)Lb#}&-; B-UtȚW|{ӏ ¤ut 3mi~y74-w+-o8uӑ#'?҈77պ}+G]Lݺb5^DXVQ_Z<>Wd2L&w2 Gʪ{ [}sÏ\"a9##-Dž7,:rsg0jl8;yU9conLxbS,PoQ ŔŊ ν*+$qL\,-)Q#Hn~ssg)_;JN|}2܍oy~MEe93)չaI g, k.:wJ۷mXhmsL۬օc?ոNz;\!o} жƴ9w gUYoOcZT* $\鑭;}j^7w, qD'rQ尽{?*H`m[p*Z2ruԻsgӺ&[k}}¦;xvc3}ۏ3Kz bG 'l۟AF3˷ +.uԪ^[׾l_OtE6Ϟ;掆Ŵng'~XPʀyZS>uNomxw;6ۜ=:NkƵav-nUv{o\W+]jv\ȁφ߽g>d2L&rVb$rp˗/_ '=ҹu֭[ns[;E5H܎/_2 LKbSOԌ ' ߟ()جxu7?|(,REcܑ`TZ\X1N 8&>Ÿx{IA=wk;4mРQL/ ǙhQ~+5nǹdRΓsxUSyqt[uC}zWo;txg{𩰛$SE-+j gtU k5zk;SUQNZ\bJEuJ}cᗜ;OV!Q4U`mSعy7~(|EvtOtuÏoh1 s[u;7}ʊr oį˗ܴߺ,(tMLN .}%6a@GfMdЀgynlk,F~|-Wؼj[}hE֭9aڜ7 > }C[Gu_pRd2L Jtg֘䔔XkE)pBRbu/_{杻\њ;886!_X|b Kq.vccn# ;JtT[O!SVl۱mOmЊcbJsrN$h.pxWH>k]j=2%;: 88:)8s{,+xtȩXFNL~n/qlǛ{Py9yMrV09cZ֩SN!SsBqYȞIc^;mݵYwfе?Z>\k3_۸oǯϹ3VIxM8AM7vfr?qrGꉜso FgpC?wڴ3_/77{{eöݫ^h/H-7>9cڴߡ_ki."ZzTk2L&qM fHeoȿBMhW]ǔiG4?YG\1.ؑ?1Al4|dU?ޤWcSCዑ~X@y㷶{lLNjG{~]QGW~:zi7e`7/Wӻ:W,`ȑQ+ՆAeo'yJ{WV~<}7arnWأV:uE;1s_s&4>gK)<~E>}:` uSn䌏ss\NDyќ?6yJ5mO{qK` hM1eFE Mg<7d}^q$a| ;;+ڟד6,`_IJΗ;ㅕTYs1( W~/_q5 Quk<5ekL8w~ M۲]'5o_wШ|Ū" -L&d2.hV1)t?k49:֌S2o٤Щ׎֥Qtu.52zkLNC G LsC+^!OuV oho35nz+-wOYZ]̲gڝ ̈́7t9X:YFn>{jsUR7]zޢajw<9jvgԄZ1ݡnl=uԫ{}K^x`ʀs_U̬cv|>+Wyr_N] ͩOtMPFodB]5jSr\>gY{Dq}Aόmkek;hF0ٮ'̵hPjݾ6m ofn u4L&dܡy27[4Qx/?/.+>g͹ep[~ ~yd2L&,j4OEW2r̻eʣa d㤷gWGʾ_iv/u 7+ eo$^ x N^d2L&tQ.uqJ*ӎywìY-?G\tҿ䑦z}zj6B{z5j?v]?YO4S3L&d2]Yd2L&d2jVj2L&d2LڹsglTe ׬YӡC]׬YӾ}{]׮]۾}{Mӌs֭[׮];M*ܔ иqc320K.5K M=6m+^e˖'${~ڻ{m1B׻˜U+X77~̥op^sm{H&d2]>ڽw r񲨯k^{;t5Ѿ}NTlMzk2.ŵ&l3SshWUFbZd2.+*'3> ҽwƚ+.|f>c+.ZC]u]|B4l7oQ<5|#;hC* c_Ld/3:-[ +20cЄ(#FnuSkv X 7wmZ+#-vA=cDL3k61ӗf [;LMח0;ux]mN]8^֯^,+-Z~'J~栩 @J!?m[rc&d2 /j|Gb|#&,ט5kx/?vڨu P~/q'^~_ }fă}~ɏ'jtS`.cuUptyxoNlH [|0iۓ>Nc2 *Pc/oBo9yR Ͼ{Mm=gCe7քM?aw?tZ/{t߂gRg|xFDŽ⯾s5r`oPXoyƩ``jGWlߐ/d2nF-Kr^xUclNyU /E*:|XNVFj7oܠuF6jۢiM{֮sb'_F1UYI/=mcmi; ۑݷ{ u.; \Es5*Pm{_[88e cl]Ǝ> ?#Fݴ.:> {M9^Z]$>SNҞPL}$Z8l9` Vԁ-yMuO\7-Ӿ9GL#xސ=|~Xwv O<[89 6gڴqmX] [aWJ׮߸}sM&dUΰLhó=qz}5q ƧwN}ڵhھ+m C!7[|e[܅V7tb3s';';iLGBO+ؚVξ_[\ƘD[B|5E3Ht^L ewwVs'c,//T`$ɲ-#2`mSعy7~(̀F:ɉ?έ[nݺu)Ԑg.&N[ҶLyP iAn03o_Ut{E+n +7WocS4L&ӿI^gsxƲSJ}>lHĵax֦M/d๳G gk>O:4w?Jooiչj&'%%%'UGU-L_; Ն3o/5hٌo&.8oʒ_`$=4cgxmy1劎oOx=]tpX9gҘ{~xm[7pw-{bb#yy'$%&]'m޹!,]+ovǙM&6l۽Ԣ}˾>MZ]>2c2L&?ȨB Pak 远B~,n>wn܁O ]c .4E$|q XoxOlingbaSiqW5vz[ z}yQ$Gy{͸Ěޞ>_AIo}kK+*q"qO=NԱz;{uhհf+k(c=w];ɀoT1AHE['>._AkjL)3{e;>k Ez:dฟ_|mav] R{v܏57vq Xmlݦ]_~m.[thtd2^;v,sǎыݳGYdhk̉r@C좢M7(:Ñx*k]q?.[r{55}nPs.甝G{s Onة볋K<,Fѯ[w8}ʕ_zr\{pG϶? Q;M_6oհ\o_x̴;Qr2ԕKJǺm߭3k̄*_gª\U/vy0MDYkƶckm>3|}%9l=uԫ{cYG |˱%zַzfh[#-^Ag4^ek s-7ZM۷<+d2LS}EVQk-aݢּ<ð쩩5~KrF 㿩B ٲg;}ɖ% gJ||3:}jy/T[1kN|e_5jڃޜ~x~3~NY•.M1G>ZySG>UFE ~e3{:M\kwyiٙ*BY@)ou8qS#F"6-:Y#W¹Z\;[k#R$>򮭇 θrU dy=fA ǯJ\qCȲ.^u?9,nOkϺG}3SRbk8?6Kl?p@d+m=08iN1/vOԣyɶT#|Gk`OKL_xq!CUT\&7w#S/\ vN-ڼ~My)W ͞l{D>go9[,|rq_.~{6.Dw7bC 7ܮ]{޿c54j6/n*8qo j~;Єrd2LKk؈ ʪ kk^Vt:yf3t:UZNH<' r≛4g9T~rhޜ&zt:+6w"@vW4]HyZQ֬~wHؼfWe"GyF괼kI^iub$̹ a})^]-cVscsB}~=;ۯY^\pų::jzU쉋-Uk`L]kçm:x]oI@ c1{,c lIZwOߺðs#_+۾eIHHuJ1_w=͝^ܱ(!9)6Î}GgܑWDt^L ewÇNNF\PPx,'ONNiW/u`k4?I WJx:±qnonџh~Ω~"{?{գޙvӆY;O!cښ\6mX*) [B3kVn˦wzWT9<7^;RgjSwm˪V]eFeFp\. Bjuc3c@m6/GeߘӨt68cW*z0g߷% Bִ:<Т_L3F8- psUzM7'\wϮ=[t#O= TyW|烿52K~߼СÇv-P3Ga2L&]aߞW~NG5}VE+.^f k_z㇕{s}<󯖑kTֳwI-!,{GFr.,YR2\<В[YQ Rm9^zn zĎEw/YC}-;*}]tL\|"qT+#5%:ͅJonֺskP]:3nhR5NJnxf;J튗fh)nOrM~^kl杺13mJ ytxjvE] fqBXRRbB|r֮U,aM&d2]VP$r(1MH-.?&t"gvӫWI&]vc8A`No;*+^=w/۸//W8RÚknAʾH\C00n+oni7/}>h4w]iy=7dOL1߾R(ӻVjb7Kiq:BȽגdw|fܜ/zIie3oN_Dĺn}b=mOB-Yd Ȏ^OzU0пΌ3w=d-XફJVZUTTT:og5nwd2L66l8Op(- V99wD:ͤmV;Otx'|e -m|׵Hon|￁{,XЫWEEEoVqq1<;a&d29#C@_^O8]G8pλ%:Ϳ+ݶd0黳." _2I 5zOck/d*kZ111<@LLLD&d2.G9oNBDָҚCV8񛞚Ȟc/+.wFa"3g^w< z]r>X\ ;WphVmL&Ifph2L&ӿ߅)v= nll#EN*O>6iy*YD!BA4O3>WR#8\pa"d2]uf&d2].$8Q d&i$;k~4N]=Z%N3!U#6y^z-5L&h޼yfph2L&ʯ@Dɘ܂.kvYSʮ 5>Rsv[N-,j?`1V&R#L&d]6@h/.?vaoڌJ6rr/+8e:cL8U* /V}=ViַKkgo7.>} P 4윒HRMrrvEguE7[ËrwtJ"`:=lfޕ]jdLVB֚^mfvU \U~MZћ0ƶ[{v>Fd2L&?@Qo/U7y9ꁯ_hs&zl^pXO0vAٛe+_X?!&%-56.3O i/{z[i_/5֓pͤ0r ߾/GO,|OWRz|s7vKLOtC'jU&jr'gdź[ }mIEQMr9 {ydk\{X0iԨWjoNtW,SkܗQdN4^i'DϳRfj\ $VCvMptZd2L(|os>zn|nE/@d@/o&V+Io ':e JLSPxb* fn,mum@i@9opט^{cI%{rMyo{D]o :%z(̿yVwgv׾K' DM5Uotg?/ 뿜~x˅xBX;+/] ׿S0ڙ%01bc`z~ g! p ar@@lcsQϧ~7sH]fWwRV9pVmd{u|*5L&_shSr -ڔ˒[t d8ݖ#lDvկ[`^v3ƊhlF4}ǒr E+ƝJ8wbW7X@US֞"ɍj zaգ/[(,rfoTjﴛ推o-vLh+mf𹘏<,&Yھg!3oȶ[]2bςiQp6Xw7Tsʭ/䕼;Nnh-e8cNZLVo*g-ŻX`&ƤmѶy޺_Kk\ԅRlϳnnGEEK5;jiP6/Z%_̺Wj*d wFö%Je7_p$ѕ=Z$.E׭~(/($ХUک '.7^eɍl:9qb=:t̟m_8a!xl|Zl=~ \dbʶ6:mϷlU˶Ҫ'%Jޖe˶Q9.A6Syn:Ȫ5͊AYSNX+wimv很~]Sh`,_.o|i[&Ս+;vbK>e9H9}lQ:[[K%kӁuCkNNkkFNM}w-dܹӦM4~cܼѦW[/s;sر~3mz{y)C;2b,ڽ9[7u".S[e1ޭkX7wvL&?~4mڴiƏ|yѫ2,Fjw}SSk$]RcG;*1zIѴetg߼"cȶ<1-~%>v1u[g#)>.S2+mM O?cĤܓa@=:c36=H2;|jc!gexjZOR[cOnc7R:/1FgK)c1}+EyԻ6]E+7hs )S~=VSKM$gܷD=u-W7uJZÖM3Ë"%Q&( ){ӛo߲Nvէ'ɛ'\yj;~udJu[tԦN$exb,͔SպSF)V[훿{r1κ=#%e4Ю~,`Vߛ.wxaLn{cW<'59Cm$W;6piW8pH#إڭm8k[.2}Ev1ugI s[4-ZbTָٞ}VY)KNewJ8/bw=5%&~ú]^Tu_yȩOԗRMׯ_LNҳFXN\#T˩G ES<9KJ'>|~>{?{.O>2OSVtfhӄ곇! E~টٳ ͯnPd2RߜVؼûw0ӶXdm9N9>S!Yhc8c{,|ᭅ`rCzǖ߱j=&X;uvMQSHlȌ)+陉,Q:r8WK/KȥWKÁUiljMZԌY4'էOp}v94!hG]_-n8+ăݿڽ+6bZ`O=mݦ}jsA]_О_h־|/pwږ 79MCWXxַO6PW1`=m߿:[|uFı]Xz Ǿ+E]n}[kƋ]l_˚]VzXhѬػ-*c|'Pwy9y>>F/:x`oO>ay<=W 6{5Kڼ?qJBVcۮO4Nt38Ż6j Ԙ(1eHcil̙2st"`fLzs~[0{;~{/=w>؉'1nnIi_U?M]gͰX2}fLS ^:G:{[x$O{LO]Uw kÄ3PmS|i d27>~oc\wSC2La]EB8[5l;7,[Oh{seNnz=Bqq"z?yoS = IioY(RY,2C!, 3de l  +ΆSҒ!Б`30ߪo4hs%9aÉ?eحYG<#uŽ^ R=^j#vdfVn}Ryjuo{w2b~}[Uhkr[מ`DYnps3wԵX @ݾeSLhC{w8ti^춸˭͙#^zw>|k9F|Oݚ%r|u-a~)=_w] l|3Bw;Ω1J)dwLwR)>ytķ@V4{*.֨ݴ#*65qn}&pos|[GKOusFoB߿9l\~+ڶ~ޱMO&_}7An9-⹛_,[ve_~4ƉlߟШQq5lo۹;XI}#4ܵ¿Kw,:Zd2Ly|u˞uA9W4^zl;V e#~ ǜ;F# N͓IkOm) Xa\o.De-b2%0$˧ QS"^\]GniwM/$',HӰNY>Z68\A90NyޔE|FGڧ̺U>v}eĈwOLkXxrq[ۿ7FG;*Oujtjύ{A-U aSo(\5ʞTϝ;ϕZG{OΉO=ȱCF?xc}׏_~ܡMkG@[Ӭul\l\e%@j٭J @XdYd ?"۹Jd2Ec/D|֍M^k , Ex#H3I dF~’*NLCGN=~4fqXv39GSKzF|gJL/m{O2eFfq'gO%=Ĝ1W30**ܝ[vim%mlTf??D+BJ̘^8G j 3MJ9|x%rF;9ˍᰉ~Vfʬ˿^EOa,>ց*L lA-Y! ׿}~soS"N#{N~f`=uġm[9Wg7zÐ\=,Ԇ1B8?bkgOgj׭ eNtUaĄU w?>c{pқ4iPs~sA>w [wj:E;dqBNǖ-wr4g=|vVsdGx7^5n[~<$+7 +3nD SV}sSacfG=xՍ?B'O%dKoGߘtC-,dF]QAoTd﮿qlӒc*nj8`h#֜.qp0;RMr4ɨTmYTJ6݇6:]Xd;gUu9mO-14o=}q֡8W͎ԻW/}eOWFw%y|sN?k5ol-_ת۶ Oﺧbw|5gA-.*@ٕs27]RtnU  91~껯{՚M[F??h߶uu{nՆM7\k;+%z|,/|5w0:Bk5sile&ikpd2RzRٲ?61 z!eN߈~ȴ!_x[;nmxvsάM/;n]=N+JΎ[Æ+lW7}tg`9{lra =4c;P߶xmgAzknZdɒ?vQV%K?\Z*7+kWP1 7>~gUK,Yd?v2zwNG~uM^a̷?Gۖm>2Eutyi@m'B|,[&OsTøFʕu>@c{iފ nͧ"sҪe]WBM𔪽7>~̰K':Pih' ,+]=2_P/]O' ?l|8q-|*س7z95/)PO5 m.r$}YXkYUvq_yctYm36no:|o=SߓMQ^/yrk i&~|5wO>BPFk{l6Şx5 d 6Խgm?{Xhe[tψ?%;tKL7MVW~=uv8s/t_qug/Mֿ?W~pֿIj@=j^tryuIƸov;4LM̙֭3wvG͹߳ܜ&w? 0U ػ?kN:թENs;?xgRȩnrȣ59zh~汛n<'۞ovɈ= FU#QyS7@dj5S\/}+שWplZt^:bj;l/uJV<բm+*:rck8K%J6^7\sHL{B' T3x|sJ(7vnUH}|ؕdS젳Zj qѧoT6l  aesNd$@vΉj=;Т9³)kb5K^σd2 :8}ºV괕{c,%9L(15|UV~& Mo~wCؚ~K޸5z%?4w ~;osaw2L1#8o fU3ѷ U- !Юw4OIhtתo=֌ M&_>iT1GJV*PB9ka~#zECnKVzkLf͡d2NCa)b![[\5z/C$Ϟs }Upq{TRr.fT违-_-DYpKΝ;-5L&hҥ:8QJKKrY7#q9tK P|˙]qЕA(&7#'jE*O/7+5L&LrRR35iҤI&Q3Fwҷ}o^1{]d2L Z'z.384L&eV&O89':#ruحt}/QPP=jƏ=j.n^\*3[̖ 2V'zC=4LH93a„m-Xǘ'wyQxe3%m2LsaͿ=zY9^iNd^\rZ‰9e9K UU?ע'ʜ {O*T}U>qq'xq./.Uyg/|NR] ^\^Tŝť3'kQ%e^Tŝ`J>ƚC=xН{c[os쿰=uVN}#_zwE+^Ց}-I=<:ALa^kw+诣U?TWd2*rDJ&evM;׀4NjKs /4Η^}^Y#}:0%Ȝ& {8=jv+VU 8Eg8@"&s4D PT)VNb@u$t0Rbq"a8XD"$P@yCTgt P\M[_ ' @ yo(Q\[^/"'Ҷ-XjTTJ,]>qRY,XbZ].: {-[ʩ /G$"͞(dCDP!HErq *)C^*`$j4X$tk#Q򹸐xI R F HjVSaP@<9*T0vd_$)^ ' ř SYD@G A(_u vr)rBX!Pʩ~"X#XޯWU9ȉOgXQ5Ç|,a`(.V *?Gu(v&q.!, BG#;ZZ["TpiLHe_46^)-NFהBDjwBw S@!$cMe02`ĪKz ^b *TirIH4׉3RRZ킒"zDʎ<+E_nʜ 5Gn*yDE0|TJ%A"󈄈ƸĦ3N|)ΰ(.%H~`\\GD*cDZ:n>#"cm?=0 J@ca8VV;<© @wݑI|"C'1/,b4WnH9_uċ!"RHn>լN!bGQ)2rpa?$})fF]J3DxfUsۼys/6nܸI&Mm2~ѤYf[~pdm3nKl3Hݎ[|o yOp}}u.{mPˌؘ|W9JdϷwח9kX+m 6c9si.i=u$uo@&qn/)P˒fp՞ieQGS2  IK&U?~\9j &i68rUW a"9ibqՓA#!R.LɯS.ɢ* b 9uԲX+A" Uc$Nj~a*Nf-J}@T`[Z[DV a]$K;)uƝP]*2H$P@?E,!^)`+P ϫ[TSJu+(uqByn I/V a8F ʰ|PI#ꖱjŪS tW$H?qk00$ {@sZ8UBz~]dNn-1qa*p@5|ԢP^:e؈= 4Gcj ذC.e-u a°Xeղ;xbTƐ,a=^رj#O]B(M.93&#ͯ6,8-?ISxA"XIOe'>zrT7!" P#q>b[V ؂f] P A)Tj\0LE `V[D)v>ХQYD>OJCXD H$#v °93,#-LBQdE\$WX9Lg\r F u[Ic4tLjhO܈;_s*TI;rn-!*E5 c(YScBTLK|G$;eQ^ݢ1.QH™"P㄀"T iNn485<ٵ?kVdo!lkVWfCC!#]x®]C)/>_".f6NvNv?Ӯ-ϟ}(1+q/1næEmC񓭹/|v؟ {?{5맜())))[啔}wT8m-L&ӥ:WMmHJt$%dHɪaL}P#M+q{JZü"̻j]ఒ1+:F/c=],ւdԊUq1rH!"PA* 0781`$4B0"lN> 8`vN cN9HD:a؂58$T1N|f/lP,Dv42j5)N.l5@ 8-B (;&a8Nh 1H!* =F AQ ,XS#*X81`TuRݚ-& 3N1.Q,-*3lD%)GbWF<)7Lţ$##Rۚ,zUg0.S c(@)c-^ PyDu۞PJypF#&_a8Oq:07 )Bq e#ĈٰC:Ô!'@t"!FQJ]e|bUe(" kP1^ tYĚqFn> a-HE +-"N.l8я9U]zPJ:"LS]G^'1N0D"!V[K4HnI|1B)"N)JyV4ʸv.#$G1@>.D|3,E!"]zTa,B>,ʜf< s°t^ݪ1XaFTgDBx." b4°BD!"i6qX9XN.\YTe#D;pX2.V8HTJu_Kt+(T2֝|V+V=|2t$θ "TDtWfHF Ju+~*Ouv?Caedm` $iħ3ꪻŒq QG o~kx}C,ӗx:sBKf Z6c@K"[xNLƏրvAO\.%\1~ڦ8qW$H:7?qGo15M_}g~' ɲ,˲!DYe~oӌ}@hwuZ͝Uֽ2Y#ש;?Q珪qś{ FC|X mv_W6Oy/rOf5jw볭'){Kͤƽ~.#(}?>}l&Ty݅wZxhsKkAy-Xs~!x#?Զ[s53[a U8|ݙ:OB^[t6J*r 1L4;\4598Q"d1RH"!$X9M: () °1.Ouv'(.9E@$NXy%LD0sUWH㼺G,F:#G@$DE.>!BHKcŠWmXqJsy5+Ԃ5;hGS 2 !F.l©aʐS:5S=~"{u\6L;r*h \BD SъUSZf$N ȅ#Y,- rA-uƩ# saa!d>iFqu1RbXƈX`TP9T6kn P8`è* PH@fJ9Ɛ4ʩqBGGS) "zPʈ@DH+P)DjTŅD)Beq"@D@UsP11+#L|iW'wt=1WM|#ɊNpYBO.ع/ݵ/93*oRUǟP_H]&'H>>.!(aݯ*-XKҒRTW0rQ/W[J4bVM*L%LDqGb㊧5O@D@$;ל>`nI|n!T:DR(.#61b.$:p2EPDPBy gTR[( B bܐ9PBD۰ZٽF*8Q80bmBˆ:!* X/ѭ<"k]\ب3P@s5A"yuk!] vN)-!*p D.>!Z U{V^M|R$5?m !D!Rp:HT3.Oqz5 ' tIc #0BHƚ.>,yD(C'8')Ś-VD a]+v>!i!"V;k"Ū-@$SB!"h kBCERrL,sZ Gd?4CBy>"f=D6tbĂD" SA]v !OTWht R0lIQln!# "q?H$ta8E,pR"cŅb*D$"Cn>dM CyK5r2D C!V~*OEU1FN1Dozpdmps7nawi BRKֆG}f`]D'|Ñx*k]q?.[r{55}n*, 6?jA0@SՃfsYo˟O)ӛM zlHo֩XiWy h3*u5kwŪ}T^̸v@ WM]";Uk묃]}, .9-z&TpKrYkZWf̫_}c5<5\Dwj4w%*oRUg}i!fDɗ,b. b T*8H5Ka9H02"T(Ś@NJQr:ズBTθ". 's5 +ڰ-v>irhn鲏X *VQ4u;^ #Zيt_v..lT<*CT )A'VNci:2 Tc7h"*R$ ɧ&<"ON Bv>" *(bMƚũah'xq_cc(_u茓NBD S!` KvNrJ `("bn4dc@ KK9LEʐh֭t%' TG>P>V X8͊U,B# #0iEUQ@^ݦ0T XMKTd ٹ3Bbݾ/2^e\!֍0b)#bTtKH"&8 G$Db$XD$N 8Ň@Xb2k6VE V|$GqÄ\U4!T rfO2%#`HTlÊu ּUac<"Ojc8`ҍgqB)EG,>bt[Viv2a#0"#"c9i_?x"aHh4TqKNn\8DD<,{e CD Ѩ$So+q"q"Y8-VNcO *TtG8n!Db\hv9D5!0aŇ_r.׬TgQU s]zf^3ʺ1yp՘"tޭo֋Nv+ Y@)ou8qS#F"VKZ")X(݆mvB,X,Sz4^ϏHz{B_ oW#ilz}X)Ixbc:F^yMU~tkVfuZ>0 -/$KJM<ՄL&^oyo36ꔜFWbkly5B.aČ u1F1,cͨ-IKD*TFcNQ QfLcx ,^W@JuKȅ)<"69)^֓R @"H( b6$|D!eT2'T&F;(hjלF)2ty[X%a)qBxcL9N.&p1œ(J4kLUVN% -q Tƕ6.sKHKa*v.b}%BQaq0WBX[v,AFx&!Ň-H !LĀΰ +FSc@X'|(Y,=+:2֌Μ.b D;HTBbʫkqŇ(>BKI|5yDn)sJ@bU&)W)P^$IX#+ѭA"E3cȆBa J Ѥʩ!*ź-@dVIfGḨ<"FgH..Ls|LN0jUʅf8(!8+W)u P9D{ !%VrSEo@*eG( EXr{SX(oVNU'HSoQ1.VdT;xD#q@mRFy&5%>#e8I%2VlTqt2t\#,"]$SDvqa |nJլ<1 xaf?5~~>'B}~=;ۯY^\pų::vF';_~m{!# v$^]ש|x0C;v *,dKLtּ뻍[ [w:I_ |ëhf܃_q e߾{6Sc<%9'3r ZɱL&TyJ?^ƚ1t1|xDeT[410KuKv$&L& *b(2܈KĂ5r\:xLxu+Tb H.T t(L1z!`\S P\~TP]FOFkd!fFc"Ň0C N. ˊUPTkN%^G$RprabSc##% j8Pn1Fb ҾpW Go""&LC6Npƈ>2>>x4t0^AKtU`1Q''^jh굓dS&/ pYW_[}W;?cTxlV&oTyJ#9O,FdJF'X7ExD-Jbŀr:Eb4'H~+zF|FK(CF_2 OV0޲ (Ś]`BT(_ڜ|XzXjT \ب>"1 hfsDї s"nq"&Pnl "+qb`x? A"cxjq>RBl UD4z5Kj0'",Ś=ۆWc a\ 9+3E<|(BT,-

    )v."c# ThTdk|#ZDb:\|ɅX5*")_uCdp \$K~]b͘280!J\mFSTu8Ʌ &>"$©"cDӤxCA"%HxѧPA\KJ$GU0G9C8`n>$c=Ou*nfrO@T9`1ƀ彺%LDN>B D.lŧ[DWwqO>j S1Fh ]S5lTt.kVyG(5G+XNN΀p݃C0`|6?}32[wyU=v&.Ϊ;զ.ږUg[ԍԍ4/vU_CuNO?tq7&k"_ohh.&O>(%ybjYXDXO*Hc7X>]f|Bzë@;ZUKJLZ/>$GgKMJ╭}*b=TkZvW귶#M?=tuM$C86d2]BTBy>#j.6+vf1FC#B2^g\W3Nc\Hy3KB7*쌡d#bcOq<&X!&bF⎄cuƕVTX9X%q><|0I5F3

    I%b"QۜBiFM DTs+V,CP G%I"9`Ƌ tS\|8^@:4u٨3z9i6Ȳ;HX4QbT \ ""`B6Z ud, 2$b]@4E,c"aM3΂UBcjL'TWn1֐ DgCLQ%&Bf)ѭ41Kj+\ĂbݖeqjfS1B7qSNEp5[ 2bIJu„VuEP[?+q߂ WjX!"tIKDj6N% 3@N#T6nZ,XxDDrFBC<"UO.(tc a"xu+Tڹ ^+9`b""}3axb͔z(W9tɇu(1B+byi~"cvnC^-!*(n"ֽMBy 4UbČ*+bX2hē檮Ñ8sSb"&.>lB_ך[#T(RmN 3W>z5Ƹ05[M.-"xDR a0f6+gH$R=бcfV]BB[oeLիW/\sΧsUl7oe10 Ht5zNf*O]`[|?fd2]f.]ڭ[3gv=j펚cB7\^AAAe}ճ%LE,LEf L+Vu!][ rN>B#SUKD5 HDz~"+A;-͇b"HH9-AcD*-FCA PsXˎ lj|'taDCDB]tpY|'N]|Ib)c\a LĺS T A*r!`F ,XqJenQv7z)խ~"!xT#`"2.T[3+C>XJP?Uq: CLĚW L0w(aݨKyKDxvrcLP 8Vh6 t9Q1 n>/,[kEDŊ !"#1IOĺJypfpS.I,-&"֭X)"B/0o9~PIP(B#QE("@уD.ʼn~+V&pe8GqNjaɇ%*n# ֌ ~㥎A"ղ8ƔhV2:кp FHP*(ΰWxD8`!"Fɜ& 2)Ś5].6jLEnP!^jvcΊ1:~*Os<%zV9i 8ΨD D<ir̿† 1cڷϐJ77}nB{9z-fG`TkF|#B!qn>$"=_s>9-^Gev4a<|Eo&Eh°G(q!hŇJuJy7##DK]RX9<Ç"TPo)^j "ץvź]cA]t@F4cBfUʐ11$&aȆU@CX:xDB``2PNºS'qv<6Nqq)*XJ!eXg8VP9*ſoYW}JrNz%DA$i (x;UC~p6,(b/X"E )'9mg1NBq|3kgՖ,X6^tObfR LJ煏o1.V54HkM7&3ּ֛*j\n5j55M:2bVBz^xR=63}WA It 3A1z>DG*fcfV-M|"C\mH_0&/mԖ5!*xNbF6$lq;e- l'{T"C1F8t 5$"Y_…7u" I1\mK+BȤclۗ R ^%8`=Y:ϴ񂜶y5YƛIs^xz͑7!Ѧ703:@?hϻZPejndd3)kVu{CG^D1ijx9!>'fA-0LI'R;M髢pQUʚM/ L:Й`nbM8C|&pշBtͦ7MQMu2dT:E}K4-QJF4U^ ;|ѣGo~y͏cO~ͷA 8giO/^wYܱ/g)ӎX(G ]Qd3$s A v&.iXW8H[^G3 ]tW3B5^ϭ]Ymb #MO{>╗Qxx=Oy!ūt$Z.fw4>3]ۭFuKS/-^'\ 3>X072iTU]B3d8' S`t3x/FtP9vlnGc̋bdv2'D͐&&9R3ޔ^6MSk/r-^]i3{@XM6L+TO\L<Jfk'TssrsS9O,ڢ^Fs }´bxS5>YVsd$N~-տ>SC>\UG?|ӷMO;@^z7>oә܏ ~ŏ}4+^wկ+޽{cY}>DD`;';e_7Ko ڼؼrrh=GFsj%S m^`PldƋլ/MGˢ2QmLx2y(GXݓ̍Lp#Ir^`kdIG6-\d=>-Qo쉢JlAb6uj/ 9YLlxfdxr]85'.Rnr^xqk3?I]3.J mxx>/g-D̆P v#edf՞hņmYCfÒL\fi/>/6m+b&dF%Mwo2i ClQMs8Duuƚ =ʫ,bNYbr2j敗3^̆鶨kc\|\ws쉆WKo*FsmVHXMlnVpTZRy9 \l<ۭFe׻x` )tǚn+,C?u̸:`sj6/g MB{!7NJ-QΡM{gG{l*d?p-DtKT95ٖMg[&/\,r) N9b3 rwDE}(*\T952iv`3|O#no"keAy90-07sS.wALZf@xʛ994ĭ ?#b6BK<<$jFh! Wr>C6`U rO};ŝ%OW^?c} 㫐?7`;v8yIIpWt(J]uݮW3xh29$$\lִg.Эզ}c42iJ8Оxr͑&x2 7MCPKԎȦ ]F~fzji@W;ɐB_"f:ϩY_tjݴ &T(}d S,ɲ폶&62ئT co֪Ȧ_y58b#{np7g DaUN`ƋÑ*'wǣhItE55y1s\wCIL~*13ը+J :U9+R/N}1v".q ^#.jB+iEuо"n_ѝ5ݞ8B 9Rtpp 6Dp4SzLS/#)K-j$u*dMd;9`-^>rsK"u%pKb4FMf>JYi:`HlJ@뺵'$ګt2dN=( rքў(7m?;[sL\[S~WmQwxEQMl\:d 7MzR2wh f&F/f$#[59Yx(1Gؤ-p%@`m|b^1ˀ,h2' "3 3 m.M0?y DN\Ef͊GuH54ȦAtj9V=j8itz Ξh81*f&9&6'%)nvbkK 5jR{Ȧc ӕS0"qh3_x]yɀsĦ`h-+f,[MyÐ̸B1g=Ӟ31+K|QM,cu}`NL,l$f6f./˜kM]o&9o6Z㙍JȦmcfP;Q{f`2 tB@ߞh0I*}j~jcd|*36d[&$imڼB/ lsrƵ`NNJV(طtDG%©M/iOxQ9І1 +%2$ٞxۋr<r*lvx< 9 3:;ZPLԵr*d I2!k'-Eؑ{\Fu]Cݬ60Yp+``W`#W{ї3",xjL4iQMj/gXW Я'Ln*MȸfH&9ܦiADy3gZhȄbx3vE}8Cj:DL'̩0bt!I^.Ya%+r.G 6>ZႜdUŖ":SK3n/gj&خxܕ"Ml "N~?r!]+wo_KQrC K{S_y|ꂧ|<ߍBx}---)%ٴ} _` sssO rh*?v7~cR.1Z><;stC{R~%ѥsGx{z~鏏_F )̅;"u~3~=E=xWqV}R<vp;!lc 볒:aHPKKծMh =qDliMl<'gxE'6ZEӗ弚\'LLxsL&wE LlRH~mQ؆iyB%6DWHZbսMDMڄ\4-^e1f+Mr8b`nQNڽ0M(#B(|h#T&Lm6)ZӝMoӶ4 n%9_*6Lh݋ r r/i%^l`fO42pb>Z` E&磙d.gu[-7^T^V^myr2}\B)Ӟp˴*/K֚* Mtt"6>{CuDU93('P*:x5^"@lČbn^N=B$j/f6CŦimZzAx 7U}U(f+'}M lozW4YRc8&e.Ƌ~ 9[ʅ1!C! m^3=j&"0%cBG[ƛrZoH6USsc4˞*eMb.ͫc3lt%:x@1ӈ\&,C9.9Bl4d- qĢ8b13hM]14-K|ݴgCbw4SEmu8`}7$q5^Ǒf6M.j8PeX!:r!;K{,Bvbp7wq뷜{wKOeɷ>c|ŏykヌbHst׿ im6+O7g9i'GݽO-+; +u7~ͿlTg)KRFo%S% [dne7>x3SS/>\y3{o~u3/~-f pi/C[zt7ȇsӀ`KOpO|1}89땣$.|)/{a_Ե_M}NY1'n} wpD=/\>rXg_M7}_xoqs?t3/ۮFzx i>ط{#G౏s7 !O+b`QM'6 !fgMEݗ@h;ll!hL U颈ItAbf,:f8`P9e(ZkxH |РB(%.Ѕl[bko6-rvGc$BMc4GoOmX"Ml|GѺw~~pQ}&i.5C:!5ݙ[ʅL4D_i: jxVYĬ' S?4mvj'6"Fy>axYTSO,d\s)or֌] )fT08|,ƏLC16 B.9QlviڢB>fD L0 <5$$ 힮5FfڎX_ζLK#1lgkny}io_=vx;W>o=\ e+Y=5KtSzG?r~x{֟}ݺUe :=-(7{\rZ]=w_7}Wo}ҙ?xo?i<+~A} < W]򆫞qyUG3DKbp{mo=x׻~~3`esW Bz5GMľ!>&c&@)7 rO :lH qCyכ`Tqk4r2 ϡ!>f}a͆&rX %|td *j/7u+$XU R4a KܒEFګT4xXDkCpG$, ]ʀRS65ə" 5QzDꋲі!> bƋ0)4dɢ&ɀbcf$w p9' ^0o / C"eM´%жx0=/g[:*c^^izCEv7;Qw/%;T{)  ;n|o|~a==>:h`7>A}+Oܴ[T{{?~я~saG~Ǭ}b*.}쁃75uuCx1,6i߿m6ƗU}^|.k{OK3. G_k7tƫ9mŖ윳>Xw_,t[_{c~,>vLk|ౙٻ14j+^vȖv9߶{EMOiU:QVFk?Իo[P_|}NZqh眿ͯ|'uqzGXSM:6LLngguoaxBԃ= /mT5.liF|t}wƽgg3ߺE]Oq՞r}˛k|?捎=xngm/~yxy}lu_A/>_|h!~URgh@ڙ 裗uJ48>2#^|)?r8?z΁7rߺon;'_ ;֜D8 phq/Tut'G3{E|Nk wqX}{pbsn^xۖ}•WkO=s~+x_}x&;tUrG.IZ,zbj_4,5g>ef꒖CBWɜD{`xU#q=s! YmQ 􊹮(+/C!bΛk\ j/B05qcf{^$&HobnfF&-\THKB7q|NS 5V mQ7$PKԥڼ^ʩO"fC%IQMrrQ CxS(UL㘙sW4Ff6SE[Te<0o9b Hd)L]F&rW4^2$!6r$L lfld@'D4^NllP͉"['SxŒ`nlB+<'֕D[ IP̍mҐ(\.ń8s-ګ7#yB@8Eio4lHZ13ӓup9ߐP̷E]{逅v͸lj1\Uyy |g層=uy_߻/}¶.`YXrSOx˗r<{-mO?ݯy|zՕ?Ɲ'ޔ9o^,O}Y]= }G6;';k8'pQ'՗O7?|,}wmW}qΒDe.տ<->q/Ů? /.]v(οJ0h+BE1/ OƥF.lӴi)Ce@ ->Jat&`lJ9RIWX2s)kaۚDvJtmez9/ɼ%L]ڕd6:͵D5YdcQNbfZF3s0Mh3S4ҫiE4mV´@7fD2וx4'g+IHt<-J ^IpUh&Y@o$keW 3IehTل#L[fz\GD8uq#YM3@`@AsjSCb]x0&c+xN-toJ:jڸpQ^L#RQݗ,s!HFO72֬Vн <xM IDƋy9j`ҫ[ylWTWdV$DĽ!Cr9xDX$v(}9 .QvDsG%jX(^Olq;sqtW! 'SGI{b:.yK_?_髮ӯӏgRSL"K'ۛ;2>V_@S~4{󖺷?B~NXk4}MsڍwZE=Oʗo}]4!g1]u[f;ս ߽弩>pS÷4hzǽg.r7Xl]nM{:co:?~èK->&Wߴ>E7߰ɒos2^y1x(v~s~yoco5e@ohsZ9y}UL?ݓ+/?=|'Gkd+yF;KG|GWr/Nß8?g{K^R?!Gӣ mt%htqܱ7^^:8KN/\2nb!!2|ӁM9P_Ǜnhy`.5nZ1/E}tJ{e@J"f.b {Upڋª\t ^Nl'xb39` @%P8sQG0/4{0fl;UN%L 36d&xQ;W +/cdv`MW^>$:  Q m^%\/NĔ33f-m*bHڋɞ,b(ٯ@7' Cͪ *$ˁI`VtKP;9sL#Pw:4i( q&@e(0@/3&=Ynټ'Jy[TSm^E"P[T=YEMlR{IP ;N~KI6e![E+Ei80$D&vrNKÒ;pJ;*%£w=_W+ufmv3=edmquo=! o xw`lzN<ݍ]B) eJ뀜 =;gkyOBot̻?3 yïxjq?G{O]Iqiçю|m@ۤL.F,i$=_}I~kܮyI^"&3}Y#b=wE݋NTaMJdĈѰq*ۇꨲ9O9/B]w?pErI9[-{$O^#p|+O?X]] |??~e]O~2lV;VWo5j:$G5Ӷ9D 33B/%b13AO1M"b-KB@ &+W=j?gꊪ#ҫ5L4dQ;9ЙB`@: }9c@^x=sqtg6TX{1s t1mY!WdndY|ؤ&N ;=QxC:bJVurhSOLn`dSC j&WN@t`sC|8yd)ˢ/` 'jaGTs!f135ڼ`+t릵[[&or!Q9#F Ӎڋ,Cɯ4FK o[H'd@ O:RhwǣKlt'DejlQMZ&B8qInWh'b_<$}׋j׌5 ̫o2^O}"+F65yU .>c6n:4Jӱ!Y⛺ez8{SY Ɂ̓URdƛ01cEQ{9Y[ I1;Ir=Q'9Uey\ws^GLlu 'KOlUw"f )oBEf]X-Jؤ'7.5":XΞoIt 3ڱK.7a Rn &o*{i2Sh;l~Pɢ,{'?/v!G]y/?{Y~k^vKW8i5do^)\yss=O?߸*}brڪ6w0ޟ߁_=̗ɕ8pu_bo ܳOz:_\]mˋ}>@_f|SN_?x{Zʯ _WU??yoɋvG+X3 nØE_XHA06YRИ mEšVnMKTԠsQN5GB;r)'ʺ]볓7#Mbvǣ-l2uqWphS~b5 Y&4 CrQΜג=iGh7^Meņ/ xj7Lp='3)9+F6-Jf@z3޴yUG a0f_m: De/mzXƴ#IQDeGSL0qIFnkVux#oǛ΢3XHrW4^Ry9Ƌ:ڢF(%:y<%tEfڕWhՌDaiLW:G#fmU&A<1&"VN}Ymֳe5JYTEuČ%Cf|J")pSG /&Ðf.:p^ֈYYCR1f˴bfzPh3,GGԷtf.2$$͒7^h/B`5 @XW#IC/мfi#6L{AN[t"3O\rBEhݟy9*j{e5-{±K,7(biDyz&܀LYpc.Fhx0=q*7&ǚئDXyB2Vu7z"NIv7;Qw';8pa}sF򌖔&]ƃR3R >xz#7l~у]|G:={ѕ dw/_cN x[Ľ bd*{#̓N]|ͽ!iYSOuw;⽿Єs~"[6S1_zӏ]C*{Dpntllzw| λ_J:$CQe}"~~t_G0_|鉆L/?g-  TtiSuC`n^َh[R$܄<WSOVn#fYX]kOZ޶km{nF5BaC{<[S_޴G+c v]%}\K>񲃏p2C_{؇~G_ԗ N~Ǧ'oj';yҳsW?^|G[ < ..%</Ntk]O,}ú_|W⒫^qG~ѣN{Nu5?|V{ϊe\Kz,ꗳ/ PÏ؏>oʗ=~/|ȟ?ɉt5K~ H~^|+Ǯ;b[^t}ME }G.`x->i}.cgvR=#ynsxO~4C<3/x_a-ş?|.{[s 85kӻ.3=9YW9<חڝAG̜mWNYf#f6%ǡ"Xz0#%%Kj1b =Q@׎u&Wugb7%8QvǣKD >%6qI9 ^5 xkSW^hnXO̶LfNJ47vQpܧxdQz5uIWVH0guOkpDX[Rw$M+BkcExZ.6uĶLngxeM*'=b!q$j$3yګPCn{liUMGVWGKf.L{N?Y9i<!"SM]|NGA խ$;bCD/.qeGsr[E[}O]u.;CMe6@[T)k)4g6BɦɃKeo|"O#7d13TߣoqݛhbO8uqT*j3g 5] M̬#&xxpNIt)זLi9PʛM i!lS1;sѡr2bfdʫ2BWȤ!,!Yy9QO)oR«K b q7rsep&0ݭj<0f.fۧyunB͐n#u}O=}$/O~Yz??w rulON_8ϟ*OxC_zK?xL^?Mʵ ZĻփ u_=N_ba'S,|IS8Ps`=ot˽y`~w^z鶗 Zóxg^vmy{^x׻`Yo~,{?{s󝠾y;K=<$+g_xe[£^ۼjz8qas'6iGTxx| ́&_T6]QIB%a 5bO!wDYx^z=;lnVʵ% CYbSFmt©I/ x‰ =h梾(Rl>qI̴'cntBdqµrAN=+ ~h0YC6xk6 !%T:5/gc$i7^4^':\S*Mm&XB2@13D&Aq =o)DXy99;t[.\$̤'t(e:49`=Q3 m0q=B%@M]y}i{tz٘!twD[P:?h qzKKX{r=0YWDtPs9RO̎4s]GHtcH CG ׅ(y@vֳ*.9tцoإ&AuAЭ9̅)D*LO M6qW܌LғeLH. ɍlXkPq9 -Evbn"E  zD]/{2'UC"D8"%}9 WoB'MlU@W#( jjN릍@E=2iWXW3k/*/ra)0$>(%vhƉ .ftj梎BFx`w۶G1>'§?N@\h~=I'='sl}=)r!=/:ح{_3C(zߟ`:?`3Cpk_5gSۻ%~`x.z3'?38tfZ{UWۏp/otk/zh&d)y=/|[:ۼnؤ'q0y;Ѧ'G̉) 3W9oڢbH&5 Ybcpl]2T$6QJtY.Eh `Oqtd$sdҙC(^deOdn쒄EV j]r1%513u;\.* 酵1r_mJH= f.r&#6mM\2uqµ@π@0$LDh'.PMOKjs?4Wf.xaH[&X{l_[|$MHQh!eUݭlf]je#M<`W 3@ؕ&n56rQWN₹Mt>uі9I$ySV`;kTV׮_|6~Eċ.(\}Zs=я~tpN_];eTW\qYׇNqɘ>xHF89R @yiH$MČFGʦne ӷVjf(+bnJR]Y[/bf8Ҧ#nC{[@jJ{Z3^.Ɋ6$rDãu_2r@>ٞx!'ʱM qHY[ThR:ezc.v:<\ϥ\xNΌ5|`` QG7KڋvEYK S"zjЈձet#yWWAPm*tx-c-#uj/Kj6pQ&*uE3偅$3DZ=ӳ#f;tc7M @(]^,< B C|],\ئ}QDL#3\sK'=M u{s<7VdjJ3Q/L cf =VWjtk=2]x%'LgY՝CBWvN<&8b:L8utCTr :bANGCK^J=$"%L6t~f>sQxPyeeUE,IP#CϤ%֐t9ʌ7 ho<ZMhW̖NDqH >=ვNY3!pTND7邚q.KOȐ8jKreM "M1HγДXh>*lԕ'lHn1K!l ,DM,GګK:*jlkpi/gSDbZg-Q3qۓeE[T~WVT(j'73'uBnOuj92iق2ncCQ=`כ&WSo^ՐqTc4 סB!x[mQ wDp 9EcdRLYd~lS-Mt*BF8^w'r4td)13{ptt=%y”uʸ)33b S-0 cHr@(7oO!fu[9"-Y u)]^n-^{bxC|i#Ц=Q&L\trƯs蜻+G~u{__?~oo7e/{[ZL`;ŗzyuJxӛ^*җv MZ{-^;–O3Wq z={(cfCUjH2fr +7^6^ԑfJ pox!@:;;9ΐJOS -s휘l26Ɇcn.֞GN]6M+ <(Wchs$//6/6t1SCf(\4!жE19-cM'7?m5sq[TeIk/7KrB 3 )񦫘MwEs#-j\ pdR/Zf? 39h9ve9uzR4D{.YbWC^ueFcDB&*2^#R4g>p-lI^{ը+D辜Qe5໢6)`M2prDzbIO,(]GVpGȦSם7Y.)GZAP!m|-^`CM2@fYl[TKrMNLZbsr1{-ϫD' .,4Jtq fT1d.r@:#Y;%<-YZ174y1 l#n?4;|n24j$ `S煍ZtE2w3sx_â(~7~뮓 GUJΘklOOٳ߶`;7\/~޾X9˘Y RcD*ٴ'JE?sQOɺB{\w#f/eM"fC!^{'$gdc, $H d% <"yPZ/ Mzސ «3ۢfH3M<dDMՓb梜74/ htG& ͙=YԈɖh3@Krrs8dk˴[̆`v^FΉ١zv#+8M´&@ 3]GlQ2s0'L_CbDg zpW4B GoU^mp]{9/ c3bfL6f&1bp*d0NM67L[;M. ݮh:ڏm:0٢lVWTs,d$-ybjZh^BLmܑUc x˩!aS(7MѴZ^P3CoFN~}ӝă_z`7DeƘ__/N@j/t?k^NsS`;ÃKWx 1پýc @x;|s~B4eH)3^D>24^xE#4ƍ.>8ʪMDh(7]o߭Fq+/ȉ!!ЅGlbDzb-Q <:s,GCO,3^eAI46I(ʲ+ʩMڢ [:kSc&{!>4*vC lEHE]Hɢ1CBo$y5#MZd5bGZ(E*5C:2&tT.5Ym.nUn@0G,u06MUEd[Vw|&[-]Ѻǐc {"wAl5@( U13+54dѺwZ-Vm|OrQ (ͫƋB1@W&$L~&xZzdd9];o:5i8:Ag\3XԂN\b"b&e:rtBzM<2de;ɩ ؕ3ue5'f0`#RΚ˚N+O/Cx /rHڼZ@0&D9v.9v颙WGnL18%4)AimS䣆xMI)k]yo^~. t&E[Tda"bVT%y1n}-OپNx7ޯ3GY{믿>s?c?Es q lNm|Ou뭷n?v` /9&œAIk3@W[6%ř8&n#^x5&(t3F+%8BD ׫M-0COz.LL]-Qohᘙdnd5&,"fB~`!zc< 9ޟGݺo]=vwKs# $B:kKDeeThР)B0J*k cLEAEˈbH% =4VfwepirXw>>6NӬD= zv=4X/,̀ 9ڟbYL7S\o>ܟOlj5 M(Q1WOm5{^.*Bʳ>>1@?xߦb ~7/;ׯF5jV^}է_8٥bm?;(^z|;NBgԽ\>=6` UlomvOLa&795ܕ4\} e' FѴi1ef猥uE>[`lT}ruvɍlv|܄Z!.6 =ܲ{bOKr1SW[>WwN7>ٜ8%;]Ω -2,qI.b&G@ʘLm͕铨<< edӨEwEILI**  jFMPdGv{X @B!ܥr*KqizsK5Ujʿ(Ǧ-JuMr_Pb\~zV+'jc MXT!߬C&w狛sz8-,l'6o (_(JyCb<1L^kqnyV(@NشRF2 3M$ ?;zƕem,'֧zm m|#HBާBS9wsmr6L*)V2X?>cфEm#/e,p"ڧB &i?ڟjdgXdϏmp'LsAoS1WcN?HL2KLXR F{kGqS<2vC-}*+O>>aEg#lynqY#ȅlt._(j5LM]Dlvx4-W}jSd@lxjQ(G 1`;V.k51{.u X B]r2]G蓝\Q#Hwg1yQ0y0"x֛XtC#E76j̍͞>= ?GB,(>F9+M"ӊ6IˎD9_䉟#"M\Aۊ \GϺ>ld,0MnhdMitAjßϻkئr˥RPҘߥrH4?5Jw^X*Ө.O&J xf3-cfjlX?ŹSQqMvhl[* u?0\.MZTb5 BEZw_Y?eS^tvt7>mǁ1m!*Ga+,UhS mͭJq|jٳJOt{z\>yqXU Dʗ?7_y_yPoY98p>}x0\yRT̩Ipk0-u4J4[X)`ȶOMEBĈD-0ףØ/o|]p6چʋ\zb de<&6r秦BrS dL@s7Ґ4`>7RS.ͅ9v o#K?;6]|`&7Q5.6ēNLi>sMOn`Ϯ}46IX =QAT-T'6U lM.?rdjMiǙ5嘻CeѸDQkK)gr<뙚j#PPDGĴwMyouOP N>))ͷV=;i1Gѳf>Vymu>O'}Xulk5eWOħ={wےB~{&Їmğ#g 1޼q_8('#ڎLwZ~dp6z ~y~ O%8,IDATC=#iLG-P<6~LfTKO,dWt0ցϣtSMSlǶKJ x"@4rݳG:4mQď³٦2݄ѸUďggs/6jZa},Jp.=QSAq_?{m8fӗZM98n ?c}tFOvߨt%.blk `1fcӮt2MLEwlz({v(: F^Vi9$s7AT`deWs5޶[GضU#G&\""fʁM&U=C2I(P͞mNƻmׇX; Ky֞u->=e(Nmd(&MXR (v_ Q,Ź Q|%8؝Vss̳֔ &J!wl5L/|M֡fCN/(*Ԩ$@zDMc2]rױqs]~&Y&sR<d+/ڳ?yu/4(J Do_}H"ϳgĀtIP/blϕCQhb- x6Tf3nOo'/K?hn_o+?ώ*|U8_0~/qͳ%UW^٧OvLF(M0U=i.A4 FVYN~`{G'ס6 ezG=m|qS+Ta`pZ: k5tV&6 xLȯwcz س2ȷ즋vHvH:4#N Pidob |`ᴬGlYR̃j-a0i6Q xfvsGGC{ź$K "&WPԔ'+۟]&C(kr;+Wn5[!n{ݟpXFצ̆1y,NFMK;ҨmkqƂg=B Aoۄ.ߞ<ܥKNOayfzv䞷7‰ @ϖC}C+^Uhu]H(6DŽ BN@MX `A!+xT}rrK>6+0OLg1Ce(]YE΁. :v}T=V zS7fhKq{Dgj\&y `,@5\b6-ܲZM}9h_lT(&o``c0=# ~dl; iG?/xvjG8Hn1V ޥ358Ls5ܶ1kG1;*k e}*s#: l ^Vn i~ɋb_~VI!g jEp`sWļ5i`mNq(gZyČxQX>mp&6:TǣJy~ILm t̳{>s5vdM-udnmAt ,h)r: ʙ)eEu lh%`e`\O@ 3jҘv Mn`%g)cq2<бi+G'vPPq`$4$ ]r S$,`ZM iEvHEǶC,(nR/Z<;_[_~_}tJ I(umS%X(f#+bK. ǣIz},&B~9WÔtMP ȴVgP~BaX| /Ob뿞8p_/,E[7V.Qުסj y˂%,DMlv2m69!Vvo0=go Հ[`$#v $? UC 5jv&0m7%SrÛr[L شc2{j$&ЯF6mri\Wbr/QCE ls>6]K?m*tXLwmdYbeJ ?ĪVӐ̐'{2eKs NGœizY^Ui`s׮[^;JW x 'Ktak5}6[%ֱmP]7r;|qL&%-bAaƬ V(AbܺK׈RBTw@4m֬J YڦBC:udK`^idk5EQwܦPQyXK_F7jr*僨ʋBD lnM Ĵ(jZMTLWPX~ƙskxnwIR9wsjTg'{jD+D2Mb nRu9r9$s],^~yC\.h4|/$ Q\8]߻n8pO-zy>l1W#R()4obUMnB`Uh&֚\7.U6NA(;.'9ni&צK=luAoUcfq|FXO 6wuh>,%DibHv/5XlpKNB[nk5)6Y}eܑM.^#sjГB yȄ (wVsvJLX>jԨI#?𫒼nԸ-uOuE-t$uolUb>-/t]uU)bbm(Nb"SA EW6ô_(oNM;C`{x XT'V7JB^C,}0-`lR) ^YLL#F j0@R>tg|yDYK߱ ,=TzQoI Bm,2``v+?@XX\#.(Dpvvd3Ih)],#~+Eib}csmA^4rHfGoY sߧb2ĎLg(eC`bzOqybvibYݲh(QP?{T8fb}JMP A8٥gMnb'w/zF/h0W,>gcjmBs0yy{; ._o_u?xzz|䫾x㍧?p}ْg/Q,x],P,􅂢j}*OJ#>.9E)z4-hafIc-m,VY-ULTش>~1b$rmBs=cq],'Q&wu׮ ON~dݮRӐl>f;cB.+nR U\6j!jՔ\&63YUj:;zKhOEiش'v0mbAt6/* :LgrDm>B>LMa(,8ףg}囇jbM .2SM*Gi\tx4.fd;&s`ybXPXR8YvXLMR@d,$$14W_$O[̮"djtMlyBN=ÑF17nۧaVMh.<:JOr ncŐ̓0/L{\Q`Չ[L#IJw=۟YVS|R:7[GLK3u۞ڶP^q\Q!oB&wdc ̉ik5 onbF~^b7jjc!좐0$p/"Llm}um︵u< Lwt%\JwAx'&Qؔ*(',ۡV?}/ww+M_J)899 /TUuuuo?ԇ8pW)M?'~?Ugyy+$K#Wc2𱟿]v QRWgII4Ud4u_*X @ w&yKzNlzQȋjʉM<2m0ĪgsfKӗ*TjpƂѴe&J,8}0-u!(F!ocyg}P$A/zL(G8=XL/cݖbBi&̙򏧹BޕTfaڥ2jLlnb(Xe@Lyw-yȂDb`*)J OvdYlֱ:ҭF>mZtbZ0` Jd ?6ߜVT^NSVjZa-?j'#V4mcBAxf9&=J(7S{f/+Ӊ`E@/{XncyfXfS>W04jڄC}nwQQIXxOeZH+ Q;B Rd\)QjJ@ ꓻ ]]v8ty}8~m֡z _(ul.ttO-F/O@Nm;ӣ) flOֳ@* y8}|WaƀAո}F2V]t~᧶={ww 1ϖT=_~]<Z>0 'LǦ{}:E7je e5LB=۞ݱi>GQSym,0*49mIk j# + x`. =aK&4Y5%<]]&9w3ӣn+(I?w[d(<](E!oWӑMF Q L' BݎPPjSlnm'f?$ۨq(DcE9wsbڅO>]S1'UG~j`Z:TGktkJe y/:*(J$J0BE<$ *.YtPj_%MnsC|"x囂B  0LX:K"_E;s%y/jXaisƋ rn7,F+䜦py԰T!Xg(*଎Y3574*tek"}A&T}T}((F}iЯEalT*v \ #k$lڑ*0#?gx+Bq'^6.T\y`PMMSIٽX\W (Kruk5A&9Z[kL3=X^=WcѨQc"MA&DcG۲R6jG~Rzz%8>{{CyW8|>>p~qYl0].hBY衏v&Z޳ Mݕ䷱4T T! J|9]_Q$">Xrۂuh.,{$ *U81uOl &V 5ܶm,̶YG\Ǧ+=%!Ac2F\lcɀ+]LM*'֏4r΢MݹLdxZɍl+ydC t JY :&3?7Zޱ 6P&mAeWwKI_1r}?g~E{+wۿϪm H=??w> lI3xW6̂1KѴ@BǦ˩fo0_$Ի..Vzjc]Ue6?wvj+JpK%y\07i +)M`%oN#r<>Y~a&m*gm~ j3-(>pFM'z;ބ*M"s5޵}*MPu!*cyBQ'%)秿OP]Sȕ N~KieB&ֈ]L>ہmYFM,4&30;FRAA䆪d1©m5UER],Eش).GeFNdhxs\ Գ}ӯF6߲$lS^ ŕՄ -r}b1Qw&*(s7Uw& h'Xl_Pq*X*/֋Բ{]l/ m}? u("KU(YEobsJLGe7QoMNbd׆}j-%}JV_K'' '8p_}?}~?Uz̷;.-z/r`U XɼP\GV8"}tA c i`Z"*-Fubz4k5!&TUN ?r&6P;JyBކ* ]:T9qcN .lJGq`k)R٨P!{"HƁMIBY:6{0-'։5&V8b%TBU| (MdǦߤ* $f{n[ pfW&6uF6QMn˜a)l:pF!߳pO\ّ*JMYw ɔ N7|; .>7==F6X+=)MeTB.#ȹݝmBņ p6VlSI^ȲL՘j5݄j˛X!֡,(+mS܇`ʓl+]B …mag}>nۂB͕&K nukUgm,UViބM&*4 _f5jD3ń w:;RC<ؼ9dgh\>XlfXPif0=}bM>Ry4}`u 9jqdD=]*j5YL tlZY@x;|RB~]cvlR#D(0!1m*ס*{JٽB>2iyFMKLofRҧdAq8p_~"f]ww>ā_QJrXLm*}(rj:o ]29gt ( >=[CC=fϟ=,(:wܦRaD_e)=YڟLr\:s}*g}gy".JKd`d]@y͋`lACK΋4Ըнh0fj'~1EwMt QB =|ҨR<5{`( r#8LR7r7^LtpBqiB)) V.1mBXg˙$d(9B(ґbb%^ZB>Ք_͓JK s5Lb67y}<ΑtBmtyݶmbu:Te K@g;cBuf7G՘&^GZO+M+ G݋`R<6(%mFYMndƢRϯ}5WwR/NAdz̩a~ TQS½b2].'}6c2k_ɼVATΫ@R|bisa"KW]8mX =Rϻk46U[M&o09-dk5ldsőMq&0E˫`n|j]/Qs= 6juIFMɳ^KLDVPn. M׾&},M fjmX%6nZd`DUv\ޱkKx0.7 Ar;T>JAA JO,%OElbN[R|<.r&7Wc:ͩ[Coǥ+۝6rrT./5M,1Y62Г0u~ /Lt m*fji,_`u,Ԡobcxօ*\fHfkߔ,Ź|Y\pQs(35ʋU*̮KUJ^tƥV˗ffjBD91{Ci ?J!c>ъR >;ދq[F7[=p^p~ࣷMxy%wQ;gy'%cjڧr{|dm,kooc |b[ciI>׾j 6ےK' Mh֡ކRYiEU,}*NlPjcT|}8|j0HQ_nCi(e~Kq' FDQ']aJ\NM[6סB ٳB힥t(~P_*4X(&Quh1iQ,\rDQO&VoJ,ЃO>6by9 kk-ZMCشhOnC 8#的6Vld]֡~PwL"x:;2} QT#)6x Bȴs=|M[\FQs5`ʟaǖvO|B >U`h:$1e70m7 Pz8-F،lDoSU/TXvi *k+dĺVʷK?5q΋ س^QاbdSP!?MIgJc۲BtjUPسNјd&6#QFks"qp2Sp:z'-?\`&֕,MG(c2Y|{b/5ME0'Lld c%'P-̠0)|'`Z )LN P_6QT"ȉm+֎‘i?ъR >;s8pӂo'~!~C?j[Ae+L&Vw .KCq`3ףEN]єFMZ!/fzAv,,Oq5!t uRN|ς,Q\ K/TCݨS^!g'a1F`4].{VRj `1~x0O~d KzskԘv7ەd&9ѴZvu䖦Y~LѴUhxktyQs=CDTxAݹz]r#͐:TQŢR>[ wzgn?c\mtKeYL=w %w̑n ũ l5pڧbM~x{Lˋ-ql- gnsF>ҭTӤMFqQAfj\~Qm*,\Yҋ>\٨Qc̳s6j{ŦR2@߲!6 ʳ'Ճi%QGȁUh43]nSY;݆B#4mQ##8S#L]2i{CqG"Rd< g(߲X#HRzoy4>9 Ew tgBy}vJMUhr;%.Dpl[c7 WjJB%e{"[z֧f%4$;1~jFq{z\>_B O?yѫ?G|o?v>NCKW^)(vѽ>\89ɴ[n;4ym8a!mo| )~N#+w_rslOm;WxwVJw,ySƛ l\S٨)avLB,4Vs=,PRД5*8//&6[Bi4͞[Ga{rX; %d(f[n c26Pii ͑iv6,xS T\v{U1XEQ]t0ÑׇKAV)\6MEJ 5hJI&?c ev],u'k(16V0ZSܹ]y%(Q!skQ!?Ǧ͹&TX<?y}|% i>dm*-#gC<>O63=  QXM*4 z9ҐPD0k>h)"-gj.YGʂX>WJr `z(O嵯ٹv}sXMuڥrd\Q. O}*rVDBLB.3=,͐W/0(d/z'i邨M Gi%7iW]LdIBױys:<;cĀ#b8S"oB'uLo5f\V!74Vj@2>6,~ygODǧ={ww 8pӅ\O^n?w?w;;~?M1t++c?>PRy5ZOPn\ yPQ;@CcAd=fy?γ {FR:"s<=<*矢@`d'WvB'zOd>5MA r:4 }rk_ʱi6ٵxv]r5Ju0bm5<ܶےB>g+-ub-ofzZ^cB* R}\>BUhj56+gz]~?ċ+?s70m~k1ROο3;ˣV}+@1 ]NG~cSib}hT! Qf?S*[ڣgYV>]*djUB/j` |ϊB'M.\ `(d0J2&R 3EmC/AAfœujP+ݏl oU~!5!2yQ Xcxo~~DgKP7ζY ^yXʔ4LOi1W#\*O5f v=srǭztۙ 8$PJM'L_e ٷɍlw,eOobuӒ6 YXb̊mi@ZRv'v˧BqZ'6Cc֑& xQr\SA>}ŀAtXG~NO~d7|զBdO^' |<ͳV:6@z<-߬>pP]:0*XoLfg)M 35Lf(}\`wj,3.ޞ^,,E쒛ѨK f{GRۊ.ّM\7s»XT#Hb t.F+Oli|ݶۙ'1eķt&#ׇ?1_,zWЯ2>%+}3OR޿o||?GǏ~8p!_7;?_S|ŗ|O?Zq|w|_o4-z&VsUljGVX]~;vסf&> (:L%]*lb/4A~l!\a$Qr~SvbHG6/: 9o#"$IT7jܦʋdi:iev%AV˃fel%EiLA( .(:L|AT95հԃpY;L* ?}j-|s+g*8oe,ynw?#?Ҷ???~{8p_kkSr+ᏺ/}g?y~7W 0~ o?o _ohcqnw ıQƋ>7;HEB~8-NLCbڧcmOn+C)ʚJ(+>fאIƳjT)MX>2LYhQLQϻ떋j.gv?ȵ4$:sE ST!3=\Y *5-t}Astmp;qCyjە" *|I! Cse׆#*ܲG~N>7g 82$T,0bqdGBxfv A$496QTf4^.۾1PQ?y850<ޘN@[IPFMM&:9]rSҍX4z,)L5"\RϖzXCв=>m(#\yRRp޼ E؆X F6t?WSm6Zvb1 ]VPbARP8}*dZMAT/<}*s ?cMS&@ S?\FcvܥbR8 m* OB mr P"Bk=ۜ*;9n6|dQt0W䳳n.·d It`gEoBj&֍c $ys=&&pBsm֡n;ゆקldXFX!of(kdKP@l(~ǧW_MgU_טaa>~Bx to_TĉUfd }6l5(l5]z*7zb̀N,&G9s])?)(~NnVDQ2)gogs']*tju+nnmE~6Qh jDžtO&9ArbZ^{X93=lMSwt.9/dW_A#{Qձiw|<-ֱAtJ.O.]NGḼs/zaFMQx`ZNb3&sf+j*/TM嘌Sq}tcۖL0CapkÉtnvA:,0= D0F87犛 T*ߨ1XOC(*-u.A^ɋgo.C Ǻaiy# -us,WIг24?4iٲ;3F^}d>WqDpN~HV#Ր@Pz獚W\RSv빘f, o']r =$tnJ'ieFM>ZMm*<(( 8 D-u?SΦKV5ݲFM =|O:4c2/+GP&9sF6s5vx+j-'~n)nkD]ߕw[ Qh6Rh'1Bu&֛X#D8ouoB_vv(S2vzے֡SVm*PךĶA&VC0DeWwKI8p }[>p}rnbŋUʾ5MmrS.Iг}oe!w*UZ6G~7Α!o6J T.4+彨JM 0BG~ kĂT`"X1zֻX ݷEKgmrbN ob%ǀ7jF.r&m*n/2L}!lRRHv&ԧLBIBAԝbE&ԥM 9 &SƲMtga~bc2.X"&oc.kñ-dŵotwn@c"IB =c!% 6t=˛\Rbbz]JOF% մ==ڋ2ą G+/MwvRȪT~꜠pZ=wÂyb0.=[G!fnCEڽjdCvpfwIԱG/zplesA>{[J7|._{o{H<>c|2 ^~嚼&@()ڽm0nMK?+(f…5qs㶹qGشTbX&^.mr'fo l+'ֵf *̢],sڱiOL/AhT vk_GQ|ǂb"0%h:'vřl=dd`c0} EݟV%< V8Qu&V`\}?be#-U\GٴɍlÌoMNf8ҽD 7x1-ﭮdF'EX}*pfͣi1&3Uhv̅S*X0LrBvH=L?XjHBRؼ1ln;LT2buj]rb5jmS/FMvOlۨiHc$]>& &@Ue[_TBIeiٌɬC("xjo60lg{m.4jȹtKȗ~PLׇ#ӎ_8s9HVgP8p^H.??~ſ}>o@?]P%xxjs=DQAԓi~j5l~Y]67>66X^ٔtBͩcM兟'CucAÿoG]gz_!K55jj[f{gԦ"xў[ ױpGW?&m O.t;lni}*nB=ɗ*(^t8;1]\viyugGV/7SѨ][m*8jNŸ2UVXPVTބtf?${ :ݳ73=ѳ:3A,h(=ou (zR%qS^feT GQ:Թ,<}#gplScMSlǮ$_?6BPpmYY1.P=osH6[8Pc?r*+n},5iJ^ԘL6% nBSن2SW 2=l%#gM 5ȅ%&8ݑ^,oԘ= =>Z1 B7*(xքrb,4$s.}(rsz"=:ϻkBMnb3/R /꒛n-,C\nj],Nm*5$MU^8.M?:s=܄#ɓ0ĪgMՎ(Ա}sWn)AVz|~~?F~<[R ^y}*>'Xl^(ױCSQTIoq7jjBqܶEU`=B])7F!DMճ](5mc;bs3>6C5ʅ̓i5S*}*T4d]o:M?BcaPP$`M|$t浚&=W8Sc!=wdd^|;)jP&V&VӐLݓq''E׾ եf<;gY(2R*(<6mĺMn>F'zOTZLmKmEVS|&UXfg΁- iL;+GzV"uG695>'dQ ųewuNL?֟؆Q\zuwmϢTPlrlB狛}*j5xmztfvŐ̙R9.[v{dM̟6Uzǭ5xUH@ITA-d5$Mg{lZMs3ٛ#E.!YR~~XQ:vMtd\cYPTyzviSb `vl'ֆX6 h+׾RC% RQVJw3;I0?K 5$!*dl|Vgnsx| '???; >ӥ~y%jG6'BoG&"ZM dx\R`Srۚbuu 4YL`1恽>!ٞB+e/Bq٪<" `_? F /:5HoYR!Ǧ듻uhj_y%{8-6\],4r/Csb,4s4ӣޱ;nsdam'== |?|C%;oɳTLN<${Ra!$tXm]nGqd}bZO#$!#=ﮓ3ۥi d`݉dXpgRե]JE}K_gUO cӖ ̭W*(T49s=tE},ìOv?8q vոe].b2X>MyF4ze3=vɭc`\llS$|`Z'PشR 7,lsdr`L[j}6VKt1_(+ 9Ig0ÙrvXXєcOLw HwmrBe)H( ڳ'LS"sLfi'3-FP!g =CLQɳ~8-gj+(^~d0vI.lGۦbBBa~gœ7æTK.1V(7nxj,(+nj5J۳ $.ǦGs~mȊOt{z_4|oJy_M{%S)O~WCX8p~ٔ/}{zIoɯOt_C|RI3xWfjBE zsfWica(VtE|^ebsgzm7}Br`k(Yaި@.MĆEhL6>_hd6FbY9ϊLǺMB+Ap~ybdSP(gQ9 8-&<ʘs5Sʡ7ާK lˎ샋K8g}f,x[ibsm,Bض=f!ɴW6~fg| `"|bc?_: Ul ]*7d R#m,F!!#kܲ[6sMJ Hw7Oq`Yc:Vm,r8=Ws7gf ^;|Ta^A$E݆IguMn*B^:5j2ס1F6?RA JEIR4[Jk#plZ Jh$4C9d!uhc済K4ʴ++d0ȖҝrK\)62Lk }2}3=XJ#9\sB.)DQ>VIP#_&^َTXgvs=x`E.7w5蕛DQosdYsyZ],`\YI:LrG(wW}gj z}8,1X||<)Xi #\FzֹUOJwm,EṉM.Ƕuddt}NTՀ r*N7QpfqD1Ur#rxʋ~K3+l+%eG/=?~z-u5~ƕ|n+zϝӷ$@we~j7'Խ8p_4 -(ܵf;b;Q.6m*]*ps7NN#GӦRplk1&ӥ+-" \%],s*I4@*&&((B<1B>Fc6>C2R\ [UlKa6VlzXP?>cE5YLr}o¤gs= 0A#Pk@Aq(`2E}}K= r;O U635Lnۍƴ.wmBapnXA,ԺUlOl[RhS Kes=txDQ~fK +Hř;!wd>ٚL ,EiH(fe\ bdXܲ}, .,g0l6%R/ɷM7}ڧg;&3!d3#Jȵܐl\Z~Gم*)S5@ˉrgv7ÉYrimYȶݍlJ=k4`LGTNٶX:Y:+0kLs=Lm*(76r xi0ͦ(A_6Tv M.Onl{hUEг(GfSߧbf@ul&j܄FS-ƑM\g'2{?;1c}w 2B|~*>ʻ}?|E*=xޓ>byGs[α?_|Wkq?}+OQ+~?iүnOz8ps"~ nӳ^}U8cFB)1>uj?],L7q2t'/ jHf`#(dC&V~kQ %l&`I0 &Q1 TDkJ0+IpޜkqNB M|Aщje!Y wt߭ZR)ס~ȀwO^&^nBDIȳݥrjSjs/qBq{f|uBy;0Yýn3`[]fbwwPPPi#8UcAK 渲%nBqƅ?wmUlw̕ۋeAqSR S<&M(r~@U*8?:[NPא5]酛l[^Tܲ?|e,&?Ǖg>sqh}#կIwIӼK>L!8p7{->prr6={CP|d(ls`Jq 7ч~(D;3=-7x.+ݶ`A\f u*)d#F6՘ es>J"l B ,QBMk__IbxvH`O:4x4.udX>v>wֱFHw&Yx9uWDW;;L@?m},´Qn]1WUSuܶS /tW+ v,x'35X7qE֎-6[6Xᱟ;~XqrʱNB ':YZ >,ӝ(|ySoSu61UD]d.ޥO?2a(4UŸ˩-܃rK?;,l= _Lոc77fz̯5QcbX_i{Zc:+S6! J 8ul֩٧r}J 8O-+7yfs?[f{'BkJG}b ӛlbm){?y#(jݦ:FQ%M[:nrl[C\`ZnG K6xc8fo Rؖ``{.Qh`k)tW_~ZسJL}|;X&Ldv" AЉocuW(*[1]4&sdqv&5V*DVa:Qg++5ʹ%ϬF!xt>S٧g@xg܉?ßoG+;ϝ0[ on=w[}n+>÷J_zn qW/to>[^sŋBvb0jk],wʑkTRYq{}P_(:4(Trݘt.U}*k SZ(K?!vBƨD+ǖ(r!QP))_5y(nXj#"F6~+2 >r,<{CiiV;2bR $w@*S=V-cS1c֠f!m1ycv5T;И42CuuؼX^5#O/4Ks"._dG+?Q'vʪ_1yCIV*au&ԻT^TQ* .VشeUoҨ:6]*˂7љFMq'BflY~9[&G;XXp(0Jʛ(tfǶEuhֱұɪћP[ ٱ(@b"䎭c-_,.zc<٧*BK?ݥ*O>9TSdWo lRP<.uV5ַ$_Sqe(l/ìOű[LWa r}udZɱ~m<hgfT(33 @zm87jo $8ÅJoWnBSS.,\P(DM8&Kd.UD(ܲ}* $2ųqXmc;څ2"$8$#&A֡IB=ۅ7~k\>}^)SҟW_??G'u||?g~1~n+~ϙPR[?"px>U8p?ZP|yWGַSD'˫Z֡icEEQ 0ÝؽA1ٶDQrD eHS@O;2{Bm*_bc)``rI05$L FY|˭`D.LC{RslbX%C]* DG *0mbݥB!;6 гv Sl/&js[.5DR0U={1!0QcORw~kqnR*LdG6K+(f:B4׽cm(`E"ܼP(Lr h1jSOm1nbs&X5p6\' 1#ӞC)vS5\]䃨ul*y\N"ςr3=6WYr%Mnֱ^GXdI0QR!!+0VKeȴNěhJ/jU m*QǦS( OYKȴnC}㛑M6]hHKΑS~o}* %uZVSڥgS.Ie).,(9dFh'fB(WR&z1B^>{${M3S٦P|.(/As{V': ӯC]&49D|IM&(J ̩rguBOlfRҧd??De P}Su~'s^ye_ԟzg >f_k? z_-﷾L{Uw߶}۷}~7}7b仿?~oƧ6-|:~'~bm67|,be_eOo ">k Y @ŀ9~ǹnB>fSm,on4ױ*7Yȴ> y]z j{fHv\}_o|J>ʱn}l[ɿN~MzQKmB2U+n´VDGQ,K.+9S5j0gk1YTOո mKv *A|C2K?:= +֏b̶FX`A1kp`C s=t/*/9qud(' &@ʛ7ǣy{ ӽZ5!Wܶ~)r=!U4r71XV~Ra)^)MB)LNL\`UP]~Y ͉`3?10=3]~=QҾ(O#+Cie:O^._>'^w#7w{ y!w7Hy:¾ [vrJ_=ԡ8 xGK1fXJPQKJ wF6IhF;:IM6V.dslّѣzѻX5MոLW~zd[gpgKJ|٥j&Lj c:NLهbj\Wa#4ؖı"\+ݽ<3y:6#[vvqJ}?;vMZRk fFze eb8ݥĐ[~v\wԘnۍ^iʅ1CW_Oʴ5zD2ל.&{lvU Rg[#ӕ*L4zdž6UQ*J㕟hbK!(gm)vW܄I%]4D._oD=rW *KUa[v'5hbZ/M7՘8mOs}HVߧD_H|@gEJdX~e^Po|'u*h1ݿ{d]8p .W̜>O03"⋟n/^-z٭&֎uIL7c,E~u.T ӥsxNJOXt_(\y0= *,Z;_<<15o~o$BJbB@KpVW??ly80S5ن:ױ#n٧ⱛ_|@Fc ”s AdYЋW䈼rys8Bs5lcru S5tnSe ݾRԾ{嚀\ ɔ ?E Mi<}* $ }TvRr-ץbds&}*ϱGU('vO(ԠPjnv-^ԐNtGn5*LZ5** ꑟsO#?AsRx4Åz6/GfbKiCxY FK:6~ڦ1<ۂ.U'Y<3Ýr] ;v3_Ɖȴu~u'S=JXG C/e73=h7QpfҕnMpdF{~6 Q hJ\9<{ ANW~zfܲO֋Fr,X3el4286/Tץ |n>&SRX~6ݶ#TN( TP,(^F  QLJulय़&&l؃(\4]!=2]AjSp\QɯC]R1's[rǻfD?._OT L D f\MVċ[QO.hLU`B.gb@;2 jJc!hLzE;ѵ *wǦ}0.>>hdo|`Xc8̷f܇~<7 D6ɱY&&&4GyYvlX.Fʷ0j ],j\> ݶ}nKD>k^WnX#],<81{) l8ȑNxuh ~ TYc\Q#1Uhp3U6Vg:4סh/:lJ \YXk)6ɶ SC$ʓ% L~vgg9i-8DȦ c0y &/w!ߊ_J=% 8pYM*lu_쾷n7@>C={+/<G~X5oB}bX=pm:Y4SDݩ+Iz.KKGm*| >Ƕ-0mS@/ԳU잯o&}W?/_s?#܏]Ř\wb SסHŒrDv rEPއrU*).Sb '/M?c6aw캠pb m*6-.gn]*!>يBIaV"?U06ImK B~duK/*O-2`[MwxT`롤Ec]LrVr gvKWT`]+?&Ӧg m*TlkC~Lf`R}2mIo^& Q<7TAðĺ&\qEmB}:.4t @^*/ &$$eJ)(۲aqJE<12J3=x#J~*X l'ʍlfzjwN87mC},3Bva1=W\Q\C&#}*PN?.cMĶ,x1-)抮g/ôgE]?_ 9 Tw{cӫ0 g;5LOř-M|kMck0˹* DYj0F ?GBXmce!}b>فM D P<eS`_%:#i_LKP}ypPڽ﹯C??]ޮo>΁8YC2Ns-/of7'dȟ?x꫎ue1Ef S86m*+9j/Q.ic?ASjSqS@%y>+v 9>ZR,0xV\!.BPcO+>Gn[<LHǶm7}*r g]ewi+?(7a0MAs58}Mݥj &qfGn~XضG`B|?}GZNJs*Lp8^~*BCP[n Q(HCul0BrYoݣq].\i\[>Wܜq ?%= je<J XY2LO90doqǹ 4QN\kD/p %Hj ӛXO{35L0!7S>UXNX^$0VFv'ȶ>1^"Dcx;Gq=n.)?v!O~+?6?s'`ZJwge !Y˃^BNBoaLfꎋ,yk?hfd4}C~&ηZ+,U81El+ ojo#/Z9K0*8.tg=+)YiH ӽ>_uplױ)U3 9˧ 'zK6wt&ס돻 ?\ ?}&z{[x~ Kw-з4wd+/w?~28ʴ=ئO6W\m0-tXZ kJs=8ѧfwEvCO0bLBw ʳ6.d,B.VS &^,*埯n*Д TőnCCYzblog(MZ>*)86C9|yQNt(*LL7Qn\E>.ݤOEզϊ}*~di!z@ڵTRVT_-&!Wlr|APqe.]* .AP(6ul~v<3X|plJJ!E0&;ЌlLr5rgǶ_ͦzИM cD=x,mAqm4竛|OP 9'nsaAfm½&g<.uY؄-(wC2r=Z O+U()~[lR>يTs?/(f]*<0!A"Bc(+l-|s~ɫQ>CqKדwR?Op{;_\$o7 (or hJ՟|>UE!JP<.UrCiF xKru؞C<s_ِBrL&OPG6}*690R!]c@^kSiԥPy\ATT ۙpdÂEs3BI}gfPPS)3=ٛ(y\#lP+/v vBE]M~>_t\`ʆRw텟DM<v*(:%$D4݉xJ>V=0gjx^[ױ))lb]Js% ݟ}ȉYXPLJwס٥Mw bs (4c!ُ"'Le6ԏDqQPlv}N xT(,}ѱ=Fu0uhJ[~aպPѱ-|Տ s2]BIbD$s=dwyM`M o.&6%3KByLƉnS1uh iwϭ?yzYuxfqudx$rSNv3,t_Q dKĶ+e߆ܹ_6VAY5.Zy@9(B^AV=ہͥ{B&z3= &Ci!},.ԋcVگLw\]]l&lgjꋯ|o8`, !?5}g_*o)oiO +#-k8p/$@;c)oKjnUlO>ƁOlI3xW7 TRrjLdløM5"xRwO&VOK?_ME1@3=Tt\W*<X+L%ũg"R)l\QBB!l6 xܜPWLT]*\Y{^ݼR_Mlfzm]nMBT> ]TYDJMä>o !1 \_1y XcT$K=~aHOLbj8UBF&,y-TRUP4^+=$s?VQT>م5&|q Y`} njDs%-Py]*d_=.(PP[rΈP6[َ;@:X-tς/AԹ^'blpXXp&Gadӥ" :=[vwLSEYIT6~! 8WCnb}b4HwәD!+d`}*mjJUU >Us=lȉ(.XQY&znɾytZo[v'BGMLN|Rs=ɼvsIeE~<[8mQ:6ŴMv˷K@&jQL ,?6CE@arm*%j;5;)wͩ/t_+wB ݲcP()״35dgwٝ͞{Y&| ٗR>x~z=9dO[bfO:ā8d|g _Ou's{R./ ?qG;ϖT=}CV7$jJrrټXP92tMnigm114Mb1x82m iʙ~d]I!G \ #kT.TrS(g1䷱]cr(4Uc3D*&AVcElL9K. ӂL՘kTBicѥ֮V@:4b(V~xǦMBs_y! |Iun1#!.kca1hdd(ҭ(Wbkqb֡n87:N/\PnO!Hx 8Q.K|1 lʩLT-tbwSj|UFfze nmj.+r^#((l Pgu×+KgCAPL\y{źгe Րuh(j\6V elBqc0 \ @W׾jƂ[jdSO$sc eWȷr]Rބβ9O !5ȦHG}4j\.QwkXFbbG~Q+/Ihe6S5 lO.{R'[P\:>ؼc(#},RɽX^uhAc?FSzl빸bp̀XVi>l[OL_ïC!``-oR 8pϗzTzJBKh>xN5| z,Ux7IB_Y߷6 ċ.0>md%kL Qȴ0aKv<D*FQTt)KlsF#\R8]E>fj0סiSKB9\!&ԍv$&=cW]*]DzyoZ7ǣGn~'Џp& !mtQdJ@ &Cѳ$TjROlk1ɶ<Ȃ*WY $ urB8Kqn\LXlgz؆Or6f'aY; 3(Lfgj<#A#:4X&ư]N-6ۖIBBcʉf41mp]*{ h0ݶB~>~n).toc7>Wa2S+\KmOMv0yXИhJ{Z#[d*(zʋ0K@ƒBAѳls /TS5> t'vd 0}\Et9XMxl.i1/)d쌚,Mߧ";d{<̃R.rSb$/zzHv.)(b%Ȕ+B} IBDs5bT86,H(9r0&6XvXشGݥC܆:Y[Jc2ǎӘLCz4sOcg.sW@>I2n}? f @'/{8F~(/?~*' 4Uu+n\bP7#A8'$~p7?񛧚rgKvJBbC pjZcpt&WaYmcq 7VjuhJ Wa>6vpIobG=$h0UM6xs?r.KUKWM{[)BUtM]Ķ/)buu6٥R#oS}gpG MeIRZ*LS5%>Uuv?.Ra01*)ClS/l 9qds\XFQS5FQAul,eUrl(XXkB.Ovk@(/rVϟZY_a m*K9Y^X0'g @lBBdKgݥ`4d?>Jy@ ܱdMc''E;6r4.yO.yxQiAPvJ]M(D`)OY' Ҟ.Vn(CsbMWl/n]n 9c 6s7fiBަjfGnƀ}}tl4M`BS;r x>lXKϦ8ꏎ/}8pO|'R_E߬_P-?"@>޸2@?{__8~!eN6+L V~(j}*]s5c7X8AhKBvl.d˹dyG蓽8A6~Y3Z4']ɛQ~ Qmw." WO( ed:4oǚ`0mBO%@QL&T  j JbkDaLH(}G4P]?Fc2Ed3=k%|u1}y!St,WlDY0SB_C7! CYbDE(*\m*9Ҙ41hL/DLJM & idS&74PjV(:st~RwaXolƙX0(:L%6sj_(*d'R&'ve6yQA|sX I_JIҟ+2y!M<>t8pJOtԠ?}G}n#Oiۻ>~R׿{V8o}ϦO#}ydR)[_ԌP]^OױjrvyU 33T 6m%EBلj`3na(QnZXT(ounL[`\~N~i>nb K "PXPDO]E~ 碤8SCZαs0QR+d4 (JK"46V"AVE/&4Q>m*F6/UWO<8>]*4&CQ~(낞-Y* ~6DtTmM.W*~~4U`eGXӘL% 1D/k)69vv"<(R#JO*pr~6ƔkTlSE'&>֟M_w'Y{noXгhL,(War 4L XEQ .U}XJR5]4inڄRM~ۮӳ@( | 2P\=+ 'fuEO ճ}3d+) inMZ& lٖjԐֱ&X_I6&NF9&m*־bD`zo|s/eZͺlkBs09p~aN%|b>EXAidK?>d~{U>~a+>֧!o}W '''nӳ uL Tt M+ h;.iSK&мT]Qn;:;DX`]:TL $.^D WK|}8ɢ-!&in|ӥ"ЙimMaǂB*)\Ų.+AyEyAaHRDIeeډw*֡٧d7 Jk9;~DN#kw&%LtgTuEu\dL@o.TobեY9cj[6UIO&Tpbچ|vJH@+44,ur]*ŐLihf),to1+[مQz:ij7ކj,U83ۥN~ 2ʿ\]ncuIg}W/c)nBMTzdD=_$mfj() ʹ5}|8 m:t9:Npz~xŪQαɉXE!5-},r&P:4Bӆ܋թ ّ<>~ Fj٦b/O.4[>lRgoNg~MpD9& 8}tbL2Db0pAT~Ms5Xk7yZOxjvTXla]b2.7VZ=9ꫯfgނdaw:~gl/۶mM8?ڴX,Z)گMIT?0d}OZpjI1x#\Hm_鷗+ZnW?Ko 5?u|鿷 ?H?|I(l$g*.uOg]GmQ Q(7L Pwl~h7Q.PY>Y'&:pdhlcI R:wӹzCqfUe0Օi]~ GQ35<ΒX}BqNqP4bVlG~>*rM&eaǶ%{K e\35S٥Q&Nb\O8Q΋NB86?3z?~sѨѱIB%'7#)(ckGٳ6Ul5go7OtwrGPӉS=(0AKm* M_nTV2gm,cz~:qv$m,W'=kڧb6X-'f;s`KֳLo/<~?]nddgzW|f+OYSYPm72"sjO~HfinBӥ:4SG#N̙F\l8{MֱلVSA(c2bizȶQȳ#հMUel#Ӿ56R |da6${XKJTHb7>~BW5OEm,) cԝB +?YٮEMyp}b)ʿ ɿӫşE~8 `>E4`_$`ݟ{NehOzH_O}ko@wuyapӣgVrSlI3xW-Mhd]ocEYٜpiznbEʹidi*0٧2 L S=N43BS喺1gfקg{'5y4F6W~w6c=ic"Pm!;&ʕ*0๟buf9>qe:,U@6?pKB93b;7d7%'KTYMאֱ6\kL`cSR>ىKpgpdZl1CTz_:y|X8o Y^EEl3Ac:5([La~b{fvW7= Q 5NMK9R 0.VUfxݝ ul`\ľ1+.Mhˉk$Չ@d~Q3^O>X_ljtZ[.`½jm))`{: 9R"Cw PI*׳՘h ^/ס~̅M6Yzd0C?:18}9LTϕ7Kc9Paeš %ܧMD92GFQ}*Nưر/(b˓WbB">Mn]*0*L'v?&֥ =&yǖO~6qN > x \)/Ǧ㋕ QI֮Q"_P\>6xm*`q) #[zdJ سZA;={f8p_p_4]n~׾ů K7?7}+>g;=}CӉ l LEfzД`"MHw5cL|p`X۽cBO'Wɩ?.K &Q~KlO6wu0Y lF6ЦLN(wn 2},$ Mȗ`mb*gVIT+סncD=K?.Y]€~^bQX6e}EM#fdc) ȝbcإRܥj*K!O堂s4xֳmSi)N[ƱT-^t5ګ0sg~ʂͅl.t.Yid'G6rfe*vA'!ZБ s3 m*W X#T]2B:~}NPSǢOmWT<+KIkT l/4$(.Ri܆*XsY]8ю&zc' ';QctAֻTiLCش* i'ZXM\|y]P867hulбpE?K'[2Lr#?rDݱB|C"F9CXvxoG ݟ}u.W~: پ9ݼOŹc渪b=tا|Rvb }*G6fشQ̛(O ByVPEQ^y?}&z{WJ)m/U0X*[}nۭw{. jn/^&6BS5\Ya`[?;)@':4pԦrƂ&]*c#ݬMedu\ױyX6MdF&dBI 5nSե:4B(AԱmT,LB8铵r ڧbk24ʱ "MB]*L{ UeƉ 2C]+nBsdVY9'}`À *O6'%qAK)?b\8PN@1dnb !r"_PH@UA!g1b٦bH6e}.UXy Qش2}I %,rbERaegz04qNmFaw d(N9NtAae5 ""͐a%]P /W'fߐG1.NLFi86wq1)L4s@;.XPd;0u* ="8ÙuBn.Գ 6K_CK}dۀv3=:6bJv6Hյcc0Jq\ P+#1Me*(twȽro¤V.HEOh)ZД*D!/zJ6/oV٘Y+(sjuA "Wrr[]j},%6_1?y#eBZ 5M7@p-~{(mI?O?o7>7}?f8?S\ْgꫯfZR(sXÔ(ttLLKgA( XP 0C϶VPkY2Y7 `8Ѿ"dډ3`M>_/M̎>_^k35\Od ybf?w>%nH:16UT$d(N߱۹S#;fdM&s?kriд,0jĴ6WC{zS=ZX/Twjw X)?SBub%ucɅ] MiK " +ݕJ`Ԙ0*[M:S=,+,U?Q:NIWc7rP *=VKXwإ(7fT:V@d( DP򢶱%`Ǧ0!G:_./P#'Z/ Oֳ~t&T~V+qk^.gzf82me1=_\grTSŴMόP6fA~dA@סRᒾWPAQQچ`"龴y|Y,'G0!JMd,(FDb(ǀÂ܆jD顢`)FV"J Uef DaK l0Up&W~-Ę.% [v(o?( 4pN\lrsݿX\ xlXK8rwz`ؒ>% })i*suB'ϿeTgw_x}ʕ_0-zЇj6XU*n]nB,ʼn LX)dXl7zEP<}*őr~}^YMlcֳ#?ϣPn #??2; MS[a;6aQfIN^f`]m<0Qpl/Џ*nc WaW=ۛα~I(g-4+6w&T!gE luhre3quhrl 35UN( %ŕA`˕gjИy$t|;rMC3UcC." R͇dsϱmؿV]*d"$4uhZJ#l + S<gDa*(jSۆꧺNL|s\X)y[RL`:5${\faRw%6V~ZSq#F(ױzIh/n&6Wa:#\ǺM.ôpg# ?Q @eMl־*ϑ&~Dϊ]NHϕ7s+m`6|%STx\./DKsPz(WQLGBy8.zyKE]Ķ~X*= lTVWaZRȉNu J!obss:{LwEcs*/Zs>JJ+-t?l`1@hڱ1" v9ٝ͞{OJ1P8p_Kv6ׇ ﬚3z2klɯ/J+F7⥧rBl (#kM'{n&Ȧ"Z2ޥXRy9o\I:L,,h1n|˞Lгm7R,U(1 lduW(%|0CI!Zd Y2puUlMKBΑXڝEQ%+DŽCqx~2Lv}4p福_oK zj>C+?i̳%U &u+ flT]h/NLIP8$%Ϸzb6"C2wĶ_^?(wd},_N`Bn~ަLDs5LXR\n *%>QMEa:'FQa>٢f J!U^O da:~A F[1l`\(L/U'vWR+?mOոB<Y?psHBTSc?RY-֛Xh>4sMiFϺV~d}D67pqwU ߲mv̒Υj5&V\&2>5lOA\QΉ)0>LUJ@yv1OwAWi(s'2)J-ڥjjKRFFÄhSUlL;Qnuh* ]*nbSP,Ux#$Y?Rplڜdئb`c1#7ߥ2]fИֱ^O:Nr&ֈ9%@Z|+Kz\#O\WIWסŊ@މ)Йt},0]zCk]>O+J fkN.ԥd`>9nc=UW7ҳKS7^t(KUuݭt7$ Kqa:sMճބf7UE>u+ٝ͞{Jn8p/8|%WnYM_WXMozgK>ЩGQTmBul.]+>vB R>{?jK?qcD{'V!O=mB}~yMVI01>?vmj@GaUބg38Ld6BO4uI.Pc&T B6R2^/-MluL[x8iSqm*ױɦ>wMIؽl[MJH ZOT y6MRc//ìVV5 p+&5Rw6ԞB35XJNLHKK  cӦb İuJMv٥cEPQXFlRr+ 5UC?We bbS'1vsVJ֡x- n" Ty&`j Nx-'Sek -U4Ot/܅*"S=(^.5utӹJ NT8ַ&+LidY[n %nY#]se^`̓4Sc1q-+,sajTrev5V&;vfj6m* uI!2$bMwn|\ڱ>m܄:N6U;={v 8p"BE;wso~^|0ߺ{oG߷7\ϳ E&׾7TWȽxGuhMp'd4pٰ(zȧċNROI゛P ,6 \wv,Qi6LAɐ~nk5EMЄbY#Ӄq ʼnoCF=RŠ)8QgzuXrVCAPR(BȽqpRO嫅Jr'vW(/PLwXF!4N r=< h>z+Ns|䛘_BNԎmMA4^h`X_67춉<_@MmIi= g "B%9j5<71kCֱY8wQ̶x`cs3۞f{,'v7.EP3`A"xJDogƋjc&+W$+ic}N~{92T I* j(饛gv',D(|yb_]8Y@H!/tYYދZ薅6\aE>a E\6SK%Y0Y&j@)7e[JPc&~'SKJ;LyFT. r{e7f8pϠwꓚi>R+cɒ'/ `R#}ڵ gl[Ɨs5!/fjrڕn sb>7sz ыZvi 7]Z l"g֡J9JrAf@ , %/P }Xp/jd}jK>[\!NUD]`61z82Xqˇ4ǐ +rA3](,΋ BG kW8VrOYORH1Sݧ3u LC4bYmCyn $R7Xy~R(w1N>wt=>u(lK1 y;|LpXG4Dul)uXcD4yT8W]+_w r(Xj n^6ۥH7sG ' $.L0ŀ}}JnT(Lf/5l ƙ=+x-қ 6ԛA( 9цb*P*ױ(ly& Kg`ufvP !ȳ5$땯.4 6/G,8NIh.ڞMz7nuuFnC1D~ڳ=;M&z8]X$ĄhO~d]#Dq`Z zn:;.}7MMgu\J1Y |hٓb'/\yQxȓ%UO^(H3|:_cZ(Vj OirP.Lk0hbD Õcn(N`(Vo盙 V۫dLy\ys_MŢ㕟:, ez)XOTQl3}qڳ-#c4ts?$>ѻ xeSPȧv2s l~<'T Q*#@>m5{QodO~o6~~ƍ8p0E_-BD"2I6 ` urqD'̱Z52 &) .L'PZ N~ Pnۭ/4l˯T.z!/PL͖ ߆SË"lk_tiډ]V^<oC1}oM^,kIn51/+|#^8ۄR!Gn '6K7< FJ!j)HÙYm|UF!Jr71c4a(t-jB4q~oX\:zn BRxjéEAB91vێHRbK?iibuYF`DJ9!'Gu;2͵SR>unM\XQGЅlCI(cʫhcvwX1k9\il5D ]|-`i;7,h|rdɧ xR҅7B8pno.(rYp{Xʋ:2m`u'B$\LG6sCa*DnEڮ}ydHPL&dOČd`C(7fRQ.)cd H OTe;z" % t SVW 9'Xc{&UjB %2:, Ƨ$momMwH73ݥA֞-k_48EOz1GIJMMס(_?YO})Ƨ|ʧ{78p|>S}>L^Z,>ҳ+??y mߞjםXHEn(tA Q@T*wVN&+~XgʧRYuw\1=Ds+yԱdgmP2LX8Y0DST䗦].Q_*W׾w>eXSndН 9Ð~Ő'jBm(rC4kF2_8U}7LBJن"m|9ӽx^LwYRDymNN!_zT1mcq&51ՠ[~$smfz $U}f.]ȓyLGsiPAB Ǧm( Ɖ4F54fm_=7KIk<~/,p~(ڛ7MYY{c仾>3>۾>3?zl6'|b113~ŏZ rfvۇn6DsIkz'[lPTv%.VUy~0(:6uj5LUeqDRzϦV+#ӌ[j5zQG;CYh}n0n L[v6E|yyo\dPA>#/M EK^#wvl-ƔW[RljXPNhnf>]ȭ_ɱmWjXbS yڋ*#'HUƨQg&,M{Zvs#6dsݴیԾ1Gf\R=@>C1sWh]<eIjiw2 "X(֒}k}r ,@׮Q6&z`!qY#R4 MTA2i5EB?a|nN S+ ȵ omq_+~ć8<R CjBjj䕯XKJ-fmyFŢ wl^uGIɂ %dblbF(&E|o׎uFaQ bR,3 ,jˉRw ,'o061@ ݱज़$[4pʂ\T )"J4QYQCLN _~:Qõ$QYtwo\LrUP* PT7S nKLmJC"m^ȱaww\l|{O'W=US='j_V7dMtڳR `)}Z|k_i9QT Pbn6}*sWJm(狫u6}#hS! pfwuF~dtF׮zXMua8#ZGq+Mf(td m6)r#WoBk!wҥk_ʏQgR_*n r IվgZݧ?6]HPۄ@iJ5 r( k;*M!^*hK w_~.u? _> GTd8pBĬ W4:Ts"رM? 嵫Kh ƉJFKӧƹB@-ۗ\-h)iw>O.س}8N_P5Lgv*[mEF~[Me\!/LWq`|sV lMۘ! T.s|3j>\_=7fD! }q.tד7Kԋz*_RxHKrh܄" @ğދJ'yzdq׾Z*uK? L)`aڹS`.KL_?1j x۔=ݩ 8Q~u24ɮJ*5*}ű/# Js􁩢fJ0mIVOژmC ,M77]JV Pe{60e;](fY=W8fO \PΉa7z KUPcF! Lrtd05fFҳп|XM7=X-Lw"L~Q8mf}$05Fk(P=  ,uXwѾ/|rU ru4ȕ6.`LQ)dh-.dlqݳ!1EVM~ XQoBwvd0ްn`AK!PE pp Sjaڇb5uY2w=aGoV8p( ={d6&jJm.2irou8-P)''zG[јG9l ȵڐi`vi٦E} $$1?=-},r 5t1Kf{ro\<<\tl#d*pbvбȺTαAD?ί\p6Q!Z=L`'U|9tli >ZZSYoB97C7u*nm%lBu-64.L2n-\zR!WeҴ#Ϻg|\}ȓ  M̟.w!X5FܳMqx֩4C"Z Ǧ" BwϕW7f3}:_eA6f}:_TI_z#-M{'cng Lc)8xvKfgyQP0Z 9d{!N!)bph5FTP+ @NLSt1&"\l[x8p~e_|1&j( +/7N.݄Gg GB2 GI%7!bZ4nrn*  r.NTF_ۘׯ3i#&&+_iz>v1Oq*5>UsiM(Jouo B9T9ېTr yd)PiIcrS_P޸HG`(*䂼xn'jm k5&34!cAa nbyn*S{Ǝ#$'.f,*\#L"4Z]ȶx1Nm}9QM2W~r'w+r,WO7Ӆ+? BblbrWԘ3oViϞWOUWPvDb6S5u7.d#jPm\i0^\(,M<'ghhw^Y_tYz q뮍YNNh}s#NOm5{Qo.8p,_&`y3ҴXQ0S]Ƌ0ޱI ץr+W]I6S)Zr'*Z סZck)Luz|+5twfwB)"ЉBqwX^kc6QCؾ:, Tof;:%d}Pk_|}lځ5۫;:]g[qrgm׷MFaʩVw$v%l7)1fǦǼŘsA4Հ#kaJщB63}ʙH r&zM(<]=]4P#֗"h( DB->ZпޡvBgv7MP\Թu٥t_!Rg5Ge0r|N~OasMuۮ[nf[mdW1Z y syVN֗k6#%OTD f?`ǻ E3@'X0%$'li+=N0ՃNcldDbz6C4x'[jfKŜ@R8ͩݷ!S25Ƒ GyykHJvd=W:T"bЩ"T 5< B^ֳNߗ}S"|*MKrc.y4](rr=Q]v˒TYP:5ldz'SݏQaƂM_=7KI8pogZ=u(nmqy&:A(ufV!ȷ0QC:0ҶiO,&$M1Ńu:[-ɥDنb㫟ho41t6'fߋiM9F֖\wBS=+RBE}jŰB^ƋJ>Z"7|B Iԅ P[ 1?wPzFҴb7, sLF4b)-+.syQ#TnBq#Cn(jHyv_n˂Ő^&\BSݟe[r Dpcry:1i]GsjwOguǶYCA$TB84 ,C1ilbE]ҶB 7㲍Y3KvסrS|61d E)q6WN i671!)l׾jb^ƢSzxVf0j㋎+㔐S7gobvw\^LwR.= rƙNT?S]Gѱ:fyj"lq)$ -LGqr\t7UTUAF/X։=(6R-R^>Eʛ8oo;AdIx7Ӕ#ЄR*)$zu(B+ȴzsJ.Y4cS41[ŪR#:Qr)`};67-:.~1ݻW.9W~cxuvrr]33ݷ11 S+[ /))!Y "j5ۘH.f~$ByD(ɏPO"P϶q.f.Xcpǩ2en|@). }dR&5+ȥ @:>_+{@ 'v:6VʍQ7lI9?| Ց߰[܄r4/fQ ,LXoBRa- 7Raa4Rh{S5x>K Y}Lpr,33ʶKNTβ񢚘/u{lP=jHx'\W yˑu:T4'v?ՃBt6XDp/S\J;.}7k݆rM(}Je`p}Uob`1K!(/Gn:t*I3 o/sOޱ,my('f@ip1n|Gjɏ\W}7@+_@aRaRm >(82?SR_Hw7 |hٓzsAx(8pG|͛7om__/?~'K /0DX]ްXj ?cKf)]Y*ױ-51tt_=+B)uN~Ƌ df?6\I|m( J6fA#+1'b֮L%He%Lc چӹ6 UC4k_?_\~L`Wƣ.dk6Qhʔ\|K7|dBKLUπAHlY^(䌂M4#lh*V} c`Y$ou`uiMJ:6)btl3sݥg\VCy&PY u7vޅbJm( R|<cn) zTv/ȟec\I3UR`PN_G|m PS=8u6CDe+Jژb ei vg1 `wjvMN쮋fd=}_w es?E1'?QGf.TScL-QPclb u/M2s;6M.Mwͱݟ]L<Y ),,EgCC9h4H{`x-;T k_>m5{Q:8󎫫?g|gmo+˲,KD-e_e999_e_--.pQfQ $ofpi͎l #ݤ %&Iϖ[Ő,h0<0nc6}A]EZ9spdT #.ZjfiYhf~b&TSݗj$#ްUƭ/Rzꛙ~部M(-D!qf1D!K!],}\: |+WNͮ$PV|_2,Sff6f(1&' ivmN`tJri ]ɕ l4!~[qqbIjT8CuU -ƔUALcN(MpԋR()ݝu2$a5C(4Yr`eB>gn;^qKBBkf7& u aj`@/SsgÂ\BC4y&/ Q1/?C5-y{ynm)u`Xʮ橋0݆b닅nۘi'f?Q8NJ fR4hLs3ێ%/Kr gEFa; G]6Gq&z8[QFaü,͗Ő~Ƕ-5 B^+8}´Eۆ" :yd|yu+B4U^c].Y\Ic8P7k_޴$5lC6Xj6f ډބrK?1m(G6v2s>r(8p/__PU싾苾]z׻/ʯ=Ł'K/h0jm>  H r|4QXj m M̎mˆ b B~DfG4aۘ@jB~QFFM0}f !I;6 k$H^%Gibd}!Nޤ#/jnk_kQh;qd>Lӳ'jȕO֋#Ҷ"-ۉf߆gb(4,}j|xlIj*/HBu)|fc.tp|'nqlSRdBaKMϼF}a8p|;ſ{v^]] .>oz|ۿ{o}.~||OtdIxгnV$G&ެ U1E `J?g;F;7(\[k5bz^tjQPhd8]c EE#87͹6133Kz̓qVK!`0f)875BYhՄb3PAnԴ@)a`EQZ~#:V E0OUېofZso\yᦆbI.I^ 57lC(4.Oe0=wS'dd}f99KAc\LT#B1bv>,W4wpg ֡L=CRF\/&}Ob\*;W.f7D $7@J Ҋ&q\KʏQ]6f]ykKg>/GmOff3ׄ\ Im5{Qo>&+},l*O*˯?_e8aۿ޽{G/>[Ok~է_uo|~_OsUIn{=.ڍ/5ťiSHI^Թ^P> t_8Y2'_('_֡ QA>X6#3Y<f&Me.Q?]ʶ_^I2Q .cٳR$WEjFQ+_>SRfzQTmƞ@ıQ!;66#g9I!k_mLjÂ\,;2\w3M{]KW_TB^6)fV\w)o&WA`,kn e0.LK ;[QnpD/tpTK'Z3ݿ2D"Hw61(D]&AD y'=[H]R|i0ɿ-𢶡Hns9q;v]*w-X.ڎ&IDATIEk'ckWP{ʮ;} F|㋩'a7hm)JN|3hetPZK!(S य़4ydGم"Ig*5Vj4+.S^ݜd5D*T޸)?H鏫Npbo/A2s̛uؾD?Mߨ_̫j^աx~hqK/.1>/o 3{<߬~~>@C20|8s(YufGѫB5@=8Vijm(1_V5FR(hrBBo+gP^X3ոʼnOUJr-gz8Lk5ѾvuN.p c+~ `8iMY9SnKلR!8 BuR.}-c֋ZjPj5:91Y ]2U iS5,M[7ĩޘaV8ѩ9ZXͯO>!uSu| FN 塟QɂȶM5\NL>:l*rX^IIڐ%[u4pz0grA*5^ r h1zVyvD=-O_!A7̯}rUrٜ}`G{&q~b3#3S-GE,R4,zQ׾z5C*U(InD[z BIJ%i;<]Qng(KmsǮ'z܄g{g,0 |WȚ{(tǮU&k_OԘZ $ĜD Y]zdevVչ,L|ycxoY K.M_5i*PS@b$O>G <?8>504~q_/.WǏ9p_~x?)σ .?O?:ԇ?#OT=^x!.uS*9 10DJ5 =S\MteK?n`=BVS=IZ1:2s:6&Nްnz,8]|xsgK?aNc0ݱnFքrbw}=M^QSȎŰ\wYǶ) 2 Ǧټ;EZIx!?]NUl.JK71"Ȁ3|k0lס(d*lBp>gs-tJ/'a؆F ̷'vMDlullK'/vn:Eܹ/(׾r׾jdC1'LwUdFO-ӧ3Ɨ?pQJʑlCDC>*[M7l9c5}7bX1[P؄2Jޥb`{nH=ژ-u{rPncyl|ssaJ(G))>DN:T Y!nĬgQ~SW+_B1ս`Fw ?%cӤqr=>Qv%9 ,OU'C45lw1ob+*W7fO>Rdß'8p"ſknLGv{>{ۿ]oǎ=]u&!`eNt41(EK9tAڕP^iIgm,5Ƥ YLwNm*rJ*}Nnjzncr8eu< DXWi2Om@7޳JQIRO^aLUM1 Wm̢T:Ŭ;T `2/jSPɮ35l|ld3RR)ؐ>0 yj|w^ԕkrqҶf+d&dVcq&w!xQMLc nMj!nC&z؅~L~_ ABm,S4 &ulK~lwgho^I K2Aԉ/L۱M2 )4/ GUogmr 'j&jL5sm5!dn±޳"xw-gҳy8M$E!lޑim{6^55&Vcm( 7mJtH? Lr嵫0U3ȶeX n3 h40twǮ2 pd\(wdR/S6obTzH.}x;[-tM7ij*ȭCe0n|)ZGGfpǮx[u}7߅|/N.ڊe( $ jZ!G+SwZaHns#ϡ, #8px ⋻XlSPlBRWo&WAJ5VjT\*'>Z:0]REb|Jo|GMcf(XҼ" ް;(LP(;ibfeX0(OU.ȴ_׌p.dd兛Xc_j](OwuM('zHwRq`3~y<|0Pd\u(ۘj4).itLzKK's7!u# Х(\MNnn' ?vB=|Gk5Np6fSJj3"Hzʥ\*,&U!D<raf GEzh=8 B ʹ(D:KӞ]F[xV^e)Ҷ4׳7,EkW/LWq˧au(6y6ѱ9[:e x&f3ӏ >]}%Y:,_۝B>DTk_4j@ALMjY S4v离mKPxQrv_kb&S`MpMȻ`Oݦ#\i{$wlk5zQM('jI) ҴՉ-t{k_?*3AJ l*;gk0V4zZj=t*NP>ey."(r)=GWކb3J=*:,hs xd`mB5$AtP#J\S?y5龉Y.mijW7R7P,M4ͥ41PJʲo9K(J2Pr.cE Wpڈ`AޱԸ4ga8mJSM'#땯8PBser lh(`(:CǙcBﹹcU!%@ {6RјN3CqDT(f4ŜB mc, )w^*5>fz8wWR0D&ϯ}5vJ5"ͥ61tioeDI]BIER7 y*LRTK>mwXj? 3=)[lCyk4\:g7TћV'f)ZV*O}wo0#"ብz}w ?>ZqXP;ԅsw%|?po#/ò_8p|w~߂|Ҕ>iJw  o~7~z跿C'u'f\vi0Z ! B-1mN>G-ؾfxjw9mvi t[ '36M}0RwAlqe(jdYKa 3ݗ0Ҷ3 Qؤac JJZ , 5Q`w'邭H ~RFtk_']RǦm}fk_-M+׮b}4nrjne/T*7Q㕯hSb2hNP4S=ܱ+Bz6 8!1mBhS}F]t?VF6s޸8Q.](hGO嫌B`&*U4c>6tɣ@4z0:A3Չ9R#}IND }}&m(5X(o)B B^#c U`Ae[&W~pi(8م\kh8)?<~~g_?~] ?frԳ>~o ?O|oS2^bqT?|w?\>w O>*F x8AOO~G~m^7[K><y_m___dIx7Y0G&Fֹr_&{](|rF%4;@f7KdyhۄRRPS|UՠKPԈ@] 8QY0emvn/$vn~K'Qz5IJBvG GI3uC4)}嫒\} OR#(à@h;v'fy-O`1tF(d)TW?MLq72(J r(I<6]I+P]zaZ(Zc,ƴj=w lCpz6fy =?KuBI].}Qhbo[mf˵rd L ).QC4R̐䦩i؇|J(df;wӖTpѾ:.w!߄zHUBX䒳l3m JrUNᣫ ӥucˀKP´S= XʥBiV##U]~xtgI0zBK*},L RīPȑi JF!?jRg=?y8 /'?}ܽ{}o^ ~} f燙VfzzOw}?/O???,45?5x|M|}Kkޱ}Ce,z/¥1[ A"u('z=K6#77M=?0Dۘm|Ҷ9(d`rYO6f+_Ik>)Kr3՗MM+xQ֡:w3؆bt1N־7,4FK߶7ٵl}qk/jʤ<6Mw'nl qa$"e.ȧhJ|guom϶Vl:,,UMl}(R:.#  )R}@r~ ( r;πIW ֡Z,QH-ө3ճ1/ɯ-Ɖ6QhiJ4}0 XQ֡*\wȕo}D@Mn`ӄ|`}nR`WƘ F1,X-׻42Utl_"P O>I: &jcY!L?LjXږa[i7Dӆ4ۗj*r9yCѱzX;K߅+qf]{ @r7Vc܅׫Pʟ텛=$#+W;ѯGS՟Bc̷'v?F*&FnٖB ke9K?QKӤWeL8{eXvl`Ja@[jlB P41_6#GmN>G|q5yy8JGAlb&vx˞.Q㵯7 rr5Tx- 4J>GYJG8po_ÇeY.s=7_o~ç7_U__c?c@%̆B,gݰvǂ?<+F=v@)?Mſކ @gdb+?ypa@6fNTM(lc1>p4vkB}J/ܴαo6qQ7̧m+O}ncF4 !o9r* 8ѵ 4m ݌``wʳ By9H/ʉ6gW>3]( WǦ)+ȵ1#u- ]^`c-Mz6vײz/ͺmɯF6n1ьhcub`1fnZM*5& Qa6f&Glse&u(Dm.'{&UTC4 At3;V 9pfwn]TOzkt_QCLmF3GKW熢K:݆|a >f飐nBBنP40ul-ũ=B|>ٺBe7GMxjwsݥ"?^l|QXAulW(omqBmsfwƗb57mR9LL h0F㴋3mcqB\{̕($ߥi՘Kf/Σ x_wy*_$|d͂3H23H?o6y̐g~֧;?S}T2okW|ԯp-ޫwn,u{~w[(Tq(Wϼwsoꗼo7o<.fo8p[=yϳ>k/SPJ}~~~W|oM???--__j_H{^7.//?]OjHvM *.W%]HIA}XrN~t&y .[_:V.6f76ZrzR׿S9-E/j;HHm(L3F65,LXtjTHgKӝ}QC7Mv/wG 1obF֗n T42nB M^\jT(VC/ 4}( !agf;}Ec\妺?2Ma}8*5 r`S*DB1wcm^mcD}Mχq&}4R‰ݯ}Յ̋k`=YǶ+QA. LuY(C.9bdݱ7λ` E+"81YIåBA3桛$&|e8vҶʱm_6W 2ۘigv;S^z嫌.5l+7ygW~E۳ibf(*Z _]izKW](~;rJSK|QK7]6I;]&fF c]#´ϕ37!tuJrU2لGv'o^NNNR93'nc7ï??G_#}0w/w__1-eo0ԯR~ݗ}w ?~yq?8pokmZ5D$sk/;;;?[oL&| /-#`9baL_ҋ-#T %)i8څbiکod9MF6PDUwwg5 rm[ uw3$8!87ȀPy:B9BZ 7mV5dLx<ݕS B3/u[)`|>t3'sr=`F 4Vw?p{め rcʑp.ڔq+_@uq a!f(Ӕ՞=oe^ DJ%:'ziGs9Q6rf+X0D#9\Po盎mJ69Is)}嫞 l.f뚆>W^Աlc l}b0U]&|`m1*U( D erHqMȢЅlCTv=}By!:ygv{#7`0TQbXP}J,Nxk(j"5{6`(.IAnu7h3 b82muۮG e=1&fYfjv%9ۘZ 7Y2 2 @`mGaL/nC?ۤLȕJmc(xօr }N~{ uEFN`Pg7Tȩh|x|b#$ǦE{l['P燅'_|{wgz䍏P8pǿg{{}8sON޸ #DW롤1 ɎmlqסE;Q(J6l%XRH(.$e}PHA @-gPzVXFQ=(dѳ R:|(0]]ʱa7)`zҋ1^\4Oz Ílw&N1w+5gX)| S#ĜrzBw)@ߝL0QCƞWݬPnd:ZdKnͩmB7O*M(LB f 9-I(^էwgd-.j:To)d4>nzvSqf;p\ih rI䉯 l&z8K;1. eƥiKQ䷱8ژ94y!!}0]6γ*K/xd´P}?fo+/Ks y[MEBӹӋ .^TmY6/{=\zd).M 9eG݄ yrv@SOu]j&zH21O[&PF6r~r'[4tOp}oMN~dMB]> BQS{F#/Pb 3?١gV*4U?y y;Gk0ٯLw~ܯc|;g0iVӯ__6x?/??-}ǯ~ѝ0֧Ws8pݿwL>>5^`yq 2$C )AދhLۘBu^:6͙NPA޳* w|Lt߱=rn*r F&Qjmȝh:G ƥneJb1BTcT WN{W~ܳJ]'f_1|,FKoSvuꕯ-GsmhSzdK. wMR_gY݈`1^Ifo\wQݞ]U#Tl[At_(77mY(ԳEvlvX߲=J/P\!/ll5ƑҴ%9/jsB~0<+d]׮*؞YN^ l(/ji((rl.$]Na#,tK'z4Vo}c?S? _WYg>?[?@_?Y[?W~/P;?0<.?uO ~!m_wu%O~|l|B3>۾>ޟ]g]Z7vUd A@U*(*S!$!rTLaHo.M88Xe[ <6 YKrk{θߴV}}omZ-|ԭsss}~^ޠ/vI!B;iBX)Jgz.+30`lRg=cUP*WzSa)jۄv0[!w0D3]k=/ĺQvc2@)\b+Kb`}r>UQl}}L.ԅ QKE~n(O&zVK=&I0ԶEQܯ**ί_Es( >rkO~?~+CVˏ:qĉ'Nfj:(!Bn/vXXBC| AWTMǂc2QBk3<,vƊ0:.zZac,,>Z*&׊mN\L6o$}s/fK @&6Xl+T My P!U9qdpb@_+7kNFɣhyzI]> /XoB̭ |g{w<ۆ&6 eH_A\.PQHL;CXP6#"@~\豤}R J]!b"_ mNd{lb; JNJ@f]+7W.1 %$8&tPkMhtǂ ="%ݪI!7]Y.s|!W~qs=!fbB!iGbg)F'f`y>hC)UP,)94DP+R[8Y0 >Q<,35}УRS!H2TJb=(&$ߤxjFyD\Z#+5b٪iLf('k0|g:3dɞ1ό&6S.Q!rŴPՓYO(LUI.4lCN4 ) r.1zQd0iLrм3t ݳ/C`>:g=s>Ɠ/ Ƨ?T@~{?`|wpOk=1-iONgl?ĉ'NoXR[oE=7Z* kW*hMl4c*}|`,,U`W~^QT@sNr[PTOEIQs,1ŖP܆:߅f[M8 lxl7R)?WB9jd+؊<\AD9.iqi2(0z0#>V~d3$;$k-B)T Y C('7Q!XN tLeAq#_M. hs@BN>3ƅw:BB9~:k0Y1,pX_1:Yz[>zw\aIyTlrG(]yM~ V䏱zXl~,Xs..졋|dKy0rb}#dڥ" .8B\yCnig-o[hL# * ~qx]*JBs YSfRRbٷB"x*) C5Sn5B.K=fzz+{Tȥ=SFyX+/lWPBU0%3%s UBֽcx_'zo,h1"@I"nxT*TXJ~ag1<zq[+ߥ!*7%sfZ;C3jr8K=Sϟ~GMES؜. %&$e|:-)1׺qN >hJ#T'l5>P!okmS?퓬ĉ'~9qbߔtJj-(Nl* 3rC P{هTdHCi*ZP+M\PT!Xd 0hrF>Ih{pf/bHIU.ޙ9nB#гنA^qj&T(!Vg]n'S)ID׺I+*ʆ0@rdOUw66Q>VQ6ȳmlz.40*b ry0 oWaPp|V#yW/BkK!m\|VB *O77arWaQ !GQV3"P0g5i}ʜ9nBSQH@ R]l ?3m)vtygD߳{ ~U`Ԙ\:6j?7cd*&BJ hJ U6YabY߷SU`8 #ۂBnRDx^Z)tv>]0r!+R^tAKxQ,tL\Pg+7oS2"ud'N8qĉfݷ;)U8IBg϶"Os9$)1$+7.eϧ1s7򐊵&yJ L35 E-̐"zXѳcM~Ǘaqkӗ* $!BSY̘lzXhڄZLGFŋA 9 .ut/swI!cufK3d[*!06Ԏ5,6}.޺XI&4>)8WciʻJ g1YJ%/N؜QqL"?S.BcnK ]IV4YJK=dͰc}ޝvĻP=V nk?;v s5cuQt[J ukMwn$D ua Jb5Ƶ9d5M`q93G% =VlqJfizy瓺W5&KQ7QC*jJB ds` P܄KbWn^?3rӒ^6h)FQmvaMBW~!s=4F)Nl/qBLO@F6k3hH~n1SݥD k?DkL}8}@cJ@m%F!Y҃bBݲKEc]R`6a֒qb"Џ^EEgM$D݆Mhz|l7]* €Ww355j [33%Q}]I!},r獟;WnqHeէw^|ԡo˭,ĉ'N%U[o_]*sl`ڇgJ}*>Vs=lG}+hkgCJX \xҽB&`B{Q EcW (*[tTUqiRZVM(yKPLO.8*.CX¦&DW*lbtZk?A\k_`4?]T%>XI97tZc9)p/ tn=BT?w}$]&Oݚj-~'}*%]T]*< lb{UK.Q*7IBS2waF{7aԃ؅W KH~h%Zbsg tbIAJ!kJnEAažK>VSD'6< w?3ݧw,Uڋ`U`)z,`|,("J`e1*"mCE P0[[rA;Y(saND6b1-{g] pJe|Ʃ8)%L/5y(G6d?&3SSdUQsJ!lxLf/#{q* MuWAvL}TVTޅƉ 59L9?Ëdq.6"rQLBgT1ATdPXLuSP\Ş.E߄Yj{J 綳}]hbH[QK!õZ5c9KqȎbwig{rc2,͖*-HIb(YnJy'zm6 (35RuHյyv2C'|aVTTEք BrZJ8 b(pNSp{\n4r/%c,G7aYJdW4 z>wa,;vsiYZ[5T4{:z%V|+UT\ȦxfZRm3b>] }qN^JVz(0c(sxUS.JkdAԳiuf.) .TrVB$t۫0_؎$+JBs5YLb(LudK.LBW~VP؆UNMhB̓bl5r0${HU7i0ǕK YCzzƅw"2c->jG}Ԅoې$ĉ'N8u8~{l|B~`w0شֺ{\nWg}d#ۑMA~b#!w,T|X rZb1r>.)%gC4f оt] X\Խ^mF6ҥ[c1Mޅâ{s-ҽ䷙0"RMܓr$]J-j((f8ߕTP46BSumh&z.z|%ŜX_Q!6֭r M׻r, $\RȈ<*#F9XK%|+7Bӽ⨀L7" mh/0܆O *,U݇: }[±>29е?V~kX5-A5Ӊk۽Vok XeØ.U _|qdE<A:ʋ@czw:'jvEe% w(d *2P\un ]N%C,ٽn2W8K3DV"H(Ϧ>Vp yebe)>XJ}*FxևXȵge(v Gv{y0}Aù9nbt1&ے m LdB~U>jɎ~ĉ'N%UÛoy80[?sb`gzh٥zv6}bZSC(XOgEMؐKBc='m1y֚ҭoeZF^hfedTb4 DQ},kF6IԷ׏ŲQRdd1̐T'!k֧*T+r\E􋜞*W'K ﹳ]‚P"SI! MYhd3W =bA\ =VE3{y 3^HA-),XS-()0.K5BY`Iczhw|L>XL x!35lj x.TMl-Ks((8 $j1Nlsڞjc*d&TNlXpcJAL:@|f\~4={}wݹJy܅zFMXոcA11XJ 3=i`/A,3=c)ً(V+3Dc*TKcB*7*,FDi{1-'6%n1!c2{Qv7={߅fjrlzm{F!a.r{Q>UͳJH-ՍdwT6.BFQVb>Vrs :+=`HKyԘ,&"ߥCz\!Z|h|7gũ8St@XMsJό4K{LB,K!ls Q1PcUP\i۪k<.T&!I 8VzP-+?'c*8~bYSa(L.!D ]*6g<{P5iLQ BBlj0ݳEipDYoc-3WW*|z(W`L@tLŒ!U"POBOݚjrqܵ&5?3'FOXm@qiGʎa'6R+ҽ%JX!1{𤸻0GjC֦{hLزD]y _j_kL%KaƉMI>$5cuY}a.72 \{JC,WT3.Mhgz"}j"@!V _nb/9ʋb=n,bSyn.QV+;mMPz`wk5*L|ݱ֦)["e@IXcE=Bm*tS1Ӕ ]0^Vto}{_~#CoN'N8M'T[+=86X?0+(Ryc,ugo׭v}*zBYxte6bxn0堿s !V8W 2.ԛXgoR8S2IH#?ۙ]gm((m\+/dUU+u.PlLtxRnzk?߇ʱVF1y1 iy^ts5rhgjb ٵeuۙr离mEts=Ks)lZ-ХnG`J@i`n?eoPAbڅP.1(d[Z3VyZa< wd;~n)4wIPnHJ_.z+Mlr!]Rj:76wh٭B1') @T:g;S.=z6ԛ,)ћ6}a\sՐiX߅b칸>[DQ3%۴"ȝozXlL9xR`:*Liw^`"`JS||v-)B0㐊!}(oC !$(`&gc=j: ~'K 禳VfR//1>U}KuD86Vȷv;ףg=ә~)FЧb66,TPãGvˀ =^$&rlfz &Prv\f1^SCn*A+䞋twf:'9(jVDIL/(`C.2D,.5.lcaZ55pnj+=䙴.O19>(Vw!V &ֶ']tRbИ s`=lGEm|3 w35eWR mήu &N@X@.E礐c*=P+ 7n ކ& 96 ykVsGߔSqxĉ'~)SW1v~7C*UgˑM{Ȗ'X ұ xecIѮ&.jFBʟb[zѻSyؼ @(vs=JEދ=IJ}Aq̯w؊ {0ss,U@>pm{Rc*dPå9`rbTxŅ 3zJm~Zw`0&d~~f.]*,j(tV({f?SLBoG1icjT]hLWmכQ!_Ùj5K)$Zc*#_^{߯@vGE)ocuf?=Gvwn5y/^yh[۞@<+l4WS`ui"̀A.|sx>fgTنfb3Bj7>VA8јfj*(<(]*SAdq+R1;>)7XvT07z/w!c]QF$ݭP9vn[FYK6>]*TFye>3> @ BiՔybSٳBCH Un`* <j0䷡iDmbϵA>鴞\66"C%v-…9޷{}(.Glmz@QzX7YLyn}vb!لvd;mȯPRtl^6;/T|xٹ/C`>*%=JO8qĉV#şm_?W2 \?G7nnnS[oYAJ,.Ǭ|0{pe¥= ә* DXTVQ. ;M%ksFȖP]hG6*|' 6 E.( |LBv%.u pave֎ObXHOkKA#loKEE.W~Qb_ƙl5K{87!;1`jOlj ܄/^ʱ&Gs/sMȀQˁ$Om-.'\أI@RIQ+c\F3iL(}:wwdz}Y0 ]Ov|drlivsfo,('o7︋ jdPt uIQ-0ɱ3;],8S]h/^c*(E)LJBj3ՍD مP"dBy`wKWzȉ ]*Xf_օQ{UX@:3 ڱއ͜DYʑma8Sn[Sy8l!c܅=pQ\yQ}X={hrs5&*U49twq/qHg+g,)*kS5)HB^AOBCC*fz,d(p˻nc$oì! SͭoEzArg_n[ Z"L+Դ4!r[|Jrgz0R~tE`)O}=VqS/Ɵ~1~x'N8 @c?w?_ˎ,?pQ@s߸ZO}ƛo٥2z:zZjQP+8BB I(:r$s ܐo6K3~*(.aJO!EK1$A)afjȹ+}],ow<]ޛyZ5Wl>4Ч*7S);bM Xbޙ4$DyAyJ[r%,v}{:s5{n%( VP>\5{QM- Re(v`Cz 0 ϣYoB3֦_Kjly[ Zy)pMIA-K{\>*Vm.L7W=l_Ṛ́r{g9R,իd$bԝ8e@ɳFgz@AI#[/ag."s\3rc0]αYpnvlDMlEB~3ik s2'8ѹ i7: wvWv؇xiڼַ̓bqqgc2]* l9Xr“r۪i0݅zmϖWb`{{6}.z\KeRF]4>T-4K/Bg̀C|Aak?н#<إұy斄@s؇zdK{NTFUAP61r(Eg=&0c>XL =F1/zMhjr`dɱ/5>"}}է>f78=??{b[ 8qĉo6???*%u< Θ\}]n]c:_b}iHS2,XpfS! mCD-N=*vo1F!Q#R}^Bє^LK r0S#V- LԧbLvQ X+X#ҌCrK=lCر$.[lMhutZ\O*} T(gjdB #PL@pL]l(ϪTA#Q\[XgVMvV(T R!y"1X`uwA]hOP^;[R//Q!pi/ee\1BS*(vdY)`OŐ19r6<߆F66WaY\() %vs^=*p)a9$# &\+K?IqFv}*szi㍟YLn,}oC,76zZ>ga1ʹ;ƲX1 Ecz{L&!C,ǹl0]BMVIR9J#?0M9qt卟Vgc+7?R"w3fs> 8_SYSTŒO1}SJ {\A׺oۄtDeaS1mBc&[&бYA DQ=*wrkyȪՓŴC*qrO& mF뱤c2 3`!xFQȈB(ť fX~x"K"W' Dm|X}~z-=k/־V^/Lvt}2 V*PmhX4 %q^qb> evo}{&Q: !wi2 .h0yTRԝH☬Ƥo}0CAPJֽ >VPܥڳΉ/6r֧V>TCWns=j{aBŬ\!!x8c<f`!|TnK "cw> =޳]pcR#,հ6]΁\1 dg IRR.XGLlNZ|i=b}f,E݆ƺбͦAXQCU`CzX~b .s=J'G/B3=VmfPI֮,ƥj;Y+ݕ_xh_uaߥzd;WL%Jk?k{}lB(@-vK3/ F XpdBRd';ꛍwq(㏾tջ?j8qĉ_L;gyCP7S-~[ǜj|ojZM}&6QT.yi$tfC[q!TΔ{XnӅ4LMAT|v!J>C,xLeDž=l528*f'v2=Δީ[ֺGi]+wa > tZY !U~ބ֋2TȦQUӐLI!BvLvd{[6LO975UT;D^O}^)f?|//~ ԏn|_ĉ'NW>g=G1k~#oߞxO± u|c,d . m6cnF;jyϝtLEbʱus=^ڃgXwA:Qhm`z R|q=k`/TX`~ P!șB3SBK=n7G η5)\{ bug]h,$`ƚ@\2C#[_pM( ֺ9|`35VOo׏͔! (n+f\LĀs=t_+7WӔ̕LCܬpډ}74rM>ω=wiJ 阊:̳Ϲ>^Z,0]w_?}?oʇq=?% i(*V{QLb-&/boֺW "( h[MIr)uT ؾ R^=.ByF~hC߿\>?oy?~SVǓĉ'N$mۚw/?' /ez :ė%Uo b2LO9: ,dDRNs”!E߆vr%r _Yg@)(V*?\!Tܷd\#%=+C,I.4AT`Ek0J35mŒnsPL9ض#K{,(;D?ZZ4K۽^jLO+6Kk#PH,0.E K=b3KȟobڧIY&=SmLMhJ MMvs= L3vښ\ޅKK^yS/G6T9eX<ms _?bd!PbB( (qwrJ&Y-89".p.X*r˵~XEPl0z 9 yBjړz̖9_;ֈ€_.s1Tl0\řg}f45S )f<(l""`@fj/*vAM TM#B U Ug=Q!l-E'z2Cml5(]K{X~RB(ad+X`0mdp\E@ü~TP+ A֦'6 $[:1w}Tl!7 ۆ|M> WfdA'o}{HRW哭fo6~~š=߹:W|w}w'N8q_&(~W}fo}|I749"(PȦEV= .։R)O fz4l;3ݥ9Jqm>{im0: 92la5^E!kJ5yCiJ3J%sjWgl(_) Ms۝&.Ve[YLlyH%ds1V}*PaHg;L_/rjlZNb1ٗ~N($G'{aFbc2}* avgTLaDg]mC <ǀnكBa;ubZ{% 1]hZ^u4&c)jLK=P#!Va'~w;}{O vA@4AdDS 8x 0$>_QiQƀR \O_~n> gn6ùLXpHe/eGzvs% "kȳB]_J]*/L29tMls>^.݅fLv n}(G(%EDJM|$:ߟք 5& Pc* tK:˙]Rn(Mhj*ptR|[|o~]8?PYxN8qĉ_pLݿf%|܌ʉٴz"ؒK3 l/ISj_.{fo)3lЃg]`0Z=͔cAKqdջn=O64bQRqI*yᖵ ATw܅jo|@y+shb3lDVPL ]*-d <EMl|n!V,v)(TQr(K=#+`MI#rS?3]6jo3=MWP؜n!ٚ#̓p#}Z5SaZ~dDQՙSGЙ9.Ulc hkE~me~~x|&DI ^EȌs˧6W~BBMhEp\+? ~?7 jw _X;jLfH&VRҔb,WʷjnX)b/ֵ35>("0]T;5y&LWO:Z1GVK%U/+h6P؄q;2~hb@~ۆ\A1 R9Wȶ"t>$k)ކYQ˹%SɂATIae`ǥjxC7~Bł(PrŞ30rF>.wa;"ߐ }Cɭ)+P*t~k'N8qvm( ?`'`GĒz\O/(^cIVzR9&o mYL]yV<>Ȃ-M9t7Wr{.amR}*6Zdj#ۜyY5WZ(-d)1)9 U.t -!oBX߄YU9FB/qG hk?kL]*Xk)Q1p].]*> |jY=g~rsWs{)_gQ€ Sv:Ʋ?Ml!UEXL066^tAD\ITd?{_EȕDJ4"I%@@.B: ZE-Mw dk'zLV7YAc"P'ֺ\Y\dƷ~VPLu2ù9F!Cɳ~y2sGDQ5+?Fs f1iC8WzB]w Dbz斁U}TZ=mB3LOX֦!w&V~)' ]*kC "%~;O}!g'zUa;?5zW>SN8qĉ?C-$weWh.Oz)_qH6oB 3źO&֖&> zL+#M4k[r4nŀ>cK5 >ƞI9ZPP<϶F.چfHEy) ]7V9ϪV~>kUnӪI#bf|%4 6 9 \~dS0[(<Z6Mh:YO̭vc1D;@g5 ԘֺOB:J#vd[Ryf]Th/1\MP=VvX~ԘmV?7="Mg^T{q =$!/7?Ogvw4xLjb5uD28>Ja0b5paDm I)yFQfC 1 Hlv_{wxYN /Rt\sk׳qj\`*`B*7yVrsHUR91`Z>\,ԃ¤ ?3ݥ= I3- x9=`(4|A!DEgnե}z{Pӵob;i{9]*+ (U6y?vԭPv=G!F߄]OlTbD! ȶV^!\^&ځmܐx֞5>YCqLƋn^/4!VEtEPjLE3$6V`:3}vR.m~x%2>ju$+}+O}x'N8grLIcG;~wO}JoG*/81yM!Wv2.3\Ov Q0m.93=䋿(*Ǘl{K5WfjZ 5"bzhKM{9s 2&& l}Aַ+~Pۗnq9 Kz@;V65yEE`Hsï۪`v9m;Ⱥ٥zg 3̌LcZt M6%JYuHB%V9Wu/b`{tXSz\njMl`‹ŷxEW4$TQ@Big!;_X͕ʀhi^Q4F QBǐ nCdl庑#3 bBf[w?[sXt4}IL&w8M;cF}> Yc4YM Ygm)2qwƳĀc9r&qm:K$Mt~ՙ'6p g51M7SSnlL2,"et'(X&gk\b(|i7(6l &Bowu/ 1{JjzuKPRzy 64rf;ИhmWGZ7ꛙ@jX-pTZL>«U mh@+= ɺdnK1X?)y !UFY|#$+߆Ӈ8qĉO7;#H5)%UoVu^)f d4A.ۚ9lWf)7%s1UQTwNlDcXrf$tg<{3} jb#j9)),xg*ג 4>*_ф+ xgWnE_CBS+nfzZ^!_(ǂCZ!ޅ&zu lC.^]hTXX{5+7M{)xQY[@ PXpl jdYs&[_ 3TRݥbvdEB.T ]*4FR1$[`GaDRZ`jL ]@!FƘԶaH&L # ̥N*%hBsm)$WSC ScT\HGvSQQ݆f` 䏥ΖR>gnur C[6:Q(h'ۿ 0=Ī=,%KqHc}fz41,{f_)ߥ`RKx4].=sZRh0E!Bbi(K7`*U*APNmܮpaWNw}Uc]zߛޛ2 uJuD7٧jio_J2T+\;7GI!z\n|[(0$PćT앟:|/]_Opȉ'N8UAS`_gW4/j>ĉH6o~@D-P` 4nE_uE~Ǚ^E!.i/ʱ1kK=\\s=R.T\cIq] ֦o xHeI+bMK_g-#$8&{a 5nbsf5.IQ E%ABSѥ Ɨn*'6k `cPJ r ru|nʍls1f0r}*udI#QyfUUKh*W)k'c,kDJӽPb4Xi-'dP##!UʹRZ1>Lu5Q)%BԹhD)ҬĵnKZad:8QʊS0qYCz'GU_N S&={Х";gӘTmnnV%E(lcXu|{ƱnO,Ez d1!ȥ=c/M`e[tB48Tx!9[ևTlk \O y"o1krXN.q`?."8Y^*<{ @~;XwXl+Y"1XoCݥPC(zZ> ]K>VUIaHEE~5W}ҟ*oLzP ~WK$\AaK{9n!Y0;* {\B) pmi 0$Q(h ("0բPp GGS !DL_%FF& #M||?`F4&Ϧd* Sk0b`&'R2HR1WcbW{9baHLK u[+=d3D=\DQkӿp /*ZމјdTsșK=Nt \aaer\Y&4z:֛@M~BĺQzA(0GVM4F/QXh> xbE.4rn1مt }z@̀%y'//aZ>Vog5ws"ڧ: ȝk?[~.4nȘL\؜8~'N88ToWw|{ޡ5O|5>ꭷSB  dk4pQb2,MǀAb*g(}d`c,MJl'Xv`[岜P1?sd{{o tfB,X0ʦ?3\:I5v C*еocsI(GŖP*[Q/V`금LTvʻy.b ,VOB>)7`)7r>gP+MO(Ex`w.ZU fBCo` ypXt%Z0߆P5韔su^t~HM??ƧR]IE))Ct"uNJVWV)0@HMYF#\Є> RY1 Fad ". [ ?bbgMۧς}0&1 %YhMg(!V&̯n>9QخP=jGfgnyL-\YA($GvۥbHEl6Vd^'QnT`Ȇge +=hmjf(0lb6K.r PXgg359!ViMlf`sMV>bjormTbՕ\8[a~եz|ϭJBom۵{93 V?߿rś"6=lBS+YQ.|YLGd; ?©8zRjBؼ3eB m6 ͝C=*c2/MMm2>V]*ThJu("ʣjk1ZTM8}C,gVMlXj e*fz ି-1~L6 iom_E>!*a)(TP11-̰2Œ g 7)(>V=bL>ju+e%>|//>aq[>?[o'N8qYt~@`JB.iK1@64XΔ;3vhDY[gXR@mA! pԃtwZvvxg< ؉.)H(+>%y؅jPsTÁN!L h1ո5g د%ઠީIRS11Fjt zsGAȥʈBK=81/T>,)zX`]ZaRqau8W_zzRQmSw {ֺ_龠*՘3BMJ@O|AoccmoìVn}Qɳ^!Xwd{搀XQ{Tޟ9D|? |`[oy?sa;??u|O8qĉ_~7C{N|>tZDnnn]FT}է>~㭷ޚ,/eАLOc2ϔ7_.rÕ^B#IB9`pfc 5ʵVRIU`R-v5nwm\@ H#$( % 0KƷƴxlzjN  RBrQ,HQ@ ^* TRT U ! 黯:[p$tgw͹k=1{|ݱ3̓eID,.,bX'> ̄^, e?颞+$R!9SuHEXR r~NC֓gaYNĆԤlu@rP6~5 0ljAMfɉ #lg%u %+ZqzW$(PD)Y{(*FŖQFDڱ@C/c%DS|Jn1Od?ԑDvEtO5BˆZs tMHkmp1\9?x0=X4󞪷] jhܢB]_cH[&!P2JoH__/\Al2a!kHkU0'YH;ڠ<+kRar]dr 21bDB`#~=Sf B/E{u~3Y&m蔻uWͨd2iR&\0t]bQ:לn=,iIIӖU&q-F\'.H'ӎlN3Ͻ?C-ug?fyY}&?ao7{Ξ8k@Ļ7>/!Ȧ"S#/ytqE&<$):%h첮l=T_d= |w*2}Um.Q=DNon<}\PeE!ݐ $ H ?I[[P4d`_VP]fI)$JוgdjWۮXMl5~$Кu {]4|B|wpnC+M̌ zޒ> pQ,c+8-鍶+:.َ+N~p) XCL"#(rR=A JhH5mA P4#_$0VDX!Z!}cy$6m/@U'ٰ&ڷ֤ \S6K ,NE=k ;Y<]5mױbL&>3XV=UyH2a=K$ZVU}n0LCg-iذܧDt&  4drӞlJJb=РϤb-5db<$ɤ&vVd>/dāf<"︎RH;.fsҝ*B1cG%%ȌPnPHE_ iޱO,d,˱˻q@Յl+2-E]2CaIU rO5MIPD-9EoQ͹3n{mRz3n J.8si={~0^C7c=9m-*WTSH;T.7m7fNBzH$bLαls@lYOcñX*$ ud146\/p*䞪%1q9@`4y`1)Zv_2Aj 2$1CqG5C]bvw|qA1PU铆̡d4eM"h;ٗLpv5YMdQώ5CL%32Ec$Җ}v0!g:ۮ#s2t?U#H@,Ui0JvQ mNGe[-k2N):٦O]z Ov~'K+{tAm8 ֣,% Y b   ZQlNR C~ RJ$DX R'l=:YKRJt_`YHT.Cr^|m_Ԥd@fa*;>S颕.|aYi }#^G6gXܨZh*I-+`t,"ӕuz)Cr~98]0@`Y3sIC:ҜlHAD"vpKĖ"2AC2'Sȶ%J8: yԷQ b '끮 ̲ 1ʥ&V\ޒ fhCud.mi9 DaҖ4d ʐ uIĘ YP4RbIH8 įHΖsǗۮ?$ @}}[{bЍ3e=:٫5=Tw.,jvlIX9:Ь5k -'tK!90K tݡ*~*eYU ue=U `-ƀcrT=υ]L8#{>o9c\ k՚Բwd{}({^65zwUd2$%3Ϥa{C]nn<΅s,ʐā=I_=b\4#ِpnA8;SKL! hK$Hj2$:&>rs`}r(!p 9.U=eú%]޴]`Ȕ̈́z>cCSj.=YHrD,.c#9ooz )whvlcO۫ބй-[yf?v_33|3c68|n{\z }f Kf^vwg>>ydiE Fcgt}n_1E]6A@W-龪v_`2J41F'$°fՖ붤1Q'&8Β}n x]d?/Z4yHbйc=K nfT.0 ̧CS%o΢L&z*ZR irl! Yӵ ӐlCUj U$yHbG`ax+b]uUS\1*UGbۮaSmosGru7mw첉>_ɔ!q,G>:Wm&lIш q(հB:3eM5 4SGhQlrwSHp@{Ǘ?{û;]9Rx'Wa0";3ʎ6q`vF/LnNM{biQ U)-yHb)Jϣ pS ͊İYgsX|h*6DU3BD&ݓM&m,h[=U7{qkmsb a{dOՋz庎媙BHl"~+쀙h]@4%:j4>HeH %5T%Miri%<$i_C:qپdY6J*pK*zx]uek=35ԧGui' DۘВ,;"يn@6ٓjM5yI<˖4ݰ88.R}Y)eLRrXlYz:يhp$$[Ro$@f,d[jU3mHž&e3tdݰZa8|f0zuoIB/H6ڥ eƖUX $,raOT8䩰#W4{f\:,Wd2IR D&F<]8FzIߐNKnH@O#_|Rᛠ ZR|߿9@ewT|3<7.wze=c7M{.NóT.~• *Kjf3zڞդ N7SJE=;,7hCڲq1Jγh{}]Iu:Z.gܒ΄-dz) !QZ5MוC]"&N|֕U O+[bSdS.g%Osi6߹pЅIb=+)剰"%JUS q;4#@t!C6 G  qTe3 $ZV ]IfYx &Sآa](=d O (-eO6l!S'k i+@mw끪6mױ#¾d2rA?yV߰dڐ!FG2&#[Tij8l=?C_̝;}#\ Ǟ;w*+B~xv^6{]L wwZ~)ǟ*3i P]fA9e3ƨ "z\-:5d2$RL*oL!3;z'pj:$$"/yKLؾbȲ,g>=V/mH߽XI#|n]$-Ky )(NTBWtyHud;$^gƖܧ10N[ɆXlCrB!XUIGGh)cG<7ZO; ,l> `2\ fn{z,A!20d ռm:/(tSSRޓ-.A%HYZ bX9@B"XprX DT$IMևb㔥.D? n.c)A SYWDGVr=K&BE4T :VitɄ-CZ#/y,wǮ^k!Ct!-'>z P$ޠ s7Y*].Б .%URK OzG2.FGHm׹Gvz'm_PȖL"\"|*\K I'TW5q@p=ވ ֤R,a ېn( p5zjLW6۶Ӓ*Tۑ-Ǥ*asmLm?TFYx0ܑZj3a ԧ}#їs_{6qx>]MozěovWw?A{C{wW\qŞ8"O"%3w,S,+O"t.@% BYDݵʖMЁŊNB;HtdI=nW<$ѴƱfO {)5,R $^,cU3 h>X޸}"%eYGjs!.ZDTإ)Hd.l٦e}tMFa@Q@4;R5+f"Պ*cB,D? \4A}w!sƱ4Kzvd=}^cJ4Ʒ3.3$E(5p k BNBF6YXcB'PYGQt ɍ-rkƩ! ..QB$R_<5'k-#㊡T1\_/-y,UJvbaC -=mXk[%}=lL}YvUo ivm`Qg!ͅi+fZߓۮ#bgO5q tR$" YH@x5ϋO~"|L"d4g秛=-)IKѯ~C z%x-S@0Tպ jR`39vw!J@2QKE=/C2Y!lzAωE`ܲݎj22i0+\YHcȍ#L`.]ټm+wf=c=jN_ve]`u۫d2H}:,qhSflXtӐEyߌ; :-+Dg&UO}L ɎsoJ2 z1!4A;e0ۮHM\ 7TBZsD&FW[fe&,1%\bKP,$ Ct+̈́u,!s]Qu(IȎۅyHg iܐ,cǶ+>?.JvRlm!df&\\Z4)\ `X.yCfRG] W'.4֬>5'@"0㤥BGO~u%!@3Tu<%8U19 h9k jnE 0HDR$P4ڣ' J @r̢v957hQBO [e%(׬%Df\\e+6m77j<ܒڟLbleП+U!9,xӒBCic#ټ,1]c8/:n#d$n&1.rs2V-*$ۮSdhBKtv,+O2P-zQ=NB^Ȇ@ڰ=b,dA /91΃vX1iɜn;㋁.$cX%JlWl_2)}r$^<]vT;ryC&@2.F"FiWu8sdޔ>ٰ]r:nIC2rŶ+>tsY<ɉra#}$C'gn;^77bC3wŞ8c=ce\zˏ74㊞&u-IJ /9\.cc&,i;EGٕtb[ buTL%3 8 )12^ U}$N*vYH'>)C ?=yHc!OY!E뎾 .ʲV.̄}ٜlfZֱYt#mC&h:Dz Pp? YֳhtdӒRHcjEE N"DB5[PyH 6֪Fc8'ւb|EGYudS{Ì <)7\}6Pn(~3+.lPiB/͟1!3Ҳ!@ >D@9MfK  wJQ @$v5Jd^F3BX VW?6ڮ+X*б,w| xH0F :4m@ ̈ȞeT"ܶE=GOԖ`5 x8-T#N_U1H0n3ĮtYE&>T&$%eHl X'>gj`ܴN5õ=A"1#`&dVw w Ac<LO6="O= Jurz+dhkʕlXJ}f2vl4-Zk{/l[R_vsG؋l_d|pO~{=wc=㫖ݭ`ꚌP$cI@!m*@lfD`!zޟLqAgIyj0ĢߢuUsmSɡtS] Ɏ-![o{pKz ̀y#gz{z`2: a=ͶӑM.c:l=_yH #gk? Y*\_UR2S]Gc zAl,ɲEe3[YHKdF.] :J iLJ%5Ŏ+Uf~pL`A$Zg!6]d@ְ(b gw6&W'*Ks:*ւsJI Y`"vWȌB'@ iSGfQ;@" =A`l}lUDQXSt@H rY(*EbF~zI dff k'O'#_A笅'CUdpeՑMG(.y_Umם%bf f%iApC hIudӑM_U;.7'aW5qlsQʑt;$e&W c15T]LV=l8:(4BP:JIϤU LBeHqvg!vx3ܰ*;yܧfdt-m=mٲ ,Nԧ)"-"ǟ"^H[IfZ hI-yK:V' e>T?q_QϿ {?^OO_ļOCx_vyZG/=c/'>޳|W ՝6Zn.li BeHZV]6ۙp $iH=OY3AO,b繴U0"o#9vEX1sҝ2:PBЕu"dIX9DLXfr88 iG}Uue˶ĒB5龮U] d{Qvl2Fxtnn.F4 >rAͣΖ LLtl1M+DfS@ՎeȎeG6#!sX=-_ gY 2aPgs2 %Fz5mw+zNw1'd@ 3KFQE{Ȉv!73.`8s 9SSX (A$%([*EYI>PLH<%f̎-˱O_AoJw`Hs,|j/bzFE~T1E!IhIχfIχƱʄl ,?[o&Q jٶL|6ЕeU {l˻QHbf!C\Z%B`Qz)+T8bf%5 BLS>3ɄeKsҝ3-T[$^#դ)Us!I7O za]nI㲙%+ ƆKW/kHFxزҋz> YYH/H7 zOnƝ;^7o%&|)+\qyK6!%bQ'_jczK?qɓ~> ]6{mk?pկ/|ᇎ̝Ru\z饫fcbZ*ݡd'!_Pe d:ZR1{\ jgIu5ɆYRkǀD`Y.R"%BFs2hIT=PպmMۛ4`Hi#_SpaR!nEyNVfۡ9Fb1M~93ga nyf_V#_L| UMC;\IȲmO5qԎ-$@ -j\r+CWU`y^BUHb}rQmeHv\!N 0~>tI[ӲZ6eYvє),TAT(PH!(JXĜjʍh \صRTm] X1#ZVERH!b z5i1s/D [ĢT$H@fCY:"4—dRV,f` K)BL;ric_%#ƆT!T30VԠL!#oNCzNIII*\. h༃_8yCy#sޡC<~-wx?7[ڷ=G>?p {qǸvg. |̥;m5?=zCK.K.yϿl-pJJ,M=V/fRݕ5 rEeu$} WfU3ͅmI#FxOV@gђ@=lZ:l4ҎkR[{*!}AS5R2Ŷ_UT5]Yg–> $RnHmS2@Cfu]I$Kz2GV Yl4]m;CU ̸v{1HG5\Dz#вwKpk˥/K.n=>+RU0 lLXe yN  hr jlsᳳ}fX DV,et e-)5RP j̜֒*D!ä冕B FDOR'Q@+Sd%SMB8sE1fc#Gα=ͱ=FTHC]]~]L0,9I%d'!ȁzkʅ ,Ɂ 8sp`JJʆU³lYO|&`^n}flI]W/PQG}UuՕM`1r5Պ@.dS=ILT"]F-TE=JUy#_,2|Je`o^ͺ&+2fAH A!A&D"\^6Wtv!@jqucMrv)|?qO7_=~;>wk?Sݡk^es|S<6QԺO?~#o._=cۄ7!]_Sկ/WV;nyD;:vѝ.~ٸ[.f O4۞W@62$j2Kf~` ]&\l ] zaⳊ̒/i"nP}]#f w|acZ㪙d~3UNX.ɀа߉p̧A3r,$yH٥g>\:蘥B:#3ν骦#[1T=YW6Z#|{jxUlMۮOf!-dK,F>w$ھf56n%/rvː,&*d`QӒnI-Fa_2Y\ز>m %;+ɌX0@&cO15*ލGD za=+X ZȨh](,DtAQ;^*2.@hV}hE֓F'm@rL5Ѭ$'DOb-)j: lIUL|v ]5`>ChR̪m甎]߰^w}d!$Ԥ5lH3`"\M'끪Sa㜭Ԓj͌X\, utYHqڽQcRÚ㡮2$1ɶ;,>?i]cG6=Wk2Ʈ-=,7<$EC'ς7\Pm`\'lO.qEW51fSTg!$Ny-d1гhNvp% @"Mۭ,>v#vd|<݄;w4n^-ܫޜ__s/77n_3._|{\xǫ&K7D})7_]g=Êm??Ï}7>Inm]9o~|+g?/>96zƣ+|Ac="~я>v놗\ro~ x# K/x{ol~~ϧ<䢇]Ql݋_^nֹK'+T;p]Xҳ]y T8>M|fI"tLK%(n57crX-*$&13!)}jBd1pV|etvUcЗ>6n"ƃ<-"BְjI p.ۉw\?d΅]PsӭlI K`I9-WHe3u%Uf`X5!tF%JGD0SJlqDPx=ZRwe@ b##@Mۋ֔ lkH4+A uRW=vPQ[> ws)7U ]lie$(Fd(֒: I.ܘkocVnt DM< ^)Z/Zх؛*wfZkl4Hq +KrRKd;8`ܲt ze麙p 龮ag!]S~vN4ØIjQMte3C Up j MMM !%h3_Ģv+!=nD}z 5!! וMγPJJ\z:;HS"پ|\JJra\ Ƴ+S/chҭS'1vmNވPI/0@*\Z1狺,}0l޺($#<G#ֵ?)0!D\fnc;~[Wh)Kow~tƷ?l?|3̇?y;9/}Y_Ӿ?'ng;^1\\C;;pо|{chcm{M6O?w_|Oyï~7'_hA~E~䗾.+yPL{]b<϶ە/ey{'/ct{}*bi!a7k~ǫ.b0QYX 4aa~e_|Ac=23gxϻ&W^;;wϞO;H weۓ,v\SyԧFxfVc $,ԦzxQ TU3n^c-WFCX)DΥe-׽ZmHb0,cFW5fXi S1c"|`< [RE"|^?'’$ [{eyP Êdۮ2Uo<$EI&Cxu-}fr~#_8Vځʦ'kT6N<|uJ*0 aTe=fAӐIyHO6L˾U01a*Grvw\C/J,df$FOjڠj@q@FI-*DhQj"6iN$%:"03"z. Jbc 1t$lڑH$VT\{潎 Kz΀ PW۾?֚0"-vXN|YZVӉe3_1y)FIӐ66Q\@MR![ 3w<$9XAhIeBmXlWHPve=P`I툦"3FfKtG5qLZ!ԥk}ͨ'kG ۾X56(Gr'X23f\13%hCN!cY?]UE5"(eubc9ʱ$%E=Ȧ!ﶕqnǧS/Y޺/#c-'V q_u_w~㭟=Ïi[|[6|;_ބſ^|Y1-/, } J_ ϣŕE!V/=qbqe9|/=DCz~W-]~Onj?]y'u?k9Ң8ʓSkՙBeKwW~CJݴg/xއog>{?P΂X޷_~3|#6(Ac="m߸oq].x@Wc&\w={o~'ǫ_9[. lzr|Ui;ӱTKѱpB],>ĠTx'ؠl.c\ ђ^UO;玢%%UH+'L84զ:1!I 32 x#}UOC-=,<[BZ1HYH˪mOL>3=l";f:T-dUPפGp,b A ɂwU3za*$bP{C@2&α44Xs!J F%=fQ thIR|0! ^5[7 GO(ќ(6 u@eCh=.pX Ό([ВSlX"(֣ߕBJ"2oШ(N8D r9HDO ; F K{BBh4jI%+A BDGًł8CU.@Fj#WĴ2$FMP:MkI aFAPEtlrC:v*-@U gq}<%ݘbr5[V;v˞3a'>[sOw\Klfs~^Hp#WC+U .PpIMf䋖U4g!͔@XV]}: iG5eH2i>r9΃ 2c,Z"Y ҉vg>vAgwhv0 ǾYwo}C/ I4M}ۚo۽! |/ 𬇅g>W;f޹t/?}lUM}{ok?z).> p^ 'kvEGf zmОĶ7ƠBcQZRu0lo?p鱯/9Б{]}G\pO_yc<_s nq z౏Ky+з .<~~Ox#;=s sկoxcm?]đ?~J>kï|i g}_|#~[拹3/{ǝ^տ~ϟyiu#s*[8& wxox綾^zWވ&&Ӟlg>%:lCfXN|v$YҳU3W~zLb&PX[fWu_zhlP=Te!lW6CU!r.U7˪'f 7PF/v,ǚ}}X%)Sj2 PvbEqvOñLْjBBqH $'>KU p&\O7*Cɸ%=PU<)BO&c}6*P|X7,mP=츜hVc~АU VC:%j;#2$ hUu$݊DF8:BpDb`YL] DV )Ӣqh=f(7n^)Qj$0W嚴6p[J`XK@d-H䤖J`ĸ%Vd}~&*C3MhW4n`b'6WTt2@!Sf-R!ʼnb_2|ffwOV f}>e_]٬9N<,CMcL,v\#ۻe[qp]ذDnqэvI%{&E5$mYo{1b4IBWu %lsis3l4e)P_Ue 3LeCu0]E=_6ӁVlQ9C&lW4QTwe{S㒙NBֲ9mv0qg 20wG/Ӎ\LğuM"O]ɷ==_/mߑ֏:i(zuwLa?97~sk5_x׿B̋٧'/^(3.?Uzխ=>|?MozěoҾi|>D[~џ>x|׳G\ߕ|^~t^'\' ?=c\⊇?ozӛ!x 3Vn?sS*7>sf8z4p=-%§p]BP5bh Gۥ}fr.#Ӷ)3irŢ*{v隠;=LC6 eV`1#y0ljO7}דذBYcT -uU3TeT Kx윲xH.ґ,dX"PŎl+u'(ڍB'v,]_4bƚk iPO=U{ xMrQZY0c\M5WiW'a\2sK%5s^vZB'@̰Dx@"k.c?'D"eg%֌S`RA4w5(K獜~Q9@@HDS76 3%JT- y;yp'_v}|cÕ÷';<_woy[lF?yV# ?}ws%)1ܱG̎ho잹{k$'\t‡?t־>񱵨 `g~ۅ}Oq }wҘyޣu߿?n3]G~/pٜ\zH!:kmaݑm4O@W5O G!a c^pU/fl~%%6l7 Bf- FTdIw]\aXTe.ۨW%PU2 i7<$q!,T T ?BڗNԳ4ڈQC#<Uu8YՓE=f;f9AFLZ *LsN Q沭YGd UNCDzmCʱN`Ydє[; d}.lZԒ.]eOe0z6TeM IC X b)c'Sb(Qu "%ܝ#Q. X V2,@ `mUECO,@" ÈuS8`uĜh1mb"I;fzN?A8Rk)Ʊ .%O}jC2d⳩OO p6lcYX) 10ps1P-9,NCoY5Yo{q0n˖e9&,d;@%]ZܺeEW6;Kzg S͢/ "],rUO,b!$R`n Xz 26u0|qfn^cy.~lvd;YHc偅ܳ c,+\PeU|w&!G+qTMz Kj3ϲ%=,rvP%3fL$ {gwhvn>gx]gU ?ſ[{'/{ߜs܄/q?>k]~؏=n 箭x;'wUCCnu+.|@l?uwvzgugsxK.ϑCYg`~/ +'~/yt1'c=c(^/`3s$g>@:IQܲ:?یDtc1PXpnV&\W6,?ز]@P^6:mICZaQ<VTZBڰS`U=fs#sOm׹]fm[d iwlѐnI32jBZKʳȤ+d;%";f:rF?TeDz&>u0wnbYHf!1+"AT xI3JJ!`sX G3)ќhQ%h=>:etӳ$MY1 ҍB;0"d <$gE8`т*vvN6yHx2fYw}JeHZR*;g]2`&PJ"]U {a{=0cOޢWy_4y }/m& W>~?Ocſx훙;&F.~kro{zo<տuۯ+o| y箻^5{ . @w+ugG>뮻+>3c=y=~V<ynC1q#k[3q `!/~g?7C;N}g.Z $O"nۮ02a(2 LXEZ5AWd'Ӄ+["uKN1b N}& i|uK2ڧyFE3F :OUl۰&hd3̄%:FO_!5"_.ocXy$婦lw+6b&#]?'.[}T"mP4 Yxh';-)Kj'-T8bW7m#ۚLMf2*}UweXflV "eUld Ǣ%]9\oulg--)q,%P.`%nLbRY)@X Q;tSg-A ֣!Zk}BFR[=ej)BfQFYI!V9 K! 0 = a! Q;Y9`XKtQFF0ΒrWP:*)YOrMObA;IWg!=dvZR;%eDhHM|+`[DGCr hVeʒ<f9E :c}DfBKz.ᇦDu*ܢ+&AL}l泐:V}U3`*\.r]b,X1|;ey]o^W5])Cdjf22$d8Hȶ f䋮j'l42$㐗!]6Lt]e㥙/kMb\fԕdfz_|"6yᗒsȳh,9'}o{}_}o߲_#w mæinRۊ$NAMI"h(}C1s]j}to| yWnB{iuҗO=Oy+_//ŏ~2_qp饗N9u*<3.2n`]%Udiȶ}guIT 0C*]hDRTɠjґ+>+銦#l@tdXgy Dx#†``X.#ځ$RT8f,FT= 4d5 KvdۓuO՛7ԐN3"BX.Y!L8t 9 ,Y*۾n%% TEtf̤#D wdߌtLv|4e3+ ʐӐzӐ `" O,j2ҝj:)DK붗K+51MYXd: w) s8$ .+) D2MF^2Dd sS%Y2z۰@F Y VSB'֒2 @Y`|&J#biIE΃btYF8^a{wC;Ufu0kv0 )32cEItI9Lb%=՜vBCWJ#1%%:'ٖHp}U-ԧpt}U U=ͅ Rf>t u.m\9ѹW"e®A? Y4d*J>;g!+2ẲM[=ƇwKt`reΥ=g!ByH)tgYܒUXdIVĠw,ӐUd'mXݏk׷KmV,8vxkܹٝN܋  ykO}Ⱦ%[._r}3_Mh]֑q4u69qFۄhee?Oޯic􌽾j ic=*ȋW[/}1ϔg{w5wڐKOGٰj a BZ3v@WCZ 2$$YUH̜%=kȴ$ж+$rG]xܕ1pEZg¥M}&}Tp;#`ʖ4,veՑeJPW6۶s8a5/U"rd틡-8g n{CUU;3yfCD30"tes0}΀5O[Re%>3Yw=b$)T"hF%]N|ۦ㒞h te3PL|N P\-rӐCi;Fx JvϷ NBWƼM_ 册(Q,gZT6aB! '>P'DR- AΛD٢ j2J-Y 0Dsv8=t $xȉr+DUO/Ɖh,Y:;-'3=,Duưdfפ.cؓ@ @5lpAYرdFȥ ,5 ưgc_XV̠⥁.ےe[dӞjrD4<F@ /ydF-<T]dv3dsZVњuYOKJN4 fʰ;Wcy4!o|UmM,<$a}ޑ<$@JyQ(ʐ|\5" XJm[UiC]וyLҶ)_ߟy$rr9Ͻ^_nZࡅ(mME?_*n~MK;|@ѐvo?96|< wQ|~E7Lޢ8jkkKJ)c=B!,--]yw8x>3Wo/]]??{}@}iqxvpeUt4t:4=pCzA#沝, }̥5]Uf}M%)YT=CwdU]=p*Aߐ^PXD}]v°bfz>yK-"W>iXK @Up-I{ur.-"=\͌V+=$bⲙ|L'm`b߭8ɤ+C$bˎh}gDxD^ӱ7mWcȤSZ&[ c'7l/BBHbtdQͮkD3\1XIgQHj/x=z PI&vpAU|z~p̣K,̥u,I#g$; Y5\ +N4 45Od4bcv\cȅtrAUͺ1`.lO5χ<.0JyHP:Јk2#_A3*gnt+fn{QE W>Z-.R *d;i!T ] KI[dIf!̈́Baȅ3]$F;2o,*+3; R<+:T"s3F7pfgWUw5tw˻Rt'~goqؾ闼IxomnI=zfY+7`=c/4t:][[ >poLN'Cp_=GrsX c~~g~vKO4ڈpeKPj2]`(d;YM&VNzN Ƴ̄,bUu 5rYfڐh*\}\hwbbLe5lu#[fu.n3qe.-BZGU\˖3` 0EG6q{J#5w,Q J-ҲmeL*$f:)OɺdI֖"`PaPH TߗNc` 8vF:'ݞ̲,}hx}ؒZU %\ϩfDPZ(g5F s0 0S`A  +\HY5j`L2b ؝$DT6(XN4 _xFB?#-dVbQۘh=zb!~~>uiI57F[R ЗuL ޗL<$ L_,R9K!Жg3P]jBc]^աdV1S(UdZ~OeϺ"]4, lz֖B6 !۶UOfTykUfY HϺSfύmGVE` yR.'7P(Ѧ>\~(I3"4ԧ:u3\!gb4e4̶ijDؖԿivU˰YRw(RY4^R!Ɜ,UAO"3gEk bhJYi,sEV˖s!aGPȹA)DRX`8̩q3}**b`Qȹփ QjzsuWbwcCQ6t=ދ,T@wc` B06u/7l7M.?tRdU 2G]scnv9q}7Jr E($T{:f,eҋ^2]1R0 CG`7mDY gNlUr\ B5r v\cM]56m]γBC?TZaKfR,Up^``2-㊽?T,v̖^_jSL ]aE, yJ8[~+'=3 :f'@u艩TNcǺYm&'_bv۬Of BN* О)sjaYeeۻ}?Bu̒#іZ'gPl2^Զ]u D7:Z\@uö]WhDLS?bbJculNins 1OAÂ%=#?X1Lb?GY\b@}`w]l:dW{C!xo{rˬ 1nC e toI `ˬR^" tw}AJrgY7 trPف:fh :N7u}e>=ÉnPTijCS16<vҚбq[69Wxt%yzw}~> qH^.⍯˷A{'?f|_exG`zMz1cpT| ʿ^߿LQR@<İCsM7sc&_PZy˩h`X|- {nE2]t;m|.Bokv;6 gsCJD𴝧l|I$Ef櫩6u ;1W':f [KTxHw‚kbR)A?xevƢQuA?R@uu;6Q('6"RiضuT]luE=1&MhI̮]t+u{j`r}?`!l !D{J; I D u9iB L" \2eˆ8Ȩ~բM9Q;5N/{rnP4RX2E^JpI4ѺgRP(Vc<9c}Bs똍tP/g=]Nֱ>7+lAaXh[6;(,C=VW~Ɨ|7||3~J>!Ess14q1se6|Ӈy׏}WQl 2S_]GPf蓣 Tfy.00T*u2 Il-Sq\(׮Xۘb۬s(%ÁꃨFMI6lnzQxэ/㻚sHunEڞߚrvE(:ؖ-xVI"@ 91жY!BvSvBm4GapXX îYa6:A@uw[}4 Tw:_l;6"x6ZKA#gW!"y:Puɰd;/t.861/neCbTE\Z.-Mɭ%N|b A2.Ъqf$>QԪ֥Uj P2DX-Z@}LCa*ùӴ(Bt0'RDxT 9W\e6)I&M*9p2 `Xc )3`d@*}j]49uJr'Ece1 U Q C!@[ )ǦNc@.1.aD!f,~Sc(UőDgS9r*f~㢛|9UٲzͶR\X/Cyzq;-h@w2Md~}2moyx[6ic9cyL^so}]u>y7FiR kN]ݖU*g^"2 ݨ&'Q0fuJ0a+7glY1Sȩbs^7l}_s@$`B0FPRX|~6]݀ #|i)TPص˖EQz*2#_Y )`uֱj]<!^rH-C?(#Ȟ6Xp 0jTM"mSQ $%ٳ}pѭs*P dK>%S(Nj!BDU%ٖr{{uDS, [Q9)N3 y !!2Wř<0赣G -[̹I=Ub( R6cL{ɗe H QͦYPu;݆ck/W1.'mAT`5:iX=UHV1|RINAc4@a\RXp1RmI̗yˬE\?Mz7[צec1ʧF>Cv́ U.6Jglc*IN!˖ʧ$Chy('v:T]ıjz6B^|+ Nyҫcm c6]rcա\Ӧ8-sw;zm)j BsԱICV>*|[jL\~'#~7|dEqk\y7>77}oo|Cbs1s1GRuM7Mtk11;-'Iժ(x=7Ne0QJrrr5gn4Uzz[Bm51k1ʱZ|h)taM\*liBJr ŐzDOyN~sYT31'j r 9Qu36&kBq4ATJ0`ưhul*Zl^JQr똥nnKd(&J;v}r=k1Y}tlf @Pa Uǂ0T]z(mוr).I^O 9pwBwXFQpRݧzzA&e(),WX̓BrmpH WeG#*.?,KQ wu[nE3E7޵R€՟ͧێ:䧳Y<e7Pe(R3jm2J-ًPC27Le4ǂ>u̖oUEg]R|-eG׏!7FRRp*K|7F:#Oțf}Ql:6 < qذ=YҟX4;6۝duDu4ru.n&Z/d("XBDXprF +~6ڹ/2˘_=G=>xq__ĉfL6KӣMں99?7_A~ns1sGO {n8 ByK!M}cRik-^̡*.4 P&&-ɥdпE{,G!`NEAsOz=7m(nvѱ9f>6BSXQp;[XR~P^7z7LW>04!6C?Y?c-][ եt-QK+lApˬǡ(iccf1ǽhBIGjŬbQ(;&e^g=P c׹zu%B`II,U.F%Q`2K2$3B*G Ӻ. >QDlu?Li(M)`SWWًZt>cJ9M1 yQAԅ~2咋Yoc;VbER.ㇸ}0{g}n ݾ9L/s?s/yK.GCatW痟[SO{~Iue=zի^?ŋZ:j8c>L&k|Bfwu׳WiI}&e[k#Ke]4}tkE,`KK14su&M`-BzGnb/l Q<-f[_`Lq69O#*fC7l eS6k/c#6+@)|:8l0H͙c=I3? .ԳvSi/&C4ޑ -Wn01 tb/h6lc"uv,82c#DcBg}E6.v3vEǦ װ=aaˮS.CQ PγB6X_q˗H>``=0Ha})PU,Vc(D@}H>42D侔s)Zb4 Gj}D R3jPDMyS]@(3o|ȴf[ck3_%̱n!@%Byjuw h)"R:Q=U>cx~Fαw3R`e2O2]43DY 7PHP J{[fD@P{u_^Ԭދ eȓ1|]}$|ޏ2oy[>š{w~ʏ?O{{o__}}C#~cW_}c9擀;#xu]<[nY.d2L'\G-pr7TnnpgmCmOE^?J(P**f"xE>;2@B,kW,@*10 nA’,BYmb%0lwډNcfsHgDi4JNTrvuN"YNEGrN4T+~UԹ7TݑĬeNyE\V# FBkO:()OBNcNtX7xϏ*bTQ?P|ş>w3#`(Rft+˅Σ r)4QMq#(13 j`PD (p4zK~kȅE/<]E) ԲB)mߣ򆿜`lخb>PD5X$it,[1uz1 cI~닽 n2PwƺV1h4P}'Fu۳CU[W!ıFa(dž{ѕcEXl>+m!2m3D6ٖ!SSYgD'w\vQb*01u L6nʏUybv⼉8Q/j[8SvD{э YPf <-:^Ԧ[‹;fb SL u[W1O8yHcLW4RX̓~jG]/R~8b#Hš?+_+~um׆7i?{?9!=$c'_<[ni檫z Sw9?廾4RE7Bxcya}?>C:rb2k0—YWX*1lw% ŒE7nC?7޵e(Jr-Pp 1nzMzATmTx:iwv[kWe~nVcY|^!7Pu9uögر\`uUvxGfp\ lu6m$(4m Afύ ˘t®Z6Gڲu h1T{]p lZgQFA}cSW}?nvʢgI2C,-^r-jފȌEvߏr [TB@wcoͦ~ ,$cܡLtD (|YibjEVg(C9퀺i3qu y[buaX?ػLpE6Kcݞ'g켛,Cn1jm4W#_fzy{DgI(ԥ?pPTi$HS+uN~Y(v~O);v@<8Hp,8؞9şg~Mۮ%ol<9昏;>ʋrLʐc3#W_Q~/F5ggi<硼rRV!;V(dܲk~E| l dG+gڥ/h.HG./#@4d2T݉lF똧z`B(*,onuA>n87Z6G~B F*"ʱ@pnٮYˡj{6=iYHRPu%~B? TSHK'ͪ 7 U22@rn0 Uw:W?-Krc6 Ւf;.cq3 ն]yіBǦ.P{:[شow3@LQleKLM5@"I@R/}!%e;rCB2`H Ru#5.SzZC`F T8j"PS@Գ D@$il]-[ouA.ٟ,Byb1 T Edž@NEF>#? ^rByBٵkNe3|E>WPl&а`4-9m9B^Ai6glbẹP2.r( T߲)["y(w(To)hڱQ~rB?&=뻻X,lW#Vgn-ţ0XƼvϗ>_|۫#Cq "nO[ ^Tu'rATA~rO=><Gmp7k{}n_~cƂB.ej׼C1#Oإ1 vY(cV됗@ _{W}:[ 6.[$Fӱ9o HN>e*2 <"S8e X}ܐ1fD rSCn| yJmu-&R\yBnؖBp.(\^u[ BA #B ZW)12(jɏu( [AFm:Q#B ݶ"{1GZBOC <47tӓcv)d@:-/Yh:I(SFЧ ][ XoCy:Q U{nK!C*S\MCDyY@u͂C)- "~YyQGjRu> 9Q(KkPmCF1 ƉnzL>#A\22M:fBNbؿ8(? ][I"NG=>,ܫ3oo_m6{ɳW=vW_pc9c?,Oe3BYb,;6WӉn,Şu `ў4s P/Cы45UOۧyA~/JՏT;1+w 7uss)V Jn1ZbD'd 6J1 M}է| erQ)%iȞw~[6x=淽 )/K:QOҷEý7r[>9+ c9c>~x7߼ *䎕FW, M`mb\FTf1)ZMCz}evt:[~x(y(c=eJUooÇ*=Vþsݳ_M|{>~ؗ_^`~{ѯR"NC|׏Ep[ 2^T2Og9A``I흜_0Of0qk>HfTCj\JMBWLIR b`8BmO.@d1J|TDt"^#`E5F"v^, dYnj DcTQ^|~EP&N9׽_0 Ǿ˞v+n_,FOs1|x{WO^__y=f˖yF`P~[g$lbRVi NEA~{-$'"%9jm(: nE n@N>M}Պ:c 2 P5NAƺ)Lu/PEn 3vv2["l14<-\MD9QaEou:0aV1?pSY9Y똥Z}F;T]Ǻem02,h0.B-R+@wp6^ 4-dTPhu4ܗ-[OL}w=u7~B.Lj"3-uV";c83)ާċ8 RSZvI2#"F In݉!g%Ҳ @)>HfbiE['l>$'E/f&X/*͑BFS:;hs#/t{FgE@Ju2 ۦNA'EN~Ugճ. WPn4P#h]Ģ"9dHT[cvM|R2kK>}uя+]Ȗյl7h&eHX7vu\ vC' mV;f)]ur!Ҭ5e6W!(LLCn۬r vDXek1LtY%:Qh3zwiDG~%o}wpm}p ( ˟n_е_?o|ڿ㭷?{wΎ}n9?귾-g=g^wo_{?:篹ٛ~['|k0~>eo?ńwo<=w~ʃj}㮹 '~[ٗ~{]q];q!Pƻ'u1}/x 뻾/~//K___mzCT=7|sAT6k/fm)0;6~8PncJ'Pp)cs`8 nN2 cݰmfBK.hKsB] ƺLw;#^])-Sgrxgs\TSwJ9)+-S{W7rٗU?dx|~\@eՠX/W߽e}O~S廎9c>΋^g>p|>;s\?|XuKM7ݤ yߍ0 xݡar8u|UL;[S_5ܗ;VMݐs;6t{4'҉RgDvԷ7۔}o!9k6ک&=͝ 9h_\Sa5Ѧ$-C~E6K1IشnC'RPP~:ܲɕxVp}7dAC rwvpoyPJ#TQhb@C9QܰMb%hDE^tuֳHSAie(Oeg)4oEpfG =U"z$D+.,O3Pur!A" !PExz֣<s Q0F) Vml5P/~/|u4nOQ @*Ukds YWS@Ib }At!Ð*Zu(E8#ݮB{i~ubl˦f۬o(rS_ ̕*IN>u[ Ű y1"Ⱦir]Hwu[ n؄,ߺs PxQ#:QɽF.bڳ>e'gm(Q,OCwY<'Tp4rl1ORvJ Ne/fS 4Qp}Sha!u زQ(,vijXs6mP<ƃr}:}ė}yOoƐ?7QU?O)Ο g<xgW~=!~gU_>3=g~O˺:Kp5uዯ /};^hH4yzS_H1EQ<Ͽ|}o~_C !OLDY -@)ȯC3_BYmʯb^(E*"mgid g1*XlՖYGe(NՖY*Mti~4T]܀ 86-rǁv SG>W>`F~JX iዖ  #7V!h` i>IxX|[z,˓'O;w.>n?翽G9/՟zw&TSgƘ/U)eL濼{ֽ?Q:;uO᭷g4o_=~)7ͷ͟sbW̟\z׿|7Q?Sp۝[ '^ГK~O'o5[w]c9;g=Yo@^_E481f+f~g:pJ=WA(P~۬)xAp꫑n7ts2[cY?/澘r ] uw;6 Յj7LD*5gc|~5v[xk>]<7=qJptSnod_d?q`GCC {{d?뿪{9\|^}Cm~'߾;~/oͧ}nKUwO[>В|3Ouos7[җz{|1QTtM'"ƪviRbucsW1_bSבiC7lnP,Ejra72"kcݞ{& S71 @3_vBmOjaFwj? E| 9ATLT{6P]Ȁ)Q\l.Jr=uߝvTXQ[‹:O' ummcݔ/5Brns xQ{~)nu,lz0"MAnr/=(~EJ"' U7Pu͉{M,{(GHw= ݜ-f_7XjzI)\M0֋@RG(WjսZ4p}Z7 *e܋&QĹ``=L0q\fb DrL=D9Pu{.زT]_R0]J2t1K SPGm[f7ל'RGFӱ(p.gFȩBa, T_k(Q(7<+KyPd Enl1TnY P9]Oȧ (Nt|},PZ -[ҰMAm=7>e(6MvTnXc>P Ga0e/RX?&f‘ |?Y<2FNmME W~PL>obvH9Y'ߩC7 @Ot)jdtzLJ |…n:/?ԕOx?Ƨ={_І /!W|=IOzғ>~<~yO o^nWn?@ϼp|Ϳgg{M-oy|o߸k[EQE1y1ɓo`\x1ܗ-۞~2  'e;vUT}zn!:Q9,EB?cve>Ma}trG=BٵK </L=]N.M ۵˜D7g@c%;f1lq2[*T*ȥrLLEY[ꎐ+j(H(_oyuzE4e' S!e DQDQꇚt ̹P$Dq`cib`ZZXMM>y),Q(og۞4>cCխc^4ejc) Crj۵+HR|ܲBGnKy/n]'*f%fy*[XJ f x;Dɏm1X We u̶L}ΓcYM[pl٦w$ d/qgF{GH"+꽨BLTDfm^7' !؏Ni+1)81^kd~bǺTb Ka)vl:P:V^ԦY_tـB3|ӬKrCFeHO!v_EL>0QDwox+^>}u{{'< ?r뭷>}O^ׯ?|+_>px+/ޡlǣͰڟϾ*WOŋ766~vOX?/O_}ѥԊ{?y559c> g>o}!lv]w=Yz+_g?ٗ=l2\O{<~-4M>{XRozӛK |$< 7|sw/*uF^=B HY궮ʏ; $ ,[ż@mWoY\u2_vќgP-[놭FF`l,cs 7ͯ~S]mlk4|60 (5-FU z֧Fm)mt5FK!Uᚐ~|U1{6IvcQhEBfً*'o0,YiQR좞F#][PP]X(vlEl/,E1%ۛe, Ɯ<]4cӀ`pn1[̳"9ֈҳ. @2i'f1eƅUF2.ra* ]"M{2|iz\eSR"B3Q@ kܢX b مo_tÛTc$+'=ԳQQ'~l(uT 8Cl0ͦ;PjmF!JÇilsD1RS7#?U&2ɏ桜c fyя2Ϲ|lR3_fmVS\`Q~ƺ--B({n8Mp#? +'khblz!zp_kfJAnt=b:ĂI/BQo(Y(G2=7&X1U{n0PA:6cWDi0b Ƥf[6yY,Ba0O//FV>ƛ{<4!Cb6ʯʯʯ8w:uGxaQW>gp;+=P>祯O >~ex11p8|<i$!Ίniu !OS_l.:Z/0 ;]VB6t=- \&Pu{WGUjǬRەQf+\|ߏۜHх_[ u+?}ѽqg~\r;S=8tz.bD`F R^]-CcVNts:HR {{M663K#jWfӡ)dsnl(WTh,Ɯ|vRn H$:dPCB eZ P^]l:mgy{i* js <-ue+١F M]+PJt0~?ҳ\]yϷm24adQ j}db5&?R`b`D:ZҺSmЇk5]cL.кg!#@.pe%\J9eݲ*3_iUu6Mݲ ]#J2}1-^ we3Y'JIwmڱVȄ:䖢A.Fuf@~vJ,/6LD% R9sd}7z_wrߍP"`|эR@un= -:6 `\?i&awPŨ);=cTKU̽(*'at #0Pj2PI~:f dّ`f %'D 6Yn:d3v1;#|}_vԧ]1ЦY4 ,(7N.Pd{ѭf}ԃMh.3O,J=|@ë/䳯8s1L9s{}$17x5\sO?)~gΝz6rvR9BBnrŰGfm1NL{o1 4 @GnIeM`۬e0 U-Ƹcɷف'^qvm> ncyߺmZ?(K|uۘjqnp"Pv3']T:?(aun`.e,1c@Bۺn. 2 `(`jRĩlH(g7Mh'6Y(Y;^t9uz6#՞͎"%M(ԲL>?kC)& ]@ճP7eZǺ=kܑ8h6 P,,v~;f߽dl5{/0*jŅ V5(eidRfjݩydfD?u>cΫMS;V5Y(ml>(=?L#`5$EP _:Q^TDMP!cW{^@wA k/* ,]UTP)&ډn B ʦOujbְ@ %'dDGRk9U Q@X"3`aؔR`cyU~+OɂP1`FPL66$k0 T76l;69 !4v|i+')g}cu& ,TRE#?vMST6 nh{Qh['zۮ}d<J>Q<"qXzꣁ _P9cRnx^woa #^r%G~-U֝ets ++`1iE,s r 8EzKaKP$R,7eX^cٔX$;׶x (AlI7!Sg]OVgYN~ƺ5IPy֥7MDYkY( `R(c=|?f]d:fvp2[ UπWs_"ȶY]t#{M̚hZ g:y,6" 6R9z ܱ4+wB!ϔvK+տ]se֧bVz(4lh bD-cF1/=c><[_u'1F=gFrhq:`E@]qa]xE D>W Cʲ[!˯-g j*j44- dXU_żPnύ#PFa?HN0]EFvJARjI4TrB.[]@ u }9P`.=W0 gPe轨50;1绉gj":؋r:RmD7iN5WމX}䪻ڭ|ǚe:-)-TA?!f6r^Aj p;6xIDD|+,U2!392%WːouX شkxwc8,^W[.ÿ^5O/ߐ=ۯ)S(Xs#cgOwz;ɓ/x 4uE(z֋PteuV~<}/Pp6e[]Ntc06Ѧm[THuWcՎueֆb뮍F#OC4~Qpd7PV!45 99 2(5FBu`~*QhFY~g Ƃ| '};n3&bQs DqS1F@jQ(jIn*ɍF4A.b1o+]w?y*[vl2=v\A?{/[Zk=i'}@D0(#qa 8&tThL#8((F 2 $isOn4Mc_:jWU^k}>AFXYޑ$eHW! &Ld3Tl\?Nt#&2-ˑj.aE#UWE;<(dW.]SmI!q,3acv^5D\Z@Τ[7e!jbRDڵgYt=13;_HCz1ZqX:oLLŀ *$f ҥnm7'۾lcs"p*cum-*$'f=e#/#,vPc>ޒ.dW֙c Uk,7?TMMfˉ)=Kr#0BrK^Ȯ nl].羭f[I/k+ ^<{$8}L҇;px$<ӟWn>k[[gnmm]~!KY=")ؒ"ёNƳe-1h Ģ"3PM"5:8{/b)I7!r#g2B6 %Ќ1HE gnU^Ev7Z#fٽcU/C@dLX|юYl-Eȍ-ܑꩶ3醪^lT XczLCݺ)MЎD2m}׏K 2dq뱮rayꊥ9Ȅ4\ډ`yAc驮%h4 IC I_}ٞJ3WHARPO *vҡjZWdz_}g| A r" ʪ + Y"i f)|{ mpUM&F\ى aeHsa3iO32v(K2c"HՙeOXHs,5g1,}:^4D9X/L8DƒJH|j+^"|tl鳎ծxCC:vj6ͪ UٞƐJא9/Z3W Qpjڠ\bW+.+bmXT>ɤ;jh#gِ>ێ!HGődq #|&^!133:fOYg>0e!; Pqt/t\XҠƑ\WgP{g .U{]BK#?~Vҏn+ Jsgv…b὏[)w>c}<nW̗7~?oz߷OЭ-ܲ\.!/h4haJdZoNxz<Ե^*ݻ:f27GHO}?Ru-2$Y7!FT@hӣb]+ /[ G>%a%R6d }#?!"djp')A&lnT=$@b0уP@UH`T EF8PyP6^ 'ri˹˵p1'YBcX̑8\Ca2zmHt|3)BOvCM椙ҕO>;!eϲ'Ǫʅ=M`߱`N@4殻C9ad>9sfXt]7N:~>Cqx=+:RDձ>S55naYy {)UHb1͑Bg :NA8vECƑ0xRۑ^yuGF  3# 1%2O=z;D=w$GH"\ߠ?pX1!R7d&cӦDKlpMܱC&]P=:UH<ɴ "gYE#brX8AOX׎ʧj5*}&rܲ6Ͳ fJwBT(51\; &ȥX1 ZҎUbP7T=E3;76n?E'd 3DU,@8FP+w[UZRZVG|o7e"Va_ܷ=u]"*eHRb.mʐ0L.d;hc|ӊ%BP_v]9-\h)\ϑ̤% C $[\;JV3#"K rLإlt^БD=7m}N*J:RcU Yx뉪*J d\o]t+1¯ :vROsey2Ivؓ@ED˳ZtXՆL"\!u,ctGʱͫ8u\4@#^n׶rl,uX1 w,-u."ϱ8,ɟ|+/_>9sy =ZV CCƓ4K|`{Յnt\& D3i!< 25K$-X"+҄w:պZMt5MtCڑHjqC/zHŔ<)$;һ,qGʒL3~F>KM dד1k^5d6r [-B!LsxD+i_=ʶ{peH`U@ڠ_L `r1Qoᚮ-d {4;'DW+~Kzϛ@vRT@C,}&k2vW.n-ܵ[vC_w}WY'۞o~S}O>_o/}7o@r&)iHپ%5weBuGDW cq$YdƠjuy*=2MSWTXḬg1PD"ː)},ٍTH*> &`z*4ȳ}jW>5 eCUueY^ۚ ݆y"gg{﯎>[{_>I|\ڥR%فgѰ.D +؁A 2 }X_y.Y]_,DW䘙/|֒Z#Eri ,%Rs)Q۞SCV!HenP5u0^T}<:h W%=*rpH׉S; oI/|3"T+|;jI7נO?w3<9'\=q{|ycVbW5n~^? h9C9>po'_teHg.[ ѧ7Eu]FۛKj拖*r抋v@,NW:XEH!!=p@5}d14d%j\R"# ,\@baI^}гlP=6SWTt6lw; I!\ڑz`zYx n4#fnq+ˢe&ѐaTإ2aHA`1Y+}:u`cʐlw]F29(DWn V!mHOLːN] ʧƠDђ*C羪dJm;HD"<۾gc۠aK/ P!d?PMOuFh vӾjːd@)dC:RfH; i%盰Tr>Ϥ;=-ݮ#ya 2@&{V'!ɜ1waMWp V,-ܱbAxS/]ׯB t̞D h󱪵!Vz)Ʉ'[OB-ҧgEA8pj.ڡ#U4`2=O%ːBpٚtՑ,K%B` E0$LLZ)¾\qK1y!W>%Bڣf~U[% :u*TY|QֲƑZT+ ˊXp ^+Mg%ROvtX2 =mұ Tn{3?'~W#^t!r!|,ays5ۆ.|~-fڗ'j 7j E}d:!KCTLۛ"ct.p,w>0j _t͇cD2Bt( F@LwGu0qrOc.QLm;HeҎTsN.aJ2k1Q=?gXl v4wcY.|Yxi(z\ c]~"2P#U#nݲjIެ{t7uBGa c1P-x2KэUvMS:R@ `@~Pz'*$=Cސ"L]SdLL+/Pk?l"n2 -,ʐ2Ɵ cْ T 4QST}*;Xe`1* z Us4Y"B*C iO-XbF8,@$2 ~$YuvGCUW{eHbǪ*d ƐK-1p*$zL``P]Lݸ*ˉ>oI{ !^9,`LL:~Ӭr.:#fN_$~;vP._T>ٵUZS׻`GZƒ eHH U;EIiBH 1 Tc7֓w}>k$b '{oUgЯB y=T;PmIJPؑZtì&:pWpVOMh># i8kkN8q>~n?yyOOڟϞ]C9C9Ǿ2tFưnL#faY~9Xh O`tk eWY"}>؋ұ\7e( U*!$ SZu0[)dX8FL!qH t}huE6EDWsLzcgF)Y1F*ڙJ7TM>'b2nYAOuGӅ0BJ0H$˒|;p4Y)LpWlkZPN{_tgs7to7+Gq*;*WHGŦYI±HkI7/ڡP)C4#bMzk,ce{1AOgfO U# ;fneͤ=I"|!Z3P5 7oǖT' Y!:K 0g&9TDʥJ"o7W!],6vq4 , ;TM&\I&z\X΅"vK-b\D朝Hjb]tcje4USU=uFR>EMf2i!wX{!I6蠳ƨɱu:b1HcK/-LǪ f&ܒ R醪A&'m9cXle PHT&-Ħ.\ڕOuʛ#}]EE3a/8!ܒ僡l qՓ8bUHʱp`|s2n2R5e87<)" I.ί}ܣwnȯ{êW!r!d4ϑRuRo]ƌ C*\,ωE4J%}6̲g3W8ZxKJ Xg}tnwTlsaccCW};Ӣ @,mIQ[덋ݰ#cg0XVKgS|!EȥʐL}1T13<(C2PPQs@zcaG:a-TwWxʧ+J \s36dRB;*bܱ2d! xY #!VV"G;T@I /U"e;ҵ%,D2 4s9D1 dIYRן>_4s/td^t`.ַr$/qqp:҅f.,gaCU TWkT ;M"\Xf>oIk Wfx=H0^ 1btI, :F-Bc(Dבڜb7<R4{ޏ|ͫ0C>GD.!`[n Ox˭Tc8pE!dڒHGͼ$F %6l;1273bbY4V9pp%iY1gvSV>Mcۭϥ}A7zF0Kψg]71SW~`7/tM,< B!I}#}OԐBi<>N!پ%mRl°Y!+$5]Ë$N1)5:VCl˄i icfV45X76b7$ .șt]o#). AcH%RВ9ߎ`Ô;`ӬC. &"\M>k0e،bfӬbѬ%A@N[46t癰ti(UPS;@=d+nodOveH>=#UzTq"B2Ruӹϯͷ|!}`{GE*gv -H mZFY `D.DWRb0]NE֐ ,">j[ u1t b:_̺.w fX2y ihIKh+1 d;y:%keHˮIpgvL!. DW{w,YTd,-,Dw[^ܐeٗ*GUG/["~{8!2$;l= cˡ8曵֧NC93n-p5\~]M7TW^?633> g?8{f̸D:C+[r8pŌ H7mZ ե9e*1 ːdsv*D>M5]‚DڳL]MFʄ>9y]:݂lap#.ppV!% D}|1wY_cU/BFd_ ifJ̸ §}uƺ$R5IϮL]O"Ք\n)C )tIR3(]>#\ZX0"dQ2Ý8jZ\؊=ˡb7<lQ,~%#n/^O6<65wRP 1ԍA?֘I;syԟÖY`"+)|>Br,'ݘ"WVcCcWgk̅p}$]&].gYF7ΚHՖ0@_;vhYUwFRF\fL@Z6jrK%` )q I(iC&n8PBjI+ tM}9;A`\!u].B{̸eߑ"RP

    Xl%- ]l}ݥ2i>UHJ6Ao&V3`9F Y@2>]וtkSHFOtwKS]_=ٞnW!Io>Wm2%iDjXo v]2౪jJ hW!i% (ֲ` & fW1cZc@`RH@|4K*N .ٓ2dY-\ ;Pm*Q`J2",˞;,73lfKnaʅ4RHC9N ߗ0q3³,\t5%CdӑN[Dd a;Ve0k6PL}׋yGv7Hk\t$bd4/|Wm/ےD:cƅ Lڝn0u2ZD|+1%T|>uŚi&-nŞ5ڣ=cG -A~8Ch }[7eqv.EgXUq26/@ZbЫ:$s&'OcwʧJ(q4' ouj.ϥJ餙:̸mݐa\أzːތM=s@J0v!#1DK% ٍU=9* rdN3wӒ6s@'>[7mof%5tkU*.^vI+CB=٭vO7k1b Sl΀RgG݅^8tzޗ1/R1s(?=o9C>y+^,>j,Hc#/At?zܣzs=)TɀeH;9 -UJ>϶Օn viVsU-%\Зm&m-<zY`q$YHsHPB;N_׫0V1ۍԖYh'YR9>֒6$y2ogfnt]q!zQ U39;V\hX|FfsMWːEW\Bv8ڟdmfyNpߓH}lމd֒ChuHEڠ`*۫B Wٱ =/dX(˵뺜ܠ7"n&ʳreHc)ڟt{ErpuՑpk0ǾJT THj%rUP& "{+;eϢ6n]7`@|;J22$EGJ #0Z| S鎚EKz2G,>U+A1cuCOt;0w@EȆF`z CQZ<oŎ[zyb0~TΛfUA,%1B. n[SK~A^_ɗ{x7~_Gs!r!`hYg hqf.Q T#@fG-8E%,V!xwn!3zR* YV!`Ǜ`8E:N3>8 חzxntlctStpS_!q,-T3lSs{@'ҩDz&P }kʧS]X~b\:=7(C3&~,cTs,|:*i4PRW!v8c]I\؎Tlh|峁hl*B Q@HA&PV!ڈ0P5լBS_BZ$fNT5MKZ؄bl ܱ:bT6ͲP]!bzY۷X-gەYC&b7c9QPձt 6W!*v:VDOR_5F5U*|7JȱwӬ>$q.BT=][R?C cX ђ#sWdzH/B6m> -a]F΄,!SkH+ﵤcLMfuSu /۳$ֳ_L O$j{:А6,]ϱ Dz2"t*J>$se>,-2QUrX뺴$ ٝJX1޲j)C5A,#tI;u2.`-B1g'7j]WːYRcUgYWӉ*5j+Jf.oI&uS˅z%ۡca\v#U3-ȅEBK&S {<>8w2J$G#e&FG ڲB B`=h5D ǺnfcaV#Uoc[fِb'3$U_f%$CCfS/KaIg{P6/Sa%mہBj@e)#za_d=ibo Bz[΀ ˲]!)U]/^OIC˪';JE:N`j߽bkݑ%i"j,re\Qdꡮy_,n d?RưgBh.dvLw`/_}[>^wV?ho+ }K֔aB 45R In"7jC2i-\َT_5'th:ʧU0ep 'cGڭ!doILT,鱮bo34V5$W>-CZt}6Nm%K5izgt$K!`sT?Pn)" 3څndg/AAj^*g?25 ( $҆Ye7wgstw 4ߓ3oGgqC:zd1LTcE_}Ք!s#"uԛoH}ݍ|Gv7psdn -)9NǺ=՞03ي`w`ht GR ;v$&Bisp7. _"]ùٿs [>t!>1¯?r0K|rMv?!|Iy77[‡~W?!q_ԏ=ϟo^1To|?3ͧ뇼w'x)]}on=wkoϿ~IDr!|2l} \~XHr%{N}ԍkdڡ!h5.ML_6=mCm-B&Yeߓm&]_EVb@f~"^tA)]!+$=;FMt`vҧ'ҩCE/Cr^2GE!l_t 8y*@5 ñdV> $ʐFXH8peY]}K*''yl\,֬pDxHUtA i3`:VsoeOv 1]7jJУDv,{oC/36̪/ۊ+f"UH=ɎU2$5@#"w(k]v[ 9`GW'9THׅ>H-\ Ғ:pEL"BЫk✝ @Uuu[N1ʅ@8M0-l h-iBa"c I&13Z" ESܞQH 05M K&ۚUH!bejJ`;R(nS/KDȤ:E7ٞ>u$!F;vs\\ёiduK&.vھr.CcsAӂŚ` <& v?w9"3`jY%% ꐔ!CWȒڶËЃ,/_}[>^wo%TJq'r7 uͷ=x⏽]u-N|b]onkЏ7xM7tӻ?=tg}C}wO?꽏~ko#Rڟ^}ۿ6t奿5u퓩;|Qr! ٮO7*w u;\_0QU.p8v{ 8,%3P7Ǔ%UiIi$+$ȥO;R?w:OMd2=jJ"Ѓ4"tг ,ZҥO*}uÌ TJ {,V!(Ir2ΕmY2`ݬFf3v76ST-ʐ"@.nZRxX9L '[GrMztﶖTL_[f%'{oc<ζDɢ}[ץ#fc$lb/e:EHw,>/Cw`YmY 3"v: BcPHqlػx{M0{] D} T#j27@|Sv6c|]>X۵}[ I<ݮmPf nj[z}8P#]u2m}^hǻ? 3K+A `hڗmҧ7כ YMt Ct COřv͓`|+@,z5-=KvMU,7!ݓg9QUކ^YVQ9kAx:kI) cU+ۻ:OL4% zĮw%@LL3aDBj7jbs}ɶe}`BvCc_ ,vKLL:Ȗ՚'vs#=ǎ剪>=MqˬRau`󽮿g{sW,}zP5Q=Jsid/BvVGe =|҈G~CFxCNj;97꒰s%OcswJf =>j.ҵ8\.]k/5ǬiY<_7ḳ۞0N>?~s/)^g{)njHN~C7_jʾ].Iĉ;U^V.W}m?oo_9 $:gI˚`t@ːnс-Lٱ%#qV1 Β)+r X 8P)w ڳv}Ot+҃k]ɮ FTݓ4lN7PHn V>uH`,ri-) fnÔv/ўھgƪ)=]߯>Ta&mBWgv{-Tw2Ѹjh}ۏq Dz dfl*}v>9 ٖYFˢ8o}N:}'?c~}O{36DqL[?mOxf ΟWk/ޟy|wL/;ۋ /'=y;CWO~w{_s 9O—-1~RW]#>>yWUUVK/?/]r!knƺG?яx}5׬VC}-U>KAt-Dw4YB k0%qPal#zQeu3ǨËvXQ ,8y  _CXܱ}'P#u,`n7[^󸏘g3K2Zd*$ԦYTS]C&nlri[3[Ry2_膁eځ2˫ҽj[S3$%j I.y]?ff8RgIcD2 ,a_"3f"u\:H, 2OT[d;Rp-8օp YU-ˣ‘8ife7"|;WֱDdK6,2R5S05]fҝLgpKT:!Ee etb^Fl,&q-vÎHBv-)%`0$G ,jM̘ {u7Ul] :ffIҳP\ːB&Gz抆@&>Nt -@u2·AO]>TfzsR MmI䚌A Pβlص(]F,]ڲT@g v7j$]e_6x::@biIM}ϳhIFkvì>$5eD-銌eE,0@*Fo1sa͔pQ!3FÁW&;c-)+R/#4U>17|;ZT D×Dwᾭf`~t[]g\N ~?{y~b|g}+e?_Za>VwχMut{O c88@_yM{~gW)=xڻK2exb?s/;QW \-o]7ݯ>=޿wWol/ Wߥÿo/KW.koy={St޳_~r!#+DD" DN?!$O`X@&^1Ǽ z2Ǫ#՗mvZ=Ǧ9j՗Fee%hreaM0Tz3Ɖ5*mU&\l~P& h2oT!Yc\Kʱu@E zڙ/Y/C:-GGK8e {"FYx,ʐjV!1ls=oBڑ"#ݤU=V>fB7ڵKIW!YfJҧUbseMF.s&O&BvG͢q';bqpގ.WQ";̸iVuŹ zJ]Z5^ :N]ou=ҍDYqɼ#X|cM0BYAK 4{'Oڟ΍<':wɭnjΟ9yTu{%w՛o ؼ_]O 83o_~u8kw*^w=şg`}-Hc}\ۗ޶c|}Íк1x'_|֥_uk}ڃ_kպ)O9!/[>O]~__/yжm>!1Q^~ǧFԇ0r[Q@9lw;ʫ.[l2: H}'.߶ vٶvm3#mCI,T!@@OV!E`˪ZKj&ntzUTSXn|/6tA?9ݭW!Ʉ;6U4[2ړ,CHէ.?p=η8!f0 @t8,UHzɀT&l*|ב*AZ".}Vαip[F.sYSdrNu]^H O.tcbA .1}TE;,CX2q* T_vdNTݍtS ''9 ) #@5DV [RTYdKѵuزYLmD13s'gwf=˾jMymq񑃳5wb抖e1ҍUmз hY3@p쪐U5Mq@nIm'љsUH,)*PJl pk]]CUUJ7ֵ0ѵeH^!Okp@uȞj.ȦklĖʧk:K0@7-/|/fo6d&YĩK-º)GYs,cvz}DOJloI!|r"jWrzvXYPTFD t߈W]iMgQvː^2-=Ś߷u_q_OWqgW;{ko}#@?OhOo_zG=' {K_~;? M0xU?<-}|DkE{zS[y|uW?1__^~]'w} +f4}_k_xskῶ+O]g>>xc<{߾_x/S/s)y~7me _ǸtU~=~-˲,K\r!20WU=^}~ Z>>}sok6>vM$PE9˾j-KDN#@r bꑮuKdm1ipBvʧi6uDTUHRlTP._*\d{"ZLX@v %]Nݦ^HGvMD 8VvdT3RtmQ>SjJq/ژVH >HKpUHM9ف!ֳY_Li*]!L ZK;,8&F[ulT! Anؑȹ1%kiÔz+gɆ^ U}̎%s-|M&r4k᧶Ji*b"&ZtTErl \<TR4d,EwtMlHLٴA *$=ٮ^,}c=W>-CRMez}D)K&cIMޮi>_,.E/saL,G jeH-_bY d=f;"E;Ѝv`ϖ!f!}$YJ$|`{'4~CULj=۵/q'om ilbr2ځVdQX3eӳtVy#9фI!5A1L}۳}iK:*:$Ԟ{}e;RM4raBr_ U6xű$m;|% m5nB)79t?}ȑ#GN|/~(@ȋS=_3m@??'~c{_WRgm>63|>xW<&faw~G ^vDڷw mo+|_g=Yw?}׿q{ŋRc_&՛+CwWPKo|!+^<)o lv>~=F˶|L1yL3ᦛnz+^ș`$R&gyYsx2;Ӭu2iɉ$ЅnXH$-,C 18P6sd+<ưː%C,}YBv`y:-"RchH/|i.lH/Bf0#լr󱪧8ݬ青wݠ'ۙSᏘEEP% UHc}Ǻ #ņ)ݮnʣf1E*DB!EnJf4]n+D7!ݐ^g}JڦYdT]&VG뺜`p,p+dޓ]A] hbH11#%6IfHg]VY* )4RuM#5"HЗMzꊅ<:RKGjP9Nysb2ATXƼˣߦt[^_쫶 #0 l eHZ2eHccGj:bёZ'X$ ٵ>\mZɓPOsbp8YXt,g>z#)w` $rGʱX f3Y!FHBˢ ty2$ ɢcuuWJ|nkYp`{1}{pDBvu0єL;šjY4-fюUL.P5ؑbƥʧtNtX.}6Vugu#r泣|m*a,,2a`,ˁj2$r醪ۈվlvk 8T2dd ]c]+ Dbìvmo^2J )r鳑;<26?SԴDdccufO_ő OP *|xxE6=.iOvpi7ڐ&ⴕ EЍ1hyZ m;Ȧc]XH‘6j3Kr,ruJH?fҧSi D`Uv7&jY!r&m_5Htn,u&T.meH\)XVq ʱlHXKHO4 <LjV> ,`x:3Ÿn>kImۑ#5s$碋A|Ȁ}^>Г]X`W-Hw'GJ 0-Asi!qCb8t'd"E WÍ ʱ\@6fJP` Uד]ڳ ԐI;u,pT}oIe7׆>"RP_[fYȮ% d2=nkܵnz2];#pUIڒ^`5M0 X<ض1֊TʲHE lLʑR*J2ipUH/^u?XFX-oN޾H}>TH iMWD"|KF_7ҍtco%UXTdV!vj 7w[Jh 0Ţzޅ?r]=EI?Ň-#<W>Ytl!2E ` xh:jMk̤uG2j9Ta@&0t kY5=ɩ+Ʀ>i["@h 3"B7j 8Fݏ}[y~Jml'@oe?%_i v9T'')}/m\[rG!r!|/WUqȧTC_QrmFOv k bd 7rK qښvۭjK~:~gѐnIO#U[SZ!L kYygmz ]̥ݱ* R@ uIilT EX WHZx}/؟ Ghٗ[1#A];0Ac6eJXzծoҒƲ:plo72}٭BsWd" ;W%!0ƲV\&jt=PaÔ]9H/|V2S@5vвHw^낪XHh3WZdOT1N]#o{ =u-Rjt6eIK jm-0%_ 71k.՛.rAgʽ:COpW~啯|;^p[Vd_Ҷa^cwˏ'hyM 0C_β$\ SOfC< #ͦab5U:Re&@5DMfYYi' P5g#)p)C3PMLV(C{ʐd3"J87ggq`ݑndD8Ӭ!YԔ!|20nTse65 L4W$ eHː:i2v!agp)%(t*gѨc3vŒː) [fёB[uK &fNU5Vu:6~+b(r:=ׯI/%cBv=X æ^ wU"*$0~-f-ˑJ*v}ar(\X⫃iI#Ae8R-s-\ >ObcrؐaB:$U|kǎaj Kg>l+>pũ`=D7EiV}xWW{W-~W-B"c-.8ӭ)$b\eK*nj/ B:wyy3 `-žmKˊ}+Ȧ $*C:}ǦhX\%+D hR"Xw-zSK=0ֵ@p]Xu&s!Iٷj j6/u\sd5SNT5M,j EXՎeIDt;nؑJe>YIM}_FY:)Q1X!;x?/yK=T}s{RzBc q ӐN@PT!+od\ө/6*LXIAkj@PB7.#atK mX&p$YV!AtQH5L8J"9)&g,x2fjb)]jݔ{o{ i]᫐eicS FxeZ]{NBpaё);:f2 *3.kE@,Nv{k:w}~|;!tĀHկW=NUuU<5%" 89Ŗ@Pl뀜F͹OM1Kbh:ԞK<Ғ7!f=Q7AJ&6Z5@h4m—htd|$S4j&m-k *8=ЙK"^SU!TA mrKڲ2eC)q&p0rc:Ʈ4ޗvMcbzN|FCzdp>9wLyY @2l  Hj AAuX0:erj[wf6ÚX/mi`}Z&g>xR$+oM|v&HI]څS)  z2]x"h^Òk%qрw\.w_$Q@ %.N$Y6t4CɁ3@v)g6]DPOuevۄ/}2Ȗ::HA=#-jLs˛hrnRyjd;Ș6(ї%o> K\V{1#cV!H( )} m5Qw>0er+;OK^|7<{l>^SmO!`~e}==[n|4z^۽袋|J_җ_u\_׿UK/ޅ=k?\ 8uif51@f.b^ n:a$$N\Vy}QOlFK%;͠ "zb8-uxkșɨP{'sXAܥ̘1&FQ{]wj#նd\5]F ~vA5MӺ1snL%oEkKh헳m)Y;siNM7$"tlsN7AV^9dd 86s(I̎4AT^)trIm*$sA%kr*]y8u9o\&;N%u0NmNr_2f$5AD,ܔ)@j>ɺN^IF Yf̤h.YE>2bbzRd * ]u+JMژH6߯Il!}hqv @ƶX Ml[ez=^O]F&-[e+?3X%H<2B7﫟w3&^2ș,er*y4VN|Lzd[}_zQ?K_!F6tR:oP I6Qqx#=3dCO>'^36WrRX_TmhJMdBlG*S97qof65wx3u醜obvjE (Ƹjzq\UМ(in}l [TW姮C]~J+[/녊×]=M/)}@R>>쑰x 1@vQ^q{Ͽaqۿ''??~w{ u]xGj5@`t ['KLɚ([U#Vr˜Ks.Q!gcOlH8 3iB]lQj*ko$7tҹK x@33ˉ˗^!#ja6oȸF5Ǜ5JpETgu:f첌L#٢mBM%X[lխ3Y׻$ӱ-9k H,5-+yc-9:*(> @;)h{CHsf|vx.cВ5+|9vܧGp]mZRwY銆"ƈ˛K",cVRQC r u ҟ|=N߷G],{}V>}E* 6u OyS.9A.>=c='^ǧ>νks1]ar(514>ԭŚ\lܧ ̘EfCe 59g̦3LJ8;;Ȋ]UׂS~5-X;wil[L>vyUuƱ.xmzeE,Gm۶vxP3-OUQ3Z@ #aǔcoNv{Ŏ)2j2).= %P1ʫEܮ-$kFBZX: @M+uW+usdT6؜iE<5qhsU,$u @Ϙ^)ˠVln|e}kX?ܾ5+ko~z :6 KRiɛ8C- kFf-f.={L{nﲆAhЁW^I0*:ȉ3j%jH:&4 ~bORjvmghƋ[N|ג:AFù']z.\R05.o̙Ne,{irJ(JC*B&z3 "Fej'ɮ.niWo$s, H< Hs )\:$Kɹ:~.o⥇jÄtްq!Eɑ L\nd\L{ 9՛rFƫuDS6ab/%kmGԘpIO4YL1EܪXJ4rFB5Yg4^^!pdULڂMqJt'ji*/޾]}C/'X@ߛc=B/e/{Y] j"Br]ͨtrE]tz5UAjnә4av M5' IJ .dM, 9 C[,\]DK趲_M<Є#Etk9 §95$*-k'.Ndj T^)-dVIJ`DG:sG:uYd ƶ$s˦.qL9 -y[9eAHʩv *iȘQ\HZP_{eUN$o=R6w fu/]>\J!8]._.FȒ]SNmf-\MMΘlQl@F!x z$(fÑ?QolK|93 )7,V$BB]֋oC @u lvH+j R41]I ct滶3~G\f!8& r`"q@ZC#0u'N\gL_6^J{DPu4Ω9<!jg ~;c;芨VIJ/ ;)i-LnFOS&O^(6% A( i=ˣT3).obDŦ](b "SeH&'+|yJ O@MM['_1 H:$ܢcT4ܐe;BCxcWRvw]yv{Ix<su9O{~0o}]ӻgw;q`=c/Pc]w]?s?g9N-w}7vwwiׅo\wu 0&9k:| 933%@l *A}7mjM`xtAE.I7ѿ^7sGj_䠚$IFñ`Q4A2 Ƕ\b /M\i8djfӓmt?TjvE&bvLmunmBb$6Ne9^yuP%_5%oQ%1SC A1u٪Xx$dd:cfᒔcnt`벦2+J{^$g*zu '$]7^}32P2j4$%'ƁoM|ҥWQHKA .*'٦mYr@M`'g ]Ѥd 9%kc`ZE]FmF~H'dKj7\PuLP)JLEtC[onk u]옒AXM9]ˌYbU,HT)$LxY6$6| "X!@ Nc^y]YTQYIIx}l`9ӫbROM%u9i%XM p2xUN 51PqLQOXN5%QDΩ[d.P|lF6ߐog7 )z^'_]ln^]$}Y2qg]}c3W^y+ȑ#nСC?{_p d2yk_7pë^9;Q{u^{mJcWx3iq Κ.+X '}3&RFa @㕤NP&';kACzrⲂ9gWxuFw+2ft)z̥@ f\jFBm %Xvn,ƝlnSjSj=ULfd}LH`>5Sf cf沅KN>' ĭEW'6)eڌ$g/ePM#[,]lU. o7Ú >Z&Me$4A>68,&z=2c*x捧.{7,6bֳm/ r4O}nKl}QwxHڲ 2Z옎GvL]+XfIUɚ F)3Hvm9KA<,}.$ 1>B~KFGh싊F馜 9ԝ6hB!.F~^%Hcv8,TIclIg5Ap(6^E\ O!ۜofIewZ{yK ~הCSV^M5Ps(LQ#='`.`NQpQd9 /TU#͐A$ = z1vEM$'񊺱bKrJ Rrw"ݱ 4GUJ* =VW>Oõk'QK31c5 [Ox%?'3}#oƶm9=ĕW^麾{H?Nggox\sct,y3vXk 91 b-:q`䊱-at?\A,5x #5,Y89r!Hvxs0/jBR/kP!SAD}kd6rm3M)7lU,b#f]-bz'6e\7'~ᓌhNALBҫk,t&0Fԥۦ2YIH^9U6a. yp5iՉvuᓅW)5:0'Lo TRVw ORi1'O.' LRs| w&8D`(92,$R+%ӅЇq t3nyoCQ23٭z0\AL]xI;ͪ\8V`2('USbycyt(`L_˃dj3xKwtKt]^͘n !K$ HIAu3`$ J M@rRi4KVJz12'O ȊX^0#ŠX~5@w/F_mcz}h6hk@1TWo6cotx4PC[0QSvCG&~,x9d Nt ]Bi.۱Nz5msjN%"ԵATA#l$7g=r+D]|6yzSBnwq<~?gW]sgҸ}{ߑ#G!sn{Vz?rr9߱{|At=zOsV?s?O|Rz׿mo{k^WFLj{`ϭ.w:Ғ 1֜ѽM55%oT󛪵닲>jCStE#/Yk DR0=vن\M@r2 ֋`ƼuJpU>Z ܱ覚$/?NC& ԸhkCs+(c%obvjRju)dU.)̧ Z#zז+|U^y P&R HhA(YhQ !oЖ$ D8 6KBJgMG{1Żny[և=a2+??~RG<{pرw܉}qH)ꪫ雾GG{1ysoo{cswb8_'EmD4zM9vL6SuEcKͨZPDCN l}4U^H rEmקuԺ\x Bt?dMPw@MΘ^yD$$̮%8dS5^4^rSarI]El)d;fo$( 4(b=8v{e$gz.L{[rZ6[OH/-'.^MGK(u1Hg>mՁl|h4 Ԡ5f)f.ۏ}>q,36dE-:9ӕW9ӷ+D=FUPMӱ<ƻl<.61]tU.c`W[E璺-f.Z"$,ll$>˳&g}y+2!zdjz[;\%dTF-(jwM' /Y;r1a'zX:9v겟[>rUP$F& b W6.cTC%'~Cswmy@MSfPySk/3ޖlL67$^)j6%M1wIA @Hd,0PIQ T0DB哱OM d>֮#[F/7ÊShCS O\`(!p*K) "s^ 9ȖKz6g.5<6+N:J'!%!^oXzrxgAF]!l!$ n?!-X{PWryHX+=w5HJ%!cTǟq?v ^oexCIX"Ǜ=;. rJpC -ӯJzYӽ\:E핢@%k᷵ l&h;>Ʈ05^x$څO9%!jbcGcjՒxJp2N|ƪ/~Lr,4;&n bxep2ʙnH!S Sf [?i̥Q]k X,C}[.|]JJ/D?'?/n|ge좍s{{V{@^?M 666wǏ^eg>?{0^{'Y9Mǫ&+3#Sl>V>H^A.j( /'X\J 1/4UFO%ˮh2IGO^J AAv) * HcA5A٘|͹auXyE;rRtxI<̨ipHe%(#1WA=4?&}A貦Y\&|ה3W #/^!Uڴ zM. ڌ\A|Ff2+x~bq% e  RB\NQwu(s+\uWs_Iɷ=+_[˟}A%n/- _ =Ƙj~闾}.w{qd N%k3;YKDrX He)3ux ;͘ Mm6u& ֖-ySvˀEnnv `B$PʥKbiص0{evjxc#@bc" O+Yӝ/r,7^pVrM. ː jb#pt gMN][N]FnΊ**A ~U.sE06z\F vYH8&9 liX sHHv 2efU,>Kː b@d;Sĸǜ1OҒmdET3igөrԜi5eժXDMokWzįjvf.E(ME =uc@%o3^bCjtXP ,zU.d4L&i}fPwa$W䊃W{˫;[0=y+o{ׅ'?[c=H"K_Y]9|W\ͯ~G6Ms= T]뮻k~ dӺBnXIB톜r՚\ 6|M,NLՂxF+NC$PtGQw/\m}%k{Axgt'G('.'gll.'>Uh5I@2e'>IA▼]W6NCj#zdmJd`F@"\J$9P䠚PT6guHSj m`dCK&mI#!c$9C[~`yhfӱ'366m{s[jv*%=OVz~<_(47^?iW]t`˯y]nzAp?~wt/oOY?&ÌI\M90hhk*=^  WJ'81m>qil% D&gu t >(%k<֓ˊiÛL#)3A!WKΘޮ)/-[zP3ss/~~G@k3WT}̓7stMtEt_T1D5e)fXRCW̤dRcz T^P%uۦkdDHcݏU.$H↶TIVĒxaM ^1 "HGAۑ9t۶sC&X2gMV^l #AD+FBFͦcR|δ @b"'M+-69ѬDklz3Fz^,Z$Iͨ9&uolR3ܮ3$S2ڹO-r< rUTm)SH7ݴŨUlueכr]Iu౜6>5;s8 /{#??W$O~#_#p㹏8CSﰀz9{~+o ?s_t Uck߻~k>vg>y=0^ww+I +Wwga=raI:~POVd$3ykI43<6;Lzbt(M5SHɴ ~2D1Q_N0c ǒ 8u.5%f-@,K]eYt,!P[y5'S)bl9iGWR#k s۶;'۔٘ @TK?^șmowMgtV7֦̜ BP{YW@4WKEfs4V(.o|U. 1 zz$􉤎Ae?z0}g?o@W!zz΅OM't^M\#u۵wmkKT2;sY]%X9ߍ5y{4Rҫ$g&eXdM5ۧf}^ovE,$$!p$OX@c:NCi .c^1 q9.0.|}#=LJL3-[L ItoF 8[@ڮ!tb*SzQY0gCW@ KmI]̹<#(gCXbwX)sN\Jc';M۶3-˙.^pjӉon*F6G+tK@/{'/߿}!;{ag?s/]K?Wﹷo͍}wƏ_~'~;α|}-7^O]_/ʟO|3/zmZok'?vOOݟ|'C~遗3}/ه⹓oOo?yK~MzK]g;"ŧr8E[YiCDJJRDzx@i$U̵^˩w@S)z'ۍ%'6Yl D_˘[Q;T^fvx3siܖ>B@Sf[ۀSux'bzFCǺf.hxA||~ u!r7֛WꐕLMr1%ad 82eHb,2&AAګ6M&pb@9X]!E :6-6C f'$ԭEЖ $Ar3kJhl~$K c:EtFEilǔ=<yӗd '˚ʫ.M໶Ӂs{^>+|9u#!p2b$}ZV\tl c)0#aXQ«8wX Wx%t2.xx)o@V/;k Ç;\Id$ q>иN={ }TVI \Q ؒ8qjQ*~9[6&j5Eq⇦`$iN汷at7&>ctd9')5 ĠyDb]mӉrB ~ĵW31=N|GmڃjmEc a 95 Pؼ AUhxt۔ Wx5ٶHci$]Q+꺬)xRz ) 5݅K.Yr2AIƊjzl^sxVOs]{Gh𸫾?~/;O˧,YY,++a2`GX usw?/TzPE=z+C[Ľ'x'o?c)Q7neC@y.D.?tH#qxSszʷ)>yOG8y wz=s̳g?9E[Yi׻[c}'bexĉ~O)9|'|+wt6 e'ѦtoRjuoQ9w.j 71OU%:p؎HGXdSj6Ŭ`d|PN)'ӺO:YXʩL1ao6An.9 'ܥ`sXJꆦR@e% *#a$4^lYRH0JIG̘əD$8(9␞i@" @M@;5YL}^E}br8E~5bE,) IkIr .^Md_گ|ȑ˞y;wɻ๟H2PqTIoیL)n+ߖX*}qxoeW\qEQ7|x}7w:/׃_#4{v<>8zѣG/yΫO>oO}$J-ng K.u]gJ3;miLM| Gᦚe¬뒵gMgb&}j*7,*G$': ۦsKbLs⫠ԍmzЖKb$,bcE9S c!@jⲹO>zJHȑdPx_), b2lT@2y뉺 ^txS9En HO9Ѭ\k6d šX]Oo;/'?~ݾ}{D<^o--? B bO/cuxGՏ, cCg~*}qxoe>|+{>+!슯w{0ĩSNuv_{oz;_e>ꞹk7ļ O-S]SJf6 H<ҾcW3xm̥֌\ABGG*c"2ONKz 5>g.5Ȗ.)Y" HNe)%D5iW RrXڵ%rpЖYZI© |S\#SoV&r Hvlgh˂鮨c%MS d|e~zh+c3N9+ ̨l f ?L].k ֎mQvCnnַtoEƣé@lk9Yɶ?og.ٵT˪&.dm̥ jSSJfAel !rh˾/V2ACBm4tiXSz%oDx23w BsOAPap*_<.]4ȗ^wo<:=3}kG=IvR O}%˨I13RK0xmO4k\*+bkڌhB[& 2RjucWSNBBX>(߱HҹKniNり.'SA|7&pLDMY0-_blGtB'.8wD .^U9GRk˱.*ɨT1kAN]@r *ε}u4VEs+4.ިdlmUܗLj J %X0]{9eJ@T}QuE0MֳW;qVOs<`?6[?;o{˿­}/^ï~[?wO_G,OǷ)n/Ƈz2q~~oA膷齻绫`U5)ىwH}ySiCiysU9~3Otbn+]EL.{ᏼX~mʑp=ߒ=Ao{++wH~clwiro<}<} E ^,8yQ'Pk;iuJ͊XzP{9w)'~:rM:8 gMD\o*x1SvnB^y13ڮ M2ͨɨ/x]]#8d*7 f>H, mQ&uHBez3j/vtxcJ0w!%%P `5dS.YیO&.'g _P$qqU"]SD5'J.}r4ٵ#f}t ͩv@ H $u h妜mYlJ@Vٺ\@uŸOzf$;E}PNVrE,V6^y !]S.\2{Ln9 0hH]%Ǘk1Oa/h[,:(I|2ftOظ\v_j>}OX=.3ȏ&#I\Xd}Q]"ƋUqΘ "~.Ozh>sY@:20ҫO.!A^Y% n{m%o=^䔠"jld_N>ٴr2WgMg]S.:kz،CctQ{@MWۺs4٭ۼriM5;z/&ٮ-wlܟNSj9 1 !jה \!@tE&zH6!5B8pARS5v@ÍKV m![])bO{ҡQsܝoK/^-?||5W-/?y_c?z7~}]y'O 5ӟˏ\wg;)GG)/}+?>勿gG< wU~{a=^roe_(d__V[];/پgOnxcqu]wooӮO{F D3jSFB?vXxߵetc-2tfӮhrjd&krkʫ&6`l+F"!]$:Pc[ M eP+p:9krH4Ĩ/|uxy%B, @MbhK ")n`WAX 2[pMvx&rF E 'm@H>A ogL0'! fe]Sҫb:]Sٜ.oI XIݥ6̩ @f.=C?tM,@>5e$Ahm馜1krM_k>XY.Fg.=mW3NMʌb3ESE)3(Y{0pe 5W2Ǫ}j́l2c5]G1.o>Rb'q,j+!oO|Nj֯y??Q; "Z|pɮ97$yY-Y+KÚ][O'TA|6i6e$0g>m'ցǀئ^ˢHvLz pFwoiק6ҽ(a @N#@lk.Jrq(E qFu"v>2Yz#1DC6seW5X$^2( |up W" DBs%ܖ$1C;uE搕 wTBeѧtjvŜVdu@ML{aw"E uW)SVJ9 w>6~l7|{eE>w{ȧwc\>ύַ^uUޟ{}uyӁ/MY*sn{7}ٳg>*L1oxCoo](oy[K${J>ιdr뭷>O^x3XcBQ_3{~I^+Oqw=??knEnOiB>i 9'?#Df8&p,%Ԟl%o%ua sׁ 3j$qy:[dM%k c' '|_ %p<ДZXF$Hc@>9۱i,\%+rI88 ! -}^'ԴA^.ʸ9FW۶# JZd]^ڬ̧>PI]7--҃jb2f.[x'֌lԤOF&-$l&W }Z{QĺQ۶:pxEYȺϫ |U,Ltxk)>1vrdE{Of]^OmLgT/}P/ց _{* IJ&KX. H7Ԝ"I՝j64PO`ז]ޜl93g΁tRbה"<^^@!-X{Y+ud4Hn9c:ڥDQH4ZI\啤ndh^Ijru14c4п]+F6tM-K']Qjbm;Yl*j[/b 2r*/ .I5-e]^E!h%kuKh A̦XN lᕠ_6^&H:<v{+RA 1'@_0]2zcEIŊRb)-.ɘٯx m<(AA8f.uȚ u&ʫ-APOIHuHLB#_'ꔚPT^ 1~Yf6PrHH' 8y*_$SyP01vyDL#~2A˦.k=Hl`ۦCSbb$P@B/W#[,f-laMDyUo 嵓]ѮEF͉feB0^=Pcn Xk +Iݚ\x=wi7ʫ-8(3jו.i(YiHRN!5ҁoQX GѦuh1e5"xd|ծ)qMK9S1$usMFLx.k`tL_P8:siB-*65}˅O.oȸN͙:pj ohU.)X.:pE-#ڲzlrϗҽFkKIE6ui@r$;bX\L= Yw rv@ߺ)'P7ŹITVSnևHE:bRWT#ҽ˦6F lh EVFQmȆ:xyS ` RRQU :~! AACtiKMʂONGrL]UFZi{)okۦ卢v铙OokV>u<*8>r |^}gr{@^6̴?Gve 37#m v ;]뮻.J,8I%EL7yԤuXIΌ ~ qTݹQ1iJmz{as cJj/5A}OT[[[/:ɸ/tRf:ìjזHTEAe:XFi".km:s] Ʈ{.ΙސsÚ Hz]mbSBCkrY{U{I%km`3LA\ż/*Ne\ z/-K) K&6,]a̓ڀ+N=U^횲3cʙboT{ILtԮ+'.66Bpvc'3g&T %˄x%vyc;$# 6+\Ny%T^(*/-Ҍ؅c ˱ l)=hHRf2f'>)3k3rMKLm>s|bsIY*fv)޵E$IɨTW[˹F$91 2g2 «M57Dk[OL`ySmMr LmVV17p] r&Hz-ZUBuHI8L̩7%S^ńOFp]-2 1wϫjʋ*A4^Ҭ$ A1-#h?cz @t1~FHH7NܷG.ß;8y^׾/v*$;g~;xG?~;7l?O+՟x[S=+½>{w]3~᣷m^!>|v}߯*ݯz\s<6~4N}̵^-X{@Ms}k+^1F :mY 5Az Elv0"O*/)f #ah˄#ɐG#[\O\^;gOk )p:b%:ΒE`X0}(P8wiNMA<%2VQwRb=h8AN_KN}ɚj't^ۦmW%o>l.o^~b5Sԭe' DmcuTQ˨i(XQ34C$>xڜITz ]^,|Ɏ)Sj(-̥YFDU0]2aͮ:u1Hf$j:4 [E]d܄0QԍL㵠 --{;d3*s&p!zU. FT#)e Bu@Tގm.KmzE, /t&~VvO?s''k;Oot]oߋCw?~ya/_י=_}Մ=x>?ߝ}C?#?o? Ox<_G_|_W;vܣ|q˝%8?,1[|ޝwo2sx݇2gzbKf̧1H`]R3u1))&VbˀtM.2O~7u3nyeBEPu&54S9۰ rC>@T+,6o-`12E_V)gu[Ad}Qef%oz>T m1ԥbPS}tcêXZd}^-}2sFa<+ys6˹n/> cH f.įEZ-x_L޽8hmSr^1ny@tXsRFEOζto]/g>:1 bS̢WP?s ȨYz_MsntJd<9'0sI7W8B#e%G!Dy4\%1 ad9ld$Ե[)5!Jۼ |E,>H) bqZBQ2RFSl5ݜRc{}^x}kڢО+( kV^^^^-`2I-R3]`Xe4%Zz!gO!č]& xS,+Vr-[3fuފqs8ަԌL2+"VW9,rZ/Wq%uӈdE,7ketC͛ '.[Sz@ NQxelnB!5JP}(gA`4LmEwI> ;iܵ5yJ|:@I8Ϛ.#B3GϨ8Dćn|ǖ;T|E6ux}am$m Zȣ$nh5șb$txmpA,]*aCjhKEG«[ƠoL`zZO,hhV m3x1Syp.`d;H]Sm:JQH[d^U^ƳkX\:HI|,5$k ǀWMW\ Iܶ,F#K]$ĮTtR IJu^{.wH[/Údddz SQ9-T xWpy$qUG6='gp+A\@@ ȉ_˥Oj[g]uS I@J/*zA"U5,.W@ >^TT@D0P$k= a$eg9ל{֞{9E-Pm5=`44T,*. eإb,DTPbdƤk&.9'>9Øe|m6sq[xUK4H$*w M, }ʛKCne5=R/ XEƱ!ueiIt˴#`Ӓ5r$ lEm[TuoA#ng. f-QƘ[zhP1 )%@.$إ0D=vĦz3,5wHscBDL;W#nTx{˶ J1ǚM3aj9}FxyNm[E5 xOV;ܐlFa:KzVz=q`g!f䒄[$ 0K*rmFpfGo8|+ϼg^Vܺ ~G79na6F+cojz^>}eU(ߋ?O߷oDqqxg?mUOA>=>az{ٴZ-kH1j#BK4AiHN]̀ڲȪBH%"Z J -Y|p6퐥ڲh:5D 23pymHT6L#k--&GB2ߗe1SpD:$3 C2D+f.v$bnsQlSa*THzIJ 7[]\SkBo-{Y%D@< ЖuUGV xŎ=sK U[VEfn㶬`ݱy8Ζ&C!%Q-񦿨f3#\4%깏-*(deM@r)d8Y(%5Z1f`km o`rA%jA#q>$Fs^w#"n-JdAS'Z73sw0t8n@Q^G#uTY43[Kz.gגa(5 ԡ'uĠ쩂#ֱK%T&z7}4I l1sQWJhlz`5(.=6L'P*B5Iĝ~5U&‘XSK"xEB` `ӴǣSn76ƠxI*0;666-QlM$k5S)sv*X#%9^Ήm;;Hz!&n="רRnZZ;^qo-x3~[~U}?4 ]7#lWXn|vY{_e_[9({~sݽ⛈IqO<5DfiMo`ҭUƛ=qK<֒l*ŕmY{c$En6,b!C~AAĎ%܇WZ@6jYB1%ι#E&$M;6HO! .uW4Dd\2$9\s'f>,um'E9۴Oj3"bQw:tb> rs[cf>nPU3%9ZSv&n>=XsgPYb擩@"L۲VxC~@mP(W@mPdݕ% ɘPhQGV'nP'@C*ǑXO|tԢ2mr4QE;#9C͜E}6+@43V.ja.$T7Yɠ&ePfݾh\v+ 7HLq?uI(;JE&TDL0 Ia+g{{X^;8Siꪫ$GoF66-e۶qfdSNSaX[VXj3",:*0hyHrπΏ73aN4O\2b֢Ihe>e|bV$d,2X_|2qi5$NL4>: `t%ʫ"a-DۘM۱([nP"%=@m0KCWzXe$ T37xUOEc 8ْ-ӮQ|w+afmQ \4et. i1smZf qC"Mʍ'\4z^jT,[ScQ<,пMo6W^}qW/Q>JYT#A,OJ-Y.]8In5mӺ^jZaJ#mT/盦yb.DEӍ (v_4y3cfn+nbn.x||cfQ' k;(Fq  h2T5;K'uӍ Gn=*bіik:Eit=3;~vݨ+^^MG7~B'oz__+ ^oo>rjd=c{z׻^W^Ǘ46+}zSŲN\ +ԂQм}17Kz΁ &,`liMMOUYe۴eٴL4 Hq'ejFjT''ܶh6ɺcZ%=d Ƀ!qN}vՒըN4=|HŘx`3K"xǶIK. kاxf 7D*!psO4wWS;U%U_إ#I$cfu˶'.izK6۶5pYʹ%H1cs%!c 4ica-MbE,~IϺ2T51=Ylv9QwaT3=7^)&.8"kT0Ħi(=L6mۚB#rHq ˫zK e=۟ZZXҳ%5 ų#ޕ&R̥T^݁pc4d擹>ʲB? &(&.)Q{HlJaBf."f O}V邚0 ȥ$D%bn3| { -hYM6Ki˪pQ*^@h'&AQiQzble==MQ]CbYOw3ĥ17fA%F䒚}rs8Sϕ7uG1/XmJ2v:>Ɗàƈ`P!KL4ئP@##GVս- 7lgɦ.A5sA)͔7s1MzQ:ٙmuOp{5ӗ^_\}n|}ꕷӯt.qgkz}ߺ ˭;=c=Rf٩K~<{w([>j6dASa2Ȧ%eҠh䲄[̑ Uj4 = GQ"hTȠPP2Oh,  mVkn9Ö M^q۶Փ r'%,Yu(^S$b~۴>Q5(;n:F3ߕeONjr^zuz3KmQ%V!_Ha쐇Y 9_W(r貹*5E0mҐ>1`%Q'.n˺pQEcQpFUqFA)P7KڢOz `GšxXDӠRܵDWEUhkP0*}dQXol5s3m4rChc"MKԡ*[RKK%ꖬu飔7!Mah3} Kz fJ% *$BXإ Qc?񊚄zK#.wS(l#1Ψ*%Î*'.%j6sq[!& >$h̐z,|2cjЊܴDqc붬&.j9F2?WT ?y"l_*TR cЖ RnXrdTxx(H0w:H#ႏi^R3|bӶb E1CP2_.xmx$࢚mƁ϶VTs7vIh;J^zD|}/t=c= ~[x+^wxǮ}k777w-#pzIiꪫ&>y#Q p l`<gq(:\TjTלfd3u2U;&jUMjTQeeI udɁ %!psa8}Y^>}fP 3 xa6%I=`ٴKإAxٗ#kxҞ,8XFdAiQܦ¤D,'eZGudiH pAmM6Lw☻K&?ms@$jﶨB#1}H,/ ɐ9uziHֱ_yMݎ%1qIP#dB]DsUEGa?+0*P>(ld *>)8nz;M>Qiy,HwL^8},\B0ۮ%˃]g.|MR]"{;6 [W̝Ȧ3ؖ'΀R,i]u:> Y+V֛N2bhԠf^1.x: Hr\vCcnώwtM4m"6Ylơh:Cec@rv@:LC`!eAH3ߠܟlh V]_WddkU5]M)AK37$kTAyG f? ڲ>QuכNu̎fR=Yԃ~pyD Ze7<M#w>E?O>|ģ%g#v?q=co&>O/ܽ4}+^׽Cmolls/m]+D} E5(.^Ps|hTz6픛ũ0mYhdxvtp|jwx;?RM|ZbT*}4qɑxʐכQDӑ'7 !<榧 Kbi^!YBMH"5q)8tqV2E 1aGTZxȒs`4ABCi F!&.N$ԨjeZxmWEǚMإ 7z #Q \myJ ۠r#(vIM'> >,DFmQ-J4yzi|tN/vL^zݖuW5u`ā*;6/a$1wqD=#–maXӛ8%KxfIDIspくms;qI.k}G[ ryAͻ@튘 D]r`3G|Icn`_ `EOSajj Vxq͝P2;$,A9vG!/>n!/j4gܜlIJq*ҠdEOaB)ے'!dY7Hl۶  ms'L/شtedk*' CB1~iHF%G$6wq,l~wdiI|ZDl:2iK4DlL4A.JN7iXp*seRGx+}ĀBjbGMQn6눹D[|J2π7=i !t@-s^hJ̎fgխ[ؽ⛋;VQn{&@@v9ek.׋?G%j~jf<';穷WVo~?l^ڭ*Z3+Oy9ix|0^{|Sn:+[W\7Q1Loօ^VMǞ'=bntئ zķLDՖuM*̖i-ckDp NڢH90>nʢ,&VdM۞X.yڠLq{Au#lNPz+zbP:ldS*V14(氧 "6 JVpZ-l-@.dH$]yO<9@A*v4K$^217q_Ώ6 10Dlpߑ%/'~uaPp ]GTH$[{+ $ԨzC @<&0 Ws$t]YN\UE-C#ҫ*+TAٗgD,ā$.1?I[֙0L'qO|5X[SEWa<5`s%mج%TmEYrҶRn>n:E:eLs7d]]IizS8IGVo]Uyb 4bBmP䲙86 N\4zVf=Y:xv=ܱ-̒lz˴<}$. H,ʄ}}IoWH(-6L-C2Ďmb?#"c.RNG3DmIi[%ePяg{mz(`}}g~g`{9}iꪫ{إja;ii-y.4wcFi>')7 +\dHơ(D/ c=]"1Gܒ4(,8@L`Pve9f^q7-Es3FzR| {j>yW3 =$@2Y>ZֳӖU诞m|iw JxS:80]K4&oƐ*h. `Q EO`ChnttjRyO<#!> G]Y*mQm# MJO%z8ɦ+\2?lH|t;d<@ʛGU.H7vlD%*ΐiY5e.ʥDhXcڐHI$XW8e1 ulGV;62K`y̎fO>]qO)館4,o̡O~?2oᚫmŅnf>_z饴{#fW(w/kkkW]u ^h/yKN_ޓ9Y+; d!!=M !T,rQW-TB&F偷dCZ&bqw^J1 #QzU, n:[M5"fp:cZiDXȣ\u -T4f#BzmԝOeD:zSlϖk'Lzy-nPozcOw'斀Y }zLx݂+Bam[Uա [8.؄udŁF68Tdr#^m$¬i#ud#G\&Ҟ,+6_T'XW"N3qgG.U-Y() L @37v cGA6 f. mkbfa*T *oHN}2q#^^Pc$全#U=M]2ep#e5+ vEOIviۉKl`AU:?HQQV6aF5q?;H&9q'^Nlq&U=*]Y^mjP^@[՚9G#5%!0$.)0Ø;<7(MDn:>QUy`Ep)oT9o.)g> s㝖džd)[׆/h`=:cZZ{ |!ꑿk_?|-|?۫ n%$v\{/}Kw/Bǎ;zoo:w:{8w; W]uk؛~…ݟo/J%cs_VĠM7LUd> 긞, h$(F0 ]:p9gF̍]ZQ*jTkz,"͊vUiQl6hZ(Raa<u&p^zڕe_j~8ڌ3\SpǶ@vd98( Ȫ\%jZڲ5g`=~@F0rѺ?qd90vYM5`=.&9gv4;Vw(s+=- m5:W8r@;WW5rUb{q`O}S??(|{޳?x}SpKޭFy;KKK_j/ cܚ,pOlbSɼ`~YO7L'F2d#śjFj6udxIz /əC*';CbN}En4m0xK6TeF6(pG1:^ `eOB16(ś䊚8WXa,rYVI&jɰ-Ѩ- ]U#ܴe51  >/ CDz%Ṡ(Ƞ %fjR۶]x`.2-żEq3i&ΨK26tnHԨ$#z͸I/D)[jB>=6(6d'<&0w0vǡ^Uc|\0ۨ[Dܮ~=b>>Y**}tZ]Y.%j$ec0ץRl6KNckM\2vi]xU0lޑ%E )o&oH7uϒJr?~ϔIG6$N6ͦ}SX-ɖ`d'.lQ4MR_fs,A 2 k͖i>닢',|c|" ZҳxzN-lѴO4mۊDĆ6 e!=YvUuV !97(GDN A7nIʖ3*|ԠYvl6q'Qz*oVGT%W̟o}#ҭ_ti|n-=?tv{ o;ҝk?vy@_}>&}/ ~7/ yI׊g___>"|->7OOַU/zыh>}c8{/uxsGنH5T5T5pzגP\c[nڲ(ݘ4q6Lwbu,lyrꒆ%izU1Whi}mCyeuUGVʫ\4hJlq]Pq3O,/A'#3a&4G۶ՑUW>27κV>ZBsQw8#$"H(CP^ȥɺ C_Št$2}M]rmm D >(e,l[Vd[z#,MIkf\ɲF8Х30U=)lq)YęG-...-;|:vd,3~waSˮb0\Kٿd_8˧,=vNU Vd͑?]mWnטG:\rѷx8pe/{3̗eM7t7_ȭɿR*4i2qR9ﵨf9 n^Q1F 7Y20U媚,5wÁ*T;fzc€VP}pEO5,ɢ+TM7nҡ8Mӹ\/^weqyFCLuU[VmQ9%,E%jH8(=2jUdY u* }U@=Iܑ8naԨ lzWĦ%+zږ%aPlszb].8AM.B5ZƨBՠrzeKYӖXWV,MO-Y|$&ܮœE9@w3k6mǐ(1:ZwlޠꨪKO!/kPP2F)7Kj/(X*L­#ޗE9 'ܴEF #뎬,M>;>?lp<`,p"qWNyCĖtT#@[֕ש0cyx*ܔKC10imWsЖUlr2CrUd)%CeFM]rfm2퉋L3sqfdSpY3,y[V1w zD},7x}$ gv42[ݾ[x;vrlW_yj '_XɅww8Row>CCod9>ЕxCfz}>~ ~'.ߥw²L#CAE?6|ٵ'׏_|~q?aC? ݋?m˟~=Nx{|;cG'~9yrss~7~_ȭɿRJ0D0h]UpO鈪Q g>m#ud0 mZN}QUKV#Fd[WE&X0:;nzEM;lWܧ*vkfvlAٴͪ:bQ?EQlΚx#qfNNDh}9Z8t.R1i(_Tѐ>׆2, `a: `UMlK7Lgl 6먲ry˴m6$3ѴdmH FcV %[.٪Fx-5= aCrL4S\ڒu.BoIOfHBp|A%xɱ/뙏 ʚe!iQN}tfi@& ʲ*sD!U)71w,EChh uKԹ=UGVs Lqa~oҹħG~[TmQ%bǛC.Yj;HseZhf9E5cEp8h0tASa++W$-YqFA뻨uͫ6J0Pue5iz'^ʍmYm+מdޑ O=vD]W H9S#0Yh`y`\֚,$ǖ7M4w3`^w9#OlzcTʲAqWz=u>e8KqfG3 {S/8x#o|*?߷>e+w-w8|ֳc?czyo<ٿw?~y?׾YgwKo緌F9=;yx?3gQ )u;pz+_! 4zK~Qg]ֿ{k(G=EW[?S0 ~ץ>|O}ߏ[}ѯ8g_便0[{9??\t ^_{~]xwדCO{__u~O^/tVc=n`0/ܘ+/S׽u_~{x? U S1PxoC;G|f>A9pY\Ѻf],,cz` m:Y%gDl%JFsP0i;`IL}€D[7%=>J "mF01e˶%QK9#Q2 v2xDvUY(I6 $M"l5(^;1iGVJ04~.]7,֬ /,3xb U5 ԪDI\/L|ӛ]H0T̵ecE̝dH rސB`PȠhPN}Ɛ82T0 }Ud )Ľ㹨 Ԋ- W< '.۲H 8EFw\+kn;.+(F$x۟\;=0j>Bywycs?t<cl89d5y?P.}7tQ'-|_>|5]omh>E=oz}ɇ ѿΞw:]/w0]_?{~泟~ CLo|}]<4xrރJn!.#+x#>e/3\s5WqKsUWc9(iE \@YRYz_P+H3"h2لqE=Cb3{zba UML0/]T Rjܑ0(wl._ҳ0moi]:9G}U\49-.#Dcז+$ AoY>V IG"@N\ʁ mݚ^fuZFs/T)O4#E!cf}UNlc[3X- ]Vx}|-v$$ 7Ȋըf>P1 -k(~pDiI8{e'Ee=p*'E9 }WsYuT|w`F=cT!eI䲎)Ǡ- !E飁ͦ=y&DBs3qI&\4gK\P,f>:QwuJĜfDMB/T܎]JĮ'6 =\FA5if%M*M[T5ɐR3F7[5qI .ME㉟{z`G1q9*)7:4(VU6ubK"ƀ,Dء2aB DAAəp{AqN&oÏs(&. Cm٬@=y([k* jPFSVH0ہ- h_4= 1؎۲D㈯FKg> ۢ: #fT3 mjɊWۖfSt͑3;}n?gxgf%qqWd_|g~5zS/Oz'v-s4_!Z w}&? YIOϽy߻r>s{ct~".~֏?}GNS'<>wo={/链YO=ľcOX<o'r?ܸ/ n{-*g]=?&,"~mpOӆ/_xx&ɐPk"20K"xpFdO%pI2фFOL0dQBxfN3ۤZ2oI ]%ܮDӳAH i #dISy]$ ɞ*Btv,lۮ2*6*Q_Kjz0Z1 E]de*aƫa2YL:rUM$ᶯPd ve3'(2igؕ%0=YhF. ptW#L4!( V Hu$NxY b~A m BlIl|k4s5e=ɢ-,]PL6$>hCJ܅J3uqUM8*Q>ud=b$=zhAۓU`e'ù?4?= wd9uEcOn(6A[V'˞,b-ebnK[ȊA2HǛldSCrI;pF)7 ʆddWa',7N!̕^Y}Krbׁ趜̶ۺF'}fG? cN1c-k달'oر@w#Zp^ꗾv}.?'I4?}Cw\z"O<{oc~7}AV{ ooܬ?}> _LO۝)ަ"KڭSA)v=Vv "4;/=Tw/="}nNWyKR32ٔ>d˴Cy۶5L4 -6Vu_ŵdUS{fGPuTy(ttSGKIwJw$+Ͼ=/ZLɅw1_šs_;>'?*λwmo?~;?]7^W'_kO|iKܶ:G}[yu{SX}xO{VgR/|է'ZE{TYy~6)>3o[;~~a0xSo\|y[W~ c'< ?s?w/#\uU$pI AglZ'G [ J0^GW}Ԡꪲ+ n-Q'ܖ^\bnbX{%N"'%5$R;6/̍] 3ȥVx۶%hhɺF˺%kƨ-*G|$֑#pۖf1*|p2XֳcP̶d=tنiǖ@]tB1$C<ԫ)7eEiH0,0̇vb>o7 kP։?d2-ԑU,l95sҝTO. !=Y + :8P1v)g6}?::?irtT3kIL]s c0$Vx́G*jPDݠDQT3jT?B P碩QndsrS-@-YO]2ΒL PQ^]:v)Ȳ5_L2DӛU.9#ΰB=QmQKcmxu! nGhn ʱK>Z7ݙ#΍75w{rYnhQ̓x{G-B(Sa*'>PO]BĮ+V>3j*Fqaf.Ȋ3E8.-iG rUE5 !gxY{$HG-%5+Q (xÄ:͝n<4 u_h&2pڕH-,'6mˊ3H!p޿euTqkQY/G-khhي!9CrINaf%ҢHă>9gD&6-0 #np 4$7MD>뙏MKs TwegkdcH2".9;60TGbIM- M\q 5wsKqQ*MKT!;BY΢ܬ'Wg)g[`:*.l"'$s゚\>OpڢܧG[5YPf.xbO/Ȋ3JYlAarc \0*&tjTcs;Kz֠t}ѨѦ LK"M ue>|1WymPg4uG׋zO\ h4wx_5JŽ'JN飶$CO\1ڡJmX-Ցf1\q6-P1YJCPM@_3;Vgᯞ?éKhO~ޏy"s w;kq/\[;x%|_ϯ~cGn}9Oz 'K_z/^=ܳλ#g}mNԾTx 6~c/裟O_琻|A?7>.w7S/y'[W/"؟}ion5k#pn$1 s0sGsw^h?ܭi&®)Gscmr$&+1:Z[Xh4j˺%%5]әkѦ`}Ѩ%K.$fd4A7M;j`5OES{ՑfJ +a1-wwhإ7ՋECbs{5+0뾚{+uMAaIlԝu7flҁ+X daTr'.Y8@EP.9)͑\s}(ƺLE;/ljz⒍tF.#`1Hlf٠ʠ RQD&-YIm̭!)JK=ca17$bnhӘɰ K-5s􈀅I\3U*M ͻQc$ov&B8ejΨ@퉇kTIJ;Dlǵ TXիQT3mmZLqJӄK&xvl^e?ɹ,ʃhUO:V},2Ǚ0YM]bHtUQئE= f_Mine1G߶uuuw yG^ٟ;w1?ܺUwW_=ϯ⊰~%\{zܯE~8=z|^']wqׁɏ~/gw%__3w1y ׬i{| ˿]so~ԣ7+xG?zӺ%{IcgVoooم󫮺@Yc'lV<)%j|oOmBy\zDeO1CudRfWUU^G#zAl٠1y[Ղa0ud@AWCU=nHhzrf`U=)QkBbE n4WaeQM(, 8t'~(<%'MWE1ҠB`Wd q0{pF-Q Ac=YTxtoQ͆.w(,M4Ѥ"UZ3fs . ذ0wDԐLl▬5s6O@ME}U^/%QG * x17;&Ou(*T}Y|sՉנ<dLX1&)Ē ən$6oH.ǚ9d]3ɰ E5 -ČP[-+K"tDW'^h:mZa]"LPh:.M܅fӴ 6f d Prؼt"V 0[u8x $Vڲ `˴{rFnzUOر/Kǚ\s#U=9R/'lOY0!H#bn⒵xe3TX ̗&.Fq$\Rf.4`ig t_4$*;lP M ǀB56lkI`* ,\PsCW[8z_{mx;_fxlXk߶ >|}w_8]qx >zW\v?{͏dž}=#\y啟;P0Q7c;>[bU2lڑ` :ʤYՓ,K33۱Eq"lWD0oq7Q]OskzlI q,vô+W @2σK:ڲmxzAjT!hQ1mإsC 粛]/6$J|6 RW'L/&!Qt[ p3q>Zo-7MXPz=Q* gUezThlF=Y|t۶F6u$6ˤQ}T^T3OD /#z~8U3O$ÉK,˕K۔7w;%kżCcrH+1wDOI]R#IMF#9SijtQmzPF8-Q7$9\4 Jܢ)WI_j9`KP&%5몢FPGGYT󹋷MH艅v&=?r "K[xK,". ay 3=U)bng>ޱ-Isvmٖ%1AcaO7;$.ĐLmtU x4MxPz WW᫸apACKg>K5ՠ\Owa̎f_fٙ/E?xJ;.LI>Q{o~jԷOz+k'_x҃;t/;5 ˯⣿v*$vgsŷ~_g_кᇗogס|cAbސXJy&675`Kƣlf>ZP; > ~a(.^I^]Y>!BmH.yKKzJN6mYYmI4wU+zpRV^h K]UUїX JɱȤhHedW=Up+cn 5sǜa00m|-V"lu.x[oQ%z!l'>-|r#9F  w>BldMnQl{I(6̉ǜaW j.^P3p䲑IVum%H0TܭIHidx/>vq֓`ؠZ]zcID34!@04u]Yl:s11ssI>PDؒg>xm:b/ CZ-\l{x" :$[8*KB0,Qo#/$QTaCإHlCM<j6)gƉ0#mM! ۖ'L]cm&0K cT`TLIyf˴n(`A=$`+zڗ%Q8eZ0Qإ]&&psO|˹ ')7jjP㙑Mg>ӏcl:[mI¬F,aGXT\5˛mH}R doI iDmH>:tO6]OgHswp{)青~D7O~'#[oov?oޓ޷S^sO;|*_=EOMi`{qObao|Sߗ檫Ze={%~qOOzǬ|eՖu"lG!gryI1#^_-;3O]JgbnǶ#4Mӎ]Գ;e@C9LHAU{ՠ3aaG6c#4^wp|2uɺ lT؊TB=QzO. ΗT}iM~#*T/y/殣jKb҈[˺%~TH ժ,إǛeE*(_zF–H4uIK5Ml=0(O4 Jƈ1-T 聇 t(M2&Ɠ u͂[ =Eٴm>ٺiW^TA|Ayɑ,ٲgm"`%^|ئHq$jaeAWVu-꩏Y SW$ͦݠ ϱK-\ J̓uM*L0lPzQ͎V},bvb0F1n (|tt7M{iwdݖuGV%MfpN}80P6>ٴ ݢ!0ͽ!.k9kFUb@!ob9Х -Q/y"hz7WMG2Db}5QD¶e!+Ae5jGi[L1qw4s41%COB1 C@,l_mYE.%8c=Y,YK4=]\I5pk\4z‰ɹgủ۱eՓŊ.yW]UΒA[{륇Owlh@Ҕ"n.ED-4+zjQm2tGzp.v8lNԽ"+l{L4)D]'6$nf>RܧU.Z5\{dVD_WKqfG/w;T^U;+ĵg['M<#eVg>P(ӟ^y9d—UUՅn|ՅoĥKVMJ`ؠQW{eנR3oI,%WX FDl䲈YBr 30yDIíjn0695g˄[C3IEHE;jڡVuOYeٓUr:M>&'ކJHrߓE_-F i.$Dئꎬ*TQmb>vdfQg>#pB9x(Ԩ4 yG-v(fK4(Q_W kē0$6ʲ;OؚiJ13(qGbMCOܠnVZ1&7M#+]Wz2q$n(Cڗ%~n6Mۙx꒠2.i .YIQsF]Yᒜ#pQޖUpЗEʛ˧.iˊ!>+ާǵWhE|̝6%;&cq0ÐjGVWE_{ܶbnSn.ja'L%hƀ6kH.nMm`J5*O"=0 ~۴8#= !2ף%`9!3.Q!O%[J<؍l>qGUh[M˒0$m+E)73I[TxOd`n#p$Zjj5܄::^vL>u!yv툧܄6ۤx`#hVdat{ _ޭt}οuLŇ_?n[}WËV 70F{75^Uy/>x٭~wSu F:EADA& QQ# zMCP-Mh$$bBB*Ω~}=U)N~d}?uZsk9x ϟeV_[W h=!`/?+_Wba3y_vשєfdXLB!9>r:葬.G&dfdKkԻbX.}Jr2EOvY9'[jU ұPH3z3^EG UkuvSWe1eG:^>ah1-]'yFǀG+!$bx0wY,G3zv`EұM  eJɍd=ExzD.TAgdK@ Fx}h!oձoepDU]Ocjx ț:#UwAl~2]ܔ^65..욠@[OS2m,ê bS3Ane5&o;zIKirO49]f#Ygd$Rb;S23[ŒD=V.6'',}F:AW]DoRmPȆE_t#QAD{hϧcBdd.d 4HUQ]c Zo'tI-[k)DnI铜L<4j j#1l]VOthktA.]vsvPIJ86=]^ʼI.LA]9sX6 ٕK59<4\8Ac*t,[N-M.Jw\zcvtǻsNf]PUHn{?ã;=Z^>M{GwOt+}^{g|pzgHGT~<5k֬$.?S{r>9KX6@.ٷ=Pm%^_4% anxLo [8ޡ3)W%!\vw7޵pQLO4-<^I x]޲"CҫX@-]zE܆*SʥQR0^U9hc}OSH1ۣ'ڌ̑\WzAXQz!+cxŀH, ϴʩ-.ԥ TȮ:+ސ7^2apAt,ce Sa>T%.ȞqK*X'u^n2nyoLAt_vi$=S*@4=]&|lM̸K,, dF&zk"AYLؾh*$+梋AS[v2RHQif0QPK-}z.فggiӽn skg%;.=9l+DQ rI"\> OwVm]At^ސ/}6ҧG˾btXUmPǶb! 3tmᦪc!ҧ  &6u%)dd&ZlK-pa3Kh K-]ĮP j$6(f,}/Ǜsx@I2cMBtXUX'eL)NTi<0,jYlI^EI`gOă/*׵&Ge֋ tS0o~5k֬YQqߡи$^|Uéb-cXj,07WkK5m<+nH֞)D#14AW>IFΑ iF&.ȡlsad>g,\] پlz]z _:F@^-Dwd{SW(q.+%ƹ6vA^iǻjjKBv,3cuAFS% YԍUuR;"Mdѭ\ƀ'j6 cYї.+âI4 1;ztitU`:}ٖ>u f+V>,͖"' sEhmrձ-Բ 4SbC e'y"e"*$[I١ t':E2 OE&}:&mo'"mEwSvXd*!|A>ފنY,*A;́liF&%gsL{f$făy&dYD/hJ}ZZm2~yV> 66_ # /ѧdg./}oC^H5 ݐLS̅y|mF6;5k֬ 7?n6&fggD5mv,dIRnK+>i-D KLXbM]FҕK$c׷,6E& "'hlo6lelzd 9+ `LdɏeDS,9lML-]^e{#6MnC|Xt 2dx삔SB Ď s2aڠ 2'EҕK0es-l.1d&2Q3<Ʋ,ӥn2w^7|,,LX@a$87f J`86UV7SܱerI_KDc\RgQLJ%n'7W>m^b1Y!M_6'e}6AŸѵ XQJN˖f9u6 fs@1DoUNfa{'E4>q@1!7=AƁD?u^逸 mP :Ȅ6j+ r(Sj{fceylz,K *ml?wp(Mg.?W=j-ˉ,29's> ftWU{V~Av3gqL E#1 e=_sF䉬V[rY\ztcz8P;}G=RFR쓑9=NɎUG|>QSnhLHփvɱ+⍆;ufLKA~k M]3wpRd9 b{tgY&4kCXN#VV^u5k֬YD۶[e<˲,˚~[r<&x[ CCDA4dFfkygtP#X-CӏgFO m p, c E}ўN9!g\< R7^ddcԈ^1K%8"ن @1oR2+.l,p"-U ?c j<'ǦB _"^{]3lNV>=MP -z/>/.H zM S[lr2٣vCravԢr&7Mu:,j p,m3$z v''>cI, L]=ElIEw6DmT9%k %-ѓm&w4 kX#]gQ{-oDz*3Al&P6 [yWǶgƲnYMTm(f@h mO> 22~3!ײL KXn[-GLR;QϤ3ay۬>c(Pߔ%!#pt|E(@ݷw^ d,rgW)Dن**V LdoG7wYOѯ\:Rg=(% -"0hb\Cӟ&7n d3J B*}p ɱJzCU˪\v& UrI! !Od2 9F c;2}1e®|<@4}zKcr "7ALXVןã;=ZCMēVX>d rkf͚5k*}S'N׿t' }`I,/_$R,gb!1@#ٔ>3m"Jfݐː\FI`,}B 2:"^^Mm1U&̦*7u] ɦZ=.@0MP̰ Jы똺"ZƔ68WVˉ :h|}EBҍ`8T(f͍d⇊ O(%IZŎ^.}vR5bQmAAhL{f4PeS[<6ժ!0\nl"aBn Tk̀#YeKm](.ɦ/-UNd]D˄lB 1| ^f*'㙎m-1!-d{l{Kƪz;:XV\"K\ Q觮ɻqf#ȝKwԲ/S I"%3W ]97g7$8jLoT8&nʙ-c`"#S DS I=w,uiX>1,7uiXNmQ4϶AcJM]!08mzꊜ̦vP)١j$hp_ƹܹx H{fTmxҘQ-]Z vkz{#=; (kifS]k ornsfL Ʋf;X/ګͨeCU֩'|(3L`8F~|H֧,wQl6A )D7u.͎^f¤hpdzPtemK^h66ҧ YBv@&HLɦlcq;L낼Ԍv֫'3Wa*lNfߧ@_#UAd{CzM5 ~Rf;XB'f3u][z z˖w*oH۠.}tَ^ܜd b:f f<MDz.1x r"VQXyH512qz^P:#d{+E;2Ƿ'~Bڼ jӕO9vcK.}}vCEBzDw:m2&R^lR2Kj]KzYM]Wvő| u ˔lP8AW r6H&..eMP>sɴeSe+0 dU` Pa׻\3dE˻ t&hrZy")t^ 'Ӆ"*D;$5 ÌS׫CS:N6NW#ƣ;=>x/}t_ߵwGosxf͚5kYVJ$IseY6M#n\Sɢ'"6E-C2PL4;8+f|ݜ| ۾h ˳LA(>Nv,]TG{֚B6O腀0uU=]P0 Mww=6^uApJvb~Pՙt6RumZs8xdzf[V) Uy&XW !1dm^T6z%0l1edMP|Ot'Ŏ^c_ǦpfsL1͇'Oh;/ XrIѓt:PUH'Ɗg*]rٌ;Q7B"YPYEk8X;J @$W](`]EѰI욇r~tgYs797_F͗_0Ik֬YEuxC,`0Lӌc|!ゖ,E`@sh< 7VO#(!GkFTLؔ T2KEnkG}F˱S0.d6]ʱ W>9׊m @6#pB/L2321E##VC|:qŌcD ^lĄƩ)RaȊtLlX"FALX>!c+ưCO%Ne&LB/ UfxFE ^Qlvɞ)gٙtJ M r$Bfh3Câ Ʋ>NW>ټqzd1Wq4M9gB]R~ MS[,\fh[n2,ۜ{ eSh v=4DXUr  Υ?;U'x +"@Fn*0/ڠƪ>JgIap9]ʧ.\T,x 13r۞&Mnr'Y ֫|k': v2e5R@=Fϑ }XDhT=L>[/6A-BtYPGׅƢ1g*}="6Warig]j3f哱M3L2ɖ=2Pן> }yH??pz5k֬YID)M(0ϕR̺yXn3A֣ h BhYO;u%F/x wR,)ىL6;1F^n:&hǴo{pSW^gd磢ݨF?c_&_t [dʥA?@6AFB`(dڅBtǶ¦pS ) bZFcΫh 욽n ڒKBJCgg84;[?]HX@KMP3[Z4^훾cqdzKƅK dc`?́{Ƒ&ǎ+.AM XI(DKM ( 'yN Zb,:yˢc@Q]֫|/Y ˎLz(S\|@BN;v$#jV]X|zgy%6TuQG&:葬nEt`m|ʁl$ ز,JZƋY0TuO@9*$q` jόڠ90ed4i:(DxEV>9)c( [zU."d#W^ Mn϶J@hjB{Mp(2CDŽueNJ\,qoL2ag.?v="%A{xp'K08:X;];5׬Yf'g=Y֚ソ7hĉuH[oUT #)Zǒ̹ا .%CtԸڎ.wHƹΌ  U{lS;jq*e5͖^TwRڠ6-})O3|R ۠ iL?N(d7mB †* ѵA&ϴt١"{ژ#Q&ADqfA]uOvkFwh^ct,Zvt)mV>vf$:+FN]eȢXV!+ >ʏ<1ПεA@ +f[[)jV.ۈ u}.=Nö^E9|tY. ua8E{l{ѩ zKvr֫˷H6h &3dpYu;py4,nHRa{Qj0@`*}Ӄ*B(' {:c!Lt,, L:뉶2% ӱz2ByhM+JseEe3L19R2fcn Ajm˺ jS,ΦSȅ'rvyJ \*1M>_M!,}0 ^dڠ[FȷAa&U3*]zSrdXicKcƾh5c[\&l0k߄fmHswp`0032e,_s͚5k|rL&g[kWr4ּo}׿_a';z9bPc}"8O^6[X9&bK.zCW }҉ڠ$6Aʧp2Y|(D'=mrꉮeǒ|!Kb3)}z>=<5,S#DuByt 0#,Ϥ.֫\A\&躠$z4wyA&1p>;$]p`t*-!3z\(#Qn4g蔞ޑc/~ ;B!S{Mz_3Rq$r~i,kݰ@ L`$dI eG}zp'rjP'}DpA&Fzm,DȊ|Bb1XVPAFb_τȶڲ53,!V)Y.̈́.]@b0QF #fmFv\tZa3`CbXit-c[DVU5#B&`B@XjEr3/\Vv˱E7mʧæZ]&)?M,.&6~paګ-rEtVυq,Pejt3>=CM'pG 2ŦZ@4f } Պ.jF˞4pYJ&NmUut& ұR%UT 8eqzٙ=P.c:FwWg:6ulk59<69"K'-O43\ޟg^s/گ~CG?@ə~ُ8rJş!>/^ !ׯP}}捯|;|~ܻ>l׬YK^//gq0hf17uXՕObcʄhz5w0QNT saഞ%h.˄Ș.+yϺ m߰1nJlr:r)^tAz%!DfBn; 1O$̥vR{ʥqq m1dl:ewzeTB r [*'cXdd6оJ ri̸`˝%J@ c6O7y슅K/4wDcUT%1,}cDtfS1!0.ڊnȕ0ey* C\2LbhҍV>/O=ceׇo>*{g6OBndvcBGN_4CYK`x Mй0 ^ްA8\t0 8͖^)cUŌXƥ эdm`xJc!(I e; 9!I=vB tiOt B@hfyNfSc- D͌. r7B(.W ˙+V.-]m x:do̎ϥqit OM=u r}]sylmcMdV1n˗>݈;d2G'SWcP@L]aC<`B.#3|>4:;P&?E XH + ?Tf -_Ne-+WB~%S7ߜeŋQX\?O|u;?/pԹ'>+pdj%ݺ~ |wKn 5k֬0N:Ooo||d2r+^ k׷T=8zW{+?=+_+=utW54!7s9a^70,FlnXĉl0xllȩ;а3ÄܖZ6^W> pL LMP)Y^/dǀ}ѴAMеcY! [V %WCYl<)q,Ԋc[O?gTؘAȗqǪ] SETuh\e-9 ~`v;̸!Bvh[-7]Be!% 't/EM2M3WE`,E+N2!ʝdy&M3!*% UœMQ:wyBN ]z0]PztdCms>bΫf63 USr3[A*$0#3&"cn784&KklUB. Q6An'% }S fDsdΥǎc:70-}ɗ>zCL L_[z}ծ|zdz6'206A]V@J ǦG0ZthR`LO=̺ @60A?=A?n3Pub؆k U|zȵAA5AtcS6Cv!"ۢ 2cUd.oLfhr,}ғ-^_4:&xwF 0B:=ѵSfMh3{~Ϳ^<|pr_L7}ΉmEgΜ )W}%Irs0{G{?s7Uܯ ?:ۏXf͚O/x ~կ~F_/Cۿݾ!~ sz3:zoD=nrX}&d$^xAZ`M]Ig l*SaBM8=ϔ SzUd׌r2K-ht&Ȇ*B@6ċ>TÖ^EST tiCCY7^A |hׂ!3@F')HmP :E}=3Iw-b,#׻jFsM]fO%l4c[l&%\mF[ a\Lgβ$`8}xOڷ-G)ft& 6Hb Se&6%w`'GKA@{f@h+ƨCDҍ@.x ]fp,}Q acQ}2T&h \.dZV0giB.vAN]o򄞗> 5|"+jBJ6tяU5,2a uǶwhZD>8ZHC]Th, T3ҥuCUeCHP6ñvÅ˘1ihrC ez) m -\zg&4TMXmP or鳙+ڠ<)ڑWOf._<%ˌcUɨD%[{mqdPc{7eG,mk=MVKmjƲLU5^D۱p,*lr"K *EL؁lV! R:cPEWDߒ+& +|* 3\>ʾ7<zme?p~m۞;w)OyS?~>>m{{7}[z_eYWK?iggS?Ͼz'}3oܧşY5v[ƫ5/} =/sǯ~|7?/~||_[p?_ǿ7?|3?+y=h쇞;@W>7pӓM?g=y }c} ^sWVʇkrÉ/37}s-۷Kk֬s׆}x^~VXFRvmQd/S ]#ˀ15Byl{0mOt3@)Z'h]A"A{NȲX,JǶFwAT!f(k4lOt3Wevp`3}<1f1JNvA>l&>P #YˎS]>9L3ESzл@6f6+x&p`N *u=eyguwDV- S&=`ƺs KKg'f哖U LOkg΄ʦ/t(F_(ܱF3[Awƫ.H@NɞP 4MTlz t]{fC&8lLo30Ts4.ylJyʥOl`6 6^}ses,|>P3WF{O܋c2AvA*I3诚qi᫠"(OV>LmPQ>|S MD79>6%kPcȻv8V@C㕀pvt`Xz dzۛ˦xK*K=lTp^&u(qy=hsiD#5_hglٹ`oY=o}q,ؾש|?io@y~O?r#z/_cyӥ?zy;_ÿ[+^n|;V=Hv=BՖ.z'#۷,0#m_ jG/G7kI6];m6>]t[ [t,Jb|zpJχY̱H ;z9c eɹ@=ƒ{ ?B4v ! m@ bmQzՌ00I=@4{PыTؾl.*fj{3Og0,4: !]T@KguI0^mܜ'ՒwQJn"˾lxڠ*-,`NENphzm ZǸt$\$#x[||>őm2VJ&ŀGOj/#0ͶZfdOd9udswA1n7)D75@4tsz+rT&g7mLMm yD?uX,ԵAuZp@q;D9kOiӁh эU}2]22ɰ:֖]0SWekXAa~43FŦFkrs'nz gX7JӪDUOva7ц4.-|vh05v$) e W.ySv\`CV3 Ϧ3B>g` L 㙺 #R.ōˣ;=Z; "<ໟ~9^=}~syޙg|\se\'>zxxچ.ҍ?o?i(Չ H%/yƙ&?ͯz 叽w}k즜ֳ># V׬YZ~}?[ǿ=z)HP~;ˎMϲA B,ƪʥQMUB|sx:Amn4EF<L_b@f<,2c< I!щtyKq0Uš:hDh3CFEd,~zb*\e1O|ə OyluHi+hfr.cL< uG/AUX Bۅ^*$ZeÈĥt+e*3am/#STb3(})2W>uA 1>1,>ͅٵ(:%Y#1Hf:hReHLo ckF d9y,Dz\vѧѸ뉪ŵ+lǪ,4Bttmr4̆Zl2%]&]FM/Zb8\v 7j 0RuBvS 0<%3b},$z=hJO]V ,XV>"!XdRD4!Iׅ%`r;]')As21P- *& ㍕6.DJTN%c::I>'ӗmg:6=cU e=SzzbxCzSrz'`G/&ӕOˠcKR;>,! Uu?߄c i>Ex4G7 }v+Kq)孷Hچɰ=>8nPLRms/zӞO;뺾vZw3K%fÓ;*/sj~y|ggg?fmlN ί+ƲoozrwwqW9]w~.膿s'<߼S;{5@wu~{EEk֬YȈ6qZ)ieyy2|Xn3AduA,ѱ);bLXfh a*dh=RM?N|dV>]t bsXek7W.QM''h(:KVCtA]yV>]l岨nȦt [v, a%O&sHUzU;l:ʁ0,ddzX̲Ijtit]n;l:˅ِee_y#L*7u)0LMM1ayd{=4^7AЋh۠ d nIcY\z`^ ౬@4KoH %{fcml6^+mPqD3U!:Da%ͤ j UʼnAB.@mЕ= nM=X.}֗d΀Ǧ%3|:sf uq)^W_}|ö @}='{;oɻ=zrJnݻZ_._'~u?/woo^-AHzor뷿ߜCwRiV ^mַ?amlf͚5<[c7@40UhLcYnC` oI|#[ĩ flYT!bl s2K3[L6De.cӳ,J]H$s: 0#Yo<ʧt@djG|@Wm>e,Oz@M1dOg0A]eu)ٓz΀pS7ѵ'L)1oө+'۫njGMi C" ӣ2e#r fdv2#SHS=ʥ m_٦`Sz;,S]O'Ot:*0I9K۠r#UA+w5= dcYBtQn BtSo\rTB%N3w>&;)َeN6%Q(ѯ|:Ml $Lt,kM<jG/+}22 #ӫ,\ǘǜi=spM[ F=[`O l H.Ƚn]I0%{z'92>&&:E{l{}OcU\^U.)D7ͩd rGl!*Uo2`Bm7R%K8O.6##00dUXEmn.8zCz-Ɍ͞hc#Gm_$riS&0:ܲmcU\zlf(Gw6{Pz[!OD|mC⹯|g٭{=ow֏ӫ~DmY'|/]s/⦿s3S_F|S{?{خ.w3xq?j\?/{Xwǿ}~OOw~;~H?k_~m{{~d;E>91J};eh/}ݯ߾~mdYf͚GZ myֲnU#pTBk4똀q[}XEaq*gd_T)B"%H +('SPgY(mOUK5A#@!@4S0,S{Dt3#apy_1/R3WtrBBmeQ:rzQd*Bln dS[|>E7Bu,D>>CxRHJAU>;}J㵀0͙dp +,|ADh=SBǪt2[,va=0h=ndXH#YxlmzCWGpW#lUT`h%(}V …fn {fX 6_TR&W /[а̩.6r2- YX1t:':=mH].L#7CXJ#UK 6.VAQ -}ƌmPgYOtډ rҥ!CtYVdȥK{M-F䡪,6!Ws@tOz19\ Zf0R5A^Uʐ,}vzڭm, x6.|fJzUH$]P;rhbZ#۟٢/ګXd鲅O'. ]IR@[,nXmIӾlS0[zUn_}3' 3<9o?6y7?;~i_!K_/ӞP7A@>o> | /_zs{5W3zŸ>y_|gǪoW~Fn~f^^}<-ǟ=Hm]x3-ާ~W޵g{O{^f͚5ϽZ{ ?8<<|OOG1T>8mht"딬İm&(>o|B-s2)9 ˷ :0e;K:Vӱ-t: Xҫ )MPx[-cT:LV.JS7TXxLhmZ` t3wA^ESKLgɅ= >YlK3asa(Vq>I?}z*F h=Q3 xڗ~0& zl^\zR/nH)}KĚV.]$X^&xC:MȜJf }ԆMeuߣ]ԱjK=`JhtIM.]NL/LD8@oqR5Ow0ή\3.ȻIlA\J']! FƬ| #Ye_4+th{7] zARBBPI x]1ܥ/8İOb_Tޚ `94}p%hZٿ ݉Rr s7^uA]h7%ndw>RAkt@ǮhkmY .XQ苶ʧ)ٔ&l{U'F>0C)}xg3. DUSr`"mP.] k-<#mmmrz?|#,Eq>?JCK\eo|_ ox37|aw]_z?7)lBֱ놅* ;fgrΛ n9KC/ll}980#a%WSW4AOm ;uTBv)ٓjo)Ybc*y\CU>-;=b.HˢteqsvhY|*/]MOjGq@ }NI!:HUO.6Awc`Y$d%-PtI=_H)DY4^AE[4ۂ0MPV'RvLxedVG ormDAkM}rXT On1hEAf (0(Os21"0zRtfzU$*ewz $7Aڡ/w㉪[` .H޲ ʅir,(ehe"Y$'ګf 8җnћ Ǫc8g\2TM,6,w 49fewd#YA`Te{zu Y@ T:IL䋟݇}|Odw|v5?=󭗚~Ο__Oxp͚5k֬X e)W.qjN]|riUJvnҧqM]~l覮75E ξjǎes>V'm'[T.ْ˳q哌lc[^A]!yl0,l-ӆ*{3AMT5 dd/4vk't2'MU-\ƀS[w dťn|2Y$l$Oba㌢c:4F`@1Y\z'o|fs4 }O緿l=ڼ+0 Nҧqʇqm%ŸHC8 X< ueЎI@hK,] Ua86MU"r*Z e}2.τFz5wO]qgiXH "dmSˢtiuա+r.MQAݶZ'=J 3[v6,1,<fCU1'sq L0PR솬ڠv&;"OTx=u6UUtCYdMr3BZC_t xR-Bt1 2-]v`3[OYF 6m3B6,lx]D c0,\1,If h4,FOs0R,WNGՕ==L=vH3[L]sw,kϐjv"˥OktuZJf#YQ@=a8Ǫ~RqY@ҥ "v'Yws Rҏ^ʧhqx=Ο?Xܥ/}-/zfr+֬Yf͚Gǽ6/v۵wKdb,B٬/8u}_,%'OTVDƲ>EӋ*'lYYBuBgBdAF7ͮ!4A.Ȍ|z޶^M9M]|/͛mOV MXۄqC/iZOEb(rG-O8%Ks!: Qbv&n7,Dw2YRm"+}2m މup|owFyy}wF OjKn2e6tU 8zww;)}ₘ)0HW.zpy.&c LQ+1td;ʆǪ+ʦ'vHUяdLO`鲕O?Ps[d/:UH2-3苮/ځhr yӡc>UIDC#.Nbc3Cy*e)2eO*IQkF($tihtAdS!#d vQ cB6c%0d#Y_1#.]HVC>ʛ㔜ZiL?v5k5z{| vB.!5zr鲱c!d 3:軻 f(1R" ±hN]>VU_4]*u5DzN̈́H\'`<٣[^uS8+ n~?{?r]ק٭ ;rZSf͚5kG=Ws뭷d[S{,>Sr. S::]EfCۯ|mt杗}$L?>Ee/$?TDWUm2 Sn;zydSכz%((ѷ&fI w5[='3liK/H}J}ѴA]l)Ͷj-~F/Ll v9&aj+8z 7<қyҟ'+[I#Yk ȆUtIcbRmY5AI#YG#\|$*W.tHB_f6ُl<61[.vⰜeqh +.t[T=ӱMWqo2o0zYďFbyCqNgƥK;^XaD[yS76ժI&VNF;} jFmP)m:Ezv7Saf >r-f@hmDtiʁhf8 ]5Akr6-rL=vT= waDvik{0w8UKYYPuc˪ 2ږ&Nl& }5.OMUЋ6CӋ99 Z@ÑS>P*&7MN t,ra8+(č l 1d. @&֫# '3}xtgY+<ϧ C7s[?vњ5k֬Y FE3-UDo(oU fݓ-rJ$`dOt-a,T 2eqj10fd=.Sj]P,l: @3[Lm!+4Az.H:4{`n ϔnSAA e]itN˖c.}&7 I a 3kp_}Dcb҉pd%!\ԝT*l ڰ&Q!cjZ .c@۠Ց>71Lɞ^\ zb9{Ker4 }{=c@40r ˂ 3 =`JV朒b  "H7fGOkrؔ+A!-K^9IDFb;26`C ,C"1ܘed.  LmK&?B'o2F>İ˞hWB5yHn17k I!r8ugjALd@':,SΰH梋"&LSa{ƲU.1A6ApJ/Í@} l!A^7j+U#pJ+Q%q[~zūu9k֬Yf͚QKn9c<Ӧ^=&;|6Ы-BLrCWdr(0eg }TDY q*18-}fY'6,z3,kk.|,(oD6(!*hA~SUIbh@=.diX+mPgF.3d v25 a f6:0`1;^dMl{0d3M`H}"C SrǶguAvADH`@]3[ҥ1䴞 .>-+' 2a/ U@CwL8]yxDڠw.MS K4t`(ꄬemNf([zeMoȄWO,ZǴ 7dHՊekNvpꊔLOtM$lbA4Am~ccT"ܩd^n,8[0\6z&%xS!~.aa3T{=VU&PztgG֧8\{ZE_ ʥΟ"h[ogy5k֬YfC0[o]9%s&: @>Bt3/]vhz]À4kdMO*ޡǦ_'ᖓⴞ).hoƺF\MRnLoH\"Q67UVPQ aňqzB/lg@6yOt7O/HWX@4'mt^$%;t>B?TB߱TbG@(5MR)ُVۭW .NVa ;T͖ZE{dWv3$:$K0EkX^v83vSz&ƫW.D&w5MUH>c'SWAr,{L 8n7F1pG-6ڱh|+MnSzp}K*tCj(k4uyN7UUcAl i̊P'}&䪠K,\6sYT*, JK$@Om XVrN]t"2,}jYld!D[cRcY `DS[8f$1Eֲ00}9C3(} '!V>IНsU_<ìu5(?K ???ol7, {(xO>s TOf͚5k֬y ȶ nLȰM-!@ ?uyPզ.ޱ-. =DKȞaz˖>L3[\l7%a^gd.._V4F69>,RrP60vcᲕK.3nv(lR#.pc*dY,l CQ"wJV>Q̮vÑѱlvrAd*d<`@gҩ /ZǴt 3Ћf4u*|N㲽j&KBN{ɼ YdnM Uc.# p`̅ LS.B!W9JBف_mGKK 2\ 5365䇲,*'Ax&`%G;E>Bh`hXL_Չ r #KɎeŀ)ڜL.HʧWgB ^ ƪ*93nUE3&vz (c aOx@' D^8wH P6jvrC fl."ކ*%Ǩ֫6ȁlY32BPM4A+rO>\@౬Ny`4,Sr6P1Pj,LC7Lc'~ȟOiqm0ݟ/;z3˧?/WM_ n|:a͚5k֬xxԒn @6B.=洞]nǹ0+jt)YA!JF6j$k>v*z>Iu^JU9&IcCy"YR+cUy.G%tNE yɌ KDo'SՒ{,1;:l.IOt '0Ƕ<޺ZaOg3V=U9d`J@$-"_ jZQ[(]]"Db6(0v5 C"*Uw<Ӟ>UVݚ+p߯|}=^k}>cHB&яegFcNec_J6>A&ѳ ~sd eMّer@OJ 06 gFֵ-UI+@ /}T3zzOUSU'$yI~SW[\,!ѧRa7u5 m΅HmN&u [b?oeFM#;Xl*0|PKF`TXe!s°<Χm]ƬC;hY% r2ekic#Ѯ]kk9cٶ'Yv#~G+" Y5m~[~KegGK[.5,Vv(^ z .nG W.j7ȗ8۱f"tH)zlrD|b\2x4WV~'w|Zd_?r7f> 'p 'phzbP4JgY哵ϦȊ|֫-4.of+ݤfݲjX]& yCW1K`[]3\ڰ@eYun,ʥ5%KL˄]<^ d`XJ=DӋ*ihZL?k eiM&w*!t5>%Fʼn28,&ˉc$>L!"59$O dX" 6ګx&T5#SH11"N.n 0^-\lR @8C3@~xhp2:|6YDF]WG';CTs+~̄cvT67'ny5ڥ.lt+iu~6fdCBtb;f"e4 8Sgw1#Meb0`!vͤ ˶ s&YJ UiY/\!{/kRLוK-]~وeLòILȄUsڧ|*-X+ OU鲅mcfdcC@iWifdfɺ QNcEq}2U "#M#D SP$jl2Nfd4Lǒ^pjc'dZ?n'+\@Lvر| > ?F?wE޳#7'e?._m2vSKN<)z <uڵ>|?s\?/?y_/=ԯN8Nx +ac28}B47U)ߔ9Pu.z"J/6TݔPt1 }s'!' $Xΰ\gg$!K3 b#%~ {:]@cչdv^e"S }UYdŁʧԲNQ;Ң@°jgGnr9D7MDzI:l ^hrrYLUs(rp`0Zd-[Vhό.m#;hYA?p 䙬raZ+G'=PvX#B`@ܱzJc!NյO4~?f Bbr C#.SUwAuT.@.9f@2:-˅k3Y{lBr$۳ѱZ|"ۑ&ˉl(A\>Bv[\bڥ ˎU*ĘhF#Du 1.qAUSq"7^d =Kƪd-mN(ڊ [Vi /.ADܥ- G T50 "&j"@*E c6>BRޑ,]tyn;͎dȗxh2P v@׏%< MƲk޳BSYߒNe 5kh*-UdnI.sL#"ayd=a\Ұ0E˒.}biM>< ~7w2<5JggO[ o=;oC{/{ :N8hzbNòz&C;@WBfK\/]ON:{QZ\z,8iWQx'n(̆,K~[[n,[MnaʥʄYآg{fܱ:RC a)tDOd kD6vFM8Wߜ.nĺe5A&h.uJlrX̄MqDɳڰ̄=4kfr UdW>W5LF朞};^4TeAF>=p$ Yugܖ*k\q.%k 7Up6N'dK9,r8E_]Z7m6,X)Z BlGuAhr3UDzY,/09Z?90@;,6oYIK6OiKmQ$weױB c;胬}5^_jNr2OOJJ } k]+99RkC֑d¦dDYİLm%2b0 gGk]FXP5cn(5rLXs[@&H#ƹX}rSrx6YH0:@%;.6zT؁6TuJ6d!+"#۱,DS:'9p,'WIk0,g6,B{f̀4|C!0~]'8>h[=Zr]SD#<W^|~=_{/cUU~{\|W{?[7[~{~?Y˲}կ~t:d0Nx9<<4ƬO{h$;snX\xMoz]wuu]o~=l2[yFP@ PKpEU &PA3O">ׇђT*ra$ b'ѓ#YcE^Dlj7^cZgr2ܖ,/qi峁 cY- #BlF|Чdk zV׷d!`I-dSjr(7'K_ 4t&nF \A#RU/}%z0T5bf.5h$C3l@ʧCEaC*eK&}2aۥ~zjuj?V_@zbP@>t[CլDzMF+]krqlόm cYLhNcXB "ZN]zJ/r,ۨ1 6Bh=P|ȆPvOFMv*TUȥِծdkXekj?R IJ6ɁJ֍ׇf0͎^-lgˇ?0p\b z홑 4Suʲ@ z_7Iɮl/vi[6%XЎg J }/Ct'iasE\dGg}}H?_z??~?揓A4_Lا}о{7仾o~oO?W_?.(N8!vmonn|va @ ݐNhuol$E@@Ύ?+qck]fYTݰhQD"Rr NsW(qB@=IdS$n2N$?2[dyb3²T,3z(U.LaFs>f{3]ob)oj7̈́PսΙdY+Ӌ#;[` Ėщl*ߡ8v*vƒNہDoȴ'GѾ0\6SUr?YTЏD[qj @D;$ B@լlޱg24֜3<.qJdh"ۜy53-]z.k hY Y>|2B4 ;P [Dͱjs2Qt$yò)@Ar mSk)#vV.^f W\e[aOeITY7%G]Pv dz?P5MeMGv8m.z3c>!wP#V>Ʉ !]| .袐, +G@Ced+Tk}t6HhK34Nkg) T>ɅnU>6E@#\CV. u;}%fBrrH3YedkֻfuZra`[mPx4*Ll,PFzDء{\,D_d7mgWCE'ktfBymӲA.ҥB߱XU>'_ǏDImO*?;Dqdm=xpq?GMcfGξn@'R=NezkܒCZ{r~~WZ_|O'S C[)Z;SgٳUl!0 xLLs X^kYgd I|dg%{  Uq)}@)=; ٌ@8v#*Åmј:ve3 2pnr JD{JzV0&ȫtG>OvȲF QĞ*0 D[B`0,\C[f8.klT5xa hX.7ÇH+G;k4\Xl89/Cmu퓅w8ƲǾYZblLea7r>L0>\TuSrs/\!߲ ߔmeճ#ٮl>@r;mYnI|C; VJ=ZbD4)p] a4e!LY^f8]A MU@ }퓁Ty.YfdmϮS\^9Iy~A//]޳dk]Xl,ڔlԦyi%,mfɄ-5c .b .}Pvt K`k^mr+:VvX{}]yY哖u UkeUd~ CuBC36j.VM]u^ >;jkC٭lntLU p7+=ij;=Vm%}t[ix~ad<Wυ-|^yЯDɫJu'p iʲ| ,0KW{k{+o~_oKH @~|S8=1wq$^,Ε.ʮF"'h5ɪg%r|@}Pi@%ztM׹%OhHL 9ܲrM]E&-)>BKir._c9Ht冪} l'!ddb(bT,X ّƲc !NUGl [6^JV7'gG|z"xt@> \KcdTbgS5ȀWkoGqq"[.r7] eI0['Y#Q>f,[8m˺ف"|\Ci|b,tENDhW)BPw1! j&K 'f8" cF%;c9}Xln[Æu|7IǪe큶Z #4;} 9 K_'@`0" j}hX6z]Svc[jKƦ85kN:VٞsW,lp/Ƥʱl7uBupA$,L=3>0#:jt#٭]˅rMљt@xy)"d9VRh D54l.;#xJ/i.LD>$˵^/iX:Yq\vd%л vJwd"͞b G'<>oGݽnT᷿_8)湨{_?|O}?կ۷oTO8%.sa׿˿za~c_9{W@1'N >%΍zbo,-]M T0'-]ǍnS(F\E7'qJ?Y|(;pJc/wLҥtaf+(y*lv J7Y\~KX_ri&;fd~\MMcsfW.OlQ>'s6]re'ɵ~r>9Sɬ|޲O|c?,jtAd9;l3AjOS|&lByLXܔX3U-]fkyE>!w)rלt^I 3ɒ% ߲SjYT߳g5'=˚u!éeŦ* B]#zI;@v@NlR|d{%e1RmL֧2^}hY9fhteE -DNK aJJ3:0طܲɖA%d!e#1ei5jY @}Jd!A&E}_AlR9Qb;Hah3f+M*A;a=3cq,ؿ/q|?wp˗vo:ga{vwe;{WMc;_7'?=-^ɥn&LӔbGw}؇!+A:"d P:&eK/mx@}PQm>? c;kLzn&/w-D?]N6u`! LdpJjό԰ސ0T6Lꆓ-Ҍey1dd ˌLۍft6^/]OmsԷr2f7eGâvIrߌ0is@t1"![ Le+}6͖^碯|:lj'YouZ,$/9Xd{>|zhzm.?f[=܎Z!@Nb?;8xwX^8}h)T؁4+\6|eH-?ȄQ| ĀCѝҫSzIs[,m~d в=X苒o,OT!kt9 Բ΄9Hu t:Y*!MqN9~?f/]3Z\FOre0]^m*H-]#@f\>>T%l`2D親.]]JV.Y,.@=+b`ɀ)Yˢ}J6VcyeS-|퓥6oXwJAnx]4GlN*1YU;f89n,3T䟗?ikk+ʹǽIn{>5g7|C<=8>y9w|;>8#dsT=a?8$ABAi+OgBϔ;gyr<le1\X 90HvWOROXai3zBENe5]ӵK w,6zVg+;Ȁ•nK2H,}: b,MU:&p(:E\$'SMUc`úg ,,]|]JfS. bXR`L!D D?mt$dc_ sAѫ#[,]^j׌p=3ZZ?}2uӆBoXdb8䶮bX5SYhSe!LLH/]΀eq~ 1n.[ևvpHv0H\j^;2!c;hp =Bh t6T@.υIȮ|=.38D9DfzǴَ^+B[!%z5]Ց-Bڧ5d?46 CٍeCTYr8w!(0#e /{#aKb ThR&@jtхxvG걂DGW(ef<>돊D~G·_ۺtbw[݃F aPYP<4(d4͆cٌd[lH=.J -P>ІgvA rEJl<,sџI12}gs[웡 4Uu&L!eѳ:%w(D_`au:pyTSr&ȑh Cr+pSK B0wgC5>7TX2z˜ 2 },ed6?0 Y+t#)u(4ҧgOC>-@kqk`rxc5,Wf25a0A^>S=Oc;I?v>8GԇQ~q߂A_x_o8Ưʎoq 'Yx}b׽uw}w]i؏أoo}=zS9D/$?ookp/|/;7ww+_WO#?xxrw}j-cz /LtY㓅-.FNK 䩬[֚PK>3au9V:%pϪi!ܡ] Dft/@͉Yѫ즮7t9 rώco"];)٨] O amѰ%9R->-\ _^/moG}qO#3X\,saR20m<.S/.d'YWʹr^rT7' 넬 r$;~֫ Y5^7^oL$lQN8+46I "~*~&K-]~FB666pSUaS|pL8rƲA)3z-(C$f)١lcf~C3aҧc ,]~dK -@v0d!~1 jZ9B4>ɕn3aBX! 1x۳2Av[ыR{TmEK.=XA B@-eJY>.lG̖վj.{d!JI[f\H]C;G]Pܞ!8`C Kp`2#dgiY '(Lɥz>A[^)gEBnSWCd–.;VqX(r |Ągw4{[-<>~#)CxíK}w#K|7~?f7'p ϔ+Ƙɟ|}lww,˽cBwx&sg3xO=\AL~[o/ | J<9ORqc$۱'fbt~?82Oe ,?4~ܱ2ar-,MU b[GP!`vSMmj)Y(΃C;蜞?/PU3Ym!K^'1urgv g%). ʥKQ\Y=䶭y&C7e-d5D6DtmdUHv,ˆeO?QOIB6'T֗ڍ8 n7Uӥ\};); z__}Iq-F.\X6D6f8SLV`׎ TյOV>O7PE f.T "ٟM^lmā̡MVdp Z{O҅aGv`8CѶ6OZ?;[ɤ–Qke)T+ %MU[wJȶ *4kڢj[C B:!ɭ]b1! H[LWwu.L*lڥvȁ ktJsz1]h3@oXAu咵Ks#ā@.\."dzKxK6#LQ pT}JRržmj ^?Y!eYi>2~|.Yp]3)}/p,[ XD!B @ԑ-jNT5:jYw,>+}@ 'Yҥ~}h[=V>0Gn޻<>+G<玧y|n|Z_x*scϕ8ݟ#Nw'>zCN8 hg~g~~իqwo|}ݷX,MӼoOqspP/l~߹҃ݏ;sϽz>q'#|}2'>kO||{9?8K_~~wﻼ {Ѐ tp"?S |J7Pcu!=x$gn|F FC#َUvi:\ub`GsGv@ BFFYd!-UDvC"eѭ}=60#+SI>%;mJTޮ.AJͯ~ό7t5XD4LTÀ~2]B#-p*jnrS e+`nXC wzώV>_\sA,m˛5Btמ@teα8rE0uzÂ9tÕtE!\Ǎ*Dh5B+EZې v8^Ne ۺ,Dv$vD6 cF*lBr7+}2]˺a=ݩdkFԎD{#ShQ;}I˺cAn?&੬,.K%KEҫm]m vxO F^7c |jre9B0J]h>y )3BJ?۷ÎbSvRE>'S~;)%rn,[~ҥ1`cl, KzV&g\|C'qLՕnR>ќB8FOT;-USp8 b"3ɮr?Z±IgeJsD:6# &;;Jȝ UdpO:IlYe~2am_EgGII .\pS+^o/w?疧m9y=j0)yj Z|Ewp߇?wgۼip '%s<| ?ok_G_?M_7?PCr|ST=1wyg,]QPPtC0s;p&\K؍3m!aB.fd낺NBit3YKl ѯ]v87T]>vOedMc|=uAA<t.] b "n+ &Il,}m 9]BN OUˌ̖*-ҧf2݆L[ܷ#7}{YIzn 7Tp"\멪W6|CUBv8Ug9=`X5yjn @ .PF&ڷ# gপV.7C3t6dɀ)MU1`0T4y]g*0mfXs;r!] xrU.m|A E{%ds2fd T֥K5yBgɮfkόJ k^.bf]]Y q/w%!+LC 3<ҧ>Еn~Ó} kB.DyŒtS2α{K6w9 0$d[n$T9D6 exM-oy-lQ0 E AױSkjrc)xa A+,O/䇚/IW٩j y+ڡ@NݐՎ^dk]Y&<Ñ Ew`g)DZh,bf c.H. ԲL) Uuoa%)8H+[L+dh[=ZiUie7ϜzR_~ҕ+W\ԏ)@K; q??Q}8=uKۿb OOݷCO~wx.~ 'p3帄z/}:M˚32;JOY}Phn~聆KX5G(}k.PfX& f 'd. Cվnx]ekaT؞ z}AO1eqaX*}3|+Ʉ=d5'WqM}")z !N_W`;;.B{=_LW= O{س Ͼp9Qo_xO7$nK14^_7>-]Ew>9k,tlt+T8r7.kYKs[4Rrcda_b&lP7e'=KU"Dŵ)_ZvK"Km LѭdCՅ%. pB߱^w&wJ/SW};Z":l*VN 2=˘ Y.S@ӕOŹtf4yMV \6Syz[5lPt;)} ra8#B>P˺D1:q@^EW~'YN9^>YBqԳT%u3M`(;EL4yL\ 5X7A :Q#m|mr, mȬ9[vDΦl7UyZ6to(f EkT[fdFnK=M]$`sS\qhsSUg}27 9=9٘mП֫KƍU3Y~&+|xJƎe[l"\{)w$7>Y`~YF|:n~(;N-7,][Ye;7 lq`6U(+M>#[tr gAqJH.ܒJ親ɖ#;XIg`,ہ+ @1nd[xSW#ۑD:Y3AƘxJ?]|{s6ˎ@W>>^Yd5a|zɵ,x3w5/x"ϝ_陳^|Գ?F7><x]aΥl: -]m:FKˎT5%+!RN@,6ur7;C8rҧ&\lrä0$h., Kt(]ұn>WѰvs銥(6E "E3cՔ lɡF灢^B ͩ*6}‶uYʰ$Ł7O{M cd覲Fb\gKڞt D57%G [}F 0Cmr꽬|2E٥|@Sr3UgE/m.ѮgdbHCK[ek-]~݌c-șծ|~)Pt#D/ B"dYd$3|bh'N?Cаy" ܀z@>CzK cdds2gXlr$Z>)?a {Enal^TnuBN7A>9ڵK{>Pvk%ZZR1٢jKoI7f`l+ܜMYy"M]n AhW> gP}NfSU}>Pl6A6\3B7ADwSax%E/]ZPv63j*>lX8OsathɊRh[=V>Z WW?;]=*̧ta?|ͣW//?^s虋私:sX'ޤ'p ǿmu]DYG;hf^җD^C;?*9ڽ^ZڽI+ڻ9ڑO<+ ./h:˟ 3vC^6eJ/ ?7"㛟ꉹ;Jjt+@vKGPeIY+Dҥ5MsYGh| "@W1[Ad.]vb@M|rT{zۏ4ҥ14܆T&:G7Եˮ)J %$bm6Tp 4S^Ǒ<cjrFu zu]S._ !p@"e9NbHG+K%0l RZ8 ༐jCerKW-̈́\B! dȁCJ6f$ҫUsLAea*bnrX|ҳ}r_mX$d,š-r2.ny*tC 0\'nYKzryAit@>T5\ӥ8FgFmVK֬?T}Eɑ.]fC0U͹t.cHcnCםcKna3ɲvI2'Sd-|:7' v]S)%#;8(`*k0HLBBr w~& F=vqJ6f*"IE a6K@)n|b!fOcs8_r%ⵛ^|ԓ><q0Tt'-2zNi>%?];C|p '<5UԓGGG{{{|=moC]lkC^}H-oAL{`떳c }0>"NUש,}f/3E,QM%I@f2 1l%o׿o}sŹdnq=ҥgtyX쇥(~ 2pZ Cj : ~SU,sar2SYUNPU&lHvWiO^3LءƲ'k3UݜA咘0ZVOls>MU]g?D[\MUuB\诛v:+ɆKGG1oef<"wL@vaˆkX/re>Х~TFY"evgMjAz}Ǫfݱ($δDzh S!x 'hcgl!Ht9 AhY^ {OX~(kxҜ[6lLvoG&֫UAڥ e+D{G``rlsWۑDl2*zЯ}09#D4w;-.lce}Z/G˪Yg~fMnȁ╎@10!G֟j'u,r,}Huې&j \X9τv+ E;t> bCcѺ hz(zE^OvjNgٖui^O65X\|8邨}z}:Y&22>@rQt\:!똇K˂ U4_Ym8+Klfedu9ud~:~t _B oy/j3?[/7n^<#>m8>? ?מ,N83q To|=ַI7^s##/nbrp궗xً.lf=[^Ex_rN!B7;õC(Ӈ6)d D50OPv|u=3MhvSaoF.BetOw͸ckGa[WKoxT6q*,Ư7 SZ W];}=! >ID7mv({hlpB }T_jg J ٱ"d:V"+Iup]" DE5-]z$ڙ oaarۼD?,fNeJ0{SQqGd)]rٵvpy&l,c x ^t\Sɺc%(?>E@e cY U3]L[bsB#Ѻ 2a227gG d34+\f5'SUlѱF8c՞Mj̀RT@}DsD|h XBҥ>cC [4^s=PIȽ PM\ OU[  "!''`7#D0AvMUReϪ:V4N/\wb%Tgq.YeS԰b&ױjYKK[ - "Z[a$ܳlb59py / ?,u_៼ӷ_ M_7n}F1"<xOrӿo=.}{+^,teYo{Wzwww:> 'p³_&!<G/-/:?B{/i$O{6^t3'/zыsŋozӛoz|a &||3IK7h :rFoX v;Q Anav`C,(!۳9=3Yljr43U-m/}[ +:haձp|fF M.,DLd*N^l(Y,S`GhYhXt^%xpq6J5rÉD?^?֯0OgL.x&.כcPt9ҕe"n7ϥ&VelNv~tDN/@s[dd4j8m1DA(@DŽ S{=]jHdBgd4\-F-}:}ϲck>,|E]D GUo*Htl4#; xn İ'cٮ]+H r 9itC]'ׅ0GEXˀ]*fejt>¦.gﲰD! kegFOrS٘ `ttX1&1Ww6Ur' jwp EN"GC;DtjWSd(:B\r@ɦ%% :օ{ٲR[:VcKڰHh,O՞1OE Q.UtEcٔ>[1|c {>|_z>kֻZuQ~|/>|P9P_~軿㛾9hy׿|g|jv '\px$[CB|biO{~?y^}f.~^ Sz!u@;z]PrYvKyJNNʔT@e]4,m cYq!9-1`n%;̰.it;TUNF3# lz1W BY@'3Zktɰȩ1pؐɁZK*L]PX=+6t=92mt3a:Vi얬}gǥO] Ҧ ׍KbFFg@ $h%f*jy%/]~>QkTgE cJT.>m8kv)*PUT!K.M>Uo]Fڥ1!6!7 6L[f zİj0 ]vY؟Qj8D-eM1 DJ>A_Iũʧ۪̆vLk`%pJv,X7#L,Dπ0O~$ZIʥ=˔lÉ"/(ݷ#(,a,1BJMD62Ц(-`,3Kg @]Pزd{J [ Dt1A2PJ:8Еn2ڧ [dFћ Y ZTwc%5W{f\|\ҧKT=MuTB,Dl웑xi9V>O+ͷrL@2;1z/>g|C۾ge/{_Hw>,'p %gϼE?g_򲗽{~£ {ğ_vyg׾M/}7~ǟzK_Y<,ORyke[sWW2>ck&rGƲKfHHKFzp2E~Z"A+ܸ jKab c"@)06Egx=QMܷÅ- #G%zp t^]H +h 5K|]O&F&BǺg wz(_3g9gctAN&Ft*RYNU=QM:m|>'=BB8u.Y\ȎJ`5+l2=KE C*niٲggz?NЮ\GDL؝t}>[d끖.V G! 9 8V G.^ȄՆDzs.7s1}~c=m,oN gdp*}3Z\  Zk]>Pvв ޜp"\:׏.+D?m41,Qmѫg=+LKO%k2'] ѻ .u=3Lɸ@ B\8.vLU=S@t=C77u2}B$ }v.(>!X4|^K3avJ[LXyxj9PBx5?HitavڑhS2_0~&L>ȖU*6 SZ:|倹`,۞Վ^32`qxvG걭^[Q>šG[xk ο럸ĿNS3?Eqd/×?;C_w >k_}gp{b㎎B,LQ EײjԲ$ cu3iR[321cgd._,_f'dpm*/)D7~?W.;t+BG q 1dd0A6e;~[{dsܳ'-ҥ'ɡ> W.Ki@tk\WBOBe]dBӵ( ׊|~6Y|>gF0tz e^d$˩.}0vY^H W^+c~<}݌`CWEuIuA&6mUF*G3, " 6蜌B׳" 6Ebq225'cՌe!-UPm>P2D 1K af\dl9>!;M`XS|Oy.V5lrꔬ@ް]r`k!Bv0Ze뀢cs"FwvJ\7%a {yYD4ۺU3˒Egƒ<IS\sRdrmU*fGK +]v`3Yݜf5'S4^OÙe"fD50U@cۥ6&zGEU,6*fҫC;86Br4 Bk:xҥXRe5m풱l{/T>Y4ѳ;=Vu(L~y/ils (dWN8>#izڵak׮iz|Ox8~k^^tkZݯ?8CWV{_<3>Xl(;{̖.O Ϋ'љ$dx#N [@+׬Xч>X4CѝK{J7=0ÞՕn6`[`X@B.L&L퓜D4\zhh"hmvl`FS2V.s26D6մ^%z$ی `}b[oNl3,Gi pό_د6uuV/e2#sabO@ 3wž.>f[c$d3臲kX FU KyI~ r[ݵDR2he36l2 Uݜ5NF'tӖeщ$\ E'+N[p \.ױ7tdag6{KcyY3PBvA+fXa]1 ._lnlnIu3Y<&%4^lm%aQtXal9Ousp;7e9u0SuՕnjp@t8!wkvEGegXd>;, ' yЧdE!p,1Da,iY"? 7!-UNKZVgUuwPLV3Yrp Ӳ,jN' Not6]rL鳆u*fœlK)MH$xh݋kyMYXee{p妪-gW.D߈6S4[V?y/_ʻ~ ^Rox>N88[[[Dtҥ~As%!S\a=aw /.n;'Asۻ8"{w>OtSވ"F+x:$)=ʄmYs@]+ 碏esdz^EqZ`ȄNnY=9oܔ·y1= \榘⺙YhY>h ]edl[*}z` 7=D5@vK ڗW.V:V+o[.Lqh h,ҧC@f`aYd' |h3]'8Øˇj.PrYKnce6z\馥O323,m~V>9 b s }=~.kֵK|S:.}os[,]^sR4NU3ͦFpҧ Td{cPѬuK.@C Ew^it)ڙ_9T6U5mZ[:}㓆utj\rdjNvM]>n]3=3")9has4=l2%| LVStAdD }roh.I;#^g>e`q A Q'sWxlN抙Qj'("^맩;jX XlcLBn(ڡ>m?muA>N'g#v^ݠɵ~LGK3*]]3a6^f_6A ̆ >@Ko !\vdO ٲ8td쟟%&} яd'n]˙n "v>)6>]Or)b~o=Vֿ. `?cg[ 'pgR]oI}_|_%\OcמQsV>GbAlGmz-s φF=,{V ٥ԎZndRfղT{~^6$Dn k°tyF&vHv+1`X1S16|j(J-\gd+d%5Lf4>Erm'S&oXhf0] `!˷p UFVo cPt ߖלQBnej}y8:Z? gšJ)lgZQ] ]gKe;Ucѳe^TbE4MɄ97L\d\E-U^3|2/}:]Iްx$*aq*Y+=n$+,}jX$>̆[Vr2Mj79.l9vrƋ WD6O@45:$E++F]ݱ̥~E&l" "nȪ 1htKDt/=&׸$(]\|,ۡhMD?LHJ{hTbWjf@lXf3UWJ M$MU5^eDtC0d#1Dv8eSUGzu`kLd;N@-+ʮIRtlfD4 UPtv vl8 s;@Hv-DKDzzxO?}&9޽W?;q+g}'??[?T'p '_ig7$M\._|sQgճZb岩l.daKYe;Lֆe&, !8hcbS*#+#.B.a dpu3YpLhX'dτ6 4靤T%$rLp d?D4C,ZQ6Dmh8X6*Û`i3dXdeu&YH};*mѷwb$M]d(W*aYIIȝMQF҉j3a&K!ĸK9)krnB7D6A/]ZDds@ a0-aHnZk2A"iX}ٳʩ/}Z4!7Ͷ^\feC;|:Vm㓹-JdZ7& j7nK#}3Dz| %^?D X.ʕ-R' C3XSͶH.5, FiᆪN֝W#Ѷ^FdzMmjfjXrґ܍4?'i>l}zhqvPz?A瀒xߎ}yu\z Egɬm de#ƬKq!9֫Ht+.]1 @8#+BF0a9MLn*8 tް3U@8^+ U/mvT!%U;gÇ'oq@ڷU?=O8NwaQ\]ϝX:RDŎ%b4QS5T&&1旦E#[4&XbÂ˲}} ".mDهgΙ{gg9;w\lcwfY,\מV_ ^WH}5[p/sJQ9="X$ 9.EԲQB(W&edrw C$ . f-BP50N?imL;E(7X dQέYD D U(As]L+c`2)N/rˌY9$!R0k21:tEUвDev+vji.qUƌ9sI2]r\ &]G@vJ(Sm,h"2AG-3qqHM"k9R:.?I)RSxKP,JcД*k;J2ZA4o.qHl&i"4e*h I)x ki-3muZb 2Ԕ0eRĄ0e`< H,X"Vdvv_i2QZKhm #BcL1D֙Yr%CPRo(K"õe!!Ov)x>Fiiơ$Q Fή\*Ʉ\Y{hџq*?Q&2K; `L z%J*j 2nx=`%Dhi= G2#m3NL+[EѼ]λטKf_=]ʩ3-qVQy G LYD`HML =eT vc:B50dR&5-r"+1{UԺ%P0.?a4fAט)"SD:%TV>G r"ZY"Z[f"362$y %(AU) A{ mP< a{ڗ%gի%$o;iHq pkN=CB$8[G{i7=9O4rȀN񓽙^f tY@_ڮxeE dl.p.r6QKt>8B(-14&>l!"K]%M$$q}i$68xA $)# 2\Ш\Y(Ih"qDdm4He6.g\Yc7NUzZDmh`vZK|(r ,%1/C[YgH)cT&hK@f'L)onDC Q#ɤו zZ F%9?f0 :Y[f6AK PCd eL2DbX=lQi͛#cԖRD]4*pL[ENO,DeN9I- ,;$.mcfAKK(ӄ.qL([-aK SD)'$2.Ȕ :_eL.fQW6XE-/:FS!qʹ0QGC8/e!qm4p/DKd>($Mۏ&IЛx<2Q\p 2m9et%G1G@*)zM)iTᔘ2I G{cj(^o'/2=Rn dI&Lm /v[bC8q}͂K*mSuvK2vh(AIod{QEZDm+^~OAt"-f)L)}GErIL7>H[M0kltL3v-i/l-R6Qw{*iެaK]kpÖfJ$IX:_&ѭū5r'&,0ݣ5K]']9D]kiPBuik\”u\1x-͇ełrg3I #kxVpHl cZcI&Q:"1ZS|`>0\"ޠ&ɔrn!:V `P yb7BSJ3D`ju:ڭrOGA7YCL)MԸ$&[K>#B[2AGl4k8I&mi{hlnC"`8!XmksH,/3JZi(A9CYeFuv;lQRGuvK_>,%*#R -͇k $%R֪ Εf9m&ZkD@QL>\S]A'2h3ѕ>4QSds\](ùңHM)M<gqILWj ֣5d %\~Mb8ϻ8% Ӈre$pD D@Qy.T$gJCb5 f/K%ZH#Gv+5t{-*ge.r&^Q/eZGF[ t3؏qP|%2L[E,Ʈ,c@r4Ed0DEn>Y`Tq ֒ f6QZ/u.0 +($S2/hzm5.Qq dmƮtC5 z^YKcin+Prb3#!g Ⱦ\'}^K@c&G Z,2B@@YJe#9WPWGZ/5ťNS2Q'HT[]A+%2>KG%9oX'YT&wMmbj95ۘaӚ?Z[߲u_޸Wcb"w>5^;u?Ws熽"BW. 2J𲩽KU-.\hF WMಝʈ&9"%!q.?Y&.QN$FǺ!"C$  22\QPi_ک߯TЛxEh!G dlKC%YЗMvj(qZ,)tʖV#copG,R^C!?Ai2 e# ӡUnøcL,4/ӼH21 >e.V[|(Kb KC 5R[J@Aїv 2yI& Cۗ!Rˏie<=\nBK|w gP2isJKf+%D$gʖq8 /"N@V.=rE=}a`IĞvҘ[k2N|V*"tKYTi")=dVQC@ei-[Em2eJbUn(2.A3,wUiW"h4>.jhC5%2@g c˔{6( ?VAx]}' P(Ie9YEș $+dhr>-+$3B8 @l7%#ؗqf^f,k'GD ,D$PFqKtW.e,0L98("@dqYD]gdJ/VB )# }h >SiŕV^gzڭ9/_ZWwcP,!B!T R5|ʭ4֚|'M$L%i=VnQ˴r[y2|.fA&iwEԺeZvat(DYC dbdAKXK`*E6wYЕz>E.iB2eDR*jYrƏƞWFheB°&rV_@SrcB!gxt;B[)Qn dJ-+ %:%!q!%3(w0g{#U`꒘"[bC8C\CFnZl1Q.!2T)KDQL=vJrGhqB9$-G)I;9 *=- y Q4iCb-#b,2)U.K# @r6ڥC#M@fSFmeJp؀:Iڪ\\Ck4J˸VbY9% %&q]OER(ZRUԘE])wIKb"@+PyQ2A9n?cd ~J&j$ +{NG^ʕEPSd67VRqqP32AK4]LO"+Sʨ? 2QB ky."ޠ.a)1r㴉0MrG 4Kl4%/qH6\I9%Ni.2Bd# X"K`Mϸ Y@3v VWL9%$ҋU)0P%Kx ii% `zwIl1hx([F@6 >n_=Q% ۛյ\ZQwrhw8|t:f.-b~xm:w~ۺȱ{6-}_Hiiiii'sˮ !j)&r,J@vHrk,u4~L f)idbᬁ# &s 2QqDZD9GKfYJ e-Ïq/VHҮ@Y)"j$ n ` %S&x20N#c/Sn6RAoD%N=rR^CJxP%3Q[&j}hUZm۠F֮cF΂Y 9?pJ/,tZYDM gSN9 e4vc(*jhIwJl,eedAlFC %Jf˴gKy=CD#f@֪edZ 7JA"jo5YRAV&ji"2qR.$eZrrR?cgD\*!r]иdF(״oN Z?K;9+dxIkQ.]"P|y_]"yr]]("+ҕ ZeMq k3ЎbWw1D %-U"~LEp9e }#|i]û>O@%Y"J2)gLiwoYD" LV^͢>T&~%9V[)]~CGQX^#D+-ևvsY^~# +B}h QA5WnY6:ø2sJ嶋,hCikcXD21>.Q:-Sv=elQϟ^8 XH~CFiR|(g ]nUG(tkDɡAxΨr]n1B?޻G5{|'D^'|M7tMyIBը.U5[paUn`e.VSVS 8㴅sI ƖiwGynRn?XJ ?cS"/GDEN)%:RkR,u-em5np93v8Y" Jxb%LGDLe˜,%1ZJ06=2QWn$!]L.0"hleP亍I&PDiJdT+c*טє\eRQo4JP `tA9 VQQ"K.?A@0*%6=ˋ=QB3HvRCD $:~.(!e,}VW8XJ( 8"e. ט#Xr I&%n`")g9 %gknY&"vHZJ 2e6 ZD y.|8gS._UH4ҕ=j-r˴UДz#c+txQzf5%c6QX=giQiP %2J[`%P 21. %?!4ChXJ Dbmniŕi7 R_Gz#cDRn̠%ET 2]0+42LQ&/d4Z$$X/S.>WKQKx+C}8$VZ[؃ҏԇr#+()A)wE2݄ȼL+*PUԊ@"K㤈DYGn|_) cD H=+(!iK$ǂ0&j":D6u$6N[Rb phLLn}#"+ClQ8iUҰYKUܩZW:1o $0 WPz HHBMq\$t$q(_0>2 B]r<*|xU Hcw8@WC :eYevMv/n/>v?;?%hBZ#®{SeddJD7ЮK!j]I[iUZJNF/©S<H<}oh;sέ>=~wg@! 0 # |Phi!u"[`H,0 !ó#<^u$v^OT9dY婲$v'ӳSǷ_ȼ3 >[gBp8}˖8o^^)wd*cYݶm۷VAe />[폞 #B>H۵>9᱗^kzW!_n߿ןԢ/7ZvwwgB!l9_P @\.r MSn_`+*.X*ְP [1 [ 6lh+6l/ذaذ`ÖjbÖja/װ5u$}fߞֻ{@C?<80<8(4ءMLǶzjæ>9~.7`IG jT> Bk“?8n|vݾ};܂)BJ ~=D!P}ԝB_ܣs=4_:nqƏqiG խ"^IvKbUO (GklNf[bb.)}}R5͞K"B>N+eY$m)e@%t뱣?|]p2 O #е"ˑq<;(4؏a(B 2\9E&XA!UyUBbbbApLגCaߏd幷ϸYoVngB:NpSO{0,/(ܕ?}OڝZPP܅U y^S-\-R-\-r_r8fÛ#a'1B]3hlgΎ_ncGv8oopB5VCN7nܸѣG9rȑ#.>|Z*ټYnj2#R`2233G ۥSTVV[.sv8://f)5 BEQaaajժUV4lZ= >qbWo>eBGQ^۷o||zgyd#Gl׮hh4!j$MDoѳ= nO1cdPBCCccc;vصkݻw֭K.۷6,brB563$<ЅE9,6LB'ZΜ9oV{Ȓ(Jݗ]-^mdI<dGQFzҋ^%K,Yɺ/Q|$&!e'ӧn]n/g+odggggg|/Sj*Cy=?^ϫo}6'}/H) TZs0zbuZ{#s[ekhBt]!{6nVͯz#B\omxci;_wKNlk.y« 1vT2 < ek$?*¯ї«,| c+W-ZUXHMMmșSm;lج<*5y!B*ACZ沝h}PTK2ÚVKM`tl#xW%/u\̰5Pmժƪ/DQ];p8BBBCǁx!Bu!BHz$vl63w׹}\q;ĝ9u|/?9*P/!qaYB!TPʲ\Zj6}[n9?grulf[o, HdY(Uo!B!שfCY9Ok޷Wv@tI!#{ hlق PiB KLhr>*LncT|dr_k (ҨJwT<]XhjN>mX8MTTÇ19D&!BKs1Xx:E߿đq5s%-iO|:׫ OYܓΩo{gt@ .z$N+yOʋ/XQRW_[4? TUMa)&"P!roA ^o(g Ra-2RM u5=k} O棫n +C=neAH߻W: w!BZAC#@;tlwv:s;1?.}ǎ ; ,ܹs=B!TzVB5sΝ;7::ZbsIB&!B!09D!Bӎ;0jzM  (*O?!w]vڵDէӞK" Æ kB/9  bBCa ?g4B!h&M4iRHH2QiŴ!azzs=gιL%B!B]&qqq.Z\X%B!B]&&99d2LJ+ٹs'˲K"BP"C!&!Pz!^sB]"B!!B!&!pU/2kBCBW5!!B!B! N,uN2KtrrjMLL(o-[ 80//h42 BKA0LFRIIIG (>̳Vs,B!P]RSS19D!@M"B (!v+E!B!!B!B!LB!BarB!B09D!B!"BSTT9!j꾕~ǡdp<FbxJ$P H@ $*w$I@M!U[Y Uw|@@֭[Zm;h VBneaKtu#;=W;:'Ϝ'sż~j*5: K=nB\NsG͛7{˗/]tѢEW_}UZZ ju ߸􌸖 e\ ~ajWf~6'r9n? ѳrinIjK3{j.ۖ\lmn𥉾)g ò 2>^QB\4Mr)ľ}6o޼m6|鏓*墻tmkv2t%2z SQ_Ǒ L?SaFi$Xk3Iݻw6w9V.\y֙=:t>? ?|GCB1mN7Fv:k|};CBZ|l5nwu_Q@)>|kO -Fᖤ¼Z'WKdJa;. y%u8R7r\!W3 !jY3j(Km۶mv7|kHE~o?}>o߹^<'%Lrr[ O~3q옄sN4Ek]o_F ©7f t78a̘ ~n2_23/~Y7ސ0>aʌ{h 3wtCB)7~ߤGA1c&i*ku(lV (zT)ia3[s R>m{U̺d8ճ/BbyݣcJ5Wp 1mۘZIglTP1 h^pKRcrxu2ױHeF9.d;L:B۴ T%!YW#i4ZiiiO KW*egFk?K#__nIQaA2 ICb5S0Uqvpo|K?o&[kmٙenscϛ 3|}F7AAT`TTEELpL:bq՘b'?ҁtXx-Ƌ ?nD}x!Pu5B^^^xx5\UW\\Y 2:d pϓ‘]?w?o­v_=ciEsv;ixp=\8b/>c;̾yMw=={ 7(,ːxG^w۴>C?+kɋ?NT<:|q|3ߐ6]1|(1Bsi\L+%}ss-LwnԆRs9\hd|׋Oi~VS2FoN1^~ZWl#G/_L3῟~һs|AoXq߬=Uz~:ַ+ePߎk;D?)Rm A;2/ٗrqB! HՎI]]6]萘(-0Q14bqr`@Di(^OPsG1mϮ?+OƉ 'Mm2NS"~CglM>r7?'ʠ XAi:AFl( ǝ[`V)k#Bï[|a|xr$ >z0Y{w.7c5QQ@Qk)y7;ϔo>ﻷ 9˩GwƐj#lq€`)))зoߑ#GTnmψZvWo٥]q/gD5 q[]y/M۾=m=fQcr7M fʟv;;JZM " !e`;M޿{|KuW_ B-E@@ThZRģYX~h'ri ¬'9D tP+H? _~p{oOOdo~o>}o} ߚ+o@xaS{ͮ\2{<^L]`džQAAbW'i:ON. YDʯ8wA*7FEyjZESΝڹSN:uVZN7h۲j~ KڛVj9xp'zV,18PYkV*[F*6_,vug::&Wm6P ~~k+-|2Ǘm}Uȑ ~|}{<"V6$,0em~w}.w`bw*0hw6:ul;~*ZmDW~>eYdKa+<*BD1[ jA={v^ QqfM_tM̛հ=Ux]p;s\،ڲ&TRŮJw vEc펝8J9^?TzƿwF!Z؜5SwWZ>qXVq/[;JfDglc+JUjcRƄedef^hGJ0cA\s$*UwSʝ\b329GL7R_m@r?^8u.̮Y2\ȩկ x˟փ‰4ϓc#G?ÇÓOV. t5iGNI!a/s=, =5(ߢ޹223N~[hm{CH}|VSN] ݻ+OkOMs+ֺ̜2k|)ZxXLНn' ߧgc Am{WE;q6l~K 6 q'>o~=_7/>;6M=Ց*vof#Bmdd EQ2 `Ծ}hh֑~>?ȈV1S\r`B:tѣGO:9iӦM8sEt`),nX7|O| LH[_U7nXEl`=injEPotM?=*l%?qӦ̈ǿ~-?Ѷgݰv kM7ߝmi`:M_?Z k~b~ 6ms}5\s-15f@sڏFt7dG4 7n8h^Cܵ*ppZO-yDE_05Gjs+?׷::^?. b/TQh ؖk:lTpo+5jQmg!==3_%x<3B'|~ԭ wv[#)ӽOk@q_.xvt59z0a?dd  6V $>~|<[>{[S$dgk^eV C@Mz~A^=X/Qϼw!ѵm$0甽:0,8nⲨ MoNuq_~e5A/~` ;8}?~Ӿ p{Apf}s. ޅ;♍|g S̀Tz%;J>>zh켒2;ca߮ڙ0[6mo@CU)7ZPl2p<Ѩ~B%d5jNJJ]qhCpPe:u6mٳ۵kw2e!4DȰ`ȣ [~DzrVl{KlVA3 ]vZ)~ןts1Ԃɹq٤.;==]9VZ]v}iqoRSSʲ}Ndcv vDE 1.&Ә"PKwM%PZZ?]v ,`SNݻw8qbTT]FRM9mS/-S~km'O[=UONI~w|ѷORz!ޛ=vRCBW3fvm6Gy饗^z3Cdo*(0}|fdnjЋ&l ]#Bj4hĉӦM1bD-c!t9pnqIOo @>On<_\Rb;~ 5 CB!B"B!!B!&!B!CB!B!B+ꦄG1x>~7ߏ]N/ Mߍ?x8+JһP鵰ذAe+TU\a^8V92"=G]a#UyHHطOyr2aRSSHfWVQ~Cj09l2*f.9D$$ٔ*wirx%PںLg/ji4~g(B!B5N$Dz%D S[r!5hX4>]c;OQn\!BMn…E),,,H5={y@e!*+nHB}wTB}!*+n3:2L}0~*n2Rی*A f܂Zz)Kkn!a&JBW8f.-[G^ %'%%G1_Ϥ{!B!Py$SaxUDxB!PSnj0 QYwGz#*h0 QYš7UP2̻ʰƨ#9l3q8m[DV  [vS5/r !j*]}5~)5+TV,aBn+Gz7Le+W,aB5oOe0~*P[j³ٰ,:u$60(?\\f/^},Y{R1YٛS6_J,aBn+Gz7Le+W,aB5oOe0~*!jAJJJka aV¼qóʐ9*[Q goLVeXä}rU~\jejx "B&ҪU+u9 -~xgCD[9-Gqrspey7h(N˹]BDN_0dꕤ>R.xKf Sz7L}w[>һa*[f Sz7YDBUeCTyPU%hN?vxiǏ΍ E!O.--=y]{j\$msD Ig8#Ӻ}L}2 C!0@L o8O 8kyB!ԬHG?rD׮]=CB+$I,K9qdU\G?䳟,ZE g؅!#nzo3@椲ƛzk| a8SEo/xcgmj*6Q?؝H5TWjY7De SVnVY7De l0~*kei!Zw\`;+"++}.km)ur~4Ol௯#eѧ@rG.IńF5 ,j.JCB]{ӧO{Ff<_wˉpcch(>a ou|\بCH!Е%!!!!!a3f>>>3ӭtxuݫTvR_ao >һP鵰PU!@so kkWjooa,BB`=J!Еh;vx衇=z~#/ c֒O+l0 QYwGz#+l0 QYʰBfkIhUWeX? %3lxU[a!B+Ξ={~o{juQJH*g!JڝbrBr/bҵkWغuk׀VZݫPYK}!*+nHB}wTB}!*+)o-WM2Eӆr09D!te{9c VЭ{Vӽ:*;kY7De SVZ؆ [B S kqjJnUWew? ['LB]YIHH:wܹsrss=#k&?l#L09D!teokxVY7De SVZVZa5s:TmoT5(,M.)'E* N2KtrrjMLL(o<[l8p`^^hdwB!M (C5J'%%=#, "##  'Nl%==vGEEeee<|pB]FPT '!AYԸ2,(W(7^ڸ39CB-FIIVFyGgΜ1L}ܹhĻ_4o匙!B-}?T7^!aڒCñgϞ=){T~{"BMphZ^oGhhѣG;Fﵦٺ*r+س{U TvR_ao >һP0P_ao Uh^UϢ|y]BeXcԖLg/ji4~g(B!t榧dff|XһP0f*î*۫2̻ʰƨ-9O4c ֠4]/zBFԩShhoddd^ СCZm޽ccc㹌$}.\/NolRzW}_ e,Ț|/7]r5?B5P<ԑy)1kmΊT;o߹ViZ=lr]9!0BDDVUUT<,dTP v'gΖ镱2ǿkaUYHY661/=k#S_b|FjnؽR*;kY7De SVZVZ3aW%V^a,oU5Fɡ8y%~8T!EUJ rOi[9!jJEEENsF#}QS](:~(C耄>3SCFO3vtH))pnF!ψFp|1N kP14ħ~Z,fUV-U;tvV'xY 0((Y'/_^ӬheUg5BB}Ϊ<ߡ 6K+{=+c*O׈YTXp_Vk;]E,-:߭tz @  o B3mU[Y PKPӥqqqFs^g?M믌'uӂg߱8Z.\GhC{F}ho\[=|jڒa;YFh@dVK4Ͽ1%6⭅c}=_:W,i.\܅ЕoeQk+ts}<˛[YVrԙms86Wb8xa<<7  OGKG!Plll/Gfx)h8@vxNQ\(p4ǻydM4rnׅxL>R ݫ^6Kлa# S 6KUryPUu$:'*W͆elp%ɾ1cpnu"B 0׶2֓'mL2ɴ\D´n!3-3] ck-Yi<~;jO+l0 QYwGz#V#ԮW+Ee**D(Vg9e/k8tgN*o9ɡˍ3,\7v6! W"PܸN䯃=s82|˿"B͊"68ŶI}B![i%L}CTV0mH]VZ8YNVeXcԑj` 0 OI9ZH^1ӅPh!B!d0-T W:Cäl ‡[.y'tjE!Pcaj5Kлa# ^ J:)ʵBVeXcYD4̨,˹Nһa*[f !zYgQWVeXc֭bʒ2r^ $$k׮.r"PKJ v+Eծd5eb #Fď9">>>>~D|2Q"B!rKi.`J-9D!PKJ,aBn+Gz-*UWʍJr21jVZt-OcRj[i#5_1}5J̋Зw|J1#/j%v+E!ś_zלGfE49դrϮz=<+jyxւ:-W'gB597Wɜ4l mgS;s_kůzCB a}I9>DSBo#Z0W}R"B: =CB a}Ʌk;7GR/Ç/z5KUl0>YGz7L}dl0>YG6KHa "BM8O 8kyF B CBI0]ncᢷ3 Q/!Е"jVzݍъ!؊+l "B!*!B!BZCñgϞ=){T~{"B!jj0777!ф Ytq.r9D9D!9$ A8֠a OB!B+9$ij!B!U&!B!Ju$!B!u$-uf\9g͙m35DB!/gT-|h25Kf;];vݝ:uiii:u:{lTTjtUGB$Ir:fm۶8--m۶aZ֣5l9m=hK}}횝gN|oY5ڱmGذ/WӦSU"MM.9_vu){۷?ߵwԓ|th_RMݮ&&Zⷤ;'꠼G}C%;i T}Hsb td5߬;e޽ :W&lWSݯ6m?CEvcyKU6!jbӛ~v-Ŷըڮ [_%ݢ}{KUVujrɾuBj4>sPAӳ\O B!$[ wږE"HY661/=k#S_bo#?*KHӓ O'˔^HRǍ7Ajr:;~<-e)Q3+coJ,dg٧ s#EfHӻN 7nܸ1}"9hPFt:N*v59ʧwͽzY/7Q]AM{. UmWs.[OZWHB!쨈7L1m %0:dv0w€PC:<;5d8?cIAJJ么K4:|*@ M_XAj#`MIۇٯ\RlGFB$)}&z*+鹈\vĿ}ڄ7VdR"^WhB 4]rQ!Ɔjm(bnW3lT:EGEQߏz~5El;z644h.hrɿw56b *Zճ!B%JJhR\\d2R_Zbr{.Ygs N伬˟rA܀v)gR/'Lꯓ]RX b`c4*=UE1] %Ol|{R,l޽GzwMuoBNgjJ:f % jTmWoTkoX~OlBU|N6m_o̭*ЯFy!9A:9_g}-CB*r]rB4ǻydM4rn[9 v䱓S"LrzbyCBso߱C޾cdz=q#:pibc\ɓVqmuۇK' b;Dpxٜd G5]J&%;=ԸHkbdɓ6qFMVY:E8\k̨g|Ѡh-sZ i@.il҆ Y-Uل Uy3؀vZWjz"gdd*oʪ Um\n$.$;##*ɷ\<ܲ ENgœʷe977zI%&3gǍ ʅ1%7>ovye&|ϲZsL܍oբCr}|Ҕy.:˼5l_%/Qlpd|yvo?&lWSoT♕~;ssЇ_E/z*vye&^ⷧ 5;7g&E_|&o㉟ׅ*v5S3/f{Q-u'N B!jݺ__ߵ/9b|VY708ouov5?WyHsAA}uFX)3-UلTiаFv5oʪ]ͭE~5zB,YqNN`0 999K|BjTrKv퐔31qgիsW+I9I|;Ҿ B ؼyߡC7/(83!B UGrv K*?*<`姕m=׳!j[fz^x_zyܹf@!PCՖ VMK;qxڱiǏ?v.;72*"fNae˖e,S'M5" !jj'"(聯$o0rxCLة?SrA11SE59o#'NٽGy|>!t翽@۫ڔߚ܏Mʃy.!PݤO#D=6 wiNٴwGA 6j35w捓FiNn7OO/xOwl\i*w+u]zt9d 1oǿwTK}JW:͍3mR_w~s.[{+L4'[-M'-Ok=_<>{2o :睋|)GC2o}/ǫv(iοYcN6v-ʈ=0w;m҅w45aĈ_\}!pǻ/N:C YJlf-Y ̔@oZcBϊB.f}򱜲j+)H':k7-^I2A=2}@$!e6'%tC7RcvjțvzRf{ܟ/Pʑ6.K$}{c鋿ylTVa1n[z0һ|< ;ka*Q֒Iݢ#c|xS[M$8O|b߶a:\)5e3v㐲VM;t+=2{𰨮c1 ~;"@AfaK}϶Q^71_{Fgʚ"&M8qX6 eÿзࡔ Ǩ|V; oxƿ^;9dL\}z kW_?_(=]M#;syՆ K[l gv}C{՟O_Wt5*ԑ:oLukuk]XPo Bk  ~m{*^.pݸ-hZk vwuR$D8K> ' UG?1Ame2H7wäv{&RV̻w C&?4=pyn)fC736D"kRYaUz_uyw8}A{_~O!_y2;?.B{pSwS22Rq`v^ѱެ=D>3 SnoBWvimhB0{rֻY?=Íz O ЎN"آuM{,uc+BMNQcrl)w$m7q ZWd[^~Yު'ƌ3f̘|^tDbӿ=sz IxʡԲ;U>eL9OL~ŔD| >u6H@Eil -E\e==Gmnw[gy*|,gosKr%qY~IvW8=t ҍ߭mu;L@{b_.M ߻0o߻+sأsAlQ^R" jIlԆoޱc>SVoLS}ouF 6͊-БЧ_W:y@?̪#hBZoPBqBds' ֱc.jl*,f[+Bv>ל=zݻw~3VBa䬉_v؅C̍9)"l\x>ui}*<&-@[S{<7tpx]aa~)`c駖NyԨ:3Q [~]U:vָ+Qaھl8P^ihyjkS z]snXn냊oyfŲ:fi$ etZ0w_(Ų#>]c'z6~4Hɿ?]ۥL)S7ѿ$g*+&! dO-t6t=Qs??rEƼtSqq 4Eהq>nu:бFTľU;xc ޣ^ XX(!Iw;O-83ljuLr70;E!TV;],ӗaffVmȸg!j%˲,b5͙ërpMqоm|paZZZxx8HQ(طo_%--'//SNBqsB˩0;;n*ǵHy Ν;7i$y`ڵ111Tl9:.::sB5Uz!j*5%el6kOaaСC=!;w6S`fl6{!j*5%Z(SK9ڣ!:t鸸8!.O+ B]09t\RR9Z!B5fNtRQBrKB]994hPE!B!B$ ,d5[IENDB`DataLab-1.0.2/doc/images/tutorials/blobs/08.png000066400000000000000000000120051511411446000210730ustar00rootroot00000000000000PNG  IHDR;Cl5sRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'Pb8H/@GEEpТ"O0_ d{{{|iohHʇ,u %Aɻ'B!__ke4tߒ//umUb|'/15ɋX?ql,Y@sݩ-Ms؊~D]mIo}j^oQ!.!K Awq:>~ dք0@(Jo gRk3⧵5+A-46x:(5>%^>9쫀_ +_ct#tfNwR9=X$L5skw;5lg>]XؖC.w6x9[[z fLUy;qh}bG#kKum߾ 3`0mH\VLm} J6a؟ lrZ,Y@fn _aé{sq[X/92lL5mghQ^` \-z˖b! g^,]s=j2~ eXG.z+;PGg/?e"kuܜΊL\h滿_OR`2JRT 4pAOwtTӲ,h1%ק<,+++++usdW7M6'?$g_p & 2콪6ftO0vSr4MхE6_ae#ν{ fAѥی Iey{,Ҿv0A@Pt9t{*{ xh<Ϩo>_ pJbf ɣ߈@ۭK75R^zo6ؒvao<\"/μf?b#W6 W\HLɾ#=ZYyᙩu3w{R9 M9%<"?9YTayeB |3p#MLmƦ+Sp=;:cxNԪi^.r`cڈ~[(,p{*Om jYZ=ʈSqT&5EurwId ycC"qóf uG?oڜJv5u9Ѯ&v`N[]zȂ 1EaV8 gorU0 hh ޟӭZ=)(uյݣfUzاˀAMC{D(#5F $_ ”a³zɿ>{":; K:VibvGV`j!@򼦶;Rºze`#] oUlj?c \$LfD2 ?"77=q)kɌ:rKhac'cCWl=?q['W w6}|;8y4'g&NW+ 5:c; CvghǂBF/@%%%KtE///|io.w"HO|$C}*WA%vCM XUOܷ'TU7&4H />*,˾anDF(t***"dR(t4-??_ <mY1/.ڊZ@RD#.p%R2;2`"AcOLt7U_Zc0|ίnwuf2s6]&#hllFRɘX@2p1 \z9ү2p2u:=S/sKؚ2ʫJclgjC˓HH*5gjPΖs%uugk6(uH_]_Β%ǫD{ϲq)N^{D '8.{+g:"tǿPrےY$}+ wR:UUUa\oq@Y ̀`ƍ m|z1s^ c3L#V2OEX38dԕajyRB>D;U!I._|DgZ(49yWK2PK- $ ̛EPTs2.rS0Dt7jEL&VݫlhFv,u Bs2rϯ=/42'oq Wo>異yK vֵ>93od6+592dp bJ IdEOvq!|&uf2ږ{/AAiӮ{ÂXfF˂c39yQ?,W$xlٲO,T2Sbs^<8=8GI'-ĹT~ɪ@2'~iP?>}kN5V6y/Fd(n/:y6Oz{ YX]&ΦU"q{'/PA@ b*Pj+r_w Ú:"0~x{DcJcϩY{:&vSV.EpmR>!PrKZ:!yc5o[rBd_Ctu/xt:IG)̷$Bʘ 5/ٮJܾH~H+ C@ \~͔;-d J,/|BH ߠAҠ"ҩb bYfBO\.gX~1  ewPb~q86B) A>Nh %A J,ȓ?z*AIENDB`DataLab-1.0.2/doc/images/tutorials/blobs/09.png000066400000000000000000012425161511411446000211110ustar00rootroot00000000000000PNG  IHDR~%sRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'/<><߁BÒ*b 04ՎsG TCm-6 >Gj蘤:2h'S޵#& hW;)&:Z#ܜ7kPOwW9ϫlm?r9^oz}TDg7\Ͻx=nc(/VGG'j{_7f8etOf/J,s.~4֨e& ָZBLb.>kAA_9RrSUKj}ozٟW@?lߢR., ^NC=&}=߹z}ੴnt~N6Om:vSN^8>mvow HuB,v1o.~z{Z"ZĀ=kWOPL3}ơߦw{`d;6k"SOd^8?yߘѵ_93^M[dѯynOZTܢw  ?JI1Y fڂK;j$'Voՙ[p@Yac3Fw]bƷ?ţ5+m}>ޤn݆?>p5Lblxݝ?K)~!͖Ț=b59WƖ/bs`}ח䎣է[vz(*-K N'thz;|g=gɉjWC_Z\Rzu뷟A-N=5>Ujɦ\usxw}:nToy{ѩNrRŊɵZ~:>P#oCvܽx֔>ɣ=7o|﷧~ӽA億<ޢH v~7U*VOUB=1 VX)F{:v%Z9eݸ~]:hР㨙'*(iOtUb&=E햯oYm{/+ e5O;^;:kZq@޾}5Zʞ~_n~dbjy>ܦF<*ѬVdI6Vh@C\څ~db#7%/i@]_mS=RJhd%tid^}K6+%G 9!bݮ>iEڞ7ZF%M_Z&HUuƵ"^GV  ܘ!m'F,G?wؓ.%C?Ԯ=ew]JiWhg=V:+,KB+U F u^R$v{쵫]K9uߪ=D^ٰ49bǪMuS]>h}ᓎedk鑶/ZeS d l0UNK\瑪k1@;g:6I4liv/xw5Kk2+.6:`AsJ13s}GE,%L+{~髜95 w_ʙdɝ?:v08Ezgn߽nxM[Ծ&YG>ӻWZA@Z39999992Jyԯcz'gf.X3w7,qw~y=r2 Gˉ~+&44<]>3m-=1?=8f٬}b GQ) >Y'#RT{CuWR1׏?4`0[mcF6ÞϝG9K~Z+C+ ThҨ@$ܽT$7Ld|rJ!"%kͭ h3f 9ўƱr[jkqG7i 2/{Jj!0eygs^=E[%f{ĝQ;6CP:g̚uH̜ۥOwО *Ɨ,Jgy0'o]A_lΡ?>gX|>ٙ!1EWG(w[,MvڼE *C">9LyOۆkթܗhVu6s[VV`v˓׬ZJ{^xɦ+?5wIۿ;+_g_ȋ)u3ƅq}ejطwisfׯwZ ̌ރ̸YZ͡ -npl=[hD߲)}70 a5 椂  7Rsbظp[iXTLt\d?-m˲]:P\\l]VSTs/4\do72ߙy mަEv]amkX6) @նe湋<;-Ϊ65@?{q8KERu;þTNYgߞ[gqC,£Ϟ-  )2qs7>[7!DFEE[g"B3O-jũe>HL?y12,=+Xdag=xdӤn:ΙGe80(s/Kl\zuN=ˬ4S?[sߞۧ=\]qZ] kf}S_n#~9.kZJV\#4EFFEڕ+4d]ՌÑB2Ϝ+:]k.'۷isΜy0 ߿,<*pMEʶ=7B07jQo k^e5?,lMmt-MU;Qb+ /q)۫o-;&ëop>U"A|mIkL? Ks;}O o02ц_Tya~ۄ'nV=:nyW1|yȳT`t~Gup>P{JR U ,,i 5g_6:(H^u8#ב!C6~[~_/f%/Y(zv?ӭs{𶞩& tO_ t穭Ҽfس.A T*M9:9|ɜsyٹօaz{9ܒt8mUe9k*m;~^YO[@;+Z#y>l1KOʬ|oYümv'n*R~-~*3#Uo͍=mZn0ˀ>}~H-<}*`H敷~c^$s)BuJW,/ ?2ڮ  ?eW9ӎ'^V31rÿziH_T(HJۺcۇ/JhWǿú<|?}ڮrRrw\s%kxԉeye 4X }Xw~ό/Wo4> *&Tm?rmOؼ(4SmtMolTʗ6ObH]{}vg'jiY}%Uj!T}WT䄔h{]uܚJIPEU&߯ϳ>=*K4JJwoO? #{?uTA*&&7 ^zV>ڱV I5{L6?\cX>A唶OhٳI'O˶=1>HL7?1sUFzm.=z?:/4- sGqe-x&U݃/m\JV\ZYZ~G[umN-͞rt5+ֱ{Ebȸ^u9#bD:kh I50Q-,%5ooꟾ`I8:  pŊ_, Is1jqO|itu=(wƠԯSMp[8~FKt  p;w@o$9۵|}}s[:G#SԠJ7w?e ^>^Y-^ x .NAAvwY#AZ;RrAEݳ/[9~.7f7r65*WbԖ>,O4.AAhV*  _wc5+AAAWpŊAAA+7o^JL&e*76k֬xw8zhaaavv O\ AAAiܹSZGe5lm۶ W  \.QV.\о}{u_dŊ 4_*  7qpiZ||<""#TΜ9sر>}"3fرRAŵ  ahhhJs^VcDz;9sG"⟩߾};"ބ-}F{o GU'A';q)@rJ>\rIypӦM-[4mӦM-Z4m-ZPUxSrɖ-[7oj2CEQ֭+"ÿclժU"8PٱcG6m^իWAx~-=!l]/D~'ZW_8c[m gOIA'%wN9Sske˖~oZho&ZMD p5d'R1~q }ƆwcJh}oO 7c'N{K{ṧ:v^re/0;0%+QkR$˥MzpcLLvtŕ?_۽ۛ??!++Qꫠ؉`a =<E1^9LyOۆkթ<73G5f3kڴM>GߐguΥ1+m%;̌ރG94w!\Eܰzm[6o[R󦡢 p#)٫J~}/[pmP~Ab$'x6ӱcjӦ_t䔳ǺVOJX~C&'s^[0JlLLLllBŚ-ӁF y3V~!튃 +\9Yˊ^ g1*W;=,~lGDHAcf'_/Q6>x7_דlI#_=;ٽ}U gq?q;>Y~Wڢ햅,\1cN^ǻ:]ܱHKñs7b۞^i{lO5M ٲQo6O  UKJmMze|gƔ_Xh\j`AıcY>%$ptEǂ/>i֭.w߿xC@Ip_wS ҰN6ѨόЍ:VxE]hT УMem|5UР}?~nۧ'E7< gAŨFYm!y:VO_{bsx[kņ&ds~i%Nd$|hϡ _Z%&48$NuylRJ-dJ—hW+.UTdr<!!᥾"#¥R5p$sNuX[e|Iя5^#~{eܓuxm|͍[4~L^ú |Q>4m^yw?5n^A27l۟/4jY犿; j۪U8m[_]BΝ#C_cII7Gpp$^U~,Kb!~zg;6Pooj^8wlƓT^e߽K|Uzw֩uj//;ּ7sjUj] d^=탎8;;oiXJ;tc.UcU*<EGNϱۉMl:vꍍWol|ACRorVyywЧ+gXZl~xԭrr6VyxG.Lh׹s{ܲUE <}ޝd$~e]]X=wm^*Ơ/=꙰<9+(|Wv˞U3u>m{w=2mx-qGXnl|vM$M[ Ꮧ2Ͽo9<8롧۶ңBSX€rpl*U>^&IbJS>xn5+<˭.#ۧ}[XaD:kh I50MCR-_^A1ɕ*>׎]9,9ErJ~[hanLnnRXh \o||OLJ)ыԸQOh]i gb݋^nήK$}jޒK^O6@jޛsF6rRiYoOTAz}t#[w6x-J;{_ E cmW1[)b^i6ҺS={3Nv}N ffIV Wx %"=u*cC'#qrjE:jJ׶ ,o޶f9?ǫ~ ']iZAk-2 v'Nھtވ~cV\z$X2P;6N?}s>\ۨT#]*_xAQe  }833ڰx^kݲ7gYb- Zvߠ g^x+3' SIN#G?h~Z7 X@uJ5 Bm8CNUbڹ@Y[''oXNZYi̛6ŷ}K03 zmIcy7+sC^w-/2|/|8RVW{hJi+*5[1CR3B^F*nן4t}%V-?Zwui,x =>\\mXU2޻-o3=9~iӳۗ\xK^I >ao.RBbJW3  N>{|N6hԸodF8t`7 A4iԝS4hԸcNQX81}D-[lٲ͠)gqEt􇊋keBZzr){fjf6{Ҳg CMd;$(?Yc\~K yO!wO;~0,2L8q:=:&3v3?~-%oYFEEHC/uvӑ}tifǨؘػ^t}GN@o\;ҸFulFg3TUš74Rr^_-XT ŸvsS݃fpoiт.oxJ.)MGb F^W*cL;m8*d[HDddXcuvŶ۶nΈ2J2h JuEa*GXkw{}z /<{=钜-zxo#T\Ұ__xeQ3̏_3gȁW>J'֌{QWxO_i'aLA:aη|*5)xuWsׅ̬RkyߝpFOuzͺ. 'U5iͤ7<8s#`r9\ָ 2?9\VQ r9݁U ?..e K,-W&m:\-_o+w=:tP#Nɬ&>k)hѴUs+[+V[ƾh Rvm̶%V'uXݘ-kЧ1ۼ6:GƅƦtz쇽hk=jҰu.Cg5Qf#3t9bШ*dsvY GW6iPjWQLLtTddpPPjU'ߣ  7\bE͋_O;g/rZ{f~ƍԫWO3-Xy;4 vhݢo~(gW>zNlsؗFu37e#Ӟ}:c춉?oώoc >`C 4%aa՚mn.ڷ`xWc~\bKzlڸG'n#cC"6/z '{36rb@tJϾHSk)*$I+Wݻfzؗ]J]3k֬;/ҥKoVdÆ oٲ… j-AFr?+:uKˁֳyx.*k  g[>ղgwSiCƷT p_4!Dp(,]K. =ztddEjPAn|+W,Y):Ӯ B˚S?_iR.47&߳ri7=oW͕uH7D7 U|?}M ¿Uq {'Šߔ|( MC?hY޻9SNɝF<5z_!EfϞ}e Ԗ.]کS[dɕ_ Qs( 7?93L'_tˆno.~СCKd(pBCC9_EX&搈s_AAnZ,`&SO'&mZL09߿FAr7+ED_Z[ްae4+MIIaA 6fѬTW:rHAAAnnr R ѬTAn0Ze+\ZUN(TY\jpp8.XK1nv_d.\_*MDp( 7k  : kOxbk<Ի񚟞\PetPTm Z.CAA]Kp !P{ua&IT35]>ngHbO'fgWkVj˖-+^% ܼ:t CAAI]KpX"X,f+OU|<=ZU)/$6cjh1apإKⵂ hѢE"8AW@x n~ 4KL km{ghToyn.edAA݌-Y%~x&?){W\|7u5%_3yRϞt6Zx>\"\{?m/, %o}y6gP{{霌_vH߀/[^sT>pơ̬c }Xq p!=OY&9U?_urFϘQwVw|z6?ϯo֔| p'&&/6x䣓Bf5p qAm3r+\lQ O|)))'N(u^z'}`-U6}zھM:_Ȝ1o ukՐePAk;vr\*DGwʷFv,dQgpRb;sɼE;+T1]ڞ6-tSP3x2> 6 s8%GAuy vϔ#CcrGXL\1o=gyDhԎPk)ò>TmZ0oٶt=b\>ie[NKvXxYRTbd4L[7m'=!19?1SyH߱f5v3E'FX/QE9ط|.1IQk}6'["n7Fń m sKN {jgGgp@[h٢7?ܕծsRl(*VH;]SDXԂ#pBUUOnȗ俩 \s&wn}lTj\Bd{'?Q\b*JϬ)s 5lݢe)Wr"r.z(սEȽ$SgPR*g0sZ)ZƵb,لD߼%JiѲAƏ?|WNy%ϨAb+k\;&~kˁS^Z6)687lXN񖀄-Z7I5Gzaevʾ3iaذU- >fS&jҪU!_Nc\=+ťԮ^jënQ'fv^""JZiѠZ=_=ڡO{&9bիhJQXrkd U?~mXDiڊ뇏{i_}4ܴKG>l:McV']:.ݭ9vJH;`3LY'@ wP.lc48+DY`%DDucGz~bjg}ljŀO0|EGs=3’~=Ӈ{ef&'Q5]84.m<7tyJ OVX-o(DO~-,u:&Y뾸GD>mnx>5 /]x@곫t""N7Dwhw!52Gt㹢P/HKDx.~OΊ+ZmjX_ب#_=!{ŸvT[fϞ= gr.d}SNxj>j۲ٜK.Yޱmgw!?e* bCj΃5Sܠ~ש[= 83^5u&GC=|Un*А;׎*=S{m?ݝ\Am#/RGPr߳]c%0U٣o! @/4 R큗V=3m*7pꜼPluۻ5`=O?T `|(G':6 lu{Zm:f@^]*8>CZQ] AO] йy?/]>*@Nc".RBѝ~ྃqmZƜ\ҘJG_#Ҫ_ׄ=uOR\N7X%ϢjE@nj-V+徼'v|]*\bh|}2Nf9'OsNcGrhR4{|O?=VRVf`H^ -ݐ{Z߶=?c]oΞ甁}!m{ u;^ޱW{d~`Olwu~6'=d3``*7ʞՌ[~Vbon~엯Yza @pS~ ,֋Rygڿe*8J 3[vgW kqւ8\I?o{Y`RRU?[!PP{KP+wt-zիW\)$8n?Ly!_L6Rܩߴj~1`gԪQ-$*YҽZx*+}3lLcd0ޣQuD FԮ}d!M?3^MT~~}<GAAoC%.#h 1k\Ţ$v=TxyVn )uk'gr~{k>u 2Mms_RK9R|bŠ~:4TNR?URK .EfI q{٢-=x(_~/j2'l6NK5/YbA;nb`ИMwֽ瘙g T+kz/,+ -V x%f -V3Rɕx -ٹus>pyl1\P/۳6R'xﱻ[|<띎ef&4;ҍ6(8ymlAqxwoW~7uN2RtbŻ69&e[v, ԭY4S;\K;S굫g%[O?׳u.^]oneꠌȁ#jG]~_Wϝ9{GTҨmnՂeYBq>ܿ~>4#K?w^O=Y{scck;ם17Rzn%D rӿ|ܣ=w~/7l}ŌƎxhw_lzhԭ1nX &3V;`W`::9 ` 06YX4;)+wa9G3JJk)vrrYuߦOyO` ۺ%\ጜ\qxqޕĢ[F[)(Z޴|;Ed @ߺGϮZyHnҪ1hw`1s+qPKO9E׬y\՝?ь^i> S??x˧3ŁgY |=|_ukPݧ(.!vK^;oܜsmܒkQ +]_|Ay[7* ڲfG4GHwuk5#(ZrMUAPmݥ7& lt_{)Oͦ^⊓Z2}YJ,p+dёS?z_[75⹗6EԚ)?Gyiö}o2÷c#Sp:frZU.ۗMwRB=ECA-!b=}>0ĕʣ॔`ǍqIN<8EQ<|k|)7E 0kC灗 ]sGG7|| 0}V1= a(X!)p/<<ƺrņA:¶u[Km'׽D[|gY ~ 0A|u^'ZgD8@kӍw+۳jʕ+W\)gA:5*~`.?م;%'=zIo whkUx*1 Ÿ[:P̌䄐q)eMۀ6{p??ŁFvО }]0G7uH_[Lj"6Tkq6Z?v#`m<ƦG$r똻Jk3AV |fO?T|ϥYB{:Yl C|4|=ULn8vQSvO-,z}e=uK8UEzJg c@cĒˑ׌ۂBCS\կlxYynG7:V(;2|xɏwmX%.4(4]0ku%υ\6cB͏׏ۂ:Loj/%F>wy}Hj?y:E0ۇ &ߥ}sgPf 5rUyȺ!A ]&ǎyI]%<[N9)fZSH=ͻXB*1;zwt`x߸}U+Wn8nEp#+V4o޼%_}~ƍW^˖-ҥK?MtƭIZ]4[,,;Voܲ{ljͦRG-?4CFO!]oʠ̐߬; =% {8jχ7 D~NG,xc2nμ+btۡ N-Сٳ;v*$$ouЦBg^Wln2Z~Y=oRCkg= P=9h{i3LSj-J O# XpLbblPYsGeĄS>'UVjiٟVp 5"BBI-8{*|jR%.rUphԵv.Zsbsc;nֲQW*yOM]A{!9B@ƹsD!FφVּZgk>2–5Oly-&5[uQ¥#O|ҩpxc'x>#.V$ ƿ384ѡ' KRͫ$%T ~v37a痿ث߲6ظnɚMvYA?/AÿY~bsmv Cv}:/Yt̓\MpC5*%T"[FdKr olDew3f=Y¸*׍m骵#ȓ=0r܀Oů{9Ӵ϶ p5$1ٙsJ`Ϟ:klbΥ+Wa-.TMddVؕ~yUeT}ח+W.R]^_\UKux}JrUo/՟>jxSUe ,;2>cƌ),,|'$Cwr?co,r7`O~y`[T!6{-}cxx2Ŧn{5)oWS Bi>I[':nk9]m*Bxm45vßRx'}J.@rshC(BrGHxFcuJ 80F"@ІNX@ x7%Ȯ.pk5šT y1ÙX I'< C)`EGL/MЃ<lF0yTbR /C$g\h\Xn μ&&-v$8H‹[rI p(#g@݄qkzd QӉr9jļ p   : @Bn5bV@pyՂ| YP cn9t+1G!92Q*8H R1͑M>bV8y=(̭P!f\=i2cfG=IN 8$/AkC=C 斀b%z>%$3p9&}^R|$2O OhhB]'ԁ198spS8XQj((zFHfL&!8lFݎ<>`%YF.EK>nEN&S d1 8dsO. ,H n.P7>  xX>%xV`^dN.rd dG=I9ghvjqK[$K[d2n* u K;BR@pH@Y fhI*$-Ge$ Ȅܨ_RUB')!WAhWy!y %HI&0jA \2_ .!a^ r K&)i2J\5c;0<`nb>B`F$') IvBa!Vu M$ 5Ns71 ^U` HFЁμ6=,)@Ny\dF-y̨1 G<y\r'&+ L@"y,!iƧy\& K,CwUD#3 Ɇ>2ǂJLH*$RY?kVv+k 5q;K2N*nr˩o ߮C/<4"YۻS$ YfkPZfd=jMʔdbdjG3ʜ9j෦KNf٥݁wrwFڒǕkH!)x\hsʹ N0|nnnn 9Kl{_f /~B.KRkDD%WKl/~)rvqC*urڢl[>mip.UhRuƏ|rP@y0C+#^Ђ܌\% L[Q#@'`Ʃ$!8A e@1b AB![ܬ:mIHvژ|VupvWW9arbnb feF(IXTءVT7y9 5 rK̎({u 8 '4 Њ̊\K"P\x>Bxђ[F]$nB]A]R^bmcB2#7!_L.!b{n䒗&.8$\C j ^\\qr$0fAMx@NxH6^AgTA2 RW$2͂Qe'R5+;Օ Eò0K5y;uAs_MHZ}|p.k!}C9Ȇ5m)oy3V~!튃 +\9Yˊ^ g6]=ӶبSUE?-{ڌ̴_veڙcƶ2Vb XtP?vY|K?|:-b1IbX,p귧{ԯ]϶vPj111U>swٙ7gXk6q_>-%+yzuA}2i H74Lv Hc##b}c'?=ڮJLL]d\ C{BWTP'\\Q *01/I2r@2C h4P J@..dԩ:nIHx 6-{Y[Q!w OF8jk km W O7Ez#ZϷV<Ni1g_ijfS9hjN6j֩q`!w:Qn #pkג;vA|6\{@IϜ?1| /1pƹ0݇}T>Essns_Zz̶g?F#>;c {t쥇>ڣ??;ʫfPrnA(W۾iC &>f xq-@rhxn-~;}(IU&L pkE>Q5#\$H^bEa-v8>BFHU@ J&iF$IKub`dlݖe Є 0ՆXM.⌀VG#"7nA͂E-LJ^tM>L b!"X/lp3X!71 c@\ᬐt&'$ p/IjAt3 "OŘEd5+yHNR\Ό$#/ lCnj+*1㑄NhAӁyAj@:dn*2ڗfͭ+FYʀLC EJnp PAR)Ff@/INR pR-FS$ /!,ІAJ>W|xG 0"%/YeFЅ>`ɂZ E&1$7WɊe1H"B3r+rIH%"$ ɌdG݆܊BQ=<P"M:0y-0 t$X!$H!@3r9dv-7TuI r+a'HHu;j^b^`d p^_Lìmo>kHTI ZeM6wھyJoĦJ]T;sƫ76>ܠ!V7v!9.^'mv;8Nt8fX=vt^.Sڼ=/Y3~ϋ5PpSd}t32GlXڌ>$Gkt&aS"z{%Pl9V'7l!s{ =d znA(U;'lSlUêsr'Ft|ӕC+'yB+&_&Ue?~$3"@vYQ hǍ`3TWr)-͸+L#-ܪn.u@#T|3' CHD$EInE͊<[A[\F퍙Q2IR.#\$ NXMNb u Ø72 GYP0@FCP劋 ь܄:6'7U .xH b(.yCfԌ6֏T:A.W!eP*P\;$\8^dDNÍ%0GfhA-b$=ivc,ZQ3+mٙnZ*IH(#b 1B=MKT̨3$&9A0kE,[YXN2&!!$/I6QGe'G7$送*%ONjr IB^⒤3nTjȍZA;`)DF=@HC&' i T$71#ӈV̨Jhts T#W95%GL#8/ 2-i,[5WFE+p@:i "4+dB@%4!1P#tTeI r tB2t pɄ\AnA-B|&f4r\R@'B eTB$b=&4*" TBId>qE!0I%S@*Q#rʀ/82_C4ɞ)][:'ݒVpFfqɞߵRo^?v)˶ H\c,6OqG.vf*^tۊ#Egiq;׷CWPSaVl 3eEV}>,~}`իTVeIB;Sܼ(v$Y#c@ bV U@c71LC Ht qA"@>\2%h.q#9\jFEr@2Bw҈rkM=$;KUTj^B11 jv"+ LƐ4 0 ”ƕMIE)E!e&34+'4ΝKz1d ^în@|/|8RVW{hJi+*5[1CR3BC]I\~p #rs2FJ j%%hwv {qe;sqn PM0au@2#7Ɉ^pB!'iCcBY.$3t'WyElT4B'76ܬ "@cSDn 3-KEde Q%$C"Nh$ @]%0bT8FM3Oq%+ I'($Musc@n*cL3#G4. ͨ{HpYtqn@! \l j|q I_ -&{X7@2xIF$3r ɂZd `Z(+CdH:`K $ \'cPIB+Fñ̒BrEt77#|ư,m?j첽x{"r bS($leVwp`+at<3ZƉ,wW-`}|[ߝxUU7W ֶy{3c%{ MspDG%Ib!a!jzڹ?WsGáVcAJ7J+>!G'Ǿo>s|AnPe7*he:uDB;Cόh)9ܤH6ٓ8J$' t|nvp3zqd+jvSh7FTA8J2@}$h4$gfP%f~"i&$D򒤒H \.S鄁'!y}$9I.nq '+ꡒ9L&epc..1kQuTtD (WJ2ȤH*1lx X0\*j 2(@vznrlcj5#=*i/ucQĐ{3\E+WQ0!XQd$sL`Lȡr-30|AT@I\V b9`B.{Hd|!)F0цq`^t` 8P3Z $I,ge )IAL#g\力$h6B>,1 b^ jL3׊&@I*,YQd tcU B@HNn@jc$7fI}$\#$#B$!׈i`0YI҉P3\+j D!L2%BDp)[yD gB4#1=AYQ M*1;"% t) <}6  zl*1)AF0,p X! KH*Lr׬TWP*F+-ٳg{}G;Fӻw޽{?|ï>>l,N:志,K=o?&~Ercyԭ΃{署❺;u;? OV :jUsЊ0J'A5۽;#;gpLhXՑr[2ZkF6OJ}SVw_1ѱ5_w&2 6l}<>& * ?ָu}Ȯrǿ~5+6s̒W97Af20Htr܄@L \!'VzIR !mA)<$`b zSPcH^ xn 9ܤxI \v[j !cݨTP75bK+(Qׁ&S!0hL/$L`FTSPWRe ;Pa^ j:1/Iv2eqI;HጛP7fN7ZT5#h.8цrg\&FiZ|ALzq, 99xyLEq8g@2r`j@5..q37I^BMp LA 924:I@z)*z2o }$;IfA#M*:fԌ0-qf5EUFj `>3j3f,ຓt-r@NXlnvl3u !7H e,IB C$ t$0#%.)fCəd\Mȼ63dѕ)cAU')+.<$pdSL4`>B+3f V&[[  e4܌z0-npp4fJ frq>f ̐0CN: I@vRrn|n6T0oxi a7q"dHƌ5+5+/+V4o޼%njsƍG^-[ֶmKw>Sٺs7q%Qoٵ2$M/7mfAɬZCgرߪ%Ÿ%33W3a„6 H`F>B2ՎX>7ٙj b^1]3#@ q@'W̨YPWiČBG" <P@&U˟Q4^ smy&9™GAҌ7r1Ș|\2f0"cn$>lUI]QIT!*1c 0rp%GȅQG.#! ($ԍl(a yf\13Lc8T$܌$c!kaF-c%\!#2[n-QjBPN>L~atQ*1FHN.Q"2f ۃ8^Bԍ\Cx^Hɣ1D:@n!0'4v t򭐛t51qE.e\t@ p M.R%P6<$3u`$7ppلƘ4NjC!I@nT\$Qe\pAIn֭:$0I\㊋ @E2I%Ɇ 5;&DQ $ J8 ̨"!bjH%":kV9")yd ')!PW1 h%CO粂"[| 3wS95-1W=\2zHTH1~NuL2&rrGMGL?~O|>Dv.]{A;3 RQƏ&0!H1M1JEuq^%D1f`C9r2d^c,M`}HH:(D$yQLhBTLgff^Bc|Ѣ;=>bFJkXHJ.W $ \521тFdH*1 C5>@(2 (3)>b$MVDc?+S*J11&8 $3j> I#@vThN݄hF2<8@1 C~2pH#f$fLRgE͂Q!PgK.Rx5(M[P @X MR!7p#Q% f d(&yCDhx!ĐFHubR<.'ըnD2=-u@NИ^OaP汢&W@7.#xH,ͨcTk@\犗Z.!gFIc,ShLhA43Rכ^HV QoH&InC͘ET $1WMA2 dN(nd3TUkS:BseD&L(fqaT1q0`&*HɩK7U:{[v[u }VŔQ lǤL6MSDmoҧ1IMcxoE=sSV 5f5 -[l@ڠ2霦ٿtj?`Vg{ңG=?{׿{yٿ{bۡۯ.[m^7~mZ^M0 -RZZMBY,KHWӁ&!qc\ͪ1JӤ8!L-LC%Q'Pg5^D5ĴlhVRѶ-VJGjRsC鼜r\i8XJ[._&E Xl3V0!E0(lWNysR7&+}3 UtUjCCp<7XM`Rq'15 %sJ3ddKiΧ`YM{ h43!]`-5PG ځEӚOP- >jQC`nnn`.7זzH[)U`0hh7),2:͆`7m7h2֡/r2_""-1I_d ͪ)UD E QSjD$1Uh)6x -nԛkA9 N-"֨mǥj[T MnZMbj#\uUuKimg 4Zr}8-u{7K1F ;R7Ɍ2 4N( cs>6$iC#j؝ib̭Yi }Mr<[۬s:&HS<4 QSiDw ٱ ͂!͟îgo/<n{><:&dRwW`|u50$1V4VS0a`2Lp-1:R:rsCu#C#XgZRouKդfVZuKJXn@cx!=H0jh!M4.qk}M('-!1HjKcLaR L;(8X me տbC Fo`$q (XT[6ڻ b \M4@&D"F6Ѵ6:R,se уf5M 94@&`UXmg6RwUs$ih 4iIajmI|4˖T)rsa ?I=4k\rz#U9•54d9J HYNŔamnNĵ7mamVoa,.` XW&AՐҜ'd2}L%L`){# *JMjJ6郕&HP4^c5xȜƷbF(ް1O hE%jPhL+ct-4Uƾ&%>L#jJrGRgT15]֖*lo̪s\mZ:-Jh-btXV&=Mr @Cu 9{kUf}(͆ sjBj*jm\mb gX[hcS,6X/cm4[ꪈVXcZJ`[TIBzG5ؤ-P [(٘ThĶpQLa%0zChz\ϐ caUru!"&T3hhQ_ӡƵK"5AhZ1xr֧ӾAC7B+ě8X-Ӷ=LVy[鳆0[ԖXi2(aݔ2#&*9EO#mcܬe7uDjLzJ RY8doY`R8qx[me-h6@):R\M u}+ƥI*"&-eDS ØA`MDsU[fגI7 WDԈR虻@]L@yC(np#ZP&mV1=i}|7S@CC&pf_k׆;P6\{71^.g=Y_6lVnwzO'^=Iڻ[lk_u}ś{?8'K> {??7W=o>gCw_ᏸg^{C=[ ܃Xpy&Ӛo@BB;9bVcX)W&!C"h\ʌu rB·F"@S|S*35lJF_ %:"dzVdyRYD`!`L\a "Ts4x2Mt>n%֑CX.s60g&0:ߜVΩ̄b-BLizsv1'm 5NYwtYMg4VP`UGt@FP=$= KE p-\1)eVUf}Cn[(m]T*cn:ߺ75^[F1- @lPJ*N <F2>$4:ha{Yh ޛ*Ԑ16+В>t'a`F!ZXF j)LklZ$O捷큺 87GD,7FqhQ+pZS5 lM2֋ܰ*,MBELMސ@Te[R-vIWX 5807g`9506Ң9Mf)ʘґ#!#j⮹$|y_z)+9GԌMJHnQnQi"@K|gdDcJSsAZ4[T:HeEDRɘ^uyMݑo6dGm9Og<?^k^//qa}{ x# xxx='>{G>r'nnLuݯ{!J/}^zϻ/\s#3k?om{oyʎlO};te?qD{=j@}7ѻ.n6vuzip6S#Ze /ܢMS58yX D~L%M"bhQQDm`FdhRǬd@f:Z4R(9LZ2$=͕&!ӃP5B2 Y4y\O3 4,.MGuMo;=M=XB,}ʺgZm8ZSc }nLh9XdenVQC3j(%5y Ϥr,sZ6Pyn!k|3ע_M)TChƦTMDŽFU:M $0PWт;kx a%\_¢ʤgnʔJBMw5 1wzGZtiswͼZKIﵬtx;ۣoG:xݻ|]%].k3wg_e-;k'vk\^!|?m!DڟS^gzq|ԕ+c8+k [_k7rj,}ႷDq韗5 O_ֽung[_o< S+׶֯wMuK>P\3>']uxxAﺬ?KO98x_Uk߈o~\]}} Їooĵn ]tI6&AِBmg- t5'ݠMƤ+$DInТhx6XvG("Xq}KSsͩthq),aRa?0+0Dg\iRX,. kHH :j"7FX#Up-8=.\`]3mnPr1i4Xhf,<ͥ45Wp*ċiXDh])区r`j v,sʤ7@A :Фzce.&&i:O(ޤ@S&DkKot")b*X#-H&Ɓ:&h\9P7g7  TE}f4 -p:|:A,MB*k2f1Ooհ@y7X-ZBkߔo56U50dJFUP%nNӮbӸi:MjȌ6g5^f5.MRnb4T-1ͯVmL°fw~? LĀ~RZ m)la3)JSCss pPmJRڨ ^2 9ܢ9=m~J7|>Mn _td|e[ي&Vxw o> 3sm|g}u{N'x?Ǟ=Ɇz翿Eoyt/G/^X_yÖݟZkp{>{[}գϿ>vƥwFhl͏O~^+&'V܏+_>G켨=立\Dkr'⍕޺~_[վOoAےvgA/5eDd^Wo.%<]x?N; mV 0b\c xciBbL]& bX[&$)}_݌&޸UmV=Mz!\ʌuHP s ih}$jc Imj6ߗ)L*:))@F?!h7 `r -fxR21G jC.+oլiWQYHK|KX/*0܌ũ`~EU&9K -MꠤyH Q4e7 $Q$"he[ }\sBcA\XJu w0&;u:%3ژ4Դ:3jDF>`PI=&; ̘NF(AKXwXdRU*ڤxC6!UmMIh-V1}JmSP㘺RlkmH |n4ISTqZ]O 4e=bNgQIȜ,Js\*G0rb1Ѥ)UhICbd bhJ?xg&Ӛ ,Q"1Sjºpf\憋ܠͪ%~\ B/ToX Eڟ==޳A1 6t{jyDFy&;AKwpn9^q-;WvwKxG׿s{o2WNٍo~3߆K[w.ه^G(9{E_兿wO?{7gooZ6ݴn{P_y.ĀlBwqK?Skϻpf[^}zq;+|θ?Eس_߹ffvե_}!%l^9}G=U'} ѶOqܚOǽF?S?;K_sҷ>՗ 7:w~~~-?}lNw}#lnTCN薕+W\y_>j=O{_[SҪ͝B}w/gK;F@-{ 798|wuqÞ{n n`swq'&s&a!/nLJ R)XƞI߬6jch* ZDhrri,L VU g&5YP9iHU&1}UDX7C714fq)2֡Q 4,"C=joM*cJbbO<@ל+`BpH@6fԖTaݑ2@nQϒX`}9@aj6qejRԃKoKJhw0Жb+''1cRoRsTP/& |Fߠf1|UJ58Z8!*}5xp>O!!>c "15T+0d9u5Ǯ,+ >uh1MV4#yD-. mVMz Vjru YJQ!u>&b&&*I٠.)U%eP{ Ԅ8œ }̘V)Rz]JHeԏ'l7 6BNFePRZH,YLx:745xoit0W& CJO:Rf4 y X'k|{ov_GfMHDD67 K 9˷\Un6WxKoifmtn>9 a'nw^(;]^{=Jt3~oZv ^_> j5Nz[׿[唧/#aaOIozt'34ȗx [OW>QQ6.ݵs_/q%=jMolSwEƧ ;E/ާpÏ}|wx0ޭ܅Q{3?8/v}GoJrg'=jTd [l#_]M?Nem7z*sL~7u7y?56fXjW_ecrvp ؼj38餓fkHf-YM-su5a}uG%Rn͵Yu5 ms(7fQ7zcF[`mMV'd2p9]mW"dxj50Q "si_ .4-e߫1r ={,%8F6"Z[$7q#lhӎ$bYn؀l!=*scR4T D 7HD\`!nN&}נ`9&!%t-Mjìf=M# |i6ZL""ZJ?.EPX48إ-R-eu 70ה2/,vItQh*Ș 4*cR43JB%-t5%)UuD-*]ESMi"1 }ian [&j0/#$Ӌh'%eBL+4IhI6[z%qI1d><3:X sqh&]M&!F# m!G! 1 BAH0nL( zm)'$CbXn,+ 7h Ϊ6Enؔ2(i֖"chR0%R}uBxشr Ƥa!gwͯtYBt7s:3lg>({#|>~+s×-6bմ8g5.6[wLclm`>Z햴- +OxO_ǟn+F \mMڀ1>DZh,}$*7fo]jz[.tVK86Aoc~lл'i61 _7{zW7Nzࢇ੓WasO8<-G(s#oo3vz u;@/]~{nђP d%U&U~ ], +YE +oxmͶw6qYе&ڲ-GZs]uO{ܞ ֫ l.]:%Wn8wg#Q_G֛n+_ǡ\9Ek}o6M\h*߲݃+t: o'?y'/_reW_} _ַuqǝ{a{N/>rW6rI d5u-Q(9  K1)м0W9X ZB13pSY"[ ³d`BFca͕2֓2t +LjcUh&3r ,WE%P- f#Ŋi}񆠏 Ii74ZR(&=K4 qOg4σy6xo:hD50zجbg4^)͡r.uXADJ +0_I zZ 7*Ҩƾū|ƻ$."Ff6 f J?>Y( 4)̵YKa-'ˑOhMR%И]ԝbNij* eInZ%ڂZRH͑"holN ZmRT{[ 79ؘaa`1ư9sP)}-!!pN3=s={EkneTni͢偱9 KO,nyg݆h׽v^B`.t.{mb@6C뫯fb[ކ'~l' y SG__WTלǾ5>]SȲC_՗}^\3I l<#,_t7hp3-9_\u ]˷t'%M|OzS-7pٗ_p\ lpÈ)[t0ޝcQmqrUG]oŖoG_p57m%F8ğnHcc0N⺪/l@-m[|#;㷿meY]zs75yI'bQ:aըJVG¢PZͭjZK3‚Lm 9k06XOH=!ED:Rvp7B]i2٬64kiMW:M*0`VӁ:!4jҳVթrn0&ynQe2!# J -[KII1cAS Y'XDk;g|ַĨ2X" sԔ~G]s1)m }Lk2ZpշUS\W"\]Ŕh:1}}   i m10`*7ehiu\LCJs4ls >RI2b^~ 縔Bh wqxaTRRR\K;"51Q CcB["$<84VMJ5z@#ZZԵC5h<"C)uӚt-`qn5\(ԍ`M6Ƅ^?\tҾs/?狟ſ =gr}0mqnh-,Jbu[MÉ@>񥫇_=[g#>{y/ëp~NnSWEAZap;^>O}%S%P_/ҧ#*MBj9ee"0hhlSLQpL@IJݒhozcL/4blV`L!o`)|GPW!!kp<8.VQw\WơYq&kJ SFS MYuS9iPN)}đY7`u>!5!do.62ib‚R_ݴOg5r4][3>-MIV0oh l M!jB|F3$:&EeLr }D7Fh@7{/7ܠC!Swe[luN]=S}.iKvٽE/U Wp?c;}N޻il!_>}WW|i;F%+7kHv>qf;cIgtȝ%Gh<34GmxCQ?%@>ڗ6䮲>}ᗿr}N1vM#tQ[/Xhlc&2BuMkw:EdǗ~Kێ/MCo{{ȁo뢽_Oiu9\|_}{.Lqo7EG>}c5lʍu(OH&FQ#e1)'\,[̐sܐ@עh ͛Ra ":-'Ԕ0w%U¾%I[|[J*77gIeN1}đh_Z< Up""fЎjjӨknZ]pk2(T3mV$>H$Ǥasl s]Sa MȘZL i``qpI \OG1ORtNhonZIF` )K@15 ,ThՃI!=M5&5e[cZKrL67\fC@&u[^A\S0 = h"FBM2M q)͛iFkK 1:i`1}LuԠ&-\iQer[R-G hj]jl-eDi ֙X׸6!-X" 4"AR;SoXP6YW-RĬhoq :yp O tR2㳆TcR8l+D( #ZK }QllBso iF>{Wc鮿?s{ޓG~(ˏ~__xY9ԚOySĆgtAw|9} K}<5Z{ckF) t9hL] -^¤C5դŊ#kM7h4-ecftY<bC)}oga0̨M"7PVmf÷M$t׀\`8U {%0R;"CU ޤ#f]}ڤ%ɴo<NYM3=MjID$4%kWW& ]& I_ ,njI(plɺ)G3HXϞ2.cڬ5$oK& Xe2- JE! %ؖ΋Q 20a2\!-dL%Qgp^~B򔾄߄ɺg@VA<4!xouGPMi<и-e`cXgKGT6lp/Z{v7Z~ l= '?}0A$'_?O|K/ᯜᯜ~#xPo_Y?>?61\z/}  1 } DM_?~SԯD~w.`h'~᧟~:]vk]vm@]׿{ \F̬h8餓4%pÛpt`(V0kuː#OJ,L*pV`=J c& 8؄ˢ)Go]Mg4 n_KiNA!kJ-ͅDm2*R2ɬ6*s|6΀YFP.; !龊i acUUL3@k.}4Mrs&Z$;lNYWparbhr/ku\MJ}cOfaX.w>%I))B=Ԍ)V m[Tjlڬ#B-(pI%eSʆT-jJk\ VX,֑zm12%eG`W 3MV} 7Ă(qhQO"\_5F&AI5&UJo@_i!3#6&Tn8&؄ "QA-2-EЌ>e毂ųj\ET&)uA& }u(qY2A31uL4׈HCm2 (]Le3ցzRN0Ƙ(,[^̏_xszMu6Ȍo6N a:R'!$.r6+ E[ƔKƳ5j2P]i>Nqf_kc)MV׋?|/=f-%y^J?@BP]WEKv9팓iޙ/m;`;(;ԗ;{v}ޗΟ-Gye]v.Yx[s9 .x߾{m)2!y < F}!2X2{VuzǮ{6{xv3n[Wfge5)TRVws ;2R ss,?MTܢL¢¢uL sͼ6)d X&Y߾rv;,,I~ 4\pAY{!Bg=>ǿ ;%U'qgL+MbT`14L/ҤYJh,sHWӔuFAvYkpu9\ яI*\p"stvhB UE˂$ t 00Q0YB3F;oLIi>%Dn,Lπ$8pqpt5: 6[=@[*&5]!|`23#@D 4)($^-X!$jeN:":lL ]Ç)sh9MR )5' ١Ʉ˜?hC|mP4-VsR&T5dJK]2j R%mhQA s%\0I8ꍬ AsgI * W- iԠM&9Zdt<&3O0)#EnRZ% lf9J!0WZo jjHj2$84'ЌYv-U `:9-{S A#@)҇G'h:kږ-hP3ek :0n~v..ٍo?O 9.fgg[֊+wFU6~{rK ,{%^x7ocÿ;u\xv }0J)!zM/cbXFC? hCc.:XDk K MkC\mRXDXG1єTbZnRt.|cD-5>^]wS>`AB e!tЦTa\nQW~K (Nhj#o ¹?6@8GQr&+0#KX6] Z -O!,0CR*`` k[R< W֐6CgWC|hkIj*P t},̺z ̓@Ǥ4Ym`b N,6CR)0y^U jS'lj}iaQCP7v[p:+pX݌fn8!&]2`Χ bjaQmu>CMo36)782u`24U N[4~y40T>xxpr|s@bBvF]g E 4 [F]n@VzETsc -MbjU(_Q-y'S*Hz%h6xVebz)[{IG 6%kiN[IeXz3\[42j\=yџ?ns p_9ޟuY{쩧կ}{K_~o,`wW^7 >1|ۘ>ozr.^B`)U\Uh(a77k-uLP0c Ua ТECltD>OtLh4 {2T%g`N)m6h1xH%BbG͕Rژd VkZXηo;CB&77МYYpZ,"dO%T7Yy000?0[|GBIQ#h>ДAC|BL&!E`cR.uyun:mLigŰP2UhJEI%nؔ2m- [Sf]s4Y Dh)*6ZTV -.L֔#eD#-*7`N9 uCuVZǥNRC3hƪZmdF` $Qinb@ )b7j&@ƺ2,7>Q*cqZ=h7}6MW+H @͌r& amRT`$lTXfђhw ~6Lr U S#=k "pj UT5TGfyWϬ~pD]m"Ƙ`-8m}P|VDs,ҬIaQaB[} =C?S>ee/}nً>7ķm}O(_]{e?a647-IW#c2`V@S6!AbZ@FmQ 9.ILؒj/ws2egRg1DAG˨-c! FXuЈB8P$l qk`(󭞡Xā7 КOX{Q 0 j>X]b0tit/q2lIm~bjG&lIb%@u kwGV7j!;$uhKّ:QSa鬉XjMz&֒F$eݔ2k=Rhuܢ)8jCiҷ88&5ܔoQ u5`Bk "h FԌ~Vu$P(BC 5>QR4L-pIOӠ]R-EոhGD1m 7onfk|;GPU6 ؼZYY_wOג6!b#Ph1lF4R4Y4ku&}I?.uGZ$kgwͯqB?:S.OipCV9{|jmo̦je2uC=Ua3 ubkroXVVz85 %uX1AXT b]hH5m]*Ye Ɓ!1YaYB7."tH iuB˨IfЮE2wd 3%Xׯ,B20Ϡ,C8kǥv;n?X)Ă'd5FR&}T`N2+:*]_6&ƈS֐Ef\rܜf2ޡIE0y~˝`HRڌ+lh@tbFGHB:K螭]<*4I,hl5:̗ТptLkzb;R֦Fd3*?=s*Hk+JF'f*eb} CڀP=j -86eM1deWpzRi$[^ϊ\džnGx_ݐ~;߹:(Pvök}:G4v=t'?+LWC;CR\3X̊g{ܴGqun͆_fukgfyƁoQ>{P㮞po6rhnthm}^_> opXx;q88}4>#; y;%eT#e[֒Li7 s2*ԏI9"D)BMJX M 7LCΛɬfs{Hu!bAxB7Y Ӛ;S*Ack!oQ irKZLa)|T)uFU>R!+&]қZjմkIa6G4lWss w' A( 5Y4-Y\Ɓ&W ցXM5>3M`c@+skgj0 XP7%PCikZ耘lPMr6}uU9ި#cְr}*7fjlIu*kD` Z'CǤ^s}#hhkyM &A2a-"bJ8u rHzB2_wA&CuSFRNH&ԁ3ʞjH`a0M4\ 5WWx>]cLk3CD, )4fh]Kf4M2Vc7X*YDp-ěފ$Y4MϢ,&eb54RnYzfHg`qeRBz͗^CuUpJjH [̥n:n|#XJt%̯,3<3Zc)O[x}Wp2qSro5S7vywum ro(iiׯw{V\{|CF'wʱ{?r"Ygv;f(Vn=?L, A:JhTf1A*ÄӡɜRdTSwOVk @ 9Mj A/&&hMqRApKb Z*>@xRNHMVE*0Tz #"W`*u[ʘB l7YGԔ:xoy0h)<i2 E"E?`mB )Uu٬Mf5Z4Vrj@HBI`%Xe4dZӡEE4318WЛx0]-X曽:w̛ͯ1!܀np]A]r%}3~řU=k~Ug}r\{98g:wl'8ndcdc[/s[ϵ5]6 W䊵vx/]Oe;zp+ cn7IQQ ~pNuoml{ܶmXy w=W B 򓏘g{~w좓X#%̈́7/֫1Q7w{ ?} X=I'$qY( 4Ǥj_@H,y=FG`C0#)-j[Ԓ2Xҵ(KnjhP#XK`O#hG1!ySBK\GC-LMrJeT3h$#Mv^{톛@]ԱSyח=b)~ש瞲s͇!PAӞ/S}/C-_rDg3ͭnzoq;׿pUjXjKyhn}y1x֧=s^q6䫟v!At+ꓶ9M\2> {zxr>C>b7]^p.9v߷-fӞ9<ೇM.%0m?1|y?ی~ԝMAm={NÝn*jyA|O{vj)<'rN5{~E;{&D 66 P݌&=hKRtlNGM}&!;YL[슎 Vdؠ 4j&(طH ɗ:fyjj4@!:شJ V( Cs:\46Yj-ݰ#ep` zBVGuHh)TXk 7j`IXOC ը0j4Y.;&}toi#XTiQǥvQ;]9.h$ ҠĐ\tRCU%G7XA,{B8 XR3jƺ%uJkQ'Ea(MJc kW&i6EN&050 1ʘR ,nK0$  jH̋M457VWx\!iR@22ZZv))>- F0p Yu3U`BvKkG`b fð3ƌ ֡44Q00WX$@d>h$p dݖWdhNmtUtgCLhSC`bOGɰjUUBVPEbeF6yjK8}pmuA h) 2'\$b$7%R,q>&С9Mu8w:3BM6KsvvV&󅿿飿ͻsXkC֞\xX;}%לp R< G: M57CC;O5kFƎ)ZKgWW˯Zg;,XΗp#;^b[l;>pHv__ܰzם>מ>rklϝ޹_\SXq]v.?k{.<vUOCzܑ{8mMugOeg`Sox˷ֺ;9죿{oo[nC}xG{'ˉmz~C?se[Z&ǝ? 6n> {n*sӛ%k;ozIJ-Fߜ_ݓ?s[/;?{?bMpwQyo860Ӥ4+!5XH?&T?ڂ\ 4LXbA3"&R@YM&3BXA4Tdn~XPB9XK ̓u]4ʍj,;RDT (4& Ȕ:V-K_|C h>wcR&4 -̩1pc58IT&h̷@&Aj84 - Rxhԃ#u `R5$\E=oQi:RI7Xp4p6P _㳁%T`7g"GjP `&] C./Z471ᄔ&ƸU3Ƭd>7rjuh-8"Cg7eNG=ZE/*0kɜfk|+gHʴg e - hDm8:4$q% lK|GZh#jդ(A$5ſq$f"a@U<ܶ lV6$$$ J!"PP4R|JA)rEB-SHYFJҠ  oorfuyx>ܜ{!\ =g\{9{9o I]M\ d'L@"K fb sX):ϙf}C;@H`\:ENnTq?W"Tci_{곞g}%O0c|3wa30/'oo_ҿާMOzZ} 6|s}, ¤¤^R6׾_֗7}ׯ]yCCWO̵o56N~{˯d7|ꮋ '?}]q+\/.||q?^w~@7=ڵ˻xOW7V+wmm};o9~W/g]ꯦSwyOk#7=zz/}_7_;t>8m衆WW3<$&`8^~57I{:oPz9=vpU^d=Y7m'~.у? ;|}~'~}xٿW]0w^7O ΋__|ˀ:_9c=cw<ՏXoxޏp==૓^mv ^_vi-4o^~O۟zxK}?zӟTp3<7Tw}ԆJҚP#HMdVZ:JS\W^FV7j9ǃGn3QHmV^]γ^U4-Z+]l0%RWWToH(I#BX 0 286 aB3qWe uґ^WTϲ%Qf:Y0(±tgÞi9r[/O'س~`S"b%ƫaܾ/BÕ:yҾ #Jt^̷BUi\Fo{El#[{25U̽x)l^Fܳθ8ݶ! Ao]B ұ穉@s :N+.,~|`XL^ PQ+zka2l ~5ZqPh}XGpS]qP}-'LE\**q f:TTC(}!eWXz@nTHДՔye5HeGcC'Mv ;΅~α0j@gNχ:qfo[4M3G 0K/|R] e-F0^ <$EЫH{>9s8M RS9G;|G3r۔Yѻfv--7w|N?|sͧM:/OsrU}Fm~AS*شfx=}~wqOljy9Jw||˿ys߅/'?o7tbso?lI!q?_z|xo=+\'TAZ)./^ɳx1: &uϢ>υ5^kn+^)J1ޗO;%nDSe&:)6-Ӡa5sF r0UT %0 ҮK"05F(>r_-9B&BCם2941e2>Æ0Gb(`q-^(uZn^"Pq¥0Xb9" .2Y*Rt!"(KV ms>$׿υOy kj\Ty5vysn|}HR~ԋ۟=5\ݎjmnFo9i{7G?>h~ __柽 4Uչ-?)~7u^ut*>:Wחw'Oq-2rX{ 7mp2O6o1'_|얿½>?:>j?M=p}̏' O {! \vJڝf_GW>|r<[]|擾g_ukqu5,?W ;𨸹&{Y!Z*aA؛co *ĥMW63IDAT0M,D6,ֱb>S `ag֊⽤ @ veцAWXN7W|ZZ.Q Q&,Ye|v;ܞl (ZYT1=y&5Q ]@wĆ)RQG0hg]v5Oɾ;j]SKPiFX&P$J'ص<[y3*yhP o;SmJLdrqhHvͳ84cvJG38:Y^Ab|`N>B8JqH$,\)peدԷGN~w[skgIK?io}ۿ;~:˖nKYM X+f +e搔N"%fЉ&%"Hq@pY7$K=2,ѱ[-75/ƏK/7k쮻x+>t;U5NZԩ=@1qwhd/?򛮼ё_~ΞٝO G?Q]}˟crKvww^xzGz@/Ͼ3Oc })ݣ"=xܻ/uth_g zۯKG?<9'5O7'Y{ J|yi)޷\[n'U?n}W^yS~nsw7?s/R?^=}{ӛsWާZp?_znŸ9ׄӷ>_?yܟq/揱;}ߝ*7o=xOօg=iI}7y7}dFXwqG'|~r3|斪 -si29Ιjěץ!4xmeiBiұj |_.5s 0 Pqe^dRl*z„iba`сN-'7^EʼnSsasvl[*WF҈NT4ѕVQWqy0_\v0a5LSwlܱafx[eҖ , zX8p)n8bhjzΡF"$m'܆\(Ù{(Vb@NWs\+ FajÔbRΫ<)8'^yS4Pz"yTX+9>:: ^UTfuRϜq2􆹈 ӃYtX(_)F1@ZҞ̧g+f0|q n[or$!P1XW1V Rk^2#BP8A"//1@C_V5o߻xw;kޞ^vu>rko~y}͗~w_Y%yzO'~q ̾?wݿp@ ;k1?f;?j灷\}~t}}g=oGWv_z/?_Kw?Ykz/ڳgϿs3t73~#?=ӟzpt6y=5[R}'7}/Oƒg=߰&i>&W󗎯(y޷|^{?b|rO[?nByZ X~˿o¥9t^/ğ+OY>cGw,‹jc}}ᅫwW>_V?m?u}?Oڻh|77W|'?s3ĜCKoX&gjh 2Sw-26F8Wq,)N\* CCoh&p:jb\)@ o|r_ee$fSz8bXMmpp 'Y?eOc/MMmx'kkI㞥@lF bẍ́iizG'X+NӺ-,r^^0p9 E G:kݎ$n&,AY#tk=-u0ȈQ"d1kRIpe tؠf66t - 9*x)#' I mG>9-ac5:UkfC =0ewܖ'>(f7_~'/>W߉^>a٠?? U$i،ߡa}w~}я؏=y OxMCxY]OGÿa[C J8#LrR0X_1%.Jl- 0͙Gq8TA8ŽrOSG^ d}/uۦ(*ȠNWkշŞa9paj\HjM4/qЄfh@#yK~`|qum@+L/{@x-(KORқ +f\&NJ4 97 Kol9N&v,X+ 5s9VVQcM/ߒsK@'n̰rLEΰWY`ѵ XT6q͌rJ H\pg!+|agcK#XZyr\HzMh<CyBb±SάPm( 'pGjaL`@8vyS m+s9p=O_$ǂkwOkzM(M a6hjԆŵb\coZ.2l]ʂOxw6R?DW~k߉H!GGE/zgp3 W⏎}?zXvn?5oyᷜqw>'2^/x_>N\%_%7>}3 g8g_/~ӟ}~ow}wo?}_y7<>{~{? 8rf @GY,Et*},.q:òp cBp Y1 kKL(\`'J:*jLTeϘwkڱus *jR0rJ\ԎmsrسR}މK[0I12eG[>-Zn+hjڳ<7Lie;vb"r&'bC/#1Bڙ\x\+USFU-XR<Ȗ^eSkNqnÄ#3 =Ӝ:KC߷qța'G>@k݌c d g,p E#%>4fn8kaǹ}0dW` wW7.|G o{rx^jPpQ܆RxpΆZaj4̑TP `+Ճ$kf6N{O8(pE[h& 8 x ͖I\*DtpNO6[ J P7wXF:9Ev[r! &66L4g6r ei{2:JNKX*7ĵm2:8HS!E#lbO,A8Сī8+١^}B`\AK$ S{}ue %T`K##\γ 6 ;b.2` }CMFlַ㻪rk`om,NU8ziP(#ԎyN[9)rlN(#6s퇮a[斦2Gu%LbOPnUF؋@Jo/ͮQ\ys=:>CY 6Pik9sMOxJUqF"eC] jw8HGI3rn=!DSküocKE-7^3pԚyWHbYWXɮzQek5eYtok#牪%7 ߌ=͗zd =:ōK~Ꮚx׿>n| g8p_S_  /l[[?o;#paN5s1TNxu-5!׊ ;ōb/+6r8ǖSf&6mu5Oײ*]jl(MԧWKQanĆ^ZΓlDȲ,+u5|2Q,wMĢ Y\!EA((b!쥅cg]\ZyzNDEUnEeKrͱ#ދPKpJL憺}yo.ZGpۥz W{ŒPR3?gj;( b[xSrVj Fu MjfVwl(Q|KH߱(3.Y؛Q@ek(5S+}l]!Oq¡aM~`9G݇r{9W嶼ZՑs[lwUeXѠN] aDKNe2%ӵWHY80X\HE2E+ [2Fe%8cA;64mfpXyX{u' d-܆= yt`c\]X8L0&ϵµX*xɳe¾m/}!;|)7yS<3 g8_ě//=Sgv;_/_8*]F*x b*@ "^,T{Me.6v-q8͔>537 U5ZtЩ*Hyp, 9tEhʱUP+j\{Nd*KNfZ(y1-vpjk<+yRZ5JVgTC2%1m3d R*!-W=XS >j fCURFU&6J\;Q!@;Y_{č@ y7* ="4ǽ{JX*.U-^xSeW' ‰B3֪W@pK[?H`]uxܱ6:*-áa5+.΅.` v"USi;JV!R)ht1o%ف `M7rNpaָ֪٘,O9>۷ԑWLy-@j֒UQVXN7V4 8:ZzCw8X{m@صT% u-C*zH)#BC/ŕ+Z)֖'YBdE@K(5Z^0O:y|lekaUP1Ԍܷ|!sM{˹`sK[+`+H9<p3|(uiw>-X=xY.Q/_~n=ܳcC@( ٱdRyB&@(]v/ƫ . RQZX&)z5·c;:Y<ʮy]=ʛژQ^t 7#BѺLJʫ j&&I ǚ2(1(5yR>p3 i񻏁! uw^g]\G}_\x񱞺w} kٰo]]yRK6}bЎK>c<8(^ͳc YQυql=F^ޟwyMK).T{\ʀ(E`ܷ>{U |-Ub% v8arЉE?['6V7^x\+ 8ʓ>qǕ(VW*^rvb JZ8P4 ni=jRwo aq;X7'JUC!\+>W,׼ o.yaJN 6M@MYPڊ^GϙZ2fqhupj*RrdīQ1M?'K60gX&L s&+)5P/uR "4sYڱTU40cjA)w@_+vlFz (\Ы[pخuUP$9|Ά}8aڷ~nC֍#GT|PMa^y,JZM,ExEpyP#pfeJa0O,O,G( JyrCeGЅM8=,a^0&I79v*7wt}80j;g맲G}&_|G0s3rx3 gPħ|ԧo^ux4-'}*tr}?+?y2Cګ#[RF" a9afí EQ<tYܱajb]sJBxV5r)J]3'Q!Gʋ&&jjrq!@B+ōV?,!1tѠ9e1 K0N/+D 6pHwpҞLmq() 2%YЌ9Nmz{uXҀe0JY38RV܈aj4EXvbii跆Ź:arK7^%YIbLīlPHH"R`jzYvP;ť+t#8'8 AqP `\ٶJƹ S+h2eSs̑n@\ ̥!@kNʫNW\;r1X]*B%;YCs^pMR;- /MeTBiFAe-2AaB=g2g@E*QajC~0N;kJKLmbWN,M,pƭaP v, HTPZ,O[JB`T(7`KN,llˠo8#g8pE2k_17>xǿOßgo&O/_wy~{Jy(U\JLSz/>KmoߓvVRXW}׆ |۱4(>K ^/PAE,2 oC)Q3S'K 1dE$120zdʰ⥰)I* EhH`jН vT~PAYR{6i4nG0\%M$0ЧL rjKNa5izZ #}1KG=ZK-( ^UFlTu2W yZg};Xzs[ *@ѕ N׼u9эEBI9R _{!C8& {3q:rdt~ss5ŲADD( F{ s<>=Z_{U 0L-|jrJA%p)ngnKtPN\6U47Mv"}PMG2jgLVLKSӜ㜩 |n4SU@ezh#04dYC$V ^gЀVꥵsF|θg!˞P r-o;(;Q<lv)g8p3|{>{n .?sAmw~}WӸ>)[Wa/a]3_2709xMXćW(WQ=S J[T,VsӁqFO f0''au,,^HFՑOYK]"Ur KG$v̧,Y#5U*LK-sK`%@5WreY0`B8 t W+U5s*h҄ifEr`2ϙwg+xk܆/]B˼cU5|}^l8 KUܠ=.Ք8*#|4]Ld$,Mm,ŗ;cii|/3   d U Y23)b֪6^ :2>wMt+;qyz(RWA5A+/FH`i(,<Dž7#;6YĔ9B%#464`/UTE72:( yQ2~dPj45~HTPŜ ȅTe1AifXCT6LB/JUQnA B'x ƚL4e,jg'YXP sZm.vj@@޵.P'z}V,vQX(\a߁l#y#0qh7Ka@su@?Id?K=3 g8>TP_/gʛ~=}+/oyO˖??]W} {7`(ްNc1 ^Cl) .Xf6t4Exx ^RZX8Jk Lťj"@؉'^U3Z^q1mCG9!RRqPlIף,G)S$WUVUm^q_(qRYzY/gG>9jz$q`ٷzW ;>c"Lkࣂ x 3 ;T8ʠ*) X2O a% i:R@CMlL#oAa^b3kzE(jƘ #l<0ׇnyZz (>˰yfA.ƀV!L^#[Wj\4`-Ҩxq˭ˈ#a}KX^ ]OX,4_j6YAe#DU7~ʨpuL3;o 'aZ (mJ{x:p3ʪoo}7s.}//K/}__ko~KC_ӻ;zҷ~w>g'!?ӏ4Rus=GW^՞u6 0ExlkKJzQ%HdvL{!cRF T (k<9T,YHC;s'C@Oz0P:y#4ȥUjQaܟ'ܑSdIŹ;֕&,[b8cV;6Qb2MY&4g\WK{A+YJ'zMbXy L ܀4kDE`X!N,5Ǫ78wm-c#n{ǶjPI6JIzU`eyMz[0-5S4e*Se8sEn%܍(B/7P <2V!oT_FqjXU PM#or{ZuE/՝PQmT&9WzŒ4lx^Q@\G]\w?(eJJn Z\s@DB0eK,M'Bq@E bK*j劥*GUGl#y[z#D*@Z+x+2Z 7 o =++Ő/zαՏw6RT ?Cկ~ _x3Ю=L#}r/W/zы~w3 g8CeyS7|!||zͿmM{ܟlei^C_Eߚo#|~O.n%r3@ SE_ N1/X?@8n*N84n(.T7L%|ZXyH?o=NfKvXAe30B@coz[*PI,,2u18,2̃Bzr'W~Άt`X(n .]x-aq` o ^C#x5]F'h9MuFQ<:aUSkp0SLeSGpͫB\ŸeKzUi´*!L{֗9BUPjJ:7 Fe rLZ[>+p(@` '1ub(rMlEz0([?oD3SRYk>aWP!82 = ĊI5{0Ol(IXSxͨ`*ع:2׽7Ho%g׼5rl6za p3 gBLGVo)? dP;Ы*I![^8d 5*o^ATv(BUdpJfW%k\ 3*R }g =@T G{S'6posA YZ*R$y±b[ 9m@`.|K =*صaVw㍪ P1wkFq+h1ɖ^'W^8cnȅףB'n<jnCcin}D<,Z{5(^,FS$境I𹍽BRܱt)OțW$/ ص4g.$F鉷LS-ӭauk\LŚ6cekfTT1OP&D$!(KN-)cݠۈF# SY.c/&i3Bw>t +F`lvJ1}f s)2mV'L [*.=.=|PTѯvF" )}R:&z%mښEJͤF*9ڨ*q Yxzu6VI졥ABIV3-5ԌcIj5|m? 57/zU%6/ڪf.yTͩYa}yr3Mm4f޵ GZIlg8p3|bk?/_M/yj܍/:c斪{qA6mZV尊gA*X_*\VZv8^ ݅pƫM[eP/[xܨЮSf6VTQ~g%=E$-a;]W*Gٱ׽B5?zuGWay{,ZyeF̥|¼kcEo+x׽B̝\=c'fxj*Sz!t޺aca&SQυu˜`#F[ī9,L)s6ٸ]JlV^m{X)B0: J߄y:bF.Y@05)$Fղ|p֊ P+jS]܀"}=&YWPCn c+ XQ s½e&Q߀, zU#B0apl '6۸ˡ8kH (;"2%Vn ,P3Kzyg؄o^WC0ZJWސ] 냰imp+49+=lvi%3 g8Ͽt/w<g<͓nBؔ\J*1-S"a0%^1_=x79\+x,"\,;ٮS`(E[zZGYȊeO 6䲹@;r\3'қ4j(.<;JRnZoW (vYu;o㮥=SCwoڭR\r"WQ+N@∐T'ŖWȲ[rj٘CYGݲ3^}AFٞm$&XI]XE`(b#F#~fB%w6R$g g8p-h/~|u/?s‹_)?3xG)pgMenMƚ@/^ QlR\+gyZ ٬Lu:ˆNQOs~|w~/oBJlƠ]vsZ1 @*<$ZXqZaUKw`}F]n -k3 yʴgQ%FAa+R۱wB'9a&u%kYK Z˲X53Nv۷My-+6ۺ˨u!jƒA+{Y;6L,o:9]'u KIˮz#l9|=L*hJzW'BJ.:^a-2 0Ekyæ,$lOڹ0#ڒt*]l-7ZZ^zC4"2_%}0Kf/>If ^ZNqF8#g8pQSw? Kt7nn R]f6dZ$FnV,Peob}#TODԌQe[6"L+a66?OyM''dǘ!fKW׾8]#e@CpSDJHiM0\0O,6^2] uIVm0!L.l )ӹ?!=scþFw.ǒ laWr8zSvMEnP@FP3KKia!-mrE a]ȤA8JԐWȠmB0O]KF 8Fusp`0ҷq۵݁ĉAaμg =EuGTQpp!+) bT$MKmqc6yDz˴ۜOy2(}:k;6zCR|`[ ͩޘeVR:Y)kӸK^Y_:i ,NU֒'9jP4.XowKq`AJd#ldž9sKUԱ NMQry;>6#dqH UtWk'_Z*$Z` 0VD Jh/fa#;}4KE{MVKBVSe_;RT$Fv‰W' #TO<%h2|P p F/kpu/&X:Y^3O'Lu W^y3XlHZN`kV^3d 5m3E/z0WѱzuWGbF,0qrHekKU߳M͜aYp ׷!FFJW E6dVHad2jZMlvi%=>&xv(`zK_{__V>3 g8Es0Rs* I#=(OL84Hjjn--^N nknk?6+2alݪWD?Mp-^"o4FT" p[HC7@XӍ ]  B3vxͱl86y岕"0Gj[-szګjw8Z wڎh6"bkzY*n#d + 3N=-t`iR>"PJ ؀өA! `"%X[䋶r,Ɣ)JIbL{G>;'?>ߑB4w?y~-~/8p3 \P~qz_s=5|/tsv9@AX:FZXy,zvX KfCo>d8jV U*k9}MTJ%s0f&oU#xPX:Y<@VaJ`qft ;pj~^a-6ܵa??&ذg AbM-ͬ7*dq¼v^ņa޳| a+7Wo\ ӭqmڃ-57@>V0s!p 8 MUI2OL1.6rmO0lxB\Nm(-l+HbEmOTO`앍rبܲ6T7%,+֜;~ hF=WK!+yx*M-Y]y3lY'qvfBhBa)Zq =QNge x`d"=}Ч{UUa{D/S}ݗ"px]8q #8#>nx0E?o{|miײ s/B{Yovjz+4MRx*(ݺ\MHQ@b 3^b" PeS쐔ڬlXeJ"s)9źk)MY4h*D'̨6#;AzȫhXmIf7UXwy'pYNNM LU :zftϗu!qɚP&MJ&&r}ȼ J+מ/*N١6jµ EƘ|+o'YJ4S9рk5J |Ź޲P"z'!]tqPS fW` `9- ZٴNl:f]1gr|ߛ t}z[V􎵳YYs>15G0RXOm\p& } O-\ݩGq y{k aPKӂ¶JR6R(LQyH |es}o= ri )Gk t=!U<*x[OXڳ6dO&h<(L"=}Ч{9_N{ܢS[Տa;߼W~b-O5gz~rGqGKa`kKԓ+t/ "d]ٔ*=yQ\Dhʦ3Vz:a-%8s*i;n('djp+λ7a။gi+<vu'Q0*1$˂c2ӄ4mՄU#l\3=Vg6ة_վx3ͻ<pm?rtQR>kLʅҢ:dܲa@ұFX7/ExufcZs7 jB,іaLNF-XzthpB JEo5Q!J*W'hwD] .9/8g &xf>Աa 鶍]6~bl-rJz|A6JgiT!Lm^YdJ-9L6bHXa)LĂ~ƕM.^ Fvd8;+wKfueZzw69Ke"I66מ'jw睰gqŞ1txW|yTf\ $Բ[ӽol fu 7aKڰZhsÚ7zȳVz3FDiJRED Y v3R޲ԆM- HЍ7eVy[ʅNUaƆj۳쬴d] C᣻=zZIJfwOÍ~S}I*5(|;+O7_^yW>~;߹l+⻿KGqGRw|w|~~ɗ|ɫ:??Ֆx??ORWc~fMa؋ڭmdԕgM2 kK сe,+۸S~zC~pj򏿱{08$3{]"[_u緟p_ZBXqPs(Okeh5 aVC@O 4 -X~ڐ[ =|e+@MxڲnY'QC6Ȁ ?+:"wݶCQ v\ 6EʖoCC-N 5HEwlwpnz6ܤbD\yz2LoXl y6 }T* vJond8ЛD۔k?)pjr W,jIܚ8!&͆iERgA* !]HAQrfHB +Q|Oڳ.MaԼ\`U&^饺^ٸ<#]pێ:47o'O;aiBgņG뽀Q)Cy-K DPL<@ `FزZ0VD]:7 &qR:O%ZU 8*Xei*RWʦst݌XF)z'ѿMuxM |5O`||˿?Co[~ku$Gq,vozӛ^1"&r⇿ W,0(u˦Pzެ@v-kzݩ`aCXdM4ax~Cne[5EDiOwo<Tb q3'O?NlhVOIEcnΈl=^,V͂%ÃN{C;PC 8xyRmxjG: u:e@BjQVBYƾxװ.Y@K8q+2.|1)Iێ^`SW{h[Ћ$tCˍ-YֱGjە˨| ^(678g[MOzW;oOmv,Cy-j.{sjù+koLoY֛3;j' 55IpQKϔ,^L76@fjD*fW,]zC 3b{{}?9.X,{ZV6=aI> =9liY)ljx LZs'jR f^dF-9g*~E>E]z&_/ 1 [% {ލʻڋ-4;O*3lVY+{o$W6ge=맽JO ?ð [l)lH?N]XoWrGq{8IothK#ϾTO~_-L&#S[k PSF0&XG_qh_Y=iiSZd`I3c ;6>2goɯLӝEfP.~tn~0RfhE.&Zۍ7섞pe{YgSV; l=d}#Z`Ij7"Jk$Z( 2,'>#8#&{w/k}ͻ=Уa0Dڽ)>*5-۝ BMkN;e;ֆՠCq|:Y;m4`{D֛J,iw?t/G/~o\Í֢ة6 (N8/ly3) jFH[5j͠'6d,U;OÊSCkZ5JPEQ3` ̢Ix酺x_]K3~E )cmYh'z;,Ja g({ӱve͹a]xt `ey, wP`{pv!!FQxfsjÂs ojwYjT+F/ކ5*OʃrǺd9rbʉ:O*5bm+amXX}>=KTRjGq~n!uܧ`ZaoTa{5z =fcm< 4)ʃ+`tR8[֖~OM5h+?_(u\jPź, \V p68w2A[` ɬ ||Yf9nFSEP3,Ko6jud 8avkM1B25FXx+ 17x?fm%l 2,fX=FJ }"ލ]㣻=zתR_U6?79㕟oB񟕷~ODpx{xGqGѡ؝]}W,=Ÿi=@ڳtm$Puey}Fnd+7#)C쾷W Ⱥd& <𣻚=zתR%&oӽ~}1ۗ#8#>j,7<ߙnAG(OݿؼqDIf^KV~Rt;6@4cCxw޺CN/F;іGguPϲPw W13T5ԉ66C+L⌔( U ʅY`9 :45?V*O&.mz,˛~Ͳ%򝕖ш8jwehtLpxnҦL-46QMk:k!  dq Itb-Y&u=*Gaw3v;ֆf"I=ٓ8*/Ya:xEl:w1dX(h NfXOJ^*!Нd*%.gXDmeN =Cj'D5+n/[B1Va3˒> K 7i8CSDA6Y@N`dą$ #l6e,,A,ӵ#R@1A1.-SO5jΠ=,ˊUҼs'Ħ2#/{몸S ˠ慺\L AG TNS;Vq|dmXp9':8KÓ,/β K^vmNmZԱqf>=,&2M-mtgYs>1?3޶fi wlXnYmX{I^ބ7++]kJM̟ u~)#j,ߙ(6_xJY8GqG|0 %ouOO"L?*%Tސ/m܋5 n ;(.2R-2_N ܠVX7TNl|2mϬ.OW`{doԂeم+(6\%#z#d!+M9w,#l/1R1{'|f5` Q=8Ǜ&=Bq JĀԖrY+o]tr:)w{#[I7QTaPz/V]zuaͲ` ~jGMpQfX4U ?P(Nxn㉕%5S3sI*9FDJJ4U"vQ9{O,pڻ[kPkhtn\D˵y ojט.{3Sipq @֎uҰJ3l]a}~ܺORves/l:7ޘm:+,l#`0Cl :0e:#j&MbʮuFXF, ї-e!F޼AZM@W_}+B6+|SZ Z"mcR`U{/jQs6&bʅP晾 Y.]{gzpc΅k5 |m⻽Ry]g.6Vw/^]5A,*[eЗL$(A ְM,.Z4[u;oBxs./4J=un WgY6O)6(9E(RN,X=5(;ؠvQtn8)8|9d φya=8ᷲuy"J{4 u,7OUlޑ7pԙ k gMT4g^xm3bb^@b1dY0~L 0(z~ڕxbCG^aI1Aņ(]znY_{aEoYgIȠ(Gб*?:棻=z8>ǫ_.9||+?~zGq#g"T}@ii 4;_IR_4O?4Mꦙʣ}Pٟ|׽o~~owB~hK#}@E`=Kwq HC?a$)jB[W;oHyOl.W8)P %˝#tbm l97&YTE$L{~fa A%lt"z!J~Xj&H^ /T4A52 ׷Sp.6ސX:kK.[j8{;y%je%A|Ź[OMM'jfQ9 i۱d.HY͋ufQ»Qi+0⮯D NVd=Ko KS71[5WJ/瘖l`K}ХY& 3++.:lGqsgXnLM Wn]]_j>^_(E->_-ӯW#8#>s6to8Ͼ,/?;Eߙ`)9bޯQdM2!C`Y.1#He r`t(u&hͨnXDҳN-?rƚ-<%e7]0[[ř  T [>ïZ4ش`6jae~jee ~bi8vTdWeU~/<BpIyIܰJlIۈ88 =eP$fxIhPfY$Kx3SC?qas9+mԄLjR \QeMDxTЋ0C{u5ْo 5T %< HciJO?amQo3<86 x(F+%.l>׎K-0-w3ܶa_4?'Λo~񇼘<m.~S}>qGxh!f[?L:.H7B`zGaeY;6o?t㫏ƣ-U>̨pe EYֱ۰9 elP^r:1{ޛ%LJ <>>xvxl51*̀Sp;H\3udK jѳtkV6E(ңO@"UaAZ[6v+ :Y6",g4א("{F9kowti$pftHf(÷J"T3Т9pe 3`'lEdE]r6bXl,Jr$ -ubӒs|+o/,gsÂuRK`iF _>lteKЅ/jһKo#R膱wB#l|C޾.6m:)Ane.k5#RC<Xz!2ԲfȮu1l1xfS&yDE1~ۆ2ҾcYq>*Nn~AMDץ= I(G\ 낥J5Ϋ0 h5g ߌb] {q7nk,zl-mayau"`|{ks.&l5M=2٣zm1#8#~qat}^9p,}`~w񍦧_ ?|_}xgH<G?p1 uT"x*K9݋'-y8B`rRhK鯨sV e.J[5KZWOmYfY/zmmʊSC;6rʬ=k;z{@0"YfلKγXQv4|.qM(Yc0~cY]gH€%WVל'*Z9ia k{YYc~@gV}&рfexɔA/ԓ" Kҽڽ.O,=g+ae@ؽuL` ۽XO./kܮ oTs+J\ړgVސ_m߰f:Ę[B*V[4&j(u%iTF-~feS3vcKolD?Sx^K?fr?+!^?`w]~ n,x>|;7W|W|w~>|#8_//o//ySAmm7Ziy0W8[M<2x_Kڟ]?*wOխ߹_}awٗ}Y|~s?_s~}??ޗO,}k7_Ծ0 $_w'l^FK?*l 5)&S+{ٵ3Nf6doJ:z7Nͷmβ0qp]OkG4N]b)biN`'iV9OK /޴US> ,BO);ll A Om8ܦߩzbva(1C͉aT,'VzVEXs6mu z.Vy4*C=,]yD'%P-[Q\H7= S  Ғ545Z#28m`lFjÈ8AvBauQВSk,XH)C޳QiXbP!tŨUh+biyKӂxbCAa@cԱ91vRM+FUp[Fh 8y(|mw?[K5e@t.$(C`| 0׳.MotUU M˙^d{367 I0L%(nPPJTh dMnwvDOHlWřpm>Ȯ~FCaHp 3{pCb/~udVNl-ۼU޸ͲD'oŸg!`/%AwcŲb9)*avCVVB@ ֆQX;zi+=G8tWG9Ïm?;?x7f{~n{/w~?dGrxGq/FVؠ{KN(-~P_]Pw?|~ӷ Os/^ſ'[?W/>O~=AW~駤GxI}KC }+S7d=5qs[օX97nb,jnJeמ%6t ?UkI,M U WNJMVͥ/_{7)MJlm=e3YrsX+H`R7]]A ÌՠQL_+"TcKgYi|6>6wҖ^iMJŖJ7h=p&Q330@JC.HX+v1`J u1*lͅQ\\6jfkC:"=_փR=GXD`5t8*j*לZ#:ZT oq 8*Pa55ѸjԄTr#KX837:eiSQPOoCcm8J3Ej/||] `U|-gIS}xHiScKdrΛHvNܺ›znFKbBa!EQúb]zAzJm z.L-Ynd{o&5(F:[|ዽt{<-r0xK zmռPO{Q-=n8a%0v޸ }j^k%mmnl]w>}wu_?w ?G{ʯH8#E ~9pw4|1~Tt[f"Ew|XW{ <5@rjU$2#VgI$z;#RzP Zܴ=ޛU&ar/lH,7.ܼSJ[xzw2umÚix,{LE3aTyD`HQV R|˦ހLŃeZdRXO6j6kw޼\W "f댷5;+ 11\WD-9{ !kН}"msӂ^ĸqۦ3qe,Aii-lNk+;u/bzvkvJREdn] lxmO4L`GWzN9 nʄ]HYkoGLOTڳtZxdo_O3;gW??fGqH]mf|߸<~ЁR7Đ ׻('oϏ}_~~3G[_T=>p-Ezg󭟜ϮQyP2 Q/3(\pK2Tۅ0#fI(.{EȬK[\3+WmgK_;6Vblzgp=^(ˍcX;D;b%@ j-kGbn##}E_ۼiNW1 zň4w Fbsۜ+R潝,8-=nޑi:!핯[W _6GY¹al>9T4GXNÃ:T3+RIЊ<3|+o\!:-mmL) 詎^]ll/<ێ\0wa] NXM`A ׆TB)XޛۜkSi8cuji_3-"DÒف"a/pBکODphء7JewRi %jMTCez\UӶ߭}d3y_sQyTwJ7WmkY,ڱ.XN88DkbwJFp©wd3 ePq3{f>,=AQyQd`]Td(k~j1"\pC᣻=z/=#S^Wg??=o? ~~Ə'#8_WWkcZEh%WV7-u=D{7UG[- R c Bp]E z7*rG&Ab`7p^yP WS|W_'}{>c) Tg7>wNWcǑqGc)W-a"ŶՓvWMiW~}ҫrf ΊuNE(I!*UR34K(Qw0{oFM c0+J[5W*׎+duԆ.?WN>Cxnue֓7`Cj8$卷;i筋K+- gxz3)`jT)VYB٠6 JttfڦKx5A+R` uf[6>ސ/l^ ޡFGoei@JH1Б)x,YL;YX,M ь'V[뮭޲م *ز4+iƥo"d=5R'8a.Y,kb-b]%pͭꢡ#O`RlYc$Х7=gX̲uyqO[oGYy^J+MW޽\([5WOH16D$aR=<Ҙ铒ҤԲF:!H}y A)BkJH蝔ys Aj z&pe2Za.yĺ`Yl)ybKK{H'VA/os}7.^Ѷ?-'?>5/o}n_/c7~8#8#~Qc")7} @1Ұ)ZH.B<ɷA cY۸`]>-}w; :*0ʭ+6I[6XПHCGM,[v3xbcCx{wlF^]^{WK_{ꎍ'Vb"V>!oQP{^g6JX7WD2Tĭ3=0)Vtuvo:v^ah:xMLVꨖ"$l} uS.ty#P`»I)2W{*BGUq9&&6G7{YIY6-8x:v,lj1RF]y\8;AZ$thMO}˺;XgЀռW6@@Vd0߲4G^IiV:O)ea@ȏFxࡃ%lT^35w}bY&.e߱xOhxb0V{m265{e:65fŻD 2ؾ*Py=t7Ce蒥au :4(Z$FHa,L=ˊuީ]p>a W.L T%VZ/}/_o/+oOWـo?o|~7_wo6~ =?3ZhtXx&#DKYQʻ/+|ۆ~y&&5a=1;K аU AH s>,~yŲS2u(JS#Ų:p{IPp\zS*%:l^Y%o'F(lNK!Xy: OAʓs0^Pӆa(c9rfm՞ @Dzc=aHD;3s:M+ `!v˒Ygq+7 @rn#4xM>)ے,/jvRn;y,x&W62;E LUl+'VnE;EmYC0+Ol^}rtBDMC?'l'YZIPZY7 ʴU_󂾶%?c1~>(;Ԩ3'k:N^.yv tb-jy4_NJcif tjc'4"y%缶ie%$HDKY w/4H.TQlP,+73JfunpD,<ϲ OGlЂea5zJU@ ђϰІ1?.J5nnymmw $ufù%`e5MWW\>xGq}~9/ܞ~~s5Gxxg҅ )z$aw5ZZ12%}eӭ{޿\ڕfYi-s*Jj߄QQ#ARTe7-kOS)`meK7I*j@|SAuԉM/~UO`Zܱ88vDxcVS;zPP,F)8,A )WAW_Кsѯ,LkZֆEnJϺ`5vbϢZrvpN$emA)#}&%(m=Ya]t7-|kXn[5bx_MDJ[p/cz9ãre9S3́)s3E76+pvR pS}`A<[f0= 6.9GnP%gWkǥc&fvnVP͍ppe5S[3+g=5 :J3L1Lq  nKχxy] nc6,:pvt9\ܶ+Sֆ5fC} ҦM%H ̨|=[${W)#8_,;~KN{70XF5RUa/ߩLJF ƼDZX6Zs<}9#m;(]ˆxJQU"Ա$:, Lj~it;Cxg%\[&yE6-d>+Ͳeb$dhMbK$ zgpI_p,d3e*( XWȄ쨎 !S;z*mOlx7â" ֥58ҬT kg6ذ`1jnݥt}"9k ~o4&xzbԱdPħ6,9OJ {Sm8)66ܶymĒ^Ay[љ^`}7lm>IW,xiYH-՛zk,.HTz֕ VM$2k{S بW;o8!YW,]"0&$V*rtlQsgYYaAJC`/Y6( `3qD' |,rMc027%}mS |V7B$ : 'k=6X7`{i%Qj6Gm:4.xh8V'IiWvپ{6c ]9i^#8#>K21}803I8-B@ n?,鬂#l+ yP/@=.m~"N8G jO?a9B ƽMdDOcmܩx Ym^ZY֜HLWXO9ʳXNЄ}Zr^sY;+Kd:/jsxg0"v,5,8(HG f !ҢZe:f;NMC_ZjrjcC0޳ƞ%,=Yv8xK&薕'jwCODMbol'ސu7KKhVކYwM\pikogXLTl/oPxխ(ܣ 4wԒzp2LAw*8q ŲzCT{9&ƻ*΢AO&6u`"FY7d;!Qq2(^p‰NMgpTӡwlt}uqpwb" 1 -2=3P쮥'Jik g@מ_uuH@\.–zSN9֙R$—As4X% 87)Ϸm{R8~?xcG?mo;t ?|ַ|pGq:a8!{[nģ-U>W~rnڦ(Px&Q,E+z4KJ=}͹7Touޛ=o" uJYWK$bi͹enYIP;.Y$;VaA7`f}R(`mtf8b0=)K@8 ;7U\Takwޛ+o6j lrfeiSye51i9*G17af;PV[5j;{HI=YY&6zsۯllY\LPzv7ެ LR7Z x{.*X{o=De Ԋx(~^AͤDJ0|rVSh(Wݫ˝ h`AS97;5{]6*.+DoPI57v479Misf&IV3txvd;݀ c$W6ڴ<+]xBG1Ër Ҩ|(BOo 4vWT \ f;oR|tms۟۾gIRR5E6 k #[w/7N3hH;AVek {J+VzL+=#8』=?'O| 8??u֧}ڧ_I+=sm䕣 ,`X/Ytu(pBM?Q= jXϭP,)ʵ,=}/NŅ̈́6-8/lР4)TʉQ kK>_<\ Ҿ`` lxC4ʖ;ؾt z -"cmY%Ƴ2#ˮj`es{6$I|ŒQ\уEFфd= yUsۇ5ʧȍ)b:[V[ڵ{ԼQsn |p{{9^ O7[L'ݭK5$J7l)*B)YFwdM EGddk+ t9 춍lF X"alj %>U[+~٠䰞TT̲{?QkVxa... W0OlOypyƗyW~_x?x;w]o{J)z׻ַR~o}<[w<:^^{#9<#儏 9]lk(KP;cK#D@WpTn ʹMNzz(RAU6(,&Rri5:oPG[ -7om°|޷shF0.A lCHr)X` JuT%ed!H(qll&%4T l'8F̜}n'ޚ9gf{t@zO߬g=rTƦ VOc!3IͥkKq]Co#RT^ 6>ocd/|u$]ӗ$!vU1tw6-Az..ll[o[ԎuA7Goz+++^vTŊptT!um&g*1X: +8jC_Wft,xjvjlBϰ7q4#xs޻'R{o'EupRYVOS5kK:klL^Y`_X_,KTڲ ]1 xu dRTfhvz+1m<~??33ڔVzgqƫ-U[o`B[}\m4d2* 'PF?6(-XVtPIp3}R*J;厼d^E项4hxV6k`Ei2dTo7{3 c`V*,j3ܳ{3{ =kmKЂ<*g4\Xyduce9Í.`|I9'3NAl |T= 1;PEd#[o_xw,f s=<Ȃ=QcXR=ڦf@EiFbDO+%RW6h jnw^n;rT6%R~cS˺lнOxS&0# Jw vof1=~PzPsAF`Ų1. dgiOl~+Cf2z;x"Fk 4jL&R3ؒEr()El"![x5[]{[{`(O`l xo't >b"w4+Uk7eZ ivR:x>6tvz>97W99?ܫ٫`9|J)W3s/9383@|]γg>_~ۥlɃk'47tCm da{*H1Clu,B{3kMܩ zzOE(p' 0(ՠf|ݠf^\ŝҽ7UXrAiP鑍av{{Q Ӓ-2 20Dnfy@0[F7KgzXٸ>u&jvj2={i'\ٴܲ J ֟YS+T6<*Ux>[j fhTTVZ7'ؽ{oCmf3&һWJjl\q>*O ˬлMV.mJTH =auaq#C)=w A/8w,`Pck!rW>2 -9,SU^5S;q--,~Jqi%xbGFVAŘcȶjUp8.mlX;ҦKN66β{bUrݎQ%`W6\ڼw:7,H-˒e͹jTK0N+{oR\QBKn"{;9(gqg G^v̼kVu]={ЕY aDs 6T"NVCpy냷bCJ>ǐڨLj~,{BGl(Dm*I{:E=kƖeec̣_XIޛ; \Xz#6l C)!.B0A4U7Go ҆6Ƅ](f@mP{^{/LJ;{vB*9xWj1vP>[0ENEAY^ʥ%4z5O7Ѥz];qI:vo&3 1k((s1#.Xڱn3(&֎1삑 m'ٍ7eh0ɶyIuJ',;*I0`p>,8-l^Dq劼0 "3a;5ǰ2:i '4g hFxe >ɖ, nQ:NqK-M6XVK+ LoXC+N #;2ZNZP,Q+ʃrǚ`<( Pw޼(GDMj 7;[Fwkn/|$jý=ęqgq|LSśo1K6#b4 - aE4<)'ќI?DZ2C.tJ+hpRv.eEp`m%0 e2O8K  8(mlT ұcP!I)QӡFle =Dmռ(HP̖KxiI钩KR@Jh%/9mzWYuZBox4GYka wjlE_qNrxaX=`,%2UU9ë<Ո&<5'P76lP3<+4[ϳ-#SK9@\qPs[Ex+3G}Jzqgqg|dzgXs^M*F+tT$b.N%R@6  Cc[o"VZn}wS ^||vkNx~VFO)Z_OiX> W`GuUDz>K!Ƽ'*jT.8A1\q@CPNN˖ZF[il%Ҧ>.t,k7RSY,%Ձ+ ܸ 5 䅕7|iA/,XBj^V65%Sg6Ə~R{w= b*"ȪEko ̠5EP 5G1PͨuJʖEr~"ҹUGʀ*[zeI ]OY5tiee^dTU쨖^an;aac% EI8"“>aoXcҥ'ghcmM(P n;n!wWw޻IdcH 41S66:E@Q⼶d- o@I yP/,Jh,vJoo|P-|rgrxgq3|w}||"^mzz뭣ֱO3lF+Qƻr 2*{.o=M [s^Yaog{VX܂wԅG;o' e 2zI:\|Pyz;5↵Wƛ[iR.l|G 9nL{4Tpf gzC72K[[pQ,#^ʆ)3xxQGX`\ܫ٫ !<383;}|7u_u?c?>㧈W[^7|S@3RByj`K3&e-3ʂ^YveXS_Ee\ FB¦6П WNGdBHlySSO9܌+k4&sM,jͨl|#N_OXJpW:(J3l{4 #u9Ģ)b.*lJTLq8PDB+FJO8zrp{sAXS!5}W ۵LkFUYb vY?eNVgqRҵCMG߰YIyf>V٤—V'x^Pϒ]^ZP76E9ڦ N=Kݕ OY:+[ojb'3Oxj@@Vyu1pB?a;o'YhyEl}?Y\<(B·M.qze{uY][ள$*q ,+&#?_}iAyƸFp#_ؼ`5-X,нsm- 9RjJG%[|Y(^ER85*HQJ<=FmI=>dCt5ElxnԌt|(pf>*grxgq߉xW__r\nMM___MӀ7T/`IĂ]% +Gh Vjv+rӀXބrLY'٤YY;j H4Ԍ T ʚG)rU[akpeSK&G4 UcŎ޳޻" jXUE#q*=v"uiӥ+[VJ huc¦d&ZUVd﷥|9BznP lEcPawއީM+^tCܢNJ7u.DghyQGoxݶjfSh}1}a;QY@ 0U,%v+f޼+]XxT Am n@[oo&$OԆX:%2<AEd7#?M {*'сDVSwn$Cp J4{}^ vĖԳd*AJJĖ`ZgY.>MF`Vkh66nlhYfۺQE]Բ6,z{.PB5j(!uAk<%a.a[%"<0 ËQQM<=/ =UBO|w~׿z8>8sՖW୷YFP*bI{{5.nlZ7:'v&͋M ~,{^| 6Ŵ*YzD0.3=|t$A>>.lZԳ$x8/m0RǚG#2ĕpͨ#R%SGW6]ڼ|諬4z-˂=zWeK+2žbypZ UFRmo+1Z7_T%` 3(yWCh%Iܫޓt2^Ml6x{WY4BJ'26mTBfgm%23Y&hiS^P騺GzP,_΢{s6+wJUH;Vc],W6>N ޮU.YvNʣ{oߩOUg*?WH=K/mXc2Q==[ǵw7uܗڦ͉:oGq\ Uƛ[oSW7qFO2Nߖd]їVIU!Ho& eZټd˗ýZI϶ӏ}fvgq?__ѣ<Ǟ?>L~͗~y?K_¯x?tgՖW7ߌP٠D*vFBT?I'6(^ͨ3=.! NjћY,젉HAyPeK֎ޑ;σ$ OqaJL& %[2Lϲ8 #,CK NCskzK:5S1Ig=Q@Pj )HE|_=iݕ[n=A^pQ֓+=X6洼^ms!3Jl IG2ީ=YD0>I:t3lIʦҮ|҆M-!K SWYVV6u Wsp"&%YfPt|bY Sw66 a3, ==Ao4.Y xQ޽]ִv]󅍏W61y vUXfX:t`Ͱ%'٤<) KS mK,f0 ]=T8蘱æH\r$Fbe>VF㙎AV> ]d(Tņ==L-}A_Z ++V8)JXgى2zP8;{u9(e769Y?瞧ωj>h%=Jߏ~C_koݟGzgqK}}O~GkUU/'?O{տ[[6bAD 2#6,{QYܘ;lcر'cPU{$У4,XccuaR2- ] GwGn}R`O=d_NUQVNv9"J{5 *$Ҧؐ{K :zTd p6Z3`]:zk.M ʓtXIƻ({Q\+⑕㕝.ۍMв-rko Fꑍ!fFULZRR?Ic oQ͂S :gZaMĭAksKV,sؚ” X^.Y:֖c][魶6ٖFiDpfCOuG5:{L 92Mui%ΒA͠&ؠ4Ino<&azJ[-ڲ^qz#3cZ]lXER*T4Zs9kR+nc@KN{D,+umJP"I|ƖƤ@a]%:Ue,Vj ĊD)矓oHCzTWv9*pnYSs Yg++H'inYWWß|P-<+Qe_?=383&sO_?/?>=ow߀ 4__G;;?^mzz:bo *qeeiU{3n+vi  J[ "S'kƍ ˍI<*OJƞ>w}ҦMU`T2?JwM vT3*S+Q^3at:Rl 8g9OHRƞ^w`A')g ?'kE7ȀqO'%xKE͠$pi$Hױ g!{B[AimC_la( R&L@GqnQB: OВٝwj>Qk˽ZBW6ol)+)5G5/ٻ[onŽ+ z:^HgYNTؤ4(68 ت;{sG*`k1jT8J,Tjɖ8.l0+cdcƵe\-[o,zc-8OGOzfiItTWYGy̝IzT;jmzbj٣Q08ozH.ljXo;sՖW7zYpR:GvHԳR7o ,=qS+U!@2ئ c"0J{OjJ/T]q`=SFQ3\dN-o PO:Zq^<ʮk6h2(m&q,X6f㊨b˲de;ojb6"+$<:b،^mSTt{snXi;zKL' vM hYbxo}aT*) 5*X&ٽeY"`Q@z#f9K ݨw2( JzxO߹_{ [uFTf:-9/[X%t9j5P;Qi|}GlNYvTє4*z Kc-lq[ϱ `}5f>VҳoCgqgۿ_Qq?Ϳ߸/o_~w=oj52wS)Z5a)G_⠦.V;ФGvg%l^t]sueTS{Px?$^wŝr ӷ |mB 媘Tx,LOln-kyF@5ӗH4 xi7l/lݝڽ!6-}ƛjA d{ߠvɠU½;Q!=/dO3838o^mzz JQ1J,Uz.qJa5=kZaY '<2wب4!M2ZGLFplr Vpe>s2>$AvY^_jr|85۽*䆵Uأt|GH`yƿʳQA2+L@ 1IT@,ꭷlPz{Tʊ$.XEcc?2Z—Cp=ƞ.?]6ލJF876:xS(cQ`^mz3`A GEyϲx jn0:ǩ\X]ԣ s$2kCoO:n(&jAsw+hX76mdJC*%7쨼v7O*Be#Vf++ zXC<*;(6ػEhfP.ôf֜.89O:z&&q흷AںG^1KcIuޭ&=F_b"etvPN]ܫ i~: g prܻ_zQC/UO OG?Zqgqn~lm71|ïշ1{T9}7w|wë-U[ot]M1WsPsa:d ќԓT>ڬ! aT4Ȫ`D;+ eŲSrqIic{iS1Ұ<)Ԯb57dG$x t0H66 Mp)n[mTᙞ葂Y80(,ӡg Wd:댤B2ҋ,>Mi,S-<cnP:'ї,AؘD;n{壚ئO @OLE]]EYN^Q J{z~OL2K>رO*۝޻j^9vV3ҽ۽(!6$A N;ovJ҂eR 4PI;(x{]LeQ XYg 6֓[o8<Ռ]`TܱFED? rqMYg]ro%KK!7ޢkGEiLT1ȇv l [ڲFoc#YWgHuTi7k47ΝІJX:70Zn$ +K6p_M>ܫ٫+`r}V$l/|?r<~/}'/~xz;38㌿o5/?O?o}?__'ݿwq$^mz|ͨ]&D/w[6^ܳS󒳃;ӌt֭s?QjP{ogX+nO`XϹ&q{TAfٝPE6*;uN1ƛRHFNՏƻwB(3?icŨ-}.+KYp^eW66%`AAn YLTϺbp͌syt(y1zM3k4ĶQe ZY!cؼ"[rYT6p5H"e] ynY6Kz l~KΉN uTn,lޒu'eY۴yWsAiWRKгdhɹgYlSҏ8l @ʦ4m"n]S{e#6$aİ#kzݠ/8m2jmSTβA.mJCA&X6+o66D)kKN.mZ,!RFŃ,VB%0*iPJ{AȦ'0Q`CO{oF!O=c}5K66 '0)vGgXHcdaֵ ֞BG}J>[#+a}{K,+-Xxi<383x?G}eJvX}QQm?Z2 WFue5 r4*豘%\pZ.LY.G{ ޳ 7hO(6(*XcfQŘAzV6J`-m^X-bS?Pej_& <<Xt26t߭}]Kkزβ. cǠyÓ˴cV2|hyg 13vb #zD-ɕ<Bv]{wћu9,+4(dR$#A),O60^h]I(%(º6u8)#̨IvԅAH^Z]g#.m4gqg_u_uom;;[_k3?η}۷"'/Z|{}z;wkbAMӗV{p?P{O[oo|бB4hP!n=(m9 $Ɉ"yw.>KGht A D.CúzRQs7V@|:ҤYVQʒ=AhM|:ᲆ|ӑq|!&* r1Q+ 4#H-=ث8(Jq{獍+%6 ]8xi\&:Z^Aihb#P`_{wt=D?ٳs^ΫZ>g0rص?_/cݏ'Oo<<38/m}s?@Rm_˾}7f*#;Ҭ|IDAT4,Xe=K0Zֽ7NrԼ2u^^}³ryف÷i?}ok_?_y_ӿgL83)˿_s?3~1ޫγS5F独l|Ҩ^Q͠5Kc|BQ :i)QţE+Ͱt:LJ3R41V0{zK}݋\@=K4@|67;5w{{A9]8޿[,1,<Êʦp.W|= X -MkD=QlOҸ;{}9Ãa.Xaƍ%#;^ؐYjYG</m)5#R h>>6oD1<1-:Tbt.9*cұbޭ$5* +t6+z\]GO{wk;+roqJLAw =r+AV%}iSg#JkT֠ X5  gԣ4|4}$34&% &zOmx }$OR!u_jI#zK<r9D{Γlt<3`Tީ9x3)EmEiG=|ڳlXxˣtdG1?xS`F-YšTN/Mk r`P>*p_tXb/ ӱ6J?Ϫ*?5+Ϳ?_͏Mec?Y:&hCHD ՌŶ66YZ0˅sPNF* ZKb5WWƏMK3 fG}4Mp Q1<=;AJDޢEZjź漶)*\QɅPm=˝wV(.i Ľw@8JAs$͡-Ya+|턓n .9:q~Vc)뚯k*IhKixJON]!ͰIV^mmE_,;.85AfqAMJGoFeɆ;oR0YfAy]ڼ*џ%,@JY W#7; `h6½7QPAj5dO^?KsOA̓W0gI zϒ:ix.MKJϲ)dJG.h iBêaQnWm]})- "|e@S0bTXF,WjYWg+X^ǚ/Gqgq{jK+onX/lXƍ,<jŝJT'hJ;5{CO%zEjgQQz%u09/&X",>fi1@8QyݍZa5kspFJT.lZtaÅK8 ʴ4{GilY=`'eC`qxͭ\h0L/muv^EHF )/m~-M6GGN98;2e|"BK BxeFۻRW,ީ} o7lfk{fvJօEjS ^ZQIn\2RtZ{O/+z ˥7{uu + ϝ<)m=P%RL)QK4]Q<(W025z`% PĭicIi+{6ԭEte)@fsLhN^]Z:^xacjY xe5/&,%ʦ%zn1rܻ4U`f=٫ͬKjj+-nTmF!V76=p8n4/p'O|N|WWA+VYPFoFد_7|-GG$ọ838B|uĂBԱt,+ p'G{/gpEfK_l8/XCQ:FMtHƍ~Kou,-kLケWiP&PGDQaW|WۺK76f@VG k*@L5tAb5@GO,= 2|^q:VŖDA /F`4oz;Q;e|l󅥞ƻ(wͰI 8PĢo&%kVVĂe-ל'=d$f?UGq4pF $֜;΄ZjeG zN]DktP󶀙Zq^ܪ E]Ʒ@{|2gqd(~im@ ༲qŹEBqQ}vF"XÄΛۺ(s̆_.8s&"7yͺ6tݢc]٘Zs^୷{ojd VSx3+=NÒea҆g!efY hQitx!&OvTƛ(ta497#;, ;n8^YMDSBݺz64Me+N-Vi 5,ag$gr~_ /̯}_|op Ww~Rggqgmz뭷8njwSIɠc]ȆR hK2<tX:,్N +֎^eljQ+yc@RpreFB=K;7uuv頴S:x+ ޠFQ >ɌjY8T\t8 DUO ꂔ j ];wg4G}l5AM=s{NɅ۝7 |* E0 5K3^]LY>JE):K Q@"SKzriXj>d&& &>z琢 |esGw|𦁞Rnֈ6\Xy+_.,[G鸶qTvћVVZFAQGGDu~wjnk^PV >#hgw><˜bP`^j-9o8nlteÅ6K<\&ŨAiD*`{SjQ^nDŽɅMV[2ZRڡFkPzn+U>6^t383ۊW[^h+4ONY̎6mXW" $⸰P J{$bymSFS;Mq-)-K> 3}cӚ'sG Č|닝;O5PKb4gr$`I:2N‚!Fps{׻;n;Ɇ.cu b7V/mPuAhźVہ˳[sH4Ն~IW6<ڦ K ֫4|JctdquA6^j;;5E6*Wbeq3}+UJUXx4–Y 6x:uT%.Xfٽ7@࠼U+OXD@ezvxWe W"&kiXeXy- dʁg"O(PGzA =\[<9yv%˒.aYyrVY<ؤTŵM3bֻ-XW0FSfzQN)75 ]4bsGo5uiz>l; ~(㏲Q o}6{e),*&+6V@MJT%V6ۃ_> G}P-<+gqgqUhK+ֵ7o)f(JE6tc7ֲ^ڰdYsv1p?]Vu|TĖ$f0AkT*Xs^6TKc KaWjIyPxՠ\%SӴ,0IGf<{ު+w/rˮȪO-|UZ/c*#xb,au'Szi͚zl44[:9Bc;т`׶vT%@C"#,2 Q{_u]t,_6LUa|.+98¤Z0 YԲ.l^ڼ԰Dkiذu'Oj&Ҥ`ylZ+6(mXܲ,e ZڼFʥĞ6/T?++KzCxfq͵(^;B J3?KӚuI#Vu,OΔN]ƛXębZ[6>eui#,{x$Pu4JqYFULG_x~1'zG'bYз{5$7R p$ <_q :niza@|8^-XVYp^4*˶޽S7w8(ϲD'Te!f^}Yosjw=߫d,A ݅ A6FA'uE]L,SvBn]۴b=8jO;s?FY| F{sIa]&d@K=Ie6:0a(OVVZjZVk ֥iceBy7b҆QyV9;ƁL? 3{FuT8{ hֵX WpH3l.oj6 N+)#@b\ªeE'ڣ[$BAVui [)UQ|*%z0Ȣӿܳ\qɒ 2b}%vzY)$ ObU"!˨2PW6/XQ:Jk~I<^ڷyތ[O;ocM cay7(G-|y4̈HD/l8zS@%O!?2W{5pG™qgqR yo ;ǝ\۸yU2RΙW6d!8F-m~+ DEjTF;zqݵw{jJwo=K;nvN=amY ST쬶N+ṇ_قZ*OxBE~W5C=66  u/QbV ئ jSQyTz6A;(nY&pxNXDM[ttbDB5};oҠԱnX,MKN6\e?pY䧙 =i[dGĦ| z6U 5#CK5+Z NK jlcSGěyv*WHe8RYI@ϹeY[ylsϚ # /jVHhL%"?]652 2t|ҭ7Ɔ>n=?~Su6Q kA׵(E%ua%jB%xFqRzbQCYf(<nF5|m5kG@Dhms= =gx,cy{y9̴=Fn9*9< k+ǕM K;8+MJX!AFYxpˎ$m_}G}Jzqgqg|t+>):W hYsk+V.l4he9nX5D( EkO/^ I^X9. ŭ.Ja0䆥g1(Y=;5ޅ0Se6'jiEV`k_OK6 `e5<6o8UpceŒOza%`T0H1ҦGvXr~C)PODC)dYԱ^]ʦMv ,bYٔ1PQ2+7=&1 ћ)ʦ  {3-ݠvBKzZ'4,o ;=aARqN<PerK'O̟,YZB ZʬԦ9擈 @2BW6n84!ů޳YkGi؎ D$|$grxgqg|C[zLOs_ڼbd[e $;v޺l"`{jB 2VAR6 =leS{uޱ6z|EYۛCApTLGؒU86Ֆ5yfaƒ̠9̈+S{]LiBw s DȦ[n}9*` 4pP`'1tw s:*rtZT!y9XUQ)KG5IVq spy] 3 4"L@̙,8taӅgixlʥwfْ6KĤt9қmX31ԏ"y]U5IUeo _ݪ-s'(qTz<)0(z]wYyDޫ&KKzlY6V,1 'pfb3:zqa%MӊQ*+LԳJw t#3>|WwK/"gqgl-Uo3EmvJ1'8Fh{eY{ @ڲDbDq fbPVeA{X[V-0j3kI(e"ԧ*J(Qisf}=힥=Y9(Rs*44SQN2#^ꙓh,\`h*Q62jTd-|cMmC{7 Zs^ҷ:-uČ{G;kE HKf=4 ߪ((7tSى4.f0. ĎgnOE6C-aKW 2"H8x'p4(: H:~,ǐ +U$C!f$f?4Y <*=(ghAޮ;ҝw %Ɠl:%ڻPE,bfm<*0WYIh{q>|WWMY?grxgqgcP.Y+8*6x{ϣ2 /斵cLc;^:!`ɚ[_켓p^Tq=_&*&%c9 ! '6?M$(ܪA^Kuc\1,D#;\رKU^R6 v۝GL죩<ʎ! U4%<Y갭ڝPSKVcaڞ1hP;57MGe{G5 SGQHyB" nֻF.++uٱֳD-.R!(8_O:պذY,AFMה.̗D"la"vwj'pT3&ޛrTw}%7V@?ȀŠ+5;o6_tɺ{u.x@}mӒu $zra5ޟۖUo6{T*`3z!tb|rEnA%\Ҿ(MhD$T9^l~>IJ*IRdg\{5; I6,6RXwdSEU*$F:HEb+;\6e=67x3E`ګl4]v9\JUpynĵv#na^CV3#UçLd.lvZա m3qPX{S(>'7.mRIuX|DVҽt=c=m[ハōB ?~jy63o3l착59JZqK\he`t7+4hf%&ijÄ$@MS:Gr*4L3S&CZ؛NQoV1@G6shaVUejH3 fLS4WO s*/$6%terZj+=2,[3 *T5$Q`\F%|raZdŰ=BQG''^sKZ7L%G$e4%6s鱦_u-sl7X KPjjj a"=ɠQlUjĄ]abS`NaKm*C [ Aӭ*/GIsC  bC?0\H{Fq֫B`7gޔoyv>a[f,B1*s6\41;jG預aROo,]"N\~Pkz\Qr)?yB1X&Hu1@,=:Xg67-Sql7d=tC9B {#s &Ypq JYoXS30Gn7m{%l/mK`)%l{ٺ}b`dq6Lfqxtt %i_N0,8V)cieЉOY/gXPjE5`'k8X_AFm̽B1.FV6i3rJ@BpXj=VaRpb QR@ lX,M*dKWY*züK#F4*t WaPJ? LkS$`es ~d۹%eox\{X-r ;j" fJ`+xs#4S`]f!PN*@gOOW\ub4%pdhP]ȓ"TgL, 268i@= K3ZH$ajmRX{Œ~#1YHƫbUMA L-VUBFXąeq+NqFL&B P&C1nh.z_p=c0WW}[^ɭ~^hN(g ě2 U`Pq9FrF? ۚFn32>fJm1 =@GY9/ o rl `K/*ɶ^ UCSzK/la-,WTql[53Z),=!qSb (ۖ;O=2MmXNM +Re%hdIe3.l8enxsX#ˤ2x͉EuKU,Z^l5Yf!ײbTvjf)nxVH.ŃW3/NK5S 5TC9`Bs$\/58wZ{Wn_֥{{~6wZז%~7~zgfJ͠wΕ+WC{$Ataql{R/2WBwh}i+fB ^o2xɺ'M"^v8 >eZX`ÌN``6el0 ٛ`T8<'CJQT-SaFqvݫl(:e+#4a:a\:j9҄^fg6Xw`A%Te [Y;|eYq Zz|PKiK@KX|-}{c,ysRHJXKaS/;0 *Jllܨ:ɓ,3d@ymxvu}ta@ZO\_cJUcMutz `&  SyVUSSX`n<,F( 0clHCZ?F#8k/+6kd2xd`5oF١5 /*B*{]#yUs<2 ڈuڙ0E=e desP8ͨ0vM(#|n_+-UʫRf8*lN%*1i┩&˶*!*#TQ$FVb~X.)PL#C;|qDpr~KWgc=cNZIy,}B*C\ ^ źY4R5TXQXAVcz8<תTfL<αzy\pFԛyZ,Ia3 Ԇ -GO"!>Z@(2僇jnJAy(S|etG3bԹte5%JuaQ8Y`ɠ2>W4cofPNLk /+{ōFU̒R0 <2Rlp`c8!s6,Kfح|b-A%8|fCsf9$Tn"4͋It ڭd̴͐a>(_^^B7hԡ  !iJ қ>m,if "G{uNګ$25 ^Ć)^ĺ&Om4"#dC*4+``IЋ#X<,5] VVjcQkyRNO{X't%gjSvl兙+s6l1C\ 24xd†RdˮqJ ~0D6BXg3IV^Ŕ+%I\eK&6Y)9!Z,5W7Ano)_۷:k7sA>*+_Z^{O~CGGG,yO|߹O\ug̿Tez"gGA O| cop8 bѲJLKGpU2w ¡sS9^ q5Jå0ZNYy3X<h,0Jg]RCb\697D9s:uhKj@8oy\V # FeE528cy DxfaQ]]3x꓅ư0gj~[I@BFµ<ZF87EpH@˼U^\'=l( ȓ2@ytA35UYJ@׊e-?^kg'S-:@ J>Zy=:^y]3,z]\z,T^Ml3z8tFJ[{5*dXD: 3˅ҧR0 @׼zu`]"܀BS32:#=q;'^uS `CFjV-,5l^a1,I 3kQaU|h}i,O˜0(F-J@ٟf ^ҌhikN;kŵ73y,9m:Y!W=lb1E* c$GGjKI5*[zS+ZcDY?M.z;~}3?3~O!zCod=c='k/-6_yݿY}OQoG׽),'3QvQ\{*-9P3YC[ I^q23z)ߛrl,9lp38N#Uӧ̇ZBҽSt 0W~e+oՐ ߨ*x'{(saVꊪ9j'3j@O\ګ2b, ]Čr-q-=).o\ N6GaP8an5̇**Fw؁Ôe(;J,4'2q-݀4equXa6PMlkSĚTgA+ybaA60g㌩QF̼no ^z;ۊ+8y umU2X6R P9OG2U(ъ~AʽW-NܴLjŶHnUPvtju0…0{J`ÜHog5O??egKs =c=4~xG^mG?K @z׫O~x{ܶk jDu@TC !P,@Gs Ёu@t`;u5gY!-P3;QC #.jʀ0ݹN5ŵ9P< B߁h~نКbjP^!ޜxRxb^X_3-=WRQ8a& 4.ÇT$L9NmTH`K/24 :5ӔRuw!r@* ~s87(et3jX6,胸Tk, #Fӏ3%_'';^;mO^{j{{x~4>co.'ܼn㱸{ғl+ag^u ¨`ԡ NLTyyɮ(Cw=B$ jf]C )-s(PC X˖  @.B QJ9DU EeBOm,SSYˡHtBG\cw B0'7^ՖQv5ɳ#)۽Kkm`X1N|?k"gֵqC"ƲDcB0N'9H 9HШDRW+ՑPr,ŌÙN1)TTv)$(שW3IlG;[| N UP7^-K؋0L#BGҫ fa^p@/\B'R%'Wd[Hj@gP3Mάo6,8\n"Xz 'Tl;C(,,@zM NɋVxbCw HFL8JҡA6c+l- ,2ZM9jn/?L_>w0@a@Ca00VBIBc˜tŔ1l7#<ÍC0f ߹{v{?իn}=c=-'?7ھ^ÐBOy-Uw_|%l_I_P6ݙ7ګR'VuZS:vxSt`'̆e?e,QaVW^]*sRj ->U]̟ džakY VͲR^A:vc%ϓ3Ā~@C#ufa@Jp;tv`Sc|.~_𯮿j]s$#lDOy^:rC?Qےsh ܆C688 \),s5(Dug:txvݛ>pd)9=,8^qth/͑m܅A -|F58'ab#;q* Y s-=ހ Az ;7%*_`0Y3Xa{GZi+mdYt(OEXVUZz)'ſm)SE -IJ p!`[kl* w4n"[Ãx3➷ݸmbzY5٬g/'?w{{>l>Or~7Q~6{ZyG]X9;Cb+)n],2l ܹXNja5Sq e(n8͇d8dU:dZqn O-d@(ғB|P;kAv{8L=BiB;]p4뵇t2!Fe3Gַ؄yRxZ*[F`ձO8!N=fhuKD^w 2{{S5a Q8\,~d@cj0gi1jb+nTz sV^_m6~/~ͧ:r[Qk'T L- 5yq2g1)loa< n3uF 7>ʅQvJDk!WWG˦:7UoJd-piPjXZC *(9(nvfF¬;:ܞd8efl!̅մ033H0^mKƔc \~ w4{k=Jh[qDx~a3w0kօ{{񞃋 g|qM?2¿o.m7jV;\s+c9Z{G_ ܆ Byj KOV &L慥^JթƲ5ḋjA\Y( Rs57>XhUK-G>e04ʮ{`9QVfЁ sp+ K8ZTť)q ת*xM]R : CKKRjzp[S,y%Ԥ?ϼY"JM#lZVyA5n[冩b0+`CLnT/??0(.;Ƅa XUG F2rFY"PEĠ1dۢiPE  ANwfyo{[>vdBJCk( #lh*ޒ܆ 5}byPzcoy|dE|i5/,lϼdSN'εŵBKX(VuS8SX*H؍t6M, rp|%t^jH>eR8놫QaVl @ZY#WtȆs-:VXy]& 3TԟNaUyZE(ZKs.\ Z15Uh,_0MLk׼|j֫d}Z#KL J B9|VҽRϷ.c=c/|p+Ww簽'>m SE/*)-5ֻJt*`iƛ2ozYMoۮ`2j>*j/x)t5s8V^PK.8j"Ly\wfmKN-shFDRIw=_ ^w?G-}NqQxajŵL@0 0 † bK,aM0 #(f Jrb UAK :-}DuII X*eq8 UNkC$-Si$:, e@ :AGXPa׽~0W6[ŭWE_Ҩ^3ĕ-?Z/K<Ϝ0/i l@KȰCaSE*ZiapG2Xg;?U,lz$Jb)Yz,uYP\srYe*މ7^7a+ -}ݖ;N͂c2h@'uǘHjJ\͠`ºu2 :4 ^r")īQV c*nԫ׽BU_A`P eWOYyd 0+䆷lK9(a5}!R17#$:+x4;& +R'N )8Vv(+5-jj׷ P%yb:25L쁝fД~ن kڔh^_f6FxXXn(v^1Uu3^M+J™¨ (:C9$R׺Fs,mdkϼx(x!,q mTmnHeD枋4yW S75J&͉豸ٻZoؓ=c=>տ38=q ޅ{3|HhVU3m(Ĕc#̠ҹ)nw]g2MM♷[v٧Dϭo9ЋgG"|vZiuIeq*a<4 tgޮ6L-;7 5<;2^hz;+K &b6+A;Khɐ,"ޥyj9˰ٜ(Sl{d^&43Gl:ɠP3oʕ2@i5 P":Qj;(޼~ط'v N6$ I{ԈV VBhv c;RB012Hp-q`lj-*#b`S3ʸc0䌓g5@4e+ 8NXU)SqrH8 ej֊gl]ԋexh5ZW. Pia#%ىSGͼ`gL KKwadPżUu'Y'z(^ 04a|^xڵ_ @ CB5܊F^e֪y`CE;ls@*2b9t`vm,SCJ gYDbtB;êeG;k%J}ܯo5_yc{{uo}hgޔshdth}C/*͔ynfnFJWքryu0+SƊQdY/J[^Xęc@?na}4x`Ñ%r >x`bBɅu-S *.a%1A`QHs P /"VVګܮxu 烑F^z$9``jyVR(aV!_A3L5W+H`j;`9[FYo~mxUHAcfB)p.*=Ƅ*2 88j#gSjDwUdKf((wt=wKb]!g~(pc 0yk M Β2Jҧe5x=7g^`xUw#}H)dʑNTP rw Bxݫ3RQ1O9LPw 6P EC+c)jgK:/b0l+7WeekVL*-Z(Q$5@VU!.Q\+fF+\ չX.ab| ʰ@}/|}qTotwOc_|jz_WC{{|>^-ˏnYmeIW^-W;Rz;w|?ʮl2w ke.ETtDKn(k&L s9X 'yܮYth}Md'4LAܽԬA#,BkEB ;tۆa6` <&Y<}1(v \0u #2'Y9]x8 ~!t5Z29qnzҠ*P>ƭ8 VB5a5s4h9cd ^e rEO 8ʊw#|*@3ϼSc8& q M,bkBZ ( $Y<#xgVP'zs`˲R|?BnxUR=Gp %X:;YJI{Q9XX/Xڊ׽uYhQZ9HH\ ])~tapA{Y:MZuh8zq~u|б'O H>('bRKʌyJ:eq@(v.XUX"0L褖wVݺ]gݺh=>4 {tg=plc1*4)bD,47sPPYtIz xPo2{s_?^AaRuA!#htꓥ#,C%=Y#5c:AVS!˶`ДuO.Wys2S%Xhf)P5rg0ɌY'VzAb6zPn;8ة blſttJ<*9Fy8jqd0NM$IV'|Zz OlZyb.O=(tkT\8fH-= 9sM/#3 )0^ZOO}[ңouo9}t{}wK9`_ogvC ǤK=>QȞέ+O n[9zOq}}PSY 맦Y[ApWz#8N5TpRHjp-]̆ :Uyp`c;ߝ台>SU3vy!3b8&y),6 %S&9&XbC+S#tuik-EY@JQabc zBV6.N O 8"dW',E,]** d6t hW~mP(2o)ܔ2ΰbmO9f?/yߤ0 H f313_Ut*%MCl; î /`]00綷AVk^a,TJ`wX?'"8w66f1^b Afܵչ8V2e>>ƙԬQS<ӍZknEKSoV*IIyV/m˴UP6#x-sGs-pGN9FzXvٍ3_ ]ʰ7q3oh.zlB{VZ?__^ _}ÿ lo}O~՟Wܽ^Ļ*oU:99yW#ju{/+O n[9|oM`\Y&tߝZQ2xhNv R+UN']a0ۺ) ́Q6 J gL#P"l268'^M*9 ֗s@:H=bתlÀP2UA]>eA7 0o<$"f ǸKJ†ҋCQ%ꮰ+ ]aKom2)W?4GEI;@]ێFG˒TMc{N?`:Ek۱ ;F6M'bD %t=r0ʝEfLi7ضa8f~/d6ˡyN+d=c'/ mǷT=~?dE4z7kV>.zqaC<-SE7^ @hNs:SIV uCၘ#ԉ5T܎ss-r8Q}Wc*| VnbR 1c*'. Pd%Fn28)t4ed®ȞBUMlE}0*BP?lҌ\jzP^H/~YZM8X`vP0ho> /:+%nDޖEͻ9X$.cĮ\H $ư,zz#%զR0J u)q>JK s~6G<^w%j%wtVvZ O=U8V􊪡NF\2JZb`J) DR%JtBZUgt+^,/}v?9OOyn{ɾc= F)ؓ' MOIfoF=,ޣ̨,;Yz`.Bx60qꡥ 7kŭW-KC4dBd JFt~w\ S/j6`8Z4kRB0gYK<1zE9D) nY6a*  s)M8wy_*Zn2aB]֪]Rتj96̃ 8^lTk?#/}^X&ImJ 3f3rF`\mAvt$!G'QUznj}>Lj0^$3cܽN-1&mq'hfr*I6ꀹ C/?u=05}qD+8@C0oT r[NV5(^ ~[n<=9|ӗ~mxkox3uŗ'}c(>XF_g}cvK^W<=c'K'O0_}ӊЕH qM,UPk8ebAۢP2 H!ډQ,nBBi8,u;-#LV(.faD < ql($WI5#~L ܪp`;Uΰϼ`zN(y<ӥc)9vݷsd}E'T!4r\ݑ zN\; +Qy43R ⨰T݋+Qaz >ȿ5?ew op=c=>T86{dFU`(aQS`nU)m{$ק^'pځFa[5J^Ѡ> U]uph䣖lHe[: _ C^:$Θ"QuݛZ@ޘ\bɢTQ`єR4RK^ЁB.apzXw`}RXzQPQaSEA^PSzgB3hԀ0%^ : kCj&B5ruͱ^ Y|sjD1:SJ6\8B;>V?R:=J.168`;&aU"jTt4?7kH lj6 e-šZ'NQ4Ci0!=?>zwOE/0$;ӇdI^T+vn1pb٠v2[ A@z[&J<3oJbЋbY3Jbr#?=>OO?Ư_L{/>~=_}{{׎,,/尝Y^p 2 a0ͬ?~b)O7r,bD 4G(kgG6<]) bڅW(- Y07T`^%kv5ϋ0RXz`. ^̰x ݟ゘(Ԅnejphb~|4pŬL)z 2mU,k Q؞w-T@mJK>eGM9Y=Bٮ!0p֊..C~Dmk.îޥw|~M-3\ ڑhNZYJ)_7)e0CUqҲV 90FH~(p u ]CT^AC`{Gr{՛,! +-5|2@9Э)dfpr.p#FxPQL-S rOgOz3o͓5*@lIn2ؒ/8VV\"4bfcx5ۓ] ]C07sSoVbn~)y?kg}7'֋,?;ȷ__^_\>)9̯.\pҝOOoxo~gU>w? ?<_{W~Í;W|eûTsw}F!!s)1WײAaml,xsmC/Lf\yƹy̲E(2ep+7L]#Xئ%+ٙЋ'ޜzni,8+gajcM_z`w)tE\*TT c7^? > c&e@~ Ӂ ^yafÔa*.@™[;14gTuμeX^ր^RkգBVAKo~㳝@]3Qi1H eP*0Fu 3 c$TDb7-Bwf<s1Fweaޜ]4r5#0P08p(( SSgWBwG\X?T'稰U8ׅ bQ [Ho6Z8a"T5F؄im aAM]9;æ ]ІC Yj2캷W`V8ث3m.[gi-?4F0$ 4G :|!lK;BuٳbNbIFzو`dP h|,?kU6LeqP`qħʼnOkO_G*m acSmv"ޮn Pר]=Iø,x}(E;< "6og)G oh5wFҜqSu,uu+g>2ň0̆)ӂxvkx@QPQE2W1_ 6L,,xĭƫAAKVqՠju l5PZy<0KK\{zq|`̆>"Qyaœk^u+Ah(6QӟS#*cQP[fJNQ5dlM] Ј ֪TbPv?/u!*0-ywXέ!w4{k=bS^Y~<} ^-{'=vo?}ϳ_g|O}GK7_̏Oy䗾 >9xӟi'O?|s7-_^)c+Oga<)_g_h]yA~o~x3~?E/\?-_G>/_vE=Og=}Ϳ{/}'o|O?u?s~̟{?Rv|]w~ɧ3Y'Myy~[<@_oic6{{ ^w+.}#?_ _/x'Ov>C 'ln&F'^>zVʩv/jT?FbH G?v&X (VvН[#,* b928h`3 q<1[@J@W{ޔNSQ+TQKO[C"l^4Q,͙+五[V5^ ǖo?u됳~GX`kN+ӆѴ,7;$bD]6 vnv@;a0͖ zܛ^E,/R$Ħ0}ٿy%ل~`aBU݈#Zz/wSG^SOxxՇ.?/6~O7ț^򽷭e?w';>{w"}G˷{3Bt7yz/7mW!zSO??{:z;3_Wx?_㻞W}i5z[?=aO3~~m+3?}z/|]}?\ _[|p%뤿|݇Λ7>_q.v]\#koBN$t~z _%/yK^O{qjWJ4GpGkT]5T#vY[RPvī^ղAp1GX_QST/(Nk֕1WV,{  . }.! J#!QR90#T4J3/^dck 2(ef\XT!!Bw}zPĦ|l`kjzJIӀF(M9(zbb'[Գ^ù\=,ĒlΠ>OݰͳyCpaLNNV ]Eۦ?"&粆*h[SԵbT!UYtbLvwHBq̒V%e"WSLM*#5d[-7nz9K]^2=o*0`?fC c P#{hd:RaŖ:xKJJ_~XszE/{LS/"[_+1^1K^ֱ{BaM(8} y4rYzBE}zذnh:LV!1+H:`B\oyO~t{1Ln [?z/Ngh\_]\qg-Բ}E^^l{9Q)̽h7D#1@U\Ha!}_e+IFi0KcʉxHnE ymW蘧MccuL<6te$Gdيg&}t!0tqzlMŶV*,ZYs-G#:8vbMb%CEB#&u_v5S%T[WQU6) ԶSдamGFmP*R̀^cblJ{oP^ *P^a#,E7et+F0EՁ*}ckepBNAe3/WVEuBIC=$2@@>K U-my90s)tT^#_)bB% J=:zW+;_|t:}S#?#?#?r?b!hjg׽g}7wE:u{3,c,v /itsf|+OYf{`oT.v&ns^x/weȋow-x?eMQF[q)e9Rv$حY7,37cծxrql-}p,SB !cqiҩQpX( k.}ɒf]\c[1hB͓1e4 #ϔ)BQ-e04eP瞵д| l8dcv.1 rӇ jM{++oroXR Aa8RKٖg e]'aVH;؊}uMRFhߧC= k\hRaJ a*5yVIH>_nyFr#UElC%bպܪYƤ(0-wU)f)a:ޠ^EԋZͼ%Rjـ}!` !0Ȋ uS2 8mϖ c`P*,iV@ґ>Z VtU9<t}5;_w2)IQC6=+XL#lQ0!iP%Ě>d{Ak'8qn@fP0f& 1 IY7=8rL`NQls'^]W?>hW\z*IU[]8~';.[݁{?~ݿH~s |c77R7;0_~~ v`\:@Fu@v]&ŷwoپ­wWr*C?7_|>`/xk5XsLEh0qI_',BIѠ1^ F3x'$[5)$YFkfqN1WZQifAcmzТV6AH eQC^(eVs3a3>Wrsƕ)&QH_Cv# cް̳̋=P2d8VfjY+fJ`13V֏3xX0CS˨N2lkYu\Wq t>;cseؤ_t&~X+qȝPSH}拕bH"O)2{hG*{f)JH,K%} I\釽n.Lob+*Љ*S Գn5Nshd1{.@1(X7xxK FR9b{GC^a e+~ *Bb Ds:0Vd͛ze'ؗGXE^IA 4INy|ۋL؉Už`,K*hI$YQ%݀ F.)W)ڴL+j%2N*K UnT8ti%;w4ڀ>OeYU}o|EUUUU׊];rxy܁}7/x}<-|~[W_={k|=_?wG}gZ͗k{<'Y~G?o K9}~xܟ~Hu/} olol }7S3g7`!?a v-F{?Z%?zϵjv>vƉQ^kr6n}ھ}Urix]/xg/:g}/$y*JbM:?u{߽WRE_7ORb'\ŋ_*MsƁꮫj$<3A$PCvcN[`ƒFSOZI ifR_9aB;}Lq#k=#آ>8eYD\cc#gк5d3υ̋(f}^tM/^N0/۞m{ ɧދZFAzS%Դql1"K~`[阱Xߚ4oJe(!2-eInJZS 7FFXV]nH`m˾WӃd!HWU$W^wۇuy}/}c7ぷ=6y΅=Vwyw[;[={~w@s~|z{=#٧g婷>ؗ]ux!/|qmo}I}z}އ9G笇< q_&v?)oyC?_ v^'OXVv>EN_ǩ?t@v] ?W]p?:Bⶏ|i(7#Ar]υ {>ƈa9nfl96Gp|ewji)TtXbð/ (!@{Ty8͕BP{&9CҍX?0C Ժv  ^kK#vFH,:;0={>NBaҏ ێ<),'se[*H=asΙ:{;Cja7B(+o@qP{Mv2^+4۞bF ;!ʁ^F*Qްn¸n͡zEbV$U0K PM]p}:[1@*%B@߫T7ED9b' ED%{ JYcGk}d4DۥE;ZTkUdMאfn큰Ht@ڡNO !#N~4l-Zl։@@XodXǮ̼zmXmʓhIpkYXw5kV"`R.4#k%9st{p xk\'ss9YFCMOs3m?GmO?y|t[rϮWympkc s9?Oz1ZVX(Oavh]JUk]Fn*4 *sbnH8䌉gJY:`.1EVt kl'Qg^$pڂ1B4z`܊\Ė6j-Ԉ,T- cf fT3nXv0MֶVV++kЉ9%cFĚ|ŽdfKxFp0V{0U0Ze{Ψ-׭J&PTOg]ն8Dש} 1X,L0NM 3910`D5,˙ᾲ3V۱*&&ɴ>Z( ō|+llE3i2- ťZ-Ϧ^nz: ^+Keqlux})d5&g)枑yk{ -dQV2Զg-€1c:"0ShY,E؎=;yéK$脱$#}5QI ses/O 󓳼{-.ͽ(ARFB:̫N6İ{ZKeK= Xx1eWͮ~~E/}7t/۟o _r^gNۏc~{ӏϧ=bO?;P]1ᖷ9|ŇW(}^[*@_l\wpB;#=P~>W.vkfG/w_xU?ʼn82k^vz<5׺R]7;/tX?[]gkq5gEW>[@-[x|9fG8S/Yd=֤*[6zLŖW[^Ve3ώz!&5,`ƳZ<` FW҄W^  czFE*'rxe}:(#T'֭Y*ް<{Prr=AXiE<ԲC*D|rJKel@{ـݐm:wd29}5eKa[bj\lZeX.':>kep.& drb jl\.Dϊj s쌹mѴ;Dd,*}4/Ӄ1VsP1>Fw 0$5 8Y7W +A[^*ڹ3M}A/|!̀5kR)|ی:t%G=򪗹X2`-& -\v,c%c2z-W9֗A?l?O]>L/㼓?θG8~Vx==^*|R?; /Snyoיp/ɻf]w{WޘIio=b_d?Ͽ3㫊1SZj.ϼO>ş<ꔛ>^y3O-. oHYImX*CkSgu%Bsذvo3j嵧h>Ҙ$>XW+େ~l1ϕO4`h6d$02*ơV+L=*RRH FQ>` prƂzSjI/^  kA///I1by0[Q=m8ÐQDF5bfP#8aW(tP0K+N+[(zъ,X(@#--jK/ʓ@IUTF-ftqAQR=,(k0֭6Ah+;(S!LTdžuan]At[e^܁F2iũjɾv6Գ}ݐJںqH0&i1}8$C"jzBaK\9V;.04dꢾ:VaT"Tvi-rlM+2B ϷH6{z}]'<'>Gg?|uf"gwp}kh.=}׾}mWo~|O쯿ꝟ^&֮0?W}=yOibōݟx>^5~ϼ>~%8륟Ňm7?|a%o<߾'__]\}R 5VΕ'ې1cy\*/SC `ܰņ- @I\0do{5rr慔l>b[ˎFubž>CCl3V[>8G5&:[BVf1Uw`nyv˥2s:Q_y8Hm{":z1f[Qsz k@ Qȡ6l[aۋd\*;;8~oh؎ٍˠp֍Gzj>,oXfB? gt RpL#HjlmzX(n:ĚtY!@mTA/|pK\-k[?n֭YsuUUͮa+v~`N^|a]So+KsXUP'|$-Wy}Q>葏~ԃN'\p.v'E_}_/~K^򒗼7|딩UlV'oɵ_U[g}v ` u{](ll0"E \z!–ʷ4(G,#k&Z[e[V-R!u5/l |H>nxb^lఏR[VaI%#kp0a`@>*L 5+ĩBˠ59ܳF P;VV+,\Cyы,TI Ag͐H/FKs#,I#Fاɉ!Gc "]F JyeĘ&tZQDQL-I~טc f< "YH,z3`Lrbz˦iFTe^4$:!lB9O)aD Ia6v-r#/*2jx `3!c2[:X1wp:rETFкu)Qva_UQ/3PξXrĹe5JJ{Z [&ā[*ze{l9a+D-=B+Ir7h)#0`$TЇ2H+z*l+[ʀUN#Ȑ{*\k >~b >a|vµ"]tѣvG{Q/~𛛢|+ã:zԣho?Oӟg<|ŵ.f.v]AKI{m^gvߵ|Į=(. B/"b3TLTU||9u,E1oX#a.5֌3*]ȼ)Kf_X>~=4k,Zn iodQR;֏,PN{ް1cA5m/ `edâ8$KƦDs!}ndm@VT/ r!@%UIpT˒krJY*dЈ1g\ !cNߊe,=1RL( 2*"Զ>VuҋvJ,c,Q7Hja5(&k.t*ekYf4C*7$+y3$bT׭zzKFmXa)S1*藓B[PsBXn{7Y( oEJr'`[pQǚIke>K$lڰf_njz"0n̮`+?e\$ FK_b,SIXzzԳm/[q!,UԾ8b}\E~#~KӶ]W#/DI?\/}K^{p 7@Z_O3?-=v{ ng?;ӆmJšCBa.v]D1Ƹ~_cx?;?^և^:OcF?7VVO}xĚA9BNđ-^ |~Ol*v{ɨS=70^) b5k h,pf͚Cje=RDUVNLPz+ M/$O]N-\0S>d?>2" zY{f aYf^Y ē46oĩg^SpQ/RFzuqS3Lyn4Z) V-Xn l\:+{/3(Lz'{ B@C BY`6GmKy\u:EOp,ȴn<TH2$g(KHhZ/ P#f{wX+M Nu\ eyF'{zc_˳OV=ܛ<9l^{w3Iy%\9 &`0HJW.v]RZ޾or8>'/ݺ ><ƾQX>>G _79S_<܈ _z5k֭A@D1LS|48W i.spyAy*V,(*rꘪR5t^b[cG jHAL~F XP)DЦlh]*0PkI-1]$h$#:!U Z֖BHC ~l5{LԈGcRjAʶ0%C+ Kz#[xFSԋ ZZf]I-}be}/KnI)x"}g\Ŕ%;DRbTleU,0;r"$lEӆ}^VR9^}d L1p5Bk|JQ@f 0b<.Ԣ=&G='ajY Z0Δl*A+X@c+n;gʣӑH; 򜱀0c.-Zg^ϖitvľj1eKM3vZ)i>eP-u1SC%ՈQ ډف.\7 C?/ z߾Ǜ#']+6thvo,%r}5O{ v' {u$^x}t.v]|uÇ/`s~>mVoɡ1g^'qOr}krabк_62aI\XQVNN02Zly!$L݉?Md'#ePNubA 4s o }Rh۳Vـ4d\n\SNiFtXh紵td%18@XR ,U#sFX٥N^Q @b0%#(p9}T!"YPO#[Q ԗ!5k]KY#![GGG/(@j@FR]vzn rUDpFW'XQ_3h:02$0V[7鹴ն6VTof@XqQEqa2NFg/:*j)Fإ1 =T#B!4FV6˒1Uz^^mDh"[mkئ-(VMT[Y822';T/4bkjngΩF֦̊}Amz:WՈo#克9cFdIP2z[*^A%u$. F%M/iV{~G5[@_vr?G=7.ͽr"~]:~^k:vNxg>[~N뺮|`/"au }c>5}5n]bp:n?^yӎ:Bⶏ|i-nBkHjs9'e{)94~ͺNwRlM/kes8Spֲݑ5FTcFvvBruRU %vL X#s0@шZVqi,Tz(GИ:NW~d}kT2Y?X1V ƊQm顓b-6B#Y_0 <NAJ9;ջ$HyvI FU'l;Kb84ʷJR5k<Zgo͐]88@llvr~dv ȓS12E¬[b+up|g] M+'*g+}ViK# %&.C)4Ef4cZ,X֗gS߫WI3,ruv‹q8xkǯFᨗ)=z"HR]@dڰeP,jF+d&WT-eTTS9As`ŒNjÖ@ Q$ZaR`U+KJg{+!8yV{YI;c"cSjÚVa۳,ZafmR)[%q(K/3/aS}QeJWb,8SK(򖼠$ŎB ȘҠ`U"u*MmOw[IҔ@E1s ŸƨUjOz`U,00yJIlL&jt}- Kű%кł+J!588"d [z),=8V=׭-;рF@A3[,{ ( {#睬W;pi䶧. \xX7L'Sj2ļtBiHlȠ=EqEjzE|>Ŋfbm UJj5`, MF$@ T*R_ q#( Vhe%I >6 - ƒ>6Gë%_\Q-SfrxE7}ӗ?_>{.v]cb2wv"Ru8s+*ttN5VL iCkVid\j&Я[W1>b.?Sq07@Ki. 3 N. 9|̸6%Y;HP=P쐏:IP-z9u eKY+f٬d wC`/zq˃4 T$, 2'Ӈg^n{\YЉ.,-GN_bߊTR۱{&`ˋơXf^ckw? F& ׶+v2髈E!#Td//d%XRAWcYc^vIl{6ઢ3@k֗sz8baSF*j5H;]VL.۫:5|Ї> Or08V▧^~ =/Իw~dsϏЭ]GFްtCŸϖQ6*FzP'TNd;c6-YFkL QUғ)*Ɯ>8rި^6b;f k*FpQ>ŝ TNOtVXœ&_.w rXiq1 #vCr1'ec6=aXjdABp̏f}:Kde4x=X*w`hqOX ˉc ?q[ YDZ,W*4( $9GC Y AڶiU׫D YFrz_2|{GJ4jʅB)9Ċ,CWM*h׵'Mp-9Wa@XH30?9Z7d D<#V腙g[^LHC}e#֊}DfZL= liyIU#^NGԋ&wfo+\39?O|'Xb6x#H۷(%kd+;/{训t.v 'B--Z[RnS@{lbuJT@*Z"jJƉ5VO-J 02챶/m¶gX+z#*tn:t֞-oS,U&:*H%6W 䭜z#0d_3]>}la)р ͡F:!l=VtWܨ(&Wwp^XIekYaKe9ay;" fN%I{$Y䫨Ou`}r%ض{9˒e K :5%6h$HZuhZ4AfIdLʯ}̲-ᩊƳVIC+<{+Ԣ'~k9uK񹽘 shl퀽-Rr ^`tSK=U#!=R-4 VTƌkf#*zY\`ۋ411bx *$sSjv0;!kIh\P6cV+̽+_(qbmJ)[- [^2f@d-.. Z&*6ť̨*uK坲p-"FnXWkE~җ㏸<;ϣ~xwr}/z{a@zo]S.v]bWos9Ke)0 #6C|dQ}JlR!JzNT _C Φ IxUl)BYjrXeg3A 'Qz_~9b)sٶsYYMK)#e.-==_x6,$T%}׬zчIhjZ:myyԳSF 7 N cNmX_OlMHPj!h\4[(c2Ŵ$F5](⑻wB=2’;bP+-4# dOـ=RL8d$|'fQ;/1iֵJmZ85#Q&nX :Il6}pM/jYzNxR&P%cAo[v Sg_(8.{{Ba)Gs B( Mg%V /J7e jaێmGղ[,KeSeǪ>P9RjH<1lkeJRnAQrzXTifuמ-dKi~(Og߃Gs!S_ ɺAp,-FG``( G!V3JX=TYBRݨpXC\MT73y>rċ~=R`JJIZf]7VTxFa܈ЛL5K{-}ƕ:gTIϠ5J`؃3ՙok:̗ KegSϦ#Q[^%3s0N,LGpb] ` 7,;1ckG֎(+WQ:[r0G9 +25$X/,Y3fTE[LlQr):fb#Kӂ1G:D0ê#9 I fٚl]tdһ5nu86~}Wl~=Rcc+ZRÓn?,ӓo~>{?3|Vo{y{^|{ɲ+H'>N.vO?;}=z .׽.:V8n.NPǍ)bΕSrfNtq)4jڊB0W2 Z(wް([wr t%[uVckj]IT-N I *ӡ/YkP@A2ֲ}dFYRJ#ئ"rJ1-S$*X zF ǒZ%>.K'刨%%U\c)wip(Go[H,*rk j۳+ԯO}S+#F3*M]1(PIcc4KΉDnUN:N ȳK, WF""~e #eײNC஺t5e&RQ)WMAZEɘsiWϘ/C1#0I<'|g1;G|Rs$жb-[*s1 R0 /t0Zو]FKKĊ ҹPHdH0 XK'FZȢ``pnݚhĔJ(u۬[Byb6bb I*)'je(`Įwq-Gpʗ.;}qƯEg7Fƹ{'''?sy':_.9೟l緺խcW|ַw\789?}^ظp_˸؅s9Ond#Fˤ![Ņy* M'N0W7 q*\#ksƙ>]zohFD+`-sqfHsH,֬6FXx!3TP2FJEIɈ-KK2isBb`|Ɔ[13nmbo@4I Xz\ Dz|b B#VTʥ6}0SUzFKz`H8KRcJ8eɘѿoT=>w>sP[[4CU8tʡI@LZ cbhV~"cs1¤(& 뱔&MPFR\ufH+5HwK/G--Y3a#ZYt?qZ6S̥ Jƙ#k :=ieVH5X 4s0d_PaeFN hQj͘ ,hPy8@Lb>e>Zx*" Rg 3(fJKƜ* O҅!P9ay*T0v඗5EcRِ}aRNsu+ ύ&igAKt#ݾUvS?wa+qfWry*n_]%Q ͗Owӏ޿U;c|VpW}CWf;ZEԋB ILVž =lvhjĒBVR'֭P}ڣq3F2s<0F+h#b5Cش:dK*& &$j"iXQm#zE]rՠcz=:&rj;G=g_ߵbb}r? =#13:Xˢ8daB$;z8WC sԋCymf¶g==ZFu)@@*291 8ň]N=`9m/ !}ٖF%fMlUڑrz{LE,J,ѼT9WpU6ǕG4Cj\*H3vCY,gz(lX=SQ+S~KP{rL7dfM@Bc'spdmxb~w}”l]B4%Õ_XRO}Bj)Lm;h0" }r2h>BJ;"!.{1}i*!  o}KQ]^SxҺ5#))ly8Vˤ$D[P[NDAM'jȾbwT~d5 O1Y+-KCX+s8hl۱;R*/ڜC\@e}e6LIN<6B}>;!tl,չMtVzVUыЉq ŹaLE*ƔJ {Zit03hbuNlQ s/*{L6ue=,sx"JUPn/XbnM=N'?.v]\lnn&fx5$~Keq9&@‹FY}\B6.( HS29n JBǶ^[spI _X͔#Y6@Jϩ()Ucr.(L{B/0c 0(ma݆'~{f s^1ЃKavT<`ݖc rD[_1>%kZSPi2 /ZRTy# qY9!!İKlye*`'u\L#CƧxY4:]OY 4{Аe0&C SbEV?$䴀ZM r58PIcTDkd*aM;,]sGDYp2_M.#S̥ ]a4 ]ma))Dp@[ JTɡRzXbM.]*:R<JKU@΅mgaña9Q{ɖөDbw *\|@ܱes {1d?׬;!,rRYke0S I`:ۉcνXQZI Cpuv,Ww4~[}]&Oo*_}7%o|;ǣ}o?k]x n;=w꽚]bŵæZ6_E{E_к>nޠIBRDSu{AVEgujX(BIN6u0bGѤ`dpj-je}@gujX͔O91[z;B=aq1QDYL˜@j;d.V?!Y=f;p"؞ ؃ǯxݡ~3|⤓o}{~ʻ *s<_w|̹ϻe9=M7{83*58V?7/b.nx\q9$?XX7lY,br[4b1ԧKxro<, zl+≡2g P/+7lYY?b<1>(}_h6luJ`|l"FM=4g^=֮Yau ,/=o%^)y-NĂqÐLj"u9 P 3%hd[^ lBD ^d'RY P';e/fԖ[/4 3/Xw'+'GX>jc r 1'fY>Ug0d*+X̳D)4ImOZ")w1$@Q,g 3)C(:$quBhĨUzGסh[8[~ޱ?sĥ^PqI, L29}őXg/=?"mS*f^Nj *㘽Vdö8նIa]p!)`t\X`LJfAF٦Vy6𩊹ʅZ1UtΉTdPrƌrLXRN:Z6`ܰvgoƌi5Œ-6ڌ̳#Kj۫F1 O u(0W> o}<;7/:poa'=._U'r\..|Ń.vqE]tE]r%߷T}klݫVH%J#`@SYB,ơom C# I|-uį[š(3jy֋{KRL BnB1ck *myo)tȮ@4Ņj@/NU8@*o,HB8~b̀} QF+r۳Ԯ`*WZws=/v}Pmz2z*f+B#! a)w4*Ԟa/EqN1J^ӈXyG}pI tN!tZťXĔʪB88")$VB`_0mQMI٤0hȢr^n=4#zNQ]L%@IEp1,PCnM@&hӕ4gP(`,ѧQ j@0U!$جؖ^*`-BD"ٹQC$b=VсCbl=8aYхLL1:[STٶ`,ԫVِ|yRD x X{RX#VB}au6Zq<,0t\ @9t0]w}=3׷6ػ>tභ:B>1ctEqzt7EoOm8t?Sow}w~Ezcw}E?o3y}ӣ_r{WkzOC^£6<?O=]/v:oΧ=GtogsG|_XVï=朗cǙ?YO=޷;팻i/8g_{:n#=#y#V?~E?w[yKx۝v|χW|OO=gzwӏӏi }O}s[[yNWZ^VUUUUYf˰]&Oӯyk7|~K_OO7AFeTIի $dV&}N2۰~̮dhtr2z b$D؀gg^I̳KaydW]-߽PӽN3A a2 "`Oy*|b>GDe!C0IH0v{k:콿ǮntB r'|Ꜫ:uzw-RZE75,iHHLZꪆ$',J(@H쨐 `7?Mj1$vufJxpB- qpc䝏YnZ塵Ğ>&@BF.Jrİ7VŌB<1am%} ThIh5ְh$$%8ئ{S=Y;5~;~rBsJx=6K]!fش8\{,lް(Ǯ[8idޣW,FĈcӲ ĩw}ٽ=udbQ<,#'ZP/iYS kGqcݼ'i$zdʗvhr1%(ZH*X4t*tQ ܣhi 5V5i 'pb\L57]u3H0Gr#dNa t9tN%HKt vھnJlrQ ݲjfŦ 5w<Xvc( R6N-g& -TPEjmrks3獩ڗsdX_}o~?O}~~^zwZUg>x}}n}gEW^uUW]{w>E?\tگ'>~}0_?W~syҟ?"Wߵ?sz ~+ɥ3>wg/{&nE |͗wOGʯ|O_OڛO}ѧ>pgY.}Sθe1dwn~w_t7e9O]g\ΌM?p5 G/q.}⏞гP$y_/kEyދ?ͷڏ|?}ӗ_6~Yϻa/W_7O~L?笕K>XşGgu{"mK.x]=o}lcA۶ozӛ;ggge/~K^7a<6n[ .@Gi)C #IشjeUN7%~1E 'Lyj()< D|&H@64a*ˮQn/Pctc%%n"HHmi APQ;h!(]_ 3+6Cmk 3u,=l {U# 'Sj ZI$i$˕Zj;ݲzê70gQZbڞ)kRySV^F[VX7f=R'd@ pđvC Kϔ4E _ę1fhɥ0C9Tԕ R xhqOUui7)p IB4 U γA'.^RWTiڶcVB@0Ӡಆ5*Pt(e}M,Cfw Tb ԟn=NJaroO2_KR$VK5=AO@vKU4.IqE@˜Łr*2~ܜ=DHJGo:6xXv42@[/Kc+7eIeRU%mzUuOM]O8ʙ:b hmXu gVlDT+;V3ܞ95vivfw*7| O?<^{e|%wox;/|Oyݎ řZCX{Ϟwr-oguK: |C_>{ɇzu\6 gp$<cO_sZOs?7y׼[ypYx&䚰\қu|`Am~ooyw]mlc_7x޶k׮?o~^WozӛTX'HfM^F*"NPebʉVͨ;j. }h ز,k;6M\%m*5M HbL11۽k@R3ͫZ@xHKٛ H6֚b;+$H6BIŲ' pYؒ> <$,+]ҮH PVMȪQ)IgV6,IL]VJD%娛Zg~{ /x¶CYN%C0h[Ĵ %\+H) U,d8RZ$ Wז Nؓ8*8Ԯ(G %̋"yR]֔(3j$HLtY& Bl(ɉB=@4KG s jLz"!djnFȃͅ%rj,lܛz Ԋ(̉p3ڗ5vt'4B@;Jl-kGJ>Ntb<{uƢ;4ݪ`Nx :e~lպVTBJp$i(?h=…ZbK7 j1*epfwlo*69w9_|!O~ꠡ_OP1?|>yG_ ?^|1\~'wtoGs9sC?^v̛ɾ,P} z+.CnNj whޮ܎C(CX>ȣ;=i ;)O}5=ɧt4[iYh:p;gwȟ,tIDATS?ˮxyn<>I=-ȥ9ٷwy2ލ]؁?c跾׿G|6񟇏~^O}_wlCk.mz $4 ش*%$PJԬ-$/7gR YӦ-m4g%e{s"7!4pJؼԖ(ye([us%,ehy.dD&WI$zt,%)ΟG6mZQKT`ʲ5hrPcKԒ*Í=RlE۾v dd+%%A879JbqG8spb} 5ҡؼ?/|]P0o"g3v9&P]|EfCeL^"!"4 .xȤ9\]̨J y9f7>#YBi6XNYTzl*B `<`:[ƖLfZ GRÅ>G 5" P:jcE>rC!$ +IVttdf ]S󝹎>[{%꘾5[,i09p߻ Ja[ a9ui,iW$ED(C$ÞġvyrMgˮv/z;kV7~1n n1+ Ӟs?_|Stح w7]c;r :st;^!qٻ?G?od형ݰ 4ڹV@V|)}.<+w}9kHztkVmlc_>G?{owGflƗmX<.5qt#mkX&-2ت !$fʞX,̭Lu ]ypBshGVHC5/H0A21i^%)})VkI%E;JGN~ X. +,"ЃSC^xrMXH["`_S-+%E*57[0ab@Ši!UaC$0R4r/O3Tm_'o|p;%}׾>A;3׼'sVط!O~7e[^ʋٷc?ySħY%o^:]>뜝g}#5[c7=W]py_ѷT6m|`~Ϟ=G>pKL&O~_|`7TKZ'išUJX)t@]*J!M7OYڢ0,%%伐D'H~1I ͬlM3A3G-aC,mX5mX竱̭tI3Hՙ3KsfiѶ躬"FìIT2K:ZBQ)j,Įd_~G[GW9aKRKCq+R*= C劖تG A¾'v BC}vt7ͭ'l TaBS¾5)8%ƦZR̚!)$ TkPF !4:a B@) 3`B("(05ЉU-}6*iM[ $VLk=F6H,E ?ӨͺźO *BXnZsD,:<<D5+_wlvǶ:hG>_| | 7dƑ(]dd/?~ю_=;?ya_?pσn]}s;bq~ٟ}~I]?E\\w|O_==o{39 ߐ/}S?K,p?/?wS_gwk=ܧ#O{#e_~wWY.g 0?V9/uɷMʷ _z}Ǔz"æ:Scgr{~{xKgu;}CB:p~:~mO/<3<96{#RweܖaBe^( 'R@v|F8B"$3+ѡ2tceI[˾S,yB@vyAP-SӪJH 5$}WHTXKͨM"Dd!U XGmte!Ium :1\=29N0`IS1,rr|DjK\PHiSX4ĆfDR ]um!aIriY[iK#E& Zh7 PVx__,xh;Oq%O;o[\rd2ySz~w~9Hk.٧K>ƖVd{?;'GlwϾwq'7~}⢋.:|mc8:^>Q:ޛ!x/| ~/|JcsVVVKo}gy+r6{Gk|#g✻˞'q7.Db۷]8 $xܪbdn@G١ ! 11k~7'ܗzFi;d@TbH@X ša0J{gwݵXUܟ?~U%oHYA*`#i)]HM$eKጺaUδbT03iղkft9tsJR$.IrIX5E].so=X?fr!98DZR:0DdNr^zX-)^[1[uQ ZKJsql*Dל''/]rbP)2Y<1rŜ:kGG[߱ѷuv +tt3oێ'Z[yziu{7aml^{{j O?O>{apFnӪ) }# yfobZRqМ rbeO@lV sb_PS&`fr䚔C0XG頛wqʅg%7ܴi׻vټOyGae=BJI4듟o)4 jkރ9d$aqrI-L95As`K1NJpLe'-eÊ: # 4j^KKX85b7Kڀi#5+T mZ%cņRt*Ki\ؗ" XNVuIԒ*++Ͽ>#EM2A,s\S"&&$C٫_6pxw駟~vZXqx尯%斪 ^ˢ_bf@ͮ\^ ˜ 5fĔ pܢ`fEG"%Nvh(cX_,/"Zr*ѐ)f#%Zы HG\$~rNGB7 :છ@ SH\nVODٰ$%*P #%2DBZUSR2' $Q.kJbKR1R)تH$zIZBOHm)W&)caNut3+0ArǦqo͟xyϽ z=H)n1FhdpvaQhb#SECPxj8Q#___c(w:7dy:J$JnϋMrdc ? a\O.9UebeK&l*k.95AFO𓑤lH"".ka..kpsc[ D e~lzNb$fClq4, VNYH2j¢=Um*Gh 1ROawޭ qϯ%岵nfEеБJ0Rs i(B #`l}%bes@Ê=ɅryJ6H}i?j튩tQNgDSޣp ŬwSsNi$7ѕbD&J0b:,4LB"4e~+'ftgS Ȫ/G 0rfE!F44\dTB87  aXD%mxPmKتmd0[=PVmtdCݴ85 (^0Ю R֓)9 ,#ɲλ|iJJZnYt%+ f3trF(!V R״$iE9T S\ٰbbeE9{  5e5/Ve }N0c` zAqF(C +"Tb٬%J_b_R%ӤQ[Jm+:i1Ks)77;5_5'^x_|~>{쑏mÜ-k(r1@-6^!7es朞9Af HuN97\z֗_X!0 TEHD ?8?ˡm1br 3&֮o9"הvdش t#mV۩]Tzߖ4f0wSnJQ:HKW != tp6S=5-EJX4YD*jtJ(.@smzNlLU_؆~êPkI\)R'$ƒT8cf,r`)9A'#KIyHUz_ʟm]Swsp z E*wдH UDYHY"'و`;UsرҜuG~킗嬿xJ#)o݁R3JdweVfVSJHĢ"A\}YIꉭhW"D^,)-"HOL%õy0p! )5[T$OYt-9zԬ: a%\զ֘7\=ϴ5ǹ@)kVTXP9ME Y_i[:zYPIlK{2!g -%Qr}ιUa&nJ%X4d$UZ|%PHiG kcnm%法FZi-oy_c̜{Ї>3$.;vGJm﫾t__?MS?rp+vZ6"|ں7'VVVO9#%6i18pN?8㌇?Gaiq .gԉ冀.rLV t#:jkwVt6֔(^hDZ],Di,ȱYo+nPU B"*!!$8a{{,mPR,>6.R,Azz"[.G4,FڔbFQa8!)3jƑ`P ;ʜnʒIJk{b#6Ȏ͜ }I1э"dE<'nukk Ǻٌ.B{Vb# 4˙9ZR8"@'ذbnE!) 8e?UZs͔aq]` 4ȦWǿsOΏL1"$< VGg,owvkYQih&xoK"$AjDtnEֵ+4%f,e-eJ?+\kZi^IɓK'Jܡ횓DM:8r @;XDȦ=3ݎ~ s>4%BK'25R;F~1Tl\t{U"J%rAI`L@ eUb(rtj>x*5`jeMt&BR4F#cÖUK3[=sNlݰ^_@HԞ&-uN]O81{Is KJn8dtwlvVzoS9B޽{39<O; sG!g?GNί̾c׿{696|a5\ٶ]zם;w[b)5'Ւf3+X!P)Brb+@6/h[V5&HvԑJX$`F8pJ`xȷ^$+dCQJ]Xٴ2A:zA1= dje-q]l܊-$UHXBhn76 u*Q;-51ˑtjOSwDj& bƩ ܴ1дi]eʢ[Ү])1.EplZM'm$?MX!e$Q74zXT)6o: YO,2 V%BƥO;pݲލ2iZB cN_AKܷfm)I4:rǸHu,`6jY8\h@!iшavt*̃ d/;lZ4B@ j$'Ւ #F)$u}',rYȖ [ 1Z%:6J,ayToYS9`r ե]/Ցڎ w͒v=1'tNlbje+}EZʖָHUanԁeWKj$@!$ɀ̍5&Ȍ:Z|D2R=Jl/k KeJ$Эh0\)W/@1(K|yr=w-oMkO m^}٥~VYgrmrmlc)O!wN_T@dA:D9d lZ%bc\,eQ4_-;dK P[@7΋}1 =OftTb YA騙g\n63Xith;R[O>BrE!!= ^R7/@emMsS+i;nle%KJ,L$P@-fsb>B @C>V]0kYXLxKin(h9'a3KйP))M 9C0A+&Vf^[ʸ<9~Sï`Qz;vx#qg}ُ83HK)*s:5Z%!aS.Ռ.@Lot0 S"v+E ˑ<=0- RIVj]\ն SMi1Wk5rRf9.G QiXX XKHaZؗZ %Tb:htYjvi(Ɔ;=h}'\V.1% 48pf¼X5ݗܥa@"<4f} Z}ʞHKAV',%{"C.O~9ܱ _9'y>|6mlc۸ e8#%[:w|IR"HR-a(a('a^$B*njBEI`Ah p'yUht1YR<ثvY!63iQqnȌnfE!u,8IYh)SP @aKRlbՖMi0([OtӴ%!/;3]v\%%P b+aT]n 74P<Ć%r]žH_\O̩[3+"Eڗ`KUZkij)lie WśC' RXָKZRftJ5ͼD("ئۡHcn-a=Um5VswʝjZ8T]*v(GB$*%έhWt6NAHi0܊\ӌfd%r#*HP%#$P5#Z[qDb:i9։la&Г/d@mYꆚ;6:8l4ǓVݼ(sz=j=MǸYN@VcR:P6R7e97A35ȄlH$QHh[9A._CJIh;v6nBH뻾N8^7^O[KK// G>q6m|0;z-d1 }*IˊƖ֌z /%Y1[`@vY-K%ToX՗P žokSwV0XzVU ƥ >Y $xiN!+RNל*sZbqfeVHc Ջy'PJ\EFDЖ8h=Xu[Qk^Jy@@B 2ٲ"P-\ *@k.587_vkJd\A$v V0%ZڜV,lWt>&~&!G%eQ3'aM# h{뜠ۡ ~CB3+ؒ. *X %glYCqXTbTrxf4%yisZ^8KZtʖrrlMz|-vX":BZ:SX!Xci ^6pBRy PUpkf}irzN(A:% %4t# =McyrƢTJ2JC_HZ0:V: MT4Үm+MG7jIά(%-inAj<*B[`UZٖEKW *BЗMS+K$naPHL5N`3+ ZZFVnKGM}1/Fj蝤 Y=JKk,DrˊR@,Brzݲٻ;Vbpfb$_RՋ"$R2 1"Bf,:ZŠB~ܴ/v6޿x@+so_|eioCr[v|~g?w^ϾϹ&pGW_x|`-}'|7ÝKdrED? I駟~߰O!}kn;ӍpF@ZRKup9BⲡvTf# ƥemj[%X$ȮEzUWlTbr\aμK;M${\[v#5AYv IB`F?TJI:fqӮvq.0ٰ`n df]+$erRgFIemsPhW"Ւ:hSj^nX^+$֒6,<ԗc+=XHʔfÊ-uELm'Iy}I3\0΃xMgKkaXxK$',`ݘ%\ JI}CB*цv44tSzU' &ʔ69&0w6eE㔺a5/iIrs d-C#==/{7nZSI(Nk(fS[| A \5 `$X7I̫Wn( 7R5gQH`+a;-LMg-J$tj//Lk BV&H  }3,*@59ȖIA]sqf [,V8IiycI%8F0"rV{b9M[j!-}_C3m/kK~'}3W?H+'7ط?eW89Ags6n7>я>8mlc_ y{{yp766666|?;vWbrx .Jcj.~ fy i.+6=I7,bkdJ^$emiWnfݏ5HNb5*sF{yc~ S'$6L,[ Esc%V7{ʤ@j*` Ԇk=^)y;KBRMi;/*I9ċ04ԛ⨒xش@_bC7j͇j OsU9ã8ЮZŖ5H5s!r\%B 6I)rD˯Ǹrl%HKXlRKM3H+% sȅ&vry}!kaO$$^֒dHHnq5Bҡ@sjο1!}*ݛ`4tb+ IwT9Pul>QvffDy'K@2˚`fh`NNԼH$oJnlUV2]Ui lӪn+/6SmОRb  %qdl7,]Uk[ۼǍw4#:J) Ȧ!Bbg%-jE+tCJsMbYqfGj~#_ |ӋR%MqqE=iO;mlc_ oxGypmNarprA+sDGWZQP-ZJ KAZ%mP5b:fذ:6 iU[us9+rtN8[pEqv(\jk[ʖVIr\x 3cX K8huG2nzm:8VݴեIJH16[ @Ba)ؓX"bjڎ4澁BenfŚkz"9fi^On& Q[4eiC NJZ[l/lɚXfb*@=/ɀaCIlSDaDBpR 2Oԑvgn!X I+P ]HL%Br6lPan('apb>@wh@Ciz*$0'1uIA#S\A9`NL*\IHTIj2=z55&cS+Ys1s.[V/k43 fN'U03euNTB nJ{؁֛[QU8aEGד8e!=+usc<^se++_/l㫈l36q8dzonL6-'ViāvZhK\aII$0=nvZѮjWKZHN{j3U6TzO# cӆZ"nXqeD,:S}cfԩs+6$dYۡL`Oq$a(!sݲrl/ 8Dh:?n5͞xIM4ۛܘ.39aRҊK*$COA$;#u8JRnY)@_R! 6U%J̄P 4 D6V1s+ Q@ MnronAB!*R&,s>\ɰ}SX:XIRN=wTœRiSI&b& pICOCn,5j[Mh0xA@.) .zBd[1 2ۛꉕɓvjq(QBBҔn ZKu0ȚWA)Q ,C>@HT95^l5WN(N+Cq|x'ncG.m Gl_w8 .C$jU ^hrs͘ipS5,%P%7Sa )ִYN(%}8.*.σOl.PJ9f-Q*5Pv[.A".TKH6%\DyiёҰDTjIs4r!uԾQA0/dˊOZXrFPc5ZIx_&I90Yt[VJXd@PBt$ȌNͭISUciIزZA!$,k\vY-5u+oL$h652vP'VTII\v²%F܊ N0@ԓ69e֓׮@$r~;VV o"OGu3:wg_xs_ Gs`iv|qG9Q/mn^$rߒjCI}#ke  <a-ɋ2nE%mTlƪai@T'es}ItbN,P, Xuq$% -%6ЈJlkjIF-+'*5\!T 4dJ uNirM#E_$G=FU-}))Kv H,K͗D."7U ff^Ll?x@y9vx3')|w=,H~7և'wSr{uޯs7Nǃ9ک~דNE_Tmv!\y~c~8^<{w}GW^5='޵{?3hY?9<=w>'|u}o&@u}Nܽ{<C{9㌇>}oja}}_ G>uq@~-qjҀX*2a"c#7tI:I;l,vJFHcŌ6/Ws@bꑲ:iWcߐD:%mִQ0P8Q;7 cMiEO)(I}j@]5}A-ij4YqNv0gԻ)UVt⚾`Gݲj#U a6?Ҡ,S+ % Č.dl4W AjMt<!1ׯkvľB:+ I9ⲥvԱNTi<'A JIvWrJ^bC˂ ¹FY& Ȝ@GӕNXi%jC|1JGQ^G#X l<^vm!al4\nInNR',%)X%QgV渗:ooHՀ8pF7cVrJj_Pvj[,X-ɉl͚rʡrBMMc ݆&bԁŧ.PKIaS^l"]âk< %)$9Xэ:: +I} Cmz I-RGWKRa%$)0SZVwtSڗoYUK,ټݓT"H5O2Tۡo 4,J26tVuw_xK~w0O}Sv㓞~"?ͷw#{~vo=??ׅ9~W??}ߧ?w~B^-^g_GwW{[sɇ~W^uz7pիλ$݉Oݷ\śן^%}[_p Ox݇^pe?/L܋~Ǯ}鑻i?|>Cojjauun#B H_\Sw}#?>(?o|Oߙx7m| p{_7Ǒ?>ʋ/w*.⫮Wf\pA)M-?`Q(`]GY$Tb0QHݴj_KCA-tb=%'F@H'@-]YOՌn=]%&:ʜE<ؐ@3r"@ 4]NPLZ@-WVDs!i͒v}* V"M{b.iۓm'!ҍ3)*Dfyorz UꙃmlZ9v|0rӑvKVYvIPQ:ԓ(@άt-}_B))A*\4KEXKt~cfes¡m3I7.o@Zت<|腽Ǝ%e 3S A?| Ɓ '(0!džaU'" ᎝V>ɀHv#?k7oi'wI_3xy󗽻yٻ~GrѾȯ +_WU|M^~N=>^/]dv {?aɟ;\~ 7l^x9s9|Nnv l G~)åN_kn_8-c3y~3|:>tu!x7= o_~M+?ޏ?xݘ7'8 3ړ+r6z~ϼ?SO06,U_؊ "5X+znLH%iE'*A 趬S;gm*a|w>*@J@P$|mն6`[[k(bՖ6 3 Xd(Ni9c[[T<{Nk;|;Ɣ)[b ӄCʹaFhIBq}"u*5JhTu ЄGXAdg:Fa̵Lf,適Ua֗pB.  ˒^@G#ơab~t_T׭́zh׋^eAJʼnTIS"3ns>eΡ"H(+Y?.+,m%aCCl!Z@nX{1SWB[%.jrjсit2{s&M(@%IV# 9vR暞A{Ι̼ʡ9L"/[4֋4Zyź f(j˥o;:~}Nw=K{^νIaBmC/,$#JŒib}? ɢ"%B.do"JiҪ=%9ҢZԃGz6yF:}pȁm4*%pd/]qïz3oi`tW_}W_grVF+̯/zC޸ĽĽ V}8A X=wh(3g8񆷼?9wC|;$EǚG~2g?ng}۟?9Ʒ7w}z!#yT> ]rlo뷾uGw~G_!1?YϺ3ؓܝW_{^fZ4aXkjڃI$4a"¦*5 eY(,׭'Pt' 59 (ᤒ,5%lj-[<VٯssjͯUM%)@IV@%1&/ eaf]^Ex|Ӻ9Wpd"T#5VY/g^eL͎|ܩt`}eVEm~lV#Ԗ6C> pZ3&Or.Nd,*z4^80bA aܰLʼn +uU"H<=CWΙ<2dQ6(̽3u 3M-I8ŭ9TLWҁv@htpe$z՟q ݴCJzYͼ:&%|Ĵr˅41L h˜H D֭Ͻ $ рȚZ3ir&LԺu^ȚUucm,Hk'S%>51Wv8( S죬15HX?Bfn^M[ESQ@Y `x,5¨93d"F51RPjۺ 4:W<'6L_v~ab:m{a6;WӖGCҞ 2+AތU1rw%9ƣko}Woyo<ޗȕ?[nw_m3uu}ϼƏ$>Trxwk'7kOe\KƟjT=}/_'Q=9}//NWaا엟7}8?㯼?r}/m h~ߜ ڟ~'{ .O[f: w~lӯ7^[zGlapR>{^8]/mQ=??9M7UMV(U[[w0>o|;> L ='崌ž^L)KjUFؔqDߴ`,*j1c D'-= ڰ [ؾ*hh%ԋc%aXXS \oO,BbO'&90$,'* uUܞp:ay:z \{3zPFؠ0~ ܋vVcm0jc\ȮE\zjj) Ҕ6ݷ#wfgb-o?x;;ox+/~_ŏ~+>w~=/4?ve?a?=}Y)/ݶ1NSW|S_ؚD7蹿YFG/O}Dyn(gE_/~^y򹯺w3t]~罰wՏ|K.S)!>.q磏;SN-dž{T=А& /*d=lraA#Ɔ1(*"K?a`O<弇mnnxţ>x?M7Yr:BW 2Z}L<Ƞ0ͼ̓c])f3Sǐ'+T9b2E܁ .S\K,pTͽ+leJjzIn0.U5">sNm bb݋FZxqGcL%^dhk5 ^G)b{LBLiv^!:q^aa2 %a>1^GLojbw;|ԐžWRTQ%aϫ2SpY J HHXlY UXz5~̔B3{Ɩ$T ֘|<{^D؆ ', Reg< 5SȵʚiT*#u f^dWF?j} Vʃ Y]cE "0Z` fAl@p2U˜J* Պ }_W9jvoyL" |_k&B3G67wN`pun(B KȆ-U pZ s / z-Y) C XKܫqˆ5Ò~ Pɔ-gk 2R+v -I'S[`"XBK++Om?}o7 oz۽g;?>I_G_g~GJ?keOUz=WM}f^x~-??~-?}OoAxőCw<񶷽 ,m0DЀ3i-ʲuȆ-KP S)zqju09`bI(h2h64QXUD1O*֬X/u]/$0 JfQl+ϱV såV 7lU1%Kñ@Zn}n֪遐ثNISI$1+6X3W+P8 `Th,n[;aj]fĜw[Z;roD8Sqb* +1 } PcQ`n< {#e^ e݊lUQ2(Ag&oPS 0N{1W(Ś) {^xM#S 3O@J"XbjVd+4b t3/Ξ3[Z)ti@PPk*\AHRTΔG1S y3'V*ĺD2 mU3ip,̳o׃`bCAwpUkϸޫGmO{3_,\=s#?/_tL!'ד Ѐ.YwQoZ[ ({ޖqz(r`L"/Mn Z^Ŏt[: w,TR0`OY/dFvԇ+K~7{3.{7'Knk߲{y=C g+,fGշշ^{6m"j&\ěLEa1u9n>o[{$,'7_Vo՚ S*^EYEώ,|%L zMr|"ǖHT,zغu1EB8nlCIO zEs,TIT,kjlB`l)Pkkփj-3i)*\Z,/ }EpЋ[tNdb 0TJ&Y";μΫKc(E[5M9e~h\_FL OS|[.ĪdYruo5/~㭊^`TdIsE4a1h_LJB8i:usI|v/w?.P>~WaO}Q~?9?ly'v@yUnW< | p=?~,$cQ,N3V +^KƢTL)3/Ue^!K:LZKjD7{p녗Lk^aju5554Lc7C;!e lO9TchA9Ju5c|}篼_O/%w<>ܗ]m賾'|?I~yjGp O8]}v_٫`7wwC[[[ٺY!q;!nmm?c?wYRu4Zq%krMN ̋(VpI@/.pZQa8RAl"KٮhІu6+P̽]Dr؞W.T8Mž†qbY0Wr^2LT#v`vZ! 4ZxŨ 26/脖*aX$[.+iPYP8)T4^x$l/=,mu0sL1H Q֩PvMŠ^ET3QMcC.*Τq8fyCv+YpoA%*:R-Etdݼ!rj2d*f>2(;8γN Wsy!%s3^$0¢b m6hD'zOl( I8iZ1 9@b¸ƁЎk`p^w|ѯ}oAϿo~={3V9@#THBRvͽy1(L#c+/wRՠP3V*UɦAHW+bDnc1S4^1S` ęʳR;y͈d*rfY;,f 7 8wo hb}^ec!$ ~pܷk|ŇeQ=n?8~EoM/ڇJ/zMK/{#{ 7NzX__馛2?~gqO뎇y[qbP͸sNBet$,lh m˶l51u\aEcC&N~>OI'r]/;Dڴ.T1Eq3=7婝CL޼!af]N;ہ(2t؀\)ADJ5#&A)[0vuJƙ7{^$5wY*zXXo$t#a鰄aaqi `l qr75gSs Hv;.%SܫLUŹ+μ*.u;줥VR PnEUHJ@~^%ӈ=/V h%p 툱DŹ{N< 4^zUP%|dCq -sF{Y&qR1(+ߵ6S?uXzW}wK9ρ.JbTk([z)`x4,5?HOcj@_Ćn[?e/j(kLT,ۆ[㦃5f^xmmZ&l׫]gshE%Y̽m8fLm Va]nOi5j2+خk!lT@nOk8}hv*%dwjpKϷW4?܃[鷾p'hfF?"l _[`t >;/W< kO衼|rs;[!/]zl69!qsZ__ح~+^Ӿ[q! kW*0 1.6LŒgU9&1짺{) Ћ=+Nhj12-vb]MY*+پWFm[TW#GMr+[?$Ur?7{hI߽7 @|=@}5Ǐ안g`p֟CrxCHE/zK__~@;pԩ //SJEh [nO*75fWkĮc_DpMn3LȔ%# ZyQ[ds}u9f]QLlG[ڰ!;^:XA_cr f íq=rȆ1 LSm)5ӈi+TL VW%B2\V]obo%qĴrGڲ~xWQ1V *jZgi4>b˳^ $ԫZ$+R~mm ^z'On*#ʁcaHB˳#aW٪\nÆ1R;#4zLt4{>*׬<%tڴnbZ:W } \ru.@5)ȁTljiP÷tsSEd S' KOI`yD&U7jeep]vfl}5/?08Z(oɭžlb]Lc1cI-= aWr`tm4Q$?ރtT@l'Oq8}"ypwH>nI¸7tC8++?'??pnpϽ}DA"x<6p J#*Pk6S)t P5FGU+)qj^'7P3H>`%|8=,[bcCN|WTX 䰕d0*j5vZziйʃ#a ʂ+!ʹ lpX([*SdQ0↥JgRp! K/;%Sá ^1 h$O f[F!%&mC9hT* 1 2*<*uk{Xn۲~́SnaRIѨ]:٘Ú z̈A2^lDj{mˉ %@MDQ#Ƃra~a8b dZn˺ BBA%Ұ۰R1SUPsaӺŚi\1 }4ۋ|r;[orv—"5}D't:y< DIOi`%}´6r8^P=/V*j%:YMߴnj](f^:fd}\MlSB@ieG6L%=]݁DX,)تy}253 *rW\垪}^;?>9xĦS8fH:O}Ż?f<W{ z4p,M#)zrF g3U3wߕ2*gS>/{|쮎l1lj"-Z$ljpH,C'˙%kkNEN\*MM$t KSYX" 60fvXMeٽns!a<f>W,kLúu+P i) EY⣄{ `w//7?~KŪ)V緿t_3ɧ~koi/go{כ |>?(Wտһew}?!qC!믿~4= %ΎAy{SNݮ ߸(v3d@r#k)'&TA{넙h,naX\GjhP k]/z$μX<4Z .eBԁRUPh ̼yf@MLcF_xs)Ռ kL)gj1ULB"sqS%q~ʴa].eir l7|l}X1nu{4:&S%<\( SPaG~]?W-HFץN oh'U.ULB+shM,/T(Jx4~VT9ȆSqZ̙ЭqHٳ uĺ Jlv˖ NY*M8JEl/i]9 K ÖҫB{q̐bj\)FuշKJBu A06lȢ( V[3mH †g?N~Qe"!DU_Obm~ z+a9cb75=Ol|-咠]/ DUn[`gRe,` >([z٪hdi@=l+T/OtPAw]ƅ Gǐ@quyVP\YN}%奓eSl.>vcG1ktdyx9 .ߧC?yCꪭW\qg?!qC|A//%/袋O1QDĝF;Qcǎݮ ߸t {ΕB`@jZgjYSa݄CY1sճR!JԆj 55\ϩȊhr:IurS0h |H 9# A-,5gR?XBs/B!;7(:YI鄦6,T(|b J) P%U{̫Tr#Z^ȶmm'Xpʛ[c<3w-bCNWdK o~_Bף *Y( %V_حyơD:룝TϼJ̜|@g} ㆵڰ5BJqj=2U1&+t8 b$VBR6,}zr ̋N!?`9?am-]gJ05m(0hRL Y}˕+d='Pz=/f^u*}˙W+"lPMuB[La+P%4WT/8]^I@HpGQ ]!㡟[<'>xG۶W]uէ|ʧ<>!y=!qC|boᆗe/w~'UUMo:ч!Odnk${8Yzb0WP 94a$V;xUM-9ft6Ur;\.I-j6w a ڴT3*Q,ƌ#JȆd]X !` `?{Pxc+^֫pXsf^bY/OQ۰i}Ƚg6<ctRFLG/ b\HBIe}k 8`s (wvAcK ScԺ#nZR9xq^6ϼ^G̷L|bǹLl8y|I? 3E! wu!d{fZy#,Uf*}TjShg{(J5}2WA{cw^[gúYQ*W}}ԋ7m 8Q!zA5c!5^UKv|=~.PThU^hQ@K :qayybTR% (VԈ^óBwɹ!><|/i#ny7xUWp;ycG}u]9r[>}ff7pk^ygynt78t+v'}ZWPobĸa)*\߄Ui܆7J1&Ph^e/đ\f* xôfN`yLp&F_)̽Zݶ$44;^TD`҄a}˜8>yf,LWk@#Ɯ-\`:X ƦT0%p1cEEq_e,VPp [>8(;Vq5vRֻp*΅+{m)A;gw,!(EDN~U7|=5nPa}S֭V*ƌ٤'*A̍KfX)=*BFLR UK}R hl^y1 H I}e\m\5WoW>u[eKEIe?=j೹eViGޝgqj}7b%ӿyo^ pQƩ}O_̧/8aV5Q@;<쮧=կO !q N>mfx w)GNؓC3{5_5g=я~Ӟg>~?N8${f} 1`B[W5ƶ-F6M}]fQ6m8jdځ*gAi &L\MEN2ű ܫ5.Cēi\3MoTs jz's`´U.Jaa N`")LO2RFN,MB>sIMf{^fA`DkPB 9@]4`tjƣ6$5RA_r%]&k/H_w؏sEƱu_vl7OB_~_qc/,MC8!q10C)<)??YWWo=GY$7M $QB@j͙4N-B[WBQ\8SY n(3`ĸ*W:= B+:AcjzE mfԊ3/f*y 5niD XxltQ*b +W1 lJ0IPQՎW‰vs,f^TM-gc@A0՜xWh&֗Ll׌wWa+Y+:laY\vڟ9od}P\\Y& ,S%djU\ he'STȺ܉v\ pPy{Z; v4%UérAAdF Vv&էR3Śn@4pSw//yS;BfLf7滷s_eTeYpU46TTFXAŹ4@4$0@#cc rDfL S>5t#zpAq¡U^):щ^y# u6&6H 4fjHز"B#K$μ,0Th҈A4;YAZ0Nx:Mmu##,ϪBy-F>!w-=tASQ3&qLն<jXWP01C!,.N*f^*(Xm a*GHMJٞ;JUw҈ibǫN@XiAڴ*`a%` VLWf^/U TIy}EjO*B! duY;5LeVtY _mKY{o;Ĉqx/}5jM{ ,LS| 4haǫ"Ms=3V%*d7=[FEp@ Ȗ GC\3e%%1_3[Kҽ6Z3 jqb:jݖ)GDqN ]&GjiMt:-&0(}|:5;=KjRa9pF uWC ak|_EL@<3#SqC SO\%ǝE]t%qwssq{ ^t99x+>ч\¸^W;^\8jŪ^'XBlIWf* `A9l昚o[!ajrb){uL9L#IuQoP4y]s{ss^tk80TQr4ހ$dfM}ř[C2'6jaGtݨlq99|涒ulmӄf:b5v٘/e41/GR+0n:ʼnlK3Ȣ€0jPikM `S SVG)QsL3jP(8jnj ӈLQ%zeKX# IV#师Wg|aڲenHGIN8̧Z^h87 ʼneK*"5Ci yr~78$3[uGn{z@zѠő1'q땪ַ}?+/ǎpk['?~SK83m0eCI0 zzqo?+U< 0 +)4r".@Qeʅܱ/$" pZaĔl3wkܸ+pă­GTMMlNIb̡ Nb+{q%b.zO 3/NyH`Yn=@XXL8dߊfj7Ce]^$;ܷC[=W|Y_0lO%~I-CD,>!t'=f~~7x7?~^wq(&6PeeZ=BcC Oơ (ȆeCzq9=,U556%[` s/rx4(,<}"˅;ʛUL^ťUѪ(I9emo(g'6v#b+[X){ܫa[5sp遪eB uՌLT{=m1g &pzCX2?ϸ0:ϴ\.I&f!ndImZZcqJ5T/KjjA#44VPhUl@{rN㠳z׫zUőBT8!ƙjBYn_}zm^b`;pճ$?ڹV5a[+F1DD<ַ=W.hOz7 fp@"@ P pU_*ZJx 㶥mFFjj8HX ˼,RRK9Ҩ\0bʴR{1 nKYM9YEKv\6WT8ʛک4:ߓ ȝV兤`)[ lP{1_fGBnPP33_ ) ^se8^ÌIk//KW?էݯE!qC||u_x^#+++kkk'|j: .,#0'kw ƵS)b+֭˱kL,)q%YJjj1[fܵHH36X2%*2%p`b**Ɔb LZ/^f[d SC_*jt7uϛSKc149v}4ƁrI剾ѝHAK`.nBaU/2b*p:VLGK(#WLW&L 6mk6twԓȜ%7>*QA1R݇e1x3OZ{KXBAq90*7IJ&I.V*A RՌE$L Z} ˭x)؆b~KY3{Y bBD0Kۍ6b^{sk9qG^so}.+IDkD.K\!$^Khbh ( w=Ċi:h_U^5h5Oz^UQlRN1^\!Wp:YH9ry.Ёtfbv,TZa}E(ܫhb#qW5(_먛ˑt땊N>2M xi⾍f>RCY!qC⣎a~W~ Oxh4?ÅvW}dYY}}}oo+}$Uw뮻n!P":̼ Quvo5=ӕaUphzioY-:8bِ%^!GoXoЮQg5e;'&6,)MG 9 ->ujoX7nr@Duk[֌K8Se@CaY؉|zUy MXz՞mRH^0L[(7J*P+\b^"dZwԺO*z UJgR}-zϟtK"9CDM͢诽oK?xͯ8lf^ ; F64V"TLk5SWHm۰4f*P398W1m*ke&טjz4 TLGC2olX=M*+^FL G%ĔTU.e>`Nz>s҈1֬z؉Tb4`LrF+V^FX6n31;}A̫=NQ*v|4 8@5Qub"˻Vb׹NbC϶ |m*jbqϫ; DO,nZ3mZn:'xK:~dž^B{67F.Ϲ4  sL#؃9Ā0xr'5}/,絞}ᨻJIe8!q ڽD˿?o\,MӼE/t'o??p󇎏ԇ_9hJ\s5Y5\hu)'[_16dl(L`eKFqePrlߋ3]OQZf^Pm+l( IyB\*݁X%pe8S„iTk&mZV*sa<k^Ě4Wm ?R8֯Y?a:^xI3 F-*jjX7 3o^9́ 98ЖH1SIMˤ1D07^Ax&*;,Pk h@DB%dZ;ƽV6{K&?t=+8QW~U~Cc⒉@B+O*JBP>OKzM_3L*5Rˆ)S8<«VJž'SbŞL mbCIUEE,9AD@ E@UpХp" %SX 4 *d-J̽jL;"= Њ.lZز*U),^ͼacMb5, lK&ha2s٩4JRC{RlpJ@UB=\ rs B.zqW(@ASЩtamipPdQ 1fޜJkR9@uӱ~t !qC;Om۞:u[K^7tӉ'fɓ'ΏQ{ԾڹŋAV?GqaIp׌0f :^̷*TWJ\eЪrxXm@ޘ :sJabJ-+6-5LP1>Z ^1>SSF"OE:a[ڰԊod]P@9jŘ~, ֍. +ũˊy@ .cߋiڭs5lCi=kSgn;z8w,=<,@pٰ}{Y[/*U8o42l/گqW?g[[a9~lClZZ,5q8G}o^wo~=:nOgFX5}jZ,^U循:8Fp{L| ֋F*l%VԆ#ݰ e@MjL[glȆ ~MΓLO>vӉ4"A(TtGL9>J&-O7_?𠕱SPB%Sr`ŘYqԫX31J(oWiNxbSH .9ۓ 㘱a8fúGlQ1 YTĺ|G+z `ĸVLcJ)!@+Q#Ɗcf:8s+8a+Ċ1Z/\4jR~rG%i˺v>?K^B+z}"*Jx}qdZ[x# ׭/QD?o@ܷPVJ_؇?ї-4!qGO>rHcrĸne!nrQk\%uY%]"XS59fxƫn}Ô'{+/s1P{.-S}2MϤCC3&J놩@'"8碥AY*֭]lUIpX\x5*s҆+硧u0Zܲjb#KGBܰI9J1:eޚF N{t0sm`zdf^,U-mXW1lĸ@ξ[y1S8a_!EYyCe7zqp25^h(^:PZ̀A:ĜW9C[> fyi,A6 :!UAE8?Uu =,*/5@vAEmYΤ: dI8dú#[ vj]ȯgjLŞWvݰ3/:Qf@IUU:lLLl@]P@6 {^03;NŮW3/Kz$f}x+L}avXхW4P޴ lU,U$XC[:HI%%Ne84(Ԍ5NN!>F@ox֟}g=3[~R=!qΧP q w/~G9sm[~7|7p>U3ڑ z~Lfvc$[7}%6=vlDIazH{f?<^lf%_97yOx!%k][[{׻׽>Bx^wk}}k9>|o~U`cz>n}W_}W~{Crkv2`?뷭߰w^,U^ 3NjUH_ZK%fFK4mpOp OyS ĕt.oj/N_3~3G39_/{^[G#/~}>ƻ^ $?#4gR LrF2jʔ(lפF|DM,ܞ5MkGA`QlUTL6^\[*ʠVELM*4L| V*F5ՉCT+8#+cJbNlԘD m #?^'pӺbP diDq̫ ޜSxThUVLk * gI L3Uc9:&9ZpK {ma tо=BvјÆukx:Yx3bih)/.g2l1J0bZ)*t25gRlYof*,m#rW8b}a8pikfQh'+7Gud]zD/g{Uy `a0PFpᅀa0μ( 0&ql W%|͢As/ ]{^T6y ]Mtƫ1_탘 n9d9S_ \0a +YٰNy fpP2ԣ!v:&95 BY]Q^,Tn[$+a>Kو(.UL%w~/qoe1yK|ݟ|~;?;Ogo/~;xމ>AԈqbY5 040f:){oMhԩT 3zc dMʯ[[w7G}q7?s>9W>}Û.<{OdQ^oܸQhAwD:u}჋% ]l9c'hawGoã9<.%;~#'v=}3ç`+}kGۿ}?#?{ׯ=pQsG;x} k~'{ƍw{\o%U!Q@ Gf@pQV+jе̝l+^A#>*暩dHnFX\.pdA 6@jUe&U HDb [e],KeS9. ,.͵~V\mP RK`,=n<87^'YüTaD-f^`u ײ?*x`n3-)08, %~sa݄"?kU7Pssuxܼ9[RsmL(yc+R(,86L[AV*Jс+Mm3ω-L ٩ l?|q(,#W[K7wsmGb g>Y+lō7oN^qvb(\4|wpS2Ez/.[s}k}ȕ_~sv4޼^]ݯnW{:ӫm~]k/3٫^#_?Q_u_7?'~Dkc>ǯ~Swm._xn[JVgE( {0O:yB/<wQbᑘTIFaP63& `Vב/Dpd 88TTIr6ף֒+yFncZ8aWVX7e*Z#yaEj%˥Qv%tk¨s4:3Xr@[yS3]YULϊSAVRF+PVgaI-kxW, (cr,fpTNGX@Exlr`:!Uc94a>-JXO8x5򡥖<,uSP8Won}oTd%醷Zܔs lY^a*[҅vʼQ(5vP r\+frJ]e&+tY-&ثԴq:XQ |Zmf+ܾ?=xOm>{>Ѿw|7}o`|?뮼#3Iܸ{^ĝۻ~>#~?s?/x>0l}oy΂C>/6E΂$a{a0tw>'g>7vg=oyLcoytw>#BaқAam ],#qY*2EZ co^ (nŭB:"#1g^x޶۹Ǎ™^,2xM8N9zz2G  *zżQJc-Uo*-`p FO3#}~=ǍWXБ޲DZi_y)ʓdUX$0)e}_ĮdتZ{CJ[#=Tb'ϼYOBp~GZ(RpW憱4+6O`9JPjT#ga, =ayQ.WLീnPxVz+a3Ne%ӵfX^&˶Ypl.ZGfJ NJVax)Vt-UxVUx=ZqYB/ߚ>Z?t#Ho^\{RzUVqDcIU(ШVP<*ɭ0/"S~ȠZd璙4( 28ʌ*F [X_3l87o me7ruꍃ.y"rO72#rh<%wlt_?W=wc=K{~ϝ[us=r`{j+x|= ~~w}w{ݓ~L4_tȴT dž.RK~#EqUN3)Ng^m{ŭW!Sb,=FhƜJ+/[O.[dݡ e28DvYj*q9eJI1̗fQaj f斩"&Ԅ^1kUBÁىIЩ64̑0(\Q>Ñ壐dؔxJ#E"n:IekfCKh&yJƫ!0ϭKVEFi#$֫q񶿢 ,&U#b쬙f:qv=ǵBGf nX3OmW7"702]!KojQH }T8u&xUwq*@3FJ9J2lެrzYb(5rCM<8*xKQ+ +V\Fq-Rrl9.'TA5  vzeY2M<DzNz^<<U8 CW:+;UWB/AZyeI`Q[.~͉JKY1@ Ө`/nP3*i[*mvv}~ҝy_L)|뛾o+ᵿr_}gc=)N\{w7Iy#􋯻3̟$>c?Mo~O7}g=x}s__|qԷ_1Iu_-_j{]㡇"P6\ͳ򞰽l]u&d'덇!fL̠WX+*H4v(5QaEzes xN^Tɱeme'^9Z>4w] *xVPKue°8 ^`n;3+X1p\Vv+==Ի+{Xz]4ǍcoUU3_an0B uǚ7>緼uR$6Ҝc6枠 ݨ@ԋᕊϘ0U0;.W(g ڨzsjXA2gP!/l[rE0b,e57?f{ A!g-S /٧oyT9S -x( H bHȝDomzF=97~ۿ-__V.9?7oL?^^:o3{Ӏ__-#˽`Rdl\tcQ#}Ձ ljaC"sE{ŊU9oz;2 KxMگ(Gd0VTB2\@C č\'K^aBDjBd'yRK5܆^AsxR \5[8"D^ePM[JzI\ њ^R5Z9G[RsNv+OĖ%϶0 \>}㡔t"V( S%E`lrU\`Q>l3djkj)v#:Uje *G]a[(2'rE Ėو+X2N|D܆9.Zeqs@X){r5rjـa,T!iZ0K=ZWrb#pۭyKwX_J:J#|q4R5*l(afY +e  (e`РX3)Q|m Ge̥XܫW%S5ث > Cr˜R]Xnaq }!Z M9=K `Ʊ֎yV38{x_O=,yc?n3?U)9z=Fe/X< p=x#<%K|mrW_!qOB n yN&osO޸q㩝8?N3Udpψ^Ćzsh=MMB:*BsK[(;60?+l+&d/z0WZDR Y[ZVp׻TJTę[F PekTQ[Nl\pkJFga#hJFץoF?X~"ssiﱵ$WT VFFXa5<^%Hj-j[ZMC TXЋfV8ð80DSkzT wŭ"HK-p@ 0X]N!5TF@K A*I,=lUr,0e/BZ&j9KN*5!7Zb)ho'T_^/i9Zd b<5ץ^ b p 8jPh#IBsg$D’ p#˲6ajY;ŭWMNx2ϽXl 7bSrFFYOC7c(tTfVK$REW „ 7YSKVa ZCʌAמַ&z > KC5Goo wOR9_yk}o/_>;"{'~E7_b6mn> ww߶-v]ewKK+/xW)+7?Ȇ2bUl̽V5`XGD}ߪʢQbż# Q-Si8zfnz# :58 ۖ$O* ,74R/nWJ䡍q=f66tHQe =-9X V<2X# s =$XZj8F覍WZ VhNսaE4#N4*ts‡#X#"Ir+*(/DQU&يbX_^mTL6B$ŅuŏZV}ŶSS15@jJ/,zņj |HsEZFFnjlsdVaUd密<9~ D!vlvBQ2Q ?J 3z/n$XFx.528{C_|k(|ٺ2'`aގ Mν!5(lz b5 RY9L;v'4#3μ`6xo}7r ;Qsݟ+~صY5+ow@Wo{?=5WOc=xGGۿέ{;eUtw+@Ejkˡ%4(drHS`p89V2DRE,Kl9ؚA62jzi,SPIiϼ9"E貍5}Ƹ`, rxV1 0ajP#]m-vҐqۥ$0A`Eh܍Fʰ>%)[^UDy,#hD!B;#Njj}!Sx_{l;o?stxj(^b@q]v''^(3B.Q"kUKo:,XKu`c\Hc]1]5Ud )'0ę'Y\'L9 l dumzH0O4SS#\:0 ^#/g3s6^ ,aB!5=K7.s h.dV⠐vlGyU\>-sϼH1-l("O鯟PAF8؋$`/@CNj}T(*:dN1l9-Eқco*a̠%àx5s:r`(C0zN72^JC1F6I^8qdAmB*DKAX:ֲ2B9 :uƅQZU#lP(rn #,R2p(&q|O6̽bZZC)sg,`KC˒jZ:`@2=%FĆbp\X@ 5qp%ԃKlU yz3NHsomS~ `-EnOĤ@ e]HbK?4)VW* nqB'T]m76X?e*-P#<_0hPMMFp*-SfTzɶꥪs%haCV^wFk%kҁ#0y\:\9WX7HMc9vuAʛ#c/X"E.&0od3חBwdU8Wd*Y.N釖F̑!#Gs̰ .>Om0箭s:9YX+b`.N$L^bZ,R[̬ ̓<ͲR]V uCkvi.x@^TAE;건s-Ṿ™7:fPqhceB^ (5n@PYu`ct'^qqPrh չl ѰSʬf-S=+$YEM-x!Xl>%q1#+m8gJJ'= hOĒzm!N\ĭ2 Rx u0Dl( jk鞰j("kUgF-- NA\?+nj`:XQS9:zɼ^l(ɮJsoJ|%'bHFRxɶE2dgZr^%܆CzsVFX'(k*v.Wެx8\M+eZlui[9bUGP3bU݋ki(pG @ByfqJ Y9{ŵ*%( 2 1F ۪*Ch[y3, 5!cDK/ k+ҭ4ȕrȖ^u݆9斟!+_IaXRkn|kBBIm-.d@U\ph9.kz PVd7>Ћ =7Eb.JlmҌW,R(;ΓG 85s)níbމX0GZ!bFTת6 ##ejY|s.[?e2(qM%E" 5T(8B6t N z5*xSG@E.4lJkIp!RY|nf,jĖijya!ʛ1 lQzPn#`< O{to+}߹7:{UzIw~U7?s~ݤ=c=G4sϝ[?_'''WORCMy>v`KΉP^w I2 қ vU3M9V`Zl PeY)ʳ8P%+U`P-}W靘H,,1'@*ěsKs.0ٶ6*<|n}˱Aa͹NqP8 ;vVvꡓj*YE S|{{?y{~޹/||ɗ||fff@{܉qoV/o}MUw>)R]1w^yS3ތWyr( 4aS0ar &LSWB%oGnXL-sK@0a]2M+xÔa([+eP&r$Q`Y r0sFY0WNK JUIq ɒwōF`\8E%GTmfۉe#*ʠQĒ, Kh4gk7Ɋ4`a=n. 4OF2c=Ma rPJ&Ydrs1 kN2)@9ҧ Ka[2`$kTü0/"3PQڕPFX FOgMJͩ[U[W*oK>eqO3] YNr{ӊg+o{D@ #HUm{13#}++_P$d K sF@/xDnNm Ql;(yye*ta~%s;TV, e*3kUoMl+Ace-e:CSs\0eŅAܛr~aXg&wQ}_=??|{u{έow#oK/I.xᇿO}|O=?~G?_^eGX˴gތ F_0-8pNd(*K^A-= HNڊlS1oḛ +PkjPX0?kaSze :0%Kк{dDChf 8^!CfQ0h܅.]2m q3\(BhM gIDAT:X J๷b/μ9FnWNZ)I^`zsk%15l<=Mqy)t5EB K6PP9"ĭ$O:Uk 6d^f\!3  js32:\AqjE sƱ sl>9AR%uUsV6^y-pαxM{ŕ&!3nD +.{A؋8Jќc]̈&p\/Y-N1+$p´`wh] 7WzΒwZިe̯ e~OX]!JCIKp'„ȺQ4F(3bץYg2JF}'BS|4O^(CEA^u fwT ^9|&IC ?«>qկg?y.'>ۿWSwd~|7ToכW'1/{3 OW\_g?}}ٗݺu/}K_x{y3ַOZyz.k~*'C}/ϸgS}3OS^C C|xVEUL2eeL*PS:  1gޖ,F(snȫm/ݩ9+% 50lZz+g6NK-wW.ՋFoUe+sg^E }M-L3&Wi鈃H"AڹB;ڙ+^a b"TB +P[#֏ De"4(-spU+68Hϲ ^Uبp6Xh6g>Sk^m K%Ɍ#s-7 lTn%*rJTmT [ޞxsinxhng^ l2+\Df ІF^0U؇CV=fNRQ2WawB@fqa]D`b#X];URpAtkA OǭfFĪHbYEZ(.NJK0XoT ? QJPÜfJ}Gٌe,eVhŽ<|źnh3zJiw=W^::m4WjsMxtsjӕ?' #2l_o7Jc=ޯyy0x/}/7 ozӛ=O?Y<f%5&Z^Wi-=a5Y'8^ BCG$CKc25( D] }taV4za 0>^ȁ UoX.t 5ްi pa_6sh֫b 9*T>`[SBPBg6^6? l XwͼWRi@~4/ν闬Pkr0(rÜ"TK,Zu6~=+GyGOcoO jj=c=ie11>__O?v{=n&x衇+} F+|zz<0(^30i׷]y+{s=s-xum+ 6*D@{6TC*PJ qH K0s{Y^:j=d%fna$J5]׳:1ћrDZJVS 2Qd.,bPS tϽxe#ʢS|o,l֫020tɆ91B^ A̤(nr3ZfYpJat2哭R}Bo ur'66>[9 }le>w6^W ̇Qbe;S [Ug>I@If0X!=d`bcV(a;VG+epiG:pZFY\ߣ8 |dP91:Y1A±7g4}=QxC_;^w_o{?y ?_7/o|vT}_)_/g^}WY{?+CQu''>9fE&RG .' Y+U78O8"h$^K}>!HuBhVS,ՑFPQ5JPC{,kى9G֫yz3*g^/^yu r/ |h .HB$(©# Yo^QRA*69@.8Vb0ٶXw&6fW UBJ+;HL#0m_/~:7(6^?\o9sb0Ml,i(X:ف055ryT)JEt^)l6b0zT{<󪘇[ # GVOh%$e LrrY/4Ke1PYSG6,KT"RPS f6g` /I 6Ĝ9G` IE;S6{7{~}=[?_t {{1//~ ^==/yKzSTlRd3ytДka]2֯kyA0Pr,/zyE`ZsK K 2vUV.KP2*RК r]=qLuiw4L6P30@zuStQϽM21S4ʅ3ת(vni֫A35]byߖ0evouK6<㪦:qN0;UB.Vno媓tkN] "au:4bn'S"4!vaExeKoG,D% slJżnZ>PR2ml.k8c%ZԾ͞^(3,կ7GͯW݁Wcc=㙈OO;7rnw44̞*RX?C #l֫;ޠs]鮋# iG9֪Yi?K)ӌYE $b8,>ײjoV&,n lܻ2Yh}1|fáu%~$à8IMV4 n:M'3;0OX#q``\Gph٨[yv+7%-FS,eFL?{MJ FTp$Q5;RŻJPk|ai4f 􊾒gj+ QGn+Al"Q&сף,P:O$O7SBfd=zi5BY[rRMٔcOQeγW(%ejRet!PED.HL^%)1ۥ f͡z1-Uμ*IeF,.b6 ׳%Á{4*f51 ܆l$:tdxu-:VqU<O !T/[wǿS&w{{ORCYZݰnݷ[#c79*]Xel4me.省H͆SIt4JH43(A|\1;♇co:qx"@L9L}acb\p2E]wy† W.62-lQ5W [>:[OEL `\bZX(̙xFUi+ܫN9_X @/_u ]Blj&qʔd[E lY$phU3zi>8p<9x0rjCAV<*^o4zxՖ3.հndjzQ7npKۥY<E(`QuMljx_DE+;hqՆ4+6ynCE WöeZ{}(ȳN[yjѠs^SaWFo+:ŚZ+€ltdAf6.l 0zٹB/ †@/:NKuE `q1 ޖJHIY8wN.Ҕ)Y6gڮհf`\ѓlձ7OK;`>b.ӃE0\{-qBw$7hm=(o|Mh9]}=Qx&{{Vb] @ ħ=}vbco<ʲ颃 laiPgƋ"k[l,sS4eQ>q_{Ԍ,ZVC7f"5a,IAv @R2 NQrin dS\,r4x)Al(!9kψG.Bxals!`pUl0&rH]4XXK+7':dn]TCYd<0\{T}Xj6%^ ,E*62WP @`R(X pOXOjzi(m60g0UC8nٹFeAep$QZz)>k~{{]n,U?0HeWv̬mý>ş?ae,Ly-UyUjjcT_# $eau`kr^<a4<ǹ9m!ԡ =B%ɨ{ú<"$Y6Rض@ϰ} Z9ڷٻ{[}?s|ݯ3_Xy=c=.xʖzuO{Q|~ֵյur9Ok_k~i*- <'5t3O;Uw"`PR0e:ɛڃVhVձCd@Ċ`F,E :8w R)V, BC]i#P3D&JUƨj"[s(^qU';X'"TZ*h)"UXޞ{;=M1]#*8O8p5tB_&|+zI6+ϯo5xjffw${rKy_\ߜu[{?3>+>cg? F{{?ɷoo5/|__o||{Oj4L@_W-HF W6 ,GbE5  Y~N\n]A ,d6^G S/3dp+_eJ]a#t<> 믄~|`jxsAL U$VI|G68I4anK`R5ܨ[(:3o𣰭r"TeUX1]e'rH:<~l0v g>Y5돬PzV*:3K_ViN*ԭSTCna},0sm gk#kjjĆW􆹢jx#5saye 0fs3Z֫e*o;Y PQԌ.{vL[Vܛ^:agSESlgFd5BOZ+&quud&4\L:p6^w -Sp3Opd:2APxK.VF#uɺMJ$ы`ʔeOg$2TTVlj>eN[)/pGxrPO#_|g՛ڿOcc=cn,U?N#w~~ᥟ:j^ a;xQ [oY,LGd̅TXBkLqT#Ba\ IVS6j^zŖ(dWz1AW2ޜyeWKo7zx+O+Ugf(=AX9Vik MVsfa3< gN-rHE|kGI h˜D5ri T-=fWXyS(Fjaid;s:Ur&_"eP 43uOX] JZVnoy[8*<,/ D; 9V(( LjT}{VƸb rΦ[lm}U0 kږ4-*T D@o:Þ]k2+Zĉ}ozrHFe+{fv5{mG=^ /Wۿ^#/=濼gyGqG{WTg<3ȋ|7;~?XM P7x^9&рH6FQB^.M Ia8! @H5T/ًpa2)@!&jl9q; mx](buvM (ʋ{ei)FY]8;`{WKνz7ήF:& -5hZ[Y0WjQ"֛,RIeˎh\'XA1&$1[; "<~J>O<)`]-Y2zur !gLNYF`) )l$X:J@U[Ko*[ͰX"}]xlU3?c*|fSG3T'X5XeϨMs9ˉɰ{:ll҅+ m ~6@TY[zClaP>\x_W5TX2߲q|vpXP[CJ;5;o52(^z{Yb?ԸAKwͨP_ se6VeBҌjRKk \!՚ XdYp{5b:0~jI$*W{Ӱ̘[ZNlPE};5ZB=ujiԠ揝:{XSI5֠ ,L2WK`Cϐ l`RXEg^p/ל,,8ݴq}3[ C\'t,I\+\x7*,0vvkͨ(Wndŋ {)TPmk3W:c\̘E5S:@A1T]ظ)BCðdn |`Y0A"5g{|G)?P 5ȕaF,u74Zun.= U\9dM3 -sg۝jjn&-b3-jWdo} 8ꬣBoya[ط@؁EAۚvsf:a)0ɶjJ:aL`_Ӊ9?脓J_E __ڧzOoyfu׏#8#xo%U>pqR 淿G^ȫ95XV] +PAĆM|biP33ϭX-ۯ8%ؠH*@ ʜiL(Ps[a|jSy07B;ڻ+ vL=@a=¥\x3*Fx37[Z 0g?cyOdYnyw/J|.r/]YlPn`P ℰnB Tر$256 \z{Mᩰ_4 0fV\z3K6 KJQ`N 3"Ttź 6ikyE*3+2v`UQ:W6v+7-ʦDakv 6p,]{7;bX !kqER͌av5jYZ''x-nNeQӏH-Ljy(gr@R( B"Pyгnokό^D8,X Mv?xY|WvÏ8#8*!VUYI"KHb0'ƻx 1kJ7 ޞ{WwZG9}Ns?sp0Tʦ*ΛQvnvoXmuA :^T ]6RQ]yW̲w -vZU=4gn-ҒSdiY 6ݖs'^s敖;Se6v .<Z,+ ˠ1ܰq(җ6 U=A4u͠R/{E{n]+ź3>D~j_K?#>W>z>cGqGqk Y3o#b 9c$^n>oLo ]<1͙knr M~ %ӜޱxyeYoiqA; y>*Lęϸ0z9]9K?(+6{$k(׋{2OqiS%F I6XK>_v>?}8#x|۷}[z#~xMgeײZÔ0Nn8w? dVj]#CG7ⶍ=6T&N8-%p+j^HUjRmko8m\;xKY2lPBS-%!@;Qv݅3gr!Ǩ=^6l4p2Eak|H%X 9P|+5kW`ZUC#EEx;*$IfԠxh];so_(˽ZpZ q}ۆEzoi)0S6d)2+H7/Y$ؽ27B>¦$&pfiҀ5Qvwސ1jblPeմ Zy=ּY4rհ$08ȒPcW+a5/XfsM=s N +C=eY;ԑ$, Uɤrtڍ#nX ˜l\,eEY u'B/6ܦMsB+lttj9!^ͅwW"v[VSmw nd,̙ 'ø,-R>î/3ۂN WzDd[NJeb鷊 7p^% !Y 2xmWW9!4@Gp9}0>>|ܩ?#>`na8!t-!$,-*{.Y2 T=}aP6뼴iT#¦*QO^; ĭHoY6֔KK ﯼ5 X:;Bl0F[Uk9Ϋ/?Uy X`,$™Mf9v@O"ώ~bi|cY0UT2t/Zոȭ$tbMfp5kO-5e`m:O ̲Nnx[^MkeTd/2 Qն0eR8gEG!`,=[Aͥ7hМ5S@Vn,vGSG *^f@]x{4eVakwbe0QL+&vV *bb;y %ҕE]UYtnEwE"T};]xX;6 la㊇{up۵>y@Qc7^y{ =W"[aWeNs9;m-YZ,5eT\;xZZ`.ea{${>o[=|>Hx(+}vNw7fM 5+XiݘRbwd8#x߿sտi|𫫫GxI{Ƴ>`dٶ 4{4 j0G"vjf-b,K QarnRm3/ۜF"KmxdD?fʦ@O,,Ktu{JO"|{Wf{&--ۯlX2+5 A`òd3j{8g~}z"ldwNU3:qD. ԁ${Eg. 7k5:u>ѣmz2NY^x3$ْ==ɶj$rҰdX/,dnQSsjfemebվ/7 ʌ%'뤰QӢ,'ڻeecm=\z9g9d؀(#BRp81#X_AMMһB%\MZ>`Zq"z鱐:n's^~:/ӷj ,01u>$=fYwjj&ՂGɅy-V.W0,j꫎{eb]y噕7T}򹥞% 7dfVf *wJʛtbʆg GŞ剰mU~Fqf+shNa0̙Xa pՀֹeY;0>[ĞR+ [o7%%م|P<^!W_o|;B|?}裏8#8}zn뺜fl1QWTyzzgh>zNpGߣAO秖kNa Y^,˭b]zC`f%BLOebUc&o"0 МgIV\xP,~6!-a ˨eYZeTdΥǍ%r<{>6NݨgA0݅q'&pPj6]VqM -jٽT6גC55.,յxx;Fo= Z;⤐eוz<_x7(ia\X P}IVW`ovR wx=a|2ɪ2R IX{;Q {!޸~c$d*0ضZzuʩ^ O}_=O|#u;S/~˗GO/#^e8|Y;y#8#~躮iIii˗=%U>,b@ 0 hJ_o޵{ Čgi@lX+Fz殷)s_kv7M*4 @-}/+Će0 4gi?dxRICm@Md92թU[P75C֝s )lլ,,U 0(:%R#dz_g$+L榛9lnzHca`d a;o>||}[}џUC>z/[NNN$Y݉<#8w͛7??=^_ݹՔm??7[[=t `?h~`'sj* SK+˃Q) 2  2 `C_0={0`fj^җ>tbMe[otƅMNE[[7ލ ]MX\w|pN$R_TN SlYj/\]$4oWl`Ed` \lޙc\' %7׽Jν[~_3ǁvF(xzrxI^|w럪#O^|}~>}O_>z+/nG}7ws=W>=#8n߾_ɟw?K/=z/,zg_3#Ǿ|M󺻟7O?\\{C|-8nFbPh[ ʦ:e]]{Wd- ޮ=neu$aeb KN׆(, hs+-<: {5ko7[JEzRPf4*{qnttfe3W]۹slˏVV,l9(Fʅ7/droZ❯?+DŽ}C) Q;~lg_?#lTS G1@KMjD%넛X%ΛڽѱXn> CVPB!kIl(\`n.ɪ\p|#;Vj\=MnZ[)bd, }F)[*l:|jiaZY3z7O [5;AFh)ҫoRg @?aqXR+VJʊPwJ,_ݩl& jΐPO@tjcDfԏ(mEY5OD(Wʀ3B5,!M臥$Wxw߻eSU̙zff`ZX:aeĵ=ZspP@"]`Ͻ;\~XtyR3r6ذ)~ZK_8>Y#_>7G5_~Al ?#?ryyqGKgggO?jIIM_7o|苾(Ht/%=gy w_w ?/W~~56,W%m ˨ek`@Bj}ONhQ:2 9;--bϼcXO6zƈawfZ^dY8cA5cͤ0٩$sqnu E(ʛ7 63E' b-w^y*lܲ0XP^,;eq7 h"rAqi!̾'~ Ҥb^w.kY,K NгGcIA!R-j <au(3Nlۺ2Ĝ~#+IXuAVM= GXL5t;H, KKsb@CT AeBDB.ΊHCFw-$^l/s-,˂Jkg$S,u6Z1l-jL1K52wfNޛJg z-͙ r`GixXlVW,KjΙndL{QC-Akս,054"ղ,"e5,2ze7#BK9k7EU ~ӆyTRt L^`nڸ`~Y9$`aPؿڮf|KChާ@7}S{~/]$?΋'Txn#⩓>e×Ŭ?=꽎ELޯ׿#8C y_/[nV{8io'ΨIFbFﭴp#M⥷d\Z5w5'$XafԼ 37T:H-k*e7^v*9A]Dؿ!nO-ע^]O ˜)BϮi7Vy/+8ת"t/͕,TE ۩l<>Lsz 6=6O|_fp>c14%-#GԲȪ4 +T#&yX{Khn"`nEh(&āsovbSzQ6(J wK8*&YqicUfL Nm3UR̴2?aʉzC;mҐSYC-HjuĹǻӦ%ǚ}ڱdښf8xdN-Eb ?O.}ƴ1@k'ƭZgNKCKk2-YZZ,M T!lMBwVZ~\Ē妥 l/˲sCUu=(Ͱ"O =`z*) /I]zWlX:f YV=vj능&hfg̷x+zf~Ol獀_FK}k/h>?wG?M~o|n|䧾E{>W|·fja7~'|''=#8˻ ԟS_e_v޽z1GB=gmJR6lXj9{ nݤZDN-˜r0AQ5@Ũ,$Yw-KF;o;ZDNmp2P/{ĺ`P̲QS[P+"vؿ>n>lPZ\*NbOEЮW~0dWj.t,t7Ԓ S齥MAM,FeeafPɆ:1֖R[ дuݩ%.Ռ=b%|W^^x@be~^1}_?د}ݓO>?c_3>?ӟ#} >S?ߝ{箾'/37~/;7I_z==MozS~7뽐 9lַMoz[OOynܸ{zGq{y7o~~>򰳳Gny cayn7 84Y˿~gg(d|6xjU5H\(`n@ _{ЬDžM3ȝt߻pӆm *Iaʅr~[\$uۆ)\97'a<\+MK&REjk VSF(`8(!]x̲,  PKp 56#,m:<#F, # ^yc.3z]C6-K5Efxw"\ص0;]i*l{OOƅM59˕ lwg=݅Z¾vfiV E)X"`P5RVmwx᳎»UUs¡Q1s*BC r?~b5i&q Q'v$[3,H(oܚ{f6n{UۥM+yg1Ŏ[{߰,lʲ .\,r˭U4; DY`Ɓ= A29ﺉ0c ԩ7 [o&+Ι:5iɔ MK+"}Tw{/ }?Goz7;O_ɻ*|{PƓ7Ͽ ?/ǿ3_ٯ7W>wk 8#%!mW?7#?#?>??c?o~~LwaCNқ¥JaFȀNl8qa%IE-R-dZ3lwbMm>WjxĖx^w%\:3vDgRnM}naP'ZiȎ꩕[6ɧ¾|,5wD|PAsVu%32,I `y._צϘg@Y١5(%T1M~$=86պM ss]`4LXjG SIeW^z\^^yx֛UYZ l22ZI>.Lu@y`: ZPY5]@hAYlaC JzciPdjb^:SR[ uhYHYL3敍~ȕ <6'UG^BxR<f,3je T/8.Ԯ=Έ D@ RL٠gB+1ؠCxP:ag6,sMOM(қꟄ9в(++AqsYJn[2Sz54ް!R۰ę0ȰSthm 3?xxi/ yh>ki?ɧ?1 ~qQGqG|\if|>} _YRVWO"+$zaX ,CDu'E%N{A6J޶iƜdN ?(3 (,=K h![[5:ifLAհƪ $T$vC`#d~jSN uŲW;٨ZmQtltMA1u,NEֻQ]e~;YW=7A gضl[ƈ\VgSK +uML`^aqΛ%smG$E6heIc9=Ր RFՌ$jd JiecC`ay]ݲ86{ٕKs2gItTsE.>(]m*j3^fcaWc#=Epqaɴ`Z^X^2 ;l)B~ %RDɹmc2jCB54N7ø\qr"h$,mQz5T˶;Y^57ӂVY Mua[pbaXZXPRuja1M!߶Ё,B {ZTXƱQ,ޛүkP3̷m{Kl74*l< ze]^娗_?zGq*x夾W3<1/ƤZdR8[Ǎ&qRy;*;\J^]{:ܦfٙm":=o3 ejK` 9lլ=:BNYd==si {Fŕj,\p##"<2z"d< -saqi4 XDΌ]w=.֑o~0HBCEU^UcEr/)PK_#"Psg@Z0,{*{(߰8%\x|-agvs:m<z'kYfVV ڻK[zwX:qa>F"N`ǭںpj7FӜf7B>P gمs_)\x;ªHU@[S+ChD5pv(VTyeT3lت.S$dX KSV\2Nܰ vƞy5ʼ,dI4u ԛ: RVL3K..,h~.f4;ʍ{Zcso +-^1êxjީh0!WrP*6(Z0ՋIǨ) jG4}N+qGqढ़?8Ԝ_zWE( d:jd#l0"̘L3K 3K鵡/[!X{ Z=).nСe L AvͰ-5dt٨ff$қQ԰Ur+ER$En~tATn/K`e.H`8)4ҳ<vsICH̯_;?+T .rR4N&R~M߱AD"Bu8 BGoӉޠʲ$虪~Rt]/qčK[ Wn 5}QcԒvo!Ժ+.;gN$YQH v&Xo788xaxGbζ9GQ CcoU_- ZW@uyqF8T;ԳV'F, aP|y~QcwL5Eso/|VS;oFle @g6vVvj R٤0iicW]U^l@%~/X+N KS99U; V{pnI tqTtԦaH :XUQGq+lAYaiVA:斥bw/jc*eaQ"( {6gf,sÒvj)qLSCoQNll/2, /`,7TCS(B15x# ҟ y 5`&һ pbx2 1(&2?YJyPӃZ. B s'yցy_7dⅷgF :' e=S+ 8ciY*R `U]`\Zie\I]u/6/k$:XvT4!$" k".X,7mPI04(\z;iP@mz8cl:&F~%}β\yOĆڋ3)+/nN=WVk5u:}OxmWW9l9<#8#x)\O-ԍ3VM qTbRW &f4I>J;*9sOI_UxPIfTbĠ0 L r.[uZ%rDK=p);g KUZ9cY2qichXfL+VLsS+{z8ԹQ,r0Qk -8RK_3+3_ x~67Ϯ>W}o}XS>g:T+ZE U۠pReQ mu (` f'a\d[6<=Ӝf+L'6Mys} 8!I [evp&ݲ)4Tk+ I&٠0 ٨МƅMSmլUҜvDV<} pC%,`"6%MSG9j Q,E%|iTFxjCLjNTA`&^)dpFXqBJKb Iv3 ,r1\{`jj!aչ*\;KA0tv{rfvje^d:]Y_y?z̲9__#8#>r-Ptj`Ev/۩щS+-%ee#;%\xe$:'\zuj;~#3> #gQ1[:zC;]l k5I5)U3f,-ʒ8LtlTpX2c1X\W  PK7h4M: SksLYp :زԕMPpX$۩9Cf,`ƀFqI B3NmEȠ0uCl-Kn6in%ޕso |WoĿ??'QIbuxW[$nXE*%gHqFZBWL &eT8f7,T 3 |?[6ݰ:jYDnxgX]6x`Z^zyy" y3A֨ӌ7m~ $@ -u(1D=3GY,Ol6V3N- +'6͐[NYlԝxjAXL-K VA x4Pu XH&£' 3fB{o\\x}z٫ t{O?U2oGqG{łp0:'وYVk(%g/>-Zt 6Ѯ-O-JwFYd1Pj"l{Yͽhq5X,N0Tgנp^Z27̃=_jyP-9Ѐ5cj{38.L%#Q&`WLZS|1% Vq,zs,f|Fո@M=$6T {K-=8*v nЊe#l`nY28hZvvŠKRWzgwI"BzVJ*UԀ4pT(ܦ]x]X߯z1 )l{Q6H瞟+Xm]tXY:# p BlRNHFa#c:-AI֊$fJMJ(:/,IWH0zC7"~"аTۛ6lj}nj3l<):x:(wjہE(`O ^CXj*)0Z/A(v`%Pl:T8\x{/|j^1!Ԁs~3z:#􃃗WW6-5T$QmHe=}l"@B+V̑!Ƨ030BˉM7X-KP20Ijl'$uƖ^_+oS+$&إwwrM}Cgsʼ!jEtq/K:#9)kzBr- yS,>j5TJ v F(:pp <}L(«ueyaAqP)J̲z j\x76C2R%(EWVf:ʁIaԇūe27jFĦSڰ̘QTm `Kyd$IQcPOd:MΜ @; qxHF@-͖3K vx&Y+Z#sL ەMZ{UWp ha,쟌랥%;hͥw#̠«נhQMgz^?-sT5>ׇ'Y3Wk;!%8^G^}\}\ 9saa=_O|ʿH>#8#x=gɰrek ܈0*T, xŅM'Nl)5'&.%;o>!0u3XβbV*R`BeJVABRI Pu.een%lXfT-p]p1!$،儥A\6c%ӌ7u@v\zS T ;xaP\Y^:z#*Wza?cq7;FwܦV+Fhv;#f:Vm-B-nXY ^6Fōko7FY2NC¤HevjDD; V0UtWd.n!g91dps+-JB9$*63ۯly N]a3KɽSڸbش2pkG\LAaVM )`Dzb $F`3rsj^l=[zEzK$iW\Y;^) t[5-7έ;7CY Xwg&$vSN]%&$`s2ؑg9/OXx vvvMC>Q`#Iظ=T/qĎeeS<)|I:1Yn"k+]^娗i^y;/}׻ֿ՝?wW׍E|{>|S374]R>?#8#x9Xjbi ԡtUx)^Ħ-c^dPCpϓ˪H{5'L5ߢcq0РAM= W\ySĖtb p˦A!{\!2ɪsrR3l3(I*3S]m̡*⠦3̀$9Λ+VVZ 4,!z7Nm<&Z e+8]y𚷄ǂuyExm&pj٠AU ϰ ˅+.N ujeި93yu-=KCFaͣ6{{1N_o{g >~|y;_Xǿ;>7}7;?2 CG|O#8#YR.8VlޛW rqPtX lf1sxUB*ޠDey v kUbZ{fu¹[u4%ļR5P5Q[lDW$+KoW\0UTұ8V3z\@ SCU^#Ϙ+o%p\x3,(݈dրUBy͠P>k#C%e.Jӟrw -s_"M KzSK 5\2Ϙ{lUu:` SOXy:lfV?E 5)V $ 3ʠC@͙-aR虋Vث~MӳeYXX:N,V̦[aT؜>.=$YC(FY4ld>!pʼnٰ)Y2E{VNVV+l<ܫ٫BI j-\)8s@uOrUQqfMs(SY+м ( ʆ޲gTbf Z= FQra& cW6rf/=/q3%XfnZs+Ԡ-@.IqR_~fkYN7:_j*G-<2 ?vg5ow^N }s?vwf+מ3[Ѡq_5ǼRGqG(^ER3Ϝٸdj$y e9 4,@FdY YsK f%KV5[vm,-KB_uj; Tdw*o[+B99Gʌ4s+ ruTv(nJxP-Ut#S--Bg. k5[oGE=s]q0, kye[E rzw]-ըd\GJY"}ƼL˅7❲|ݒV՞#W6ٕǎz:-^+&a8):(L IqҳlP,b N9tV=vB,kE\q԰RHĭBrfa`8L8WjLO|bz:쟈;CK'Zrnj[޵,-abw=epPU<)JUP3N-eDA޾{W*,`3#AMॷDVZ-=및P<@ ÌnTX2Bߙԓ3:Pd,3+w,gLWe?/z%isS:9llY[9৕t </ƯwS=^_=/C.k>3>?_ԯ~GqG?`BFQ+NP%u8O|fAkXDz J{evvmuLYaW޿+LZ`isB~, άRer⨰(`wH U!o x"j%p/>h{zw BϽ$K =m۟Ž7u*ི|!½x0#{8.Y [5s]v/M@t/|+ak[Y{O>AY8Itd6 ;=K:$Y klaFȏieӤPIԽBut.J\+TV7W s&х",+NYtFSds&vI"FjXH6(K-/-I(™jT6, 4# ׫: Ѭ7!Uo@ *tѨAvA)֭HtԜy`!=nY]Bb,Yd؂[u|驸#&aX.:ze﷊oXjjQx'sUD:!q(u?:⃅W$=?G''O)}'O's'_?`x;8#8WīH3}A1+&i ݰ6(TXCԢ8x^ׅ(йO;_]Ia;zJ2#,Z9s52p벻*7jvwPI('t`ǽŦn!^EzE ҈_DwKWU=v5sܧ,JU%E%yٵgYcfq(ChIL(Xy517`Coc@WQ+< ȼS"4:Yi(vR a,+*ha|ziw5G"ax9>5739TWklaհ0;e=j2PS%%%DLZ:mKWm䔅L~me_ՙ⡵qj*]-s4,"幥29a> *3,N Ǧ)ǩ ɋ{<"JbЍ*F қ^Iٓ lpvG(T7+UAK SW+Sd-b6bAj0@Koߒg>)NS$Ia+T>"K h5' A oz!?5 Wm Vd88(4g6L#, #zل~dyngZ J<ɠXk2B+mP!YwbRXVk$b]`Kd!FOޮ H3($7IZ1)ǖy o6 MohÇGxvݤϽ}ϽϽgb7n81¿/>~Lhk׋8jYbҸIs8h͛n]CGƝwy r|ëNȆHPpiKcJVJ/l0yjΝR`ixŭ0/8̬Dcbs$TKhʄ~%#›E\yq9f8׬0lzQt_r؉B`@ƾЧQ5r0&SFG1 i{z9=# Ͻ)#4T4f.3%Ydc (QTCP-~ ((Pǩ) VVl5Sy9PyliNoi=e^)sG/tN?E; kY1[* VpR_wyP6.SRU4OmZp͆/ tPU V9;9%vҫlT0%52Y:Z0 (8R3z[?e Щi8e,1kj<8qVܛ,N-LiSrN['s6 +QaM sl d[kU+KoKܠ^1 Z lʱerl=lfEf/BlF, W'ڿS@OlޔN1ax|GXpBx k~Mo 2W y41t #T'6^ cUF`JCXza Ol;ިUu#Otź(R2*4ԑ2Zέe17T/#԰Lz &QXz?kLN,t`bv-ֿ0fjA9o9K?{7~__{x8K?׼|#?=YE^7}}+>?!x K#;2[X%t6v^`/V^{0m+ڭd'ѠAy׬FSzNѨ Q%ɳ 8cjAfpxuؠ˒Wm8~Ԓse2=vu᨝GJ" 7IJHǭWb zDJ8DŽuGn.pqsfT2̘O®`@Ẃ!+Iyt{\Yd: lK9)sK`+*ndPQSl+\5g+w/>8>!+/}wC{WA9<x`p//k~>^kKw}'LW ~A%wύ902GjaNȁbX]ʾ JbyAq+_ 3D()*)#ww:;WQJR'{dxbldV5 9Tȑ> DK3!Lm<ݔÕ;5simU{@nH05sKĽ얖^ʖyv/ʀQfǶ;<̳ApBىkn[ ^TrL`Lb/'O^ 7Gſo|9^=e˃#7~OE٨6[PE Sfko V^_-SC/'#OBZ2jo/<iThMGG[^gЀ sE$`PR 9;l2莰j% :35өWöe*,dGbVJEi(:QsC(a + O[b!uTM3XaT'asCKs҅plé 4(P$2xvWö<Bx^S6-8X +l̑VC/`i[:O6̭/ŏ[[EݪPDG^>.F<+A&TS j`Љ4pbZy+d!?#eHp3 oX3Ejjy gfS|7 kl+AwT(V/fr<9I籸XGY)/ 3S03N, /-J"W4Y+P3m!;s:w^3O8V xYwS sEhT\Nݱ@K/,Ex؟R;ЋP#W)+6(nTZy\z$Psr~brl=!SXz/ %2ؕ7MRh^%TsfifGY++vJAAɄ \{0/lSSة** 6Y[z/[+nKzXz8X<u-rV )}JSaqqmek^6eY>qjyf"j%-eW^'!,΃2&;OjW;E%4|{<5#}۝02^Iv[NōukUP ] })=tbMrakoV% J[|liJva6%KoGY<j;PrJ<3Wl td;U;UdP,_. %d8-U Kr^Y5#$G(u6^†^#Tc@pۉ+GRh9ΕG;=ƪ9O?5Y_!6f6d^[xo%[;S/?<Կ˟{+X8Pvwq۾>ȇ??c>elwnGTve(,r{QV#Vx[ZTbS,))#xb&PçLY\zRتTT%'+fRA S]8 kNiƱOL-VW(聪g6VQif#ڨAkY?[fNqtF\ R͜dkn:Ϯ](|Z+&S$tb90d2YK|.S RfLWC_L6 R6; 7oN6+ NJ>5+ZMwa+fpq+ NqShc wV^oY{+ EzE0Mjқ+UBI=v8Xf??Y/}'=/_{/}I%xp]wf6.dбu-sTQ,OU_x\+zYfvF  Gv2[&.a,VԜc)pK1}}\6 ۮ;643;Yɏ9ԆB'x4yѠ2f!:1 0BHM1Ϙ(hÔd%Ue\4 \x#zΙ3PLmGHP2xjÜVq#\VdC9dž>5sf@`Jngε}QWPh$GY##qbAkù7er9^ep7bPI땷FMLeԌԮT [y/\^\z׮'L} P~U PQ$\dKo]\X#gBbIM8h+o^g0t[NoK+̱G&LEujC;Y}hЄi؝pņlkƖQF2ЃKroތc+dXcir3x!/xS'y/mKo{;>#otDou%^W8~ >T++)O?'[Ϸ~۫.w)-JHL kb@]x[,ŵEXy2{^'XI)M xM6KK@\vIHa5}aE>x-5A9KK;+&=VW4f̒3⠐`o2Ml,ٳ󜣃 tj*$ #,Y'6`Љ*i&āQe nϽTKRuY`'eV9,=d2M9 )lv2%5L)3EqiE魙w$ O5m%f)lP ߪur#v^ɖ72NvzT7 s^_e50X^q f(xNV5-m (ny}'BMYjWep'l>)-G5U]LNqĢ>*ȁn0D %JD4p7Ⱥ n >׿W?>OĿpp{8~"&xΕ{yv_ۧ}?s6y*tu 3Naju2aY@Tmڪ6*kiP8j+eEGIΫQFWKo|ZH;yQWtpӛ9\z=*ȗHڣ-=)J#C*)hP<qk@==慥^a̓mw4{U'rHxz3߮xq=S_?|%^#ίzp1() ܆~L`uOO˾?sygv^-W55$$'PZ5D>輺(BXdoR$e"a*3Ke+__|Cg8x &1l6 'Ui9K\TC7O/k[^SG]wUB{qޓߚ^G g#*xqT"PE'6+(m(Y6ޔ WoLoG4+4 J.(f(Trl̑jK 8.`VS,רXf'L3X˧;eY&0(Tpl~l* f7a0^@9l Y4L;Yqڸ,o-S-<3z (/cqanitͶ #u &xySFYFde-Ĥ80(pWk6L'g>*ɍ7{Y's!@GJ 7sk [aj: Sl(|f(Zܓ Cwd4Ԇcg`#,Uo0HAL`tb 5dx20#¨P'fB T5(v{mr̄zX*b齪$ QayPNqbyJaSK$ n(zFVF9~d'֕F-Y1Քqo!NUyC/AkR\<\BT$>R/ًI)B77/V>{c >:HYGO}1O?xg۾?g=:z w̖C6pel#Cj|gsC=ucXwyWkoޖ >?OO9VPH0"$qܰd +zΌ5"T.xdYp ЂtL9 ׭oŝBW2m'd+;nЈkO8vTa#*E@ :vq%v3%d@M%wLzNSL` ᨠB@Rj_RL84(veaL7bn*KLSKN!Wȝja/O/7*:P6<ⰰ1R%{f|l s@5Dґ! pbif`3kW$ڨ[6%3f)nU>*2B NW$.@Na2k抩a050[: ]\Nq"iDٓ%_Ȫ#Cvb!fUh UYظn/+GרZc˧hE\=nq@aVqU, 7ܛMrMabcE/G;=ƪ9|q}=z}Qc"<>ӿ˗ջO8ɍ hBu8ilRA8&pS\.nQUӔ^0B#QXyLBW{AkER RKt`'e$, ]XP%$w3~/M}KOpp1,Un뉍.=U%2#@3ZYnozS rpmzp5AQXz,|tdU뮇79ɀ9Ira++ŁY3WNFXn6.G]cId- "TS` ܪzEjqj# ۉΈL]FxILJ$Q˩6M~-u*pslJK{S3lnyqu)SP7(*xC-,UI u')SJ`ʸc)+\Y*TܫW7W®sf"(jRJҫ q}|OX#|7^7fEeq*hbco["nԆ)WBXUA#`3n S#NCW% BEE"\x, Y6+]a80{0wGΏRUŒ >#l ڰ8t,`pzaÌc\x pvREL Q$J(~baJ V+s"S&)>'֟~@(=T&̧fk?a6b6Ko\j#B*v^ fd3č,HhTC?2A*$qPMXfX|*=,;v-l?Pf#{IVOjj$[&}@kq8$G0y5&6 Mm2'0 rʨ^-#S*dM7ZMmlJEǹ@0gLS5AUNUGP`/qCd^>+*гQS =5uGX8:PH rbHܪd*CF}' `\1oToJ7=$›z ĝsnO[ŝU] [gn';Ķ.N9\ .aŏw4{UzTR^ y~ݗ?/&aso^w{p܂7~7޶?{ӯfx7G&؄4t'DE方 2֗R2U-S3:["=PS@ JʀbiY*WZܴL:Q,.K׃8a=xVF"d7S\JF yqJ/$͘N,巣O3|;a$y&g&O{7--ν)fNZya}i@ų܎x-O(0c R˱a:U5:9 3S|P& Vg>9<٨zAVDjb`nU1 , 39sCa3z.]Za6%QX;XcKJS "0aXkFVqQFmƒ)A;D )tg^H5TϭNS8nbtIE_հ;eԉ;^qXhލTօ s.fXVZ^r0] SRmT2Ol|0XxܖDBS ajJNL]w%]xCR~],__\{o }w]M88w-tw}xܟy??VfuC_?gw-Rȸ뮻B?e^p r^NCZ"5!{̒eQA`d:H_g9MoR ,;]Glփ;^te;U"57?aa}a-}pa1ĺyQX%7j:Uڛl 'g֟[ X5Yf[ M6[jÄƫAFD*4-lNlǕi!3P$>aEUO,3S:P1ON.*28xŔN, RZaZB%#K;Q8:&KjT+l蝸ЕBqU!FY ]pպeJƖvSj)Q4a> º#Ӕz6EMzZS ӌhm`y:➭c;|jaGϣyGXp+Vu[싾_}gx+o8p}o%eF/gW_5Ow1R(;[Biie4U1<ɒ! P FqDhKK^l-0'ZU"qY,={=*281̼!#FYfĂڝ{X9 * G bS\.x^^Gؠ }aed (ǖ"}с ewnfnv^rrE^ynNaK^IR@4DM3)ꊩ"Giwɉ6~Fū!Wm8~fÜ b[ uv![3^STPMMB> SHx|GXCZ{$ʵӇ~EU?8޵CWg߫keXJHBka*QEU+fB(sb4cdg>)y0^VA΁$ʛ3oz3mA.v^$Xzu0I()BZpd)BI\2QX6kܖK4Ȋb 7PQFWlw=.Bl4HGYV!lU<`6, W?-b*@ .=Ip@Jy&WU2`S€0" pbyn@ "jV*3Z^^y$Fjaɠ7+IkA`P2T)õZ ̧6ԱsRߒ͘ĺ^ʖNl܉<[WsKz{~/!/|~rI/^ U>8~+~Sv9޻락q?]ya/W8 q Ћ ,匼tTK/A}+TRg䠃'kU+G$120LG6\:Y3pq#b{9 sExa)G9[bÌif~aeEe 4ܫQ,܆ܻВE'$P\;Va6W [x>Ҝy|/l } ^3 (zKa^X?ga(aB/9_]\Xߩ.U%pjmo Ҍ@q^9rU05L5("tl<5͘Z bs ;7'ޛ'ť\Q"G;۽Qn<*GyHbMY^  ^#~??^_򒗔}k?C?4[.~ys%_>ۦ&ɫ_ꗼ%zի>>{====p{ RJgggo|_e/{K^򲗽>ny-[ޫ]^ _%+'aȿ)o_ƯQ}=|[R@'+̰b=tV2"U %Tmd82g6~o\>K7Y駡/Sr,VD Nܨ M)džYFѠjA뉍aF6gD/.=im<0̹zp1P:f4T*{قفB֪\yMZ?73`>$VaȜe֟Xȥ7) ELdV @/.UW#BaFe/l[c(mGp6N][Vތ 3<6,8EܢXW®PI:* B]rR;q5b-̺tr(+([2mݪ~ZX^x\0ԅ^a8v ;Uf6L鄶 kK L$0 *-s)w2;6*N gu]O> nz^yk~/(@xڧ×~ep֗O;/g>rw{rxJx7>ӐlKdhk+oN1Ri߆Ыd0~H/JAހ!Z|{Ȳݵ+\@'+Ғ_FdNqmisKd+ )Ӝi<2H`of8=c kNa+Rg6L.N%f}iAWwaLyaL}'+B_FKiRX]l*paÄi]vajkY7?ϳx}y5ڸt 0([tdU„Nq[[ Kb.T |'+ᮣShj1) 2{k_5fat@ 8? %R(FhN[_3"{l8bwr,_E5(Ge ;5q3!IjíB\f'%p3 ǖ=Jҵcހ酷W8W˙s liRSn 3ﹰ3q|{_8{/W7~5_w|-H{du]e0"Q3EQ~?+zzkijyj &pGpW0+o$ȈN\VsPt¥ƫW,&H7vnz 3RxX"+WN2[WӞ9,mμ* [{EB3`(pfGcGN5 "Sz&5"=m؆9+6sjSFx4avp,5QajjX162gqtO`±T&֊npRgE \ym j聊m[RNrBj $QuFUt6GE.{uƫAaR0*K_WsW bOBm0Ez5a[^9Xjjx`Ć1(][ tBE+k/-8]%x\+ja Yf.gYypO8S/p+51j-U,RT2M#xwjY?e"Tfk4T8ޝH?Ż_;㎧}׾>#w1#qwHRL!}ph1@KZ *P(,@OCetp ZSg' hDT3eebeX̠lS(1Y¾,Q^!ЋT j(3w{Hm6vvB&̝™ǵ .5U]d+:X񦦒Y1̑ĭ(hbSrnCq7R K5s{,B@6sS3Z*~A# a@0@^*IX!̡_7>8A׫[^k_W=pq9|D o{={O:Bo|,ܛře k s:FRV.9`79RЄ^f6J5CGٹO֟P8O붫R`..Gh5tSSӅcMX"DjwG6n6^5XSzNEVaYVqԆiBw#nx# n[jSMNP8p5^{s;;TnzS8PHu̽H`:642>Vp< -=p3o¦x y=NU=afAaTV:1k̔N4VZ);W ȡ l|q]?:[7=~n;:s}+=|5|W+/{' ^K/'~<>+~}O>8#P<}2L/mˉZ.>j{w4{U/ϓ9\c#||=o{ӫ-9 ۯ7Wppm;[AWnjc.,h\j^NL3r]x\?+sK})2PQ3@2`NajyjCkWFιVVެ< T,Za#sejgL CnfPZrtlcK/0 sG8#n ]C/nOm|JNU9pFhPXZG !6F`4ԃDt ko̭$HBT".湥 bd#€A,CwG"}嵋s֗!=Fم7tdc;qj0'tPL\J&;FRƍ@v6jJlNezQeʛb=$1 K'x'[*(S Z0/,Ej+șSK,ZM/V᪍#‚†lqTh2XfI؝8})yswpj83 gݨ^y3 "4X!TuAV#YeFLS*so2lTܹTϙMas =6 G*c=YX0V)qGd}Ṕ~O7bf>(nLja%'k WL6Vz:p\9Mox7L(JVӨXt,Fڛj$pX/X.`T2:Ad!"--qKov2T9FN2e,7Sy[ٚ6Lll,#e }lY*}*ErG\4nzНXY_SF3!_#s':ⅷ½y2gw4{Uvܿ]Rc_9ptt?жw<]zqJ oxí{o/?|OoÉp)cNw3|r8V#oǭ~/c>~Aoxso[\W oz/||Ƿݿz ߪwǷq/|| ߪwǷq/|UdxlrX,w0iZfO|7YI7xȚ9xr`X|ć}wovw7n ;xƛx>9֕pp;&O{&5s8L¼0rh_~؇ _|{4dp>5GNXT"D.S(U/?A E}3[J)̚p}:4|`!#:"_`5aݒ`RVKJKKO_R~q)/qKhSAI;WriZ<4͖r};s]ԅ;I0A JdUمv6<ژge߻Jm i9^(rssS*iDlɡ]d|G=2vvV/:##%Ι=N0Rkܽz EgM[h֥ѠyDz!,BXꅰ aiiBw. VUU՜CWݸpm]^\."zfͺ1 WZv?=Aee%4 haaa!!!!!!۷o߾!!!=.e6uT*%IFFFpn\r433ӿȰ I p899999N8880۰@K.|VD/}i*fh8MnBBBΙ>AAAbX(Rc>'篸yjK1.p<<<ڶm߱c:oU,|$MѲCBZm`%#{G $ϟJw:V5T*ֆVԌ20=-ɓ/laQpz 4'5%aX i!!D{?sWZp؁bqC@y]; |A:O)Iw5p|kJPX-lUTL\h}ٝ~x|NOW&7[*Yh /|{!4*N>wfް[PbvFڻ-41!Б=n?]H]"U_X!ʾ~k5iM}hau~%BL|ڹe@M@sc~%9U.NB9;rs^VNw~PcvUU}/BT9Y\5{"'gˇYTz>օcO޿{귃|{#+ƪ \oMjGz X+<H@V7:1(?^?s~[<&YRoX-lP?pqcϫ_Ym}[jȒ9dc9 X Br .!Db>u%UBp+|burKUNv#W'VJq{Ⱦ?V5,Y"s\s{z,`M4orBi3e"uGU'y<*4R)H222ƨfii(,*P۸ڛ{gʢKfN.67,dYd.{_JU[Gsvy_DLL ^XR}4?N}ܥ2f=h%8ƶ/\ڥaCaE ra$0wpj @U/VBxVt\ܸUUUeokcogcogcgc]UUύ[zM ]VVUuサ|xjun_UU+c*움.E䐦钒#G7~FƉ3n1vu?#c^EgnnN4fi\7+'vuЪ MZZZee3EQ+{)JP <7 Bh5E2IDATNf}_"Ȣ&րر]ǿ:h|}wIj,6.Ӆ֖4䫯v  #B5<8r~pc׼bV-;>ǏMҶCfv]5ܮiM8}@:z V1D#RR+/uR*?/iN·+p]y> !m@?;!"vvA^2%m+.+V3W!}ô#÷}ocgΞ='L%@=4F$'CfChdsChdsC@r-ޖ-[lْ;[;l zΜ9T;OӴ,:66V*FFF֖7]TTTdddttt```^^X,xJLJD"ׯ cTd@K#aAr!@ggg3,I\]]O^U.HcWVsI_u=^~-VvZUey|}GB KJ8I?GZYHkEC gx{MbseY4  a"+ZwmW'D9Q&%QR/<>/'ՖX.\իWO:uYꇧWxSTk{O*nW>!6Z xDf-g懪e>=u+H/IOȫ- "!RwRcck0BQA; >Movou*?]cpuC:uرZAS4Ɇ $+oٷ U /}eO+#ع]_npo^5YJ ==m;NJ\ '-a&~yJBx}=L4  !_z&/Bmck t@AY+reU EQ E= K\\\~O:{˗nDK/}C1?nf-? (BTEkC" f!D2r@i<CFH(/D)Mww5W]tP8nָaCgqlŌ)c_{5"wQMò ,*MILYTT>DXD"!#Evavf殽q~>VO+Ҍzt KB|zOȌ}wOGxxCZW4TE<\ԙtU%vhLOj0*,$5UUD"!ɚ9Uƿ7f&ݺDF/+Bmj_/3SG~SEq_[q]r=RQd͔~|mq裁lM-_|M!#X:.$k6,PBB]xvl-ݺYhǠU)gq(ɝa: 0f$/(!_ SYT;f'ΪvХgwSRy7~8%|q֧&XpUˌ:U+*aeb]={w͋Rׯ }0yyypUW^^^QQYiIM(`։i2b:E/\hG]G!eo9zeo µ ioythE+>&nI5ID|dr%n_~/7/hgˆBuio_$e"!ϡ>:Bwi梸~c>#Pˣ^h3ʅ5?&O eJn7 ԊWɴ ׌]S?ŀ6_C'r.J/%'U8,66]m(e=lά<=gN`5n;bXǻީo7ݹq_I^v3Q"׈ou5f3ඛ̏{wmƏlvײ)]o_F7II }fϏ-R\LjfM?oM `&lT9%<<}ٔN\۴#*8|jOk!o#p/7Ue{5Sqnm9>wc(^Z|||zz:![n&&&[6#G|镽_Ӿ?F5 7v^mJgCso{2i!!dpu͌=/>Q檈1EP{VTV~? v}`(,--MH$`k͂"ۇ~XPk,N%Z[QDUSMQdŵxJiķm͌jBҘ\v!4M:rρؼv]*OUw9n@0|.Kw8Ǝϗޖκfo.OADWo7WwߥUox`[wW7_^`&zD21kOLZ{G6?3s*%4xxY#}T[W1wˑؔ|I֩M4esa΃<He:Lmº)<]]=|@*4,kg|Z.W2G;B)ȖH$R*&MҥK޽5jp_/w ͮOøqFH̞ Aβzqww ib;nyywi6֮nUV>wWP|b mnZ˱jS"GhfYJewrչ'|k1o|ӭ*6RfWkVrc7g~N(Kk12NoզyIBϮĴjBqM͌)%EEvYߋ$v7YdW۽ٰfR̐B]\\\\_=./Zug;u^VFz3r8?Ao 9jB;ٛXT#5+:Cc☾ml:ܩ4V㰸8[;Ysw0bfe߻8OMEQ&rjA;O>1Ns7߽g7<(fZ3vD%}UС nU:uLbӿ{W!|翚QY){&=W1e?^$'n\cǎ666٧ ķڌ#oy|;Tv\S:l7Nwmx-Ǿmսkv :s3kΥ=*Vtli7w^P{Ԭ|'g;; ҥŋ ׮]]'qnZ=ͫ2oL+$=7~.Vw=F[>冄>!ϊCQ1ɵy ~P/6t͢kڵ=/W8vhzEN(y2_7ya=Kǐ1l5ɨɺ2rY)2?yIv}Qd(amtEyK6<.[ *8jUߞz'ZVv 屉^L1a7vn1څ*EL YU^=EBr?](?tE鴥P\wdDkA|6,, jfD$" us'Tfߴ唲Sv|!S];w?E B+29 <~M"0uՔCهvW+!ZxҪiŃV~IIFvtt,|-KRf% zS2ֱQo]tv7GOCywOͶ,BTI-^t'~~&nfƎb3á [X9;ۘ[8;Z9; ͂ N^n߾}]GF1x`ǸVXyo?;M@_aϡc'ٷu黡"Bu 8pm>~}qS7vZ}ԩc_ 0y巣Ǐ߶dO:񿉞\۝=#n[1=U@,f'Oky],ovO8Vmx9CX]|ę] ?UPv3;XZ1]RpLyo{ͭ\Zhc{sWӫ~acpjR0#3?񱴴}&/W"i܊B~|;Gׁ ''֟4X[<55@ ӈ7W`B^ :z߷FvǩЪXZZ=z„ 6663f>w}!H)J{s'^'eɢ'62^'vOka ,uFq6Zk4ضB4ݶН2.EC1\D G GGv%2НꦨR;mLʙ9b7J0XN[FDV5l[!Mn[^}NRE YNUuv-WUNj:N },:4Wxd!UUx>؍5°R ӆhhC4!Mn[^}NNBl}!ϗS\Yp={P|Ē bwoUUht'<Lddhb\8w h+wE$աl{!M!tE,[?[bWBWݸbe4+(ude[<9ka , ІhhC4ř8;gF!m{;9l$*JZͻÏ?~2.fRu]˘o]&=^`ՇDuh~0(]tj]&nk|sMn2` \IZ!Mn[^}4wrhbE&FWN\p ?3نK!DqROx]*T._ e.0WǓ>;ͽ"lSU$%47cKPeNԪ= L`o]>vu'XΜ9T;} sss]][h5 3-)?侪 >  nlƂˇR3~t\d)sCYd Xj6@!Ǐ37ŏϳڵkYaߪuF#"hϞFj`ʼnFᠬٺ۪_D!\cȡ\,,/+WVWHjUUꕢ[q5{yR]l ZRuݫʼ2PiB-)"G #rMrJ(DQ@`]`ޜ^{But'\##S773ww3773wnc䊢9JTk9RI$cfcV2m`0==BQA\m\DZRKsqLP"OIu8z$% Qf$e8x^mSR4S<wt'BRypT /CTG={$p<1 F5jԈ W P?sKK+^( nZr?݈u3/\1+1,Yz^n,vc} ͱ:lU$}VohhC4!Mn[^}>nJr˽j !+$}-'9i9ٝs'9|F:P'ε_GAY>"Ŝ+0*ު'*~riV|tYfmg,==n2`6Zk4ضB4ݶНe‚B|mb] sfkkp:t\b`w ;cVmg+\Q Іh4m{#9433 EIIɉIw2s]\UZԒ0SNCBCCBBBBCB4̪-ZiZV3؍5°R ӆhhC4!,8g۰W:Coӓvͬ0gggSSSFVʀrZg4gӪFm+Dm]߫$x=qTfUTT(jxv^}XO07lm[7Z|Nʬ0ggg!FBHx8  ֖c6aTϳikJĮtekK f5ez} 9رc.\x]]]ˠVZB! z0XN Іh4mi2Cmᬻz} 9(..7:v\ToߖH$3Ch^u3g!8۶m  a._,3؍5b=Uaulr m6Dm]W$|;w=z4snaN =FFՀ 崵hjOb h:6 gN_xYYYb3g4s)JM'y<4RK~4=pTTTXX%$ggg333R\QQaggQ^^&]\\ Zd 둟\x8),$++6AgnrCrE 0B3=l#`0r5 SNݓH$׮]֭EvbqBUW-[2 !'w|l7K4ʲnي^WBQ\uek<%Ӵ)ude[Ϯĉ3#3h^PCGrXUUHKKcVx^,--E"qEEEUU۷ܹCQ!D9)%/w-;Λ B*ⷮw3crODg1ѫ,ݻP"_Nzc]m`n؍5b=fs3ivèg+ ӆhhC4!9g1IUPP>.зm,ɡD"ɯv(@( RtZj**fkkRQQacccooMPP( 7dHS_HAw.%9Bu5۰A^C|u~|<3+"z=UEBlK=\B}/a>% ]sb -zD>b^'4WwS&g+5] vjZg4gӪFmi3U-?Qts{U0BB:/aЁ?_ԔIPU'gus 9sX\\I*++bH$iPTbBl<}0jٴşb<<*xB\Gw7"F )+mL5>ĊmK^ׄA.,_KJ~Iuv,:BvQ//0'h2gMCY \z$j5k֬Yrz/KP]^g-_3-ES/^7!:5O]1~"Beʜoz{US7UY5°R ӆhhC4!Mn[^}NNBl}!o /۞xoսZgYXX0KJ`&6jL_\c vGh.6<Đka ,uFq6Zk4ضB4ݶН831_yxS lɼ5Ii1Cí!/Y-}HVk߽^ͬ FVZ˱khhC4h|^}459V@wr(Ɋ Jka oV6DC[kFǮՇ̌/%%%'&&ILJLLJLLuvqaVFVZ˱k:>] '5F=v}>t'!!!!!!!! fU0X:C0 a_u>tw[:rZhjObתuD]d@rХlYlw+hfn5E&*֚ic Іhhkh@rEme򌱮W0=E3 ^@-C"!6vf.ᾉ(˗4Q hgn!>]s3`oJ9s&((vrih)JM'y<4R)H222遣,--%/,uos7 ,fKvqV 4E111H%$EYz7;s?}EJMdZnVJZiC+mh]+bbb09^mSR4S<$ kcXt& r0 V ,aXiF(.D ІhhkR V DwrXUUHKKcV#9H$ynQP EBʛNKMeVd4;D ІhhkБB(%0̈́|3L7 ̅J`H)Yq h}t'NRE YNUuvEuvE} &&I&2)///|ɱ2L8e\2.T]*{y{3k7Fvv\.c.h$??ﻸHR###Gw ROOOMɨ&%\>ul n(Qgc\r-EՔ"ʂ{?p &ʮ"\a?gvU{lQ\T;[Hݗ;tE꩟vzb ":Ch(Sھdܕ+Wg|9yu@Wiߑgݗ /[όO&Ju~Oy|B՜+y\r=߬ Oh4Un :yiuz=¤~R<Ldd>̍eR=,LΧi{E6p}ZR"_Nzc]m =^`ՇmΛeySQߺ.ě]ҷ?UdD(^?p=SU| ϦÀqN=΄^ZM %r6d{(ٻl_T^J5=p: Ѩi1h?wx!6SNmHwrAG0Ԋ:?>Alf{="!6vf.ᾉT߻|6lÐ>$>>p!oȐ@[tqB|ijP(\J u15r&hBK8V|BćA={:XY9qQ!u^ZN|&̍XʢJѨianÐsc\+miii3'RT2KŠ~.t^֕ >ښPA$%V!D$(KJ̭BG,HVBBeieQR,Q1ihuHw#:Q]-)k JJ[F].ym;o]9asDycςojkjK+)*nMѠK/o?cţkw'V^t,WMtEá=+5nSev͓҄ޙ۹nΧO9w}gNt Lc0͑#FO[O܉9%rMrJ(DLNBh\%BJh^! <*BQF6Ov1(qtG/)"> BN0rY[FJVAV4a;r0_ZݷÈHԚAYb'[IY|k숑~6DvL& ]z-үΩ(~ a:?--#՝ʕ iqeEqBZX^NkU =YfT s6yX4yo$׼ _>¼ 5@_tuGAReFROզ:%EJ(9!3)CI<%)ב\PYͥtB̗& $5&4%E P@+2(5jvv+W"4u;f͚GW~)7ݖy-ڿ_.^;wxlk!ttussLn+u7ckK'x;չ,jWBUwF[+]zj'7cNx4:0_Zݷ}+Q;?{rt+w54NvA[{;FOI6[M6A4==:sLPPPmM?>Gtnnݔ䠗{BeW v[4Y3+y1R3ִm|%JȚ"***222:::000//O,x0JR"dddOGEE1YZZ2J(##c޼+W3n\*) -&=WUeim"6TJ"KA Iefa Z4Ѡ% sa۽k"\%zY@KK*Z}@jشhc"վvѨii=꼴:oiIbbbڣIUiJsdT^QÜ stL4мݷm߶mCf%0 !\c'8Bs{<q ݡi:/Mw4(eF;3dYX[keo=3>u(glim(3 Phu^Z^0SVlM999ffffff9997nbVrM}M}r"/FF^<{patTN)ה-+kYg߸q5{5;9dEE =kj>YƎ}~٧}>mڴc0k+:C333Pt'1)11)11)3;ťdCjwڕK3=~$I~V,_r~e ̈́mP?w߶5m{8mMۮ_S(lh~:t&ӑ")W\韓?J+S\ 30͓2 4C0DH! 9$@Ar!$@!sGIENDB`DataLab-1.0.2/doc/images/tutorials/blobs/10.png000066400000000000000000007516531511411446000211070ustar00rootroot00000000000000PNG  IHDRU: sRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'9ҨmeǸ [j$ӟ'Z|l3t̂HStUooWiʬǏIMӢZ/Yp"9/t`B|*YѼm;l'ȱx7kUxR~kOrKܓUMK?OOOO/2aUޓGXcc6ThyǨȪcw[ӎ1bHvW_{JRTgSiRģdE▷*5եPUQxCWhu^P̀vuΓxmEwY/a_w`Ρw$6"997:s„է)w~n0;/PKC4JWvLv39 EY!M)j圧?}СlZWv˧e)篤+O~pv{}5y3t2}ÚXU{4S'9L'<m'bJRTBi"CNZ 'pKJy&ÂB*5=@j<ؐN(ƚWzI[kMꈙ9dֹMըQrn^kvLo"ƼكjuUL]a}w(~ɨةNhܹ}, >YuX gֱ]~B"L5[/<븻WT lwG3? Gk֨rQpC;1aGݢ+Ui1hL{QG~5o֭tТ6녥#T t;O*yQN._bit }eQ]Z6(۝j .Web9x̋uʇW2Y!ZN:FTrq\qc^MѮuڵ_Rdj\۪u2カy͕%{ o}MDu ۶ʲ>6: #W :4:zȷ&;.o"ѿ;J<չ\c#DW5) TAQF7֬چ]Es5n5qW>kT[9)1sE^rMgܬRX} &}h۳y㪣y!\[ұ/֎ aq6\ջ|i _H LQL:?Uxe-+#C|oJRTg!#] レxmׇAO\wLFc_3=pbBğsb׽U *;=˖u'YGlש惪CYxq|itjszqxvOB;1\Bgw]k'SGv¹z[ Ⰽ+?珚|3{6|!vtKJ?! *ack{~>~z˚.iH-'agO([֍Ȟ{-}o}?c'?>h _:o޹qjhYa܌u M}ȟxvb9[v9EϷ+sO|W~^N'XiѺUҶ_M/{v*lYts=X[ O_쇘ǥZd\J8v.Y[nA^'7s+J.[7]o¥H23rpe_Əh+ƭ򣳔/ʐ<_}![G9o (/Ge}\÷y!PKzO{-!޼iDodFOd PZR/0 nR3PF^@<~cosuO*oZw;W:}Po8zuõg4\sr$#N/}# j諵lx[on|و 9R.GbyzJVܠW1drd_@:{5㲙1d㒷]jQS|!T~3eEz|pdLD.%v1]|T79:R[~WS;{:g3̦-cVsW7[9xЭL1I{wSMj]74ScO m}{R~?+$(x-%3-c#OeI@ݽ< #-)-[^4sjTN=(P/_Uk||]2S٣zD~lתZz7פLEQK䢔Ź9~7xw ]>e7[DV~e⊋3vFWnZF^ ,p48}PI_L9{ijaI7}ЫlոY4<6ozbi;yGZ.rRB^%$fyxAyT<:s/_<.fAi!ŗXWvRR^(''&s~ v&ի3y/ 9]W;z')壔|瞫@I7 Z{ʵ_3ss3JNx^ҽ?M0EWׇv b6vӂ؎ t^W 3(!Yw:`aL_dFSHq'yڳmy?^3M`䣶HDi:wFˢ5h11PN&Ի)yW#%)QQ|th+_r zLt<\9umF5nX%ƫ~wu.qB0 k*йz~̫RT*JEb 5{/w'X-?fdagpڿvշEv Jܽwnqꃆ=:v{?,>j;&-ioL;p&O<褱IuN~WmS⑟FE;h~v :JbV2R6-oSXd,Pux‘9_@˵_g,Knr3ԓ캘jcDQs9Sjve֜LY>3u.3愘SbB6d Z7_WrI+s8!ROQW!ڍg-;sٞ ;nS8丝-!~mYNSr5 V-2(@4f]nE>2U*kO5`nNBN5[|̓s~]Beu!O9ʿҽʱG/oE?#^1_ebح@<7,xEVTPN[QEޯ۸z>%#RT*JyrYjc~­O;V )W1 Xz[Ѐ|aݗ 9bTuoBǗFlnQݹ֎xiQ.,O8B {yD7YS7բBpx_hզP|7n<ʌWkWh9fa?l ܼRD̘fEtYm6zZХ3SxHu*|P|UwM/8"8|dE{"FȰвl/?O1}K>*kPݰ}7L^:vfX놇DɞdV|VE^V[ ?>GE6V.54<) S-of1,;9j#K~RKzTV^:[lelü;X{wQ]ky+z"o~wЩN5# whTݟje'k:F5mBK]U`UUBPpO9!/yBbj雕= nP.8r6T*=\F эEӗY;yCJRT*sdfӚMoVuv=TUǡI] '3G:O}+WZW3oI-ܹr|jWOicDzT*JR=nܸ<㼐Ja=G n['a?wzbڝXݱ_/mǯ{L_ST*JR=,WZq^Hz-S:T(QF ީĽI!պ|U.WB'k|6ox_hm]:_ST*JR=>5J֤O?ҚTRT*J|{ZT*JRT*B.]b*4w\52TT*i#Db2 :ly);wT.52TT*)7#à I!T""ݻwoܸѭ[7٪D UT*Jgٲe !RxW穞y橑Jzzc_ݸml*JR==K~-e<,7n,I5j$I҉'5j$'O6lPbWD ԨQC G UcF:?F? x=ۋ/tWT*yAA/t<`w-Jc<ϰqNo5joJ6"c_Ӌ=:.J+&@OvYu ǚv nګT*r֭`o7Yyں *Kٿ&LGvZ$I$FEٷ}4vRc{ ٵЂW.Z&I 1TV\.R-ǴCkTK5xUn{20sig? ޜ+tB2^dSWo ]TV1?}-NJL)i}T ԨN ܣ5k.I,qnTTn3 h:t싵#ktk 3W.cyH?oom6H1S2JREkCγ`뎝J@X2bK8~8ߜ8qɓ'A(橈=wqg_M1O·ǿ[6;iTv܉<{/q)~gf<ڒG-tQpOqh:*ڱ ] レxmׇAO\w%D|;l~o3"|cݚuzv-h[ ebo{.?}e/tg=QsclRO4y;|,ܨFBPT*꟦*ޮg2/75S 62;ZR|❌JeWXFZգkUoPVV,2kb4RDvD Dz cمn0(5+odYv!rŒkJ闏l?; vǪuݹrZ[ /t;j9*>{TC]5:ZmŮ5yi;uʆz׽ݮf{P3#Rxx6_] &e +?Np5J"GW$8UBM\C梋{&gê6ڵ7X80ڱ|KTuxZǽdݶ%N뻟:rAe_Ë֯w꣣g7Ǿ$;|GN];s U*=|cww \װ{/'tyE8}/m Y/lS4~:6[ũWNo$h6q-1^4xpَaT*J/R*ۈg=huύiSHL<ԭ1gۇC椵nśq'q\ Ѻo w Z5oc~*8\IO%(9یZMɑ!.iOÛt}Nlʩ9=5%оvgH3+nrI/*S9vT]]vn!}f.Pyo>ۺǝg==wzo]ok\ZV&+UҝmR;#fO$^٩IuxfݻFViw42@}TWÄy]s˪p1L;V5ʅW2d2;@~uTn;j9ؽT"c$Wh+Pk>?rwҮq+[ս֊/lZtjק9r.Csn=p]Qa+r:"-~QT*ռIQI7i<mʿʔždp.KHO_Vf9JDs+Zjzu Ed:nةvJwpNFt`^zNq|4n`Z!|f?۝'!ywtq#iGS| ^J8sJ3&g4d݀Q,,Wջɯ]>^:w&L˃^=[VH|*vI-h ʅkRGAۉ.Gǔ_S<6歅x9,-}S p"U[CHqPm/s^i*!!j &Kzn%;wowG|:}r Uncڦ=\F эE=^RTLDٲl ~EDٲNK6jکa歝tAVht *p-WN3((!IЅ yd;߯w6>Vy 8MKo}7tyCv-{UGw4~usJfe.Ͷjԭ̃K{m%dq q YpSY]}#zO#q# .~}9 ŬkGb⒃|eG%ű69PN*Sqo3 >z>{.ܺk}v WNְ툦wwq{W$\xdՔzA'SoA4|Ķ{)k+7fT*JW <,55°ck~71v`лlFO777a7꾱{,ҫEO|8[ Qߋ. +q#@6uJY9j2ߙz@!%T^R}ebX5MPӮ*yi)^vҩy1۲wꤡQg,uk^>}eptIe6w6:qK{-`'VxD'{;*Dӹx+҉FCU>,lLfd %i@ `ݻYw~WJ*UTDٖP-oىӧ/%^Z?YVǨaeU2jٚPWSFI)w27RPܜ\ m*D͸ot_nU\$.~Ƅ:Tw10d!at[2^!'}Ywk50.&Qͩ2C1y=kx{Et\qƬ7B)0Ogôܰ_~om{j<ΊKmsn%K>Y1+_F3:sv*Jga_Z9 mv;SZOjٲ\Z| k5e[\jq豋 ciY~y1% ,ts>%D +զAu[t#R2\P9;9|:ᥣx8>-k׮ufE)E?-4%d'٢qƍ7n$f3=)4BB#~VkwO7&hzjzs<( :~lq7o޸@%%IQNX߽°5.*.]O%]+k捞~~~nZ(]~Fܦ*r,o{ؼ-\v;a@p :[9WF4TS0erEǠfn;};*֌[W}1pm8yԬߵh*[xj\;W??L{G^n̜74onge{}֖>hz21+7'ιuj&t\za{ _ƙ6qӡ垃J/ϗ-NJRTW.Ycn֨Se\ OyƯn>M5ׯƑzxd%WůX՟"wO>sl\AU2XstΫ>%c-<{Uu0"ԝydņ%@R!HAJ޲bG1#=kzW?~ YR.{)B'6jpJ#GnF+{Hqhmߤޔ2{SAiՄU;y>PiICߘ7ŷjT뻻v0`le40O;_[NjPĶeBIka0OOM>^RT*JR-LiHWlGF̯^bرc ԬYS$k6o=|"*[7mԽsTqlv ƀ*zNhl ޴v@u/bj6ݐ}wW9fi©Yvz+Fpx[ wzxzUl LPhm6:'+}XAx"X5iԬooܖ?yfv `yƇ_9`&.e"2bU,׵kW0' '|rcAz=ϟ?b*4w\2TT*i9uTIvoz`Jtt=_؃Y~X?A<2.?Rӹ蹉 ZUt\Z6_[xT:52TT*):u#[sa!)Wwpg>W:لce gM|֑y"7Ŋ~ \6",TT*JR{YgWtj?qj~(7gӶ̌D٧o{N3|嗝g *տK3TT*)*Z<D|:~3r\\ܕS[~_ U*JRT*q=NdӁA_8x9C$9U*JRT*J(ay?y)JeF4mtU*JRT*st }0S~/Pm M&SUO^rzJ~*տNgRT*STS+D^P6}L^C~1B1G\@9CSjdRPRTԑa`x޸<6Ntաpg,^Xo.U{˺HsGMDw.R=/nܸQ"h9]3T*_F*JR=E ˅N37ؗק5=rDզ^@NAWCI$dO#vU )Wܳ?xc*nfߪSyRbm_pF,\*JRJtO 4ZY{NxAH<&˟`Ln=QMzeaY[zTO$5f}-CK8/yif}ڞnUH\K}J9hf.qQZ:*Jʃ-^sdGV.rOw1=v$˕ÊwMβ)ٚt7\bĄL[t+W숳26𴇰䣿.t!ؽ\޲d"J/(Ed% !y_noutg:XfʟM-juUItWOA||KWԅTލKq>1u@[Jlxz' jO{;tfzĸ%=82[? oL)8n~IoPp.{3?k_# 4,#^' n 9X?hvb҈/w7< i0Lqa?ej]䝳vGR'_V6DEA_7o \c"'_tj,kj2~KW.\2dׇzVv*?|hʲe]θs6ҏ8j\Z|{+fM-}w~gD` /U̯H׶Ɣ̕߷ՠr3NZƄ:>W2ny5W^8i[7i||Ҵ?JnRT%ӯǞ)[]|J#ǽ3~]Cy9KxVAC[s EWSE _`vki˹o%|*h@μ{nM̛7/ޕ&fI8KWq*Yv9iO&99)gwYd]Rne6KdfJݽץ{%PS^NvaoKBZ?/8[Oy5z|e7ΟR/гL׿p`"@]xk+xmΜIQwZ{__W[GEҴdn['gآ.[yٝ-Zdņg[ϟ)ԥi%ffP_R w.^N9|ٯ;.+7Qso\|mӜjwmɧZd}qN5b.]z ђxroK,_wZcy,+,Yms )o^l;{*)-]}JW[xɯbԿHW|ϋ3v.&_le˧bbbNSҵ q.'"D|"R>7{//xd*$33333s֭WEq۶m$߻߹~s[ܹtΝ7oymt=0}Bab ^zWvlL,\9QtX>:+h\ jœV8m;E6,1?XɭT l뫤ADYOc~njY΅Ot\qh\DU"ƾ_#b~"s{fˈ♩5ܻBDDa˻"TX 2tڿ56:0ZT07Xs➫[ U3ԕ3~`)9U`>Z5Ve2D4oɅ_Gֽ4UĈ(VKWi ѶyɈ)TU5@OL;fK{V~>zƵCFkuR҇Hf6Ѕtۿj@xͨjγ'/[ٿlͨΫWgcMgaЗҠiH_{QƧRuT;%]ى2bjj)W~5C\xoogK:MnT%nE_-~%щtu;gV;"m6?&++BĜ_h'!:BG[xWM H?'O@Dno9;!0sj ëh}*F7k֠f!Lيc]oȈcS +'|͏Ί%gfط յ*|̉ظds:N.ԍ/-pfnrԭ.Ͷ _`*Yoyb6]Bj7nX% [wە?is ѨiOo|<\ |u4 )eK]3j&M v[9R+0Zv~i+D7mT=`kU;"":~}OGٺM5]mRܜ.ZTR ;PpV1113D1@WgH 0)NY{):on/>x~:6fa7i~)Kn?"fNO?=oxiϻMO}}cBV†O~u^}gaUf|<)_ @gm޵W@zQG5 hwGҝnaРP{R4> G~i@P@L|`:)^9ǛN 2E:hwT*_uk-:w̵_ԹgRǦrǯ?|̵]{{L}]\y/kS]bunwG>t/֥#ѹ:ߞ~kJڴ;[=N){;gN^{B/nS ~pG/]?qRY:zѻ^>v(ɏ?opG}}Nʍ:s^9g,/CˮM)cݼx2խ=wOf%8`^;r­UPӅ[2v=R ԇv0Ȃeg]Zwifj,ɂjح}w+?zzj8}\B܌W:G0n9[EwTis=GEשJR/n}\/?M\|P̵+_J=`Tۑ?3bص#flg)]z'mz-6?=E3 WqĚ5#*h_{ʕ+~TnYĺNJ~^c{)xEǔP.k Y}zE~80`媎 gJ҅uky}zM^SV.&tFߞ̛F#&6$Rv n= k-zܘv5lu0&W.ZG+Ս$W.^I lF0 &=:g?(x+=!z Z-V$zz/t{>s2w% 4Xo"c m )ymyϰG7_+ߪ+)3G.ޠ'd^3>ݻ<_6ԿjѼK O#xr @f)+OnAј9,ߒ m5~J7|M?m?E}[3Ὅw|㷟wz~N#/ ΀ Wo$l~=K7/yЕpzMn1K <}xuW2u[0Ƙx7[)Pװ0G~gLI![%) rn+zJ<ݭFV}ϠYM+mZIz gВ_T\f;QO2oKHK<.ݼVLpݯzu@|(sB$߹tYͭZ+|b?I|Qv7l I.=y}] Z2~nQJ]r~ Lۃ^yF}-Ɂg.p4 z-\CN-2crz/_YG}aT*C!#hՆnޣkT.g#kTsnLe|޽]S7ެob8\PH`~H\\]f|',_<##^AƼ`4p>=6%]˖ӱF| &ڒҙp#êTv/;Ӑ݊w̍_T-;tIrvVN~A#Wcޱmv :B@: D͎D{+Mou# 3jn+A\D)}wR&V^cg[[dxo5a ģN7r@Ȱ|>/FEq3z_zIY=ɵȪ~{ӽs KGשոeV)jEyz/6g>ֺJ?4Y>뼨YVw @8cHq\륯eWKZnҦozh6:L54|k{Pq\CI۴e߱+ΈMMON}4 B"hpX0NL.Xn}BB--YR] ]eLu~nN; dG1 <>VqxVQC /}š"~JLvD+Eh?QzIR+lG@ oO$xN9Ql%I?xJmoնlgxsK<BWOZx:ia{ 5k]/9m=m4]P佦 (J㇕k'IiI?ۧCk٣1cZcT(4GߦͿl]SNJcR֩](?8CNua)РZדZ .ZpdL`=4zwĜ/U,GT'_Yte#7Hei midߍxr<˃Fsfߩ;zR{z~}wTBA7z8v[6u/vў4@gHpXpтǯ;O[2ҳ,rIY뻏k 1fԷfH.w`%4ǭɶݣ.|o "e<׋Kyt%!Oo+ȖԸ}K a'֮hB3.G?>h‹ۘ'Z@4%߶ 7d` [f|E{RLlJ l{fb&RznfdXL7ǎ,XŜ:1ÿ}eOfd:nΚgx.GnR!E;*϶%9I>!&ϫ~~b\9W4W^ˢfKLv:@-r 'T@5hVi4Fi_|oG#||/ ^UGwW?YM*&{F{ to"oύ}*y XZQԷ>}Z-?X>YoM5OF[pYyK?f_1շѷo5,8 m^=A5}] ѧRH!^ۺՊFARFSo}3ܑ15|=܂- x{܃z d|6`݂ߘ&P狞].n/3a6z_r,VBru&w"V= VQ}z_¬ҿ?vdzwݮ]Xe׾c16^50tMnU^2ވݝۦ=:1yi'}mOe6_WG̝;wĈSU*?hܹCbk@F-]YLc=TщZ}OL3g_pHGӑq+.^)̣Mw!nP<5e͸nOQ#.Boe޸ǼU v+ev׿mQ׎ /Q 52=n9R!Ѹԣ3Ĝۉa =#˿:o?.fJz=Z)Gi`9T_B- A[kwrHH[Iē`7g@H˃3 )WEe--;r\y_ *Ĝ{Y!|@R3۩S;:ф@HHJ  h۴A5>,wWSzzP͝;aPx:R^:Ԯ4Bdž}>'N)ղ%]o՞vQ]#뎄9'g) >#hd~J02T b9mӆÂh*K:nٖQޞ_V.52Tusέ]6N8Ois֙Vw+ͯr8q%8!ףZJx GdRuԩI3}{T)EXhl`@o/CvX5,TT -z+S*5MN2R޽~}/ L*j5y?ۚTRTy5k֬Yf9/l}֢oy*+G}}==MRTVy(52TT*a|kǎx -޹ 'O]jjҙ6my->Y'Ndly5[Ζ'NLe C,ԟD3g|'5ISȌ3l۵И9c&1Q^ofT*/fI )cĸ`$_܂U>jVo <<7JbgR=>YU';'Kd {xVo,*Y%y|TΝY%)< Kx)KI?÷~;77wܸqWځ:c?oQ,sǐQZ"V&R+eFRe%̃uqv$VܩT68ЗΒ\ĉ1?+U?Coo:u긺|5jԬY5Qkסkv^3/+'7Wym1.enԄַZgӶ]%rV ADKd9 97sVOjJ@6Cِ0HT -B8\͊. 2TR>WJ;uDXؑ-0aAÃnY)PICՏ3)tYʹ x@ o.73ِ:*y DD*YD rܨ݂TJ,J^I-^'̊B쒕jA@$aă]$ l @Ԭ#oF8 AbFĝ:",FgAl3NF01dЁCEͮ9uD DG$@@`F9r9Lcb $0lA|:d0= 9 Q P7gV" `A9Q@V>w9@6ޒt:"i@ Ev *QOd-4 H3gE*x A&YΆԊ#@ GJqF"t"u aZ@Ќ!Z7HՆ4"!q6"1PCC"hG^Jy2 @ER@3,&ؑɍڴD<0-ARp0Ojb BX)hj,$oJ$K9S,&d3fG,[dQjCjCZ)AqC*=tD"+!%}?ٷYɩ'XgXڠ )t8.&'Bkn9r7БiCGliqN)CS:׆׷752ͳu}X*|."Z2S׎H3fs oYij_ɂs;G ?{pGy5_%%3333a!}V̼k/GSiА}+kPTM`Dre raP.ygWm;}#`֞U۴G% ^SzPG sd#a)JHrlG&"g 4 뉄@HŴ@S@$ $pJ% A A@D"9@a` MclYǀrV=EP0b @ !1эZ5D33^PFJ JT򤒞H=] @ʐr@(Qjc'h 00 (f-Hs Uw*"Ћpe8;8PO@HhFd1mjBND"l͛ii 3P@E 6M(XǀJd=|ӚdF.I5 -4D΋@' y`bTFB RI)2)+XH@]## /w#Oju6% pِe:3@H3ICpA# Tv=WȯוE 3V0D1%f%$ GA7PV.B H:x@;R#uY]F aHG'TO 9BPCddee8+Od85D,f\ vi!%LCr90<06/gJ.!+X.H Hv,L03 80( ĕJ:ҙ&S*7Jk u(U|Kc9W*鈬51^ LɾJNpB#Q]>"@]QOv. r<sk#^S9Owf 뛻oC뺆|VfͭOVMnwW xcJJ.Zfn{woEOn۷'4ӺV5e`[iwPֵ E3/>baꨠt:N4:N; )Sр1s6T_'??Lֆ5*U⬋8v(2Ur=~Y?V^K>E:!eO؜+ٶv_͇|Τ~uCkt8{R[kk'9>$q֬f~6SrGE 'נzy~!_cwnРUqg][sRڌ Df@HH(1 9d1ފ<H8:`@OdR Dl<" +HHt9Ε+]C yU1 Hd  I2X Oم:ܩ2ʴ6$F q&9ڐ"@Pw*!HJhԛӸQd Y+IOҠN LO$op!+ DT\L2,d:3XOg R#TBe0M&rX^ێ`C€p " č"O@GAEOj7RQi#LK# *5NDJ5D"&4QFbȉHE$6ƉH4&M]r,(ؘ@6vt7`E^CdڑS%$YL+" ) hA՞1 z Df@$ fsx2!T4oblY VBM(0ptTR- C"#X3@jGU*pP""eH= D!G=8IOd %@JN;"""51^FtDTHD"ED Z# O(ʭ@ AD"+JXHd'uROdz" `DF&0ΆJ-.@H! 8%olȉ@q)f&X4Ap̕2uD#"'H67M@-B*{SZ?D#CI_T/'l{5en@r>M[f˟jÇfLfslS $Jf 6Q)Eū\jʍ_Cɗ2Sܕ5*+Q3Q*wƣ'gw.-xػnl}Gl|u\5]:Gy.1#IcMoKsco;n=Yw9&S޾|~q  _~ -]xfkN7 /yif}mO*Sb}W6eJ{I?|FO3+ ]3F4ty~>TqoޮK'_}_QrKL6-i`ޜ]O\;w%0ĆyA0;Rry1[~і_$$"R )@ T()'G8Iw$"1#ga\eZ h. !]6d3^!(󠢁0\1^ D2(5<=a"눤#y 4D"rJuFE 9 ϯ`ZBlHsR FsFFI1F h ̎\:눬Nk~@eAΊTG$=uPpeH(ܕ5*9rJRq2l`:"PrvTonQ`PD|.vLceHԌ^q΀4S6[-;'{~X]&Bkw„E8uv8jBV[fh}'&33`0W Qo1} ;vYl[}ΥRm8үrׄZ*u*>FSQmZkx][uQϋׄ5:4*uxEǼ(_c5kAc^ }sޠAYf4nu7, ;TY<15TGPxG)~^[R`ԩ h:xP1JTSƄ IcJ3fCf1]*Ӌ DVJ2%NbQ3c @$fd`z" s'gt& 孍j,'a0 2$LcFJ\#ԅ^EEW.DF$T`=APig(!d2G0 )`&3Vd0qfoAewjI`Ci#LFdBPEJFß=dP=0TV-9 8FmnԦ!̍.L)Hܩh HZ"SR;5Dvv%ffT6R&!ZIP=A%D&|^J\6͌XgGNJ힜՝pVJ,(rD΋ojTg)F !"*5Z"Rуl1&i4D#gEpRHZ"+D\gB΄J."53 CyR ha,5J%W*RjF7duVJ+`@d DTf1!5@DhR ƛQIFBT6P@DOPC@HA%o%JWF Ȉ&51ށ#LOE xpVAoDv63C8Em8 RJЃ:tE"RdDDth 2_b0df%z8t O*mdH83f k6U۰V^fǍ?:&ʶ\}5ɞV]6Pl`7Y896Wd6 eh}hbF#X,f ||RhJJʾ7g=l31Wf.|ŲhPr:|kKj^J"Ák]R +Ef WOoV*/#ZDxzm<&ƾ> F}9Ctc-yI+߼{l7>#k_@XO&Ҭ~ j6@<>^WdA-yx5|cN)~0K&U#?kL]V˼x9~C=]]}+0nu;m i]?էbۉo+`r\*~囌t~ZCq]o8zDD+KWTY)1Po<$! '! 8 D6P'"RIec2'x+Ls*Bq:"j6 AK$iHDqJ*J5roGNijFԄ\6CHm:TR2i2%RjY%9Da:eܨHE ˨Rt"Rrv"@a`VD*#̕2BPD:"oCނ2RyK SV 8r"P=a~d RaMO$LtL#كa6dT*{e0- CB`:"ہ&22 a2lEPގLs_֘xP)QF$2Henk);71].@(A-5SB2#UB&>4ܑoՉ 66}78?7{~y&/v{a]&Nθs#̻.3 眺y˻<y 'ΟS7URQrKL6'2 #HC€R2R$xx %ʳxDy;kA63TKPI @E2RЕJJ.7pv=+X^% @*#A P`%̍J¤0RYO$ f&2(J@D 8sPcG΂BABI"#3#AEj3R 'LC=!J_A0*;1 aF"!JE/j`l#ebCjCSˑƌ*-Z%$R#LC$0ۊ$[֙`aĆhb̆ԛ2!2T1A ,mLAO ;@ނ!́Ԇē80 +-iw<@d~f%@%T`@LLkGH>gZ R8&C6XPcfZaz\2):ʀV@-Q v5DeXTޜBdS `Gނ{Ѕ" E?(rPDHHH,ۑHsr"\n4LJZQ6M, *klCx1e$:*0 lA;+C*N.h\Gd\@w!ap;򄠖08 jF 5WP٤[]^-/|J -: +?|  |^qm/'טJ_SrKL:U L0΄ L#=CKҹȗ3YQ V)^@7jɅJ`R޳4`F:"3ٕ2-<0 U%7y  23ܗ]8\hS\u 0 ȨF0 D%Q+r2RDwjIyMOؐwp !`AMl1"P-!nTZF"dC΄iDF*r6 6R;q  sDv!!"DDHs ('P`\%HS:<ٷYɩTIII]v}+ݵk׮]5!5LlyK6FTʹ%.1_I?Q|HXXvo3<įJվZ6BKgVӿ_HfK{zUtlJ-o2=tڙUiRrĔ__&J->/ }^b}OIW]bT6^%Zꃯ:UvM_8}S)Mӏwʗ"KQ&48's?@Y}o{!!J0e2ySAG1A;>~iаcvX%W|<32(޿o ʫӇ-rrb+GFFFFFy{'Ynr5\Xi*}@ 8Jz %L*qrLC]Y<=T#'"A Tyt yR7QɁ#L ]D ڑW *IPF/"@4i39/b0=1c4 +Ւ!@ROFqD:gEM.Q23j8<- TD @edTH"{PH2R;rFx@+(CȸP*+cLCdJR"g r7#/"q?ΤtT*N5D酕7@$ hExY*馗$H3&D`Q89 Ō:(bAQAE 7vt8}p~Gꪺg^{ IuiM RIbաBD(1D&$!ЏH ,*xZpSU+qhQiu g4i`hls00!€~Lz-,(I&d#ZDPkKJ4֡UDZ)ːo n`PzӚp֦O``jWp`Ȅܘp2WB/ieVB&}_e`Ң&]M;R4 ЗÔq3Vޤx`.hAҢT-!!FXhQ3# MIcMgo2$" $lO k,,j[ ys4kIeh76is^ӐF Am H g9M5nFp$n ]&+GKO2Qcz>`L:û]fc;v2[JU_\yK~Q{,><߽Wڿ=thx> &Gh⇼ҫ?]{ӗ~~6WgOx7n>lG;:9xG?w@=}» о NE^;_wٞǜ˯ zӽuӊ5䖷j<˸lLnEhc&LmzU᷺Z\ާoGN@VY1n]k5vT~+q?\}UWnl7\uH2P^skV.~MTvVJsẫOYfQ:.j6uW\}"m;eܥu%Vp'8. )TG̫Z,Ps]U6lk}FQ(hX14"RI7Ȗ tP3dUcOS[1M?F"ژTS+X Ydoj4mX'e0.îF\2ql" >*mVc luB)ؤ8r &}0JXaܖ*h<jMŴƤXAu5FϢ&RzM=I\*tIF#&1 =CL2`b3֋V@SQ#hbuK1)>p^9b7hh." H``B 5[RC?-AMG1^Ր"BPwDF}f` E5޻$$:-6 eaf್> Lx$ZZӴ6kLX(84 s-sJY}u[Zjss> }*7k$tUS#E I[ʶ!QC?)Ң&{{c%,fB 20&]BtB"[ \ߤ4V}CnQ i !)8)@mV4QpVoC6k2naBs Bژ5a UMyYeߜvU.2Y9jeͶT0]$yqO??|]л?{{>w{>w{N{胖. 6Ϟ;=␽2nbo}93ϝ7}[2o4^walv{o|72nß/^~]x?m?X_@]p% vmg N8ᄁ&$#jCf'*\a.THĽ4Wy4!,JMz]ECl9SP:(-v4ob.>[XxT1/@JMja n @؀EIR6FZ6[3:S)}uߠ6iien/&ypf5:ca:숃pć= [^> ;}oӞeGݶ}ԗWӯ}.e.d޶YG61󓾴݉7t.E~撙;oo/Nz)?#{ѿػ_1oN't'a>Xc ݏ8W=͉ǽ/o};Osz}nLer=vɱ;g_W>_}?xξ:w{~ʉige j .Vbh MBqM\ͪ(F]Ф8!:-A%Q'P5D5ĴlhVRNj͍Ѷ-Vzu59XGʡqtQE9x8MoRЁE?cEŪZa 84v+V4ާA*!U QPQ̛d&e0)ŸR4Y %eL qޒ2%aӚM0iO]\p2&1|: L%djq`Ѭ&3=WX5!?077P70kK]-*X-h4ț`tZE5Nj:D@@%SX+XZ774+5Y5hLbjpDDMT!F3׺jGPojB}s+8)Br cj[qZ`BC>ެILm1vPknjnIդӬ6ÃRpCʾja人=㛥E }_dN8s.X\XTf9Qc`5g 64hpž&2lZ۬_ :&HS4 6Q3i7 qsי <Ǎ]xlݺua>̕uʀuu+:$9hX*'S3jQ-΀~;Wf5MEՐ\L?.VuB GX< a!v>4*X&Rh<zMƤJ`S(e`M ' }>7iPդKyArh.PG 2,es\F,h֖"6ŷEIa=W7~ cZaXLΫ $l&M֭s8,*>uihLSR& J6zH_G)M zrVCC\TRh3eV@icoI`mFf}h\ )HD060ӷ2Тq)BM_\[`[{xқ"nlK]ǀvxpfxpx/>h^~[ ȇo++Wn"3<|eM<$n?3>>2u]2(ʗfw_.F$$א&!/ lKҺ:J`1Q&1-ƮEC\ѡxo-nq+I =u-۹A F8XKs }ULs@6}fXtyi$[d )mAhI=pkNh1HK"%ǥhVbSӤ#4%Ж2Dn@%cRYзX)=͚lz]UU-Րn=SkE:6SZRMO(]uug3`NӎI ![a '}fB7Pc\j68$^BbLb4̔f( )\>c%15$JUx Ak/ͭty]iIn.ئA_ JQ@"f j#jWF`P=P5M 94x$IRr`Vk0(XԐ>ư#2]0&ᣡqV3:Ф%ee0řרB{q]Sz D14:Z a58S&Ж 1mXJސ @nP8D߳xA.77Yܜ -\YCsM֎XШȀuLmRSZn=wnω+ wk0۠&]2?O=bGyW˴pEJ+@jHiΌ2\z}>&05AXOՕ 3ԔlDMJҫ2.h|! ŴF(ưȝ hE%jPhL+C@%s7$ćqDM408.uFISchnIemͮyuVMRZ9ߘܢ֢XAee$H  X$獛U}(͆ sjBjjmrQftm\1.hAWpL1XrUD+ ,1-EZmqn $}q~䦓,X"6#uJPIG5c&ukԑ HZ4X֨-hӤ4][\Q4& zZda9Zƛ}khQG(sdCS2?!heӸ4`֡_)夫XhǁYhtiפ4WȨˍ Ԏ8+ruނPim%%רkIi GkJ5)XCDh) EԄu j [b6%`ĵ+,jod`(B2Qcc١_!)1r1vyG\& pb|['Wie!@T+]48ՐF}k$)}aSrQ ,l Lr Hp= F/4707!3u)P 0V1uIGI7N*=Boį`)E8Zi/'j|{^[4.e:Fe:"*TM`Sf36:)YdӴ2'E.L"J cR6XV ѤXдăo -z5`28 ̙ɺ6k4훳1@%^M1:ؤ)뎔: ,cHȨ2'a)5W6+&,*¬o͚bk0 ьJe-ѷoŴЧ@lPWI*F@762 V!y/8" Zƞ|9fi. 5kn ughIԂaI0TaENeʠ*ȬuLhx]ʠE+TIY Yn`C$Vଦ j:TRdܰ*&&s!"PoH 2-V+ZR;3obi jUiт |32'BB:RvDCdD[5W+7tծב[l`qDhޤ&wLd`g*)bjn7@K㌦}Qר Օ(\1ӫqnbrkw?n'?{k.A.2o?s]/z'ޙ0T= yxx='zыϛ~U;i3֭6}?ioz=״;?\Zf/Df'oM;wf{۟mrxo_-?Nq^~ۣv_lW}Ex_>jat=gmuO{=ug^ Ņo,i/>Le] g|_u؍ly/mzsI'7)-P&}f4MoA_u!%Us# &]Pk ђ!o ! Mʾ8o VX[,M)s}MKTʨƖT |L/j 4ӤQФxs)[b5 jDfcW.ry`V)|/aBD^n2Y6ˆTBsZE()k1AgZCQCA6Xk@m\$7AP51@fBdbbIX2c37BVYD-LiHh)Ps4M[RF`Ya{R1)V~0EFŪJ9MKIa.9X[)7x.֡E=M=p}usaAb,UBbJADi(GUM HF Ф4kinzyH`}e Qt}irVS=6k"Nm`e:x74(<9X27Y 稡5h\}9>ڷ/<9Dm(~ɓ7g{`zg+z@ɯIM{};L~a W}g"7_y|CW+ο-àۊN8!dzC$72]ꌹ%UC<\ژRzcӚd25ZB@/@BEVH1βo&Xl3bjТu3- E1lR>ZR3je4 ВTj̍"V@OaL 5šJFuhqJru5wMVCeԡ ͌Ō7ԸsTǔbiXDh]场rD`j +!m* j-I\JMfMkC(ޤ@S&DkKotŔ1@a,͑H`D CB@iR4F~[ěDTC@XZԷhNZh #3ЏkKd-n-iV_}Y |l`}Ք6k׸4f| % 8&U2*a}u v5#X=M3 }mRC9fMg}6qipPǤjyL} hc"K l+Iy&$R$hnKay,#Mi 5)h` ަT)5ZX!P+^o QolK\ADMzc,]ˍWwߟg;]W!N= {֤=^{glp{=:}f{<5/~Tu_8nئؽNNU7VK7}cG?~֣^W|cDMz+3vbjޏ?kWoԿw-<آ&s?_?sg҃*;؉'|n@񵧭qĮlXSN}T/̾;U.Ϩ=s:Ti0'Yss֒:XY45-" 6f:RK1&]M,ꙛxB yUC|2rȰ6x;טtuX#yqD'I am)'m+R9Mqڬz,.BbтH(Pl))L*:))@F?!hj -fx/VQ21GР EjC.+o׬iWQj&3Q%h 407iaq*>8bʤ2`ɂE)ހ¢Q4A3ƾ&plC| + Q$Q"ٷ8<8,, K. ,:SxIQZA:aIՒrL9m,hf ,eQ#2`L1 d`dƔu2RF O*uE&UeMJ74hRՆ$bӧԶ8 5S%eE _8hC mNssIJ7zU-&FXPYԳx`ըoqWrkTQvD~RT $kD M̃dV!52rJMXWΌp ڬZǥ,T\ypIڍ-X-|[Z7xgbRE U,%1.gߝo{rw}.貛?޻F?-4No^3}ןrzR٥MkO_}'v'ߛ}zo~=׷d o}YWo懯l7^7zP_zeyϕg5Vȭ_E@t=w@Nosϟ{69/9_ z{?pv79mϽz{s&WR?o<gg_w^gy`Ɵ́ű2Sz ^09גٗqCSmʼn'3W,hR2\1#+M*H`aR{&}ڴ2k.HT&!EimOk, VU Jg&5YP3iHU&1}UDX7C714eq)2֡Q 4,"C%joM*cJbJlh  5 "`0bP)`Ѕƌڒ* ;RT3-Y 27h5 1UMf4^ UPiηLXg;XhK֕j} 79Z*uz>oP3*c-!*}58p1yO!!>c "15T+06u5Ǯ++ uh1MV4#yD-. mVMz VjruL̀ Ih^ ֐A1M`RSR6+%oJՠoID1|C5!#2j<0&}B1fU{ʆTRm;RncjG )[b*iǃMQԓ!K5 oX溚yd--D}TiSg@[ʌ0!8r롁xboOfhuĨQք۸hhK*H:nlKq+s1Կ> c|>_Nҏaf5ׅus찭cowa'|^t|^ss^>JR3Y5:{l *Vc茷Mzų>Ϳ) ~^8I 3lA1/yW8W={Ɨ4gdt0Np?{7kh y_j{޽ĭxˎ?$-wn/^/oov^in=9ox滊9w\wt9/xß?')^#%9 L7w^9_Ǔo[ ݏ~3枇?amv^:2 ]qﳬGx;.`=ο+N8!jFT1lޒim l ;;RnBUW60wrcF'}7f)Gm]o[m"M8!! `*oq+mT!Ѡp%p=MVp`@m)C^)Y`(-shm132a\:r܂xTfbZ( vs>̍I$Pq0'\#]rܹ͚ZC]~ꆆе$7 4;R&٬:oLh1Oh)-VKC]t`ҷH %Т\Sʈh Z&}<GU c2l'Р_uH( ْ:䔴XՔ7FT 54vaLW7$m\o[7lbLw``PJOIOXKʄUhP)ђ*jX%454JX7$ yc`bHf u60!3"*"ρE}MM*CFP=BaR2oڑ`P435 >RNH7X &0n,+ 7h Ϋ6)7lJBkKbr4))}:!t׾x=yJޱKaCy[MzQslbsy4v[enͼ|lnI ?ayO=Ecӭ~0^ K(c8&3>OUj7A7o]2]Jwл9sv6ݰAn[9 KiMPz~,A_S;ɓnӏ?8T,G(?7~Xo83^;ǾK&¾YVXh|׿s St:}3/bDR9$o&ﺖ(d ƥ\hX+u_! -DTqJ߬m-qAAU Lԡh,\zRt_@]ml a8NB Jp`E ]cQ7X֋W1-8dk6)MF]KjRڤgɂ!4n}CyЀJuPOFTc+5X<&(tiCu!5ê->$RLX)7LjЃd8h0 FQ}7lwI"F5xe ~|APhRkZL#& 4J1nQwBf}:&^!&iij TkIՖ"6GBDBM5ق(ڤ0W+8-: f@nR-r1@}Kca *}4KRI[TCBfzzV!8R*Tp0W7TW@⧤h`I Lؑ#9j""M_j΃U070Ψ\mh EBԆ:!UD-Mĸlzߦo\mC*dVzCڬԌA,0!E[Zrc hiR)-t!_Q2f he~.r'ޙW7 }Y{mGc{Ϲ{;_|s??qcK9]ޣEʵ{cL:{ ;/cG`s?C9A'MLoZwH@Z]nԚ@k&7[?k7+p|{nwեX77cEmm=[9 [\>>[}o? g~ koT-~?=~G^?lTGݖyǾ6^C~ÿ炚IUu绷2,^W/=o]#}N<ā@X5(C["@eW 5J)4H^ >|J j6ϨA 12.hT  lљF#? mB 64 0TŦC$fA ږ2eݤF:+-X7 -:47·0ii.Ϥ^ /1(4`?!}DHّPB uɂfФMf5[ӚU`_]auB8jiդgq ySf`LܢdBJ!F`eo-i+$$@uG1WLȠ)eP~ƬzG,5̀s>[\b?L ṽVRjJ?㣮ZB u>5h-xخYmUԤ4ը&}3(ycW1&sF*uLvoA`SM4XV`נ:"MIC 3fBN 1- PxHi.&4?Rrqn"ސ\ ?)UF[! F׀ڠȖBȇ@0u4O":,Wp\P$_|B 2iGĴ&1&*ahLh+ErIiFohD Cxf4ZD`h2nV6Nh}ݬ?n,f`nlKݜ !fx}_opͣuor_7_;>Nq]f zխur4-Ʈn]>h2XN ̐+ԃ}M_ð;yڣ?FGnw;z/~cVpΛ=7=SyQԊ;tw3u|WZ>qQG|uW}g ѽyG-yv}1=o>뺲7>ɻ[; |UyQFLLG>K\ޕ8tMh6_?usf^]Z? ~.Buyd{7^>kc8l{}s{ns?nO_ nOLżUܞm)qW;pG?q3l]Ip !>9ZFQ"ʛ+m4HXܳTڤ#6nɴsF5Xz0Ĭ r)W78xZ4Xt)4KH\|hP$IP%DJKuL1-- )4xh1h Pi 5!1k.:o2 * kJФXGʁE= ;h:4 |{ZF QK!;y -eqb&}(3&D`uJ#*fMƤX!EMbՖ:9I}\-ZI7X& Up}v]kDZ >*MB@ee"0hhlSLQpL>IJݒhozcL/4bfl^`L!o`)|GPQ!!kp<8.vQw\RBthbBɚҨ4ƅр(ƗUc QCs1)6n74Yj)48f[<Q#hHY}M}kw1EIf}:qni&ߚiiMc@}C#e gKh$1'MV[01(D1),cS_x.ew39ҩvvl\Ns~A'={s/p=.ms(> Л_-{ӃVz|﩯O ՟>9zױU~sOSV|]ZFhnʭ:и aŎ=e [EOymb~8G?1.'31q/}>]^C׏]hloixA훮E|k>97F1͡'|{č/M|_+¼c lXs?qar|b?/WWw{=!/f~^w+܎m+܋e`ڵ6lX:uw*bh>4Apyah2H( )ؖ:%RZKރ q ֙g#M\SKMaQpPjkh5:XFr 170ED[Lh$ ch)%>4 $+"t-MRzPK*sj̤#E#B]f5y0vVCd^F]s&B1cfoK\@bnj Լ 1)Bha)b\W3)+3nC2&giZAXlQB2ӤL6& }[ -:j72%Cz h8 -z2<鬦\d`b`k`LkXnV)Ц_+ _lq(ȤnK+(+\uJ_C`"us4P LjB;MC]4NXh7{9XLS5qIɭ6WZTF`TAr"Q9#Bg۬ƤlKbZu&5MHˠ-Vᙈzôf5\D߳15(i6z  "& Tz\&m-P!ᑁyNJbUC|֐jL #M}hdT 0T`i/Q0oꭽGs9vag}CeO/03 y#3Z3;IOxY]/{dglO;#> wu;|`~s_yW^zg=8otqGpI'=_:fO;rn#?wU_n''niy[=N9ۺޜ~6X] 7 ?Z>5ywSFArkV鷎'&x≇Ɉ*Ub3k@QE rk1YzM2VH Q3WXfR5&, ڳPS'u9a0ļ&Ccu`-D3Z׆`[WfDejBڄAQYN 9o+DjؼZe,4iIfMVuh.15Bf_ӎ\0BE`hF .hSIIJlEJTjcDkB4MZR4re }u\@aҡjbő&}Ru4Fߖ2D/tD3Jn:P,^ I_㔾Bv7r3VSn&3j*c(&}[Ӿkl?JDTRjGdj!T\ԛtXl믐oR$4"7 I``2iƺI 7)VFDr'$ Ҥzs$4 mV-{p4Y7Ŧ}4upQpq0 "!R>k\CRmU*cߢ ZOIv0n-V,c]bhh!}M$_Ym?im%$8&M=4 : @z۬;lFm) 8X:2Fwnɽh nlKU,t#t'O'O'O:h^gP]7;=Q;Ӆ/>uBG|3FΆt{g?8=S~QaqʷV>N{X3|y[w'W}WN?nô?j3= `3g exglޏ}7铏{K{fI.|^oʯ=Wu&wdpS-u/sue=C36ݾ}W>xn|m9Ϻ޹"~>,`7VD[ 'ټO,؄C%]Cę+\\]¤5 F2 hRkK+MH:KrtN060bhFܢ\fH+"%Szk279uלByeM}u!14zUqUL~`@S çbB]st5[Im#0!ՔXc&ŧB@| `1vXf2LnQ"AkrԎhJ U@؂MM)R)qi4Xe[L`XGծưhƖ)9m-X7YE& ZġE=MzJo`Cs} =as&՘T)}MJ0xPdRMbG2A3[ kRBbqF Pԕuho'-֡`ɜ*X1]#jS|S| U:B/`b4v-kl`X@XKlJ9!Fb >ң>#?Y\:Zd+R'eI CܰʀABV1% "nCh6TWlIEܾ֗Ϧ&şe ෟ9n+V9{{os@;|ПUƯrvlW?+/?-6CߴS;o`{/~>{]_⛗<??sܷx/6ͯ;o m/<-sO.^w/G|"z7.pxx~B̳T?\ׯS+4;qO~;o|>.xw*RdRqCLHy2q_ b`uL-mT;~[Upah;i4'4SXLcB<6d7 ,fXs05lV$+ECSh[USYMqߤ%iB洞E<06"y`&sH9 :0lơE]Mj0 􆶔DݦT1rф& on0ΐ׸ CK> p#;nR*(H1&ƔI!<*:XCF``IC8%{EiF"2Xf}7R5n8!U ƖT ?&fŤ-uKl=8Ը015 M*|4Yp|37K8`IRjd(LԐ<8T 1! )H̩+Eߖr\ukŴ6!76=Mə҇QuhjQxYXդXØ:h@F:"%4ddʸn̕=.OQ lԻB)+E,:f83xKwkWk+^ӑ?xuD iŰ:.ոh݂Fs:&܂&=î)X*[4XXTXdA ~ikџjkXf˸5 tOz=KgC{0C4gr֜AGUӟק%ZGcW~?+ ߱/| [M?E|Vpt]RpŃx~6v|-Y-"q>ؽ~p`ۑ/|v/i?'L9蠃VZte,b|['Xuanaљ#WUTFqj XApB}sHYWм$e CK鈐Q@ cL[zn7Y7q@>݇Uhz .,btj:(e` |: 1!eQE }wݷ0̅N M V5$V&jLboʌL;hKw5no,ljJ14.4; bX:4{PCM+X:&e 5^dVyK%SJ/rY%}uI jۘIHmՐzw5Ѹ2QpA㡁DSL,b zPj [[з0(T0CrK2)"XVpc9%U507-X(RT`nW[chaA^q3CCI۬Bi:`0(Lk S=s }U*ܢDJsY1%֦)T(mZhl7$µ@DͤNYK}xh B*B^Do{iϸض0.uCYpq4 AwܴokZ }En-dK1\oB˄>e=7 -m})Z:)nsaUU_|W^9??j֮]6,r73|E2ׄg7. #/|%?w^<;Wo?V,vO?f~5_9ܬCֳw>|^῞<WCgfS%/l(u8$>CkG_է@񕣶yW̧m$~=Vg㏸o>o]ma~_}Zx؍uou/U)]~ӆ\>)e_]aQu0lP+c + MkC\mRXDXG1єTbZnRt.Ӿ1)eKt}{NzG찞4C[AmJE At QW~[ (Nh6k# ^nΆrbEѺuÌ,a-t҃0:jeRX$>P\ mK,"4E`m`UJ #ɖCCfj>1M9p-)c@QB[j֠oY\Oc[h! tLj!J&&W0 @TYLLe?OIxLͪt5R6lς!U ̀u-E88FlnNI7U`^F 2SnӆT16IYIMشbP͛bNS&G\FߢLBY [4~M40TO%uӘk_P(H&T.qèk:!уqۨu oeF1@57ܢ$Y%W|}28GQ{Af㒗n}"cH٢i4؛L<E-е$[KimU&-a) smCFhq)%7?+֒p_{g>y{[r7;_<}/|_2{ѻs_kV̭[Zz Y͚^ߎvW]w;Yjoݷ+֬kY¦Y7Xg\痾<(ոҥ/B`)U"J*s ԀuysyAQǤHЛ1|fkphQߢie6T:C&:R&P-B2Ɍ|VE Ŗȃ yؑò:tpԄ6&!C?&`Ou0WCrHn24s"% "C!d0i2$0&+ff}HmćIRShJ!)!y >JƤ\&ܢimhgŋ>K['@iҵ(7 R1ͺA X!}Kzjk΀&ڬE45ZJF6HV -.L֔#eD#-*@\dABP]TqGT jY[*(cnPBJ8"|{ ẚ u5 jq% @(&{C(ЕJf}{`qaѬolA!4VI_::Lh Wڂq1!<2L%^$`eTXfђhs up&BFЌMCwrßz6{|Ϗ@ݿWg} 7UfSS鵗_DMyƣ+?rt ߻s//7c:OۭIIԿNlhU_yG.}v{o|nmo_d?pߊ~^SpQ e!w;xS:-_=tVE7'xK~5SW᯼r69rGo]-_?xq_z^7sG=V߮:S~vKn/|Ѿ+;k~{if'z{!?c3鬺߫O˝b|K_3(p{/}ėo+8+IJڤ615Ie&0W3(8!—f h580W8h^F}uƂ&iRBB\[qrAm1'5l;j 7k/JcmUn"cZ!#6`fB# )d``i20Uh:(na Ɍ>4h 90 <'hʨ14xtXd Q0$x@ sE\Ϥ q1êC IXkg6)J GưxmRP49j-L +S\RP5 X&ԐP s6Ѥzp`.7)$jゔdP`&ݤ )JcF]`TnKݐz\rɜ&' ja=&HW|GWN',6lB\;jbXueRCZL|7?.Ô>FԦTɂO1%#D& &I"E!6[7m R'\d9kviL EE*zeMEfTJ&1GQ3Q0Ij2M d [ҳhFMZD4֡ 0 67j@U. &RK퀰TTmܾ֗yor cW}j$Nʎc2[bC.콡Wsxwpk3u33xʿ.+m>J>K [?|u7m=_r{{Bp+iUӾΗ<ÌI,E-/PU h@b#r=a+ U+Mspz)oҷ8 .& t2GXJߦ6E/3  rc\v[Wl!v׆?ϰ,38#ZK1$]>y=~gS7*忽3WU}˸۽?ʗzwsOΖ-R2>u|?z\}k/M˪;^ c>)a@sl9餓Fh U 6 i%dd)t7y5G|jЇ>\nlA )a $HrUH Du`@B1*[TM@`K`1&IigԎBiR p)=}{o,̩˕ 5-v)4YX0WqYMj׋LI Cdd!L#XFmRC`5:V`!h74%- 6$0ƒ#C%s^ 6FWSh3[X׆ʨ3csjlN35z+.\PŴ}!,'04YPX )2j쩻'5jB߂&}u5DCM_yM G4ɦظm)ˠoruGB6ֆʤOf!3rr5)U`0d*Sb ,T궔157W P!<1M5-[`R5./:2ֆܢ~h~Jz5Tj`z&mV+sFPp5 r$!$s0A 2WKS`a~Ks\D%07´>j Ś@ 10.Bo񣭼R7-\g&w?>ҽ AGԹk =I9}w?̓7|d&IqwU-u>]''{`kilg}z!\KͿ;u_{ɗ]z<qiu<;q/|ۿ=?c}e־ ׆ m\{w/ι-+5'2>C~ԉَ_J uu[/>t wAo;q (y;K_-c?Ŗam ' qYcRįpE`k$BBFu Ѣ댂#! 5-jI,ZRǥnOYoL54,k#ŘT٢)!jp\.8d2D38X[|3V7 -ʨfHFyH5ZTMVcRbpC+rFmӷ^!U[{pz*0 14fŴx|uG8ټ&Xc,CNBR ZǤnc Ս#h-)KlςsP \i2`1t`Qnot5-̵{}Hؤī1H :ޠ 5ϡ=j Y "ZC Fu'ajS W6 Sn0!4I`aۑCM%TNQ`8xoΪ@wIa;E]1)c#HK3m X mc3T[P֡+ZH&H Y-LD)jR50طӔjWd w"HXW`u:9$N@*6 {N14[JfpҺJ3 @*rـEQDmVPPTlԆ6UgYJwo_/jڭmD1*I J'Lo|kSdzzvJsy1Q1e.JW 4F-ǖ\8oam};Ex`kgKouG6x3Dfx;@+|P}+m߫{SO?Ucooݪwgaw?KSO9}?qS;ssS:|_S2O}lW\Jz{||ͭpپpЬ:mxuWۃ;#?|#_xg^_GS~D.&`Oyo}ˣ_']iS׿O-=?g|{}~s/~ß|\~3#_r>aY|y?v?AW?^)/|AG[\o6>A/xįo痿Q/۽l'cZG|ךak}*\2"6=,@9=MbeÈRM9Ll }BYXcbzY/CRR9`L;w>@hT t\.kdJԺM8eѳ?3W^z}[xj2)-%mcʂp eþ,ət)9 K9ZvߌXS'0`)^V ):EJ*z=#–^\ZO`v.U^{ jKgI[{,aJջ b 00@d19R9wāN ;5HTXLZ).=Vt.s?N?Ucr|+_ޟ{ɫdkr('~+_9faS|,,H$0IM/ /Fg|o}v>&'FVojzN>UԿG;{nW\{WgՏo_>Y:2\x^ɟˮ"sgf+̞p^@AV~};gWo፟W}'+-շ}yrۿg4q|F >7 }|w=$0=5p yS|Pjzjt.?؞=WL,߲)d@[w91q!\: Z+.= /;J `m̠̣k,ҧNaCz٘>I(=/W^L-Ifx,Tmb;z+ϑ0[QB[)hb(ɒJFy]YWF/5Y7J`bزMLWYzH E"g&e]Ih{sL)2Ò51SpD/KhueZZJla:^ Q:0vm5LTd;Bf6TL5ݰ:<6WsOgRRSAtA8TV LY}- >JBkãOb6T.^XLH,8|Q?uMo (2u0ش1mڡo9γ E D#}¡:꼗y jZٌTvbifѬ%4GBY, V>gҨinn?|?>jLiNXŔU 0̡f16Ia+ 0M ;HwlJ\r'wlv: @xEh{]nv}W7+ξ춮|(4Z?ܳmyqWO]C+O} >?gfOOAg?"閗[5oNa||<˯^.nwh;Gm~[*-7WLat-"n}/kyݶ^{|~o7O_W sSӕP T0(Gzq.iϹ(^ yܮUXxu0^+3::1Tci-H# [ 'B;e_ά2.gzIUG$st2Ո+Osý@Ua2l@@R۩ma6<^w]qd|5c7xA.= `ՊVUU2g|tΤp(S͛@ƼT];]z;cfx'+߳&>[fv>-6|,~V|x> }W^ !$ƭX@ߏ>D?W'ic%!=օ5*sC?ޟTb~аlkVa.io߼'Nm^elTVݙ#ijemeyX(//{O>+&8.Mg|^o|'F>GypmBiwVFG<quAA{7{6.~81񉀼r%WU4#RPJA!vbj塯rs PM٦b3E(ޙI\zRYmޠ[sdJn`/̈́IbaġU89/[$ tp@Z=#:IsnJ[gd8w;8sF1":+NTO^ VΎJ12G\훇Y0cS3H+Ɋa!4S͡SLGZ1mqhaKVIs8>%}׊i44i!IBE蜗< #7.0{ +jIǕx$ Ra@h%؋+]5ck\0̆JHRIjl}f*Zy~Z+OA2ŏI9/: *Xma\@MMm[?cY-RlF SMҧĎ#&d~=S}o{~?}~f"~<7|=3/)_xG_Ozw79g~6ޯO[_skUq3^ lg~_ݩkkyny<W+{_wM> ?;ozwsgWWz/voΏ5>}o컿'^۵Vtm={iy{yz?/}go֊G=ׯ=߽?W|Oax}7/n.=_z_[+v<1c ik'H޵pgp7>k~cf  91fu˹z٠x:,淦*Ϟ̂(e*' vS% Vc:=/،9N,%0s {= ^HYcԌ}E?A'pދ  +/+^U҇A("^B%u街eΨӡ^ccd[rJ]s[!"5@/yi~.G֝րFexޫA6f|ehetGwBS{K, TLs/q{F(&Z;Id갠ZEp1i[6bƜ+)4p s}ǴL`M$9R?3 }y+G1CǏ(dWgftޭ 5d[;(Vzsie1*,[.O>Opj[?n\w1Wxֳh)s\y''=G13|gM8/ya/<-ӽ}jɇfgg?=.}~l疯[+>aO+Vk}nkWvg _zט|g8q-h:~)]ɫ~ɳ7ށN^wݯ~aOzozUq'^={ak={Ku;f?owƣoogxc|T^|G/xNeFVc14Jk}äU8+o;tqڊu Sل3Zrҋ;F5 7 ÎBɔ*j/\<RA.ײVaQqe\,<'4ZbϬeP1ss/뵬;)iSX7ȶߵp}q,7Ld*"0@,U^+n3ksjM/I a!}%M#[62` jɨW#=ӳ ZBX>ck+[xemR]2e/ZQ,1 8pSH#4^[LkEFx]߲n"BSpJz' HzS1g jI'"dRu3}kS (C(|{Ci|ʲ֝G H=9Ҹd8_~<qbDR[LkqXe㨩H,Tχ$ݰ.΍kE<&w +cX[T8j@bsXXzeqyq}wd\p;a 7^Tά9XyW $XVS%0_ȗxYXԾIMdȵ1DIqM×_{73_;ۇ/ַ\| gj˿zΏ.:y|WoY/|k_qo^v7(>0CgUzߣϾk_?|矮SG=kz_߿bh>n};~/OWn}Wsv[ν\ ^?wīw0^ݿ;=5Ox#秼_=ۯ px81q)^1OCqTJ{Xq[lbȒKq[ 9,%؈ V`و[Xɔ =8f?c D0jG7|RN`ĄilnXm֟˱u#nLmk# h8Sa]Rk/OXw6ʋk^MNZ!d7+f&Kxm'TsHbvloxQ+u8߲ MYM62B[^*^ER ,dl z.[){dgtΤ˚C{J^ ØCm}NI P\WXXxR` ‹mCED4Yx3] ^|kj b/[ BqW-v5Ӊ*82Mp8mÈ*]f~ 1N^8nF+䔩d3E27&Cs x4R^.`Ie\enC1bSp!w]:zžW^`Ay7;zЕ*ST #0{w^oϾ|;vzwF4T2,f8v߶Bʹ2 >XQB3+6*,Uсg|_wKG Maiw>8/gGi.T?jɟxm/|Ak_~Vǚ1Qc[? \Iu x__qpQ9LJV S,NX7aJe0 ;R%P8fq0N" KE:Ds`ٿ Y TE'=B#Olyl),ڶuBpyhrfhlC}kڀ^4*V^6\+z;X+(`ajވgSk{ݹ"uf7Aܵ>\7i̙3׼mmu;ԭ<)kwoskO qeoXĵ_:q'a8f߼^\50:Ϲy`.fQ1JV\hFJ>q' h@ S rFA-<4cA J8ݞ5U:@k 3j %m˕kY/^A` ݰʾHcxmV Ē 9}$',T4Nӡ=`\bT\y.GLF{9cgġґ/ z%<݌kgpPVp*aZ̋nBDZ9qb#* ǁ^8ueͶ X% A"\E;᤭FrΔ ( /[E֕H%}LSnKNDXXx^.LbI7Ca|9Ï~mrMwn?fo~K_wk>O&+⑏|™3g>?o>uԟ_{w~\ݿ{eެw|'[U/< cfxc^|G/{gE.#gΘ*,,3v+L~mKz,ܞ1u 鲐Vҍ3bڵ΀̠ s:v9o桎L:x\+N߲Ԉ^C֙d"RH^Vҷ|9ٲsӈiqeEH@I-<evG lkm(r_9`6.睍Œ(+ڋ@߶>BYDM`h԰LH$TϸxYH+Ff?mdQV*$:)bNɕ@AG=$ά+,E9dkPJz!s+ -k2(k'$X&a]$;jR;I*Ss Cz7)A Sk7C}r|#b[yԶ~>)cr)yޙ3a_QS}Te*p\L vhs7fS\$0eU̔YԍB>*֊qdk+lvچN[X+$֨F 5{RYsHBKgԨ][mY|9)G{q߫C͔o急\2p2Own]aK|}j=9㏙1>q qt3Ëo0pi'%p7~B_). Lh2G¤#K%]@Y 5c~nK/|-jr!IuoP2P)Jʀ$РYx]L,Eu2T^\+2hBZ8̬-gRppl m00eťԆj@hWL6{)2k[q93tA)+/V* mC'-d!ӳV1b" ΥbUaj=̄!DxPfKO{^x&9 ԡ>b_sbdXXxi'4<͈Z٥ى33& ُ9, b+`u26S.:8b_ҳׁL6(Vp0AR:[{efEˀN ^#d HtG*Jݰڶ> ̥̆,dt" yIh4wmiDbľQN PNͦSCAÈJWF߶ű q*:fΖeA@m:WbH{ ܲF`XKZ!9Ƞcf֊9k'ڶvl) b>i$0>}vkgKoo}7_{ݵ3Cw$w|}]'(3<=?1:q}BV^5Aabm. ɊcY"|92 [6REȠa.,@wl8U/Gre4bj?"/skbf3v;CǁʚCJ<0.^}DX?* 93 ٱ-20w ԈٳW2&;L* hlif:xkBeCVZJt>Ŭ-Lu(<ҁUyM7Cgz7^=3]n@=zMhduKW,$UsXyVrud`M-krB`ԘCಱΦI<)Ue}U\{1ЈÔ.`-Cwɵ*I\.`Xs0ZZẕ4I(3zY,5xd%˱\8gsl45oo酃}宭Oо^PX\y1;ɲʝ5^G=8,źTXof1n?T5aZnbR/~qG{aYdȺzCV,KK{^9, ^fk_4(Gƶ>WXyiж NaeN (lER/U$OŚYsš)SegRa!9&NdhJxJjf[n۶!B߼nV}-)8RM-;^@cӶaLöaA@/F("EhY'^y2 "rپ =z˵1}Va"VWm}eC^ecKFqj݈=Lۦ)lL,̎<;^Zi#P r5U$grgc~x4Y="蝂(R^5.V SJ }!wAof+/:Y/kZ+"emd*]îVp#p塗y^K\pqIt0_љ4I`Pp ,}VԈ[ovlue88eA5d*Q Hs 0B.ApŹTH KZ]䐣PK]JVa&Rv˵b/[y5 S@s`Rc#<7>q\bҸ)ϕ5*M`jkjD^6kVݘbC(L؍Z\d5;NY j 3^GRE0VZAbEO`RN Id,GVB׊{5rFbVG m[i{9oJ&sE*4 $ *A bb_ ZyqޫsG;!d3:Miv{^fUXyKK=:Kb$)n3+uz1Oͽ*%}:zFJ&(VgF1w`suYSwYO ^U2@mKz/4Zz-BEtl{ȕJ!*,>L%VU;ڪ@]p+#K%}S3lݖ3-yV*> }"j`pB،)59 ˽yh3K9R p쎵5S ^Zi'L2hf]ͬf;с}4!LfZ7a|čr^qصfYY8Εϧ*<Na;jF뮝.K\S/q,'ŏ_>1\'_s[~{>AoMz>)W=GO~~3;g_o?/'=a|wYs ~lGt_<:}⚇ťO8G fW}W;-k6E th ϥ+@##zEEz򴘀}nbȴ=@cM&Lٶ]Q`N` +`DMֶ)\XzWl,pu*F cNߘ7HК>XR <R'&Մ]*a"P#3.B5樞 dCofjmɴ-kJ&ӈiҶukvXL-l),ZA*^ν\x(s^IezVPe+%7[]ړ֎d眇g:B^ bMW̯a%;7HԈC͡R!T(htX]dV%ݘK8IŊ)R+bbRA`bi~偏Y?m{#x5|ͯ֏/\o0rr̙vץgE* Hf֌'X+[::aqҚ\2kŅWk/Τq0nl]A?|-fJ^R!K4z][6/+mFྏ"}l)mÄ>f,4S. "O$ N!G&u9.ߠ,4BIN+UeE1Kz#G ٔs:pdK[VPja.ШEXyhezBbЋ[0L/Iaj=TMW3Yeab9:HϘf $;NS1T{^xlV!·mR5UL򶬝'00fbɴeݖ5;ĺ$ 1qnlbaڑ%#V`]4S * P&HF[VjzOO8KA*a1S!|)Z)vAΕǜƹ %|4n3,WG2؟ |eڒ)YK\{xĹcX(82}i+؝ؒ<͘3b83 @w`.4 27y'ٲ~{WXy1eЈV=00^@]zqBBaBA" ҄}ID]i4e3@)l;.Krvȏ{||cwn>uzzR͋~s~Sw~7>dOW>__sm?׍YK~ގ6?5~_~j膮 ]%ޮ>0ra-Kr 7tcX۲u;$ٙ4=F9?gKa+&;JH)h=VLS49P9xkd-DX^ $o[+b4;|r^B%Q< CqDVFt gfdiqHoUTSTNP(dlPLÖ5cG4bVNJ5՞W蜏ppq&=s#Bj7ڣ.#sΤir0 #u@Im0.=N-0߲Ƞi®fֵáH8C%^,m:qdiMreiaEX)8mِT4a7PQl/@Rl<$c ,fjV8՞9\ -kzj1rlu;;paکun2={e@ rSf3S\%i顕M+F6f[ڶ!,Gj*g>&sU'ɥ*+%q[3#DڶTKjlt!@#B,I,'˅ۼJ gRl贵;vצbNHNewz%~Vw-hmΞSo՟>|CI<G[E~TQ;KO𳷞U#׌zPδWO?csfұ!!y )B;9S&]@Oʵ҃AKڊC͡SX+6*̥%{(( #O۲DDSgkb]2@%ӈ)@3 HyVÄ[Im[ʦg =hV!w۱nƮƖ"-7`l݄]^d'X6"wcDh~l}Pq}/5 9'\ QɡVA yhVթO չm_9s!h;o~o}_ˣ}cv֩(nƜxKnKmi|GgST^11oKӅ6B֡fKYiɃm̬)聾e݈dhw)ޖ 6%a>bc]K2Q8F j 1#Y/bݨVStpP6'PW?oHP#v%^߲Ơ>>&>Z2^ΥzNY;zLۦS4mj"nJ9k&C+gI  *( ao3gHB6JVuia!җ yƴW(): }RC4e?PR+;>e30 Ց`H-IKe,!tCK=/h@E+ʹtkdlli>eܶyO ( iΧ-ä\ w];]z;ǚ1q$L7>毿K뿼]{{^zڷM_W75~Pݓ[]oxqo~֏;7߯z}շ;ԟϿ7~%/|{zo؏V.¸??W5cn}?6Wן/|/Osկ7?NCq 7\Ѿ ^YE-[ $+!rdKj焥-ij5NHD*9L#P`;J3 ZžZI]"#3sG$fcpȒʥc;jNm(m$ P=x6k1 IFtBxTaPa^2eᫀrk_VlqX?N`֣X+LS-^[?.sϸWP3l:U ߶vǺg`/\BE7hۚSa9損ry0I,e$m[wbif̆Vf@ BI*BnmQAXX{+hܡW-ⱟ~SO'K߰8?~Y˿89j;{6<?uQٚ=o͋}5dKXr~>/(! }r :"|Yν\VN9\病e!B4xE4foM(GdE X(v57]Bpc/Ebl$ r B^s45 k;n)qi/zXG F/|aUX{Q I->Prʈd+x17 C/ *2@ 5ӘɀP 0l[[q(d9PQ#پםBt!%'a̅Lޚ=4,%X4~74lm@+J^"X\4-7x2KpmX#auyX-k&=̚8޿1g>z81F<';?g>yW}w }M~\]Z>s̥/0x?5ZLi4PX0`˜y80/s9AXs@c41ڶ6sK/+v؁Hb|!JB֝:Hϕ ckг.mzmmm[^r>j TV VA ÄC0f"bdUtyP~>|T?amv;* rQ8ދk϶عǥ-k^.M9pU0b*P$JjR1foeK/P"LK Yitau:Wå#GAHeڐ`Sk 0P+{^PYr`LP#.Ljek,^OuOBA {>YO\<#vXH,P3 z+Dz3UʹPrZlWLoG3kgbP;Ъ ya<ͮ&sK^z2 azaP1=: lzEW}ɌTEfʁz/eʁF%uYXݗmt`6V'd  $aaL**KbEh@jU(&qD?e MdS(8L9^Ӟ ;oJ1RL%}4c/ J<lD߱T~_dCRA 0xA {BEN"kgKouԙc81K \7péCeC)k%6v8s^VGm#`:۶$jR8YX(=6-,!CemDeIt B?P#SNu| ` ^{.x@ZWгe)eZcMY+elXKjDX8P3WL9dja=؊c׊gذ XGK,.3 djzqC/O剰Y*.]=Vc/uQs~OMeN>V&T kwú7$7 s߄u }FʣH^PSWI[Gxu%` ߲aJ=BeifC.BҋiG9) }u``@/a}"J9\u`i;ZtՖji--nBɡ׊s;Zq%k7o .Yq흴~ˆmKc=3kkyRT^ЋB,J:= FY+LB^c)yyUɲރ,+Yq0T23X}R˶m-q嘥Gεb.riĄ*Ik'Nk2pfl81qc\C-rK;K,9em]ZqWh:a}A_+J1>3NZV=fR¨ F4|ۇooܿ'⛾Oy^.$!BmY;f?fe͔]mif>b/_eȲA]^$0w P<,ÈC%!BaGh,J*7V>W!L4{m} 9 kŵlVSteX]+BAȭkAmVC^N-76f\L2Ժheks^Kңi7cX+$R 1ĖQCGNĥ, UtFQ!P;Ņzc7@IIN 3 XxdE`UETѡZ@5[xueҔiˆYka[=r@Cjj+/s G,BS6Z}Hزq1pr∩@sضިw{q-`0zO{w ;KFs|f/Hݝ"7)pG8f81qc|BNKoЄ&qP0ϧLW`ݩ^g̋4b"p>Vɯ??ٽ{ޘ!?p?/{z2џ jz%09߅IVV,%Bs SHFЀ<`K/C{rvBE(3&a@Xo3/J^v $>FL$T0PVN{-Nsdy7NaqWkA6kil}δ\zu.SP! fiBDVveH`ۺ öqlr SlH6ZZ(T4l G"ˊ'-<2h%Kbߖ:8e͎ԒbbSdl2?Y7in@hf@$6LoY;QX(=W¦3gnzġ䖱'X/[yq($( b'cBbP8Di 3pYfS1`B9HF0 YkdKpR1Wx&|%Gb:rS}k9˷ &h꣯^Gxˏ#3c81>!pi'%p 7'5.hKkyag~#],֮(L^+ ڵ.Kc4uszOo:v@r /=;q6Fʀ>&!&S @2\0v,֕V*ȓ^s,[ b/nr&mra`@9Qk/*5qض.0Q3v5m<{?=l ^T4b̞) rGJ&b.'̬X*a724;X*r TZڱnh*1eQ.cMW0F8Pғꕢ;)Ӷ0l[7e*-B̋v^ ,(|p+Yt0ffE^Jtv#S~=*[Fqe^-$PQnY7co D0T]\yqJEAr`e/3 b^PӶ'CڶGXywn F TIOGkCK'1H?w^Rr ɥW#r"=TNuM9p>ŹJ9G"Kdk%b_rdK/x2P왉up{!m oO#[??wsrus~lqc8G}?ŏ>t$66R%K,2I4l+i4(νaNթ,ZjsVtp`+ER#m8LW^vK* .&].iz^8Z1!JBSg +b&]zJ+Y+3BDfĮcKY7R$L`Mq;^&ZTAX+H}%~.~1>zܫV1Gv:S*e>a2U9cKH lRu SM>a[Sy֫^șs/;Y#[{ː=yBn~.eHHխ˗~p#d+E* DGRÈ `! @2 ̽jyuˬH8LكH`/,Υ U=¡Wf֖l;'0$&mr OY{":Qℭ[ ž׹!%r\A%# 7"hbEͰm]{8]ҺJT;0w (H * ,@ň ?1 :;0k^%bD@I"I Ct~S{~}{tQ W!ra+H(vF:枲)\V7-M8v] TP lo;ض6tjY/E n>eiqeiRL`jϫZqJ P#D '_~8Y˃^DBC Sf;SCsáoހ:[#3jh]ϼZ):(dQK/z,~=}'F"R3LugS+[rdiۺT\zO-pX f*3H0h6VF}?5\Hfa1G(Ѓ. PV$0`t,F h-ZS[ Bck7ծ:Y'p(ny岅"^1EpLjdK/*#4ׁ (#Bˬ=ExT0$[xPJf .,v=& [OH[oX_2$(OJbҵ-H ʎQ[Ecľ-=䂓|>o};G>蜽w nś~tg.H7 Mu_տ 5~=mp8>MK?~ѿ8qć_\q%|3)@ V;:RXxy[sfE0m[z N(/KQ9d?`*Si5zU7p{Q~˙*Ճץ0FZ`{v=J\(UԲ*{n&`KF a\,ckJ`H`7dZ:ObT1mZ:l͑hJŻ;`*[ؐqi҃jb^#}d]AZ`~DrgI{LEv}#r:Gx-E{up4v*sPO/Z@0 T}=je ^4haEAM  C<꒩LZVy4SV*N2!55TLIQNK ljsZ*,==8̳%TH[߲nbid]PŔ"B %|~Į`ٶ>& H3>L. ͆rVF9Q, L}[;aWЇJQWծ,b}ahKvSE'۴vԊKm׋y,3-+`[Ac<6@ATnt8`mzR9⚎tRv_:ϋouӦsZ+=#3uOAj8_g^A/]0 .KX( +RS`Ģox+tc_؜<|4Xvw𙁳igڢ>Gp_:/< >hXLos%jϝ0`_{T1`/Lk 8x2 M.Z\47f|NI&vI!I6oj@Z39W 93BK^OS>ha%q׫V։I#RuF8WKZVPQ0mY; ]^z`FyWG.U,U,a$9GCڴU8壝48bP֯< ~Mr ;Xm8aЊE%aqi}$؈}͍}I_z~ԊGQ)>ť,'zX3liZFQr͡oYcLL%1K# 9k'@bW XkZ#v3\ Jajiɹi/^^jmiDzI*Kv[Vfw r:{**Fc^p+E|PP#Ӑ) B2kP$*zhab'k fJiuˑ.`\{X O`-ÀiP8S1s'`0 JV9ě"[9<yx|Ӯ}i oD W_,~kSs40.9{VC?_2O~m;}/=b? OAa݀}f*Wy|@n3 `0?g`}%qNqF]nZS15h%2LKَ U ^RXP+ڣa^25k-4Ez R,w3/sP0b?@:|0djj+h $=/ 'aBs4#vSvck7 #@ĺCb=Wy3[TMSE!"RK}˔Cq RRh3=~Y{uګv\;TT  0\'MñPo[$f>V@vyـ˙$L!\, ĕDJBJNvBe_}p"Sy9`_+~o =p~jxa?|ī!7<冟(ow??o|c>?=[WLw%sݦFɔEb8ucW\!p+4sk=6F=1+CЁ-TdnB#=VTߴRU}Vy̫XаlհKtPBX}!SIDj8߶z@žbш;^\ْ7Maӄ]wh@/t>c-T$[qЃ%}`}"$POB/,u sR0hW䞺<8a7dBN|maL,IVai}^MZnAgMCύ!})lFF!^:eR+)ȺLZEx[3ř`dEVHgIyʥl׫ND[*G:&NIldΒV3Syq)uq;qxr|*鬉Q'~_g>p;_/o—fsrΏ7\_{^19z;:Gl=fy͋w y#'w7?yoL[]׼ǿ.L?knĬ~ן|tlcyɽKwo~y+|m_㏞|t}7k]=×<9͑# l+w~?kt{|/板_xcw|~{xq/:$}?V[Ӎ÷tnpϹ_ӏe.ۣ~3i_C7N/oݷ psM'['__%[ ?Q?w;>~go3Qկ~s֩_~9NRTJ!Hejb]r,~-[Ȅu1ZSXhg^ͽ9̰)tijEW,Jmk/T]f لRrΓup!R91%5 @^7ٲf4$SI2!RFmXrۺ^'0ќ֘`%ډ90/lH܋C#`jYovu3rv>bl~41]BboP$,ـs/OXIֲbuiiP0*KBl+؃{>ct2\lߤy2𔗻^ +Yv:W#1BCQ$1Bo0!uA Lu`ݓJVz^sν<_҃%5eu#k;)<',l햅9AcYNfak]\$ #af^f>"O؁.}_~b池z҄>^0fۖ%}tI\ kZN]˧Y::!WsĈ}>kXE]οMns秺>+t`?zt+Tዿ p?q( ߰?sG+_z y_?g /{Λq5_|{+|o:{~WjԿ[~Ox꣞և>-v~);;9LWzWYoOOy~y}֚ v^Gę~ xS}3gN_?x7y`׿o|ן{?m/߿F@z37?}_ǯ?=ݛ~k緹۽umwqBxgK7\u+wv?7b =;;W>o~o+oG7?}O~{w#wάڷE|$o?Ǐb.xa^F|C(!>K̄i8STv453mZ7eHT))ӡfmvfklib>4WL֍GغIBS;c:lJua\neVAPl-b 39Ԗr\+y<b4b)pQqmЮW B-Dz\ I6dk7V'fwq_:F-lc#NRa0 Zy@`d]`Tt}Άay^YOԬ%'Lʓrݧ%y7kB5\aٕ:,% c&#cq6ckLRdʱL[!|Ha3bK%'+x8A>9;BI\x X(}v}p2ldsRI$#M}´.PKFͼXrkh~zx~XiuIܴfj}ϷX|{_}5;q&8>6>nwx7xwoփ^g EŽɏ0lя_rq/xȣ2xۿ|0xw=q+c-?-si?cF//v!`>K7Ec>'~T|6o@Mw}Ê '?}[z+ ?7wuEoM{/}!{#_{^Wۍ]xbG;?cXlu3\Oֻm}x._PSL7tn ;~nU6_#/}2,'>eؿ'w'ye윻KIu\qק==*vDj0 ={,U>fS|liڑ%S/K!ߴ&_j}շ HDy_CEKØ(wHo1m2mFm H ("T8FCf^ijMD(PL&g|p[XoZ?d*$q PlE]K u4BiC¹0SEȧhEnXԮH`%֔Hs4Z[T]οUN-pso>&o[^k? W'쒯;oٱoϺybn4+еء#Yb5LbI5|q|Gٻ8Įі]}U-999sGz͍YڶVmnK.d=7GN?C_sux.>v/{̂>n}E۶/(s/q~ړ6svN5'6/\Fǯ~޼_AftUלyw3oz/|v`P< 38ې* 4n<֊+Si(,e{^U=:8aX0D25 8)+TNI\`\)Ԋ]v]lc-}T1 ٍُuXŴaވr~̀iȾD 5VGO)ufGL֌ 8_ hz8-{7/yƯGe`Y.f6[?XɅn;wd\ۏZssEze;^pWU8uQCqß/}^ w]g\}z/]{U.>r{?pŽ]|t߽كcG/<6S__y Ϳ7tr~CE^_KO/e?sl>\u7 S~Reڐ%,5THN. &qrnq>=/p~n3~N/˞O;~+EDV"X*#PL kNy***NҋZX;րNJѰ mAQ3JjPk>\HUP,"E8+Zጇ4{Y2C[Z\:TL%2 (bhvĚm#PuMi={S+uϼT-g{؜^_?~߷o}Mgnk?zypՇ/3xӟݻn4xsL >qD׷fȺܰ7e͘Rt\̲I`"4`ww]?;O?~Q2wHv;[yAtR^AH !jF~5l!8TcAuMgЩ48Z"Lnas=/**(¸nYre:ߠ0fY*2Pק\EI߰~~̾$[x'^>T-5s;>\xFU[Oܺ1!L|T"LSo=ŀ}n3ΤmZf*e)Ae &Juy'YU;bM=fUlkփYod*}x>>aWפ4*BAgՠ<(xZ'Dhli+ns)zɔGV^D^{M4M؍ FTD7CSP,^ӣUY/YBLrbIӏ*R-%؆5ۡ&Љ{>hU#2rZsi#`4njA+փΤ\e2 )w.ٛ-h~F#jٵ/+??CO?뱊OT' 7<cx|N>y}?>_xn G s_:6ݸyˇ8<'_wyms+oy.Ox}< t׾p6_t_W]wy/zU!ߊEy~.ؼ^7<sʿg{?:0_^~亟+wn;΃/UX(<>6 `KKαNtC&m*<^!, rNLfҸ#L[`"lKVa/ p܋#:Vs~-r\Ireђܫ]ɒl顄luqmYW1Uv I٭cau bh]Ry)do1c\)11~MY%5$1@>T1Q1Ez;vcHyZT. <Lu۶ }H{yr,+Y'-d91zExdTe$ha>sMB+2mphLR-JQ Q4Zˀ^*q~qX]VSU74:Y 2`ܱbܟ,C"}h]~~{E*4:m8gREpѐstBs/Y7 \ Kv\a˅+/raqaG#ZRA1ԣa{؇6<>g=;s.ڗ}Mg=뛯y~Pb5ύWDyܥdCDCyԭZT 1hD=GjrA+&P΃ T4rd]}Dtyg* Uly44hӔ]`Yk@f^}ַiJ17FbV93hXV3^$XtVW׎W}̮VavSC#u`ǙdSVTPKtC'+2fsѺpGNAB8uhO]X u.ʠl$47b!Ϲ  #zvP+dy3{;g^Hks:NNkӴMy52C )TDz@6rҫHXh@M4 vKD`܋-<.T:ju;>e;o_cH4 pۼSx÷{)_ /t민=k5n𲯻-?,-<pOt _:şxNG~—4_΋_]8<+ aX x{Hݏe &C (˲':ِ@P-U|˚ ZX{$4[+KzBP+B#^ BeHȬa&@2M*f uYdCZS^^-lľE8&b&H촛ABS1 SEBntp@FlGL#ҰV/y / 'Kܧm,d}"\ᚿf>Ě\4PFs.pS/x^zБ~s=.Đ3{}^Ym~w;΃/CS+iXrلl„L:0GYDx.jkes91 5+q"TI')U1)"4XXlZI莙'ԑ`xȺ\=d?aB.j/MS]l$0@7V堜9`?e75 m*`*tjg#Q+d\KC@*S Jq~gpZ2ܫ.74x<ABp< 'zra~_"LN[v?)YMYZ`:)w e.d5SG)S:p\J,Gd5\W+2R `͢Qt}u Wg|x2N܋Bf!L09Kْj ^Oe50..<4HbVt Nu͢קi̝ V=s^,? Pشv0146SQF#ɁkRij@NL#v%BjO:ضfaaDjzYntt+@+YEx'֖L+0syqƇWO{5v Aܲ)<`7Mo7Տ|cwu]p[-nO]>5~xȷ, UGnp| W^O9s|&>&_!e|1FS"`ϫl f) ˕4fjjJŅW+Jҋ.Q-Fh@Z+؉s]@휹B rhʛtcv&[3a)sc1k&K$eb޹i~saH 6a \gRfU"mY7~>5'MCAn[:Sk=܊B%WUB6WlKZ4{P$ڰPfl/ԉK<'}ԋ>,vdNz07 u)zS.g\T9X*ƹȏ2jj#b*%{-́Fŵ).e3D$0.U)/S. eNrĚH %RyKŹʕӃ9Yy-SU̅]Y2ͮtL.TY3X9yCa왋P8ՉTJ|ߚyx @s'^L}DD4dnɒR 3 UK/,9tx롑ԖX3friKz/H`K,ՊK/Z^X9Z@$&Ā,*zm>$b;!O`E"Kx6 Ka%U/%{BL ȠGmX]1e&P<-|j}s G ρ/᧺8p| 8f\k_׶Ҽh>wO һ~C\ve]vg=Wt+w7~cx/.N/0P/b C8LjeKťQTҋ B5S4R:e;Ii,Œ ԛKr)Pp\&x˓>X5q>f vV?f S9S)dW u .keG/3>U Pc ˽I +ǒ"  蹆qiM/cq9T\Y{\)L#[ LXX H@(L 칝AHg\yшSOR$/`e7-`VlZ1(bD6eQ}6rL 'Rr@2da/Cp2 ^WHC*dT =`3 +PcFT\ x܏-oBQ*wKꂰ2;C'x.MBUЉ hd}x'+/rRmX=2 Pp< ^ ɂF~>0Nl@, M\tX6b+-d|;X>=Xo ^P EXxe*rn!+L=8OXSkmfd]E'PRiݦu='xeWoܵ?CqKa{ϧcws8ptm=4UiXYSpxꪫz vg_sy??,7@Q'L#KTzXrA\̫ܖ60 tw`25S ulxG+I`/[e%ъ $!KU;^jvb˒5vj}PXxl( BOzY/`␽[ -$8Tг jeu)eļۊ^pA*;؞ 3U@Vj&̵rնTfR߰~)R|4W.V-Uv}ueqgT=Kz0U2mfj}0W>8|%0Ԛ Ba]I'$`ae|IB~p< 2o$3U+$P0rE'q`> x4"RBnPHbY'CP@G i*Sk%0!;W,,jf\~h]\YR%RAV⻂^+JF댖vrPB4 P vK@,rY^u̎w p (SJZ7-<}J0٫\Q՝l% p-A V ?ߡ#Vyѿ>h85ix+pO g=YyWM]~Y5x|y᧴"og={~v_Eo{ڕо;>.W`|M;eV8q?_l`+4oX'*R![JMKjB˂uNU09vL^{Q0XضڠV@'Ӱ`ڲV!m[,ދ ,wga])*ZHXubdL3@"R PPP-i+籢WV3"5O*$ZY0`ťCVGbcmu`ǫmk&S\)zðvFMg+!] vgz#k nH*+X VNIHXRd3/+K,Y*B"2r+4/w)* UZ{1K{=-cdҀkQXXC/ІX&~JŶ" rJ im)`buJZA}+Cqzy6 "!U lQd#vC $#ڱ^\) ]+=IKl-%zEI Jfvԋyn_V[tb+'jmcNk3s>;AҘ`(=l.k xTQTl~mLS I<^G kK6Rxϫ!йeWos{g߲ ^0cAgKV{%ƃokW.+8[{}^~OtZpg /<ӶOxsI ԩ4$ V lȔg7 t}$p-LPIOҋMk7$;d gö-/7ck!P#Ё5QY855,T X(THÜ).TwB$&{@߲*RDŽ}.Rq8m[\)k;Cj%NՖ5 \  }DuBZ$0f78-p+&5 '0;R{l[pƇvcba8n'H#/UnAKd3K/+V8̨I:s1N%<Žfh2Ⱥl=]ս0~Zv=v^;dMwT(zYH ]{YY:dBaEaՂ3_ZP kKpErfHw&ַBŖ m/ (PIauYfF61ǡ95+/*b*a[9D;ip$\WMrD-!]@y|;07,<c&L@I9p-UL=8ffH5y,l c]>/OF \{͉Uu6oMzJYh!]πV'M}6 ?8`8-3<Yz73}`|m?r5W^)eN=:>g9W?]zȍ- ?o;n” \űԗZ WMbؚC-elދs/[кCֵbv,䁺"IB '6|n@0-e;^8$.#|j}I8b~Nj)ɖ֖t0ȱ:lx,]LId`B'֯Z@@[eÎ#fhra.G:9 ḍSs4mRu!!ӃNa*<(#Ћ܎PgA2v|*^fv? e%`'mNxU{XR,L}н/TMXO`H9(WP ط ܶ6 |ᤆedB-k;q(&urgA5F6`Z).jH/*JV*,aMWSvB‹cv`&Z)ck#–^ ُWYu*rٹXRm^J1F6}1׊SŴPgsYh>P%W=%}8b|ǹTH ;ϤjÚi‹sϤQXVumiVEp,ԁ 1i HިزՀ)R }翦)?M{%d? ۿ;=%:N纋/=?p$o&t/_n?|wca' 8pxGu:K q ojT`Jק!c*̵B"4faM`*}m=7`rюO'%!WM!(l2; TL##Z!B#xʫZ!Trj..Fu/N,}- D.o 1wyτSn+Z՞:d*n8Q6Wl*_kНnl>`*XPe[i&XXiD%S溹c~~jmnI"<}() XOLsUcatΗ|ˮf꦳ߜa{׼uz~wŋ{+>pUW]u{~ `{<_y+.~JX~"q pxYS0bP:̣9ÂJ z%ӆ!\ڀu~<sMAlKz+k &^9\ 7xq]UT$Xt, z9ʨ`3M Kld˥}U"5b?17p.[y*]zdUkǙ8FrDkBuixA8d7bkTIzY>ayK-pA s?U]οM?ΦrPXTE9gZ]ۗ^N^x8>-q,mk+r|/ܒ统u}ܝos{=w&|G {~ W1}F{^Ut`NxZ&aa*cvChXT6sR olWSTLB+%~?rfbmIяoXS/-; Ck)aUqrC靐 -ҋ̯f^ν\zH>gIpnӚ|JMJz `4f7`W#Qnf˖i8luB&|ڣ\mKULBnA >b/Ш\j[2䁺Ft@Z+KCvc>n`á7îN%b˄ja塠ڃ!-"a=lPsRж,5Ȉ\\":ƻ>Xy|lԒ 5GC=dmYi'0ZJۡИ4LxW^dugLz6EВA$tS1MkL%5&3Wɥ#:zVRK% sEC_R ܋PIpph]<%d*N{"/uq) KRbϫW%!ULCSv9QX]*=im }l;HYT.!\)=HC( ݈ɠ=!^z2W 6 3q|8ܲry>rZMq^npx//<+~8P/?k~o<ޑ>̣̏~'81EC_'~T9.,v^΢ܺ[mnv' wR_~yBM~!T̼0偢!U2厾^ֲ,FzxU*O<,T\)֊99C =/8䈽A}/;3idvh˩sۀ}٦c,e /[1F=v`04 ,egydORG`Ⱦo6?bZ1鍙T1fZ!?ppx]?^xY2mXlͩ3AcVaR.2Ph6qqbr|kOja6 DܫpseWouS&Pr}O=nv/K .$o}ɓڹz t;|S_ѕmc{?_Cw;w_Y}xEՠ7ߴGm]`']%,UƠ/T|>k9?OQ[KUt BŞcOeV?"$6RBINUƙ4СlY3f H]t‹l\cB1V{Tl^8bZ_RYیs /ZrHfX#KckɳeR+t2F jE6X3^d zYV\ +)Й[MKۖUX:nZ7BGrG!u90e҉,u%9e){$02hh)7dLۡ)Mwbi:Z(R&Œ~+.deC1i*: ih]A{ #p~~bm`! s dWiXP#\OU-,*]/k/=F4€Nv&vVqe#ѝ3Fa~lW'RhfHZ(F۷ܒ+ԧ:;_gh珿xg~pW=GvX|b3G}޹+8<+rU0W 5Pl%SvlRK93ObV*kL##aU^μZ*PT*oy5pXn[MbH Պdq[*vԚ>rZY'5ҩ4y]ak h@E\xs@N84Xpp7 9TŅ3yAhjaϫi|&UC&^&Y U5=l‹¡frpq>9f -8*$l ,F2WR[ǹB;;^U 9au@偷|N$62^)FqJGˌ k69)mk z+)߲iǕMΗޟ{ݷ}a_ϾǷ_ze a ~g~>H|wws^{UooxZ }X;Yzɫ~G^=?wHc>ƒnwƃO^=jGT_U}&{bۮ.V̎5L@6(F6W"`$p2ade!˕ egrQGc`r][FkL!#=:@H^"!0y;Ҳt!KЦ~aM}i:zsPKK7K|LJj@5SP>VyCzIH&`2mu#\gRR:rOa4.VlĂi!SIwa$qsťb\{̣-f/ }1?ow|?eేk?z ?>/W~ ?8:m`K'_p=WM+-X 棯?*>/|=xׇ_M';ۘl^rkw /%X)Lt \sRdjULIN{QGǦS93S{0RB6if^ULSץ`ڲUG) C#ez J퇤o ˒( kC^A0hhRa) Ѐڱ4҈@,D ”>+!u.[#ϕ@R^0sH j@.dNၹS'4d?HՃ.8)Qu,@bx}z srne6.e-Hj-[  R~HtmIӧ7- 襷*2ʍ os^qn+Gu֗]qNJGfx~һnN51G=x+p};mW}<;~G=}[N^/}SvG#μOg Ko|}~~/3ݯĵ3?x}̷X|3]f֙~f|⋯=gڣ/y_΋8_o{ۿo^^S_7UO>7&j|S;΃+ ]hr__&"#r6,CMcGad|p" *$;cn Tl̀i@̈́®!]걾.d)=>d#v)*9ntn+4րץY 2j!^7rWشa]EϾ@(5m&<hdTeKa&K+rЫCڒ`A|{Ӑ}PH%%ԾhSIle3/KdُEa$7$ζ PIjϰeTN0R`B1SǐU S Ց[ʗ+Ј3Q2#yd"<Ts`~u"vƋ `oѐ`0mZe͈]|ib?{f[z{5쩪ԧNH @d"A H D| ~"1è2^ !(Bԝ>CM{XgIC&H﫮sڵVګV~=)G*a\رVUe^/>U8XQ͍ppf[jFPqYj^rx]Ȁ ܠ6LсBgN<xLm3gyb."-Zͩ ('>`FrT3Go{x~'n2a}?O/}# 﫧~<}/~U?{w?|.UaO_)s5>KG^}mK{~|>Cg|q)~eGy#/_X{ӟGu??/ {VQ_g8;+{w61.?.U]VRwuWs0 W5 $X6 9uQnҌ2 MfL5ggc?,i KoJBZBYݟ( @0 $%=l]z#`oTo,Z6': Gz :u+ZMFYʹV<+l"4&PGpJp,l0ʰ(`JqKdC5笻HBKo*Zذff@L6F2 *Tjpanyߺu&Vj{[J;rŹ:ɶǭ*@  ?gݔPQ e޳ WP`E?oyHL W 8XXF366~JaЉ5՚ZS&7 $Z*-ư%m*@ϙY),U]ӵuo6gf9!;QQ(lJBLY0й.P^ԭHX.tTu44DZqbeb`#Q e+) +BS>!fS<{Y`)7B tk,I܀Y$Zw_l,%+(+jmEk%qPU$v5^W/IlQn//W~WnzUU=;'??_^xtQ{paav鶋+_+_ϧs?}<)OyOoiFzOOz'j˾q/pү»ݹOxУă(^JNxwl)ɝx+10?afnBXzäĥ9`[I4Jv]"8^p,9Sg6Ne '3-}D]c ;hro0|U-.jl3Yjn H?Qh8; .Na8YOj#EUQBSs-sü4JZF*PΫE8宽 S)'4aNaDF0BFHyV* e)k6NT9Xp5oת*TS3=+i/{ַL>a3oJ^(9j2@,-̿T,gc,HϚpgԜN&L:htW^Q .bx(d0oJA֚mdJJajʔw%pcz-_+p='L.Oץ1-:Dul-(t9˲f*/u2hAeRkUyثLał;ßks>wǿs߾/݂{]Ϟ?oox_;&7ο_g<7`/_8rm/xmc/}!x8m{pvܼ .\^vxEP׽uΝywIZIu }co'Lm( p1M%/%5؛B hZr$X\ԣ T1gH/ӜcTt[R*%JFPMɆRKB7QW(#*Kwp0V 7A`O  i+ tݫ,lȰ9vՉWKU 6cڷ48~\nW,'^z֥Eë*BK˵rMY)[`63k&>kЫcfC$F)KMXvy$\v!*; efD4mzٱl@tRz'GS+ku \ěkyVU"\ `e>iS^Um<z=7?ojUt" S{`^!~R^ 6DTA#t/7G>dka. M }fÞ 3‘#<)f^!)ǎ$D@͉W-UWrQXWIbY%6i|{#ac)pJT&:K7W&TQ TILH'˲jv ݩI)ҭ8o-_7>7^ݟDt]׏77y)+_| ~GcvJ]/?ب}շG|G#o77@Z?3ytw|S/!7Eۄ'}gЫ_'⯿smڏ>{|)>,]~poo)Oy;KJ[஻Z ag܊ȍA$r82 ?V'6έ1A%= {M7WHf\9ك*Sa# bE/D\/lZ:tTT|O9JMŀ0e&x[ՠkesjx*qBzq!Jj'ٱW׼9ɱOxg6Dk恍3bWd{5zxMhpK Pc^A6wR!l[1"MA|s+KF$22dK/Ֆj,UZ4[w! @ 2,H >I”٦${}mfČuEuY^Z؛B) }߆ǎ9U,6,SZXZp(`#nYT FUXAsl> [sҍ/ߔSKœ-la#lP$T0hfas`) =6[Ł`P| Or{ʫhxۮf ҝQS{+|d2Lt?4?/7~?W6yП{{^^g׿; =k~U/|m/>/|]g|'WC2OOo=Kk]x_y2=K3K|pgGƞ签c}>5Gg?[2Sy C_6s{qo-d455fg' ^w( =,xl,`?+"46 dX|7S|S t`c&p s[њcEU n0ox5zGD0|P0L%Gޜ*8P&Av=OI.U hfnau{7jdԀp՛SlxFYɓ,BI0Xoj6N:eZphl,JC-t J aMdžc:V I4hjڳ#{ya=ςa֊e2o٦aB)ŭ֒ 6\-@o){eBEd4̠ȳ7vPF8zs#Uc#kcfNj[",v)ӌ^G@sֵL ͭGpmYbJ}KXk3haC * e'ٞiRTkڳTbBKQ m'FQnA/u8<)\m9]K%5K#LSzO*) (v jjlʫS'P&ekh%$k--#0} oq`ו>m6/cTz_*TU%moWz\>~+_g=Ww^/?Mw|{g>Fvxgy8|bu\r%Gw)(^>5jB%ak6@lgb9* -ųEmdŰ +R-SI ֿ[L*4&L%hHZ!2h ŒC|M* SQLpY27L1+AF8N^LW_bxxPȲ=Gʫyn)嗲o{y3mW[{7? _m?Cxk^r׎>NM;oA(0̼.]h_o%{;I[:W^ rME ++s/dёΉN6J<-S P֟y8VZ' ZKoы \ t@zR7SoV_ť‰WYr,%o]g6T&.\ǔQ ÔcPbcd`qW8ЫTSD+)#='6笟qoUxUV"=+Y~̆ǚSdn*y-U =WPE0 JnKRJEFP Tyja;xձ"r>$0?kXV D!s˅#t`Fс ӄi†=K6j;@XZq8+pX9ŵ0u\*\uuE`Ҍcᐳ`PKB"XE([ >U0kloy Q ;=OFlckKac ('c/,IvP'Lza9Nmo}ͼan(;Gۦ$?:(3u6N 47߷1@IVNNvӄP3M[F= 0:Q*3JW,}+ҍto.v2avacteY&ګ>_{BnInKaZHjg)MzBC7S$TO+lW6b4 se(5ҁ^tz+])V8",#o45rD*Z}ˏJhjе̥ЫP QqP\y=)V*䚹A8ʖHo "GX 2g汩 6XFhz.3p#.%a@B&CWӓl´|/5Űٳ+)PuiB;0'Y:86lUmk0 -SMo( DR=г,ܨZz`+ l-95oci0aǓ#A4?I5BbE?-a@|`ij*9țN6nW,$|{*h¼oia.dϴ)CoNMܭ֋An&}קīb(-!T1lqsܳTNԛ1ϙQ̥ls#ΘlX +U+0tNj*B:h[5l,O-5ٚRe0o4;_0] xgWǃޔMz;%v;ƿ?IIwa[w}w/^='6@d`qd$PBkTA 6^mJ vs[_J:b T 'co)p;ܗAҬxL%9o0ͶM}(#JideWޑ7-FٱWB<'kDssZU|!ozfABKwyזTQI\yrJYGTN1msePXWI, t Zz5(+I'#AvձޜY_kz=(z55o(;3nfQd尟QbjPaNQs*TG\<~Ϻ@dSsas:G:tqͭ7r4[0Ez|!V8P! StX .4ӻ^ 6s5rEdrlo.d?QX+^jl'erPr*z91.YZ0h[kJ۽0O9BޗBHY{i+v s`YðXW^j`aCjxWK方8-5߷pjv> 4޴:˦IrmT )NZSKJ(z2mu}K3$+NyUB5=î-冹@'D0E3Bbܪ,#JQ:'ěNђ q%Ou1R2sAZ;}R#L铳2ԵP#Gh<^6844e2M, *'^'&qU2R!6 Ezi0l۷\!x8Oxgd;7^wS/>9,A++z6YvyN68<^ 'OΰrP{6n` aoZa7Ћ ,CNݒzQaKkQPO]iK[XJ`U)X*B^ BEBm^,"԰ʊ^2QFZ^Lee58#ڦ6+ 02sh%#6•zzU>±WK:}K3+UB 6[3%T)5b -X_l n)%H";ҽ~Q!ZYxQ Ќ, 2X1 ݾ4r0Z+ܟ9EBl3O,WҽQܭ$HT(3lʨrhJOϕ͊9\SgcjUxJnܬ"4eUbԛly|s=yʧICI!$ˏ!u.l6' Fe1;P SM3@ <,D 9,2HuoanGq鱜G^wb`m*>;Yˊ@Kp>+,.χ͞=o{=|M;;;'nҬV(Y(DE sϘlVz9Sɴa&$Üm*([QI sT"O^=.Zw[(uQ|eBZzTUjD3sPJN<&X{<NU\w%orTG١Ja+v(Uߘc5qpƫ0!Pb႒Hha%(6e'^6҃$`:QBt,0!4L S˴ocCOGN{ݟ4y-[N;,jxCR=}K †F3aCT3 [`ק2X"O:#gY2 Tq5̥"Pŏ*a.z5Le0-l bB3߬.FH .q|`yh,-P2#Hh۱1 K{XK?g9EuY37 #ҖsW("='Lb9s:NUq!Jʼnsn589OTJc _F>j7Tu͵<3<ٞq } F =B 2xKH7f+jna^z O:E;FqB7jDبlho{=~t;6E_E/OOOoo< S &T y8bq M,m3 .,miaxUtl)Dz<5}<1ySl+z@FRW0B0Ϙ,9:0NUgP{AfŎo}2ņ2:ʛ$ N*'fCjǹ9I'ܷn߆}K%TD˼2und)+˒F\M0c)f(ۡ7B!fxrvm5&=qTѓmkA0OO)!%Xhl1WNU +ŕ.} (-ěr'-39 @F1o+SW%WV^]8J:,pX:EnTm%ק^w^ .uI0dE),nP;an_?k_7OV^> At #xpuo['.=l<xvĚ2AJbdi<|1O6=YϙK^h~a]4*qn65܆GcXQ dTZVk,j7cJ@,*y6Ja%+\S+2ȁ(tE>Gz\+$а-N'6Lmh%p1l6,sc+c/3,zuUE9nR[oM_pq2SˤP DCA\z5q|'7.Av5^WԤEބ}>Î~vav;?9ݐ?~?7oCqk%-p]w#Y@N!/X' +UBIofm6%¶EmPxU8[rUTHګSōb8ʦ UF=v҅] `I6( 05Yezi&z=fEhj¶PnNIeT+lg4h[*"UU'pnC(j.eI<(O/ts{|jyBp@36iRdJ6lJ(`N<:XыªK;cUb) Ll ҋufmap<ڷO-/l(M K3f8( '^'Xcۆ2XQ8Kٕ<"6 fXܧQV~_[n[%o{=\AS>W^Pտ=ˮ͛;;w|<3=_'~G}ԗ}ٗs7M)bB*@t2#LNQ\;pѠ֝a^+b酧 Щ#oY΅n\Jf,3h\3<%cS╲@2%ڃA,>&c856t>Ҷeێ=䉷JՉ7, >bTo=SӾm:TURC`>ה K4aj-]녥ySZx,)/EY3bFtG_zXp5s#R.y}l:g}1K6LfI ~!5FWrF*l,A)xV`?u}w7|×~GíTwߝ@] QF_,LNUx;[ی);0XIEx6+:SN6$=sk&sf {"p#=zQčoxě%ݱ0!􊝂{fرvH!`06z}{F1FJD3)da|ΆЉ8Z+N SGGвУ rU p|߷4%HaY)bE̅IBk}UeD5jBۄ H`/' $JT ]vܞz J5Q6ij~"[2Q֪6n:q;S<=W} N<0aB`Ti_$4qQ/86̢rTFM8jȵj&-=tV 5qެ!lrܷ~niZS;(¬ެ=l;;'vN;=|'cR>/8o// [+nkax,hfyʔdF?kd7kEO-'RGYjD(ͧ.,LEg݄) Wr7OzŊy8X^ 췅>WF`^38VP8,8^A.t 3-ǖcPI-lh:άmJ^&0p Ramy/m\+ pzp{4;ņRdKKYh-9S/6 %XF05Ԓfg694eNeHQ"0ap3"5Ӕ-:UUB?X̓$VXP ͋ADu=tXz 'gI-}fX1_06,'s6LJmT*.7 'O* -S%pB^0w k@`yJO6re! HU%sex{ݛT2 #NPt%gkF9}+%ɠ)h-}~'^;a6j4j0hʱKc=\wvNoݾKΡ׽XzÖ~x.`X ‘7dqGތKy~m˼<7Y:ZK o ݂C\b* L3:8!BX`FPSԶc ?>pEr- xۇ~g>?jvpk%-pw/8fW( l+: Z6Nqa]EOI9len3=N-GfEBΙ;W5|bc"~n]x[56Wgvx4,_c9O_}ُ1W^sť'/?w|Ǽ_1O{{=ԛ?|䣞'+`߿I |o,w~o[.7֑k?O|'?O{~?I.=i/y{^ޛ?ʱ3gOx_y|m@ǯ{Ɵ8W7Row90Rޣpq n^TM/ͅ^PS6=ʠ!YYGC]0Ad"t%NՖIW\z3(L/Ў=ޟIlUdE P/L-jv ݩI)S ?:|_ |}'ج9^v|Ni1$|g돯ֿx/|_+~?_O7%0g|>޷}Ҭ?K~#_GՃMеէi|ozm?xkWo3o>;|鏡k̴9/گ|r#s*xN$/7Ԡ0qߒkf,f @Tľ)S˔`G7 Y@6 bƶ@폧^FYZӅ6NuU9+L;"QXK&W8U@XZm8$Fg8n<<H_X`5}T*xQ,wE^x`iC{YK C#W jfYXB<.8^ مc Fno2UbZt&9QS-@%/SAtpT',"a3hj Y愋++#T#'&51g8gs$$`-{ W^DʫB4 `E?6:؟,:U^tlM6$p屡P2xmި;qa]cIFq8 fn,Om0UaT "}fya eN L2SWkzFq1KaY,5 2uB13YЋs0ťsP sKVn(V).Yf88Pz$qkZ:u/N)[ { ;CRPN04tW=:p[}ଡ଼ kOwko͟3^?'#f[cwa ~xxi_aϪ?+_7vi'x+7_CЏ=+^K1zWҭ{~W~5O~?)׽껿ߟOi0ʧ/ԏM׿.V'<탟^;=>p~ǿ񇞟6__ pk%-pw;+\0RV񪵴nva +.sPRB#YEdAB wFe ,f{6V)ӌijZiON,݉E San$lhC\D jaaa(.{VUExzq 8)Lúe*bȰ5%A2D'Yd6C_:tHX:[uV>eg 0 r}{᭛ ܷ=~IO9i ?W}YH[;w\w+Nxwl&w>druϯW1'\yVo.Nn~~՝v\,O3NM/>)OySޟ/ߘӇyʛǻ=|?+owzKq?'=镯|׿s[+nB'қSo2㔣KÈp[y8ߔ '^;̓귞+y]6`&X˱X3зʜ0ʎhdQܟ%a|}-1zT(dQ/ޟzsM e!Tn #aaɨG޼9O3qy) Ege/-l,4#T&:afT0.Gpeeanz@ }? JVL"o>gC-eWBW"Tvc3ova[zz/ȏ델Rsَ\7څ˗[4vpvdJ{]Y758ӷv|J1¯]? w~7}׳'-mfso7={Ogdow-?Ë^|3yDV}o;AZ^p#dh̨mba`=K3l(5t3{=zlPjU ojZvV،ƫAq3JpH1M*DhR)Y207Q$g9or(ns`CM^v=KƩsѩv5ŰZ\\8*J0#\d<xtHކXZmQ,]{.nf#fƉ$fP`QvZvLo+6lsg<-ljQDZ^q+.ml譥՜0T8.h5%gcw)JE)I1ˡifZd>P5rY5u`i\$cL Ӊݶ~س%[z^?6yr”ckc:7jѧ{A,X4QVcɉ7׽xU16if}:L%Na0ES(M[Na+٩JvbRP1Q{f jj|rF+Duq[G!?͹Н %Y)TuU,KUřYkrG"=<5_3w|ʧϣʴyꮞO^ۯW_5կ?i5~[|5oP|{6_~-O>ysս?'B{|sk__G>y[_s-!/__ymOkzW|_5_SotwS탿_%/yt:\V}c[ʕ+[?x^0ω 5lC2sKZnрZy8Ч, 3D:PC׊sZIl0"ɖ^[a/1A&C'VtB8T˗C)* :fqjy-ض<* bƙ!eڳaJ` %"hKFEPsf^p0O-;pMKHE(./ 0gp5)G$tGOa(tU)N(!BP Iany >(fR-3$a@TJbl,m"H`gdR+$XxuPk$\_s7n3_XZ)t  Da3/Didcr4@hq)s-~TRy*za[RYB_ZCe'^e|`\ ̆(bP^<RMVµOgϬXltaC5‘W%F,~K2t1tuVTY 0Guo{q?tҥ2=n{='3|W[165-}W}_k^^_WnGx;-|տs3>;>cn ?e;Ͽ ^/_G@g?/yO{w|,ٝ3A_Ϟ5?M>bx}oh_W|O?;<69^|ys{g77^_o_;w7gh7/}g}g-ãmПwuW p`FH/zX w] ЩdHnj"BGbQܷas6Dx&]\{a5w`þ1 #lТQ+yV\UYHJ7Q=l+xMo P'=,\Dz嵴V5jx05 UXr P[yQ`,j Q0 8<Q)ɒ̵m+F b+9@eshj+pzXbi\]-5L:m,&Pr^CW$-#ƌ2So \,. gt~+_g=Ww^/vw?Cxoβ^0FP4e`'sJC#tB'+z Ͳ:Sݠ)̠{p؛cE7`LcPMx3eZ0(If -AHx-7s >)u 7TI:)2SnGc 8a㡢TɄc.lJQ60w E;1ea0fLz !Vӧ%Lj N6 =3aeYU{Z*#,8p-{eМia0X 0Z&2 n -,ݗ'bϙ D0(ѩ.LjJq=⚳W8^S (U%UףB8,%rQ..,]ɭfB"{Vk)SK-r۰`>fNj>I@ZSP- ܗ+y>o^aAL KFqeY9X{0* p,g`{/غGi)^22h†2yX1L &wgĕ\.Ƴ3Q@@ PSY (,,͉7X4Nmmgݥ P/#!+U"^P L5\@ +`=T`LC7a%dqNTTqdjÔfCK;Dң@V4ۋk2o:9rdVTM͘6"4K|+&WppbN=^ӥ7IfJ )MIdK a,ДulٰanlK}0%x &Cw.u:m] 6YW ,k㎲lCżjP 5(l 84'+fH8 Z+}'T)^ʚLJ jMKR62X=Fĭ6D0CYX+U3UȖ7\0Ɩ~ͱǵګ3Z/9`@K{U)I5LCw)tsC훦LinCC#o!' Ӏ0 0)x3ȊDQA/N="E ;ΓHUЌ;`TPKa(xۮfo^Rxɰ>xh0i5MWr'\<_pkvavŭT]wݵ`޳qaXGYSEF&@khN 6H] PW%Z(3dxFԽTƋ ^tVO9; 9ljhDeqÞ s۳q\A{vrfx.5ʛy |%Rpxݫ#gCP8-Nz[ɢ!m- 6Pxv6d Eʀq;U.6'L2WQ ({ʽ8c*-V63͙0'؉„)@Kty&wi a6V́PW-@ŕ[Fګ<;if˙ \y+y>  {.:Jƽ5/8 nĵb/zGff2I<:!,lpjjP8NI/W?9{~%/~e#s;;gE۩La*C<.pǹtTpqU'L BXX.lJhM^AaKFīkE ٲdTN@EmaDMkqn_XWJMd5BF"R]`J;"Q*՚b>6YXr&""5d CO۩eګy= - 7oJތAa-8Ĥ>_ $6,͉ eŚy6s7X>z Z}]7f0pz $Ex9č?OJF娰V:q3 #48#W^T ,Ո ${s\z5*ݔibiߺKօPP#ؐR@n qTTJgPD0( U\E;8"Ԕ"K%(kPJsoUhOaZoݔcE@ENM ZU Y*M l#ٕ<_ybX4w._?zs۳t6cx=7Gye^# ׽̈4Td$UmT9QQ T/RQjϒG;=[Jk|˱80 6Xg 5|߰0@'Aa2S^/*QLEdφ}5P+ɵB ղ Ɍp\p[@{?#եbai϶mT~`c_0 |@^iMHΤ؛z]V8ыe>gCl U- {fLk سTփ*lMWS|f43SVZf I\yR޶٭zx.fh)1uxsoqSnF;;ß*nJ6iIeJ8sӂ(BW\$g'6ʰNaр@,=..7k@aoC>#}aÜ anṰAFbD<ñUPM`0FΫbItL L2Wc9ț,' SGl`.IlՀpp6F(Ah<>ہ ӥL~`eKaul5aqM1&9}Id]z{w5(67^z: VZq*z+a f·>OB,= L< S+*x`0FZԣS- a}9,dcy{>Qey4x56xt[A!B m;g)R4 =Q3\ʠWgls+$.cgC2MF<Ŗ[m%Zc Y۰-yfc3 ZqHO z!xZUm֥kdcC9ytg.<kr ,JK;Oek;^z=2s-$!t tDAD"M@ tQ)Qj"%ޓ{ivyg}sn.f揹{3gf߽ZZVY3fc\BW4|P@7d))%m l*2" nڀxhﭮ59c9cTv '*IJe&z@jJEggu %@sZu%5J~0Q)\†[6]  ԟї/1bKnS[V[P4g29BʔYEWiDW\J%25&43 `AEU Cfcfm\P59#aH_3(JsҟZ1h) .]/pY뭮.EƲjdO-opdR I"PAGBfrXMn冕cw%v V }亼4/= gMź&iA kKhv M&1p@ 7 wƲaЏe.$Њn aRBծ}i?cfIJ)aNv54Q.ieDJ`bيΈ TTѵBlkbIOZZֳNزfUVb#!ʾ{$vX MCct=!:]Meʆ)1]hX!&@OBGlH?/6f`A.brni%rBD`ĬlsbJi5]H\P@ܥH艕bƁ}mj1 yp-vvnEm)ecwZqItb9b` Ksf8s1طj8 2_"-IS櫱SM$je,:f zb (%\@yݖ[(Wx}dhiتM_ڤ`tݢ7I[m6cE!#5·ZMC cbŬ$֭3oNLHM2梶)cB-M N!7o0oi,3@+ Í31#$СugohvIiSȈT1L}mz'&ccf ݺ22Rkjz *;#֋5tĎD'0KLF\Ջkm|)SE sH)I<ŭHӑU44p#+Y$-jUӷ,3ML*,NRk@b_CjLfZJbwlSm SjC!xa괈H5jج`Zh7*j#1ZY&iQSvZ3bhb(DEg\JXtuWs Rz*J i6QjRSROR ި.iۑLݪ#++4 uw,v2V`]ܰYZCU@ lӺ#M)u&qdEEf\KJ3+`Du+Բd4R)Hș펽Do_+̙s1sZ`N}Nذ|J]mj*^|hy I®[ݤ'mGBZ'L)2_. VXQ߰r=Eͯ'[jI1$SC`ʤ!ИKH30!vY)Jeށ6ά` d=XJܪ@kBj fM.)%XB#%_2W,w`2Mw[w ӊjוFe֑&Ml:aC]bbY!@KԤ޺Sꄮ+$$v$,1(tYjQcЁڬQZosm.,}BS~OKi!kYEV,E H=mrXEi(=iC4bm  7()A'&.hL1,5۪킆nBuXJh5ed8aLЗRG %*l‘9:J(źT⢰Bb$&J)rMRb_kY63脾%Ӟ6/fA %b e! ;{+;Hn9c9cQHisk@.qYD'kXаa!lϖ:ڦ uh>ؕփҔQXubN%ႦA:ajHB)2ҰbK 2Q`hŹ?bBD,X!Ip:i+@m3ؒ"RVo!b=X)1M,_>iGL-+v BrHLEOc.1լ'1] P 0`I]C?+sDWj! m֬XnMBlcs qh" %)0E)V5T zk쥘9"'jVZ3f_ OcJ&-I"[H4FR 撎9bC-haJ`hXԖ:ACn>Ml*8g(슽 )C5)DJM8 v[oyP(-nӚĜ0PF:*5+WT7#Ncf%gWڮX$0NbEZ@2Tڙ tE)݆l!j #r3%VSޒӜ\8؍:f .L"ti2aGb*j 2,HE)}&)rJZ8Bp#dY@Y‰-hSHHӓŅJ_YJ-'ċ o=Mp9c9~-o'>p 'd02 ] 5} K*8\BWTds )V1IC <ċ4upk&1i}ԸsMn@˄}9%kh{;E >pn,YK20M2d %,nSi6\bbyCU%(R7FH" P Sjٰ kYfIS U,ifVPIt KrVnА尔##5y+ݔ3zZ/*Sa]~nIu+ XБ֋D]r,VT\ iĺ "~CV4t]AW,"ؔY;k\.yO5uKtlB +*YIܢ ndbXeY WHkscfÆh_M%D. >0QzDP ĊJs``3hR#B(*$PrCF U"Q:@#ZԤ! hE69HȔndރ0ѭ[IHH MI]4"RiltM)*ˆkCjLcDCdRInӗG}ou妊Z+œ1s1׀ؕ!5La m.e.A+сkYAbBjfN:ajxk ZJJR yUmN"Sj2 ݊e pqhҕRQ^X&4vN.$2e~~lJR%#-t$5sǖ,RhE?tUqaY%&9ss!t|d>jGEzҦꅮ|Ɗŀ IMY!)=!cSfX )$H)Њd4dBbJ i-}D u[\iIKHH|jC`Wt6fA+peCkh+#%\'2k dò)} LffC = ϴr*%(jeld9R%m%58a&;":6]i;3NmOk4P/6658؂VK:IȄX.1f”O B/R7,K?:Ttz# :6 I5ز %v\a%وYEPƜ6ܪ67i9+m_4T4XRJ4躕cf,뤫mC76EjEҧ; vV-OrRʀ5hl,)+;Hn9 =ۿqW;w{/=Y7 ;3}1,o[=usvRx≙XLrآ] 9nXjd>o()Ø3XZ'%mh XbDBi )Ѥզ# !Ŝ#`lt]i; |hl+*z^֨!Sz.iB/M! 52"@*@.٥G`MOBWb˝jDRЋ&f)%uEbJ264B#ejYZSS+C4.9qQLikZ/i b!-[ΚelS"1 )8S4BRH|.]-Z=!L-i;D"\863WtN:X "C3@cFYК)t%FN85rY[nY]СDᦖOKE US", ]E[j)3KqG}mv&p65}!(M_ceSZh$tCˇVlX>#HnN Г$#T& tEmhj*1!sKiCD+4&  1tY!bb&tL b*ɖIA_45.8мA2Ʈ\PJ;̀ Kn5 ؕ ?:/II+c]nnJlœ1/?  vbpM~sq~~GH^gIQLN]{O>Hsk};N8aI!(]AMIR®9lL]NJL',J!e̬v4,h]Hp`)W۪v.ihآ͢ҤF={Bm3' `7M]m=i]2 7υ=X!1=JȔ~lQtRI[-:ݦUODadX-$luS K2)+3`f m&K0jĩ"ujMY0&u7I՘A*j!6^bMy6 a]؂}=$jX kܤ6k)N`d$4tb-u,@P \$Fd239! L-.+$VW Z\b%BSG⓶)H%6p4-鴯uJdi H ։膕;c "nJ,tkV[@jM!bvQbb 3X$]2m]]~lZAT4Kʎ:΃XOERB2 Mɟb`X pA &&6L't#nHHbbYrBOӞ3K -X.-ZPOݨXя,Х@'`xؒ;]VWe'5ls9O3wy[9wuySRv܃YB?5]У3s"ދ@K@Et ݱfEJP0KEzbKnKKZw%,_% iKi(qbĖS[tjnLm XzU:,G,9+U[>4-3a I[ E GtCiItN)9@s͌Ӯh;bMR)YdPi7 mWb)q kVXB{j)DtI4]IJ"{nŚIob.Vq "]HIBdLGyaP)%b^,@kqItVL*g (n!U%W3v7 qA.;3Em,}-4x Zu%*T"YsVJ)]j:V@ $)IC2k ` %-}lJ-u,rK #aM_)tŶ9,j(`lndYE twԖ.]MSPOZ/x42a.LWSaFrz`5(YaŪ;c2idLϠ`GbW H$b}E@)1>RC&1Bg_aY@+Z$Yܭn44ҹt9a_SoqwrtحG{ܤ{/s_ߺMoo<ۦ3u;ӳ>r{}B<_^ \=vm ~G_I_y;]Go_z1}_AǾ3/7?p~+'ۮ^[?∣q{nx_{W>{X,pcD?m+wͮ==g\=rC,m;׸ p]\o9o)w|oJGSgvz9}C,.s/|3[o > yÞg>e9+zO}⴫F\г x3k{h<yk|?|s}帩lm|'8WOowrv~̛O={eϽ`}?ik8o엿>넏 xs_g|ᢵ]gG].>-{W{MWv׾{ƻ6iO_cqc㬕3?.Uǂ\l}ޏaO&ޞX=ۯ}9j25#,+$-lwբ֩@ /yҭ[>Z'N!NPSWHi JhMOL 2QЮ\8Zhbz}mtV\^*վ rZ̏փ1VԋCwȼ+@Ms)-ntv$ZK̪\ؕM@&Vt!BE'ql\"@uKmᖴM#55@)iQ%e8twYR^:ѧF@b!ӷ.؟]RypBi)Sjř+1v155 ^6t+h Z ` keXIE\Rf'!t%$)DG)SK)JtDZȐ^XXN) ))1ɫ<"9]CRk~Mpװ}[N[N=ڗ x91aWm`WeOyc^Rv>أ?:lg=s=Eo3{~ȶO?V>/ Ołf֋ws߾z?{ؑrdyΝvdn?WK/ty1unz؁oWocǝ;YA|}\/Výٍ,<_>m nm/:Cf-m%;WΝV-s-۶'eh[7b8O?]͊΍;K w|{xpuog_ן?RH3l5"X~Rp KA n+khEΛ#B*ݚ)k޼Cp 5i)cw֭LECNҹ/RtRHѶ6nE tVOzaWLz@@_b.ґ ܰ'D*bTPa t~Uվ$Oi!vY۾ .ؕacnsE%O'Њh M]&$u]*x:=i%DJ`lYE)$LfyRH[M0T.HE?bVQq֋:{ta]0 =v3e'ayLN [~SX50@3P5٘YMEm>BOo 3 -jN8b| Iy[4,lQHۑN%H 2w2K'җ+j:bdb 2$&gf4&kq!#h 5HŬSK&p'fDCmSIIGb# En1is` ֗c\a}i^fIv'rqE,`?O)tRӍ C2{afװe__G ?/WWNŗ_2s NyO.>]-gӯ3g_^ӏznGg>;=͏=8v2XGb)B⢆L)*2bztݦumKZowV]m eLLFRL R>"jBdbj) m3!Ed\bme:3rB+:]!9,%$$\'B"=\́qeTё6,m;OxEwzhn/Ыoro}<_O.h/씧ŽiK !K{Ϳ>{_gq&mϿUȖ{[.߼Y׼ۮw{^n?5 Ͼ>tiG^86O{cnyǻ|e) {Ԏm7~/+<|5o'Gm813O~Iu֜ e@8E8O~;NÎXS6632c15-t5v?~~ OYwVv|6B4Q*D01d !dz=]gӞ'k?jP3p Tn:a;cfNr>E&3eG:6 _R'tl!Itbzb%uv,4t4$99si6C3WH(RLŠ~ź)~#*k*eT(aEK%&tC!$e;)YQMHH!fXl%v&&%G$.5+vrʌŖ]Փ KB bY -dw#XlখKi("HiHNR7 -06o_+HU]v:'l?K_oxɃ{fmr_җFO~=<:'pI'=O{oMN>>l9~3 ?xIi߸qPU*tZM 7I? &Ĝ lNX :bB*4hr.Ȇ=m$fb&v[RD.B *rh^buWyC趺wnnщb մfA jcb#2'\&KK Vb'Ri!6T/VLh+'r"ʼnEHGlj[zh~hENT m̬28PZ֋+\zycJR=A`NXMUpqf+ @a]8tzҽ]g=?_WV 8l~`9:}[ 9|웻0=o{\{96ẗ}UG7%Fs\BW3/5-٣ow~9W\r Ͻ[xܡ|Xc\=K< kqE췓Oi_-6Ih,vVcRsيcl1}SЀ#H_#Vjib;b9b3`CKYAF Syth: :&"gΌGZC3-ɕ)0@O@\Y-Ob)) ]TKv7khs]%mK DtYf S%W-:SNiOcGb%Tu+f$ۍ2lò90M-ʍ)J)N/Onמ{vg2mHBZh WHLzrC-k)}.qQm2}mjcp3ES/65$l:aۊUX!+я ݢmO¢N&K:@^I,% zb4 i(f2}S'$D. K[y1'h@{b uJ)Ē=؀6E1H)/WSSh!֐SrBДV ERJ)ZjRIGdVmWBxa]bbYJp:l O᤹׿&b>zGw=ί}~gc9~Ey?dp5=s]p9Zʖ5]=N8\ܮnY둹RO荒RdRWAiB-4 @k471ű34,J1X(X0z@Wsv*K#eLPh}nRw 1Cl9;Hcs)(!M PJ8KZҦ9C ?quCd ߟҷPX7@:"}YfECr6Uq&ֆWtJ4)ݔ N%,FJڢUb D.)b҄'.{[!Y;lY/_ϽQ{^ Іia"H) xR)*e,ІYlͺIRdu K}͏?OZ7!䡯V0*֓m)T,F&kXVH _,OSMep-ċLHZkVd Z̆tt5{$#%MWci  2U@RV-߰̈nňKSD*pmwXRYҘv՚ej;H=ešL_jM\tJg ZʄL SZ~wŠ~=+jʼTsb LɥRSȅFĞƞD/4X| tubN:Bt0/1w4 nb zͫ]C{/c9c)™/v?aϖl֘g]).-%]&vV 4҈##qKdlm 9,%5uH 8 )^ؗ602bH8U"K! JRX`_CKml@+ 1C.hH6,X&@CiƁZG$s&)#1V.&`˅[\ݑfjnH"䦋ZL$b5ݪ8\X*4{RLҩyaYOcKa]lC̦B' SBB&#!9 a.{Mԟ9Vh[$ m@7el[*PAi ,C)K2)H Uc脕w/>w#tI^R 'ֹXKZ^go)E }_6XGcWb!t`z]rg]:{<*zdVTԮiRY3#0ӕbI2WttC:D)llBJ*cJvIF6ԕUcM)$tSˌ:V5t슽UEYҦ'1BGV&rJAtQ,o%I視2ЃZjKk'@raʞYҸEQb5ʩe-4P4G$%c~t&*O:j9c9eR^Iu'XYfgK^P b~\>\t9FjW℮b%M#0%`Wl -),6.J@(ŽX!q ̈́#֕͂mSE판>iIIkOk ]q2Ѧ웣HOC -[ĦT /_RS/ aQSXhWc6t3em0ƤNJnL?%&Fwq s hh(%,jWw6s};ڦKH1+$tbfװՕWt:[+ʿeO?p}~џ5K+?b8o{sş`9%Ή `^&^84 8bQ$Զ+R^XqeYn ^(@Oؠk[ Dm.dͤwFpVGwq`5\!PcKT)qG>⨗d af3ꘌffj2 NIә0e4hڐgƺR ٴ'I/cq|CRb!aI[JtT'86t "jKo\ڽ54P3BuR,di cgͲZ WGhJpŔ~cj4"} Z'1mJ'UFHHۢuXa ҴP-].q)edދynX^j($p]irL`!1BFE;-XU8ĵ*rf֙-ZؘL!`ĈKڶ2\_=iӸ&63T/h)})'ƎKny`ź:\u-w|E9_ Z1gsg{^:s絢sᤓNU(ai# 5Ձ#fc˷Ʉ~b@끶0#_gBe0wbn@H(±e3&ŊM `BO`!ux~ & (]GoZ="8Eq@ I#0mASĴbBUbg4"I6*1ęHJú E> _(xOrXXQ-Wa_Z+.gLlCɱieNlNӒTQK:A$*jMZQjئ% l9įnw՘njYY%'`O, $vz1Pq3ʁp_D[rd͊Hhi ЗXQ6pӈ4Je–RCG0@ !pq̙8lfb67(F$7p]iKTe|c$nmHIRӷt=m0s`C7JK3/u];wפֿx+^t9:0kv1s1s 5T-j!)12Tnu8IKl&)͒Nn! luÆ!Rt.L-[NCK_3ì^@ r"&-$BOGAwCff,S6)є:úBPw0Cp*AދwIf-1BNQyɼxLtqw.륎'($Y;ǖ!=i;b )+!qRE`2RB)aLaŔ>@"#02]ޔ4P%[fQtH3Tھf~ݐKH$ 4Ԕ<5= fb']\֒B#|= ];vEԄ`:{="`at-N,njN[8'LM d–lVmJ ]ԥ:kMlҕMxѓH-$XQ[JbpRBC3yo s'3|ۏ|?~l9c9aE2n زX-XbÐ*(5yit;k!n!Hcf# 6WmfQeQ`Gڞ] D*n63y3Re-&ƣo;'H86`2Ap. 4CN"nSǫkشV@#ږm+K+LĻK!P3M2%RMW=jX&qĦ-M P'x+^t9:0kvZyދ V\Es1A|ܭupT !;!fdG\?} zGX{sD nzԳ|/ݡO}E_ɏ;WZ]?ݙ wQYO87_È#BeCRu lp¬d .ii8aK{:M-o0b(PS"`WA. -_lb'* +m`iݓ9EH M1SNXV\Զ'm,5Kաbh)&d"5Qh6v ۊȊ4H),EW#/ݱkPF" u$$eRAjJK%|CWjKXfOk$+$51҃څg 7xtg~S~ʅ?#\N-xRW5۞p[ >vn1t~~χL߮z{]\Х#IP/}i^+1O{ѵ&u뾼v-Q}?IcOu |˾{?y]/"xQwx3t%x^~Y:6r"Gewˡ77<ɏ?*PRå ulb|E$2[~+f-%BH`TЬ;@W<"@EKHHY \ӔZ͢/mb@\b(K{:DӑnGbBiٶq&#ͼ̴"R !"y&y>U|`]sc4 H6Sbd@!nNF$(P! F4;ifVY^2]!aU& (%:)ӌ_& j*Kp͂6K:h(D Ѯ3KA"d#(AX)R5t`Rb9lZNPn0&ϷXJŦԡ年[ܴ#m]vŖVjnl.@jrLlX6en̾Eb9U ݦVW4.kTBXqӄdJU@+#zA&H); *S+eFvp:UOyaûwx>7c_wZ:S) vOJfVo{B 7c}rOK.>2"鏭1UV,彗^(K۶>_?ge7wto}>7f-иi;OywE\7M_pc|1g!w~GSܵ}?9/ݟ_J4t ]!iJ[JH]} u|,BKa_)N;OUo<^N{3oYw{߿wZXݟ}c\R^w`?n}{C]͟3?N:6kjԊN=} M̭X#.zOG;ˊmSunaSE 0#PYv5#3\b Z`:kPHLeQ{}G%V( LMCRyD㴒N @0ez:unui%ihPH( FlZ҄de hZ-҆!=a*Ss(nE!]f3]h!=1kr } 0B"Q ͷ VwJL~Q 1 tD*rVj+`E7-qw$6P4X@Wd%-mw!"uNLv"KX_2meZR;H%t]mړ+f@4bnRE+X4`9a6nIOcJ1LrBKSjm$f_+f[ܤ#!P[v~`2 }w?Ǘ}OoX}7_q; !}=9?“c￷hUf|'p[e1ǵk%rP|~cCw ϖ˘᎛轷3Oewp#E[yף;ç:Zxf^x~vSNr4{.mݏ}gCoz7ܑy>>ջ6:`ןY_ȍt-[_n1ff^p_<}ȩ}΍ [d'O<_O9/?V<_?{/Ή o[xڇ'~_w{{}y[A>Wy)>O?2|F`\:O?~} ֯|柝HsnrwZ:m٫|Q;g_W^t~}Oǟ|\3D}?7w^q=̒v#^}gqBGo*b4'??=?c~k't]W5]ayͬ,CI >E 3x҈Sr.kT-eg9آ֭0hGZmLFV6t*,U 3l/e̘Tg0{Y'j $Żو`R%m|F!LgL{HnҔ=/pʢAxˮᔭ!;\X1 T@Tln~̬'m& st-1Ky*r_RcWۮ%S1[Vm"+mnL1u%v2]1`tÊ4-KI\Ʈ&SjMKhbO6RXBrDA/L,@E2w43ّj`P[zjRDC;b3$% n~̼+m) K9vjJb: @&Vq6K-Dw$$ P(̠9.hUMR->fߝW}ou[zEùOxދkb"wȻ|rnws}eNN%O<K[o\{~s7s#.擾x9fx譯joXi_.]%3ܹtۛ렋G䨯|9]s맬~_>1ya ^lrZcxWXҭ'ⷷJdǮ>GwN;U|SON' @ڋnu_v;wsG#N_; }N};O<Ï*&z^{vexUo>gз_yMꪘcvc3ow>O~'3_yО_>3;wgtd1y?}˭>o|׿U=~/xg*{ʔ[S BJ/Ҥ7T`A"X1"IE $͝޽?޹!$$o3Os=sYg֎! ScoߛJsvvWٿ3kʇSLyMԶz 4$+KT$jvP e>t$"[85 )q^ijSKBYH@Tohh }/󖏊ߴP22\k`8B DU) (D I" I*IS1$ &3$˻_b,rK"*eB]ZκZ( HYk$lJ 6Նp\ S+qHLQ.=3L3 L`A1~~ْcϒF$b%Ԓ (08&$)hL2(dsЈ\L.$aƛ4ePL6"WV0鐋}i7' 5Ԏ25ze{I^3.LC^5'zz/g.? /ҽk{n 7lxow0Öf6]K? VZpF|~kp'xdO2߯5Wl9;yT{!6 5>{ь-0bc60~{!7XGg:s4E1e?o\v=K:|;p#= `'L_wz5C]ͽy;ϞF>@vg>~U|&[=sЙle~ʃGdov\{?{!c@zgު~ǭݤ%XQ-ky ׼ ۏ~en>]#r"OŹOb.m_o?&dn>jǮ‡O]5fV4U{򤩗|.h7 ׹_'_[ygO~zFߜ棧miߛ}'fxU$+Eݴ$SKhBvP2Fqn5a_R^8{*[e'\ ՀBEL `+W5#`@fUI329ߓ)@MUPECGH T|72M|պDmCFTtqZ"5@BMM܀X \ L٫c 25!9CR%*ʙچ!9A}h0}I f؂8c\}K?kL{䴍`O{M]&]6@Ž;NW&vCKq4s plLvi3/Z[*_vn=Oyy{z6|'}e\-%; {ÿ#,P8Mx[Xkߡ/7G^a+F3Oʺ(S#BcDs_Zoxqu~'>³/O Z)p۱+/xFΣ7jW[nif츞O]ԧ[TOL[e wלv|RLwrUmV[t+g*rFWS&g>liGa~BNlW! 29%xUe}}kETiP, 4;eЋ\MBC*1!j!J1X.xdSh` m&ިZQ?/c91˭ E)j>&P^,k'0LQ3Z%d"H3 kB9@A+YL+ 44VTH, 1Q! *\W+$!\vP~g늸EB"@wӀm=<mT7؏tk0(ϖ'o~;\MMTiXM&S↚A1u!ЦڦژdɻY(rMC-:\xg#B9($S@O{L#KIDH#* hBaEP W*T,J4WV8U3l&  5&!\ ?]? (yNy' 4Z9cwe.!Xkmro_r;l=ٝ >;[jh6/3kyCՏ'~#w6K~mUOoG; yOe')@^G'7@K$h0W䤓BMMUxI'WS8р\g~Lb -+]LJW|Eg! (sZ4+> %xPTSz\ހ5F,yIDZnTxa. i X؊Q+p IX^!ȬikN`"6?4*--:"''K$z](T jbS5NYjR ZT@V/,chSZ}-NͰA b,!P Yʇ$iEDHJ$^ RU_a-Ly'g%EɁr mK-`d$) tp3EsʾC?rç'=&ov.zdC?j$_z湷k~9qg^8ưb)SQ^NC* 5AYDw6za ԟ64Gj!mF$1DR&PCʤeʻ9$)*5%" "PWk PjHӖy/ Gyc i֪µȘgkir*zzDe*-^G8RLJ9Ui4<*OA@~$Z/_%Pch\6.n2ԋ$]}ų%qJZe}M5trRakE7h\DΐR @%r19=1@u p:M0ys`R5CNw~" \hEuഃT7F2PbBDlWOWkX U[ᜠMWb%lHYL6U[|IʔǜGT@*gL)tI",U3ARSm@.]۞▿]puGIиrw\t=~Qwx终E=glwAv_y}[}r۟y^~v{nLAG/>_7w[vw֝ßn=FoϰrW}㹻/"Y!{U͍_]ctʔ)D!(,i]M]Br@44tr)q.j5C+YD<>YWmr<Ԕp3i':*U8k0U*Trrё˟=R/2S)skTT#[EBoM$B#/`ވW'BiQj*D`kf< 0D[~(lQPmRe ϵѤri˟|ˇ}zQR"|i"e+^R?* HI]DLeϕ\4;/BC"m `n+ HEYhfg@ӊ(L! $"! SfeLꪜ$L@Cj0$Р2Bj%Q`Pa9B\ / *Tι̐*g%rK@'ibS®l!IĀ%VQ?j\BѩJeΜgkA,>etQXZS8~a?aago;kYgͫH҂1;;-Ow֫3^}qoY ާo1PUFmB'y -D " T(zL!z uITNsX*jMre &aOI^kyL.fjJP^|@ʳ\ǀC)w=-}/ȳ;B|'2 kV=-g_2M[rLuåooI~1o>n_߇ehJYYPk~՗d0DtM-Oc%2{"|! WLE9U!H:kF\ipVbF$?) eJM5 25)%j}"hSmMLMS\9Q@1$ 4"@"EM\@j$-Y.TNbCvT8 IroO:(++@s$H gTj &$LE@J@r2p@Hd` IGFs:Ȅ@50WJ% @F7HsL( DQ(2EL4Ԫ$.k! c1o1xذc-?ךs}n 6-ɫV^z+mSoqe\w[ĥ&teu5wǁ3)@C\%leh)|-64!ELE!!aD%X)2T)SPK `1$1eb,2Cm<{OF@ -{{VQ\XUO'sG~?;UO7ժ}WO?N}=}П<.9zuON}G٧Vxp/xmN}ݝZpxUor%ruſ>O;U'vA~vٵj\Yn)C7Ew?j_> ;Q垇~؉;{[]WZ1:'.=jîX|_ܧ /_pAVt/pיܑ>o?3i/xG8o xe^q5ʯCh6hsBB)XFfjj$ gHЁ 9@2eWpBV"5s%u5u!5͈\8R6\Inn.a{ ONQ90 d T2da|l)P"&)kHuNxq]%N\r∬(D&FDՊgPE,jŊh@ܰPD͚(r!$Ε( HDLMLR&RDER,9MbReM5 5ah'eH@L4Ɏ6E..*BH@uR^"+ JPЁbU.b\B)WRk2ec*,IvsKȿ~xX̫jbDPP;31ݜYhXM\R(`HB*b\Y!>5S|cܔ.ѰXDyD!ɕDҀ@[L ){kYkk%>r^ޝzm.~ovW0wi{2L{7w\`&G}qqO.f;@oCh6h^S$!TbgcLj+M4)g;8u BJ ʃb$L$%LDQ% ISe;D%َT9Peo8*JNq &- p@QEEԋLŻm0`V``Z:oTiy+$9ЋE2=KtRF!2]4, SP;Uy@fP* YRF$9̐Ģ UȀ$(NCJhDEJ"EH !j2k7.8$[5*\)U6!1)jIH> 'U^BRC:$\){) @~Fϻ cN.:8rV21%*r5)L<,LWII/78WDcM}I (ah ɕjH,LMvPaa59%o2Z 瑾l ]]C |}̙ZC=?m:j2ϗ=թ߯NwSOx2vX$3g\p[+'^ymw>̋OL{F}0qg%s_+̹&-5и̞1+}Onl~Y?66Zq>}ϧk~yʉ+ݏ|g.x4Sb~6MNhEPׄo/dV;[n>sۯ^bkknrMz@ѽZsYc\{l4~{{38 {GJ+ P͚6+6߸/,f6h6CB.6S*b$X*erer&AQDr|ȐDRnh &M$KXfiT9}`%B4$qΔ "@SyPlCm*rـ*|Wa+Ŵ8jK1ܢ^y4E0ZdEA1m6D}1E)ܩU%0L#i4KEI**Q*C֒T~dj} ŰB|dVႡ򠋛0ԁk&jr𰄉ZϨDD%ҐfH e QLjH yDN.T3י1 a`TJDE@14T1(fp(rj!r8v*!{),I jZbm򐔜2@>LZ&bN#.2PfhgH#reKDZDQ%lH'ؤ&QS qJXRHK'jioW/޷goMzdžayCLlu$`s 襗wo|g;lwۨclGWM{OwvLon:6w\y }bp&=+s/zl?;OW{=z~s}+6tێZ^~WV3?~O|g[>^zpe7}m5 諿ĺnkZ~K}\|i{8l:Sv7_) 3f?ѡLݴcܧ4N@z᫝MW|~iι`Կ3w__|𷻿몸M>_m7\u| 퐭P~ Fm8jf;L߯K@I _)pZ(7jF%q$ؒg!ɐ;SS,&;1)/}gl)Hs者dj:MBkM EϲeZ82F]bBM"QkSvHS6(b书K0i ֦3AKid#zv[4JoԻ?Z_єQ''ek2cRȷ<S*@Ze'..DfJW,DN ^FcB"&J 11 crB (S+>S)$L5)}LC<9,aCS^ἩDEL@a*("$ "ZԎiPk ! ܫ,)T@z8Akp!\LYiR]U*siSr`BAO>0^O]ֲgdË_:na?՞Pʽ7?8ymV2[<3?::Kn%! 1l:%{ r7̄m[ob9nn07.o2}Ϲ{}Coۡ#}n:弓[zdVoui^i|綛\-6Z uOʃ].zt`d7a{&'\zo>~7e}GoMoܽ3|ᬝ;h ?=w9cO~+pe~xɻP)>t%x?a?w{"@p{ƅvȖ3~n6lf~2eJAÔ)S6\9QPE؍"k-k)46-i"*BT-=ĤL 4bH]E<=H1&QEMؘBف"r!Oۡ^sQw~$KB0l$iƧ8iz':\3U*Q8d;䧷&z:K1 N EYEmaF\~5)ǭ-4}?sVCDŐu@L I$JBh5\NJFJTFQtCZ&T#@D>U8a*wں&-ߍ*1\ +yZW\Ӥ~뻞=֣b~! n>oMO ~FгŽ:̽'c7~ӓkj[~?? Gqs2*['qK=> Skی+n\<3ܻsn9箹e.7U_\v>b?|Gw-jo\Bn;3_[ @=:qϤw:GdzoGxe5 O⃗xea;^cfFmh36>2ev}}\1i>1iyz L\9UÉP$R (Qea&藨yl1a>.Srev1РD=$WMxZp*k}P=j&hpGQU9J`Fjۢ#)2_fMGؠ6,uv@N֢фgesf{iqWODP(4ʱVSKWmp'QZeA/*\"'Q7gKµ7*>G@Un7ߕ*pjFyX_ e֘XUUҀ><oSu2Rp)hb@\M@.Ager/-|Vˀ"+I.N,'r-D\7kʄc` ihX9\W)Q6434")gM&a9 Wm(@N1ە˜UpB9 Q`+&1]˭c}3gOgX=`wۻ|ӢĴ{xR{l_ƹJN+t ӫY]=Fs\uA7ڹ>ǏG 1 7 ty{ntþpj63l:̰ LаL9SNV(I:Y\) Łjj;8 7R8&"!=?^Ni{/2XA 8 )LU(^ c""ˠr D QK$F"QE)FQԼ bQ(`ּ% /ZG$f9G|'6zC#D!NӦrUκ%3i+wsC Lרe$[$,a,$Q[< i u`9> ImXNʽVKK̖o0ѠB%.|!hC)G!0jR58s9oOQ*Q:^tPʡ\).D*~EK ƙD*!(5% ɍ6Yb A ~ %ΕK3ͺ`UT۔XZ +K3Bůp stwo=nכ}&޻Mo=|i_lԧf>{}\1a[)ˏ׿W+E?7v.7@^=o^ yy#oz^mFmaB]m ǀ0N.R4&%I\L?q3 $9f9LT )Tz=Q`2.B%(TISs]y@j){~|NPP)nGR(hvs0R weHM}5bpF4z0-YE+U4E!HR,P PbDR欮ACGv%*Bā$h(eS^\&ހJ J\(RD.%J5L!aF煪XTIJTrtqQa IvXlDZaD k0ᰚL(j%2<wb3 )P`N.F8РD5 H8GxX055  Ycr `dRd*j֚*"W"`HBH&S@%qbHBre*B(,-_tq7O=\ak_ò+wu4eO>\SU״Y[<|p}xR}xLȤZoj{̪_g-h5#ZSec{FOC|f]v8c oh6h6>H(SɅS%Mr <8 ՄJTLꭀ>W6$̔R値EMÆ |*rF&;ehDE3JsKfgf9DUъuq0D@3oRD2^ ?>ɧD|0iEhAxsQHƴT0ryjc*& T9WS]\  X5sD1%m ($-IN N9S[&)̈YQ}E4 PDB.F\!i@ UI B(SKJWMBH]'7fJ|I $P漇}~o4v׳|;svE7?N-Y-1 ~n-OZ׹景=s=0CPGi'Ft|䐓?Qk>%Z_}O? />u%q7.4l6h6> M5N@sp]쐚! j(K%h@E.#QC(Wmq (T%8 #-7;c jXfDpڦ @ 11IDЦ2)7DW8 R =JiQ( Easև `zĻsf8}=G;);x/yzÎ;^ў6{3o=i}^N:KGyGqGyԯx߾mA=۶nX;7Z^vm-螸mSMԽFy[*}^y~e7siG>wڑWwr(Q;~mkJ|ckͺgnjT^fOgZ=q󟔤d'_Aqk걟l!7{M8u #o^\G&{lwZmkv!?o_T\\z|w[Jo"=}+nפ|y]vI digv䎳wM:7?W~đ;K\n]_znz-мUNY[_mPL2eݿ*zY#2sKLPSɑ+mtNXԴEakMi!^8؅ 2mG_z]Dv6+.wq<|5Z(̞=ZvwwƻE9q&{KQgU6ozK F([cmعv<镧_`JEfO5k}i#ǻOԨԹ`Ut.Χ~:2WN͡e?fIV:,h>y;:ksŴۡ+Mv?&_k;<{zե0z/K;o-.zndtpſA7r~XULpo_/'s?͗Jc`훿u?_6z'nj8(fXlS-jZACrWus>$:o7Pаu ,G] `ᆧWYI\͐\ WSl|k%sHSdy.J0€Q`&k` K@015E8," _MVτd勺ԚD,:OF @^u Zx[(}.kCyX9 ep6|1]2Ea g9bI LT)V~  LIN9@a"&uP1$u 6XWT (XҐwNXrL*J<(q]a1 petP(E|+!0D.b7$ငV(7T0iTW*{Y;<.Z8SӐKTDr@cu %hHBف5%jKZ,"Yy]f+>I50,bqg!xևgnTsǭO- fXz=>ֻѝvwjݗ^~wRcZ[.0 ƻwi~ïo:+V6\m1?9?_;}͍z&?S畿v댡Yw2?K^>L}ju`}.]/yo|ylr>s2fsok^|sv/2k}CSo=s~'<^9+W;_loyow1߾b>@I+-yqw3 ;H0vFsyӿd J~7]ÂAI!Q]>W]&̚)yy[PTLw2W_\M 1MLg#u\7%r 6+eJ98@H0HK\T(3ݜ=-_f |ZLY\uqyEp3LlkL%c) ȓ7Щ1P`ּ< # )~RT ߲0aH#8 E߇te1'1FT>(WɔR5 (U9sJ`*>%RT@'Dh3@LpLCVs9Ŀe%*S jj$N@{U(qK4a( TpP0,TW$T@ "͔%  $j$L Pƙpkzڐf! ;8o/%Cp2rE#UH#2U S0 meJIߤM V|Ac!ӿ[O|5ܳ 3\v]q\>˭ʼV|$I^,f]~r=c=?_~=DNVzkW]o꭮rkQUrpe5iW^2j[[pHMף-㞥6e͟[Nt-j]Yo#?ܨQnzo5 뫯|]9 WƃsۘΟ;&W;{_cW^+7foHȌkӪ{{F-ܙC眻SN4n3:BB[h|LymOԹ\|J_8S˗))_Y瞋 '8!x`ו6b$^rUA_?p2KzYz'p0nfճE,Ւqiºҵ~e}{ljWW=-q7]m#kZm^#/[kV+0w(rs0zO)cNm뾴-,yeeP\l b@r~.B*@HsESM.fH†$r䔇$Ȓ[% H\D\9Ć$1MHT)Bcҵ/ZBx yp|!35AJ5Iq" UՉϪa0Q`sB?e4{-eGePB62!KLMՁ$JsTC IIPMxDZ"- %f'TcbPD/=Ӌ .bb/xV9 ڲeG1TͰD9Q:'SP\ahDAΒ`FG$jjYHH6Q铨!i'r#cҜG\)dgL*ԏ:eUJ6jRLyx &)C3Dec}w]>uoz7X7`~|xh{~z}4N穛~r>;or?B6. 'h 'p1dc]f[.Nڎٮ3a:K]o,9vlǂ6 3yF#~nN)/s_?2w~tG$w}gc'/׉7ab;n{!{F-ո[\qM@\}?'=soHK:__}w_MBGFDOT%w_>3.sfKgiK̚#ĖLXj櫳}jIa3i p3^MWYyW^yu)HmRYܙdάK-:90Yҽ:_;F MyPgWE^G={T:w~NsQ=~Wr#&.BFm|řo*R_jj4[uPsa2Hn I@cM+%·PjRe:9- !hќ)\m O Dk2p yy'fȈOyފ 8=Ҍ|TW=t R0S7:,AkQh^}Nh^XZsjCٮ\RDwJO"8)\vXM @j`?9-QAh ɦʾgr$S|!eS1CU $e W rB9& ǘSʔ;)+1&j3Цu NQ"唀 1 5?䪜\R&ݦS1񠋛W:A*ڐ.N˔wPEN$xf;(,p@vb5rV%4"WZzYҒZzU? *KoNM~շp)L>M6_^^p6 m]~g7頮NkIZNg*}ӛ?l{MX|oߕ!`u]c~j]dӅhW+A #LǤ Zx[h(Z~w;jS$ k4Y┳EKs "m%31o>DЗbHF<㟵3) ԇ̣ʜi'jJ`! Q.Q)nEQu=z虪rƒxW^@BP"ҐmsT0Qk9%?Z‡Z tA)4<"@SD.$#Lj Z"߻hH'9*1N!5rǀP"2JBrI]'e ,~4w7jj}ЃOA^xO /]?;Odnfx?^n0 bf7w*|75^YpɓC=wMzFuzb<tˌҜO)u^za5n{|߻~F'?7ӷg/ưky۳E֘}'?uVvw[,~v/ղd='<_hiv')@^G'`@r։uP&^uA .SaIBr u +'LD@>qX!%MJh(ŧ$1)WӠКC.ɕ M/*//s\8rZuj1`"/ kH5sC Q^C@D 0 ) Z}ޔI&1À|I}^(Z4|bAk-@D @BQHmaᴧ+_14T1IЀ$YL.2Iʔ+ I*TGEg0ljؐ@T)G3)SbO$A fBEe55 ՘R N#F\P29ȓ.͔br'55d !Q*- +2! ~>&a+IGLtR3XUXUAbHC9"ɕb3 E?i.r~Xx _6>H ꄍz]Moɸ1+{}8~Kl O?~Gw9eh)/ rp;O]jݽOqz@npǁ/Sꇗd[>明e%&Q|p=cQݣ7ï0~_o1a3?H ^ȶ+aTܦr'\{/wM{oCW^~?ٔ.:x҂ a膋n^.o=/\ 3n=KЁxEW%8@\9t !IPU(/0ࠢdZ``$>e$p&S3o \a|ȇ`do8hj @]ifgUNB*<2QkhH]ᐤA^ PEP̕2A¯f$^DUXKDj{<*a(`W5M5^۔(P2fF,PqߩyMoȠs$hXMI:9/+ eր-+\0ekb\0 94)Fv>|Z_g!%- C+wv1h!1T9S#.z8 IjS% IʜpN#Qi*765Ha 51e Ak!LRkKT$ɰ ow35vy!$B]') ŰA kz\)I*5 ?UktIƛWb!:Y" 0^%oI)qK IM\MMEeOB›z\q_˯ܷ̇4I~?ge]v%<餓[3|>Ù3gWm/x"zO6&{t7o>0?9_{orcͬ9S$xϗϛ0~=w_O?O| >r6qA6cWsk}3V8Ꮋ;YzpN=W}/wv٤y_欸vb9No '?pf_O[,pq}پ ']h [nO[#sOq'?핷5ޓ>6_J&䅳voz&|!”)S6TRJ$Uf3AN> 8IrD1Okj($ $%0""ldjRM :81i rL)nM4ͦW@DJ,'k| TQ*h> izp|B)C58GL(\Umez1 (,3bd8vnDeRrNL A4a!jh@2!  H|MU+T[#*_H.W6Аjy\RHR&),G.1o $ 0BuP> Æd(F0s RJR)rlDf@8+@}1%*ZTxd)ʙ!tQ`I0P6ЈtNN#BhKo IXרB(J\Ԑ@iԂq})? 51 Ӑ1>]v?G}im6v>V;^3>{-|gpi}3Gy,iDn7>s37>si3gmoIniuhu*JRϨVK.:e79?ZOݽw҆[7l^]cF&:Gm5ytW|k~V!_:Y_p 6lPd넎lak㗞ym3BAmBzH"8KR&%TM檹Db@6":n.b jb ;Wl4,!Ac(5$lHHL͠ XDcPf]~4I5ˈ[/@QqM֬y:/冯_Ov]Az7 56h_too<p.m[_@GayFomͰ Lͮ^Sb4p|[]^Z$t\LU蓠PcI])܇aZH@! K&vHb%sek/ 0 |O_]/YMR)s|%Om45kv> Us+<~EM:9EA(ŭ yhu6- )ZDaƨ> >f˝gGʖ$<$Ùs]@E'qu_\( šwrDBBETWINX$N)rDEg hH >:Zi3\Ձ*z9`/JQ] MEPsAvP~ p4hL.uep1ĉ Bh(7 By&SױEaH$Ӏ5(QAj2 K* U Sr@]!!6Wf*E‚ӏIDAT|5Z-?qs~ a-V3<^~q2+Ld4n+s{76}v6S<= n6h6)8֍KTfG@6@2 冄RIuUCȕ*Ttqʙ%ԁr7r@{8Y{8S$^;WºYl-q.HEQh Z3 F`K|vNBd9 5F-  + e-0 c91pN}7k b€|Eܼwgb;8rsL!yg9P+9UN@Ԓ% WCBLɾ6%࢛]Hzus.aT D#b@]:,"U; $" SkF (`nI*:JTTtqTAY,$5Cb4%qvsI/fyHāS*ّM$-〆rD xs7d!rSX%0u>)5 #9́ δh>`jҫҼۗf%A¹oޞ6]+И_(6 jںv+իz{ZQ=++\y RP >trPJ &i-S(SΔ3% ' H|hD@oA '; X\M]\3D] MjX8 ~.tPJ\)Dk*7Ԧj ڐ&QC9S29bgV4  ]i3UNaBrL3&q J8 ow ?XXSS(;ḓ/h`M+* yAXCW-94EQ<#/RJٗ7(;BlEPA34!qcH5MBQhIA8)tđ85d {-:/{ZK Q& IDɁ!(%`Q8% 748PlS1eV4T p jeM5i,l ʤ J4Ȕ=NB/J$V}CmMmMD2pMM&>QH#?j" 'jA-P Q[&W›W-DEitq %gICuA pDnIS%*,F C2Kk)H&S; WM|8SrS!@]>P MB7Yk 4 ֊6h6hC(;M՘%5V&BaH&,®̮DE^CSD."U㧤&aPUr4UhaCgX?><,<@BU\B\ ICb0l[Hk/̔znY8oJ$6[JRjEF`Q( ! ))~̵zo pˎ]mz#> "戕v=6n:z|{[{8vsݫi6hw0?3Lz}n=90g%d 3Ϝŀ(DDPr2HL`BOJ7TC33OQuϩ[ֽ*1w Q`H6 2GTH@68.r MdM1 "4ZhDA- 5h( CuP3$qIT@ ڐI[twWBUE55Ȼ(#F;E‚-zRDLPU) ;>?ޱ N%6sd9]wO)a*j|w_PQ!SQ T¶N;ɇ6$aJ$5{8cRQP UN5 wa%8 MR]K.8E1QNl_HJ'H75l~)&WAkIxK ۄ)R "!LElD.䪽,=!9@-hH.dUvJM1-3 2ͅdx&&kZܬp-+("m5?DyBD$S Jv-,ƍ:^q^' VhSvM;^;@_g"UU !jR3Ip`&u!I%tIC ŤÒxÞ*=M2ő:%KT(9&) 2o뽗rӘQ'תx]Q'UVʥV _c ?~t7l42A,^>a_lwyA[vr/>?ynŸ6o1a c^aA IȦd,wAYesjVҠV!1!i#Z& @؁EY&`%^J\mPʅ& rLZ!tn)-q\HxsD>;Znmm6 !(I*%T)wb*a#LBX]jNL EYf)tJցDi1%&;RaiBU=$̘z^]x\MCCZitq:j@m!1ЀE*$!Q) J @LSBʘԁu xvs-U@"r %U֦Ǐ {<6;6o1y^H?9@I$I΄1a c^ij%%.JU+T$lSe+STHA(BFCr$tqSSme*|YglI $0SC!ILL I% r6"fO 0! ({=]L3X JG,!|1;2FRYqsM3 QR`0#&ɴKjdc\)U{ޖ&4Yv:4![@KLMKT ($>_QR6&ͶZD %C0$d#}kZADzH3B25TT@!ĩ@0޸V_c$* x <,qK! SD@ tBY ˥m 1PadJ UNLM5Ox15v?裏^tE>CëGoу_wڵ7iy]iu_ѱfGy^n 6 ?>We?e>qg/u=o=|wc=E/gGL?rq% ;ڪt{&(n?Gnf}KMy}8==~:(܃?+|?cv'ԯ o:Iɳc>z\q'mOK>ߔ?#2OAN5oC~׼z ƻ6yΨZG7^;A=#z>to}:srʼG7X.NK a V~/V..Yyb%^-SnHP*8׮ ]g꽅c}0nܸ=f=eE{|-tq) N=ki|.ncqI?z>}U]S{ݧF?_\u/wn^pn'~p]b{f?tA8yv/=',M]5 zæy~3ӵՁ{O{{ sjĕwLk6=耾Ͽ\=7Ÿzv]u[{o %NCY-22v-yMy .7Q{-L+};f'Ou?z/[~E^cw颡>}{y5nd|-n7-)λyp7{޲r{~. N>ԝ>3/#x'xYOg8({ﳞjGDD&Q?#q" )k;1䅩A@Q \90/<`~!IȖzA&ȶZEa1 IBBnvN@PE_%u\wͅ$Ur@ EBۓzS4- P"bZ-! rB%(&E kԕBg 4%Ո`Z:%le* Մ%RQDP5ab)AsUIl,C IDwzÞBa>АDA> Â$ՠ.qg 5rURtķJf,uwC׀ }i=8^w~{}>KNs}|.3:;U.xN-@,?rn?[f,Yय़}wqwFym,[M>Ci{W,]Mpq8xoa?.͸ޑ/;yз 0!lQ aY@ҖU) (!L@F."̹7=ȕɁ-AƐdc]<Ұ' In$].A@vo(Dvjyi @ Os2A@i¢( A@A1YW#T+(;9"(%OrNTni EL2QSØ:O(lP5M5-ŰxPrpPҠPHk ++%s Z($5n Q*ʩ`#,0$kS$0WCJZb`>)A.&+K; n $`XCp -N0r@DZ3!"u-!'W! tqPH:")t3jLΧV9-}6i bH*ې$$[\1/3c4k\pm=\(˓'O^pWfڂ)_yg|}}ߨL̺m^h|kd˿o滿zߩ_z85ao5:{:j*,<8~;w-H{7} Cu: {0>xk.cw\LK}ђEOQ?^0P3}l6ɷ^k^[XXrxE8}q JRHy3oa:޴iBRaW2L&0IU^iA#r!\DMrU);x0̝Su883. wbA?s}C n_sm^ӢFyj_D4a``믟]/_u7dl C^gu4O_Zew'K:"1a ^x/]N[=LYyܑg?y%<oᩣ/~dk>j~֏JE''ǯ[ȟ (838mNxO o=?slƕӲrH ($H IDPSPS< ]L0-HBƙwENV"CǛΥG~ԙ|d:~ s\AO}/ ͐es_--Mb$ ԪGaQ湊C0ԩ"9-4[NOqu iV#J 9@@LkD@b%.=%Du BH( i CRfTٖɂ4W3$~!18U3$FVɶ}CpB.!9}PTiCSen]l ijhhBjP(EݔW9'.X(ܐ8cҐ^T5%lH _dTU5kDm6KlNH+tp`"e`X! =od)|Oh;Ą /MFʴ/сUbŊրz[nx/6owˏu@*7}s*/TP^xg޼&u_P~ǩ?S{i}f'^}km^*tL@kgq`k=mU VT7*u7rkr .S횼!_b(w5qܸ6=qp|siuR6u/9U{+W}r]wm cÿ;?Ly^?w}阍Ws'|YeJ}?My@ yԈ*;/õϪ/=Gwl\hƁ=?fU8'Nٿk&WbmwdyC \/g_Ϲs` Pj]KسE:XBd ?'~vЌɓ'O{GZ+ׇV%B4|V> %)4H5) !! x)cJ( 7qR( d& ɕ̋(0m1!\7g 82 ޮӁCΫ$X1Y ӂtH4"9-,-XUjiQ(Pt,ŽXԫRLDLAɥLGJj-@8cYS>gL@$KC|/e4֋E-ST^ӎ2T)Z:pLbHsTS~LT)X\/K/[e/ HBQLHH#Ϯem51iĐJr5 k$+I|Ϟ!m*JN*X!B)ՠASCZj Jũ\8bVs5  U0iD!q+4"Rj0,qlHU(D)W;]K$}G$"r D;/uq DP԰;25VI@NU*x$_Ϯؔyx>ϥX}wWxQq[xg@os3qqmp7O\Uv:G>‡okzzm[US8'[.;S{Mgw=r7W]}'n3=;z/}E(:9_n*cu˞<:OE{|K?8<{*D??o&]>~M>НWyNs3o݂, =}F\Y;{Vxw*{͉+/K@yӷ~Ϸ=ňByS|/ |l·^+Y0{wlcCw>Jj37\gu7,qm>KgsU*KKz/l}w8沍}Ӓ7}}yGpM/nV,'=iyc?z7vu/z1U_U8s?ʊ,_霚ԷΌ%UMH#SK=h}l3:M]B}z_ٳgϞWH}\S9oU%=3ft%yaN|%Fc?YqXU*eq}˽gO?ꗷqYoqFU(TP#wI5oTaIrnk%*dN%P|DLŹqJVQh1%i5 fCT\m[B-5+a5m %.,*_n6 ILΩ X)(dT0AܡDp@f QyHb$1A`.DPs_ N9E1ImL!)-w~IBdk,poOoxbԐ!CbhL7Q@%nH86$TƤV5 tmy\ 4reߑIT) #-aс?K.dj-Z;Y\97՞lUƭ]^֒?g^{޾oK_qߤOpa-Z4S-ڄ qƲemN^ :5nԦL.-xg}O\>Lښs7b~8u-^|mX;ˢ ϝ=6 -w߭vy?`ʽ&O_]k7b VHH BM*9ǹ8>o=RM5jip~4g`@)k4$U.SQ"3 4kT(IGd$tS hkВJ.FR&s=~}~p:ȘNo;ԢR"^2#DhWB)6Mr00a!8ɽ;u߼m~YlPJ-1 J\2QVʴc@{(t@RR1)OB͈hq5D  %Vȍk$."$ 2pJ.^*+sad䀥.hď$ TIMaZjڪNiKS  %v45JVIlL6&DŽ 1T#YeĮDE2 jH\ȻΔHpJ%*D)UuQI5HN۽*m D iI$T⢇^VJB8+"HBR")sQ<(>Mm冚L n_.tVwsyUkAl8nm;~~Λ̚뿶?[V)kwc;nEԻo[ٜžwp7_I뗯{Y2e*5W* Qy  \m}a]~wׇ=rku&n1?E cë*YkӁ|_ѬUrh~sK5{O_ms:@~)߸lq}ҙߝvÐ{N5 |SA\ku-yZI^{WՋ3H{Vɟ|lyg_ݯmqi^=_К^վ{ >ʄ\7xWOq)=Yew7]ו꾟7|G[Y{nw`D5]ox] [Op_9hO5 ]%.=529%nJ}!r5V*;P]ͰpKCMzY*4Um+x:gr>S- 3r[Qqf 1u~yV^+H&o /A,]tѢEFc˯t<}u_ -M?Ïw>ޗj:mڴI&-{k|6eo_o=?~ڴisW)8ij)>kTDIxҔS<Αã ^iw/s{_ynE- ?ևVHw :1;"؉aEթ;}u^jk;O?yWvT[pș| waS㧼{GG<u|yxݽ{oxL?wƶG|Evǜ8wL?{']xfWg q3wNA}|z;9ͦͩ-צC={Ąѿ1ύdw͞{VxKTfkI՞Y}]Nc X{Ͻ{/;3ַˤbgߵ׻kѿKsd5{u/ҠD\Z%>ݕ(UP<$񐔘mDT-&$1LMĀ!X\}I[l@c DRaEQ&u |B[tH y%!C @>|Hda>0_yߙ5>`&J%$1T) (!A8ajY! M}Qy@Z+ v_'ϝdꢤ@i>_\ɁwC;%Bs=G(UwsF!Q$UґRhIN5rjʠ@9+ vsa mkX(DԂ%K/.i+$ݜ)CMUSQ.q!A RP]ↆiP"4KUrK؂pTH Ʌ$RS"L+ iH)@2p&J䏢LBM\ȁC[嶄Կu R&tq6-0ÕUx./3qT}wUWsi={~rĥ^s]}Zk4r\pᇯҪnǷt<<_Nd1vԨ/|ܹO?q`YkϾxr)gZQW}+VᇑeKa@XdԩSG97~?[-='lq'M_O9|?} z/;ag/6dteŝ_ yY}Ioo&/n6*#um[4nyc ޝ_zz_uܸ|f%7uZfrҽ?̶_cK魧qz4]ǣ^~ 2~>T>Olv>S^{\P% a 5W/q=kE:jl= %aLmjɕHsRxsNp.TM@b+4,JLmk&=ץS<%*"r>O/"(`HH{WuOr=SQnSK CX'61SYΔz l;tHߴknJ>:#JDjs5Ԕj%19RD NriQ@T8e88N԰DDyT=im 3YL>%aTTHjr5*jJ1+BK@#R_:SmLdVTA%T""P߯VH,&eUҨLT!逄Ò0^c}/ZP rB)34WjP" %ɕIjVALvq ]!B)YPI$>`4(a1ـ4&)%AL[$:FrB%!L0F>^Il~jNUp뭷oTZZa /ݷzg_nĝw^5y3`pܕ5F#睱ßmzWWz;G7 OqƸ,O>Ud=o>vz]}zξzz7s̰2}ˠ>&014n;exqCA% 0 \"yJ39h"&%h[MC2U^.\R rTA3T9!!ߠ "pjVYJ%ni@ZtRs]j!dNy)h6j츞L$_'KH388F! )IPn c0'3뉷L{/9?y}힘*Pu bu!BrzΈyYt(P ;R"<$BMSarDED%`ƙZ(2\ɂR(7{gfBLNN45̕ 4&ehDRfW"Tƺm BҘӄU_̷N0TӮD5F7噚D2rm1CJLpP5ɕ)ʆ5$JU[z52%뽫-'meKH]ʄT5Uej*<.PQ\_լ˿butm5â(,Zh՚  yWn馛ƍ eo3NOr]wV # *K.}b*|Zʼn'vi|Flٲ ]M?֚+jkcVҥK=3>} Vnl,3TO7fT ^6S; ccsy[k/Ҵ5ˈ<2h۟ }01d11 q) J%dkl-b] *Kb=.jlbR ! MaTs.#&guw1t+0S򛑦i7)I P452״J$NaAU4((YRum}ZMi=%l j2T4#RNݷd'LrIJDjK.QT&FrP0(q+q#؊\H>40d4$KD\) I|ԇ&ȐZID)$kPLaI KbX@sXbHsc3Otnv!h D&p&2Xnjd q8DbmL!iiؔP &(r&!۔(SMe̤ M5(+\T5 $TT92݀!I9<1f@-b!rM5(s^Q*A7gm4,֨ UÅb"zs Ij֯\33|% 1 Wy_(=37^J&o>g=ncc㹙⤓pxӛV>7o<;㳶OcUSN9}@[MLbR\TY} Kh}ULb@=r}835L=Tr[VTGz0 `|]J tq@KMKØd'p3 Ȑ$ g>E=$Lʒ =*Mzkk֨Bw3ܒ >YG\MԐ{z80!ID3$|VHHϷ#zɥoqF$JCtI9LWfgˡ1iLPd#V(gj 5UlOiA$UNH9reO2us^ei 4hipVcwOƿLyPPYuHLSaIjU9KHRL"l,@BZfφl;'>05DIܖYm5M s (K|7!;ɸ:$Jem 3 JTLN{os%wTJ iDę!)U9B!O6$hZiK|l9Jb6fxI.v}QƍmΝ;wF;!Ffdos~{ ;1j8Ui!3gΜ9sg01a PBîD:5LZ"[Ŵ[j$(8q4$גЁbv3pXJK]2,a]\ʛ3iPpiXL9>E[5 Y7 cI C. r*gUr k4$aI]yHJ>N߅\U@Sp7g8&pI=+Z/ϴj,Z%"pc2@)K*HJ$W2CkTx8ru]] gB8`+%U}}&`(&$B7MȖ.l!IB.Ր! Ar.\*!$TI&ak|YPvTo* VMlH{9chy|5$ ڒ!/^B!S@]^*sQr52U4%*d{YKDT@s KynQ_hkKˬiB믿{|J%y~zzz{Y~~ln1Cw<ԇ110eʔ1a c\TTHϫ:= 5r ! YQ*C$@)fY*&dS' P@OlA*!..(u!4"-ɔ#HDNrJKB 0T%Uκ8 #5 NiH ⷕŶT 6!-xv ztYB.&tz0-^.,rC""-~S"I5$0$86DR"YTVL4MBV{ؕIq5FHdLHȶ%4Vs J%.D-`(j"FĤ5UΫd F@rRc 5{LDIC^n؎3*e!Đ5͔r%rV@ WҰ.I}F+E5䕫+Dnirg-a)a]M)堶4~W^!Fm19ؓX5TSUT! g !`PLq/*9ڤki\ g3c4[o?n&]vYǯ}kWnpyH\vmY5iq)}gN&osgw;N~Hᘚt zV5+Ԥ/E?yɒ%oKd]w] ӋWwg9<7&#ό111 0sl3g~v c?Ekg|+e**ZKf0!3 j 5PJC5jeyw2I;dž4jIX?_{8s!)phSMY 4W>Ѯ~WJlKdFPf)gj|?X aָL3,e]n0V\-aB6&7[50T!+SH*$mR"g}ʩ \yHJm JT3\&VkDJhHU}) 5=`0YDB箞+P(!B} O>pćfEGm4_x1xԊ1a B11 ZpyjnO0=>aPT>햫QQfr$"Vmk+ps|^5dAI 25S8T屢#HP)R5 hjCb1\KCz25-4q6d\1J!I*&U % >D(WjHdA *5*J|ISDUjiȉRAH$m  ; I gNY_qܭi.qLڒ0"6Xe$߼W2HK\(G$]60SDT$ ǧ؂VP&gC5%*)O2kK XrTCj - Cq&˕]ɇ@:$Ʃ?\&  D MR .ZjZ%&. I Ra #rZ@..ts%m$!m jB4 hSSY%2:(,a&T:4$kI7ژ?ѕW,xpM//ч}/SfM+=7o=RC\m3Z裏26l3cp c3ë =0Sni J͙ϝr"\! iSW\ɇKPMj@Bre^GZА3K)XLC#iOKՔȶ5~ɵ,Գt- к u- Fp4jƹj"reUVĩʀ7>I4%.qQ&_"5Ġ'-55! ö<( sr xm$WZ%.*d$y@:$ -rȀb@+Dҡ! $>R@/@T3'0U* 頋d8 y;VK[dj3@rPQ HnSJ!iȁ"8/W.@%U44jonv4,]Om e2Q[BC@k{HPEkG:EB@A17 uL+r3 \Yh&A7g lSϱW|;5@E:o{sO{[a / Fc뭷01)Ql%.nZ梗S65H5 xXa$մ5 >S>Ӡ%QH:ٴ8-PaT|)VI@%nI)145V`im5F TXzIz9eIȔ9A*,yTK¦ByL- I p(T rݜpr!MXpL;!}J ٵ3횶EKTV7BhLw" }!L0^Ϋ,5crm5m1~V!ȖȖȆ!im^[+Tx󘘴Z(λȅ$\\(usV@8,&1BE@r?JDudA+eʾ:@ J\%a[\Q*u  &q.'x !h@LQ!GCmrH@cC>bmպvz [fp!.D ;OkҀV9HG㥹QUxu3hP6~;7Ʉh&c ?)"01aĐvs^"`ęr ]܉7$%*Ytr crer5F*{! Ŷ2k@IU$IP]d}AHRDEKa iR5R@Z"H,xHw H3L3Yi*`LSbCchB6$}a\Vـ519&0̹rpӘ x-Ȃi&# aYDҐ0Sc C ƕ9/qS#Oj!E4P"Y*YK 5 JP׈IWjY#viJXEf1*q@}sf[br\Ԕjn@1ـPXH ŤRC~W8$ePCdHN#)'Tt:-;BA!\BbE$}&dϮW'UVaq??wڣ7^8F3@UG|e˖ߥK|2t cë Tzwĝn?q[?<璷zo uϜSzWhgvfO/֨^híkG j&~7}`AYYP0oy so𜿾c'>;mZqwow+ ar5j(3*Z4$ {uD˙pT2TfA@K SS%x PӔ(ScoJЋT!A1mj `4\⒦J"3K)2P]y&AIHR&A@ByCI @4hJ\yHbʔW8#Ɓ զ(z8 )("Hhse'|=64"kZ "trrxNk<5;UDP*> B> 8gJC©B+ i͕T̻I *2SӘ Tg Ұ 5meK *[M%Xʩ#𥼖L Fԗ7ri7S7SDDEgALl w>y L.!)S1iS I&Ёbr5*</r51]avňp:&Z"Mymt/m^U?!.Z .\Go?}#X#IëIKIG088x֥77g_ؽ]u].lW_\}q .\8zKB7w5~S[>'ް6)\{-oގEaꦯZ`}, S{z- &N3=ĻN GlFM37_3oǷu{nǀQp}{(o6qWwT( @(O`y-45!0АELMCLn Z5C My&zB&I\iKҐ- idJm\)UqiK!b 43^/i[iHl ! * iiwsVL-aS!*IcZ!q( p.jO0"*$9y*6$[⢛m ;UD"HB)e֘ VNa ]فҐ[%AY4&9P]DeȍfJ 5'\DBIRJjIbڪ 4%~I]\[ar5VI < Vw %*pm2KK Ԑ %҈TAL἗)2,;sD`Q.>%v1\BCv!>1!JZP[@PRGpR[R"W̅VJ IP[7\.tMxQ j-p~o)ÇG7CgLyצOIi꬙?>f>8ҷot4_Ù{N䡛u6m}{Fs<3g.v@}v:G?}izM}һvzm]6:-p'A69~co7:~ O}j+]_ݥ]hُ.|'wXw.#dŏ;nНak^>vϣ(@Mbj`V9 Abqj #NSE/g19&THzY+yBˤҔ8!kH P]" )XNʕ2€$ %B,w-x\D6 ]v$'ZPnn{>ԉ08 !\)fg|\ )ߓک K2J$dC+3u֭ve&Wc+`ær$0Sm+ u p^eJ&>г•"rUjgʃN (ki=5Jj`CH 4SӐ!QS\AI%j*r%QvRDN(Xզl-REu*R)j8"g r)WʔV/4d#5_8hkąޢ6bT(55ա%d!D&vq>#KiHȕJ JB9$ ?R%QyB:7+ }Zz,zkvǑjs 03='/<{R&y/ '},oxbig=IbL:zpmqτeZ8q Nܝ[v?i}}߉(wm~1-7dn蘟?l2உ_9pBkha7s=4p#_{>0N퐿ȞkO׷{eE/?{\ENS'k?wW6Y'xՏBPqP񋧗_o_1s7u- >>l*)hߣ၅HZXr$ IiPLH A#*NlPxν*{ (%4 ,tݩ1N I8Nm Ȑfj%Zm lD㺹(%H1S!5 /UHSeTBޑa[9$T!aS 9؂Zb,g{em $ՔI0S$z8SrgiH̘75! a5ZCR* $ ebr5%y5$5gSv _*w7,/ Z%DU6 IP-UԐ!-7Y l<CҀ:<$Bw0jH$`W9$oLJZ\ w$2BT?`HP}G$Q$DUx./ëY?~M߸kozVg TM=(ywC_8aۏxmV̜C?{caZW^vG.;^w6611(nۼϾy]nܣ~~oa&}mHo߷vu&O0m<6jAZ Rml Hsy3B!u!8ܻ6?%_/qi=ծ[+6wfo6~}>~to}=7Xwݍ{ay')FOֳsozMp/P@_!e>zҮ}W01m't뇶VO<=yvwA.w g׶(w2@QWt8߰JѾd6\ {W+9%hNE e.|]LL.$Hd IBrJdʹr]"Cٮ D95X{MVHReM!LږPz8u x(|G%+743!yK*4 Hr5NPԕr Ǐwu!$$)@M6YHE]Ey婚RjH#r G[yqN5XjuI2Ж^ETTb$ IBΐpiiM0i)4$4Һ$l%afP .6;{L+: 5-&0"G8PH@|ClKM]MC/ iLLE!L%+WE˜4&@CRf$rp ِ* D. br4pTe3 &Y.A UkUp4.Kݏ:ץw=vSg^E]^~Ϧ5nQ˾JE9ۃo=ŋ;_:[ejfx_yjɓFO V<޶ă'n=R}lk{k{<2z:͞ǝ;Gs߾iқ>㼣O8gɪ<񋣏8˟Zvwaz?y#?<$`Y߾^Wf|eKw\4c/z1_ =mw!4v7[tPWߴi=m<_ftQ\Lhdp`8oME0&Iej1}&ljLFd`PD@STM&"IFB]܎Y%oc@T$\$ji"rU*.8 ]&! l LT2Ԑnv}Փ*R+^\x^tKso=h9ڨ'MlfmCw>%h{xf56[C_t_iAa5I"戹Z.9WMV.klĽ0b7zb~~1'3 _yUsϸ~Y'.U3 't;6LsFaɻz?7ul53a [v}ԣ1S֣$0hb-Ū.ښہUhOmy'~o<7qǁ?؛[]Iִ+~MͣJ9вZhjUZvo-*mܴn]}`uн(tZiRWVQ_xo<k巍y iFݾ/0kMjOݿ]/XTA IIw]U1*v[nM# !!!B@XP ("1 |(]@z("ыB@ʜc|sCr\B("s^kw1޷04Vr _O+l"tq-g4-_ܷVn[/]<wXsi?s N;,|cV՛>o1ա'O_چ@|w Nw#FC^ַz]6wEw~#<#y_ yf pW_~#|;lC?_pK{bl;t}^䊫>:W,X<|}9m9BۦS~ p?z g|ᩧ{|]uo\ ~뎟y_|·v_>קKo}cO:4/ #G۾;{׬c][r|'~u-B._q{~M?&~Slsq<7c6]zWpY}I{Cͳ?r=NS;ҏXzݵW==W:7~mz{.|뾵s?9#._Nπ _oOκgr~e=W=ݗ_y_?|ɯ&wɾ/8Xtg\1{|oX[N<~枯}<[9 O%hLi2+Ѹ֥i&Wrj \!qUNl3;X!}TL̷D%-0 ʤ6L$挭qU69@KY@/'m42@꜖!94 ʡiƌ`4 &:v:h+ )X;vGZJ3'Eh\Լ9``tNLj/2hqيfc`a=$E#mF4>(@Fɂ+?RjΩ3[\UJcbP3F:1nuU5WeLr&тZP7iW9f,kAdڼ_-*ZB+2 0C钍IzxV7]+0Q;v.N"Ѻ˦Ƕ'U 40̉$W4_e0*,ʄ$ :Xe5!ia!gO{?]xEo\]W^yW~-i^axG/~#KG @~-p]޾b_| @w>61ٱ]d}o~IIEƧܷ6_l^.~4=A:~~oG?z;i׮]ޯָ񢿾} Nu嗿{kΦw|;wÕs/z#筿wi'_7ү槟}=x^7;cLv]o}~wQ?9;oN@˗^q~ݞI^O}{wuq_ߌ['=IַQUSOXWW?+;+/#{wܴz; ^x?{w\;}g?:cǿW^p>x79xdYsxN6~{\G/|ukn7§>zD3O+_ho|i3O? w~zYӏg߱Q3'.yy>;v[_??O>Vg;}wux`{ ?~|X?!O|x?Źq?Q 'p[7QΦG}ǿwp#Ž7z7\ ;ϯ}A$+/|??J#)s7OǖRG: 3KJc6,3CGa J `Y f`M%-NO&: I)XRcePPۂveqթk1&YP02`1:|gL,}\NmM O5GD+K,~MIS 'WRf*ZRDv6IݣVƤؘ[r  q_L,? 3|AbfH29-VO-j9,'dž%ǚorh[V0H Ga97=qPsSj`6T?˰ŵ_srڼf$qlңfdkfdRDmbU 9Bؕv+JhSѢQc/c*e*6  Jrԫkvݙ?~PN].7G߫ߛ+HԭWnO3Γ7oԭ/7OxoO:$ {b9z-i~5`lػ" &ls+sUElS5C{luh_Ҽ6RLKʜpTk6XQeH!1!f+HMv5#s:;놮3hxc_F~^{=[ @zfzϛWc|Ǘ W]{I}5fo޷>5C3<- ~q7koXW=槵fJ>^򶷽jӷu2+fgkW?pnş>s\<` n65ß*[j?LCxT\`jnY#H&"Y+Mnv ]3Q95'"#aC-:^oge\ ![/zq5\E`b25@[eGZX֚@jiؚ(Qsc<@mvm&Ha^O׺d``tքqvGSŦf FC3eSqֿ~ [V3/|CGC/xxQ{.@?ᩳ?n/sua5Jd;. 5x|u{7'䤻?\`xYH^f^)rtq/lo3;#sv'@DIlūzvYɮDGH3#M*0cc>^FCAHgJ4FpjYָ_0m` UGځdfL)O ьCsK (0Z:X)@E* ܵy@m|e>0ߚL4ԂՐskƑH(aE%&=iRF@Rز95:Xl \&Ȉ>J`Fꜱ2Vdj0085+L&:'GKXIJi&&FKp&@cU)Z#SԲcu:#ӂaW7J. CHC=i=U7>_f}תښ& u<߽긗\ձ;4Is5 jK͍*n3j GЗFh d)WRFX skD>ՁcdL*sUW5OW:ZP 2Q [9#9V,_n 3y0#[2z!/z/܎3foޢ?4Sfxg˛_??uo~wNz/,aZ^"/z:kpY:%?=OySfv>);L>r?plgP=1Ss+꒿heY0:"rf%lwԎ؀VJi1]ƞDI !Ђ1#[5 HY|7,x !LҖ &7Ieï.i_1B̓INM,9tjʘIqyjAm̥ʼ6?6g@qHamsyA =:X*IHfAFH0w@Z4j'ʌhAV@[Hq!Еh}43ح5 '&PCmxe|zؙݡ&9CkEc0- `/dwj.$v ZYVYgsIHQ]NM:%k_ ]\`ۂ0fF1-H}1waj~~jy4 j_& )/MaȲX24[@'MeX=;ZDrЛ{ݰt]7H=/?\lg8-6{N:#;j=9~̛z`@֎=@XDa//{۾A?}yl޼y˖-wٯ>>>7.Pz 6`h&1M +ZYzt%FCk&kaJJN]`˚1'0/9i2#j8!Y ]kB7ũ0+$椙a\p,ɂZcͳT`=YKH|,#9HLmO܊9;ҜevF,g̨RP愭qvWb9<5v1nMbu aj1<"%ub)fצTƐ~dCfi jj,ddUhlYܒf{bݫ'??'^>M$4 RG1I1&ژ,3`j~U֜cH&[K}iEUWo_{fT)<&uK.wXJ(?鰍%?Tjym̥Ny9q6fU؀Z5k -ScO17j_ D4sQ0@M"X2nͩ[Jvٚ!֚˨R  ~mz!tG> &:7Ɯ]|_>SH{n?17ߴ?4&Z$hYe]-FbY0 -RK\ 6 &Z2xXLMɢ-fR`QyM8aH=LM6fhVM%mS! 5'0ɉa#2 lg)Ѱ'/m2L)FB@PEX~yFIOp:1IX3>djn #eaF6Uhs =qb洉rh9a dٌXV7@V4&6Y<^uva:*C'˧l[}h6*[M&e 6/uS0m8Xc JS0FQ%O;eh y!Bx u avͣoMmhڪʲB6!}FK IA%Pll~1QGZ"\k0C Ҙ6ffMlY O#*0̌CGbm"jw)t9/ސfu5{gW&ݹ}opLGqq4˱e""}d&6 ]Ӷ-O NBwfDZYf!Z4:_[g MfT3paFZ)+ j M.cF,G=3ıʲ=i61vئÒ JK)]i[zղw:Мă)/G z>io\dW^.~ц2gopiii?{Yi 6sc]l( ߾rP}c^O0̉XV.2m&*IJ4 I\V,ͭAҩa?I4wݲjb:* ,0j>#͌TiNZWF6QN}AcO  Ĝ:5]iĢ 5wrV?I7+g[U\U@[171&[$ {j[l1JRɮeǚ:`\e~Vhhc/lGP0ZmG=K%04+ vYn<#UaZh ٫//+/ppwLG]P~ atObqkl( 6`yBKKK]v=y;/u{{ܺ-7?N;-w ^|ܹsφ2wRs9wN͗ kMf$̈TbVb9\Gf}bYj9J- TUijt4ƚH+Bbk2QlfBKݍɒve:+m0.i=Ϩ@DJC'vҤYJm c)gL x@,xql13POLMgQh55%-"htڝQ&GUV3+yiZ~-,cl 9-H) \0H3`+P8ƜښIlUS1c0%j>?ᄁөdy,xo-,{ iiT3}i jdN4KDqA4Ê&?O/dY@ĚE<`!@ 1Z]Cdz?o<ԯ%95KZ\d^.uY= DP2j0Iif(B&imnuH̭h'0e2dC#nwؕFeGu _Bll@z[c!wk_vO׾,n~s?lguϿ/^\\\7-=Y6jhf& ku-ْ6QW%73th֗2]m-oM: l: Zo,΅a ,=6R紌֑`Se,B2h56ʌ%#hM[Ӝb Ne4ր%' ,Vl0|Ykpsej Iц4L =S=5}`2lEh~~4ژ͵ he Rouв&# y+;RO=?aϋ'[EǾ#Ӽy?k e}ϨrF[:L -Ihv^m%SьV-՘*N6H3NՆ` 176` hXlY C-[`<5߂]ƞ, 1c@ci jGb85?5d-+s_k Ig3X>5J keﻖ~#SSWp_[5FckB`F;@mm 9U @YQmCY)1Ziu4eQH7fiqY26*s9 RH]P=a`eހT&{Y`Lc9C| `Z`- ܡF$=i2)hj[VPѼIkSsj@0gQ!MF)nT7Sr׎ί{ ڱ~`~~_u 6`  ɧ=iG}^d ~Դ&8+ ,g%vltjfd@ p 3PXha`4g`P0v%j*=i)(4G{l `hgj )?p^.[۫L,06gIm_B'Ti@DA dje2MJ 2I1hil RhOSÀ̀mP[2ɧ/=ecQuSC=-d،G`6Looy=L-Fj\y|u# jJؾMj4bEQ{*$sڵ*_gk=t\Q?5ebMiR9R$JI S֓K 4p]qY;vP,+ bOBFЂeC-vr<6FXX%̬|A>$֚9.~ [l'=[\a,IcE S -s/z[-ۦy:˂ئS3, d?)gTM`_BXOs6'jYk!椝acH n:1LT&CŪT}a:Ȳ gQ{lgsuURoVx;Xj?& o{ڵ .+;V'_=wi/WO׿_췾,6{]+b7` 6g9t^42uH[l7{Sw9眣2Qj hCsZ({l{ 4Oi*Ieu$̺dhvpYJes8T?,9aT*81s)L+'6_/i( -oFI-cJۡ:X%HGq@ꂡϘ `R,^ؘ'W2I3H4 gNŽe )O&CKڕd\EjOKsz:F5:h`@Bu5xXD:]x~ȷ\nCN.Co7^ N-FHHُ=W4HIdP4VTfByl&ՖZ[2zl=mj2`AԌj)Asv&9yͷ?i3h!ZlZdj!ص>ET~lRmlHu%-SP2Ԑ@0݂qNDk_ NT@9U;?1UFQ+20c~h,R1P[etDҖIR.H!c؀bln9S}V/LM 6@Z5Fج1ӡ=]qna`#ChɡIѳCl>dg&ۻGϬ8S֯uӜxw]N<#8b`vv[l?s;w]۶m袋^Wi4?0Rڶc˖-7uo}js+ʩdj2qƒZIg-XԢ5FȊZu m+%m R%''sdLƖ&qLg KF[bjͥ,8FpE]T 2=}i1Gs%['`ۭ6ɨ5̊˩Rc4&gԒ jjT\rj!}$2ӤrR^tzk21_2|`Izuf y<2L[۫ェ~hg!.jg)C[sB+ ڎ %ìTs2kj*s Q; it2. ښQklVշ.IXe~l~b U=6bT֤5W9XA`0HJyWmuH[V Lc~%0Imm2A2&V'SO8Ls\Q?Լ6@ 5S @Z Vj83λ* @sZI`jNk*%WVv>R=0YR̰1U{8;30ix,(}[\3`0cǖUIsݱ3Լi} 9j~-SKMXCzz֥5H>y5a{XռGȉ1bmԫ\e]qGke7zAn|nAMz]HO^&&&s9x@jOKC}YDpbYɐ*{Lsfes2MGi#*85cr&-@enyr>K Coqw~mcl 3xGzLO>oJJMz\Q6Vn"V70sN#kZfEaMO\ꢋ`0& 15I"tO2 \6VAlF3é99ud?P.EL8V?~s? 8\0+=1YbT%mZ(.HUj㢖H95%[$O'.d,ѰE8+!g%Ym1!GՒakM*@ KDJF=혝Wn-;|;>e7]3nف'"ػե8(vͮwQeod/7f w:fMpuo[, 7la߾}"rGgK/4Ƹyw\2N:Qzԟ>O?>IO:p6ᏄO4 De9bWfS8ͮ 2H 'ɬ"˂I v1B#4k 2l M#͠)'m1Y4ѧe-ؕdiޗf TXcݱ[0)hX]RD́ԄC,H&-s(h'M4!-iȞ14!cїfPuE6)0k!a Ɔ V-lYעcPV0l6(=uj~6ߖ5Q[p_,O|'Z=ȑemVw"Wv> Bzl3aIc#meR/fCW|7ϩ}F5gIJ&irrQSـ L-K@svEhL .ioV65U-\!Sek އ|jN;9 j^3;W40JK)ɱa~1GKkBյ',K9|tW8Zb, []QGX"MIe-&&-h]k;+s%cZ']h^Xaٍ3FKr L,K+]9-5X)ȱJL]ILR*=iKXJ.Hr= 2֖L9,[TZFPJ3#66'vuB?n*7>?#OZ2#_ O_o®e6XׯoX׏> =Yx3v~ 6৖7Bխ.?x3u{5ɲxĿ뿮?HJ/sxXFU8҆Z.x&3 Y4 g7c+R[fDXTGڢvWS@ j &9$5mqUYeZ rmiJަ;c͓:'ZHknj>r+ ڣf$hɪK7vp4H `kO_=ѥ\e'MƘv@Nps djRTH uDY{CTLimuhu}iRm*|-IC`dԌ:Xe>EPpDe;s' a˚M d4lO쪌Z`not):TkMf@cLbo,Z P0^P7{'#Ty6OvΜ"Ĥ6 %7z]uVMkU4/ny#tݱĤsɊ $ ,hF0̊v^)0}Vl: x;*[0+n-c3`Ӛj66 FEHm.c2 ]lclj.uOm9cWepaf1V&H}k3\bvlwCqEYcDJ'Tv؛wO놽&G: p M45π{c;%bdi+cmiJ4ުiCPR\4I-dlha@Nu`5SҦiҚ5 إ:[: aXpBf98GƇ1ݕy 9*ō0zf7j„\IZKZјz}$v4MҫQ{Rɴ566'U̷p `njBj9tb$2bbyc6!-hyȡ_1G˜yo^G&EVtVjphY401ղxءޚF! CvO:Ӻ$P0̹z HT` M8`SOR6UXȤ60 VZOMR^\/PGT'p`1/fbAfI6&M E Z+ Ɯ5 &9fRHF-dT#X d>ڊt`j^RMqˎf~ޤ7|zPݿqOC_[m^.l.;7l۶m~977w; ox`0}~z&8Ȁ9ǚ5&#͗4SfSk @_qY{ -[́b u㚷aX2dOb206ihucV{C-MU-/kBwU} VĜFZ  RfAma*%u^OIhcu-ء Q -[cJ6LMj` b=Ƃq c4f=ь1yo$55)J75mvaVBORBiMnyk>8X2)3y7:EV׈jkV4kS6_3 =AeƤ1`@hR d7֬dIB}$#{F֕UУ ĂL& _Uz/̸jNiJ owanYl#RƂQLkiU|xSӣ֓aRqECs;9|۲ ]cvoWޡ<.㬴= .tzpPOu86_J+dhS=45#.4bGAO `mwv EդllnX5DCNz5TZc 7CH2a];\LUjcVzҶpc6e]ѯj85Tzj16@4G`&ߜ ZX2̹z^t覸eG H7IIGgjmOa?{'bg}uV͊FDl%-"Ƹ~Oi~/]~w}?RzzX4Iݕ $`,kJi3h4>یj@Ƹɍ;ҦIyiZ\g&l ј7Md j9mXfqtMUsZ!WU*c0ȓf[W|⻋7w?Ͼɯyޒ3ik16p`@\jU|eN pɰ qAMM+l (i&7&HFILyBK5Q=iƩ+LL 0m`_W$01` LFM塿7vWHhL|e1[{ИFZ,k9R gmnU3 k [DRsVl6TN ~`0+xN߸sqߓS` 6fE4Ms{ibo&!~ '<5yͩ:N?bpNp9lM)>6wun:#uKS0V jlJ-͘% "4& 3`EPeit0dИTP'! %CT nMJƒ:xyX-D72RyH_PKrt`s#0DHS\E`lnycJ#þUX\-,2NMV1IZrry7K=MFuDNߘ=Oi֢ۖoo Gך-)R`r"ɘ#9675&0101ט >=3` aL=s4[&r\]i -Yk@ )ހѰdP=CP!"{82Vdlu ~j5_BUFlK )Ա/?;{5_;(ښʚϐrd.DPAOͨ'qk<,M9식U%Ӻ&1M#5ϡsdObJ4&4k}}iCVD 1NN*Mv7R@Yirڵr4;SlI孹6} :7Hbj6ZpQ]weGuҍn 6` ~mw3t:o}[b˗|WN?~ݤ7C>zիva|NJXm>7 XҮzlɲdԤUZmؘ; iSؘKlY`&>& #eObO{0`;'MG e@P,jwF,R[61G2fFdR0L̷ơT$u)ƽk15_eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'VE/l}c\^/onéf"ǡl6ڵS>sϒ91ն#'nm}Toz9bGXp{9ZY8nw(*kn6f.|w96J^EjO.mxٙY9z73BQuS=Wtk}ٲαOi0s6mhhdj8/fj(v}@w 5ŒBZ#vg$:?ff»<|HW /-^pQo_俸lƯdecfgٹ1|WtZz'GFeW%%G>ܣYF%%Ǘ;IsINA֓K?/gBAaLCl)V兩׾vYv'{mOtM#ZP3éT6gVغ!$.u@;+߭ "#!~VW6VC#B{~x6n{PU&w@? /G;f|ȑ%wwnkmoږ蒗}{vCNj@Ƥ# dgotˣsDzh鈞b7:('.N}J%̝A0?x>}?aEWM`sCloEm`oOeC1=_x(YNA<0 pǎS7QG({(-7Y]\2w^K ݁wkzavp~m"+>mGń_ez8l&XvYB“i$ʹi={z/!=$HIJN.7֚h<&r_prbɖy Ȫs7NLIshAO=u~XܜW=8}Σ+5@HROo|w?3A+ywc =Ǎux!ر9w- (VȽݎsRWdHRpt?OyS@ſNY;#\!OnEDnLLWpS11a3sE!DL${խms1JNbnu#ձz9dƿʤmGܸwmىZ~pm|;M^D=. D;ox+Io0l8n47 $Ŭ&3 r/oH{YG)-79l\u$gQ-Vx޷ {\WRi5(.+Ín\T8qMziϞ.8y2t\}>U>${׆8jc qkĞV,l? 0ଞ }!QhĴbI7vR'MR_'8v7p:Cfvg "1UȪ[y"B cO\:ވTs0#υ*!( 7L?•\Qޅ?ZxGfْAK%!Du7Ą~ybIm#>^wG|igμ7ee0=vE\2KѥƄܙm cLG.kǠ0:3)SzާΚ@34/FI;dlu/Y9޼#/KAt\-|註\~52+b9މ(l-0rOjcčFϛ@K笚SUXlYVTZsuc~Lr[n [\R[tҕMpUeJ+/L@S,+*^%Zicl+*ie dOزbÑC]BVO?(Dzk'Wˍ1,TH©YȢYole&*o1Iue5202B741=H؄ɩ mW9/.Iu>Skh4@_b2Q|dT)MZW}ݑseʳҳ+1G!LEaI[$BaƲaʿ`RS]u[៞-o>*fYYɾaQQ^#Q+I^U@π%Q^!uuV6GW-q/us^M1kK5573XyJY85-0)yuħcdfΞ/jB67]j|mbHI7!DTFJhA+_|q{wUG LKJW"u\q~v7-сMPygJdQ+R.]yu4gI8H:$mlH517{M49r%>0:-$)Oϸz?k>nW0mO_F d׳DQ~pe11g.Sp#Sb^QPB115|⭐/2s+y-vE\~non]Wr?H#-OMJĄXį-N^ԇF2·ۣI$WfܽW.AfKr JiA"?#+@30+WC_wLD6fyv~ѰI~B^پ?o٠{cX!?%|(O\` 3C*bfOyOz&B!xg% R3z\@?F I~?0oթge†ҧ'VYo,;oI\>p7Aat{?Dˬ'DyxAA%ZEߌ/ab^T5e)7/_r MHI֯8#="qM;(牄ٷ{÷彺ď~Fl8$(m};B"EʤS]욝)ǻ?eB!w 8OHP_~_=LeoŮx?g 6IrbӮ{e$&f֓3`jHePחZ{s뇦XѼyc9$B1Ọ\W Xwr׽/Z۸xj=0 ?[:=ƩwطJ$|?{r_=z=F${h(]'|? Ec#Cq0Bh/G)b{$Sz9'/5'[s"ۢCSd|w7%|!ı|sQ0kӔ\70p1s|(!s|\n50j{TMOԽ{)^..k;GN]|g'޳ʼ@~VV=$+2ҿi@0w%Iy̶^=&:iZ?C` 33 0! h3f̬l, ̠#233)@!IS Ӷ73Ӭ">0wN?z9sȏLT1B~M%^taz]L!̨s5ceӱGlC", >oOqn%Q v&\\ǧS )=؞=+?]xE;ߘA[8YYjL?Ÿ^֎#$?'JoK:gL@פOgj|"%"'~K׍ֶnc/Z;#?6䫩cw[G0#s$ˑq$N<'rcjf~;]r#iߛWZcӓQzPB˜}wξ%6.|HY ӽk[o͌4Fzz=?sjblElUjǹyOvƘ?n󿙙}W7T'e! 31LJo1!Qs'ӝh0ԥnn7!u"/iO i5- |>0ր!=kRRsuqCh{/jpR|4[S-0m-~Y=XTyPPFzr]ŲTAE+' ,Y}0m)MsiD uMbLr_^=0eSjcL]īM :D0#"8b:QɎ3em/"&tjc_Mxtҽk]l =./0.TsL-e# Y}Eի fe#Xٶc~ d2Mݓ :r>l]=]ŗqVj3MƄyG`2ަSCCգdtLw3!mvE\)X_qIaѫmbHTW $Օ Z^:K*)ۭhb鮛*Bdݓ#TwVBX(b$|@(&8jPX|uϱ3B(UwvsDH{px(:@b=Qx`I:c黁fֽ9"k>L-3\rG;'ܴӫ{:ڹR5yת@343V|s Լj ߏ}nهĉvZP_G.60,}:!&O'bkHsSk ~ig5SޗVRqͰ0+EFF/m}gf 0! ̠#l"Tns3'tX%% :(++nsna6 0! h3fn?]ǁq@s@S!h3 W7=WkV0̝Ao)%I޾1.O7ɫIyx#fqOp7= H<$=k1r4 JȊۛ'01ptCU3j8ўAV2F~]zqɕl}&V^Gd!/q>]:m3! sqK_v4g׃j!^NIBqM8,NVF.|U |||v!Ț'gpr0d>8ۆ߽d~˗𳢾 p`\jL:NvN^OJw!'j8v(?m q4;g,絤8ʱktg͆^5ĉiV@5Vqk/wN7[aќڇۖ5Ykv*8l&XvYB“AKK<:mп.-]:{:'m}{0eq⬤t@ǡ89UV""@ Yyqn=84݈S |.#}G t[kF橣_YJ&c,yτF16Sz_G ?M~fqcE%teэBFTe'H{/Yg4#p +2;;1Ug9_⨍1lǭ]{Z4#_}j<`+ ?e_eLUiq60tZ0.5MI)y PaVZGV=ܻd^^=|FVr>2q 'Y2!~1:.nF28[\R[t ~/$\=a Gqw Yy, $n(MN'*}3/f:T E7 4 .IA&|67x4DGnԨyyNtީ8">/HiqfoOqnfW1kF\=M8|l/'k+{џLq۹8sCt|hep?W;kk'Ug_)XGF\`W{{Q+f 5ˆLOI??GM;1Yvt_58P3m5'|S3;rNrnߣ,سL,<slGܸwmىQG"ZT뱛?}Quw+JZҵ^G^uv;-ɾ\t@Ÿr$$<נ)c>"RޡfG4+w8q-cc ҳ&%YAs"Ț.[f>j7^,Κ@34/ƹe+3|ƅX3*ә CY6׋SM?d@ƅ+mYϔKIE2eOϻEqfq-L}i*´hut W2Aھޓ6 WXO"0mccYndbXQ@(YY\Č>=}ziCC\7BͭdSa3磲MnneY8N0zH`SB."EʔV;} Y81q?5=Gk;l-=Ĕ^cI4RS2n?y?0b{N[.(^!3d`֪Anݾo,#ps=C휆(FV'd`&{~t8t7̝#'}cƿYǬSx_@q\CGv|df0w qmq:]f7  APYb:maq @nsna6 0! h3fn?]ǁq@s@S!h3q=]]ald0a$ܹ;}wݟ#?Z3uSŴ 5秖oWn .j|7_ɚG?`g;lAW ~c?% [Df 8d霽dvw ݃FgE}jce1t:R~vC6,Mqͭ3zYٸnD$'n`j3L-BH>oDX3 ;=~aV"'~K׍ֶnc/Z;#?6䫩cw[G0w~qofd}:^n!r;@."Ω ͇:w8W''c1τWl]Ddϧˣq_j|mڴA{g^XqefhsigJ%H{'\6Fgd\guqʨ  uc$܋#I'<+{HRQog(';`׌VCV"5ʊ ''l]l+eJ 871#<ӽk[o͌4ƦcӓL{0B31L5! SxYzR Ɓ sgW.f X|1]t;44=1ik=Vp !@LY}u6mDCm?{:;~`>4Kpc[}3>cVswGx޷ {\W([ˊ$jx 96Ogj?ߛ 3dlwB!/S[-`HY=.BbUD.ԎbY_c*ŠQHI]F$T )L[?o .Ô]!L#r[$Svwe"^=OKs$UC+Ql Pq9n@ޮﹺq!]Ye-p8S)ۋ4P$D dko]ڢ{!!:V҇VxU9G\VTZsu`1EKȭ{ ջ/?Ht<QA1D(z:cTo\#첇fae)l~$SkKPjicV_Q%BoN.tZ'BzxdEa2 Y6nl`z+/6 ]=7>zsFղR©n#ˤu=L K#.֐My \+ VW50)y'i){ƶ:KʊeTbdʦ쎑=, u!_wO\5`9 돵Q=ZG1TvWM}B)Xvѐ, $n(MNnqʟIaf?;eoG7H¯̸{=\Ҳ!̠o?kR?d߀4M3~ط;CHtIg4h1/!vDac'h!uyDfهy"D36e1(xbIDBa-?u DVٽvj!D}'Q ڡ=a84fkCz_ rl{X?(!s|Vi \kɄ-ggo;[%t;]m\z_y~FA]M;:-Uw lk"8qsS[Yں^kԥ=>BG!DDl bzj#-Fa}jL5:-4Z0! h3%fөfP͠8t!(60;'f! h3 0! h3 PK#\ LR@wQ游8ƶ7 Rj YJI$~~hBQ 7ZaV Szzz Jt"ǡ엌{g>fŪ`3֜j4xO>N=%]i%RE#,C'}9xyW! I?Ӿ\lg%bƍ+W_% Ng0 E%^eC#s6fma}o $Ƹl/|u+c&^2cc?+@HR~wǬֶnm.?juqy[[;O\{.[!w/0ߺp@ sYY٤Iv!_iyfffy/tF܉Ox~6nߣ,PѺ0 8q !#/}['/J9su5 S3ۋIJN.7֚hy7惓9w|d%0ʦ~wjΦd2=ziӦ O YmTS]+m-͝+ŅIyd%5;sEg|h?OU2j71neU<{yGma;n"سךw`;˹z8te*F!Z qPf3f]]-[խ_=eZcbbbbbn1YU;BOI33 ۧO c_R^Zefob_R]Q,ͥ[cXT7+#+*6aecX]!t ݐtv샳fݻ}Mi!1 -,-----LbXO-)*LB+ayg]6$U0Z6o&dqS75lL%MEq s3;w[ӲZl6$@-)(LB!AG[װ%|C'[\ݶz~#I ҞTF& y|RPxex#wSOYjTDT?ݲ/?ӎ0#-ZiY-~bj}K B1M &3 zn]|>;ll=,>E]'|? Ecck# u4.W8B_6lVߴ_zg?(h>a̬_ڊRC솑K>7Z_Kh a~+՟km[Ob׵aa@C@f4 a@C@f4 l6rvvBKf ^ k$v!̠#[:ЉTa"\3s@S!h358J1"sg['0UP#̯* z @\y;=JO[Ϻ̽OUNaF!3+*KoE;xseT{kM.䟟Zaʚ[ۼAWP3é*UKnȔ/rZg?hތ93kZۺ !Q到k;!v?j EvBwLj[TI;+n$QJhQ\9W4g/R/Be77Z&~ښ>?,M}#,v|'+?%C+W6P t!0%)!zR `l_P3k l# %3ׄ(!4Q"\ qTr;M[y}\%ٗϥ K:zytfö6^KiB$tɌ1].GS;f{s9'Z0͎[0] +L2olh1F+{gJʫYVVLك,m,WOm2*Ѕ0]=]ŗq,ڠ{f4%ƣff-MdCI7QR\mlӢYT84԰Xo%%SWRk]7=1UzEe#_1 %bB,k^`)oiDdc֩'kO׼w1L$9i׽2Kb3q]2!ِy?JM|6^ '$D3k˯1^_bbbjj>⛤o;`J[0&tr`M#[t#~ogkcRjק 舛7o/])222((H~i3pR@C@f4t͖_mab䗂.b䗶wAeee `vN-0@C@f4 a@C@f4 Fӹ\3!3L777:qqqK[moХf˓H$?FWQewfʂ+;ݟjNUjY! N) W%Ul66u[L]sbcU02a>}tjjjxx8b͖vH=״/}UR$AUڗ+@ ظqʕ+WjB kQ fV"#!~VW6VC#UVI ^jo=jl!B}c\ft>Oϕ1!9w>{S6ސc |4|Εa>^,.u@;+߭ $Edce1hή0ou\VV6iҤ;vHWzZ^xAq^K ݁wkzavp~mBmVI vZ֓}=]@&N8rBP-.Hmi;%_}/HC)9k\GٟrQysE+IH^~p*qߢmZ%f&ѣM6UTTZFHϪNNNNNnw ?M~fqcE%teэҺvURes8$Od\K^* p[T!0`b6qI鳇)b cȂQTx޷ {\pAF b3wq<@0nٲn9-sy-!%E'>o+AmVIVf*s J0 L;s} B$7ʰzKV}ČJ7 QVTZsu`{;-!^BV=ܻd^^=|FVrzofЬYzo߾iӦwZFa s KKKKK =WB֢}̔and7=!"'~K׍ֶnc/DV]9vrLِիF8i$jQC&\ qr90E3#ØY_v׿H:bT뱛?}Quw+J/ξaŘ);hO'<) v߲ mOot{Ӭ/:.%'ea!fc.F⬤tDǡ89ƝC0#nBE^Ҟx"\Sv%0]%60tu0u}:aFEp?G;|4t|E ד~R"qf81#O/o{ nl#CeEeG[F= _\̫#=Ap].! 󡫖 )~=MLa2 B6pL&aL>"x![TŒFQq:`Q'zmgsJ|N;0u s6ոuwWuHjVgz9!2X;¬8NI8[+g޳{ ~kD{g۶EW#0<{ 7&EG'דρ.q4S*qS)9srC{¬8Na0u>Ӧ95&GmCȍ[-ì Xwr׽/Z۸xj=^bQGoNw7鿅7)vqxW@f4t3Tns3(fPuw f4 a@C@f4 a@Ct.+&&]T9.._~i+mMZlyyyDo($~_F/W>v?Sf|L:]HqYxrE uìASNDƏCM/:|̊U-&kNL}uz9tTo 5ߤ^ӧSSStYQ"ZAJFXNk)9#]-vˑ!Oeuh$e 6nܨrJZt`0ZT0[:4?.߈>=nx BHQ|TW@₿{Zq6[$w5脏seݢ[f 򴳶q'/G=?llogk{ =hD ]˓EOi:sC{Z۸7eI/ ܹ2l؀7H–MEK'F{yPTQ7eee&MڱcŋɯD q'>?(j;9uv;-ɾ\t m'NyyY$y O+J9su5 S3ۋB?b/ _E~=BFjNy-!'?s|}Fzh{O~K6ͻFkrӷ!D܈&YJ_"O=ziӦ O YmT#VeR{Q,BbT>qJ.O?{XPý3WtƇn1(_%~3^^r[ˑ7N\hӼF4Dao㲢 f01L8O$鹕`UCkאPۑѵ$"qFURYWWw˖-uuuׯoio嘘̓)SYT+켥cnTTIf4ig.O_3֣MR^Zefo<^NRUVlTHnѕa{{{=F741TqIS<^M_>GX: i^2k֬޽{۷oڴiꝖBDe lfg(%RoMRVT&;7Ա q0VF=mH\qS Bulp#3 O0U,K)݇&,6''&-PbDcro WD<+g;I=F@a&'{g顔SF+hv!h"wwwNja 0W;w ;ڦ3d`֪AnݾoaYoJ0Q+lFYgG~"bG*f2cYg8V67,go舉k_k ;M!GLZV=4, YjQ9 &79%ޙϩoM#%Q̺:뻸//5n9t}#/5@̦whNuJgZvdثq$L!![GB)PwO[C a@C@f4 a@C@K# O7`,Y -AAGdffR({{{/Cdy0Po@'Rp :O60! hs'&uS/^7a&2~jjhj6ФODYaħR=u.v +=m=>3>m=iY}}mY :{KP% ޮ4 ;w&AG:F'&)~*h{zqobڅS7LYsKnrDăuIk(sc?=Q*fGxڅBȌ:W3&_67ˑ*Yy46$bҐCFkBI*`ǀIf^'~晵a}lm]zjt~vN~ξNc mOα3_-c~K*lw˝2/9G N?xpdi|CQO[ۙOtTk;矾(Ⱥ eh{LDaJSӝ\"2!Qz#ˑacvuÌp !VO?{yI{]>OCk5))UD΅O>4M +/۞NDahApoW}5 qaL*ư tg# =u&WC:LY5Ez^Q4fO=3tW @;QdLw v!k&Fuujyr@U=IJOZ+qI ϯ!Դ=u]7=1Uz&zx4?YɔiHuyz>GS{vRpܖs;A)ޡ}|z8Q/!E/Ƿlfk1`$ɉM _YOl{jpS'#-Dr㏝S:FNn;XO'zk?#DuZ4swu.@;'1{۵DF>;} Ym˴s6a$o[[~~z\4H70p1s| ռF1n⇿|[3+mOZGZY:Զ!I~:"@3lOm:>o8@_M)mOݼy3,,L~)JAAAKiߙ]BV8dyo "_B|?M>jLYvmfl6[~b*9tŊ_ Lll,Œ_U[[ O79x0 a@C@f4 wAAq\M.q @WqK9f4 Ylc>_?͎|I޾1. P#*z̊UJQuS=b(<=[bIPɊۛ'01pt8bv 5Œ.r$A(u1g͌m4k%,kɴCZ_)|tgp j8IѥCz;Xz A5Ywwu_Y$ƸC&l,޺ YMتn9cY@rOW]'2:}N!ԪV6Fܼ?f=|j똽c3èפOgjrru3ݙt!W*kx1*z^UdknN18pՉO޼dѱY7]lUaͱu4.!! SgG{A 8٢atD㈳ҩ^>󶎷Cqr:U&BmփC܍8g1GyBHջfo:ziկ^UoDʺ9E(.# rdia4~KZ/SN#J ĉgqF aʯB ݦLxMT3)eqdýKad%9-!/p\D j½zS]78yxyV#DY7][tNSlXw`k6aL>)dtZ#Agj#elj|h{ɉ e"r~nL ?'_ߊ^SaE%*HnW&EMVD=NJJLx} 90!*SƋ/}y   T:yS? iLIȵ|NЎ0+.4l]tq$.tj4_o{=+.1ImG\R {SX7yz>!D?=rJV))qEl306&/3l"#o.0'T1n#B/$!B1acf,u?pr4?،]=aVXGtC :zmZ!ae;x v}MskL.˯y)nqK}O 3 rɱINӏYhl:?;;ɇ %!GXً,I^m\ ĉvZPԼ8aS~>>;OY WS 9~ vyc~ uAÏz9o0=U^ea'=<aVAkwsKOAAG,1N60nq Aq\9x0 a@C@f4 a@C@f4_IOOrK[a2nnnKEu嗶v$K5fA1 ^c›\y|9Tjg: s?5ed8V Rd͉U)ïtJUVWmU2!+DaDv">#%]VҪ ڪ5fPht:`0t-*!?%͏7bOϡgE}jce1t:u/T}W@₿{Zq6[$w5텏seL9?[uY2rX^ɑuT=ܽ Ⱥ DH:Y|5fZ,f+uyFq^K ݁wkzavp~mBJzuv;-ɾ\t m'NyyD!K(xr_s9߆<]*!IEd~z>9?O+&eյyJޢ(GA],gUog''''';SU&?X12Xi^(EȲ^Lj'2.\%pg/Kjwri7Gu7Ą~ybIޅ?ZxGfْAK%y˞֔oЕ:̴~k/cP9[\R[t^Hu3{ps+3]'s J0 L;s}mݗ&ƧhBeEeG[F_yҎWmPڿ@Q[.a`naiiiiiaÚ0)yħ8/Iʊd罆Ғ:! `X٨g# qUum}<~zeI^_V&JB]fl6$@:f6~2BҤdS2DqGRyνƍv ɣʏ-kDv8L{s89<(hVT2JR}><*]΀u'xbK+220k 7gn߷,7%(6FY%p9o?9;Z֭TR bj:a䗶:@;39ƹ:̙uuuK[wqq__j0rvF :oz-m2vSۺ 0[3h3 0! h3 0!F@InfY,Z0_]Fg3舸74m̠#Tns3 x0uIeVs",L̫mJGSa&eϟ=Oo +=O)n zvOC34Ԗ_N$(5< / N5PW٠pp2?3%!>>>)5ĮFBk5@PMbwK(FzZ ':G~NR_[*f;zx;E%%ӘrPeyUU1YۨcGH~U1G@H14ѣ<>ːI%^$1nYQiYiyOW 3S* +J}!DⲲJCBH-/*)抵z FV..*zac]ueE%bVɞ#Kss KJ9<Ǥ@dm^R>5VVuYJ~}$ɫ 5U_ N1$/-(*-$tftَ!$/-ձ7b`8MGKTQҠmb@o9H^i^ )T-:M^{͕P̌0#pHFn֌2B^[Qn^^^nM!$ϭ\},5yyUiA/0ҭ1AcYI'Ĕ5 3Bt6%kpkEX0t|~ !ii$B*Gifǯ!Fe+A50СlZQD70aID\2-tZ&Ж}oU[^an8NKϠh+$B8H\ѲT; $jihaK067H^1#&UZzt 0*Ԙ)H8X[-Z XSCLuF15g5@J"`py7DYiq[pmC6] @RP='Qu^B.5RD*05:HQ]infjrRrrrZa)('N6m I,SFMFr8NL/)4o=Uaq-ͯ <? ɪ D[- I38BAU+Ze+nô XڲrADCE)30}LDB$EEqU/*HH16yQwhWazf:uY/ t0$H-ۚƂZ_ʓ Wδp''dV+j`nAJK.!:4!\ޒQSe`׾M#*bٲ8ʶ7f$&r͚=j t3Tnw4Ƃ0! h3%fөfP͠8t!(60;'f! h3 0! h3 PK#\.W~i+L&M~)s\\Vbcct),5?F!|X0z iW5Go«A s?5ed81+V791v*4fhTO*B+ÌBZAJFXNkZ/J}:`LClaYy^+Wt`0ZT0[:4?.߈>=nx BUhH3c֖ѹ wl!I1.3j: }ݧ~G o1ƱK $)c@w[k[~ӶDM/={֒5\sY$Y~ JM8|l/'k+{џL#DF5ɉ{I0[Ղs7X򩙮cʮ̝AFռcA]Q1Hw`ĝGk|mڴA{g^XqBܾGYyѳz-C]mӲ{E2 vdǑ+H?'e4(qEm\N+Ogl/&&)9lޟ/dXkzG}sbbuWqC_A F_:/B!I8߉c-+WgyyXyBt¶XwyoVۺ=f{YG=epvԹBΞ-6yLL a蝩*{OYǘFu ]ntbtj|tX,ĩ&}2 •\7R{gݢ"GQkmatc/c{׆8jc qkĞV,A!!g3M q*Bo( \=i9VseyҧP z~ƫ3a+&~[ƙNa(J''96) uui^}xRXr*3{zE\E0NUy!1dҨP$F1BFK.G $2$%e}'}>7֓!=0< ԅe)cϟM \<*݁:DEM Xc}XI|Zʞ3Lvo(-ca坍zv=ېWnjaTWجlCLzJr LoXʕ20ndj#ٻKL{? !$Hܽ~H0ۺ9r aD.}_8 &<9(Y ͦHs mcއe Iͺf"~>#ŕv4n!tMU~lw\&J4C lqu$)J{RI 4 .IA&lczM˸cͩ 6f8rƈ{>P-B镻Y"XzP=پL}3)̀ͪ˯{]zMdD}О(M><*]΀u'xbK+220k 7gn߷,7%(6޺wIC^D wH2v\Wk7ݿw}6CzS64}}BO|Ύ{S6\#ޣK9߅ٮ\/ِhl:?;;ɇ %!GXً,I^*hF_6lVߴ_zg?}!9~ vycGS̺:뻸//5n9t}ͷ wN4B࿥:oz-m2vSߦYk;adh3 0! h3 0!F@InfY,Z0_]Fg3舸74m̠#Tns3 x0uIeUy噉yo@15Lҟ?{,ʬgSH0gbi"yE)EA GH7=Tih#?[m`4R1ۑ-*-$%%=;__oSWi1?)$j1lH"H~M 2ԕ0[\"!6:ܲFy9^QT'1mFz!qmav)a` ,-k )z6lAqAWQm=oegD2rt0b5/#5>[-wtRH  Qs<1I|Gד:aFnrDCu nViRBW:" V 0 ]W$\N-nhnMAML_XS# !Dc1 |a j@u5Zl:Z6(:fZ>p8;#e"ʭQ EDlp}d Bpi?)8"$rl C_d%>Z$46ccj،Z,NaDY$SZD"KhZ4SZZTHv4ql1a$IXVϩ'a`@)$)R5RB mȦ ԠE8Ӑ%i$N 2k6zI^WBHeD9UO^^Ln^NyЙڳXl:[e@Q (N"aM"6l:A00#0*똻x6bbr€M).o;o Zp]Ysj0P1踀/K' pvYLǘFF Zzz܅ 3m,@s++-?>2sB$!54'K"ܲ:@p!0t|EUb!6 HD * JFvvfxe~Y\J 6j j(:m  NYe#Aed`Bº BCGVW "nU `KhWjc"8g<+9>>15'&e`We%'tlf{nf47YMF !c[3XPKy&,aQJBBJ!Ba C6U Sm,(/^TS-p)VUImco(JJOH2,a௦#89)P͛7䗂r,n U\#6$E ČJe{ 0||<Maۀ 찠#l"Tns3*t%% :(++nsna6 0! h3fn?]ǁ t:AG9f4 anQK0(Us Yi ϟ%)!TYe]D0#vqx[ 8MΊO)̭\zx66Nn"!aMQVZrb||BRZNWҮ6e$|NыĄĔZtYuAfJB||BrF~tz6/1EFzjJJz>G@"$N,ʞe$p)+NKJOL.#D *_$K'qrR ꉗl"'''Zwn001dҕ8u4#s6ǨL3S}ZCtouVqEHRWʕ vW 8AƽCH+)yx99Ų8NonPTRK >Y&D63zpԪ+1Vu~ Vٶ͊0ifcnjBia#|-qmm-]@0QgPqQMYM­ CK3& C2(l!XfT 蘚 ahGµ/$UZ($"[FNenG27iX18y/̶֪Y\˩g(mH$) ǛwSN~ljiII)yJݮ6H,Ѣ]pEbV2E#b!0 Yg'HF,m EDmAC.#oO ƺ{!˩ZΫ>86=BHFNԞ8W^^vMo*^iT\(ߦҨHPD*&C46HXlia(F<^Uy;BרhGHPǩm4<ѵ$/gB55fqE"E5UuG]m$SR" iFU%e\D6`QjyI ~"\/sȦ,c:Ԛ:!$ #gBD,T[eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'u>I$'Ü_ΙL+˅k\@_ <4A/ ~yh˃@_^?}/\K 4NNNHB铩p}]jjjK@z ܭEFFha?~AZWߋd .Ρ!I$ɦA =h.~:cO'|hE~+5^(#?p+.tW\8<,!Ho}F(y[x?+i$905)|FfS6Nu.6;qHT_$ID97Mu`i>D&_?1 #Ql'fy&9[a=ĻZ$IaYg-.5ޝmb#-u ~;;HYzOТ?ؿYWFN$IC=j$I۬}gכGBPy 4䀷U? A¥ {?a+ X y/%$6$ϗ'(|h~MI5w6㺃%bފ2ҥ2;' >VvТ4au|^Tc)KΟfJ4MR^^ct$jA +*Kd' =h"7ElPiTҴuxg= B$+_jP~g5T:[QaGꀉ}bRNݔ:Nwo$Y%ICU=Q"|hE5nCh[!ĔU #4 I555|Wka?n\ȿ/q辠CG[I=CI`ғxPDŽo+Hȍ:Nz=!)<YxNR}Wd6D$"ǎg_Y}(cvZFQϥ_Rr0c'% z%d-M{ 4M"6 1HD":OGg;=4D$I5[z#{v1u"pT~!0uףorQvHwV1QA Syqp$Xmeezuo{U}8'~&2gţ/'Ⱦh8}t˯ujIöz ~-,X34~ P?} ӧO7Vp X!$//#wk)))Y*\''yyy[wI,\Y2m@KD+Y@_/hܹ#//.|^qq11AA࿠@#I%!Vdh+$X@h`L@ 40CI&V>DY.[cu1p_N:Gm 63=GyyOqi-wYai<Bo_ه`g#J}Qv~_yKb \_Ci.F|3}I eewH7{S7}罔!snP]!`߂,x2{gfV?Q )~;( YaNɾt56A$3㏝kU-?@l2Vz޵EbTl-х"\Zhn7MB!f` EHVJXSNy%GJƢė[g;4bsm\əb/[}OXs'lMdv^5+5+uͪK!D-uʕmw;QHD}׵F}Cd }Ehmjm Dyܭt^ ++k#MaŽb,RY~%~:x>I!2)Ed;zNߺj? 2|S[_-6I|zm2!4̧M v y~CqN³,<|~w݀ȋ&3.qlc[61t};٪8۲9(?N 6Lt+g!1Zn lh*4<?v?ɥ a{#+6Hl=<|xkDʭk7-A>ק_M\I]MAXCЩR4)iQyOa21όm\e!ݨwkr3c"w^%h(_!s\l Q)TiMFoԚO.q&MI\KP !YO&Mz-Jg7qki6Y.*T}M:kiD4K(+Z:0fZGuO?88zj|l!Qm&)u;s=U9eyE=*,$e݈㹍)C78Ecp2m5eLcqnݷou6pb34dUMG4i̜>n#mč6|F`eSƺ8DBRa\<}%7%ֈ+&0r{m֛d}on ]i^r>~<݈!Wtת{=Br+MBՠI_ky}M:v?+<>~JDzܹ{li&ׇ1^'oߋ{h !Nɕt_u'w{PE&"ܣGF|KC}Df*8FGήd]Tн M]^NV_TYmΎ] jbfe}vYǬ >Y;Uޡ;O5YUܐ5"֭5K۶ އwS\G5|ȚȰ^Y[u,?߽p%>_noQ\!þ.Yv{f "kجɩTyvueF[ zh2ff&C$Ğ[IPZ:qSi!DqjM+0~6W1YBX}+H߲w o5Qa4]bu)O4נ"^jxDスVt3 ̚WZ"2[,.o8 YÔfteb#i),+NhTzbղ Q9vم+OxOpu6 K CYl{h2dG'c)iy/4tCߍ;Ҳ!I1XJR2J~EcMQ^C˴aQwqDi ݩ}꫼܈2^{`GO'.Y[s'u.-v1LN wS) 4I{Y8?'Ι_\Yj!eHGvߎ/^:.3"W1;F3|LIz? C2dZn Ĩ>ƶ?>MK ?X%'"B)xQVZکͶe%e7gyOK/`rZV30iĮmׇ !i4.p4˫kw2uHMͭZC(1LD3njT ᅥ{zYS~S6|(:h"/] e昷Ĥ#ڈDf\I?+{u\Qs߲f$K?O{*x#"ٹ ߲ƼcySwbʼn?O@]D+hF\ɴKn:/=LZf3j+%09 <F1V QBć/j)t!=;}b!2,!X_$ WVSUqxV;ag5iQ Ȝy))gs2rzZQŖ8/sfS,71hDX/sDe+9ڃx/ tFy6M`{S$}ҤWkIݎcfS)S^JZ=Ҵ=ʮ/~}b.2!|<~T$e$Ipܦg/y}!Kgj_3B N-4w#Y-mg/ӛLծN}󤸆ar##WN54Ly5"j_GEB _%V1C) ?ᰯLR~I5,."X9/7.tJSS5ㆎ.ZQg'sɭzӸ->vyoZ=fNϮdq \_Vt{v)8ӷ fU'7M"S^0\M~Kp2Sqnp4־7sGA˾4R{~[>.!ô+i/}zxmzwk&nFm6b̮ Z~z de=E•h&),-i*J;UCm?;K_0 p}<,'|,(Hfʹ&aϜe#~a݇CslgY3[߰8:" -<ʫ,TFm;eA%S.m~>&w^jxuhDadrKk1E}KW^CN]yqZ}n-MqqKzg hK%31F D+Ie rU#H"JzSD5obSKz F|hM;'D,9I\pA:.J3bI<D/9?O@ 40CI&V[NC@ օBzaXQQQ zuxa=SHH<ܭUVVQ,3p[H[$ W(qh0ЈtR0"Y/H  $@_X 4L@34dbI&VH2!r:phaG?{D֕f8/79ϽG&"ڢ޵،dףvV\Eu8/u];}/cn5\/a,{Cqii }KT=k$B$Dq^jڐ D~=c|(DZ'{ӂeya)|5mW_1Sz|frN>nfٷK ƆxcCgoqB^ϡ EiG\ c$30$ /U h(Bݚ襵҃v،WʫHxbIkƾ}8dҮY=U7Nkm6MStm{k3hoSxDp] 4+k!4zZ!&tkq^HVJXSNy%G?QE˭ݝ 1mqq4|rAq'pio٩i'|~mɦH?Eh"+f´G7edwnJT{4b4*ͥ+vP|SB$Sm+[⟍1( A.;O)Ԇ$kKOo/տ(LFBi{ars+"Y3@փiWRn?o:}1!v]Pmme:ӟ($@9*xx6cJ_Cy !D|t%lmޫ'>tD,[x딽ۂ06u$J`CXi-F? 1rkxgk7GS٦C.1lc\Z7l.sÇOZ iCfXߴj{Tua? ۃ;/j 4da7f)H_l}3c{у,w"QE4q!]|7 .Ǹ3e{Fo5ߓF$\t:T(_[S_av.;Fk*t{Ff*!Dm?pNg)V HitҴ`NӤ4iEhZG8 d~}[I84ƍ hk»ZM2뮤?ԫ\jN!^ΓsUpTRP5#y5&*8Eݸ@´2ա1-^eYCNQ #V=CCV\4{A0@Ⱦ:bЖKNmg]6e{@4 !8O,f?\r;#DQt9{7}(4E=F:ӼK}3xCZypǯW10ꤢ"]S`uˈ/i'P TzP rѡ"Ț /W8o^AD֧2 QI5*lg&=p[դMTW +rەT> Odm :r;NB>ByM&Wt#}sтc+" 5,a N8Wf[q@0}"gGW;uWλrJnEUP["ؽh&pGk;T!jy^%,s?ES-\tpD%(1:o"zß/>/+ЈBo]y?3>V$BכxcL[>:y^CMhqRO=ˏ_>À*25!um3E?2_2?K&Wx4U6: dUvvU'C秂ehr rosuv8nTC@5+09.r;/9m7np Ցa mWk-XLZxrz&Mpj7{n/bҜw7c|T1hjB2ld՛eadzh|uWŧF>[BW5۾i>}xώ'4|w+ߘ tDrص4';@][Cx^32VGͪKNcpvK0r:/sݸ)e0XU삐e-0K Z]NO@ɊxKFሮf1ԺՉB'ybhkP/5+O[atiYǖuDPww=̝dMG!i:WmcDeX pzO2Oݣ W~VR?o#$Šbm:+e,s#bhMĒY^ZFR!DQXMVvj:DYIYvLVN]`dd]0\SҸbp@WQ6dꐚ _['Y,\[ !/y̳de=k}"/]v2-`b39Q]oJ+\Xi"4JI譅?Z-`1%c1!xL4 MNf6kEIE2fom6ě%K!P #^V7Bb_xQ)O W%?̅]nV(JƔ|*5h'einzZ?i`XCk2$+=4^+/s kQ 3H`ʪʼ‚2G#'B*E1pe5Unջqv^ÚEȀjGSS!?'#EUl2> YQYobz=E{JZο'ki{}<\@μGbcd0͑ƜxRͭ:Yݢ[c> w />fg7:/Z}'\jG+OòycOݡL0!T>kksP9l.CHCr\6 IL6aaM}F&B쬨)^.ڄZ^qx\<5o6)'&YRtNeEm͇;ch:4Dfy}cIW݌׿Q|eGeR[OH=W_yc C`ظ_w򲾛xVY<|#6S'Bt}WG|%>zB߃FR~-IVGi(^]ݏj:Ҥ+C O'\ 4pD̫þ2 +K}~F5,."X9/7.tJSS5qCG39VeiܖL;7I I5sLvN&SjDD޳KQU0^_≮i"LnjXUd׷s$yiɬZ^.x 0eSw^efRjL!t^D||"Bdz7q;VRO]xe@_=g7OGc}ur]M} Ua}nog!o엲1{o|[\5w_QOe ?Lb.XwODOߛP,N?-Rk:cՈЌMY<`r]= Ԑmo_H_JNsc߳Zn~:`*6Bf{-4dXO !3\0}܄n-K5=J k*)V{:h\i()H|~ A#=XpWO'g4m0̇ZO%`j=Z>{jȹ1lȢ9ϕ.9gTޝ!S'۲./bQOo>jPbK@@=T mMP.v{Jc=586Bdѣ9/쮼6gTޝs_ߟe뷱޺jV<d=dݟ1"kKNnrpi%5 )1NozA,us%_®/j͸MW2M|!"^fOvŤuD[*(DiK9._,ܛN~ɛcY,$pZ˭᝭Me 1lc\Z7l.sÇOZ 9a}B?kv5Hf׮v]T4*R\&7o2U\54%Cw//J#-t5tSb~.$ FvwhNJit4(ptZIW;Ccx6Sehf%4ռOOֳg!O+ hk!aE{(t4&E!ipjj٨Gߪk' Zpɖ̔|T) r=qgh(][ 认?ͫRj'.BDշBi7S-л^YW~"g*K.8_hE!zJi!;a}uۡ-ۆ >lXWghBqrX9~ϹQ{|aF~OzݷB\ 7vτѮ΃l4/9R? nĐv6\)+"UL,:((jjHWT4i~2bKM4m`b0bҨCAfUpB >f},~]Ǖ+5Ț^(Lu ݲ-"Kl~"D+nk 57;BjQ敦O{zl0{l}M\ѥ$RYQ+>tW|^JnJd^r^wB4^>y◿N~Vilr6i[߂vM 4[W^y}<"&s,(yE=4ل'Sۻ= "SBY?Xtы#ʏm!Sd"]}uWA]zkzSUvvU'C秂ehr rosuv8nTC@5+"m=.;F/N CǠELh;:D&S m7~Ÿfpde Todү<ş^|E.}eaPW9 !ىVՕG*ֵWHNO>s/Ip.}zccf%vu|w+ߘtDrjk1iN+0 rXmv@Χp!c{-3t|i$-ߍ } :eu-Vc8Y?yH#9,Z !$OSY !m} *⥆GT9.kNG8y%"qX /R뢨`5LiL[&Y,6²FII!V-U?Dm]rdWgs05@NTS4:ja&/[;cƌٽ-zc&EJ6PN7j7sB=A^v]Dz"/_SNj_{qӯ1tek՘w;ܢkfXT9 >Uz??|iEKQys9)!ZwI/S8FvEG!F]I3}ņ4;J~ 3.hѿ>xQL)y!LDC7,Kv׼)uD~nJz*4\g6# yHԶBTQ{$|c)MpNl0?\gs=Of_|X4\ rټ}uϥ%گo"=6W3Y9QFBui3e>$pƆo6)'&iRtveC4gkB̨)_.ڄZq6OG_@Y6Pf8<!){eW~=z2jaw],6FVgw)vcsˮZz(ݻ Y_C0%m!/K).bFܒ5h~oJ"fh0#g^=I ^YS0pg''N'pʉ~q)狼U`:hE9XA$*uD\NdؙI)T3gWd8OFTX/+H=[*œĽ>S^0\j,䫰yFYG_Q_j0? 4יǫSB 3[Gw|<\-㚾Ǫ'ns++ɫi m\dY ˞gǍ᫰"*v3ߚ@18u B_~A7?Mqty0ϵ]}z{Q7W$?/ۂ">FvcP_yȴۉ2,(!s5d|5d["LؔꭽWڿZ1s㐦kue5MpcOFo߅!㫡xr 6^thwƶ<흦B{kG[2DI_`µ㭭?~,//|Y|yϾk_p%#G~.ɇfm2KKxrR4NpU7vc GGvK)t2~, F}̔sןM*L9=G蓻$21N^fDcK5/LaqbXu!D[x"WWYXCUSv˂JV\ں|L._5l-'"?b^h7E<8->X9EBXqm@eMpgjcrU#H"Jz7"_ש%F|hF|h/0д|DĒ?3)b4I Vdh+H 4L@34db 1 4<_( b]X!$ي.^+899Zeee)\)X<],Rxp˸d+XZA_@#֒SItЊpg@ 4  ~ybXr$+H2 @h$Xfh 4߇:?ek W.I]z(aYW~#X-.BU2 6;O DD~=}(D4.Dsv|xs1?ٻ2kGC'e=sRĝ !s|M*J,N|x}mT:_oE]3eT?QCm( Y~ݡ}W~y۬%sUuE6KVFܠDiCW*`*6Bf{-4dXO !3\0}܄n-K5=J k*)V{:h\i'H|~ A#=X8D:O<(nkl3̭\NM#XigЦsm{I5Wmp@ֹ@֙QB2ֳ*~[[C|t{}mci!a;>|/Ƙ~>N(a>Ԓ~: nUww~cOsnu,!ڧ{Ǫ4KE2*601n_ p}|ք s@=F )]KI]XYϙe7`ɠg6|~\#2Ѻf/BIGv6Wtd;zNߺjWvF&o:t?rkdaj-wvs4m:?v?ɥ a{#+6Hl=<|xkDʭk7-A>#ٳt-;uW016)0i4iMFi0T}zҴ~04&MI(8Ba}]v 15WS{FfַI?a:{]4Mh*045T4XL!BӤ4iޗtaR!PD6K Uq|hwyZvWvFghȪf2hӘ9;}\G rɉm˦uuqvf!'Ɂ9xKnJEWLf?a۬7}(4Z0y%'^gݍӆ+=~]DQ'UM-ꜜ#mޯ[FL|I5,9u'Z0XTʄ+6;_-'R uY)=l0ZlELpY] t:b0zҘCAfUz,wrDA҅w:ӆtW=m0}l">k2/۬2tWs$w2'/D(T3RpwkrEMQ o{X۟v6vm͠nWR+\Z+?1=Dq֕xC??cH"p=6˴ђa"lBCzr)W]~T !ki,:EQ6_Ґ)y_2ٮ ѱq!DVegWu2.z~*^./'/X,6Wg.^́ L51 T2=YWŪ Ork.wf!+m_O>CSw])F9_]a)G}|Nؘ{pm_ohD_;5 n2q׽^K|zꝹ8vËO>}/axO,i^33h$ƮJG`2Tn0:q8¡V5w]%ǝi Ddd 59"/`Nh~  j '+'/i$#PkFDQi*!$AE*sg;5Dd>KeY 1a]p,ɬaJ3d:2bu'4*NJ jلb!n•'': %L!ͬa~1h8M))yÅt3>~'d۠zo Ǡߤ7KѥN{;Fcfn];kv4ak{bdP뵾>/&w8fkM-_SZe^R'ͼv!c'lP{e.!i*f[_ϯ< EpZT+] !D,yLs8Ng?D.'uV,lpݔeh., r^/?,POĒY^ZF\hEMKSp(+T!QVR~sx]B,jLFFp9uH!*6tyunC uUbȵڂ+aӨDMb_cnqW(4 F dFN8>r:4;Rp!qxUG~t+j}_:jT ߅E/{vBfQ)lFRPC!^za|V0 c~{׼ڒfqu5jᢡZg;UyemE1pUæ 9!\YMUy[EװE62 s:Y?'#EUl2> RYobz=Mr<$ ['vg"ϯ9cͨFfТq"_[Z9Ilvm7DdML\Rt~eÛ;М-thxm:cjj[#$x!\.K$px"JBVZ¬ay%3nGN5ZFuod1Οm}z]YugF0m^?~W<6Ԥ$ t!eq<6!H^y,9Bukx.n{B^63~*j ~EH~[G Dma;'pF ~&Kk8- Q 4"fh0#g^=I ^YS0pg''N'pʉ~q)狼UqF7ttъ:s>HnU눸3{yfNϮdq \_Vt{v)8ӷ fU'7M"S^0\j9Wqc*D咘V)sUHvѻ 1 xsqYz cMuE%y{hʦ 7 s҂c_+3W~kd1?Y=Wa󌲸1||r (o.~[h#gwWϏ5=۴!RG=\DU^I^Mc_GSlVa̞^ ZK#(|nݢ4lOFGW4lyʻ/>'L#Dwi\<ׯzN_RNw41,ZZtJ %>?m} 溻H!P]YU_>kޝ]/>7ɗ W2r碙|h֦ .'(E3WU qc>{,}a)pHb.}5kF4Tb'UBD]'Ryu5T5UYʨmg,duʥ_V P( r"Cni-okvúMͳB,OskhK]+-],D*KLE rU#H"JzSD5obSK. Ј _ak]Ē?3)b4I Vdh+H 4L@34db 1 4<_( b]X!$ي.^+899Zeeez&\)X,q6@8^60q\4uhZrj:)Z,ph$X@A/O@KNdbI&VH2 $+ $XYgl }8i0{[ϣ=L"o3sk^#k{mьCZlF4XjoK/ǙߵW.[iE|;u`_ee7wM<=y(NyӜ9Q[t+H`*6Bf{-4dXO !3\0}܄n-K5=J k*)V{:h\i}|U$Z?y֞͠K,o E3;HIyܭt_e=ol_qZ˿Eoe`}֘R͏&j+k4Olڸxt̋ϿtǗ!O)ƕ.~mϷus=O_AehrR~݅gʂ?v?w󆧏^^xxӾ#hVV {Qp4MCpf"~Y!n_^8f[77]b,H0r{OیdyeO75Y!iӬu aư[8 m-"hhMGpm)G.g|<˩0|ݶLZd?9 7:Jh5YH0[;[961lc\Z7l.sÇOZ 9a}B?+wmc1@є0TVubT9]d2J!\uH}9S4o^KYS`^9ڝ5 &ilx(Zr e%!50؄ќ#xidqis;Ѽw!a8UFѤ(xsF h;Si6;VpQ^-w4,O?a%3m%n|PlHg}fxŻZoշ 9\NѥitiJįtj";Ppy^FWZSS.h~>b*٣ 4f·yBDu7Cl\rn>#0)c]]Y!}r`0A.>璛CkDQt9{7}| 0y%'^gݍӆ+=~]DQ'UM-ꜜ#mޯ[FL|IFrۘj^]姐:q-dN^^Mg=vf ۡ\[ de*'%ӧvMa / 'YptÚ{o͙z-io|kVîK$mx!٘ѲY鋜iE_鮜uەTk>UCm,LΫg$oaKO0IV$BכxcL[cN޾qdBԓ+OOn0LM!Dd][LcѹG/*?Lt^vUp譍rbUvvU'C秂ehr rosuv8nTC@5+-90Nfc^[".h9P)|(ΰͻUiWmx!0S׿Z:znNVDO^2HGt5'`?TCHF[_xU Z0w0kId>KeY 1a]p )͐`$FRXVԝШ:))Īevم+OxOpu6 K CYhB2O[jatfˎNPwt;"ngs[ rI8ke%B._vڭpM;IzǴ>j bɉ,/-jjxii .eOfmQVR~sx]n2&+'ˮeupddd]0\SҸbp@WQ6dꐚ _['Y,\[-dqRL9Vڄw"8o³T-kno7ƙ75y,VePqTAHL먐u{v~ME{#DQ) FPHȪw-OLK*:E>saGׯR)!T&g!p0,"y N҇N3g*ûVa&&&M?e_+#v )* ,1WQU,/U %ڭzw"kXӢh9Y|SS!?'#EU㼌,71h&l>$ ['K&Cr41\>eB$;z8g 7Ok&7 |119}]XI#R"|˩el~1<_r$xl.K /Xٗo޼>`Z'_TW*&Umx77,dG#53'rڷZvY=U]{R1u[#HYX=L{J ʼ`~ <I^ylc; O!v򰾛pꬳ.>mur+<$>N~ S=>@N G_ðyz ʣ+>;Gߠ ?XLiW}eW4>T!j6Yɉ %\Dr_o\;j|k<ㆎ.ZQg'sɭzӸ->vyo:(i0;,NCˊ.y.G}V{}236;C;kuȪ+(|Q3f#/r E \LEr!"U' Yuqb|) CwG5^$%%y>ӸZ󞫑J&Zi" *.uz^RwDwKT9ȢݶrhOMK3qHw!c֨Y7A̓)kyMWnڌ+{Mi#|cr^JEPBč],&0ESzrI_1sѐ,,/^|Qe);3|d|+!B(|!]wr潼 TvὥG&j+ATW)rZK֏?WWWoLgߵUv?C6ETp%<9ME)ovbm1gg N#d:O^sE'Hfʹ&aϜe#~a݇CslgY3[߰8:" -<ʫ,TFm;eA%S.m~>&w^jxuhDadrKk1E}KW^C><8->8=EbigN De(U$Ц8Kpamm-\7 .{m9k~^:O Ј _aio%'ɁO=~N3!\gRVi@@ 'V%'h$Xfh 4"~ @bhx+BOe/ > ƆzcWbe^A~Jb1-Nj̸S.1 XDg";lz߶_az)w?Vd{h.9"f<_[zՆ^a1) 47CL[< E.Аnb=-Bsqb/hT+%@V\Z!0B/E]tÌ̷*'0 KѤht C!"7t-ȩwb"<ַD|_Fp UMޗOc Z>Dr꦳+">?E5&MIr{ ]qxhZ5iڹijйK%ߪk'98_Sizos+i~C=UsCd9HWg$,(J2Ij^={Zteg-]9W\x |b34dUMG4i̜>n#mč6|F`eSƺ8DBRa\<}%7%ֈ+&0r{m֛d}b{&vud;yɉgdw#Jq_1EbjeaIEAAUSKE:')H_ni[R\Q0}ݡ{'+Bytw{KӊQȚ^(u n+}_'"C>Ba/(K>k̽C!LeM#}_0*foMNb##I*N^Rl]% Qg).jE%:"A?+ƮfX*+7LJO./H 4[W^y}<"&s,GKׇ1^'oߋ{h !Nɕt_u'w{PE&"ܣGF|Kt^vUp譍rMUU i**7yqW0sSM =լ2F{H=Ζ5̶\xO^xqj5I/<Ÿfpy[BVńm/-I腟=xʠslǴ ٦[sؘ{Į5 x7v]W:B&rƜXiS·kzK\}nMlSwjWKg< A@ɊxKFሮf1Z'ybhkP/5;m]rdWgs05̶F8g,Ls%RG!\zA >>IM#4*cLCu)(QR?1ٳ7u]QIeo 3f,Mfa~φ) WVZ"%ڼ틖aCےjY>gS]iT "H!AygB%EԺiis=#f/6 ?LbM ?ʶ~?ŕMը_ x!K/,UTP 0]RjKb4Xm~^z !z+,(8L7UTKB0pe5Unջqv^ÚEȀGB~f!99T=}-bp Bٙe&z\%HqxBDv㔍x:O"DfżRRTw櫡}7c v5Z=*>/q\8pp'Uvmn4 Dmda2p>rG&F!;Z4\Cg"ƾpxh~||||ֿйRdV뻟J/ ~7Zu3E|砐J^[1u3i};IJt5eksVS8:Fzn)u汹<A"$5O҄'y˜)T#>:mϝE_ʽׯɯqH~) |˩el~;!AI 4pD̫þ2 +K}~F5,."X9/7.tJSS5U:hE9XA$*uD\NdؙI)T3gWd8OFTX/+H=[*œĽ&)?Y .BBG0yFIܘ޾ ryw/%|L>t2d[^5F3d|[;\Qkcr M K[z 3dY1 gǍ㫰6*WHm7nٖoLӧ#(ګ֌59enɱ _0ɯ+VlO_m+3W~Yd? YyE[.Ej U߹\#&MKn$Y g'>m s]B.>k]kY|^Wvs-RD+M ߽5XyypxkkǏ˫7@V&_޳Z*\{fY"*S;\U1č6'ёR y2'9ˢ~d[lRf:YF8F}8$1v>x5#[ye Ǫ!,MeԶ3^T:cr}ǯe_FHFn9!SԷtZ5Da-i!'L4.Жb8fp"kJ,ll FBY6V\ԣŵ׼N-%t)AA࿠@IKNןz?fBΤ $X@A/O@#KN+H2 @hD+x~@2uaj^Xg+..VTT~ z^XO@"//#wk.U J \)XbLa $BU5~2V6ǧB~Zkggwf[8}aT=goqB'SZ:ߎ-#/㿌l3"zk~loF;4Y1-pEF$e4u*xbKdna 0["TgP>7]+| b3m.hVBCviB1M⊽TSYri!Kƕ֏{ė[g;4bsC$ĩLBBJn]̤h雏9dye=qkO6'$YujfD"*^ oyk'c#򿮺WNYmC~F^4˩tn~a e [_m1I?tzm !1j|-_.1M>x6!Y)@VJ෽5mgFmc!چOR5bW7'WR̶_uc&ENzAd޺yct®8{yf&+٦?I!쬗BwL{wgk(5Wnڑs={ĹalmtkC=ɳܖ)'1W1VZ@˭Bb 9Ti(g9~ѓK FVme{.y[D66"g3oZȃv}hݝFk)hpd漭$*FPՍ-J5.~wYsS9G!SLEA *Jgd$TSCNQWml AsA 3|i:`jYi%#52?|")RR4i)4~zWWKvC4ShR4):q ޗOc $!h7>NqgHiM hk joe]IAWWOFjN>!^N*?<-4T*mWaΐRVV+>/Sx$msJi!;a}uۡ-ۆ >lXWghBqrX9~ϹQ{|aF~/(Mtv> ͳ=F:ӼK}3xCZypǯW10ꤢ"]S`uˈ/i/4c~"GGTy OI.Sdəfjo|+k,|i 7 zΛʯs8-קb!k?Tt##[҅7:ӆ3/{`4؊ЂY,Zx#~:淜_Q\p޽ەTYjDD%LCdŷ<5z¥Z+vy, ܻWt>aB!2?2'oѭvjw hQu5X)!\o;wQa"lBCzr)W]~T !ki,:EQ6_Ґ)y_2ٮ QN`*;vSA24 ty9Y|Qf9Ϸ:;v f7X`gtA;H{[HG6[.12/Sƍ.!D$g,/k/]4q߬^}}}:c*vq{|ͲE&]\-f,$Fp 1:ħ{YZl DX!nd3$߭~cF8ɩҜ웱j9>!V GͮKOL:cp! Bsf+i9uOf߿OO#H|~1 ןdjCNI~,R#̵R#a``|n1˾.c8ú(*6,f S!I;QuRRU&D W. l.04cl89g.3 L>6̿¥ޖG["玲hU >GvqBgUqN}BO+ 1xaJt ~$;0ϕ-Ί!_z=1\(˽ZKliȤ [ދmA$r'N&yxR~ѥ$-kssǎX-1:zg6?2}v>eWPF*lG"vʗIE$Y'm!O))nr]fo2YȶnGkxY13OOVz),Zz2YEJRiMUm{WukSKMܓWvm!S$$es :n@~p8eA79!vzצAqƐVd$kmI&&<):Ó;Ҝub7bh3e?Q|H5حk~ytM6clJ ]6Z8 EVg>|ڬ9I]~7E$㫸28+"ʣ5߅ka~LiW}eW4>T!j6Yɉ %\Dr_o\;j|k<ㆎ.ZQg'sɭzӸ->vyo:(i0;,NCˊ.y.G}V{}236;C;kE(!D۠ω.Y&?8öq@޺G 0JfMմQ[nVm@5sbu!~~Ӷ,Qz.hBdIHK_3JX*̉U޽1+q22{"9yAm`ʘOL#Yz XFe $1GS<70`gf L DerPB3]/],|Ӛ >d=*m bŊcJH{9h投C^RDoگ֪m@5sbu! 0f-kVAi~P?˅k-[[[?~X^^^]]2}עVJF\4Qe4h濝᪊!nt/8r}<,'|,?g̔sןM*L9=G蓻$21N^fDcK5/LaqbXu!D[x"WWYXCUSv˂JV\ں|L._5l-'"?b^h7|yqZ}n-MqqKz`%L%F D)I|'\Y kkk᪀h$ukcE=+׼N-%4F|hF|h/0Ј!bIrS BיtU$+H24h$z ybI&VH2rbO/H.W]] lŊU_ hBBBan%=[ DeX&\YhUShXKNM'A+ +H24h` L@ 40CI&Vdb$+|",1\'vfoyId]mf{`rKy`o"r-q]ʹF_>cRgf֒/]y7[l;.Bě{iE`kߦ9GU Lvݾ˼zb?Ed8ox>W!D>;`6R6M{Nv~Kg,N!s9xseq0Y^6OfU޴rNԗ*QwGX8`sϔz/ȴOf4E!vvRCnld_/mP\cرMQUBW9ɛ(xsq۩G\I3پ_+| b3m.hVBCviB1M⊽TSYri!KƕE/vwdc3hĴݸ3mWR̶_uc&ENzAή Ԭi.k1 !?xyUVfO;#h[}#(42h'&10vn:={ʉsgսYw>氫 p":^:%0s۱ Q5ۈ-Bn "ѵ yrwQzZ Z#l-9o+ t*MFa)oޔ&So é44&E;1F3&ԲowK](0tTeXLWW4l+Yan7f4uH6ա1üWv֐SnԽk?8AV߻OݚXZ>z'K׷B~kMuu ^D/E]tÌ̷+i1tv>ܐ?j+{c%NT󁇈/Q OQЍG )5!LGW;M%f' )Vz&@Q4\i" ?X*٣ 4f·yBDu7Cl\rn>#0)c]]Y!}r`0A.>璛CkDQt9{=6Mtv>3=F:ӼK}3xCZypǯW10ꤢ"]S`uˈ/i/4c~"GQ9/$7mo 5]Wi[cQ~Ɩ?7nq5q&i ƌ_uܽ2[kgC\T0@`+RRE=WuvgRjүnrK`勜QB󛨴q-$c}KʖcHW|+{okDe#ʌQ-9jL̨}-xKU'~|Š%CALy*b%UDq֕xC??cH"p=6˴ yE=4ل'Sۻ= "SBY?Xtы#ʏm!Sd"]}uWA]zkI*;vSA24 ty9Y|Qf9Ϸ:;v f7X`g.H{[ƌpK{n9հ~lv}G>/=^VDr{zR Ɏ _h;z/2.]Gѷ{g Q5oϼʭ3Fc,nU삐5.,Ȃ6;eO D$3VR1 izM<'HݷΖd8I磊0ibs:tCӔ^$n[dETX%#pDWjAS O[ |%ƽ߲!aZGt2R8uAAhjQ^nDǴz.6{HCu9~;GJF8'н $e5V/ݐ./-!:DQ껰ƛϟX-#>G=WiI'#̡7}Vl4&٦}gWI(N3 se.J:iGw|gs4:蝷35s7#UoNa' lsWmTCtMMվ.NjB.hs!h(bɉ,/-jj?MQdJN!DYIYv arZV&##u:$͐E*݆LRks$Ők+x5p#yo֜үs+(4 dQ0 B|DVe˾olxbR]rV m 9)|0B])5%iFl6:!+=5_{hEqA%BwMZNةy$w_pK+)9˗bBҿ)jxe Ȋ47;;FS5x ϡ$ ] v )* :bi~C%|^Ȃ+8ovޝִ(FdNVy>yw/%EKo>WÉ+[(Sz)8 qߊU}Eq;8^ *"*(EЈ{b, ^ػahX A"""Ezp;{jܙ:;;3;*@@gkAaz^ mY|^}a,/7=﷘pAӹ3y<=Ks(!pqjz|^MEI޵8|ӏ#o$UռtFB)ab4"*C xwͷ4$ݍ=z❟?-"6Q˦G9d7⤄#t8[؀0"#&IVӶmYavqwڻچ;B\(Τ;saJNYuGo6mbrh]4/5DO}'Ο s&&o;s&^rԭLUEoKKפcl=e͞&]z#pֆ۫5֔DfCKaƽ=~\]D˟?No ~ y#Nƀ] |_<}.v?ye~s>ː.Y6JfU5RÍ:=Z[.>RB g+Ce"XTn|Fv־Oe&:5Cr'}/ormnDii)3hp%%%MM͖<] UzX2nuqOQ[#cqFmr?lpl#`!3#7yݬW4ۆW'|{ttہՄB7K4Ta%xj!:zxUl uNذqe™gSv8jߡad7]\C(ُgGcPսӯ:),,tKmybo50 Dyb; Dɷ2p Pfh$qgmң {$>(b+NЈA@#>h/0i$i4ȩ8ASO E3b4 H=~<I&V@wh hD-'!V@ A֫DI #a=>{X h1s|fna-?ÀFwh$4z@A@ 4z@A@ 4z@A@ 4z@A@ 4z@A@ 4z@A@ 4z@A@G2Zvpp rsscf G#m+af}l@ H=h ԃRH=唖VYYY\\\QWWWVV611a.@z `h8*sg޺>#, Z8IKK#֖3 zȇH %h$GFg 2w. tȩp ***C@J^/i$2f[8).."[B$ M1o5żZǏ===W22/Cb BR0("{ %%)LQQܜ 1p\CSM),y*5} DTp44Q[)ӕ{tO$|{q![,r \ DÆ+[g` lOG\ ;4|Xslskҭ$WWe$WUsכTUU8+!E0ygWk`K !UF9~ $㮴%`{1KVQSEVe$))ne#ym,b\X MDA蘆$ k.Vv:bV/b|36ddd47sOߠMq|1oto.30GO{\.N3:SrT%jN_˪1Jv15;4ܺVJsɁ6m>i͢Z [ÇoM3@(ث5VJ!%\_Uyn"w] H #&`d̳Z^fI,<PF]:~imc;::bTq1ƉoJ|tv/y"Ye>%!E4sH̖7ahFV=an4),Ǩ],6$Kxbrri8sY QR r"w;l1`\[$ E}T*qޝj_{q$34FJ;j#>_׭Iqs/=5%%uþ+ܕ0 i.^VƖi>͋IC'|4e fnY1Iq8]ŞA:ssS;= $c[T@5"vDa(};ܨ)?[0`m ӓ ';cc'2أ \\ym=BJ3rim\d*B1r' u=vտظgfԥrU 1B̛' 0375l΁Rf;g074wȥ{j93hǜ1|V2VHKAѶgNu0RW;)$":M@f_>ܘnxm!~ Lf/;on&N%͏z%Gsoڰ`οw`L_MG;îm(+#]ӏ$"yX=5!M=a><(QںxDF6 .kZtj}ϯDPucZvDpD`}f9!Դ$ۉ nayqYU9?):XaOUZMRuNyY@s'6ҽtPLrazNZ.rZX!͑凾2,Cst45X{Z^mw2.mxm 멭k}y޳Cv1]rgAښZvkoa{}h{UZ[Z~e  RRό.i"Y2 {ZULaG{f;즩g5.zFƘʽHG[G׸|LHᆨ* xҀ17;t&ZF^Aww!??„ ;w`…̢uQWo%=&g^w(k~; =E~{iK.~5߷aEoon3#w򧜌mJYʾ:xgho& 7~lOR-tiګ;t#. WP`w@bR%iAsEn7ó~V$رtsLzR꼅.?$B>p?t'uZ4<8hLzف3=C캭_J bT"PɃ!= =MQ7G 7ZTϭii#sW<q4K[7^mr6K-]|E%kNqI!+Rja[7>ێTz,?{6!rd O|뜱.׆0>[gosʊ?twL#j|f'{߄Y5~ ?[o3&[[i?{(P{7=zW`z8Y6ۚN9Eac689_di[gAvV_nN?tJK6ޚ#04 ieSξI{ɒovSEW6m\[y|fτG?cnB>*)RBK(i /YΠ>Z^U4@]vkޗRrcZ%)G돴 }kɮ6sdMT{S7Aٕ~{jbW]`>ml+1. ەM 9q+}^͡B39 Ջ ]VR&mM;i-dlg5cu1ҠKa:'%)p T"Px9] D(ַb!'ڹ B}o E+ܖ4U"yl6+\oU[$H>t8VkP#s{޾w}C&O =c ,X5A-s0 (joSrLT5~8ֲW\2EUzfqțG CVgLjs|pyU@vzԉ*-)EjjHxF^Uoz),-eK]]{%X2tUzϾJzw}r.G}McVpaB(~m҅i@]tt enk38D>¯AwIU.0-`NEujcg7sVc~lͰl0YPOgWx:Lo-O]L'.~B;-`b (ͅeY&:1ohJan2rWՔÛ=U/Qv=LlSPlYoIC>݈ l.ba')p?`y_(]ePPP Xn8Ⱥ9ܯJ<|]VvSUbD"Cc=:/%g`LSO n1F",,5mLN@wDH3LC} J s#b2\WPgl ]\PXKנUXPֲe"T !BACM>ฐ*j*uENkA{)Bpd 0VįaqB6:i/WE4TrdYr >BHt}aJ͙[(b^"עJK9]FڶFfĶ@%dI^Fw/ј.}3 &`mϨM"pI1xtc[z&)cX.Xq偙&ν}YꍶNnAl-oUE ;Dž((ۍg髕*6q90^<Ͼļyuс_ woڇ,^U9%TmgS;=Ќ9@w6+[_GaX;5yIz'&܎z<:]}1T?;ΟGNQq'8r2܆pU) ,-{Y{I\K4SȎ9]YQA  QyQ.vxU,#b{X[8z酓7'/z8,le7̯n$Bi}3gδ;t萷w&]Uc¢+x)Gf |3#HumM"+B7=舿M#R>}C^y9NISK]NVIʲ).fઊ*ZjE%ۡKJ E-,[ ZyNNc@f4TZ4RUS o|fԨkdE`*h}6:M!#5]YQ/\cixY]ޓH! \4+ۨHN'6ﰆ=y$ᓘK,㠏K̖ kQTrB$5~i*f]O5fiAN7]]]]n2 ܬ'J4[GE%E3F~eR%3ݴ&b A/2&-lhuLӼb Y~ 'sTMS%F ^$̭LO0w|~z, tETଟWW=)8ĔgoteE!IrϞ=wxyǫ+K =;KDUWUw35Rf#+j#]?WCTuw?]i~yϪ0;n{O&UTiB1B3h[o;O'W܂n&{Yrb#U#+y{oLF5zxb! Ɨa @۴Q~=V&cƛ=>n~I=\ϡ-.v=gp({?0/dUcɈ4={0Bu[4x/#Նky}Xy IV+uuhOzݴ5<듫7Z?Q[#3BTvf?ȦյT ]pqHJ0 \k!E9 }3y|{jA~Zׂk5OR4Ox~W1K=q?'7ȶo4n1[DhDM[=8pʺ3jhȊ~yYI5<ط?Bg츞DA̍Z(iuaH4tz=r՗?I mCBļt.HBXYE8&<=$jȏܱ;\w%`AF4]]Y-gfԕSSx̖mb5f&:l.,VbȾ)WfbUGy/uhOD4G^Na2)^J*0[Q]Kb=@{n=]/Ncl6QCcս[Oy-ۢ899XXXtxIEfZZּ񘿃,v1)+',Su9$4=vU8ؠݤ;-3zf N Lzsg(" eͧw9=aw%OAH/9v1N):ڋwքe0xY/'// 9M_-67:29Gm{Gz٫l#6{8xb:y\g3F&vcsi-H|厌s>s+s'OJ6;e[DtֹWt߽~ Kg–-?-a[+~5e+ĮҚ׶6Gf*oj[0HcdǸ$ 팲4Y5Pv?zXF^VN,jۈ6s_]`V𡃇+[i hwRkކsS= <@JW^0W53aW/ĝ4:bc.$v%V$=ܳҤy`־SkLv45e61[.D4zhlZr>XRӔSo{TT1^|߭l-;ջ7N2C#=W!EL ꬗jd2ZX[jjԣCݳҜz֡mO`$I޺uKeC 5_+!x=TQeè~HD?}>*1W=|EONvmAM_z8mh0h+\txKLTW^QJZ]iN{]4Mx F;XF{{{f?C7uόd?:#+g@ ch=܉RsYN@Ey9/2BL>Ԕ]Ǯ.K̩muX"Ff\ˤ{#쭇׎nzRusA鷇;S3:G\ua1qgf1^nkhjpu {3c? В 3UUPcr!TUᑲBu-#}Y Eas5Q׫dhRSSEz]1st^!Zdadд#q{?w\]4_igChBHe,l3//)W0sqpi/[_%7ʂxN&̷agAvZ~ƏM'T[=ʝfD6"ե7Hc2 ťzi,Vhfffb?Κ&ܢ&XE3y\]2==wa4*ypďfM#'pIıKӇ~ha)j'1W*f>lDک$c $'2f(UhilbL?wiUAWQtJVvsc*DIne.$h,'DQNasv-m'UȰdkG}$-o"tkb\XF=Iaaa&!6OH"Yw$iW]xrxs֊+yN Ic\VVX=@04AVvb! >D"ݡfZ] Ф544XXX cpLMM&/^e1|Fi-t\ZM)))TUUE.Ch&V@ $RH=h ԃRH=h ԃRTX "#DIENDB`DataLab-1.0.2/doc/images/tutorials/blobs/13.png000066400000000000000000012365211511411446000211030ustar00rootroot00000000000000PNG  IHDRV,R>sRGBgAMA a pHYs(JtEXtSoftwarePaint.NET 5.1.9ln>eXIfII*JR(1ZijvvPaint.NET 5.1.90230R980100+!'ReB/8K3%Wpowoۤs\s ~g+  Z$Äz?Hۨl|-TZ\o!vG*]hҏz~~ e&8Ft6k-±SZmanr>㺃<p], +sRRL$%V.yjIU{{UF+\:lVQk/_m?{񨅵I}[~`®95]~_{Y,ʷS}s@?>o}}XMrȋk^l]vݶ׫+ک;rbBR6?ޘCn|ak ^{w;JN*_>FaN_jmH它?@.Ϝܻ>~Gۦ ϣիPNǾS&SoGZRbB=ZJRg>ٽ~+$Wk|ϗιX¤۷sfu9Q=cWCZUM?8jڤ}!u!e-,gFIɱ뻑KN/_˨z(gjJ}dQfe\j/=RG׶r=8aHבԂ  72GK*P%/ tg?-G,{9n鴝R>!?ܼk׶V΢ :r*#P:wsDta֚U%Yw#/iXw}Fs٩Ο]bzvz)I\rG n^d= jޓv7zJ|b+{Wܵcʥ}#K+ȩ}3>8fv&h'%7ez=>q_>P7cx+B*TB[voo:qr۷]O2.ʘ=w3z|[?><[8~`cZFseZO-]6۞y}@?gz_kݪwwtRd߆չ&-ZaU~{rF:~ѡ?7xM[ ܷځ_~9ӾO_HC8y讅b)vmW&ťe׆\G/>`._!w<xܻg9w(ד%H}eoV7m2:>u@~ޝSC8VLfw/:?b o_ KٽNUbJ}þ˞8S̙umY9{ @YQ|>r֘ZW.!)Ԕ+Tj^mtsyf Rye7w?4GK_oQ)b?߿F$Խ XB[Q]ןjȠmyݬի_~mՏ׳/AA91]ZzիW/wt [Ϝ]0ujjjjjj3F;+&+xօ_.rr2edr惹.~򅄆\YHX'+Yggf ,,2pצȀ,~$eaEQ+emۚ׭QVOt8.;xօ#/.%r9¹ +OxnR%'~{q>u}kv?sָ!s 9Q q=r\btAFʳg@s%'[jVu盲ϙ](>xVFNHlLa%EǕt{Y4uu]0L{aAbhR$ On]fZՑ7֢oׂٿ|[gv ܠj~{TIiq+^|ER[X6rg~[z'-z&WYr#c Lq%$_p_|,;Uz<#gw61nuhfݱ~w[57oLۺnG7_ZMBySAAU y1[Xl\\\\\\lXTLtThǾ? -i]:P\\l]V]Xs.=+\do3;3y mڪمsw^jUuKXV)Q @Ѻy9 J<.ʬ:5@?{q8JIKQuCPL^{][kTmC,9£Ξ-t)2as6:⍚[;.DFEE[g"B3N->HL;y12,9)Xdӡf9px.:ΙG榟w+PƼѰjժUk rֵ ^A?8q+:}|ݻM}24{/WO,{m6:rc/^VFh +W;h2ɺ#Gq3d9Wx ߹YW^?]NѧOS笙1@j.YxT9 `nЬU?85zi_ɚ4:**wԽŘWAjA5S+W\zM=V-zs|>E^T[LvR;^18,wg`5xh>7Cziϓ-/T{}/=9}9|dg.څUr.2%)w9]*hgN^PضjN?vY_ Ur[u\z=[Tglm GKHtM?f)-`ބOzގ[{0N;5Нl=-1)tmOw`TĮ眥 Z~mɹgOΙ6|k6Uu_]$i,^3yfI)u{|_zQWԚ_Wd H] ʤ|o ^ͼu6'l*R-9|͟|b=#UO >͉VwaX~]*ZpzUGTM+n܆MIR6|ӅkoXV:1o]AA5gʮJ9b'ڵzbb:}ReG?/{QRΑ2q1ӲCۆ-LhS˿:?t}ҦbRrǷw_sY%sXoϔ fzyyM{;sG+ݜxz*16_^hZ)u9TɍmgWʖV|p]zyfG;ji~𘙽$UhԪbTud䄔iz^ HI*W^ƿϯp揳>5JK7HJsﯱO}7 #{7ed '&ʲt^rRm<ҡFrIջO2?К\mgV[6^ŔOoޣI&%ҏ>!>PL5=>cUF|u{=274- W}{#qa,*'%%7Ż_ZZ뭏lѡ60Z<Ũ)WCrʐpa=69зSGĈn8*t&5;~1@XJj8-5hVS NmV۬23&( p˗׭[y(?95cSv zP_.Hśp:g 6,&8YAA 7P..$+ Ÿrw.[ll]jxX=<ۍp}Fsn%P/z:kqz  53r $+ ŸOML 5rO6֤ߊu+w6x>1WԖqVBf#7~)uA\俞  pDmRAAAPAAAGˣg   |MOFt)>aÆ&M G)((_ +V_   7-k9r1V~}uVHNN_   782LKKs\h\pm۶˄?ի?WAAnNddiZ||<""TΜ9s޽{/$ӧOС\A*袢  044B 9/Z*q1"ZjwL̘1CD¿̑#Go۶ oŠ־#Q#+r ŸgW?? BAC*>,k^Cdq͛kqf͚iiӦf͚jLyMZ⮌PQڵk[r :"2}oުU+hժU[nӃ{~;+Ky=W6w~Tc o :) Ą]/X23gB2y 6ooYf;Q:Q/"Vku}H);kHzYGsxoחO-SB{zPA=~([2>e̟ۡK%ƚV.}٧f>SV.-5DiVF9aфp[l就 9Б} 5W~VhG49woMթV~Ž/NIbOGUoӶnr U}iqzᗑ~f =VHT/_]9%oQ-)>j~oʸJ ޷i;Oƈ^ CF=]zg?翍Pf]?w锝7O[܆wD7u >x_o#¿w-U5vrSo;ʽ=J;&6:E k',uyCg nN.3o;|x×}

    1e焑]l}~*~tUT({ϻs'w|̫Cfwi3>|^i64lVS.vAAFd\żDQa5DEm2:v:;7jrZժԯ]#nԺ4ۤANU*={no#YN^~)d`5{5xSO/7^_S^~VA(AQ~kDga# h!Ci/*5"11#ĘȖ=Z=^'*1[^ھa׍ՇkBKݓ"h;̒yjq^v4 tgS7z3fmڷ[\0wєy_#HCmj,qO5dPuԼMnV\| w+Kia⡠_XxmuGjTX.m[vkh$Ml؞TLZy*3Uk[XEyF4DlG?+0%3kR$%MZesϬ~cLLmftŕ?_ݵ˛o?!33Q+`a =<T'?ѻu5jծWG \n-Gf3rmڸ{L>G_gmv֥>3u.G:4w\Y Xj7m]Bơm p#)ޒJ~ /[vM?(/?j1 uQqvlYqR&%ZEWPza?!7`u^'U~`Aҽ+f]5W⻙+}@Inou _O:O8VxfT УMGMn/9EРȚ}>vn'&E4 f^}^ed c;TO^;Hsh[jĆ&xS^IMd$Ⱥ|p ^Z)&48$Vgu~:7oTRJӍܤvzK )P *\1YoDhHHDxxȈpsr:JI25g0]Խ_<'f @__ys)7dZhk ls>3C6/ð;ɻU !V l ׺wGA^[(ꕴuҩcQXh59"C%!TVʺuu:,9"o4>@1lwON'իZf/|1[({*cf^Zz~w`+lﵥȻDɲ%fwvދw_Ru; dCUޣEJ+4%Fv1ӑM:o>ާi&EJj t'O~8}9%t^|] _.vK #}rU_<ُ7@*}ߝ]G:b imKPN:~dǡ[&ⱷ{5J:{^8rwL~Ugry,Gֲ kw-5",L ut\c0r}U4RRzvP_6]>^<^t޽$fb]؛dÍ0e9dpmߟ̒tjeՃOA( J !#"D,}T5DRQOtwF;Ty}JW{ ,kmںz?G| 'ʜ'NٹVl[d@m?e{N;qpے)t0Z ^~!skMꎘ`@~ot(#{tPM\Piw+?ls3F* 4䡌ܗ}͒~4o<^f.\bvߠ g^jx3& 3UQqsG?pމ k&js)5w M[ 6~khl=c҆ONWVjU>7io٫]03k |uIԱcy c ^w-O2|n0BfUyp 'W8d얛~IM qU^ԍD@D(MHe0}JII* )p:%Gv#oTpLT^zz}{ ( ~NefT0(ͣ]V)Tbw 3,081I|>ϝ>3j~}We3A) ^nv:ԫ'__}A^Cd\Hq𧷧oӹ) PQaWk fL9r$r8Wg۶- {y6!ĥ? *)YT\, (R,Tr{:6_A&9Z*W)'-[=$){đwMWAær:]Fc#\^m7o޼yV'*ʫsBr'ҒOGiFaf7DliQluoV?@Dկ:xc'}( OgDDN@D` ]{ 6K{QQQAf$"}'|cGytibfLcTlL_m+<'Oͼ?W.Z ¿B'NpM/{8##_gϦw4oWBZ='jxk(A? 9MlӬ]^s%ST[8v)b!6$/įDFoݲaɶȰ Z۷nYdcsa-_zs/{_/|򷆅`mܢG?q|Gl AAvkUUvE˗ݴ|~c.ddXfu}̆'ҫ׮r =|.I'~)G'ɟՐ% aLogaQ =]bi~w/^@sۻl,ȐU?ٮYMXu.8ǒߦq碗Zۍy{ꥶx&J}M15]ZwK zuֻV O M{~70W٨~ kRԺeJӿ|䅶IQZA(*WԬb%ࠠ_AU*W*  $pM6-:f/|R}j>aEQԩ_KRsݴ۷l֧{({ė?jNVouG3՟yC<ڜzD^m1fvr.[hOj͟`/}yqAXlhX&a[&3[oۥCJ+^hp)_lUܷ^xwSN Nin~)X%$iŊz_pSs pfΜ١Cp3[d-yY_>++͛/XʏFHHAAn4wdkΗ=-gE]ZTk g?gwSi"Ce}m/mߋ{o"2},YҹsGYYY^vv65*22r…W~4Dd( 7jĕa!V`YC9|'6U͍vpAs6S aDbUb"*vovSoUT),񰰰AAVfy, ]Zx@ѿ7h!e{frr H8W[8(3ٳO2k֬+ Fᦶdɒ;`T( ŋh2CAAVfG?]XmlP:rѿpTF!!"<44  12Xf- M> OkAR߿|߾}|AA eM` aCKM"b,ׯI:6te\R%6  lPܥEeR~%F㲕?cn+I֭[w \DD p+sdQXSGNmCL_^"(u- Wh`JEPKߤt ̑a\,5j7$mw>SWwpV"Ո=[RI]6.]h pj߾ A&UȰbyX୍MV*7ֹǷ\ݳiR[ұQlns)36Ros#8%{|Ҟe{w./,>W,Dhİ谸bCԎ -hǛr.f.ҎRc(͸>V9,&/()e 3e?x xs/:[ *{;M)S'{sUR5Tt飬LzQOw`zonmAAX;ߟɽ%7?C_1;#`-/M2ܶ:o?iww L?yt 9viX+ɋ6?g8{d!?{rF:ѫ3SWS_S,uy >vRo^];_4hРDo|d"@H0جnށ}|8  iw^5|.Uӧ}>_JJK:xމo[ٸFCӿw[ڶW Ο>g^Avjl| GVX+V[dXB=Ȏyh[so< NJ Q|w,p!Gpr!KE}jFO]Qƿ#fޤeHKpO"w'[MU7oP>ڽo8M'Z"*nܲy9FgOfwy 6ind8o-_.J!~{ly#"w5"ǒr,ZJ؀93.H_nbm?>UxڮumEzCk#jդNr-8o#Չ|5T$1܊rw'fx {g-LwyS'*[j #9r)Qf9{ŘT4q&̞_Uf6 %㿥<\H׼i؄֏J5 ]5f~c% vC͑-_UsoDoѢ~@KBxƔC,I5hѠbb:>`T aq)5{|Gw sxԖjUtKDsW=8RAVUG;Ip33ZjjM]UtW 7"C˥BW~#}i׬6Ɲ{tk}įo{P=Uk5FG?nVY']c:,-ٞ-tJH;:W3OQ+@D wP.<{R73*U}Z%""FDoۻ|ΉȳSxw9'vV[R@DU#+?E-ܭc ^٫EVP1qȹTkPə|ձD>w$PA['WfD|}=|fs"*Xd-SĽ \GW""q|>?^DzW]Cl\͉H=5J y- s2ڹyCS,Unѥ4h /eVUbw'>he8(+Do%DD؇xrbjޱЉg~ljhUW3vtys3 c②~fCO~5,Y:O$YkGD>u.5 .]x@32u""NDwpW}%2͇GuYuùP?q"m9n8S46s65j/l^E/Oc3uJ7i ^]0evnj{RJ`(WSlZ{yH̜q f0U oTp=n6VXe3A{v˾DU A]rй?-]<"@N}#". RBѝvqǜ\RJG^=Ңoݻtӎ\N7X̢jE@njT-V+徼v]\bh|}D ˈsNSƎФDiI?|=Rw7+<;){n>r.ϙwfQ;z)ԣuCZh0w=0C6gw"}nf!rBG4mʼ,uOVfUn5<-"?9_+s_-“R'U>4}X*ԯxs=o[֕r֭9p[[3T|͎!/j<'xg9pιv&𫾷w"C-^ӿW$ZٳgϞϹRHpPվ:?VMR͜)_h𤟦רV%$*Y= \p*3ml 0#QjE FԬ}xAM?3NuTns޴~9~,oFAAoC%.b#h 1k\|$v=TpyVv5)Ǐepn{j6e 2Nmuoߤs9R|bň~iR(x+$I] fI q[֢-=p0O^5/jR'lN=AIի^;ՂJu|adXS[&GقOܦlvʶeĸw!lrL¥;n!Pv¡X\ډ#i:?v^ZjQbYRj^y=+kYV_toYJ?~QQ1ܙs~|UJ Zwzm|s@-K%TN.iI3sgq 5w=06z>_n㑍p+{P<,KX,7Mm8>sG>ҽCG>ꑧ^H?ag|yƩW~Flc bRx#n#pxl?QY[ =΂^%1s[ ׂ23oyvᄐ/>濽p#CfJCдbyw]$IR(k%K㽽bɹbfb eF+4Ͼ*Z %IHm{ޑ- +GfMUҡ XHX\ !/0/--h?3i0>)A% 3'=gpkbܼSf=Ӹg"Z~CBJx+Xl<zW0If4Ts}\M i6L{c`#%| O@Ff+~6xs/djw_SZM~>~Bc}22y>'9.>HU eh0$8QAH[8W߸בÇgx֞:Ͽ{HdCmj8/poYC^ÈQXt͝a 緂~xtgش(,-10>\mQTٽ%ĖTzUk / sljV^fys㶋"(wƃQ\~m[摬F_^2rSq!-;w(B_#`] ;)WTj'ߙr']\-$@I@9÷veß}۩35IR~xoΓ?x+6:K`ѡNޮ3@R҅{PfUYJb?u^F" \B9%?3YG£2r\TpS Z1ӏ8'<=fZ nV$=n տSqW§m}KK˃#\쁇| @S[g}z>a+_|UpX ,^'<u?2A-:ֵ[J'׾oxk嘛|gz 0v{t\{x8@ { ۽rŊ+VX){ÚAm:6(ʔ,;piGٝwnk}/;AƤ90Ea{HLJVƀQSdܓ}lO~Yƫ+K{LҼ#:8w~ڥH*$M3~ sv~39k s+|s.gl;K D`qi~]؉iYn} ߽n&9o}j/f7>b2=7b/=g-@iЫ闷>U}(pG-8]G[#Yk~wOoL]OpGFk]z<^׫r= Qzi_-OR1 ߔaj'iwS[u`d{Z>Чۖu/z nU7K[\Kg &W1kl,.fZC+~Cn WhȠo}glO?>JA^4KuOkǂ.Ֆ-UxpϾRɞk,Diڞ|YVg/OG?vn^)' ?1oڰ7(z[(-($04Mu_YVrlyCȋbڼW+-1ˆXBBaZ3gRSEפfۇ=ڴN6?w# `YU>[Ou`;j۬ѵ{:@{#+Q;"8$(я_:+}mv5(>;3޸^\5 $0|rG+z|WbcW 8\|yӦM/^Yjӥ,* GϞ=.]ڹs碥:oɊ [<^_5:jbXdYs8ڰy^:]:M%E?zpȫOI ͇ };HA;5c^{Zy׺'J@[>wU홉 ķ+_v^qgĨGDSCA.\ؾ}YfuoQHHߜMϽ:ǀ-,dC2yhCT'j]oq;I9qDF%$]>η/SΠUBJ.q \%1JX<ܷwUB _CW野&19#iS5kqo/5lb%ysΜ:}!+'Ge=v!g(_))Xзlx3]%׊;:rXjrQ"g#,RZCcOؠMw+ Qdzr;t0] NR!ܲ?-cTkD\kQT\[R\@ ^f뎅֟:{\\ :{||lM7sJ3NqU媂 :2ݚtHH?wbcDYPU PPw]Vw~'߼j\-Oԫ&W=]ώ2JRdx;5 oL f"DAF":xeIԲi.JϮ_tBۆ1z]ckK~ARCdz'|g2N"2o3M゛A=Wz|SՙTgVkpsD`"bJr~oZw#EX(p,.)efjssg\:͞ H5¨~ Xu*Y9GV|zo<A/3>@~SW9udv=F222gg /JDE؋^axaq_ƫdW[Xt^zi>w7JKs}G od窔*[9톨Mںu뢥 hʕumҽYv?V|^^^_6>AJz6)}߻+Dev֋d, AcxE psis:uԩSofx-oLڮ.^?>?6z Gpॼ7 ps&Տ/Ztuaܦw wr+&U)n_ o+,W#Dd odD7=z=Qb,歷׍m5#?bla#E{1i_- \ Ị{vdXtrb9~S"blRlBԹ2xҢU'"##"W.*}"22jJo\T]mux}[w'o۪+>q}x}[ O"W.*}.3=ztAA?.IesG1{=cΕ~wS5CjM6/lC73h^h<7\Ky9yU kgəe#k8wo]wQ+ \vog|c!3\Oڤ7}ڮL# J.@rshC(BrGHxFcuJ 8 F"@ІNO x>7%Ȯ|.gskšT y1͙X I'< C>)`EGL/MJ׃\lF0yTbR2 /C$g\`\Xn μ&&-v ;H‹krI p(#g@݄rkzd QӉr8jļ s   : @Bn5bV@pyՂ| YP cn9t+1G!92Q*8H RQ͑M>bV8y=(̭P!f\=i2c>fG=IN 8$/AkC=]e 斀b%z%$3p9&}^R|$2O ďkhB]'ԁ1939spS8XV)(zFHfL&!8lFݎ<>`%YF.EK>nEN&S d1 8dqO ,H n.P7  xX%xV`^dN.pd dG=IٜkvjqK[$K[d2n* u KY;BR@pH@ fhI* -[e$ Ȅ(\RUB')!WNhSy&!y %HI&0jA \2_ .!a^ r K&)iҋ} \ǝxf_f +k׮SN՛ |v%kԫW/<</7Sɠhk<k>%&,\;^e숟l|PiwZrǔܫ% mVBwrʝoU@b )tr#8T&8Nw- `LL>nX\gz щ3kRxn,L)LrEHX)MHhF]%Isg` F@ (udX>W$[Q dZ2!JM+(P ӌ!q 3Ղ2|t\f/A#0̈́܌j䎒Fh&9K7q3D\ KqCGdDb^5`:JLA]%JA"X!s0-yC+LrݤdQ3 r36,}Ĉ0y4"1o8sAK@I:1/8Nb\L "nrI'pp# c@$ bl j`5@ jppɆ\pCR>79I#@FL'0/ؘOXQ'BI:/y.9H $ j%=$rI:Y.p,P0MAnFB H%1=U+fLr&! u9(U<$dA=9 &I 1X>T7 K`&81dB 4`6zIV1 A";ژ#99rK 1ƀdf$1H PRrA \D ,L.2c겄r%4b2p/t}VWɂCC̠3$l3PJ j*1"0!2oCLBPK}_߷Y[]YN_+3lc:'؛~VPv®㾝}; gm&2ZҬ'bYrGI,_ZL{Wh@3F4b]_4>j;UPw3`Ԏ_J?1{GIRH-j5|.''''܇#O;s{BrNe[۫ك _ Ƿ9sќ1с1q+E/bT,w.nHRNcVL]E@˦. ع_5øqBOB @#fhepKZ$y t+j$˕\n&D f 53!":܂Z LH&$цj4 Ȇ4`ܒ[8`2Rt G @#&T\֡0ԉ1 0-iLf=y$1NLB1$#P*Wk8 9Iw+ EO+L%@(yh̼I"W ZF|iz$P)ydO17#1C R\\Q"4'Igu-3)ͨP/@T[a8 R ӌ,1¼J8U$?}b`AMK+Nn7#W P:` ,ȳ)G7FkC5Z'HFRA䊓@YP7J9 \|GJt}foueB𪘥 @:Yٹ/'-.>8e5y>vWd6-o9Wz> -X1滋͌^ k6]=zӶРT?.{ZԟnyNǴ2Vc0?Xt{n_7vYpƋ?:-b1IbX,pק-]٠Ov}`*111?Swޑ;{hUk:aov,*z|eŁ~ҦRLL]xlrCyb^BQ (1 P% 95j*HPYQ^|>Tnbnb.D  Q @0F]A.#Ic@Ќ$#xdBnEP 7FX: hC.Y2_ Ȩ+m[Q+`gNU`..y($9j i!I4 UBt;K..NbTe@1ȸ u ^bnbVV-yH]|hcD2ofrZ"CZik7~mLNňm󬕶Fo=5r$n4'Z=Tѽ5ʧ?PW]͈5{^r~zן;?q}v3?2eҋi>~.؆o45z'l{YϤ)gg<Fv'?YOALvBo;}wk?{ϜXvŕӷW97 ˭_VZOwf Mec 947{vɾͿ|3me(&U)Ə pkE>Q5#\$H^b1Ŭ-v1/>BFHU@ J&iF#IK9ub`d,ݖe Є 0ՆXM.mhVG#"7nA͂LJ^4M>L b!"X/ip3X71 c@\欀tݝ&'$ p/IYjAt3 NŀEd5+yHNRΌ$#'lCnj+*1yNhAӁyAj@:dn*,2f+FFhʀDC EJnp PAR)Fe@/INR p-FS$ /!犏ІAJW|x 0$/əeFą>`ɂZ %1$7WɊa1H"B3r+rIH%,$ ɌdG݆܊Ba <P"M:0y-0 t$X$H!@3r9dv-7TuI r+1'HHu;j^b^`d p^}*Qi)Y [ߺ;~26Қul&/n3mcnnc*#"u\y̌UP:_2Dt,v{;vp:pv`v-z{_γzmHU>5 |><Ȯgd^5T56mIlӫadSzfݓIR.wI1|-NߔMfk%Xsc\(Plwv9ئ*UQǤ8>7:T*Ve /R?E5J1n8I!f6TLnA.Q͏eL gdsS&7*q1%F,[2UIAYFM48FF@+3fe\]FH@@ d1oSPe@.]LahCz) umNn6 \\Q3\0=ͨl-*urC@LU\H$$׉q@#ٽ$y;u3pK:`n䅑ттZHzF7 H#f<%WP3T4PFB 2HnhoLh;;E> |N 咋C a> JL%UF6R6+}+AЯk Q${^Ǥ6uJjVPQGd1ɞץBo^6Rd-8mA.I!I!'"f-CEYm\.'`U4׋g} qv7V,WwaVcl">hg6}*WpR$u!'4.vs2PA{}*Уf5k`A _)e6lfԍLgT`VQt@ A`̆c`U[3,]-T-!܂ dQdtĒMՌnvp\Z0MHf¼v)wOigt pMFq:9}v3ya,$IFF@ALF73nb"$TPE<29dbE 'W@( i`7r)A5)+k&$hs/o_Zw,ɐ}S`x = ZȋmW}+X^D[n!$5=4$+W;nAOVK dUSbO9zE ڣ*=Ӷ]O}pǩߩq̨I'9 ǧzjÇ~'  9{θ2ϝ9K97ATzMR?^Fȍz2$"cH:+jƈ 1v, +bf$ȊTuCL dѠ+׊Q=UtsH>b:!IdB0^.IH!L`;d&&VD+ h+ a90!jg )a̓y%CC(7:р9I&75Z5BD2Jt%$ 5 jF&-N8z{3-&XzO&ɟz0Z#EP2!2o"ho ܄09H\$gFH!GhFfDz@8ؙφ0rnv-Y*EyƃMٺE&'7l*ȭє|*᪛dȌFRtلz(sݢf%5u I'Ɛ$F$ȤPW |da$0 $#@j*y\${ 88H Hrl|\| C Cdt3<\]05}f.xH$/$]nq >b #M>^Ɍ\B&80' N,0+TS$fs/5z}foue9_^9CDu>Tm6޺6jcv^>݅͂܉QQ :e?onjn$[] oÙIoN?ֲ7LxQl;)'n6dkcL{n Gz=/M\+X[֝h]36Y;a$i'2;R5B W䮷UX:9~/Fg5%3%p*&U)ƍg . Ё,#ؙ|fFH&E1TB 9 t`qC,[$[Q3}I6z4z52 Ub 2#E%9K7*1I3!!$$@*:NRnvpN' d> e#Ir>ds9XQ<͹d2.Cs#pqX P#JF̸R"E&$$DRydC-FvTMJRa=%! @(spdS%Ɇ!tPaz]2$K,A.R\dt07 #H0`c 5[fs-ky BՄHrJȀ9pC$ aH y-6DcȆQZ-%IBfAՎ>+SMMHL b9CrW$q@^!PZP ` V8NxNaA͂܎z fe&}jPo@2P'tr=T#1 ` ."LY%PP`>1 όdG͊$InRٙ)yL{Hd! )@f%gCT4@s-H21tC_ԩS{ɲ㖎b'W?N<;))ۼS`Jw盭\^Q@woX6zTbpG$xg e_zn6*[y_{{@"ðCӇMc[wͫ°> [v x쫷/W=|Z^,IxsAnV CSt@'W6N Mȴ0¼qje$Q:C2Fˎ I͠055%٨7h `^&M,sM0eg F1&ЍbIu P#ba/uKn2p 29$!fmL%@1uU3 浠dG.B&okθ ucxtBN.;IV /Jr )S |3m1 7ɹF%,nrl14;121>^s$#FfLR. 8s%T 81G>$ 0ɝ.s@a,1O  Glnl|1ۄ! ɨs`FX"WkFRTe䁨FJ3>c|;I +"4j\f7I^5P7hr+PB!0=Dr@WI3"/IN^*J" i6ԝHFT́kc:`HF\x<Tub^"Cr>7H1t A#2alUa1"qPQ@cͨ3݂ZF gJ6GcD`@7c!q@/ y"8I6M Õ3pqQwsEB J`Et׬ rDrqS@NRC22c@:QK!0 eьE,G@fr@vkb5=zdF]ā5*w6+}gg~}_72GMoO>z&Oߟl KF;9lr[PFTJtƍsq$ D%IR8/IF"x+_3HRA}Č\J$NY 8XE2s&0r>R$$I`c"y(cgd4 4!*v33r3s/ћhad1.po, %pkW|Tb Ɋ UvSA}Q2$u@  ÙnqB&+1vT A%5NrrLPG5IܤC ;X8nB4#yb t JGRCLu`F[J36f FgE͂Q!裑PgK.Rx5J[P @X MR7gs Q% f d(&yCD?!ĐFHubR<Q.'(hD2:u,u@NFOaP汢&W@7.#xH,ͨ0ch@9\㊗Z.!gFI󞋣h hA43Rԛ^@V QbH&InCET $VMA2 dN(n$3gȍE7(#xP?{gYUe>熗*uu$dDQt3*(" f`1a ( "Y2cJ/pUT-IPx}wSuk p3tJ*J'KRe_%U|!m"SV_>2&@G̔$ڎF TH*$OJҔT3wWY'w>>fXk <</>##u>ro5>>>>>>55/Og~r[p^y{y,fO BB 9QT[t%ОF NeeZڔRocC/zwF0,!hp DjO)E͍9:5*Sr v JCڒTc .zJ+|**ʮD=5a iG _M/0<#HWmpO !΃F R&xS5UjJ'mEMIK)*\:ArJ0w9d7yJոHaҸ)ܠ+I:PŔ$m1-5}RBq5. I 4fj'$ 8! LMzVjJjSlOW:PdLҞZFͮjGo\ %M13QΙ0B{uI;BACTVT`IKG$L@ƒTQ#BCWW~YpF"THQQ@ hIP*YHs**Ur5.WU'^|PruDr rq_-kMB+O \jRr r\k>%,c4$Pw'mhYB!UPWH`Z+CҔ0>A1)6DK-IN?!7ǚ34&[lɖ[ڟ[nlmV}6j8(˲,:sOmt\dCv{dz,f1džuvZ\*<+4RS|<%I 'bD\!5yظB(9q_Y2 RO9 @ j7z^@K5 "BTZjvD ͔,O%q%qrTF>QY"f@vRbFGaf|~rt @K吢^*$JT"ҘZhK 85!CCo[@F)9K:ȨUI"7Đ\%Tz*Z&)V LFfA53.!-2n]3 WR͸)Qk&ejgJAI35=1}#h j69\VIR҈@] Ը`hQWFPCvĆGPi.W!45^]A 8p>e HW@ %Q۔$1-^MVD7؅ɘ\ rB^ڦ$-^ysL'%?Ϭ+y=ֽԵ| uo?_qfg] :U,f1Y3l Ou$$4WIܕ8bҖS,4"rDC ڞD&ohGkT9& *h_-)4%-1BMLFeDj@RR*GMV(UI aJLV87Mj 4~t C+bB)H 19r&NHŃ8&Ŵ%npIIs"7By+QGT*Hr4dӇVØ\-G93:XQBnQ . >Q0%k,0m&%ipQ*JmPRQfgz['H68j+}XM($FkBrcPJ93!o@3FJ&Cݯ+J!"WP%8o 5(2U[5Yܛ\#RsLM0M4=DB@)vB* ‚ڊBɃRȩ6*2p&TwS1iBUuJZ $6 0ĮTi* ҄ IW *)Δؖ$nO("QB@|E| 4@>aRcƼj WdjWPD`)\!}[5*LvgU35ʤꩩ3B НfJ^|-q gNZ n; g1Ybſ'Ҕ|jTi{L;%_!z 'db $DU8I9OȋTjJGDK|>&EDJP~ae;)P!dd[! FELTВP[OJzJĖ>-IB ٥S.#rk更ήBe ߔtL1P)'5*Lʘejc6(g<< CB\ yz+|PjDɒ0!!TJ̣+FL ,0vPpOmJj!rs7n|}T5%A%PHR MIJe>ʔTɇ84%nj:I]B>"UE rʡURvBL<(ЖF-I2TcjMIK!򾣑 ^B)&bCB4r* *h6Yp61@SbH4)Q&&gA~alH,T@ѱ-qGBM4JIB[CsLWʕ&6%qʫ[2- `H\s/t3r̤ .* Y\a eh(lr:ϵKEBWyIjCRY,t9l+S2y&kB2\!?.c`FCbdAĚ}3~͜4Yb, n%:piu)^ *&3*$!ρ;b;AX+48S'sI!'@8Fa8[KLm'%I 5]5CF8  Tw 0 *#ҎJKæTbCϯ i`H ~9'ѤO&|eMS"`DM-"6k|ODMIj\U opaW Ta,JpO&p TɄ^MLntihv{e ZqZghOmؓRyץ>3r"IPUG #"*MA[,")InD`I"uT(W29\h WrAeBiRFURb'%j@ \ P1jU.s1J<$D$F)̤U:ĒOȇLM8)$ ^DZ!a!WmilzRj}-8`.* ̃2 $f-EI59%a`J@v"A9&8.LjIKDH$ t%P^@B$@O}YH[q-Et]`zNi𸔓BM5Sj i*A @JsP;R6SۑIMJ PB*xW -d $Rs$͔ˈWMiSH EnBFh6C\qBoMi]MW?24J%f?j >.{ʓ8 BWco1iLR{jsٵdQL— 0u.TԘS)TҐSY2t))WHCOr57 p^!\gzM k\Bm[)= M5SɔҔ-C%񠎘HD@*uf{_>8vkhhůW61YQA!LYE'$f0 wM)D!?%ZSL ) T,B·`@}KUI4.D7 !4%)tIH*BC*J52KД-IOكJL'+XEɁR*NBUJUrN1%vW'KU&D"{&KƈD` $J50)I&%CS*S*DHI,I&!I<8< 5򣦻|\xJvju%TIj.2cW:u$\lDA XVH沍IK AocRr*S!DCHHꌘH+5Y6 51 p y͔e5zKM| 0TĄkJ\*D)$%xB`:YLbHC@B)uP=8D$P)YhO I'&Ա=)FLJeV*wՄ($xE 0iJ6y\`@]55 heh% IBmSBUdHLnp` =QKM/^1j:LE Ӕ%IIrfj ej}&0@\#L`B )%-]SSRlU#(u]D[|Q] s.&]?x/U85ιKħ Yguo>|ȃ>/:h9|g}{ޙkTo}k[Ʒʍw{|L傋~Sa} 75+~#_mϛλmz dZ ]*˒_~m~/YDnc?o{}~|pw#m;;juV7x[̭ kZuo~OyC'I\_y57|?m4样k6sY_9O&5[>:&"";/"7f񏎛o.z|⢋/g”U/Sח/| KBA J@(EqI}+ rV!_bBw#gH.C\,&i4%U9SRKOyH ahW4Pܐjj31BIAW}ܕ#I\咀$ܯQ>"jJ4)qK0mGMO{5 .jU %8tQKl1Y`V |x6)NEy I * L+TP~%=5^@@kSjJ (D,̄ĖFs1EBGsIL5Th4!e1(j !Ĥ *x&NJqaIeHp>j:zj3FeJ&%){ʹ(8r>]^8-;p3)(6 ][/\|= O{rAcQhv՛ڙy{eX. /='~MսyKϸP^}zߝ}BX/~ٿ龻/??z}ՕhC}6;D}~/=£v7G2D׼>~صWw z@E: oخۇ?^2;FZ\{^_=Ua|w=p˅׮G ^9O&Χ^z=}vzO#xTծgƻߍ<-{c|[w\,V /N=`ެpL73`$*aMN>&b TDU yr#qO훅@I*5 -iGtTt4^]6#"6ŌKӨj#00*F%(䭧$BPU - ZR2%,!)A]E$F*O ДpJ~i7HIg mIжT$*]#خDLJ25 ( 5=JCp9(W!m튩 M) ^5*JW-A i'mBb!ҘDxRMM'ČI2C^٩`*A]eB\kM>yDB@T!@-I`DbtJ߯b{eK" "JڎICk1uFA bh*9&,2_騩$j1~}|Y |փ #X)iGBMhĘ ` JKO!hGLSD"kӨ-IJ.&xRSd§S !ӫQJ\X= 4LI 4$Lǁ)+sCP!W\h &IAG 'QF@!&{\&$1i9 O|5S3PkĞf^jM 5̗Dk쪏>~fv/~.ZohKjO:nlK>Z'Wm64g. :obg?pW(>~统5?il~ +߻wFns{+ow|?ϻ،inhxhѮҟ;X]owjmw&8yק^[>.GI2uyȢ_'ܟ+}ƾ[Ԥ|]6T6<'z7w_c_ϛyPy}O(fN~{?wt͞wh+o*K{[1tor×`䍇>mE6yVw]u#wyw޲GFoa:CT_ w~o>Rn7Pmx#>snYlύ4Fs8~[v?;dWo1b7a_1 }}6czf} {m0<<vI{Orֵf{7Vۓoxd~^?+VrrWÚGu&޳ˢ+ZzgzCۿYV8I4M6I\}л^魿n]yiP䭷;J,qpuX{y89RV[,4,%iN&PW̤Tr5 N)Sӕ5vʢJ4P`I*p$]jj&$ZӐB^>;dhD:Dz2l\^P&g ΂L >7uΫT៤&OwLJFMY-q[!hOd\ָS;e >SS('.K 1m%H鈦H[m[rȖa 5#\5%)KghDehCd IA=&|A^yBҮF!5T $&W Ugz#[~s@C53jk7VaZV!co也8~Uj5$'>eenWpNޗee$1wǍv<o3xףΐ]?4߷KN|n:uljo?m71oG hto6oč7rw_q;mygo` q8GZ_y}#?teO_&Ɨo:a\beoϼlty=r7|ů߭>e:}o/[ו6v[os}j v[iKm]mVoy8jrąa."hȅ,7B0ʕ rGթN)4 "R?:ѴqǤ @AFV``BL Rr2e@TP3p锝rDF%]!`+ejE)4B-ђЕTK*QꔽS.AGXz !Zj<31! PC"]SJIj\uDdjWWYLɇ0BD@%hCKxШu.v)<u/20Ayj W.҄]z>%_!IG*S*! '"h4.QG" NL7'IXaK "IB>e(؆LmKPxli(RU U@=U*m@3Kt4u*Ph &3%OPͫ@+*#BDa7QΪ\V׸"e$&D҄D]QTC<ƄH[e%: m'"iFeDBǃ!T' ioj<&dx}C.SӒ$P$HoC(**mm1 ԹHIRr _kFYe6-0vb%N'4[R̹9;vm7|۾|¦46 6Xhնd1 F}wlo߿.|mf湵d5UNj:tTkAPV;]' KYy gX!o{^s z⻏h] |}vU5Lu#ajN~&3둇lx۟o{w~Wq'^hxg>e~NC6ZܣS|{mذnwvk?UvGw<TwEjZչ+`zjs5U.,\mSZcUQ_NlC-+WSWeO@WLɅ̔8& 9%5r $!+Yh 9K-Z0\^hz5*8;!PPJp^aO1aBh\$\5.CfʘTm1* 1oR`tHf1P*Ki ROϮڎ-Izʥ"Xھt6Tm< zP歐48شz+}׹, !ALnD#&^IAd 5L:2x:#W"heJC %||\L 1=ЙUĞf^jM 5pE\p!69|Q!?@WlGM'5GnfU5n ":5Hdjm2kjj֙f>tP׸V>93VOh\p37>9벱9sGoOČ: %i\AX2 YЊ7<:/,JӤ }{ln3ߕNRx`_AEE^@V.^oa%L4 rY3v뭷z뭷ۮFMչs>0<:Nogpa|<+s^W^ͻ l7$E);'\.>k;xdu)=2l%47]WMozҥK_N8[օ^x_~a?FU)|X\hO9RA+ii,~<6@ Ü1Wjyb]L[Q0ZY`MAx@MPfTʕ250 I}]1NFePfqbh&&4>1YUfp{r n*"M_ 厢-S wm|BiO&%(σT!hW1_5KS1IMJGކ.͞POLHkPYgDHȇdo yV 2 $(a %Qḩ+ɔcbk0*h'K`SPJS9ȮA!L}#e H6!Λb'|2% CaM;LPNUk\9!վ3$mJT)jJ 3[ S.dj t]od!)Ѩ)i! !:i3" hikKp⠄$򔘞\e?y=\*w4RP]3}%6EXB|pq%US*R=%&%EJ@H1P9d:*`vq(m'$vZ@T)8s^KhA,iJ`L%Ε# GMt!s6p8*z+v{w˷\?5EQ<}gs}8\bcx;hԽhj|4C_?Mtn{{D< xtăKq~Ajs̯<rk>t'mw_y ;w=yʧQ]ڼԣN>~`y ʟc>5g ȕ.RiMqYb6zgo?OEя~|)rI'z꩟g֭E>JvZW@в_s ŐFS3P*Ą$JBmKI)!*D tD³6&PF8'N3| RSl&$L48Ԏig01C qʅ/j?6"IJ>hA\$$CCs5M;F>"Y+aLIRɧ7)cS"I*j qn[ + p.PnJ:%UNyB6&qGM + PnIȁ)qo3չ;YT }IP "dSѨ-+ႀęD*L>*AC-i!UѤO;O/@bCzP&9hB&"bҘ$bi4% K|}BjQ.Դjԑxfb-+LI<)Ʉ$"wP04w2UӔ@TH !%"Rr:)"Ҕd\ك 5Ze 0)|_$\so5*VQZRi|#_oW&A\ rsgjL"*a]EO)&e<&SQ.E+1ĒٞږlHR]&%%<.fBFƼ]& ]e:cmxbOu/&|RaD]לC~[.=+^{ӏO9=ɉO|BD=ov}y.~Hj&ON6`+ i=7v'>E/}]:jޝ=p+%hly?w#ϲ{*~~g/̬eeSHey^w atL.R9EB:a N*AXh*I6mK@&$ {@~ğ%E0\cR %)C4%QSMOCZ@?0%I[MJ:e_% JR &^K=$%o w5jIq <kT%8e&+bK@|viJ5%ʔVz[( B2C CB%Du%p,p{i$NոծUgRFͨB uv!įSȁԃX϶9+]eS 1!R%GBI%hPSqr%*ë%] 驉 U)1ڔQi'5WrFc>BBZF HEpM$#lp`\IN| #ok =]V;'o^չuͶao^YأzMO;ѿ߽s o}zl`^w^{^2~ҥ~ś*JR]؟t1yh7;Sz^ħgv)_9p9a#6!3_2o$vAe'ܯ~퍛<*O}kU* _Ί#Wwy]pJRT^I/=u猞㷊*rΛ{g̛ K.>e9aށ}ϼSew}cc`xphhwʧ☝vc#ϩc!}=r=v!7}UO?g_ yWM^:ਲ਼y]ֹ9j_d9 wy˝sb 4ot9Eܱ6M9%},Lyyx_˷믿=CWhw}_?.V_<? {wgm^m@>}w `-Z}E-[l)xA11 &C )) .!$5.x/VCuSrcz68j$%q&֐ZKb)C& -Ȕ2%FLZK2WEʄP0 I}L!]h B'aGc\g_ƒij\]DRYbZu5REGH"L;QĶŶL ܃;wՆzcJNe¾yp;I"xD pB CX_մ$PJӋ 1QD`҈4p$%F%J5m N)9oICcG̈́D唼z(! @WDI0Pj4% Z*KnK2!ɄTw52$ $.*("gh P'?jzk7%J Rvucx1i9&:!&Z]14P +r.6ǞrSvڅHR:<b|-@#! B\l8:5R94{T5 Tr:4"K1QG"L)Fex'bHbLRcɷ52@D] j\ P Rh@B蠃VyQ|kkUUnfFG>nv6a@W|]_>i}?~xN''="j?˓O[}X훷>N+~d]_^u,fp34444ccAQ/'^sE_;cޟ'gqg9SՎ>={Ygrx,~ uY'?.vi\KU4d=F]NU͔t<״\<@h[MNeB2%Ac5D$C:E S0Ĕ="1Nk$lJN-P&LIEFLw) BRKb""%jO5X9:%Z*j׸FU*S peCefLI5\Zk &iJIrJ M0ÆH#Hht7!'<&~|N1*F]\4 :25D]\60 PanC3EĞf^n:sjk㻟؃Op_IxkϜϗ?s>wwwr-+roN/7>9+kB?w}ZT7>yi!.ߘ5{ɽ]3g|>ŏb;~A{b{ʕaܟŋ\rk`CuSOmJ:IouȐ2EsZR)%c:ܣk]꫹r F H 0.q~5&_ ty7yB$1AKF@Lw5Ԅ|$D *OIT3I1 ϤOCyD:bBch*ˈT%j*>BeD@PGpZu4jJ35 q9:ThSخD%LRrV) +j'|e{ao|"AA%(%?ĽDAuv5UHTKB@%5.\T$ %J`7ϴV-TE`Nr SrU*-P-bOm[ⶐWXhOMG$HlA؜r9eB^(" !PN6vCC KpRdUPsCj!) ZMI\#\vm]] (gA1Pnj<)B~"]-I}} UR)t*C RKmG" ٔ\ & }U.gD~ꡃI/IG}뭯uXr.U+ s7&CG1: tPE'ȹI4%IOʫ;OiTԤ gcvY4gdqOۭ[;M~߀ӡGo{ё-j@P WĄy,+24"Ș(V OHtrOmORgWr錚NB~B}Q.m7$ez+ULRI$ :0lJ=-(3-5%+\,*N)%?Ŵ e &_!W%` .!c#Q{ |(*`v B%|ϕ3Y qp_lZ*||'DmP%B ]`񚒫cB'+}%!?,@R˘#$A~L:BjSDCБrGx3*9W3`iS(yP4)R_ij֨ *htʢHI='Ą!.p>@KI1RJZ#_bY#: ¥W#ڧ=U3!n C"F;*ږt7ƴ4 A}җ^2@f.UAU*DTj eBmU&K~t߻B)KZ MY~7vݷz:w,;i~ƇܐWY#hL2 eMS,C y`7Ⱦ;%WӔQi*T j-7%]g!J̜_jYbSCZ:5u~&^{DN;(mv""_|6 fդu+ցN;y97dP͈PhGF 21<mIS*t ܒ$! h P)r3 &EuWȊYhUtLAL9y2Wa0$W4(!5 ՞@~+$rV\B>" R} by}aВU6&S;t<%1: u*]!?]u?wA;^5/44Ĥ L- MML9T=ȩeH:;U4&I ZC'gw%wU{2Oi.gVþDx"̰,˛o{j-a*:Y7>Yb?0>2o;߉7>OƏ~/} O>\}F1R hK5#\A)Lv!W`R*4`a.:brr2 [ p5-5N9WK, qH3e`W(ʐFXB5>5lܸ 7.I 6 enSmI_h%1+)+Rr~lm#H[/28B%CR*j4OHB(\&b`R :ըLHiv8FUa|b,)m5>q05."B[ IBFԴ%b fC1PZSzc@TiD>&\Y5{u* pKd*P] +V c&U`9S|  ,fRab*yZbeJRn'.#\SN #O#7$ + vmR5rOML@]IR.0 i7Uod[&0F=(SӖ$t?.-rsL!c[d;L]LgjrDR2o-GO>瘍z1|7w>W?;Pzz_~TF4Lj䕇Mf!A@W4ByLjrxܨB:#jm7xp[+ wMn?xx|jRE]tqǝq}דּzo|\`,f1Ǐn)SSsEҗSpm3W;' &$L(ՄzHTCB,񼚮ږZ$BCgh kvTJ՞!4ȇ1S*aOzb: 4%O%͕c$ yAE\JHbvCPӑ$ht\gP4%14% "=2I%iuJ껪H( OHHBb!!)!"%V\5Y\vL*/iltU2K;R L%$W"Hj $Ȁ8)uU[j t72&D_{tFQ* .,)LM 3] 4%nJ PS#7Ȯ/I¤$T$])\M(%-T~i@.`ae$e %WiIB+\::WR{EDꢅ҄+}QvW'|ڔX*W(a_2$=ҎG*e:¥m\*pjC6 ֍߹D!+$)5*٥DB-tIF FM*ա1j@Z񠹜O צ.Ttj Ivմ$U:jP(!gBG @)9lItRH_wC-A>"jI³Ў)IGWcW*1`HbzYIcjTiOpU)4 _roXS sVe]PIhx#@O͔SR='?vy]N\jW@S6n%hix:R͐T)ԍ JP0Ieݫv`lKgNZ nz{2ò,O?o k4ۗ~u~\Ǫa!cwz'jD2,\ xa0YbO-3nx" |ֆ?⬳&3gfOݷAB C\@vlB%@ ;Sj0)|Wm&ag!Ԗ%ih*52D$$B!M 1a.=H98WJaA 1+}*=-:,!!;XQ (TKIx qN@G# $'WyДOCC{a bU!)ꥀ B+WP֩LI P2vՄP[xUCCWS l*"aҔ+B``GM|\RHKmLC+D  P<]pZLl4p:)UiFLO}bGe(%se v *MA^/-^7@rm!Uy&`OTӔtySh\+ej'AgbԹo<MEIH' I]5]B*tNփkTȮڮD jjA< gyD@$ +||/N^u{B9Mz ^i8$$Sä1FRePxM0py&Kꢹ\޹j̜3 ӟovdm#A0﷑=bK{v*[=pc_f.ςDٓ)y.ݾO~WwO|`ZwŪ) >6; F=GqaGh!0eŊ/%B̠opQ"ָ0Ж-\S*RBl B A#HB@$2$)OIڔ$ȃC1P80F CnH=xL _2L0!郾1.Ub H+h-uF42!dTX|ظ*%^-IZ452$UGӨQ&0!.oN$0=&|(:5*x]DQrUvA+|@oM )xp&J p4! zKa2cRP2@DT!LNNFe 9^IN<)'L Mv%4&B I!% c| NJU *T1Bj8\ slwƄT(`rO̸ę~C\$伲"FBmUUӒA\#&Sp/LL b !4U*,!Nxp.vRCxRR9Y\0TZb t:ٱc=RCkhЪyIOWRZ /]-`+ut7%>^>_TPx1 M37ѸgpU<@:b|_qsUSh)00w^ՁS+v\Mi]k@^~o_q {!ޣv{U[ ה̗ħ]M?SG?[ƽ3b6k+mt1Oħ] mLȉ-ħ]9߄-eu>07۞~gϯ>}n|m߈C}|Z "z(Fl?CWCJؿz\_/UŐ"@JR2tWa-ɸ$qSԨ}LM3)iS!.F8.8kpPi rsMJeL\BK y!0Ȕ H w:b\(SLR `*P徾W“b2Ē42hKQA=K N3۔40(&ك9`y5^ISv |eRLLLF 0@P!KMIWB: _iIss vuRI@PU BMKJIѥ>T<(*Oj wT# P&h08)7} qHbrI@jp@U6%q`& Io:OI+B:YBɁ"5*GkpȦ(;M0ہֹbqU*3SbJPz5%L/A :A}Z*1FAUr$!i<("ϐ Q.,e*iR[x'R'XSdj3,;5 m eavU.Bf<%vBTiNSx.YD AZ) 8PQghHZ#Cvur5+|CDZP;)|c$UH4+-Ir5u#ġ)i'UɧE)v"RASQSTvR1Ȱ 孱B !XW’T|tW2)4yxИJu5Zҏ t7\$mmMp2\48I N2*BfmcSr„$%I*T8(%\*Z_ %yQ^SrSJ>P0γϝw|+'}kC;ϟ|ae !qʁxO z#IשL.JR9j +$\V -\\T6iݷʡ϶z4<ٺZ `xLí mͯuǤ$yWe?5mch=wͻ}U'7B;E3{Ӿzzoj _C6#6xsv < с=~-mq޴M9~ٛw! 'a*oͦ_;ijL{~ |[ƍi{nۯϛ3whlJh-F[Kw%,=`hg-Yz/۝_qn-}phB^='IdLO IHݱq|e 󙝇W]nf#"֢D%m9 7Ԓ_ ;M J=LF95ݘ|!=5MIj;OhGu !̜_GNMMqR%W7xuwsn㵁ږ{ǵm/ϟ\9qS/<2]ltf \|XZ/VvW6MP̝Y4}L7M2cw O, t m,}˷C}}7m;VfY?W=9y]]Z#Kl7~׽w5\`o8do9 'gQgs|7%9mP[s|O[`̭1gԯ]/|`9 ?_횟^t{Um|][_+ mݦ2{>7[ 5{ϬƣpQj{{0L&Y/>fGc,+o>W[Cv;rߠ0Ybj/N;4vj]5A6GA=}rjU,VEKK2!qW:Ih~d)3:7%D@rW^QUk5FL 0bZbb3RU*[|C DRjJGz(v:\+I U=T#JW& l+^ɐK! "R5<5rPT_K $exP i wY *C`O6sm _h&>jl $4 (ijSkȇS? (G*S 6SۜTRބ4IʡUU1-t>d?=:&KIzZj|_MsVztV)LmGL[*mUAt* iOmOMD-I\JK)ɸaAK! B5 FL2Y /0)IZjCcpjIDY߾O{C8ϙ>~U2e-~6p9@ށ2F% 4U [›DS:k1İ$TA1|Y}Of=ֽT̯3sE<&fXV̡Z-oxsv%(~W[o{?.ϳ3{ߩTB*I d $"4(?!e6jۭC&i1 HE湦wÙ<9V՛P@:>S[}>{߽Zߵӏ|~ŗo7޿uw?bS>fHV>baRaRywڎ;]k_o}/_yCCWĵ%o_j8}ܾ-']V>{wȕWuOXWŧ="P?Ÿk7c]a^x_z-w]ܣb|}K+曎oY}{Dg'xCGw]xNz#sgƷk?n6'?'wܱEjxͯ]]Ó/M"0oiaZs;\_yߌԏ#]۟}k â~Sk]j'7ύ89ϼ/ᖋf;_{`pr/~uM;G~T]W>% hu?ƿÿ~]z鿝]07O%Oͯi@Z/f;}o|#Vk^/'~>y0.4/?[UBw%|̃_o=*6pNP,UIe\G(+055<2lDʱRU#}: @UP39 }.VamvׯnCѧ{{?룿 O.̅n XA~zWU|̽ext9Sb&)xУn#3|~xY|^|]˯~Sa?j/>/pOڻn*ԍ%Fq<.eyYoiSw_1>?fĹi<>w\7rϰ8?|ɎO)oN*Ϩo3hrVv/[/sƻ~SZ^ ﳒ_ _wSoڗ~S_η|wRsoS6|taFo/oM^7vo6r{-OyU{ٶ8*HP/{oڿ?-JSM&KeJiP̰bvpX8LzغareuP,05F*>r_-w>9Cq&BCם2 9PY4ejH4aT,QF^Q350T Ddn[ĨKXT-UtRQJۨ&5q G%EmI)M =)sSSS5s^;0%tr3(lU'Xk0.斦6.8|xVa[VbZbf֐0?ojSs8ʄg8kꕪolzmxg5~+#<ֿo{o X0 X+T>XT4"B .[*iRt!"(+ \W8bIn^χOy+kgV~;p{k4v{n|}HR~K⛞3xɻ^+|³̞~WyCu)[0c}[]F];trW͝őtu[vl[c+o[/|ҹO+Gӏo崾;F|ǫ}~~ʟ&pfj"gu~G#Oxڧn5_>:]{'޸z 2f[X{ }Kr׽o_^?\ 't۷ܘٓ};?W>vy??|=\Y_ݦ}zH>c~ǟ]dゆ0׷vw}w<־C+_jcեgX}~C1/;ߗW?_q㏲Up3<*n +yVXV1><$pͱgQIDAT7K/JVU+N&K~i X@K@UD\^ͅٷTQnP @ veцAWXN7W|QZ.Q QZ&-[e|vܞl (*YT1:#&5uQK=@wĆ)QG0hB+.Sq*\#lfѭuK,LʽW.‹fw>ϝGOzʭ [۰xx 6_9c&м?Ɠ'?O7??m_|/(=*҃~&_ϝ;n'_~H?z}wfp2}3]o;o}[?4$<9^N@?%bS=owU?n{W^uS|K|xfV^ ޹__Vm^ffHxAƷ<){!"=xǷڹp[eox} |Owp.[M88we'>pK[|'?GoyZ8s崤w>>r2#,;p{O~sC gC;n;6̥0B/Y8oo6^"'NlIu} ŝKjs'lL{|u鷨~f؄P/$'$k x/wY.L& fd29pqUdњ8108aaR4CDu:@qxdR۸͘Wo ke#fX4qa†blsH[)t0xe#$q سᖸ[myj9󊐀U\ytBvpzZr dVyp[9]q :Ԇ)GĤ# WGyRpN>s*FE(\jQs|Zux1tDY.ިZ:290ej s&+\`{/[9lDhsK+2b`Q4`P5.oˊ DE{ ͎usi U/8" 98(j;C/vrp9WF(<$U//0@C.<pO=wܙ~ߪ qo[n_/{ ''=ʋ?of_iҏ};9f 4+ :?};?bf_!|9z_~|-{~+{Ͽ 3z7/}|S_W{=Y/yw|WC|_O}捌ڏxt'?gxm{j~-y~>~~ז8N>Ou`5OzOٯ\_X"?o×_W~΂G_=c_~m5!<-oxRl3?_W~S>{|p˜uwM?Oc/>x{쏱;}~z /MGƻM9O|}~_?%m|ʯ.| I9g8>@9eiQ`a2%skcXz(O{^ĕBP184vlB s=f.r\0bPXzsr}-$$X/#1cx.ls6^ L}LS\zŰW[m`cMxzaT Q5oddWdPJ2JϛNR%lCe>Sh-SrsH#zY'ԓrφ\y\)8p%Ow-d-tmh9nU-1 J2ub6襌npukf>Cu9OV^Lm)AXzMha^/ l)SkcIIQhVUVf Kʫo!*bf"`-.[kNs66@Ae-}cEzX)n=Tǡe>6OK@:Z@4c}Ä50b~) (F!59g̑;O =acd0R^N,NqT=(P. xțw l$^sspjl27@y;o/Wmm=X'x1I=n3lܷA.2HO(wt1tSQSVd(O}R>{=\zC |gW}^E߼% g`?S>S^~ O좣{jM#s=˾g`2͙k6 lPP 9@G^mTHq U#(uV".r FQb7,±N >*LH9Z6(`ih&p1RlJVqfި=8Z֗ҠB+Jd (k>gyfL9[ i F(GLmܜuTpR-܁y8,"HN-xu)O?†yaU(3 >(yu KI*L3Xb-G< %-u0ȈQl)pg\ fܷqF8a#,8_= __x?1Â7??wc\fn/|˗cŋ_ S:{*mܳ܉I(+!*օ"QȰQV9;Z%rK y1"$V ڳ40bY_:g%hgBOcU%0DSX0%0@ȶ^*"j@U iwe7o y#{U⧭ 0FDE9ǂŅ %&g0e*LiךjpFplz *ڙe ֊M=(k^6-=lpMrkHZUB?BQn.[w[HKkJF`աOl;(W:ZKb9&lלE qlّZn eʨ 96^=,[0 ɵ{/ eE՟2%YԝB9*qfn[bvҁ ,l kTxۖ#LF!;̓ifګ+yn9Yr;GGțea P6ocL2?z??~xMKKYlN3fx3 N 0>o++MlX'&Ç o ,ŕ7TLk%,{]@Y75mL*:߳Ԓ+sX*IT>[2 %eB6Wg63d( } $ GZn֪5<SrN֒ Ӝy׊sKԉ#((h7x䵀[ōbsW eT)"j7 4n'L.{or`.E,z{L0<͗76'z$#_N{ <>5g/yK?{3 gWooz[_]wCwxW|Ë |q3 |'B06^-Ǥ0fXO,3(DxT|%3ҷ {Fq*}b)~/@,]fM9Sb08gOҚXÂÁqejJTC4Ls rNJxgZ4H{/Ţ%&@/2oo[fN, -9@sUAS+-3:=KEiӵV2Wԉo+KP #YX(FYCB/kEco"ye/t8x-lX+,9gkR-KI.ՑiSt1!YW{٨`ԔSpFBWW-aj&>+n*9]V ؒ[W,\H;Ee1V*eS,"ZZXjid5멍:R8sl<7(m/Б ^QXx5;v s&tvS(;Űw[;I<ɔcg׭D*}(B.~ז|HE-wL6^]IMXee~X=殪4tcE* #PTCjš]b9;3??~xt:r|p3 _zgۿo~|շï?x_|ٯoo>P07#l=]PZ,rSz0@`uɷXo5Sc[E_*l6hҌyPx]eB!;TQa"|*F|ƼkXº͙+4fn8kaǹ}0-6^ Q+xUxd3%CT'L S< ZaXUP"|+;Uh띊%P9 Y>g[R5KA`E=kU6!RŽ #%"*챌znUw"V! [0QaЂƊE,͇hqU0hK{xd M<ōK~^'Ozғ;p3 gOz'-` >/|_+ܸ 7oy yrM{ګAEsfKyfLA0GfR6B%cCUe8[?`jAoUaps$0(4[)&q)B8;Œ62(1@ *c#mʅ$0АBHʅ2ȗ#7ʸTX*Y;%5ci7ckcʸ MLB?$@J"e^dX)nQ< =#s3J0E '^+QzQZ &78<`Pq+"}7Ԅhls{8~RuuzZs\S<]@/- a\6 Zī% k2gCM?oAeni(zTW\`4(V >E,`M08 $Zķ80a1:ŵ7#s-`f3 ؈^UCl$QvJ9TJE/vy@-=Js 0%J˗\~ ,Bh)vDl7z$Ez[Q*PSMw|(9OT.Y\mfn#; o3)n\_ _7 Qug8p3|#O|1ڟ|㏿3<79P3NUXWRrS* Pks_pl:NaabPWt#kҙvцR;nZirٛryV5*̭UKyYeo6BeIX0++H5[^,6t, 5kUkB)@h]"=5ݠW׼9VtD {qJZI1N `nk9ޗޞx{uQ9zܮ6(3lPXzV+HAo8R@/AaT$қRl0Shm4hT3@m7 /vFUN#}aCTg]V±7KU,P*Q>yX+{Ϋ,s#)`/SB>%9Ux]Q }BMk^W֝MqS4L{팋6T'U9^ӕ7&LzCEz X>P\blYZs8g)}jf@!ojӹNU>ʴcib(+=@SMXQ3b+.$T9XR1Ra#Tshv#UkW^_^ɓRU_V9{H?4jB(y!T m\ǚqG&TCe1 mf\5 ) ZXo})ߢ@fP`}?tskYW3 '{mДgöbakaˎsRzNa]rK4* ' ب]rgí`#Avyqa9Fث$ԂCkcôg<6{XӇ.pW.TMMZQdkYq*ZU)ӥ5n#do(kp sfƤQE`fyqO88( =gC7MP#| K5EQ43v&a7AV,e#[ {^&`D([S=ӹf6V,6®tSYoY"ࡄJQGIcXiQc+DmGan^J]ޞ LS.{6YW .qlȲQbY;n֪LO,Q%{$l,2B a.oEkd>cܬUcSCXy}_{Q@ *+%sajynÁmTG2O8^ |gl%n< ұtJky:*,8\ Բ2X bϸ0\ @w`)ty]4y7ٳ18*lJY4oGrO&LS۵W'^T .LLL @S35eQBwQPk)y\F  $nݏ<#]?=S7K9&og8p?phB3>4ԡ7W7?>r}-ҥKYC?0,/8Y:oÁuYv9ϯI/1R؋NS:"rd.yz x5ώU/=>gEK<Oz1Or{^\fsۖ^C5S\>%8"PY':P23x`} j) [x݃ /KV#Y7q4rR36NlCo>Qp'W} KkgI7Q rtp@p졨yz{-C^0;8nvH:KoNN V3Q}z[Yy{+\BA+`*'6Nm8-G5oinCi+z[>ogȠyơe.֭ÉHMʡF$˻z\0p`|״aEn0%Xϙ@IoiahaPl[n@Q 9ǩJUo.VWKOӒCx➠}s֪6[Ը]9brTQ FH`SN,, <l8;ŭWIV\vX1:j%,R3zleweZ"udqZ1@5m#݈6Ή)c3=RaP/c9*zaVq2qnJZzEEL#s#j,5s_FSS7N#gLnWʧjN74xԂeQhŰ-gT:-ۊ4E&4(2sbLX d]<*LmPid,=bJ"V-pbib93L st>D"%ЀҎx^:$;$ FvƖ g~0!&_3fx3 gPĭ[_O?xsO?=x=tş0sOIP| 7<+]+iJŇ|ub-+1-ea*º{6LHB`ҠP&*kxM[rfC)\4ԁ /aNJ*pahɊHb'Se:a"Ŕ[¶D4"Bw>t;!dPuy`CeqP0bJXDB!parq,oRC25e-:V6p I [F{?cx&LK%zLe%!0#2 dBF}Xys{[ *i@ΕN׼u!эEB9R x!C8& {3q:rd{ss5[ŲAdD( F s<}ZxU0L-|j㬩rJbA%p%lKVPNȶU6MLV(3BM5H3&RkESҥiqTS>g7gTw0Pڊ$(2Yɡ¡4Dzi\uQ6gc3[ddKky4e'WNGn#u3 g8p |'oG\{?wy~}Ҹ>㯾i0w}iqh<;|G3fx3 g8ÇPϽ|=z]7W^o|§ڕ+Ϙ|{ Cug?`0 N9Vp)7c-“dRz#rŠQe-.o )BtxU*x7*+ z@ -ـVP*oShD4$;vP%$W2V80V\s}v g6 E0*)kJ] NOT nzk$t!ln Kagc\XwVNvիTT/DGyRLF}K,eO=ve.nOB7jʓNUFٕ\]󶴧L8861] XQV`qFTpBYs6[7N(iJ[8ps>UzK^^ g8|+?S>/~ b5uohꓞ¿K^˗/c{/+T1zBblP Sr^ Ŗiaǖyfro} ^78bEJBѝH/ S[ċ.F3oX.z"| ڨ o3Ji)LIbńjל L*Iv蓖y(Fр](4/;ok@M(n#bת?syD…^2BFՔc;ܷ2J@2'MWܮɱO.iRu ^OlГ0(*!|M4PP+G^QE-r`JP'́e["^gZ P!zRN5QeYPL/ Bw`CXCazk8A @3hJd,;A)}+<^A^ $+ʀ,0+xMJ H7jK`㱇l 9J^J̱ бW 6aH˭\Vh TyVQajshTSu}%AV^hszqFVaKVb.Sϭ j"]7b yq/7`a#K}d)L6Lcybき{Z#Q#"sM_0-9v[zeYp՛,<&HgGd1߶+b$7d~\ض6N8JrOe;|GΜ%М g8!;wNGgc3?d/m*J2 ,FYmbX6uFcq b,ZCic0+h<ʲ`EV, ~"&4S2,V,R<Ai)s+h0RV#*rVa层Ԍ|N6hbX3ũ[+DXl9ǚy++†'eq%B{Ql&WwUW. u*% 'O qsa[;^aVoqφ sq1@4sT6m#S܆rY:g0≇KBګky'V90( L>a]:Q0`qG؞Z[ְ %s6䲹@;r\3'ʛ4j*.=;J.nFV (.0Exzlܳoyʼx~a}Tf_;)H*, 8"$1B5zef6fAcoAV$eE,댹:ōׅ1FkmGQo[ Vb*QX;#3kY{6lb(2cn#3<p3C=kW̟OGq/?FhgDuΚjyݚJW5^(l:EXѷ =lQ,FǬTJu:ˆNQO?ɿ>?Ov! ׳Ll))=Z )OBJ~鞥8"`Po,_ iT(䊷G3G ȲBr!Dh,`! Y7W sKP1^jd'ӥ9󞥉Ea{Sz7^ % !+ -뒂 е\öU<l#&ܵn6$N+)ӾF2;[[HxWnߓߑ ,0ynH}0H nR%?\p p3 XUo>_?G͟o}/:;n{zĤ` ^ͱׅuP<~x`tPݩ^^gLUԲ= B@Fg߅!^̗HUx0õRmdY,ۚXL{ض< lSndTƐe5sc^V†]sB'4"14gNaPUo]g/߷턩䞱g(xu"d\%q6)ӀЩJ SD=l0 O 3-L2IȆޢX9;A#PB|T,Y5|{%?\p p3  g{%+ 7wRw}w(pR32x-OX#7sV.,Peob}#TT3I3Fin٠s6c\Q%ÀNUo/|/w_+c+_eyZ 2OK)c)e%Pdj LSf( 5*yLuIQ]Τ0!M.l )?1}sRSQKgE%8®pFU8(왊*$ f)rZ[ځ劘΅Ma+uSCR[!j=yJY2e7Us#,v@(ĉAaμo\H6̙`ЩCWS=w[ņblk6Ԯ91xZu)6-gI u=JB*ƫc7*z+fKGAT8(O@K7^yv#ƫs ])tRjz>?zy]2EܾmW^"PfXj'תVL8^ l,fDX>-G/h,am c͔dkt:P왙 OמsJ`Gm8}o;|)q?8?$7~g8p3@ O{?o~fgzz)3.dSF B+\FdK5|u?{׏o>O'?=Ens_p9Ϗr{uUZ;NvlXTl#B<hDKhʆjɚ4\+΅ ͎bP[zMj s<z"8PH1̝BI ^^V<7^ ̝,𖾰`-ӥXD@[2htEZ3QX`/uV|iƱrTp1 6֐mpG3& ̮%uf+iҵ,2#Ht`Aqqf(~Nd l%n ֪^u[iǜ'" GzL%&z T5^62,1@5}J 8vmZz64L*J Zj\4HW܎#H 1~O{յ]?}Uw^p-/ SzUD&ڋYʎv G&+Z%!LOY)cⲂU]Qbk*#{|(p<;E,jLUdы)z݋ NV3ϙ }X`6bЫyPn䪗4zXU izU֥V(f!PYiP\I(v+UǮI. o-Uy[DHR k^]󪓕t -qffX]4ת((3'bnjL+U:8l'CY(rY3O9P+Ud&FT..µ׽Aqhaº NՕ<ěbfWtWrx(G0JNUI6Z3^:xマOd@ l@سqw〘1_ r '&:^r,5F$a,IC7ty\A-A~D)J Eاw2]"[,cnܦG}ad<~澇p3 Ǎ 9n{-|t.l(1a{3fzs8< 6^?ojagR`xSA> %c d[^{+_wٿ!xG7_)iwϿ1MʲA sC"#}a4apDi<` l +)Pt+Kқ^7׼.Z_MiDGav57ǹN!fʲ_b0ˁhϘt^y{6 ¡\ (qL%F@iD FګN!o26 KU#S%k^M8 .LL%f1KÔN'BVFEuqAEJc´g\B_JQg\vTNab!o,=xQlZK.2-ym(&Qa@xwJ9S=nnNɎ*2eLQ!rP f!KA:0T((^z4mk ˂6= 1E7 ׼"*r!vDzWL s'fNW?oj||g/H陛B+^ß f [Ϟ g8p?(j@`o~![BTibHa%pSGy"`ʔAAVVSseTimqaGh`cx8YOy=FRuYVAB s4ر\BBoyax Gpv8vTQ^ lX.G9-tIe,JB/8[wG\X((l3:S\zA"usKE_veЋ(0\+u6a2t.筻cYyl̨f蠄DqnJ 7GXzE(F"RKU' uՁ-9| Qx]NmBN 0h36^a4[zL$rlDP @t)tl ̑. 5( ~`%`"4a:'{;Fa͋$(!T9R''Jl6^mT;HhuWPGzi7zbYfl-=\({@8W9K{j@T @$yaN']Y0Ho/fʱPNS$x('e}0QVmq.>M^կ^X#'2{ f?|[}^p3 g8~~=0-ˏ{j~"r20 rX4w`h͆2"X H';2hTZ暺;)xUyggP5҉Kc53**0gJ-iRV:m[ʽ=B_'s6$AVaXSsK3`'Yq0ortan-_bX ՛Gw؄鶸1hWHXs[ZjF@o'V@ 96Lr6<16y"C=9c%y(*90dEfVAVHAk[*41 ; W7BjNvand'2PZ U(y]ZЫ$yƍ0F'6VE 6L66HPjiʱb.ٶI`ϭ9I\y} [o YU4ab\Q2>RNf696L-}BowUPÍzOj=eoma$ī?{f[Vk߷3EĝrBA 1PKx$a=H~ܴmaD42Zj[嶺lvK[e($$cH dee"L{?nV]bYO8;NDֻ(;eĝsvՀˌ j㌱I*zs隍KHE0l{>MVǫbQT?~>\Mw},]o?7?|<<#8 ?EnPO=3<_p+j[p`eRIh{O-Ϋ&87 RX (qNM([/1tS_<?J̕uɹW ybYv o(`"̓fp[sovJr@-XlhIFWX,wz#pQNN$ @xSSsnrjte&qΒЯ.$ JUMHr헞מ=mjxY6J?+6T@.8WSE)R|4;Y$^xڨ kMu  cڭ/dW;H3 XZ+U"fx `&!vbE;U2_Z j9g% A ʆ%˂9{^m^soyӲ\2^JcӒ 7IH8=~12$V=wlpzZ}E`2hj PQsӌJR:4R(  ^yH|aSCAJ޲ rn )G 2ZC&#>w|ypjG'biY*%WխW^\>Sxxnߤ{͗oDZ?o>쉗&/o9#8#~"|k}nZZrazelZA,lP{Yu/YZ["aéu -K e)$yS׾?پɾ;Ǫsw ̻(6Ai.=mU e,JB+7uͭ,XjxXLk%Qp0$.8-m6HNll9ʓlzSmD=Eظv%'Nt'7ys{ᐯSnpj}#-l27d>#,n'^U0Sd-ʆ[iS-dW9kqTsZPXڻXCM^B)bD\zUg[s\q\ pPe xbӅcKۀ^!Ŝg SSSCt)KZ(~fPܕ%{A*Jrp na=oy:w;vP2tbx"s+,&[]>" ^IҺz vD7.HT2^,˰ zWB^)l) 6ч>"mNMsSٸ2J511֩*bW$LČ~ .#A n򕋕;م7RRQ5=F:[K%QUg eAvҬL\8;72<^SV빍W[ @B5 ;%-Fq1jWꌞDh~ȞK_E!ژ DbDH#W "j2s%vb2"EQ5O[Ptʑ&ZHJ;*zMѴo.Xn*̣ ;*Y6PȮfܤ->Qyz?l?HVI@~ﷵ^9|wC;f%_%]wGqGJķoo//|詳|(O|8;;;;;O䇟 /S ɖS6O/KgTS6V,E+7N8ue_k֏;kOl{. O|/0oE_~W"LK"6n VJPƫpfjA^8T'JҌSb\OX*r+Qla%>HTjoQjIr(A +xdz $7konnh|f#Ýٜ49pGř!Őp'p cv4Fx6M96>XuW5<,lcL9+}/{EKE&Y0nA;WS@J2QUlЋO;i;O;D9V!*/8%"Z4"s j,w4+҆R:i 9B" @ FT-̵ Ѿ[kPZ+KvI/9ic6ԉA{=xr؉us+ 8.V=J&K8E`U Ŕʆ W#ĚӉMWU2ΨMqa4EJ N2RAKOlaÙ FSZ{3"L(5|?_C3?ޏ1~af _~}l?_g797W 8#~Ug??7:8ɪ(ʶ @'?Su;>CXV<>WUPÃTc򪥷 "> 6sgdt/NʂVՌS hI#=(=)7,3"Aq 'z1Z8tT`˂uʀba+S,m fJM2TQj$sgҍmE *ue}dR+6(zr41Tf8 Hu+_x{b]òWZ+L5KC'BJ㋝'H^ yU直ν{ubݙMJkL9}W7N:jhk1'R F5Zx$tci:_:ObpA҅i1ݐ7#ח6H{m3jn9VA 3` 6Ш܈:0/NO23~E yz*g]ozO]KLMMFh;٨rJP".mmnF^٠(kY>SfUd_/3ݤ3o=l`*}?ZX}CqGqīeBw/ܝVG;g}RVW*='HB;O =Q7c'ʙ sjIV`3N ~j},b5úץ]&2T>_?i1S/ⷾkۧo6z쓿 *)'uЂ3 ZW^턖0e{YcCZSwvҨDhP"5RH`"G%A US5KBIQ[ 7mSgSQ~R@TJ{ QFײӤTA'VOtUзذ J{l<:]oЋ›%xu0Aĺ"ڛfiNqˠbI(.PAs2Dht;!C b˲b!TQ(1$v{Y,Om4,EVEWѭrÁt`^o:zS2"Nyio2d #Cuw^wʽ9X?h NlqY*h#쥝8!cWg2 s h窃 []4DW@S,9I2$"*ng*sithCXJԅם' H`/(Ot ^Ss+q+C#=zH-PW#^3|4/u?}L9#8#y‡ >\<3 K^iz˶{+Sjj{$>!b)[=P\{*hg?\x*~7~ѲL˪l1ܜw[o?{_bve_<ۥH;k:L䤃0Ep\xs~vZ]xFR/p[9ϝ?7lUm8HGĵ+83%6fzbԦ/vȊx߫^WZb/WxQI0֯kz&^*VU$\xڹW+hvNl0Dkv*S:={$ml8P HR/_YfܫSSZj0(شXs+sp F~iӍ7)Up8(, (`E= Y vY;e }ݲvK66\6&h Q e vdnfz|Q{e' p)g(vӂcvs'+԰8-8.lpXrbӌދ"?eqQ|eueZ Ci,)F~a(}yVuCTb(ۇȥ5 I|yՅ7,Xp e 7qi麆+!#=zW6g!?ۧ|}ڗO?2qG6=ͻ߹]UQWu#^K7.{z<‚6RCrjÒNb1(rdAK ŖSJ^ViUcS4o#?Qȝɋ?'[Z@w(v*"`$ʁǙ]NU/NVݲy)!ȉ + "J-8TZ{SS'ީVjd%F( ^(e3G- J@'?wSC{CwR^5, X,f:aTs`yAp4!F'DZxjsb݌c J7pWv\Yɶ2K¹$"d0F#0{Rh1jP[Q81l퍃+,c4nmdas,5Kˑ$&j!;{>A"* R9٠#m ZSͲv33ܴbqp5oY:^ HkozVRY{d %Sj9P" v')oA$ӯxfu6طNoXZꚕ ] |lԢ(,g5]X[i La(NbV, +xesmL {Z+E># 3( {)=#Rk?7e9wC?l74ʟt_^qGqG S[Snn}[뷿 T VzsmEW;eieʦ3V65Ybn,K_(KRfڶc!;\hgR^s4!]XX^8Hj7^S`ݨ͚]o|a5}!ϗ2RE.8jP2d:N֭sd,A?:U{Y*x{Uev[r\\trq<FX^1(mTj"bvKL;1R25zXX-u1+x퀼ߴelu2ƕu3NFv/>2*%+Gv5{^  *Շ_o?BOoȞawyWu|#8#_Xt/}ھhng?G;gyfP*=꼢mr#lj^L8qi*C*܀(s+-^~i6`e&{Ur\pYWk%]W[0A'F8/rhAiͅ"y3?g66, !mRavk<)tjc/]:Fp񱴝X^ 9Ӂ9` 9/8.Xj2cliEb2|n ahk%DžkdH[wZjeA8 H`a5'x)VJ1~LcEFi+ ln 5QJ`e*44 fPEPEU<-39K֓lوAS(p0<< Jw1Zǫ1ŔQvKocsҚydGv5{^  fgM]mly /u_UVqGqGgwGӕ$(I[Jjv6~GL_r24@,o5DʦYw²s>WJ/N9.^sr*A+*,:i֫ ?ݩ "ri=6-@JEx|K=w7$9KM7{ىM+x+SE葉@/qn6z%c[d>/Y/ o7ysϭ%VBq +#a =StF "Y9X' \:^G [av.+Odکi>Sg6p9qWr`fィϓ'B\*n||U 'r7HTĺ'ҺQʽR2ub}vBJ 3*S 4xSe|3XҦr7䘉 6X,mZ#~6zb7Zymߘ7RwbS-XB~2W?y[,cvowݿ{MonK?rS_#8#>\4_+ rxwXO@!R'~qh'#:H4RQw1.#TU` c1&qDʌ*"(qZYhd*Y-M'ά,mf/9-lƦA8bwehtTpSf܆L:QMK:R2l8zـ$`P e6;e+G$f7,}P`P䲶dKbʨ!Ѳ)Cf8 pe֎L<ňMkA[QMVRΝ@87!q)UN ey2@2h񉴹'vH-(mԝY7rLtRq/9 ; ,Q{ٹ:anCi7í$]ZnpRSn[-%ǕUsS4vfatJrz"{U~%ל {AW=~af`?'=n#=Q`@7 iop#8#0aN}sBNO |??8pE@~C;!n^Alޔu %G.XQVֹKFTS4pa,숑rZq\ZN-S7,,WDkf^_5ꤍS !P*^y҆Ut9֦| { 9K@:Kbхf2=Ã[mܿJc1J ޫzR+eB(g֯lW,s'N^4"3%>75{YV6E)p`앃THٝ2WڍWQsBQĸ@q ۥy Kj.y#xԹ5KòTJ#lU0TV8 =RXnD֋ŽS K7uy[J!-5{tʉް,8Qv+9ǚeS ׬_8wQKoI Bc ,; fٻoҫ>{nZ{|ϛ 3>|dWGJ6xdZ}ww_~ l?k6}qGqć .sB Otd]l^sk9K2қgĘ7+^A6^e̠ˠԉ uT+o٫JP]v^1FE[k3Tl\Űw kI@ELˈdC+'V;֞C3٩%-=/{ӭy3ْSBifU,8ٸip0E4_tjkVO5SK*%研^a 6ʽr)=_fO-E¨KM9%ANB'qƩ-5}e]1H%/8Pd!jHkz{q&l`dPb [fpL 5M`Pٜͥ4W 3N\ z,/5)od`u^l3SvJ^OWvRnetbÂ]JWIHK+#^X$VT0# [Ns >2t-ulqjP88LNi3&oGW$ffVnp#*m p+K2}eӉMKc"F1A ޓ96\75Td&p#[(]+wA)8ÌZ]zd`5ZvTD\x4Ԃڛ -Etld#,WB'r8gZ_hy_GUj_qGqć laB6iiH~aq4@^J"{ət/z} 8 9SU@c ʆIPizXEvM4,#ԋ |i(uεg>g5'-́^pJ ֪ZNtvi X@&a/vJ[RPS_Zr`U{շ}SިZir?yϬRUl Y̮sa/r\KU17ᰣpPŊ*vY[?$pΉP+z _pT9= JЌ%ܒ5JW!KnW^_x꥖:1GYVO!S Sy5(Gc'a&`t`)c5K:e+#r+v6ǓG͊%n<+ƙ kID ) MbWj9LPiPrOS z煮աP17:nɾ,sASU2(wX|b _,O{>Q,B' < ÷I"k%LS _Y-"f[]PFꓘC EbEm.<,7לXTA9:a &U~tGv5{^qj}_>=OqGqGzH"ՠG?~RZ-h?Nz~j߻?Q`eS }>v(Ouu7Mozӛ~?'kӿo nţT3 a8t#^,Zc2*lE[dL`˩U WT!E…Ƚs2I0Zz0,Wz<VvO^bNJ?v6'0QjF0$Kގ8dzjU/VD4ڕ$󺈧k0"SN݃^Hmٸ4kvIX_CV(MB ay}=M+R eR oZu4=ߣ^Z8甠X*i[U[#R*wk건mXv2G(2.MR|M4e|vǗ{"su'd-O&zb.^, 1!Y ًWAK^JBf0NmZpta#؋u'? prwfW^GtՐsV[`}9`Mlhmq-gH{CsX1Gzy{g旿L?οwwO!62F"hKܩ1 *ܨZ{miI`;xQڽXFvia}Ò"B#l'+Sf8v:YM =oҁ"Tu=ofֹȮ[tV6 J[^ie}Ey5Ɍ0*Wdou~g >(-9YbƯ1 dC%]bWƇZNGg +f5^d,(BkXάۘ (y_ZW E)9ZsU)^ J<>y^{qn+m`jֿ>o݉KNlHP*ZzYX'ZUTQ:OfA ,d^t6Ĺ`GvQ/׭;K4N +Ѥ+&u8T(:>>]8UpB ^yb5`f\߫Vt}Gpvi)̮E!)Ϭ8 ){R)i+a|aCK vQܪ>ȆU}ϛQ,$W  f9ni]j^:sL9#8_x>~rO<Xj~?:{o?­=o4=^>g}}p֭ԣuVWx*$so/JO7neYeJ\8.T0&[<*BY09j4*mUb,eZjN_p<4ηUy;nK+'6-8r~úei =6xCzIQ6 e(N@/[+K`Z& +`U/j9 $ae)V"tfOVJز:[UDZޫNE*SPV0̭ JwK2z2Ysj9 XX ({`_,g#WŲ6֞ﺭs:Ts+JSڒ6>_gX2bX bk+5'jjRj-KMXiTF`-ԦNyE._ zu ebYnJPi98c!%M|wB_SB1eE$۪XSE1Alg_O3^9{1:Fzf7/WfJiR D5(!鯽88;.x0%(Bbp noPBYnF!ƭ5.+*œY;U1tvʀ;)W^}~Ч{ ~P?˗yB|at秞s~k~|[Ǐx?~;߹lK仾wmys/='!^s4jk{_Fگw~3O5ÑqGcVhޜlٯJ˻2t޾`Tm t2O}>f~2?vqw< :>ƇZѹ|3<3TQ|YOfIܰef%VK^izi?k+{ڳĊnacsN`BsSE׃pUxUu᳭koAiu3l#SP{j 9pՅ7k^A`qM E&R4.vT6k.^񴹑JlP0\YNljun bI}j}:i)`u8h#!Zv`RPfN֛^{Ž`{F(=ӲSIv^Z tnt{NUkchD'G"pf8UtXPd lj*gV 8] v]>4RDWPÃ1ӗ֝Yi3F}|`RQrȧJCtxĈcMdrΫIʝu0H{ٹW/F^UJـ|w6_{?{{?GUo|W(qdGqGmx8v;+>aw~sJ$|y5ϮV3} /|7~g-oW_iȟ_ޯ~Ɵ62FK7F@Kb9ai3 LnZ+*j{b.U0HE0`R: 5}Ni~b}p7p?zjD\WX ~zS[qJ-YjzEtaYpl9VbԨ/ҦXDB.(0rtzD"x^#A K)^;ɡ9ꪊ}1^Q,23|FUPDlte;D(,+N T(KVnfڷ,#ȕEa*TqD`KuRx͆io@&i2zfo}HUϝew^.{l$j_kt!*bcs$V5iX }uN>ƅC|:61מ{Wv`>- -9-lS`55̀ Sf;4[s3x ci{=!V( CzSc;/2-G(t^9ղB5VWO|WSOǾ?#YnţT>+?@WB$|,xӵ1+wJ$J7mN.PF! QXy2Kéb5}N. g3 ZbleSf7/L󍪊԰4ĔsNJR;&, uf^d06Vf}nck҆9_`g=(Kް8{G1vfc;l*x4FvfyCfDq2ˀWNY\x*| gJ݌xfc(i }t]6]KSae /rYTt43},Ivwlj|^7J^a 蜘Q5Dh4,*E2>^Dk 'Rt2bIN|ԆKM-*Q0/lt`&a/MS%lpAo6n2WREppfcTn^Oۚ~T{O.m^ɓSS꼺fMiV* ˌӊ#^ULvlԩu+5$'N8pXF 6SQBW 'ԈTGSbPd(_L 6cY0vWwO6Jk~b1IXpC#=z/=#R^Hs'~7?@w_{/ˇ7f82#8#~B^^~^ݾn/.hS5lJ/_U/7ͯvp=@}^w[h'#3(. Ja2VT,۵7-K ܨH 06^w3K|/E ʝr$gxUáL94" 8M{eVQ6^Kq^*f6-XB@048ɶ^b^im*0-^,'0̴:+!g^r:ԉMs+]dԟZFy54OV!7΀j^ (ݤ3o~)?sO\AzxOsO7%#8_O7/m¬%=a[¸鉇0Fvw=k,+j*1ͼjPqW L,hdRd{X/S6\x{߫, r$%zAf8"C"6L*RLW;( $jH&1 Zf" `/n=wFUd\x3eƩG\QĉͭcAÃ/os}7̠K/nhӟiQ}w?m_pzC_qGgݿoF R}o ==-o@U&q<Bx Ҭ.<]zs,"druPC_Y?^o+]? jמׇl"0cZi[jHs ӽNyWflT JR1?lW1+o˦haiÌҡt͆p5eԥ  Q.#īNEBg:{۪d,Y-} ^n{eL֦S lƨjziPR±4сii GG8T[B65WE+/ 7M_8zYgoXNFh^ŖY2ė UW^=7{ ^٨0,CxǫXqXp(C|p,8T9U,.N2n=uJ}m)E}ٛ }w|_;~am|p3<#85kgb?-59'=vܭLD}%3џ:"pDQaFw`㙌YF1zKobp uZ罪 Teo/2\@0:4 9QCDZڝpa/NHT9^K=s;v=fMVνd+ L̦ r9F7J̧r!k„y,@/aiYz٠;U ׬7ni&Yc4mr"XT)Z66 Wד,u,d 0 x$$SkBWNA.W g/1z&{XvxqNag6.XP ̬ bHɴ/NКn3Kb ѾI6NrEo9EbC=7ziWAUAAOln~N`:6۽қ|X*GtTciބusT2cR[٥7 HJ:]5BNUHA+(|穗µ^C ~ 7ծ&*ʓRdƝN҆MQiD"jrIbw]R'ⴲa{BqZvي8W=0Ws(r5 ׬OPMFU J3 eW t` `R6/V9c`moRã:ҠK|U|ͩaɠ| ?F(>٣rW##8_.: HG=Rrť:?FBYP jXV6usRE53V6D~ݺ6.m"1O`UJĵ(F|WjOmn>H(Z¡;Y5՚ZsN.HTZ VUn$^3{R ب[;{48!;QW(]"!&n$ZnBJvUڨZn9-laHCZ)/Q) `3C+ 2)1 +Bs!S{Y+`!`P݃qכ7 uD)kXY 3 -B+5;kGv5{^Lh~`z׻r/?=x]UqGqīٙ$ӫIzG<6^;0 4J#,3D8[q g<3ⴲ@xMWa'&%#Z* u+7۞%ˉM-%6/=0#:(pa=T[eeJ'hw2B UŠyu9,#NQ|Ohi;I` !a<=ZTR(#l\r`]ow*TS N'W5-ԟXrR(Dh&tͦQ+1:6jJDz OC9Pν֫0(vkGPR 4{^'^a[^AGil9"5,| ^T@8 3N._[\tT=;;xSQ4LS/+ƛ vg%ʠS VHTp{M1zzWfwJ S7"&€Q3#@jz".FY(8Z{~,Ź"\6xj9Xw@U"؅> ]8F).t"3x'!cW:H?j70|Cqo}[GqGjpvv?Aky{]vR=>^36Dxmg%n=RTGI@Mfҗ[xEV+_**Y\PQ'ĒeA_Y"LK5X鶜T- iB, CRnnF7`ju>NGpȶJ :5A`1O~%`8 ;WE\P`JsޫK6&؂өMsZ g, ^9/MEW#xypت[.7޸rLԃ^btf5'S>;O|p߫ 3C&FmWfn=M`eN6Hh3^v +TfA^䨴S+pETKoNU0RdT`gi: W;U{^_7*:S]x3B!U]eF3K""mNGBi}6v:+x 1I/l8aqT:bOE&Wz $9lsUKRg6+y5)WLqV <[N ~нQ"FXX \H⽢L2|äb$ 慲*tiF?$)qdEְ]+I٤GqGI؏O|8;;v'}'=įdd:31!_/ZpjuhpBUQ-dإ '6=j/}Ia(I"af pcM;+Gˉ Rx,/zx US |:Y䰖Soh+ew}',: \[tK-`$OxpE|x}/c|]ziwoַ^~[q+UمѼYŞP2{g/ƪGh ک)% >Î~j,s޻'R{oZԢ:8),kpڒN#wW6&h,0/W<ա1_ׅ.qF:uNYeP*3ueh1H?dއ>W[g5gqg|J70! ҭ\m4`^2*t'PEC66(-XVtPIp 3}R*J;厼d^!4G3xV6k`Ei2dTo7{3 c`V*,r2ܳ{3{ =kmKЂ<*g4\Xyduce9Í.` ǒ|I9J&3vAl |T= -PEd#[o{w, r=\b"e4*b2B-˄U;)< PzQsyz`y-֜ l-< ?#J)ߙ9xw838㌟=)G^\|w^y6ӵXt*RBBx YCm d[{*qy}2"WM3dzS:iyŹe&YN1?lVlx]A7TN߭}$8cQJYjYoll`ケSW:l|hثJ^)kAEqdo'88, Yt.\ڔ czCbχk1+SzV bnܱA=kZXx!'}e( ZrY*xv`5S;q,-XZ ,KŎ[. =? ,EUC picڱ6]reشq{3xv'eF6'(t!"eAjY,kνUZXIݫ=xZw;?ԾFOyV~gqg #/?7wtܪguub4+9XA#hNVXJIa7|}aUlWi`ۇ(LIMuO3\v"  P6{OG:gMCK/%i|- &dxOʨ|SV/, Ck >(ؾ9`4SKWgTCO*0jv98(fmKQpSOp'/ ᬑ 3*7+;WV][ βBb仰@ K+s=ӳ.X,oI@3l+4IR&g؏ޛgei=Ε+kVz:(o;('hźfMDbNϰX/lKO^ lR) bju/.='hʳ,C [w,+i 3ŝ ߳3"X'qԉ.nˊ~ie tXrqeuéwdGSIU w^KW3X&pmE\dQ6EZ`NJkoΎuۋ zXe1.ڠ%}EF[}Mb%uB2(>J{QyPXcʃE{{srb<ؔ0I{" ʇ ?[|d?'383B)x㍰f}8_IhVDg9ӛ=%3I?It\l.-8+$`e|Z@gzaJ~aU:v,jQ9)4R~:0l用e|ٲ~Q/M;)B\2bYRLR"hIoKkW/JÓ9Nu O T4z> Ze睚*[W뤜6^XiVO f%-KfILJf%c;.m*;*ƆtP3 u콕(`tvPnY8L2Qt]&|VW[b !4A Nӱ, |BrUs͝wq=(FGlm<ok6H(3x)U{K֕omf%0FV`J[ĥQR ?jGʳ8xc20=K+_-$ڏJDC6T&Ŗuie޽[j[rcm# 06vkNx@VFO)2_KiX" W`GuUG>KA\Ƽ'*BS8AQq@CN˖ZF6i%Ҧ>.t,kSS4,%Ձ+_IAqd-j" +Q_XYRCljK֧6YX,3=KŸn{*0V ֘+b*x#ތJ~jdϷVْHgJ l[u 8x:x ۺWz2tɠK++" GzpbG v k%0Lzfȃabښ(cD 5:xvaBvx.w1S82|mS2I/b=3H66!(E0>80Hlymeee%=S  q-l')MBH)' 3y2<38h?ۿ;;{罿;g+^7|ul=}S,lTn穜̄ .ޮ[O8֜WVgY^uaQ 6FYq~6v{vMamU,fVly@f _ICZţR xW=msjl*WS3p%RCB(U EZ eCLV]rh^pYolph&BM{ԖCxYLЊ%tdoui0 lX8 N*,MJo lRre%}ag*JgY! 4 ۫1Cyzڽ QP %GV[.l^pITOT6z*CK~T3*WYm%V>Q矪x]NgWudFwƦ7u5=Ձ 6-9?6y?{)Ȭ G6]XzZIڻ뺼,Fe!:OtEӝAVXCZ tCv6{VϓgqgЇ>o 7{}/WRo";(g*Q|+͌:5KdZ0{+ zgٕaMNu(",u%"Ovβ jBJX9q+ 'jNM=%1I3${;7U8 σ7rbZ:FI@7n{4fؽ;O0|Zw& kA)jʦDEE$b4ʁ'Gٽ7o0}58Ez"qPw U$J(nT%r*g޺IԱ,6w"B8Uv|5AS3)l*Z dV:ԍMFSҲDRe?Jۭ ӭ3 H*O5L~1Q)D6/X8rAMy)# t\|ec wpvB'ڃQ%1|l<}>^qHcgVF)" =ưl杺AvT^Ѝ2 4?->[n_8OgqggϞ?+KKr$n뻾꫾꫾꫾뻶{7>)Ou JWЂ%di<*h) 67녕5gRx l6>ʦ>*MJ-kC;⥍[ #0g%tWwE6(԰lPG^Tz]n}1*ҦKW6=Fc unL2aʪ"KDߖ`(fƻA)Hʦ$?Cy"{75Xzp:)ֻ `Iy]*>s۪{O.NcxD˅"&.Fyb&g(,V(\{ܗ?Uw+ªrtLH jCOp*(z;x3!x6De|tL-ِ! * 7690'bcpTD1[۪OT߹ Γu)汽A=M{o$-Ȧ%S R":=˚uii$/m6z2_F^蠴qcC2+]-ڦgᨄAUsEz GV׬ Uv]S­/&e]r.2(A3ޠn{B?b駿ٟ8OgqggϞ?kvZx~׾۾>}co{׾[p8|KJ AȈP:@,}]LA=^V6;8y~Ai4U+;n<SVpVaՖeҀo+ ˥RJ`ĢG<`8Fe˪Hjc#C4˶j0L7Vו/Cy( I0:߫!4$UqI:?CYz&n, as^xaxpM+Ul` # CY[jɺbLV ZڔH/ ZYmtT wQIM Gz% 5!Uh@^mT wq2Wl|JK0*U/J,3LaV8(GO޾]/ T0Z !bZS@,!c.DLl3_xkk61eŽr3Tonݺ6z"q %늾J q4c3q(K%/^ޏv6{VWդzL?}n{vgq#?#_e_ѣ<Ş={6Lo/?|f~_K/tƧJ7#٠D*FB?I'6(^ͨ=j. N-jћHY+THAyPeK֎;σ$ OqaL& %[2eqcFXV t0|P=kz.Ψ4Y{2>TpmSLz.*C%:zVڻ'WK zZlͩaO"#ٰ 瞧Ov6{VWդ}_}KW=gqg_??Z{G>OܯG~կG~Շ?{G6o|W~777Mł>(5+dFlX{v1w`٠6ԎkIЂum葥4-Xz+Oac%~l=GK6[pEGV>Wv:n766=Ctzʅ[o=&G601͒I[xGoZrF+lI*8رf(8d>|}[\Y] %Kڲvk+1[(Hl>)uSHޛId53R.^ru9&p=:ޭVmKזּWLX#v%]lXER*T4Z"Hw2j#yQ %vuqź6%( >JcKbHFsI հNǒF2ua4ebEdvߎ7e=+;DsI8xP~,ޮ9(Ý 4,۫]&ß '#{e0QaҠdT/Zؼ,`f}h1ƨG (ݺv[%[tI f:ʎ=KVq(odY<= JoKK;~~{%;; ~/gƿ%¸j"P~xV:*SFckNѷ6(].tAM]Jap2`mI鑍(ÿ'J\ٜA=˨|?$^wŝr ӷ |mk媨 TH,LOln-kyކ)4S4 xiW7l/lݝڽ!6-}ƛj1/4ȮA=3A={ǭwxߍNْ VnK3=F΍WDp~,`4 8*G*zw]'q݌\]=%re5 V66 5b*C%T  6e(Ck&)4AQ.K;1vLo)o"!Fi?qAexgp 4!9GJ*p~ʥՎU@\=4dJ Y7|5*ͲLۍGZkί;yxͲ|9@gpwJ1Ŕj6\;e.fA)Q*`ticFF +ʙAQf4^p^#/,x,`TWSAtSO>'x?Ox _rN6{7?383J7p 4*9:: _Z5hqvPӳyK@H*xPJ#sJ$s/lnQ{4m46('bW38PB3D?=K+US.~\ܰV޻ {O@(ix ֳn$p**wλwk3 Մwqte0 X9uC!Vڛ[n:El b]lW'67T̑sy=`d$0ՐFzuƆV3WsT@—ؠb=,gQqTykХ!1m0+~p04[oJ8MN;uSCb@Eyy4:L7hR$$iR{;OkKVQhiĤ4ީguݰ^ZZŵwsA>wJQ|A9fA>*of=h@d]f'Y]&udYڼ,Yi@/mZ% C ^W[ŵa0xePԍzA(B5V{ , tpo[ot';oFk?6oZ(Q Z,9,Ms|֓!GgsGݻsgqx_~a66_~a?urJC|˷|7|{=WIPuf>])|]06GuM56v˨XAQ{臘$^P<%g<iyRq` gFcziN頼:dVJHAE8(9, ձ:}e[nwĠ5"zsfp֛[oH@EH3?^u]diXGwe=.l1GAL.\U/l|ņ>ʳQA2+L@ 1IT@,ꭷlPz{TʊD.XEccT?2jo=ƞ.lލ pol^YuvG9F#=w*t#fӋC<Y6=S5QaVraumS*ֻ{jˬ zz,szw]E;aMԆgnTy:=gA~E6?bϲ,(Tb 6*Ee|ـhVQ`TlZ۸i׬FG5w0RC`|Y^<&ۍ7{5 ֧$66ԕMƎ2hF*bQOLFh[W[1I;&%T:ڝ˺l =f_:|˷z& X,dԡ_o}U|o~Ӻq383~Z]w}ٗ}٧>x޾?pauof@Gהowy>oz ki̬jAG5($ wԤҊ%VV^ٔeI@Tĥ%KR`J U@bũ@oӟQvfYPd=I*!Be Bɞt|=IjJ[5O:ar!1o󺊮 p|/lYxT>(OHFlY;K, g ƦL_YXiR-E&`r(;*9ftJ'xށIAY+=@wΝR V({P3(QB3CkN冎Iy{AvQ`Xg]p.wz q~hC*]1ttj<; H/}!೟ O/e_??1S7<38$ů/~n~|-7q|ǯN0O|9}7}=<~&\IJ5m{55Goz+Sv爫IY@O=Ié F%-}J F4`Y^З,+*׾1zC. KΓM , ZzCvKЍ^KGD ;jcictF5ηQiEZR8zC)H:1 C-2t|02C)0)>6d$رw+D}" hH= [u]lޮu]e2 \w*n4F+հ:c ;IVQus{7xQ-X+G}*pFwi:;q1ɓsNiTZXZj428xokJ̠:{;*Ua0wb9y2t 疧dѳjQ;U"yUGƒU.I<+k{_bT.wdi=[(mӘ*f2&` PP[ְml4hlQֱ9Д =YFƹp\[ SrfYZ6臜d1 &blxLR[~ೞ O/{ÿit ;38㌟ |7 ~Oon?_</WRoF䬌HRλwklYcN4#{uk@#\GOeTV`7u10As[o l\9C?Nc* Yv9TJuv]G,]㵽>c fd(]n]KLlX1Ew?UEyJBg^eW66%b-SKJF%@2Vi/;(YțD%*Cl=iͨ4DDbC:֧i8yojPic ~P^p~sjw qy;Iva]ۼ`$f/ Inz2?m2;?<9oٟϛÿKby>u383l?Z.R%_%lGз[[~~_<‹͝ԢfȨ̨Sbayb ++찉:ەLMg5hP,- ۺqP:z3)q`eSm ` +Q bMީLG뵷k:*MGv|bSKF(sd,NuPnY}Ckqr N+…I6B(`9{F)Ej ;*W]^KfB Ez J^ԄS`Nۆ; ;~q5[Ydth-oxvW67Jq55AcFCttDϒ%2W>*:,Y.8/, ZJKD [ʥ͉5$lԜc~8O6vi{2& ;zJoō Kν̓*p>}iuDcϲ`_я~W|WWo65H~Ew}K o?0Jx伢`UVqexOU`9Z_M+ӭZXvexǺV&*J;DFQ~3qD nk#p&r_TSLJRC,ޛuPv1 J7^8*_|D*AcPy}$a:P{O[֎ՠՀ:PY ~#lUGiSjG[2}~'ͨL`\sJc㕏J-vjҠ?AH q[;K4A [fب.̢7 )P`{o>K{%xJ#sN<(N@3xʊ5CmYG5OD>o}Oazͤʖ:xک{8wXs|FUjw\zڭ]Xsy6*fN]# j;{*s QO, QZzkP̓Rǒ~T{`1[ʏl̐DcȞӂ5z>t38㌟1~/??:G?np=&ٻ5yy uۃ7C|5ЕaP21FzT3(EŒ0@` ⋺)za/ ?q:GYWa4S0)HXD-kGE^4?M_hsy`{oo;(Ggg1]wb%*<: ++B_qr3b34Y<8G?ISTk r4 W6n,Y†jT:*t =}iM8Z 6ćyK%zXҪ *J%F2s/VqP +kT,&ڏHޱ|MRWhcuw{#"g.DC(W[x ױd\җ6,7"HUa 鰱XNv(̰m+( w M #n2[}j+iyxI*|q㋠,4g]ĪS  Xr9Oʓ:l΀QyͤEF{gٰ; G 8Ɏb(oMd EnPmlYzAlZhQkCU Vlhs>?Mӡ`ҋok~⿝/JgG~{&tjm]}A- c @"{)S bmճtN_:} / ۓ=,?׾h|{u_Eݟgqg/WRoƆ捕J`\ϲP\FxD|faS9(L=$KP7 6 uy%b09/&X",>fixC78Qyݍ1:!9YmΈs4"C fӅMk.ly@vr[fO(-޻gu l#(^{s(he1t 5udQ<2!eͯ)7gGP OSPb9LJ! ycAGe\ػRW,1]Q6*]{߀rs&v} )mX߭M*xi}'Gq&fpisCJj :*=Ԯ-KN/앟խ/+8>4[l,ޛ I?@⃝^g5'_#?m?Ck_~o?䓔Ģnugqg$#RO X;* H]߭|9+H/b3[ey Ѡu|y6P:5Վܫ ]G4(hR"tmm]{् Ԫ#lTD@GO,=2|Vq:VŖD* ϽF`4oz;;e|l󅥞ƻ,wͰI DMQ7M++kb2Fbzi5' "\'X9&YD0\ q&R++E<۷"2*gԊEVm7?Q2r9xpI91|KBxl&pyesC?کDY ksޱ 7uQd{0jP~^C'y^ٕkֵDLК&o{W+0/HOƛYq, +6b'],b v䨴SuS NwJXbS]<;]$k |Ȏӱ,vp'W;unm h"(VZ֭S hY& 5,sO05i~g_?Sggqgz78njwSIɠc]Ȇ4 hK* :,tP VkGG6\ۼS7 RWim# {{_:x;HVltP)QoP#ĨdF5 Z*A.H*u1 j ];wH4G}l5AM={NɅ۝7 |* D0 5K3^]  |R Na#2ձ.maɹ'!&Bvj)mQ[oջuT9CW>x@O_K)f7zkc.< +_.,[G鸶qTvћVV"KFAQGGDu`}wjnk^PV >#f }X5/Oʖ776nlŽkZac .HRbԠ4"ϼ)5Y\d/ڣ¦K-0]AeP "3jyimqZoFʅML+>iRzw/[:e ];;j vPel^bw=#T/8'olllYIpa%փMyfYg% k =Q"=/S>[=}xYkg_}ϭgqO[Zq[+~6?E,,Y Wghm̫U0b1"@[~icXgْn=:(#1vMKVk5=y L lX;۝wrgz:ۖi*X7V xTDe==CSQSrA_1rhd+cbU1jFO՞eYXw[xx6gqatT3A<3PVpIQK,Zc{w7'0  bCgn#?(,F]Y0[5g@ť.\ {d~ʝ烚MaJ\+0*MO!R "F{ս69*b Cml'GN@^vݥ=3N1p^P;a z;8;Oq$. yUW[, q]U!J&`* EK֞/hňu!ZL.f@C=I{MgQVGovDvH$`hJw{.caR(O;eVYA0I -[.3F^gL%у',,Xe~riVcYHq0TDXa]K=s;JGYM70ڽ[р;oޛQvimOm\pY: ֝wrx\ ޲לNnC†7!4T=} >mdxgq_(xy.Ko{{A.wBչqi$: g Lݫz118aF-m~+ DEiQFzqݵw{j~Jwo=λﯝ@OoX[4;-Ax浈Td I ;>O*,p"Sqf9 aY w;z֧iOhN͵wAg͉)xlECQD҆MXY}=_ICK7Ί[*bɧ. ^Z 0 pi#;,9GHӔ XmXfq/dȎeeʦK;f 9s Zlh;HUdra!-Ӡ(QN44 E۷|o*t #QUKh@_mK6 7SH@lqɠ ){faRвmlY>c;.XufRN?x4x 838O|`%՛o C"KWl !dGU[Ejd![XI]Z/xoNM$|%zs^dK)J~eu3賬W*Q9#GEK=˟(-YlcXYmYf=jJa < ژ8ʌ2~4)艸*Tpy01tݭ/G s=Mby8(O'1w :*tZH+0W+4q2NO_2ޛ?%Ap u.lrTJ۸riY1)yǦAL bh,>6`3)쭲y[CX$`c;ʃRCOTw'%[o+t|Vj ^@["Krܪd(ԩcمQs.g +R"e pfN2F&ܠ]Eiz>,l蘡.l~l.`pV%TH/x) ;Ϸl8=kwTnQ.kPfxCYzfA (e"x*J( 3kiJ:3HVef2{j2*{If &s e Q!A x:'Y Xylc,Je*=50Ƹ9/[]:=vׂW*ӭޅ<2WihF#ogٝEsʂsx]BNUS{]4iK+)nRZKz ɖ~T3|yTRgX`5i{7)_Jۆ͌Աd^M𭚰2ZzC?%>4L5q(V$v,=v}'(j F*Hup@Ӡ<{A)fЇ#>:cD^ d'0G$90 -էZHQiA9C Vy?(kX,.d!.TQ'k,R lsUY 6τv6{VoxOk-?_p 838~ J%kGS]<*A)/lnY;4>㥍dMЭ/vI8Hϫ߸z/ ozFh!/4ْ<"sko z5Սafpb(k(9s~d+;G?Yg+tP fn=y{(`ћI\}86\1A"kPU)R KC(q&fmӗ7̟vV,_ (pWrA[ل0gY4Ђ~1~jWۂ)T*UbK-XZzRSܪ9ݽawOT$f{lXgO1CVj|#lL;KcP25r=Q`鈩>Z@B>dxVT ;IaRUSe,2biSd76wTM@=%˂0*D$VjGSHb \*RJlVA hlXMcU'7EzDza PBYN JT>WR!K2! 2nIOm&Lz@ϰKoy pY6ja¹wM0BsK6ũGw[jpUTx|~QfmU)#NY&Q1S`fQt 5-xdOzKгrt#,ll=\m Iq7 X,l,i5$ŭ$ᄨЂ9aݱ ko u"4+`: ̎faZHd'Pǁp+ +^;Ar4*8P/nwu `O_2ErA? E 6Yޞy2qK$fa9 K9SKe[l{z}WYE{z oWnfj 炩CZ VXym`Z\Rwb (y83-I&f#Rmd5Yd5 3kJG K.) 2Z2߰4 w)t,sؠ0!TcgC?LbOY,6̙[FLrÆƐvL=sw 3n#NGAJd;5ENl%VMe|dӒS{N,U`xX{3vvw{B],)˕N -"h4TKUsZQ q wZ͹wfY I X,eElSIAe_noaн*0Q 6(-ظ`7¶jg=AzpppP{Ϋ>rz#>Dq7n,][{͛Q YvǛB@Cֻ刘2PGuCfka@Z'X#Q=Pƻ_OITeRVw UzP UeijϼX GŬ0*urFP"Q5Stawl6NXGWukEw|Z}$ϼ'vκ"uo4[2-\P- sTKD:戽Tpuӑ#z"vFNa/{44G{ntoiJ}M-=B JSX`=KFq(1AUV=1 `հK=yneTMj(;2Z8Z6w/jΞ/|lChfi|dS\y;jFa{dS 'pjK"ύωcV*cor=%ӑen'o{7*:r.qxt•疖6 @Rdce ~B,lةbӌ!V١kah)Eko(;DOEzM nQ^ywGwyxk* /<{8 @~Rx 5-`Md)}/o5a ְEF֬c7jˬ vzkᓃB'Mܞ1{)0P'6>7ZR<_3`w0wr59cVUԜئ: X@[+F (&",X$Z+2*'6&YB8TGXGY%YH5ҩi=緼KmiftT"T:2z'rd:5 lڊIsڍ7 :x9).)t,Z _ZJ(BK &YVUSSCya *B3W)XŒ%GN5R5%32+[Eoe5T<"=˻ӯU[s߯0ӼʞĠpQmjL5 ʭU%tWM 'QANl< @0*spĩg^X:i\3oJ7yxes%c16]z;* 6%2BF=DjbX ˢQL`z,N*tw;Ym!`V禎Zٴ)Vn lX3ռzYD`؋ɆXdžS ;Bi̲sWj&FM#԰^-TbR]G+땚Ξ:Hn c?wt)pp`h^|oo'ۗ}?zc&ps?) ά}M_اl K =KuČP$˲Q^;¨X ELڙ|:4cf}as_*,;ynRQp q#BuhSKWqI-´4xw)88ʲX )k…gM(؛:-lkEa2q'K˕w54@ǖ/;7`ҦXSdAU,jVgP̈́U,:|-a[u9Wޮ݊X`e"]+{H>;>ߨ1j1gvt|tʬAlYm0k>Ʀ*k+-WgeJś5ǁ #ճ0jF2rk$9ko\UҦ"Tm |]6,, d*Æ;3o/Վ2f̕n6,3K'0jYŤ0,*I>/fэޟ{G`tl҂̵ zgMG6Qv_JsBe59@$ ņ|IJDbv^\٨Pޛz%TG3K6ްqNK1H`m(KsT<3[Wɟ|Xo}O]ʗ_}14<^zW}g}gݽ8__|k^x]OZb_.oy򫾭OCY q|5?DAٯZ~۞{杀cN9iP*Vebt,=ˠ0)ظ4Ep/ݒF͂eQn͌6:n݌E5xY>inn? (:P HW0d·jjAt#|=Vx/GCtULڋ?Ō&ŕsר=5@#`Z0Y[ɰw.6ԉՋa[cT 8ReJ&s. XΖ{V37t ڻJ Ƿ'J?,iƜa.FYg_#_;W|kc/Ʒ~W/_w^??|7?^;x,}7KOFc9PE4z o,X8͙q%٩ sK^QK[ JIo:j(D9ؑ[;^B5Ԡ5§!ĖAMAK,l5!gZ0@7ʈ\J kEGVa;Q`'pdC_D R6T`μ rw 5Џ9 XY\ւ9P=UJw TƞnԬ-F0Ž̞رd03`ੳ9) n{7)<p|~z;.4)'_-N[lgz{f:x= n%555!jtd0h:tlC-!$1nCKEVYbr#6,nv6 Ԧ{L-e@ XX9ۛ*N%P*;߱{ln~MΡ7uVqͤpBb_w;nZw^b\2Ϭ~k>O/otZV@G'֚ 2ۨ{nuuLV"RD;m 6,^JYzɲ.>)YYm@k6(wg:^Sdm3Y\tU2G,m$R .+jD5)vAaݨ1-,URڱ( ola-JRϽUүa\ {2xbwU%=v: 9!36+_~pc%+?+_~ppOǗ~݅v wokx*x衇,[) Fإ7BRH Ftd6黖 @j0auЮ0)D[en<ҞڳDz/8%q:RFRPJPZW{ !\"(|nSRdZE LBPp5}1=@Aa=niT '@Iv,(#)?kkkTذVLNxIcWdlPy7}iaYAi,ĥ`-eMP;SnRY6F1ޔOMݗ//{fpm5Ry`x|ľR3Hlv{9_o/?- ochNv_Hm6ΘAQ?ERw+ }\j(so 2UA© s0Vq2|0zxKޱDѯtdv&wޭ;;) ul)$SK˧ @diYF %VY91u6[35BfaV.[y-]IH}awös_$#wdHPR"HH͙jI}:pvP j* *˶u@n[Cgv4{k=t.V?1{?yppMwvw"Tmѯvg5XΆynS;pxظMT͇Al҉QIE TbfX?^uggّIva[oVŭS@C͘[P$[ySv,GL-v;)88!cUH^= rp5tcM'6mr0 \+R4Dmgtxvۻ;>pjg%n<1]`>ݱm ܅I ,= ZpI `b+;w&Uo턄#K:р-3I;z;0ȷ5C_`1ZYaw_z'i'meEtq~*)*=:Sm44g۹5@ kx˻75͞Zw+<W̐ӣxK_~G_{oxO~8x|o O]R(;J۟?z^wZw{pR{iP.db=m6t,;scF5+~V D˲`Z,E ;;wX/LHo/q!.[+ 2:zbmY"dހS㩕νiyӻ3Y \zּ|,Uk̒EF!۽0AjYKY1Sm=qRFeae)xNj̙=P#PG|wxfGS& n߅Q{=?{8xkg}w|EN럙~$|oֿrbsV>[nuDpBXy%~j0,mj.T7٨pdErGdB` -ˉFFj7u Ԓe^{<.gLSU+ѓGzzBhsfKIv=ɫw+-XKo8܀ 3ϭL Y͙ NԵ08왭3{^E `8x`qqM]fpͯ'q;=8=z!6 := \{pЩM=ˉ7¶c^{dXw*Q6g9td9ެԎ2 B/T>P5bf)Et^({ꊽG@,U0c>ʱ[ŝŒai 6(>Cxb;ԕڏ2jpRd"Q+'ʁZeQr[oŒyF߉JG^ j] 8#:4cVrA , +5$'ņ徰YI/ М~$qT̲9K=@wԌޱq*dNsӠ0)nlejba⾵#:vvBg̣B, ^"1hq ౧=10Y6c1+L$'}rbj]37^G6Ɩ  7W b5MUZfxGraSyӰveW}B̛ޟ{JlEVmj {Vl]X.][2U{'X CpK ;ź֛'RҬ)NZ{XDլ48eRw*{wm2Ts7mqް=b T V{ e~n B]-kԱ`[ :aiC~BN,u/e>tĩ^ !νI էZNqM o6ގ N1үxMGZԙvjYo?cp6M _GGO~ IGxC3nBܠ<0!q`pJ??^ `=ݩO{pR{Qz] w6N";\8)TI753I6)jMurf^reO"^o{ﲚto͒v027 х¥wEaiki ՉڵێyF!;IqThXf- dxRhཕU*FC@R=c]fxwpq`H>'(S[kʂi2ZɊ8!ԓ l)lXzfNM RO;%SeE)Ti^Ge5>ҋ, <.m2@52l ⱍ\y8f~̩sxj!)mrlZVWYwi6vT d-6VS#QZ:5LP9CM7ucfc--bw [*ۍwCXR:fV)åcn?^Mpތq` ,iR.l-(qDl"UTl\Rr 4a`3&B}Ab{_ki a(+5ܥn2;>ketO(OX=K€nw,[%Sν5+ A)B Q*%R*nSM]EV~U)v(ۅM^+da3ŁQQU..4>܅f=*.}I;fP^g\VPO,Ιkq˽a82۸b f{}QusoA1«XC`+) \yt# 5$ +˲sxRęM:#/z_>}oO^x}^I'/zOO^t:?t8?sl= zZ0,XzrjQx*QVq]VIqAj9C]j'qRDzfPd+3%)l25'ffM 15=µ0Ԓ~jc%? c)0=gʒ0%e EUI֚* dElYLMzQef#ݵ[D7-@lГ bm,BxLWa0먍 'lO??N(/<`7IkDʐ4%MX.l`1*ޘ3 4(bD1wSODYYw MSwi?#oL0)lY-$ %@>[y`q)ltj徰9t)PIlPLG;o'YK5DGh(y(Asf+Kf孇9̙jsZ/`A6)Ռ AbnzXXZ0 j¤X;9{z `jp( ZxOHsӌ9n{w^4"?iw)e0[o{gUٞōrS/d NV'򒥥ױ̅ jԨxq o/nv+~v?˿wس}L^=A3q̎fO ioU3珼K^{={ޫ|gK˾#o+?]{ L]3<Á>;x/y RՇYf\ϭgVd @G hIaai#^,{Ah+K5'6UFk(YZaMI e"w,pjpvteEeP`$JQGL5ű&:.U)jxe3K7lr`оu߷4=SMy]wќҨPQMn\ej=aFBaRvJk]G0>&Y@=Nk6\`o.0={l[Lm1BBʅ$b@ZĈRž1֡A䬔D4 JAh}=fl"J^i an1?9_"n3lTlXL@_2Y,^yν P%cˤ0g^6(kudae <^f1JMծk 5,!IG-K_.9u,%&V#CFV?IڛIZLUטFAʩqD'eTS3t،IaƼSSa7c/])bO7RCT t;O 4Dv݁qĜ`F{.@+Y$D835, #$[0K}HT{`N۹;yc] FqI8bq/l$d@6 S6č:O0!xp5jGEP7l @F٠`>6[g>(aYqfۡ-oQgj <'lZۆ޲$n=5nʉ} :oŽi4ŵ8aP><P21:vTȮۻOcD!g #Jєl"0%bX_x_  6Ipbܴ}L6JNM˼dn.<&X,5t0(p`"^3UOݥG*Uկ8Ds@9xV!5)'c > UEʨ@D_%bY˜6-74;RsdS{YX=_rߓ_?=3ٟٜ_3^rp׼5f3çwR= ~yߚd +=e5n1=F''qaK2=sC@n5gNK: YVc8 DxK@, b ƶ*>: s #GOQL X"պ97L0t@a)]gLQfsA6* (Vff>ۃPUEtRÞű?u5T>(ԯTkaLͲ\x#lWg2臶<7*g~үfn/ݝ5Nƈ}'U>M%ʆg6\JJAYD 5.;b&3~O_~wl[݅jk-6Q`j B87%^jR+lPsj6V5͂>#wFvVf ˽a]zwif%B͌p2ҫ7'F&%U6c5s lKvW2~*K0[-JmיjmNQN(+3z6j% s%P=u!@3(Vakov:honYcYJ팹.0 уÎm[Zw@̎fO /=y;-_O^'&R^?e?w>>^'?Xo'3zfC?Cԇ=%8g 5/yk_WpÏ᳌$'j\%ӾL\3+uz9) =[ M5Ҙ% nν$v voT ɰʦ"<$fHYBCokLU8* :9u/vj$۞hKo X3z j=!o-m:2G䤡*VR[,Y=ֱYsf,uȳOKWjqhYf,#0IO/^_?F4͞U>z8=U'01a4;T h6{ٵP5cilMWVja}$Jf wgs<|໓9sXZImV_qW3l^e3)kacl՜Z)]6$`PxQZ+ KX␍oR٥*o:~ X,;YGo&F 0jYjO+\ZPGj;> Vq]|tvjὡ 㠸UcP|b @;gN-{,`[ąIVUZq4KQ6&ŭxVfa]7Go~⣿I p[?ocwܤ88?s<~eZ;*ݹwMBνSt :MBC,mm9ް+ |һ, (NE\0='ݠM3+X⨘ŝyw> 3Q=G֛ǍL@C4(=ʒeiYt-8NJg Q$"&Q\+$Iv[ ! S)C:5 VR9qd8\'Ip ljE,U>-@KAFc{ ZH$fymyq؅wJ"ayc'`(dgi=a ޲k3;jλ{_cIB ??~lv߿O~fxpZ46Oz^ɨ"։gI XO6r'J{mF[( :$]FE:QsMea՛GR=iFXl qk#uĴUsۻZ)^@٘\N5Xդ3/zjΛ:R%.&ٱ 6fw[ UI BʑM8xѾFMI] ug9e9e&0m\آd̛;ޝyͨPķ"4W#)_efp1XHc0@!F`{&aJ4MD a}_yM͆f0]Wx5VYPJHH?5<+?4;<) ҅c& 0hT쿵>ck̊A;w: ow"" [y7(^ŊraitJ厒gU,X`bL6,X` A;7 ਘ\$ #v-m^@qqMRKzIhzc&F T{%-ik!GO \j2]5uZ 2BRXyRtZZX\ԑݞr=ڭnW7w>~o~?)-0-_ >7UK_b>uS0+_&8קyXn=arĩe DwyjgN Ⱦc1/l4Nyrٓi?Xe)paa :}Y6 IH'yc%~MYϚ}4hTa!o:I6cjբb [۟=asb;@p{DozPz)N +Z2KVPc 89]é"|Dhk4Pr4¨pevIe;/]{ʑGL SG&pXXoe};?/ڕ7 @  l+Ꮇ[oF՘%MNqT39SocnzP-m2$#t# ]|4*b"~7O~g}ͯ?okQfX~/]v>=ŏg+ԏrɟɏy6~O_cp4ʛ-?>T?0K6p#$b2'fF6)$Rgܻ3;zd*1+[΍c(BY|@cz3cJ5-͘ e({wὋ $tSA8kan=p# UVa4T+ VcT<$>cg,u(|ئPeiaӜc.@¥;o VdT [8.elXրQ&RI($ʻroж AKnbVPIfTmՐ5,M3+-a$;'qfR pYS\y3)IA=j{g]R/͙l7[+6,lj (Gf,͠vrqX9-y! ̙vڳT2 (@VӰ-u#lgj l^MPv*lm !0 =@X-mlӉ!hz*|0|3Cbу#Ï~'|җ}?S>S Ook|}tO۾?7 xK>ӾR~ǿc???//{ _O\_>%,_o/o>SǾ]t}=S[Uw,Ο_T~?q^?}g~ٷؿ|7}?><җ7_O0@ѯO/~'}/~7/~o?K?w}ք_7|˿c^/#O ppcO^ng+>Ϳ?>>>7Ϳ_m8nm<Vޞ{{ۍF!,٣9sM0B fX-xḛQ_N~a; e Kwg~~؞4`n&LbL S gpqT8/GQNljX:If9P~OL=}mFz=/7 ڪfEYPGʻb?(jjG2j[Λ0^Jl2jq 4SK=|u˲vT0`3 }yh:EU:a(Kakw)5%zm[ $3)!guEh`(EI;v^-ĕ%5 PY] aK/|\fTЍ, v&N15Ieһ`* v\eߞ Tc&ɦ.~(el@Ցe# VZUh۸IR}fLͨS],`/l3ԒT$?{YVu?mfNK $@肀bAҥ;P VltAtHHr̼m^?wNIHNbAf]s={׺beRkEAji=L<*ҀXͽX*3(J)'84d([x`IQ,#2 *z(#*2kB]ZnX k3od@7_Ƿ?~'| :U??C/'y?mԑWc/{>>y_?|-*{O]O~;O[M_J=g흯fgW?I6|붎K|}?Nig{}?{:淅/y٩x߿-r?/j 3q)zꃞg?7=/??G>9yS^}8{1JI׽ݯ}?]bZH'n?"t{s/x ^𛏿SqjW4I4G?wGk+qR}y$75GS}ĥB'Ku9}WGe Bb8,^<Q0[׬+)c, X2 \ԯ]2B@NGCraFf{MM$,mg^νdP 99ֹ0f#, - BC2B'¡M *4 &#Pl PN D 4B6g<sl[!{lY2;E%?؈A9}@Xag[{m v 1˜ *fmMc~0CD-Mne )U "$E1;kŨCj:Ę.č2%C)JfE4U+F*l[nNgG#q,ZvIo{uīNXtUCR 1@ldK–[ ZcQ/4**G~~cnDa3[O0hl}Ezf~.YX ͆5c` 0hȩg% eUaú>߃3Y[# rp|˳#q谂}lMv$s/g} fflztñ:a!ZZ1ͮf+ꄻqg<RS~Ǻ^ѽϹ->C s 7ng}YV7}ೞ|._߳~g rϹ~ne~] ?i^՟YCF_w+ ?iwݍ~V`'}}C~Ϫ۟\_6YgS/co}G}Yw's|O(mU8q&?&Ͻ#{>7z7w_/|7]'=WNvw=~7j?]bABKqzeba:O?u?}cPio9f~^68-GA~eq5N/s=l9͕=.}4b˩WNaE!W,N$G3a9`->) $9V`.(PuS4ѴJP4ⶳU{Pp'2p"XY7fݚI?`@&#XVl PO )3p)e D,y;֌Wi]0X(KZ^N٦B|E,9]tXF/FrG; ؎se!X9j5B Y{*Y]I 4H#C"S0 #Eo+gsh;FǬXhZS|c")x($6"V$3 g+ck*Vap5.g+l9k,¶W.h0٧ )*غZHQ: G$۔5`'6@HFh0UkcS{zzPPa));ا\\1#fڱ28} ԫ ":N  UH% މsrz*ʶ{:X*)]ۯhv5[]1M?~`ˎp?t/NO|^ps3_ŇwC{yΓ/zEvg[g?zY؞}{Gpʩ7J{N/gV^a/i>9s9|ӏì_Ny=׿~]oqoçd=ww7Z_gj^CN99~ʍ<_()oo}{>q'!O]n}/vjs{o__bH-wOzP{ X."^r%;~wIo?Ϸ|*ֱOj?]bano/Jq֏8ogr>w6{Mހ_xNhľ^#U@b/ ݚ{rl!;:qq0VD)ǖ-28)4 B*[(|>A):Z1P MG<X\aVX]W,H[i5c&<9SNPY?baqlLXnz23* [R CSEpY+M׈ ɆCz>f1N3m/7}P!ШF˹-*4 zq۫֊s!8myP%q28HH])_XꌴWסi4H4,%}2T3ϐ,*~&58V2NUݩn$G 8r_]ԍ;8DY,VɤeLZ" =ް}-[eb&"[o# e[ZznPM:̋ZYb gB O͐iC@O6%1lp8MMqFm郯zРZ`Ewp[Ez/ysANZ[Yu'ؚ1y>n4vɶ}eSdePN)C4vbM*d cf@{C߃S/ 3eNKgʎZ|^yesW3Cӝt;wC疯 ={^فWO^ꍵux;۷Gv?ĭAr .v&KFn| 7{_zts~S&L@_=y׿z>O|+qR}ywy3QJ%q~MX MF'e@2Fƌ{7Y8n&֤̏wjAD:^ah]F9=eCZX[Գ!H. zY @5f*Ze=U\YW8`@D!M| O؍2p~-zz3Ϧn3/^`?ɀ@( ZY#yv8 z e;}Ƙ+zXY?6cc8M|.:iȘle!ts^mA!Oqc}əad=n w"L#B`#K/Vr_ <ƨ@R(- ,QG#*$apjջH2U#n~`&^qUN TɘB_euIuC#9Ejq@Œ[DZn0 ;b% [(_(X[WPjĔT Jtd eԄ"<ԳM/;YžgTKwK +qл_OZԋ}{^˿w}ӧZ^k;?X~?ƯsK9w~c{}Hu/5oT?On }7S3'`!?i vcutLyϺ=g}rEԟeyfx+{_N8!~94›yky7o^$ ~uZ| .vqO>ջw_ծ~.>pꍓn|Ix ~{5q/wUH f|֠} O!1-dSR cn#ԩ4J0OB>KH^5{lQYܛ2VV"1V3hݚcXS\BEspEU>Kz/m{:EĦS/^\m϶=eceSԋ@Fe-BsL)@*ոQ{̋BmfMtXQ{oM1KyVQȖ$4%xHcfq#,+.~lzѧ6W 0qTXAwD}죫{U%`\I[+_h!؎KUzM)ږipP1ӠN-J:-pGQpm Ri"FŘn\ytβTx-G"(ad:Vá0(_*e e̜×QOߦ&'CJ2CB neЬM -߂۞[[fQF`XKi[aQ!=RrL8Q(_US̀oͼP!( ,uLfts7鷸/~ [|Z}cq[쎏Sx.?}ey|%~t>dwտǽOG}y{5BtaE,(GW۩n#UjjĊLf%J/PHC4 '+]z#$f&+K3v֬O!}lae(Ckke9%b KCF%EhNY% ZJa*/,&M{b$]y12ێڊ'"@'ֲdk֬ND.H1\hd[?G&>&1sx!q͖04Fr!7Z]ܙzxᩝ"кu5CNU{d2("pqG^m{9V:`+}~y䘿v_:7|D9_nw۱{s3(^?v;m6~xkmsGD;7^j??yrwc6=}ի^G<⊫4~­^;s_?g|?.sMoz]r/*.~].vq;{^zի!q+lllw>fm x'no7O*}ӓ~M_? .1j@1O/;I0&R+ ɨ! K1*{M_Ő&A;`u`U 1L#k;Yj%NaM,8̋.=[[0FU蔦[BS/Yۃ[rT\MEQűa̬A܌j`c ƸbVje#v}ʹ:1䧝z(Xl (`?j*RElucr[ɛ"8bC ?t+j:uTTX1)FBשia"GY"FHᲆ%y9{pwt=WcPj;V%bT"TD#,V0XeozI]`V1Vfԑ8ܰ7AT2] ˍP5?Ckev9}`0nz=N;d(3R7"=`|buX€,JƜE0fLGf >k#yqe'9vd 0dA(s5a{ala~jwpŅP;(@BJ$^HG=y֝sOqlyc /F馟lR\UounqB\fgǾ޿s2Gx(hupӛ>/}/=ܰ?7|Hԟ_w|Uv]kns ~D ] ^v웃b~ZWp}Fo/|p5q e /pebJ{lǚ44ePj¦S/j˫V֊lQ:Ĥex6b76C!(J}kdLh@e]/{Ye :ٺ#ZYEt5jXN@'2b[K1 GZv\Yh@ qXYS) z/M'V& fb0l)l ۞US-B,@DXcg}RZXpnzŀTaL!!pPrAӽYB(kU;YQpP`.-vaErDS5bӢ#FRGbz3fيp*Իcy.IME#K .¦-/ hЖ >v|LӃ58`_Kz7=_ȶ<3`͚6`e)NIQϷe.-XI=ke /: Uɘ<^cθf%鵲g%52!I`|[LUb0"#RJR-$(,E֬g-/^̹jOa蝽aA`!04Ug{}+/v =Љ=D ' -{VŌe< !N _hv[]q97@pu3~̿_~O: //7oJ˿U#Ѿ񩷺~G/Çv3~ O/|]w?G>}knt >6s[WR. k>jV^{Ɂm/IS{uM/ z7\KfCFS/#bZlŹԳ-Eb^@U 7*g,0E%]@P p"s(㰅uS^.= ٯY@dT#v`52v< ?w Qqy:r1d@" Hw2d?6MqLVR$&. ̳%z,REQ0_`Y@Y!A"meM)&!I)tnoDұ"DY0XV4cΪ +#>4Nan|]0b<& TEeBa@^a[VY3hjV@r2r`a[dI5plX7TN(Ua(h$J*[kg#M=[x 9cYGC2K-F-T̕cA3/ZqLfm.#/l*R} KeƬ -ִ"!*|ۋUǮ4x҃^|}Dqo 3<繿;>N[{EOy[-k{|y_g~eo_Sw 0'G^L^vLVq^+@'Br=Vb,)ʎz25cv#2h!;+sƱuc〞K֭Ya-ϿЏ沙ԋCP+kLi0Cvk_%tH[Uʨ81ֶh;յN!LspWj:VB@LwJe3 *k{zIr]I4`@Ir5N^k7FRfNmIF`pI,k1[}\>k FGp۳V Ӳ~{q̠T8nn~Ӌy} 9=!Er$`RERck8lBq&֤k iz#>Xoy)<Ł^3,-bC3x oei =@#Jđ5u]CD֊;-/k>Y(`u{ްn͚V[W*5,jbW]!O?y' >&zXYxê: 7>) ;&iҼkb~}=e.v8e/CGg~=y ^;]b&gq&'+vR]=,[CXP،RaE <<B-oyiPXGLЃRy gd[V-R!ul5/l |H>nxr^lఏRu[VaI %#kp0a`@>*L5+ĩBˠ59ܳF P;VV+,PCyы,TI ᮜg͐/FKs#,#Fاɉ!Gc "] J!yeDØZ%tZKL-~Rטc f< "Y,z3ZLBbzi.Te^4$:!lB9O(aD )a6v-r#/*2jx `3!cX:X1wp:rE;кu)Qva_UQ/3PξXrĹeJ1}J{Z [&ā[*ze{l9a+D-=B+Il7h)#0`$TЇG+z*f+[ʀUM#Ȑ&{rvGkW{.e} ՃUe]tvsG{a/~ן뛢|K:{>/;0z~ן{S'?)OyS`.v]AKqzeb ߌ>bˎP[pZIH!r*Q&qV>Wʢ70EqÚukm jd^P‹/,U_5kR-7EM‹47ƨZYzAcG Z(oack'VϽppoXl嘱ٶ^XaQ%XRcS"q9ؐ>b76c qZL+~EMd*$X8`Fe,HMtsY*dЈ1g[ !cNߊe,=1RL( 2:!Զ>Vuu~vJ,u`,Q7H:a5%&j+t'ekYFf4C5$+a3$bT׭zKFmXa)S1*SB[PsBXn{D7Y(oEJr'Q[pQǚIke=Kh$lڰf_njz"0n̮`+?eW$ FK_b,SIXzzԳm/[q!,UԾW\?bSW]kE~G~C~ Ӷ]CEI?;SN( _±'N::&Kqwyꧾނu[=΄q[lbqСBع]bc1߿CW.^O?󶏿Wᾗ>M/F3~GI /XóUx#Tt?\ȩ8Va`] m@n5ut=&`@Ћ9ePALݶfMAجYs(PS[Hvʊމi)Szd%˩fʇ'gPFDR/kό:),k̋5kRKx8bk*y! eК0&ur ZiWk|Yͮzb.W<{}/|R髞x`^N 6~]{u^pd0$+b.H,u]ooo_|3^w\cn]x0Ct~upc(]],{zCǯ?k ;O`)("|͚u{QLgxb}:͡!'ΕT15Fk^3C^ #c ʠ:*b̈́1ؑDRtQCz#TL$e/Z ZtF bLWɈNHVa%`d:}_(cS5XZP-/$&DP+n;",gT,>"ֵV!YWR aXY˒ID >8~X1þW3PUX.b I MC}f 1n`rFGt!y"i>B* ++}>2 `IxL)5yz%%J- ~k7w~逾9Pm.pQ3/֮1 E"PS'#QԁjBcmuJyYJu 0KVajQLCŰP\,FH-RUgN6_{YΕ؍M3QHQ\\yX[±cʖ^ 3/g4.;b_R_֥Rke۔4bB:٘ġŒj(LUk) ?Г z߾_çfp4Y˷~{b~^]oBX[[;䓯fؽ9o߽5d^x}t.v]|uÇ/\D9?t+4P_s/zcn'OL9wʵ.? [OZWUKRE&9 KV8ÊIaىFV -:Y_#QЖ[6ܱ{d ʩN2TfZVZm{P*XA^kM=cuJ%M(+휳N€ $Kj![zsd.!Qى=X+j^Liz<'PO*Z$*iL5 vb?$fmk)K#a|1;ukcw?HHWXQtm=9NNA:'X*+5y ]FD fa&=ʏj l+"J(.2L(yguE-Vu4Zւj@Z(Dqb}[b]Y2 B SFKl 4qbªnJb++TFd'ՒFa˜^9U1TY/M/\Z' mp1g,)J@;K%2(.ĥc{H;8jb7Fbk=؊p #YPFϠ[vѱC0+ŧU {ƅ7O'_urbNHX<3Ͼ噷U5}>r[Y;꺮z>F7{w\'=?#G?uuˮt.ܠ~KOww\C^?x;SW wp5|_w)^kJxNu_nSpZY~.Δ/l!kw!5l@%{ P8b4U\' =l妇J4u4UY!5k֏,Vb0u[zdXHk#ŲSb/. r T',jm/ʷzrqlۋc,A*0Cdd:N=+2$/E*e;o~# mS<_$2V7zpG$29R)dRVc`d(Vi1F4eA5q, K}E2$DtR_EwLR\N_c 3*8Ղ XP=cFHʈaeBZ^2M/!-ҴlU5NyY+#A; :f:qmVlv{.[X{hؚ=qZOG77 3jYj b`ĔuZY *ƌ@`z^fqVhx@A1 ^[t&m]iݚ j:W۞QZ)[* B+TY\)jlWݜ!Fw~>?G??|ט&l{?W(uEĿ<ɏzww7@鮉t.f7F/8~5'm/zWbq6T$ 3.vȺmpI6}\|ܤ%6(SϦ^lyV+H⺤m:XAOg3eSd?`#vGXlyz6Ia9;U(X+K!*kR%ݺ!@^BNIsAI1bn` T*-U=SӝA92P9}#,qrB/`3Rk DIU##f̀1gpB+h-N͏nyt*F yCY0LVQiV%l݊5-STitADӥ}(&oQu{u_1E?z.Xxq0瞧FR }=OdKe3FԋKġ5lS16)75dv$CvVaOȠ4u$z+{@&uq+Zz>Ea@k B^[WY(2h~#,+3U[Zp0L, 5f MM`4_1λUOh {'/r / hc.vq°蚢^v(2rSR_IT%X,P,*3-wBAوv%Źܳ ZYJx!H3`XImزb_2}a!V6S<Z^+̽X*ãjeI<1woV6dG3 z/ T"2)hgLdLR!xrj@mX3*l{^Bk8,׬Md $NecvԀ0`e2` qO\T 2 S9Jg*cuIEY{RܒDUW SJAw?)[K?G"gȕBeQcWմJuI J&+)#ɌiSMRNe">?dZ7XPses;_#GlaK;Ǫ3%c'08`(h8acu%b/3:eP8`oD𼓕5z;1fѥ}trXNm:)&O+zN'] c]^bQShF,ZVnPŮd̡F^PƂJj`ݾdD P"P7AܠmVV"dp c‱`,#kls >Jfu¯>𿅫g=_t=@y>qi m~}?b.VP>/)dg˿k}5jT_wހ}e]~ݚ>Nf 2 mhq5ДKYdu**GBg*h)EtcfUәe>ئ5k jQ06*Q/|l)ke(USRheS/xy0VƼA"^0JӃѓrbTAdRm+:хkVW[Q*_*4b;slyyQ?l?Lq(VW9ؚBm.AI<P*;q) DDԊsϢlKF+^rbOZW!$ԋ#qyia~rO < lC YIĹATXآ]۞ К%^0{TJZM9&y&:rfW|-j>t|\~I9vY7_x{ {/]/GWV+Z;`KXbTK{r-C,5AɌ ZEpvBU&M8f ۡE F=0S zEodSnANp`SBZ6QjĂP~4VcBIJ,SϓЗp+vF+٧O#-,004V9Hb"F74{CSQ>** !;Q6v-4#k6lb ^}>$L7oI,CiD:cO$| i,X.uD}YI #M}2&*Hl5U%Yv>0Ux*iwhřgssZ4⤰o͐9n),sغcwRPNLᜎmj)E@@ zrĂ>g@R[zaR٘qlD:`PE4kTl{3FSnpavQ_pv\ӎ؞f'z: ^fjs ["NM;} {僁ukXÓދC hŅZ!ȤpZŦUQ5nSN V亅xU?_8!f?{Ƚ%<~ߞ~L?~_~kx{^ {-~-zIw]bƸj'U[*KQ ?#kSgmϗ TsRJoWEp6UHBJR]b-(<9 LN7 +{KY/˶ULϜSjϒ ob] MI)tlyдa1厦,)3fmEKČ>dLSЊIlˣE@@6Jtrsj]|eY|ORq'"8PEbVa 0 'CͿFmK[% kNƠ!ʯkzlt0Q&H0 ӄd 5L2ɀkH!(/&ojKLKbT]n0_`YuSw 3/#,)#& ZBYLs@ zA*CIwrsA&`]aXX_+0@Bb'Atn=,lFct`U?G2x؃5 k+A;iͲ5#!zw]ōql;x*:'t_nW<(oo|={>3r|V/޳gO]U.6O}j:nnn.vllluYѣ\p k#M6Ŝ+PIVy(,eS7li̋݅ZaeFPaQ0 c R,)Jn:hKԵmD֦պđM[A TC1_*[֠V>des/H52:FMm㔀1cZU wT:>#J5%J*}\O QKJbpS5P'8X.T'*ԶgV0~_'W.F͙g(UvbdQȓ"Rv>ê龖m{Q2 qfu3&K.$#pqLo#qpJ6 _p026$z X˖\ F!TCaKzhF;]V6bQ}DR`cF:t.,C 脹=Rʼn(+;8[&#1eJ56ֹ{fMX;GkRJɠZY++- xa\םˎA_y?~yཞqgm~VS?}~Vx:_.3USTgqwbR|31f7;:gG 7ךd~Mqyqr ԍlH`T>ukP3Vt3Zĩ*F!NKcbdm8rkV ͈he. \.5š /2tZj C(0Bm<>ay>;V>7my.bRg\x^X̕:ذV`+FPbFҍ͕W HCF4 0Kϓ9vA/O@b*J)¦F<6`C(BzIR IܶbIbLV@ G,3G~'jkfN3]0ѰSHIP7 aL ʦY;ql1ƕH\=KL*@J1B Yz iEcԲ.}a[!#k&wD6B+'[_fʓtP8bdm"U1'lb^Jm(XzTfq. *<ȉ-J-Jx=OqhI,ا'R [eV$aPlazHیQZPbɘS[I"*'=k^o(3?M{OjxϿ='/{.[Ke i.v+;/[f|dX~G|L&f|7  5{;)5'AWך<Gck2XJ{9oyᲽa18pnz9`Vg4udu-r- k(- [z2ҸW,Pcv=X+اК83/z}.8C d7Z\eI"@B  =lyَ,FVhrġF6b?dPBy1xU/B@%Ɂuk+z-;cFz9h_=?[H"_wE_KcDQ],Cb<_eդd=M2qU 1`dZ@Q@B]XbY@@ۢ@cLG] ^m袇;TOtOG:qfDewkYG<5SRy`PO |hra.zAu7 L,G˨.%1H%#tG˩g,g%a9O=9=uPMlϑRyuL+J,qT9WpU6Ǖ54Cj\*H3vCY,gz(lX=SQ+S`KP{rL7=2!w[ Gymvh.vqpjn\Ͽ/ۉ{$8DЉ)bsIAAH(;匄5p~?( Y=>XfL_G[MRa/6 4u^ dkF@EM, @,죸8{Q+kw4jm QdatζYQ>lr18\e9UM/^Qoq#X+KjL-2K׭]>})ufld1|F|ٯY:PY[ 8{ߪl0E$7i׫npx0M)upTFȤbD۩Hm}L2j;HRwu<^L߯j~JH1 H[>;WXהn͈ff [2)IVk5Ȗ QPƉuFUYfM/ȓƦFLvK08P++.Cqt4Zp&v,䎔ˤ3'C}PY#DMjStSϨ8,oN ]'*K#iZu|^Fitb\UDzqCXx1SA,1%^aV X>[t܋(^6MjYKHjT[Kagxg^V~]nw]b2ÄLY";#q\x(+7OwK\RFإ>@u Q0 ԍr#= !BIrӫ59}˵p..1;r$gf^Ha9ţ13  bL¥%}iOFX`LBM6l^۰Я[?aLaЋ#Ʊ5zp);֮B<:rl]Au+>fw ԧe^k j1[FpE+[**orvP2N=K?4d?d6YP0=-/6L!6n`MdoFGݠI _} Xa*9T RꇄPcYiA&2j{-sT%,i4p Y@0( NƟ?WnIer*qԄ|ṋ5̕B -<,e3uAB*B?494s_XKőKeSG*2GXHDZyTF,=d:P6U66Uh5 se۞E!' i_0S=K~keCƑd|~OX[S[E;iPK`+o }_*uV6WShmb"vwVY\f_jbf aVb +q =W#bqަΡ=3ƳZalX'3ԘkF֌BȪM $&f`b hd0m\,dQ#1 }֭Y K"׬/SF9 >bwR7؏,-ѯ j2 3l}gnPΦ^1cF3PV.pUx=ܞyJ:CI]WiYnP 紀@_V&M&s.E@2^pD&c2# }yTU}9y̓nO$U+ƑI0uրjbb}A;V։.p;Y-ܹٖ VU{(lz*Ƥf{< 蠃q%cY_z><JyK@@΅mghaΔña9Q{ɖөDv *M|@ܱes x1d?׬;),rRYke0Q IZ:ۉcνXQZI CpUkvWkw4v[} ֊_Y%|gmѾɷ||}o*:57=rf.vqbtQkTzZG֍4"Bʖ`g/تЬN%p ]([NFHu) @Y,^M=;5'gVZ'l3xz#.(@)\^HŊ2 U%>2xZS2c60s{p!`g_쫩B/hlVaQ  =49ᠭYK3/Z}v\Ƞ`2*w.IYKqh1HRd,Q̠Pcھq̘Um2*,WOs{he=@hv K= } VJ{7ҞCRf͐}/eQ{-<_(886 uQ+jqoXȺ#X[R!΀mEAT~nAj7,gjXotW?MӻWw)orʩ7ݾqM9u{}9>=Ϻe83w[>u{o;3"68V?7/b.{\K6oزd[hB9bʣO%9d\3qX4,9# VœC;dL},Be-+G' ` ͆N@ ,/UDѨ̋5k63:獲D: !%=B@:5ũX0n2z"Q$4.TaUlV͕ײPHq+ӀSX*adGŌrFaed%kGM ca[^!fPP( ,0BS;y(e&ѯmIEDQ :FvcԴP( % y2evhE>j-R մJO:mp[}NT*.rB O8uLBb\˩BAU1WPVT26T/?X`*^BJ]Θ1$[鵂kU QP#Ԙ1MFQզWy6wd`Im{(0faqɡߠS/^VɔcNaD(X]\!R\Uou9l<.ܥ|k& y :~k͟}K~S ov-v#%_@ cCQf9܀bT P+8Ӳ]h k)=Հ^pTjXxj{qlĚn>WgHT8S"88d{^(ZY١8eTX+MWF3hCNjA7#,RhT=;^dӇQ9b:8 `B hd#k⭊K޻)U,pPq4DS$IcU "L"%裚FuHaѐE`%䪥0YCCWRu3Ii'/>` 32sĜfMU3z2غЌ99GqJv1u%MԳ@5#A.JL ҌAĝ G=/mVMcZc[7z@LsϷT4 =l~lv^u؋N;gD'^ C4|[E6㠆UdoD3#;0~~`JjM5Seێ8SZeC I -ppb)aYXIڀjŅ ~l~ cpfn\ 3lЉa6/#?{y OϮ|Wk|<}oz֝qgv|K>t{y-8'GtoKGnw_pM/3qދ~|s[yos۳/~]{7_`+sǼ.sO_}=~˝ǖ@Gg?ʑ`O?N9-oɯm@^?+-/,e.vq'>Wyk>/|ы^y{檂 vq 2U mX?fW2V4:=[VL"l@33/{Ճ$Zi%W%n{5b[aX~.+4 C%}h-Ĝ>6ueXEt9}8"֟mr#,Ob0-d ^8A3(|#*|(,Ҡڀ:%qeVen)7r4^.J QA@Eds!!Bޚ9{ۤ2çRUTݪS:k}vkaI&-@!VIKpM+zb3w/>;nrsJx=T,K]!fش8\o,ܞư(UǮ[89dޣW,SFĈcӲ ĩv}ٽ=Ǹ"*xXFJ.Ors!- X_ҲU׎GyOHb%e|/%b2Pđv9BhT@b/р > j$-k+d(Nĸtknf~Yd FȜirH:K#0tiŵ} Ԛ5FI0帣e̊M+jr$GIQNmfRY3L(ZJKWtUR7 :j @,ɶk[Y _uUo~?O}M~~%\rw Zg邽7/_?W}sy_?<o9>}x~>+%e>|}޿}= [}Q~ww}oq'WÓoF"}Ew/>_z:{=3ֻpO|7/.y-|;.+<'_ο^^ko'_|uBы?zKn0t裧<ôHe^x[~S |Kg?}٫zu#�+‹?{եGfzg|O_/dD>8:`]|ރtܝ?>˃`ڶ}ӛtW?Og</K_?<6n#;;@Gi)C #IشjeSN7&~1E 'Lyj()9 D|$H@64a*ˮQ\a/`btc%尜%n"HHm9@PQ;h!(]_ 3+6-Cmk 3u,=l {U# '˓i ZI$i$ ZjN7ݲzêL60'OZbٞ)SycV^F[Vh7f=R'd@ pđvC Kiϖ4E _1Gfgn90C9Tԕ R xppOUu6)Ph IB4 U γA\퇼b$DA/ҴOmVϭ(. ~a Ae k.T"%Q*AOY-;)L!A1?݊L$5ߞe. H"6ܛjzāv= #햤$-i\nI㊆1g UH!3wxtll=`e^j:*_} VNoZʒt, :K$Ω;pCtИ۰jϬI:1 w6n9[=gxv[ézfw(?|]E{9B\  ^K旿!w7}KPy?7+>`?|G[juc~N?ozgiqÞ3oWfI?te_ȧ=+q/ 6tOxq31] >yǖ: 3Y{x>IOa8~KY~w_7kOTKqw3ϼ9P.CO?ڋ/_t3??|Z Q]u'ڋړ>0?|MoYkޭ')O_ɿ_|uwe;õ|[|/çW9~QsSm|o}]~N_WMoVoIujbeC 2y P8AKS+'VoX5n塀/3`zHۼ0 pR$VV4y0@"Q 0ak\aI94/k!-eO*'6d P A&&xGZk"PԮ? ` l$žFTe bK 4VLj@#dc&N/֓\vIZ"@Z5"E,72Y٘pȳm '1AftY*]8mjg .xzp=9x؟vu7lWqg}?xMrn'{߽?qǯs ;wD ] /7ܱyr;VGwq-ݱ'N{liOz1x=IOaO|/C䒍<5G`"'{׻cO8._wx|?_@\߳c;Ǟpxz@u\rݥ>}w~_{=ʗAyG 5" P:jcE>rsCN!$ +7Vttdf ]S󝹎>;{%꘾5[,iI09p߻ Ja[ 8ui,iW$CD(ƒӌ$VÞġvyrMgˮ0n@~- %j CX!']c㖩3 4_\p>~)c9k;m~፯g=}|\OޡK>^}%?;]GuS=/]}P֪~A[ٿz/#iku{/^v;IO:=so}E= 'ކpZyu7俑0?ex{?wcg6Hd߾ kGεrƃN_~G/_#w~Й+#^cvlc>G>{sG>2e64nIqy筹fi[2KlVmXoFa%i6]U $f`nfeKS:ByG bM(LKZSOb-/Q:Nm,@ G.X9eA.Vt2“nJemF+k%bHfK&,T@HXј+"*,{h^FjVfVn'6Ԗ$ `:7{A$.vCZ $[7 rݒ$;꺕c`l_'bЃs*z:"C.437z9Q}A1"7fiPE]ù{x]弿i'~ĥT¬_ut"}PB} +k@ 4.K!fuN49Qsy;X,ub(%eF_WH,H%K/>^lqUC!8 }I=abK ;ݼ{a-6אmOR_.-+a΋fg80_ R,up [ѮlXeFV$h{a%Bp|#Qi!9%Зem*$ V]{ 4$h[X4 /w6n v|~D<=|"8vG})Hm]?׾ouazw{錴ܟ:g`fq7?qfS}ۇLnj^yɟ_sNdiRw,K_N~r ]7v}I; O<K/O2Tg^en~׽콧<;3׾Ocشަl- IS+&Z Evc"LԟBiTXf~bzYȧ[,7ȼQ9]"UrgTu n"5/w6}[¡fma2$_eq_)=,فK/.}#xC6A׾|CN?~O]pw柯]y}u{^?Xg^y½|~֡.?^W~߽O:~콎@6d?#G>. nEo~!Nx̗1'}=W)BW?ǜv>5~ף u7A/O8(Kg}ҭ5z?ˏzYTgߞ{;̓Oyy#3|3Ot>kg|Б>H/{O=ǭ: 7?g׏9RweܖaBe^( 'R@v|F8B"$3+r2tceI[vS,tyB@vy5P-SӪJH $}WHTXKͨL"DdU XGmDe!Iʵl̑91=27N0`IS!,rN|DjKܲPHiSX2Ć fDVQ ]um!aIlniY[iK#Ef Zh7 PV|\,8h;y1 eԕ0b#e0fWj"=r/w +ih; uc>;|#&<`~le.9ȳ e1E/CH*%RKm(ɦZ)v\nO>"IJHv_/V D*A-,ay=isJs†PWik٘3{N8JD ֟9]@igSf  +oLUCaE#Āҩ4j=sjPBCeUGu¡ $ttyҵ']5-% CK  )}VŎ.R ( %%k[7 sm o $x5ySc='>O?3$>O{gu-w /L&O~/C7t?\j}__O=?Ya[8묳n;vxm /{ڷ?w߳|C_ o6׽ux#&18p _# . Gx[rgrR+fsag?ٷt8.? 忘{};s~% ^01b ft -Qv&pbCGH%iCCkL hZf QF5)5$hqp @]_'},};ؿlSone֎ HAZJG%@+IiR8nX,X%,9EmZ욁]=K`b-&V tqp=z;O*cAH%$h9-v"-%A\VKÖV̭(V];vT&ts\P)@۰JIK_TqrlL 5eC)HbB e{tm~EѴ B^9ԌdЇw??&eōiѯv%ʾ.ƜHX8` IکT&V$Hv\:s^lUB4Vvtk:ЩVC.y@vjG @&bT l(ѩK"(4֥;5,mYH;]Snn^ Db}V 쵪[VjחtJ9_t(qk1 r]"os1Y]\ YZJ(,S+:ks%@"쳪37p覸}g#ouڹ|]7'o߉.8px+^ݻw?p/*܉OK-|+^Sp_{W@sWomlc۸0nXp- GX{-݌6o%Ğo9#ږ1/pV@nIyOZI\@K)Z_dM 6J030ƭ߫N{{?˟t^wC~V6#$@C.As@=l@FFw(r*ɁԛSdY:\Qt[{"^R6IC0B:@U%S/~C (V0a ]s@j)ݦjZ 4EJ.9X%.Q X^E6Kz>};%ZыG HG\$~rNB7g :છ@ SH\HmVODٰ$%*P #%2DBZUSR2! $-kJbKR1R)تH$zIZBOHm)W#)cqaNut3+0ArǦ=ױogb  ^ f ]4C28ͥl;C4Cd)L @ס ('@ІJM>5Ա ZYԹ/@PoX}{yϝ_~۸u|;_?>OAs1O}So9apW?{n-)%p34,"݄$Uj%a1HCib f.[,VI.sSa~M×kOs|oϋϋY檷'Hn+*"LIa)VuXDhF}VNxk*JHCIJؚ\&u5gb"e،~U:ͨ^z*(.'555r1UIkpb΀, )8c1`ɋ>B|CIC aܘ+#57֏%7?/s1;QY-=99f>G\p?q)q6)u$WV4Qo(RRGm#$ i'ʙnpS $ آbHU5UAb.>0-e"PzbVM-ÌnnEʃ[[aґ uӊ'`x@BLHYO$R/$':E i(i(iEez4r(=ҭjȉxX%40@Ja_Ӓ@RoeÊ9'rxi 0.(ԖռX-9e$F%Ax 5hWRenC(}}IXOWG,4}g#ouK鶛 Ř/ebL_6p,//owaoc]vKT .ࢋ.:1N{3'?裏>mquTCe RF+d_↹ɜ2?`Ռa f+&U'uEo} p;ֶo'.yZJZUkZ2NjlZqC6+ԮD*=yoBl1 }C7(JF:U"CI%,BU"bctJ(.@s7zΐlLU_׆~êPkI\)R'$ƒTcf,r`)92'!KIyHY x_ɟo]w}zA EvдH UDYHY"G׈`N7UsرҜy~G~˙FRr fɦʬ?^͔hY5EE:Ⲓ[ѮD2 X tS[V%j),EJJ`k`"d%BSjv\ *I%蘓Zr 5$MYoJM1*nXne{0iku/2R,KM'sss; ȿжt %$U(>#dbeCz5ZJjzuܘjK($ /h)\I$tMRK00Ҏ@V55A-&l¿˿\wukkk1̶~=KK.ٱc5{G'J x?>cmgn+g?٭hm|kbeeeyyO>kMzO=pN;OCzZMzG;;=eN,DAߗcִiQ\cOtDB#:Ԋ?BDHɜB_ Qڡy|GН}V==_PI\t|[6QZ()SYh9j) =I=-CC3Z#mJ10Q}5HHaeN7eIbٵ=ZVdfN оBИVM\:ҵlF=c+ @rv̜-@B)S XΌulX1~&9f`nt참(0Pgd+^beG&nM EhA>XUUiӗ]~?5׬4Ms[%  X"f :"+ZVnƖ2J Љk5@-4$ڋ%%MvI"gyQv@xk"dӊZ1> s 4%BK'25R;F~1Tl\txU"J%rAI`L@ eU\(rPj>x*5`jeMt&BR4F#cÖUK3;sdNhݰ^_@HԞ&-uN]O81{Is KJ?> lvMzIo!mo !ٳ'3?k9#^ S~Y==/| ~m3mlcoטflll\}՛mۮw޹sO9_}b-iF?‰b9>*$' dC񂆺e%@_KXsm"Ja΀!.aGIHft!_ V|ɿǞv1gg9|I-ie $tC{0ZH<'{JZHJ\{βnl>B̋l/Tl-v[jc# Ԟ :( #SsTci ֛k9:ʔEC]R\شYSOH~BHnZUi@?RlJu,\uX""d(A64JK]םe7vdE*4ҵGovw}PRb%֓iul rtXlXղpH= рBHTZ_68ڵi%RϋHO%%FRH%NX^-++I+bvݬ>gyI6m࿅l3;<`))@#uzi5XK5MZb)qIJlFCSKjbUOZ@SCMa}#isb}%Izy/ztS~Cw>R}鲆j"\/@C+:[(3zj^EwG5=~sx#ޱc:묳zAqxss=\~k^׾5Enlc6q;p(+y睗@]N˾Zc ̊=7ecIX)IbrḒشޔ{JR_!-eӊ-_zpS~K~~1g'myhG?kkk(`0/?\ġkÖgH{@^ԳOßmlc6nG92=Hκ>/,;:_EH=0TKJJ-i-$晽J۴jQXvPhn&\<KO|Kny?cqg1YR<+wY!63icnȌnfE!,8IYh)SP @aKRlbՖi0([KtӴ%A/:3]v\%%P ba+aT]n (7=ƍh), x5=* }c% K,=h +%SS5j= fVD*/p9/A!c"0vI[b- e./ 3kaO,, qj!27i>S ԉ"ky"QD) M+ X!CƜZzb=Ik-f˕;"p/6TPHUPK[үl`# JFT‘ơvCKG 23HjGj#i=*,Vu6Ҹso¡M')_1Ȅ۲j= 5itp)Jh#y-)P$zWzrwͭtS+t t9lz=[ornfk ِH$4жs7.̽ڕ"ᑬlv+[2u[,+`~|_=?o3$mlc6Ünt^A,$-+"dJfZfY3dc}_j\.QzêZEf/LX,N*G%ۿzMi/G׸T_'K 4d%VJV%qN_K4ά @ il~Baz1J#+ذH(ғQw\ ')c+;j- XiR1/hHh[&[VJVP#VbͥtM)17+Ďa\YDKӊ35·ndHD4pF$t$(mOp4t;=Ovhm^`f[\;!SS -r +Jrt%а%'V)XIzoKݴ b9r 6;?*a% 3`V:0@X)S 3&]dX\}9%lǦVJ46ܛ])iMB8c1;`z*4H ms-M+ʱS+gV&n7PBOkI ژt=I}$`!&hG'N077߲z# |Dzqfoo| 4n /gMn6wEΝ;}{~_rW5&}/?W;p>r0f;f_d~6bmmmiiwwlE]t)4g?{ߒ@o~kJ1tC!+ %@!ŚhĦytjê- RI$U 7%NrzPwNyv;nIpNvW\XK,$`R`N 4VD2`\-6$Ѐ7VXOARI,uiY%S"H _V A6l̯E[G7WFbF"99HS/(5Q"H8*1g;TB%X֮KDCGHK`2T+ rK\ӦNZ@b/Jvv͌7 <@CM3HGX!nb$逕y5RXTJIFi IfVgn|JVGJ FutX%@WV-i™%-xX-4QE`+*PK.۲h RB!rrTEȡTrje)D=M{>Lu lfE!õu#UK~MsH /ӱH !VpIZb-VHCnYQJEHn\OU[6[vJLB`ASjzXDJf^ FDȌEGWKXPSX8pNf󗎔@s ~k Cmec#O}quy=>禛l3mW]u~;mlc7LJ>!'tw,3+'ɝt'9,v$KKKv⿅^i^|vN7rݢ*+\kI-M d I+ˆQ T%\%BHJ.b~  |;7.muʮjGbCqc>vHt#Fji@-~jEu21ⴧ]-)P'Vpc]oa5\nAN7iV4%80떫Nru)mrK+:ag0ʊ)uj_.s,ZR-L+Fz{beo4 $nZ `Y;/ܴ"g3Q.9<װQ ͦzAbRHn TgOPnj΢iWv:[q[: I$CI 9U(^,_+(ЃLI =1HgX} 4,kr-z$Xέp8.K p1aD:h4$ri!B,R[9gښ_֖}Ng&Gd͟Mu oxKa^uޛenlllll+++;vffx#Jcjx fy i.k5=I7,bkd>Z'emiWmfŏ5ONb5*GkyC~ S'$6L,GY EÁsUc%Vק{@a*` Ԇk=^)y̏;BRMi;/*I9ċ04㨒xش@_bC7j͇j KsU98ЮZŖ5H5sAfB 6I)rcD˯Grl%HKX(lRKM3H+% rŕ&mrC}!KkaO $[֒d~HH.l5B2@[j15!}*`4+tb+ IwT9>ul>QvffDy'K@2j`g`NNԼH$oLnlU2]Ui lӪn+6SmОRb&  l%qdl7,]Uk[Ҽۍw4#:J) Ȧ!BbR%-D+tCJsM^ɫΟ?qfGj~3x xӋF% qq>)O9mlc_ # pfۈ +/TkPʜb!`'Tp˪~-v~I/0L8g6Ήu-oZVݜ@şi,`ю[ !׭:Ƶ-e $9RI6 Q1}INXH[a% F?ޏ S7R=6lnZA@BVbRR$@%i֭d t!ŰXKIj{ReCmGs@!27b5=R4/s FV@Kڭh۲ʡ'HD%ԃU-\v6CRjd5,09qʹ= yoAފΎsT۬$'H-iN'>ZK/'$֗d@,q¡$6ggKSGO`EBH"BL]K߰X@"!Yn)'HieT,Aut h(N@.[O&Lג 9 6^0MYHR81;St=MAAkސM )@H0HC'`fzX.$B$tup=˚1ڬ9uN-kSa3`*۲:G(yIt!7~uͭ(* NXKHڰI_>{‘ 8w9ߵwۯҏ^~_~W\/n~/*"˶m*l[;)43 bl~U9j?BZ<5$@)qAj,7^X92B{z*I*aZՒV4:Y8d#7lLղvG $b%'^Hش]lVd#\G(.)Tߐuj܊ + Yv-+$ShIJĠ/1@o @'[v,.t'@F/?^&AsZsD)$$7˴0KơJ,iuIHN[V ЗTȂJb}Iccd$30/ ,#=UnY\'JBeӤܓ,AP KTφ./ljo,4VTSa~}0GbkTUY+/\Ӑ)K$jږb+Z:"^;?B˥P,!VLzbe>~=ڮhJ/40?fC^Rrm& 7"m4 ښvÙs[)@Z5* ĀD$z@Z͚N7SaG\OVBL6Ovb@IZAk @PH/|{i諍[ng~}!\sǓ875?mmlc?m|SvwyzAMXjbAr2ctNT? nLE_;Jf7p^ ؚ6+bR]ŃyɁ-]CJ)6LUb^eՖPJ%Fj\ծsbK%ȔUÂ\Rj܆"/::R(3c\,A᪶#m 1hG  }N=Iҙ@[9o܊ nL#-jh_P'&􁒻,r lYܘ9'SV[VtBX_| Z^@9:/HO% 4 i }YwrjfĊ6^R )-vgD!="F n`N`YmtНڌ$ej %H RIՋkKASa& D6M>sѮ}SOuY}fH&{ʮ'l6<_s_Glip롋_\ַ$iPR_HrY@c0BXKb[vIjXP#‰pY@~orz 1 V]<ƍ{ږtVXhD%õC5$#ݖSs *oZ2d:' ״C9q&‘/Es #ԪӔ:$AKJ"B3J/&`v _LMYNH, <@Ɂ9*1BjBg۲@m%HD \G$;`)`=h9#VYOxPc!PsS+wA`䊆BlꕒڎkR XLsbeC, r\PK7bbԊ~u+DG1JqIPB\R|6KzbZQ"z0PJ!ijדһa-KRCȕR*_hȩ%̃F7}<*ReJe~N-VZBWKڝzX),$OfDGSoX@-+1;ng>Loͧ=ԓ=>Z8y|I|OC[+m&~^{CϺgЋ>GX9~ܮUWu=|L?|Γr}; g'sNݧG~]O~66qW?{n-qjҀX*2a"T#7kI:I;l,.JFHcŌ67ή䖗s+b_ꑲ:ic_D:%mִQ0P,Q;7 cÍiEO&(Ijb]5}A-ij՞4YK_Nv0Ի1UVt⚾\`Gݲj#U 6?Ҡ,R+ % Č.dl4W wAjMt<!1wkvľBM:+ I9вvԱNTi<A L~JIvWrJ^bC˂ ¹FY& Ȅ3JQ'rLIF={R?^,VH/[06].k$]C7JZU3+s7קj@8*9/aa ;-ZVt6fvf`K!\ѦBʿ̊n~ 1eF z/faQJʍXyzD,t 脕6= ōi%eV)-~;)}CKr䷬%I* ˚'H ;ơg 4,0nVtMw~_|~;>U]g>|O|`؛6ZX]]%6P@U^,YnCbVO# $r @ҚK4-'qoY)MsjK_J \\)ڑvYhZ`@YQGH㲢kV4ʜT9貒U7w` MUm)"dlZ@Zֻ1-MXwpHօڍ ! oh*aAaVI} $/H,4Hmo*1z +uR$@߰ۡa6"d7&?1B,A PKR'T'ȖU7B7LX8X-ɩ4M5g> 44V)]`KZV#<8߲@/6te57%:XO@x XތE)68PŒR ujfrcZOUcԽi0"P[sK0XI*%.i3ҶdОtD/6kjCG)%iBa=JaftbQ @SG j撛sX-j 'M~êVX?5oXu+jBKIcl=8PkY9bRPE.I3U?%@&dY dYڑ *|l}}+v2æG>|Y_]x#x~q8>ne5_O9^և_'?nۋ{8aG\7".>Ǖ;{~wɇlWξWuZwys`uw_1OIo Ouv-/??t>yo2qG6Ý?ݎL?9=]s?O߮K( |/rv&2lc_s9sΗϛWW\qE];]tѕW^y+}PW;[֦(\DL鮉 ˬU*R( }nZ5YԬ:rj#P  Q[jFBeN"KZRulRlI9a㮎KSOB@['l &ʁ*͌nbe-i)Ja"򺹐4fIv+ľDBj=R I=T[V9 }-1L쮣Ω-/'A #df0(4D T@2eO#5:tYG+9ڍ{@l$]v鉜#POŁKiNDʎsEQͤk apH\'֘+1/VK" 5%msR\kn%I9]-%VÖ9,ˮݡ. $2f'/14r5"SvH% ڬh$i((PCI PgVY/ X"%Hܴ129P㊶jk6Wu^ [lU8B]ǒڲ)FcECpeucCK]ְd~pfo 浟qdR $͛nwbfxo~?zk/zn^~ƿ{1[ʐy?Uzի^oWn Uy}SN't'{߽W]/;N8'_u}C>>~צvr`_W8lK. ww]t7O}{g826yï=9w;Χ.CWw7\sC{o}8ٴ{O֍y}wm| #¯=3+f)>;|O9xM3nIq玭ȁ a^,R~4!dUVt~;@/рn9U GrfGWJH$-kf hj i- (½bY%́kSԁX"qN]5O W5pײ[1YĊʌńeR1~UjƱHP`u-coY;QM DX2'5ܾX5O)7"Y JJL xNZ{t4ٚC-ǚM,sВE٤W9lMf+-HK6McOh\,]1%aQsDڹ>k$MC8l_USmFiHu ր"5Fjs뚯WcÎoֺ{Qsß?~q\T@oy`1g]D:'-Ůk}k/mꗶm͚uey{;ϝ̿]?V&`'3 ~Ar߼EvW~+\|хf-mێ6x;[_{bW +ml2 {^qGRUU%yǯnMJs{v2jA[j6snABЂQ hLK&sD*ڤgIdPҢI4G@*eM=:ì?-UW4# ha%w(7Kݘ[Nc>BUhAjSHcN=Uk60kS0>wV_}˷,2kWb"xIK_so{^tw5{黦8|᭟7nGWWo_|oҏ}{r!`'>fw{#m~SGӗWf//kl:w\'쩟`_ux׎m[8勋u߾jG&p'n\t6^6&Z n2Ä۬:$2T[U753s[yk4cu%VI6S2ht$C.eO͏-ԞĒah@.5K j)uѯ)!K;/UG@4KfHg('2 V`,$d uMW6pSuࠩ/94T0pg{ 4@hY $Ih\UԥVi֚JӚ[|nK,ȐBS PK3Q{ x2 +zҤIV%\U",SZ}&5IAz \r*hRpP-J{o3F5hi7=UlLM&= ȑaA>[#$Y 5X-KjJKSskZk0lI&#dС.HT0afC!:6kMKڼ[XA-WPczk$NS=cj&Ij3+iл.@nt=iKy62'b_Ċr_43  #-GZI5yKq]HH}]i]i֚tg!1jH6E5VP u?,Mmw۶ml?A'/8x1:ΈM'_r8RؓO'~?Ͼ녇~س󷣽 KsNɎ\.>wϟ{ uk}:T:{GFyrzMp1wS]ʷ䨟ykw/=Q{3f~5^~'wI=dqq ̰q,O;zړ553GVϽC3g'oz=9ؓ|F-[9~můpV<y~℣o7qƋI}7޽{uw-(ngu֮X+1c#ִlMز>kuJT GS{!՚&R3rcz~ oQO}|xk^rm?O+~&v. `U%y㳺7~/| O|9'?ƛK>Oߵke6 >38v/Jlb?||#7pB+++W^y#s9'Gmx†%7çvZ7݆p}K_e9ι/~gy˂L>V?P| lM{C#҈sVbc^H#ѩ:ð(/,9Ԁ\ W"$*bF+|E3$oEi&IḀ, Je֑@i3#GǙg}QSpIO`Lcc0q.i1 AX~4R V0f4>?X0FK]77ѬБH$,OffKpĪ#lMjk5zlGEOm)xRPĊu; Fґꉭ슃n4`,uÚ9b2bMݚdeymdۑS1 B&-n(@cL*sͻt;hi;XW Z <kd^d!Q=tbYa&%mh.U) 9ѽ1 Rl>4Vi15N)X2BMRkAc21}Fi, 1I@Rymvj=AKZe[V2s)KS[nvZua67`1愀W`$lEG >޴zƖ_Qۿ񬥳~w˯* Z,;:IJ\lR;XN DژkZKS 06LLF Ҷ`fԃ?c2-5!mj>G\rDE 61`jԲG6.:ŷ[_o?GoW ߺ?ch?_0/On{- ?zAhG]vMϾ7]w?}fV&X&6q3xgK/}xbpTg}LKXeX`:.Jle,h19 ƽѭ_,֚S@_BF)l%:Q2v-aj1)|HXe섾4=iؘԐU֘:2hڗ` g(#s '*8/Ӝ1 Nfv%:@9iRVAu2 @Bgh2s6+qY0m`$UGځgP3cWH@hơeknb~lnjLu-``jI5o{D+ce25_,d&/f@)kH\F $ѰŊv[4)Hv u)alМ,e.,JdDr%0'uX+cm25OuՌC+M& GKXIKi:gy x81etĺj)^bjYRVg8L ];K( Їע5I 'z_>p wW\{\ޱbwh.ӓ`-\/7ZzXrͨ-C_)1\Ja-܉|C5$+`R2yhA2FD)blY 䌠X|v[߶m[{@|xk? ;!9o]c1tleS58ZmAKc3'M*/I}1waj~~jy4 j_ )/MaEqY7ZKfk+kb\!=ί֍Ԥ|^}Opq[w;n٩?C1=xV~ on}vתȶq=#=u88˻{?yѦA&x8&6q3x''{>/l+->cʢ5ON3mMk{c>KƁ4=ilsj&%t 5-U&Ii@k\Ӣ+͒u4j:Vꀑ@;bs]]2 -9ѥiF,%Gײ2sS`eҀ$=uH^&njSP]"KՓ+10,"@Iɩ2تj&k ,tA숥eq^aMtqj>e*˴f9iK֘y '$`qNb*͕l{ִQ#  ]yirƌ(NWmʀ lˡIؙ9LM:3H.Z4`48 HIi1<@vX յ)U1crh،Yji9~`F`*HeymnE=~—~Yoy'܅#$Y:I Z0zjc̀ٺu-[s#mcL/k2ti M=..?bho3+?{\K! g'-O\[WkcFP X25)sRȂ#֕fU=IKm9uC;5KY8֚˨R rG׽u?̓AgF51+$o!jc3"-Xw(%CaCܶ׺{Sǝp#6K~[&}ֿ+v毒r5},G%9 qv@!܃G~cM;.pMlb877w;y 7؛xŇ?tcЇ>7~z׻n|데Mzko+1ʕXfTM4'3nwUA27,5N7鑫eY; q$;b .@sia\|N9 -G#h}"&ʉyv hia@SV206XNռݱ&&O#JpWlM̫v7hC-{%yRgתcKi h2?/Uz4wQK$c(LV\.ܮ0,TCAh3fk2kɃ0rCM7AM_1B [f9c2& *nБpK2)ksmm̮ qV# ̦FءUuf4Q5.V(ɒy -'v̰j*suYW>ܚcRa#X|gWzE 'v?48Ҽ`(=*Ȩ%Ck.Sscȩ1jIAWCőIۘT& mIC~}Im&[`/%׆r?/qpL P0~=] 7Ml;}{wGo| b޽29}Og| dNœHe+橑i-Sz|'VhbbP4 %M3ej^JJˎ/$&#-f^ꔥnV06&+Y鼴EyjQ.tׅvON]9ְ;xΖ \c.g̡ 5Ϩ9 j(_" Ԍe49ίh0[y.Jt13T}llmMNWZ=Ð$0Ƽn|a%LT 09M>t|}?[u-?a'}3j9R"9͵ѐkFr)+RKD2jmASZFc.$mLf~5d }irhenYQۯ-H(<51pNZXހ. 0EhvU(cNmMJDNJG*1Y1*P2*xi+_OzE-nG,~Io}K :a9v *ԗ2,ɩ9,c\Ͱf9/~s0<ٯ̇]љ?ί>u{HޣԌ@m\GSc,Jե`)A$pOнi~0xiq9<sx6Mlb9[V4h&]b#SZ4%-TiMJ6l2"c艜:cLƖifz8hc6 heKRowв(y+._}λ.zW"yBvs.c#F֐3ڌD35tS,Ibkj_{b6ɉhFG+j3M8|ldSsa Hh̍-Om5aEUe0 Uִlf2fT ROjha#`L n/}{,nxG>_YY2 ŨUc4FǨ3ZLޡll+*R َ̝}x\ '?VອG|_zV;cM9rZm\Y`e.d RI]P=a`@eWe T:f3DH0 `Z`- ܡF$=i2)hj[VPwѢIkSsj@fdH7v7n[-0û vKq[7^Mlbĭ'p+_dMhMq^@X0K쐕rtjfd@ p 3PXia`4g`P0v%j*=i)(4G{ly 0`tzhsR5Լ(M-aUYUt& Ha3mj~Uڤ˶/ГFDdYh əA=4C,I)aI&=i3Fm MMbǖB0xll; ܺ>e}1-[.ztZi=9 c # sl X'Swݠu-_|Ⓕ|~:C%l_m舌XӬd㼫 =DvVsk׵L^[%@j @$MLXdBXO.1 ̭kgWh.cFMCɪr@ɐ!$d4-XY6bw,*9̧J[s#,_|}>ѡq-]oݽ`&gk=i<5g₄cL x5W-O=.zЂqSu)ҳ/ӭ񁫶e E >o|я\~<[>5gSSMRC[Q@Av:|E)cR }d3br\m>aAB1@qf8/u*%i4|?#f-%:hW!gXr6=-1t0ijtd)9A@ c0<iw\u擾s?kŸ|?s۾wzU/;csgrݲe'͌tA}IfԱ |-{ɴ'm'H;35zh@B~1,6nF&-RƊ,Y.ʤd3$mu#ʒPUK9 {XH4ɞV.ʔ؝hU;i󙷼-{D7ѹMz; >G<R{Zjꛘ0KLe%CtomYeقLSQrȨ:K-cr&-@enyr>02-Ƭ6vc!96Ss#\$1JRl83Z݊f)Mq,yhya&C-IMFG0B%PCQ+=h=N)ein%䰔@2x;d)٦-Hs <ܺKR-E؊gtϵw~(nu#NRߙǽpү#+rF5&ݍd2'umnjː\yRZa5fBt\WL -%yL,K:xt= ƖO4J}_P`Ik C-\hiM. G}jVaU+{O_pOѻh د`ɣ%e0!aMQ?5_c(~(i7ioQ0gHC$ Jm'fFΎ8acT$Nȩ#q>XJnDGO-~5%x"'&+Zl-k%T%62I6d䩳{BKƂ Zdaj~^Zr_/,f@=٪5H`.MzډG'cnkȳ_q!_x ᖙ!26oUן? $^'Έٍ7{׽n3-d&~0طop _÷֭[7p~PDN=g>ۿO=o$:v8/M2`dYؕD;H|;$UrY0i!s$ΩLp(c$iM1=i{J}J,\R]iJƑ}ijH5hcO\E8J& W5o&tdIiC Gs=i iC$A im,lsids"9ѩ`l`%V5Y@ +J}Z:5?`ow-/}}~3w>w'씹Di?,c0͙Rl9-6ƑY Ā:XMmWZ1CL֎-$f,AMJ [s1 =dqUf \k2'l,9&Ud2V꣱G,~8&Ƥ3`ucX0fZXx@' }ejP;%MҐ 95- i̵rjW-6QWCZ!TgKC`#g˿ا 4Ϳzpݎ.}GROSg|.;+CA4rD*ō0zV7j„\IZ5+Zј ;S+&lqԞ 2m9-HC+-|& XޘMHhkZO:k?Om}973Zdl؏N~%@$CˢaVˊG_}E'#Ϙc˟yLϘ{Hy}ɳwZ[= -: H=<#XEG2YjV4kVԆ@_PIʋwZKEj 2Lnu/Q1hfLL:j6QmLҥM E Z+ Ɯ5 &9VRHFZ2*ؑXK,H`b\c2lvrEmM\2@sxsmwïuc?Moқb/}b?2Ù^c?{E&62lO?o%m\=`ǎGq zЃַ<1oM `sxuYc+ ͩa;ƚ&З:G\|,DsC5s)d.Ig86,KƒILf9m-1{qnlٚcoe!Uap}讫!R2 БHKA]4DCinaRRԞ6VׂUhв5dԤ6O$c,ȸ:0fЉIcFQSdXrS3xV%)%$$kᆚ!*SI1C\tlcޟ^-A\G8).g,z2BhIc,U Ѥ@Lc͗7֬d\IjB}D#{taQK@_BObA &ͯO˾4sZiGtR_{/~G;)1᧟ُY|l~kI0GtѸWkuO9hm 盓'O>U@FvI\]r z5ƱRZ%CCFZL-{[@Fi̯Ď$]wv EդllnX7DCNz5TZc 7CH2f];U&*C+h=i[ݱWĮ5Wcc[c*w= C{tODQRI #͍{loN`,\(u!9ܶ-uc?Mo~ ^ދ}C=?O9W?{dEvq&~B&7.#aoh1xgW]uv;o߾}߱=i=,$ue `(+R M<61nq㎴iQZ4ơƹH44OX23 QCƖԧ576ץc1˄SƖ,l&$g#r [?g>s-0/Ɍ d -3@f$PJIEV&csNGaO CWZj*GC4Rck.;g’wN: 83~ġק\9Ӧ9*1SI3mntrq_{oﱥ?_~[`H@J‚A+sIƱʜ4aI⒴6IMM+l (i7&iN$$J9&ezSs#-8VQT;`KH0`b^,Boi јJǵ\c8 G{ИFZj9R gnUs k DRs^l6TNu?Hjf+xdOyPqƽIMlb?Hnyw{ w$l8cO>g=YozӛwM7MJ":S|vm#tNݗ`l!qV jlJ5-͘% &: 3`MPeu0dИTP'! %CT < ]ݚ%ub.kZnd֥nM  4#ii`sB"$g)A "067Լ1IcdaȰ/f93Vc7ˠ%4CVƩI*=[K5U&}i=az4:#r2=eKݏm?~9k[fG/*2X5[QS5\D15Frlnj1 L`101ט >=3` aL=s4ۥ&r\]i ㆖l5i ]mohXӞ۾sCϼVdlu ~j5_BuFlK )Ա/ͽcwg.|(?6cYSRq0Q%ל*5$nu@઺1g\ڀ}ny2(9K0nsڤ+h=X!< aQځHA$@``kBHgg6Ssjh!ɁCRi_Q~͍217f^vQ{bgj~^-2]57Ǧ/!UP\&Se-k+k+=jpf_ M5&6Mlm!yH뿾A'[z?WMzxғg?o| _c9f˛nAIu8묳VO C-V`E2/5qnhyed[26f颸};'ACGT'6R~4["+BfMHٓؓ6 .Hӑ HY0P`&;'uAyR-#PHsRms-2)&[rJbڸW;c-+ڜK0luQfIY:!ʤ1 F$psƌhSu5Tњ q V9ɩ)$' ,bJ+qwiKg,s8s/,}s1׼(OűaYnlnE%2 >C9K! u[9ZL `lrƭ. ؔNe9L\N0/Ns|@P0%Fsjj iCQpBK36]7ƌV`KqjnY$.с+XWij>5qpvHtWMIKuĪrlN˫ۧKj2)I(#,Iz4J2hO‚.sR +v״T0#; :fS3-SkVdJa0 V]W/&MnֺtSMMlb8 6Vn%?x<.x R>X7\v jR't^pʛp}9XW1#*1L,S02hm6_Vj fcPbI:6-}e*06 h-WCØA FHCG&%67SXЎtqʠ˚MLFU4]i6`U hHԹ: %B&p9m  4Z5WZ"*8ROآ']ƌZ$1FlYւ˱;6_8Zp idw/ncNDʤ5:"v?=v;, tu<#GS6S%g``Hg=V5`ؘqި(\rye~j~]Vկiaƾd?2H5'З/?'X7g#.{c>ɏA:]яg%CF`-a6VEsFWEN $a'TF5,H(24[^e6717|e Ju-kRρK6k jƄ05$wk #DP˽7f-lN0'U7mMfMlbͣ{i=}C/]v ݻw?O>=Vۻ.VooVV|`/ jCoߧWTg]08Z!yxv?ZrdGeH(S#js nwyiH w~ejo2E KFG3 gJ׵3|l"Мfԑ4n!$xZ E]+Ig0 pNѥns] &sSs - LCźqNE7MՕCXkVT$u\Ѽ1G֜v]źI+# tDI;P`zPJ(g~YYr?wWwĢJ!  Z@ӘCkhAs#uAu͇jh !&1f.-2ᦎyZaN9+c f ["mjS$2{4O8xg$0A[HIX&_Kj%C ɡ%Z62S55 fɊf+qNmn%3ghb@J'b4@It DOg3/1<4DvjCWcmj&9t~M}m.&Sz8 c*hn_Y4hL"$zvJێ}6W`-bxh76+$ns#Pkw֘凭ݶ׺tSMzCw;V&6ȟn?O]{iI4{G|\YY|2<.tww۲l岫䢯]\xٮqLo.o\ /8K]Ql^z׮n ƾ[67[[&]XX03Yn3[XXK܂qYgyƤLNCEUCJ-LS5IawIqL (:IJ~+PPH[&uN]Ąj9&jgCMx%u 8Lcx|EKM `1s.HZJ3&9Wka@d2đ2M׵4`^ QnY{Z4Gk 0d&#*&m 7| ͜#˦K :5?U?Ld3dĂ `dnd@K^}:On9%4B,@Bt`lU4[< ݱ.5-Ak!Qh]Ɯql25y [\5/9tQy6`,h˱$K2Ѓ6)72ErԫQhsSKZ*EI3.JmؤOIG#sZ슝 Z:,)pN Q=~7mZ7VnIps<_5fMa2|#yЃt3ٽ{wsyxW CY]]}s㽿:޷o[ڲe)[>@̪I縓~=Oi]vpflֆr~=O96+Wb3eZ7U33,k̻[ElVMpW&rn'$ZxW,..n#f$P\u7Ls;(LZȪ+X6|U] seɲ2@ Orβ:2%v 1wm(wGWkɨY0I{ b5|ds9,V5`A+.]L%wekȜ4%cM5Ke@ªanz,vrLԕ.C4kQ2zԦ9*v\)839US$g,N,kޚp4GMj)<`@¢4@Ly6= Xv$nqa^J %:ĔL#x]-O)#jS\1ͺd ȌT ֕8/uΨ&%%:TR9{lr`R'-iɾE qlnw,j16_k@FMLh+kcKS ig5?_Y2W|ܡW?2g3}Z` 9zX_Rlc%p˱H`7KE]N[e$Umѯi:i. 2jpRoLdh@ṕS6i08s5-ZC-jt9UC2jړ̓֗&h֘=u2/͒fѱ橹VE2?1!%`R-dl,HZ40,B:l֚+.qd~]Gp?W`Ώ?/?/y%o|Z?\[&6M|?>яڵKUO?~~O;媪ٳ~關tooYY\*F-0C}AW m`g73 򾉚xy9o x8lVMz'/;/;餓6~x['gW?ht o}nxhMRA2֯d fS'Ӳ2VCj:q4k6"4p䪂mD2hrK`1λڀu``45RUǶ#,L͵tN$UlNmC ) G,:gLz?șe 4_z Mm2Ҕ@֧:X(`2,yКOՒ4c(@kܯ$HTdsNV%:49t8^c.m-UVcYISgGܤ1x/2WCXo%o55浑`qB `enOѢ1H n-2~_X;=㔗qϗq<g,]?.{xfS cR| ZX 'mN[p.HkHv1)1Rؠs#sI Lcڲ`eD\b%Q4S,u`!-$ks-iEeA l"L-4ˠKb]*Bb9֬K&T2XGZGC`} jL"}ՉIkL&C瀥В;8u#/hr_9ih65?V`xxrf_ njR~SzxC{|_FĴs=ScEgK{\8D=/xs}| pUWvi'ڵkqqɆMlb'.> k(=-[,rmmm<O&o|x3nW|{m[^/]uy=MQ|}/RlPү,zo_pmyG_yU.eW_x^ RQA?< !\y問|#9'>sΣjM*9Ǘ?sC3xCr9sO\yyo{Ǟwگmy_~_7IxbG`9R*1B0؉Yq] : ڡ퉶:B23.HS9nb617լ2z ̕:\ROw Zmi)l2j%S|V nCˣ1 ф.ؙjK0<|Vm]}kh4eK.jcQ΂ڡM81WY3zZ4,kKU0-MyHkI!IXۂ T[WZh[rUtKmb3$X#$E^tH}PK*cMA2 0NU^Ki#udj."QV]tUZMuNڃт-D̨f%N5(#nc{ldTw'}y> kZ]f48e4sU7`k=5?KhJyKHZjִZVuZ݂ jh͖5/S*@h)p#I|8h 510I2{5/9l%Vh?R:Kz~lْT)72G̨abҡF0' ԰)dXV8DXHMf8`i xףx'~?ڍ~70oo\A\3z ~{]y9~綝O{a7MlTUuu׭CUo~xƍffqmJëvKvMuҫoyζsb$)/dĜ3.JՕ2I2dĀКSDmL[L 5DXrlټ 2m̷&*F`S$`wLIdLZ[Ҙ̍-h $vł2QrZ NL"݅P}eS%ؗꂡ caI1Z&Iԍ؂42W̍M5&FObHTy0Qb *X50'qNjEګ&}w$jfsW#cwx[ӳ,yaM{3ՐTe &H4ʠ~En(!6e * 4N"S72BH *:U=羾?Ir*HR?~~^kkJ>>/?'3Ϲ9˟|!c=xzpnƍe&t׽ub~{g[| \Ƿ.cѕV; GGӝc+oo0=y4ˍw>ֻA~7nܸz7V2 Pry5 {f Ej7Q:,/CBMrm%؋#hD\ GX\3ȍkK%3(UHm*JްQ8!@H\_ 2 R5e,t5Dž;jҥϊ˹j8s\Xjíǭ™$k6*PK6v;ZV^et ̭?~f%]_24. m.09X:+acZb}j\pν._ϼ${kjν- 3V^yadži8J]4:tźs9Q$e k%6vjC*sG {x(ia7Ko:H oW/?Ỿɶv9W3FE⛷[ZU`T/8;1 .<r;R)L"=XLlƹ ^X?+!os{8f*kf>'Y~n\iZ53)ӔTBMoyBiZ(.q+haiF4UdVpx0.R/^=8G6 i<1pչ7cy-YjX*wyF*wy]n}wVդw>囿o}Gz\[>}?zOBM^=?߿aRt=xZ++/yKʤ^{{{??t~_E|>b{ѕ_~Kv4޼^]nW{:km~ˇ]/ կ~^M~/p 5n~W_ɯЯ<?O{7Ozf&j_x˃n+J2gE( {0O:yB/;wQbᑘTVIFaP6 `VՑ/Dpd 88WIr6ף֒+yFncZ8aWVX7e*Z#yaj%˥tQv%t+sY$,zos5 Uf.^W$ P'w㭏mi~O]n!ޯ@`D=l^z3(| _MňB(-B=[[>_Z+7pګVŭU(GZz$ V1GٍsxU5<Yn-Kם­<)kqIQ尊^5XABYWJȪJB)7έoˣ%A`Ѡ2yҭ< ǀS[Z( j}5`nKBncĢ6L5rRJB|e4pxx- D] yu(+ 5ӜB2f_͂cs:5Tr_:VD +UN;lƃPؖNyHO֊kz@8 %w'q=Pwzv򻼺>3TM.:{x}/<6Ax|}?[N r㝏?pEoJy>Ñia ]^5A*+fګ$[μzU1[xP)NU_s6+kl=lu7yjc4}fRpRƵ$%;+%2_kGbx+f斩"&Ԅ^1kUBٕÁىIЩ64̑0(\Q=Ñ壐dؔHI#EBn:I ekfCKgQ&yJƫ!0ϭKVEFi#$֫^񶲢XFEY37FuzkHPͼ6 *$fڮ"oD!oKaddC:xպpL(aFaUfpv^ eқǽYP2j䆚Zy qTBW"U⹪Z62r\XOQe-sՃ,Zi. ғWeEI>˓>QZB9=,Rd? l^yݩz:2,M _r coN.^0 v2 [)̙PyNRxO >m|=<{Co:}ӋދnG}yvOg8ȟ?o_7yn c+~o{R>ߤ0__ o) _||Mqqq ۗe}sۿ|9-߾x{iģOҳ}y{kpGWg=pLg2&) *So@;܋+&A1@917^֪6F.2WW/Xə3-sԋޔTrpOvcN%9_ <4 @{ºDuPhHM$OJA|+zn>Z* fxkVG?ԫ ;ix`CXO0+5}a]Y3VFY{E/&"NR^M9T3AY0JJd)_*4(LŹ:j-Q^t{D`ʱ{:g|zCnX* VTݖoד_}וB]udJ;A@'7Ldxƍv?G?sz]!g@Meax6Vޖ>#z7~͡45J@ Ukī-me^tU\ƼҖ6 -Trֲ+ݥ="JbJ(sXz8vbC^U6<; !@S2g,.}3Ǣ#3hJ{%BxO /2]lUۋ\³E <,p_4 :PKza ytFX]VjMojx\{qH(R.p9l8׆SH%%@ QR8*8aJ}kK4XnKK1]Q$сR8xI2Ga{FXz28+WmkĩKoZַt;ƫ2beazRrX,ƀ(i*6\}m%3/$9KP"g"K7Ne0֫{&P^ŋx2ϽXl 7bSr9FYOC7c(t}T|%O+^aܛ,V%Vb0h zеgDov6^9w OwciK~}Goe=m>~gGm/~7|7u]ud]uBoͿ999~=JzGpiF\~f"CN^Љ%~Bok {+yb) s)mB&[V6Zy,F7̽xܫcqWΆ9{gX2(X+rC3.s,F koJtVa } In+ǭJcmYUk5g>YzT(i.)lBw)lf6Qv#V 2PF認6b<ް BiMQ(/8O2,KPP]̙KЄiѠ"զUe歌ljj5K6N,H/N03S @j2$bwmT(wTyfbqz=Os)h g6mu5-kSް=0Dh9hW81ЇݰPs3I0O9U=Œ T:ˡo֪捪Aa(,ExHR+e.FMZ˦KiTDZ@ELK~oP* +%libdF*27kUl@U>-Sf1\$Ԑ )d3(Q`POK%I4$AI`wÞ o?!B玚77~'}<5>w~{{p=xzO}^? 1ڶ}An+HnN;e_e_U_;>9_[wdC t*6s^\qLR#Dx\=GXoUeѨAb^p٨Uy=SO7L6͠7¶e:ɓyf% ͥԋŕ7,yhcE\O ݅Blmh}dƈ+@dcY>͓a];ŝOXX{C`j F͉Hí-@7Goy2)1 E4!2~6*E0(nTH"v'ls% μ';eqj9ŒV;aʯO#1ksK)sO ȅz @!{)k VH4-9.iU==B%SuoXb@$Stjf `ʬ9P#xio^fIz͍ono/яd/W_1ϙvo__?/{ӌ7}7}W~,OwݕTwAQj\BӅJr2^GkV렃{h,p8'5"c+MYQ b7ܺz}Tʄe?RU#E_\3(pTaSBXU7f6N lZ FhjmU8X)EXV5xpXmUM8^ ¡X:Wl0#Zڹ/W#"Ir+'/S) b#X ڨn.mI V}ŶSS15@jJ/IYٯ= SfY!['L 쥵BԍܮƭګR(`́u5=J_ 'Myr`A,,͉2IvڍL% U5}FŭB!ˠQl/^K Pb=ºR!O,ʛsK3ZuB*B<s5}Ud.EY;S0X):4_Dy2Fhv/ޚ9@55742_,q4Qк ӹ7WVF0U[y:X6+~`p=)`fd™ ~F֨K+қ P ?OOlv>6}OQs]]+~Y5+߾ ӿHwo'~ng6c=o;p%CŊ,@Uu= +!_F(KqEMJFbQc8g6l(}(2 ;ajj)Ӂsr]c^oֲǒR".'LZX s Ӡ]JN}r-/2E3V dLL%!#v^/]AJ)B$Bp(Ml6=d"@^5o\o 6 1)^\zXd! 6KO86s>7?|hbj b)ɚd'L%WFq)—^xIE4U*phC@,7LLu3zYT]6>;lI,QC[Bhj-$!Bz0Eź>J1P2r诅|`I e2`p9) 0QI+xI"PR,Jl2p:%5l#9GĖ\:ArYZz)fXrШ21VUSua +V|Jx`}0Ʌ(pDhi,l(Mm Юm+Dy\HaFMԁu0Uy<3q2=Z`Iʄ\ӳt•c@sAl%l v;'v׷|3 )%3*{q<eh =@ ŵW=BE%)&3ǹH_zs͠Ry34yqNX q\FFaJ{Xl(zuF9iG-bFY>f.ǼHOzJ~)RZ](=A[޸0JKy ]]. DbEz2X,g,=bm+&5d2rNn=eƁ -s7F$0\P%X'妰# s 80iB }P{޸Pfkb,o f~-t7nKqA@L45u ;Q`ʇqnmXJh(C!ܜ"~w_<#>7~?oZɟS~Oʟw>ГEЏx?ʟxK^{|@C?C꫾έo;w~?~= |<%USkg[ l7ˍa`+ ,KH`lrz,lŵBRT] 7%iW]3oUe%B0}!e[R4-0WPeBhbC\1O8.l,@I1qp%ԃKlU^ yz3NHsomP~ `-E'PbR 2.$xxbp+nFYk*m.6U2*v\ ^^~/l4L#QŖ) vqns3VNd[\R9!@+;Vv#Ԓ5@M/y\:\9WXj6۱W{ ,S8OoyT*: IRq5'ħ+5]}@Z@ݷRCox$5O2.f|4l 5IV17(؋K E1<~hȚ*3[ųF⢥sf [HϠٙ(C 5腁$P#n$`+bq@{+^n +~xj6--Nqzj-+~dGsmTEڮeʛ7B]%۔N`QbkK<1K^\K[EkO81D B.eY+Y'dת`(`~$(el϶5jk-eg& YjBn'^VV[i+%-8u݆9斟!+^aXQkn|kBBh-d@O\ph9.kz POd7>Ћ =7b.lmҌW,$(;ΓG 85s)nv`KΉP^w I2 қ vU3M9V`p*6 SJ(粦oqnh*0\lQDy#e05LKpK<핰[InXA j1P tYñ, ]|#ޚϽ:Tֲ5sBoe(`N`OܮprhnKs vmMmT|v3-2 ko==veعkS̥ N;sup3W^X[YDbjiTF0$L-T`Imĩ,=ycP*#lzW\yQ3"$I(SoOKAA`c 4|-/K p`pP`YFrHeNqqe5rodbP+AO`|-leb\z$0[S/ ΥBɑ"˞Cq&_nb %\5dT{mt͞^<0\b^ؔUL/^XpwW=;"ܷ/??u/ |ӯ?G?=c=>= KKkff3_=ҸRW/so͟Տp>)җ]1w^yS3ތWyr( 4)aS0ar &LSWB%olX-sK@0a]2M+xÔa([+eP\pZ9X:'r,mL9LJAn+DX"}K JUq ɒwڅF`\ejTKPi)xͶFTA0%G@4ДiB2ΑɊ4`a=n. 4OF+s禌 rP$Ydrs1 kN2LM#SZ5rO-)6L¶H,רya^JDfLb 0,] @xS [Tޖ#}`ʠ K¹7j”yԉ>s;fwsYYl+~˷}vxuIDATwץϢMIz%_ӫ.s?{x_ߺs;݇ag=#oy[_+)mwWR?=i_ϟ8SϏ?5Q߇OaWlk2-l(ߙ7@ 9L 5AaS(E;S7"dXļXn^4dUԹҥQh!;)g6kEKYAG6L/Bʅ[lkxC̙*i-RuCQN7K .Yn)Fp3QBK( ٠9x]z}PXCG[%6:ā6]g{GXI3s,tk_hɅ)ْB'L v̡֕}Kjq% Pr{,Z}-Oi-{5t-G֏YVHXv[>&LG֍ -@ ,cOv̒4Q 6[>"y @1sbljo]軼.7^#g'1_׿^7~?ۿ''~O ?=-7~?gm|'+諿{?;|e_ϟxfc=_宯گog?ٯ{˿֭[/{^=w>n_}aUB}z׼{?V N<]zCO[z -,W7[Wm3e`1@M63h(SASk^mV3G+Z%m"lTn2HTXڨd=ěd剭μŝ" +n 8`. -Sa6fq{T͜ĥj&L,ި~Е9kY38H%1Xʲbahyju +f=fOH٤\z2vӘ3_ͫr?9ϙ6Y妛WsiLWo,mz=˰c'//g_g{|@%/yɿ>#?pOO`f<+^//z+^!!o|7{#n_ xᇕ3t[KjL /i-=a5M'8^ BC,G$CK^Pǁ UoXnt 5ްi pa_6sh֫_ 9*TJ)! Fl(Ѡ3/Z6 Wf+x4^?KEյsP|jaN %si'63PE2iǿ$BSJŔcCv:RZ [Zw ʫ0&SLFqajP1O'>Ä9P#BL  32OΫin2L":-T<{y=gck~' | ?\}‡~'{OX^s?C^{~ ?̞+|G@Oco jjr=c=i11>__/ſxGܾ@dCag+} F+|zz~`Pf>a*׷]y+{s=s-xum+ 6*D@{6TC*PJ u qH K0s{Y^:j=d%fna$J5]׳:16刴ԕ @d`8\X!zN^i*]|`j)k̨aʱB^{x,8AWCEKꀸf}˼VL  Y2OG5bv('@# Ln, '%^VlZ g.im2xh f%*f 5%pn>t=[^'X07' #欢PEZQVp() G+jB9s201+"Hmd+ i24#T3-~,bQ>a2\eݠQ؛3gfOmgdyK^M ѿo>9~~W~%?KO>wگ?3gO|P?/xb=㙊og}+_ʏw=~C- (wb2g-$תjFggY{&3Qaq7U&٨+zA`YL*T>Pثco+a3(p Db yDxEo${` ˑ& s$4(X{RU]\{u+0(A`Ḱ+6^ ۢIFШRѹM9V~d݄q5Gƃ3"|8^pA-S)5D~Pz0.ց-U懩q;P'PHB27%M1,\MT{(7es/RY֫A35]byߖ0evouK6<㪦:qaj9vz]U'< ,/E(^Ost`ibc O%?;EhB tS >ʖގYYK42 nZ>PR2ml.j8K$OsW͞^W:{k^_n[^󋯾yٻ{3)wޱo8rhhi<@Ux>iTlU^oT-U*%ya&K& w&{uFz"84ejK55ȶ Z(*w@;y)XS/=h)6]vgbӛ>UtfTCU5#Щ 尹'tl\0e*ZqM`<{^\j=ەPԃ u`;I'kS3SCJd)ވЄ鲍B8mT[q}TL.l=禓:yJ @ErO5ԛ3o j5 d۩Uyf}2Ws?] gqzTIs@uTPA,629DE5f6fIn{A<4\T5"xMhʴtf*8KSO>PWZ 9P g3'XW #xzګ$iP3#unWU,5ӄ)PXTcE?l-_:}fV洒+{

  • {name} ({directory_path})